codemirror.js 1.3 MB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462144631446414465144661446714468144691447014471144721447314474144751447614477144781447914480144811448214483144841448514486144871448814489144901449114492144931449414495144961449714498144991450014501145021450314504145051450614507145081450914510145111451214513145141451514516145171451814519145201452114522145231452414525145261452714528145291453014531145321453314534145351453614537145381453914540145411454214543145441454514546145471454814549145501455114552145531455414555145561455714558145591456014561145621456314564145651456614567145681456914570145711457214573145741457514576145771457814579145801458114582145831458414585145861458714588145891459014591145921459314594145951459614597145981459914600146011460214603146041460514606146071460814609146101461114612146131461414615146161461714618146191462014621146221462314624146251462614627146281462914630146311463214633146341463514636146371463814639146401464114642146431464414645146461464714648146491465014651146521465314654146551465614657146581465914660146611466214663146641466514666146671466814669146701467114672146731467414675146761467714678146791468014681146821468314684146851468614687146881468914690146911469214693146941469514696146971469814699147001470114702147031470414705147061470714708147091471014711147121471314714147151471614717147181471914720147211472214723147241472514726147271472814729147301473114732147331473414735147361473714738147391474014741147421474314744147451474614747147481474914750147511475214753147541475514756147571475814759147601476114762147631476414765147661476714768147691477014771147721477314774147751477614777147781477914780147811478214783147841478514786147871478814789147901479114792147931479414795147961479714798147991480014801148021480314804148051480614807148081480914810148111481214813148141481514816148171481814819148201482114822148231482414825148261482714828148291483014831148321483314834148351483614837148381483914840148411484214843148441484514846148471484814849148501485114852148531485414855148561485714858148591486014861148621486314864148651486614867148681486914870148711487214873148741487514876148771487814879148801488114882148831488414885148861488714888148891489014891148921489314894148951489614897148981489914900149011490214903149041490514906149071490814909149101491114912149131491414915149161491714918149191492014921149221492314924149251492614927149281492914930149311493214933149341493514936149371493814939149401494114942149431494414945149461494714948149491495014951149521495314954149551495614957149581495914960149611496214963149641496514966149671496814969149701497114972149731497414975149761497714978149791498014981149821498314984149851498614987149881498914990149911499214993149941499514996149971499814999150001500115002150031500415005150061500715008150091501015011150121501315014150151501615017150181501915020150211502215023150241502515026150271502815029150301503115032150331503415035150361503715038150391504015041150421504315044150451504615047150481504915050150511505215053150541505515056150571505815059150601506115062150631506415065150661506715068150691507015071150721507315074150751507615077150781507915080150811508215083150841508515086150871508815089150901509115092150931509415095150961509715098150991510015101151021510315104151051510615107151081510915110151111511215113151141511515116151171511815119151201512115122151231512415125151261512715128151291513015131151321513315134151351513615137151381513915140151411514215143151441514515146151471514815149151501515115152151531515415155151561515715158151591516015161151621516315164151651516615167151681516915170151711517215173151741517515176151771517815179151801518115182151831518415185151861518715188151891519015191151921519315194151951519615197151981519915200152011520215203152041520515206152071520815209152101521115212152131521415215152161521715218152191522015221152221522315224152251522615227152281522915230152311523215233152341523515236152371523815239152401524115242152431524415245152461524715248152491525015251152521525315254152551525615257152581525915260152611526215263152641526515266152671526815269152701527115272152731527415275152761527715278152791528015281152821528315284152851528615287152881528915290152911529215293152941529515296152971529815299153001530115302153031530415305153061530715308153091531015311153121531315314153151531615317153181531915320153211532215323153241532515326153271532815329153301533115332153331533415335153361533715338153391534015341153421534315344153451534615347153481534915350153511535215353153541535515356153571535815359153601536115362153631536415365153661536715368153691537015371153721537315374153751537615377153781537915380153811538215383153841538515386153871538815389153901539115392153931539415395153961539715398153991540015401154021540315404154051540615407154081540915410154111541215413154141541515416154171541815419154201542115422154231542415425154261542715428154291543015431154321543315434154351543615437154381543915440154411544215443154441544515446154471544815449154501545115452154531545415455154561545715458154591546015461154621546315464154651546615467154681546915470154711547215473154741547515476154771547815479154801548115482154831548415485154861548715488154891549015491154921549315494154951549615497154981549915500155011550215503155041550515506155071550815509155101551115512155131551415515155161551715518155191552015521155221552315524155251552615527155281552915530155311553215533155341553515536155371553815539155401554115542155431554415545155461554715548155491555015551155521555315554155551555615557155581555915560155611556215563155641556515566155671556815569155701557115572155731557415575155761557715578155791558015581155821558315584155851558615587155881558915590155911559215593155941559515596155971559815599156001560115602156031560415605156061560715608156091561015611156121561315614156151561615617156181561915620156211562215623156241562515626156271562815629156301563115632156331563415635156361563715638156391564015641156421564315644156451564615647156481564915650156511565215653156541565515656156571565815659156601566115662156631566415665156661566715668156691567015671156721567315674156751567615677156781567915680156811568215683156841568515686156871568815689156901569115692156931569415695156961569715698156991570015701157021570315704157051570615707157081570915710157111571215713157141571515716157171571815719157201572115722157231572415725157261572715728157291573015731157321573315734157351573615737157381573915740157411574215743157441574515746157471574815749157501575115752157531575415755157561575715758157591576015761157621576315764157651576615767157681576915770157711577215773157741577515776157771577815779157801578115782157831578415785157861578715788157891579015791157921579315794157951579615797157981579915800158011580215803158041580515806158071580815809158101581115812158131581415815158161581715818158191582015821158221582315824158251582615827158281582915830158311583215833158341583515836158371583815839158401584115842158431584415845158461584715848158491585015851158521585315854158551585615857158581585915860158611586215863158641586515866158671586815869158701587115872158731587415875158761587715878158791588015881158821588315884158851588615887158881588915890158911589215893158941589515896158971589815899159001590115902159031590415905159061590715908159091591015911159121591315914159151591615917159181591915920159211592215923159241592515926159271592815929159301593115932159331593415935159361593715938159391594015941159421594315944159451594615947159481594915950159511595215953159541595515956159571595815959159601596115962159631596415965159661596715968159691597015971159721597315974159751597615977159781597915980159811598215983159841598515986159871598815989159901599115992159931599415995159961599715998159991600016001160021600316004160051600616007160081600916010160111601216013160141601516016160171601816019160201602116022160231602416025160261602716028160291603016031160321603316034160351603616037160381603916040160411604216043160441604516046160471604816049160501605116052160531605416055160561605716058160591606016061160621606316064160651606616067160681606916070160711607216073160741607516076160771607816079160801608116082160831608416085160861608716088160891609016091160921609316094160951609616097160981609916100161011610216103161041610516106161071610816109161101611116112161131611416115161161611716118161191612016121161221612316124161251612616127161281612916130161311613216133161341613516136161371613816139161401614116142161431614416145161461614716148161491615016151161521615316154161551615616157161581615916160161611616216163161641616516166161671616816169161701617116172161731617416175161761617716178161791618016181161821618316184161851618616187161881618916190161911619216193161941619516196161971619816199162001620116202162031620416205162061620716208162091621016211162121621316214162151621616217162181621916220162211622216223162241622516226162271622816229162301623116232162331623416235162361623716238162391624016241162421624316244162451624616247162481624916250162511625216253162541625516256162571625816259162601626116262162631626416265162661626716268162691627016271162721627316274162751627616277162781627916280162811628216283162841628516286162871628816289162901629116292162931629416295162961629716298162991630016301163021630316304163051630616307163081630916310163111631216313163141631516316163171631816319163201632116322163231632416325163261632716328163291633016331163321633316334163351633616337163381633916340163411634216343163441634516346163471634816349163501635116352163531635416355163561635716358163591636016361163621636316364163651636616367163681636916370163711637216373163741637516376163771637816379163801638116382163831638416385163861638716388163891639016391163921639316394163951639616397163981639916400164011640216403164041640516406164071640816409164101641116412164131641416415164161641716418164191642016421164221642316424164251642616427164281642916430164311643216433164341643516436164371643816439164401644116442164431644416445164461644716448164491645016451164521645316454164551645616457164581645916460164611646216463164641646516466164671646816469164701647116472164731647416475164761647716478164791648016481164821648316484164851648616487164881648916490164911649216493164941649516496164971649816499165001650116502165031650416505165061650716508165091651016511165121651316514165151651616517165181651916520165211652216523165241652516526165271652816529165301653116532165331653416535165361653716538165391654016541165421654316544165451654616547165481654916550165511655216553165541655516556165571655816559165601656116562165631656416565165661656716568165691657016571165721657316574165751657616577165781657916580165811658216583165841658516586165871658816589165901659116592165931659416595165961659716598165991660016601166021660316604166051660616607166081660916610166111661216613166141661516616166171661816619166201662116622166231662416625166261662716628166291663016631166321663316634166351663616637166381663916640166411664216643166441664516646166471664816649166501665116652166531665416655166561665716658166591666016661166621666316664166651666616667166681666916670166711667216673166741667516676166771667816679166801668116682166831668416685166861668716688166891669016691166921669316694166951669616697166981669916700167011670216703167041670516706167071670816709167101671116712167131671416715167161671716718167191672016721167221672316724167251672616727167281672916730167311673216733167341673516736167371673816739167401674116742167431674416745167461674716748167491675016751167521675316754167551675616757167581675916760167611676216763167641676516766167671676816769167701677116772167731677416775167761677716778167791678016781167821678316784167851678616787167881678916790167911679216793167941679516796167971679816799168001680116802168031680416805168061680716808168091681016811168121681316814168151681616817168181681916820168211682216823168241682516826168271682816829168301683116832168331683416835168361683716838168391684016841168421684316844168451684616847168481684916850168511685216853168541685516856168571685816859168601686116862168631686416865168661686716868168691687016871168721687316874168751687616877168781687916880168811688216883168841688516886168871688816889168901689116892168931689416895168961689716898168991690016901169021690316904169051690616907169081690916910169111691216913169141691516916169171691816919169201692116922169231692416925169261692716928169291693016931169321693316934169351693616937169381693916940169411694216943169441694516946169471694816949169501695116952169531695416955169561695716958169591696016961169621696316964169651696616967169681696916970169711697216973169741697516976169771697816979169801698116982169831698416985169861698716988169891699016991169921699316994169951699616997169981699917000170011700217003170041700517006170071700817009170101701117012170131701417015170161701717018170191702017021170221702317024170251702617027170281702917030170311703217033170341703517036170371703817039170401704117042170431704417045170461704717048170491705017051170521705317054170551705617057170581705917060170611706217063170641706517066170671706817069170701707117072170731707417075170761707717078170791708017081170821708317084170851708617087170881708917090170911709217093170941709517096170971709817099171001710117102171031710417105171061710717108171091711017111171121711317114171151711617117171181711917120171211712217123171241712517126171271712817129171301713117132171331713417135171361713717138171391714017141171421714317144171451714617147171481714917150171511715217153171541715517156171571715817159171601716117162171631716417165171661716717168171691717017171171721717317174171751717617177171781717917180171811718217183171841718517186171871718817189171901719117192171931719417195171961719717198171991720017201172021720317204172051720617207172081720917210172111721217213172141721517216172171721817219172201722117222172231722417225172261722717228172291723017231172321723317234172351723617237172381723917240172411724217243172441724517246172471724817249172501725117252172531725417255172561725717258172591726017261172621726317264172651726617267172681726917270172711727217273172741727517276172771727817279172801728117282172831728417285172861728717288172891729017291172921729317294172951729617297172981729917300173011730217303173041730517306173071730817309173101731117312173131731417315173161731717318173191732017321173221732317324173251732617327173281732917330173311733217333173341733517336173371733817339173401734117342173431734417345173461734717348173491735017351173521735317354173551735617357173581735917360173611736217363173641736517366173671736817369173701737117372173731737417375173761737717378173791738017381173821738317384173851738617387173881738917390173911739217393173941739517396173971739817399174001740117402174031740417405174061740717408174091741017411174121741317414174151741617417174181741917420174211742217423174241742517426174271742817429174301743117432174331743417435174361743717438174391744017441174421744317444174451744617447174481744917450174511745217453174541745517456174571745817459174601746117462174631746417465174661746717468174691747017471174721747317474174751747617477174781747917480174811748217483174841748517486174871748817489174901749117492174931749417495174961749717498174991750017501175021750317504175051750617507175081750917510175111751217513175141751517516175171751817519175201752117522175231752417525175261752717528175291753017531175321753317534175351753617537175381753917540175411754217543175441754517546175471754817549175501755117552175531755417555175561755717558175591756017561175621756317564175651756617567175681756917570175711757217573175741757517576175771757817579175801758117582175831758417585175861758717588175891759017591175921759317594175951759617597175981759917600176011760217603176041760517606176071760817609176101761117612176131761417615176161761717618176191762017621176221762317624176251762617627176281762917630176311763217633176341763517636176371763817639176401764117642176431764417645176461764717648176491765017651176521765317654176551765617657176581765917660176611766217663176641766517666176671766817669176701767117672176731767417675176761767717678176791768017681176821768317684176851768617687176881768917690176911769217693176941769517696176971769817699177001770117702177031770417705177061770717708177091771017711177121771317714177151771617717177181771917720177211772217723177241772517726177271772817729177301773117732177331773417735177361773717738177391774017741177421774317744177451774617747177481774917750177511775217753177541775517756177571775817759177601776117762177631776417765177661776717768177691777017771177721777317774177751777617777177781777917780177811778217783177841778517786177871778817789177901779117792177931779417795177961779717798177991780017801178021780317804178051780617807178081780917810178111781217813178141781517816178171781817819178201782117822178231782417825178261782717828178291783017831178321783317834178351783617837178381783917840178411784217843178441784517846178471784817849178501785117852178531785417855178561785717858178591786017861178621786317864178651786617867178681786917870178711787217873178741787517876178771787817879178801788117882178831788417885178861788717888178891789017891178921789317894178951789617897178981789917900179011790217903179041790517906179071790817909179101791117912179131791417915179161791717918179191792017921179221792317924179251792617927179281792917930179311793217933179341793517936179371793817939179401794117942179431794417945179461794717948179491795017951179521795317954179551795617957179581795917960179611796217963179641796517966179671796817969179701797117972179731797417975179761797717978179791798017981179821798317984179851798617987179881798917990179911799217993179941799517996179971799817999180001800118002180031800418005180061800718008180091801018011180121801318014180151801618017180181801918020180211802218023180241802518026180271802818029180301803118032180331803418035180361803718038180391804018041180421804318044180451804618047180481804918050180511805218053180541805518056180571805818059180601806118062180631806418065180661806718068180691807018071180721807318074180751807618077180781807918080180811808218083180841808518086180871808818089180901809118092180931809418095180961809718098180991810018101181021810318104181051810618107181081810918110181111811218113181141811518116181171811818119181201812118122181231812418125181261812718128181291813018131181321813318134181351813618137181381813918140181411814218143181441814518146181471814818149181501815118152181531815418155181561815718158181591816018161181621816318164181651816618167181681816918170181711817218173181741817518176181771817818179181801818118182181831818418185181861818718188181891819018191181921819318194181951819618197181981819918200182011820218203182041820518206182071820818209182101821118212182131821418215182161821718218182191822018221182221822318224182251822618227182281822918230182311823218233182341823518236182371823818239182401824118242182431824418245182461824718248182491825018251182521825318254182551825618257182581825918260182611826218263182641826518266182671826818269182701827118272182731827418275182761827718278182791828018281182821828318284182851828618287182881828918290182911829218293182941829518296182971829818299183001830118302183031830418305183061830718308183091831018311183121831318314183151831618317183181831918320183211832218323183241832518326183271832818329183301833118332183331833418335183361833718338183391834018341183421834318344183451834618347183481834918350183511835218353183541835518356183571835818359183601836118362183631836418365183661836718368183691837018371183721837318374183751837618377183781837918380183811838218383183841838518386183871838818389183901839118392183931839418395183961839718398183991840018401184021840318404184051840618407184081840918410184111841218413184141841518416184171841818419184201842118422184231842418425184261842718428184291843018431184321843318434184351843618437184381843918440184411844218443184441844518446184471844818449184501845118452184531845418455184561845718458184591846018461184621846318464184651846618467184681846918470184711847218473184741847518476184771847818479184801848118482184831848418485184861848718488184891849018491184921849318494184951849618497184981849918500185011850218503185041850518506185071850818509185101851118512185131851418515185161851718518185191852018521185221852318524185251852618527185281852918530185311853218533185341853518536185371853818539185401854118542185431854418545185461854718548185491855018551185521855318554185551855618557185581855918560185611856218563185641856518566185671856818569185701857118572185731857418575185761857718578185791858018581185821858318584185851858618587185881858918590185911859218593185941859518596185971859818599186001860118602186031860418605186061860718608186091861018611186121861318614186151861618617186181861918620186211862218623186241862518626186271862818629186301863118632186331863418635186361863718638186391864018641186421864318644186451864618647186481864918650186511865218653186541865518656186571865818659186601866118662186631866418665186661866718668186691867018671186721867318674186751867618677186781867918680186811868218683186841868518686186871868818689186901869118692186931869418695186961869718698186991870018701187021870318704187051870618707187081870918710187111871218713187141871518716187171871818719187201872118722187231872418725187261872718728187291873018731187321873318734187351873618737187381873918740187411874218743187441874518746187471874818749187501875118752187531875418755187561875718758187591876018761187621876318764187651876618767187681876918770187711877218773187741877518776187771877818779187801878118782187831878418785187861878718788187891879018791187921879318794187951879618797187981879918800188011880218803188041880518806188071880818809188101881118812188131881418815188161881718818188191882018821188221882318824188251882618827188281882918830188311883218833188341883518836188371883818839188401884118842188431884418845188461884718848188491885018851188521885318854188551885618857188581885918860188611886218863188641886518866188671886818869188701887118872188731887418875188761887718878188791888018881188821888318884188851888618887188881888918890188911889218893188941889518896188971889818899189001890118902189031890418905189061890718908189091891018911189121891318914189151891618917189181891918920189211892218923189241892518926189271892818929189301893118932189331893418935189361893718938189391894018941189421894318944189451894618947189481894918950189511895218953189541895518956189571895818959189601896118962189631896418965189661896718968189691897018971189721897318974189751897618977189781897918980189811898218983189841898518986189871898818989189901899118992189931899418995189961899718998189991900019001190021900319004190051900619007190081900919010190111901219013190141901519016190171901819019190201902119022190231902419025190261902719028190291903019031190321903319034190351903619037190381903919040190411904219043190441904519046190471904819049190501905119052190531905419055190561905719058190591906019061190621906319064190651906619067190681906919070190711907219073190741907519076190771907819079190801908119082190831908419085190861908719088190891909019091190921909319094190951909619097190981909919100191011910219103191041910519106191071910819109191101911119112191131911419115191161911719118191191912019121191221912319124191251912619127191281912919130191311913219133191341913519136191371913819139191401914119142191431914419145191461914719148191491915019151191521915319154191551915619157191581915919160191611916219163191641916519166191671916819169191701917119172191731917419175191761917719178191791918019181191821918319184191851918619187191881918919190191911919219193191941919519196191971919819199192001920119202192031920419205192061920719208192091921019211192121921319214192151921619217192181921919220192211922219223192241922519226192271922819229192301923119232192331923419235192361923719238192391924019241192421924319244192451924619247192481924919250192511925219253192541925519256192571925819259192601926119262192631926419265192661926719268192691927019271192721927319274192751927619277192781927919280192811928219283192841928519286192871928819289192901929119292192931929419295192961929719298192991930019301193021930319304193051930619307193081930919310193111931219313193141931519316193171931819319193201932119322193231932419325193261932719328193291933019331193321933319334193351933619337193381933919340193411934219343193441934519346193471934819349193501935119352193531935419355193561935719358193591936019361193621936319364193651936619367193681936919370193711937219373193741937519376193771937819379193801938119382193831938419385193861938719388193891939019391193921939319394193951939619397193981939919400194011940219403194041940519406194071940819409194101941119412194131941419415194161941719418194191942019421194221942319424194251942619427194281942919430194311943219433194341943519436194371943819439194401944119442194431944419445194461944719448194491945019451194521945319454194551945619457194581945919460194611946219463194641946519466194671946819469194701947119472194731947419475194761947719478194791948019481194821948319484194851948619487194881948919490194911949219493194941949519496194971949819499195001950119502195031950419505195061950719508195091951019511195121951319514195151951619517195181951919520195211952219523195241952519526195271952819529195301953119532195331953419535195361953719538195391954019541195421954319544195451954619547195481954919550195511955219553195541955519556195571955819559195601956119562195631956419565195661956719568195691957019571195721957319574195751957619577195781957919580195811958219583195841958519586195871958819589195901959119592195931959419595195961959719598195991960019601196021960319604196051960619607196081960919610196111961219613196141961519616196171961819619196201962119622196231962419625196261962719628196291963019631196321963319634196351963619637196381963919640196411964219643196441964519646196471964819649196501965119652196531965419655196561965719658196591966019661196621966319664196651966619667196681966919670196711967219673196741967519676196771967819679196801968119682196831968419685196861968719688196891969019691196921969319694196951969619697196981969919700197011970219703197041970519706197071970819709197101971119712197131971419715197161971719718197191972019721197221972319724197251972619727197281972919730197311973219733197341973519736197371973819739197401974119742197431974419745197461974719748197491975019751197521975319754197551975619757197581975919760197611976219763197641976519766197671976819769197701977119772197731977419775197761977719778197791978019781197821978319784197851978619787197881978919790197911979219793197941979519796197971979819799198001980119802198031980419805198061980719808198091981019811198121981319814198151981619817198181981919820198211982219823198241982519826198271982819829198301983119832198331983419835198361983719838198391984019841198421984319844198451984619847198481984919850198511985219853198541985519856198571985819859198601986119862198631986419865198661986719868198691987019871198721987319874198751987619877198781987919880198811988219883198841988519886198871988819889198901989119892198931989419895198961989719898198991990019901199021990319904199051990619907199081990919910199111991219913199141991519916199171991819919199201992119922199231992419925199261992719928199291993019931199321993319934199351993619937199381993919940199411994219943199441994519946199471994819949199501995119952199531995419955199561995719958199591996019961199621996319964199651996619967199681996919970199711997219973199741997519976199771997819979199801998119982199831998419985199861998719988199891999019991199921999319994199951999619997199981999920000200012000220003200042000520006200072000820009200102001120012200132001420015200162001720018200192002020021200222002320024200252002620027200282002920030200312003220033200342003520036200372003820039200402004120042200432004420045200462004720048200492005020051200522005320054200552005620057200582005920060200612006220063200642006520066200672006820069200702007120072200732007420075200762007720078200792008020081200822008320084200852008620087200882008920090200912009220093200942009520096200972009820099201002010120102201032010420105201062010720108201092011020111201122011320114201152011620117201182011920120201212012220123201242012520126201272012820129201302013120132201332013420135201362013720138201392014020141201422014320144201452014620147201482014920150201512015220153201542015520156201572015820159201602016120162201632016420165201662016720168201692017020171201722017320174201752017620177201782017920180201812018220183201842018520186201872018820189201902019120192201932019420195201962019720198201992020020201202022020320204202052020620207202082020920210202112021220213202142021520216202172021820219202202022120222202232022420225202262022720228202292023020231202322023320234202352023620237202382023920240202412024220243202442024520246202472024820249202502025120252202532025420255202562025720258202592026020261202622026320264202652026620267202682026920270202712027220273202742027520276202772027820279202802028120282202832028420285202862028720288202892029020291202922029320294202952029620297202982029920300203012030220303203042030520306203072030820309203102031120312203132031420315203162031720318203192032020321203222032320324203252032620327203282032920330203312033220333203342033520336203372033820339203402034120342203432034420345203462034720348203492035020351203522035320354203552035620357203582035920360203612036220363203642036520366203672036820369203702037120372203732037420375203762037720378203792038020381203822038320384203852038620387203882038920390203912039220393203942039520396203972039820399204002040120402204032040420405204062040720408204092041020411204122041320414204152041620417204182041920420204212042220423204242042520426204272042820429204302043120432204332043420435204362043720438204392044020441204422044320444204452044620447204482044920450204512045220453204542045520456204572045820459204602046120462204632046420465204662046720468204692047020471204722047320474204752047620477204782047920480204812048220483204842048520486204872048820489204902049120492204932049420495204962049720498204992050020501205022050320504205052050620507205082050920510205112051220513205142051520516205172051820519205202052120522205232052420525205262052720528205292053020531205322053320534205352053620537205382053920540205412054220543205442054520546205472054820549205502055120552205532055420555205562055720558205592056020561205622056320564205652056620567205682056920570205712057220573205742057520576205772057820579205802058120582205832058420585205862058720588205892059020591205922059320594205952059620597205982059920600206012060220603206042060520606206072060820609206102061120612206132061420615206162061720618206192062020621206222062320624206252062620627206282062920630206312063220633206342063520636206372063820639206402064120642206432064420645206462064720648206492065020651206522065320654206552065620657206582065920660206612066220663206642066520666206672066820669206702067120672206732067420675206762067720678206792068020681206822068320684206852068620687206882068920690206912069220693206942069520696206972069820699207002070120702207032070420705207062070720708207092071020711207122071320714207152071620717207182071920720207212072220723207242072520726207272072820729207302073120732207332073420735207362073720738207392074020741207422074320744207452074620747207482074920750207512075220753207542075520756207572075820759207602076120762207632076420765207662076720768207692077020771207722077320774207752077620777207782077920780207812078220783207842078520786207872078820789207902079120792207932079420795207962079720798207992080020801208022080320804208052080620807208082080920810208112081220813208142081520816208172081820819208202082120822208232082420825208262082720828208292083020831208322083320834208352083620837208382083920840208412084220843208442084520846208472084820849208502085120852208532085420855208562085720858208592086020861208622086320864208652086620867208682086920870208712087220873208742087520876208772087820879208802088120882208832088420885208862088720888208892089020891208922089320894208952089620897208982089920900209012090220903209042090520906209072090820909209102091120912209132091420915209162091720918209192092020921209222092320924209252092620927209282092920930209312093220933209342093520936209372093820939209402094120942209432094420945209462094720948209492095020951209522095320954209552095620957209582095920960209612096220963209642096520966209672096820969209702097120972209732097420975209762097720978209792098020981209822098320984209852098620987209882098920990209912099220993209942099520996209972099820999210002100121002210032100421005210062100721008210092101021011210122101321014210152101621017210182101921020210212102221023210242102521026210272102821029210302103121032210332103421035210362103721038210392104021041210422104321044210452104621047210482104921050210512105221053210542105521056210572105821059210602106121062210632106421065210662106721068210692107021071210722107321074210752107621077210782107921080210812108221083210842108521086210872108821089210902109121092210932109421095210962109721098210992110021101211022110321104211052110621107211082110921110211112111221113211142111521116211172111821119211202112121122211232112421125211262112721128211292113021131211322113321134211352113621137211382113921140211412114221143211442114521146211472114821149211502115121152211532115421155211562115721158211592116021161211622116321164211652116621167211682116921170211712117221173211742117521176211772117821179211802118121182211832118421185211862118721188211892119021191211922119321194211952119621197211982119921200212012120221203212042120521206212072120821209212102121121212212132121421215212162121721218212192122021221212222122321224212252122621227212282122921230212312123221233212342123521236212372123821239212402124121242212432124421245212462124721248212492125021251212522125321254212552125621257212582125921260212612126221263212642126521266212672126821269212702127121272212732127421275212762127721278212792128021281212822128321284212852128621287212882128921290212912129221293212942129521296212972129821299213002130121302213032130421305213062130721308213092131021311213122131321314213152131621317213182131921320213212132221323213242132521326213272132821329213302133121332213332133421335213362133721338213392134021341213422134321344213452134621347213482134921350213512135221353213542135521356213572135821359213602136121362213632136421365213662136721368213692137021371213722137321374213752137621377213782137921380213812138221383213842138521386213872138821389213902139121392213932139421395213962139721398213992140021401214022140321404214052140621407214082140921410214112141221413214142141521416214172141821419214202142121422214232142421425214262142721428214292143021431214322143321434214352143621437214382143921440214412144221443214442144521446214472144821449214502145121452214532145421455214562145721458214592146021461214622146321464214652146621467214682146921470214712147221473214742147521476214772147821479214802148121482214832148421485214862148721488214892149021491214922149321494214952149621497214982149921500215012150221503215042150521506215072150821509215102151121512215132151421515215162151721518215192152021521215222152321524215252152621527215282152921530215312153221533215342153521536215372153821539215402154121542215432154421545215462154721548215492155021551215522155321554215552155621557215582155921560215612156221563215642156521566215672156821569215702157121572215732157421575215762157721578215792158021581215822158321584215852158621587215882158921590215912159221593215942159521596215972159821599216002160121602216032160421605216062160721608216092161021611216122161321614216152161621617216182161921620216212162221623216242162521626216272162821629216302163121632216332163421635216362163721638216392164021641216422164321644216452164621647216482164921650216512165221653216542165521656216572165821659216602166121662216632166421665216662166721668216692167021671216722167321674216752167621677216782167921680216812168221683216842168521686216872168821689216902169121692216932169421695216962169721698216992170021701217022170321704217052170621707217082170921710217112171221713217142171521716217172171821719217202172121722217232172421725217262172721728217292173021731217322173321734217352173621737217382173921740217412174221743217442174521746217472174821749217502175121752217532175421755217562175721758217592176021761217622176321764217652176621767217682176921770217712177221773217742177521776217772177821779217802178121782217832178421785217862178721788217892179021791217922179321794217952179621797217982179921800218012180221803218042180521806218072180821809218102181121812218132181421815218162181721818218192182021821218222182321824218252182621827218282182921830218312183221833218342183521836218372183821839218402184121842218432184421845218462184721848218492185021851218522185321854218552185621857218582185921860218612186221863218642186521866218672186821869218702187121872218732187421875218762187721878218792188021881218822188321884218852188621887218882188921890218912189221893218942189521896218972189821899219002190121902219032190421905219062190721908219092191021911219122191321914219152191621917219182191921920219212192221923219242192521926219272192821929219302193121932219332193421935219362193721938219392194021941219422194321944219452194621947219482194921950219512195221953219542195521956219572195821959219602196121962219632196421965219662196721968219692197021971219722197321974219752197621977219782197921980219812198221983219842198521986219872198821989219902199121992219932199421995219962199721998219992200022001220022200322004220052200622007220082200922010220112201222013220142201522016220172201822019220202202122022220232202422025220262202722028220292203022031220322203322034220352203622037220382203922040220412204222043220442204522046220472204822049220502205122052220532205422055220562205722058220592206022061220622206322064220652206622067220682206922070220712207222073220742207522076220772207822079220802208122082220832208422085220862208722088220892209022091220922209322094220952209622097220982209922100221012210222103221042210522106221072210822109221102211122112221132211422115221162211722118221192212022121221222212322124221252212622127221282212922130221312213222133221342213522136221372213822139221402214122142221432214422145221462214722148221492215022151221522215322154221552215622157221582215922160221612216222163221642216522166221672216822169221702217122172221732217422175221762217722178221792218022181221822218322184221852218622187221882218922190221912219222193221942219522196221972219822199222002220122202222032220422205222062220722208222092221022211222122221322214222152221622217222182221922220222212222222223222242222522226222272222822229222302223122232222332223422235222362223722238222392224022241222422224322244222452224622247222482224922250222512225222253222542225522256222572225822259222602226122262222632226422265222662226722268222692227022271222722227322274222752227622277222782227922280222812228222283222842228522286222872228822289222902229122292222932229422295222962229722298222992230022301223022230322304223052230622307223082230922310223112231222313223142231522316223172231822319223202232122322223232232422325223262232722328223292233022331223322233322334223352233622337223382233922340223412234222343223442234522346223472234822349223502235122352223532235422355223562235722358223592236022361223622236322364223652236622367223682236922370223712237222373223742237522376223772237822379223802238122382223832238422385223862238722388223892239022391223922239322394223952239622397223982239922400224012240222403224042240522406224072240822409224102241122412224132241422415224162241722418224192242022421224222242322424224252242622427
  1. ;(function() {
  2. 'use strict'
  3. !(function(e) {
  4. ;('object' != typeof exports || 'undefined' == typeof module) && 'function' == typeof define && define.amd ? define(e) : e()
  5. })(function() {
  6. function e(n) {
  7. var t = this.constructor
  8. return this.then(
  9. function(e) {
  10. return t.resolve(n()).then(function() {
  11. return e
  12. })
  13. },
  14. function(e) {
  15. return t.resolve(n()).then(function() {
  16. return t.reject(e)
  17. })
  18. }
  19. )
  20. }
  21. var n = setTimeout
  22. function a(e) {
  23. return e && 'undefined' != typeof e.length
  24. }
  25. function o() {}
  26. function i(e) {
  27. if (!(this instanceof i)) throw new TypeError('Promises must be constructed via new')
  28. if ('function' != typeof e) throw new TypeError('not a function')
  29. ;(this._state = 0), (this._handled = !1), (this._value = undefined), (this._deferreds = []), s(e, this)
  30. }
  31. function r(o, r) {
  32. for (; 3 === o._state; ) o = o._value
  33. 0 !== o._state
  34. ? ((o._handled = !0),
  35. i._immediateFn(function() {
  36. var e = 1 === o._state ? r.onFulfilled : r.onRejected
  37. if (null !== e) {
  38. var n
  39. try {
  40. n = e(o._value)
  41. } catch (t) {
  42. return void u(r.promise, t)
  43. }
  44. f(r.promise, n)
  45. } else (1 === o._state ? f : u)(r.promise, o._value)
  46. }))
  47. : o._deferreds.push(r)
  48. }
  49. function f(e, n) {
  50. try {
  51. if (n === e) throw new TypeError('A promise cannot be resolved with itself.')
  52. if (n && ('object' == typeof n || 'function' == typeof n)) {
  53. var t = n.then
  54. if (n instanceof i) return (e._state = 3), (e._value = n), void c(e)
  55. if ('function' == typeof t)
  56. return void s(
  57. (function o(e, n) {
  58. return function() {
  59. e.apply(n, arguments)
  60. }
  61. })(t, n),
  62. e
  63. )
  64. }
  65. ;(e._state = 1), (e._value = n), c(e)
  66. } catch (r) {
  67. u(e, r)
  68. }
  69. }
  70. function u(e, n) {
  71. ;(e._state = 2), (e._value = n), c(e)
  72. }
  73. function c(e) {
  74. 2 === e._state &&
  75. 0 === e._deferreds.length &&
  76. i._immediateFn(function() {
  77. e._handled || i._unhandledRejectionFn(e._value)
  78. })
  79. for (var n = 0, t = e._deferreds.length; n < t; n++) r(e, e._deferreds[n])
  80. e._deferreds = null
  81. }
  82. function l(e, n, t) {
  83. ;(this.onFulfilled = 'function' == typeof e ? e : null), (this.onRejected = 'function' == typeof n ? n : null), (this.promise = t)
  84. }
  85. function s(e, n) {
  86. var t = !1
  87. try {
  88. e(
  89. function(e) {
  90. t || ((t = !0), f(n, e))
  91. },
  92. function(e) {
  93. t || ((t = !0), u(n, e))
  94. }
  95. )
  96. } catch (o) {
  97. if (t) return
  98. ;(t = !0), u(n, o)
  99. }
  100. }
  101. ;(i.prototype['catch'] = function(e) {
  102. return this.then(null, e)
  103. }),
  104. (i.prototype.then = function(e, n) {
  105. var t = new this.constructor(o)
  106. return r(this, new l(e, n, t)), t
  107. }),
  108. (i.prototype['finally'] = e),
  109. (i.all = function(n) {
  110. return new i(function(r, i) {
  111. if (!a(n)) return i(new TypeError('Promise.all accepts an array'))
  112. var f = Array.prototype.slice.call(n)
  113. if (0 === f.length) return r([])
  114. var u = f.length
  115. function c(n, e) {
  116. try {
  117. if (e && ('object' == typeof e || 'function' == typeof e)) {
  118. var t = e.then
  119. if ('function' == typeof t)
  120. return void t.call(
  121. e,
  122. function(e) {
  123. c(n, e)
  124. },
  125. i
  126. )
  127. }
  128. ;(f[n] = e), 0 == --u && r(f)
  129. } catch (o) {
  130. i(o)
  131. }
  132. }
  133. for (var e = 0; e < f.length; e++) c(e, f[e])
  134. })
  135. }),
  136. (i.resolve = function(n) {
  137. return n && 'object' == typeof n && n.constructor === i
  138. ? n
  139. : new i(function(e) {
  140. e(n)
  141. })
  142. }),
  143. (i.reject = function(t) {
  144. return new i(function(e, n) {
  145. n(t)
  146. })
  147. }),
  148. (i.race = function(r) {
  149. return new i(function(e, n) {
  150. if (!a(r)) return n(new TypeError('Promise.race accepts an array'))
  151. for (var t = 0, o = r.length; t < o; t++) i.resolve(r[t]).then(e, n)
  152. })
  153. }),
  154. (i._immediateFn =
  155. 'function' == typeof setImmediate
  156. ? function(e) {
  157. setImmediate(e)
  158. }
  159. : function(e) {
  160. n(e, 0)
  161. }),
  162. (i._unhandledRejectionFn = function(e) {
  163. void 0 !== console && console && console.warn('Possible Unhandled Promise Rejection:', e)
  164. })
  165. var t = (function() {
  166. if ('undefined' != typeof self) return self
  167. if ('undefined' != typeof window) return window
  168. if ('undefined' != typeof global) return global
  169. throw Error('unable to locate global object')
  170. })()
  171. 'function' != typeof t.Promise ? (t.Promise = i) : t.Promise.prototype['finally'] || (t.Promise.prototype['finally'] = e)
  172. })
  173. 'function' != typeof Object.assign &&
  174. Object.defineProperty(Object, 'assign', {
  175. value: function(e, t) {
  176. if (null == e) throw new TypeError('Cannot convert undefined or null to object')
  177. for (var n = Object(e), r = 1; r < arguments.length; r++) {
  178. var o = arguments[r]
  179. if (null != o) for (var c in o) Object.prototype.hasOwnProperty.call(o, c) && (n[c] = o[c])
  180. }
  181. return n
  182. },
  183. writable: !0,
  184. configurable: !0
  185. })
  186. ;[Element.prototype, CharacterData.prototype, DocumentType.prototype].forEach(function(e) {
  187. e.hasOwnProperty('remove') ||
  188. Object.defineProperty(e, 'remove', {
  189. configurable: !0,
  190. enumerable: !0,
  191. writable: !0,
  192. value: function() {
  193. null !== this.parentNode && this.parentNode.removeChild(this)
  194. }
  195. })
  196. })
  197. let extend = 'lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o'
  198. .split(',')
  199. .map(s => (s ? parseInt(s, 36) : 1))
  200. for (let i = 1; i < extend.length; i++) extend[i] += extend[i - 1]
  201. function isExtendingChar(code) {
  202. for (let i = 1; i < extend.length; i += 2) if (extend[i] > code) return extend[i - 1] <= code
  203. return false
  204. }
  205. function isRegionalIndicator(code) {
  206. return code >= 0x1f1e6 && code <= 0x1f1ff
  207. }
  208. const ZWJ = 0x200d
  209. function findClusterBreak(str, pos, forward = true) {
  210. return (forward ? nextClusterBreak : prevClusterBreak)(str, pos)
  211. }
  212. function nextClusterBreak(str, pos) {
  213. if (pos == str.length) return pos
  214. if (pos && surrogateLow(str.charCodeAt(pos)) && surrogateHigh(str.charCodeAt(pos - 1))) pos--
  215. let prev = codePointAt(str, pos)
  216. pos += codePointSize(prev)
  217. while (pos < str.length) {
  218. let next = codePointAt(str, pos)
  219. if (prev == ZWJ || next == ZWJ || isExtendingChar(next)) {
  220. pos += codePointSize(next)
  221. prev = next
  222. } else if (isRegionalIndicator(next)) {
  223. let countBefore = 0,
  224. i = pos - 2
  225. while (i >= 0 && isRegionalIndicator(codePointAt(str, i))) {
  226. countBefore++
  227. i -= 2
  228. }
  229. if (countBefore % 2 == 0) break
  230. else pos += 2
  231. } else {
  232. break
  233. }
  234. }
  235. return pos
  236. }
  237. function prevClusterBreak(str, pos) {
  238. while (pos > 0) {
  239. let found = nextClusterBreak(str, pos - 2)
  240. if (found < pos) return found
  241. pos--
  242. }
  243. return 0
  244. }
  245. function surrogateLow(ch) {
  246. return ch >= 0xdc00 && ch < 0xe000
  247. }
  248. function surrogateHigh(ch) {
  249. return ch >= 0xd800 && ch < 0xdc00
  250. }
  251. function codePointAt(str, pos) {
  252. let code0 = str.charCodeAt(pos)
  253. if (!surrogateHigh(code0) || pos + 1 == str.length) return code0
  254. let code1 = str.charCodeAt(pos + 1)
  255. if (!surrogateLow(code1)) return code0
  256. return ((code0 - 0xd800) << 10) + (code1 - 0xdc00) + 0x10000
  257. }
  258. function fromCodePoint(code) {
  259. if (code <= 0xffff) return String.fromCharCode(code)
  260. code -= 0x10000
  261. return String.fromCharCode((code >> 10) + 0xd800, (code & 1023) + 0xdc00)
  262. }
  263. function codePointSize(code) {
  264. return code < 0x10000 ? 1 : 2
  265. }
  266. function countColumn(string, n, tabSize) {
  267. for (let i = 0; i < string.length; ) {
  268. if (string.charCodeAt(i) == 9) {
  269. n += tabSize - (n % tabSize)
  270. i++
  271. } else {
  272. n++
  273. i = findClusterBreak(string, i)
  274. }
  275. }
  276. return n
  277. }
  278. function findColumn(string, n, col, tabSize) {
  279. for (let i = 0; i < string.length; ) {
  280. if (n >= col) return { offset: i, leftOver: 0 }
  281. n += string.charCodeAt(i) == 9 ? tabSize - (n % tabSize) : 1
  282. i = findClusterBreak(string, i)
  283. }
  284. return { offset: string.length, leftOver: col - n }
  285. }
  286. class Text {
  287. constructor() {}
  288. lineAt(pos) {
  289. if (pos < 0 || pos > this.length) throw new RangeError(`Invalid position ${pos} in document of length ${this.length}`)
  290. return this.lineInner(pos, false, 1, 0)
  291. }
  292. line(n) {
  293. if (n < 1 || n > this.lines) throw new RangeError(`Invalid line number ${n} in ${this.lines}-line document`)
  294. return this.lineInner(n, true, 1, 0)
  295. }
  296. replace(from, to, text) {
  297. let parts = []
  298. this.decompose(0, from, parts, 2)
  299. if (text.length) text.decompose(0, text.length, parts, 1 | 2)
  300. this.decompose(to, this.length, parts, 1)
  301. return TextNode.from(parts, this.length - (to - from) + text.length)
  302. }
  303. append(other) {
  304. return this.replace(this.length, this.length, other)
  305. }
  306. slice(from, to = this.length) {
  307. let parts = []
  308. this.decompose(from, to, parts, 0)
  309. return TextNode.from(parts, to - from)
  310. }
  311. eq(other) {
  312. if (other == this) return true
  313. if (other.length != this.length || other.lines != this.lines) return false
  314. let a = new RawTextCursor(this),
  315. b = new RawTextCursor(other)
  316. for (;;) {
  317. a.next()
  318. b.next()
  319. if (a.lineBreak != b.lineBreak || a.done != b.done || a.value != b.value) return false
  320. if (a.done) return true
  321. }
  322. }
  323. iter(dir = 1) {
  324. return new RawTextCursor(this, dir)
  325. }
  326. iterRange(from, to = this.length) {
  327. return new PartialTextCursor(this, from, to)
  328. }
  329. toString() {
  330. return this.sliceString(0)
  331. }
  332. toJSON() {
  333. let lines = []
  334. this.flatten(lines)
  335. return lines
  336. }
  337. static of(text) {
  338. if (text.length == 0) throw new RangeError('A document must have at least one line')
  339. if (text.length == 1 && !text[0]) return Text.empty
  340. return text.length <= 32 ? new TextLeaf(text) : TextNode.from(TextLeaf.split(text, []))
  341. }
  342. }
  343. if (typeof Symbol != 'undefined')
  344. Text.prototype[Symbol.iterator] = function() {
  345. return this.iter()
  346. }
  347. class TextLeaf extends Text {
  348. constructor(text, length = textLength(text)) {
  349. super()
  350. this.text = text
  351. this.length = length
  352. }
  353. get lines() {
  354. return this.text.length
  355. }
  356. get children() {
  357. return null
  358. }
  359. lineInner(target, isLine, line, offset) {
  360. for (let i = 0; ; i++) {
  361. let string = this.text[i],
  362. end = offset + string.length
  363. if ((isLine ? line : end) >= target) return new Line$1(offset, end, line, string)
  364. offset = end + 1
  365. line++
  366. }
  367. }
  368. decompose(from, to, target, open) {
  369. let text = from <= 0 && to >= this.length ? this : new TextLeaf(sliceText(this.text, from, to), Math.min(to, this.length) - Math.max(0, from))
  370. if (open & 1) {
  371. let prev = target.pop()
  372. let joined = appendText(text.text, prev.text.slice(), 0, text.length)
  373. if (joined.length <= 32) {
  374. target.push(new TextLeaf(joined, prev.length + text.length))
  375. } else {
  376. let mid = joined.length >> 1
  377. target.push(new TextLeaf(joined.slice(0, mid)), new TextLeaf(joined.slice(mid)))
  378. }
  379. } else {
  380. target.push(text)
  381. }
  382. }
  383. replace(from, to, text) {
  384. if (!(text instanceof TextLeaf)) return super.replace(from, to, text)
  385. let lines = appendText(this.text, appendText(text.text, sliceText(this.text, 0, from)), to)
  386. let newLen = this.length + text.length - (to - from)
  387. if (lines.length <= 32) return new TextLeaf(lines, newLen)
  388. return TextNode.from(TextLeaf.split(lines, []), newLen)
  389. }
  390. sliceString(from, to = this.length, lineSep = '\n') {
  391. let result = ''
  392. for (let pos = 0, i = 0; pos <= to && i < this.text.length; i++) {
  393. let line = this.text[i],
  394. end = pos + line.length
  395. if (pos > from && i) result += lineSep
  396. if (from < end && to > pos) result += line.slice(Math.max(0, from - pos), to - pos)
  397. pos = end + 1
  398. }
  399. return result
  400. }
  401. flatten(target) {
  402. for (let _i = 0, _this$text = this.text, _length = _this$text.length; _i < _length; _i++) {
  403. let line = _this$text[_i]
  404. target.push(line)
  405. }
  406. }
  407. static split(text, target) {
  408. let part = [],
  409. len = -1
  410. for (let _i2 = 0, _length2 = text.length; _i2 < _length2; _i2++) {
  411. let line = text[_i2]
  412. part.push(line)
  413. len += line.length + 1
  414. if (part.length == 32) {
  415. target.push(new TextLeaf(part, len))
  416. part = []
  417. len = -1
  418. }
  419. }
  420. if (len > -1) target.push(new TextLeaf(part, len))
  421. return target
  422. }
  423. }
  424. class TextNode extends Text {
  425. constructor(children, length) {
  426. super()
  427. this.children = children
  428. this.length = length
  429. this.lines = 0
  430. for (let _i3 = 0, _length3 = children.length; _i3 < _length3; _i3++) {
  431. let child = children[_i3]
  432. this.lines += child.lines
  433. }
  434. }
  435. lineInner(target, isLine, line, offset) {
  436. for (let i = 0; ; i++) {
  437. let child = this.children[i],
  438. end = offset + child.length,
  439. endLine = line + child.lines - 1
  440. if ((isLine ? endLine : end) >= target) return child.lineInner(target, isLine, line, offset)
  441. offset = end + 1
  442. line = endLine + 1
  443. }
  444. }
  445. decompose(from, to, target, open) {
  446. for (let i = 0, pos = 0; pos <= to && i < this.children.length; i++) {
  447. let child = this.children[i],
  448. end = pos + child.length
  449. if (from <= end && to >= pos) {
  450. let childOpen = open & ((pos <= from ? 1 : 0) | (end >= to ? 2 : 0))
  451. if (pos >= from && end <= to && !childOpen) target.push(child)
  452. else child.decompose(from - pos, to - pos, target, childOpen)
  453. }
  454. pos = end + 1
  455. }
  456. }
  457. replace(from, to, text) {
  458. if (text.lines < this.lines)
  459. for (let i = 0, pos = 0; i < this.children.length; i++) {
  460. let child = this.children[i],
  461. end = pos + child.length
  462. if (from >= pos && to <= end) {
  463. let updated = child.replace(from - pos, to - pos, text)
  464. let totalLines = this.lines - child.lines + updated.lines
  465. if (updated.lines < totalLines >> (5 - 1) && updated.lines > totalLines >> (5 + 1)) {
  466. let copy = this.children.slice()
  467. copy[i] = updated
  468. return new TextNode(copy, this.length - (to - from) + text.length)
  469. }
  470. return super.replace(pos, end, updated)
  471. }
  472. pos = end + 1
  473. }
  474. return super.replace(from, to, text)
  475. }
  476. sliceString(from, to = this.length, lineSep = '\n') {
  477. let result = ''
  478. for (let i = 0, pos = 0; i < this.children.length && pos <= to; i++) {
  479. let child = this.children[i],
  480. end = pos + child.length
  481. if (pos > from && i) result += lineSep
  482. if (from < end && to > pos) result += child.sliceString(from - pos, to - pos, lineSep)
  483. pos = end + 1
  484. }
  485. return result
  486. }
  487. flatten(target) {
  488. for (let _i4 = 0, _this$children = this.children, _length4 = _this$children.length; _i4 < _length4; _i4++) {
  489. let child = _this$children[_i4]
  490. child.flatten(target)
  491. }
  492. }
  493. static from(children, length = children.reduce((l, ch) => l + ch.length + 1, -1)) {
  494. let lines = 0
  495. for (let _i5 = 0, _length5 = children.length; _i5 < _length5; _i5++) {
  496. let ch = children[_i5]
  497. lines += ch.lines
  498. }
  499. if (lines < 32) {
  500. let flat = []
  501. for (let _i6 = 0, _length6 = children.length; _i6 < _length6; _i6++) {
  502. let ch = children[_i6]
  503. ch.flatten(flat)
  504. }
  505. return new TextLeaf(flat, length)
  506. }
  507. let chunk = Math.max(32, lines >> 5),
  508. maxChunk = chunk << 1,
  509. minChunk = chunk >> 1
  510. let chunked = [],
  511. currentLines = 0,
  512. currentLen = -1,
  513. currentChunk = []
  514. function add(child) {
  515. let last
  516. if (child.lines > maxChunk && child instanceof TextNode) {
  517. for (let _i7 = 0, _child$children = child.children, _length7 = _child$children.length; _i7 < _length7; _i7++) {
  518. let node = _child$children[_i7]
  519. add(node)
  520. }
  521. } else if (child.lines > minChunk && (currentLines > minChunk || !currentLines)) {
  522. flush()
  523. chunked.push(child)
  524. } else if (child instanceof TextLeaf && currentLines && (last = currentChunk[currentChunk.length - 1]) instanceof TextLeaf && child.lines + last.lines <= 32) {
  525. currentLines += child.lines
  526. currentLen += child.length + 1
  527. currentChunk[currentChunk.length - 1] = new TextLeaf(last.text.concat(child.text), last.length + 1 + child.length)
  528. } else {
  529. if (currentLines + child.lines > chunk) flush()
  530. currentLines += child.lines
  531. currentLen += child.length + 1
  532. currentChunk.push(child)
  533. }
  534. }
  535. function flush() {
  536. if (currentLines == 0) return
  537. chunked.push(currentChunk.length == 1 ? currentChunk[0] : TextNode.from(currentChunk, currentLen))
  538. currentLen = -1
  539. currentLines = currentChunk.length = 0
  540. }
  541. for (let _i8 = 0, _length8 = children.length; _i8 < _length8; _i8++) {
  542. let child = children[_i8]
  543. add(child)
  544. }
  545. flush()
  546. return chunked.length == 1 ? chunked[0] : new TextNode(chunked, length)
  547. }
  548. }
  549. Text.empty = new TextLeaf([''], 0)
  550. function textLength(text) {
  551. let length = -1
  552. for (let _i9 = 0, _length9 = text.length; _i9 < _length9; _i9++) {
  553. let line = text[_i9]
  554. length += line.length + 1
  555. }
  556. return length
  557. }
  558. function appendText(text, target, from = 0, to = 1e9) {
  559. for (let pos = 0, i = 0, first = true; i < text.length && pos <= to; i++) {
  560. let line = text[i],
  561. end = pos + line.length
  562. if (end >= from) {
  563. if (end > to) line = line.slice(0, to - pos)
  564. if (pos < from) line = line.slice(from - pos)
  565. if (first) {
  566. target[target.length - 1] += line
  567. first = false
  568. } else target.push(line)
  569. }
  570. pos = end + 1
  571. }
  572. return target
  573. }
  574. function sliceText(text, from, to) {
  575. return appendText(text, [''], from, to)
  576. }
  577. class RawTextCursor {
  578. constructor(text, dir = 1) {
  579. this.dir = dir
  580. this.done = false
  581. this.lineBreak = false
  582. this.value = ''
  583. this.nodes = [text]
  584. this.offsets = [dir > 0 ? 0 : text instanceof TextLeaf ? text.text.length : text.children.length]
  585. }
  586. next(skip = 0) {
  587. for (;;) {
  588. let last = this.nodes.length - 1
  589. if (last < 0) {
  590. this.done = true
  591. this.value = ''
  592. this.lineBreak = false
  593. return this
  594. }
  595. let top = this.nodes[last],
  596. offset = this.offsets[last]
  597. let size = top instanceof TextLeaf ? top.text.length : top.children.length
  598. if (offset == (this.dir > 0 ? size : 0)) {
  599. this.nodes.pop()
  600. this.offsets.pop()
  601. } else if (!this.lineBreak && offset != (this.dir > 0 ? 0 : size)) {
  602. this.lineBreak = true
  603. if (skip == 0) {
  604. this.value = '\n'
  605. return this
  606. }
  607. skip--
  608. } else if (top instanceof TextLeaf) {
  609. let next = top.text[offset - (this.dir < 0 ? 1 : 0)]
  610. this.offsets[last] = offset += this.dir
  611. this.lineBreak = false
  612. if (next.length > Math.max(0, skip)) {
  613. this.value = skip == 0 ? next : this.dir > 0 ? next.slice(skip) : next.slice(0, next.length - skip)
  614. return this
  615. }
  616. skip -= next.length
  617. } else {
  618. let next = top.children[this.dir > 0 ? offset : offset - 1]
  619. this.offsets[last] = offset + this.dir
  620. this.lineBreak = false
  621. if (skip > next.length) {
  622. skip -= next.length
  623. } else {
  624. this.nodes.push(next)
  625. this.offsets.push(this.dir > 0 ? 0 : next instanceof TextLeaf ? next.text.length : next.children.length)
  626. }
  627. }
  628. }
  629. }
  630. }
  631. class PartialTextCursor {
  632. constructor(text, start, end) {
  633. this.value = ''
  634. this.cursor = new RawTextCursor(text, start > end ? -1 : 1)
  635. if (start > end) {
  636. this.skip = text.length - start
  637. this.limit = start - end
  638. } else {
  639. this.skip = start
  640. this.limit = end - start
  641. }
  642. }
  643. next(skip = 0) {
  644. if (this.limit <= 0) {
  645. this.limit = -1
  646. } else {
  647. let { value, lineBreak, done } = this.cursor.next(this.skip + skip)
  648. this.skip = 0
  649. this.value = value
  650. let len = lineBreak ? 1 : value.length
  651. if (len > this.limit) this.value = this.cursor.dir > 0 ? value.slice(0, this.limit) : value.slice(len - this.limit)
  652. if (done || this.value.length == 0) this.limit = -1
  653. else this.limit -= this.value.length
  654. }
  655. return this
  656. }
  657. get lineBreak() {
  658. return this.cursor.lineBreak
  659. }
  660. get done() {
  661. return this.limit < 0
  662. }
  663. }
  664. class Line$1 {
  665. constructor(from, to, number, text) {
  666. this.from = from
  667. this.to = to
  668. this.number = number
  669. this.text = text
  670. }
  671. get length() {
  672. return this.to - this.from
  673. }
  674. }
  675. var _m0 = Object.freeze({
  676. __proto__: null,
  677. Line: Line$1,
  678. Text: Text,
  679. codePointAt: codePointAt,
  680. codePointSize: codePointSize,
  681. countColumn: countColumn,
  682. findClusterBreak: findClusterBreak,
  683. findColumn: findColumn,
  684. fromCodePoint: fromCodePoint
  685. })
  686. const DefaultSplit = /\r\n?|\n/
  687. var MapMode = (function(MapMode) {
  688. MapMode[(MapMode['Simple'] = 0)] = 'Simple'
  689. MapMode[(MapMode['TrackDel'] = 1)] = 'TrackDel'
  690. MapMode[(MapMode['TrackBefore'] = 2)] = 'TrackBefore'
  691. MapMode[(MapMode['TrackAfter'] = 3)] = 'TrackAfter'
  692. return MapMode
  693. })(MapMode || (MapMode = {}))
  694. class ChangeDesc {
  695. constructor(sections) {
  696. this.sections = sections
  697. }
  698. get length() {
  699. let result = 0
  700. for (let i = 0; i < this.sections.length; i += 2) result += this.sections[i]
  701. return result
  702. }
  703. get newLength() {
  704. let result = 0
  705. for (let i = 0; i < this.sections.length; i += 2) {
  706. let ins = this.sections[i + 1]
  707. result += ins < 0 ? this.sections[i] : ins
  708. }
  709. return result
  710. }
  711. get empty() {
  712. return this.sections.length == 0 || (this.sections.length == 2 && this.sections[1] < 0)
  713. }
  714. iterGaps(f) {
  715. for (let i = 0, posA = 0, posB = 0; i < this.sections.length; ) {
  716. let len = this.sections[i++],
  717. ins = this.sections[i++]
  718. if (ins < 0) {
  719. f(posA, posB, len)
  720. posB += len
  721. } else {
  722. posB += ins
  723. }
  724. posA += len
  725. }
  726. }
  727. iterChangedRanges(f, individual = false) {
  728. iterChanges(this, f, individual)
  729. }
  730. get invertedDesc() {
  731. let sections = []
  732. for (let i = 0; i < this.sections.length; ) {
  733. let len = this.sections[i++],
  734. ins = this.sections[i++]
  735. if (ins < 0) sections.push(len, ins)
  736. else sections.push(ins, len)
  737. }
  738. return new ChangeDesc(sections)
  739. }
  740. composeDesc(other) {
  741. return this.empty ? other : other.empty ? this : composeSets(this, other)
  742. }
  743. mapDesc(other, before = false) {
  744. return other.empty ? this : mapSet(this, other, before)
  745. }
  746. mapPos(pos, assoc = -1, mode = MapMode.Simple) {
  747. let posA = 0,
  748. posB = 0
  749. for (let i = 0; i < this.sections.length; ) {
  750. let len = this.sections[i++],
  751. ins = this.sections[i++],
  752. endA = posA + len
  753. if (ins < 0) {
  754. if (endA > pos) return posB + (pos - posA)
  755. posB += len
  756. } else {
  757. if (
  758. mode != MapMode.Simple &&
  759. endA >= pos &&
  760. ((mode == MapMode.TrackDel && posA < pos && endA > pos) || (mode == MapMode.TrackBefore && posA < pos) || (mode == MapMode.TrackAfter && endA > pos))
  761. )
  762. return null
  763. if (endA > pos || (endA == pos && assoc < 0 && !len)) return pos == posA || assoc < 0 ? posB : posB + ins
  764. posB += ins
  765. }
  766. posA = endA
  767. }
  768. if (pos > posA) throw new RangeError(`Position ${pos} is out of range for changeset of length ${posA}`)
  769. return posB
  770. }
  771. touchesRange(from, to = from) {
  772. for (let i = 0, pos = 0; i < this.sections.length && pos <= to; ) {
  773. let len = this.sections[i++],
  774. ins = this.sections[i++],
  775. end = pos + len
  776. if (ins >= 0 && pos <= to && end >= from) return pos < from && end > to ? 'cover' : true
  777. pos = end
  778. }
  779. return false
  780. }
  781. toString() {
  782. let result = ''
  783. for (let i = 0; i < this.sections.length; ) {
  784. let len = this.sections[i++],
  785. ins = this.sections[i++]
  786. result += (result ? ' ' : '') + len + (ins >= 0 ? ':' + ins : '')
  787. }
  788. return result
  789. }
  790. toJSON() {
  791. return this.sections
  792. }
  793. static fromJSON(json) {
  794. if (!Array.isArray(json) || json.length % 2 || json.some(a => typeof a != 'number')) throw new RangeError('Invalid JSON representation of ChangeDesc')
  795. return new ChangeDesc(json)
  796. }
  797. }
  798. class ChangeSet extends ChangeDesc {
  799. constructor(sections, inserted) {
  800. super(sections)
  801. this.inserted = inserted
  802. }
  803. apply(doc) {
  804. if (this.length != doc.length) throw new RangeError('Applying change set to a document with the wrong length')
  805. iterChanges(this, (fromA, toA, fromB, _toB, text) => (doc = doc.replace(fromB, fromB + (toA - fromA), text)), false)
  806. return doc
  807. }
  808. mapDesc(other, before = false) {
  809. return mapSet(this, other, before, true)
  810. }
  811. invert(doc) {
  812. let sections = this.sections.slice(),
  813. inserted = []
  814. for (let i = 0, pos = 0; i < sections.length; i += 2) {
  815. let len = sections[i],
  816. ins = sections[i + 1]
  817. if (ins >= 0) {
  818. sections[i] = ins
  819. sections[i + 1] = len
  820. let index = i >> 1
  821. while (inserted.length < index) inserted.push(Text.empty)
  822. inserted.push(len ? doc.slice(pos, pos + len) : Text.empty)
  823. }
  824. pos += len
  825. }
  826. return new ChangeSet(sections, inserted)
  827. }
  828. compose(other) {
  829. return this.empty ? other : other.empty ? this : composeSets(this, other, true)
  830. }
  831. map(other, before = false) {
  832. return other.empty ? this : mapSet(this, other, before, true)
  833. }
  834. iterChanges(f, individual = false) {
  835. iterChanges(this, f, individual)
  836. }
  837. get desc() {
  838. return new ChangeDesc(this.sections)
  839. }
  840. filter(ranges) {
  841. let resultSections = [],
  842. resultInserted = [],
  843. filteredSections = []
  844. let iter = new SectionIter(this)
  845. done: for (let i = 0, pos = 0; ; ) {
  846. let next = i == ranges.length ? 1e9 : ranges[i++]
  847. while (pos < next || (pos == next && iter.len == 0)) {
  848. if (iter.done) break done
  849. let len = Math.min(iter.len, next - pos)
  850. addSection(filteredSections, len, -1)
  851. let ins = iter.ins == -1 ? -1 : iter.off == 0 ? iter.ins : 0
  852. addSection(resultSections, len, ins)
  853. if (ins > 0) addInsert(resultInserted, resultSections, iter.text)
  854. iter.forward(len)
  855. pos += len
  856. }
  857. let end = ranges[i++]
  858. while (pos < end) {
  859. if (iter.done) break done
  860. let len = Math.min(iter.len, end - pos)
  861. addSection(resultSections, len, -1)
  862. addSection(filteredSections, len, iter.ins == -1 ? -1 : iter.off == 0 ? iter.ins : 0)
  863. iter.forward(len)
  864. pos += len
  865. }
  866. }
  867. return { changes: new ChangeSet(resultSections, resultInserted), filtered: new ChangeDesc(filteredSections) }
  868. }
  869. toJSON() {
  870. let parts = []
  871. for (let i = 0; i < this.sections.length; i += 2) {
  872. let len = this.sections[i],
  873. ins = this.sections[i + 1]
  874. if (ins < 0) parts.push(len)
  875. else if (ins == 0) parts.push([len])
  876. else parts.push([len].concat(this.inserted[i >> 1].toJSON()))
  877. }
  878. return parts
  879. }
  880. static of(changes, length, lineSep) {
  881. let sections = [],
  882. inserted = [],
  883. pos = 0
  884. let total = null
  885. function flush(force = false) {
  886. if (!force && !sections.length) return
  887. if (pos < length) addSection(sections, length - pos, -1)
  888. let set = new ChangeSet(sections, inserted)
  889. total = total ? total.compose(set.map(total)) : set
  890. sections = []
  891. inserted = []
  892. pos = 0
  893. }
  894. function process(spec) {
  895. if (Array.isArray(spec)) {
  896. for (let _i10 = 0, _length10 = spec.length; _i10 < _length10; _i10++) {
  897. let sub = spec[_i10]
  898. process(sub)
  899. }
  900. } else if (spec instanceof ChangeSet) {
  901. if (spec.length != length) throw new RangeError(`Mismatched change set length (got ${spec.length}, expected ${length})`)
  902. flush()
  903. total = total ? total.compose(spec.map(total)) : spec
  904. } else {
  905. let { from, to = from, insert } = spec
  906. if (from > to || from < 0 || to > length) throw new RangeError(`Invalid change range ${from} to ${to} (in doc of length ${length})`)
  907. let insText = !insert ? Text.empty : typeof insert == 'string' ? Text.of(insert.split(lineSep || DefaultSplit)) : insert
  908. let insLen = insText.length
  909. if (from == to && insLen == 0) return
  910. if (from < pos) flush()
  911. if (from > pos) addSection(sections, from - pos, -1)
  912. addSection(sections, to - from, insLen)
  913. addInsert(inserted, sections, insText)
  914. pos = to
  915. }
  916. }
  917. process(changes)
  918. flush(!total)
  919. return total
  920. }
  921. static empty(length) {
  922. return new ChangeSet(length ? [length, -1] : [], [])
  923. }
  924. static fromJSON(json) {
  925. if (!Array.isArray(json)) throw new RangeError('Invalid JSON representation of ChangeSet')
  926. let sections = [],
  927. inserted = []
  928. for (let i = 0; i < json.length; i++) {
  929. let part = json[i]
  930. if (typeof part == 'number') {
  931. sections.push(part, -1)
  932. } else if (!Array.isArray(part) || typeof part[0] != 'number' || part.some((e, i) => i && typeof e != 'string')) {
  933. throw new RangeError('Invalid JSON representation of ChangeSet')
  934. } else if (part.length == 1) {
  935. sections.push(part[0], 0)
  936. } else {
  937. while (inserted.length < i) inserted.push(Text.empty)
  938. inserted[i] = Text.of(part.slice(1))
  939. sections.push(part[0], inserted[i].length)
  940. }
  941. }
  942. return new ChangeSet(sections, inserted)
  943. }
  944. }
  945. function addSection(sections, len, ins, forceJoin = false) {
  946. if (len == 0 && ins <= 0) return
  947. let last = sections.length - 2
  948. if (last >= 0 && ins <= 0 && ins == sections[last + 1]) sections[last] += len
  949. else if (len == 0 && sections[last] == 0) sections[last + 1] += ins
  950. else if (forceJoin) {
  951. sections[last] += len
  952. sections[last + 1] += ins
  953. } else sections.push(len, ins)
  954. }
  955. function addInsert(values, sections, value) {
  956. if (value.length == 0) return
  957. let index = (sections.length - 2) >> 1
  958. if (index < values.length) {
  959. values[values.length - 1] = values[values.length - 1].append(value)
  960. } else {
  961. while (values.length < index) values.push(Text.empty)
  962. values.push(value)
  963. }
  964. }
  965. function iterChanges(desc, f, individual) {
  966. let inserted = desc.inserted
  967. for (let posA = 0, posB = 0, i = 0; i < desc.sections.length; ) {
  968. let len = desc.sections[i++],
  969. ins = desc.sections[i++]
  970. if (ins < 0) {
  971. posA += len
  972. posB += len
  973. } else {
  974. let endA = posA,
  975. endB = posB,
  976. text = Text.empty
  977. for (;;) {
  978. endA += len
  979. endB += ins
  980. if (ins && inserted) text = text.append(inserted[(i - 2) >> 1])
  981. if (individual || i == desc.sections.length || desc.sections[i + 1] < 0) break
  982. len = desc.sections[i++]
  983. ins = desc.sections[i++]
  984. }
  985. f(posA, endA, posB, endB, text)
  986. posA = endA
  987. posB = endB
  988. }
  989. }
  990. }
  991. function mapSet(setA, setB, before, mkSet = false) {
  992. let sections = [],
  993. insert = mkSet ? [] : null
  994. let a = new SectionIter(setA),
  995. b = new SectionIter(setB)
  996. for (let posA = 0, posB = 0; ; ) {
  997. if (a.ins == -1) {
  998. posA += a.len
  999. a.next()
  1000. } else if (b.ins == -1 && posB < posA) {
  1001. let skip = Math.min(b.len, posA - posB)
  1002. b.forward(skip)
  1003. addSection(sections, skip, -1)
  1004. posB += skip
  1005. } else if (b.ins >= 0 && (a.done || posB < posA || (posB == posA && (b.len < a.len || (b.len == a.len && !before))))) {
  1006. addSection(sections, b.ins, -1)
  1007. while (posA > posB && !a.done && posA + a.len < posB + b.len) {
  1008. posA += a.len
  1009. a.next()
  1010. }
  1011. posB += b.len
  1012. b.next()
  1013. } else if (a.ins >= 0) {
  1014. let len = 0,
  1015. end = posA + a.len
  1016. for (;;) {
  1017. if (b.ins >= 0 && posB > posA && posB + b.len < end) {
  1018. len += b.ins
  1019. posB += b.len
  1020. b.next()
  1021. } else if (b.ins == -1 && posB < end) {
  1022. let skip = Math.min(b.len, end - posB)
  1023. len += skip
  1024. b.forward(skip)
  1025. posB += skip
  1026. } else {
  1027. break
  1028. }
  1029. }
  1030. addSection(sections, len, a.ins)
  1031. if (insert) addInsert(insert, sections, a.text)
  1032. posA = end
  1033. a.next()
  1034. } else if (a.done && b.done) {
  1035. return insert ? new ChangeSet(sections, insert) : new ChangeDesc(sections)
  1036. } else {
  1037. throw new Error('Mismatched change set lengths')
  1038. }
  1039. }
  1040. }
  1041. function composeSets(setA, setB, mkSet = false) {
  1042. let sections = []
  1043. let insert = mkSet ? [] : null
  1044. let a = new SectionIter(setA),
  1045. b = new SectionIter(setB)
  1046. for (let open = false; ; ) {
  1047. if (a.done && b.done) {
  1048. return insert ? new ChangeSet(sections, insert) : new ChangeDesc(sections)
  1049. } else if (a.ins == 0) {
  1050. addSection(sections, a.len, 0, open)
  1051. a.next()
  1052. } else if (b.len == 0 && !b.done) {
  1053. addSection(sections, 0, b.ins, open)
  1054. if (insert) addInsert(insert, sections, b.text)
  1055. b.next()
  1056. } else if (a.done || b.done) {
  1057. throw new Error('Mismatched change set lengths')
  1058. } else {
  1059. let len = Math.min(a.len2, b.len),
  1060. sectionLen = sections.length
  1061. if (a.ins == -1) {
  1062. let insB = b.ins == -1 ? -1 : b.off ? 0 : b.ins
  1063. addSection(sections, len, insB, open)
  1064. if (insert && insB) addInsert(insert, sections, b.text)
  1065. } else if (b.ins == -1) {
  1066. addSection(sections, a.off ? 0 : a.len, len, open)
  1067. if (insert) addInsert(insert, sections, a.textBit(len))
  1068. } else {
  1069. addSection(sections, a.off ? 0 : a.len, b.off ? 0 : b.ins, open)
  1070. if (insert && !b.off) addInsert(insert, sections, b.text)
  1071. }
  1072. open = (a.ins > len || (b.ins >= 0 && b.len > len)) && (open || sections.length > sectionLen)
  1073. a.forward2(len)
  1074. b.forward(len)
  1075. }
  1076. }
  1077. }
  1078. class SectionIter {
  1079. constructor(set) {
  1080. this.set = set
  1081. this.i = 0
  1082. this.next()
  1083. }
  1084. next() {
  1085. let { sections } = this.set
  1086. if (this.i < sections.length) {
  1087. this.len = sections[this.i++]
  1088. this.ins = sections[this.i++]
  1089. } else {
  1090. this.len = 0
  1091. this.ins = -2
  1092. }
  1093. this.off = 0
  1094. }
  1095. get done() {
  1096. return this.ins == -2
  1097. }
  1098. get len2() {
  1099. return this.ins < 0 ? this.len : this.ins
  1100. }
  1101. get text() {
  1102. let { inserted } = this.set,
  1103. index = (this.i - 2) >> 1
  1104. return index >= inserted.length ? Text.empty : inserted[index]
  1105. }
  1106. textBit(len) {
  1107. let { inserted } = this.set,
  1108. index = (this.i - 2) >> 1
  1109. return index >= inserted.length && !len ? Text.empty : inserted[index].slice(this.off, len == null ? undefined : this.off + len)
  1110. }
  1111. forward(len) {
  1112. if (len == this.len) this.next()
  1113. else {
  1114. this.len -= len
  1115. this.off += len
  1116. }
  1117. }
  1118. forward2(len) {
  1119. if (this.ins == -1) this.forward(len)
  1120. else if (len == this.ins) this.next()
  1121. else {
  1122. this.ins -= len
  1123. this.off += len
  1124. }
  1125. }
  1126. }
  1127. class SelectionRange {
  1128. constructor(from, to, flags) {
  1129. this.from = from
  1130. this.to = to
  1131. this.flags = flags
  1132. }
  1133. get anchor() {
  1134. return this.flags & 16 ? this.to : this.from
  1135. }
  1136. get head() {
  1137. return this.flags & 16 ? this.from : this.to
  1138. }
  1139. get empty() {
  1140. return this.from == this.to
  1141. }
  1142. get assoc() {
  1143. return this.flags & 4 ? -1 : this.flags & 8 ? 1 : 0
  1144. }
  1145. get bidiLevel() {
  1146. let level = this.flags & 3
  1147. return level == 3 ? null : level
  1148. }
  1149. get goalColumn() {
  1150. let value = this.flags >> 5
  1151. return value == 33554431 ? undefined : value
  1152. }
  1153. map(change, assoc = -1) {
  1154. let from = change.mapPos(this.from, assoc),
  1155. to = change.mapPos(this.to, assoc)
  1156. return from == this.from && to == this.to ? this : new SelectionRange(from, to, this.flags)
  1157. }
  1158. extend(from, to = from) {
  1159. if (from <= this.anchor && to >= this.anchor) return EditorSelection.range(from, to)
  1160. let head = Math.abs(from - this.anchor) > Math.abs(to - this.anchor) ? from : to
  1161. return EditorSelection.range(this.anchor, head)
  1162. }
  1163. eq(other) {
  1164. return this.anchor == other.anchor && this.head == other.head
  1165. }
  1166. toJSON() {
  1167. return { anchor: this.anchor, head: this.head }
  1168. }
  1169. static fromJSON(json) {
  1170. if (!json || typeof json.anchor != 'number' || typeof json.head != 'number') throw new RangeError('Invalid JSON representation for SelectionRange')
  1171. return EditorSelection.range(json.anchor, json.head)
  1172. }
  1173. }
  1174. class EditorSelection {
  1175. constructor(ranges, mainIndex = 0) {
  1176. this.ranges = ranges
  1177. this.mainIndex = mainIndex
  1178. }
  1179. map(change, assoc = -1) {
  1180. if (change.empty) return this
  1181. return EditorSelection.create(
  1182. this.ranges.map(r => r.map(change, assoc)),
  1183. this.mainIndex
  1184. )
  1185. }
  1186. eq(other) {
  1187. if (this.ranges.length != other.ranges.length || this.mainIndex != other.mainIndex) return false
  1188. for (let i = 0; i < this.ranges.length; i++) if (!this.ranges[i].eq(other.ranges[i])) return false
  1189. return true
  1190. }
  1191. get main() {
  1192. return this.ranges[this.mainIndex]
  1193. }
  1194. asSingle() {
  1195. return this.ranges.length == 1 ? this : new EditorSelection([this.main])
  1196. }
  1197. addRange(range, main = true) {
  1198. return EditorSelection.create([range].concat(this.ranges), main ? 0 : this.mainIndex + 1)
  1199. }
  1200. replaceRange(range, which = this.mainIndex) {
  1201. let ranges = this.ranges.slice()
  1202. ranges[which] = range
  1203. return EditorSelection.create(ranges, this.mainIndex)
  1204. }
  1205. toJSON() {
  1206. return { ranges: this.ranges.map(r => r.toJSON()), main: this.mainIndex }
  1207. }
  1208. static fromJSON(json) {
  1209. if (!json || !Array.isArray(json.ranges) || typeof json.main != 'number' || json.main >= json.ranges.length) throw new RangeError('Invalid JSON representation for EditorSelection')
  1210. return new EditorSelection(
  1211. json.ranges.map(r => SelectionRange.fromJSON(r)),
  1212. json.main
  1213. )
  1214. }
  1215. static single(anchor, head = anchor) {
  1216. return new EditorSelection([EditorSelection.range(anchor, head)], 0)
  1217. }
  1218. static create(ranges, mainIndex = 0) {
  1219. if (ranges.length == 0) throw new RangeError('A selection needs at least one range')
  1220. for (let pos = 0, i = 0; i < ranges.length; i++) {
  1221. let range = ranges[i]
  1222. if (range.empty ? range.from <= pos : range.from < pos) return normalized(ranges.slice(), mainIndex)
  1223. pos = range.to
  1224. }
  1225. return new EditorSelection(ranges, mainIndex)
  1226. }
  1227. static cursor(pos, assoc = 0, bidiLevel, goalColumn) {
  1228. return new SelectionRange(
  1229. pos,
  1230. pos,
  1231. (assoc == 0 ? 0 : assoc < 0 ? 4 : 8) | (bidiLevel == null ? 3 : Math.min(2, bidiLevel)) | ((goalColumn !== null && goalColumn !== void 0 ? goalColumn : 33554431) << 5)
  1232. )
  1233. }
  1234. static range(anchor, head, goalColumn) {
  1235. let goal = (goalColumn !== null && goalColumn !== void 0 ? goalColumn : 33554431) << 5
  1236. return head < anchor ? new SelectionRange(head, anchor, 16 | goal) : new SelectionRange(anchor, head, goal)
  1237. }
  1238. }
  1239. function normalized(ranges, mainIndex = 0) {
  1240. let main = ranges[mainIndex]
  1241. ranges.sort((a, b) => a.from - b.from)
  1242. mainIndex = ranges.indexOf(main)
  1243. for (let i = 1; i < ranges.length; i++) {
  1244. let range = ranges[i],
  1245. prev = ranges[i - 1]
  1246. if (range.empty ? range.from <= prev.to : range.from < prev.to) {
  1247. let from = prev.from,
  1248. to = Math.max(range.to, prev.to)
  1249. if (i <= mainIndex) mainIndex--
  1250. ranges.splice(--i, 2, range.anchor > range.head ? EditorSelection.range(to, from) : EditorSelection.range(from, to))
  1251. }
  1252. }
  1253. return new EditorSelection(ranges, mainIndex)
  1254. }
  1255. function checkSelection(selection, docLength) {
  1256. for (let _i11 = 0, _selection$ranges = selection.ranges, _length11 = _selection$ranges.length; _i11 < _length11; _i11++) {
  1257. let range = _selection$ranges[_i11]
  1258. if (range.to > docLength) throw new RangeError('Selection points outside of document')
  1259. }
  1260. }
  1261. let nextID = 0
  1262. class Facet {
  1263. constructor(combine, compareInput, compare, isStatic, extensions) {
  1264. this.combine = combine
  1265. this.compareInput = compareInput
  1266. this.compare = compare
  1267. this.isStatic = isStatic
  1268. this.extensions = extensions
  1269. this.id = nextID++
  1270. this.default = combine([])
  1271. }
  1272. static define(config = {}) {
  1273. return new Facet(
  1274. config.combine || (a => a),
  1275. config.compareInput || ((a, b) => a === b),
  1276. config.compare || (!config.combine ? sameArray$1 : (a, b) => a === b),
  1277. !!config.static,
  1278. config.enables
  1279. )
  1280. }
  1281. of(value) {
  1282. return new FacetProvider([], this, 0, value)
  1283. }
  1284. compute(deps, get) {
  1285. if (this.isStatic) throw new Error("Can't compute a static facet")
  1286. return new FacetProvider(deps, this, 1, get)
  1287. }
  1288. computeN(deps, get) {
  1289. if (this.isStatic) throw new Error("Can't compute a static facet")
  1290. return new FacetProvider(deps, this, 2, get)
  1291. }
  1292. from(field, get) {
  1293. if (!get) get = x => x
  1294. return this.compute([field], state => get(state.field(field)))
  1295. }
  1296. }
  1297. function sameArray$1(a, b) {
  1298. return a == b || (a.length == b.length && a.every((e, i) => e === b[i]))
  1299. }
  1300. class FacetProvider {
  1301. constructor(dependencies, facet, type, value) {
  1302. this.dependencies = dependencies
  1303. this.facet = facet
  1304. this.type = type
  1305. this.value = value
  1306. this.id = nextID++
  1307. }
  1308. dynamicSlot(addresses) {
  1309. var _a
  1310. let getter = this.value
  1311. let compare = this.facet.compareInput
  1312. let idx = addresses[this.id] >> 1,
  1313. multi = this.type == 2
  1314. let depDoc = false,
  1315. depSel = false,
  1316. depAddrs = []
  1317. for (let _i12 = 0, _this$dependencies = this.dependencies, _length12 = _this$dependencies.length; _i12 < _length12; _i12++) {
  1318. let dep = _this$dependencies[_i12]
  1319. if (dep == 'doc') depDoc = true
  1320. else if (dep == 'selection') depSel = true
  1321. else if ((((_a = addresses[dep.id]) !== null && _a !== void 0 ? _a : 1) & 1) == 0) depAddrs.push(addresses[dep.id])
  1322. }
  1323. return (state, tr) => {
  1324. if (!tr || tr.reconfigured) {
  1325. state.values[idx] = getter(state)
  1326. return 1
  1327. } else {
  1328. let depChanged = (depDoc && tr.docChanged) || (depSel && (tr.docChanged || tr.selection)) || depAddrs.some(addr => (ensureAddr(state, addr) & 1) > 0)
  1329. if (!depChanged) return 0
  1330. let newVal = getter(state),
  1331. oldVal = tr.startState.values[idx]
  1332. if (multi ? compareArray(newVal, oldVal, compare) : compare(newVal, oldVal)) return 0
  1333. state.values[idx] = newVal
  1334. return 1
  1335. }
  1336. }
  1337. }
  1338. }
  1339. function compareArray(a, b, compare) {
  1340. if (a.length != b.length) return false
  1341. for (let i = 0; i < a.length; i++) if (!compare(a[i], b[i])) return false
  1342. return true
  1343. }
  1344. function dynamicFacetSlot(addresses, facet, providers) {
  1345. let providerAddrs = providers.map(p => addresses[p.id])
  1346. let providerTypes = providers.map(p => p.type)
  1347. let dynamic = providerAddrs.filter(p => !(p & 1))
  1348. let idx = addresses[facet.id] >> 1
  1349. return (state, tr) => {
  1350. let oldAddr = !tr ? null : tr.reconfigured ? tr.startState.config.address[facet.id] : idx << 1
  1351. let changed = oldAddr == null
  1352. for (let _i13 = 0, _length13 = dynamic.length; _i13 < _length13; _i13++) {
  1353. let dynAddr = dynamic[_i13]
  1354. if (ensureAddr(state, dynAddr) & 1) changed = true
  1355. }
  1356. if (!changed) return 0
  1357. let values = []
  1358. for (let i = 0; i < providerAddrs.length; i++) {
  1359. let value = getAddr(state, providerAddrs[i])
  1360. if (providerTypes[i] == 2)
  1361. for (let _i14 = 0, _length14 = value.length; _i14 < _length14; _i14++) {
  1362. let val = value[_i14]
  1363. values.push(val)
  1364. }
  1365. else values.push(value)
  1366. }
  1367. let newVal = facet.combine(values)
  1368. if (oldAddr != null && facet.compare(newVal, getAddr(tr.startState, oldAddr))) return 0
  1369. state.values[idx] = newVal
  1370. return 1
  1371. }
  1372. }
  1373. function maybeIndex(state, id) {
  1374. let found = state.config.address[id]
  1375. return found == null ? null : found >> 1
  1376. }
  1377. const initField = Facet.define({ static: true })
  1378. class StateField {
  1379. constructor(id, createF, updateF, compareF, spec) {
  1380. this.id = id
  1381. this.createF = createF
  1382. this.updateF = updateF
  1383. this.compareF = compareF
  1384. this.spec = spec
  1385. this.provides = undefined
  1386. }
  1387. static define(config) {
  1388. let field = new StateField(nextID++, config.create, config.update, config.compare || ((a, b) => a === b), config)
  1389. if (config.provide) field.provides = config.provide(field)
  1390. return field
  1391. }
  1392. create(state) {
  1393. let init = state.facet(initField).find(i => i.field == this)
  1394. return ((init === null || init === void 0 ? void 0 : init.create) || this.createF)(state)
  1395. }
  1396. slot(addresses) {
  1397. let idx = addresses[this.id] >> 1
  1398. return (state, tr) => {
  1399. if (!tr || (tr.reconfigured && maybeIndex(tr.startState, this.id) == null)) {
  1400. state.values[idx] = this.create(state)
  1401. return 1
  1402. }
  1403. let oldVal,
  1404. changed = 0
  1405. if (tr.reconfigured) {
  1406. oldVal = tr.startState.values[maybeIndex(tr.startState, this.id)]
  1407. changed = 1
  1408. } else {
  1409. oldVal = tr.startState.values[idx]
  1410. }
  1411. let value = this.updateF(oldVal, tr)
  1412. if (!changed && !this.compareF(oldVal, value)) changed = 1
  1413. if (changed) state.values[idx] = value
  1414. return changed
  1415. }
  1416. }
  1417. init(create) {
  1418. return [this, initField.of({ field: this, create })]
  1419. }
  1420. get extension() {
  1421. return this
  1422. }
  1423. }
  1424. const Prec_ = { fallback: 3, default: 2, extend: 1, override: 0 }
  1425. function prec(value) {
  1426. return ext => new PrecExtension(ext, value)
  1427. }
  1428. const Prec = { fallback: prec(Prec_.fallback), default: prec(Prec_.default), extend: prec(Prec_.extend), override: prec(Prec_.override) }
  1429. class PrecExtension {
  1430. constructor(inner, prec) {
  1431. this.inner = inner
  1432. this.prec = prec
  1433. }
  1434. }
  1435. class Compartment {
  1436. of(ext) {
  1437. return new CompartmentInstance(this, ext)
  1438. }
  1439. reconfigure(content) {
  1440. return Compartment.reconfigure.of({ compartment: this, extension: content })
  1441. }
  1442. get(state) {
  1443. return state.config.compartments.get(this)
  1444. }
  1445. }
  1446. class CompartmentInstance {
  1447. constructor(compartment, inner) {
  1448. this.compartment = compartment
  1449. this.inner = inner
  1450. }
  1451. }
  1452. class Configuration {
  1453. constructor(base, compartments, dynamicSlots, address, staticValues) {
  1454. this.base = base
  1455. this.compartments = compartments
  1456. this.dynamicSlots = dynamicSlots
  1457. this.address = address
  1458. this.staticValues = staticValues
  1459. this.statusTemplate = []
  1460. while (this.statusTemplate.length < dynamicSlots.length) this.statusTemplate.push(0)
  1461. }
  1462. staticFacet(facet) {
  1463. let addr = this.address[facet.id]
  1464. return addr == null ? facet.default : this.staticValues[addr >> 1]
  1465. }
  1466. static resolve(base, compartments, oldState) {
  1467. let fields = []
  1468. let facets = Object.create(null)
  1469. let newCompartments = new Map()
  1470. for (let _i15 = 0, _flatten = flatten(base, compartments, newCompartments), _length15 = _flatten.length; _i15 < _length15; _i15++) {
  1471. let ext = _flatten[_i15]
  1472. if (ext instanceof StateField) fields.push(ext)
  1473. else (facets[ext.facet.id] || (facets[ext.facet.id] = [])).push(ext)
  1474. }
  1475. let address = Object.create(null)
  1476. let staticValues = []
  1477. let dynamicSlots = []
  1478. for (let _i16 = 0, _length16 = fields.length; _i16 < _length16; _i16++) {
  1479. let field = fields[_i16]
  1480. address[field.id] = dynamicSlots.length << 1
  1481. dynamicSlots.push(a => field.slot(a))
  1482. }
  1483. for (let id in facets) {
  1484. let providers = facets[id],
  1485. facet = providers[0].facet
  1486. if (providers.every(p => p.type == 0)) {
  1487. address[facet.id] = (staticValues.length << 1) | 1
  1488. let value = facet.combine(providers.map(p => p.value))
  1489. let oldAddr = oldState ? oldState.config.address[facet.id] : null
  1490. if (oldAddr != null) {
  1491. let oldVal = getAddr(oldState, oldAddr)
  1492. if (facet.compare(value, oldVal)) value = oldVal
  1493. }
  1494. staticValues.push(value)
  1495. } else {
  1496. for (let _i17 = 0, _length17 = providers.length; _i17 < _length17; _i17++) {
  1497. let p = providers[_i17]
  1498. if (p.type == 0) {
  1499. address[p.id] = (staticValues.length << 1) | 1
  1500. staticValues.push(p.value)
  1501. } else {
  1502. address[p.id] = dynamicSlots.length << 1
  1503. dynamicSlots.push(a => p.dynamicSlot(a))
  1504. }
  1505. }
  1506. address[facet.id] = dynamicSlots.length << 1
  1507. dynamicSlots.push(a => dynamicFacetSlot(a, facet, providers))
  1508. }
  1509. }
  1510. return new Configuration(
  1511. base,
  1512. newCompartments,
  1513. dynamicSlots.map(f => f(address)),
  1514. address,
  1515. staticValues
  1516. )
  1517. }
  1518. }
  1519. function flatten(extension, compartments, newCompartments) {
  1520. let result = [[], [], [], []]
  1521. let seen = new Map()
  1522. function inner(ext, prec) {
  1523. let known = seen.get(ext)
  1524. if (known != null) {
  1525. if (known >= prec) return
  1526. let found = result[known].indexOf(ext)
  1527. if (found > -1) result[known].splice(found, 1)
  1528. if (ext instanceof CompartmentInstance) newCompartments.delete(ext.compartment)
  1529. }
  1530. seen.set(ext, prec)
  1531. if (Array.isArray(ext)) {
  1532. for (let _i18 = 0, _length18 = ext.length; _i18 < _length18; _i18++) {
  1533. let e = ext[_i18]
  1534. inner(e, prec)
  1535. }
  1536. } else if (ext instanceof CompartmentInstance) {
  1537. if (newCompartments.has(ext.compartment)) throw new RangeError(`Duplicate use of compartment in extensions`)
  1538. let content = compartments.get(ext.compartment) || ext.inner
  1539. newCompartments.set(ext.compartment, content)
  1540. inner(content, prec)
  1541. } else if (ext instanceof PrecExtension) {
  1542. inner(ext.inner, ext.prec)
  1543. } else if (ext instanceof StateField) {
  1544. result[prec].push(ext)
  1545. if (ext.provides) inner(ext.provides, prec)
  1546. } else if (ext instanceof FacetProvider) {
  1547. result[prec].push(ext)
  1548. if (ext.facet.extensions) inner(ext.facet.extensions, prec)
  1549. } else {
  1550. let content = ext.extension
  1551. if (!content)
  1552. throw new Error(
  1553. `Unrecognized extension value in extension set (${ext}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`
  1554. )
  1555. inner(content, prec)
  1556. }
  1557. }
  1558. inner(extension, Prec_.default)
  1559. return result.reduce((a, b) => a.concat(b))
  1560. }
  1561. function ensureAddr(state, addr) {
  1562. if (addr & 1) return 2
  1563. let idx = addr >> 1
  1564. let status = state.status[idx]
  1565. if (status == 4) throw new Error('Cyclic dependency between fields and/or facets')
  1566. if (status & 2) return status
  1567. state.status[idx] = 4
  1568. let changed = state.config.dynamicSlots[idx](state, state.applying)
  1569. return (state.status[idx] = 2 | changed)
  1570. }
  1571. function getAddr(state, addr) {
  1572. return addr & 1 ? state.config.staticValues[addr >> 1] : state.values[addr >> 1]
  1573. }
  1574. const languageData = Facet.define()
  1575. const allowMultipleSelections = Facet.define({ combine: values => values.some(v => v), static: true })
  1576. const lineSeparator = Facet.define({ combine: values => (values.length ? values[0] : undefined), static: true })
  1577. const changeFilter = Facet.define()
  1578. const transactionFilter = Facet.define()
  1579. const transactionExtender = Facet.define()
  1580. class Annotation {
  1581. constructor(type, value) {
  1582. this.type = type
  1583. this.value = value
  1584. }
  1585. static define() {
  1586. return new AnnotationType()
  1587. }
  1588. }
  1589. class AnnotationType {
  1590. of(value) {
  1591. return new Annotation(this, value)
  1592. }
  1593. }
  1594. class StateEffectType {
  1595. constructor(map) {
  1596. this.map = map
  1597. }
  1598. of(value) {
  1599. return new StateEffect(this, value)
  1600. }
  1601. }
  1602. class StateEffect {
  1603. constructor(type, value) {
  1604. this.type = type
  1605. this.value = value
  1606. }
  1607. map(mapping) {
  1608. let mapped = this.type.map(this.value, mapping)
  1609. return mapped === undefined ? undefined : mapped == this.value ? this : new StateEffect(this.type, mapped)
  1610. }
  1611. is(type) {
  1612. return this.type == type
  1613. }
  1614. static define(spec = {}) {
  1615. return new StateEffectType(spec.map || (v => v))
  1616. }
  1617. static mapEffects(effects, mapping) {
  1618. if (!effects.length) return effects
  1619. let result = []
  1620. for (let _i19 = 0, _length19 = effects.length; _i19 < _length19; _i19++) {
  1621. let effect = effects[_i19]
  1622. let mapped = effect.map(mapping)
  1623. if (mapped) result.push(mapped)
  1624. }
  1625. return result
  1626. }
  1627. }
  1628. StateEffect.reconfigure = StateEffect.define()
  1629. StateEffect.appendConfig = StateEffect.define()
  1630. class Transaction {
  1631. constructor(startState, changes, selection, effects, annotations, scrollIntoView) {
  1632. this.startState = startState
  1633. this.changes = changes
  1634. this.selection = selection
  1635. this.effects = effects
  1636. this.annotations = annotations
  1637. this.scrollIntoView = scrollIntoView
  1638. this._doc = null
  1639. this._state = null
  1640. if (selection) checkSelection(selection, changes.newLength)
  1641. if (!annotations.some(a => a.type == Transaction.time)) this.annotations = annotations.concat(Transaction.time.of(Date.now()))
  1642. }
  1643. get newDoc() {
  1644. return this._doc || (this._doc = this.changes.apply(this.startState.doc))
  1645. }
  1646. get newSelection() {
  1647. return this.selection || this.startState.selection.map(this.changes)
  1648. }
  1649. get state() {
  1650. if (!this._state) this.startState.applyTransaction(this)
  1651. return this._state
  1652. }
  1653. annotation(type) {
  1654. for (let _i20 = 0, _this$annotations = this.annotations, _length20 = _this$annotations.length; _i20 < _length20; _i20++) {
  1655. let ann = _this$annotations[_i20]
  1656. if (ann.type == type) return ann.value
  1657. }
  1658. return undefined
  1659. }
  1660. get docChanged() {
  1661. return !this.changes.empty
  1662. }
  1663. get reconfigured() {
  1664. return this.startState.config != this.state.config
  1665. }
  1666. }
  1667. Transaction.time = Annotation.define()
  1668. Transaction.userEvent = Annotation.define()
  1669. Transaction.addToHistory = Annotation.define()
  1670. Transaction.remote = Annotation.define()
  1671. function joinRanges(a, b) {
  1672. let result = []
  1673. for (let iA = 0, iB = 0; ; ) {
  1674. let from, to
  1675. if (iA < a.length && (iB == b.length || b[iB] >= a[iA])) {
  1676. from = a[iA++]
  1677. to = a[iA++]
  1678. } else if (iB < b.length) {
  1679. from = b[iB++]
  1680. to = b[iB++]
  1681. } else return result
  1682. if (!result.length || result[result.length - 1] < from) result.push(from, to)
  1683. else if (result[result.length - 1] < to) result[result.length - 1] = to
  1684. }
  1685. }
  1686. function mergeTransaction(a, b, sequential) {
  1687. var _a
  1688. let mapForA, mapForB, changes
  1689. if (sequential) {
  1690. mapForA = b.changes
  1691. mapForB = ChangeSet.empty(b.changes.length)
  1692. changes = a.changes.compose(b.changes)
  1693. } else {
  1694. mapForA = b.changes.map(a.changes)
  1695. mapForB = a.changes.mapDesc(b.changes, true)
  1696. changes = a.changes.compose(mapForA)
  1697. }
  1698. return {
  1699. changes,
  1700. selection: b.selection ? b.selection.map(mapForB) : (_a = a.selection) === null || _a === void 0 ? void 0 : _a.map(mapForA),
  1701. effects: StateEffect.mapEffects(a.effects, mapForA).concat(StateEffect.mapEffects(b.effects, mapForB)),
  1702. annotations: a.annotations.length ? a.annotations.concat(b.annotations) : b.annotations,
  1703. scrollIntoView: a.scrollIntoView || b.scrollIntoView
  1704. }
  1705. }
  1706. function resolveTransactionInner(state, spec, docSize) {
  1707. let sel = spec.selection
  1708. return {
  1709. changes: spec.changes instanceof ChangeSet ? spec.changes : ChangeSet.of(spec.changes || [], docSize, state.facet(lineSeparator)),
  1710. selection: sel && (sel instanceof EditorSelection ? sel : EditorSelection.single(sel.anchor, sel.head)),
  1711. effects: asArray$1(spec.effects),
  1712. annotations: asArray$1(spec.annotations),
  1713. scrollIntoView: !!spec.scrollIntoView
  1714. }
  1715. }
  1716. function resolveTransaction(state, specs, filter) {
  1717. let s = resolveTransactionInner(state, specs.length ? specs[0] : {}, state.doc.length)
  1718. if (specs.length && specs[0].filter === false) filter = false
  1719. for (let i = 1; i < specs.length; i++) {
  1720. if (specs[i].filter === false) filter = false
  1721. let seq = !!specs[i].sequential
  1722. s = mergeTransaction(s, resolveTransactionInner(state, specs[i], seq ? s.changes.newLength : state.doc.length), seq)
  1723. }
  1724. let tr = new Transaction(state, s.changes, s.selection, s.effects, s.annotations, s.scrollIntoView)
  1725. return extendTransaction(filter ? filterTransaction(tr) : tr)
  1726. }
  1727. function filterTransaction(tr) {
  1728. let state = tr.startState
  1729. let result = true
  1730. for (let _i21 = 0, _state$facet = state.facet(changeFilter), _length21 = _state$facet.length; _i21 < _length21; _i21++) {
  1731. let filter = _state$facet[_i21]
  1732. let value = filter(tr)
  1733. if (value === false) {
  1734. result = false
  1735. break
  1736. }
  1737. if (Array.isArray(value)) result = result === true ? value : joinRanges(result, value)
  1738. }
  1739. if (result !== true) {
  1740. let changes, back
  1741. if (result === false) {
  1742. back = tr.changes.invertedDesc
  1743. changes = ChangeSet.empty(state.doc.length)
  1744. } else {
  1745. let filtered = tr.changes.filter(result)
  1746. changes = filtered.changes
  1747. back = filtered.filtered.invertedDesc
  1748. }
  1749. tr = new Transaction(state, changes, tr.selection && tr.selection.map(back), StateEffect.mapEffects(tr.effects, back), tr.annotations, tr.scrollIntoView)
  1750. }
  1751. let filters = state.facet(transactionFilter)
  1752. for (let i = filters.length - 1; i >= 0; i--) {
  1753. let filtered = filters[i](tr)
  1754. if (filtered instanceof Transaction) tr = filtered
  1755. else if (Array.isArray(filtered) && filtered.length == 1 && filtered[0] instanceof Transaction) tr = filtered[0]
  1756. else tr = resolveTransaction(state, asArray$1(filtered), false)
  1757. }
  1758. return tr
  1759. }
  1760. function extendTransaction(tr) {
  1761. let state = tr.startState,
  1762. extenders = state.facet(transactionExtender),
  1763. spec = tr
  1764. for (let i = extenders.length - 1; i >= 0; i--) {
  1765. let extension = extenders[i](tr)
  1766. if (extension && Object.keys(extension).length) spec = mergeTransaction(tr, resolveTransactionInner(state, extension, tr.changes.newLength), true)
  1767. }
  1768. return spec == tr ? tr : new Transaction(state, tr.changes, tr.selection, spec.effects, spec.annotations, spec.scrollIntoView)
  1769. }
  1770. const none$5 = []
  1771. function asArray$1(value) {
  1772. return value == null ? none$5 : Array.isArray(value) ? value : [value]
  1773. }
  1774. var CharCategory = (function(CharCategory) {
  1775. CharCategory[(CharCategory['Word'] = 0)] = 'Word'
  1776. CharCategory[(CharCategory['Space'] = 1)] = 'Space'
  1777. CharCategory[(CharCategory['Other'] = 2)] = 'Other'
  1778. return CharCategory
  1779. })(CharCategory || (CharCategory = {}))
  1780. const nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/
  1781. let wordChar
  1782. try {
  1783. wordChar = new RegExp('[\\p{Alphabetic}\\p{Number}_]', 'u')
  1784. } catch (_) {}
  1785. function hasWordChar(str) {
  1786. if (wordChar) return wordChar.test(str)
  1787. for (let i = 0; i < str.length; i++) {
  1788. let ch = str[i]
  1789. if (/\w/.test(ch) || (ch > '\x80' && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)))) return true
  1790. }
  1791. return false
  1792. }
  1793. function makeCategorizer(wordChars) {
  1794. return char => {
  1795. if (!/\S/.test(char)) return CharCategory.Space
  1796. if (hasWordChar(char)) return CharCategory.Word
  1797. for (let i = 0; i < wordChars.length; i++) if (char.indexOf(wordChars[i]) > -1) return CharCategory.Word
  1798. return CharCategory.Other
  1799. }
  1800. }
  1801. class EditorState {
  1802. constructor(config, doc, selection, tr = null) {
  1803. this.config = config
  1804. this.doc = doc
  1805. this.selection = selection
  1806. this.applying = null
  1807. this.status = config.statusTemplate.slice()
  1808. if (tr && tr.startState.config == config) {
  1809. this.values = tr.startState.values.slice()
  1810. } else {
  1811. this.values = config.dynamicSlots.map(_ => null)
  1812. if (tr)
  1813. for (let id in config.address) {
  1814. let cur = config.address[id],
  1815. prev = tr.startState.config.address[id]
  1816. if (prev != null && (cur & 1) == 0) this.values[cur >> 1] = getAddr(tr.startState, prev)
  1817. }
  1818. }
  1819. this.applying = tr
  1820. if (tr) tr._state = this
  1821. for (let i = 0; i < this.config.dynamicSlots.length; i++) ensureAddr(this, i << 1)
  1822. this.applying = null
  1823. }
  1824. field(field, require = true) {
  1825. let addr = this.config.address[field.id]
  1826. if (addr == null) {
  1827. if (require) throw new RangeError('Field is not present in this state')
  1828. return undefined
  1829. }
  1830. ensureAddr(this, addr)
  1831. return getAddr(this, addr)
  1832. }
  1833. update(...specs) {
  1834. return resolveTransaction(this, specs, true)
  1835. }
  1836. applyTransaction(tr) {
  1837. let conf = this.config,
  1838. { base, compartments } = conf
  1839. for (let _i22 = 0, _tr$effects = tr.effects, _length22 = _tr$effects.length; _i22 < _length22; _i22++) {
  1840. let effect = _tr$effects[_i22]
  1841. if (effect.is(Compartment.reconfigure)) {
  1842. if (conf) {
  1843. compartments = new Map()
  1844. conf.compartments.forEach((val, key) => compartments.set(key, val))
  1845. conf = null
  1846. }
  1847. compartments.set(effect.value.compartment, effect.value.extension)
  1848. } else if (effect.is(StateEffect.reconfigure)) {
  1849. conf = null
  1850. base = effect.value
  1851. } else if (effect.is(StateEffect.appendConfig)) {
  1852. conf = null
  1853. base = asArray$1(base).concat(effect.value)
  1854. }
  1855. }
  1856. new EditorState(conf || Configuration.resolve(base, compartments, this), tr.newDoc, tr.newSelection, tr)
  1857. }
  1858. replaceSelection(text) {
  1859. if (typeof text == 'string') text = this.toText(text)
  1860. return this.changeByRange(range => ({ changes: { from: range.from, to: range.to, insert: text }, range: EditorSelection.cursor(range.from + text.length) }))
  1861. }
  1862. changeByRange(f) {
  1863. let sel = this.selection
  1864. let result1 = f(sel.ranges[0])
  1865. let changes = this.changes(result1.changes),
  1866. ranges = [result1.range]
  1867. let effects = asArray$1(result1.effects)
  1868. for (let i = 1; i < sel.ranges.length; i++) {
  1869. let result = f(sel.ranges[i])
  1870. let newChanges = this.changes(result.changes),
  1871. newMapped = newChanges.map(changes)
  1872. for (let j = 0; j < i; j++) ranges[j] = ranges[j].map(newMapped)
  1873. let mapBy = changes.mapDesc(newChanges, true)
  1874. ranges.push(result.range.map(mapBy))
  1875. changes = changes.compose(newMapped)
  1876. effects = StateEffect.mapEffects(effects, newMapped).concat(StateEffect.mapEffects(asArray$1(result.effects), mapBy))
  1877. }
  1878. return { changes, selection: EditorSelection.create(ranges, sel.mainIndex), effects }
  1879. }
  1880. changes(spec = []) {
  1881. if (spec instanceof ChangeSet) return spec
  1882. return ChangeSet.of(spec, this.doc.length, this.facet(EditorState.lineSeparator))
  1883. }
  1884. toText(string) {
  1885. return Text.of(string.split(this.facet(EditorState.lineSeparator) || DefaultSplit))
  1886. }
  1887. sliceDoc(from = 0, to = this.doc.length) {
  1888. return this.doc.sliceString(from, to, this.lineBreak)
  1889. }
  1890. facet(facet) {
  1891. let addr = this.config.address[facet.id]
  1892. if (addr == null) return facet.default
  1893. ensureAddr(this, addr)
  1894. return getAddr(this, addr)
  1895. }
  1896. toJSON(fields) {
  1897. let result = { doc: this.sliceDoc(), selection: this.selection.toJSON() }
  1898. if (fields)
  1899. for (let prop in fields) {
  1900. let value = fields[prop]
  1901. if (value instanceof StateField) result[prop] = value.spec.toJSON(this.field(fields[prop]), this)
  1902. }
  1903. return result
  1904. }
  1905. static fromJSON(json, config = {}, fields) {
  1906. if (!json || typeof json.doc != 'string') throw new RangeError('Invalid JSON representation for EditorState')
  1907. let fieldInit = []
  1908. if (fields)
  1909. for (let prop in fields) {
  1910. let field = fields[prop],
  1911. value = json[prop]
  1912. fieldInit.push(field.init(state => field.spec.fromJSON(value, state)))
  1913. }
  1914. return EditorState.create({ doc: json.doc, selection: EditorSelection.fromJSON(json.selection), extensions: config.extensions ? fieldInit.concat([config.extensions]) : fieldInit })
  1915. }
  1916. static create(config = {}) {
  1917. let configuration = Configuration.resolve(config.extensions || [], new Map())
  1918. let doc = config.doc instanceof Text ? config.doc : Text.of((config.doc || '').split(configuration.staticFacet(EditorState.lineSeparator) || DefaultSplit))
  1919. let selection = !config.selection
  1920. ? EditorSelection.single(0)
  1921. : config.selection instanceof EditorSelection
  1922. ? config.selection
  1923. : EditorSelection.single(config.selection.anchor, config.selection.head)
  1924. checkSelection(selection, doc.length)
  1925. if (!configuration.staticFacet(allowMultipleSelections)) selection = selection.asSingle()
  1926. return new EditorState(configuration, doc, selection)
  1927. }
  1928. get tabSize() {
  1929. return this.facet(EditorState.tabSize)
  1930. }
  1931. get lineBreak() {
  1932. return this.facet(EditorState.lineSeparator) || '\n'
  1933. }
  1934. phrase(phrase) {
  1935. for (let _i23 = 0, _this$facet = this.facet(EditorState.phrases), _length23 = _this$facet.length; _i23 < _length23; _i23++) {
  1936. let map = _this$facet[_i23]
  1937. if (Object.prototype.hasOwnProperty.call(map, phrase)) return map[phrase]
  1938. }
  1939. return phrase
  1940. }
  1941. languageDataAt(name, pos) {
  1942. let values = []
  1943. for (let _i24 = 0, _this$facet2 = this.facet(languageData), _length24 = _this$facet2.length; _i24 < _length24; _i24++) {
  1944. let provider = _this$facet2[_i24]
  1945. for (let _i25 = 0, _provider = provider(this, pos), _length25 = _provider.length; _i25 < _length25; _i25++) {
  1946. let result = _provider[_i25]
  1947. if (Object.prototype.hasOwnProperty.call(result, name)) values.push(result[name])
  1948. }
  1949. }
  1950. return values
  1951. }
  1952. charCategorizer(at) {
  1953. return makeCategorizer(this.languageDataAt('wordChars', at).join(''))
  1954. }
  1955. wordAt(pos) {
  1956. let { text, from, length } = this.doc.lineAt(pos)
  1957. let cat = this.charCategorizer(pos)
  1958. let start = pos - from,
  1959. end = pos - from
  1960. while (start > 0) {
  1961. let prev = findClusterBreak(text, start, false)
  1962. if (cat(text.slice(prev, start)) != CharCategory.Word) break
  1963. start = prev
  1964. }
  1965. while (end < length) {
  1966. let next = findClusterBreak(text, end)
  1967. if (cat(text.slice(end, next)) != CharCategory.Word) break
  1968. end = next
  1969. }
  1970. return start == end ? EditorSelection.range(start + from, end + from) : null
  1971. }
  1972. }
  1973. EditorState.allowMultipleSelections = allowMultipleSelections
  1974. EditorState.tabSize = Facet.define({ combine: values => (values.length ? values[0] : 4) })
  1975. EditorState.lineSeparator = lineSeparator
  1976. EditorState.phrases = Facet.define()
  1977. EditorState.languageData = languageData
  1978. EditorState.changeFilter = changeFilter
  1979. EditorState.transactionFilter = transactionFilter
  1980. EditorState.transactionExtender = transactionExtender
  1981. Compartment.reconfigure = StateEffect.define()
  1982. function combineConfig(configs, defaults, combine = {}) {
  1983. let result = {}
  1984. for (let _i26 = 0, _length26 = configs.length; _i26 < _length26; _i26++) {
  1985. let config = configs[_i26]
  1986. for (let _i27 = 0, _Object$keys = Object.keys(config), _length27 = _Object$keys.length; _i27 < _length27; _i27++) {
  1987. let key = _Object$keys[_i27]
  1988. let value = config[key],
  1989. current = result[key]
  1990. if (current === undefined) result[key] = value
  1991. else if (current === value || value === undefined);
  1992. else if (Object.hasOwnProperty.call(combine, key)) result[key] = combine[key](current, value)
  1993. else throw new Error('Config merge conflict for field ' + key)
  1994. }
  1995. }
  1996. for (let key in defaults) if (result[key] === undefined) result[key] = defaults[key]
  1997. return result
  1998. }
  1999. var _m1 = Object.freeze({
  2000. __proto__: null,
  2001. Annotation: Annotation,
  2002. AnnotationType: AnnotationType,
  2003. ChangeDesc: ChangeDesc,
  2004. ChangeSet: ChangeSet,
  2005. get CharCategory() {
  2006. return CharCategory
  2007. },
  2008. Compartment: Compartment,
  2009. EditorSelection: EditorSelection,
  2010. EditorState: EditorState,
  2011. Facet: Facet,
  2012. get MapMode() {
  2013. return MapMode
  2014. },
  2015. Prec: Prec,
  2016. SelectionRange: SelectionRange,
  2017. StateEffect: StateEffect,
  2018. StateEffectType: StateEffectType,
  2019. StateField: StateField,
  2020. Transaction: Transaction,
  2021. combineConfig: combineConfig,
  2022. Text: Text
  2023. })
  2024. class RangeValue {
  2025. eq(other) {
  2026. return this == other
  2027. }
  2028. range(from, to = from) {
  2029. return new Range(from, to, this)
  2030. }
  2031. }
  2032. RangeValue.prototype.startSide = RangeValue.prototype.endSide = 0
  2033. RangeValue.prototype.point = false
  2034. RangeValue.prototype.mapMode = MapMode.TrackDel
  2035. class Range {
  2036. constructor(from, to, value) {
  2037. this.from = from
  2038. this.to = to
  2039. this.value = value
  2040. }
  2041. }
  2042. function cmpRange(a, b) {
  2043. return a.from - b.from || a.value.startSide - b.value.startSide
  2044. }
  2045. class Chunk {
  2046. constructor(from, to, value, maxPoint) {
  2047. this.from = from
  2048. this.to = to
  2049. this.value = value
  2050. this.maxPoint = maxPoint
  2051. }
  2052. get length() {
  2053. return this.to[this.to.length - 1]
  2054. }
  2055. findIndex(pos, end, side = end * 1000000000, startAt = 0) {
  2056. if (pos <= 0) return startAt
  2057. let arr = end < 0 ? this.to : this.from
  2058. for (let lo = startAt, hi = arr.length; ; ) {
  2059. if (lo == hi) return lo
  2060. let mid = (lo + hi) >> 1
  2061. let diff = arr[mid] - pos || (end < 0 ? this.value[mid].startSide : this.value[mid].endSide) - side
  2062. if (mid == lo) return diff >= 0 ? lo : hi
  2063. if (diff >= 0) hi = mid
  2064. else lo = mid + 1
  2065. }
  2066. }
  2067. between(offset, from, to, f) {
  2068. for (let i = this.findIndex(from, -1), e = this.findIndex(to, 1, undefined, i); i < e; i++) if (f(this.from[i] + offset, this.to[i] + offset, this.value[i]) === false) return false
  2069. }
  2070. map(offset, changes) {
  2071. let value = [],
  2072. from = [],
  2073. to = [],
  2074. newPos = -1,
  2075. maxPoint = -1
  2076. for (let i = 0; i < this.value.length; i++) {
  2077. let val = this.value[i],
  2078. curFrom = this.from[i] + offset,
  2079. curTo = this.to[i] + offset,
  2080. newFrom,
  2081. newTo
  2082. if (curFrom == curTo) {
  2083. let mapped = changes.mapPos(curFrom, val.startSide, val.mapMode)
  2084. if (mapped == null) continue
  2085. newFrom = newTo = mapped
  2086. } else {
  2087. newFrom = changes.mapPos(curFrom, val.startSide)
  2088. newTo = changes.mapPos(curTo, val.endSide)
  2089. if (newFrom > newTo || (newFrom == newTo && val.startSide > 0 && val.endSide <= 0)) continue
  2090. }
  2091. if ((newTo - newFrom || val.endSide - val.startSide) < 0) continue
  2092. if (newPos < 0) newPos = newFrom
  2093. if (val.point) maxPoint = Math.max(maxPoint, newTo - newFrom)
  2094. value.push(val)
  2095. from.push(newFrom - newPos)
  2096. to.push(newTo - newPos)
  2097. }
  2098. return { mapped: value.length ? new Chunk(from, to, value, maxPoint) : null, pos: newPos }
  2099. }
  2100. }
  2101. class RangeSet {
  2102. constructor(chunkPos, chunk, nextLayer = RangeSet.empty, maxPoint) {
  2103. this.chunkPos = chunkPos
  2104. this.chunk = chunk
  2105. this.nextLayer = nextLayer
  2106. this.maxPoint = maxPoint
  2107. }
  2108. get length() {
  2109. let last = this.chunk.length - 1
  2110. return last < 0 ? 0 : Math.max(this.chunkEnd(last), this.nextLayer.length)
  2111. }
  2112. get size() {
  2113. if (this.isEmpty) return 0
  2114. let size = this.nextLayer.size
  2115. for (let _i28 = 0, _this$chunk = this.chunk, _length28 = _this$chunk.length; _i28 < _length28; _i28++) {
  2116. let chunk = _this$chunk[_i28]
  2117. size += chunk.value.length
  2118. }
  2119. return size
  2120. }
  2121. chunkEnd(index) {
  2122. return this.chunkPos[index] + this.chunk[index].length
  2123. }
  2124. update(updateSpec) {
  2125. let { add = [], sort = false, filterFrom = 0, filterTo = this.length } = updateSpec
  2126. let filter = updateSpec.filter
  2127. if (add.length == 0 && !filter) return this
  2128. if (sort) add.slice().sort(cmpRange)
  2129. if (this.isEmpty) return add.length ? RangeSet.of(add) : this
  2130. let cur = new LayerCursor(this, null, -1).goto(0),
  2131. i = 0,
  2132. spill = []
  2133. let builder = new RangeSetBuilder()
  2134. while (cur.value || i < add.length) {
  2135. if (i < add.length && (cur.from - add[i].from || cur.startSide - add[i].value.startSide) >= 0) {
  2136. let range = add[i++]
  2137. if (!builder.addInner(range.from, range.to, range.value)) spill.push(range)
  2138. } else if (
  2139. cur.rangeIndex == 1 &&
  2140. cur.chunkIndex < this.chunk.length &&
  2141. (i == add.length || this.chunkEnd(cur.chunkIndex) < add[i].from) &&
  2142. (!filter || filterFrom > this.chunkEnd(cur.chunkIndex) || filterTo < this.chunkPos[cur.chunkIndex]) &&
  2143. builder.addChunk(this.chunkPos[cur.chunkIndex], this.chunk[cur.chunkIndex])
  2144. ) {
  2145. cur.nextChunk()
  2146. } else {
  2147. if (!filter || filterFrom > cur.to || filterTo < cur.from || filter(cur.from, cur.to, cur.value)) {
  2148. if (!builder.addInner(cur.from, cur.to, cur.value)) spill.push(new Range(cur.from, cur.to, cur.value))
  2149. }
  2150. cur.next()
  2151. }
  2152. }
  2153. return builder.finishInner(this.nextLayer.isEmpty && !spill.length ? RangeSet.empty : this.nextLayer.update({ add: spill, filter, filterFrom, filterTo }))
  2154. }
  2155. map(changes) {
  2156. if (changes.length == 0 || this.isEmpty) return this
  2157. let chunks = [],
  2158. chunkPos = [],
  2159. maxPoint = -1
  2160. for (let i = 0; i < this.chunk.length; i++) {
  2161. let start = this.chunkPos[i],
  2162. chunk = this.chunk[i]
  2163. let touch = changes.touchesRange(start, start + chunk.length)
  2164. if (touch === false) {
  2165. maxPoint = Math.max(maxPoint, chunk.maxPoint)
  2166. chunks.push(chunk)
  2167. chunkPos.push(changes.mapPos(start))
  2168. } else if (touch === true) {
  2169. let { mapped, pos } = chunk.map(start, changes)
  2170. if (mapped) {
  2171. maxPoint = Math.max(maxPoint, mapped.maxPoint)
  2172. chunks.push(mapped)
  2173. chunkPos.push(pos)
  2174. }
  2175. }
  2176. }
  2177. let next = this.nextLayer.map(changes)
  2178. return chunks.length == 0 ? next : new RangeSet(chunkPos, chunks, next, maxPoint)
  2179. }
  2180. between(from, to, f) {
  2181. if (this.isEmpty) return
  2182. for (let i = 0; i < this.chunk.length; i++) {
  2183. let start = this.chunkPos[i],
  2184. chunk = this.chunk[i]
  2185. if (to >= start && from <= start + chunk.length && chunk.between(start, from - start, to - start, f) === false) return
  2186. }
  2187. this.nextLayer.between(from, to, f)
  2188. }
  2189. iter(from = 0) {
  2190. return HeapCursor.from([this]).goto(from)
  2191. }
  2192. get isEmpty() {
  2193. return this.nextLayer == this
  2194. }
  2195. static iter(sets, from = 0) {
  2196. return HeapCursor.from(sets).goto(from)
  2197. }
  2198. static compare(oldSets, newSets, textDiff, comparator, minPointSize = -1) {
  2199. let a = oldSets.filter(set => set.maxPoint >= 500 || (!set.isEmpty && newSets.indexOf(set) < 0 && set.maxPoint >= minPointSize))
  2200. let b = newSets.filter(set => set.maxPoint >= 500 || (!set.isEmpty && oldSets.indexOf(set) < 0 && set.maxPoint >= minPointSize))
  2201. let sharedChunks = findSharedChunks(a, b)
  2202. let sideA = new SpanCursor(a, sharedChunks, minPointSize)
  2203. let sideB = new SpanCursor(b, sharedChunks, minPointSize)
  2204. textDiff.iterGaps((fromA, fromB, length) => compare(sideA, fromA, sideB, fromB, length, comparator))
  2205. if (textDiff.empty && textDiff.length == 0) compare(sideA, 0, sideB, 0, 0, comparator)
  2206. }
  2207. static eq(oldSets, newSets, from = 0, to) {
  2208. if (to == null) to = 1000000000
  2209. let a = oldSets.filter(set => !set.isEmpty && newSets.indexOf(set) < 0)
  2210. let b = newSets.filter(set => !set.isEmpty && oldSets.indexOf(set) < 0)
  2211. if (a.length != b.length) return false
  2212. if (!a.length) return true
  2213. let sharedChunks = findSharedChunks(a, b)
  2214. let sideA = new SpanCursor(a, sharedChunks, 0).goto(from),
  2215. sideB = new SpanCursor(b, sharedChunks, 0).goto(from)
  2216. for (;;) {
  2217. if (sideA.to != sideB.to || !sameValues(sideA.active, sideB.active) || (sideA.point && (!sideB.point || !sideA.point.eq(sideB.point)))) return false
  2218. if (sideA.to >= to) return true
  2219. sideA.next()
  2220. sideB.next()
  2221. }
  2222. }
  2223. static spans(sets, from, to, iterator, minPointSize = -1) {
  2224. let cursor = new SpanCursor(sets, null, minPointSize).goto(from),
  2225. pos = from
  2226. let open = cursor.openStart
  2227. for (;;) {
  2228. let curTo = Math.min(cursor.to, to)
  2229. if (cursor.point) {
  2230. iterator.point(pos, curTo, cursor.point, cursor.activeForPoint(cursor.to), open)
  2231. open = cursor.openEnd(curTo) + (cursor.to > curTo ? 1 : 0)
  2232. } else if (curTo > pos) {
  2233. iterator.span(pos, curTo, cursor.active, open)
  2234. open = cursor.openEnd(curTo)
  2235. }
  2236. if (cursor.to > to) break
  2237. pos = cursor.to
  2238. cursor.next()
  2239. }
  2240. return open
  2241. }
  2242. static of(ranges, sort = false) {
  2243. let build = new RangeSetBuilder()
  2244. for (let _i29 = 0, _ref = ranges instanceof Range ? [ranges] : sort ? ranges.slice().sort(cmpRange) : ranges, _length29 = _ref.length; _i29 < _length29; _i29++) {
  2245. let range = _ref[_i29]
  2246. build.add(range.from, range.to, range.value)
  2247. }
  2248. return build.finish()
  2249. }
  2250. }
  2251. RangeSet.empty = new RangeSet([], [], null, -1)
  2252. RangeSet.empty.nextLayer = RangeSet.empty
  2253. class RangeSetBuilder {
  2254. constructor() {
  2255. this.chunks = []
  2256. this.chunkPos = []
  2257. this.chunkStart = -1
  2258. this.last = null
  2259. this.lastFrom = -1000000000
  2260. this.lastTo = -1000000000
  2261. this.from = []
  2262. this.to = []
  2263. this.value = []
  2264. this.maxPoint = -1
  2265. this.setMaxPoint = -1
  2266. this.nextLayer = null
  2267. }
  2268. finishChunk(newArrays) {
  2269. this.chunks.push(new Chunk(this.from, this.to, this.value, this.maxPoint))
  2270. this.chunkPos.push(this.chunkStart)
  2271. this.chunkStart = -1
  2272. this.setMaxPoint = Math.max(this.setMaxPoint, this.maxPoint)
  2273. this.maxPoint = -1
  2274. if (newArrays) {
  2275. this.from = []
  2276. this.to = []
  2277. this.value = []
  2278. }
  2279. }
  2280. add(from, to, value) {
  2281. if (!this.addInner(from, to, value)) (this.nextLayer || (this.nextLayer = new RangeSetBuilder())).add(from, to, value)
  2282. }
  2283. addInner(from, to, value) {
  2284. let diff = from - this.lastTo || value.startSide - this.last.endSide
  2285. if (diff <= 0 && (from - this.lastFrom || value.startSide - this.last.startSide) < 0) throw new Error('Ranges must be added sorted by `from` position and `startSide`')
  2286. if (diff < 0) return false
  2287. if (this.from.length == 250) this.finishChunk(true)
  2288. if (this.chunkStart < 0) this.chunkStart = from
  2289. this.from.push(from - this.chunkStart)
  2290. this.to.push(to - this.chunkStart)
  2291. this.last = value
  2292. this.lastFrom = from
  2293. this.lastTo = to
  2294. this.value.push(value)
  2295. if (value.point) this.maxPoint = Math.max(this.maxPoint, to - from)
  2296. return true
  2297. }
  2298. addChunk(from, chunk) {
  2299. if ((from - this.lastTo || chunk.value[0].startSide - this.last.endSide) < 0) return false
  2300. if (this.from.length) this.finishChunk(true)
  2301. this.setMaxPoint = Math.max(this.setMaxPoint, chunk.maxPoint)
  2302. this.chunks.push(chunk)
  2303. this.chunkPos.push(from)
  2304. let last = chunk.value.length - 1
  2305. this.last = chunk.value[last]
  2306. this.lastFrom = chunk.from[last] + from
  2307. this.lastTo = chunk.to[last] + from
  2308. return true
  2309. }
  2310. finish() {
  2311. return this.finishInner(RangeSet.empty)
  2312. }
  2313. finishInner(next) {
  2314. if (this.from.length) this.finishChunk(false)
  2315. if (this.chunks.length == 0) return next
  2316. let result = new RangeSet(this.chunkPos, this.chunks, this.nextLayer ? this.nextLayer.finishInner(next) : next, this.setMaxPoint)
  2317. this.from = null
  2318. return result
  2319. }
  2320. }
  2321. function findSharedChunks(a, b) {
  2322. let inA = new Map()
  2323. for (let _i30 = 0, _length30 = a.length; _i30 < _length30; _i30++) {
  2324. let set = a[_i30]
  2325. for (let i = 0; i < set.chunk.length; i++) if (set.chunk[i].maxPoint < 500) inA.set(set.chunk[i], set.chunkPos[i])
  2326. }
  2327. let shared = new Set()
  2328. for (let _i31 = 0, _length31 = b.length; _i31 < _length31; _i31++) {
  2329. let set = b[_i31]
  2330. for (let i = 0; i < set.chunk.length; i++) if (inA.get(set.chunk[i]) == set.chunkPos[i]) shared.add(set.chunk[i])
  2331. }
  2332. return shared
  2333. }
  2334. class LayerCursor {
  2335. constructor(layer, skip, minPoint, rank = 0) {
  2336. this.layer = layer
  2337. this.skip = skip
  2338. this.minPoint = minPoint
  2339. this.rank = rank
  2340. }
  2341. get startSide() {
  2342. return this.value ? this.value.startSide : 0
  2343. }
  2344. get endSide() {
  2345. return this.value ? this.value.endSide : 0
  2346. }
  2347. goto(pos, side = -1000000000) {
  2348. this.chunkIndex = this.rangeIndex = 0
  2349. this.gotoInner(pos, side, false)
  2350. return this
  2351. }
  2352. gotoInner(pos, side, forward) {
  2353. while (this.chunkIndex < this.layer.chunk.length) {
  2354. let next = this.layer.chunk[this.chunkIndex]
  2355. if (!((this.skip && this.skip.has(next)) || this.layer.chunkEnd(this.chunkIndex) < pos || next.maxPoint < this.minPoint)) break
  2356. this.chunkIndex++
  2357. forward = false
  2358. }
  2359. let rangeIndex = this.chunkIndex == this.layer.chunk.length ? 0 : this.layer.chunk[this.chunkIndex].findIndex(pos - this.layer.chunkPos[this.chunkIndex], -1, side)
  2360. if (!forward || this.rangeIndex < rangeIndex) this.rangeIndex = rangeIndex
  2361. this.next()
  2362. }
  2363. forward(pos, side) {
  2364. if ((this.to - pos || this.endSide - side) < 0) this.gotoInner(pos, side, true)
  2365. }
  2366. next() {
  2367. for (;;) {
  2368. if (this.chunkIndex == this.layer.chunk.length) {
  2369. this.from = this.to = 1000000000
  2370. this.value = null
  2371. break
  2372. } else {
  2373. let chunkPos = this.layer.chunkPos[this.chunkIndex],
  2374. chunk = this.layer.chunk[this.chunkIndex]
  2375. let from = chunkPos + chunk.from[this.rangeIndex]
  2376. this.from = from
  2377. this.to = chunkPos + chunk.to[this.rangeIndex]
  2378. this.value = chunk.value[this.rangeIndex]
  2379. if (++this.rangeIndex == chunk.value.length) {
  2380. this.chunkIndex++
  2381. if (this.skip) {
  2382. while (this.chunkIndex < this.layer.chunk.length && this.skip.has(this.layer.chunk[this.chunkIndex])) this.chunkIndex++
  2383. }
  2384. this.rangeIndex = 0
  2385. }
  2386. if (this.minPoint < 0 || (this.value.point && this.to - this.from >= this.minPoint)) break
  2387. }
  2388. }
  2389. }
  2390. nextChunk() {
  2391. this.chunkIndex++
  2392. this.rangeIndex = 0
  2393. this.next()
  2394. }
  2395. compare(other) {
  2396. return this.from - other.from || this.startSide - other.startSide || this.to - other.to || this.endSide - other.endSide
  2397. }
  2398. }
  2399. class HeapCursor {
  2400. constructor(heap) {
  2401. this.heap = heap
  2402. }
  2403. static from(sets, skip = null, minPoint = -1) {
  2404. let heap = []
  2405. for (let i = 0; i < sets.length; i++) {
  2406. for (let cur = sets[i]; !cur.isEmpty; cur = cur.nextLayer) {
  2407. if (cur.maxPoint >= minPoint) heap.push(new LayerCursor(cur, skip, minPoint, i))
  2408. }
  2409. }
  2410. return heap.length == 1 ? heap[0] : new HeapCursor(heap)
  2411. }
  2412. get startSide() {
  2413. return this.value ? this.value.startSide : 0
  2414. }
  2415. goto(pos, side = -1000000000) {
  2416. for (let _i32 = 0, _this$heap = this.heap, _length32 = _this$heap.length; _i32 < _length32; _i32++) {
  2417. let cur = _this$heap[_i32]
  2418. cur.goto(pos, side)
  2419. }
  2420. for (let i = this.heap.length >> 1; i >= 0; i--) heapBubble(this.heap, i)
  2421. this.next()
  2422. return this
  2423. }
  2424. forward(pos, side) {
  2425. for (let _i33 = 0, _this$heap2 = this.heap, _length33 = _this$heap2.length; _i33 < _length33; _i33++) {
  2426. let cur = _this$heap2[_i33]
  2427. cur.forward(pos, side)
  2428. }
  2429. for (let i = this.heap.length >> 1; i >= 0; i--) heapBubble(this.heap, i)
  2430. if ((this.to - pos || this.value.endSide - side) < 0) this.next()
  2431. }
  2432. next() {
  2433. if (this.heap.length == 0) {
  2434. this.from = this.to = 1000000000
  2435. this.value = null
  2436. this.rank = -1
  2437. } else {
  2438. let top = this.heap[0]
  2439. this.from = top.from
  2440. this.to = top.to
  2441. this.value = top.value
  2442. this.rank = top.rank
  2443. if (top.value) top.next()
  2444. heapBubble(this.heap, 0)
  2445. }
  2446. }
  2447. }
  2448. function heapBubble(heap, index) {
  2449. for (let cur = heap[index]; ; ) {
  2450. let childIndex = (index << 1) + 1
  2451. if (childIndex >= heap.length) break
  2452. let child = heap[childIndex]
  2453. if (childIndex + 1 < heap.length && child.compare(heap[childIndex + 1]) >= 0) {
  2454. child = heap[childIndex + 1]
  2455. childIndex++
  2456. }
  2457. if (cur.compare(child) < 0) break
  2458. heap[childIndex] = cur
  2459. heap[index] = child
  2460. index = childIndex
  2461. }
  2462. }
  2463. class SpanCursor {
  2464. constructor(sets, skip, minPoint) {
  2465. this.minPoint = minPoint
  2466. this.active = []
  2467. this.activeTo = []
  2468. this.activeRank = []
  2469. this.minActive = -1
  2470. this.point = null
  2471. this.pointFrom = 0
  2472. this.pointRank = 0
  2473. this.to = -1000000000
  2474. this.endSide = 0
  2475. this.openStart = -1
  2476. this.cursor = HeapCursor.from(sets, skip, minPoint)
  2477. }
  2478. goto(pos, side = -1000000000) {
  2479. this.cursor.goto(pos, side)
  2480. this.active.length = this.activeTo.length = this.activeRank.length = 0
  2481. this.minActive = -1
  2482. this.to = pos
  2483. this.endSide = side
  2484. this.openStart = -1
  2485. this.next()
  2486. return this
  2487. }
  2488. forward(pos, side) {
  2489. while (this.minActive > -1 && (this.activeTo[this.minActive] - pos || this.active[this.minActive].endSide - side) < 0) this.removeActive(this.minActive)
  2490. this.cursor.forward(pos, side)
  2491. }
  2492. removeActive(index) {
  2493. remove(this.active, index)
  2494. remove(this.activeTo, index)
  2495. remove(this.activeRank, index)
  2496. this.minActive = findMinIndex(this.active, this.activeTo)
  2497. }
  2498. addActive(trackOpen) {
  2499. let i = 0,
  2500. { value, to, rank } = this.cursor
  2501. while (i < this.activeRank.length && this.activeRank[i] <= rank) i++
  2502. insert(this.active, i, value)
  2503. insert(this.activeTo, i, to)
  2504. insert(this.activeRank, i, rank)
  2505. if (trackOpen) insert(trackOpen, i, this.cursor.from)
  2506. this.minActive = findMinIndex(this.active, this.activeTo)
  2507. }
  2508. next() {
  2509. let from = this.to,
  2510. wasPoint = this.point
  2511. this.point = null
  2512. let trackOpen = this.openStart < 0 ? [] : null,
  2513. trackExtra = 0
  2514. for (;;) {
  2515. let a = this.minActive
  2516. if (a > -1 && (this.activeTo[a] - this.cursor.from || this.active[a].endSide - this.cursor.startSide) < 0) {
  2517. if (this.activeTo[a] > from) {
  2518. this.to = this.activeTo[a]
  2519. this.endSide = this.active[a].endSide
  2520. break
  2521. }
  2522. this.removeActive(a)
  2523. if (trackOpen) remove(trackOpen, a)
  2524. } else if (!this.cursor.value) {
  2525. this.to = this.endSide = 1000000000
  2526. break
  2527. } else if (this.cursor.from > from) {
  2528. this.to = this.cursor.from
  2529. this.endSide = this.cursor.startSide
  2530. break
  2531. } else {
  2532. let nextVal = this.cursor.value
  2533. if (!nextVal.point) {
  2534. this.addActive(trackOpen)
  2535. this.cursor.next()
  2536. } else if (wasPoint && this.cursor.to == this.to && this.cursor.from < this.cursor.to && nextVal.endSide == this.endSide) {
  2537. this.cursor.next()
  2538. } else {
  2539. this.point = nextVal
  2540. this.pointFrom = this.cursor.from
  2541. this.pointRank = this.cursor.rank
  2542. this.to = this.cursor.to
  2543. this.endSide = nextVal.endSide
  2544. if (this.cursor.from < from) trackExtra = 1
  2545. this.cursor.next()
  2546. if (this.to > from) this.forward(this.to, this.endSide)
  2547. break
  2548. }
  2549. }
  2550. }
  2551. if (trackOpen) {
  2552. let openStart = 0
  2553. while (openStart < trackOpen.length && trackOpen[openStart] < from) openStart++
  2554. this.openStart = openStart + trackExtra
  2555. }
  2556. }
  2557. activeForPoint(to) {
  2558. if (!this.active.length) return this.active
  2559. let active = []
  2560. for (let i = this.active.length - 1; i >= 0; i--) {
  2561. if (this.activeRank[i] < this.pointRank) break
  2562. if (this.activeTo[i] > to || (this.activeTo[i] == to && this.active[i].endSide > this.point.endSide)) active.push(this.active[i])
  2563. }
  2564. return active.reverse()
  2565. }
  2566. openEnd(to) {
  2567. let open = 0
  2568. for (let i = this.activeTo.length - 1; i >= 0 && this.activeTo[i] > to; i--) open++
  2569. return open
  2570. }
  2571. }
  2572. function compare(a, startA, b, startB, length, comparator) {
  2573. a.goto(startA)
  2574. b.goto(startB)
  2575. let endB = startB + length
  2576. let pos = startB,
  2577. dPos = startB - startA
  2578. for (;;) {
  2579. let diff = a.to + dPos - b.to || a.endSide - b.endSide
  2580. let end = diff < 0 ? a.to + dPos : b.to,
  2581. clipEnd = Math.min(end, endB)
  2582. if (a.point || b.point) {
  2583. if (!(a.point && b.point && (a.point == b.point || a.point.eq(b.point)))) comparator.comparePoint(pos, clipEnd, a.point, b.point)
  2584. } else {
  2585. if (clipEnd > pos && !sameValues(a.active, b.active)) comparator.compareRange(pos, clipEnd, a.active, b.active)
  2586. }
  2587. if (end > endB) break
  2588. pos = end
  2589. if (diff <= 0) a.next()
  2590. if (diff >= 0) b.next()
  2591. }
  2592. }
  2593. function sameValues(a, b) {
  2594. if (a.length != b.length) return false
  2595. for (let i = 0; i < a.length; i++) if (a[i] != b[i] && !a[i].eq(b[i])) return false
  2596. return true
  2597. }
  2598. function remove(array, index) {
  2599. for (let i = index, e = array.length - 1; i < e; i++) array[i] = array[i + 1]
  2600. array.pop()
  2601. }
  2602. function insert(array, index, value) {
  2603. for (let i = array.length - 1; i >= index; i--) array[i + 1] = array[i]
  2604. array[index] = value
  2605. }
  2606. function findMinIndex(value, array) {
  2607. let found = -1,
  2608. foundPos = 1000000000
  2609. for (let i = 0; i < array.length; i++)
  2610. if ((array[i] - foundPos || value[i].endSide - value[found].endSide) < 0) {
  2611. found = i
  2612. foundPos = array[i]
  2613. }
  2614. return found
  2615. }
  2616. var _m2 = Object.freeze({ __proto__: null, Range: Range, RangeSet: RangeSet, RangeSetBuilder: RangeSetBuilder, RangeValue: RangeValue })
  2617. const C = '\u037c'
  2618. const COUNT = typeof Symbol == 'undefined' ? '__' + C : Symbol.for(C)
  2619. const SET = typeof Symbol == 'undefined' ? '__styleSet' + Math.floor(Math.random() * 1e8) : Symbol('styleSet')
  2620. const top = typeof globalThis != 'undefined' ? globalThis : typeof window != 'undefined' ? window : {}
  2621. class StyleModule {
  2622. constructor(spec, options) {
  2623. this.rules = []
  2624. let { finish } = options || {}
  2625. function splitSelector(selector) {
  2626. return /^@/.test(selector) ? [selector] : selector.split(/,\s*/)
  2627. }
  2628. function render(selectors, spec, target, isKeyframes) {
  2629. let local = [],
  2630. isAt = /^@(\w+)\b/.exec(selectors[0]),
  2631. keyframes = isAt && isAt[1] == 'keyframes'
  2632. if (isAt && spec == null) return target.push(selectors[0] + ';')
  2633. for (let prop in spec) {
  2634. let value = spec[prop]
  2635. if (/&/.test(prop)) {
  2636. render(
  2637. prop
  2638. .split(/,\s*/)
  2639. .map(part => selectors.map(sel => part.replace(/&/, sel)))
  2640. .reduce((a, b) => a.concat(b)),
  2641. value,
  2642. target
  2643. )
  2644. } else if (value && typeof value == 'object') {
  2645. if (!isAt) throw new RangeError('The value of a property (' + prop + ') should be a primitive value.')
  2646. render(splitSelector(prop), value, local, keyframes)
  2647. } else if (value != null) {
  2648. local.push(prop.replace(/_.*/, '').replace(/[A-Z]/g, l => '-' + l.toLowerCase()) + ': ' + value + ';')
  2649. }
  2650. }
  2651. if (local.length || keyframes) {
  2652. target.push((finish && !isAt && !isKeyframes ? selectors.map(finish) : selectors).join(', ') + ' {' + local.join(' ') + '}')
  2653. }
  2654. }
  2655. for (let prop in spec) render(splitSelector(prop), spec[prop], this.rules)
  2656. }
  2657. getRules() {
  2658. return this.rules.join('\n')
  2659. }
  2660. static newName() {
  2661. let id = top[COUNT] || 1
  2662. top[COUNT] = id + 1
  2663. return C + id.toString(36)
  2664. }
  2665. static mount(root, modules) {
  2666. ;(root[SET] || new StyleSet(root)).mount(Array.isArray(modules) ? modules : [modules])
  2667. }
  2668. }
  2669. let adoptedSet = null
  2670. class StyleSet {
  2671. constructor(root) {
  2672. if (!root.head && root.adoptedStyleSheets && typeof CSSStyleSheet != 'undefined') {
  2673. if (adoptedSet) {
  2674. root.adoptedStyleSheets = [adoptedSet.sheet].concat(root.adoptedStyleSheets)
  2675. return (root[SET] = adoptedSet)
  2676. }
  2677. this.sheet = new CSSStyleSheet()
  2678. root.adoptedStyleSheets = [this.sheet].concat(root.adoptedStyleSheets)
  2679. adoptedSet = this
  2680. } else {
  2681. this.styleTag = (root.ownerDocument || root).createElement('style')
  2682. let target = root.head || root
  2683. target.insertBefore(this.styleTag, target.firstChild)
  2684. }
  2685. this.modules = []
  2686. root[SET] = this
  2687. }
  2688. mount(modules) {
  2689. let sheet = this.sheet
  2690. let pos = 0,
  2691. j = 0
  2692. for (let i = 0; i < modules.length; i++) {
  2693. let mod = modules[i],
  2694. index = this.modules.indexOf(mod)
  2695. if (index < j && index > -1) {
  2696. this.modules.splice(index, 1)
  2697. j--
  2698. index = -1
  2699. }
  2700. if (index == -1) {
  2701. this.modules.splice(j++, 0, mod)
  2702. if (sheet) for (let k = 0; k < mod.rules.length; k++) sheet.insertRule(mod.rules[k], pos++)
  2703. } else {
  2704. while (j < index) pos += this.modules[j++].rules.length
  2705. pos += mod.rules.length
  2706. j++
  2707. }
  2708. }
  2709. if (!sheet) {
  2710. let text = ''
  2711. for (let i = 0; i < this.modules.length; i++) text += this.modules[i].getRules() + '\n'
  2712. this.styleTag.textContent = text
  2713. }
  2714. }
  2715. }
  2716. var base = {
  2717. 8: 'Backspace',
  2718. 9: 'Tab',
  2719. 10: 'Enter',
  2720. 12: 'NumLock',
  2721. 13: 'Enter',
  2722. 16: 'Shift',
  2723. 17: 'Control',
  2724. 18: 'Alt',
  2725. 20: 'CapsLock',
  2726. 27: 'Escape',
  2727. 32: ' ',
  2728. 33: 'PageUp',
  2729. 34: 'PageDown',
  2730. 35: 'End',
  2731. 36: 'Home',
  2732. 37: 'ArrowLeft',
  2733. 38: 'ArrowUp',
  2734. 39: 'ArrowRight',
  2735. 40: 'ArrowDown',
  2736. 44: 'PrintScreen',
  2737. 45: 'Insert',
  2738. 46: 'Delete',
  2739. 59: ';',
  2740. 61: '=',
  2741. 91: 'Meta',
  2742. 92: 'Meta',
  2743. 106: '*',
  2744. 107: '+',
  2745. 108: ',',
  2746. 109: '-',
  2747. 110: '.',
  2748. 111: '/',
  2749. 144: 'NumLock',
  2750. 145: 'ScrollLock',
  2751. 160: 'Shift',
  2752. 161: 'Shift',
  2753. 162: 'Control',
  2754. 163: 'Control',
  2755. 164: 'Alt',
  2756. 165: 'Alt',
  2757. 173: '-',
  2758. 186: ';',
  2759. 187: '=',
  2760. 188: ',',
  2761. 189: '-',
  2762. 190: '.',
  2763. 191: '/',
  2764. 192: '`',
  2765. 219: '[',
  2766. 220: '\\',
  2767. 221: ']',
  2768. 222: "'",
  2769. 229: 'q'
  2770. }
  2771. var shift = {
  2772. 48: ')',
  2773. 49: '!',
  2774. 50: '@',
  2775. 51: '#',
  2776. 52: '$',
  2777. 53: '%',
  2778. 54: '^',
  2779. 55: '&',
  2780. 56: '*',
  2781. 57: '(',
  2782. 59: ':',
  2783. 61: '+',
  2784. 173: '_',
  2785. 186: ':',
  2786. 187: '+',
  2787. 188: '<',
  2788. 189: '_',
  2789. 190: '>',
  2790. 191: '?',
  2791. 192: '~',
  2792. 219: '{',
  2793. 220: '|',
  2794. 221: '}',
  2795. 222: '"',
  2796. 229: 'Q'
  2797. }
  2798. var chrome$1 = typeof navigator != 'undefined' && /Chrome\/(\d+)/.exec(navigator.userAgent)
  2799. var safari$1 = typeof navigator != 'undefined' && /Apple Computer/.test(navigator.vendor)
  2800. var gecko$1 = typeof navigator != 'undefined' && /Gecko\/\d+/.test(navigator.userAgent)
  2801. var mac = typeof navigator != 'undefined' && /Mac/.test(navigator.platform)
  2802. var ie$1 = typeof navigator != 'undefined' && /MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent)
  2803. var brokenModifierNames = (chrome$1 && (mac || +chrome$1[1] < 57)) || (gecko$1 && mac)
  2804. for (var i = 0; i < 10; i++) base[48 + i] = base[96 + i] = String(i)
  2805. for (var i = 1; i <= 24; i++) base[i + 111] = 'F' + i
  2806. for (var i = 65; i <= 90; i++) {
  2807. base[i] = String.fromCharCode(i + 32)
  2808. shift[i] = String.fromCharCode(i)
  2809. }
  2810. for (var code in base) if (!shift.hasOwnProperty(code)) shift[code] = base[code]
  2811. function keyName(event) {
  2812. var ignoreKey = (brokenModifierNames && (event.ctrlKey || event.altKey || event.metaKey)) || ((safari$1 || ie$1) && event.shiftKey && event.key && event.key.length == 1)
  2813. var name = (!ignoreKey && event.key) || (event.shiftKey ? shift : base)[event.keyCode] || event.key || 'Unidentified'
  2814. if (name == 'Esc') name = 'Escape'
  2815. if (name == 'Del') name = 'Delete'
  2816. if (name == 'Left') name = 'ArrowLeft'
  2817. if (name == 'Up') name = 'ArrowUp'
  2818. if (name == 'Right') name = 'ArrowRight'
  2819. if (name == 'Down') name = 'ArrowDown'
  2820. return name
  2821. }
  2822. function getSelection(root) {
  2823. return root.getSelection ? root.getSelection() : document.getSelection()
  2824. }
  2825. function contains(dom, node) {
  2826. return node ? dom.contains(node.nodeType != 1 ? node.parentNode : node) : false
  2827. }
  2828. function deepActiveElement() {
  2829. let elt = document.activeElement
  2830. while (elt && elt.shadowRoot) elt = elt.shadowRoot.activeElement
  2831. return elt
  2832. }
  2833. function hasSelection(dom, selection) {
  2834. if (!selection.anchorNode) return false
  2835. try {
  2836. return contains(dom, selection.anchorNode)
  2837. } catch (_) {
  2838. return false
  2839. }
  2840. }
  2841. function clientRectsFor(dom) {
  2842. if (dom.nodeType == 3) return textRange(dom, 0, dom.nodeValue.length).getClientRects()
  2843. else if (dom.nodeType == 1) return dom.getClientRects()
  2844. else return []
  2845. }
  2846. function isEquivalentPosition(node, off, targetNode, targetOff) {
  2847. return targetNode ? scanFor(node, off, targetNode, targetOff, -1) || scanFor(node, off, targetNode, targetOff, 1) : false
  2848. }
  2849. function domIndex(node) {
  2850. for (var index = 0; ; index++) {
  2851. node = node.previousSibling
  2852. if (!node) return index
  2853. }
  2854. }
  2855. function scanFor(node, off, targetNode, targetOff, dir) {
  2856. for (;;) {
  2857. if (node == targetNode && off == targetOff) return true
  2858. if (off == (dir < 0 ? 0 : maxOffset(node))) {
  2859. if (node.nodeName == 'DIV') return false
  2860. let parent = node.parentNode
  2861. if (!parent || parent.nodeType != 1) return false
  2862. off = domIndex(node) + (dir < 0 ? 0 : 1)
  2863. node = parent
  2864. } else if (node.nodeType == 1) {
  2865. node = node.childNodes[off + (dir < 0 ? -1 : 0)]
  2866. if (node.nodeType == 1 && node.contentEditable == 'false') return false
  2867. off = dir < 0 ? maxOffset(node) : 0
  2868. } else {
  2869. return false
  2870. }
  2871. }
  2872. }
  2873. function maxOffset(node) {
  2874. return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length
  2875. }
  2876. const Rect0 = { left: 0, right: 0, top: 0, bottom: 0 }
  2877. function flattenRect(rect, left) {
  2878. let x = left ? rect.left : rect.right
  2879. return { left: x, right: x, top: rect.top, bottom: rect.bottom }
  2880. }
  2881. function windowRect(win) {
  2882. return { left: 0, right: win.innerWidth, top: 0, bottom: win.innerHeight }
  2883. }
  2884. const ScrollSpace = 5
  2885. function scrollRectIntoView(dom, rect) {
  2886. let doc = dom.ownerDocument,
  2887. win = doc.defaultView
  2888. for (let cur = dom.parentNode; cur; ) {
  2889. if (cur.nodeType == 1) {
  2890. let bounding,
  2891. top = cur == document.body
  2892. if (top) {
  2893. bounding = windowRect(win)
  2894. } else {
  2895. if (cur.scrollHeight <= cur.clientHeight && cur.scrollWidth <= cur.clientWidth) {
  2896. cur = cur.parentNode
  2897. continue
  2898. }
  2899. let rect = cur.getBoundingClientRect()
  2900. bounding = { left: rect.left, right: rect.left + cur.clientWidth, top: rect.top, bottom: rect.top + cur.clientHeight }
  2901. }
  2902. let moveX = 0,
  2903. moveY = 0
  2904. if (rect.top < bounding.top) moveY = -(bounding.top - rect.top + ScrollSpace)
  2905. else if (rect.bottom > bounding.bottom) moveY = rect.bottom - bounding.bottom + ScrollSpace
  2906. if (rect.left < bounding.left) moveX = -(bounding.left - rect.left + ScrollSpace)
  2907. else if (rect.right > bounding.right) moveX = rect.right - bounding.right + ScrollSpace
  2908. if (moveX || moveY) {
  2909. if (top) {
  2910. win.scrollBy(moveX, moveY)
  2911. } else {
  2912. if (moveY) {
  2913. let start = cur.scrollTop
  2914. cur.scrollTop += moveY
  2915. moveY = cur.scrollTop - start
  2916. }
  2917. if (moveX) {
  2918. let start = cur.scrollLeft
  2919. cur.scrollLeft += moveX
  2920. moveX = cur.scrollLeft - start
  2921. }
  2922. rect = { left: rect.left - moveX, top: rect.top - moveY, right: rect.right - moveX, bottom: rect.bottom - moveY }
  2923. }
  2924. }
  2925. if (top) break
  2926. cur = cur.assignedSlot || cur.parentNode
  2927. } else if (cur.nodeType == 11) {
  2928. cur = cur.host
  2929. } else {
  2930. break
  2931. }
  2932. }
  2933. }
  2934. class DOMSelection {
  2935. constructor() {
  2936. this.anchorNode = null
  2937. this.anchorOffset = 0
  2938. this.focusNode = null
  2939. this.focusOffset = 0
  2940. }
  2941. eq(domSel) {
  2942. return this.anchorNode == domSel.anchorNode && this.anchorOffset == domSel.anchorOffset && this.focusNode == domSel.focusNode && this.focusOffset == domSel.focusOffset
  2943. }
  2944. set(domSel) {
  2945. this.anchorNode = domSel.anchorNode
  2946. this.anchorOffset = domSel.anchorOffset
  2947. this.focusNode = domSel.focusNode
  2948. this.focusOffset = domSel.focusOffset
  2949. }
  2950. }
  2951. let preventScrollSupported = null
  2952. function focusPreventScroll(dom) {
  2953. if (dom.setActive) return dom.setActive()
  2954. if (preventScrollSupported) return dom.focus(preventScrollSupported)
  2955. let stack = []
  2956. for (let cur = dom; cur; cur = cur.parentNode) {
  2957. stack.push(cur, cur.scrollTop, cur.scrollLeft)
  2958. if (cur == cur.ownerDocument) break
  2959. }
  2960. dom.focus(
  2961. preventScrollSupported == null
  2962. ? {
  2963. get preventScroll() {
  2964. preventScrollSupported = { preventScroll: true }
  2965. return true
  2966. }
  2967. }
  2968. : undefined
  2969. )
  2970. if (!preventScrollSupported) {
  2971. preventScrollSupported = false
  2972. for (let i = 0; i < stack.length; ) {
  2973. let elt = stack[i++],
  2974. top = stack[i++],
  2975. left = stack[i++]
  2976. if (elt.scrollTop != top) elt.scrollTop = top
  2977. if (elt.scrollLeft != left) elt.scrollLeft = left
  2978. }
  2979. }
  2980. }
  2981. let scratchRange
  2982. function textRange(node, from, to = from) {
  2983. let range = scratchRange || (scratchRange = document.createRange())
  2984. range.setEnd(node, to)
  2985. range.setStart(node, from)
  2986. return range
  2987. }
  2988. function dispatchKey(elt, name, code) {
  2989. let options = { key: name, code: name, keyCode: code, which: code, cancelable: true }
  2990. let down = new KeyboardEvent('keydown', options)
  2991. down.synthetic = true
  2992. elt.dispatchEvent(down)
  2993. let up = new KeyboardEvent('keyup', options)
  2994. up.synthetic = true
  2995. elt.dispatchEvent(up)
  2996. return down.defaultPrevented || up.defaultPrevented
  2997. }
  2998. class DOMPos {
  2999. constructor(node, offset, precise = true) {
  3000. this.node = node
  3001. this.offset = offset
  3002. this.precise = precise
  3003. }
  3004. static before(dom, precise) {
  3005. return new DOMPos(dom.parentNode, domIndex(dom), precise)
  3006. }
  3007. static after(dom, precise) {
  3008. return new DOMPos(dom.parentNode, domIndex(dom) + 1, precise)
  3009. }
  3010. }
  3011. const none$3 = []
  3012. class ContentView {
  3013. constructor() {
  3014. this.parent = null
  3015. this.dom = null
  3016. this.dirty = 2
  3017. }
  3018. get editorView() {
  3019. if (!this.parent) throw new Error('Accessing view in orphan content view')
  3020. return this.parent.editorView
  3021. }
  3022. get overrideDOMText() {
  3023. return null
  3024. }
  3025. get posAtStart() {
  3026. return this.parent ? this.parent.posBefore(this) : 0
  3027. }
  3028. get posAtEnd() {
  3029. return this.posAtStart + this.length
  3030. }
  3031. posBefore(view) {
  3032. let pos = this.posAtStart
  3033. for (let _i34 = 0, _this$children2 = this.children, _length34 = _this$children2.length; _i34 < _length34; _i34++) {
  3034. let child = _this$children2[_i34]
  3035. if (child == view) return pos
  3036. pos += child.length + child.breakAfter
  3037. }
  3038. throw new RangeError('Invalid child in posBefore')
  3039. }
  3040. posAfter(view) {
  3041. return this.posBefore(view) + view.length
  3042. }
  3043. coordsAt(_pos, _side) {
  3044. return null
  3045. }
  3046. sync(track) {
  3047. var _a
  3048. if (this.dirty & 2) {
  3049. let parent = this.dom,
  3050. pos = null
  3051. for (let _i35 = 0, _this$children3 = this.children, _length35 = _this$children3.length; _i35 < _length35; _i35++) {
  3052. let child = _this$children3[_i35]
  3053. if (child.dirty) {
  3054. let next = pos ? pos.nextSibling : parent.firstChild
  3055. if (!child.dom && next && !((_a = ContentView.get(next)) === null || _a === void 0 ? void 0 : _a.parent)) child.reuseDOM(next)
  3056. child.sync(track)
  3057. child.dirty = 0
  3058. }
  3059. if (track && track.node == parent && pos != child.dom) track.written = true
  3060. syncNodeInto(parent, pos, child.dom)
  3061. pos = child.dom
  3062. }
  3063. let next = pos ? pos.nextSibling : parent.firstChild
  3064. if (next && track && track.node == parent) track.written = true
  3065. while (next) next = rm$1(next)
  3066. } else if (this.dirty & 1) {
  3067. for (let _i36 = 0, _this$children4 = this.children, _length36 = _this$children4.length; _i36 < _length36; _i36++) {
  3068. let child = _this$children4[_i36]
  3069. if (child.dirty) {
  3070. child.sync(track)
  3071. child.dirty = 0
  3072. }
  3073. }
  3074. }
  3075. }
  3076. reuseDOM(_dom) {
  3077. return false
  3078. }
  3079. localPosFromDOM(node, offset) {
  3080. let after
  3081. if (node == this.dom) {
  3082. after = this.dom.childNodes[offset]
  3083. } else {
  3084. let bias = maxOffset(node) == 0 ? 0 : offset == 0 ? -1 : 1
  3085. for (;;) {
  3086. let parent = node.parentNode
  3087. if (parent == this.dom) break
  3088. if (bias == 0 && parent.firstChild != parent.lastChild) {
  3089. if (node == parent.firstChild) bias = -1
  3090. else bias = 1
  3091. }
  3092. node = parent
  3093. }
  3094. if (bias < 0) after = node
  3095. else after = node.nextSibling
  3096. }
  3097. if (after == this.dom.firstChild) return 0
  3098. while (after && !ContentView.get(after)) after = after.nextSibling
  3099. if (!after) return this.length
  3100. for (let i = 0, pos = 0; ; i++) {
  3101. let child = this.children[i]
  3102. if (child.dom == after) return pos
  3103. pos += child.length + child.breakAfter
  3104. }
  3105. }
  3106. domBoundsAround(from, to, offset = 0) {
  3107. let fromI = -1,
  3108. fromStart = -1,
  3109. toI = -1,
  3110. toEnd = -1
  3111. for (let i = 0, pos = offset, prevEnd = offset; i < this.children.length; i++) {
  3112. let child = this.children[i],
  3113. end = pos + child.length
  3114. if (pos < from && end > to) return child.domBoundsAround(from, to, pos)
  3115. if (end >= from && fromI == -1) {
  3116. fromI = i
  3117. fromStart = pos
  3118. }
  3119. if (pos > to && child.dom.parentNode == this.dom) {
  3120. toI = i
  3121. toEnd = prevEnd
  3122. break
  3123. }
  3124. prevEnd = end
  3125. pos = end + child.breakAfter
  3126. }
  3127. return {
  3128. from: fromStart,
  3129. to: toEnd < 0 ? offset + this.length : toEnd,
  3130. startDOM: (fromI ? this.children[fromI - 1].dom.nextSibling : null) || this.dom.firstChild,
  3131. endDOM: toI < this.children.length && toI >= 0 ? this.children[toI].dom : null
  3132. }
  3133. }
  3134. markDirty(andParent = false) {
  3135. if (this.dirty & 2) return
  3136. this.dirty |= 2
  3137. this.markParentsDirty(andParent)
  3138. }
  3139. markParentsDirty(childList) {
  3140. for (let parent = this.parent; parent; parent = parent.parent) {
  3141. if (childList) parent.dirty |= 2
  3142. if (parent.dirty & 1) return
  3143. parent.dirty |= 1
  3144. childList = false
  3145. }
  3146. }
  3147. setParent(parent) {
  3148. if (this.parent != parent) {
  3149. this.parent = parent
  3150. if (this.dirty) this.markParentsDirty(true)
  3151. }
  3152. }
  3153. setDOM(dom) {
  3154. this.dom = dom
  3155. dom.cmView = this
  3156. }
  3157. get rootView() {
  3158. for (let v = this; ; ) {
  3159. let parent = v.parent
  3160. if (!parent) return v
  3161. v = parent
  3162. }
  3163. }
  3164. replaceChildren(from, to, children = none$3) {
  3165. this.markDirty()
  3166. for (let i = from; i < to; i++) {
  3167. let child = this.children[i]
  3168. if (child.parent == this) child.parent = null
  3169. }
  3170. this.children.splice(from, to - from, ...children)
  3171. for (let i = 0; i < children.length; i++) children[i].setParent(this)
  3172. }
  3173. ignoreMutation(_rec) {
  3174. return false
  3175. }
  3176. ignoreEvent(_event) {
  3177. return false
  3178. }
  3179. childCursor(pos = this.length) {
  3180. return new ChildCursor(this.children, pos, this.children.length)
  3181. }
  3182. childPos(pos, bias = 1) {
  3183. return this.childCursor().findPos(pos, bias)
  3184. }
  3185. toString() {
  3186. let name = this.constructor.name.replace('View', '')
  3187. return name + (this.children.length ? '(' + this.children.join() + ')' : this.length ? '[' + (name == 'Text' ? this.text : this.length) + ']' : '') + (this.breakAfter ? '#' : '')
  3188. }
  3189. static get(node) {
  3190. return node.cmView
  3191. }
  3192. }
  3193. ContentView.prototype.breakAfter = 0
  3194. function rm$1(dom) {
  3195. let next = dom.nextSibling
  3196. dom.parentNode.removeChild(dom)
  3197. return next
  3198. }
  3199. function syncNodeInto(parent, after, dom) {
  3200. let next = after ? after.nextSibling : parent.firstChild
  3201. if (dom.parentNode == parent) while (next != dom) next = rm$1(next)
  3202. else parent.insertBefore(dom, next)
  3203. }
  3204. class ChildCursor {
  3205. constructor(children, pos, i) {
  3206. this.children = children
  3207. this.pos = pos
  3208. this.i = i
  3209. this.off = 0
  3210. }
  3211. findPos(pos, bias = 1) {
  3212. for (;;) {
  3213. if (pos > this.pos || (pos == this.pos && (bias > 0 || this.i == 0 || this.children[this.i - 1].breakAfter))) {
  3214. this.off = pos - this.pos
  3215. return this
  3216. }
  3217. let next = this.children[--this.i]
  3218. this.pos -= next.length + next.breakAfter
  3219. }
  3220. }
  3221. }
  3222. let [nav, doc] = typeof navigator != 'undefined' ? [navigator, document] : [{ userAgent: '', vendor: '', platform: '' }, { documentElement: { style: {} } }]
  3223. const ie_edge = /Edge\/(\d+)/.exec(nav.userAgent)
  3224. const ie_upto10 = /MSIE \d/.test(nav.userAgent)
  3225. const ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(nav.userAgent)
  3226. const ie = !!(ie_upto10 || ie_11up || ie_edge)
  3227. const gecko = !ie && /gecko\/(\d+)/i.test(nav.userAgent)
  3228. const chrome = !ie && /Chrome\/(\d+)/.exec(nav.userAgent)
  3229. const webkit = 'webkitFontSmoothing' in doc.documentElement.style
  3230. const safari = !ie && /Apple Computer/.test(nav.vendor)
  3231. var browser = {
  3232. mac: /Mac/.test(nav.platform),
  3233. ie,
  3234. ie_version: ie_upto10 ? doc.documentMode || 6 : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : 0,
  3235. gecko,
  3236. gecko_version: gecko ? +(/Firefox\/(\d+)/.exec(nav.userAgent) || [0, 0])[1] : 0,
  3237. chrome: !!chrome,
  3238. chrome_version: chrome ? +chrome[1] : 0,
  3239. ios: safari && (/Mobile\/\w+/.test(nav.userAgent) || nav.maxTouchPoints > 2),
  3240. android: /Android\b/.test(nav.userAgent),
  3241. webkit,
  3242. safari,
  3243. webkit_version: webkit ? +(/\bAppleWebKit\/(\d+)/.exec(navigator.userAgent) || [0, 0])[1] : 0,
  3244. tabSize: doc.documentElement.style.tabSize != null ? 'tab-size' : '-moz-tab-size'
  3245. }
  3246. const none$2$1 = []
  3247. class InlineView extends ContentView {
  3248. become(_other) {
  3249. return false
  3250. }
  3251. getSide() {
  3252. return 0
  3253. }
  3254. }
  3255. InlineView.prototype.children = none$2$1
  3256. const MaxJoinLen = 256
  3257. class TextView extends InlineView {
  3258. constructor(text) {
  3259. super()
  3260. this.text = text
  3261. }
  3262. get length() {
  3263. return this.text.length
  3264. }
  3265. createDOM(textDOM) {
  3266. this.setDOM(textDOM || document.createTextNode(this.text))
  3267. }
  3268. sync(track) {
  3269. if (!this.dom) this.createDOM()
  3270. if (this.dom.nodeValue != this.text) {
  3271. if (track && track.node == this.dom) track.written = true
  3272. this.dom.nodeValue = this.text
  3273. }
  3274. }
  3275. reuseDOM(dom) {
  3276. if (dom.nodeType != 3) return false
  3277. this.createDOM(dom)
  3278. return true
  3279. }
  3280. merge(from, to, source) {
  3281. if (source && (!(source instanceof TextView) || this.length - (to - from) + source.length > MaxJoinLen)) return false
  3282. this.text = this.text.slice(0, from) + (source ? source.text : '') + this.text.slice(to)
  3283. this.markDirty()
  3284. return true
  3285. }
  3286. slice(from) {
  3287. return new TextView(this.text.slice(from))
  3288. }
  3289. localPosFromDOM(node, offset) {
  3290. return node == this.dom ? offset : offset ? this.text.length : 0
  3291. }
  3292. domAtPos(pos) {
  3293. return new DOMPos(this.dom, pos)
  3294. }
  3295. domBoundsAround(_from, _to, offset) {
  3296. return { from: offset, to: offset + this.length, startDOM: this.dom, endDOM: this.dom.nextSibling }
  3297. }
  3298. coordsAt(pos, side) {
  3299. return textCoords(this.dom, pos, side)
  3300. }
  3301. }
  3302. class MarkView extends InlineView {
  3303. constructor(mark, children = [], length = 0) {
  3304. super()
  3305. this.mark = mark
  3306. this.children = children
  3307. this.length = length
  3308. for (let _i37 = 0, _length37 = children.length; _i37 < _length37; _i37++) {
  3309. let ch = children[_i37]
  3310. ch.setParent(this)
  3311. }
  3312. }
  3313. createDOM() {
  3314. let dom = document.createElement(this.mark.tagName)
  3315. if (this.mark.class) dom.className = this.mark.class
  3316. if (this.mark.attrs) for (let name in this.mark.attrs) dom.setAttribute(name, this.mark.attrs[name])
  3317. this.setDOM(dom)
  3318. }
  3319. sync(track) {
  3320. if (!this.dom) this.createDOM()
  3321. super.sync(track)
  3322. }
  3323. merge(from, to, source, openStart, openEnd) {
  3324. if (source && (!(source instanceof MarkView && source.mark.eq(this.mark)) || (from && openStart <= 0) || (to < this.length && openEnd <= 0))) return false
  3325. mergeInlineChildren(this, from, to, source ? source.children : none$2$1, openStart - 1, openEnd - 1)
  3326. this.markDirty()
  3327. return true
  3328. }
  3329. slice(from) {
  3330. return new MarkView(this.mark, sliceInlineChildren(this.children, from), this.length - from)
  3331. }
  3332. domAtPos(pos) {
  3333. return inlineDOMAtPos(this.dom, this.children, pos)
  3334. }
  3335. coordsAt(pos, side) {
  3336. return coordsInChildren(this, pos, side)
  3337. }
  3338. }
  3339. function textCoords(text, pos, side) {
  3340. let length = text.nodeValue.length
  3341. if (pos > length) pos = length
  3342. let from = pos,
  3343. to = pos,
  3344. flatten = 0
  3345. if ((pos == 0 && side < 0) || (pos == length && side >= 0)) {
  3346. if (!(browser.chrome || browser.gecko)) {
  3347. if (pos) {
  3348. from--
  3349. flatten = 1
  3350. } else {
  3351. to++
  3352. flatten = -1
  3353. }
  3354. }
  3355. } else {
  3356. if (side < 0) from--
  3357. else to++
  3358. }
  3359. let rects = textRange(text, from, to).getClientRects()
  3360. if (!rects.length) return Rect0
  3361. let rect = rects[(flatten ? flatten < 0 : side >= 0) ? 0 : rects.length - 1]
  3362. if (browser.safari && !flatten && rect.width == 0) rect = Array.prototype.find.call(rects, r => r.width) || rect
  3363. return flatten ? flattenRect(rect, flatten < 0) : rect
  3364. }
  3365. class WidgetView extends InlineView {
  3366. constructor(widget, length, side) {
  3367. super()
  3368. this.widget = widget
  3369. this.length = length
  3370. this.side = side
  3371. }
  3372. static create(widget, length, side) {
  3373. return new (widget.customView || WidgetView)(widget, length, side)
  3374. }
  3375. slice(from) {
  3376. return WidgetView.create(this.widget, this.length - from, this.side)
  3377. }
  3378. sync() {
  3379. if (!this.dom || !this.widget.updateDOM(this.dom)) {
  3380. this.setDOM(this.widget.toDOM(this.editorView))
  3381. this.dom.contentEditable = 'false'
  3382. }
  3383. }
  3384. getSide() {
  3385. return this.side
  3386. }
  3387. merge(from, to, source, openStart, openEnd) {
  3388. if (source && (!(source instanceof WidgetView) || !this.widget.compare(source.widget) || (from > 0 && openStart <= 0) || (to < this.length && openEnd <= 0))) return false
  3389. this.length = from + (source ? source.length : 0) + (this.length - to)
  3390. return true
  3391. }
  3392. become(other) {
  3393. if (other.length == this.length && other instanceof WidgetView && other.side == this.side) {
  3394. if (this.widget.constructor == other.widget.constructor) {
  3395. if (!this.widget.eq(other.widget)) this.markDirty(true)
  3396. this.widget = other.widget
  3397. return true
  3398. }
  3399. }
  3400. return false
  3401. }
  3402. ignoreMutation() {
  3403. return true
  3404. }
  3405. ignoreEvent(event) {
  3406. return this.widget.ignoreEvent(event)
  3407. }
  3408. get overrideDOMText() {
  3409. if (this.length == 0) return Text.empty
  3410. let top = this
  3411. while (top.parent) top = top.parent
  3412. let view = top.editorView,
  3413. text = view && view.state.doc,
  3414. start = this.posAtStart
  3415. return text ? text.slice(start, start + this.length) : Text.empty
  3416. }
  3417. domAtPos(pos) {
  3418. return pos == 0 ? DOMPos.before(this.dom) : DOMPos.after(this.dom, pos == this.length)
  3419. }
  3420. domBoundsAround() {
  3421. return null
  3422. }
  3423. coordsAt(pos, side) {
  3424. let rects = this.dom.getClientRects(),
  3425. rect = null
  3426. if (!rects.length) return Rect0
  3427. for (let i = pos > 0 ? rects.length - 1 : 0; ; i += pos > 0 ? -1 : 1) {
  3428. rect = rects[i]
  3429. if (pos > 0 ? i == 0 : i == rects.length - 1 || rect.top < rect.bottom) break
  3430. }
  3431. return (pos == 0 && side > 0) || (pos == this.length && side <= 0) ? rect : flattenRect(rect, pos == 0)
  3432. }
  3433. }
  3434. class CompositionView extends WidgetView {
  3435. domAtPos(pos) {
  3436. return new DOMPos(this.widget.text, pos)
  3437. }
  3438. sync() {
  3439. if (!this.dom) this.setDOM(this.widget.toDOM())
  3440. }
  3441. localPosFromDOM(node, offset) {
  3442. return !offset ? 0 : node.nodeType == 3 ? Math.min(offset, this.length) : this.length
  3443. }
  3444. ignoreMutation() {
  3445. return false
  3446. }
  3447. get overrideDOMText() {
  3448. return null
  3449. }
  3450. coordsAt(pos, side) {
  3451. return textCoords(this.widget.text, pos, side)
  3452. }
  3453. }
  3454. function mergeInlineChildren(parent, from, to, elts, openStart, openEnd) {
  3455. let cur = parent.childCursor()
  3456. let { i: toI, off: toOff } = cur.findPos(to, 1)
  3457. let { i: fromI, off: fromOff } = cur.findPos(from, -1)
  3458. let dLen = from - to
  3459. for (let _i38 = 0, _length38 = elts.length; _i38 < _length38; _i38++) {
  3460. let view = elts[_i38]
  3461. dLen += view.length
  3462. }
  3463. parent.length += dLen
  3464. let { children } = parent
  3465. if (fromI == toI && fromOff) {
  3466. let start = children[fromI]
  3467. if (elts.length == 1 && start.merge(fromOff, toOff, elts[0], openStart, openEnd)) return
  3468. if (elts.length == 0) {
  3469. start.merge(fromOff, toOff, null, openStart, openEnd)
  3470. return
  3471. }
  3472. let after = start.slice(toOff)
  3473. if (after.merge(0, 0, elts[elts.length - 1], 0, openEnd)) elts[elts.length - 1] = after
  3474. else elts.push(after)
  3475. toI++
  3476. openEnd = toOff = 0
  3477. }
  3478. if (toOff) {
  3479. let end = children[toI]
  3480. if (elts.length && end.merge(0, toOff, elts[elts.length - 1], 0, openEnd)) {
  3481. elts.pop()
  3482. openEnd = elts.length ? 0 : openStart
  3483. } else {
  3484. end.merge(0, toOff, null, 0, 0)
  3485. }
  3486. } else if (toI < children.length && elts.length && children[toI].merge(0, 0, elts[elts.length - 1], 0, openEnd)) {
  3487. elts.pop()
  3488. openEnd = elts.length ? 0 : openStart
  3489. }
  3490. if (fromOff) {
  3491. let start = children[fromI]
  3492. if (elts.length && start.merge(fromOff, start.length, elts[0], openStart, 0)) {
  3493. elts.shift()
  3494. openStart = elts.length ? 0 : openEnd
  3495. } else {
  3496. start.merge(fromOff, start.length, null, 0, 0)
  3497. }
  3498. fromI++
  3499. } else if (fromI && elts.length) {
  3500. let end = children[fromI - 1]
  3501. if (end.merge(end.length, end.length, elts[0], openStart, 0)) {
  3502. elts.shift()
  3503. openStart = elts.length ? 0 : openEnd
  3504. }
  3505. }
  3506. while (fromI < toI && elts.length && children[toI - 1].become(elts[elts.length - 1])) {
  3507. elts.pop()
  3508. toI--
  3509. openEnd = elts.length ? 0 : openStart
  3510. }
  3511. while (fromI < toI && elts.length && children[fromI].become(elts[0])) {
  3512. elts.shift()
  3513. fromI++
  3514. openStart = elts.length ? 0 : openEnd
  3515. }
  3516. if (!elts.length && fromI && toI < children.length && openStart && openEnd && children[toI].merge(0, 0, children[fromI - 1], openStart, openEnd)) fromI--
  3517. if (elts.length || fromI != toI) parent.replaceChildren(fromI, toI, elts)
  3518. }
  3519. function sliceInlineChildren(children, from) {
  3520. let result = [],
  3521. off = 0
  3522. for (let _i39 = 0, _length39 = children.length; _i39 < _length39; _i39++) {
  3523. let elt = children[_i39]
  3524. let end = off + elt.length
  3525. if (end > from) result.push(off < from ? elt.slice(from - off) : elt)
  3526. off = end
  3527. }
  3528. return result
  3529. }
  3530. function inlineDOMAtPos(dom, children, pos) {
  3531. let i = 0
  3532. for (let off = 0; i < children.length; i++) {
  3533. let child = children[i],
  3534. end = off + child.length
  3535. if (end == off && child.getSide() <= 0) continue
  3536. if (pos > off && pos < end && child.dom.parentNode == dom) return child.domAtPos(pos - off)
  3537. if (pos <= off) break
  3538. off = end
  3539. }
  3540. for (; i > 0; i--) {
  3541. let before = children[i - 1].dom
  3542. if (before.parentNode == dom) return DOMPos.after(before)
  3543. }
  3544. return new DOMPos(dom, 0)
  3545. }
  3546. function joinInlineInto(parent, view, open) {
  3547. let last,
  3548. { children } = parent
  3549. if (open > 0 && view instanceof MarkView && children.length && (last = children[children.length - 1]) instanceof MarkView && last.mark.eq(view.mark)) {
  3550. joinInlineInto(last, view.children[0], open - 1)
  3551. } else {
  3552. children.push(view)
  3553. view.setParent(parent)
  3554. }
  3555. parent.length += view.length
  3556. }
  3557. function coordsInChildren(view, pos, side) {
  3558. for (let off = 0, i = 0; i < view.children.length; i++) {
  3559. let child = view.children[i],
  3560. end = off + child.length
  3561. if (end == off && child.getSide() <= 0) continue
  3562. if (side <= 0 || end == view.length ? end >= pos : end > pos) return child.coordsAt(pos - off, side)
  3563. off = end
  3564. }
  3565. let last = view.dom.lastChild
  3566. if (!last) return view.dom.getBoundingClientRect()
  3567. let rects = clientRectsFor(last)
  3568. return rects[rects.length - 1]
  3569. }
  3570. function combineAttrs(source, target) {
  3571. for (let name in source) {
  3572. if (name == 'class' && target.class) target.class += ' ' + source.class
  3573. else if (name == 'style' && target.style) target.style += ';' + source.style
  3574. else target[name] = source[name]
  3575. }
  3576. return target
  3577. }
  3578. function attrsEq(a, b) {
  3579. if (a == b) return true
  3580. if (!a || !b) return false
  3581. let keysA = Object.keys(a),
  3582. keysB = Object.keys(b)
  3583. if (keysA.length != keysB.length) return false
  3584. for (let _i40 = 0, _length40 = keysA.length; _i40 < _length40; _i40++) {
  3585. let key = keysA[_i40]
  3586. if (keysB.indexOf(key) == -1 || a[key] !== b[key]) return false
  3587. }
  3588. return true
  3589. }
  3590. function updateAttrs(dom, prev, attrs) {
  3591. if (prev) for (let name in prev) if (!(attrs && name in attrs)) dom.removeAttribute(name)
  3592. if (attrs) for (let name in attrs) if (!(prev && prev[name] == attrs[name])) dom.setAttribute(name, attrs[name])
  3593. }
  3594. class WidgetType {
  3595. eq(_widget) {
  3596. return false
  3597. }
  3598. updateDOM(_dom) {
  3599. return false
  3600. }
  3601. compare(other) {
  3602. return this == other || (this.constructor == other.constructor && this.eq(other))
  3603. }
  3604. get estimatedHeight() {
  3605. return -1
  3606. }
  3607. ignoreEvent(_event) {
  3608. return true
  3609. }
  3610. get customView() {
  3611. return null
  3612. }
  3613. }
  3614. var BlockType = (function(BlockType) {
  3615. BlockType[(BlockType['Text'] = 0)] = 'Text'
  3616. BlockType[(BlockType['WidgetBefore'] = 1)] = 'WidgetBefore'
  3617. BlockType[(BlockType['WidgetAfter'] = 2)] = 'WidgetAfter'
  3618. BlockType[(BlockType['WidgetRange'] = 3)] = 'WidgetRange'
  3619. return BlockType
  3620. })(BlockType || (BlockType = {}))
  3621. class Decoration extends RangeValue {
  3622. constructor(startSide, endSide, widget, spec) {
  3623. super()
  3624. this.startSide = startSide
  3625. this.endSide = endSide
  3626. this.widget = widget
  3627. this.spec = spec
  3628. }
  3629. get heightRelevant() {
  3630. return false
  3631. }
  3632. static mark(spec) {
  3633. return new MarkDecoration(spec)
  3634. }
  3635. static widget(spec) {
  3636. let side = spec.side || 0
  3637. if (spec.block) side += (200000000 + 1) * (side > 0 ? 1 : -1)
  3638. return new PointDecoration(spec, side, side, !!spec.block, spec.widget || null, false)
  3639. }
  3640. static replace(spec) {
  3641. let block = !!spec.block
  3642. let { start, end } = getInclusive(spec)
  3643. let startSide = block ? -200000000 * (start ? 2 : 1) : 100000000 * (start ? -1 : 1)
  3644. let endSide = block ? 200000000 * (end ? 2 : 1) : 100000000 * (end ? 1 : -1)
  3645. return new PointDecoration(spec, startSide, endSide, block, spec.widget || null, true)
  3646. }
  3647. static line(spec) {
  3648. return new LineDecoration(spec)
  3649. }
  3650. static set(of, sort = false) {
  3651. return RangeSet.of(of, sort)
  3652. }
  3653. hasHeight() {
  3654. return this.widget ? this.widget.estimatedHeight > -1 : false
  3655. }
  3656. }
  3657. Decoration.none = RangeSet.empty
  3658. class MarkDecoration extends Decoration {
  3659. constructor(spec) {
  3660. let { start, end } = getInclusive(spec)
  3661. super(100000000 * (start ? -1 : 1), 100000000 * (end ? 1 : -1), null, spec)
  3662. this.tagName = spec.tagName || 'span'
  3663. this.class = spec.class || ''
  3664. this.attrs = spec.attributes || null
  3665. }
  3666. eq(other) {
  3667. return this == other || (other instanceof MarkDecoration && this.tagName == other.tagName && this.class == other.class && attrsEq(this.attrs, other.attrs))
  3668. }
  3669. range(from, to = from) {
  3670. if (from >= to) throw new RangeError('Mark decorations may not be empty')
  3671. return super.range(from, to)
  3672. }
  3673. }
  3674. MarkDecoration.prototype.point = false
  3675. class LineDecoration extends Decoration {
  3676. constructor(spec) {
  3677. super(-100000000, -100000000, null, spec)
  3678. }
  3679. eq(other) {
  3680. return other instanceof LineDecoration && attrsEq(this.spec.attributes, other.spec.attributes)
  3681. }
  3682. range(from, to = from) {
  3683. if (to != from) throw new RangeError('Line decoration ranges must be zero-length')
  3684. return super.range(from, to)
  3685. }
  3686. }
  3687. LineDecoration.prototype.mapMode = MapMode.TrackBefore
  3688. LineDecoration.prototype.point = true
  3689. class PointDecoration extends Decoration {
  3690. constructor(spec, startSide, endSide, block, widget, isReplace) {
  3691. super(startSide, endSide, widget, spec)
  3692. this.block = block
  3693. this.isReplace = isReplace
  3694. this.mapMode = !block ? MapMode.TrackDel : startSide < 0 ? MapMode.TrackBefore : MapMode.TrackAfter
  3695. }
  3696. get type() {
  3697. return this.startSide < this.endSide ? BlockType.WidgetRange : this.startSide < 0 ? BlockType.WidgetBefore : BlockType.WidgetAfter
  3698. }
  3699. get heightRelevant() {
  3700. return this.block || (!!this.widget && this.widget.estimatedHeight >= 5)
  3701. }
  3702. eq(other) {
  3703. return other instanceof PointDecoration && widgetsEq(this.widget, other.widget) && this.block == other.block && this.startSide == other.startSide && this.endSide == other.endSide
  3704. }
  3705. range(from, to = from) {
  3706. if (this.isReplace && (from > to || (from == to && this.startSide > 0 && this.endSide < 0))) throw new RangeError('Invalid range for replacement decoration')
  3707. if (!this.isReplace && to != from) throw new RangeError('Widget decorations can only have zero-length ranges')
  3708. return super.range(from, to)
  3709. }
  3710. }
  3711. PointDecoration.prototype.point = true
  3712. function getInclusive(spec) {
  3713. let { inclusiveStart: start, inclusiveEnd: end } = spec
  3714. if (start == null) start = spec.inclusive
  3715. if (end == null) end = spec.inclusive
  3716. return { start: start || false, end: end || false }
  3717. }
  3718. function widgetsEq(a, b) {
  3719. return a == b || !!(a && b && a.compare(b))
  3720. }
  3721. function addRange(from, to, ranges, margin = 0) {
  3722. let last = ranges.length - 1
  3723. if (last >= 0 && ranges[last] + margin > from) ranges[last] = Math.max(ranges[last], to)
  3724. else ranges.push(from, to)
  3725. }
  3726. class LineView extends ContentView {
  3727. constructor() {
  3728. super(...arguments)
  3729. this.children = []
  3730. this.length = 0
  3731. this.prevAttrs = undefined
  3732. this.attrs = null
  3733. this.breakAfter = 0
  3734. }
  3735. merge(from, to, source, takeDeco, openStart, openEnd) {
  3736. if (source) {
  3737. if (!(source instanceof LineView)) return false
  3738. if (!this.dom) source.transferDOM(this)
  3739. }
  3740. if (takeDeco) this.setDeco(source ? source.attrs : null)
  3741. mergeInlineChildren(this, from, to, source ? source.children : none$1$1, openStart, openEnd)
  3742. return true
  3743. }
  3744. split(at) {
  3745. let end = new LineView()
  3746. end.breakAfter = this.breakAfter
  3747. if (this.length == 0) return end
  3748. let { i, off } = this.childPos(at)
  3749. if (off) {
  3750. end.append(this.children[i].slice(off), 0)
  3751. this.children[i].merge(off, this.children[i].length, null, 0, 0)
  3752. i++
  3753. }
  3754. for (let j = i; j < this.children.length; j++) end.append(this.children[j], 0)
  3755. while (i > 0 && this.children[i - 1].length == 0) {
  3756. this.children[i - 1].parent = null
  3757. i--
  3758. }
  3759. this.children.length = i
  3760. this.markDirty()
  3761. this.length = at
  3762. return end
  3763. }
  3764. transferDOM(other) {
  3765. if (!this.dom) return
  3766. other.setDOM(this.dom)
  3767. other.prevAttrs = this.prevAttrs === undefined ? this.attrs : this.prevAttrs
  3768. this.prevAttrs = undefined
  3769. this.dom = null
  3770. }
  3771. setDeco(attrs) {
  3772. if (!attrsEq(this.attrs, attrs)) {
  3773. if (this.dom) {
  3774. this.prevAttrs = this.attrs
  3775. this.markDirty()
  3776. }
  3777. this.attrs = attrs
  3778. }
  3779. }
  3780. append(child, openStart) {
  3781. joinInlineInto(this, child, openStart)
  3782. }
  3783. addLineDeco(deco) {
  3784. let attrs = deco.spec.attributes
  3785. if (attrs) this.attrs = combineAttrs(attrs, this.attrs || {})
  3786. }
  3787. domAtPos(pos) {
  3788. return inlineDOMAtPos(this.dom, this.children, pos)
  3789. }
  3790. sync(track) {
  3791. if (!this.dom) {
  3792. this.setDOM(document.createElement('div'))
  3793. this.dom.className = 'cm-line'
  3794. this.prevAttrs = this.attrs ? null : undefined
  3795. }
  3796. if (this.prevAttrs !== undefined) {
  3797. updateAttrs(this.dom, this.prevAttrs, this.attrs)
  3798. this.dom.classList.add('cm-line')
  3799. this.prevAttrs = undefined
  3800. }
  3801. super.sync(track)
  3802. let last = this.dom.lastChild
  3803. if (!last || (last.nodeName != 'BR' && ContentView.get(last) instanceof WidgetView && (!browser.ios || !this.children.some(ch => ch instanceof TextView)))) {
  3804. let hack = document.createElement('BR')
  3805. hack.cmIgnore = true
  3806. this.dom.appendChild(hack)
  3807. }
  3808. }
  3809. measureTextSize() {
  3810. if (this.children.length == 0 || this.length > 20) return null
  3811. let totalWidth = 0
  3812. for (let _i41 = 0, _this$children5 = this.children, _length41 = _this$children5.length; _i41 < _length41; _i41++) {
  3813. let child = _this$children5[_i41]
  3814. if (!(child instanceof TextView)) return null
  3815. let rects = clientRectsFor(child.dom)
  3816. if (rects.length != 1) return null
  3817. totalWidth += rects[0].width
  3818. }
  3819. return { lineHeight: this.dom.getBoundingClientRect().height, charWidth: totalWidth / this.length }
  3820. }
  3821. coordsAt(pos, side) {
  3822. return coordsInChildren(this, pos, side)
  3823. }
  3824. match(_other) {
  3825. return false
  3826. }
  3827. get type() {
  3828. return BlockType.Text
  3829. }
  3830. static find(docView, pos) {
  3831. for (let i = 0, off = 0; ; i++) {
  3832. let block = docView.children[i],
  3833. end = off + block.length
  3834. if (end >= pos) {
  3835. if (block instanceof LineView) return block
  3836. if (block.length) return null
  3837. }
  3838. off = end + block.breakAfter
  3839. }
  3840. }
  3841. }
  3842. const none$1$1 = []
  3843. class BlockWidgetView extends ContentView {
  3844. constructor(widget, length, type) {
  3845. super()
  3846. this.widget = widget
  3847. this.length = length
  3848. this.type = type
  3849. this.breakAfter = 0
  3850. }
  3851. merge(from, to, source, _takeDeco, openStart, openEnd) {
  3852. if (source && (!(source instanceof BlockWidgetView) || !this.widget.compare(source.widget) || (from > 0 && openStart <= 0) || (to < this.length && openEnd <= 0))) return false
  3853. this.length = from + (source ? source.length : 0) + (this.length - to)
  3854. return true
  3855. }
  3856. domAtPos(pos) {
  3857. return pos == 0 ? DOMPos.before(this.dom) : DOMPos.after(this.dom, pos == this.length)
  3858. }
  3859. split(at) {
  3860. let len = this.length - at
  3861. this.length = at
  3862. return new BlockWidgetView(this.widget, len, this.type)
  3863. }
  3864. get children() {
  3865. return none$1$1
  3866. }
  3867. sync() {
  3868. if (!this.dom || !this.widget.updateDOM(this.dom)) {
  3869. this.setDOM(this.widget.toDOM(this.editorView))
  3870. this.dom.contentEditable = 'false'
  3871. }
  3872. }
  3873. get overrideDOMText() {
  3874. return this.parent ? this.parent.view.state.doc.slice(this.posAtStart, this.posAtEnd) : Text.empty
  3875. }
  3876. domBoundsAround() {
  3877. return null
  3878. }
  3879. match(other) {
  3880. if (other instanceof BlockWidgetView && other.type == this.type && other.widget.constructor == this.widget.constructor) {
  3881. if (!other.widget.eq(this.widget)) this.markDirty(true)
  3882. this.widget = other.widget
  3883. this.length = other.length
  3884. this.breakAfter = other.breakAfter
  3885. return true
  3886. }
  3887. return false
  3888. }
  3889. ignoreMutation() {
  3890. return true
  3891. }
  3892. ignoreEvent(event) {
  3893. return this.widget.ignoreEvent(event)
  3894. }
  3895. }
  3896. class ContentBuilder {
  3897. constructor(doc, pos, end) {
  3898. this.doc = doc
  3899. this.pos = pos
  3900. this.end = end
  3901. this.content = []
  3902. this.curLine = null
  3903. this.breakAtStart = 0
  3904. this.openStart = -1
  3905. this.openEnd = -1
  3906. this.text = ''
  3907. this.textOff = 0
  3908. this.cursor = doc.iter()
  3909. this.skip = pos
  3910. }
  3911. posCovered() {
  3912. if (this.content.length == 0) return !this.breakAtStart && this.doc.lineAt(this.pos).from != this.pos
  3913. let last = this.content[this.content.length - 1]
  3914. return !last.breakAfter && !(last instanceof BlockWidgetView && last.type == BlockType.WidgetBefore)
  3915. }
  3916. getLine() {
  3917. if (!this.curLine) this.content.push((this.curLine = new LineView()))
  3918. return this.curLine
  3919. }
  3920. addWidget(view) {
  3921. this.curLine = null
  3922. this.content.push(view)
  3923. }
  3924. finish() {
  3925. if (!this.posCovered()) this.getLine()
  3926. }
  3927. wrapMarks(view, active) {
  3928. for (let _i42 = 0, _length42 = active.length; _i42 < _length42; _i42++) {
  3929. let mark = active[_i42]
  3930. view = new MarkView(mark, [view], view.length)
  3931. }
  3932. return view
  3933. }
  3934. buildText(length, active, openStart) {
  3935. while (length > 0) {
  3936. if (this.textOff == this.text.length) {
  3937. let { value, lineBreak, done } = this.cursor.next(this.skip)
  3938. this.skip = 0
  3939. if (done) throw new Error('Ran out of text content when drawing inline views')
  3940. if (lineBreak) {
  3941. if (!this.posCovered()) this.getLine()
  3942. if (this.content.length) this.content[this.content.length - 1].breakAfter = 1
  3943. else this.breakAtStart = 1
  3944. this.curLine = null
  3945. length--
  3946. continue
  3947. } else {
  3948. this.text = value
  3949. this.textOff = 0
  3950. }
  3951. }
  3952. let take = Math.min(this.text.length - this.textOff, length, 512)
  3953. this.getLine().append(this.wrapMarks(new TextView(this.text.slice(this.textOff, this.textOff + take)), active), openStart)
  3954. this.textOff += take
  3955. length -= take
  3956. openStart = 0
  3957. }
  3958. }
  3959. span(from, to, active, openStart) {
  3960. this.buildText(to - from, active, openStart)
  3961. this.pos = to
  3962. if (this.openStart < 0) this.openStart = openStart
  3963. }
  3964. point(from, to, deco, active, openStart) {
  3965. let len = to - from
  3966. if (deco instanceof PointDecoration) {
  3967. if (deco.block) {
  3968. let { type } = deco
  3969. if (type == BlockType.WidgetAfter && !this.posCovered()) this.getLine()
  3970. this.addWidget(new BlockWidgetView(deco.widget || new NullWidget('div'), len, type))
  3971. } else {
  3972. let widget = this.wrapMarks(WidgetView.create(deco.widget || new NullWidget('span'), len, deco.startSide), active)
  3973. this.getLine().append(widget, openStart)
  3974. }
  3975. } else if (this.doc.lineAt(this.pos).from == this.pos) {
  3976. this.getLine().addLineDeco(deco)
  3977. }
  3978. if (len) {
  3979. if (this.textOff + len <= this.text.length) {
  3980. this.textOff += len
  3981. } else {
  3982. this.skip += len - (this.text.length - this.textOff)
  3983. this.text = ''
  3984. this.textOff = 0
  3985. }
  3986. this.pos = to
  3987. }
  3988. if (this.openStart < 0) this.openStart = openStart
  3989. }
  3990. static build(text, from, to, decorations) {
  3991. let builder = new ContentBuilder(text, from, to)
  3992. builder.openEnd = RangeSet.spans(decorations, from, to, builder)
  3993. if (builder.openStart < 0) builder.openStart = builder.openEnd
  3994. builder.finish()
  3995. return builder
  3996. }
  3997. }
  3998. class NullWidget extends WidgetType {
  3999. constructor(tag) {
  4000. super()
  4001. this.tag = tag
  4002. }
  4003. eq(other) {
  4004. return other.tag == this.tag
  4005. }
  4006. toDOM() {
  4007. return document.createElement(this.tag)
  4008. }
  4009. updateDOM(elt) {
  4010. return elt.nodeName.toLowerCase() == this.tag
  4011. }
  4012. }
  4013. const none$4 = []
  4014. const clickAddsSelectionRange = Facet.define()
  4015. const dragMovesSelection$1 = Facet.define()
  4016. const mouseSelectionStyle = Facet.define()
  4017. const exceptionSink = Facet.define()
  4018. const updateListener = Facet.define()
  4019. const inputHandler = Facet.define()
  4020. function logException(state, exception, context) {
  4021. let handler = state.facet(exceptionSink)
  4022. if (handler.length) handler[0](exception)
  4023. else if (window.onerror) window.onerror(String(exception), context, undefined, undefined, exception)
  4024. else if (context) console.error(context + ':', exception)
  4025. else console.error(exception)
  4026. }
  4027. const editable = Facet.define({ combine: values => (values.length ? values[0] : true) })
  4028. class PluginFieldProvider {
  4029. constructor(field, get) {
  4030. this.field = field
  4031. this.get = get
  4032. }
  4033. }
  4034. class PluginField {
  4035. from(get) {
  4036. return new PluginFieldProvider(this, get)
  4037. }
  4038. static define() {
  4039. return new PluginField()
  4040. }
  4041. }
  4042. PluginField.decorations = PluginField.define()
  4043. PluginField.atomicRanges = PluginField.define()
  4044. PluginField.scrollMargins = PluginField.define()
  4045. let nextPluginID = 0
  4046. const viewPlugin = Facet.define()
  4047. class ViewPlugin {
  4048. constructor(id, create, fields) {
  4049. this.id = id
  4050. this.create = create
  4051. this.fields = fields
  4052. this.extension = viewPlugin.of(this)
  4053. }
  4054. static define(create, spec) {
  4055. let { eventHandlers, provide, decorations } = spec || {}
  4056. let fields = []
  4057. if (provide)
  4058. for (let _i43 = 0, _ref2 = Array.isArray(provide) ? provide : [provide], _length43 = _ref2.length; _i43 < _length43; _i43++) {
  4059. let provider = _ref2[_i43]
  4060. fields.push(provider)
  4061. }
  4062. if (eventHandlers) fields.push(domEventHandlers.from(value => ({ plugin: value, handlers: eventHandlers })))
  4063. if (decorations) fields.push(PluginField.decorations.from(decorations))
  4064. return new ViewPlugin(nextPluginID++, create, fields)
  4065. }
  4066. static fromClass(cls, spec) {
  4067. return ViewPlugin.define(view => new cls(view), spec)
  4068. }
  4069. }
  4070. const domEventHandlers = PluginField.define()
  4071. class PluginInstance {
  4072. constructor(spec) {
  4073. this.spec = spec
  4074. this.mustUpdate = null
  4075. this.value = null
  4076. }
  4077. takeField(type, target) {
  4078. for (let _i44 = 0, _this$spec$fields = this.spec.fields, _length44 = _this$spec$fields.length; _i44 < _length44; _i44++) {
  4079. let { field, get } = _this$spec$fields[_i44]
  4080. if (field == type) target.push(get(this.value))
  4081. }
  4082. }
  4083. update(view) {
  4084. if (!this.value) {
  4085. try {
  4086. this.value = this.spec.create(view)
  4087. } catch (e) {
  4088. logException(view.state, e, 'CodeMirror plugin crashed')
  4089. return PluginInstance.dummy
  4090. }
  4091. } else if (this.mustUpdate) {
  4092. let update = this.mustUpdate
  4093. this.mustUpdate = null
  4094. if (!this.value.update) return this
  4095. try {
  4096. this.value.update(update)
  4097. } catch (e) {
  4098. logException(update.state, e, 'CodeMirror plugin crashed')
  4099. if (this.value.destroy)
  4100. try {
  4101. this.value.destroy()
  4102. } catch (_) {}
  4103. return PluginInstance.dummy
  4104. }
  4105. }
  4106. return this
  4107. }
  4108. destroy(view) {
  4109. var _a
  4110. if ((_a = this.value) === null || _a === void 0 ? void 0 : _a.destroy) {
  4111. try {
  4112. this.value.destroy()
  4113. } catch (e) {
  4114. logException(view.state, e, 'CodeMirror plugin crashed')
  4115. }
  4116. }
  4117. }
  4118. }
  4119. PluginInstance.dummy = new PluginInstance(ViewPlugin.define(() => ({})))
  4120. const editorAttributes = Facet.define({ combine: values => values.reduce((a, b) => combineAttrs(b, a), {}) })
  4121. const contentAttributes = Facet.define({ combine: values => values.reduce((a, b) => combineAttrs(b, a), {}) })
  4122. const decorations = Facet.define()
  4123. const styleModule = Facet.define()
  4124. class ChangedRange {
  4125. constructor(fromA, toA, fromB, toB) {
  4126. this.fromA = fromA
  4127. this.toA = toA
  4128. this.fromB = fromB
  4129. this.toB = toB
  4130. }
  4131. join(other) {
  4132. return new ChangedRange(Math.min(this.fromA, other.fromA), Math.max(this.toA, other.toA), Math.min(this.fromB, other.fromB), Math.max(this.toB, other.toB))
  4133. }
  4134. addToSet(set) {
  4135. let i = set.length,
  4136. me = this
  4137. for (; i > 0; i--) {
  4138. let range = set[i - 1]
  4139. if (range.fromA > me.toA) continue
  4140. if (range.toA < me.fromA) break
  4141. me = me.join(range)
  4142. set.splice(i - 1, 1)
  4143. }
  4144. set.splice(i, 0, me)
  4145. return set
  4146. }
  4147. static extendWithRanges(diff, ranges) {
  4148. if (ranges.length == 0) return diff
  4149. let result = []
  4150. for (let dI = 0, rI = 0, posA = 0, posB = 0; ; dI++) {
  4151. let next = dI == diff.length ? null : diff[dI],
  4152. off = posA - posB
  4153. let end = next ? next.fromB : 1e9
  4154. while (rI < ranges.length && ranges[rI] < end) {
  4155. let from = ranges[rI],
  4156. to = ranges[rI + 1]
  4157. let fromB = Math.max(posB, from),
  4158. toB = Math.min(end, to)
  4159. if (fromB <= toB) new ChangedRange(fromB + off, toB + off, fromB, toB).addToSet(result)
  4160. if (to > end) break
  4161. else rI += 2
  4162. }
  4163. if (!next) return result
  4164. new ChangedRange(next.fromA, next.toA, next.fromB, next.toB).addToSet(result)
  4165. posA = next.toA
  4166. posB = next.toB
  4167. }
  4168. }
  4169. }
  4170. class ViewUpdate {
  4171. constructor(view, state, transactions = none$4) {
  4172. this.view = view
  4173. this.state = state
  4174. this.transactions = transactions
  4175. this.flags = 0
  4176. this.startState = view.state
  4177. this.changes = ChangeSet.empty(this.startState.doc.length)
  4178. for (let _i45 = 0, _length45 = transactions.length; _i45 < _length45; _i45++) {
  4179. let tr = transactions[_i45]
  4180. this.changes = this.changes.compose(tr.changes)
  4181. }
  4182. let changedRanges = []
  4183. this.changes.iterChangedRanges((fromA, toA, fromB, toB) => changedRanges.push(new ChangedRange(fromA, toA, fromB, toB)))
  4184. this.changedRanges = changedRanges
  4185. let focus = view.hasFocus
  4186. if (focus != view.inputState.notifiedFocused) {
  4187. view.inputState.notifiedFocused = focus
  4188. this.flags |= 1
  4189. }
  4190. if (this.docChanged) this.flags |= 2
  4191. }
  4192. get viewportChanged() {
  4193. return (this.flags & 4) > 0
  4194. }
  4195. get heightChanged() {
  4196. return (this.flags & 2) > 0
  4197. }
  4198. get geometryChanged() {
  4199. return this.docChanged || (this.flags & (16 | 2)) > 0
  4200. }
  4201. get focusChanged() {
  4202. return (this.flags & 1) > 0
  4203. }
  4204. get docChanged() {
  4205. return this.transactions.some(tr => tr.docChanged)
  4206. }
  4207. get selectionSet() {
  4208. return this.transactions.some(tr => tr.selection)
  4209. }
  4210. get empty() {
  4211. return this.flags == 0 && this.transactions.length == 0
  4212. }
  4213. }
  4214. class DocView extends ContentView {
  4215. constructor(view) {
  4216. super()
  4217. this.view = view
  4218. this.compositionDeco = Decoration.none
  4219. this.decorations = []
  4220. this.minWidth = 0
  4221. this.minWidthFrom = 0
  4222. this.minWidthTo = 0
  4223. this.impreciseAnchor = null
  4224. this.impreciseHead = null
  4225. this.setDOM(view.contentDOM)
  4226. this.children = [new LineView()]
  4227. this.children[0].setParent(this)
  4228. this.updateInner([new ChangedRange(0, 0, 0, view.state.doc.length)], this.updateDeco(), 0)
  4229. }
  4230. get root() {
  4231. return this.view.root
  4232. }
  4233. get editorView() {
  4234. return this.view
  4235. }
  4236. get length() {
  4237. return this.view.state.doc.length
  4238. }
  4239. update(update) {
  4240. let changedRanges = update.changedRanges
  4241. if (this.minWidth > 0 && changedRanges.length) {
  4242. if (!changedRanges.every(({ fromA, toA }) => toA < this.minWidthFrom || fromA > this.minWidthTo)) {
  4243. this.minWidth = 0
  4244. } else {
  4245. this.minWidthFrom = update.changes.mapPos(this.minWidthFrom, 1)
  4246. this.minWidthTo = update.changes.mapPos(this.minWidthTo, 1)
  4247. }
  4248. }
  4249. if (this.view.inputState.composing < 0) this.compositionDeco = Decoration.none
  4250. else if (update.transactions.length) this.compositionDeco = computeCompositionDeco(this.view, update.changes)
  4251. let forceSelection = (browser.ie || browser.chrome) && !this.compositionDeco.size && update && update.state.doc.lines != update.startState.doc.lines
  4252. let prevDeco = this.decorations,
  4253. deco = this.updateDeco()
  4254. let decoDiff = findChangedDeco(prevDeco, deco, update.changes)
  4255. changedRanges = ChangedRange.extendWithRanges(changedRanges, decoDiff)
  4256. let pointerSel = update.transactions.some(tr => tr.annotation(Transaction.userEvent) == 'pointerselection')
  4257. if (
  4258. this.dirty == 0 &&
  4259. changedRanges.length == 0 &&
  4260. !(update.flags & (4 | 8)) &&
  4261. update.state.selection.main.from >= this.view.viewport.from &&
  4262. update.state.selection.main.to <= this.view.viewport.to
  4263. ) {
  4264. this.updateSelection(forceSelection, pointerSel)
  4265. return false
  4266. } else {
  4267. this.updateInner(changedRanges, deco, update.startState.doc.length, forceSelection, pointerSel)
  4268. return true
  4269. }
  4270. }
  4271. updateInner(changes, deco, oldLength, forceSelection = false, pointerSel = false) {
  4272. this.updateChildren(changes, deco, oldLength)
  4273. let { observer } = this.view
  4274. observer.ignore(() => {
  4275. this.dom.style.height = this.view.viewState.domHeight + 'px'
  4276. this.dom.style.minWidth = this.minWidth ? this.minWidth + 'px' : ''
  4277. let track = browser.chrome || browser.ios ? { node: observer.selectionRange.focusNode, written: false } : undefined
  4278. this.sync(track)
  4279. this.dirty = 0
  4280. if (track && (track.written || observer.selectionRange.focusNode != track.node)) forceSelection = true
  4281. this.updateSelection(forceSelection, pointerSel)
  4282. this.dom.style.height = ''
  4283. })
  4284. }
  4285. updateChildren(changes, deco, oldLength) {
  4286. let cursor = this.childCursor(oldLength)
  4287. for (let i = changes.length - 1; ; i--) {
  4288. let next = i >= 0 ? changes[i] : null
  4289. if (!next) break
  4290. let { fromA, toA, fromB, toB } = next
  4291. let { content, breakAtStart, openStart, openEnd } = ContentBuilder.build(this.view.state.doc, fromB, toB, deco)
  4292. let { i: toI, off: toOff } = cursor.findPos(toA, 1)
  4293. let { i: fromI, off: fromOff } = cursor.findPos(fromA, -1)
  4294. this.replaceRange(fromI, fromOff, toI, toOff, content, breakAtStart, openStart, openEnd)
  4295. }
  4296. }
  4297. replaceRange(fromI, fromOff, toI, toOff, content, breakAtStart, openStart, openEnd) {
  4298. let before = this.children[fromI],
  4299. last = content.length ? content[content.length - 1] : null
  4300. let breakAtEnd = last ? last.breakAfter : breakAtStart
  4301. if (fromI == toI && !breakAtStart && !breakAtEnd && content.length < 2 && before.merge(fromOff, toOff, content.length ? last : null, fromOff == 0, openStart, openEnd)) return
  4302. let after = this.children[toI]
  4303. if (toOff < after.length || (after.children.length && after.children[after.children.length - 1].length == 0)) {
  4304. if (fromI == toI) {
  4305. after = after.split(toOff)
  4306. toOff = 0
  4307. }
  4308. if (!breakAtEnd && last && after.merge(0, toOff, last, true, 0, openEnd)) {
  4309. content[content.length - 1] = after
  4310. } else {
  4311. if (toOff || (after.children.length && after.children[0].length == 0)) after.merge(0, toOff, null, false, 0, openEnd)
  4312. content.push(after)
  4313. }
  4314. } else if (after.breakAfter) {
  4315. if (last) last.breakAfter = 1
  4316. else breakAtStart = 1
  4317. }
  4318. toI++
  4319. before.breakAfter = breakAtStart
  4320. if (fromOff > 0) {
  4321. if (!breakAtStart && content.length && before.merge(fromOff, before.length, content[0], false, openStart, 0)) {
  4322. before.breakAfter = content.shift().breakAfter
  4323. } else if (fromOff < before.length || (before.children.length && before.children[before.children.length - 1].length == 0)) {
  4324. before.merge(fromOff, before.length, null, false, openStart, 0)
  4325. }
  4326. fromI++
  4327. }
  4328. while (fromI < toI && content.length) {
  4329. if (this.children[toI - 1].match(content[content.length - 1])) toI--, content.pop()
  4330. else if (this.children[fromI].match(content[0])) fromI++, content.shift()
  4331. else break
  4332. }
  4333. if (fromI < toI || content.length) this.replaceChildren(fromI, toI, content)
  4334. }
  4335. updateSelection(force = false, fromPointer = false) {
  4336. if (!(fromPointer || this.mayControlSelection()) || (browser.ios && this.view.inputState.rapidCompositionStart)) return
  4337. let main = this.view.state.selection.main
  4338. let anchor = this.domAtPos(main.anchor)
  4339. let head = main.empty ? anchor : this.domAtPos(main.head)
  4340. if (browser.gecko && main.empty && betweenUneditable(anchor)) {
  4341. let dummy = document.createTextNode('')
  4342. this.view.observer.ignore(() => anchor.node.insertBefore(dummy, anchor.node.childNodes[anchor.offset] || null))
  4343. anchor = head = new DOMPos(dummy, 0)
  4344. force = true
  4345. }
  4346. let domSel = this.view.observer.selectionRange
  4347. if (
  4348. force ||
  4349. !domSel.focusNode ||
  4350. (browser.gecko && main.empty && nextToUneditable(domSel.focusNode, domSel.focusOffset)) ||
  4351. !isEquivalentPosition(anchor.node, anchor.offset, domSel.anchorNode, domSel.anchorOffset) ||
  4352. !isEquivalentPosition(head.node, head.offset, domSel.focusNode, domSel.focusOffset)
  4353. ) {
  4354. this.view.observer.ignore(() => {
  4355. let rawSel = getSelection(this.root)
  4356. if (main.empty) {
  4357. if (browser.gecko) {
  4358. let nextTo = nextToUneditable(anchor.node, anchor.offset)
  4359. if (nextTo && nextTo != (1 | 2)) {
  4360. let text = nearbyTextNode(anchor.node, anchor.offset, nextTo == 1 ? 1 : -1)
  4361. if (text) anchor = new DOMPos(text, nextTo == 1 ? 0 : text.nodeValue.length)
  4362. }
  4363. }
  4364. rawSel.collapse(anchor.node, anchor.offset)
  4365. if (main.bidiLevel != null && domSel.cursorBidiLevel != null) domSel.cursorBidiLevel = main.bidiLevel
  4366. } else if (rawSel.extend) {
  4367. rawSel.collapse(anchor.node, anchor.offset)
  4368. rawSel.extend(head.node, head.offset)
  4369. } else {
  4370. let range = document.createRange()
  4371. if (main.anchor > main.head) [anchor, head] = [head, anchor]
  4372. range.setEnd(head.node, head.offset)
  4373. range.setStart(anchor.node, anchor.offset)
  4374. rawSel.removeAllRanges()
  4375. rawSel.addRange(range)
  4376. }
  4377. })
  4378. this.view.observer.setSelectionRange(anchor, head)
  4379. }
  4380. this.impreciseAnchor = anchor.precise ? null : new DOMPos(domSel.anchorNode, domSel.anchorOffset)
  4381. this.impreciseHead = head.precise ? null : new DOMPos(domSel.focusNode, domSel.focusOffset)
  4382. }
  4383. enforceCursorAssoc() {
  4384. let cursor = this.view.state.selection.main
  4385. let sel = getSelection(this.root)
  4386. if (!cursor.empty || !cursor.assoc || !sel.modify) return
  4387. let line = LineView.find(this, cursor.head)
  4388. if (!line) return
  4389. let lineStart = line.posAtStart
  4390. if (cursor.head == lineStart || cursor.head == lineStart + line.length) return
  4391. let before = this.coordsAt(cursor.head, -1),
  4392. after = this.coordsAt(cursor.head, 1)
  4393. if (!before || !after || before.bottom > after.top) return
  4394. let dom = this.domAtPos(cursor.head + cursor.assoc)
  4395. sel.collapse(dom.node, dom.offset)
  4396. sel.modify('move', cursor.assoc < 0 ? 'forward' : 'backward', 'lineboundary')
  4397. }
  4398. mayControlSelection() {
  4399. return this.view.state.facet(editable) ? this.root.activeElement == this.dom : hasSelection(this.dom, this.view.observer.selectionRange)
  4400. }
  4401. nearest(dom) {
  4402. for (let cur = dom; cur; ) {
  4403. let domView = ContentView.get(cur)
  4404. if (domView && domView.rootView == this) return domView
  4405. cur = cur.parentNode
  4406. }
  4407. return null
  4408. }
  4409. posFromDOM(node, offset) {
  4410. let view = this.nearest(node)
  4411. if (!view) throw new RangeError('Trying to find position for a DOM position outside of the document')
  4412. return view.localPosFromDOM(node, offset) + view.posAtStart
  4413. }
  4414. domAtPos(pos) {
  4415. let { i, off } = this.childCursor().findPos(pos, -1)
  4416. for (; i < this.children.length - 1; ) {
  4417. let child = this.children[i]
  4418. if (off < child.length || child instanceof LineView) break
  4419. i++
  4420. off = 0
  4421. }
  4422. return this.children[i].domAtPos(off)
  4423. }
  4424. coordsAt(pos, side) {
  4425. for (let off = this.length, i = this.children.length - 1; ; i--) {
  4426. let child = this.children[i],
  4427. start = off - child.breakAfter - child.length
  4428. if (pos > start || (pos == start && (child.type == BlockType.Text || !i || this.children[i - 1].breakAfter))) return child.coordsAt(pos - start, side)
  4429. off = start
  4430. }
  4431. }
  4432. measureVisibleLineHeights() {
  4433. let result = [],
  4434. { from, to } = this.view.viewState.viewport
  4435. let minWidth = Math.max(this.view.scrollDOM.clientWidth, this.minWidth) + 1
  4436. for (let pos = 0, i = 0; i < this.children.length; i++) {
  4437. let child = this.children[i],
  4438. end = pos + child.length
  4439. if (end > to) break
  4440. if (pos >= from) {
  4441. result.push(child.dom.getBoundingClientRect().height)
  4442. let width = child.dom.scrollWidth
  4443. if (width > minWidth) {
  4444. this.minWidth = minWidth = width
  4445. this.minWidthFrom = pos
  4446. this.minWidthTo = end
  4447. }
  4448. }
  4449. pos = end + child.breakAfter
  4450. }
  4451. return result
  4452. }
  4453. measureTextSize() {
  4454. for (let _i46 = 0, _this$children6 = this.children, _length46 = _this$children6.length; _i46 < _length46; _i46++) {
  4455. let child = _this$children6[_i46]
  4456. if (child instanceof LineView) {
  4457. let measure = child.measureTextSize()
  4458. if (measure) return measure
  4459. }
  4460. }
  4461. let dummy = document.createElement('div'),
  4462. lineHeight,
  4463. charWidth
  4464. dummy.className = 'cm-line'
  4465. dummy.textContent = 'abc def ghi jkl mno pqr stu'
  4466. this.view.observer.ignore(() => {
  4467. this.dom.appendChild(dummy)
  4468. let rect = clientRectsFor(dummy.firstChild)[0]
  4469. lineHeight = dummy.getBoundingClientRect().height
  4470. charWidth = rect ? rect.width / 27 : 7
  4471. dummy.remove()
  4472. })
  4473. return { lineHeight, charWidth }
  4474. }
  4475. childCursor(pos = this.length) {
  4476. let i = this.children.length
  4477. if (i) pos -= this.children[--i].length
  4478. return new ChildCursor(this.children, pos, i)
  4479. }
  4480. computeBlockGapDeco() {
  4481. let deco = [],
  4482. vs = this.view.viewState
  4483. for (let pos = 0, i = 0; ; i++) {
  4484. let next = i == vs.viewports.length ? null : vs.viewports[i]
  4485. let end = next ? next.from - 1 : this.length
  4486. if (end > pos) {
  4487. let height = vs.lineAt(end, 0).bottom - vs.lineAt(pos, 0).top
  4488. deco.push(Decoration.replace({ widget: new BlockGapWidget(height), block: true, inclusive: true }).range(pos, end))
  4489. }
  4490. if (!next) break
  4491. pos = next.to + 1
  4492. }
  4493. return Decoration.set(deco)
  4494. }
  4495. updateDeco() {
  4496. return (this.decorations = [
  4497. ...this.view.state.facet(decorations),
  4498. ...this.view.pluginField(PluginField.decorations),
  4499. this.compositionDeco,
  4500. this.computeBlockGapDeco(),
  4501. this.view.viewState.lineGapDeco
  4502. ])
  4503. }
  4504. scrollPosIntoView(pos, side) {
  4505. let rect = this.coordsAt(pos, side)
  4506. if (!rect) return
  4507. let mLeft = 0,
  4508. mRight = 0,
  4509. mTop = 0,
  4510. mBottom = 0
  4511. for (let _i47 = 0, _this$view$pluginFiel = this.view.pluginField(PluginField.scrollMargins), _length47 = _this$view$pluginFiel.length; _i47 < _length47; _i47++) {
  4512. let margins = _this$view$pluginFiel[_i47]
  4513. if (margins) {
  4514. let { left, right, top, bottom } = margins
  4515. if (left != null) mLeft = Math.max(mLeft, left)
  4516. if (right != null) mRight = Math.max(mRight, right)
  4517. if (top != null) mTop = Math.max(mTop, top)
  4518. if (bottom != null) mBottom = Math.max(mBottom, bottom)
  4519. }
  4520. }
  4521. scrollRectIntoView(this.dom, { left: rect.left - mLeft, top: rect.top - mTop, right: rect.right + mRight, bottom: rect.bottom + mBottom })
  4522. }
  4523. }
  4524. function betweenUneditable(pos) {
  4525. return (
  4526. pos.node.nodeType == 1 &&
  4527. pos.node.firstChild &&
  4528. (pos.offset == 0 || pos.node.childNodes[pos.offset - 1].contentEditable == 'false') &&
  4529. (pos.offset == pos.node.childNodes.length || pos.node.childNodes[pos.offset].contentEditable == 'false')
  4530. )
  4531. }
  4532. class BlockGapWidget extends WidgetType {
  4533. constructor(height) {
  4534. super()
  4535. this.height = height
  4536. }
  4537. toDOM() {
  4538. let elt = document.createElement('div')
  4539. this.updateDOM(elt)
  4540. return elt
  4541. }
  4542. eq(other) {
  4543. return other.height == this.height
  4544. }
  4545. updateDOM(elt) {
  4546. elt.style.height = this.height + 'px'
  4547. return true
  4548. }
  4549. get estimatedHeight() {
  4550. return this.height
  4551. }
  4552. }
  4553. function computeCompositionDeco(view, changes) {
  4554. let sel = view.observer.selectionRange
  4555. let textNode = sel.focusNode && nearbyTextNode(sel.focusNode, sel.focusOffset, 0)
  4556. if (!textNode) return Decoration.none
  4557. let cView = view.docView.nearest(textNode)
  4558. let from,
  4559. to,
  4560. topNode = textNode
  4561. if (cView instanceof InlineView) {
  4562. while (cView.parent instanceof InlineView) cView = cView.parent
  4563. from = cView.posAtStart
  4564. to = from + cView.length
  4565. topNode = cView.dom
  4566. } else if (cView instanceof LineView) {
  4567. while (topNode.parentNode != cView.dom) topNode = topNode.parentNode
  4568. let prev = topNode.previousSibling
  4569. while (prev && !ContentView.get(prev)) prev = prev.previousSibling
  4570. from = to = prev ? ContentView.get(prev).posAtEnd : cView.posAtStart
  4571. } else {
  4572. return Decoration.none
  4573. }
  4574. let newFrom = changes.mapPos(from, 1),
  4575. newTo = Math.max(newFrom, changes.mapPos(to, -1))
  4576. let text = textNode.nodeValue,
  4577. { state } = view
  4578. if (newTo - newFrom < text.length) {
  4579. if (state.sliceDoc(newFrom, Math.min(state.doc.length, newFrom + text.length)) == text) newTo = newFrom + text.length
  4580. else if (state.sliceDoc(Math.max(0, newTo - text.length), newTo) == text) newFrom = newTo - text.length
  4581. else return Decoration.none
  4582. } else if (state.sliceDoc(newFrom, newTo) != text) {
  4583. return Decoration.none
  4584. }
  4585. return Decoration.set(Decoration.replace({ widget: new CompositionWidget(topNode, textNode) }).range(newFrom, newTo))
  4586. }
  4587. class CompositionWidget extends WidgetType {
  4588. constructor(top, text) {
  4589. super()
  4590. this.top = top
  4591. this.text = text
  4592. }
  4593. eq(other) {
  4594. return this.top == other.top && this.text == other.text
  4595. }
  4596. toDOM() {
  4597. return this.top
  4598. }
  4599. ignoreEvent() {
  4600. return false
  4601. }
  4602. get customView() {
  4603. return CompositionView
  4604. }
  4605. }
  4606. function nearbyTextNode(node, offset, side) {
  4607. for (;;) {
  4608. if (node.nodeType == 3) return node
  4609. if (node.nodeType == 1 && offset > 0 && side <= 0) {
  4610. node = node.childNodes[offset - 1]
  4611. offset = maxOffset(node)
  4612. } else if (node.nodeType == 1 && offset < node.childNodes.length && side >= 0) {
  4613. node = node.childNodes[offset]
  4614. offset = 0
  4615. } else {
  4616. return null
  4617. }
  4618. }
  4619. }
  4620. function nextToUneditable(node, offset) {
  4621. if (node.nodeType != 1) return 0
  4622. return (offset && node.childNodes[offset - 1].contentEditable == 'false' ? 1 : 0) | (offset < node.childNodes.length && node.childNodes[offset].contentEditable == 'false' ? 2 : 0)
  4623. }
  4624. class DecorationComparator$1 {
  4625. constructor() {
  4626. this.changes = []
  4627. }
  4628. compareRange(from, to) {
  4629. addRange(from, to, this.changes)
  4630. }
  4631. comparePoint(from, to) {
  4632. addRange(from, to, this.changes)
  4633. }
  4634. }
  4635. function findChangedDeco(a, b, diff) {
  4636. let comp = new DecorationComparator$1()
  4637. RangeSet.compare(a, b, diff, comp)
  4638. return comp.changes
  4639. }
  4640. var Direction = (function(Direction) {
  4641. Direction[(Direction['LTR'] = 0)] = 'LTR'
  4642. Direction[(Direction['RTL'] = 1)] = 'RTL'
  4643. return Direction
  4644. })(Direction || (Direction = {}))
  4645. const LTR = Direction.LTR,
  4646. RTL = Direction.RTL
  4647. function dec(str) {
  4648. let result = []
  4649. for (let i = 0; i < str.length; i++) result.push(1 << +str[i])
  4650. return result
  4651. }
  4652. const LowTypes = dec(
  4653. '88888888888888888888888888888888888666888888787833333333337888888000000000000000000000000008888880000000000000000000000000088888888888888888888888888888888888887866668888088888663380888308888800000000000000000000000800000000000000000000000000000008'
  4654. )
  4655. const ArabicTypes = dec(
  4656. '4444448826627288999999999992222222222222222222222222222222222222222222222229999999999999999999994444444444644222822222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222999999949999999229989999223333333333'
  4657. )
  4658. const Brackets = Object.create(null),
  4659. BracketStack = []
  4660. for (let _i48 = 0, _ref3 = ['()', '[]', '{}'], _length48 = _ref3.length; _i48 < _length48; _i48++) {
  4661. let p = _ref3[_i48]
  4662. let l = p.charCodeAt(0),
  4663. r = p.charCodeAt(1)
  4664. Brackets[l] = r
  4665. Brackets[r] = -l
  4666. }
  4667. function charType(ch) {
  4668. return ch <= 0xf7
  4669. ? LowTypes[ch]
  4670. : 0x590 <= ch && ch <= 0x5f4
  4671. ? 2
  4672. : 0x600 <= ch && ch <= 0x6f9
  4673. ? ArabicTypes[ch - 0x600]
  4674. : 0x6ee <= ch && ch <= 0x8ac
  4675. ? 4
  4676. : 0x2000 <= ch && ch <= 0x200b
  4677. ? 256
  4678. : ch == 0x200c
  4679. ? 256
  4680. : 1
  4681. }
  4682. const BidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/
  4683. class BidiSpan {
  4684. constructor(from, to, level) {
  4685. this.from = from
  4686. this.to = to
  4687. this.level = level
  4688. }
  4689. get dir() {
  4690. return this.level % 2 ? RTL : LTR
  4691. }
  4692. side(end, dir) {
  4693. return (this.dir == dir) == end ? this.to : this.from
  4694. }
  4695. static find(order, index, level, assoc) {
  4696. let maybe = -1
  4697. for (let i = 0; i < order.length; i++) {
  4698. let span = order[i]
  4699. if (span.from <= index && span.to >= index) {
  4700. if (span.level == level) return i
  4701. if (maybe < 0 || (assoc != 0 ? (assoc < 0 ? span.from < index : span.to > index) : order[maybe].level > span.level)) maybe = i
  4702. }
  4703. }
  4704. if (maybe < 0) throw new RangeError('Index out of range')
  4705. return maybe
  4706. }
  4707. }
  4708. const types = []
  4709. function computeOrder(line, direction) {
  4710. let len = line.length,
  4711. outerType = direction == LTR ? 1 : 2,
  4712. oppositeType = direction == LTR ? 2 : 1
  4713. if (!line || (outerType == 1 && !BidiRE.test(line))) return trivialOrder(len)
  4714. for (let i = 0, prev = outerType, prevStrong = outerType; i < len; i++) {
  4715. let type = charType(line.charCodeAt(i))
  4716. if (type == 512) type = prev
  4717. else if (type == 8 && prevStrong == 4) type = 16
  4718. types[i] = type == 4 ? 2 : type
  4719. if (type & 7) prevStrong = type
  4720. prev = type
  4721. }
  4722. for (let i = 0, prev = outerType, prevStrong = outerType; i < len; i++) {
  4723. let type = types[i]
  4724. if (type == 128) {
  4725. if (i < len - 1 && prev == types[i + 1] && prev & 24) type = types[i] = prev
  4726. else types[i] = 256
  4727. } else if (type == 64) {
  4728. let end = i + 1
  4729. while (end < len && types[end] == 64) end++
  4730. let replace = (i && prev == 8) || (end < len && types[end] == 8) ? (prevStrong == 1 ? 1 : 8) : 256
  4731. for (let j = i; j < end; j++) types[j] = replace
  4732. i = end - 1
  4733. } else if (type == 8 && prevStrong == 1) {
  4734. types[i] = 1
  4735. }
  4736. prev = type
  4737. if (type & 7) prevStrong = type
  4738. }
  4739. for (let i = 0, sI = 0, context = 0, ch, br, type; i < len; i++) {
  4740. if ((br = Brackets[(ch = line.charCodeAt(i))])) {
  4741. if (br < 0) {
  4742. for (let sJ = sI - 3; sJ >= 0; sJ -= 3) {
  4743. if (BracketStack[sJ + 1] == -br) {
  4744. let flags = BracketStack[sJ + 2]
  4745. let type = flags & 2 ? outerType : !(flags & 4) ? 0 : flags & 1 ? oppositeType : outerType
  4746. if (type) types[i] = types[BracketStack[sJ]] = type
  4747. sI = sJ
  4748. break
  4749. }
  4750. }
  4751. } else if (BracketStack.length == 189) {
  4752. break
  4753. } else {
  4754. BracketStack[sI++] = i
  4755. BracketStack[sI++] = ch
  4756. BracketStack[sI++] = context
  4757. }
  4758. } else if ((type = types[i]) == 2 || type == 1) {
  4759. let embed = type == outerType
  4760. context = embed ? 0 : 1
  4761. for (let sJ = sI - 3; sJ >= 0; sJ -= 3) {
  4762. let cur = BracketStack[sJ + 2]
  4763. if (cur & 2) break
  4764. if (embed) {
  4765. BracketStack[sJ + 2] |= 2
  4766. } else {
  4767. if (cur & 4) break
  4768. BracketStack[sJ + 2] |= 4
  4769. }
  4770. }
  4771. }
  4772. }
  4773. for (let i = 0; i < len; i++) {
  4774. if (types[i] == 256) {
  4775. let end = i + 1
  4776. while (end < len && types[end] == 256) end++
  4777. let beforeL = (i ? types[i - 1] : outerType) == 1
  4778. let afterL = (end < len ? types[end] : outerType) == 1
  4779. let replace = beforeL == afterL ? (beforeL ? 1 : 2) : outerType
  4780. for (let j = i; j < end; j++) types[j] = replace
  4781. i = end - 1
  4782. }
  4783. }
  4784. let order = []
  4785. if (outerType == 1) {
  4786. for (let i = 0; i < len; ) {
  4787. let start = i,
  4788. rtl = types[i++] != 1
  4789. while (i < len && rtl == (types[i] != 1)) i++
  4790. if (rtl) {
  4791. for (let j = i; j > start; ) {
  4792. let end = j,
  4793. l = types[--j] != 2
  4794. while (j > start && l == (types[j - 1] != 2)) j--
  4795. order.push(new BidiSpan(j, end, l ? 2 : 1))
  4796. }
  4797. } else {
  4798. order.push(new BidiSpan(start, i, 0))
  4799. }
  4800. }
  4801. } else {
  4802. for (let i = 0; i < len; ) {
  4803. let start = i,
  4804. rtl = types[i++] == 2
  4805. while (i < len && rtl == (types[i] == 2)) i++
  4806. order.push(new BidiSpan(start, i, rtl ? 1 : 2))
  4807. }
  4808. }
  4809. return order
  4810. }
  4811. function trivialOrder(length) {
  4812. return [new BidiSpan(0, length, 0)]
  4813. }
  4814. let movedOver = ''
  4815. function moveVisually(line, order, dir, start, forward) {
  4816. var _a
  4817. let startIndex = start.head - line.from,
  4818. spanI = -1
  4819. if (startIndex == 0) {
  4820. if (!forward || !line.length) return null
  4821. if (order[0].level != dir) {
  4822. startIndex = order[0].side(false, dir)
  4823. spanI = 0
  4824. }
  4825. } else if (startIndex == line.length) {
  4826. if (forward) return null
  4827. let last = order[order.length - 1]
  4828. if (last.level != dir) {
  4829. startIndex = last.side(true, dir)
  4830. spanI = order.length - 1
  4831. }
  4832. }
  4833. if (spanI < 0) spanI = BidiSpan.find(order, startIndex, (_a = start.bidiLevel) !== null && _a !== void 0 ? _a : -1, start.assoc)
  4834. let span = order[spanI]
  4835. if (startIndex == span.side(forward, dir)) {
  4836. span = order[(spanI += forward ? 1 : -1)]
  4837. startIndex = span.side(!forward, dir)
  4838. }
  4839. let indexForward = forward == (span.dir == dir)
  4840. let nextIndex = findClusterBreak(line.text, startIndex, indexForward)
  4841. movedOver = line.text.slice(Math.min(startIndex, nextIndex), Math.max(startIndex, nextIndex))
  4842. if (nextIndex != span.side(forward, dir)) return EditorSelection.cursor(nextIndex + line.from, indexForward ? -1 : 1, span.level)
  4843. let nextSpan = spanI == (forward ? order.length - 1 : 0) ? null : order[spanI + (forward ? 1 : -1)]
  4844. if (!nextSpan && span.level != dir) return EditorSelection.cursor(forward ? line.to : line.from, forward ? -1 : 1, dir)
  4845. if (nextSpan && nextSpan.level < span.level) return EditorSelection.cursor(nextSpan.side(!forward, dir) + line.from, forward ? 1 : -1, nextSpan.level)
  4846. return EditorSelection.cursor(nextIndex + line.from, forward ? -1 : 1, span.level)
  4847. }
  4848. function groupAt(state, pos, bias = 1) {
  4849. let categorize = state.charCategorizer(pos)
  4850. let line = state.doc.lineAt(pos),
  4851. linePos = pos - line.from
  4852. if (line.length == 0) return EditorSelection.cursor(pos)
  4853. if (linePos == 0) bias = 1
  4854. else if (linePos == line.length) bias = -1
  4855. let from = linePos,
  4856. to = linePos
  4857. if (bias < 0) from = findClusterBreak(line.text, linePos, false)
  4858. else to = findClusterBreak(line.text, linePos)
  4859. let cat = categorize(line.text.slice(from, to))
  4860. while (from > 0) {
  4861. let prev = findClusterBreak(line.text, from, false)
  4862. if (categorize(line.text.slice(prev, from)) != cat) break
  4863. from = prev
  4864. }
  4865. while (to < line.length) {
  4866. let next = findClusterBreak(line.text, to)
  4867. if (categorize(line.text.slice(to, next)) != cat) break
  4868. to = next
  4869. }
  4870. return EditorSelection.range(from + line.from, to + line.from)
  4871. }
  4872. function getdx(x, rect) {
  4873. return rect.left > x ? rect.left - x : Math.max(0, x - rect.right)
  4874. }
  4875. function getdy(y, rect) {
  4876. return rect.top > y ? rect.top - y : Math.max(0, y - rect.bottom)
  4877. }
  4878. function yOverlap(a, b) {
  4879. return a.top < b.bottom - 1 && a.bottom > b.top + 1
  4880. }
  4881. function upTop(rect, top) {
  4882. return top < rect.top ? { top, left: rect.left, right: rect.right, bottom: rect.bottom } : rect
  4883. }
  4884. function upBot(rect, bottom) {
  4885. return bottom > rect.bottom ? { top: rect.top, left: rect.left, right: rect.right, bottom } : rect
  4886. }
  4887. function domPosAtCoords(parent, x, y) {
  4888. let closest, closestRect, closestX, closestY
  4889. let above, below, aboveRect, belowRect
  4890. for (let child = parent.firstChild; child; child = child.nextSibling) {
  4891. let rects = clientRectsFor(child)
  4892. for (let i = 0; i < rects.length; i++) {
  4893. let rect = rects[i]
  4894. if (closestRect && yOverlap(closestRect, rect)) rect = upTop(upBot(rect, closestRect.bottom), closestRect.top)
  4895. let dx = getdx(x, rect),
  4896. dy = getdy(y, rect)
  4897. if (dx == 0 && dy == 0) return child.nodeType == 3 ? domPosInText(child, x, y) : domPosAtCoords(child, x, y)
  4898. if (!closest || closestY > dy || (closestY == dy && closestX > dx)) {
  4899. closest = child
  4900. closestRect = rect
  4901. closestX = dx
  4902. closestY = dy
  4903. }
  4904. if (dx == 0) {
  4905. if (y > rect.bottom && (!aboveRect || aboveRect.bottom < rect.bottom)) {
  4906. above = child
  4907. aboveRect = rect
  4908. } else if (y < rect.top && (!belowRect || belowRect.top > rect.top)) {
  4909. below = child
  4910. belowRect = rect
  4911. }
  4912. } else if (aboveRect && yOverlap(aboveRect, rect)) {
  4913. aboveRect = upBot(aboveRect, rect.bottom)
  4914. } else if (belowRect && yOverlap(belowRect, rect)) {
  4915. belowRect = upTop(belowRect, rect.top)
  4916. }
  4917. }
  4918. }
  4919. if (aboveRect && aboveRect.bottom >= y) {
  4920. closest = above
  4921. closestRect = aboveRect
  4922. } else if (belowRect && belowRect.top <= y) {
  4923. closest = below
  4924. closestRect = belowRect
  4925. }
  4926. if (!closest) return { node: parent, offset: 0 }
  4927. let clipX = Math.max(closestRect.left, Math.min(closestRect.right, x))
  4928. if (closest.nodeType == 3) return domPosInText(closest, clipX, y)
  4929. if (!closestX && closest.contentEditable == 'true') return domPosAtCoords(closest, clipX, y)
  4930. let offset = Array.prototype.indexOf.call(parent.childNodes, closest) + (x >= (closestRect.left + closestRect.right) / 2 ? 1 : 0)
  4931. return { node: parent, offset }
  4932. }
  4933. function domPosInText(node, x, y) {
  4934. let len = node.nodeValue.length
  4935. let closestOffset = -1,
  4936. closestDY = 1e9,
  4937. generalSide = 0
  4938. for (let i = 0; i < len; i++) {
  4939. let rects = textRange(node, i, i + 1).getClientRects()
  4940. for (let j = 0; j < rects.length; j++) {
  4941. let rect = rects[j]
  4942. if (rect.top == rect.bottom) continue
  4943. if (!generalSide) generalSide = x - rect.left
  4944. let dy = (rect.top > y ? rect.top - y : y - rect.bottom) - 1
  4945. if (rect.left - 1 <= x && rect.right + 1 >= x && dy < closestDY) {
  4946. let right = x >= (rect.left + rect.right) / 2,
  4947. after = right
  4948. if (browser.chrome || browser.gecko) {
  4949. let rectBefore = textRange(node, i).getBoundingClientRect()
  4950. if (rectBefore.left == rect.right) after = !right
  4951. }
  4952. if (dy <= 0) return { node, offset: i + (after ? 1 : 0) }
  4953. closestOffset = i + (after ? 1 : 0)
  4954. closestDY = dy
  4955. }
  4956. }
  4957. }
  4958. return { node, offset: closestOffset > -1 ? closestOffset : generalSide > 0 ? node.nodeValue.length : 0 }
  4959. }
  4960. function posAtCoords(view, { x, y }, bias = -1) {
  4961. let content = view.contentDOM.getBoundingClientRect(),
  4962. block
  4963. let halfLine = view.defaultLineHeight / 2
  4964. for (let bounced = false; ; ) {
  4965. block = view.blockAtHeight(y, content.top)
  4966. if (block.top > y || block.bottom < y) {
  4967. bias = block.top > y ? -1 : 1
  4968. y = Math.min(block.bottom - halfLine, Math.max(block.top + halfLine, y))
  4969. if (bounced) return null
  4970. else bounced = true
  4971. }
  4972. if (block.type == BlockType.Text) break
  4973. y = bias > 0 ? block.bottom + halfLine : block.top - halfLine
  4974. }
  4975. let lineStart = block.from
  4976. if (lineStart < view.viewport.from) return view.viewport.from == 0 ? 0 : null
  4977. if (lineStart > view.viewport.to) return view.viewport.to == view.state.doc.length ? view.state.doc.length : null
  4978. x = Math.max(content.left + 1, Math.min(content.right - 1, x))
  4979. let root = view.root,
  4980. element = root.elementFromPoint(x, y)
  4981. let node,
  4982. offset = -1
  4983. if (element && view.contentDOM.contains(element) && !(view.docView.nearest(element) instanceof WidgetView)) {
  4984. if (root.caretPositionFromPoint) {
  4985. let pos = root.caretPositionFromPoint(x, y)
  4986. if (pos) ({ offsetNode: node, offset } = pos)
  4987. } else if (root.caretRangeFromPoint) {
  4988. let range = root.caretRangeFromPoint(x, y)
  4989. if (range) {
  4990. ;({ startContainer: node, startOffset: offset } = range)
  4991. if (browser.safari && isSuspiciousCaretResult(node, offset, x)) node = undefined
  4992. }
  4993. }
  4994. }
  4995. if (!node || !view.docView.dom.contains(node)) {
  4996. let line = LineView.find(view.docView, lineStart)
  4997. ;({ node, offset } = domPosAtCoords(line.dom, x, y))
  4998. }
  4999. return view.docView.posFromDOM(node, offset)
  5000. }
  5001. function isSuspiciousCaretResult(node, offset, x) {
  5002. let len
  5003. if (node.nodeType != 3 || offset != (len = node.nodeValue.length)) return false
  5004. for (let next = node.nextSibling; next; next = next.nextSibling) if (next.nodeType != 1 || next.nodeName != 'BR') return false
  5005. return textRange(node, len - 1, len).getBoundingClientRect().left > x
  5006. }
  5007. function moveToLineBoundary(view, start, forward, includeWrap) {
  5008. let line = view.state.doc.lineAt(start.head)
  5009. let coords = !includeWrap || !view.lineWrapping ? null : view.coordsAtPos(start.assoc < 0 && start.head > line.from ? start.head - 1 : start.head)
  5010. if (coords) {
  5011. let editorRect = view.dom.getBoundingClientRect()
  5012. let pos = view.posAtCoords({ x: forward == (view.textDirection == Direction.LTR) ? editorRect.right - 1 : editorRect.left + 1, y: (coords.top + coords.bottom) / 2 })
  5013. if (pos != null) return EditorSelection.cursor(pos, forward ? -1 : 1)
  5014. }
  5015. let lineView = LineView.find(view.docView, start.head)
  5016. let end = lineView ? (forward ? lineView.posAtEnd : lineView.posAtStart) : forward ? line.to : line.from
  5017. return EditorSelection.cursor(end, forward ? -1 : 1)
  5018. }
  5019. function moveByChar(view, start, forward, by) {
  5020. let line = view.state.doc.lineAt(start.head),
  5021. spans = view.bidiSpans(line)
  5022. for (let cur = start, check = null; ; ) {
  5023. let next = moveVisually(line, spans, view.textDirection, cur, forward),
  5024. char = movedOver
  5025. if (!next) {
  5026. if (line.number == (forward ? view.state.doc.lines : 1)) return cur
  5027. char = '\n'
  5028. line = view.state.doc.line(line.number + (forward ? 1 : -1))
  5029. spans = view.bidiSpans(line)
  5030. next = EditorSelection.cursor(forward ? line.from : line.to)
  5031. }
  5032. if (!check) {
  5033. if (!by) return next
  5034. check = by(char)
  5035. } else if (!check(char)) {
  5036. return cur
  5037. }
  5038. cur = next
  5039. }
  5040. }
  5041. function byGroup(view, pos, start) {
  5042. let categorize = view.state.charCategorizer(pos)
  5043. let cat = categorize(start)
  5044. return next => {
  5045. let nextCat = categorize(next)
  5046. if (cat == CharCategory.Space) cat = nextCat
  5047. return cat == nextCat
  5048. }
  5049. }
  5050. function moveVertically(view, start, forward, distance) {
  5051. var _a
  5052. let startPos = start.head,
  5053. dir = forward ? 1 : -1
  5054. if (startPos == (forward ? view.state.doc.length : 0)) return EditorSelection.cursor(startPos)
  5055. let startCoords = view.coordsAtPos(startPos)
  5056. if (startCoords) {
  5057. let rect = view.dom.getBoundingClientRect()
  5058. let goal = (_a = start.goalColumn) !== null && _a !== void 0 ? _a : startCoords.left - rect.left
  5059. let resolvedGoal = rect.left + goal
  5060. let dist = distance !== null && distance !== void 0 ? distance : view.defaultLineHeight >> 1
  5061. for (let startY = dir < 0 ? startCoords.top : startCoords.bottom, extra = 0; extra < 50; extra += 10) {
  5062. let pos = posAtCoords(view, { x: resolvedGoal, y: startY + (dist + extra) * dir }, dir)
  5063. if (pos == null) break
  5064. if (pos != startPos) return EditorSelection.cursor(pos, undefined, undefined, goal)
  5065. }
  5066. }
  5067. let { doc } = view.state,
  5068. line = doc.lineAt(startPos),
  5069. tabSize = view.state.tabSize
  5070. let goal = start.goalColumn,
  5071. goalCol = 0
  5072. if (goal == null) {
  5073. for (const iter = doc.iterRange(line.from, startPos); !iter.next().done; ) goalCol = countColumn(iter.value, goalCol, tabSize)
  5074. goal = goalCol * view.defaultCharacterWidth
  5075. } else {
  5076. goalCol = Math.round(goal / view.defaultCharacterWidth)
  5077. }
  5078. if (dir < 0 && line.from == 0) return EditorSelection.cursor(0)
  5079. else if (dir > 0 && line.to == doc.length) return EditorSelection.cursor(line.to)
  5080. let otherLine = doc.line(line.number + dir)
  5081. let result = otherLine.from
  5082. let seen = 0
  5083. for (const iter = doc.iterRange(otherLine.from, otherLine.to); seen >= goalCol && !iter.next().done; ) {
  5084. const { offset, leftOver } = findColumn(iter.value, seen, goalCol, tabSize)
  5085. seen = goalCol - leftOver
  5086. result += offset
  5087. }
  5088. return EditorSelection.cursor(result, undefined, undefined, goal)
  5089. }
  5090. function skipAtoms(view, oldPos, pos) {
  5091. let atoms = view.pluginField(PluginField.atomicRanges)
  5092. for (;;) {
  5093. let moved = false
  5094. for (let _i49 = 0, _length49 = atoms.length; _i49 < _length49; _i49++) {
  5095. let set = atoms[_i49]
  5096. set.between(pos.from - 1, pos.from + 1, (from, to, value) => {
  5097. if (pos.from > from && pos.from < to) {
  5098. pos = oldPos.from > pos.from ? EditorSelection.cursor(from, 1) : EditorSelection.cursor(to, -1)
  5099. moved = true
  5100. }
  5101. })
  5102. }
  5103. if (!moved) return pos
  5104. }
  5105. }
  5106. class InputState {
  5107. constructor(view) {
  5108. this.lastKeyCode = 0
  5109. this.lastKeyTime = 0
  5110. this.pendingIOSKey = null
  5111. this.lastSelectionOrigin = null
  5112. this.lastSelectionTime = 0
  5113. this.lastEscPress = 0
  5114. this.lastContextMenu = 0
  5115. this.scrollHandlers = []
  5116. this.registeredEvents = []
  5117. this.customHandlers = []
  5118. this.composing = -1
  5119. this.compositionEndedAt = 0
  5120. this.rapidCompositionStart = false
  5121. this.mouseSelection = null
  5122. for (let type in handlers) {
  5123. let handler = handlers[type]
  5124. view.contentDOM.addEventListener(type, event => {
  5125. if (type == 'keydown' && this.keydown(view, event)) return
  5126. if (!eventBelongsToEditor(view, event) || this.ignoreDuringComposition(event)) return
  5127. if (this.mustFlushObserver(event)) view.observer.forceFlush()
  5128. if (this.runCustomHandlers(type, view, event)) event.preventDefault()
  5129. else handler(view, event)
  5130. })
  5131. this.registeredEvents.push(type)
  5132. }
  5133. this.notifiedFocused = view.hasFocus
  5134. this.ensureHandlers(view)
  5135. if (browser.safari) view.contentDOM.addEventListener('input', () => null)
  5136. }
  5137. setSelectionOrigin(origin) {
  5138. this.lastSelectionOrigin = origin
  5139. this.lastSelectionTime = Date.now()
  5140. }
  5141. ensureHandlers(view) {
  5142. let handlers = (this.customHandlers = view.pluginField(domEventHandlers))
  5143. for (let _i50 = 0, _length50 = handlers.length; _i50 < _length50; _i50++) {
  5144. let set = handlers[_i50]
  5145. for (let type in set.handlers)
  5146. if (this.registeredEvents.indexOf(type) < 0 && type != 'scroll') {
  5147. this.registeredEvents.push(type)
  5148. view.contentDOM.addEventListener(type, event => {
  5149. if (!eventBelongsToEditor(view, event)) return
  5150. if (this.runCustomHandlers(type, view, event)) event.preventDefault()
  5151. })
  5152. }
  5153. }
  5154. }
  5155. runCustomHandlers(type, view, event) {
  5156. for (let _i51 = 0, _this$customHandlers = this.customHandlers, _length51 = _this$customHandlers.length; _i51 < _length51; _i51++) {
  5157. let set = _this$customHandlers[_i51]
  5158. let handler = set.handlers[type],
  5159. handled = false
  5160. if (handler) {
  5161. try {
  5162. handled = handler.call(set.plugin, event, view)
  5163. } catch (e) {
  5164. logException(view.state, e)
  5165. }
  5166. if (handled || event.defaultPrevented) {
  5167. if (browser.android && type == 'keydown' && event.keyCode == 13) view.observer.flushSoon()
  5168. return true
  5169. }
  5170. }
  5171. }
  5172. return false
  5173. }
  5174. runScrollHandlers(view, event) {
  5175. for (let _i52 = 0, _this$customHandlers2 = this.customHandlers, _length52 = _this$customHandlers2.length; _i52 < _length52; _i52++) {
  5176. let set = _this$customHandlers2[_i52]
  5177. let handler = set.handlers.scroll
  5178. if (handler) {
  5179. try {
  5180. handler.call(set.plugin, event, view)
  5181. } catch (e) {
  5182. logException(view.state, e)
  5183. }
  5184. }
  5185. }
  5186. }
  5187. keydown(view, event) {
  5188. this.lastKeyCode = event.keyCode
  5189. this.lastKeyTime = Date.now()
  5190. if (this.screenKeyEvent(view, event)) return true
  5191. if (browser.ios && (event.keyCode == 13 || event.keyCode == 8) && !(event.ctrlKey || event.altKey || event.metaKey) && !event.synthetic) {
  5192. this.pendingIOSKey = event.keyCode == 13 ? 'enter' : 'backspace'
  5193. setTimeout(() => this.flushIOSKey(view), 250)
  5194. return true
  5195. }
  5196. return false
  5197. }
  5198. flushIOSKey(view) {
  5199. if (!this.pendingIOSKey) return false
  5200. let dom = view.contentDOM,
  5201. key = this.pendingIOSKey
  5202. this.pendingIOSKey = null
  5203. return key == 'enter' ? dispatchKey(dom, 'Enter', 13) : dispatchKey(dom, 'Backspace', 8)
  5204. }
  5205. ignoreDuringComposition(event) {
  5206. if (!/^key/.test(event.type)) return false
  5207. if (this.composing > 0) return true
  5208. if (browser.safari && Date.now() - this.compositionEndedAt < 500) {
  5209. this.compositionEndedAt = 0
  5210. return true
  5211. }
  5212. return false
  5213. }
  5214. screenKeyEvent(view, event) {
  5215. let protectedTab = event.keyCode == 9 && Date.now() < this.lastEscPress + 2000
  5216. if (event.keyCode == 27) this.lastEscPress = Date.now()
  5217. else if (modifierCodes.indexOf(event.keyCode) < 0) this.lastEscPress = 0
  5218. return protectedTab
  5219. }
  5220. mustFlushObserver(event) {
  5221. return (event.type == 'keydown' && event.keyCode != 229) || (event.type == 'compositionend' && !browser.ios)
  5222. }
  5223. startMouseSelection(view, event, style) {
  5224. if (this.mouseSelection) this.mouseSelection.destroy()
  5225. this.mouseSelection = new MouseSelection(this, view, event, style)
  5226. }
  5227. update(update) {
  5228. if (this.mouseSelection) this.mouseSelection.update(update)
  5229. if (update.transactions.length) this.lastKeyCode = this.lastSelectionTime = 0
  5230. }
  5231. destroy() {
  5232. if (this.mouseSelection) this.mouseSelection.destroy()
  5233. }
  5234. }
  5235. const modifierCodes = [16, 17, 18, 20, 91, 92, 224, 225]
  5236. class MouseSelection {
  5237. constructor(inputState, view, startEvent, style) {
  5238. this.inputState = inputState
  5239. this.view = view
  5240. this.style = style
  5241. this.lastEvent = startEvent
  5242. let doc = view.contentDOM.ownerDocument
  5243. doc.addEventListener('mousemove', (this.move = this.move.bind(this)))
  5244. doc.addEventListener('mouseup', (this.up = this.up.bind(this)))
  5245. this.extend = startEvent.shiftKey
  5246. this.multiple = view.state.facet(EditorState.allowMultipleSelections) && addsSelectionRange(view, startEvent)
  5247. this.dragMove = dragMovesSelection(view, startEvent)
  5248. this.dragging = isInPrimarySelection(view, startEvent) ? null : false
  5249. if (this.dragging === false) {
  5250. startEvent.preventDefault()
  5251. this.select(startEvent)
  5252. }
  5253. }
  5254. move(event) {
  5255. if (event.buttons == 0) return this.destroy()
  5256. if (this.dragging !== false) return
  5257. this.select((this.lastEvent = event))
  5258. }
  5259. up(event) {
  5260. if (this.dragging == null) this.select(this.lastEvent)
  5261. if (!this.dragging) event.preventDefault()
  5262. this.destroy()
  5263. }
  5264. destroy() {
  5265. let doc = this.view.contentDOM.ownerDocument
  5266. doc.removeEventListener('mousemove', this.move)
  5267. doc.removeEventListener('mouseup', this.up)
  5268. this.inputState.mouseSelection = null
  5269. }
  5270. select(event) {
  5271. let selection = this.style.get(event, this.extend, this.multiple)
  5272. if (!selection.eq(this.view.state.selection) || selection.main.assoc != this.view.state.selection.main.assoc)
  5273. this.view.dispatch({ selection, annotations: Transaction.userEvent.of('pointerselection'), scrollIntoView: true })
  5274. }
  5275. update(update) {
  5276. if (update.docChanged && this.dragging) this.dragging = this.dragging.map(update.changes)
  5277. if (this.style.update(update)) setTimeout(() => this.select(this.lastEvent), 20)
  5278. }
  5279. }
  5280. function addsSelectionRange(view, event) {
  5281. let facet = view.state.facet(clickAddsSelectionRange)
  5282. return facet.length ? facet[0](event) : browser.mac ? event.metaKey : event.ctrlKey
  5283. }
  5284. function dragMovesSelection(view, event) {
  5285. let facet = view.state.facet(dragMovesSelection$1)
  5286. return facet.length ? facet[0](event) : browser.mac ? !event.altKey : !event.ctrlKey
  5287. }
  5288. function isInPrimarySelection(view, event) {
  5289. let { main } = view.state.selection
  5290. if (main.empty) return false
  5291. let sel = getSelection(view.root)
  5292. if (sel.rangeCount == 0) return true
  5293. let rects = sel.getRangeAt(0).getClientRects()
  5294. for (let i = 0; i < rects.length; i++) {
  5295. let rect = rects[i]
  5296. if (rect.left <= event.clientX && rect.right >= event.clientX && rect.top <= event.clientY && rect.bottom >= event.clientY) return true
  5297. }
  5298. return false
  5299. }
  5300. function eventBelongsToEditor(view, event) {
  5301. if (!event.bubbles) return true
  5302. if (event.defaultPrevented) return false
  5303. for (let node = event.target, cView; node != view.contentDOM; node = node.parentNode)
  5304. if (!node || node.nodeType == 11 || ((cView = ContentView.get(node)) && cView.ignoreEvent(event))) return false
  5305. return true
  5306. }
  5307. const handlers = Object.create(null)
  5308. const brokenClipboardAPI = (browser.ie && browser.ie_version < 15) || (browser.ios && browser.webkit_version < 604)
  5309. function capturePaste(view) {
  5310. let parent = view.dom.parentNode
  5311. if (!parent) return
  5312. let target = parent.appendChild(document.createElement('textarea'))
  5313. target.style.cssText = 'position: fixed; left: -10000px; top: 10px'
  5314. target.focus()
  5315. setTimeout(() => {
  5316. view.focus()
  5317. target.remove()
  5318. doPaste(view, target.value)
  5319. }, 50)
  5320. }
  5321. function doPaste(view, input) {
  5322. let { state } = view,
  5323. changes,
  5324. i = 1,
  5325. text = state.toText(input)
  5326. let byLine = text.lines == state.selection.ranges.length
  5327. let linewise = lastLinewiseCopy && state.selection.ranges.every(r => r.empty) && lastLinewiseCopy == text.toString()
  5328. if (linewise) {
  5329. let lastLine = -1
  5330. changes = state.changeByRange(range => {
  5331. let line = state.doc.lineAt(range.from)
  5332. if (line.from == lastLine) return { range }
  5333. lastLine = line.from
  5334. let insert = state.toText((byLine ? text.line(i++).text : input) + state.lineBreak)
  5335. return { changes: { from: line.from, insert }, range: EditorSelection.cursor(range.from + insert.length) }
  5336. })
  5337. } else if (byLine) {
  5338. changes = state.changeByRange(range => {
  5339. let line = text.line(i++)
  5340. return { changes: { from: range.from, to: range.to, insert: line.text }, range: EditorSelection.cursor(range.from + line.length) }
  5341. })
  5342. } else {
  5343. changes = state.replaceSelection(text)
  5344. }
  5345. view.dispatch(changes, { annotations: Transaction.userEvent.of('paste'), scrollIntoView: true })
  5346. }
  5347. handlers.keydown = (view, event) => {
  5348. view.inputState.setSelectionOrigin('keyboardselection')
  5349. }
  5350. let lastTouch = 0
  5351. handlers.touchstart = (view, e) => {
  5352. lastTouch = Date.now()
  5353. view.inputState.setSelectionOrigin('pointerselection')
  5354. }
  5355. handlers.touchmove = view => {
  5356. view.inputState.setSelectionOrigin('pointerselection')
  5357. }
  5358. handlers.mousedown = (view, event) => {
  5359. view.observer.flush()
  5360. if (lastTouch > Date.now() - 2000) return
  5361. let style = null
  5362. for (let _i53 = 0, _view$state$facet = view.state.facet(mouseSelectionStyle), _length53 = _view$state$facet.length; _i53 < _length53; _i53++) {
  5363. let makeStyle = _view$state$facet[_i53]
  5364. style = makeStyle(view, event)
  5365. if (style) break
  5366. }
  5367. if (!style && event.button == 0) style = basicMouseSelection(view, event)
  5368. if (style) {
  5369. if (view.root.activeElement != view.contentDOM) view.observer.ignore(() => focusPreventScroll(view.contentDOM))
  5370. view.inputState.startMouseSelection(view, event, style)
  5371. }
  5372. }
  5373. function rangeForClick(view, pos, bias, type) {
  5374. if (type == 1) {
  5375. return EditorSelection.cursor(pos, bias)
  5376. } else if (type == 2) {
  5377. return groupAt(view.state, pos, bias)
  5378. } else {
  5379. let visual = LineView.find(view.docView, pos),
  5380. line = view.state.doc.lineAt(visual ? visual.posAtEnd : pos)
  5381. let from = visual ? visual.posAtStart : line.from,
  5382. to = visual ? visual.posAtEnd : line.to
  5383. if (to < view.state.doc.length && to == line.to) to++
  5384. return EditorSelection.range(from, to)
  5385. }
  5386. }
  5387. let insideY = (y, rect) => y >= rect.top && y <= rect.bottom
  5388. let inside = (x, y, rect) => insideY(y, rect) && x >= rect.left && x <= rect.right
  5389. function findPositionSide(view, pos, x, y) {
  5390. let line = LineView.find(view.docView, pos)
  5391. if (!line) return 1
  5392. let off = pos - line.posAtStart
  5393. if (off == 0) return 1
  5394. if (off == line.length) return -1
  5395. let before = line.coordsAt(off, -1)
  5396. if (before && inside(x, y, before)) return -1
  5397. let after = line.coordsAt(off, 1)
  5398. if (after && inside(x, y, after)) return 1
  5399. return before && insideY(y, before) ? -1 : 1
  5400. }
  5401. function queryPos(view, event) {
  5402. let pos = view.posAtCoords({ x: event.clientX, y: event.clientY })
  5403. if (pos == null) return null
  5404. return { pos, bias: findPositionSide(view, pos, event.clientX, event.clientY) }
  5405. }
  5406. const BadMouseDetail = browser.ie && browser.ie_version <= 11
  5407. let lastMouseDown = null,
  5408. lastMouseDownCount = 0,
  5409. lastMouseDownTime = 0
  5410. function getClickType(event) {
  5411. if (!BadMouseDetail) return event.detail
  5412. let last = lastMouseDown,
  5413. lastTime = lastMouseDownTime
  5414. lastMouseDown = event
  5415. lastMouseDownTime = Date.now()
  5416. return (lastMouseDownCount =
  5417. !last || (lastTime > Date.now() - 400 && Math.abs(last.clientX - event.clientX) < 2 && Math.abs(last.clientY - event.clientY) < 2) ? (lastMouseDownCount + 1) % 3 : 1)
  5418. }
  5419. function basicMouseSelection(view, event) {
  5420. let start = queryPos(view, event),
  5421. type = getClickType(event)
  5422. let startSel = view.state.selection
  5423. let last = start,
  5424. lastEvent = event
  5425. return {
  5426. update(update) {
  5427. if (update.changes) {
  5428. if (start) start.pos = update.changes.mapPos(start.pos)
  5429. startSel = startSel.map(update.changes)
  5430. lastEvent = null
  5431. }
  5432. },
  5433. get(event, extend, multiple) {
  5434. let cur
  5435. if (lastEvent && event.clientX == lastEvent.clientX && event.clientY == lastEvent.clientY) cur = last
  5436. else {
  5437. cur = last = queryPos(view, event)
  5438. lastEvent = event
  5439. }
  5440. if (!cur || !start) return startSel
  5441. let range = rangeForClick(view, cur.pos, cur.bias, type)
  5442. if (start.pos != cur.pos && !extend) {
  5443. let startRange = rangeForClick(view, start.pos, start.bias, type)
  5444. let from = Math.min(startRange.from, range.from),
  5445. to = Math.max(startRange.to, range.to)
  5446. range = from < range.from ? EditorSelection.range(from, to) : EditorSelection.range(to, from)
  5447. }
  5448. if (extend) return startSel.replaceRange(startSel.main.extend(range.from, range.to))
  5449. else if (multiple) return startSel.addRange(range)
  5450. else return EditorSelection.create([range])
  5451. }
  5452. }
  5453. }
  5454. handlers.dragstart = (view, event) => {
  5455. let {
  5456. selection: { main }
  5457. } = view.state
  5458. let { mouseSelection } = view.inputState
  5459. if (mouseSelection) mouseSelection.dragging = main
  5460. if (event.dataTransfer) {
  5461. event.dataTransfer.setData('Text', view.state.sliceDoc(main.from, main.to))
  5462. event.dataTransfer.effectAllowed = 'copyMove'
  5463. }
  5464. }
  5465. function dropText(view, event, text, direct) {
  5466. let dropPos = view.posAtCoords({ x: event.clientX, y: event.clientY })
  5467. if (dropPos == null || !text) return
  5468. event.preventDefault()
  5469. let { mouseSelection } = view.inputState
  5470. let del = direct && mouseSelection && mouseSelection.dragging && mouseSelection.dragMove ? { from: mouseSelection.dragging.from, to: mouseSelection.dragging.to } : null
  5471. let ins = { from: dropPos, insert: text }
  5472. let changes = view.state.changes(del ? [del, ins] : ins)
  5473. view.focus()
  5474. view.dispatch({ changes, selection: { anchor: changes.mapPos(dropPos, -1), head: changes.mapPos(dropPos, 1) }, annotations: Transaction.userEvent.of('drop') })
  5475. }
  5476. handlers.drop = (view, event) => {
  5477. if (!event.dataTransfer || !view.state.facet(editable)) return
  5478. let files = event.dataTransfer.files
  5479. if (files && files.length) {
  5480. event.preventDefault()
  5481. let text = Array(files.length),
  5482. read = 0
  5483. let finishFile = () => {
  5484. if (++read == files.length) dropText(view, event, text.filter(s => s != null).join(view.state.lineBreak), false)
  5485. }
  5486. for (let i = 0; i < files.length; i++) {
  5487. let reader = new FileReader()
  5488. reader.onerror = finishFile
  5489. reader.onload = () => {
  5490. if (!/[\x00-\x08\x0e-\x1f]{2}/.test(reader.result)) text[i] = reader.result
  5491. finishFile()
  5492. }
  5493. reader.readAsText(files[i])
  5494. }
  5495. } else {
  5496. dropText(view, event, event.dataTransfer.getData('Text'), true)
  5497. }
  5498. }
  5499. handlers.paste = (view, event) => {
  5500. if (!view.state.facet(editable)) return
  5501. view.observer.flush()
  5502. let data = brokenClipboardAPI ? null : event.clipboardData
  5503. let text = data && data.getData('text/plain')
  5504. if (text) {
  5505. doPaste(view, text)
  5506. event.preventDefault()
  5507. } else {
  5508. capturePaste(view)
  5509. }
  5510. }
  5511. function captureCopy(view, text) {
  5512. let parent = view.dom.parentNode
  5513. if (!parent) return
  5514. let target = parent.appendChild(document.createElement('textarea'))
  5515. target.style.cssText = 'position: fixed; left: -10000px; top: 10px'
  5516. target.value = text
  5517. target.focus()
  5518. target.selectionEnd = text.length
  5519. target.selectionStart = 0
  5520. setTimeout(() => {
  5521. target.remove()
  5522. view.focus()
  5523. }, 50)
  5524. }
  5525. function copiedRange(state) {
  5526. let content = [],
  5527. ranges = [],
  5528. linewise = false
  5529. for (let _i54 = 0, _state$selection$rang = state.selection.ranges, _length54 = _state$selection$rang.length; _i54 < _length54; _i54++) {
  5530. let range = _state$selection$rang[_i54]
  5531. if (!range.empty) {
  5532. content.push(state.sliceDoc(range.from, range.to))
  5533. ranges.push(range)
  5534. }
  5535. }
  5536. if (!content.length) {
  5537. let upto = -1
  5538. for (let _i55 = 0, _state$selection$rang2 = state.selection.ranges, _length55 = _state$selection$rang2.length; _i55 < _length55; _i55++) {
  5539. let { from } = _state$selection$rang2[_i55]
  5540. let line = state.doc.lineAt(from)
  5541. if (line.number > upto) {
  5542. content.push(line.text)
  5543. ranges.push({ from: line.from, to: Math.min(state.doc.length, line.to + 1) })
  5544. }
  5545. upto = line.number
  5546. }
  5547. linewise = true
  5548. }
  5549. return { text: content.join(state.lineBreak), ranges, linewise }
  5550. }
  5551. let lastLinewiseCopy = null
  5552. handlers.copy = handlers.cut = (view, event) => {
  5553. let { text, ranges, linewise } = copiedRange(view.state)
  5554. if (!text) return
  5555. lastLinewiseCopy = linewise ? text : null
  5556. let data = brokenClipboardAPI ? null : event.clipboardData
  5557. if (data) {
  5558. event.preventDefault()
  5559. data.clearData()
  5560. data.setData('text/plain', text)
  5561. } else {
  5562. captureCopy(view, text)
  5563. }
  5564. if (event.type == 'cut' && view.state.facet(editable)) view.dispatch({ changes: ranges, scrollIntoView: true, annotations: Transaction.userEvent.of('cut') })
  5565. }
  5566. handlers.focus = handlers.blur = view => {
  5567. setTimeout(() => {
  5568. if (view.hasFocus != view.inputState.notifiedFocused) view.update([])
  5569. }, 10)
  5570. }
  5571. handlers.beforeprint = view => {
  5572. view.viewState.printing = true
  5573. view.requestMeasure()
  5574. setTimeout(() => {
  5575. view.viewState.printing = false
  5576. view.requestMeasure()
  5577. }, 2000)
  5578. }
  5579. function forceClearComposition(view, rapid) {
  5580. if (view.docView.compositionDeco.size) {
  5581. view.inputState.rapidCompositionStart = rapid
  5582. try {
  5583. view.update([])
  5584. } finally {
  5585. view.inputState.rapidCompositionStart = false
  5586. }
  5587. }
  5588. }
  5589. handlers.compositionstart = handlers.compositionupdate = view => {
  5590. if (view.inputState.composing < 0) {
  5591. if (view.docView.compositionDeco.size) {
  5592. view.observer.flush()
  5593. forceClearComposition(view, true)
  5594. }
  5595. view.inputState.composing = 0
  5596. }
  5597. }
  5598. handlers.compositionend = view => {
  5599. view.inputState.composing = -1
  5600. view.inputState.compositionEndedAt = Date.now()
  5601. setTimeout(() => {
  5602. if (view.inputState.composing < 0) forceClearComposition(view, false)
  5603. }, 50)
  5604. }
  5605. handlers.contextmenu = view => {
  5606. view.inputState.lastContextMenu = Date.now()
  5607. }
  5608. const wrappingWhiteSpace = ['pre-wrap', 'normal', 'pre-line']
  5609. class HeightOracle {
  5610. constructor() {
  5611. this.doc = Text.empty
  5612. this.lineWrapping = false
  5613. this.direction = Direction.LTR
  5614. this.heightSamples = {}
  5615. this.lineHeight = 14
  5616. this.charWidth = 7
  5617. this.lineLength = 30
  5618. this.heightChanged = false
  5619. }
  5620. heightForGap(from, to) {
  5621. let lines = this.doc.lineAt(to).number - this.doc.lineAt(from).number + 1
  5622. if (this.lineWrapping) lines += Math.ceil((to - from - lines * this.lineLength * 0.5) / this.lineLength)
  5623. return this.lineHeight * lines
  5624. }
  5625. heightForLine(length) {
  5626. if (!this.lineWrapping) return this.lineHeight
  5627. let lines = 1 + Math.max(0, Math.ceil((length - this.lineLength) / (this.lineLength - 5)))
  5628. return lines * this.lineHeight
  5629. }
  5630. setDoc(doc) {
  5631. this.doc = doc
  5632. return this
  5633. }
  5634. mustRefresh(lineHeights, whiteSpace, direction) {
  5635. let newHeight = false
  5636. for (let i = 0; i < lineHeights.length; i++) {
  5637. let h = lineHeights[i]
  5638. if (h < 0) {
  5639. i++
  5640. } else if (!this.heightSamples[Math.floor(h * 10)]) {
  5641. newHeight = true
  5642. this.heightSamples[Math.floor(h * 10)] = true
  5643. }
  5644. }
  5645. return newHeight || wrappingWhiteSpace.indexOf(whiteSpace) > -1 != this.lineWrapping || this.direction != direction
  5646. }
  5647. refresh(whiteSpace, direction, lineHeight, charWidth, lineLength, knownHeights) {
  5648. let lineWrapping = wrappingWhiteSpace.indexOf(whiteSpace) > -1
  5649. let changed = Math.round(lineHeight) != Math.round(this.lineHeight) || this.lineWrapping != lineWrapping || this.direction != direction
  5650. this.lineWrapping = lineWrapping
  5651. this.direction = direction
  5652. this.lineHeight = lineHeight
  5653. this.charWidth = charWidth
  5654. this.lineLength = lineLength
  5655. if (changed) {
  5656. this.heightSamples = {}
  5657. for (let i = 0; i < knownHeights.length; i++) {
  5658. let h = knownHeights[i]
  5659. if (h < 0) i++
  5660. else this.heightSamples[Math.floor(h * 10)] = true
  5661. }
  5662. }
  5663. return changed
  5664. }
  5665. }
  5666. class MeasuredHeights {
  5667. constructor(from, heights) {
  5668. this.from = from
  5669. this.heights = heights
  5670. this.index = 0
  5671. }
  5672. get more() {
  5673. return this.index < this.heights.length
  5674. }
  5675. }
  5676. class BlockInfo {
  5677. constructor(from, length, top, height, type) {
  5678. this.from = from
  5679. this.length = length
  5680. this.top = top
  5681. this.height = height
  5682. this.type = type
  5683. }
  5684. get to() {
  5685. return this.from + this.length
  5686. }
  5687. get bottom() {
  5688. return this.top + this.height
  5689. }
  5690. join(other) {
  5691. let detail = (Array.isArray(this.type) ? this.type : [this]).concat(Array.isArray(other.type) ? other.type : [other])
  5692. return new BlockInfo(this.from, this.length + other.length, this.top, this.height + other.height, detail)
  5693. }
  5694. }
  5695. var QueryType = (function(QueryType) {
  5696. QueryType[(QueryType['ByPos'] = 0)] = 'ByPos'
  5697. QueryType[(QueryType['ByHeight'] = 1)] = 'ByHeight'
  5698. QueryType[(QueryType['ByPosNoHeight'] = 2)] = 'ByPosNoHeight'
  5699. return QueryType
  5700. })(QueryType || (QueryType = {}))
  5701. const Epsilon = 1e-4
  5702. class HeightMap {
  5703. constructor(length, height, flags = 2) {
  5704. this.length = length
  5705. this.height = height
  5706. this.flags = flags
  5707. }
  5708. get outdated() {
  5709. return (this.flags & 2) > 0
  5710. }
  5711. set outdated(value) {
  5712. this.flags = (value ? 2 : 0) | (this.flags & ~2)
  5713. }
  5714. setHeight(oracle, height) {
  5715. if (this.height != height) {
  5716. if (Math.abs(this.height - height) > Epsilon) oracle.heightChanged = true
  5717. this.height = height
  5718. }
  5719. }
  5720. replace(_from, _to, nodes) {
  5721. return HeightMap.of(nodes)
  5722. }
  5723. decomposeLeft(_to, result) {
  5724. result.push(this)
  5725. }
  5726. decomposeRight(_from, result) {
  5727. result.push(this)
  5728. }
  5729. applyChanges(decorations, oldDoc, oracle, changes) {
  5730. let me = this
  5731. for (let i = changes.length - 1; i >= 0; i--) {
  5732. let { fromA, toA, fromB, toB } = changes[i]
  5733. let start = me.lineAt(fromA, QueryType.ByPosNoHeight, oldDoc, 0, 0)
  5734. let end = start.to >= toA ? start : me.lineAt(toA, QueryType.ByPosNoHeight, oldDoc, 0, 0)
  5735. toB += end.to - toA
  5736. toA = end.to
  5737. while (i > 0 && start.from <= changes[i - 1].toA) {
  5738. fromA = changes[i - 1].fromA
  5739. fromB = changes[i - 1].fromB
  5740. i--
  5741. if (fromA < start.from) start = me.lineAt(fromA, QueryType.ByPosNoHeight, oldDoc, 0, 0)
  5742. }
  5743. fromB += start.from - fromA
  5744. fromA = start.from
  5745. let nodes = NodeBuilder.build(oracle, decorations, fromB, toB)
  5746. me = me.replace(fromA, toA, nodes)
  5747. }
  5748. return me.updateHeight(oracle, 0)
  5749. }
  5750. static empty() {
  5751. return new HeightMapText(0, 0)
  5752. }
  5753. static of(nodes) {
  5754. if (nodes.length == 1) return nodes[0]
  5755. let i = 0,
  5756. j = nodes.length,
  5757. before = 0,
  5758. after = 0
  5759. for (;;) {
  5760. if (i == j) {
  5761. if (before > after * 2) {
  5762. let split = nodes[i - 1]
  5763. if (split.break) nodes.splice(--i, 1, split.left, null, split.right)
  5764. else nodes.splice(--i, 1, split.left, split.right)
  5765. j += 1 + split.break
  5766. before -= split.size
  5767. } else if (after > before * 2) {
  5768. let split = nodes[j]
  5769. if (split.break) nodes.splice(j, 1, split.left, null, split.right)
  5770. else nodes.splice(j, 1, split.left, split.right)
  5771. j += 2 + split.break
  5772. after -= split.size
  5773. } else {
  5774. break
  5775. }
  5776. } else if (before < after) {
  5777. let next = nodes[i++]
  5778. if (next) before += next.size
  5779. } else {
  5780. let next = nodes[--j]
  5781. if (next) after += next.size
  5782. }
  5783. }
  5784. let brk = 0
  5785. if (nodes[i - 1] == null) {
  5786. brk = 1
  5787. i--
  5788. } else if (nodes[i] == null) {
  5789. brk = 1
  5790. j++
  5791. }
  5792. return new HeightMapBranch(HeightMap.of(nodes.slice(0, i)), brk, HeightMap.of(nodes.slice(j)))
  5793. }
  5794. }
  5795. HeightMap.prototype.size = 1
  5796. class HeightMapBlock extends HeightMap {
  5797. constructor(length, height, type) {
  5798. super(length, height)
  5799. this.type = type
  5800. }
  5801. blockAt(_height, _doc, top, offset) {
  5802. return new BlockInfo(offset, this.length, top, this.height, this.type)
  5803. }
  5804. lineAt(_value, _type, doc, top, offset) {
  5805. return this.blockAt(0, doc, top, offset)
  5806. }
  5807. forEachLine(_from, _to, doc, top, offset, f) {
  5808. f(this.blockAt(0, doc, top, offset))
  5809. }
  5810. updateHeight(oracle, offset = 0, _force = false, measured) {
  5811. if (measured && measured.from <= offset && measured.more) this.setHeight(oracle, measured.heights[measured.index++])
  5812. this.outdated = false
  5813. return this
  5814. }
  5815. toString() {
  5816. return `block(${this.length})`
  5817. }
  5818. }
  5819. class HeightMapText extends HeightMapBlock {
  5820. constructor(length, height) {
  5821. super(length, height, BlockType.Text)
  5822. this.collapsed = 0
  5823. this.widgetHeight = 0
  5824. }
  5825. replace(_from, _to, nodes) {
  5826. let node = nodes[0]
  5827. if (nodes.length == 1 && (node instanceof HeightMapText || (node instanceof HeightMapGap && node.flags & 4)) && Math.abs(this.length - node.length) < 10) {
  5828. if (node instanceof HeightMapGap) node = new HeightMapText(node.length, this.height)
  5829. else node.height = this.height
  5830. if (!this.outdated) node.outdated = false
  5831. return node
  5832. } else {
  5833. return HeightMap.of(nodes)
  5834. }
  5835. }
  5836. updateHeight(oracle, offset = 0, force = false, measured) {
  5837. if (measured && measured.from <= offset && measured.more) this.setHeight(oracle, measured.heights[measured.index++])
  5838. else if (force || this.outdated) this.setHeight(oracle, Math.max(this.widgetHeight, oracle.heightForLine(this.length - this.collapsed)))
  5839. this.outdated = false
  5840. return this
  5841. }
  5842. toString() {
  5843. return `line(${this.length}${this.collapsed ? -this.collapsed : ''}${this.widgetHeight ? ':' + this.widgetHeight : ''})`
  5844. }
  5845. }
  5846. class HeightMapGap extends HeightMap {
  5847. constructor(length) {
  5848. super(length, 0)
  5849. }
  5850. lines(doc, offset) {
  5851. let firstLine = doc.lineAt(offset).number,
  5852. lastLine = doc.lineAt(offset + this.length).number
  5853. return { firstLine, lastLine, lineHeight: this.height / (lastLine - firstLine + 1) }
  5854. }
  5855. blockAt(height, doc, top, offset) {
  5856. let { firstLine, lastLine, lineHeight } = this.lines(doc, offset)
  5857. let line = Math.max(0, Math.min(lastLine - firstLine, Math.floor((height - top) / lineHeight)))
  5858. let { from, length } = doc.line(firstLine + line)
  5859. return new BlockInfo(from, length, top + lineHeight * line, lineHeight, BlockType.Text)
  5860. }
  5861. lineAt(value, type, doc, top, offset) {
  5862. if (type == QueryType.ByHeight) return this.blockAt(value, doc, top, offset)
  5863. if (type == QueryType.ByPosNoHeight) {
  5864. let { from, to } = doc.lineAt(value)
  5865. return new BlockInfo(from, to - from, 0, 0, BlockType.Text)
  5866. }
  5867. let { firstLine, lineHeight } = this.lines(doc, offset)
  5868. let { from, length, number } = doc.lineAt(value)
  5869. return new BlockInfo(from, length, top + lineHeight * (number - firstLine), lineHeight, BlockType.Text)
  5870. }
  5871. forEachLine(from, to, doc, top, offset, f) {
  5872. let { firstLine, lineHeight } = this.lines(doc, offset)
  5873. for (let pos = Math.max(from, offset), end = Math.min(offset + this.length, to); pos <= end; ) {
  5874. let line = doc.lineAt(pos)
  5875. if (pos == from) top += lineHeight * (line.number - firstLine)
  5876. f(new BlockInfo(line.from, line.length, top, lineHeight, BlockType.Text))
  5877. top += lineHeight
  5878. pos = line.to + 1
  5879. }
  5880. }
  5881. replace(from, to, nodes) {
  5882. let after = this.length - to
  5883. if (after > 0) {
  5884. let last = nodes[nodes.length - 1]
  5885. if (last instanceof HeightMapGap) nodes[nodes.length - 1] = new HeightMapGap(last.length + after)
  5886. else nodes.push(null, new HeightMapGap(after - 1))
  5887. }
  5888. if (from > 0) {
  5889. let first = nodes[0]
  5890. if (first instanceof HeightMapGap) nodes[0] = new HeightMapGap(from + first.length)
  5891. else nodes.unshift(new HeightMapGap(from - 1), null)
  5892. }
  5893. return HeightMap.of(nodes)
  5894. }
  5895. decomposeLeft(to, result) {
  5896. result.push(new HeightMapGap(to - 1), null)
  5897. }
  5898. decomposeRight(from, result) {
  5899. result.push(null, new HeightMapGap(this.length - from - 1))
  5900. }
  5901. updateHeight(oracle, offset = 0, force = false, measured) {
  5902. let end = offset + this.length
  5903. if (measured && measured.from <= offset + this.length && measured.more) {
  5904. let nodes = [],
  5905. pos = Math.max(offset, measured.from)
  5906. if (measured.from > offset) nodes.push(new HeightMapGap(measured.from - offset - 1).updateHeight(oracle, offset))
  5907. while (pos <= end && measured.more) {
  5908. let len = oracle.doc.lineAt(pos).length
  5909. if (nodes.length) nodes.push(null)
  5910. let line = new HeightMapText(len, measured.heights[measured.index++])
  5911. line.outdated = false
  5912. nodes.push(line)
  5913. pos += len + 1
  5914. }
  5915. if (pos <= end) nodes.push(null, new HeightMapGap(end - pos).updateHeight(oracle, pos))
  5916. oracle.heightChanged = true
  5917. return HeightMap.of(nodes)
  5918. } else if (force || this.outdated) {
  5919. this.setHeight(oracle, oracle.heightForGap(offset, offset + this.length))
  5920. this.outdated = false
  5921. }
  5922. return this
  5923. }
  5924. toString() {
  5925. return `gap(${this.length})`
  5926. }
  5927. }
  5928. class HeightMapBranch extends HeightMap {
  5929. constructor(left, brk, right) {
  5930. super(left.length + brk + right.length, left.height + right.height, brk | (left.outdated || right.outdated ? 2 : 0))
  5931. this.left = left
  5932. this.right = right
  5933. this.size = left.size + right.size
  5934. }
  5935. get break() {
  5936. return this.flags & 1
  5937. }
  5938. blockAt(height, doc, top, offset) {
  5939. let mid = top + this.left.height
  5940. return height < mid || this.right.height == 0 ? this.left.blockAt(height, doc, top, offset) : this.right.blockAt(height, doc, mid, offset + this.left.length + this.break)
  5941. }
  5942. lineAt(value, type, doc, top, offset) {
  5943. let rightTop = top + this.left.height,
  5944. rightOffset = offset + this.left.length + this.break
  5945. let left = type == QueryType.ByHeight ? value < rightTop || this.right.height == 0 : value < rightOffset
  5946. let base = left ? this.left.lineAt(value, type, doc, top, offset) : this.right.lineAt(value, type, doc, rightTop, rightOffset)
  5947. if (this.break || (left ? base.to < rightOffset : base.from > rightOffset)) return base
  5948. let subQuery = type == QueryType.ByPosNoHeight ? QueryType.ByPosNoHeight : QueryType.ByPos
  5949. if (left) return base.join(this.right.lineAt(rightOffset, subQuery, doc, rightTop, rightOffset))
  5950. else return this.left.lineAt(rightOffset, subQuery, doc, top, offset).join(base)
  5951. }
  5952. forEachLine(from, to, doc, top, offset, f) {
  5953. let rightTop = top + this.left.height,
  5954. rightOffset = offset + this.left.length + this.break
  5955. if (this.break) {
  5956. if (from < rightOffset) this.left.forEachLine(from, to, doc, top, offset, f)
  5957. if (to >= rightOffset) this.right.forEachLine(from, to, doc, rightTop, rightOffset, f)
  5958. } else {
  5959. let mid = this.lineAt(rightOffset, QueryType.ByPos, doc, top, offset)
  5960. if (from < mid.from) this.left.forEachLine(from, mid.from - 1, doc, top, offset, f)
  5961. if (mid.to >= from && mid.from <= to) f(mid)
  5962. if (to > mid.to) this.right.forEachLine(mid.to + 1, to, doc, rightTop, rightOffset, f)
  5963. }
  5964. }
  5965. replace(from, to, nodes) {
  5966. let rightStart = this.left.length + this.break
  5967. if (to < rightStart) return this.balanced(this.left.replace(from, to, nodes), this.right)
  5968. if (from > this.left.length) return this.balanced(this.left, this.right.replace(from - rightStart, to - rightStart, nodes))
  5969. let result = []
  5970. if (from > 0) this.decomposeLeft(from, result)
  5971. let left = result.length
  5972. for (let _i56 = 0, _length56 = nodes.length; _i56 < _length56; _i56++) {
  5973. let node = nodes[_i56]
  5974. result.push(node)
  5975. }
  5976. if (from > 0) mergeGaps(result, left - 1)
  5977. if (to < this.length) {
  5978. let right = result.length
  5979. this.decomposeRight(to, result)
  5980. mergeGaps(result, right)
  5981. }
  5982. return HeightMap.of(result)
  5983. }
  5984. decomposeLeft(to, result) {
  5985. let left = this.left.length
  5986. if (to <= left) return this.left.decomposeLeft(to, result)
  5987. result.push(this.left)
  5988. if (this.break) {
  5989. left++
  5990. if (to >= left) result.push(null)
  5991. }
  5992. if (to > left) this.right.decomposeLeft(to - left, result)
  5993. }
  5994. decomposeRight(from, result) {
  5995. let left = this.left.length,
  5996. right = left + this.break
  5997. if (from >= right) return this.right.decomposeRight(from - right, result)
  5998. if (from < left) this.left.decomposeRight(from, result)
  5999. if (this.break && from < right) result.push(null)
  6000. result.push(this.right)
  6001. }
  6002. balanced(left, right) {
  6003. if (left.size > 2 * right.size || right.size > 2 * left.size) return HeightMap.of(this.break ? [left, null, right] : [left, right])
  6004. this.left = left
  6005. this.right = right
  6006. this.height = left.height + right.height
  6007. this.outdated = left.outdated || right.outdated
  6008. this.size = left.size + right.size
  6009. this.length = left.length + this.break + right.length
  6010. return this
  6011. }
  6012. updateHeight(oracle, offset = 0, force = false, measured) {
  6013. let { left, right } = this,
  6014. rightStart = offset + left.length + this.break,
  6015. rebalance = null
  6016. if (measured && measured.from <= offset + left.length && measured.more) rebalance = left = left.updateHeight(oracle, offset, force, measured)
  6017. else left.updateHeight(oracle, offset, force)
  6018. if (measured && measured.from <= rightStart + right.length && measured.more) rebalance = right = right.updateHeight(oracle, rightStart, force, measured)
  6019. else right.updateHeight(oracle, rightStart, force)
  6020. if (rebalance) return this.balanced(left, right)
  6021. this.height = this.left.height + this.right.height
  6022. this.outdated = false
  6023. return this
  6024. }
  6025. toString() {
  6026. return this.left + (this.break ? ' ' : '-') + this.right
  6027. }
  6028. }
  6029. function mergeGaps(nodes, around) {
  6030. let before, after
  6031. if (nodes[around] == null && (before = nodes[around - 1]) instanceof HeightMapGap && (after = nodes[around + 1]) instanceof HeightMapGap)
  6032. nodes.splice(around - 1, 3, new HeightMapGap(before.length + 1 + after.length))
  6033. }
  6034. const relevantWidgetHeight = 5
  6035. class NodeBuilder {
  6036. constructor(pos, oracle) {
  6037. this.pos = pos
  6038. this.oracle = oracle
  6039. this.nodes = []
  6040. this.lineStart = -1
  6041. this.lineEnd = -1
  6042. this.covering = null
  6043. this.writtenTo = pos
  6044. }
  6045. get isCovered() {
  6046. return this.covering && this.nodes[this.nodes.length - 1] == this.covering
  6047. }
  6048. span(_from, to) {
  6049. if (this.lineStart > -1) {
  6050. let end = Math.min(to, this.lineEnd),
  6051. last = this.nodes[this.nodes.length - 1]
  6052. if (last instanceof HeightMapText) last.length += end - this.pos
  6053. else if (end > this.pos || !this.isCovered) this.nodes.push(new HeightMapText(end - this.pos, -1))
  6054. this.writtenTo = end
  6055. if (to > end) {
  6056. this.nodes.push(null)
  6057. this.writtenTo++
  6058. this.lineStart = -1
  6059. }
  6060. }
  6061. this.pos = to
  6062. }
  6063. point(from, to, deco) {
  6064. if (from < to || deco.heightRelevant) {
  6065. let height = deco.widget ? Math.max(0, deco.widget.estimatedHeight) : 0
  6066. let len = to - from
  6067. if (deco.block) {
  6068. this.addBlock(new HeightMapBlock(len, height, deco.type))
  6069. } else if (len || height >= relevantWidgetHeight) {
  6070. this.addLineDeco(height, len)
  6071. }
  6072. } else if (to > from) {
  6073. this.span(from, to)
  6074. }
  6075. if (this.lineEnd > -1 && this.lineEnd < this.pos) this.lineEnd = this.oracle.doc.lineAt(this.pos).to
  6076. }
  6077. enterLine() {
  6078. if (this.lineStart > -1) return
  6079. let { from, to } = this.oracle.doc.lineAt(this.pos)
  6080. this.lineStart = from
  6081. this.lineEnd = to
  6082. if (this.writtenTo < from) {
  6083. if (this.writtenTo < from - 1 || this.nodes[this.nodes.length - 1] == null) this.nodes.push(this.blankContent(this.writtenTo, from - 1))
  6084. this.nodes.push(null)
  6085. }
  6086. if (this.pos > from) this.nodes.push(new HeightMapText(this.pos - from, -1))
  6087. this.writtenTo = this.pos
  6088. }
  6089. blankContent(from, to) {
  6090. let gap = new HeightMapGap(to - from)
  6091. if (this.oracle.doc.lineAt(from).to == to) gap.flags |= 4
  6092. return gap
  6093. }
  6094. ensureLine() {
  6095. this.enterLine()
  6096. let last = this.nodes.length ? this.nodes[this.nodes.length - 1] : null
  6097. if (last instanceof HeightMapText) return last
  6098. let line = new HeightMapText(0, -1)
  6099. this.nodes.push(line)
  6100. return line
  6101. }
  6102. addBlock(block) {
  6103. this.enterLine()
  6104. if (block.type == BlockType.WidgetAfter && !this.isCovered) this.ensureLine()
  6105. this.nodes.push(block)
  6106. this.writtenTo = this.pos = this.pos + block.length
  6107. if (block.type != BlockType.WidgetBefore) this.covering = block
  6108. }
  6109. addLineDeco(height, length) {
  6110. let line = this.ensureLine()
  6111. line.length += length
  6112. line.collapsed += length
  6113. line.widgetHeight = Math.max(line.widgetHeight, height)
  6114. this.writtenTo = this.pos = this.pos + length
  6115. }
  6116. finish(from) {
  6117. let last = this.nodes.length == 0 ? null : this.nodes[this.nodes.length - 1]
  6118. if (this.lineStart > -1 && !(last instanceof HeightMapText) && !this.isCovered) this.nodes.push(new HeightMapText(0, -1))
  6119. else if (this.writtenTo < this.pos || last == null) this.nodes.push(this.blankContent(this.writtenTo, this.pos))
  6120. let pos = from
  6121. for (let _i57 = 0, _this$nodes = this.nodes, _length57 = _this$nodes.length; _i57 < _length57; _i57++) {
  6122. let node = _this$nodes[_i57]
  6123. if (node instanceof HeightMapText) node.updateHeight(this.oracle, pos)
  6124. pos += node ? node.length : 1
  6125. }
  6126. return this.nodes
  6127. }
  6128. static build(oracle, decorations, from, to) {
  6129. let builder = new NodeBuilder(from, oracle)
  6130. RangeSet.spans(decorations, from, to, builder, 0)
  6131. return builder.finish(from)
  6132. }
  6133. }
  6134. function heightRelevantDecoChanges(a, b, diff) {
  6135. let comp = new DecorationComparator()
  6136. RangeSet.compare(a, b, diff, comp, 0)
  6137. return comp.changes
  6138. }
  6139. class DecorationComparator {
  6140. constructor() {
  6141. this.changes = []
  6142. }
  6143. compareRange() {}
  6144. comparePoint(from, to, a, b) {
  6145. if (from < to || (a && a.heightRelevant) || (b && b.heightRelevant)) addRange(from, to, this.changes, 5)
  6146. }
  6147. }
  6148. function visiblePixelRange(dom, paddingTop) {
  6149. let rect = dom.getBoundingClientRect()
  6150. let left = Math.max(0, rect.left),
  6151. right = Math.min(innerWidth, rect.right)
  6152. let top = Math.max(0, rect.top),
  6153. bottom = Math.min(innerHeight, rect.bottom)
  6154. for (let parent = dom.parentNode; parent; ) {
  6155. if (parent.nodeType == 1) {
  6156. let style = window.getComputedStyle(parent)
  6157. if ((parent.scrollHeight > parent.clientHeight || parent.scrollWidth > parent.clientWidth) && style.overflow != 'visible') {
  6158. let parentRect = parent.getBoundingClientRect()
  6159. left = Math.max(left, parentRect.left)
  6160. right = Math.min(right, parentRect.right)
  6161. top = Math.max(top, parentRect.top)
  6162. bottom = Math.min(bottom, parentRect.bottom)
  6163. }
  6164. parent = style.position == 'absolute' || style.position == 'fixed' ? parent.offsetParent : parent.parentNode
  6165. } else if (parent.nodeType == 11) {
  6166. parent = parent.host
  6167. } else {
  6168. break
  6169. }
  6170. }
  6171. return { left: left - rect.left, right: right - rect.left, top: top - (rect.top + paddingTop), bottom: bottom - (rect.top + paddingTop) }
  6172. }
  6173. class LineGap {
  6174. constructor(from, to, size) {
  6175. this.from = from
  6176. this.to = to
  6177. this.size = size
  6178. }
  6179. static same(a, b) {
  6180. if (a.length != b.length) return false
  6181. for (let i = 0; i < a.length; i++) {
  6182. let gA = a[i],
  6183. gB = b[i]
  6184. if (gA.from != gB.from || gA.to != gB.to || gA.size != gB.size) return false
  6185. }
  6186. return true
  6187. }
  6188. draw(wrapping) {
  6189. return Decoration.replace({ widget: new LineGapWidget(this.size, wrapping) }).range(this.from, this.to)
  6190. }
  6191. }
  6192. class LineGapWidget extends WidgetType {
  6193. constructor(size, vertical) {
  6194. super()
  6195. this.size = size
  6196. this.vertical = vertical
  6197. }
  6198. eq(other) {
  6199. return other.size == this.size && other.vertical == this.vertical
  6200. }
  6201. toDOM() {
  6202. let elt = document.createElement('div')
  6203. if (this.vertical) {
  6204. elt.style.height = this.size + 'px'
  6205. } else {
  6206. elt.style.width = this.size + 'px'
  6207. elt.style.height = '2px'
  6208. elt.style.display = 'inline-block'
  6209. }
  6210. return elt
  6211. }
  6212. get estimatedHeight() {
  6213. return this.vertical ? this.size : -1
  6214. }
  6215. }
  6216. class ViewState {
  6217. constructor(state) {
  6218. this.state = state
  6219. this.pixelViewport = { left: 0, right: window.innerWidth, top: 0, bottom: 0 }
  6220. this.inView = true
  6221. this.paddingTop = 0
  6222. this.paddingBottom = 0
  6223. this.contentWidth = 0
  6224. this.heightOracle = new HeightOracle()
  6225. this.scaler = IdScaler
  6226. this.scrollTo = null
  6227. this.printing = false
  6228. this.visibleRanges = []
  6229. this.mustEnforceCursorAssoc = false
  6230. this.heightMap = HeightMap.empty().applyChanges(state.facet(decorations), Text.empty, this.heightOracle.setDoc(state.doc), [new ChangedRange(0, 0, 0, state.doc.length)])
  6231. this.viewport = this.getViewport(0, null)
  6232. this.updateForViewport()
  6233. this.lineGaps = this.ensureLineGaps([])
  6234. this.lineGapDeco = Decoration.set(this.lineGaps.map(gap => gap.draw(false)))
  6235. this.computeVisibleRanges()
  6236. }
  6237. updateForViewport() {
  6238. let viewports = [this.viewport],
  6239. { main } = this.state.selection
  6240. for (let i = 0; i <= 1; i++) {
  6241. let pos = i ? main.head : main.anchor
  6242. if (!viewports.some(({ from, to }) => pos >= from && pos <= to)) {
  6243. let { from, to } = this.lineAt(pos, 0)
  6244. viewports.push(new Viewport(from, to))
  6245. }
  6246. }
  6247. this.viewports = viewports.sort((a, b) => a.from - b.from)
  6248. this.scaler = this.heightMap.height <= 7000000 ? IdScaler : new BigScaler(this.heightOracle.doc, this.heightMap, this.viewports)
  6249. }
  6250. update(update, scrollTo = null) {
  6251. let prev = this.state
  6252. this.state = update.state
  6253. let newDeco = this.state.facet(decorations)
  6254. let contentChanges = update.changedRanges
  6255. let heightChanges = ChangedRange.extendWithRanges(
  6256. contentChanges,
  6257. heightRelevantDecoChanges(update.startState.facet(decorations), newDeco, update ? update.changes : ChangeSet.empty(this.state.doc.length))
  6258. )
  6259. let prevHeight = this.heightMap.height
  6260. this.heightMap = this.heightMap.applyChanges(newDeco, prev.doc, this.heightOracle.setDoc(this.state.doc), heightChanges)
  6261. if (this.heightMap.height != prevHeight) update.flags |= 2
  6262. let viewport = heightChanges.length ? this.mapViewport(this.viewport, update.changes) : this.viewport
  6263. if ((scrollTo && (scrollTo.head < viewport.from || scrollTo.head > viewport.to)) || !this.viewportIsAppropriate(viewport)) viewport = this.getViewport(0, scrollTo)
  6264. if (!viewport.eq(this.viewport)) {
  6265. this.viewport = viewport
  6266. update.flags |= 4
  6267. }
  6268. this.updateForViewport()
  6269. if (this.lineGaps.length || this.viewport.to - this.viewport.from > 15000) update.flags |= this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps, update.changes)))
  6270. this.computeVisibleRanges()
  6271. if (scrollTo) this.scrollTo = scrollTo
  6272. if (!this.mustEnforceCursorAssoc && update.selectionSet && update.view.lineWrapping && update.state.selection.main.empty && update.state.selection.main.assoc)
  6273. this.mustEnforceCursorAssoc = true
  6274. }
  6275. measure(docView, repeated) {
  6276. let dom = docView.dom,
  6277. whiteSpace = '',
  6278. direction = Direction.LTR
  6279. if (!repeated) {
  6280. let style = window.getComputedStyle(dom)
  6281. ;(whiteSpace = style.whiteSpace), (direction = style.direction == 'rtl' ? Direction.RTL : Direction.LTR)
  6282. this.paddingTop = parseInt(style.paddingTop) || 0
  6283. this.paddingBottom = parseInt(style.paddingBottom) || 0
  6284. }
  6285. let pixelViewport = this.printing ? { top: -1e8, bottom: 1e8, left: -1e8, right: 1e8 } : visiblePixelRange(dom, this.paddingTop)
  6286. let dTop = pixelViewport.top - this.pixelViewport.top,
  6287. dBottom = pixelViewport.bottom - this.pixelViewport.bottom
  6288. this.pixelViewport = pixelViewport
  6289. this.inView = this.pixelViewport.bottom > this.pixelViewport.top && this.pixelViewport.right > this.pixelViewport.left
  6290. if (!this.inView) return 0
  6291. let lineHeights = docView.measureVisibleLineHeights()
  6292. let refresh = false,
  6293. bias = 0,
  6294. result = 0,
  6295. oracle = this.heightOracle
  6296. if (!repeated) {
  6297. let contentWidth = docView.dom.clientWidth
  6298. if (oracle.mustRefresh(lineHeights, whiteSpace, direction) || (oracle.lineWrapping && Math.abs(contentWidth - this.contentWidth) > oracle.charWidth)) {
  6299. let { lineHeight, charWidth } = docView.measureTextSize()
  6300. refresh = oracle.refresh(whiteSpace, direction, lineHeight, charWidth, contentWidth / charWidth, lineHeights)
  6301. if (refresh) {
  6302. docView.minWidth = 0
  6303. result |= 16
  6304. }
  6305. }
  6306. if (this.contentWidth != contentWidth) {
  6307. this.contentWidth = contentWidth
  6308. result |= 16
  6309. }
  6310. if (dTop > 0 && dBottom > 0) bias = Math.max(dTop, dBottom)
  6311. else if (dTop < 0 && dBottom < 0) bias = Math.min(dTop, dBottom)
  6312. }
  6313. oracle.heightChanged = false
  6314. this.heightMap = this.heightMap.updateHeight(oracle, 0, refresh, new MeasuredHeights(this.viewport.from, lineHeights))
  6315. if (oracle.heightChanged) result |= 2
  6316. if (!this.viewportIsAppropriate(this.viewport, bias) || (this.scrollTo && (this.scrollTo.head < this.viewport.from || this.scrollTo.head > this.viewport.to))) {
  6317. let newVP = this.getViewport(bias, this.scrollTo)
  6318. if (newVP.from != this.viewport.from || newVP.to != this.viewport.to) {
  6319. this.viewport = newVP
  6320. result |= 4
  6321. }
  6322. }
  6323. this.updateForViewport()
  6324. if (this.lineGaps.length || this.viewport.to - this.viewport.from > 15000) result |= this.updateLineGaps(this.ensureLineGaps(refresh ? [] : this.lineGaps))
  6325. this.computeVisibleRanges()
  6326. if (this.mustEnforceCursorAssoc) {
  6327. this.mustEnforceCursorAssoc = false
  6328. docView.enforceCursorAssoc()
  6329. }
  6330. return result
  6331. }
  6332. get visibleTop() {
  6333. return this.scaler.fromDOM(this.pixelViewport.top, 0)
  6334. }
  6335. get visibleBottom() {
  6336. return this.scaler.fromDOM(this.pixelViewport.bottom, 0)
  6337. }
  6338. getViewport(bias, scrollTo) {
  6339. let marginTop = 0.5 - Math.max(-0.5, Math.min(0.5, bias / 1000 / 2))
  6340. let map = this.heightMap,
  6341. doc = this.state.doc,
  6342. { visibleTop, visibleBottom } = this
  6343. let viewport = new Viewport(
  6344. map.lineAt(visibleTop - marginTop * 1000, QueryType.ByHeight, doc, 0, 0).from,
  6345. map.lineAt(visibleBottom + (1 - marginTop) * 1000, QueryType.ByHeight, doc, 0, 0).to
  6346. )
  6347. if (scrollTo) {
  6348. if (scrollTo.head < viewport.from) {
  6349. let { top: newTop } = map.lineAt(scrollTo.head, QueryType.ByPos, doc, 0, 0)
  6350. viewport = new Viewport(
  6351. map.lineAt(newTop - 1000 / 2, QueryType.ByHeight, doc, 0, 0).from,
  6352. map.lineAt(newTop + (visibleBottom - visibleTop) + 1000 / 2, QueryType.ByHeight, doc, 0, 0).to
  6353. )
  6354. } else if (scrollTo.head > viewport.to) {
  6355. let { bottom: newBottom } = map.lineAt(scrollTo.head, QueryType.ByPos, doc, 0, 0)
  6356. viewport = new Viewport(
  6357. map.lineAt(newBottom - (visibleBottom - visibleTop) - 1000 / 2, QueryType.ByHeight, doc, 0, 0).from,
  6358. map.lineAt(newBottom + 1000 / 2, QueryType.ByHeight, doc, 0, 0).to
  6359. )
  6360. }
  6361. }
  6362. return viewport
  6363. }
  6364. mapViewport(viewport, changes) {
  6365. let from = changes.mapPos(viewport.from, -1),
  6366. to = changes.mapPos(viewport.to, 1)
  6367. return new Viewport(this.heightMap.lineAt(from, QueryType.ByPos, this.state.doc, 0, 0).from, this.heightMap.lineAt(to, QueryType.ByPos, this.state.doc, 0, 0).to)
  6368. }
  6369. viewportIsAppropriate({ from, to }, bias = 0) {
  6370. let { top } = this.heightMap.lineAt(from, QueryType.ByPos, this.state.doc, 0, 0)
  6371. let { bottom } = this.heightMap.lineAt(to, QueryType.ByPos, this.state.doc, 0, 0)
  6372. let { visibleTop, visibleBottom } = this
  6373. return (
  6374. (from == 0 || top <= visibleTop - Math.max(10, Math.min(-bias, 250))) &&
  6375. (to == this.state.doc.length || bottom >= visibleBottom + Math.max(10, Math.min(bias, 250))) &&
  6376. top > visibleTop - 2 * 1000 &&
  6377. bottom < visibleBottom + 2 * 1000
  6378. )
  6379. }
  6380. mapLineGaps(gaps, changes) {
  6381. if (!gaps.length || changes.empty) return gaps
  6382. let mapped = []
  6383. for (let _i58 = 0, _length58 = gaps.length; _i58 < _length58; _i58++) {
  6384. let gap = gaps[_i58]
  6385. if (!changes.touchesRange(gap.from, gap.to)) mapped.push(new LineGap(changes.mapPos(gap.from), changes.mapPos(gap.to), gap.size))
  6386. }
  6387. return mapped
  6388. }
  6389. ensureLineGaps(current) {
  6390. let gaps = []
  6391. if (this.heightOracle.direction != Direction.LTR) return gaps
  6392. this.heightMap.forEachLine(this.viewport.from, this.viewport.to, this.state.doc, 0, 0, line => {
  6393. if (line.length < 10000) return
  6394. let structure = lineStructure(line.from, line.to, this.state)
  6395. if (structure.total < 10000) return
  6396. let viewFrom, viewTo
  6397. if (this.heightOracle.lineWrapping) {
  6398. if (line.from != this.viewport.from) viewFrom = line.from
  6399. else viewFrom = findPosition(structure, (this.visibleTop - line.top) / line.height)
  6400. if (line.to != this.viewport.to) viewTo = line.to
  6401. else viewTo = findPosition(structure, (this.visibleBottom - line.top) / line.height)
  6402. } else {
  6403. let totalWidth = structure.total * this.heightOracle.charWidth
  6404. viewFrom = findPosition(structure, this.pixelViewport.left / totalWidth)
  6405. viewTo = findPosition(structure, this.pixelViewport.right / totalWidth)
  6406. }
  6407. let sel = this.state.selection.main
  6408. if (sel.from <= viewFrom && sel.to >= line.from) viewFrom = sel.from
  6409. if (sel.from <= line.to && sel.to >= viewTo) viewTo = sel.to
  6410. let gapTo = viewFrom - 10000,
  6411. gapFrom = viewTo + 10000
  6412. if (gapTo > line.from + 5000)
  6413. gaps.push(
  6414. find(current, gap => gap.from == line.from && gap.to > gapTo - 5000 && gap.to < gapTo + 5000) || new LineGap(line.from, gapTo, this.gapSize(line, gapTo, true, structure))
  6415. )
  6416. if (gapFrom < line.to - 5000)
  6417. gaps.push(
  6418. find(current, gap => gap.to == line.to && gap.from > gapFrom - 5000 && gap.from < gapFrom + 5000) ||
  6419. new LineGap(gapFrom, line.to, this.gapSize(line, gapFrom, false, structure))
  6420. )
  6421. })
  6422. return gaps
  6423. }
  6424. gapSize(line, pos, start, structure) {
  6425. if (this.heightOracle.lineWrapping) {
  6426. let height = line.height * findFraction(structure, pos)
  6427. return start ? height : line.height - height
  6428. } else {
  6429. let ratio = findFraction(structure, pos)
  6430. return structure.total * this.heightOracle.charWidth * (start ? ratio : 1 - ratio)
  6431. }
  6432. }
  6433. updateLineGaps(gaps) {
  6434. if (!LineGap.same(gaps, this.lineGaps)) {
  6435. this.lineGaps = gaps
  6436. this.lineGapDeco = Decoration.set(gaps.map(gap => gap.draw(this.heightOracle.lineWrapping)))
  6437. return 8
  6438. }
  6439. return 0
  6440. }
  6441. computeVisibleRanges() {
  6442. let deco = this.state.facet(decorations)
  6443. if (this.lineGaps.length) deco = deco.concat(this.lineGapDeco)
  6444. let ranges = []
  6445. RangeSet.spans(
  6446. deco,
  6447. this.viewport.from,
  6448. this.viewport.to,
  6449. {
  6450. span(from, to) {
  6451. ranges.push({ from, to })
  6452. },
  6453. point() {}
  6454. },
  6455. 20
  6456. )
  6457. this.visibleRanges = ranges
  6458. }
  6459. lineAt(pos, editorTop) {
  6460. editorTop += this.paddingTop
  6461. return scaleBlock(this.heightMap.lineAt(pos, QueryType.ByPos, this.state.doc, editorTop, 0), this.scaler, editorTop)
  6462. }
  6463. lineAtHeight(height, editorTop) {
  6464. editorTop += this.paddingTop
  6465. return scaleBlock(this.heightMap.lineAt(this.scaler.fromDOM(height, editorTop), QueryType.ByHeight, this.state.doc, editorTop, 0), this.scaler, editorTop)
  6466. }
  6467. blockAtHeight(height, editorTop) {
  6468. editorTop += this.paddingTop
  6469. return scaleBlock(this.heightMap.blockAt(this.scaler.fromDOM(height, editorTop), this.state.doc, editorTop, 0), this.scaler, editorTop)
  6470. }
  6471. forEachLine(from, to, f, editorTop) {
  6472. editorTop += this.paddingTop
  6473. return this.heightMap.forEachLine(from, to, this.state.doc, editorTop, 0, this.scaler.scale == 1 ? f : b => f(scaleBlock(b, this.scaler, editorTop)))
  6474. }
  6475. get contentHeight() {
  6476. return this.domHeight + this.paddingTop + this.paddingBottom
  6477. }
  6478. get domHeight() {
  6479. return this.scaler.toDOM(this.heightMap.height, this.paddingTop)
  6480. }
  6481. }
  6482. class Viewport {
  6483. constructor(from, to) {
  6484. this.from = from
  6485. this.to = to
  6486. }
  6487. eq(b) {
  6488. return this.from == b.from && this.to == b.to
  6489. }
  6490. }
  6491. function lineStructure(from, to, state) {
  6492. let ranges = [],
  6493. pos = from,
  6494. total = 0
  6495. RangeSet.spans(
  6496. state.facet(decorations),
  6497. from,
  6498. to,
  6499. {
  6500. span() {},
  6501. point(from, to) {
  6502. if (from > pos) {
  6503. ranges.push({ from: pos, to: from })
  6504. total += from - pos
  6505. }
  6506. pos = to
  6507. }
  6508. },
  6509. 20
  6510. )
  6511. if (pos < to) {
  6512. ranges.push({ from: pos, to })
  6513. total += to - pos
  6514. }
  6515. return { total, ranges }
  6516. }
  6517. function findPosition({ total, ranges }, ratio) {
  6518. if (ratio <= 0) return ranges[0].from
  6519. if (ratio >= 1) return ranges[ranges.length - 1].to
  6520. let dist = Math.floor(total * ratio)
  6521. for (let i = 0; ; i++) {
  6522. let { from, to } = ranges[i],
  6523. size = to - from
  6524. if (dist <= size) return from + dist
  6525. dist -= size
  6526. }
  6527. }
  6528. function findFraction(structure, pos) {
  6529. let counted = 0
  6530. for (let _i59 = 0, _structure$ranges = structure.ranges, _length59 = _structure$ranges.length; _i59 < _length59; _i59++) {
  6531. let { from, to } = _structure$ranges[_i59]
  6532. if (pos <= to) {
  6533. counted += pos - from
  6534. break
  6535. }
  6536. counted += to - from
  6537. }
  6538. return counted / structure.total
  6539. }
  6540. function find(array, f) {
  6541. for (let _i60 = 0, _length60 = array.length; _i60 < _length60; _i60++) {
  6542. let val = array[_i60]
  6543. if (f(val)) return val
  6544. }
  6545. return undefined
  6546. }
  6547. const IdScaler = {
  6548. toDOM(n) {
  6549. return n
  6550. },
  6551. fromDOM(n) {
  6552. return n
  6553. },
  6554. scale: 1
  6555. }
  6556. class BigScaler {
  6557. constructor(doc, heightMap, viewports) {
  6558. let vpHeight = 0,
  6559. base = 0,
  6560. domBase = 0
  6561. this.viewports = viewports.map(({ from, to }) => {
  6562. let top = heightMap.lineAt(from, QueryType.ByPos, doc, 0, 0).top
  6563. let bottom = heightMap.lineAt(to, QueryType.ByPos, doc, 0, 0).bottom
  6564. vpHeight += bottom - top
  6565. return { from, to, top, bottom, domTop: 0, domBottom: 0 }
  6566. })
  6567. this.scale = (7000000 - vpHeight) / (heightMap.height - vpHeight)
  6568. for (let _i61 = 0, _this$viewports = this.viewports, _length61 = _this$viewports.length; _i61 < _length61; _i61++) {
  6569. let obj = _this$viewports[_i61]
  6570. obj.domTop = domBase + (obj.top - base) * this.scale
  6571. domBase = obj.domBottom = obj.domTop + (obj.bottom - obj.top)
  6572. base = obj.bottom
  6573. }
  6574. }
  6575. toDOM(n, top) {
  6576. n -= top
  6577. for (let i = 0, base = 0, domBase = 0; ; i++) {
  6578. let vp = i < this.viewports.length ? this.viewports[i] : null
  6579. if (!vp || n < vp.top) return domBase + (n - base) * this.scale + top
  6580. if (n <= vp.bottom) return vp.domTop + (n - vp.top) + top
  6581. base = vp.bottom
  6582. domBase = vp.domBottom
  6583. }
  6584. }
  6585. fromDOM(n, top) {
  6586. n -= top
  6587. for (let i = 0, base = 0, domBase = 0; ; i++) {
  6588. let vp = i < this.viewports.length ? this.viewports[i] : null
  6589. if (!vp || n < vp.domTop) return base + (n - domBase) / this.scale + top
  6590. if (n <= vp.domBottom) return vp.top + (n - vp.domTop) + top
  6591. base = vp.bottom
  6592. domBase = vp.domBottom
  6593. }
  6594. }
  6595. }
  6596. function scaleBlock(block, scaler, top) {
  6597. if (scaler.scale == 1) return block
  6598. let bTop = scaler.toDOM(block.top, top),
  6599. bBottom = scaler.toDOM(block.bottom, top)
  6600. return new BlockInfo(block.from, block.length, bTop, bBottom - bTop, Array.isArray(block.type) ? block.type.map(b => scaleBlock(b, scaler, top)) : block.type)
  6601. }
  6602. const theme = Facet.define({ combine: strs => strs.join(' ') })
  6603. const darkTheme = Facet.define({ combine: values => values.indexOf(true) > -1 })
  6604. const baseThemeID = StyleModule.newName(),
  6605. baseLightID = StyleModule.newName(),
  6606. baseDarkID = StyleModule.newName()
  6607. const lightDarkIDs = { '&light': '.' + baseLightID, '&dark': '.' + baseDarkID }
  6608. function buildTheme(main, spec, scopes) {
  6609. return new StyleModule(spec, {
  6610. finish(sel) {
  6611. return /&/.test(sel)
  6612. ? sel.replace(/&\w*/, m => {
  6613. if (m == '&') return main
  6614. if (!scopes || !scopes[m]) throw new RangeError(`Unsupported selector: ${m}`)
  6615. return scopes[m]
  6616. })
  6617. : main + ' ' + sel
  6618. }
  6619. })
  6620. }
  6621. const baseTheme$8 = buildTheme(
  6622. '.' + baseThemeID,
  6623. {
  6624. '&': { position: 'relative !important', boxSizing: 'border-box', '&.cm-focused': { outline: '1px dotted #212121' }, display: 'flex !important', flexDirection: 'column' },
  6625. '.cm-scroller': {
  6626. display: 'flex !important',
  6627. alignItems: 'flex-start !important',
  6628. fontFamily: 'monospace',
  6629. lineHeight: 1.4,
  6630. height: '100%',
  6631. overflowX: 'auto',
  6632. position: 'relative',
  6633. zIndex: 0
  6634. },
  6635. '.cm-content': { margin: 0, flexGrow: 2, minHeight: '100%', display: 'block', whiteSpace: 'pre', wordWrap: 'normal', boxSizing: 'border-box', padding: '4px 0', outline: 'none' },
  6636. '.cm-lineWrapping': { whiteSpace: 'pre-wrap', overflowWrap: 'anywhere' },
  6637. '&light .cm-content': { caretColor: 'black' },
  6638. '&dark .cm-content': { caretColor: 'white' },
  6639. '.cm-line': { display: 'block', padding: '0 2px 0 4px' },
  6640. '.cm-selectionLayer': { zIndex: -1, contain: 'size style' },
  6641. '.cm-selectionBackground': { position: 'absolute' },
  6642. '&light .cm-selectionBackground': { background: '#d9d9d9' },
  6643. '&dark .cm-selectionBackground': { background: '#222' },
  6644. '&light.cm-focused .cm-selectionBackground': { background: '#d7d4f0' },
  6645. '&dark.cm-focused .cm-selectionBackground': { background: '#233' },
  6646. '.cm-cursorLayer': { zIndex: 100, contain: 'size style', pointerEvents: 'none' },
  6647. '&.cm-focused .cm-cursorLayer': { animation: 'steps(1) cm-blink 1.2s infinite' },
  6648. '@keyframes cm-blink': { '0%': {}, '50%': { visibility: 'hidden' }, '100%': {} },
  6649. '@keyframes cm-blink2': { '0%': {}, '50%': { visibility: 'hidden' }, '100%': {} },
  6650. '.cm-cursor': { position: 'absolute', borderLeft: '1.2px solid black', marginLeft: '-0.6px', pointerEvents: 'none', display: 'none' },
  6651. '&dark .cm-cursor': { borderLeftColor: '#444' },
  6652. '&.cm-focused .cm-cursor': { display: 'block' },
  6653. '&light .cm-activeLine': { backgroundColor: '#f3f9ff' },
  6654. '&dark .cm-activeLine': { backgroundColor: '#223039' },
  6655. '&light .cm-specialChar': { color: 'red' },
  6656. '&dark .cm-specialChar': { color: '#f78' },
  6657. '.cm-tab': { display: 'inline-block', overflow: 'hidden', verticalAlign: 'bottom' },
  6658. '.cm-placeholder': { color: '#888', display: 'inline-block' },
  6659. '.cm-button': { verticalAlign: 'middle', color: 'inherit', fontSize: '70%', padding: '.2em 1em', borderRadius: '3px' },
  6660. '&light .cm-button': { backgroundImage: 'linear-gradient(#eff1f5, #d9d9df)', border: '1px solid #888', '&:active': { backgroundImage: 'linear-gradient(#b4b4b4, #d0d3d6)' } },
  6661. '&dark .cm-button': { backgroundImage: 'linear-gradient(#393939, #111)', border: '1px solid #888', '&:active': { backgroundImage: 'linear-gradient(#111, #333)' } },
  6662. '.cm-textfield': { verticalAlign: 'middle', color: 'inherit', fontSize: '70%', border: '1px solid silver', padding: '.2em .5em' },
  6663. '&light .cm-textfield': { backgroundColor: 'white' },
  6664. '&dark .cm-textfield': { border: '1px solid #555', backgroundColor: 'inherit' }
  6665. },
  6666. lightDarkIDs
  6667. )
  6668. const observeOptions = { childList: true, characterData: true, subtree: true, characterDataOldValue: true }
  6669. const useCharData = browser.ie && browser.ie_version <= 11
  6670. class DOMObserver {
  6671. constructor(view, onChange, onScrollChanged) {
  6672. this.view = view
  6673. this.onChange = onChange
  6674. this.onScrollChanged = onScrollChanged
  6675. this.active = false
  6676. this.ignoreSelection = new DOMSelection()
  6677. this.delayedFlush = -1
  6678. this.queue = []
  6679. this.lastFlush = 0
  6680. this.scrollTargets = []
  6681. this.intersection = null
  6682. this.intersecting = false
  6683. this._selectionRange = null
  6684. this.parentCheck = -1
  6685. this.dom = view.contentDOM
  6686. this.observer = new MutationObserver(mutations => {
  6687. for (let _i62 = 0, _length62 = mutations.length; _i62 < _length62; _i62++) {
  6688. let mut = mutations[_i62]
  6689. this.queue.push(mut)
  6690. }
  6691. this._selectionRange = null
  6692. if (
  6693. ((browser.ie && browser.ie_version <= 11) || (browser.ios && view.composing)) &&
  6694. mutations.some(m => (m.type == 'childList' && m.removedNodes.length) || (m.type == 'characterData' && m.oldValue.length > m.target.nodeValue.length))
  6695. )
  6696. this.flushSoon()
  6697. else this.flush()
  6698. })
  6699. if (useCharData)
  6700. this.onCharData = event => {
  6701. this.queue.push({ target: event.target, type: 'characterData', oldValue: event.prevValue })
  6702. this.flushSoon()
  6703. }
  6704. this.onSelectionChange = this.onSelectionChange.bind(this)
  6705. this.start()
  6706. this.onScroll = this.onScroll.bind(this)
  6707. window.addEventListener('scroll', this.onScroll)
  6708. if (typeof IntersectionObserver == 'function') {
  6709. this.intersection = new IntersectionObserver(entries => {
  6710. if (this.parentCheck < 0) this.parentCheck = setTimeout(this.listenForScroll.bind(this), 1000)
  6711. if (entries[entries.length - 1].intersectionRatio > 0 != this.intersecting) {
  6712. this.intersecting = !this.intersecting
  6713. if (this.intersecting != this.view.inView) this.onScrollChanged(document.createEvent('Event'))
  6714. }
  6715. }, {})
  6716. this.intersection.observe(this.dom)
  6717. }
  6718. this.listenForScroll()
  6719. }
  6720. onScroll(e) {
  6721. if (this.intersecting) this.flush()
  6722. this.onScrollChanged(e)
  6723. }
  6724. onSelectionChange(event) {
  6725. if (this.lastFlush < Date.now() - 50) this._selectionRange = null
  6726. let { view } = this,
  6727. sel = this.selectionRange
  6728. if (view.state.facet(editable) ? view.root.activeElement != this.dom : !hasSelection(view.dom, sel)) return
  6729. let context = sel.anchorNode && view.docView.nearest(sel.anchorNode)
  6730. if (context && context.ignoreEvent(event)) return
  6731. if (browser.ie && browser.ie_version <= 11 && !view.state.selection.main.empty && sel.focusNode && isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset))
  6732. this.flushSoon()
  6733. else this.flush()
  6734. }
  6735. get selectionRange() {
  6736. if (!this._selectionRange) {
  6737. let { root } = this.view,
  6738. sel = getSelection(root)
  6739. if (browser.safari && root.nodeType == 11 && deepActiveElement() == this.view.contentDOM) sel = safariSelectionRangeHack(this.view) || sel
  6740. this._selectionRange = sel
  6741. }
  6742. return this._selectionRange
  6743. }
  6744. setSelectionRange(anchor, head) {
  6745. var _a
  6746. if (!((_a = this._selectionRange) === null || _a === void 0 ? void 0 : _a.type))
  6747. this._selectionRange = { anchorNode: anchor.node, anchorOffset: anchor.offset, focusNode: head.node, focusOffset: head.offset }
  6748. }
  6749. listenForScroll() {
  6750. this.parentCheck = -1
  6751. let i = 0,
  6752. changed = null
  6753. for (let dom = this.dom; dom; ) {
  6754. if (dom.nodeType == 1) {
  6755. if (!changed && i < this.scrollTargets.length && this.scrollTargets[i] == dom) i++
  6756. else if (!changed) changed = this.scrollTargets.slice(0, i)
  6757. if (changed) changed.push(dom)
  6758. dom = dom.assignedSlot || dom.parentNode
  6759. } else if (dom.nodeType == 11) {
  6760. dom = dom.host
  6761. } else {
  6762. break
  6763. }
  6764. }
  6765. if (i < this.scrollTargets.length && !changed) changed = this.scrollTargets.slice(0, i)
  6766. if (changed) {
  6767. for (let _i63 = 0, _this$scrollTargets = this.scrollTargets, _length63 = _this$scrollTargets.length; _i63 < _length63; _i63++) {
  6768. let dom = _this$scrollTargets[_i63]
  6769. dom.removeEventListener('scroll', this.onScroll)
  6770. }
  6771. for (let _i64 = 0, _this$scrollTargets2 = (this.scrollTargets = changed), _length64 = _this$scrollTargets2.length; _i64 < _length64; _i64++) {
  6772. let dom = _this$scrollTargets2[_i64]
  6773. dom.addEventListener('scroll', this.onScroll)
  6774. }
  6775. }
  6776. }
  6777. ignore(f) {
  6778. if (!this.active) return f()
  6779. try {
  6780. this.stop()
  6781. return f()
  6782. } finally {
  6783. this.start()
  6784. this.clear()
  6785. }
  6786. }
  6787. start() {
  6788. if (this.active) return
  6789. this.observer.observe(this.dom, observeOptions)
  6790. this.dom.ownerDocument.addEventListener('selectionchange', this.onSelectionChange)
  6791. if (useCharData) this.dom.addEventListener('DOMCharacterDataModified', this.onCharData)
  6792. this.active = true
  6793. }
  6794. stop() {
  6795. if (!this.active) return
  6796. this.active = false
  6797. this.observer.disconnect()
  6798. this.dom.ownerDocument.removeEventListener('selectionchange', this.onSelectionChange)
  6799. if (useCharData) this.dom.removeEventListener('DOMCharacterDataModified', this.onCharData)
  6800. }
  6801. clearSelection() {
  6802. this.ignoreSelection.set(this.selectionRange)
  6803. }
  6804. clear() {
  6805. this.observer.takeRecords()
  6806. this.queue.length = 0
  6807. this.clearSelection()
  6808. }
  6809. flushSoon() {
  6810. if (this.delayedFlush < 0)
  6811. this.delayedFlush = window.setTimeout(() => {
  6812. this.delayedFlush = -1
  6813. this.flush()
  6814. }, 20)
  6815. }
  6816. forceFlush() {
  6817. if (this.delayedFlush >= 0) {
  6818. window.clearTimeout(this.delayedFlush)
  6819. this.delayedFlush = -1
  6820. this.flush()
  6821. }
  6822. }
  6823. flush() {
  6824. if (this.delayedFlush >= 0) return
  6825. this.lastFlush = Date.now()
  6826. let records = this.queue
  6827. for (let _i65 = 0, _this$observer$takeRe = this.observer.takeRecords(), _length65 = _this$observer$takeRe.length; _i65 < _length65; _i65++) {
  6828. let mut = _this$observer$takeRe[_i65]
  6829. records.push(mut)
  6830. }
  6831. if (records.length) this.queue = []
  6832. let selection = this.selectionRange
  6833. let newSel = !this.ignoreSelection.eq(selection) && hasSelection(this.dom, selection)
  6834. if (records.length == 0 && !newSel) return
  6835. let from = -1,
  6836. to = -1,
  6837. typeOver = false
  6838. for (let _i66 = 0, _length66 = records.length; _i66 < _length66; _i66++) {
  6839. let record = records[_i66]
  6840. let range = this.readMutation(record)
  6841. if (!range) continue
  6842. if (range.typeOver) typeOver = true
  6843. if (from == -1) {
  6844. ;({ from, to } = range)
  6845. } else {
  6846. from = Math.min(range.from, from)
  6847. to = Math.max(range.to, to)
  6848. }
  6849. }
  6850. let startState = this.view.state
  6851. if (from > -1 || newSel) this.onChange(from, to, typeOver)
  6852. if (this.view.state == startState) {
  6853. if (this.view.docView.dirty) {
  6854. this.ignore(() => this.view.docView.sync())
  6855. this.view.docView.dirty = 0
  6856. }
  6857. this.view.docView.updateSelection()
  6858. }
  6859. this.clearSelection()
  6860. }
  6861. readMutation(rec) {
  6862. let cView = this.view.docView.nearest(rec.target)
  6863. if (!cView || cView.ignoreMutation(rec)) return null
  6864. cView.markDirty()
  6865. if (rec.type == 'childList') {
  6866. let childBefore = findChild(cView, rec.previousSibling || rec.target.previousSibling, -1)
  6867. let childAfter = findChild(cView, rec.nextSibling || rec.target.nextSibling, 1)
  6868. return { from: childBefore ? cView.posAfter(childBefore) : cView.posAtStart, to: childAfter ? cView.posBefore(childAfter) : cView.posAtEnd, typeOver: false }
  6869. } else {
  6870. return { from: cView.posAtStart, to: cView.posAtEnd, typeOver: rec.target.nodeValue == rec.oldValue }
  6871. }
  6872. }
  6873. destroy() {
  6874. this.stop()
  6875. if (this.intersection) this.intersection.disconnect()
  6876. for (let _i67 = 0, _this$scrollTargets3 = this.scrollTargets, _length67 = _this$scrollTargets3.length; _i67 < _length67; _i67++) {
  6877. let dom = _this$scrollTargets3[_i67]
  6878. dom.removeEventListener('scroll', this.onScroll)
  6879. }
  6880. window.removeEventListener('scroll', this.onScroll)
  6881. clearTimeout(this.parentCheck)
  6882. }
  6883. }
  6884. function findChild(cView, dom, dir) {
  6885. while (dom) {
  6886. let curView = ContentView.get(dom)
  6887. if (curView && curView.parent == cView) return curView
  6888. let parent = dom.parentNode
  6889. dom = parent != cView.dom ? parent : dir > 0 ? dom.nextSibling : dom.previousSibling
  6890. }
  6891. return null
  6892. }
  6893. function safariSelectionRangeHack(view) {
  6894. let found = null
  6895. function read(event) {
  6896. event.preventDefault()
  6897. event.stopImmediatePropagation()
  6898. found = event.getTargetRanges()[0]
  6899. }
  6900. view.contentDOM.addEventListener('beforeinput', read, true)
  6901. document.execCommand('indent')
  6902. view.contentDOM.removeEventListener('beforeinput', read, true)
  6903. if (!found) return null
  6904. let anchorNode = found.startContainer,
  6905. anchorOffset = found.startOffset
  6906. let focusNode = found.endContainer,
  6907. focusOffset = found.endOffset
  6908. let curAnchor = view.docView.domAtPos(view.state.selection.main.anchor)
  6909. if (isEquivalentPosition(curAnchor.node, curAnchor.offset, focusNode, focusOffset)) [anchorNode, anchorOffset, focusNode, focusOffset] = [focusNode, focusOffset, anchorNode, anchorOffset]
  6910. return { anchorNode, anchorOffset, focusNode, focusOffset }
  6911. }
  6912. function applyDOMChange(view, start, end, typeOver) {
  6913. let change, newSel
  6914. let sel = view.state.selection.main,
  6915. bounds
  6916. if (start > -1 && (bounds = view.docView.domBoundsAround(start, end, 0))) {
  6917. let { from, to } = bounds
  6918. let selPoints = view.docView.impreciseHead || view.docView.impreciseAnchor ? [] : selectionPoints(view)
  6919. let reader = new DOMReader(selPoints, view)
  6920. reader.readRange(bounds.startDOM, bounds.endDOM)
  6921. newSel = selectionFromPoints(selPoints, from)
  6922. let preferredPos = sel.from,
  6923. preferredSide = null
  6924. if ((view.inputState.lastKeyCode === 8 && view.inputState.lastKeyTime > Date.now() - 100) || (browser.android && reader.text.length < to - from)) {
  6925. preferredPos = sel.to
  6926. preferredSide = 'end'
  6927. }
  6928. let diff = findDiff(view.state.sliceDoc(from, to), reader.text, preferredPos - from, preferredSide)
  6929. if (diff) change = { from: from + diff.from, to: from + diff.toA, insert: view.state.toText(reader.text.slice(diff.from, diff.toB)) }
  6930. } else if (view.hasFocus || !view.state.facet(editable)) {
  6931. let domSel = view.observer.selectionRange
  6932. let { impreciseHead: iHead, impreciseAnchor: iAnchor } = view.docView
  6933. let head =
  6934. (iHead && iHead.node == domSel.focusNode && iHead.offset == domSel.focusOffset) || !contains(view.contentDOM, domSel.focusNode)
  6935. ? view.state.selection.main.head
  6936. : view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset)
  6937. let anchor =
  6938. (iAnchor && iAnchor.node == domSel.anchorNode && iAnchor.offset == domSel.anchorOffset) || !contains(view.contentDOM, domSel.anchorNode)
  6939. ? view.state.selection.main.anchor
  6940. : view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset)
  6941. if (head != sel.head || anchor != sel.anchor) newSel = EditorSelection.single(anchor, head)
  6942. }
  6943. if (!change && !newSel) return
  6944. if (!change && typeOver && !sel.empty && newSel && newSel.main.empty) change = { from: sel.from, to: sel.to, insert: view.state.doc.slice(sel.from, sel.to) }
  6945. else if (change && change.from >= sel.from && change.to <= sel.to && (change.from != sel.from || change.to != sel.to) && sel.to - sel.from - (change.to - change.from) <= 4)
  6946. change = {
  6947. from: sel.from,
  6948. to: sel.to,
  6949. insert: view.state.doc
  6950. .slice(sel.from, change.from)
  6951. .append(change.insert)
  6952. .append(view.state.doc.slice(change.to, sel.to))
  6953. }
  6954. if (change) {
  6955. let startState = view.state
  6956. if (
  6957. (browser.android &&
  6958. ((change.from == sel.from && change.to == sel.to && change.insert.length == 1 && change.insert.lines == 2 && dispatchKey(view.contentDOM, 'Enter', 13)) ||
  6959. (change.from == sel.from - 1 && change.to == sel.to && change.insert.length == 0 && dispatchKey(view.contentDOM, 'Backspace', 8)) ||
  6960. (change.from == sel.from && change.to == sel.to + 1 && change.insert.length == 0 && dispatchKey(view.contentDOM, 'Delete', 46)))) ||
  6961. (browser.ios && view.inputState.flushIOSKey(view))
  6962. )
  6963. return
  6964. let text = change.insert.toString()
  6965. if (view.state.facet(inputHandler).some(h => h(view, change.from, change.to, text))) return
  6966. if (view.inputState.composing >= 0) view.inputState.composing++
  6967. let tr
  6968. if (
  6969. change.from >= sel.from &&
  6970. change.to <= sel.to &&
  6971. change.to - change.from >= (sel.to - sel.from) / 3 &&
  6972. (!newSel || (newSel.main.empty && newSel.main.from == change.from + change.insert.length))
  6973. ) {
  6974. let before = sel.from < change.from ? startState.sliceDoc(sel.from, change.from) : ''
  6975. let after = sel.to > change.to ? startState.sliceDoc(change.to, sel.to) : ''
  6976. tr = startState.replaceSelection(view.state.toText(before + change.insert.sliceString(0, undefined, view.state.lineBreak) + after))
  6977. } else {
  6978. let changes = startState.changes(change)
  6979. tr = { changes, selection: newSel && !startState.selection.main.eq(newSel.main) && newSel.main.to <= changes.newLength ? startState.selection.replaceRange(newSel.main) : undefined }
  6980. }
  6981. view.dispatch(tr, { scrollIntoView: true, annotations: Transaction.userEvent.of('input') })
  6982. } else if (newSel && !newSel.main.eq(sel)) {
  6983. let scrollIntoView = false,
  6984. annotations
  6985. if (view.inputState.lastSelectionTime > Date.now() - 50) {
  6986. if (view.inputState.lastSelectionOrigin == 'keyboardselection') scrollIntoView = true
  6987. else annotations = Transaction.userEvent.of(view.inputState.lastSelectionOrigin)
  6988. }
  6989. view.dispatch({ selection: newSel, scrollIntoView, annotations })
  6990. }
  6991. }
  6992. function findDiff(a, b, preferredPos, preferredSide) {
  6993. let minLen = Math.min(a.length, b.length)
  6994. let from = 0
  6995. while (from < minLen && a.charCodeAt(from) == b.charCodeAt(from)) from++
  6996. if (from == minLen && a.length == b.length) return null
  6997. let toA = a.length,
  6998. toB = b.length
  6999. while (toA > 0 && toB > 0 && a.charCodeAt(toA - 1) == b.charCodeAt(toB - 1)) {
  7000. toA--
  7001. toB--
  7002. }
  7003. if (preferredSide == 'end') {
  7004. let adjust = Math.max(0, from - Math.min(toA, toB))
  7005. preferredPos -= toA + adjust - from
  7006. }
  7007. if (toA < from && a.length < b.length) {
  7008. let move = preferredPos <= from && preferredPos >= toA ? from - preferredPos : 0
  7009. from -= move
  7010. toB = from + (toB - toA)
  7011. toA = from
  7012. } else if (toB < from) {
  7013. let move = preferredPos <= from && preferredPos >= toB ? from - preferredPos : 0
  7014. from -= move
  7015. toA = from + (toA - toB)
  7016. toB = from
  7017. }
  7018. return { from, toA, toB }
  7019. }
  7020. class DOMReader {
  7021. constructor(points, view) {
  7022. this.points = points
  7023. this.view = view
  7024. this.text = ''
  7025. this.lineBreak = view.state.lineBreak
  7026. }
  7027. readRange(start, end) {
  7028. if (!start) return
  7029. let parent = start.parentNode
  7030. for (let cur = start; ; ) {
  7031. this.findPointBefore(parent, cur)
  7032. this.readNode(cur)
  7033. let next = cur.nextSibling
  7034. if (next == end) break
  7035. let view = ContentView.get(cur),
  7036. nextView = ContentView.get(next)
  7037. if ((view ? view.breakAfter : isBlockElement(cur)) || ((nextView ? nextView.breakAfter : isBlockElement(next)) && !(cur.nodeName == 'BR' && !cur.cmIgnore))) this.text += this.lineBreak
  7038. cur = next
  7039. }
  7040. this.findPointBefore(parent, end)
  7041. }
  7042. readNode(node) {
  7043. if (node.cmIgnore) return
  7044. let view = ContentView.get(node)
  7045. let fromView = view && view.overrideDOMText
  7046. let text
  7047. if (fromView != null) text = fromView.sliceString(0, undefined, this.lineBreak)
  7048. else if (node.nodeType == 3) text = node.nodeValue
  7049. else if (node.nodeName == 'BR') text = node.nextSibling ? this.lineBreak : ''
  7050. else if (node.nodeType == 1) this.readRange(node.firstChild, null)
  7051. if (text != null) {
  7052. this.findPointIn(node, text.length)
  7053. this.text += text
  7054. if (browser.chrome && this.view.inputState.lastKeyCode == 13 && !node.nextSibling && /\n\n$/.test(this.text)) this.text = this.text.slice(0, -1)
  7055. }
  7056. }
  7057. findPointBefore(node, next) {
  7058. for (let _i68 = 0, _this$points = this.points, _length68 = _this$points.length; _i68 < _length68; _i68++) {
  7059. let point = _this$points[_i68]
  7060. if (point.node == node && node.childNodes[point.offset] == next) point.pos = this.text.length
  7061. }
  7062. }
  7063. findPointIn(node, maxLen) {
  7064. for (let _i69 = 0, _this$points2 = this.points, _length69 = _this$points2.length; _i69 < _length69; _i69++) {
  7065. let point = _this$points2[_i69]
  7066. if (point.node == node) point.pos = this.text.length + Math.min(point.offset, maxLen)
  7067. }
  7068. }
  7069. }
  7070. function isBlockElement(node) {
  7071. return node.nodeType == 1 && /^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(node.nodeName)
  7072. }
  7073. class DOMPoint {
  7074. constructor(node, offset) {
  7075. this.node = node
  7076. this.offset = offset
  7077. this.pos = -1
  7078. }
  7079. }
  7080. function selectionPoints(view) {
  7081. let result = []
  7082. if (view.root.activeElement != view.contentDOM) return result
  7083. let { anchorNode, anchorOffset, focusNode, focusOffset } = view.observer.selectionRange
  7084. if (anchorNode) {
  7085. result.push(new DOMPoint(anchorNode, anchorOffset))
  7086. if (focusNode != anchorNode || focusOffset != anchorOffset) result.push(new DOMPoint(focusNode, focusOffset))
  7087. }
  7088. return result
  7089. }
  7090. function selectionFromPoints(points, base) {
  7091. if (points.length == 0) return null
  7092. let anchor = points[0].pos,
  7093. head = points.length == 2 ? points[1].pos : anchor
  7094. return anchor > -1 && head > -1 ? EditorSelection.single(anchor + base, head + base) : null
  7095. }
  7096. class EditorView {
  7097. constructor(config = {}) {
  7098. this.plugins = []
  7099. this.editorAttrs = {}
  7100. this.contentAttrs = {}
  7101. this.bidiCache = []
  7102. this.updateState = 2
  7103. this.measureScheduled = -1
  7104. this.measureRequests = []
  7105. this.contentDOM = document.createElement('div')
  7106. this.scrollDOM = document.createElement('div')
  7107. this.scrollDOM.tabIndex = -1
  7108. this.scrollDOM.className = 'cm-scroller'
  7109. this.scrollDOM.appendChild(this.contentDOM)
  7110. this.announceDOM = document.createElement('div')
  7111. this.announceDOM.style.cssText = 'position: absolute; top: -10000px'
  7112. this.announceDOM.setAttribute('aria-live', 'polite')
  7113. this.dom = document.createElement('div')
  7114. this.dom.appendChild(this.announceDOM)
  7115. this.dom.appendChild(this.scrollDOM)
  7116. this._dispatch = config.dispatch || (tr => this.update([tr]))
  7117. this.dispatch = this.dispatch.bind(this)
  7118. this.root = config.root || document
  7119. this.viewState = new ViewState(config.state || EditorState.create())
  7120. this.plugins = this.state.facet(viewPlugin).map(spec => new PluginInstance(spec).update(this))
  7121. this.observer = new DOMObserver(
  7122. this,
  7123. (from, to, typeOver) => {
  7124. applyDOMChange(this, from, to, typeOver)
  7125. },
  7126. event => {
  7127. this.inputState.runScrollHandlers(this, event)
  7128. if (this.observer.intersecting) this.measure()
  7129. }
  7130. )
  7131. this.inputState = new InputState(this)
  7132. this.docView = new DocView(this)
  7133. this.mountStyles()
  7134. this.updateAttrs()
  7135. this.updateState = 0
  7136. ensureGlobalHandler()
  7137. this.requestMeasure()
  7138. if (config.parent) config.parent.appendChild(this.dom)
  7139. }
  7140. get state() {
  7141. return this.viewState.state
  7142. }
  7143. get viewport() {
  7144. return this.viewState.viewport
  7145. }
  7146. get visibleRanges() {
  7147. return this.viewState.visibleRanges
  7148. }
  7149. get inView() {
  7150. return this.viewState.inView
  7151. }
  7152. get composing() {
  7153. return this.inputState.composing > 0
  7154. }
  7155. dispatch(...input) {
  7156. this._dispatch(input.length == 1 && input[0] instanceof Transaction ? input[0] : this.state.update(...input))
  7157. }
  7158. update(transactions) {
  7159. if (this.updateState != 0) throw new Error('Calls to EditorView.update are not allowed while an update is in progress')
  7160. let redrawn = false,
  7161. update
  7162. let state = this.state
  7163. for (let _i70 = 0, _length70 = transactions.length; _i70 < _length70; _i70++) {
  7164. let tr = transactions[_i70]
  7165. if (tr.startState != state) throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.")
  7166. state = tr.state
  7167. }
  7168. if (state.facet(EditorState.phrases) != this.state.facet(EditorState.phrases)) return this.setState(state)
  7169. update = new ViewUpdate(this, state, transactions)
  7170. let scrollTo
  7171. try {
  7172. this.updateState = 2
  7173. scrollTo = transactions.some(tr => tr.scrollIntoView) ? state.selection.main : null
  7174. this.viewState.update(update, scrollTo)
  7175. this.bidiCache = CachedOrder.update(this.bidiCache, update.changes)
  7176. if (!update.empty) {
  7177. this.updatePlugins(update)
  7178. this.inputState.update(update)
  7179. }
  7180. redrawn = this.docView.update(update)
  7181. if (this.state.facet(styleModule) != this.styleModules) this.mountStyles()
  7182. this.updateAttrs()
  7183. this.showAnnouncements(transactions)
  7184. } finally {
  7185. this.updateState = 0
  7186. }
  7187. if (redrawn || scrollTo || this.viewState.mustEnforceCursorAssoc) this.requestMeasure()
  7188. if (!update.empty)
  7189. for (let _i71 = 0, _this$state$facet = this.state.facet(updateListener), _length71 = _this$state$facet.length; _i71 < _length71; _i71++) {
  7190. let listener = _this$state$facet[_i71]
  7191. listener(update)
  7192. }
  7193. }
  7194. setState(newState) {
  7195. if (this.updateState != 0) throw new Error('Calls to EditorView.setState are not allowed while an update is in progress')
  7196. this.updateState = 2
  7197. try {
  7198. for (let _i72 = 0, _this$plugins = this.plugins, _length72 = _this$plugins.length; _i72 < _length72; _i72++) {
  7199. let plugin = _this$plugins[_i72]
  7200. plugin.destroy(this)
  7201. }
  7202. this.viewState = new ViewState(newState)
  7203. this.plugins = newState.facet(viewPlugin).map(spec => new PluginInstance(spec).update(this))
  7204. this.docView = new DocView(this)
  7205. this.inputState.ensureHandlers(this)
  7206. this.mountStyles()
  7207. this.updateAttrs()
  7208. this.bidiCache = []
  7209. } finally {
  7210. this.updateState = 0
  7211. }
  7212. this.requestMeasure()
  7213. }
  7214. updatePlugins(update) {
  7215. let prevSpecs = update.startState.facet(viewPlugin),
  7216. specs = update.state.facet(viewPlugin)
  7217. if (prevSpecs != specs) {
  7218. let newPlugins = []
  7219. for (let _i73 = 0, _length73 = specs.length; _i73 < _length73; _i73++) {
  7220. let spec = specs[_i73]
  7221. let found = prevSpecs.indexOf(spec)
  7222. if (found < 0) {
  7223. newPlugins.push(new PluginInstance(spec))
  7224. } else {
  7225. let plugin = this.plugins[found]
  7226. plugin.mustUpdate = update
  7227. newPlugins.push(plugin)
  7228. }
  7229. }
  7230. for (let _i74 = 0, _this$plugins2 = this.plugins, _length74 = _this$plugins2.length; _i74 < _length74; _i74++) {
  7231. let plugin = _this$plugins2[_i74]
  7232. if (plugin.mustUpdate != update) plugin.destroy(this)
  7233. }
  7234. this.plugins = newPlugins
  7235. this.inputState.ensureHandlers(this)
  7236. } else {
  7237. for (let _i75 = 0, _this$plugins3 = this.plugins, _length75 = _this$plugins3.length; _i75 < _length75; _i75++) {
  7238. let p = _this$plugins3[_i75]
  7239. p.mustUpdate = update
  7240. }
  7241. }
  7242. for (let i = 0; i < this.plugins.length; i++) this.plugins[i] = this.plugins[i].update(this)
  7243. }
  7244. measure() {
  7245. if (this.measureScheduled > -1) cancelAnimationFrame(this.measureScheduled)
  7246. this.measureScheduled = -1
  7247. let updated = null
  7248. try {
  7249. for (let i = 0; ; i++) {
  7250. this.updateState = 1
  7251. let changed = this.viewState.measure(this.docView, i > 0)
  7252. let measuring = this.measureRequests
  7253. if (!changed && !measuring.length && this.viewState.scrollTo == null) break
  7254. this.measureRequests = []
  7255. if (i > 5) {
  7256. console.warn('Viewport failed to stabilize')
  7257. break
  7258. }
  7259. let measured = measuring.map(m => {
  7260. try {
  7261. return m.read(this)
  7262. } catch (e) {
  7263. logException(this.state, e)
  7264. return BadMeasure
  7265. }
  7266. })
  7267. let update = new ViewUpdate(this, this.state)
  7268. update.flags |= changed
  7269. if (!updated) updated = update
  7270. else updated.flags |= changed
  7271. this.updateState = 2
  7272. if (!update.empty) {
  7273. this.updatePlugins(update)
  7274. this.inputState.update(update)
  7275. }
  7276. this.updateAttrs()
  7277. if (changed) this.docView.update(update)
  7278. for (let i = 0; i < measuring.length; i++)
  7279. if (measured[i] != BadMeasure) {
  7280. try {
  7281. measuring[i].write(measured[i], this)
  7282. } catch (e) {
  7283. logException(this.state, e)
  7284. }
  7285. }
  7286. if (this.viewState.scrollTo) {
  7287. this.docView.scrollPosIntoView(this.viewState.scrollTo.head, this.viewState.scrollTo.assoc)
  7288. this.viewState.scrollTo = null
  7289. }
  7290. if (!(changed & 4) && this.measureRequests.length == 0) break
  7291. }
  7292. } finally {
  7293. this.updateState = 0
  7294. }
  7295. this.measureScheduled = -1
  7296. if (updated && !updated.empty)
  7297. for (let _i76 = 0, _this$state$facet2 = this.state.facet(updateListener), _length76 = _this$state$facet2.length; _i76 < _length76; _i76++) {
  7298. let listener = _this$state$facet2[_i76]
  7299. listener(updated)
  7300. }
  7301. }
  7302. get themeClasses() {
  7303. return baseThemeID + ' ' + (this.state.facet(darkTheme) ? baseDarkID : baseLightID) + ' ' + this.state.facet(theme)
  7304. }
  7305. updateAttrs() {
  7306. let editorAttrs = combineAttrs(this.state.facet(editorAttributes), { class: 'cm-editor cm-wrap' + (this.hasFocus ? ' cm-focused ' : ' ') + this.themeClasses })
  7307. updateAttrs(this.dom, this.editorAttrs, editorAttrs)
  7308. this.editorAttrs = editorAttrs
  7309. let contentAttrs = combineAttrs(this.state.facet(contentAttributes), {
  7310. spellcheck: 'false',
  7311. autocorrect: 'off',
  7312. autocapitalize: 'off',
  7313. contenteditable: String(this.state.facet(editable)),
  7314. class: 'cm-content',
  7315. style: `${browser.tabSize}: ${this.state.tabSize}`,
  7316. role: 'textbox',
  7317. 'aria-multiline': 'true'
  7318. })
  7319. updateAttrs(this.contentDOM, this.contentAttrs, contentAttrs)
  7320. this.contentAttrs = contentAttrs
  7321. }
  7322. showAnnouncements(trs) {
  7323. let first = true
  7324. for (let _i77 = 0, _length77 = trs.length; _i77 < _length77; _i77++) {
  7325. let tr = trs[_i77]
  7326. for (let _i78 = 0, _tr$effects2 = tr.effects, _length78 = _tr$effects2.length; _i78 < _length78; _i78++) {
  7327. let effect = _tr$effects2[_i78]
  7328. if (effect.is(EditorView.announce)) {
  7329. if (first) this.announceDOM.textContent = ''
  7330. first = false
  7331. let div = this.announceDOM.appendChild(document.createElement('div'))
  7332. div.textContent = effect.value
  7333. }
  7334. }
  7335. }
  7336. }
  7337. mountStyles() {
  7338. this.styleModules = this.state.facet(styleModule)
  7339. StyleModule.mount(this.root, this.styleModules.concat(baseTheme$8).reverse())
  7340. }
  7341. readMeasured() {
  7342. if (this.updateState == 2) throw new Error("Reading the editor layout isn't allowed during an update")
  7343. if (this.updateState == 0 && this.measureScheduled > -1) this.measure()
  7344. }
  7345. requestMeasure(request) {
  7346. if (this.measureScheduled < 0) this.measureScheduled = requestAnimationFrame(() => this.measure())
  7347. if (request) {
  7348. if (request.key != null)
  7349. for (let i = 0; i < this.measureRequests.length; i++) {
  7350. if (this.measureRequests[i].key === request.key) {
  7351. this.measureRequests[i] = request
  7352. return
  7353. }
  7354. }
  7355. this.measureRequests.push(request)
  7356. }
  7357. }
  7358. pluginField(field) {
  7359. let result = []
  7360. for (let _i79 = 0, _this$plugins4 = this.plugins, _length79 = _this$plugins4.length; _i79 < _length79; _i79++) {
  7361. let plugin = _this$plugins4[_i79]
  7362. plugin.update(this).takeField(field, result)
  7363. }
  7364. return result
  7365. }
  7366. plugin(plugin) {
  7367. for (let _i80 = 0, _this$plugins5 = this.plugins, _length80 = _this$plugins5.length; _i80 < _length80; _i80++) {
  7368. let inst = _this$plugins5[_i80]
  7369. if (inst.spec == plugin) return inst.update(this).value
  7370. }
  7371. return null
  7372. }
  7373. blockAtHeight(height, docTop) {
  7374. this.readMeasured()
  7375. return this.viewState.blockAtHeight(height, ensureTop(docTop, this.contentDOM))
  7376. }
  7377. visualLineAtHeight(height, docTop) {
  7378. this.readMeasured()
  7379. return this.viewState.lineAtHeight(height, ensureTop(docTop, this.contentDOM))
  7380. }
  7381. viewportLines(f, docTop) {
  7382. let { from, to } = this.viewport
  7383. this.viewState.forEachLine(from, to, f, ensureTop(docTop, this.contentDOM))
  7384. }
  7385. visualLineAt(pos, docTop = 0) {
  7386. return this.viewState.lineAt(pos, docTop)
  7387. }
  7388. get contentHeight() {
  7389. return this.viewState.contentHeight
  7390. }
  7391. moveByChar(start, forward, by) {
  7392. return skipAtoms(this, start, moveByChar(this, start, forward, by))
  7393. }
  7394. moveByGroup(start, forward) {
  7395. return skipAtoms(
  7396. this,
  7397. start,
  7398. moveByChar(this, start, forward, initial => byGroup(this, start.head, initial))
  7399. )
  7400. }
  7401. moveToLineBoundary(start, forward, includeWrap = true) {
  7402. return moveToLineBoundary(this, start, forward, includeWrap)
  7403. }
  7404. moveVertically(start, forward, distance) {
  7405. return skipAtoms(this, start, moveVertically(this, start, forward, distance))
  7406. }
  7407. scrollPosIntoView(pos) {
  7408. this.viewState.scrollTo = EditorSelection.cursor(pos)
  7409. this.requestMeasure()
  7410. }
  7411. domAtPos(pos) {
  7412. return this.docView.domAtPos(pos)
  7413. }
  7414. posAtDOM(node, offset = 0) {
  7415. return this.docView.posFromDOM(node, offset)
  7416. }
  7417. posAtCoords(coords) {
  7418. this.readMeasured()
  7419. return posAtCoords(this, coords)
  7420. }
  7421. coordsAtPos(pos, side = 1) {
  7422. this.readMeasured()
  7423. let rect = this.docView.coordsAt(pos, side)
  7424. if (!rect || rect.left == rect.right) return rect
  7425. let line = this.state.doc.lineAt(pos),
  7426. order = this.bidiSpans(line)
  7427. let span = order[BidiSpan.find(order, pos - line.from, -1, side)]
  7428. return flattenRect(rect, (span.dir == Direction.LTR) == side > 0)
  7429. }
  7430. get defaultCharacterWidth() {
  7431. return this.viewState.heightOracle.charWidth
  7432. }
  7433. get defaultLineHeight() {
  7434. return this.viewState.heightOracle.lineHeight
  7435. }
  7436. get textDirection() {
  7437. return this.viewState.heightOracle.direction
  7438. }
  7439. get lineWrapping() {
  7440. return this.viewState.heightOracle.lineWrapping
  7441. }
  7442. bidiSpans(line) {
  7443. if (line.length > MaxBidiLine) return trivialOrder(line.length)
  7444. let dir = this.textDirection
  7445. for (let _i81 = 0, _this$bidiCache = this.bidiCache, _length81 = _this$bidiCache.length; _i81 < _length81; _i81++) {
  7446. let entry = _this$bidiCache[_i81]
  7447. if (entry.from == line.from && entry.dir == dir) return entry.order
  7448. }
  7449. let order = computeOrder(line.text, this.textDirection)
  7450. this.bidiCache.push(new CachedOrder(line.from, line.to, dir, order))
  7451. return order
  7452. }
  7453. get hasFocus() {
  7454. var _a
  7455. return (
  7456. (document.hasFocus() || (browser.safari && ((_a = this.inputState) === null || _a === void 0 ? void 0 : _a.lastContextMenu) > Date.now() - 3e4)) &&
  7457. this.root.activeElement == this.contentDOM
  7458. )
  7459. }
  7460. focus() {
  7461. this.observer.ignore(() => {
  7462. focusPreventScroll(this.contentDOM)
  7463. this.docView.updateSelection()
  7464. })
  7465. }
  7466. destroy() {
  7467. for (let _i82 = 0, _this$plugins6 = this.plugins, _length82 = _this$plugins6.length; _i82 < _length82; _i82++) {
  7468. let plugin = _this$plugins6[_i82]
  7469. plugin.destroy(this)
  7470. }
  7471. this.inputState.destroy()
  7472. this.dom.remove()
  7473. this.observer.destroy()
  7474. if (this.measureScheduled > -1) cancelAnimationFrame(this.measureScheduled)
  7475. }
  7476. static domEventHandlers(handlers) {
  7477. return ViewPlugin.define(() => ({}), { eventHandlers: handlers })
  7478. }
  7479. static theme(spec, options) {
  7480. let prefix = StyleModule.newName()
  7481. let result = [theme.of(prefix), styleModule.of(buildTheme(`.${prefix}`, spec))]
  7482. if (options && options.dark) result.push(darkTheme.of(true))
  7483. return result
  7484. }
  7485. static baseTheme(spec) {
  7486. return Prec.fallback(styleModule.of(buildTheme('.' + baseThemeID, spec, lightDarkIDs)))
  7487. }
  7488. }
  7489. EditorView.styleModule = styleModule
  7490. EditorView.inputHandler = inputHandler
  7491. EditorView.exceptionSink = exceptionSink
  7492. EditorView.updateListener = updateListener
  7493. EditorView.editable = editable
  7494. EditorView.mouseSelectionStyle = mouseSelectionStyle
  7495. EditorView.dragMovesSelection = dragMovesSelection$1
  7496. EditorView.clickAddsSelectionRange = clickAddsSelectionRange
  7497. EditorView.decorations = decorations
  7498. EditorView.contentAttributes = contentAttributes
  7499. EditorView.editorAttributes = editorAttributes
  7500. EditorView.lineWrapping = EditorView.contentAttributes.of({ class: 'cm-lineWrapping' })
  7501. EditorView.announce = StateEffect.define()
  7502. const MaxBidiLine = 4096
  7503. function ensureTop(given, dom) {
  7504. return given == null ? dom.getBoundingClientRect().top : given
  7505. }
  7506. let resizeDebounce = -1
  7507. function ensureGlobalHandler() {
  7508. window.addEventListener('resize', () => {
  7509. if (resizeDebounce == -1) resizeDebounce = setTimeout(handleResize, 50)
  7510. })
  7511. }
  7512. function handleResize() {
  7513. resizeDebounce = -1
  7514. let found = document.querySelectorAll('.cm-content')
  7515. for (let i = 0; i < found.length; i++) {
  7516. let docView = ContentView.get(found[i])
  7517. if (docView) docView.editorView.requestMeasure()
  7518. }
  7519. }
  7520. const BadMeasure = {}
  7521. class CachedOrder {
  7522. constructor(from, to, dir, order) {
  7523. this.from = from
  7524. this.to = to
  7525. this.dir = dir
  7526. this.order = order
  7527. }
  7528. static update(cache, changes) {
  7529. if (changes.empty) return cache
  7530. let result = [],
  7531. lastDir = cache.length ? cache[cache.length - 1].dir : Direction.LTR
  7532. for (let i = Math.max(0, cache.length - 10); i < cache.length; i++) {
  7533. let entry = cache[i]
  7534. if (entry.dir == lastDir && !changes.touchesRange(entry.from, entry.to))
  7535. result.push(new CachedOrder(changes.mapPos(entry.from, 1), changes.mapPos(entry.to, -1), entry.dir, entry.order))
  7536. }
  7537. return result
  7538. }
  7539. }
  7540. const currentPlatform =
  7541. typeof navigator == 'undefined' ? 'key' : /Mac/.test(navigator.platform) ? 'mac' : /Win/.test(navigator.platform) ? 'win' : /Linux|X11/.test(navigator.platform) ? 'linux' : 'key'
  7542. function normalizeKeyName(name, platform) {
  7543. const parts = name.split(/-(?!$)/)
  7544. let result = parts[parts.length - 1]
  7545. if (result == 'Space') result = ' '
  7546. let alt, ctrl, shift, meta
  7547. for (let i = 0; i < parts.length - 1; ++i) {
  7548. const mod = parts[i]
  7549. if (/^(cmd|meta|m)$/i.test(mod)) meta = true
  7550. else if (/^a(lt)?$/i.test(mod)) alt = true
  7551. else if (/^(c|ctrl|control)$/i.test(mod)) ctrl = true
  7552. else if (/^s(hift)?$/i.test(mod)) shift = true
  7553. else if (/^mod$/i.test(mod)) {
  7554. if (platform == 'mac') meta = true
  7555. else ctrl = true
  7556. } else throw new Error('Unrecognized modifier name: ' + mod)
  7557. }
  7558. if (alt) result = 'Alt-' + result
  7559. if (ctrl) result = 'Ctrl-' + result
  7560. if (meta) result = 'Meta-' + result
  7561. if (shift) result = 'Shift-' + result
  7562. return result
  7563. }
  7564. function modifiers(name, event, shift) {
  7565. if (event.altKey) name = 'Alt-' + name
  7566. if (event.ctrlKey) name = 'Ctrl-' + name
  7567. if (event.metaKey) name = 'Meta-' + name
  7568. if (shift !== false && event.shiftKey) name = 'Shift-' + name
  7569. return name
  7570. }
  7571. const handleKeyEvents = EditorView.domEventHandlers({
  7572. keydown(event, view) {
  7573. return runHandlers(getKeymap(view.state), event, view, 'editor')
  7574. }
  7575. })
  7576. const keymap = Facet.define({ enables: handleKeyEvents })
  7577. const Keymaps = new WeakMap()
  7578. function getKeymap(state) {
  7579. let bindings = state.facet(keymap)
  7580. let map = Keymaps.get(bindings)
  7581. if (!map) Keymaps.set(bindings, (map = buildKeymap(bindings.reduce((a, b) => a.concat(b), []))))
  7582. return map
  7583. }
  7584. function runScopeHandlers(view, event, scope) {
  7585. return runHandlers(getKeymap(view.state), event, view, scope)
  7586. }
  7587. let storedPrefix = null
  7588. const PrefixTimeout = 4000
  7589. function buildKeymap(bindings, platform = currentPlatform) {
  7590. let bound = Object.create(null)
  7591. let isPrefix = Object.create(null)
  7592. let checkPrefix = (name, is) => {
  7593. let current = isPrefix[name]
  7594. if (current == null) isPrefix[name] = is
  7595. else if (current != is) throw new Error('Key binding ' + name + ' is used both as a regular binding and as a multi-stroke prefix')
  7596. }
  7597. let add = (scope, key, command, preventDefault) => {
  7598. let scopeObj = bound[scope] || (bound[scope] = Object.create(null))
  7599. let parts = key.split(/ (?!$)/).map(k => normalizeKeyName(k, platform))
  7600. for (let i = 1; i < parts.length; i++) {
  7601. let prefix = parts.slice(0, i).join(' ')
  7602. checkPrefix(prefix, true)
  7603. if (!scopeObj[prefix])
  7604. scopeObj[prefix] = {
  7605. preventDefault: true,
  7606. commands: [
  7607. view => {
  7608. let ourObj = (storedPrefix = { view, prefix, scope })
  7609. setTimeout(() => {
  7610. if (storedPrefix == ourObj) storedPrefix = null
  7611. }, PrefixTimeout)
  7612. return true
  7613. }
  7614. ]
  7615. }
  7616. }
  7617. let full = parts.join(' ')
  7618. checkPrefix(full, false)
  7619. let binding = scopeObj[full] || (scopeObj[full] = { preventDefault: false, commands: [] })
  7620. binding.commands.push(command)
  7621. if (preventDefault) binding.preventDefault = true
  7622. }
  7623. for (let _i83 = 0, _length83 = bindings.length; _i83 < _length83; _i83++) {
  7624. let b = bindings[_i83]
  7625. let name = b[platform] || b.key
  7626. if (!name) continue
  7627. for (let _i84 = 0, _ref4 = b.scope ? b.scope.split(' ') : ['editor'], _length84 = _ref4.length; _i84 < _length84; _i84++) {
  7628. let scope = _ref4[_i84]
  7629. add(scope, name, b.run, b.preventDefault)
  7630. if (b.shift) add(scope, 'Shift-' + name, b.shift, b.preventDefault)
  7631. }
  7632. }
  7633. return bound
  7634. }
  7635. function runHandlers(map, event, view, scope) {
  7636. let name = keyName(event),
  7637. isChar = name.length == 1 && name != ' '
  7638. let prefix = '',
  7639. fallthrough = false
  7640. if (storedPrefix && storedPrefix.view == view && storedPrefix.scope == scope) {
  7641. prefix = storedPrefix.prefix + ' '
  7642. if ((fallthrough = modifierCodes.indexOf(event.keyCode) < 0)) storedPrefix = null
  7643. }
  7644. let runFor = binding => {
  7645. if (binding) {
  7646. for (let _i85 = 0, _binding$commands = binding.commands, _length85 = _binding$commands.length; _i85 < _length85; _i85++) {
  7647. let cmd = _binding$commands[_i85]
  7648. if (cmd(view)) return true
  7649. }
  7650. if (binding.preventDefault) fallthrough = true
  7651. }
  7652. return false
  7653. }
  7654. let scopeObj = map[scope],
  7655. baseName
  7656. if (scopeObj) {
  7657. if (runFor(scopeObj[prefix + modifiers(name, event, !isChar)])) return true
  7658. if (isChar && (event.shiftKey || event.altKey || event.metaKey) && (baseName = base[event.keyCode]) && baseName != name) {
  7659. if (runFor(scopeObj[prefix + modifiers(baseName, event, true)])) return true
  7660. } else if (isChar && event.shiftKey) {
  7661. if (runFor(scopeObj[prefix + modifiers(name, event, true)])) return true
  7662. }
  7663. }
  7664. return fallthrough
  7665. }
  7666. const CanHidePrimary = !browser.ios
  7667. const selectionConfig = Facet.define({
  7668. combine(configs) {
  7669. return combineConfig(configs, { cursorBlinkRate: 1200, drawRangeCursor: true }, { cursorBlinkRate: (a, b) => Math.min(a, b), drawRangeCursor: (a, b) => a || b })
  7670. }
  7671. })
  7672. function drawSelection(config = {}) {
  7673. return [selectionConfig.of(config), drawSelectionPlugin, hideNativeSelection]
  7674. }
  7675. class Piece {
  7676. constructor(left, top, width, height, className) {
  7677. this.left = left
  7678. this.top = top
  7679. this.width = width
  7680. this.height = height
  7681. this.className = className
  7682. }
  7683. draw() {
  7684. let elt = document.createElement('div')
  7685. elt.className = this.className
  7686. this.adjust(elt)
  7687. return elt
  7688. }
  7689. adjust(elt) {
  7690. elt.style.left = this.left + 'px'
  7691. elt.style.top = this.top + 'px'
  7692. if (this.width >= 0) elt.style.width = this.width + 'px'
  7693. elt.style.height = this.height + 'px'
  7694. }
  7695. eq(p) {
  7696. return this.left == p.left && this.top == p.top && this.width == p.width && this.height == p.height && this.className == p.className
  7697. }
  7698. }
  7699. const drawSelectionPlugin = ViewPlugin.fromClass(
  7700. class {
  7701. constructor(view) {
  7702. this.view = view
  7703. this.rangePieces = []
  7704. this.cursors = []
  7705. this.measureReq = { read: this.readPos.bind(this), write: this.drawSel.bind(this) }
  7706. this.selectionLayer = view.scrollDOM.appendChild(document.createElement('div'))
  7707. this.selectionLayer.className = 'cm-selectionLayer'
  7708. this.selectionLayer.setAttribute('aria-hidden', 'true')
  7709. this.cursorLayer = view.scrollDOM.appendChild(document.createElement('div'))
  7710. this.cursorLayer.className = 'cm-cursorLayer'
  7711. this.cursorLayer.setAttribute('aria-hidden', 'true')
  7712. view.requestMeasure(this.measureReq)
  7713. this.setBlinkRate()
  7714. }
  7715. setBlinkRate() {
  7716. this.cursorLayer.style.animationDuration = this.view.state.facet(selectionConfig).cursorBlinkRate + 'ms'
  7717. }
  7718. update(update) {
  7719. let confChanged = update.startState.facet(selectionConfig) != update.state.facet(selectionConfig)
  7720. if (confChanged || update.selectionSet || update.geometryChanged || update.viewportChanged) this.view.requestMeasure(this.measureReq)
  7721. if (update.transactions.some(tr => tr.scrollIntoView)) this.cursorLayer.style.animationName = this.cursorLayer.style.animationName == 'cm-blink' ? 'cm-blink2' : 'cm-blink'
  7722. if (confChanged) this.setBlinkRate()
  7723. }
  7724. readPos() {
  7725. let { state } = this.view,
  7726. conf = state.facet(selectionConfig)
  7727. let rangePieces = state.selection.ranges.map(r => (r.empty ? [] : measureRange(this.view, r))).reduce((a, b) => a.concat(b))
  7728. let cursors = []
  7729. for (let _i86 = 0, _state$selection$rang3 = state.selection.ranges, _length86 = _state$selection$rang3.length; _i86 < _length86; _i86++) {
  7730. let r = _state$selection$rang3[_i86]
  7731. let prim = r == state.selection.main
  7732. if (r.empty ? !prim || CanHidePrimary : conf.drawRangeCursor) {
  7733. let piece = measureCursor(this.view, r, prim)
  7734. if (piece) cursors.push(piece)
  7735. }
  7736. }
  7737. return { rangePieces, cursors }
  7738. }
  7739. drawSel({ rangePieces, cursors }) {
  7740. if (rangePieces.length != this.rangePieces.length || rangePieces.some((p, i) => !p.eq(this.rangePieces[i]))) {
  7741. this.selectionLayer.textContent = ''
  7742. for (let _i87 = 0, _length87 = rangePieces.length; _i87 < _length87; _i87++) {
  7743. let p = rangePieces[_i87]
  7744. this.selectionLayer.appendChild(p.draw())
  7745. }
  7746. this.rangePieces = rangePieces
  7747. }
  7748. if (cursors.length != this.cursors.length || cursors.some((c, i) => !c.eq(this.cursors[i]))) {
  7749. let oldCursors = this.cursorLayer.children
  7750. if (oldCursors.length !== cursors.length) {
  7751. this.cursorLayer.textContent = ''
  7752. for (let _i88 = 0, _length88 = cursors.length; _i88 < _length88; _i88++) {
  7753. const c = cursors[_i88]
  7754. this.cursorLayer.appendChild(c.draw())
  7755. }
  7756. } else {
  7757. cursors.forEach((c, idx) => c.adjust(oldCursors[idx]))
  7758. }
  7759. this.cursors = cursors
  7760. }
  7761. }
  7762. destroy() {
  7763. this.selectionLayer.remove()
  7764. this.cursorLayer.remove()
  7765. }
  7766. }
  7767. )
  7768. const themeSpec = { '.cm-line': { '& ::selection': { backgroundColor: 'transparent !important' }, '&::selection': { backgroundColor: 'transparent !important' } } }
  7769. if (CanHidePrimary) themeSpec['.cm-line'].caretColor = 'transparent !important'
  7770. const hideNativeSelection = Prec.override(EditorView.theme(themeSpec))
  7771. function getBase(view) {
  7772. let rect = view.scrollDOM.getBoundingClientRect()
  7773. let left = view.textDirection == Direction.LTR ? rect.left : rect.right - view.scrollDOM.clientWidth
  7774. return { left: left - view.scrollDOM.scrollLeft, top: rect.top - view.scrollDOM.scrollTop }
  7775. }
  7776. function wrappedLine(view, pos, inside) {
  7777. let range = EditorSelection.cursor(pos)
  7778. return { from: Math.max(inside.from, view.moveToLineBoundary(range, false, true).from), to: Math.min(inside.to, view.moveToLineBoundary(range, true, true).from) }
  7779. }
  7780. function measureRange(view, range) {
  7781. if (range.to <= view.viewport.from || range.from >= view.viewport.to) return []
  7782. let from = Math.max(range.from, view.viewport.from),
  7783. to = Math.min(range.to, view.viewport.to)
  7784. let ltr = view.textDirection == Direction.LTR
  7785. let content = view.contentDOM,
  7786. contentRect = content.getBoundingClientRect(),
  7787. base = getBase(view)
  7788. let lineStyle = window.getComputedStyle(content.firstChild)
  7789. let leftSide = contentRect.left + parseInt(lineStyle.paddingLeft)
  7790. let rightSide = contentRect.right - parseInt(lineStyle.paddingRight)
  7791. let visualStart = view.visualLineAt(from)
  7792. let visualEnd = view.visualLineAt(to)
  7793. if (view.lineWrapping) {
  7794. visualStart = wrappedLine(view, from, visualStart)
  7795. visualEnd = wrappedLine(view, to, visualEnd)
  7796. }
  7797. if (visualStart.from == visualEnd.from) {
  7798. return pieces(drawForLine(range.from, range.to, visualStart))
  7799. } else {
  7800. let top = drawForLine(range.from, null, visualStart)
  7801. let bottom = drawForLine(null, range.to, visualEnd)
  7802. let between = []
  7803. if (visualStart.to < visualEnd.from - 1) between.push(piece(leftSide, top.bottom, rightSide, bottom.top))
  7804. else if (top.bottom < bottom.top && bottom.top - top.bottom < 4) top.bottom = bottom.top = (top.bottom + bottom.top) / 2
  7805. return pieces(top)
  7806. .concat(between)
  7807. .concat(pieces(bottom))
  7808. }
  7809. function piece(left, top, right, bottom) {
  7810. return new Piece(left - base.left, top - base.top, right - left, bottom - top, 'cm-selectionBackground')
  7811. }
  7812. function pieces({ top, bottom, horizontal }) {
  7813. let pieces = []
  7814. for (let i = 0; i < horizontal.length; i += 2) pieces.push(piece(horizontal[i], top, horizontal[i + 1], bottom))
  7815. return pieces
  7816. }
  7817. function drawForLine(from, to, line) {
  7818. let top = 1e9,
  7819. bottom = -1e9,
  7820. horizontal = []
  7821. function addSpan(from, fromOpen, to, toOpen, dir) {
  7822. let fromCoords = view.coordsAtPos(from, from == line.to ? -1 : 1)
  7823. let toCoords = view.coordsAtPos(to, to == line.from ? 1 : -1)
  7824. top = Math.min(fromCoords.top, toCoords.top, top)
  7825. bottom = Math.max(fromCoords.bottom, toCoords.bottom, bottom)
  7826. if (dir == Direction.LTR) horizontal.push(ltr && fromOpen ? leftSide : fromCoords.left, ltr && toOpen ? rightSide : toCoords.right)
  7827. else horizontal.push(!ltr && toOpen ? leftSide : toCoords.left, !ltr && fromOpen ? rightSide : fromCoords.right)
  7828. }
  7829. let start = from !== null && from !== void 0 ? from : line.from,
  7830. end = to !== null && to !== void 0 ? to : line.to
  7831. for (let _i89 = 0, _view$visibleRanges = view.visibleRanges, _length89 = _view$visibleRanges.length; _i89 < _length89; _i89++) {
  7832. let r = _view$visibleRanges[_i89]
  7833. if (r.to > start && r.from < end) {
  7834. for (let pos = Math.max(r.from, start), endPos = Math.min(r.to, end); ; ) {
  7835. let docLine = view.state.doc.lineAt(pos)
  7836. for (let _i90 = 0, _view$bidiSpans = view.bidiSpans(docLine), _length90 = _view$bidiSpans.length; _i90 < _length90; _i90++) {
  7837. let span = _view$bidiSpans[_i90]
  7838. let spanFrom = span.from + docLine.from,
  7839. spanTo = span.to + docLine.from
  7840. if (spanFrom >= endPos) break
  7841. if (spanTo > pos) addSpan(Math.max(spanFrom, pos), from == null && spanFrom <= start, Math.min(spanTo, endPos), to == null && spanTo >= end, span.dir)
  7842. }
  7843. pos = docLine.to + 1
  7844. if (pos >= endPos) break
  7845. }
  7846. }
  7847. }
  7848. if (horizontal.length == 0) addSpan(start, from == null, end, to == null, view.textDirection)
  7849. return { top, bottom, horizontal }
  7850. }
  7851. }
  7852. function measureCursor(view, cursor, primary) {
  7853. let pos = view.coordsAtPos(cursor.head, cursor.assoc || 1)
  7854. if (!pos) return null
  7855. let base = getBase(view)
  7856. return new Piece(pos.left - base.left, pos.top - base.top, -1, pos.bottom - pos.top, primary ? 'cm-cursor cm-cursor-primary' : 'cm-cursor cm-cursor-secondary')
  7857. }
  7858. function iterMatches(doc, re, from, to, f) {
  7859. re.lastIndex = 0
  7860. for (let cursor = doc.iterRange(from, to), pos = from, m; !cursor.next().done; pos += cursor.value.length) {
  7861. if (!cursor.lineBreak) while ((m = re.exec(cursor.value))) f(pos + m.index, pos + m.index + m[0].length, m)
  7862. }
  7863. }
  7864. class MatchDecorator {
  7865. constructor(config) {
  7866. let { regexp, decoration, boundary } = config
  7867. if (!regexp.global) throw new RangeError("The regular expression given to MatchDecorator should have its 'g' flag set")
  7868. this.regexp = regexp
  7869. this.getDeco = typeof decoration == 'function' ? decoration : () => decoration
  7870. this.boundary = boundary
  7871. }
  7872. createDeco(view) {
  7873. let build = new RangeSetBuilder()
  7874. for (let _i91 = 0, _view$visibleRanges2 = view.visibleRanges, _length91 = _view$visibleRanges2.length; _i91 < _length91; _i91++) {
  7875. let { from, to } = _view$visibleRanges2[_i91]
  7876. iterMatches(view.state.doc, this.regexp, from, to, (a, b, m) => build.add(a, b, this.getDeco(m, view, a)))
  7877. }
  7878. return build.finish()
  7879. }
  7880. updateDeco(update, deco) {
  7881. let changeFrom = 1e9,
  7882. changeTo = -1
  7883. if (update.docChanged)
  7884. update.changes.iterChanges((_f, _t, from, to) => {
  7885. if (to > update.view.viewport.from && from < update.view.viewport.to) {
  7886. changeFrom = Math.min(from, changeFrom)
  7887. changeTo = Math.max(to, changeTo)
  7888. }
  7889. })
  7890. if (update.viewportChanged || changeTo - changeFrom > 1000) return this.createDeco(update.view)
  7891. if (changeTo > -1) return this.updateRange(update.view, deco.map(update.changes), changeFrom, changeTo)
  7892. return deco
  7893. }
  7894. updateRange(view, deco, updateFrom, updateTo) {
  7895. for (let _i92 = 0, _view$visibleRanges3 = view.visibleRanges, _length92 = _view$visibleRanges3.length; _i92 < _length92; _i92++) {
  7896. let r = _view$visibleRanges3[_i92]
  7897. let from = Math.max(r.from, updateFrom),
  7898. to = Math.min(r.to, updateTo)
  7899. if (to > from) {
  7900. let fromLine = view.state.doc.lineAt(from),
  7901. toLine = fromLine.to < to ? view.state.doc.lineAt(to) : fromLine
  7902. let start = Math.max(r.from, fromLine.from),
  7903. end = Math.min(r.to, toLine.to)
  7904. if (this.boundary) {
  7905. for (; from > fromLine.from; from--)
  7906. if (this.boundary.test(fromLine.text[from - 1 - fromLine.from])) {
  7907. start = from
  7908. break
  7909. }
  7910. for (; to < toLine.to; to++)
  7911. if (this.boundary.test(toLine.text[to - toLine.from])) {
  7912. end = to
  7913. break
  7914. }
  7915. }
  7916. let ranges = [],
  7917. m
  7918. if (fromLine == toLine) {
  7919. this.regexp.lastIndex = start - fromLine.from
  7920. while ((m = this.regexp.exec(fromLine.text)) && m.index < end - fromLine.from) {
  7921. let pos = m.index + fromLine.from
  7922. ranges.push(this.getDeco(m, view, pos).range(pos, pos + m[0].length))
  7923. }
  7924. } else {
  7925. iterMatches(view.state.doc, this.regexp, start, end, (from, to, m) => ranges.push(this.getDeco(m, view, from).range(from, to)))
  7926. }
  7927. deco = deco.update({ filterFrom: start, filterTo: end, filter: () => false, add: ranges })
  7928. }
  7929. }
  7930. return deco
  7931. }
  7932. }
  7933. const UnicodeRegexpSupport = /x/.unicode != null ? 'gu' : 'g'
  7934. const Specials = new RegExp('[\u0000-\u0008\u000a-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]', UnicodeRegexpSupport)
  7935. const Names = {
  7936. 0: 'null',
  7937. 7: 'bell',
  7938. 8: 'backspace',
  7939. 10: 'newline',
  7940. 11: 'vertical tab',
  7941. 13: 'carriage return',
  7942. 27: 'escape',
  7943. 8203: 'zero width space',
  7944. 8204: 'zero width non-joiner',
  7945. 8205: 'zero width joiner',
  7946. 8206: 'left-to-right mark',
  7947. 8207: 'right-to-left mark',
  7948. 8232: 'line separator',
  7949. 8233: 'paragraph separator',
  7950. 65279: 'zero width no-break space',
  7951. 65532: 'object replacement'
  7952. }
  7953. let _supportsTabSize = null
  7954. function supportsTabSize() {
  7955. var _a
  7956. if (_supportsTabSize == null && typeof document != 'undefined' && document.body) {
  7957. let styles = document.body.style
  7958. _supportsTabSize = ((_a = styles.tabSize) !== null && _a !== void 0 ? _a : styles.MozTabSize) != null
  7959. }
  7960. return _supportsTabSize || false
  7961. }
  7962. const specialCharConfig = Facet.define({
  7963. combine(configs) {
  7964. let config = combineConfig(configs, { render: null, specialChars: Specials, addSpecialChars: null })
  7965. if ((config.replaceTabs = !supportsTabSize())) config.specialChars = new RegExp('\t|' + config.specialChars.source, UnicodeRegexpSupport)
  7966. if (config.addSpecialChars) config.specialChars = new RegExp(config.specialChars.source + '|' + config.addSpecialChars.source, UnicodeRegexpSupport)
  7967. return config
  7968. }
  7969. })
  7970. function highlightSpecialChars(config = {}) {
  7971. return [specialCharConfig.of(config), specialCharPlugin()]
  7972. }
  7973. let _plugin = null
  7974. function specialCharPlugin() {
  7975. return (
  7976. _plugin ||
  7977. (_plugin = ViewPlugin.fromClass(
  7978. class {
  7979. constructor(view) {
  7980. this.view = view
  7981. this.decorations = Decoration.none
  7982. this.decorationCache = Object.create(null)
  7983. this.decorator = this.makeDecorator(view.state.facet(specialCharConfig))
  7984. this.decorations = this.decorator.createDeco(view)
  7985. }
  7986. makeDecorator(conf) {
  7987. return new MatchDecorator({
  7988. regexp: conf.specialChars,
  7989. decoration: (m, view, pos) => {
  7990. let { doc } = view.state
  7991. let code = codePointAt(m[0], 0)
  7992. if (code == 9) {
  7993. let line = doc.lineAt(pos)
  7994. let size = view.state.tabSize,
  7995. col = countColumn(doc.sliceString(line.from, pos), 0, size)
  7996. return Decoration.replace({ widget: new TabWidget((size - (col % size)) * this.view.defaultCharacterWidth) })
  7997. }
  7998. return this.decorationCache[code] || (this.decorationCache[code] = Decoration.replace({ widget: new SpecialCharWidget(conf, code) }))
  7999. },
  8000. boundary: conf.replaceTabs ? undefined : /[^]/
  8001. })
  8002. }
  8003. update(update) {
  8004. let conf = update.state.facet(specialCharConfig)
  8005. if (update.startState.facet(specialCharConfig) != conf) {
  8006. this.decorator = this.makeDecorator(conf)
  8007. this.decorations = this.decorator.createDeco(update.view)
  8008. } else {
  8009. this.decorations = this.decorator.updateDeco(update, this.decorations)
  8010. }
  8011. }
  8012. },
  8013. { decorations: v => v.decorations }
  8014. ))
  8015. )
  8016. }
  8017. const DefaultPlaceholder = '\u2022'
  8018. function placeholder$1(code) {
  8019. if (code >= 32) return DefaultPlaceholder
  8020. if (code == 10) return '\u2424'
  8021. return String.fromCharCode(9216 + code)
  8022. }
  8023. class SpecialCharWidget extends WidgetType {
  8024. constructor(options, code) {
  8025. super()
  8026. this.options = options
  8027. this.code = code
  8028. }
  8029. eq(other) {
  8030. return other.code == this.code
  8031. }
  8032. toDOM(view) {
  8033. let ph = placeholder$1(this.code)
  8034. let desc = view.state.phrase('Control character') + ' ' + (Names[this.code] || '0x' + this.code.toString(16))
  8035. let custom = this.options.render && this.options.render(this.code, desc, ph)
  8036. if (custom) return custom
  8037. let span = document.createElement('span')
  8038. span.textContent = ph
  8039. span.title = desc
  8040. span.setAttribute('aria-label', desc)
  8041. span.className = 'cm-specialChar'
  8042. return span
  8043. }
  8044. ignoreEvent() {
  8045. return false
  8046. }
  8047. }
  8048. class TabWidget extends WidgetType {
  8049. constructor(width) {
  8050. super()
  8051. this.width = width
  8052. }
  8053. eq(other) {
  8054. return other.width == this.width
  8055. }
  8056. toDOM() {
  8057. let span = document.createElement('span')
  8058. span.textContent = '\t'
  8059. span.className = 'cm-tab'
  8060. span.style.width = this.width + 'px'
  8061. return span
  8062. }
  8063. ignoreEvent() {
  8064. return false
  8065. }
  8066. }
  8067. function highlightActiveLine() {
  8068. return activeLineHighlighter
  8069. }
  8070. const lineDeco = Decoration.line({ attributes: { class: 'cm-activeLine' } })
  8071. const activeLineHighlighter = ViewPlugin.fromClass(
  8072. class {
  8073. constructor(view) {
  8074. this.decorations = this.getDeco(view)
  8075. }
  8076. update(update) {
  8077. if (update.docChanged || update.selectionSet) this.decorations = this.getDeco(update.view)
  8078. }
  8079. getDeco(view) {
  8080. let lastLineStart = -1,
  8081. deco = []
  8082. for (let _i93 = 0, _view$state$selection = view.state.selection.ranges, _length93 = _view$state$selection.length; _i93 < _length93; _i93++) {
  8083. let r = _view$state$selection[_i93]
  8084. if (!r.empty) return Decoration.none
  8085. let line = view.visualLineAt(r.head)
  8086. if (line.from > lastLineStart) {
  8087. deco.push(lineDeco.range(line.from))
  8088. lastLineStart = line.from
  8089. }
  8090. }
  8091. return Decoration.set(deco)
  8092. }
  8093. },
  8094. { decorations: v => v.decorations }
  8095. )
  8096. class Placeholder extends WidgetType {
  8097. constructor(content) {
  8098. super()
  8099. this.content = content
  8100. }
  8101. toDOM() {
  8102. let wrap = document.createElement('span')
  8103. wrap.className = 'cm-placeholder'
  8104. wrap.style.pointerEvents = 'none'
  8105. wrap.appendChild(typeof this.content == 'string' ? document.createTextNode(this.content) : this.content)
  8106. if (typeof this.content == 'string') wrap.setAttribute('aria-label', 'placeholder ' + this.content)
  8107. else wrap.setAttribute('aria-hidden', 'true')
  8108. return wrap
  8109. }
  8110. ignoreEvent() {
  8111. return false
  8112. }
  8113. }
  8114. function placeholder(content) {
  8115. return ViewPlugin.fromClass(
  8116. class {
  8117. constructor(view) {
  8118. this.view = view
  8119. this.placeholder = Decoration.set([Decoration.widget({ widget: new Placeholder(content), side: 1 }).range(0)])
  8120. }
  8121. get decorations() {
  8122. return this.view.state.doc.length ? Decoration.none : this.placeholder
  8123. }
  8124. },
  8125. { decorations: v => v.decorations }
  8126. )
  8127. }
  8128. const __test = { HeightMap, HeightOracle, MeasuredHeights, QueryType, ChangedRange, computeOrder, moveVisually }
  8129. var _m3 = Object.freeze({
  8130. __proto__: null,
  8131. BidiSpan: BidiSpan,
  8132. BlockInfo: BlockInfo,
  8133. get BlockType() {
  8134. return BlockType
  8135. },
  8136. Decoration: Decoration,
  8137. get Direction() {
  8138. return Direction
  8139. },
  8140. EditorView: EditorView,
  8141. MatchDecorator: MatchDecorator,
  8142. PluginField: PluginField,
  8143. PluginFieldProvider: PluginFieldProvider,
  8144. ViewPlugin: ViewPlugin,
  8145. ViewUpdate: ViewUpdate,
  8146. WidgetType: WidgetType,
  8147. __test: __test,
  8148. drawSelection: drawSelection,
  8149. highlightActiveLine: highlightActiveLine,
  8150. highlightSpecialChars: highlightSpecialChars,
  8151. keymap: keymap,
  8152. logException: logException,
  8153. placeholder: placeholder,
  8154. runScopeHandlers: runScopeHandlers,
  8155. Range: Range
  8156. })
  8157. const DefaultBufferLength = 1024
  8158. let nextPropID = 0
  8159. const CachedNode = new WeakMap()
  8160. class NodeProp {
  8161. constructor({ deserialize } = {}) {
  8162. this.id = nextPropID++
  8163. this.deserialize =
  8164. deserialize ||
  8165. (() => {
  8166. throw new Error("This node type doesn't define a deserialize function")
  8167. })
  8168. }
  8169. static string() {
  8170. return new NodeProp({ deserialize: str => str })
  8171. }
  8172. static number() {
  8173. return new NodeProp({ deserialize: Number })
  8174. }
  8175. static flag() {
  8176. return new NodeProp({ deserialize: () => true })
  8177. }
  8178. set(propObj, value) {
  8179. propObj[this.id] = value
  8180. return propObj
  8181. }
  8182. add(match) {
  8183. if (typeof match != 'function') match = NodeType.match(match)
  8184. return type => {
  8185. let result = match(type)
  8186. return result === undefined ? null : [this, result]
  8187. }
  8188. }
  8189. }
  8190. NodeProp.closedBy = new NodeProp({ deserialize: str => str.split(' ') })
  8191. NodeProp.openedBy = new NodeProp({ deserialize: str => str.split(' ') })
  8192. NodeProp.group = new NodeProp({ deserialize: str => str.split(' ') })
  8193. const noProps = Object.create(null)
  8194. class NodeType {
  8195. constructor(name, props, id, flags = 0) {
  8196. this.name = name
  8197. this.props = props
  8198. this.id = id
  8199. this.flags = flags
  8200. }
  8201. static define(spec) {
  8202. let props = spec.props && spec.props.length ? Object.create(null) : noProps
  8203. let flags = (spec.top ? 1 : 0) | (spec.skipped ? 2 : 0) | (spec.error ? 4 : 0) | (spec.name == null ? 8 : 0)
  8204. let type = new NodeType(spec.name || '', props, spec.id, flags)
  8205. if (spec.props)
  8206. for (let _i94 = 0, _spec$props = spec.props, _length94 = _spec$props.length; _i94 < _length94; _i94++) {
  8207. let src = _spec$props[_i94]
  8208. if (!Array.isArray(src)) src = src(type)
  8209. if (src) src[0].set(props, src[1])
  8210. }
  8211. return type
  8212. }
  8213. prop(prop) {
  8214. return this.props[prop.id]
  8215. }
  8216. get isTop() {
  8217. return (this.flags & 1) > 0
  8218. }
  8219. get isSkipped() {
  8220. return (this.flags & 2) > 0
  8221. }
  8222. get isError() {
  8223. return (this.flags & 4) > 0
  8224. }
  8225. get isAnonymous() {
  8226. return (this.flags & 8) > 0
  8227. }
  8228. is(name) {
  8229. if (typeof name == 'string') {
  8230. if (this.name == name) return true
  8231. let group = this.prop(NodeProp.group)
  8232. return group ? group.indexOf(name) > -1 : false
  8233. }
  8234. return this.id == name
  8235. }
  8236. static match(map) {
  8237. let direct = Object.create(null)
  8238. for (let prop in map)
  8239. for (let _i95 = 0, _prop$split = prop.split(' '), _length95 = _prop$split.length; _i95 < _length95; _i95++) {
  8240. let name = _prop$split[_i95]
  8241. direct[name] = map[prop]
  8242. }
  8243. return node => {
  8244. for (let groups = node.prop(NodeProp.group), i = -1; i < (groups ? groups.length : 0); i++) {
  8245. let found = direct[i < 0 ? node.name : groups[i]]
  8246. if (found) return found
  8247. }
  8248. }
  8249. }
  8250. }
  8251. NodeType.none = new NodeType('', Object.create(null), 0, 8)
  8252. class NodeSet {
  8253. constructor(types) {
  8254. this.types = types
  8255. for (let i = 0; i < types.length; i++) if (types[i].id != i) throw new RangeError('Node type ids should correspond to array positions when creating a node set')
  8256. }
  8257. extend(...props) {
  8258. let newTypes = []
  8259. for (let _i96 = 0, _this$types = this.types, _length96 = _this$types.length; _i96 < _length96; _i96++) {
  8260. let type = _this$types[_i96]
  8261. let newProps = null
  8262. for (let _i97 = 0, _length97 = props.length; _i97 < _length97; _i97++) {
  8263. let source = props[_i97]
  8264. let add = source(type)
  8265. if (add) {
  8266. if (!newProps) newProps = Object.assign({}, type.props)
  8267. add[0].set(newProps, add[1])
  8268. }
  8269. }
  8270. newTypes.push(newProps ? new NodeType(type.name, newProps, type.id, type.flags) : type)
  8271. }
  8272. return new NodeSet(newTypes)
  8273. }
  8274. }
  8275. class Tree {
  8276. constructor(type, children, positions, length) {
  8277. this.type = type
  8278. this.children = children
  8279. this.positions = positions
  8280. this.length = length
  8281. }
  8282. toString() {
  8283. let children = this.children.map(c => c.toString()).join()
  8284. return !this.type.name ? children : (/\W/.test(this.type.name) && !this.type.isError ? JSON.stringify(this.type.name) : this.type.name) + (children.length ? '(' + children + ')' : '')
  8285. }
  8286. cursor(pos, side = 0) {
  8287. let scope = (pos != null && CachedNode.get(this)) || this.topNode
  8288. let cursor = new TreeCursor(scope)
  8289. if (pos != null) {
  8290. cursor.moveTo(pos, side)
  8291. CachedNode.set(this, cursor._tree)
  8292. }
  8293. return cursor
  8294. }
  8295. fullCursor() {
  8296. return new TreeCursor(this.topNode, true)
  8297. }
  8298. get topNode() {
  8299. return new TreeNode(this, 0, 0, null)
  8300. }
  8301. resolve(pos, side = 0) {
  8302. return this.cursor(pos, side).node
  8303. }
  8304. iterate(spec) {
  8305. let { enter, leave, from = 0, to = this.length } = spec
  8306. for (let c = this.cursor(); ; ) {
  8307. let mustLeave = false
  8308. if (c.from <= to && c.to >= from && (c.type.isAnonymous || enter(c.type, c.from, c.to) !== false)) {
  8309. if (c.firstChild()) continue
  8310. if (!c.type.isAnonymous) mustLeave = true
  8311. }
  8312. for (;;) {
  8313. if (mustLeave && leave) leave(c.type, c.from, c.to)
  8314. mustLeave = c.type.isAnonymous
  8315. if (c.nextSibling()) break
  8316. if (!c.parent()) return
  8317. mustLeave = true
  8318. }
  8319. }
  8320. }
  8321. balance(maxBufferLength = DefaultBufferLength) {
  8322. return this.children.length <= BalanceBranchFactor
  8323. ? this
  8324. : balanceRange(this.type, NodeType.none, this.children, this.positions, 0, this.children.length, 0, maxBufferLength, this.length, 0)
  8325. }
  8326. static build(data) {
  8327. return buildTree(data)
  8328. }
  8329. }
  8330. Tree.empty = new Tree(NodeType.none, [], [], 0)
  8331. function withHash(tree, hash) {
  8332. if (hash) tree.contextHash = hash
  8333. return tree
  8334. }
  8335. class TreeBuffer {
  8336. constructor(buffer, length, set, type = NodeType.none) {
  8337. this.buffer = buffer
  8338. this.length = length
  8339. this.set = set
  8340. this.type = type
  8341. }
  8342. toString() {
  8343. let result = []
  8344. for (let index = 0; index < this.buffer.length; ) {
  8345. result.push(this.childString(index))
  8346. index = this.buffer[index + 3]
  8347. }
  8348. return result.join(',')
  8349. }
  8350. childString(index) {
  8351. let id = this.buffer[index],
  8352. endIndex = this.buffer[index + 3]
  8353. let type = this.set.types[id],
  8354. result = type.name
  8355. if (/\W/.test(result) && !type.isError) result = JSON.stringify(result)
  8356. index += 4
  8357. if (endIndex == index) return result
  8358. let children = []
  8359. while (index < endIndex) {
  8360. children.push(this.childString(index))
  8361. index = this.buffer[index + 3]
  8362. }
  8363. return result + '(' + children.join(',') + ')'
  8364. }
  8365. findChild(startIndex, endIndex, dir, after) {
  8366. let { buffer } = this,
  8367. pick = -1
  8368. for (let i = startIndex; i != endIndex; i = buffer[i + 3]) {
  8369. if (after != -100000000) {
  8370. let start = buffer[i + 1],
  8371. end = buffer[i + 2]
  8372. if (dir > 0) {
  8373. if (end > after) pick = i
  8374. if (end > after) break
  8375. } else {
  8376. if (start < after) pick = i
  8377. if (end >= after) break
  8378. }
  8379. } else {
  8380. pick = i
  8381. if (dir > 0) break
  8382. }
  8383. }
  8384. return pick
  8385. }
  8386. }
  8387. class TreeNode {
  8388. constructor(node, from, index, _parent) {
  8389. this.node = node
  8390. this.from = from
  8391. this.index = index
  8392. this._parent = _parent
  8393. }
  8394. get type() {
  8395. return this.node.type
  8396. }
  8397. get name() {
  8398. return this.node.type.name
  8399. }
  8400. get to() {
  8401. return this.from + this.node.length
  8402. }
  8403. nextChild(i, dir, after, full = false) {
  8404. for (let parent = this; ; ) {
  8405. for (let { children, positions } = parent.node, e = dir > 0 ? children.length : -1; i != e; i += dir) {
  8406. let next = children[i],
  8407. start = positions[i] + parent.from
  8408. if (after != -100000000 && (dir < 0 ? start >= after : start + next.length <= after)) continue
  8409. if (next instanceof TreeBuffer) {
  8410. let index = next.findChild(0, next.buffer.length, dir, after == -100000000 ? -100000000 : after - start)
  8411. if (index > -1) return new BufferNode(new BufferContext(parent, next, i, start), null, index)
  8412. } else if (full || !next.type.isAnonymous || hasChild(next)) {
  8413. let inner = new TreeNode(next, start, i, parent)
  8414. return full || !inner.type.isAnonymous ? inner : inner.nextChild(dir < 0 ? next.children.length - 1 : 0, dir, after)
  8415. }
  8416. }
  8417. if (full || !parent.type.isAnonymous) return null
  8418. i = parent.index + dir
  8419. parent = parent._parent
  8420. if (!parent) return null
  8421. }
  8422. }
  8423. get firstChild() {
  8424. return this.nextChild(0, 1, -100000000)
  8425. }
  8426. get lastChild() {
  8427. return this.nextChild(this.node.children.length - 1, -1, -100000000)
  8428. }
  8429. childAfter(pos) {
  8430. return this.nextChild(0, 1, pos)
  8431. }
  8432. childBefore(pos) {
  8433. return this.nextChild(this.node.children.length - 1, -1, pos)
  8434. }
  8435. nextSignificantParent() {
  8436. let val = this
  8437. while (val.type.isAnonymous && val._parent) val = val._parent
  8438. return val
  8439. }
  8440. get parent() {
  8441. return this._parent ? this._parent.nextSignificantParent() : null
  8442. }
  8443. get nextSibling() {
  8444. return this._parent ? this._parent.nextChild(this.index + 1, 1, -1) : null
  8445. }
  8446. get prevSibling() {
  8447. return this._parent ? this._parent.nextChild(this.index - 1, -1, -1) : null
  8448. }
  8449. get cursor() {
  8450. return new TreeCursor(this)
  8451. }
  8452. resolve(pos, side = 0) {
  8453. return this.cursor.moveTo(pos, side).node
  8454. }
  8455. getChild(type, before = null, after = null) {
  8456. let r = getChildren(this, type, before, after)
  8457. return r.length ? r[0] : null
  8458. }
  8459. getChildren(type, before = null, after = null) {
  8460. return getChildren(this, type, before, after)
  8461. }
  8462. toString() {
  8463. return this.node.toString()
  8464. }
  8465. }
  8466. function getChildren(node, type, before, after) {
  8467. let cur = node.cursor,
  8468. result = []
  8469. if (!cur.firstChild()) return result
  8470. if (before != null) while (!cur.type.is(before)) if (!cur.nextSibling()) return result
  8471. for (;;) {
  8472. if (after != null && cur.type.is(after)) return result
  8473. if (cur.type.is(type)) result.push(cur.node)
  8474. if (!cur.nextSibling()) return after == null ? result : []
  8475. }
  8476. }
  8477. class BufferContext {
  8478. constructor(parent, buffer, index, start) {
  8479. this.parent = parent
  8480. this.buffer = buffer
  8481. this.index = index
  8482. this.start = start
  8483. }
  8484. }
  8485. class BufferNode {
  8486. constructor(context, _parent, index) {
  8487. this.context = context
  8488. this._parent = _parent
  8489. this.index = index
  8490. this.type = context.buffer.set.types[context.buffer.buffer[index]]
  8491. }
  8492. get name() {
  8493. return this.type.name
  8494. }
  8495. get from() {
  8496. return this.context.start + this.context.buffer.buffer[this.index + 1]
  8497. }
  8498. get to() {
  8499. return this.context.start + this.context.buffer.buffer[this.index + 2]
  8500. }
  8501. child(dir, after) {
  8502. let { buffer } = this.context
  8503. let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, after == -100000000 ? -100000000 : after - this.context.start)
  8504. return index < 0 ? null : new BufferNode(this.context, this, index)
  8505. }
  8506. get firstChild() {
  8507. return this.child(1, -100000000)
  8508. }
  8509. get lastChild() {
  8510. return this.child(-1, -100000000)
  8511. }
  8512. childAfter(pos) {
  8513. return this.child(1, pos)
  8514. }
  8515. childBefore(pos) {
  8516. return this.child(-1, pos)
  8517. }
  8518. get parent() {
  8519. return this._parent || this.context.parent.nextSignificantParent()
  8520. }
  8521. externalSibling(dir) {
  8522. return this._parent ? null : this.context.parent.nextChild(this.context.index + dir, dir, -1)
  8523. }
  8524. get nextSibling() {
  8525. let { buffer } = this.context
  8526. let after = buffer.buffer[this.index + 3]
  8527. if (after < (this._parent ? buffer.buffer[this._parent.index + 3] : buffer.buffer.length)) return new BufferNode(this.context, this._parent, after)
  8528. return this.externalSibling(1)
  8529. }
  8530. get prevSibling() {
  8531. let { buffer } = this.context
  8532. let parentStart = this._parent ? this._parent.index + 4 : 0
  8533. if (this.index == parentStart) return this.externalSibling(-1)
  8534. return new BufferNode(this.context, this._parent, buffer.findChild(parentStart, this.index, -1, -100000000))
  8535. }
  8536. get cursor() {
  8537. return new TreeCursor(this)
  8538. }
  8539. resolve(pos, side = 0) {
  8540. return this.cursor.moveTo(pos, side).node
  8541. }
  8542. toString() {
  8543. return this.context.buffer.childString(this.index)
  8544. }
  8545. getChild(type, before = null, after = null) {
  8546. let r = getChildren(this, type, before, after)
  8547. return r.length ? r[0] : null
  8548. }
  8549. getChildren(type, before = null, after = null) {
  8550. return getChildren(this, type, before, after)
  8551. }
  8552. }
  8553. class TreeCursor {
  8554. constructor(node, full = false) {
  8555. this.full = full
  8556. this.buffer = null
  8557. this.stack = []
  8558. this.index = 0
  8559. this.bufferNode = null
  8560. if (node instanceof TreeNode) {
  8561. this.yieldNode(node)
  8562. } else {
  8563. this._tree = node.context.parent
  8564. this.buffer = node.context
  8565. for (let n = node._parent; n; n = n._parent) this.stack.unshift(n.index)
  8566. this.bufferNode = node
  8567. this.yieldBuf(node.index)
  8568. }
  8569. }
  8570. get name() {
  8571. return this.type.name
  8572. }
  8573. yieldNode(node) {
  8574. if (!node) return false
  8575. this._tree = node
  8576. this.type = node.type
  8577. this.from = node.from
  8578. this.to = node.to
  8579. return true
  8580. }
  8581. yieldBuf(index, type) {
  8582. this.index = index
  8583. let { start, buffer } = this.buffer
  8584. this.type = type || buffer.set.types[buffer.buffer[index]]
  8585. this.from = start + buffer.buffer[index + 1]
  8586. this.to = start + buffer.buffer[index + 2]
  8587. return true
  8588. }
  8589. yield(node) {
  8590. if (!node) return false
  8591. if (node instanceof TreeNode) {
  8592. this.buffer = null
  8593. return this.yieldNode(node)
  8594. }
  8595. this.buffer = node.context
  8596. return this.yieldBuf(node.index, node.type)
  8597. }
  8598. toString() {
  8599. return this.buffer ? this.buffer.buffer.childString(this.index) : this._tree.toString()
  8600. }
  8601. enter(dir, after) {
  8602. if (!this.buffer) return this.yield(this._tree.nextChild(dir < 0 ? this._tree.node.children.length - 1 : 0, dir, after, this.full))
  8603. let { buffer } = this.buffer
  8604. let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, after == -100000000 ? -100000000 : after - this.buffer.start)
  8605. if (index < 0) return false
  8606. this.stack.push(this.index)
  8607. return this.yieldBuf(index)
  8608. }
  8609. firstChild() {
  8610. return this.enter(1, -100000000)
  8611. }
  8612. lastChild() {
  8613. return this.enter(-1, -100000000)
  8614. }
  8615. childAfter(pos) {
  8616. return this.enter(1, pos)
  8617. }
  8618. childBefore(pos) {
  8619. return this.enter(-1, pos)
  8620. }
  8621. parent() {
  8622. if (!this.buffer) return this.yieldNode(this.full ? this._tree._parent : this._tree.parent)
  8623. if (this.stack.length) return this.yieldBuf(this.stack.pop())
  8624. let parent = this.full ? this.buffer.parent : this.buffer.parent.nextSignificantParent()
  8625. this.buffer = null
  8626. return this.yieldNode(parent)
  8627. }
  8628. sibling(dir) {
  8629. if (!this.buffer) return !this._tree._parent ? false : this.yield(this._tree._parent.nextChild(this._tree.index + dir, dir, -100000000, this.full))
  8630. let { buffer } = this.buffer,
  8631. d = this.stack.length - 1
  8632. if (dir < 0) {
  8633. let parentStart = d < 0 ? 0 : this.stack[d] + 4
  8634. if (this.index != parentStart) return this.yieldBuf(buffer.findChild(parentStart, this.index, -1, -100000000))
  8635. } else {
  8636. let after = buffer.buffer[this.index + 3]
  8637. if (after < (d < 0 ? buffer.buffer.length : buffer.buffer[this.stack[d] + 3])) return this.yieldBuf(after)
  8638. }
  8639. return d < 0 ? this.yield(this.buffer.parent.nextChild(this.buffer.index + dir, dir, -100000000, this.full)) : false
  8640. }
  8641. nextSibling() {
  8642. return this.sibling(1)
  8643. }
  8644. prevSibling() {
  8645. return this.sibling(-1)
  8646. }
  8647. atLastNode(dir) {
  8648. let index,
  8649. parent,
  8650. { buffer } = this
  8651. if (buffer) {
  8652. if (dir > 0) {
  8653. if (this.index < buffer.buffer.buffer.length) return false
  8654. } else {
  8655. for (let i = 0; i < this.index; i++) if (buffer.buffer.buffer[i + 3] < this.index) return false
  8656. }
  8657. ;({ index, parent } = buffer)
  8658. } else {
  8659. ;({ index, _parent: parent } = this._tree)
  8660. }
  8661. for (; parent; { index, _parent: parent } = parent) {
  8662. for (let i = index + dir, e = dir < 0 ? -1 : parent.node.children.length; i != e; i += dir) {
  8663. let child = parent.node.children[i]
  8664. if (this.full || !child.type.isAnonymous || child instanceof TreeBuffer || hasChild(child)) return false
  8665. }
  8666. }
  8667. return true
  8668. }
  8669. move(dir) {
  8670. if (this.enter(dir, -100000000)) return true
  8671. for (;;) {
  8672. if (this.sibling(dir)) return true
  8673. if (this.atLastNode(dir) || !this.parent()) return false
  8674. }
  8675. }
  8676. next() {
  8677. return this.move(1)
  8678. }
  8679. prev() {
  8680. return this.move(-1)
  8681. }
  8682. moveTo(pos, side = 0) {
  8683. while (this.from == this.to || (side < 1 ? this.from >= pos : this.from > pos) || (side > -1 ? this.to <= pos : this.to < pos)) if (!this.parent()) break
  8684. for (;;) {
  8685. if (side < 0 ? !this.childBefore(pos) : !this.childAfter(pos)) break
  8686. if (this.from == this.to || (side < 1 ? this.from >= pos : this.from > pos) || (side > -1 ? this.to <= pos : this.to < pos)) {
  8687. this.parent()
  8688. break
  8689. }
  8690. }
  8691. return this
  8692. }
  8693. get node() {
  8694. if (!this.buffer) return this._tree
  8695. let cache = this.bufferNode,
  8696. result = null,
  8697. depth = 0
  8698. if (cache && cache.context == this.buffer) {
  8699. scan: for (let index = this.index, d = this.stack.length; d >= 0; ) {
  8700. for (let c = cache; c; c = c._parent)
  8701. if (c.index == index) {
  8702. if (index == this.index) return c
  8703. result = c
  8704. depth = d + 1
  8705. break scan
  8706. }
  8707. index = this.stack[--d]
  8708. }
  8709. }
  8710. for (let i = depth; i < this.stack.length; i++) result = new BufferNode(this.buffer, result, this.stack[i])
  8711. return (this.bufferNode = new BufferNode(this.buffer, result, this.index))
  8712. }
  8713. get tree() {
  8714. return this.buffer ? null : this._tree.node
  8715. }
  8716. }
  8717. function hasChild(tree) {
  8718. return tree.children.some(ch => !ch.type.isAnonymous || ch instanceof TreeBuffer || hasChild(ch))
  8719. }
  8720. class FlatBufferCursor {
  8721. constructor(buffer, index) {
  8722. this.buffer = buffer
  8723. this.index = index
  8724. }
  8725. get id() {
  8726. return this.buffer[this.index - 4]
  8727. }
  8728. get start() {
  8729. return this.buffer[this.index - 3]
  8730. }
  8731. get end() {
  8732. return this.buffer[this.index - 2]
  8733. }
  8734. get size() {
  8735. return this.buffer[this.index - 1]
  8736. }
  8737. get pos() {
  8738. return this.index
  8739. }
  8740. next() {
  8741. this.index -= 4
  8742. }
  8743. fork() {
  8744. return new FlatBufferCursor(this.buffer, this.index)
  8745. }
  8746. }
  8747. const BalanceBranchFactor = 8
  8748. function buildTree(data) {
  8749. var _a
  8750. let { buffer, nodeSet, topID = 0, maxBufferLength = DefaultBufferLength, reused = [], minRepeatType = nodeSet.types.length } = data
  8751. let cursor = Array.isArray(buffer) ? new FlatBufferCursor(buffer, buffer.length) : buffer
  8752. let types = nodeSet.types
  8753. let contextHash = 0
  8754. function takeNode(parentStart, minPos, children, positions, inRepeat) {
  8755. let { id, start, end, size } = cursor
  8756. let startPos = start - parentStart
  8757. if (size < 0) {
  8758. if (size == -1) {
  8759. children.push(reused[id])
  8760. positions.push(startPos)
  8761. } else {
  8762. contextHash = id
  8763. }
  8764. cursor.next()
  8765. return
  8766. }
  8767. let type = types[id],
  8768. node,
  8769. buffer
  8770. if (end - start <= maxBufferLength && (buffer = findBufferSize(cursor.pos - minPos, inRepeat))) {
  8771. let data = new Uint16Array(buffer.size - buffer.skip)
  8772. let endPos = cursor.pos - buffer.size,
  8773. index = data.length
  8774. while (cursor.pos > endPos) index = copyToBuffer(buffer.start, data, index, inRepeat)
  8775. node = new TreeBuffer(data, end - buffer.start, nodeSet, inRepeat < 0 ? NodeType.none : types[inRepeat])
  8776. startPos = buffer.start - parentStart
  8777. } else {
  8778. let endPos = cursor.pos - size
  8779. cursor.next()
  8780. let localChildren = [],
  8781. localPositions = []
  8782. let localInRepeat = id >= minRepeatType ? id : -1
  8783. while (cursor.pos > endPos) {
  8784. if (cursor.id == localInRepeat) cursor.next()
  8785. else takeNode(start, endPos, localChildren, localPositions, localInRepeat)
  8786. }
  8787. localChildren.reverse()
  8788. localPositions.reverse()
  8789. if (localInRepeat > -1 && localChildren.length > BalanceBranchFactor)
  8790. node = balanceRange(type, type, localChildren, localPositions, 0, localChildren.length, 0, maxBufferLength, end - start, contextHash)
  8791. else node = withHash(new Tree(type, localChildren, localPositions, end - start), contextHash)
  8792. }
  8793. children.push(node)
  8794. positions.push(startPos)
  8795. }
  8796. function findBufferSize(maxSize, inRepeat) {
  8797. let fork = cursor.fork()
  8798. let size = 0,
  8799. start = 0,
  8800. skip = 0,
  8801. minStart = fork.end - maxBufferLength
  8802. let result = { size: 0, start: 0, skip: 0 }
  8803. scan: for (let minPos = fork.pos - maxSize; fork.pos > minPos; ) {
  8804. if (fork.id == inRepeat) {
  8805. result.size = size
  8806. result.start = start
  8807. result.skip = skip
  8808. skip += 4
  8809. size += 4
  8810. fork.next()
  8811. continue
  8812. }
  8813. let nodeSize = fork.size,
  8814. startPos = fork.pos - nodeSize
  8815. if (nodeSize < 0 || startPos < minPos || fork.start < minStart) break
  8816. let localSkipped = fork.id >= minRepeatType ? 4 : 0
  8817. let nodeStart = fork.start
  8818. fork.next()
  8819. while (fork.pos > startPos) {
  8820. if (fork.size < 0) break scan
  8821. if (fork.id >= minRepeatType) localSkipped += 4
  8822. fork.next()
  8823. }
  8824. start = nodeStart
  8825. size += nodeSize
  8826. skip += localSkipped
  8827. }
  8828. if (inRepeat < 0 || size == maxSize) {
  8829. result.size = size
  8830. result.start = start
  8831. result.skip = skip
  8832. }
  8833. return result.size > 4 ? result : undefined
  8834. }
  8835. function copyToBuffer(bufferStart, buffer, index, inRepeat) {
  8836. let { id, start, end, size } = cursor
  8837. cursor.next()
  8838. if (id == inRepeat) return index
  8839. let startIndex = index
  8840. if (size > 4) {
  8841. let endPos = cursor.pos - (size - 4)
  8842. while (cursor.pos > endPos) index = copyToBuffer(bufferStart, buffer, index, inRepeat)
  8843. }
  8844. if (id < minRepeatType) {
  8845. buffer[--index] = startIndex
  8846. buffer[--index] = end - bufferStart
  8847. buffer[--index] = start - bufferStart
  8848. buffer[--index] = id
  8849. }
  8850. return index
  8851. }
  8852. let children = [],
  8853. positions = []
  8854. while (cursor.pos > 0) takeNode(data.start || 0, 0, children, positions, -1)
  8855. let length = (_a = data.length) !== null && _a !== void 0 ? _a : children.length ? positions[0] + children[0].length : 0
  8856. return new Tree(types[topID], children.reverse(), positions.reverse(), length)
  8857. }
  8858. function balanceRange(outerType, innerType, children, positions, from, to, start, maxBufferLength, length, contextHash) {
  8859. let localChildren = [],
  8860. localPositions = []
  8861. if (length <= maxBufferLength) {
  8862. for (let i = from; i < to; i++) {
  8863. localChildren.push(children[i])
  8864. localPositions.push(positions[i] - start)
  8865. }
  8866. } else {
  8867. let maxChild = Math.max(maxBufferLength, Math.ceil((length * 1.5) / BalanceBranchFactor))
  8868. for (let i = from; i < to; ) {
  8869. let groupFrom = i,
  8870. groupStart = positions[i]
  8871. i++
  8872. for (; i < to; i++) {
  8873. let nextEnd = positions[i] + children[i].length
  8874. if (nextEnd - groupStart > maxChild) break
  8875. }
  8876. if (i == groupFrom + 1) {
  8877. let only = children[groupFrom]
  8878. if (only instanceof Tree && only.type == innerType && only.length > maxChild << 1) {
  8879. for (let j = 0; j < only.children.length; j++) {
  8880. localChildren.push(only.children[j])
  8881. localPositions.push(only.positions[j] + groupStart - start)
  8882. }
  8883. continue
  8884. }
  8885. localChildren.push(only)
  8886. } else if (i == groupFrom + 1) {
  8887. localChildren.push(children[groupFrom])
  8888. } else {
  8889. let inner = balanceRange(innerType, innerType, children, positions, groupFrom, i, groupStart, maxBufferLength, positions[i - 1] + children[i - 1].length - groupStart, contextHash)
  8890. if (innerType != NodeType.none && !containsType(inner.children, innerType)) inner = withHash(new Tree(NodeType.none, inner.children, inner.positions, inner.length), contextHash)
  8891. localChildren.push(inner)
  8892. }
  8893. localPositions.push(groupStart - start)
  8894. }
  8895. }
  8896. return withHash(new Tree(outerType, localChildren, localPositions, length), contextHash)
  8897. }
  8898. function containsType(nodes, type) {
  8899. for (let _i98 = 0, _length98 = nodes.length; _i98 < _length98; _i98++) {
  8900. let elt = nodes[_i98]
  8901. if (elt.type == type) return true
  8902. }
  8903. return false
  8904. }
  8905. class TreeFragment {
  8906. constructor(from, to, tree, offset, open) {
  8907. this.from = from
  8908. this.to = to
  8909. this.tree = tree
  8910. this.offset = offset
  8911. this.open = open
  8912. }
  8913. get openStart() {
  8914. return (this.open & 1) > 0
  8915. }
  8916. get openEnd() {
  8917. return (this.open & 2) > 0
  8918. }
  8919. static applyChanges(fragments, changes, minGap = 128) {
  8920. if (!changes.length) return fragments
  8921. let result = []
  8922. let fI = 1,
  8923. nextF = fragments.length ? fragments[0] : null
  8924. let cI = 0,
  8925. pos = 0,
  8926. off = 0
  8927. for (;;) {
  8928. let nextC = cI < changes.length ? changes[cI++] : null
  8929. let nextPos = nextC ? nextC.fromA : 1e9
  8930. if (nextPos - pos >= minGap)
  8931. while (nextF && nextF.from < nextPos) {
  8932. let cut = nextF
  8933. if (pos >= cut.from || nextPos <= cut.to || off) {
  8934. let fFrom = Math.max(cut.from, pos) - off,
  8935. fTo = Math.min(cut.to, nextPos) - off
  8936. cut = fFrom >= fTo ? null : new TreeFragment(fFrom, fTo, cut.tree, cut.offset + off, (cI > 0 ? 1 : 0) | (nextC ? 2 : 0))
  8937. }
  8938. if (cut) result.push(cut)
  8939. if (nextF.to > nextPos) break
  8940. nextF = fI < fragments.length ? fragments[fI++] : null
  8941. }
  8942. if (!nextC) break
  8943. pos = nextC.toA
  8944. off = nextC.toA - nextC.toB
  8945. }
  8946. return result
  8947. }
  8948. static addTree(tree, fragments = [], partial = false) {
  8949. let result = [new TreeFragment(0, tree.length, tree, 0, partial ? 2 : 0)]
  8950. for (let _i99 = 0, _length99 = fragments.length; _i99 < _length99; _i99++) {
  8951. let f = fragments[_i99]
  8952. if (f.to > tree.length) result.push(f)
  8953. }
  8954. return result
  8955. }
  8956. }
  8957. function stringInput(input) {
  8958. return new StringInput(input)
  8959. }
  8960. class StringInput {
  8961. constructor(string, length = string.length) {
  8962. this.string = string
  8963. this.length = length
  8964. }
  8965. get(pos) {
  8966. return pos < 0 || pos >= this.length ? -1 : this.string.charCodeAt(pos)
  8967. }
  8968. lineAfter(pos) {
  8969. if (pos < 0) return ''
  8970. let end = this.string.indexOf('\n', pos)
  8971. return this.string.slice(pos, end < 0 ? this.length : Math.min(end, this.length))
  8972. }
  8973. read(from, to) {
  8974. return this.string.slice(from, Math.min(this.length, to))
  8975. }
  8976. clip(at) {
  8977. return new StringInput(this.string, at)
  8978. }
  8979. }
  8980. var _m36 = Object.freeze({
  8981. __proto__: null,
  8982. DefaultBufferLength: DefaultBufferLength,
  8983. NodeProp: NodeProp,
  8984. NodeSet: NodeSet,
  8985. NodeType: NodeType,
  8986. Tree: Tree,
  8987. TreeBuffer: TreeBuffer,
  8988. TreeCursor: TreeCursor,
  8989. TreeFragment: TreeFragment,
  8990. stringInput: stringInput
  8991. })
  8992. const languageDataProp = new NodeProp()
  8993. function defineLanguageFacet(baseData) {
  8994. return Facet.define({ combine: baseData ? values => values.concat(baseData) : undefined })
  8995. }
  8996. class Language {
  8997. constructor(data, parser, topNode, extraExtensions = []) {
  8998. this.data = data
  8999. this.topNode = topNode
  9000. if (!EditorState.prototype.hasOwnProperty('tree'))
  9001. Object.defineProperty(EditorState.prototype, 'tree', {
  9002. get() {
  9003. return syntaxTree(this)
  9004. }
  9005. })
  9006. this.parser = parser
  9007. this.extension = [language.of(this), EditorState.languageData.of((state, pos) => state.facet(languageDataFacetAt(state, pos)))].concat(extraExtensions)
  9008. }
  9009. isActiveAt(state, pos) {
  9010. return languageDataFacetAt(state, pos) == this.data
  9011. }
  9012. findRegions(state) {
  9013. let lang = state.facet(language)
  9014. if ((lang === null || lang === void 0 ? void 0 : lang.data) == this.data) return [{ from: 0, to: state.doc.length }]
  9015. if (!lang || !lang.allowsNesting) return []
  9016. let result = []
  9017. syntaxTree(state).iterate({
  9018. enter: (type, from, to) => {
  9019. if (type.isTop && type.prop(languageDataProp) == this.data) {
  9020. result.push({ from, to })
  9021. return false
  9022. }
  9023. return undefined
  9024. }
  9025. })
  9026. return result
  9027. }
  9028. get allowsNesting() {
  9029. return true
  9030. }
  9031. parseString(code) {
  9032. let doc = Text.of(code.split('\n'))
  9033. let parse = this.parser.startParse(new DocInput(doc), 0, new EditorParseContext(this.parser, EditorState.create({ doc }), [], Tree.empty, { from: 0, to: code.length }, [], null))
  9034. let tree
  9035. while (!(tree = parse.advance())) {}
  9036. return tree
  9037. }
  9038. }
  9039. Language.setState = StateEffect.define()
  9040. function languageDataFacetAt(state, pos) {
  9041. let topLang = state.facet(language)
  9042. if (!topLang) return null
  9043. if (!topLang.allowsNesting) return topLang.data
  9044. let tree = syntaxTree(state)
  9045. let target = tree.resolve(pos, -1)
  9046. while (target) {
  9047. let facet = target.type.prop(languageDataProp)
  9048. if (facet) return facet
  9049. target = target.parent
  9050. }
  9051. return topLang.data
  9052. }
  9053. class LezerLanguage extends Language {
  9054. constructor(data, parser) {
  9055. super(data, parser, parser.topNode)
  9056. this.parser = parser
  9057. }
  9058. static define(spec) {
  9059. let data = defineLanguageFacet(spec.languageData)
  9060. return new LezerLanguage(data, spec.parser.configure({ props: [languageDataProp.add(type => (type.isTop ? data : undefined))] }))
  9061. }
  9062. configure(options) {
  9063. return new LezerLanguage(this.data, this.parser.configure(options))
  9064. }
  9065. get allowsNesting() {
  9066. return this.parser.hasNested
  9067. }
  9068. }
  9069. function syntaxTree(state) {
  9070. let field = state.field(Language.state, false)
  9071. return field ? field.tree : Tree.empty
  9072. }
  9073. function ensureSyntaxTree(state, upto, timeout = 50) {
  9074. var _a
  9075. let parse = (_a = state.field(Language.state, false)) === null || _a === void 0 ? void 0 : _a.context
  9076. return !parse ? null : parse.tree.length >= upto || parse.work(timeout, upto) ? parse.tree : null
  9077. }
  9078. class DocInput {
  9079. constructor(doc, length = doc.length) {
  9080. this.doc = doc
  9081. this.length = length
  9082. this.cursorPos = 0
  9083. this.string = ''
  9084. this.prevString = ''
  9085. this.cursor = doc.iter()
  9086. }
  9087. syncTo(pos) {
  9088. if (pos < this.cursorPos) {
  9089. this.cursor = this.doc.iter()
  9090. this.cursorPos = 0
  9091. }
  9092. this.prevString = pos == this.cursorPos ? this.string : ''
  9093. this.string = this.cursor.next(pos - this.cursorPos).value
  9094. this.cursorPos = pos + this.string.length
  9095. return this.cursorPos - this.string.length
  9096. }
  9097. get(pos) {
  9098. if (pos >= this.length) return -1
  9099. let stringStart = this.cursorPos - this.string.length
  9100. if (pos < stringStart || pos >= this.cursorPos) {
  9101. if (pos < stringStart && pos >= stringStart - this.prevString.length) return this.prevString.charCodeAt(pos - (stringStart - this.prevString.length))
  9102. stringStart = this.syncTo(pos)
  9103. }
  9104. return this.string.charCodeAt(pos - stringStart)
  9105. }
  9106. lineAfter(pos) {
  9107. if (pos >= this.length || pos < 0) return ''
  9108. let stringStart = this.cursorPos - this.string.length
  9109. if (pos < stringStart || pos >= this.cursorPos) stringStart = this.syncTo(pos)
  9110. return this.cursor.lineBreak ? '' : this.string.slice(pos - stringStart, Math.min(this.length - stringStart, this.string.length))
  9111. }
  9112. read(from, to) {
  9113. let stringStart = this.cursorPos - this.string.length
  9114. if (from < stringStart || to >= this.cursorPos) return this.doc.sliceString(from, to)
  9115. else return this.string.slice(from - stringStart, to - stringStart)
  9116. }
  9117. clip(at) {
  9118. return new DocInput(this.doc, at)
  9119. }
  9120. }
  9121. class EditorParseContext {
  9122. constructor(parser, state, fragments = [], tree, viewport, skipped, scheduleOn) {
  9123. this.parser = parser
  9124. this.state = state
  9125. this.fragments = fragments
  9126. this.tree = tree
  9127. this.viewport = viewport
  9128. this.skipped = skipped
  9129. this.scheduleOn = scheduleOn
  9130. this.parse = null
  9131. this.tempSkipped = []
  9132. }
  9133. work(time, upto) {
  9134. if (this.tree != Tree.empty && (upto == null ? this.tree.length == this.state.doc.length : this.tree.length >= upto)) {
  9135. this.takeTree()
  9136. return true
  9137. }
  9138. if (!this.parse) this.parse = this.parser.startParse(new DocInput(this.state.doc), 0, this)
  9139. let endTime = Date.now() + time
  9140. for (;;) {
  9141. let done = this.parse.advance()
  9142. if (done) {
  9143. this.fragments = this.withoutTempSkipped(TreeFragment.addTree(done))
  9144. this.parse = null
  9145. this.tree = done
  9146. return true
  9147. } else if (upto != null && this.parse.pos >= upto) {
  9148. this.takeTree()
  9149. return true
  9150. }
  9151. if (Date.now() > endTime) return false
  9152. }
  9153. }
  9154. takeTree() {
  9155. if (this.parse && this.parse.pos > this.tree.length) {
  9156. this.tree = this.parse.forceFinish()
  9157. this.fragments = this.withoutTempSkipped(TreeFragment.addTree(this.tree, this.fragments, true))
  9158. }
  9159. }
  9160. withoutTempSkipped(fragments) {
  9161. for (let r; (r = this.tempSkipped.pop()); ) fragments = cutFragments(fragments, r.from, r.to)
  9162. return fragments
  9163. }
  9164. changes(changes, newState) {
  9165. let { fragments, tree, viewport, skipped } = this
  9166. this.takeTree()
  9167. if (!changes.empty) {
  9168. let ranges = []
  9169. changes.iterChangedRanges((fromA, toA, fromB, toB) => ranges.push({ fromA, toA, fromB, toB }))
  9170. fragments = TreeFragment.applyChanges(fragments, ranges)
  9171. tree = Tree.empty
  9172. viewport = { from: changes.mapPos(viewport.from, -1), to: changes.mapPos(viewport.to, 1) }
  9173. if (this.skipped.length) {
  9174. skipped = []
  9175. for (let _i100 = 0, _this$skipped = this.skipped, _length100 = _this$skipped.length; _i100 < _length100; _i100++) {
  9176. let r = _this$skipped[_i100]
  9177. let from = changes.mapPos(r.from, 1),
  9178. to = changes.mapPos(r.to, -1)
  9179. if (from < to) skipped.push({ from, to })
  9180. }
  9181. }
  9182. }
  9183. return new EditorParseContext(this.parser, newState, fragments, tree, viewport, skipped, this.scheduleOn)
  9184. }
  9185. updateViewport(viewport) {
  9186. this.viewport = viewport
  9187. let startLen = this.skipped.length
  9188. for (let i = 0; i < this.skipped.length; i++) {
  9189. let { from, to } = this.skipped[i]
  9190. if (from < viewport.to && to > viewport.from) {
  9191. this.fragments = cutFragments(this.fragments, from, to)
  9192. this.skipped.splice(i--, 1)
  9193. }
  9194. }
  9195. return this.skipped.length < startLen
  9196. }
  9197. reset() {
  9198. if (this.parse) {
  9199. this.takeTree()
  9200. this.parse = null
  9201. }
  9202. }
  9203. skipUntilInView(from, to) {
  9204. this.skipped.push({ from, to })
  9205. }
  9206. static getSkippingParser(until) {
  9207. return {
  9208. startParse(input, startPos, context) {
  9209. return {
  9210. pos: startPos,
  9211. advance() {
  9212. let ecx = context
  9213. ecx.tempSkipped.push({ from: startPos, to: input.length })
  9214. if (until) ecx.scheduleOn = ecx.scheduleOn ? Promise.all([ecx.scheduleOn, until]) : until
  9215. this.pos = input.length
  9216. return new Tree(NodeType.none, [], [], input.length - startPos)
  9217. },
  9218. forceFinish() {
  9219. return this.advance()
  9220. }
  9221. }
  9222. }
  9223. }
  9224. }
  9225. movedPast(pos) {
  9226. return this.tree.length < pos && this.parse && this.parse.pos >= pos
  9227. }
  9228. }
  9229. EditorParseContext.skippingParser = EditorParseContext.getSkippingParser()
  9230. function cutFragments(fragments, from, to) {
  9231. return TreeFragment.applyChanges(fragments, [{ fromA: from, toA: to, fromB: from, toB: to }])
  9232. }
  9233. class LanguageState {
  9234. constructor(context) {
  9235. this.context = context
  9236. this.tree = context.tree
  9237. }
  9238. apply(tr) {
  9239. if (!tr.docChanged) return this
  9240. let newCx = this.context.changes(tr.changes, tr.state)
  9241. let upto = this.context.tree.length == tr.startState.doc.length ? undefined : Math.max(tr.changes.mapPos(this.context.tree.length), newCx.viewport.to)
  9242. if (!newCx.work(25, upto)) newCx.takeTree()
  9243. return new LanguageState(newCx)
  9244. }
  9245. static init(state) {
  9246. let parseState = new EditorParseContext(state.facet(language).parser, state, [], Tree.empty, { from: 0, to: state.doc.length }, [], null)
  9247. if (!parseState.work(25)) parseState.takeTree()
  9248. return new LanguageState(parseState)
  9249. }
  9250. }
  9251. Language.state = StateField.define({
  9252. create: LanguageState.init,
  9253. update(value, tr) {
  9254. for (let _i101 = 0, _tr$effects3 = tr.effects, _length101 = _tr$effects3.length; _i101 < _length101; _i101++) {
  9255. let e = _tr$effects3[_i101]
  9256. if (e.is(Language.setState)) return e.value
  9257. }
  9258. if (tr.startState.facet(language) != tr.state.facet(language)) return LanguageState.init(tr.state)
  9259. return value.apply(tr)
  9260. }
  9261. })
  9262. let requestIdle = (typeof window != 'undefined' && window.requestIdleCallback) || ((callback, { timeout }) => setTimeout(callback, timeout))
  9263. let cancelIdle = (typeof window != 'undefined' && window.cancelIdleCallback) || clearTimeout
  9264. const parseWorker = ViewPlugin.fromClass(
  9265. class ParseWorker {
  9266. constructor(view) {
  9267. this.view = view
  9268. this.working = -1
  9269. this.chunkEnd = -1
  9270. this.chunkBudget = -1
  9271. this.work = this.work.bind(this)
  9272. this.scheduleWork()
  9273. }
  9274. update(update) {
  9275. let cx = this.view.state.field(Language.state).context
  9276. if (update.viewportChanged) {
  9277. if (cx.updateViewport(update.view.viewport)) cx.reset()
  9278. if (this.view.viewport.to > cx.tree.length) this.scheduleWork()
  9279. }
  9280. if (update.docChanged) {
  9281. if (this.view.hasFocus) this.chunkBudget += 50
  9282. this.scheduleWork()
  9283. }
  9284. this.checkAsyncSchedule(cx)
  9285. }
  9286. scheduleWork() {
  9287. if (this.working > -1) return
  9288. let { state } = this.view,
  9289. field = state.field(Language.state),
  9290. frags = field.context.fragments
  9291. if (field.tree.length >= state.doc.length && frags.length && frags[0].from == 0 && frags[0].to >= state.doc.length) return
  9292. this.working = requestIdle(this.work, { timeout: 500 })
  9293. }
  9294. work(deadline) {
  9295. this.working = -1
  9296. let now = Date.now()
  9297. if (this.chunkEnd < now && (this.chunkEnd < 0 || this.view.hasFocus)) {
  9298. this.chunkEnd = now + 30000
  9299. this.chunkBudget = 3000
  9300. }
  9301. if (this.chunkBudget <= 0) return
  9302. let {
  9303. state,
  9304. viewport: { to: vpTo }
  9305. } = this.view,
  9306. field = state.field(Language.state)
  9307. if (field.tree.length >= vpTo + 1000000) return
  9308. let time = Math.min(this.chunkBudget, deadline ? Math.max(25, deadline.timeRemaining()) : 100)
  9309. let done = field.context.work(time, vpTo + 1000000)
  9310. this.chunkBudget -= Date.now() - now
  9311. if (done || this.chunkBudget <= 0 || field.context.movedPast(vpTo)) {
  9312. field.context.takeTree()
  9313. this.view.dispatch({ effects: Language.setState.of(new LanguageState(field.context)) })
  9314. }
  9315. if (!done && this.chunkBudget > 0) this.scheduleWork()
  9316. this.checkAsyncSchedule(field.context)
  9317. }
  9318. checkAsyncSchedule(cx) {
  9319. if (cx.scheduleOn) {
  9320. cx.scheduleOn.then(() => this.scheduleWork())
  9321. cx.scheduleOn = null
  9322. }
  9323. }
  9324. destroy() {
  9325. if (this.working >= 0) cancelIdle(this.working)
  9326. }
  9327. },
  9328. {
  9329. eventHandlers: {
  9330. focus() {
  9331. this.scheduleWork()
  9332. }
  9333. }
  9334. }
  9335. )
  9336. const language = Facet.define({
  9337. combine(languages) {
  9338. return languages.length ? languages[0] : null
  9339. },
  9340. enables: [Language.state, parseWorker]
  9341. })
  9342. class LanguageSupport {
  9343. constructor(language, support = []) {
  9344. this.language = language
  9345. this.support = support
  9346. this.extension = [language, support]
  9347. }
  9348. }
  9349. class LanguageDescription {
  9350. constructor(name, alias, extensions, filename, loadFunc) {
  9351. this.name = name
  9352. this.alias = alias
  9353. this.extensions = extensions
  9354. this.filename = filename
  9355. this.loadFunc = loadFunc
  9356. this.support = undefined
  9357. this.loading = null
  9358. }
  9359. load() {
  9360. return (
  9361. this.loading ||
  9362. (this.loading = this.loadFunc().then(
  9363. support => (this.support = support),
  9364. err => {
  9365. this.loading = null
  9366. throw err
  9367. }
  9368. ))
  9369. )
  9370. }
  9371. static of(spec) {
  9372. return new LanguageDescription(
  9373. spec.name,
  9374. (spec.alias || []).concat(spec.name).map(s => s.toLowerCase()),
  9375. spec.extensions || [],
  9376. spec.filename,
  9377. spec.load
  9378. )
  9379. }
  9380. static matchFilename(descs, filename) {
  9381. for (let _i102 = 0, _length102 = descs.length; _i102 < _length102; _i102++) {
  9382. let d = descs[_i102]
  9383. if (d.filename && d.filename.test(filename)) return d
  9384. }
  9385. let ext = /\.([^.]+)$/.exec(filename)
  9386. if (ext)
  9387. for (let _i103 = 0, _length103 = descs.length; _i103 < _length103; _i103++) {
  9388. let d = descs[_i103]
  9389. if (d.extensions.indexOf(ext[1]) > -1) return d
  9390. }
  9391. return null
  9392. }
  9393. static matchLanguageName(descs, name, fuzzy = true) {
  9394. name = name.toLowerCase()
  9395. for (let _i104 = 0, _length104 = descs.length; _i104 < _length104; _i104++) {
  9396. let d = descs[_i104]
  9397. if (d.alias.some(a => a == name)) return d
  9398. }
  9399. if (fuzzy)
  9400. for (let _i105 = 0, _length105 = descs.length; _i105 < _length105; _i105++) {
  9401. let d = descs[_i105]
  9402. for (let _i106 = 0, _d$alias = d.alias, _length106 = _d$alias.length; _i106 < _length106; _i106++) {
  9403. let a = _d$alias[_i106]
  9404. let found = name.indexOf(a)
  9405. if (found > -1 && (a.length > 2 || (!/\w/.test(name[found - 1]) && !/\w/.test(name[found + a.length])))) return d
  9406. }
  9407. }
  9408. return null
  9409. }
  9410. }
  9411. const indentService = Facet.define()
  9412. const indentUnit = Facet.define({
  9413. combine: values => {
  9414. if (!values.length) return ' '
  9415. if (!/^(?: +|\t+)$/.test(values[0])) throw new Error('Invalid indent unit: ' + JSON.stringify(values[0]))
  9416. return values[0]
  9417. }
  9418. })
  9419. function getIndentUnit(state) {
  9420. let unit = state.facet(indentUnit)
  9421. return unit.charCodeAt(0) == 9 ? state.tabSize * unit.length : unit.length
  9422. }
  9423. function indentString(state, cols) {
  9424. let result = '',
  9425. ts = state.tabSize
  9426. if (state.facet(indentUnit).charCodeAt(0) == 9)
  9427. while (cols >= ts) {
  9428. result += '\t'
  9429. cols -= ts
  9430. }
  9431. for (let i = 0; i < cols; i++) result += ' '
  9432. return result
  9433. }
  9434. function getIndentation(context, pos) {
  9435. if (context instanceof EditorState) context = new IndentContext(context)
  9436. for (let _i107 = 0, _context$state$facet = context.state.facet(indentService), _length107 = _context$state$facet.length; _i107 < _length107; _i107++) {
  9437. let service = _context$state$facet[_i107]
  9438. let result = service(context, pos)
  9439. if (result != null) return result
  9440. }
  9441. let tree = syntaxTree(context.state)
  9442. return tree ? syntaxIndentation(context, tree, pos) : null
  9443. }
  9444. class IndentContext {
  9445. constructor(state, options = {}) {
  9446. this.state = state
  9447. this.options = options
  9448. this.unit = getIndentUnit(state)
  9449. }
  9450. textAfterPos(pos) {
  9451. var _a, _b
  9452. let sim = (_a = this.options) === null || _a === void 0 ? void 0 : _a.simulateBreak
  9453. if (pos == sim && ((_b = this.options) === null || _b === void 0 ? void 0 : _b.simulateDoubleBreak)) return ''
  9454. return this.state.sliceDoc(pos, Math.min(pos + 100, sim != null && sim > pos ? sim : 1e9, this.state.doc.lineAt(pos).to))
  9455. }
  9456. column(pos) {
  9457. var _a
  9458. let line = this.state.doc.lineAt(pos),
  9459. text = line.text.slice(0, pos - line.from)
  9460. let result = this.countColumn(text, pos - line.from)
  9461. let override = ((_a = this.options) === null || _a === void 0 ? void 0 : _a.overrideIndentation) ? this.options.overrideIndentation(line.from) : -1
  9462. if (override > -1) result += override - this.countColumn(text, text.search(/\S/))
  9463. return result
  9464. }
  9465. countColumn(line, pos) {
  9466. return countColumn(pos < 0 ? line : line.slice(0, pos), 0, this.state.tabSize)
  9467. }
  9468. lineIndent(line) {
  9469. var _a
  9470. let override = (_a = this.options) === null || _a === void 0 ? void 0 : _a.overrideIndentation
  9471. if (override) {
  9472. let overriden = override(line.from)
  9473. if (overriden > -1) return overriden
  9474. }
  9475. return this.countColumn(line.text, line.text.search(/\S/))
  9476. }
  9477. }
  9478. const indentNodeProp = new NodeProp()
  9479. function syntaxIndentation(cx, ast, pos) {
  9480. let tree = ast.resolve(pos)
  9481. for (let scan = tree, scanPos = pos; ; ) {
  9482. let last = scan.childBefore(scanPos)
  9483. if (!last) break
  9484. if (last.type.isError && last.from == last.to) {
  9485. tree = scan
  9486. scanPos = last.from
  9487. } else {
  9488. scan = last
  9489. scanPos = scan.to + 1
  9490. }
  9491. }
  9492. return indentFrom(tree, pos, cx)
  9493. }
  9494. function ignoreClosed(cx) {
  9495. var _a, _b
  9496. return cx.pos == ((_a = cx.options) === null || _a === void 0 ? void 0 : _a.simulateBreak) && ((_b = cx.options) === null || _b === void 0 ? void 0 : _b.simulateDoubleBreak)
  9497. }
  9498. function indentStrategy(tree) {
  9499. let strategy = tree.type.prop(indentNodeProp)
  9500. if (strategy) return strategy
  9501. let first = tree.firstChild,
  9502. close
  9503. if (first && (close = first.type.prop(NodeProp.closedBy))) {
  9504. let last = tree.lastChild,
  9505. closed = last && close.indexOf(last.name) > -1
  9506. return cx => delimitedStrategy(cx, true, 1, undefined, closed && !ignoreClosed(cx) ? last.from : undefined)
  9507. }
  9508. return tree.parent == null ? topIndent$1 : null
  9509. }
  9510. function indentFrom(node, pos, base) {
  9511. for (; node; node = node.parent) {
  9512. let strategy = indentStrategy(node)
  9513. if (strategy) return strategy(new TreeIndentContext(base, pos, node))
  9514. }
  9515. return null
  9516. }
  9517. function topIndent$1() {
  9518. return 0
  9519. }
  9520. class TreeIndentContext extends IndentContext {
  9521. constructor(base, pos, node) {
  9522. super(base.state, base.options)
  9523. this.base = base
  9524. this.pos = pos
  9525. this.node = node
  9526. }
  9527. get textAfter() {
  9528. return this.textAfterPos(this.pos)
  9529. }
  9530. get baseIndent() {
  9531. let line = this.state.doc.lineAt(this.node.from)
  9532. for (;;) {
  9533. let atBreak = this.node.resolve(line.from)
  9534. while (atBreak.parent && atBreak.parent.from == atBreak.from) atBreak = atBreak.parent
  9535. if (isParent(atBreak, this.node)) break
  9536. line = this.state.doc.lineAt(atBreak.from)
  9537. }
  9538. return this.lineIndent(line)
  9539. }
  9540. continue() {
  9541. let parent = this.node.parent
  9542. return parent ? indentFrom(parent, this.pos, this.base) : 0
  9543. }
  9544. }
  9545. function isParent(parent, of) {
  9546. for (let cur = of; cur; cur = cur.parent) if (parent == cur) return true
  9547. return false
  9548. }
  9549. function bracketedAligned(context) {
  9550. var _a
  9551. let tree = context.node
  9552. let openToken = tree.childAfter(tree.from),
  9553. last = tree.lastChild
  9554. if (!openToken) return null
  9555. let sim = (_a = context.options) === null || _a === void 0 ? void 0 : _a.simulateBreak
  9556. let openLine = context.state.doc.lineAt(openToken.from)
  9557. let lineEnd = sim == null || sim <= openLine.from ? openLine.to : Math.min(openLine.to, sim)
  9558. for (let pos = openToken.to; ; ) {
  9559. let next = tree.childAfter(pos)
  9560. if (!next || next == last) return null
  9561. if (!next.type.isSkipped) return next.from < lineEnd ? openToken : null
  9562. pos = next.to
  9563. }
  9564. }
  9565. function delimitedIndent({ closing, align = true, units = 1 }) {
  9566. return context => delimitedStrategy(context, align, units, closing)
  9567. }
  9568. function delimitedStrategy(context, align, units, closing, closedAt) {
  9569. let after = context.textAfter,
  9570. space = after.match(/^\s*/)[0].length
  9571. let closed = (closing && after.slice(space, space + closing.length) == closing) || closedAt == context.pos + space
  9572. let aligned = align ? bracketedAligned(context) : null
  9573. if (aligned) return closed ? context.column(aligned.from) : context.column(aligned.to)
  9574. return context.baseIndent + (closed ? 0 : context.unit * units)
  9575. }
  9576. const flatIndent = context => context.baseIndent
  9577. function continuedIndent({ except, units = 1 } = {}) {
  9578. return context => {
  9579. let matchExcept = except && except.test(context.textAfter)
  9580. return context.baseIndent + (matchExcept ? 0 : units * context.unit)
  9581. }
  9582. }
  9583. const DontIndentBeyond = 200
  9584. function indentOnInput() {
  9585. return EditorState.transactionFilter.of(tr => {
  9586. if (!tr.docChanged || tr.annotation(Transaction.userEvent) != 'input') return tr
  9587. let rules = tr.startState.languageDataAt('indentOnInput', tr.startState.selection.main.head)
  9588. if (!rules.length) return tr
  9589. let doc = tr.newDoc,
  9590. { head } = tr.newSelection.main,
  9591. line = doc.lineAt(head)
  9592. if (head > line.from + DontIndentBeyond) return tr
  9593. let lineStart = doc.sliceString(line.from, head)
  9594. if (!rules.some(r => r.test(lineStart))) return tr
  9595. let { state } = tr,
  9596. last = -1,
  9597. changes = []
  9598. for (let _i108 = 0, _state$selection$rang4 = state.selection.ranges, _length108 = _state$selection$rang4.length; _i108 < _length108; _i108++) {
  9599. let { head } = _state$selection$rang4[_i108]
  9600. let line = state.doc.lineAt(head)
  9601. if (line.from == last) continue
  9602. last = line.from
  9603. let indent = getIndentation(state, line.from)
  9604. if (indent == null) continue
  9605. let cur = /^\s*/.exec(line.text)[0]
  9606. let norm = indentString(state, indent)
  9607. if (cur != norm) changes.push({ from: line.from, to: line.from + cur.length, insert: norm })
  9608. }
  9609. return changes.length ? [tr, { changes }] : tr
  9610. })
  9611. }
  9612. const foldService = Facet.define()
  9613. const foldNodeProp = new NodeProp()
  9614. function foldInside$1(node) {
  9615. let first = node.firstChild,
  9616. last = node.lastChild
  9617. return first && first.to < last.from ? { from: first.to, to: last.type.isError ? node.to : last.from } : null
  9618. }
  9619. function syntaxFolding(state, start, end) {
  9620. let tree = syntaxTree(state)
  9621. if (tree.length == 0) return null
  9622. let inner = tree.resolve(end)
  9623. let found = null
  9624. for (let cur = inner; cur; cur = cur.parent) {
  9625. if (cur.to <= end || cur.from > end) continue
  9626. if (found && cur.from < start) break
  9627. let prop = cur.type.prop(foldNodeProp)
  9628. if (prop) {
  9629. let value = prop(cur, state)
  9630. if (value && value.from <= end && value.from >= start && value.to > end) found = value
  9631. }
  9632. }
  9633. return found
  9634. }
  9635. function foldable(state, lineStart, lineEnd) {
  9636. for (let _i109 = 0, _state$facet2 = state.facet(foldService), _length109 = _state$facet2.length; _i109 < _length109; _i109++) {
  9637. let service = _state$facet2[_i109]
  9638. let result = service(state, lineStart, lineEnd)
  9639. if (result) return result
  9640. }
  9641. return syntaxFolding(state, lineStart, lineEnd)
  9642. }
  9643. var _m4 = Object.freeze({
  9644. __proto__: null,
  9645. EditorParseContext: EditorParseContext,
  9646. IndentContext: IndentContext,
  9647. Language: Language,
  9648. LanguageDescription: LanguageDescription,
  9649. LanguageSupport: LanguageSupport,
  9650. LezerLanguage: LezerLanguage,
  9651. TreeIndentContext: TreeIndentContext,
  9652. continuedIndent: continuedIndent,
  9653. defineLanguageFacet: defineLanguageFacet,
  9654. delimitedIndent: delimitedIndent,
  9655. ensureSyntaxTree: ensureSyntaxTree,
  9656. flatIndent: flatIndent,
  9657. foldInside: foldInside$1,
  9658. foldNodeProp: foldNodeProp,
  9659. foldService: foldService,
  9660. foldable: foldable,
  9661. getIndentUnit: getIndentUnit,
  9662. getIndentation: getIndentation,
  9663. indentNodeProp: indentNodeProp,
  9664. indentOnInput: indentOnInput,
  9665. indentService: indentService,
  9666. indentString: indentString,
  9667. indentUnit: indentUnit,
  9668. language: language,
  9669. languageDataProp: languageDataProp,
  9670. syntaxTree: syntaxTree
  9671. })
  9672. const baseTheme$7 = EditorView.baseTheme({ '.cm-matchingBracket': { color: '#0b0' }, '.cm-nonmatchingBracket': { color: '#a22' } })
  9673. const DefaultScanDist = 10000,
  9674. DefaultBrackets = '()[]{}'
  9675. const bracketMatchingConfig = Facet.define({
  9676. combine(configs) {
  9677. return combineConfig(configs, { afterCursor: true, brackets: DefaultBrackets, maxScanDistance: DefaultScanDist })
  9678. }
  9679. })
  9680. const matchingMark = Decoration.mark({ class: 'cm-matchingBracket' }),
  9681. nonmatchingMark = Decoration.mark({ class: 'cm-nonmatchingBracket' })
  9682. const bracketMatchingState = StateField.define({
  9683. create() {
  9684. return Decoration.none
  9685. },
  9686. update(deco, tr) {
  9687. if (!tr.docChanged && !tr.selection) return deco
  9688. let decorations = []
  9689. let config = tr.state.facet(bracketMatchingConfig)
  9690. for (let _i110 = 0, _tr$state$selection$r = tr.state.selection.ranges, _length110 = _tr$state$selection$r.length; _i110 < _length110; _i110++) {
  9691. let range = _tr$state$selection$r[_i110]
  9692. if (!range.empty) continue
  9693. let match =
  9694. matchBrackets(tr.state, range.head, -1, config) ||
  9695. (range.head > 0 && matchBrackets(tr.state, range.head - 1, 1, config)) ||
  9696. (config.afterCursor && (matchBrackets(tr.state, range.head, 1, config) || (range.head < tr.state.doc.length && matchBrackets(tr.state, range.head + 1, -1, config))))
  9697. if (!match) continue
  9698. let mark = match.matched ? matchingMark : nonmatchingMark
  9699. decorations.push(mark.range(match.start.from, match.start.to))
  9700. if (match.end) decorations.push(mark.range(match.end.from, match.end.to))
  9701. }
  9702. return Decoration.set(decorations, true)
  9703. },
  9704. provide: f => EditorView.decorations.from(f)
  9705. })
  9706. const bracketMatchingUnique = [bracketMatchingState, baseTheme$7]
  9707. function bracketMatching(config = {}) {
  9708. return [bracketMatchingConfig.of(config), bracketMatchingUnique]
  9709. }
  9710. function matchingNodes(node, dir, brackets) {
  9711. let byProp = node.prop(dir < 0 ? NodeProp.openedBy : NodeProp.closedBy)
  9712. if (byProp) return byProp
  9713. if (node.name.length == 1) {
  9714. let index = brackets.indexOf(node.name)
  9715. if (index > -1 && index % 2 == (dir < 0 ? 1 : 0)) return [brackets[index + dir]]
  9716. }
  9717. return null
  9718. }
  9719. function matchBrackets(state, pos, dir, config = {}) {
  9720. let maxScanDistance = config.maxScanDistance || DefaultScanDist,
  9721. brackets = config.brackets || DefaultBrackets
  9722. let tree = syntaxTree(state),
  9723. sub = tree.resolve(pos, dir),
  9724. matches
  9725. if ((matches = matchingNodes(sub.type, dir, brackets))) return matchMarkedBrackets(state, pos, dir, sub, matches, brackets)
  9726. else return matchPlainBrackets(state, pos, dir, tree, sub.type, maxScanDistance, brackets)
  9727. }
  9728. function matchMarkedBrackets(_state, _pos, dir, token, matching, brackets) {
  9729. let parent = token.parent,
  9730. firstToken = { from: token.from, to: token.to }
  9731. let depth = 0,
  9732. cursor = parent === null || parent === void 0 ? void 0 : parent.cursor
  9733. if (cursor && (dir < 0 ? cursor.childBefore(token.from) : cursor.childAfter(token.to)))
  9734. do {
  9735. if (dir < 0 ? cursor.to <= token.from : cursor.from >= token.to) {
  9736. if (depth == 0 && matching.indexOf(cursor.type.name) > -1) {
  9737. return { start: firstToken, end: { from: cursor.from, to: cursor.to }, matched: true }
  9738. } else if (matchingNodes(cursor.type, dir, brackets)) {
  9739. depth++
  9740. } else if (matchingNodes(cursor.type, -dir, brackets)) {
  9741. depth--
  9742. if (depth == 0) return { start: firstToken, end: { from: cursor.from, to: cursor.to }, matched: false }
  9743. }
  9744. }
  9745. } while (dir < 0 ? cursor.prevSibling() : cursor.nextSibling())
  9746. return { start: firstToken, matched: false }
  9747. }
  9748. function matchPlainBrackets(state, pos, dir, tree, tokenType, maxScanDistance, brackets) {
  9749. let startCh = dir < 0 ? state.sliceDoc(pos - 1, pos) : state.sliceDoc(pos, pos + 1)
  9750. let bracket = brackets.indexOf(startCh)
  9751. if (bracket < 0 || (bracket % 2 == 0) != dir > 0) return null
  9752. let startToken = { from: dir < 0 ? pos - 1 : pos, to: dir > 0 ? pos + 1 : pos }
  9753. let iter = state.doc.iterRange(pos, dir > 0 ? state.doc.length : 0),
  9754. depth = 0
  9755. for (let distance = 0; !iter.next().done && distance <= maxScanDistance; ) {
  9756. let text = iter.value
  9757. if (dir < 0) distance += text.length
  9758. let basePos = pos + distance * dir
  9759. for (let pos = dir > 0 ? 0 : text.length - 1, end = dir > 0 ? text.length : -1; pos != end; pos += dir) {
  9760. let found = brackets.indexOf(text[pos])
  9761. if (found < 0 || tree.resolve(basePos + pos, 1).type != tokenType) continue
  9762. if ((found % 2 == 0) == dir > 0) {
  9763. depth++
  9764. } else if (depth == 1) {
  9765. return { start: startToken, end: { from: basePos + pos, to: basePos + pos + 1 }, matched: found >> 1 == bracket >> 1 }
  9766. } else {
  9767. depth--
  9768. }
  9769. }
  9770. if (dir > 0) distance += text.length
  9771. }
  9772. return iter.done ? { start: startToken, matched: false } : null
  9773. }
  9774. var _m12 = Object.freeze({ __proto__: null, bracketMatching: bracketMatching, matchBrackets: matchBrackets })
  9775. function updateSel(sel, by) {
  9776. return EditorSelection.create(sel.ranges.map(by), sel.mainIndex)
  9777. }
  9778. function setSel(state, selection) {
  9779. return state.update({ selection, scrollIntoView: true, annotations: Transaction.userEvent.of('keyboardselection') })
  9780. }
  9781. function moveSel({ state, dispatch }, how) {
  9782. let selection = updateSel(state.selection, how)
  9783. if (selection.eq(state.selection)) return false
  9784. dispatch(setSel(state, selection))
  9785. return true
  9786. }
  9787. function rangeEnd(range, forward) {
  9788. return EditorSelection.cursor(forward ? range.to : range.from)
  9789. }
  9790. function cursorByChar(view, forward) {
  9791. return moveSel(view, range => (range.empty ? view.moveByChar(range, forward) : rangeEnd(range, forward)))
  9792. }
  9793. const cursorCharLeft = view => cursorByChar(view, view.textDirection != Direction.LTR)
  9794. const cursorCharRight = view => cursorByChar(view, view.textDirection == Direction.LTR)
  9795. const cursorCharForward = view => cursorByChar(view, true)
  9796. const cursorCharBackward = view => cursorByChar(view, false)
  9797. function cursorByGroup(view, forward) {
  9798. return moveSel(view, range => (range.empty ? view.moveByGroup(range, forward) : rangeEnd(range, forward)))
  9799. }
  9800. const cursorGroupLeft = view => cursorByGroup(view, view.textDirection != Direction.LTR)
  9801. const cursorGroupRight = view => cursorByGroup(view, view.textDirection == Direction.LTR)
  9802. const cursorGroupForward = view => cursorByGroup(view, true)
  9803. const cursorGroupBackward = view => cursorByGroup(view, false)
  9804. function interestingNode(state, node, bracketProp) {
  9805. if (node.type.prop(bracketProp)) return true
  9806. let len = node.to - node.from
  9807. return (len && (len > 2 || /[^\s,.;:]/.test(state.sliceDoc(node.from, node.to)))) || node.firstChild
  9808. }
  9809. function moveBySyntax(state, start, forward) {
  9810. let pos = syntaxTree(state).resolve(start.head)
  9811. let bracketProp = forward ? NodeProp.closedBy : NodeProp.openedBy
  9812. for (let at = start.head; ; ) {
  9813. let next = forward ? pos.childAfter(at) : pos.childBefore(at)
  9814. if (!next) break
  9815. if (interestingNode(state, next, bracketProp)) pos = next
  9816. else at = forward ? next.to : next.from
  9817. }
  9818. let bracket = pos.type.prop(bracketProp),
  9819. match,
  9820. newPos
  9821. if (bracket && (match = forward ? matchBrackets(state, pos.from, 1) : matchBrackets(state, pos.to, -1)) && match.matched) newPos = forward ? match.end.to : match.end.from
  9822. else newPos = forward ? pos.to : pos.from
  9823. return EditorSelection.cursor(newPos, forward ? -1 : 1)
  9824. }
  9825. const cursorSyntaxLeft = view => moveSel(view, range => moveBySyntax(view.state, range, view.textDirection != Direction.LTR))
  9826. const cursorSyntaxRight = view => moveSel(view, range => moveBySyntax(view.state, range, view.textDirection == Direction.LTR))
  9827. function cursorByLine(view, forward) {
  9828. return moveSel(view, range => (range.empty ? view.moveVertically(range, forward) : rangeEnd(range, forward)))
  9829. }
  9830. const cursorLineUp = view => cursorByLine(view, false)
  9831. const cursorLineDown = view => cursorByLine(view, true)
  9832. function cursorByPage(view, forward) {
  9833. return moveSel(view, range => (range.empty ? view.moveVertically(range, forward, view.dom.clientHeight) : rangeEnd(range, forward)))
  9834. }
  9835. const cursorPageUp = view => cursorByPage(view, false)
  9836. const cursorPageDown = view => cursorByPage(view, true)
  9837. function moveByLineBoundary(view, start, forward) {
  9838. let line = view.visualLineAt(start.head),
  9839. moved = view.moveToLineBoundary(start, forward)
  9840. if (moved.head == start.head && moved.head != (forward ? line.to : line.from)) moved = view.moveToLineBoundary(start, forward, false)
  9841. if (!forward && moved.head == line.from && line.length) {
  9842. let space = /^\s*/.exec(view.state.sliceDoc(line.from, Math.min(line.from + 100, line.to)))[0].length
  9843. if (space && start.head != line.from + space) moved = EditorSelection.cursor(line.from + space)
  9844. }
  9845. return moved
  9846. }
  9847. const cursorLineBoundaryForward = view => moveSel(view, range => moveByLineBoundary(view, range, true))
  9848. const cursorLineBoundaryBackward = view => moveSel(view, range => moveByLineBoundary(view, range, false))
  9849. const cursorLineStart = view => moveSel(view, range => EditorSelection.cursor(view.visualLineAt(range.head).from, 1))
  9850. const cursorLineEnd = view => moveSel(view, range => EditorSelection.cursor(view.visualLineAt(range.head).to, -1))
  9851. function toMatchingBracket(state, dispatch, extend) {
  9852. let found = false,
  9853. selection = updateSel(state.selection, range => {
  9854. let matching =
  9855. matchBrackets(state, range.head, -1) ||
  9856. matchBrackets(state, range.head, 1) ||
  9857. (range.head > 0 && matchBrackets(state, range.head - 1, 1)) ||
  9858. (range.head < state.doc.length && matchBrackets(state, range.head + 1, -1))
  9859. if (!matching || !matching.end) return range
  9860. found = true
  9861. let head = matching.start.from == range.head ? matching.end.to : matching.end.from
  9862. return extend ? EditorSelection.range(range.anchor, head) : EditorSelection.cursor(head)
  9863. })
  9864. if (!found) return false
  9865. dispatch(setSel(state, selection))
  9866. return true
  9867. }
  9868. const cursorMatchingBracket = ({ state, dispatch }) => toMatchingBracket(state, dispatch, false)
  9869. const selectMatchingBracket = ({ state, dispatch }) => toMatchingBracket(state, dispatch, true)
  9870. function extendSel(view, how) {
  9871. let selection = updateSel(view.state.selection, range => {
  9872. let head = how(range)
  9873. return EditorSelection.range(range.anchor, head.head, head.goalColumn)
  9874. })
  9875. if (selection.eq(view.state.selection)) return false
  9876. view.dispatch(setSel(view.state, selection))
  9877. return true
  9878. }
  9879. function selectByChar(view, forward) {
  9880. return extendSel(view, range => view.moveByChar(range, forward))
  9881. }
  9882. const selectCharLeft = view => selectByChar(view, view.textDirection != Direction.LTR)
  9883. const selectCharRight = view => selectByChar(view, view.textDirection == Direction.LTR)
  9884. const selectCharForward = view => selectByChar(view, true)
  9885. const selectCharBackward = view => selectByChar(view, false)
  9886. function selectByGroup(view, forward) {
  9887. return extendSel(view, range => view.moveByGroup(range, forward))
  9888. }
  9889. const selectGroupLeft = view => selectByGroup(view, view.textDirection != Direction.LTR)
  9890. const selectGroupRight = view => selectByGroup(view, view.textDirection == Direction.LTR)
  9891. const selectGroupForward = view => selectByGroup(view, true)
  9892. const selectGroupBackward = view => selectByGroup(view, false)
  9893. const selectSyntaxLeft = view => extendSel(view, range => moveBySyntax(view.state, range, view.textDirection != Direction.LTR))
  9894. const selectSyntaxRight = view => extendSel(view, range => moveBySyntax(view.state, range, view.textDirection == Direction.LTR))
  9895. function selectByLine(view, forward) {
  9896. return extendSel(view, range => view.moveVertically(range, forward))
  9897. }
  9898. const selectLineUp = view => selectByLine(view, false)
  9899. const selectLineDown = view => selectByLine(view, true)
  9900. function selectByPage(view, forward) {
  9901. return extendSel(view, range => view.moveVertically(range, forward, view.dom.clientHeight))
  9902. }
  9903. const selectPageUp = view => selectByPage(view, false)
  9904. const selectPageDown = view => selectByPage(view, true)
  9905. const selectLineBoundaryForward = view => extendSel(view, range => moveByLineBoundary(view, range, true))
  9906. const selectLineBoundaryBackward = view => extendSel(view, range => moveByLineBoundary(view, range, false))
  9907. const selectLineStart = view => extendSel(view, range => EditorSelection.cursor(view.visualLineAt(range.head).from))
  9908. const selectLineEnd = view => extendSel(view, range => EditorSelection.cursor(view.visualLineAt(range.head).to))
  9909. const cursorDocStart = ({ state, dispatch }) => {
  9910. dispatch(setSel(state, { anchor: 0 }))
  9911. return true
  9912. }
  9913. const cursorDocEnd = ({ state, dispatch }) => {
  9914. dispatch(setSel(state, { anchor: state.doc.length }))
  9915. return true
  9916. }
  9917. const selectDocStart = ({ state, dispatch }) => {
  9918. dispatch(setSel(state, { anchor: state.selection.main.anchor, head: 0 }))
  9919. return true
  9920. }
  9921. const selectDocEnd = ({ state, dispatch }) => {
  9922. dispatch(setSel(state, { anchor: state.selection.main.anchor, head: state.doc.length }))
  9923. return true
  9924. }
  9925. const selectAll = ({ state, dispatch }) => {
  9926. dispatch(state.update({ selection: { anchor: 0, head: state.doc.length }, annotations: Transaction.userEvent.of('keyboardselection') }))
  9927. return true
  9928. }
  9929. const selectLine = ({ state, dispatch }) => {
  9930. let ranges = selectedLineBlocks(state).map(({ from, to }) => EditorSelection.range(from, Math.min(to + 1, state.doc.length)))
  9931. dispatch(state.update({ selection: EditorSelection.create(ranges), annotations: Transaction.userEvent.of('keyboardselection') }))
  9932. return true
  9933. }
  9934. const selectParentSyntax = ({ state, dispatch }) => {
  9935. let selection = updateSel(state.selection, range => {
  9936. var _a
  9937. let context = syntaxTree(state).resolve(range.head, 1)
  9938. while (
  9939. !(
  9940. (context.from < range.from && context.to >= range.to) ||
  9941. (context.to > range.to && context.from <= range.from) ||
  9942. !((_a = context.parent) === null || _a === void 0 ? void 0 : _a.parent)
  9943. )
  9944. )
  9945. context = context.parent
  9946. return EditorSelection.range(context.to, context.from)
  9947. })
  9948. dispatch(setSel(state, selection))
  9949. return true
  9950. }
  9951. const simplifySelection = ({ state, dispatch }) => {
  9952. let cur = state.selection,
  9953. selection = null
  9954. if (cur.ranges.length > 1) selection = EditorSelection.create([cur.main])
  9955. else if (!cur.main.empty) selection = EditorSelection.create([EditorSelection.cursor(cur.main.head)])
  9956. if (!selection) return false
  9957. dispatch(setSel(state, selection))
  9958. return true
  9959. }
  9960. function deleteBy({ state, dispatch }, by) {
  9961. let changes = state.changeByRange(range => {
  9962. let { from, to } = range
  9963. if (from == to) {
  9964. let towards = by(from)
  9965. from = Math.min(from, towards)
  9966. to = Math.max(to, towards)
  9967. }
  9968. return from == to ? { range } : { changes: { from, to }, range: EditorSelection.cursor(from) }
  9969. })
  9970. if (changes.changes.empty) return false
  9971. dispatch(state.update(changes, { scrollIntoView: true, annotations: Transaction.userEvent.of('delete') }))
  9972. return true
  9973. }
  9974. const deleteByChar = (target, forward, codePoint) =>
  9975. deleteBy(target, pos => {
  9976. let { state } = target,
  9977. line = state.doc.lineAt(pos),
  9978. before
  9979. if (!forward && pos > line.from && pos < line.from + 200 && !/[^ \t]/.test((before = line.text.slice(0, pos - line.from)))) {
  9980. if (before[before.length - 1] == '\t') return pos - 1
  9981. let col = countColumn(before, 0, state.tabSize),
  9982. drop = col % getIndentUnit(state) || getIndentUnit(state)
  9983. for (let i = 0; i < drop && before[before.length - 1 - i] == ' '; i++) pos--
  9984. return pos
  9985. }
  9986. let targetPos
  9987. if (codePoint) {
  9988. let next = line.text.slice(pos - line.from + (forward ? 0 : -2), pos - line.from + (forward ? 2 : 0))
  9989. let size = next ? codePointSize(codePointAt(next, 0)) : 1
  9990. targetPos = forward ? Math.min(state.doc.length, pos + size) : Math.max(0, pos - size)
  9991. } else {
  9992. targetPos = findClusterBreak(line.text, pos - line.from, forward) + line.from
  9993. }
  9994. if (targetPos == pos && line.number != (forward ? state.doc.lines : 1)) targetPos += forward ? 1 : -1
  9995. return targetPos
  9996. })
  9997. const deleteCodePointBackward = view => deleteByChar(view, false, true)
  9998. const deleteCodePointForward = view => deleteByChar(view, true, true)
  9999. const deleteCharBackward = view => deleteByChar(view, false, false)
  10000. const deleteCharForward = view => deleteByChar(view, true, false)
  10001. const deleteByGroup = (target, forward) =>
  10002. deleteBy(target, start => {
  10003. let pos = start,
  10004. { state } = target,
  10005. line = state.doc.lineAt(pos)
  10006. let categorize = state.charCategorizer(pos)
  10007. for (let cat = null; ; ) {
  10008. if (pos == (forward ? line.to : line.from)) {
  10009. if (pos == start && line.number != (forward ? state.doc.lines : 1)) pos += forward ? 1 : -1
  10010. break
  10011. }
  10012. let next = findClusterBreak(line.text, pos - line.from, forward) + line.from
  10013. let nextChar = line.text.slice(Math.min(pos, next) - line.from, Math.max(pos, next) - line.from)
  10014. let nextCat = categorize(nextChar)
  10015. if (cat != null && nextCat != cat) break
  10016. if (nextChar != ' ' || pos != start) cat = nextCat
  10017. pos = next
  10018. }
  10019. return pos
  10020. })
  10021. const deleteGroupBackward = target => deleteByGroup(target, false)
  10022. const deleteGroupForward = target => deleteByGroup(target, true)
  10023. const deleteToLineEnd = view =>
  10024. deleteBy(view, pos => {
  10025. let lineEnd = view.visualLineAt(pos).to
  10026. if (pos < lineEnd) return lineEnd
  10027. return Math.min(view.state.doc.length, pos + 1)
  10028. })
  10029. const deleteToLineStart = view =>
  10030. deleteBy(view, pos => {
  10031. let lineStart = view.visualLineAt(pos).from
  10032. if (pos > lineStart) return lineStart
  10033. return Math.max(0, pos - 1)
  10034. })
  10035. const deleteTrailingWhitespace = ({ state, dispatch }) => {
  10036. let changes = []
  10037. for (let pos = 0, prev = '', iter = state.doc.iter(); ; ) {
  10038. iter.next()
  10039. if (iter.lineBreak || iter.done) {
  10040. let trailing = prev.search(/\s+$/)
  10041. if (trailing > -1) changes.push({ from: pos - (prev.length - trailing), to: pos })
  10042. if (iter.done) break
  10043. prev = ''
  10044. } else {
  10045. prev = iter.value
  10046. }
  10047. pos += iter.value.length
  10048. }
  10049. if (!changes.length) return false
  10050. dispatch(state.update({ changes }))
  10051. return true
  10052. }
  10053. const splitLine = ({ state, dispatch }) => {
  10054. let changes = state.changeByRange(range => {
  10055. return { changes: { from: range.from, to: range.to, insert: Text.of(['', '']) }, range: EditorSelection.cursor(range.from) }
  10056. })
  10057. dispatch(state.update(changes, { scrollIntoView: true, annotations: Transaction.userEvent.of('input') }))
  10058. return true
  10059. }
  10060. const transposeChars = ({ state, dispatch }) => {
  10061. let changes = state.changeByRange(range => {
  10062. if (!range.empty || range.from == 0 || range.from == state.doc.length) return { range }
  10063. let pos = range.from,
  10064. line = state.doc.lineAt(pos)
  10065. let from = pos == line.from ? pos - 1 : findClusterBreak(line.text, pos - line.from, false) + line.from
  10066. let to = pos == line.to ? pos + 1 : findClusterBreak(line.text, pos - line.from, true) + line.from
  10067. return { changes: { from, to, insert: state.doc.slice(pos, to).append(state.doc.slice(from, pos)) }, range: EditorSelection.cursor(to) }
  10068. })
  10069. if (changes.changes.empty) return false
  10070. dispatch(state.update(changes, { scrollIntoView: true }))
  10071. return true
  10072. }
  10073. function selectedLineBlocks(state) {
  10074. let blocks = [],
  10075. upto = -1
  10076. for (let _i111 = 0, _state$selection$rang5 = state.selection.ranges, _length111 = _state$selection$rang5.length; _i111 < _length111; _i111++) {
  10077. let range = _state$selection$rang5[_i111]
  10078. let startLine = state.doc.lineAt(range.from),
  10079. endLine = state.doc.lineAt(range.to)
  10080. if (upto == startLine.number) blocks[blocks.length - 1].to = endLine.to
  10081. else blocks.push({ from: startLine.from, to: endLine.to })
  10082. upto = endLine.number
  10083. }
  10084. return blocks
  10085. }
  10086. function moveLine(state, dispatch, forward) {
  10087. let changes = []
  10088. for (let _i112 = 0, _selectedLineBlocks = selectedLineBlocks(state), _length112 = _selectedLineBlocks.length; _i112 < _length112; _i112++) {
  10089. let block = _selectedLineBlocks[_i112]
  10090. if (forward ? block.to == state.doc.length : block.from == 0) continue
  10091. let nextLine = state.doc.lineAt(forward ? block.to + 1 : block.from - 1)
  10092. if (forward) changes.push({ from: block.to, to: nextLine.to }, { from: block.from, insert: nextLine.text + state.lineBreak })
  10093. else changes.push({ from: nextLine.from, to: block.from }, { from: block.to, insert: state.lineBreak + nextLine.text })
  10094. }
  10095. if (!changes.length) return false
  10096. dispatch(state.update({ changes, scrollIntoView: true }))
  10097. return true
  10098. }
  10099. const moveLineUp = ({ state, dispatch }) => moveLine(state, dispatch, false)
  10100. const moveLineDown = ({ state, dispatch }) => moveLine(state, dispatch, true)
  10101. function copyLine(state, dispatch, forward) {
  10102. let changes = []
  10103. for (let _i113 = 0, _selectedLineBlocks2 = selectedLineBlocks(state), _length113 = _selectedLineBlocks2.length; _i113 < _length113; _i113++) {
  10104. let block = _selectedLineBlocks2[_i113]
  10105. if (forward) changes.push({ from: block.from, insert: state.doc.slice(block.from, block.to) + state.lineBreak })
  10106. else changes.push({ from: block.to, insert: state.lineBreak + state.doc.slice(block.from, block.to) })
  10107. }
  10108. dispatch(state.update({ changes, scrollIntoView: true }))
  10109. return true
  10110. }
  10111. const copyLineUp = ({ state, dispatch }) => copyLine(state, dispatch, false)
  10112. const copyLineDown = ({ state, dispatch }) => copyLine(state, dispatch, true)
  10113. const deleteLine = view => {
  10114. let { state } = view,
  10115. changes = state.changes(
  10116. selectedLineBlocks(state).map(({ from, to }) => {
  10117. if (from > 0) from--
  10118. else if (to < state.doc.length) to++
  10119. return { from, to }
  10120. })
  10121. )
  10122. let selection = updateSel(state.selection, range => view.moveVertically(range, true)).map(changes)
  10123. view.dispatch({ changes, selection, scrollIntoView: true })
  10124. return true
  10125. }
  10126. const insertNewline = ({ state, dispatch }) => {
  10127. dispatch(state.update(state.replaceSelection(state.lineBreak), { scrollIntoView: true }))
  10128. return true
  10129. }
  10130. function isBetweenBrackets(state, pos) {
  10131. if (/\(\)|\[\]|\{\}/.test(state.sliceDoc(pos - 1, pos + 1))) return { from: pos, to: pos }
  10132. let context = syntaxTree(state).resolve(pos)
  10133. let before = context.childBefore(pos),
  10134. after = context.childAfter(pos),
  10135. closedBy
  10136. if (
  10137. before &&
  10138. after &&
  10139. before.to <= pos &&
  10140. after.from >= pos &&
  10141. (closedBy = before.type.prop(NodeProp.closedBy)) &&
  10142. closedBy.indexOf(after.name) > -1 &&
  10143. state.doc.lineAt(before.to).from == state.doc.lineAt(after.from).from
  10144. )
  10145. return { from: before.to, to: after.from }
  10146. return null
  10147. }
  10148. const insertNewlineAndIndent = ({ state, dispatch }) => {
  10149. let changes = state.changeByRange(({ from, to }) => {
  10150. let explode = from == to && isBetweenBrackets(state, from)
  10151. let cx = new IndentContext(state, { simulateBreak: from, simulateDoubleBreak: !!explode })
  10152. let indent = getIndentation(cx, from)
  10153. if (indent == null) indent = /^\s*/.exec(state.doc.lineAt(from).text)[0].length
  10154. let line = state.doc.lineAt(from)
  10155. while (to < line.to && /\s/.test(line.text.slice(to - line.from, to + 1 - line.from))) to++
  10156. if (explode) ({ from, to } = explode)
  10157. else if (from > line.from && from < line.from + 100 && !/\S/.test(line.text.slice(0, from))) from = line.from
  10158. let insert = ['', indentString(state, indent)]
  10159. if (explode) insert.push(indentString(state, cx.lineIndent(line)))
  10160. return { changes: { from, to, insert: Text.of(insert) }, range: EditorSelection.cursor(from + 1 + insert[1].length) }
  10161. })
  10162. dispatch(state.update(changes, { scrollIntoView: true }))
  10163. return true
  10164. }
  10165. function changeBySelectedLine(state, f) {
  10166. let atLine = -1
  10167. return state.changeByRange(range => {
  10168. let changes = []
  10169. for (let pos = range.from; pos <= range.to; ) {
  10170. let line = state.doc.lineAt(pos)
  10171. if (line.number > atLine && (range.empty || range.to > line.from)) {
  10172. f(line, changes, range)
  10173. atLine = line.number
  10174. }
  10175. pos = line.to + 1
  10176. }
  10177. let changeSet = state.changes(changes)
  10178. return { changes, range: EditorSelection.range(changeSet.mapPos(range.anchor, 1), changeSet.mapPos(range.head, 1)) }
  10179. })
  10180. }
  10181. const indentSelection = ({ state, dispatch }) => {
  10182. let updated = Object.create(null)
  10183. let context = new IndentContext(state, {
  10184. overrideIndentation: start => {
  10185. let found = updated[start]
  10186. return found == null ? -1 : found
  10187. }
  10188. })
  10189. let changes = changeBySelectedLine(state, (line, changes, range) => {
  10190. let indent = getIndentation(context, line.from)
  10191. if (indent == null) return
  10192. let cur = /^\s*/.exec(line.text)[0]
  10193. let norm = indentString(state, indent)
  10194. if (cur != norm || range.from < line.from + cur.length) {
  10195. updated[line.from] = indent
  10196. changes.push({ from: line.from, to: line.from + cur.length, insert: norm })
  10197. }
  10198. })
  10199. if (!changes.changes.empty) dispatch(state.update(changes))
  10200. return true
  10201. }
  10202. const indentMore = ({ state, dispatch }) => {
  10203. dispatch(
  10204. state.update(
  10205. changeBySelectedLine(state, (line, changes) => {
  10206. changes.push({ from: line.from, insert: state.facet(indentUnit) })
  10207. })
  10208. )
  10209. )
  10210. return true
  10211. }
  10212. const indentLess = ({ state, dispatch }) => {
  10213. dispatch(
  10214. state.update(
  10215. changeBySelectedLine(state, (line, changes) => {
  10216. let space = /^\s*/.exec(line.text)[0]
  10217. if (!space) return
  10218. let col = countColumn(space, 0, state.tabSize),
  10219. keep = 0
  10220. let insert = indentString(state, Math.max(0, col - getIndentUnit(state)))
  10221. while (keep < space.length && keep < insert.length && space.charCodeAt(keep) == insert.charCodeAt(keep)) keep++
  10222. changes.push({ from: line.from + keep, to: line.from + space.length, insert: insert.slice(keep) })
  10223. })
  10224. )
  10225. )
  10226. return true
  10227. }
  10228. const insertTab = ({ state, dispatch }) => {
  10229. if (state.selection.ranges.some(r => !r.empty)) return indentMore({ state, dispatch })
  10230. dispatch(state.update(state.replaceSelection('\t'), { scrollIntoView: true, annotations: Transaction.userEvent.of('input') }))
  10231. return true
  10232. }
  10233. const emacsStyleKeymap = [
  10234. { key: 'Ctrl-b', run: cursorCharLeft, shift: selectCharLeft, preventDefault: true },
  10235. { key: 'Ctrl-f', run: cursorCharRight, shift: selectCharRight },
  10236. { key: 'Ctrl-p', run: cursorLineUp, shift: selectLineUp },
  10237. { key: 'Ctrl-n', run: cursorLineDown, shift: selectLineDown },
  10238. { key: 'Ctrl-a', run: cursorLineStart, shift: selectLineStart },
  10239. { key: 'Ctrl-e', run: cursorLineEnd, shift: selectLineEnd },
  10240. { key: 'Ctrl-d', run: deleteCharForward },
  10241. { key: 'Ctrl-h', run: deleteCharBackward },
  10242. { key: 'Ctrl-k', run: deleteToLineEnd },
  10243. { key: 'Alt-d', run: deleteGroupForward },
  10244. { key: 'Ctrl-Alt-h', run: deleteGroupBackward },
  10245. { key: 'Ctrl-o', run: splitLine },
  10246. { key: 'Ctrl-t', run: transposeChars },
  10247. { key: 'Alt-f', run: cursorGroupForward, shift: selectGroupForward },
  10248. { key: 'Alt-b', run: cursorGroupBackward, shift: selectGroupBackward },
  10249. { key: 'Alt-<', run: cursorDocStart },
  10250. { key: 'Alt->', run: cursorDocEnd },
  10251. { key: 'Ctrl-v', run: cursorPageDown },
  10252. { key: 'Alt-v', run: cursorPageUp }
  10253. ]
  10254. const standardKeymap = [
  10255. { key: 'ArrowLeft', run: cursorCharLeft, shift: selectCharLeft, preventDefault: true },
  10256. { key: 'Mod-ArrowLeft', mac: 'Alt-ArrowLeft', run: cursorGroupLeft, shift: selectGroupLeft },
  10257. { mac: 'Cmd-ArrowLeft', run: cursorLineBoundaryBackward, shift: selectLineBoundaryBackward },
  10258. { key: 'ArrowRight', run: cursorCharRight, shift: selectCharRight, preventDefault: true },
  10259. { key: 'Mod-ArrowRight', mac: 'Alt-ArrowRight', run: cursorGroupRight, shift: selectGroupRight },
  10260. { mac: 'Cmd-ArrowRight', run: cursorLineBoundaryForward, shift: selectLineBoundaryForward },
  10261. { key: 'ArrowUp', run: cursorLineUp, shift: selectLineUp, preventDefault: true },
  10262. { mac: 'Cmd-ArrowUp', run: cursorDocStart, shift: selectDocStart },
  10263. { mac: 'Ctrl-ArrowUp', run: cursorPageUp, shift: selectPageUp },
  10264. { key: 'ArrowDown', run: cursorLineDown, shift: selectLineDown, preventDefault: true },
  10265. { mac: 'Cmd-ArrowDown', run: cursorDocEnd, shift: selectDocEnd },
  10266. { mac: 'Ctrl-ArrowDown', run: cursorPageDown, shift: selectPageDown },
  10267. { key: 'PageUp', run: cursorPageUp, shift: selectPageUp },
  10268. { key: 'PageDown', run: cursorPageDown, shift: selectPageDown },
  10269. { key: 'Home', run: cursorLineBoundaryBackward, shift: selectLineBoundaryBackward },
  10270. { key: 'Mod-Home', run: cursorDocStart, shift: selectDocStart },
  10271. { key: 'End', run: cursorLineBoundaryForward, shift: selectLineBoundaryForward },
  10272. { key: 'Mod-End', run: cursorDocEnd, shift: selectDocEnd },
  10273. { key: 'Enter', run: insertNewlineAndIndent },
  10274. { key: 'Mod-a', run: selectAll },
  10275. { key: 'Backspace', run: deleteCodePointBackward, shift: deleteCodePointBackward },
  10276. { key: 'Delete', run: deleteCharForward, shift: deleteCharForward },
  10277. { key: 'Mod-Backspace', mac: 'Alt-Backspace', run: deleteGroupBackward },
  10278. { key: 'Mod-Delete', mac: 'Alt-Delete', run: deleteGroupForward },
  10279. { mac: 'Mod-Backspace', run: deleteToLineStart },
  10280. { mac: 'Mod-Delete', run: deleteToLineEnd }
  10281. ].concat(emacsStyleKeymap.map(b => ({ mac: b.key, run: b.run, shift: b.shift })))
  10282. const defaultKeymap = [
  10283. { key: 'Alt-ArrowLeft', mac: 'Ctrl-ArrowLeft', run: cursorSyntaxLeft, shift: selectSyntaxLeft },
  10284. { key: 'Alt-ArrowRight', mac: 'Ctrl-ArrowRight', run: cursorSyntaxRight, shift: selectSyntaxRight },
  10285. { key: 'Alt-ArrowUp', run: moveLineUp },
  10286. { key: 'Shift-Alt-ArrowUp', run: copyLineUp },
  10287. { key: 'Alt-ArrowDown', run: moveLineDown },
  10288. { key: 'Shift-Alt-ArrowDown', run: copyLineDown },
  10289. { key: 'Escape', run: simplifySelection },
  10290. { key: 'Alt-l', mac: 'Ctrl-l', run: selectLine },
  10291. { key: 'Mod-i', run: selectParentSyntax, preventDefault: true },
  10292. { key: 'Mod-[', run: indentLess },
  10293. { key: 'Mod-]', run: indentMore },
  10294. { key: 'Mod-Alt-\\', run: indentSelection },
  10295. { key: 'Shift-Mod-k', run: deleteLine },
  10296. { key: 'Shift-Mod-\\', run: cursorMatchingBracket }
  10297. ].concat(standardKeymap)
  10298. const defaultTabBinding = { key: 'Tab', run: insertTab, shift: indentSelection }
  10299. var _m5 = Object.freeze({
  10300. __proto__: null,
  10301. copyLineDown: copyLineDown,
  10302. copyLineUp: copyLineUp,
  10303. cursorCharBackward: cursorCharBackward,
  10304. cursorCharForward: cursorCharForward,
  10305. cursorCharLeft: cursorCharLeft,
  10306. cursorCharRight: cursorCharRight,
  10307. cursorDocEnd: cursorDocEnd,
  10308. cursorDocStart: cursorDocStart,
  10309. cursorGroupBackward: cursorGroupBackward,
  10310. cursorGroupForward: cursorGroupForward,
  10311. cursorGroupLeft: cursorGroupLeft,
  10312. cursorGroupRight: cursorGroupRight,
  10313. cursorLineBoundaryBackward: cursorLineBoundaryBackward,
  10314. cursorLineBoundaryForward: cursorLineBoundaryForward,
  10315. cursorLineDown: cursorLineDown,
  10316. cursorLineEnd: cursorLineEnd,
  10317. cursorLineStart: cursorLineStart,
  10318. cursorLineUp: cursorLineUp,
  10319. cursorMatchingBracket: cursorMatchingBracket,
  10320. cursorPageDown: cursorPageDown,
  10321. cursorPageUp: cursorPageUp,
  10322. cursorSyntaxLeft: cursorSyntaxLeft,
  10323. cursorSyntaxRight: cursorSyntaxRight,
  10324. defaultKeymap: defaultKeymap,
  10325. defaultTabBinding: defaultTabBinding,
  10326. deleteCharBackward: deleteCharBackward,
  10327. deleteCharForward: deleteCharForward,
  10328. deleteCodePointBackward: deleteCodePointBackward,
  10329. deleteCodePointForward: deleteCodePointForward,
  10330. deleteGroupBackward: deleteGroupBackward,
  10331. deleteGroupForward: deleteGroupForward,
  10332. deleteLine: deleteLine,
  10333. deleteToLineEnd: deleteToLineEnd,
  10334. deleteToLineStart: deleteToLineStart,
  10335. deleteTrailingWhitespace: deleteTrailingWhitespace,
  10336. emacsStyleKeymap: emacsStyleKeymap,
  10337. indentLess: indentLess,
  10338. indentMore: indentMore,
  10339. indentSelection: indentSelection,
  10340. insertNewline: insertNewline,
  10341. insertNewlineAndIndent: insertNewlineAndIndent,
  10342. insertTab: insertTab,
  10343. moveLineDown: moveLineDown,
  10344. moveLineUp: moveLineUp,
  10345. selectAll: selectAll,
  10346. selectCharBackward: selectCharBackward,
  10347. selectCharForward: selectCharForward,
  10348. selectCharLeft: selectCharLeft,
  10349. selectCharRight: selectCharRight,
  10350. selectDocEnd: selectDocEnd,
  10351. selectDocStart: selectDocStart,
  10352. selectGroupBackward: selectGroupBackward,
  10353. selectGroupForward: selectGroupForward,
  10354. selectGroupLeft: selectGroupLeft,
  10355. selectGroupRight: selectGroupRight,
  10356. selectLine: selectLine,
  10357. selectLineBoundaryBackward: selectLineBoundaryBackward,
  10358. selectLineBoundaryForward: selectLineBoundaryForward,
  10359. selectLineDown: selectLineDown,
  10360. selectLineEnd: selectLineEnd,
  10361. selectLineStart: selectLineStart,
  10362. selectLineUp: selectLineUp,
  10363. selectMatchingBracket: selectMatchingBracket,
  10364. selectPageDown: selectPageDown,
  10365. selectPageUp: selectPageUp,
  10366. selectParentSyntax: selectParentSyntax,
  10367. selectSyntaxLeft: selectSyntaxLeft,
  10368. selectSyntaxRight: selectSyntaxRight,
  10369. simplifySelection: simplifySelection,
  10370. splitLine: splitLine,
  10371. standardKeymap: standardKeymap,
  10372. transposeChars: transposeChars
  10373. })
  10374. const panelConfig = Facet.define({
  10375. combine(configs) {
  10376. let topContainer, bottomContainer
  10377. for (let _i114 = 0, _length114 = configs.length; _i114 < _length114; _i114++) {
  10378. let c = configs[_i114]
  10379. topContainer = topContainer || c.topContainer
  10380. bottomContainer = bottomContainer || c.bottomContainer
  10381. }
  10382. return { topContainer, bottomContainer }
  10383. }
  10384. })
  10385. function panels(config) {
  10386. return config ? [panelConfig.of(config)] : []
  10387. }
  10388. function getPanel(view, panel) {
  10389. let plugin = view.plugin(panelPlugin)
  10390. let index = plugin ? plugin.specs.indexOf(panel) : -1
  10391. return index > -1 ? plugin.panels[index] : null
  10392. }
  10393. const panelPlugin = ViewPlugin.fromClass(
  10394. class {
  10395. constructor(view) {
  10396. this.input = view.state.facet(showPanel)
  10397. this.specs = this.input.filter(s => s)
  10398. this.panels = this.specs.map(spec => spec(view))
  10399. let conf = view.state.facet(panelConfig)
  10400. this.top = new PanelGroup(view, true, conf.topContainer)
  10401. this.bottom = new PanelGroup(view, false, conf.bottomContainer)
  10402. this.top.sync(this.panels.filter(p => p.top))
  10403. this.bottom.sync(this.panels.filter(p => !p.top))
  10404. for (let _i115 = 0, _this$panels = this.panels, _length115 = _this$panels.length; _i115 < _length115; _i115++) {
  10405. let p = _this$panels[_i115]
  10406. p.dom.classList.add('cm-panel')
  10407. if (p.class) p.dom.classList.add(p.class)
  10408. if (p.mount) p.mount()
  10409. }
  10410. }
  10411. update(update) {
  10412. let conf = update.state.facet(panelConfig)
  10413. if (this.top.container != conf.topContainer) {
  10414. this.top.sync([])
  10415. this.top = new PanelGroup(update.view, true, conf.topContainer)
  10416. }
  10417. if (this.bottom.container != conf.bottomContainer) {
  10418. this.bottom.sync([])
  10419. this.bottom = new PanelGroup(update.view, false, conf.bottomContainer)
  10420. }
  10421. this.top.syncClasses()
  10422. this.bottom.syncClasses()
  10423. let input = update.state.facet(showPanel)
  10424. if (input != this.input) {
  10425. let specs = input.filter(x => x)
  10426. let panels = [],
  10427. top = [],
  10428. bottom = [],
  10429. mount = []
  10430. for (let _i116 = 0, _length116 = specs.length; _i116 < _length116; _i116++) {
  10431. let spec = specs[_i116]
  10432. let known = this.specs.indexOf(spec),
  10433. panel
  10434. if (known < 0) {
  10435. panel = spec(update.view)
  10436. mount.push(panel)
  10437. } else {
  10438. panel = this.panels[known]
  10439. if (panel.update) panel.update(update)
  10440. }
  10441. panels.push(panel)
  10442. ;(panel.top ? top : bottom).push(panel)
  10443. }
  10444. this.specs = specs
  10445. this.panels = panels
  10446. this.top.sync(top)
  10447. this.bottom.sync(bottom)
  10448. for (let _i117 = 0, _length117 = mount.length; _i117 < _length117; _i117++) {
  10449. let p = mount[_i117]
  10450. p.dom.classList.add('cm-panel')
  10451. if (p.class) p.dom.classList.add(p.class)
  10452. if (p.mount) p.mount()
  10453. }
  10454. } else {
  10455. for (let _i118 = 0, _this$panels2 = this.panels, _length118 = _this$panels2.length; _i118 < _length118; _i118++) {
  10456. let p = _this$panels2[_i118]
  10457. if (p.update) p.update(update)
  10458. }
  10459. }
  10460. }
  10461. destroy() {
  10462. this.top.sync([])
  10463. this.bottom.sync([])
  10464. }
  10465. },
  10466. { provide: PluginField.scrollMargins.from(value => ({ top: value.top.scrollMargin(), bottom: value.bottom.scrollMargin() })) }
  10467. )
  10468. class PanelGroup {
  10469. constructor(view, top, container) {
  10470. this.view = view
  10471. this.top = top
  10472. this.container = container
  10473. this.dom = undefined
  10474. this.classes = ''
  10475. this.panels = []
  10476. this.syncClasses()
  10477. }
  10478. sync(panels) {
  10479. this.panels = panels
  10480. this.syncDOM()
  10481. }
  10482. syncDOM() {
  10483. if (this.panels.length == 0) {
  10484. if (this.dom) {
  10485. this.dom.remove()
  10486. this.dom = undefined
  10487. }
  10488. return
  10489. }
  10490. if (!this.dom) {
  10491. this.dom = document.createElement('div')
  10492. this.dom.className = this.top ? 'cm-panels cm-panels-top' : 'cm-panels cm-panels-bottom'
  10493. this.dom.style[this.top ? 'top' : 'bottom'] = '0'
  10494. let parent = this.container || this.view.dom
  10495. parent.insertBefore(this.dom, this.top ? parent.firstChild : null)
  10496. }
  10497. let curDOM = this.dom.firstChild
  10498. for (let _i119 = 0, _this$panels3 = this.panels, _length119 = _this$panels3.length; _i119 < _length119; _i119++) {
  10499. let panel = _this$panels3[_i119]
  10500. if (panel.dom.parentNode == this.dom) {
  10501. while (curDOM != panel.dom) curDOM = rm(curDOM)
  10502. curDOM = curDOM.nextSibling
  10503. } else {
  10504. this.dom.insertBefore(panel.dom, curDOM)
  10505. }
  10506. }
  10507. while (curDOM) curDOM = rm(curDOM)
  10508. }
  10509. scrollMargin() {
  10510. return !this.dom || this.container
  10511. ? 0
  10512. : Math.max(
  10513. 0,
  10514. this.top
  10515. ? this.dom.getBoundingClientRect().bottom - Math.max(0, this.view.scrollDOM.getBoundingClientRect().top)
  10516. : Math.min(innerHeight, this.view.scrollDOM.getBoundingClientRect().bottom) - this.dom.getBoundingClientRect().top
  10517. )
  10518. }
  10519. syncClasses() {
  10520. if (!this.container || this.classes == this.view.themeClasses) return
  10521. for (let _i120 = 0, _this$classes$split = this.classes.split(' '), _length120 = _this$classes$split.length; _i120 < _length120; _i120++) {
  10522. let cls = _this$classes$split[_i120]
  10523. if (cls) this.container.classList.remove(cls)
  10524. }
  10525. for (let _i121 = 0, _this$classes$split2 = (this.classes = this.view.themeClasses).split(' '), _length121 = _this$classes$split2.length; _i121 < _length121; _i121++) {
  10526. let cls = _this$classes$split2[_i121]
  10527. if (cls) this.container.classList.add(cls)
  10528. }
  10529. }
  10530. }
  10531. function rm(node) {
  10532. let next = node.nextSibling
  10533. node.remove()
  10534. return next
  10535. }
  10536. const baseTheme$6 = EditorView.baseTheme({
  10537. '.cm-panels': { boxSizing: 'border-box', position: 'sticky', left: 0, right: 0 },
  10538. '&light .cm-panels': { backgroundColor: '#f5f5f5', color: 'black' },
  10539. '&light .cm-panels-top': { borderBottom: '1px solid #ddd' },
  10540. '&light .cm-panels-bottom': { borderTop: '1px solid #ddd' },
  10541. '&dark .cm-panels': { backgroundColor: '#333338', color: 'white' }
  10542. })
  10543. const showPanel = Facet.define({ enables: [panelPlugin, baseTheme$6] })
  10544. var _m6 = Object.freeze({ __proto__: null, getPanel: getPanel, panels: panels, showPanel: showPanel })
  10545. const ios =
  10546. typeof navigator != 'undefined' &&
  10547. !/Edge\/(\d+)/.exec(navigator.userAgent) &&
  10548. /Apple Computer/.test(navigator.vendor) &&
  10549. (/Mobile\/\w+/.test(navigator.userAgent) || navigator.maxTouchPoints > 2)
  10550. const Outside = '-10000px'
  10551. class TooltipViewManager {
  10552. constructor(view, facet, createTooltipView) {
  10553. this.facet = facet
  10554. this.createTooltipView = createTooltipView
  10555. this.input = view.state.facet(facet)
  10556. this.tooltips = this.input.filter(t => t)
  10557. this.tooltipViews = this.tooltips.map(createTooltipView)
  10558. }
  10559. update(update) {
  10560. const input = update.state.facet(this.facet)
  10561. const tooltips = input.filter(x => x)
  10562. if (input === this.input) {
  10563. for (let _i122 = 0, _this$tooltipViews = this.tooltipViews, _length122 = _this$tooltipViews.length; _i122 < _length122; _i122++) {
  10564. let t = _this$tooltipViews[_i122]
  10565. if (t.update) t.update(update)
  10566. }
  10567. return { shouldMeasure: false }
  10568. }
  10569. let tooltipViews = []
  10570. for (let i = 0; i < tooltips.length; i++) {
  10571. let tip = tooltips[i],
  10572. known = -1
  10573. if (!tip) continue
  10574. for (let i = 0; i < this.tooltips.length; i++) {
  10575. let other = this.tooltips[i]
  10576. if (other && other.create == tip.create) known = i
  10577. }
  10578. if (known < 0) {
  10579. tooltipViews[i] = this.createTooltipView(tip)
  10580. } else {
  10581. let tooltipView = (tooltipViews[i] = this.tooltipViews[known])
  10582. if (tooltipView.update) tooltipView.update(update)
  10583. }
  10584. }
  10585. for (let _i123 = 0, _this$tooltipViews2 = this.tooltipViews, _length123 = _this$tooltipViews2.length; _i123 < _length123; _i123++) {
  10586. let t = _this$tooltipViews2[_i123]
  10587. if (tooltipViews.indexOf(t) < 0) t.dom.remove()
  10588. }
  10589. this.input = input
  10590. this.tooltips = tooltips
  10591. this.tooltipViews = tooltipViews
  10592. return { shouldMeasure: true }
  10593. }
  10594. }
  10595. const tooltipPlugin = ViewPlugin.fromClass(
  10596. class {
  10597. constructor(view) {
  10598. this.view = view
  10599. this.inView = true
  10600. this.measureReq = { read: this.readMeasure.bind(this), write: this.writeMeasure.bind(this), key: this }
  10601. this.manager = new TooltipViewManager(view, showTooltip, t => this.createTooltip(t))
  10602. }
  10603. update(update) {
  10604. const { shouldMeasure } = this.manager.update(update)
  10605. if (shouldMeasure) this.maybeMeasure()
  10606. }
  10607. createTooltip(tooltip) {
  10608. let tooltipView = tooltip.create(this.view)
  10609. tooltipView.dom.classList.add('cm-tooltip')
  10610. if (tooltip.class) tooltipView.dom.classList.add(tooltip.class)
  10611. tooltipView.dom.style.top = Outside
  10612. this.view.dom.appendChild(tooltipView.dom)
  10613. if (tooltipView.mount) tooltipView.mount(this.view)
  10614. return tooltipView
  10615. }
  10616. destroy() {
  10617. for (let _i124 = 0, _this$manager$tooltip = this.manager.tooltipViews, _length124 = _this$manager$tooltip.length; _i124 < _length124; _i124++) {
  10618. let { dom } = _this$manager$tooltip[_i124]
  10619. dom.remove()
  10620. }
  10621. }
  10622. readMeasure() {
  10623. return {
  10624. editor: this.view.dom.getBoundingClientRect(),
  10625. pos: this.manager.tooltips.map(t => this.view.coordsAtPos(t.pos)),
  10626. size: this.manager.tooltipViews.map(({ dom }) => dom.getBoundingClientRect()),
  10627. innerWidth: window.innerWidth,
  10628. innerHeight: window.innerHeight
  10629. }
  10630. }
  10631. writeMeasure(measured) {
  10632. let { editor } = measured
  10633. let others = []
  10634. for (let i = 0; i < this.manager.tooltips.length; i++) {
  10635. let tooltip = this.manager.tooltips[i],
  10636. tView = this.manager.tooltipViews[i],
  10637. { dom } = tView
  10638. let pos = measured.pos[i],
  10639. size = measured.size[i]
  10640. if (!pos || pos.bottom <= editor.top || pos.top >= editor.bottom || pos.right <= editor.left || pos.left >= editor.right) {
  10641. dom.style.top = Outside
  10642. continue
  10643. }
  10644. let width = size.right - size.left,
  10645. height = size.bottom - size.top
  10646. let left = this.view.textDirection == Direction.LTR ? Math.min(pos.left, measured.innerWidth - width) : Math.max(0, pos.left - width)
  10647. let above = !!tooltip.above
  10648. if (!tooltip.strictSide && (above ? pos.top - (size.bottom - size.top) < 0 : pos.bottom + (size.bottom - size.top) > measured.innerHeight)) above = !above
  10649. let top = above ? pos.top - height : pos.bottom,
  10650. right = left + width
  10651. for (let _i125 = 0, _length125 = others.length; _i125 < _length125; _i125++) {
  10652. let r = others[_i125]
  10653. if (r.left < right && r.right > left && r.top < top + height && r.bottom > top) top = above ? r.top - height : r.bottom
  10654. }
  10655. if (ios) {
  10656. dom.style.top = top - editor.top + 'px'
  10657. dom.style.left = left - editor.left + 'px'
  10658. dom.style.position = 'absolute'
  10659. } else {
  10660. dom.style.top = top + 'px'
  10661. dom.style.left = left + 'px'
  10662. }
  10663. others.push({ left, top, right, bottom: top + height })
  10664. dom.classList.toggle('cm-tooltip-above', above)
  10665. dom.classList.toggle('cm-tooltip-below', !above)
  10666. if (tView.positioned) tView.positioned()
  10667. }
  10668. }
  10669. maybeMeasure() {
  10670. if (this.manager.tooltips.length) {
  10671. if (this.view.inView) this.view.requestMeasure(this.measureReq)
  10672. if (this.inView != this.view.inView) {
  10673. this.inView = this.view.inView
  10674. if (!this.inView)
  10675. for (let _i126 = 0, _this$manager$tooltip2 = this.manager.tooltipViews, _length126 = _this$manager$tooltip2.length; _i126 < _length126; _i126++) {
  10676. let tv = _this$manager$tooltip2[_i126]
  10677. tv.dom.style.top = Outside
  10678. }
  10679. }
  10680. }
  10681. }
  10682. },
  10683. {
  10684. eventHandlers: {
  10685. scroll() {
  10686. this.maybeMeasure()
  10687. }
  10688. }
  10689. }
  10690. )
  10691. const baseTheme$5 = EditorView.baseTheme({
  10692. '.cm-tooltip': { position: 'fixed', zIndex: 100 },
  10693. '&light .cm-tooltip': { border: '1px solid #ddd', backgroundColor: '#f5f5f5' },
  10694. '&light .cm-tooltip-section:not(:first-child)': { borderTop: '1px solid #ddd' },
  10695. '&dark .cm-tooltip': { backgroundColor: '#333338', color: 'white' }
  10696. })
  10697. function tooltips() {
  10698. return []
  10699. }
  10700. const showTooltip = Facet.define({ enables: [tooltipPlugin, baseTheme$5] })
  10701. const showHoverTooltip = Facet.define()
  10702. class HoverTooltipHost {
  10703. constructor(view) {
  10704. this.view = view
  10705. this.mounted = false
  10706. this.dom = document.createElement('div')
  10707. this.dom.classList.add('cm-tooltip-hover')
  10708. this.manager = new TooltipViewManager(view, showHoverTooltip, t => this.createHostedView(t))
  10709. }
  10710. static create(view) {
  10711. return new HoverTooltipHost(view)
  10712. }
  10713. createHostedView(tooltip) {
  10714. const hostedView = tooltip.create(this.view)
  10715. hostedView.dom.classList.add('cm-tooltip-section')
  10716. this.dom.appendChild(hostedView.dom)
  10717. if (this.mounted && hostedView.mount) hostedView.mount(this.view)
  10718. return hostedView
  10719. }
  10720. mount(view) {
  10721. for (let _i127 = 0, _this$manager$tooltip3 = this.manager.tooltipViews, _length127 = _this$manager$tooltip3.length; _i127 < _length127; _i127++) {
  10722. const hostedView = _this$manager$tooltip3[_i127]
  10723. if (hostedView.mount) hostedView.mount(view)
  10724. }
  10725. this.mounted = true
  10726. }
  10727. positioned() {
  10728. for (let _i128 = 0, _this$manager$tooltip4 = this.manager.tooltipViews, _length128 = _this$manager$tooltip4.length; _i128 < _length128; _i128++) {
  10729. const hostedView = _this$manager$tooltip4[_i128]
  10730. if (hostedView.positioned) hostedView.positioned()
  10731. }
  10732. }
  10733. update(update) {
  10734. this.manager.update(update)
  10735. }
  10736. }
  10737. const showHoverTooltipHost = showTooltip.compute([showHoverTooltip], state => {
  10738. const tooltips = state.facet(showHoverTooltip).filter(t => t)
  10739. if (tooltips.length === 0) return null
  10740. return { pos: Math.min(...tooltips.map(t => t.pos)), end: Math.max(...tooltips.filter(t => t.end != null).map(t => t.end)), create: HoverTooltipHost.create, above: tooltips[0].above }
  10741. })
  10742. class HoverPlugin {
  10743. constructor(view, source, field, setHover, hoverTime) {
  10744. this.view = view
  10745. this.source = source
  10746. this.field = field
  10747. this.setHover = setHover
  10748. this.hoverTime = hoverTime
  10749. this.lastMouseMove = null
  10750. this.lastMoveTime = 0
  10751. this.hoverTimeout = -1
  10752. this.restartTimeout = -1
  10753. this.pending = null
  10754. this.checkHover = this.checkHover.bind(this)
  10755. view.dom.addEventListener('mouseleave', (this.mouseleave = this.mouseleave.bind(this)))
  10756. view.dom.addEventListener('mousemove', (this.mousemove = this.mousemove.bind(this)))
  10757. }
  10758. update() {
  10759. if (this.pending) {
  10760. this.pending = null
  10761. clearTimeout(this.restartTimeout)
  10762. this.restartTimeout = setTimeout(() => this.startHover(), 20)
  10763. }
  10764. }
  10765. get active() {
  10766. return this.view.state.field(this.field)
  10767. }
  10768. checkHover() {
  10769. this.hoverTimeout = -1
  10770. if (this.active) return
  10771. let hovered = Date.now() - this.lastMoveTime
  10772. if (hovered < this.hoverTime) this.hoverTimeout = setTimeout(this.checkHover, this.hoverTime - hovered)
  10773. else this.startHover()
  10774. }
  10775. startHover() {
  10776. var _a
  10777. clearTimeout(this.restartTimeout)
  10778. let lastMove = this.lastMouseMove
  10779. let coords = { x: lastMove.clientX, y: lastMove.clientY }
  10780. let pos = this.view.contentDOM.contains(lastMove.target) ? this.view.posAtCoords(coords) : null
  10781. if (pos == null) return
  10782. let posCoords = this.view.coordsAtPos(pos)
  10783. if (
  10784. posCoords == null ||
  10785. coords.y < posCoords.top ||
  10786. coords.y > posCoords.bottom ||
  10787. coords.x < posCoords.left - this.view.defaultCharacterWidth ||
  10788. coords.x > posCoords.right + this.view.defaultCharacterWidth
  10789. )
  10790. return
  10791. let bidi = this.view.bidiSpans(this.view.state.doc.lineAt(pos)).find(s => s.from <= pos && s.to >= pos)
  10792. let rtl = bidi && bidi.dir == Direction.RTL ? -1 : 1
  10793. let open = this.source(this.view, pos, coords.x < posCoords.left ? -rtl : rtl)
  10794. if ((_a = open) === null || _a === void 0 ? void 0 : _a.then) {
  10795. let pending = (this.pending = { pos })
  10796. open.then(
  10797. result => {
  10798. if (this.pending == pending) {
  10799. this.pending = null
  10800. if (result) this.view.dispatch({ effects: this.setHover.of(result) })
  10801. }
  10802. },
  10803. e => logException(this.view.state, e, 'hover tooltip')
  10804. )
  10805. } else if (open) {
  10806. this.view.dispatch({ effects: this.setHover.of(open) })
  10807. }
  10808. }
  10809. mousemove(event) {
  10810. var _a
  10811. this.lastMouseMove = event
  10812. this.lastMoveTime = Date.now()
  10813. if (this.hoverTimeout < 0) this.hoverTimeout = setTimeout(this.checkHover, this.hoverTime)
  10814. let tooltip = this.active
  10815. if ((tooltip && !isInTooltip(event.target)) || this.pending) {
  10816. let { pos } = tooltip || this.pending,
  10817. end = (_a = tooltip === null || tooltip === void 0 ? void 0 : tooltip.end) !== null && _a !== void 0 ? _a : pos
  10818. if (pos == end ? this.view.posAtCoords({ x: event.clientX, y: event.clientY }) != pos : !isOverRange(this.view, pos, end, event.clientX, event.clientY, 6)) {
  10819. this.view.dispatch({ effects: this.setHover.of(null) })
  10820. this.pending = null
  10821. }
  10822. }
  10823. }
  10824. mouseleave() {
  10825. clearTimeout(this.hoverTimeout)
  10826. this.hoverTimeout = -1
  10827. if (this.active) this.view.dispatch({ effects: this.setHover.of(null) })
  10828. }
  10829. destroy() {
  10830. clearTimeout(this.hoverTimeout)
  10831. this.view.dom.removeEventListener('mouseleave', this.mouseleave)
  10832. this.view.dom.removeEventListener('mousemove', this.mousemove)
  10833. }
  10834. }
  10835. function isInTooltip(elt) {
  10836. for (let cur = elt; cur; cur = cur.parentNode) if (cur.nodeType == 1 && cur.classList.contains('cm-tooltip')) return true
  10837. return false
  10838. }
  10839. function isOverRange(view, from, to, x, y, margin) {
  10840. let range = document.createRange()
  10841. let fromDOM = view.domAtPos(from),
  10842. toDOM = view.domAtPos(to)
  10843. range.setEnd(toDOM.node, toDOM.offset)
  10844. range.setStart(fromDOM.node, fromDOM.offset)
  10845. let rects = range.getClientRects()
  10846. range.detach()
  10847. for (let i = 0; i < rects.length; i++) {
  10848. let rect = rects[i]
  10849. let dist = Math.max(rect.top - y, y - rect.bottom, rect.left - x, x - rect.right)
  10850. if (dist <= margin) return true
  10851. }
  10852. return false
  10853. }
  10854. function hoverTooltip(source, options = {}) {
  10855. const setHover = StateEffect.define()
  10856. const hoverState = StateField.define({
  10857. create() {
  10858. return null
  10859. },
  10860. update(value, tr) {
  10861. if (value && options.hideOnChange && (tr.docChanged || tr.selection)) return null
  10862. for (let _i129 = 0, _tr$effects4 = tr.effects, _length129 = _tr$effects4.length; _i129 < _length129; _i129++) {
  10863. let effect = _tr$effects4[_i129]
  10864. if (effect.is(setHover)) return effect.value
  10865. }
  10866. if (value && tr.docChanged) {
  10867. let newPos = tr.changes.mapPos(value.pos, -1, MapMode.TrackDel)
  10868. if (newPos == null) return null
  10869. let copy = Object.assign(Object.create(null), value)
  10870. copy.pos = newPos
  10871. if (value.end != null) copy.end = tr.changes.mapPos(value.end)
  10872. return copy
  10873. }
  10874. return value
  10875. },
  10876. provide: f => showHoverTooltip.from(f)
  10877. })
  10878. let hoverTime = options.hoverTime || 750
  10879. return [hoverState, ViewPlugin.define(view => new HoverPlugin(view, source, hoverState, setHover, hoverTime)), showHoverTooltipHost]
  10880. }
  10881. var _m7 = Object.freeze({ __proto__: null, hoverTooltip: hoverTooltip, showTooltip: showTooltip, tooltips: tooltips })
  10882. const fromHistory = Annotation.define()
  10883. const isolateHistory = Annotation.define()
  10884. const invertedEffects = Facet.define()
  10885. const historyConfig = Facet.define({
  10886. combine(configs) {
  10887. return combineConfig(configs, { minDepth: 100, newGroupDelay: 500 }, { minDepth: Math.max, newGroupDelay: Math.min })
  10888. }
  10889. })
  10890. const historyField_ = StateField.define({
  10891. create() {
  10892. return HistoryState.empty
  10893. },
  10894. update(state, tr) {
  10895. let config = tr.state.facet(historyConfig)
  10896. let fromHist = tr.annotation(fromHistory)
  10897. if (fromHist) {
  10898. let item = HistEvent.fromTransaction(tr),
  10899. from = fromHist.side
  10900. let other = from == 0 ? state.undone : state.done
  10901. if (item) other = updateBranch(other, other.length, config.minDepth, item)
  10902. else other = addSelection(other, tr.startState.selection)
  10903. return new HistoryState(from == 0 ? fromHist.rest : other, from == 0 ? other : fromHist.rest)
  10904. }
  10905. let isolate = tr.annotation(isolateHistory)
  10906. if (isolate == 'full' || isolate == 'before') state = state.isolate()
  10907. if (tr.annotation(Transaction.addToHistory) === false) return !tr.changes.empty ? state.addMapping(tr.changes.desc) : state
  10908. let event = HistEvent.fromTransaction(tr)
  10909. let time = tr.annotation(Transaction.time),
  10910. userEvent = tr.annotation(Transaction.userEvent)
  10911. if (event) state = state.addChanges(event, time, userEvent, config.newGroupDelay, config.minDepth)
  10912. else if (tr.selection) state = state.addSelection(tr.startState.selection, time, userEvent, config.newGroupDelay)
  10913. if (isolate == 'full' || isolate == 'after') state = state.isolate()
  10914. return state
  10915. },
  10916. toJSON(value) {
  10917. return { done: value.done.map(e => e.toJSON()), undone: value.undone.map(e => e.toJSON()) }
  10918. },
  10919. fromJSON(json) {
  10920. return new HistoryState(json.done.map(HistEvent.fromJSON), json.undone.map(HistEvent.fromJSON))
  10921. }
  10922. })
  10923. function history(config = {}) {
  10924. return [
  10925. historyField_,
  10926. historyConfig.of(config),
  10927. EditorView.domEventHandlers({
  10928. beforeinput(e, view) {
  10929. if (e.inputType == 'historyUndo') return undo(view)
  10930. if (e.inputType == 'historyRedo') return redo(view)
  10931. return false
  10932. }
  10933. })
  10934. ]
  10935. }
  10936. const historyField = historyField_
  10937. function cmd(side, selection) {
  10938. return function({ state, dispatch }) {
  10939. let historyState = state.field(historyField_, false)
  10940. if (!historyState) return false
  10941. let tr = historyState.pop(side, state, selection)
  10942. if (!tr) return false
  10943. dispatch(tr)
  10944. return true
  10945. }
  10946. }
  10947. const undo = cmd(0, false)
  10948. const redo = cmd(1, false)
  10949. const undoSelection = cmd(0, true)
  10950. const redoSelection = cmd(1, true)
  10951. function depth(side) {
  10952. return function(state) {
  10953. let histState = state.field(historyField_, false)
  10954. if (!histState) return 0
  10955. let branch = side == 0 ? histState.done : histState.undone
  10956. return branch.length - (branch.length && !branch[0].changes ? 1 : 0)
  10957. }
  10958. }
  10959. const undoDepth = depth(0)
  10960. const redoDepth = depth(1)
  10961. class HistEvent {
  10962. constructor(changes, effects, mapped, startSelection, selectionsAfter) {
  10963. this.changes = changes
  10964. this.effects = effects
  10965. this.mapped = mapped
  10966. this.startSelection = startSelection
  10967. this.selectionsAfter = selectionsAfter
  10968. }
  10969. setSelAfter(after) {
  10970. return new HistEvent(this.changes, this.effects, this.mapped, this.startSelection, after)
  10971. }
  10972. toJSON() {
  10973. var _a, _b, _c
  10974. return {
  10975. changes: (_a = this.changes) === null || _a === void 0 ? void 0 : _a.toJSON(),
  10976. mapped: (_b = this.mapped) === null || _b === void 0 ? void 0 : _b.toJSON(),
  10977. startSelection: (_c = this.startSelection) === null || _c === void 0 ? void 0 : _c.toJSON(),
  10978. selectionsAfter: this.selectionsAfter.map(s => s.toJSON())
  10979. }
  10980. }
  10981. static fromJSON(json) {
  10982. return new HistEvent(
  10983. json.changes && ChangeSet.fromJSON(json.changes),
  10984. [],
  10985. json.mapped && ChangeDesc.fromJSON(json.mapped),
  10986. json.startSelection && EditorSelection.fromJSON(json.startSelection),
  10987. json.selectionsAfter.map(EditorSelection.fromJSON)
  10988. )
  10989. }
  10990. static fromTransaction(tr) {
  10991. let effects = none$2
  10992. for (let _i130 = 0, _tr$startState$facet = tr.startState.facet(invertedEffects), _length130 = _tr$startState$facet.length; _i130 < _length130; _i130++) {
  10993. let invert = _tr$startState$facet[_i130]
  10994. let result = invert(tr)
  10995. if (result.length) effects = effects.concat(result)
  10996. }
  10997. if (!effects.length && tr.changes.empty) return null
  10998. return new HistEvent(tr.changes.invert(tr.startState.doc), effects, undefined, tr.startState.selection, none$2)
  10999. }
  11000. static selection(selections) {
  11001. return new HistEvent(undefined, none$2, undefined, undefined, selections)
  11002. }
  11003. }
  11004. function updateBranch(branch, to, maxLen, newEvent) {
  11005. let start = to + 1 > maxLen + 20 ? to - maxLen - 1 : 0
  11006. let newBranch = branch.slice(start, to)
  11007. newBranch.push(newEvent)
  11008. return newBranch
  11009. }
  11010. function isAdjacent(a, b) {
  11011. let ranges = [],
  11012. isAdjacent = false
  11013. a.iterChangedRanges((f, t) => ranges.push(f, t))
  11014. b.iterChangedRanges((_f, _t, f, t) => {
  11015. for (let i = 0; i < ranges.length; ) {
  11016. let from = ranges[i++],
  11017. to = ranges[i++]
  11018. if (t >= from && f <= to) isAdjacent = true
  11019. }
  11020. })
  11021. return isAdjacent
  11022. }
  11023. function eqSelectionShape(a, b) {
  11024. return a.ranges.length == b.ranges.length && a.ranges.filter((r, i) => r.empty != b.ranges[i].empty).length === 0
  11025. }
  11026. function conc(a, b) {
  11027. return !a.length ? b : !b.length ? a : a.concat(b)
  11028. }
  11029. const none$2 = []
  11030. const MaxSelectionsPerEvent = 200
  11031. function addSelection(branch, selection) {
  11032. if (!branch.length) {
  11033. return [HistEvent.selection([selection])]
  11034. } else {
  11035. let lastEvent = branch[branch.length - 1]
  11036. let sels = lastEvent.selectionsAfter.slice(Math.max(0, lastEvent.selectionsAfter.length - MaxSelectionsPerEvent))
  11037. if (sels.length && sels[sels.length - 1].eq(selection)) return branch
  11038. sels.push(selection)
  11039. return updateBranch(branch, branch.length - 1, 1e9, lastEvent.setSelAfter(sels))
  11040. }
  11041. }
  11042. function popSelection(branch) {
  11043. let last = branch[branch.length - 1]
  11044. let newBranch = branch.slice()
  11045. newBranch[branch.length - 1] = last.setSelAfter(last.selectionsAfter.slice(0, last.selectionsAfter.length - 1))
  11046. return newBranch
  11047. }
  11048. function addMappingToBranch(branch, mapping) {
  11049. if (!branch.length) return branch
  11050. let length = branch.length,
  11051. selections = none$2
  11052. while (length) {
  11053. let event = mapEvent(branch[length - 1], mapping, selections)
  11054. if ((event.changes && !event.changes.empty) || event.effects.length) {
  11055. let result = branch.slice(0, length)
  11056. result[length - 1] = event
  11057. return result
  11058. } else {
  11059. mapping = event.mapped
  11060. length--
  11061. selections = event.selectionsAfter
  11062. }
  11063. }
  11064. return selections.length ? [HistEvent.selection(selections)] : none$2
  11065. }
  11066. function mapEvent(event, mapping, extraSelections) {
  11067. let selections = conc(event.selectionsAfter.length ? event.selectionsAfter.map(s => s.map(mapping)) : none$2, extraSelections)
  11068. if (!event.changes) return HistEvent.selection(selections)
  11069. let mappedChanges = event.changes.map(mapping),
  11070. before = mapping.mapDesc(event.changes, true)
  11071. let fullMapping = event.mapped ? event.mapped.composeDesc(before) : before
  11072. return new HistEvent(mappedChanges, StateEffect.mapEffects(event.effects, mapping), fullMapping, event.startSelection.map(before), selections)
  11073. }
  11074. class HistoryState {
  11075. constructor(done, undone, prevTime = 0, prevUserEvent = undefined) {
  11076. this.done = done
  11077. this.undone = undone
  11078. this.prevTime = prevTime
  11079. this.prevUserEvent = prevUserEvent
  11080. }
  11081. isolate() {
  11082. return this.prevTime ? new HistoryState(this.done, this.undone) : this
  11083. }
  11084. addChanges(event, time, userEvent, newGroupDelay, maxLen) {
  11085. let done = this.done,
  11086. lastEvent = done[done.length - 1]
  11087. if (
  11088. lastEvent &&
  11089. lastEvent.changes &&
  11090. time - this.prevTime < newGroupDelay &&
  11091. !lastEvent.selectionsAfter.length &&
  11092. !lastEvent.changes.empty &&
  11093. event.changes &&
  11094. isAdjacent(lastEvent.changes, event.changes)
  11095. ) {
  11096. done = updateBranch(
  11097. done,
  11098. done.length - 1,
  11099. maxLen,
  11100. new HistEvent(event.changes.compose(lastEvent.changes), conc(event.effects, lastEvent.effects), lastEvent.mapped, lastEvent.startSelection, none$2)
  11101. )
  11102. } else {
  11103. done = updateBranch(done, done.length, maxLen, event)
  11104. }
  11105. return new HistoryState(done, none$2, time, userEvent)
  11106. }
  11107. addSelection(selection, time, userEvent, newGroupDelay) {
  11108. let last = this.done.length ? this.done[this.done.length - 1].selectionsAfter : none$2
  11109. if (last.length > 0 && time - this.prevTime < newGroupDelay && userEvent == 'keyboardselection' && this.prevUserEvent == userEvent && eqSelectionShape(last[last.length - 1], selection))
  11110. return this
  11111. return new HistoryState(addSelection(this.done, selection), this.undone, time, userEvent)
  11112. }
  11113. addMapping(mapping) {
  11114. return new HistoryState(addMappingToBranch(this.done, mapping), addMappingToBranch(this.undone, mapping), this.prevTime, this.prevUserEvent)
  11115. }
  11116. pop(side, state, selection) {
  11117. let branch = side == 0 ? this.done : this.undone
  11118. if (branch.length == 0) return null
  11119. let event = branch[branch.length - 1]
  11120. if (selection && event.selectionsAfter.length) {
  11121. return state.update({ selection: event.selectionsAfter[event.selectionsAfter.length - 1], annotations: fromHistory.of({ side, rest: popSelection(branch) }) })
  11122. } else if (!event.changes) {
  11123. return null
  11124. } else {
  11125. let rest = branch.length == 1 ? none$2 : branch.slice(0, branch.length - 1)
  11126. if (event.mapped) rest = addMappingToBranch(rest, event.mapped)
  11127. return state.update({ changes: event.changes, selection: event.startSelection, effects: event.effects, annotations: fromHistory.of({ side, rest }), filter: false })
  11128. }
  11129. }
  11130. }
  11131. HistoryState.empty = new HistoryState(none$2, none$2)
  11132. const historyKeymap = [
  11133. { key: 'Mod-z', run: undo, preventDefault: true },
  11134. { key: 'Mod-y', mac: 'Mod-Shift-z', run: redo, preventDefault: true },
  11135. { key: 'Mod-u', run: undoSelection, preventDefault: true },
  11136. { key: 'Alt-u', mac: 'Mod-Shift-u', run: redoSelection, preventDefault: true }
  11137. ]
  11138. var _m8 = Object.freeze({
  11139. __proto__: null,
  11140. history: history,
  11141. historyField: historyField,
  11142. historyKeymap: historyKeymap,
  11143. invertedEffects: invertedEffects,
  11144. isolateHistory: isolateHistory,
  11145. redo: redo,
  11146. redoDepth: redoDepth,
  11147. redoSelection: redoSelection,
  11148. undo: undo,
  11149. undoDepth: undoDepth,
  11150. undoSelection: undoSelection
  11151. })
  11152. class GutterMarker extends RangeValue {
  11153. compare(other) {
  11154. return this == other || (this.constructor == other.constructor && this.eq(other))
  11155. }
  11156. eq(other) {
  11157. return false
  11158. }
  11159. at(pos) {
  11160. return this.range(pos)
  11161. }
  11162. }
  11163. GutterMarker.prototype.elementClass = ''
  11164. GutterMarker.prototype.toDOM = undefined
  11165. GutterMarker.prototype.mapMode = MapMode.TrackBefore
  11166. GutterMarker.prototype.point = true
  11167. const gutterLineClass = Facet.define()
  11168. const defaults$2 = { class: '', renderEmptyElements: false, elementStyle: '', markers: () => RangeSet.empty, lineMarker: () => null, initialSpacer: null, updateSpacer: null, domEventHandlers: {} }
  11169. const activeGutters = Facet.define()
  11170. function gutter(config) {
  11171. return [gutters(), activeGutters.of(Object.assign(Object.assign({}, defaults$2), config))]
  11172. }
  11173. const baseTheme$4 = EditorView.baseTheme({
  11174. '.cm-gutters': { display: 'flex', height: '100%', boxSizing: 'border-box', left: 0, zIndex: 200 },
  11175. '&light .cm-gutters': { backgroundColor: '#f5f5f5', color: '#999', borderRight: '1px solid #ddd' },
  11176. '&dark .cm-gutters': { backgroundColor: '#333338', color: '#ccc' },
  11177. '.cm-gutter': { display: 'flex !important', flexDirection: 'column', flexShrink: 0, boxSizing: 'border-box', height: '100%', overflow: 'hidden' },
  11178. '.cm-gutterElement': { boxSizing: 'border-box' },
  11179. '.cm-lineNumbers .cm-gutterElement': { padding: '0 3px 0 5px', minWidth: '20px', textAlign: 'right', whiteSpace: 'nowrap' },
  11180. '&light .cm-activeLineGutter': { backgroundColor: '#e2f2ff' },
  11181. '&dark .cm-activeLineGutter': { backgroundColor: '#222227' }
  11182. })
  11183. const unfixGutters = Facet.define({ combine: values => values.some(x => x) })
  11184. function gutters(config) {
  11185. let result = [gutterView, baseTheme$4]
  11186. if (config && config.fixed === false) result.push(unfixGutters.of(true))
  11187. return result
  11188. }
  11189. const gutterView = ViewPlugin.fromClass(
  11190. class {
  11191. constructor(view) {
  11192. this.view = view
  11193. this.dom = document.createElement('div')
  11194. this.dom.className = 'cm-gutters'
  11195. this.dom.setAttribute('aria-hidden', 'true')
  11196. this.gutters = view.state.facet(activeGutters).map(conf => new SingleGutterView(view, conf))
  11197. for (let _i131 = 0, _this$gutters = this.gutters, _length131 = _this$gutters.length; _i131 < _length131; _i131++) {
  11198. let gutter = _this$gutters[_i131]
  11199. this.dom.appendChild(gutter.dom)
  11200. }
  11201. this.fixed = !view.state.facet(unfixGutters)
  11202. if (this.fixed) {
  11203. this.dom.style.position = 'sticky'
  11204. }
  11205. view.scrollDOM.insertBefore(this.dom, view.contentDOM)
  11206. this.syncGutters()
  11207. }
  11208. update(update) {
  11209. if (this.updateGutters(update)) this.syncGutters()
  11210. }
  11211. syncGutters() {
  11212. let lineClasses = RangeSet.iter(this.view.state.facet(gutterLineClass), this.view.viewport.from)
  11213. let classSet = []
  11214. let contexts = this.gutters.map(gutter => new UpdateContext(gutter, this.view.viewport))
  11215. this.view.viewportLines(line => {
  11216. let text
  11217. if (Array.isArray(line.type)) {
  11218. for (let _i132 = 0, _line$type = line.type, _length132 = _line$type.length; _i132 < _length132; _i132++) {
  11219. let b = _line$type[_i132]
  11220. if (b.type == BlockType.Text) {
  11221. text = b
  11222. break
  11223. }
  11224. }
  11225. } else {
  11226. text = line.type == BlockType.Text ? line : undefined
  11227. }
  11228. if (!text) return
  11229. if (classSet.length) classSet = []
  11230. advanceCursor(lineClasses, classSet, line.from)
  11231. for (let _i133 = 0, _length133 = contexts.length; _i133 < _length133; _i133++) {
  11232. let cx = contexts[_i133]
  11233. cx.line(this.view, text, classSet)
  11234. }
  11235. }, 0)
  11236. for (let _i134 = 0, _length134 = contexts.length; _i134 < _length134; _i134++) {
  11237. let cx = contexts[_i134]
  11238. cx.finish()
  11239. }
  11240. this.dom.style.minHeight = this.view.contentHeight + 'px'
  11241. if (this.view.state.facet(unfixGutters) != !this.fixed) {
  11242. this.fixed = !this.fixed
  11243. this.dom.style.position = this.fixed ? 'sticky' : ''
  11244. }
  11245. }
  11246. updateGutters(update) {
  11247. let prev = update.startState.facet(activeGutters),
  11248. cur = update.state.facet(activeGutters)
  11249. let change =
  11250. update.docChanged ||
  11251. update.heightChanged ||
  11252. update.viewportChanged ||
  11253. !RangeSet.eq(update.startState.facet(gutterLineClass), update.state.facet(gutterLineClass), update.view.viewport.from, update.view.viewport.to)
  11254. if (prev == cur) {
  11255. for (let _i135 = 0, _this$gutters2 = this.gutters, _length135 = _this$gutters2.length; _i135 < _length135; _i135++) {
  11256. let gutter = _this$gutters2[_i135]
  11257. if (gutter.update(update)) change = true
  11258. }
  11259. } else {
  11260. change = true
  11261. let gutters = []
  11262. for (let _i136 = 0, _length136 = cur.length; _i136 < _length136; _i136++) {
  11263. let conf = cur[_i136]
  11264. let known = prev.indexOf(conf)
  11265. if (known < 0) {
  11266. gutters.push(new SingleGutterView(this.view, conf))
  11267. } else {
  11268. this.gutters[known].update(update)
  11269. gutters.push(this.gutters[known])
  11270. }
  11271. }
  11272. for (let _i137 = 0, _this$gutters3 = this.gutters, _length137 = _this$gutters3.length; _i137 < _length137; _i137++) {
  11273. let g = _this$gutters3[_i137]
  11274. g.dom.remove()
  11275. }
  11276. for (let _i138 = 0, _length138 = gutters.length; _i138 < _length138; _i138++) {
  11277. let g = gutters[_i138]
  11278. this.dom.appendChild(g.dom)
  11279. }
  11280. this.gutters = gutters
  11281. }
  11282. return change
  11283. }
  11284. destroy() {
  11285. this.dom.remove()
  11286. }
  11287. },
  11288. {
  11289. provide: PluginField.scrollMargins.from(value => {
  11290. if (value.gutters.length == 0 || !value.fixed) return null
  11291. return value.view.textDirection == Direction.LTR ? { left: value.dom.offsetWidth } : { right: value.dom.offsetWidth }
  11292. })
  11293. }
  11294. )
  11295. function asArray(val) {
  11296. return Array.isArray(val) ? val : [val]
  11297. }
  11298. function advanceCursor(cursor, collect, pos) {
  11299. while (cursor.value && cursor.from <= pos) {
  11300. if (cursor.from == pos) collect.push(cursor.value)
  11301. cursor.next()
  11302. }
  11303. }
  11304. class UpdateContext {
  11305. constructor(gutter, viewport) {
  11306. this.gutter = gutter
  11307. this.localMarkers = []
  11308. this.i = 0
  11309. this.height = 0
  11310. this.cursor = RangeSet.iter(gutter.markers, viewport.from)
  11311. }
  11312. line(view, line, extraMarkers) {
  11313. if (this.localMarkers.length) this.localMarkers = []
  11314. advanceCursor(this.cursor, this.localMarkers, line.from)
  11315. let localMarkers = extraMarkers.length ? this.localMarkers.concat(extraMarkers) : this.localMarkers
  11316. let forLine = this.gutter.config.lineMarker(view, line, localMarkers)
  11317. if (forLine) localMarkers.unshift(forLine)
  11318. let gutter = this.gutter
  11319. if (localMarkers.length == 0 && !gutter.config.renderEmptyElements) return
  11320. let above = line.top - this.height
  11321. if (this.i == gutter.elements.length) {
  11322. let newElt = new GutterElement(view, line.height, above, localMarkers)
  11323. gutter.elements.push(newElt)
  11324. gutter.dom.appendChild(newElt.dom)
  11325. } else {
  11326. let elt = gutter.elements[this.i]
  11327. if (sameMarkers(localMarkers, elt.markers)) localMarkers = elt.markers
  11328. elt.update(view, line.height, above, localMarkers)
  11329. }
  11330. this.height = line.bottom
  11331. this.i++
  11332. }
  11333. finish() {
  11334. let gutter = this.gutter
  11335. while (gutter.elements.length > this.i) gutter.dom.removeChild(gutter.elements.pop().dom)
  11336. }
  11337. }
  11338. class SingleGutterView {
  11339. constructor(view, config) {
  11340. this.view = view
  11341. this.config = config
  11342. this.elements = []
  11343. this.spacer = null
  11344. this.dom = document.createElement('div')
  11345. this.dom.className = 'cm-gutter' + (this.config.class ? ' ' + this.config.class : '')
  11346. for (let prop in config.domEventHandlers) {
  11347. this.dom.addEventListener(prop, event => {
  11348. let line = view.visualLineAtHeight(event.clientY, view.contentDOM.getBoundingClientRect().top)
  11349. if (config.domEventHandlers[prop](view, line, event)) event.preventDefault()
  11350. })
  11351. }
  11352. this.markers = asArray(config.markers(view))
  11353. if (config.initialSpacer) {
  11354. this.spacer = new GutterElement(view, 0, 0, [config.initialSpacer(view)])
  11355. this.dom.appendChild(this.spacer.dom)
  11356. this.spacer.dom.style.cssText += 'visibility: hidden; pointer-events: none'
  11357. }
  11358. }
  11359. update(update) {
  11360. let prevMarkers = this.markers
  11361. this.markers = asArray(this.config.markers(update.view))
  11362. if (this.spacer && this.config.updateSpacer) {
  11363. let updated = this.config.updateSpacer(this.spacer.markers[0], update)
  11364. if (updated != this.spacer.markers[0]) this.spacer.update(update.view, 0, 0, [updated])
  11365. }
  11366. let vp = update.view.viewport
  11367. return !RangeSet.eq(this.markers, prevMarkers, vp.from, vp.to)
  11368. }
  11369. }
  11370. class GutterElement {
  11371. constructor(view, height, above, markers) {
  11372. this.height = -1
  11373. this.above = 0
  11374. this.dom = document.createElement('div')
  11375. this.update(view, height, above, markers)
  11376. }
  11377. update(view, height, above, markers) {
  11378. if (this.height != height) this.dom.style.height = (this.height = height) + 'px'
  11379. if (this.above != above) this.dom.style.marginTop = (this.above = above) ? above + 'px' : ''
  11380. if (this.markers != markers) {
  11381. this.markers = markers
  11382. for (let ch; (ch = this.dom.lastChild); ) ch.remove()
  11383. let cls = 'cm-gutterElement'
  11384. for (let _i139 = 0, _length139 = markers.length; _i139 < _length139; _i139++) {
  11385. let m = markers[_i139]
  11386. if (m.toDOM) this.dom.appendChild(m.toDOM(view))
  11387. let c = m.elementClass
  11388. if (c) cls += ' ' + c
  11389. }
  11390. this.dom.className = cls
  11391. }
  11392. }
  11393. }
  11394. function sameMarkers(a, b) {
  11395. if (a.length != b.length) return false
  11396. for (let i = 0; i < a.length; i++) if (!a[i].compare(b[i])) return false
  11397. return true
  11398. }
  11399. const lineNumberMarkers = Facet.define()
  11400. const lineNumberConfig = Facet.define({
  11401. combine(values) {
  11402. return combineConfig(
  11403. values,
  11404. { formatNumber: String, domEventHandlers: {} },
  11405. {
  11406. domEventHandlers(a, b) {
  11407. let result = Object.assign({}, a)
  11408. for (let event in b) {
  11409. let exists = result[event],
  11410. add = b[event]
  11411. result[event] = exists ? (view, line, event) => exists(view, line, event) || add(view, line, event) : add
  11412. }
  11413. return result
  11414. }
  11415. }
  11416. )
  11417. }
  11418. })
  11419. class NumberMarker extends GutterMarker {
  11420. constructor(number) {
  11421. super()
  11422. this.number = number
  11423. }
  11424. eq(other) {
  11425. return this.number == other.number
  11426. }
  11427. toDOM(_view) {
  11428. return document.createTextNode(this.number)
  11429. }
  11430. }
  11431. function formatNumber(view, number) {
  11432. return view.state.facet(lineNumberConfig).formatNumber(number, view.state)
  11433. }
  11434. const lineNumberGutter = gutter({
  11435. class: 'cm-lineNumbers',
  11436. markers(view) {
  11437. return view.state.facet(lineNumberMarkers)
  11438. },
  11439. lineMarker(view, line, others) {
  11440. if (others.some(m => m.toDOM)) return null
  11441. return new NumberMarker(formatNumber(view, view.state.doc.lineAt(line.from).number))
  11442. },
  11443. initialSpacer(view) {
  11444. return new NumberMarker(formatNumber(view, maxLineNumber(view.state.doc.lines)))
  11445. },
  11446. updateSpacer(spacer, update) {
  11447. let max = formatNumber(update.view, maxLineNumber(update.view.state.doc.lines))
  11448. return max == spacer.number ? spacer : new NumberMarker(max)
  11449. }
  11450. })
  11451. function lineNumbers(config = {}) {
  11452. return [lineNumberConfig.of(config), lineNumberGutter]
  11453. }
  11454. function maxLineNumber(lines) {
  11455. let last = 9
  11456. while (last < lines) last = last * 10 + 9
  11457. return last
  11458. }
  11459. const activeLineGutterMarker = new (class extends GutterMarker {
  11460. constructor() {
  11461. super(...arguments)
  11462. this.elementClass = 'cm-activeLineGutter'
  11463. }
  11464. eq() {
  11465. return true
  11466. }
  11467. })()
  11468. const activeLineGutterHighlighter = gutterLineClass.compute(['selection'], state => {
  11469. let marks = [],
  11470. last = -1
  11471. for (let _i140 = 0, _state$selection$rang6 = state.selection.ranges, _length140 = _state$selection$rang6.length; _i140 < _length140; _i140++) {
  11472. let range = _state$selection$rang6[_i140]
  11473. if (range.empty) {
  11474. let linePos = state.doc.lineAt(range.head).from
  11475. if (linePos > last) {
  11476. last = linePos
  11477. marks.push(activeLineGutterMarker.range(linePos))
  11478. }
  11479. }
  11480. }
  11481. return RangeSet.of(marks)
  11482. })
  11483. function highlightActiveLineGutter() {
  11484. return activeLineGutterHighlighter
  11485. }
  11486. var _m9 = Object.freeze({
  11487. __proto__: null,
  11488. GutterMarker: GutterMarker,
  11489. gutter: gutter,
  11490. gutterLineClass: gutterLineClass,
  11491. gutters: gutters,
  11492. highlightActiveLineGutter: highlightActiveLineGutter,
  11493. lineNumberMarkers: lineNumberMarkers,
  11494. lineNumbers: lineNumbers
  11495. })
  11496. class LocalUpdate {
  11497. constructor(origin, changes, effects, clientID) {
  11498. this.origin = origin
  11499. this.changes = changes
  11500. this.effects = effects
  11501. this.clientID = clientID
  11502. }
  11503. }
  11504. class CollabState {
  11505. constructor(version, unconfirmed) {
  11506. this.version = version
  11507. this.unconfirmed = unconfirmed
  11508. }
  11509. }
  11510. const collabConfig = Facet.define({
  11511. combine(configs) {
  11512. let combined = combineConfig(configs, { startVersion: 0, clientID: null, sharedEffects: () => [] })
  11513. if (combined.clientID == null) combined.clientID = (configs.length && configs[0].generatedID) || ''
  11514. return combined
  11515. }
  11516. })
  11517. const collabReceive = Annotation.define()
  11518. const collabField = StateField.define({
  11519. create(state) {
  11520. return new CollabState(state.facet(collabConfig).startVersion, [])
  11521. },
  11522. update(collab, tr) {
  11523. let isSync = tr.annotation(collabReceive)
  11524. if (isSync) return isSync
  11525. let { sharedEffects, clientID } = tr.startState.facet(collabConfig)
  11526. let effects = sharedEffects(tr)
  11527. if (effects.length || !tr.changes.empty) return new CollabState(collab.version, collab.unconfirmed.concat(new LocalUpdate(tr, tr.changes, effects, clientID)))
  11528. return collab
  11529. }
  11530. })
  11531. function collab(config = {}) {
  11532. return [collabField, collabConfig.of(Object.assign({ generatedID: Math.floor(Math.random() * 1e9).toString(36) }, config))]
  11533. }
  11534. function receiveUpdates(state, updates) {
  11535. let { version, unconfirmed } = state.field(collabField)
  11536. let { clientID } = state.facet(collabConfig)
  11537. version += updates.length
  11538. let own = 0
  11539. if (updates[0].clientID == null) own = arguments[2]
  11540. else while (own < updates.length && updates[own].clientID == clientID) own++
  11541. if (own) {
  11542. unconfirmed = unconfirmed.slice(own)
  11543. updates = updates.slice(own)
  11544. }
  11545. if (!updates.length) return state.update({ annotations: [collabReceive.of(new CollabState(version, unconfirmed))] })
  11546. let changes = updates[0].changes,
  11547. effects = updates[0].effects || []
  11548. for (let i = 1; i < updates.length; i++) {
  11549. let update = updates[i]
  11550. effects = StateEffect.mapEffects(effects, update.changes)
  11551. if (update.effects) effects = effects.concat(update.effects)
  11552. changes = changes.compose(update.changes)
  11553. }
  11554. if (unconfirmed.length) {
  11555. unconfirmed = unconfirmed.map(update => {
  11556. let updateChanges = update.changes.map(changes)
  11557. changes = changes.map(update.changes, true)
  11558. return new LocalUpdate(update.origin, updateChanges, StateEffect.mapEffects(update.effects, changes), clientID)
  11559. })
  11560. effects = StateEffect.mapEffects(
  11561. effects,
  11562. unconfirmed.reduce((ch, u) => ch.compose(u.changes), ChangeSet.empty(unconfirmed[0].changes.length))
  11563. )
  11564. }
  11565. return state.update({
  11566. changes,
  11567. effects,
  11568. annotations: [Transaction.addToHistory.of(false), Transaction.remote.of(true), collabReceive.of(new CollabState(version, unconfirmed))],
  11569. filter: false
  11570. })
  11571. }
  11572. function sendableUpdates(state) {
  11573. return state.field(collabField).unconfirmed
  11574. }
  11575. function getSyncedVersion(state) {
  11576. return state.field(collabField).version
  11577. }
  11578. function getClientID(state) {
  11579. return state.facet(collabConfig).clientID
  11580. }
  11581. var _m10 = Object.freeze({ __proto__: null, collab: collab, getClientID: getClientID, getSyncedVersion: getSyncedVersion, receiveUpdates: receiveUpdates, sendableUpdates: sendableUpdates })
  11582. function mapRange(range, mapping) {
  11583. let from = mapping.mapPos(range.from, 1),
  11584. to = mapping.mapPos(range.to, -1)
  11585. return from >= to ? undefined : { from, to }
  11586. }
  11587. const foldEffect = StateEffect.define({ map: mapRange })
  11588. const unfoldEffect = StateEffect.define({ map: mapRange })
  11589. function selectedLines(view) {
  11590. let lines = []
  11591. for (let _i141 = 0, _view$state$selection2 = view.state.selection.ranges, _length141 = _view$state$selection2.length; _i141 < _length141; _i141++) {
  11592. let { head } = _view$state$selection2[_i141]
  11593. if (lines.some(l => l.from <= head && l.to >= head)) continue
  11594. lines.push(view.visualLineAt(head))
  11595. }
  11596. return lines
  11597. }
  11598. const foldState = StateField.define({
  11599. create() {
  11600. return Decoration.none
  11601. },
  11602. update(folded, tr) {
  11603. folded = folded.map(tr.changes)
  11604. for (let _i142 = 0, _tr$effects5 = tr.effects, _length142 = _tr$effects5.length; _i142 < _length142; _i142++) {
  11605. let e = _tr$effects5[_i142]
  11606. if (e.is(foldEffect) && !foldExists(folded, e.value.from, e.value.to)) folded = folded.update({ add: [foldWidget.range(e.value.from, e.value.to)] })
  11607. else if (e.is(unfoldEffect)) folded = folded.update({ filter: (from, to) => e.value.from != from || e.value.to != to, filterFrom: e.value.from, filterTo: e.value.to })
  11608. }
  11609. if (tr.selection) {
  11610. let onSelection = false,
  11611. { head } = tr.selection.main
  11612. folded.between(head, head, (a, b) => {
  11613. if (a < head && b > head) onSelection = true
  11614. })
  11615. if (onSelection) folded = folded.update({ filterFrom: head, filterTo: head, filter: (a, b) => b <= head || a >= head })
  11616. }
  11617. return folded
  11618. },
  11619. provide: f => EditorView.decorations.compute([f], s => s.field(f))
  11620. })
  11621. function foldedRanges(state) {
  11622. return state.field(foldState, false) || RangeSet.empty
  11623. }
  11624. function foldInside(state, from, to) {
  11625. var _a
  11626. let found = null
  11627. ;(_a = state.field(foldState, false)) === null || _a === void 0
  11628. ? void 0
  11629. : _a.between(from, to, (from, to) => {
  11630. if (!found || found.from > from) found = { from, to }
  11631. })
  11632. return found
  11633. }
  11634. function foldExists(folded, from, to) {
  11635. let found = false
  11636. folded.between(from, from, (a, b) => {
  11637. if (a == from && b == to) found = true
  11638. })
  11639. return found
  11640. }
  11641. function maybeEnable(state, other) {
  11642. return state.field(foldState, false) ? other : other.concat(StateEffect.appendConfig.of(codeFolding()))
  11643. }
  11644. const foldCode = view => {
  11645. for (let _i143 = 0, _selectedLines = selectedLines(view), _length143 = _selectedLines.length; _i143 < _length143; _i143++) {
  11646. let line = _selectedLines[_i143]
  11647. let range = foldable(view.state, line.from, line.to)
  11648. if (range) {
  11649. view.dispatch({ effects: maybeEnable(view.state, [foldEffect.of(range), announceFold(view, range)]) })
  11650. return true
  11651. }
  11652. }
  11653. return false
  11654. }
  11655. const unfoldCode = view => {
  11656. if (!view.state.field(foldState, false)) return false
  11657. let effects = []
  11658. for (let _i144 = 0, _selectedLines2 = selectedLines(view), _length144 = _selectedLines2.length; _i144 < _length144; _i144++) {
  11659. let line = _selectedLines2[_i144]
  11660. let folded = foldInside(view.state, line.from, line.to)
  11661. if (folded) effects.push(unfoldEffect.of(folded), announceFold(view, folded, false))
  11662. }
  11663. if (effects.length) view.dispatch({ effects })
  11664. return effects.length > 0
  11665. }
  11666. function announceFold(view, range, fold = true) {
  11667. let lineFrom = view.state.doc.lineAt(range.from).number,
  11668. lineTo = view.state.doc.lineAt(range.to).number
  11669. return EditorView.announce.of(`${view.state.phrase(fold ? 'Folded lines' : 'Unfolded lines')} ${lineFrom} ${view.state.phrase('to')} ${lineTo}.`)
  11670. }
  11671. const foldAll = view => {
  11672. let { state } = view,
  11673. effects = []
  11674. for (let pos = 0; pos < state.doc.length; ) {
  11675. let line = view.visualLineAt(pos),
  11676. range = foldable(state, line.from, line.to)
  11677. if (range) effects.push(foldEffect.of(range))
  11678. pos = (range ? view.visualLineAt(range.to) : line).to + 1
  11679. }
  11680. if (effects.length) view.dispatch({ effects: maybeEnable(view.state, effects) })
  11681. return !!effects.length
  11682. }
  11683. const unfoldAll = view => {
  11684. let field = view.state.field(foldState, false)
  11685. if (!field || !field.size) return false
  11686. let effects = []
  11687. field.between(0, view.state.doc.length, (from, to) => {
  11688. effects.push(unfoldEffect.of({ from, to }))
  11689. })
  11690. view.dispatch({ effects })
  11691. return true
  11692. }
  11693. const foldKeymap = [
  11694. { key: 'Ctrl-Shift-[', mac: 'Cmd-Alt-[', run: foldCode },
  11695. { key: 'Ctrl-Shift-]', mac: 'Cmd-Alt-]', run: unfoldCode },
  11696. { key: 'Ctrl-Alt-[', run: foldAll },
  11697. { key: 'Ctrl-Alt-]', run: unfoldAll }
  11698. ]
  11699. const defaultConfig = { placeholderDOM: null, placeholderText: '…' }
  11700. const foldConfig = Facet.define({
  11701. combine(values) {
  11702. return combineConfig(values, defaultConfig)
  11703. }
  11704. })
  11705. function codeFolding(config) {
  11706. let result = [foldState, baseTheme$3]
  11707. if (config) result.push(foldConfig.of(config))
  11708. return result
  11709. }
  11710. const foldWidget = Decoration.replace({
  11711. widget: new (class extends WidgetType {
  11712. ignoreEvents() {
  11713. return false
  11714. }
  11715. toDOM(view) {
  11716. let { state } = view,
  11717. conf = state.facet(foldConfig)
  11718. if (conf.placeholderDOM) return conf.placeholderDOM()
  11719. let element = document.createElement('span')
  11720. element.textContent = conf.placeholderText
  11721. element.setAttribute('aria-label', state.phrase('folded code'))
  11722. element.title = state.phrase('unfold')
  11723. element.className = 'cm-foldPlaceholder'
  11724. element.onclick = event => {
  11725. let line = view.visualLineAt(view.posAtDOM(event.target))
  11726. let folded = foldInside(view.state, line.from, line.to)
  11727. if (folded) view.dispatch({ effects: unfoldEffect.of(folded) })
  11728. event.preventDefault()
  11729. }
  11730. return element
  11731. }
  11732. })()
  11733. })
  11734. const foldGutterDefaults = { openText: '⌄', closedText: '›', markerDOM: null }
  11735. class FoldMarker extends GutterMarker {
  11736. constructor(config, open) {
  11737. super()
  11738. this.config = config
  11739. this.open = open
  11740. }
  11741. eq(other) {
  11742. return this.config == other.config && this.open == other.open
  11743. }
  11744. toDOM(view) {
  11745. if (this.config.markerDOM) return this.config.markerDOM(this.open)
  11746. let span = document.createElement('span')
  11747. span.textContent = this.open ? this.config.openText : this.config.closedText
  11748. span.title = view.state.phrase(this.open ? 'Fold line' : 'Unfold line')
  11749. return span
  11750. }
  11751. }
  11752. function foldGutter(config = {}) {
  11753. let fullConfig = Object.assign(Object.assign({}, foldGutterDefaults), config)
  11754. let canFold = new FoldMarker(fullConfig, true),
  11755. canUnfold = new FoldMarker(fullConfig, false)
  11756. let markers = ViewPlugin.fromClass(
  11757. class {
  11758. constructor(view) {
  11759. this.from = view.viewport.from
  11760. this.markers = this.buildMarkers(view)
  11761. }
  11762. update(update) {
  11763. if (
  11764. update.docChanged ||
  11765. update.viewportChanged ||
  11766. update.startState.facet(language) != update.state.facet(language) ||
  11767. update.startState.field(foldState, false) != update.state.field(foldState, false)
  11768. )
  11769. this.markers = this.buildMarkers(update.view)
  11770. }
  11771. buildMarkers(view) {
  11772. let builder = new RangeSetBuilder()
  11773. view.viewportLines(line => {
  11774. let mark = foldInside(view.state, line.from, line.to) ? canUnfold : foldable(view.state, line.from, line.to) ? canFold : null
  11775. if (mark) builder.add(line.from, line.from, mark)
  11776. })
  11777. return builder.finish()
  11778. }
  11779. }
  11780. )
  11781. return [
  11782. markers,
  11783. gutter({
  11784. class: 'cm-foldGutter',
  11785. markers(view) {
  11786. var _a
  11787. return ((_a = view.plugin(markers)) === null || _a === void 0 ? void 0 : _a.markers) || RangeSet.empty
  11788. },
  11789. initialSpacer() {
  11790. return new FoldMarker(fullConfig, false)
  11791. },
  11792. domEventHandlers: {
  11793. click: (view, line) => {
  11794. let folded = foldInside(view.state, line.from, line.to)
  11795. if (folded) {
  11796. view.dispatch({ effects: unfoldEffect.of(folded) })
  11797. return true
  11798. }
  11799. let range = foldable(view.state, line.from, line.to)
  11800. if (range) {
  11801. view.dispatch({ effects: foldEffect.of(range) })
  11802. return true
  11803. }
  11804. return false
  11805. }
  11806. }
  11807. }),
  11808. codeFolding()
  11809. ]
  11810. }
  11811. const baseTheme$3 = EditorView.baseTheme({
  11812. '.cm-foldPlaceholder': { backgroundColor: '#eee', border: '1px solid #ddd', color: '#888', borderRadius: '.2em', margin: '0 1px', padding: '0 1px', cursor: 'pointer' },
  11813. '.cm-foldGutter .cm-gutterElement': { padding: '0 1px', cursor: 'pointer' }
  11814. })
  11815. var _m11 = Object.freeze({
  11816. __proto__: null,
  11817. codeFolding: codeFolding,
  11818. foldAll: foldAll,
  11819. foldCode: foldCode,
  11820. foldEffect: foldEffect,
  11821. foldGutter: foldGutter,
  11822. foldKeymap: foldKeymap,
  11823. foldedRanges: foldedRanges,
  11824. unfoldAll: unfoldAll,
  11825. unfoldCode: unfoldCode,
  11826. unfoldEffect: unfoldEffect
  11827. })
  11828. const defaults$1 = { brackets: ['(', '[', '{', "'", '"'], before: ')]}\'":;>' }
  11829. const closeBracketEffect = StateEffect.define({
  11830. map(value, mapping) {
  11831. let mapped = mapping.mapPos(value, -1, MapMode.TrackAfter)
  11832. return mapped == null ? undefined : mapped
  11833. }
  11834. })
  11835. const skipBracketEffect = StateEffect.define({
  11836. map(value, mapping) {
  11837. return mapping.mapPos(value)
  11838. }
  11839. })
  11840. const closedBracket = new (class extends RangeValue {})()
  11841. closedBracket.startSide = 1
  11842. closedBracket.endSide = -1
  11843. const bracketState = StateField.define({
  11844. create() {
  11845. return RangeSet.empty
  11846. },
  11847. update(value, tr) {
  11848. if (tr.selection) {
  11849. let lineStart = tr.state.doc.lineAt(tr.selection.main.head).from
  11850. let prevLineStart = tr.startState.doc.lineAt(tr.startState.selection.main.head).from
  11851. if (lineStart != tr.changes.mapPos(prevLineStart, -1)) value = RangeSet.empty
  11852. }
  11853. value = value.map(tr.changes)
  11854. for (let _i145 = 0, _tr$effects6 = tr.effects, _length145 = _tr$effects6.length; _i145 < _length145; _i145++) {
  11855. let effect = _tr$effects6[_i145]
  11856. if (effect.is(closeBracketEffect)) value = value.update({ add: [closedBracket.range(effect.value, effect.value + 1)] })
  11857. else if (effect.is(skipBracketEffect)) value = value.update({ filter: from => from != effect.value })
  11858. }
  11859. return value
  11860. }
  11861. })
  11862. function closeBrackets() {
  11863. return [EditorView.inputHandler.of(handleInput), bracketState]
  11864. }
  11865. const definedClosing = '()[]{}<>'
  11866. function closing(ch) {
  11867. for (let i = 0; i < definedClosing.length; i += 2) if (definedClosing.charCodeAt(i) == ch) return definedClosing.charAt(i + 1)
  11868. return fromCodePoint(ch < 128 ? ch : ch + 1)
  11869. }
  11870. function config(state, pos) {
  11871. return state.languageDataAt('closeBrackets', pos)[0] || defaults$1
  11872. }
  11873. function handleInput(view, from, to, insert) {
  11874. if (view.composing) return false
  11875. let sel = view.state.selection.main
  11876. if (insert.length > 2 || (insert.length == 2 && codePointSize(codePointAt(insert, 0)) == 1) || from != sel.from || to != sel.to) return false
  11877. let tr = insertBracket(view.state, insert)
  11878. if (!tr) return false
  11879. view.dispatch(tr)
  11880. return true
  11881. }
  11882. const deleteBracketPair = ({ state, dispatch }) => {
  11883. let conf = config(state, state.selection.main.head)
  11884. let tokens = conf.brackets || defaults$1.brackets
  11885. let dont = null,
  11886. changes = state.changeByRange(range => {
  11887. if (range.empty) {
  11888. let before = prevChar(state.doc, range.head)
  11889. for (let _i146 = 0, _length146 = tokens.length; _i146 < _length146; _i146++) {
  11890. let token = tokens[_i146]
  11891. if (token == before && nextChar(state.doc, range.head) == closing(codePointAt(token, 0)))
  11892. return {
  11893. changes: { from: range.head - token.length, to: range.head + token.length },
  11894. range: EditorSelection.cursor(range.head - token.length),
  11895. annotations: Transaction.userEvent.of('delete')
  11896. }
  11897. }
  11898. }
  11899. return { range: (dont = range) }
  11900. })
  11901. if (!dont) dispatch(state.update(changes, { scrollIntoView: true }))
  11902. return !dont
  11903. }
  11904. const closeBracketsKeymap = [{ key: 'Backspace', run: deleteBracketPair }]
  11905. function insertBracket(state, bracket) {
  11906. let conf = config(state, state.selection.main.head)
  11907. let tokens = conf.brackets || defaults$1.brackets
  11908. for (let _i147 = 0, _length147 = tokens.length; _i147 < _length147; _i147++) {
  11909. let tok = tokens[_i147]
  11910. let closed = closing(codePointAt(tok, 0))
  11911. if (bracket == tok) return closed == tok ? handleSame(state, tok, tokens.indexOf(tok + tok + tok) > -1) : handleOpen(state, tok, closed, conf.before || defaults$1.before)
  11912. if (bracket == closed && closedBracketAt(state, state.selection.main.from)) return handleClose(state, tok, closed)
  11913. }
  11914. return null
  11915. }
  11916. function closedBracketAt(state, pos) {
  11917. let found = false
  11918. state.field(bracketState).between(0, state.doc.length, from => {
  11919. if (from == pos) found = true
  11920. })
  11921. return found
  11922. }
  11923. function nextChar(doc, pos) {
  11924. let next = doc.sliceString(pos, pos + 2)
  11925. return next.slice(0, codePointSize(codePointAt(next, 0)))
  11926. }
  11927. function prevChar(doc, pos) {
  11928. let prev = doc.sliceString(pos - 2, pos)
  11929. return codePointSize(codePointAt(prev, 0)) == prev.length ? prev : prev.slice(1)
  11930. }
  11931. function handleOpen(state, open, close, closeBefore) {
  11932. let dont = null,
  11933. changes = state.changeByRange(range => {
  11934. if (!range.empty)
  11935. return {
  11936. changes: [
  11937. { insert: open, from: range.from },
  11938. { insert: close, from: range.to }
  11939. ],
  11940. effects: closeBracketEffect.of(range.to + open.length),
  11941. range: EditorSelection.range(range.anchor + open.length, range.head + open.length)
  11942. }
  11943. let next = nextChar(state.doc, range.head)
  11944. if (!next || /\s/.test(next) || closeBefore.indexOf(next) > -1)
  11945. return { changes: { insert: open + close, from: range.head }, effects: closeBracketEffect.of(range.head + open.length), range: EditorSelection.cursor(range.head + open.length) }
  11946. return { range: (dont = range) }
  11947. })
  11948. return dont ? null : state.update(changes, { scrollIntoView: true, annotations: Transaction.userEvent.of('input') })
  11949. }
  11950. function handleClose(state, _open, close) {
  11951. let dont = null,
  11952. moved = state.selection.ranges.map(range => {
  11953. if (range.empty && nextChar(state.doc, range.head) == close) return EditorSelection.cursor(range.head + close.length)
  11954. return (dont = range)
  11955. })
  11956. return dont
  11957. ? null
  11958. : state.update({ selection: EditorSelection.create(moved, state.selection.mainIndex), scrollIntoView: true, effects: state.selection.ranges.map(({ from }) => skipBracketEffect.of(from)) })
  11959. }
  11960. function handleSame(state, token, allowTriple) {
  11961. let dont = null,
  11962. changes = state.changeByRange(range => {
  11963. if (!range.empty)
  11964. return {
  11965. changes: [
  11966. { insert: token, from: range.from },
  11967. { insert: token, from: range.to }
  11968. ],
  11969. effects: closeBracketEffect.of(range.to + token.length),
  11970. range: EditorSelection.range(range.anchor + token.length, range.head + token.length)
  11971. }
  11972. let pos = range.head,
  11973. next = nextChar(state.doc, pos)
  11974. if (next == token) {
  11975. if (nodeStart$1(state, pos)) {
  11976. return { changes: { insert: token + token, from: pos }, effects: closeBracketEffect.of(pos + token.length), range: EditorSelection.cursor(pos + token.length) }
  11977. } else if (closedBracketAt(state, pos)) {
  11978. let isTriple = allowTriple && state.sliceDoc(pos, pos + token.length * 3) == token + token + token
  11979. return { range: EditorSelection.cursor(pos + token.length * (isTriple ? 3 : 1)), effects: skipBracketEffect.of(pos) }
  11980. }
  11981. } else if (allowTriple && state.sliceDoc(pos - 2 * token.length, pos) == token + token && nodeStart$1(state, pos - 2 * token.length)) {
  11982. return { changes: { insert: token + token + token + token, from: pos }, effects: closeBracketEffect.of(pos + token.length), range: EditorSelection.cursor(pos + token.length) }
  11983. } else if (state.charCategorizer(pos)(next) != CharCategory.Word) {
  11984. let prev = state.sliceDoc(pos - 1, pos)
  11985. if (prev != token && state.charCategorizer(pos)(prev) != CharCategory.Word)
  11986. return { changes: { insert: token + token, from: pos }, effects: closeBracketEffect.of(pos + token.length), range: EditorSelection.cursor(pos + token.length) }
  11987. }
  11988. return { range: (dont = range) }
  11989. })
  11990. return dont ? null : state.update(changes, { scrollIntoView: true, annotations: Transaction.userEvent.of('input') })
  11991. }
  11992. function nodeStart$1(state, pos) {
  11993. let tree = syntaxTree(state).resolve(pos + 1)
  11994. return tree.parent && tree.from == pos
  11995. }
  11996. var _m13 = Object.freeze({ __proto__: null, closeBrackets: closeBrackets, closeBracketsKeymap: closeBracketsKeymap, deleteBracketPair: deleteBracketPair, insertBracket: insertBracket })
  11997. function crelt() {
  11998. var elt = arguments[0]
  11999. if (typeof elt == 'string') elt = document.createElement(elt)
  12000. var i = 1,
  12001. next = arguments[1]
  12002. if (next && typeof next == 'object' && next.nodeType == null && !Array.isArray(next)) {
  12003. for (var name in next)
  12004. if (Object.prototype.hasOwnProperty.call(next, name)) {
  12005. var value = next[name]
  12006. if (typeof value == 'string') elt.setAttribute(name, value)
  12007. else if (value != null) elt[name] = value
  12008. }
  12009. i++
  12010. }
  12011. for (; i < arguments.length; i++) add(elt, arguments[i])
  12012. return elt
  12013. }
  12014. function add(elt, child) {
  12015. if (typeof child == 'string') {
  12016. elt.appendChild(document.createTextNode(child))
  12017. } else if (child == null);
  12018. else if (child.nodeType != null) {
  12019. elt.appendChild(child)
  12020. } else if (Array.isArray(child)) {
  12021. for (var i = 0; i < child.length; i++) add(elt, child[i])
  12022. } else {
  12023. throw new RangeError('Unsupported child node: ' + child)
  12024. }
  12025. }
  12026. var _m37 = Object.freeze({ __proto__: null, default: crelt })
  12027. const basicNormalize = typeof String.prototype.normalize == 'function' ? x => x.normalize('NFKD') : x => x
  12028. class SearchCursor {
  12029. constructor(text, query, from = 0, to = text.length, normalize) {
  12030. this.value = { from: 0, to: 0 }
  12031. this.done = false
  12032. this.matches = []
  12033. this.buffer = ''
  12034. this.bufferPos = 0
  12035. this.iter = text.iterRange(from, to)
  12036. this.bufferStart = from
  12037. this.normalize = normalize ? x => normalize(basicNormalize(x)) : basicNormalize
  12038. this.query = this.normalize(query)
  12039. }
  12040. peek() {
  12041. if (this.bufferPos == this.buffer.length) {
  12042. this.bufferStart += this.buffer.length
  12043. this.iter.next()
  12044. if (this.iter.done) return -1
  12045. this.bufferPos = 0
  12046. this.buffer = this.iter.value
  12047. }
  12048. return codePointAt(this.buffer, this.bufferPos)
  12049. }
  12050. next() {
  12051. while (this.matches.length) this.matches.pop()
  12052. return this.nextOverlapping()
  12053. }
  12054. nextOverlapping() {
  12055. for (;;) {
  12056. let next = this.peek()
  12057. if (next < 0) {
  12058. this.done = true
  12059. return this
  12060. }
  12061. let str = fromCodePoint(next),
  12062. start = this.bufferStart + this.bufferPos
  12063. this.bufferPos += codePointSize(next)
  12064. let norm = this.normalize(str)
  12065. for (let i = 0, pos = start; ; i++) {
  12066. let code = norm.charCodeAt(i)
  12067. let match = this.match(code, pos)
  12068. if (match) {
  12069. this.value = match
  12070. return this
  12071. }
  12072. if (i == norm.length - 1) break
  12073. if (pos == start && i < str.length && str.charCodeAt(i) == code) pos++
  12074. }
  12075. }
  12076. }
  12077. match(code, pos) {
  12078. let match = null
  12079. for (let i = 0; i < this.matches.length; i += 2) {
  12080. let index = this.matches[i],
  12081. keep = false
  12082. if (this.query.charCodeAt(index) == code) {
  12083. if (index == this.query.length - 1) {
  12084. match = { from: this.matches[i + 1], to: pos + 1 }
  12085. } else {
  12086. this.matches[i]++
  12087. keep = true
  12088. }
  12089. }
  12090. if (!keep) {
  12091. this.matches.splice(i, 2)
  12092. i -= 2
  12093. }
  12094. }
  12095. if (this.query.charCodeAt(0) == code) {
  12096. if (this.query.length == 1) match = { from: pos, to: pos + 1 }
  12097. else this.matches.push(1, pos)
  12098. }
  12099. return match
  12100. }
  12101. }
  12102. const empty = { from: -1, to: -1, match: /.*/.exec('') }
  12103. const baseFlags = 'gm' + (/x/.unicode == null ? '' : 'u')
  12104. class RegExpCursor {
  12105. constructor(text, query, options, from = 0, to = text.length) {
  12106. this.to = to
  12107. this.curLine = ''
  12108. this.done = false
  12109. this.value = empty
  12110. if (/\\[sWDnr]|\n|\r|\[\^/.test(query)) return new MultilineRegExpCursor(text, query, options, from, to)
  12111. this.re = new RegExp(query, baseFlags + ((options === null || options === void 0 ? void 0 : options.ignoreCase) ? 'i' : ''))
  12112. this.iter = text.iter()
  12113. let startLine = text.lineAt(from)
  12114. this.curLineStart = startLine.from
  12115. this.matchPos = from
  12116. this.getLine(this.curLineStart)
  12117. }
  12118. getLine(skip) {
  12119. this.iter.next(skip)
  12120. if (this.iter.lineBreak) {
  12121. this.curLine = ''
  12122. } else {
  12123. this.curLine = this.iter.value
  12124. if (this.curLineStart + this.curLine.length > this.to) this.curLine = this.curLine.slice(0, this.to - this.curLineStart)
  12125. this.iter.next()
  12126. }
  12127. }
  12128. nextLine() {
  12129. this.curLineStart = this.curLineStart + this.curLine.length + 1
  12130. if (this.curLineStart > this.to) this.curLine = ''
  12131. else this.getLine(0)
  12132. }
  12133. next() {
  12134. for (let off = this.matchPos - this.curLineStart; ; ) {
  12135. this.re.lastIndex = off
  12136. let match = this.matchPos <= this.to && this.re.exec(this.curLine)
  12137. if (match) {
  12138. let from = this.curLineStart + match.index,
  12139. to = from + match[0].length
  12140. this.matchPos = to + (from == to ? 1 : 0)
  12141. if (from == this.curLine.length) this.nextLine()
  12142. if (from < to || from > this.value.to) {
  12143. this.value = { from, to, match }
  12144. return this
  12145. }
  12146. off = this.matchPos - this.curLineStart
  12147. } else if (this.curLineStart + this.curLine.length < this.to) {
  12148. this.nextLine()
  12149. off = 0
  12150. } else {
  12151. this.done = true
  12152. return this
  12153. }
  12154. }
  12155. }
  12156. }
  12157. const flattened = new WeakMap()
  12158. class FlattenedDoc {
  12159. constructor(from, text) {
  12160. this.from = from
  12161. this.text = text
  12162. }
  12163. get to() {
  12164. return this.from + this.text.length
  12165. }
  12166. static get(doc, from, to) {
  12167. let cached = flattened.get(doc)
  12168. if (!cached || cached.from >= to || cached.to <= from) {
  12169. let flat = new FlattenedDoc(from, doc.sliceString(from, to))
  12170. flattened.set(doc, flat)
  12171. return flat
  12172. }
  12173. if (cached.from == from && cached.to == to) return cached
  12174. let { text, from: cachedFrom } = cached
  12175. if (cachedFrom > from) {
  12176. text = doc.sliceString(from, cachedFrom) + text
  12177. cachedFrom = from
  12178. }
  12179. if (cached.to < to) text += doc.sliceString(cached.to, to)
  12180. flattened.set(doc, new FlattenedDoc(cachedFrom, text))
  12181. return new FlattenedDoc(from, text.slice(from - cachedFrom, to - cachedFrom))
  12182. }
  12183. }
  12184. class MultilineRegExpCursor {
  12185. constructor(text, query, options, from, to) {
  12186. this.text = text
  12187. this.to = to
  12188. this.done = false
  12189. this.value = empty
  12190. this.matchPos = from
  12191. this.re = new RegExp(query, baseFlags + ((options === null || options === void 0 ? void 0 : options.ignoreCase) ? 'i' : ''))
  12192. this.flat = FlattenedDoc.get(text, from, this.chunkEnd(from + 5000))
  12193. }
  12194. chunkEnd(pos) {
  12195. return pos >= this.to ? this.to : this.text.lineAt(pos).to
  12196. }
  12197. next() {
  12198. for (;;) {
  12199. let off = (this.re.lastIndex = this.matchPos - this.flat.from)
  12200. let match = this.re.exec(this.flat.text)
  12201. if (match && !match[0] && match.index == off) {
  12202. this.re.lastIndex = off + 1
  12203. match = this.re.exec(this.flat.text)
  12204. }
  12205. if (match && this.flat.to < this.to && match.index + match[0].length > this.flat.text.length - 10) match = null
  12206. if (match) {
  12207. let from = this.flat.from + match.index,
  12208. to = from + match[0].length
  12209. this.value = { from, to, match }
  12210. this.matchPos = to + (from == to ? 1 : 0)
  12211. return this
  12212. } else {
  12213. if (this.flat.to == this.to) {
  12214. this.done = true
  12215. return this
  12216. }
  12217. this.flat = FlattenedDoc.get(this.text, this.flat.from, this.chunkEnd(this.flat.from + this.flat.text.length * 2))
  12218. }
  12219. }
  12220. }
  12221. }
  12222. function validRegExp(source) {
  12223. try {
  12224. new RegExp(source, baseFlags)
  12225. return true
  12226. } catch (_a) {
  12227. return false
  12228. }
  12229. }
  12230. function createLineDialog(view) {
  12231. let input = crelt('input', { class: 'cm-textfield', name: 'line' })
  12232. let dom = crelt(
  12233. 'form',
  12234. {
  12235. class: 'cm-gotoLine',
  12236. onkeydown: event => {
  12237. if (event.keyCode == 27) {
  12238. event.preventDefault()
  12239. view.dispatch({ effects: dialogEffect.of(false) })
  12240. view.focus()
  12241. } else if (event.keyCode == 13) {
  12242. event.preventDefault()
  12243. go()
  12244. }
  12245. },
  12246. onsubmit: event => {
  12247. event.preventDefault()
  12248. go()
  12249. }
  12250. },
  12251. crelt('label', view.state.phrase('Go to line'), ': ', input),
  12252. ' ',
  12253. crelt('button', { class: 'cm-button', type: 'submit' }, view.state.phrase('go'))
  12254. )
  12255. function go() {
  12256. let match = /^([+-])?(\d+)?(:\d+)?(%)?$/.exec(input.value)
  12257. if (!match) return
  12258. let { state } = view,
  12259. startLine = state.doc.lineAt(state.selection.main.head)
  12260. let [, sign, ln, cl, percent] = match
  12261. let col = cl ? +cl.slice(1) : 0
  12262. let line = ln ? +ln : startLine.number
  12263. if (ln && percent) {
  12264. let pc = line / 100
  12265. if (sign) pc = pc * (sign == '-' ? -1 : 1) + startLine.number / state.doc.lines
  12266. line = Math.round(state.doc.lines * pc)
  12267. } else if (ln && sign) {
  12268. line = line * (sign == '-' ? -1 : 1) + startLine.number
  12269. }
  12270. let docLine = state.doc.line(Math.max(1, Math.min(state.doc.lines, line)))
  12271. view.dispatch({ effects: dialogEffect.of(false), selection: EditorSelection.cursor(docLine.from + Math.max(0, Math.min(col, docLine.length))), scrollIntoView: true })
  12272. view.focus()
  12273. }
  12274. return { dom, pos: -10 }
  12275. }
  12276. const dialogEffect = StateEffect.define()
  12277. const dialogField = StateField.define({
  12278. create() {
  12279. return true
  12280. },
  12281. update(value, tr) {
  12282. for (let _i148 = 0, _tr$effects7 = tr.effects, _length148 = _tr$effects7.length; _i148 < _length148; _i148++) {
  12283. let e = _tr$effects7[_i148]
  12284. if (e.is(dialogEffect)) value = e.value
  12285. }
  12286. return value
  12287. },
  12288. provide: f => showPanel.from(f, val => (val ? createLineDialog : null))
  12289. })
  12290. const gotoLine = view => {
  12291. let panel = getPanel(view, createLineDialog)
  12292. if (!panel) {
  12293. let effects = [dialogEffect.of(true)]
  12294. if (view.state.field(dialogField, false) == null) effects.push(StateEffect.appendConfig.of([dialogField, baseTheme$1$1]))
  12295. view.dispatch({ effects })
  12296. panel = getPanel(view, createLineDialog)
  12297. }
  12298. if (panel) panel.dom.querySelector('input').focus()
  12299. return true
  12300. }
  12301. const baseTheme$1$1 = EditorView.baseTheme({ '.cm-panel.cm-gotoLine': { padding: '2px 6px 4px', '& label': { fontSize: '80%' } } })
  12302. const defaultHighlightOptions = { highlightWordAroundCursor: false, minSelectionLength: 1, maxMatches: 100 }
  12303. const highlightConfig = Facet.define({
  12304. combine(options) {
  12305. return combineConfig(options, defaultHighlightOptions, { highlightWordAroundCursor: (a, b) => a || b, minSelectionLength: Math.min, maxMatches: Math.min })
  12306. }
  12307. })
  12308. function highlightSelectionMatches(options) {
  12309. let ext = [defaultTheme, matchHighlighter]
  12310. if (options) ext.push(highlightConfig.of(options))
  12311. return ext
  12312. }
  12313. const matchDeco = Decoration.mark({ class: 'cm-selectionMatch' })
  12314. const mainMatchDeco = Decoration.mark({ class: 'cm-selectionMatch cm-selectionMatch-main' })
  12315. const matchHighlighter = ViewPlugin.fromClass(
  12316. class {
  12317. constructor(view) {
  12318. this.decorations = this.getDeco(view)
  12319. }
  12320. update(update) {
  12321. if (update.selectionSet || update.docChanged || update.viewportChanged) this.decorations = this.getDeco(update.view)
  12322. }
  12323. getDeco(view) {
  12324. let conf = view.state.facet(highlightConfig)
  12325. let { state } = view,
  12326. sel = state.selection
  12327. if (sel.ranges.length > 1) return Decoration.none
  12328. let range = sel.main,
  12329. query,
  12330. check = null
  12331. if (range.empty) {
  12332. if (!conf.highlightWordAroundCursor) return Decoration.none
  12333. let word = state.wordAt(range.head)
  12334. if (!word) return Decoration.none
  12335. check = state.charCategorizer(range.head)
  12336. query = state.sliceDoc(word.from, word.to)
  12337. } else {
  12338. let len = range.to - range.from
  12339. if (len < conf.minSelectionLength || len > 200) return Decoration.none
  12340. query = state.sliceDoc(range.from, range.to).trim()
  12341. if (!query) return Decoration.none
  12342. }
  12343. let deco = []
  12344. for (let _i149 = 0, _view$visibleRanges4 = view.visibleRanges, _length149 = _view$visibleRanges4.length; _i149 < _length149; _i149++) {
  12345. let part = _view$visibleRanges4[_i149]
  12346. let cursor = new SearchCursor(state.doc, query, part.from, part.to)
  12347. while (!cursor.nextOverlapping().done) {
  12348. let { from, to } = cursor.value
  12349. if (
  12350. !check ||
  12351. ((from == 0 || check(state.sliceDoc(from - 1, from)) != CharCategory.Word) && (to == state.doc.length || check(state.sliceDoc(to, to + 1)) != CharCategory.Word))
  12352. ) {
  12353. if (check && from <= range.from && to >= range.to) deco.push(mainMatchDeco.range(from, to))
  12354. else if (from >= range.to || to <= range.from) deco.push(matchDeco.range(from, to))
  12355. if (deco.length > conf.maxMatches) return Decoration.none
  12356. }
  12357. }
  12358. }
  12359. return Decoration.set(deco)
  12360. }
  12361. },
  12362. { decorations: v => v.decorations }
  12363. )
  12364. const defaultTheme = EditorView.baseTheme({ '.cm-selectionMatch': { backgroundColor: '#99ff7780' }, '.cm-searchMatch .cm-selectionMatch': { backgroundColor: 'transparent' } })
  12365. const selectWord = ({ state, dispatch }) => {
  12366. let { selection } = state
  12367. let newSel = EditorSelection.create(
  12368. selection.ranges.map(range => state.wordAt(range.head) || EditorSelection.cursor(range.head)),
  12369. selection.mainIndex
  12370. )
  12371. if (newSel.eq(selection)) return false
  12372. dispatch(state.update({ selection: newSel }))
  12373. return true
  12374. }
  12375. function findNextOccurrence(state, query) {
  12376. let { ranges } = state.selection
  12377. let ahead = new SearchCursor(state.doc, query, ranges[ranges.length - 1].to).next()
  12378. if (!ahead.done) return ahead.value
  12379. let cursor = new SearchCursor(state.doc, query, 0, Math.max(0, ranges[ranges.length - 1].from - 1))
  12380. while (!cursor.next().done) {
  12381. if (!ranges.some(r => r.from === cursor.value.from)) return cursor.value
  12382. }
  12383. return null
  12384. }
  12385. const selectNextOccurrence = ({ state, dispatch }) => {
  12386. let { ranges } = state.selection
  12387. if (ranges.some(sel => sel.from === sel.to)) return selectWord({ state, dispatch })
  12388. let searchedText = state.sliceDoc(ranges[0].from, ranges[0].to)
  12389. if (state.selection.ranges.some(r => state.sliceDoc(r.from, r.to) != searchedText)) return false
  12390. let range = findNextOccurrence(state, searchedText)
  12391. if (!range) return false
  12392. dispatch(state.update({ selection: state.selection.addRange(EditorSelection.range(range.from, range.to)), scrollIntoView: true }))
  12393. return true
  12394. }
  12395. const searchConfigFacet = Facet.define({
  12396. combine(configs) {
  12397. return { top: configs.some(c => c.top) }
  12398. }
  12399. })
  12400. function searchConfig(config) {
  12401. return searchConfigFacet.of(config)
  12402. }
  12403. class Query {
  12404. constructor(search, replace, caseInsensitive) {
  12405. this.search = search
  12406. this.replace = replace
  12407. this.caseInsensitive = caseInsensitive
  12408. }
  12409. eq(other) {
  12410. return this.search == other.search && this.replace == other.replace && this.caseInsensitive == other.caseInsensitive && this.constructor == other.constructor
  12411. }
  12412. }
  12413. class StringQuery extends Query {
  12414. constructor(search, replace, caseInsensitive) {
  12415. super(search, replace, caseInsensitive)
  12416. this.unquoted = search.replace(/\\([nrt\\])/g, (_, ch) => (ch == 'n' ? '\n' : ch == 'r' ? '\r' : ch == 't' ? '\t' : '\\'))
  12417. }
  12418. cursor(doc, from = 0, to = doc.length) {
  12419. return new SearchCursor(doc, this.unquoted, from, to, this.caseInsensitive ? x => x.toLowerCase() : undefined)
  12420. }
  12421. nextMatch(doc, curFrom, curTo) {
  12422. let cursor = this.cursor(doc, curTo).nextOverlapping()
  12423. if (cursor.done) cursor = this.cursor(doc, 0, curFrom).nextOverlapping()
  12424. return cursor.done ? null : cursor.value
  12425. }
  12426. prevMatchInRange(doc, from, to) {
  12427. for (let pos = to; ; ) {
  12428. let start = Math.max(from, pos - 10000 - this.unquoted.length)
  12429. let cursor = this.cursor(doc, start, pos),
  12430. range = null
  12431. while (!cursor.nextOverlapping().done) range = cursor.value
  12432. if (range) return range
  12433. if (start == from) return null
  12434. pos -= 10000
  12435. }
  12436. }
  12437. prevMatch(doc, curFrom, curTo) {
  12438. return this.prevMatchInRange(doc, 0, curFrom) || this.prevMatchInRange(doc, curTo, doc.length)
  12439. }
  12440. getReplacement(_result) {
  12441. return this.replace
  12442. }
  12443. matchAll(doc, limit) {
  12444. let cursor = this.cursor(doc),
  12445. ranges = []
  12446. while (!cursor.next().done) {
  12447. if (ranges.length >= limit) return null
  12448. ranges.push(cursor.value)
  12449. }
  12450. return ranges
  12451. }
  12452. highlight(doc, from, to, add) {
  12453. let cursor = this.cursor(doc, Math.max(0, from - this.unquoted.length), Math.min(to + this.unquoted.length, doc.length))
  12454. while (!cursor.next().done) add(cursor.value.from, cursor.value.to)
  12455. }
  12456. get valid() {
  12457. return !!this.search
  12458. }
  12459. }
  12460. class RegExpQuery extends Query {
  12461. constructor(search, replace, caseInsensitive) {
  12462. super(search, replace, caseInsensitive)
  12463. this.valid = !!search && validRegExp(search)
  12464. }
  12465. cursor(doc, from = 0, to = doc.length) {
  12466. return new RegExpCursor(doc, this.search, this.caseInsensitive ? { ignoreCase: true } : undefined, from, to)
  12467. }
  12468. nextMatch(doc, curFrom, curTo) {
  12469. let cursor = this.cursor(doc, curTo).next()
  12470. if (cursor.done) cursor = this.cursor(doc, 0, curFrom).next()
  12471. return cursor.done ? null : cursor.value
  12472. }
  12473. prevMatchInRange(doc, from, to) {
  12474. for (let size = 1; ; size++) {
  12475. let start = Math.max(from, to - size * 10000)
  12476. let cursor = this.cursor(doc, start, to),
  12477. range = null
  12478. while (!cursor.next().done) range = cursor.value
  12479. if (range && (start == from || range.from > start + 10)) return range
  12480. if (start == from) return null
  12481. }
  12482. }
  12483. prevMatch(doc, curFrom, curTo) {
  12484. return this.prevMatchInRange(doc, 0, curFrom) || this.prevMatchInRange(doc, curTo, doc.length)
  12485. }
  12486. getReplacement(result) {
  12487. return this.replace.replace(/\$([$&\d+])/g, (m, i) => (i == '$' ? '$' : i == '&' ? result.match[0] : i != '0' && +i < result.match.length ? result.match[i] : m))
  12488. }
  12489. matchAll(doc, limit) {
  12490. let cursor = this.cursor(doc),
  12491. ranges = []
  12492. while (!cursor.next().done) {
  12493. if (ranges.length >= limit) return null
  12494. ranges.push(cursor.value)
  12495. }
  12496. return ranges
  12497. }
  12498. highlight(doc, from, to, add) {
  12499. let cursor = this.cursor(doc, Math.max(0, from - 250), Math.min(to + 250, doc.length))
  12500. while (!cursor.next().done) add(cursor.value.from, cursor.value.to)
  12501. }
  12502. }
  12503. const setQuery = StateEffect.define()
  12504. const togglePanel$1 = StateEffect.define()
  12505. const searchState = StateField.define({
  12506. create(state) {
  12507. return new SearchState(defaultQuery(state), createSearchPanel)
  12508. },
  12509. update(value, tr) {
  12510. for (let _i150 = 0, _tr$effects8 = tr.effects, _length150 = _tr$effects8.length; _i150 < _length150; _i150++) {
  12511. let effect = _tr$effects8[_i150]
  12512. if (effect.is(setQuery)) value = new SearchState(effect.value, value.panel)
  12513. else if (effect.is(togglePanel$1)) value = new SearchState(value.query, effect.value ? createSearchPanel : null)
  12514. }
  12515. return value
  12516. },
  12517. provide: f => showPanel.from(f, val => val.panel)
  12518. })
  12519. class SearchState {
  12520. constructor(query, panel) {
  12521. this.query = query
  12522. this.panel = panel
  12523. }
  12524. }
  12525. const matchMark = Decoration.mark({ class: 'cm-searchMatch' }),
  12526. selectedMatchMark = Decoration.mark({ class: 'cm-searchMatch cm-searchMatch-selected' })
  12527. const searchHighlighter = ViewPlugin.fromClass(
  12528. class {
  12529. constructor(view) {
  12530. this.view = view
  12531. this.decorations = this.highlight(view.state.field(searchState))
  12532. }
  12533. update(update) {
  12534. let state = update.state.field(searchState)
  12535. if (state != update.startState.field(searchState) || update.docChanged || update.selectionSet) this.decorations = this.highlight(state)
  12536. }
  12537. highlight({ query, panel }) {
  12538. if (!panel || !query.valid) return Decoration.none
  12539. let { view } = this
  12540. let builder = new RangeSetBuilder()
  12541. for (let i = 0, ranges = view.visibleRanges, l = ranges.length; i < l; i++) {
  12542. let { from, to } = ranges[i]
  12543. while (i < l - 1 && to > ranges[i + 1].from - 2 * 250) to = ranges[++i].to
  12544. query.highlight(view.state.doc, from, to, (from, to) => {
  12545. let selected = view.state.selection.ranges.some(r => r.from == from && r.to == to)
  12546. builder.add(from, to, selected ? selectedMatchMark : matchMark)
  12547. })
  12548. }
  12549. return builder.finish()
  12550. }
  12551. },
  12552. { decorations: v => v.decorations }
  12553. )
  12554. function searchCommand(f) {
  12555. return view => {
  12556. let state = view.state.field(searchState, false)
  12557. return state && state.query.valid ? f(view, state) : openSearchPanel(view)
  12558. }
  12559. }
  12560. const findNext = searchCommand((view, { query }) => {
  12561. let { from, to } = view.state.selection.main
  12562. let next = query.nextMatch(view.state.doc, from, to)
  12563. if (!next || (next.from == from && next.to == to)) return false
  12564. view.dispatch({ selection: { anchor: next.from, head: next.to }, scrollIntoView: true, effects: announceMatch(view, next) })
  12565. return true
  12566. })
  12567. const findPrevious = searchCommand((view, { query }) => {
  12568. let { state } = view,
  12569. { from, to } = state.selection.main
  12570. let range = query.prevMatch(state.doc, from, to)
  12571. if (!range) return false
  12572. view.dispatch({ selection: { anchor: range.from, head: range.to }, scrollIntoView: true, effects: announceMatch(view, range) })
  12573. return true
  12574. })
  12575. const selectMatches = searchCommand((view, { query }) => {
  12576. let ranges = query.matchAll(view.state.doc, 1000)
  12577. if (!ranges || !ranges.length) return false
  12578. view.dispatch({ selection: EditorSelection.create(ranges.map(r => EditorSelection.range(r.from, r.to))) })
  12579. return true
  12580. })
  12581. const selectSelectionMatches = ({ state, dispatch }) => {
  12582. let sel = state.selection
  12583. if (sel.ranges.length > 1 || sel.main.empty) return false
  12584. let { from, to } = sel.main
  12585. let ranges = [],
  12586. main = 0
  12587. for (let cur = new SearchCursor(state.doc, state.sliceDoc(from, to)); !cur.next().done; ) {
  12588. if (ranges.length > 1000) return false
  12589. if (cur.value.from == from) main = ranges.length
  12590. ranges.push(EditorSelection.range(cur.value.from, cur.value.to))
  12591. }
  12592. dispatch(state.update({ selection: EditorSelection.create(ranges, main) }))
  12593. return true
  12594. }
  12595. const replaceNext = searchCommand((view, { query }) => {
  12596. let { state } = view,
  12597. { from, to } = state.selection.main
  12598. let next = query.nextMatch(state.doc, from, from)
  12599. if (!next) return false
  12600. let changes = [],
  12601. selection,
  12602. replacement
  12603. if (next.from == from && next.to == to) {
  12604. replacement = state.toText(query.getReplacement(next))
  12605. changes.push({ from: next.from, to: next.to, insert: replacement })
  12606. next = query.nextMatch(state.doc, next.from, next.to)
  12607. }
  12608. if (next) {
  12609. let off = changes.length == 0 || changes[0].from >= next.to ? 0 : next.to - next.from - replacement.length
  12610. selection = { anchor: next.from - off, head: next.to - off }
  12611. }
  12612. view.dispatch({ changes, selection, scrollIntoView: !!selection, effects: next ? announceMatch(view, next) : undefined })
  12613. return true
  12614. })
  12615. const replaceAll = searchCommand((view, { query }) => {
  12616. let changes = query.matchAll(view.state.doc, 1e9).map(match => {
  12617. let { from, to } = match
  12618. return { from, to, insert: query.getReplacement(match) }
  12619. })
  12620. if (!changes.length) return false
  12621. view.dispatch({ changes })
  12622. return true
  12623. })
  12624. function createSearchPanel(view) {
  12625. let { query } = view.state.field(searchState)
  12626. return {
  12627. dom: buildPanel({
  12628. view,
  12629. query,
  12630. updateQuery(q) {
  12631. if (!query.eq(q)) {
  12632. query = q
  12633. view.dispatch({ effects: setQuery.of(query) })
  12634. }
  12635. }
  12636. }),
  12637. mount() {
  12638. this.dom.querySelector('[name=search]').select()
  12639. },
  12640. pos: 80,
  12641. top: view.state.facet(searchConfigFacet).top
  12642. }
  12643. }
  12644. function defaultQuery(state, fallback) {
  12645. let sel = state.selection.main
  12646. let selText = sel.empty || sel.to > sel.from + 100 ? '' : state.sliceDoc(sel.from, sel.to)
  12647. return fallback && !selText ? fallback : new StringQuery(selText.replace(/\n/g, '\\n'), '', (fallback === null || fallback === void 0 ? void 0 : fallback.caseInsensitive) || false)
  12648. }
  12649. const openSearchPanel = view => {
  12650. let state = view.state.field(searchState, false)
  12651. if (state && state.panel) {
  12652. let panel = getPanel(view, createSearchPanel)
  12653. if (!panel) return false
  12654. panel.dom.querySelector('[name=search]').focus()
  12655. } else {
  12656. view.dispatch({ effects: [togglePanel$1.of(true), state ? setQuery.of(defaultQuery(view.state, state.query)) : StateEffect.appendConfig.of(searchExtensions)] })
  12657. }
  12658. return true
  12659. }
  12660. const closeSearchPanel = view => {
  12661. let state = view.state.field(searchState, false)
  12662. if (!state || !state.panel) return false
  12663. let panel = getPanel(view, createSearchPanel)
  12664. if (panel && panel.dom.contains(view.root.activeElement)) view.focus()
  12665. view.dispatch({ effects: togglePanel$1.of(false) })
  12666. return true
  12667. }
  12668. const searchKeymap = [
  12669. { key: 'Mod-f', run: openSearchPanel, scope: 'editor search-panel' },
  12670. { key: 'F3', run: findNext, shift: findPrevious, scope: 'editor search-panel' },
  12671. { key: 'Mod-g', run: findNext, shift: findPrevious, scope: 'editor search-panel' },
  12672. { key: 'Escape', run: closeSearchPanel, scope: 'editor search-panel' },
  12673. { key: 'Mod-Shift-l', run: selectSelectionMatches },
  12674. { key: 'Alt-g', run: gotoLine },
  12675. { key: 'Mod-d', run: selectNextOccurrence }
  12676. ]
  12677. function buildPanel(conf) {
  12678. function phrase(phrase) {
  12679. return conf.view.state.phrase(phrase)
  12680. }
  12681. let searchField = crelt('input', {
  12682. value: conf.query.search,
  12683. placeholder: phrase('Find'),
  12684. 'aria-label': phrase('Find'),
  12685. class: 'cm-textfield',
  12686. name: 'search',
  12687. onchange: update,
  12688. onkeyup: update
  12689. })
  12690. let replaceField = crelt('input', {
  12691. value: conf.query.replace,
  12692. placeholder: phrase('Replace'),
  12693. 'aria-label': phrase('Replace'),
  12694. class: 'cm-textfield',
  12695. name: 'replace',
  12696. onchange: update,
  12697. onkeyup: update
  12698. })
  12699. let caseField = crelt('input', { type: 'checkbox', name: 'case', checked: !conf.query.caseInsensitive, onchange: update })
  12700. let reField = crelt('input', { type: 'checkbox', name: 're', checked: conf.query instanceof RegExpQuery, onchange: update })
  12701. function update() {
  12702. conf.updateQuery(new (reField.checked ? RegExpQuery : StringQuery)(searchField.value, replaceField.value, !caseField.checked))
  12703. }
  12704. function keydown(e) {
  12705. if (runScopeHandlers(conf.view, e, 'search-panel')) {
  12706. e.preventDefault()
  12707. } else if (e.keyCode == 13 && e.target == searchField) {
  12708. e.preventDefault()
  12709. ;(e.shiftKey ? findPrevious : findNext)(conf.view)
  12710. } else if (e.keyCode == 13 && e.target == replaceField) {
  12711. e.preventDefault()
  12712. replaceNext(conf.view)
  12713. }
  12714. }
  12715. function button(name, onclick, content) {
  12716. return crelt('button', { class: 'cm-button', name, onclick }, content)
  12717. }
  12718. let panel = crelt('div', { onkeydown: keydown, class: 'cm-search' }, [
  12719. searchField,
  12720. button('next', () => findNext(conf.view), [phrase('next')]),
  12721. button('prev', () => findPrevious(conf.view), [phrase('previous')]),
  12722. button('select', () => selectMatches(conf.view), [phrase('all')]),
  12723. crelt('label', null, [caseField, phrase('match case')]),
  12724. crelt('label', null, [reField, phrase('regexp')]),
  12725. crelt('br'),
  12726. replaceField,
  12727. button('replace', () => replaceNext(conf.view), [phrase('replace')]),
  12728. button('replaceAll', () => replaceAll(conf.view), [phrase('replace all')]),
  12729. crelt('button', { name: 'close', onclick: () => closeSearchPanel(conf.view), 'aria-label': phrase('close') }, ['×'])
  12730. ])
  12731. return panel
  12732. }
  12733. const AnnounceMargin = 30
  12734. const Break = /[\s\.,:;?!]/
  12735. function announceMatch(view, { from, to }) {
  12736. let lineStart = view.state.doc.lineAt(from).from,
  12737. lineEnd = view.state.doc.lineAt(to).to
  12738. let start = Math.max(lineStart, from - AnnounceMargin),
  12739. end = Math.min(lineEnd, to + AnnounceMargin)
  12740. let text = view.state.sliceDoc(start, end)
  12741. if (start != lineStart) {
  12742. for (let i = 0; i < AnnounceMargin; i++)
  12743. if (!Break.test(text[i + 1]) && Break.test(text[i])) {
  12744. text = text.slice(i)
  12745. break
  12746. }
  12747. }
  12748. if (end != lineEnd) {
  12749. for (let i = text.length - 1; i > text.length - AnnounceMargin; i--)
  12750. if (!Break.test(text[i - 1]) && Break.test(text[i])) {
  12751. text = text.slice(0, i)
  12752. break
  12753. }
  12754. }
  12755. return EditorView.announce.of(`${view.state.phrase('current match')}. ${text} ${view.state.phrase('on line')} ${view.state.doc.lineAt(from).number}`)
  12756. }
  12757. const baseTheme$2 = EditorView.baseTheme({
  12758. '.cm-panel.cm-search': {
  12759. padding: '2px 6px 4px',
  12760. position: 'relative',
  12761. '& [name=close]': { position: 'absolute', top: '0', right: '4px', backgroundColor: 'inherit', border: 'none', font: 'inherit', padding: 0, margin: 0 },
  12762. '& input, & button, & label': { margin: '.2em .6em .2em 0' },
  12763. '& input[type=checkbox]': { marginRight: '.2em' },
  12764. '& label': { fontSize: '80%', whiteSpace: 'pre' }
  12765. },
  12766. '&light .cm-searchMatch': { backgroundColor: '#ffff0054' },
  12767. '&dark .cm-searchMatch': { backgroundColor: '#00ffff8a' },
  12768. '&light .cm-searchMatch-selected': { backgroundColor: '#ff6a0054' },
  12769. '&dark .cm-searchMatch-selected': { backgroundColor: '#ff00ff8a' }
  12770. })
  12771. const searchExtensions = [searchState, Prec.fallback(searchHighlighter), baseTheme$2]
  12772. var _m14 = Object.freeze({
  12773. __proto__: null,
  12774. RegExpCursor: RegExpCursor,
  12775. SearchCursor: SearchCursor,
  12776. closeSearchPanel: closeSearchPanel,
  12777. findNext: findNext,
  12778. findPrevious: findPrevious,
  12779. gotoLine: gotoLine,
  12780. highlightSelectionMatches: highlightSelectionMatches,
  12781. openSearchPanel: openSearchPanel,
  12782. replaceAll: replaceAll,
  12783. replaceNext: replaceNext,
  12784. searchConfig: searchConfig,
  12785. searchKeymap: searchKeymap,
  12786. selectMatches: selectMatches,
  12787. selectNextOccurrence: selectNextOccurrence,
  12788. selectSelectionMatches: selectSelectionMatches
  12789. })
  12790. class SelectedDiagnostic {
  12791. constructor(from, to, diagnostic) {
  12792. this.from = from
  12793. this.to = to
  12794. this.diagnostic = diagnostic
  12795. }
  12796. }
  12797. class LintState {
  12798. constructor(diagnostics, panel, selected) {
  12799. this.diagnostics = diagnostics
  12800. this.panel = panel
  12801. this.selected = selected
  12802. }
  12803. static init(diagnostics, panel) {
  12804. let ranges = Decoration.set(
  12805. diagnostics.map(d => {
  12806. return d.from < d.to
  12807. ? Decoration.mark({ attributes: { class: 'cm-lintRange cm-lintRange-' + d.severity }, diagnostic: d }).range(d.from, d.to)
  12808. : Decoration.widget({ widget: new DiagnosticWidget(d), diagnostic: d }).range(d.from)
  12809. })
  12810. )
  12811. return new LintState(ranges, panel, findDiagnostic(ranges))
  12812. }
  12813. }
  12814. function findDiagnostic(diagnostics, diagnostic = null, after = 0) {
  12815. let found = null
  12816. diagnostics.between(after, 1e9, (from, to, { spec }) => {
  12817. if (diagnostic && spec.diagnostic != diagnostic) return
  12818. found = new SelectedDiagnostic(from, to, spec.diagnostic)
  12819. return false
  12820. })
  12821. return found
  12822. }
  12823. function maybeEnableLint(state, effects, diagnostics) {
  12824. return state.field(lintState, false)
  12825. ? effects
  12826. : effects.concat(
  12827. StateEffect.appendConfig.of([
  12828. diagnostics ? lintState.init(() => LintState.init(diagnostics, null)) : lintState,
  12829. EditorView.decorations.compute([lintState], state => {
  12830. let { selected, panel } = state.field(lintState)
  12831. return !selected || !panel || selected.from == selected.to ? Decoration.none : Decoration.set([activeMark.range(selected.from, selected.to)])
  12832. }),
  12833. hoverTooltip(lintTooltip),
  12834. baseTheme$1
  12835. ])
  12836. )
  12837. }
  12838. function setDiagnostics(state, diagnostics) {
  12839. return { effects: maybeEnableLint(state, [setDiagnosticsEffect.of(diagnostics)], diagnostics) }
  12840. }
  12841. const setDiagnosticsEffect = StateEffect.define()
  12842. const togglePanel = StateEffect.define()
  12843. const movePanelSelection = StateEffect.define()
  12844. const lintState = StateField.define({
  12845. create() {
  12846. return new LintState(Decoration.none, null, null)
  12847. },
  12848. update(value, tr) {
  12849. if (tr.docChanged) {
  12850. let mapped = value.diagnostics.map(tr.changes),
  12851. selected = null
  12852. if (value.selected) {
  12853. let selPos = tr.changes.mapPos(value.selected.from, 1)
  12854. selected = findDiagnostic(mapped, value.selected.diagnostic, selPos) || findDiagnostic(mapped, null, selPos)
  12855. }
  12856. value = new LintState(mapped, value.panel, selected)
  12857. }
  12858. for (let _i151 = 0, _tr$effects9 = tr.effects, _length151 = _tr$effects9.length; _i151 < _length151; _i151++) {
  12859. let effect = _tr$effects9[_i151]
  12860. if (effect.is(setDiagnosticsEffect)) {
  12861. value = LintState.init(effect.value, value.panel)
  12862. } else if (effect.is(togglePanel)) {
  12863. value = new LintState(value.diagnostics, effect.value ? LintPanel.open : null, value.selected)
  12864. } else if (effect.is(movePanelSelection)) {
  12865. value = new LintState(value.diagnostics, value.panel, effect.value)
  12866. }
  12867. }
  12868. return value
  12869. },
  12870. provide: f => [showPanel.from(f, val => val.panel), EditorView.decorations.from(f, s => s.diagnostics)]
  12871. })
  12872. const activeMark = Decoration.mark({ class: 'cm-lintRange cm-lintRange-active' })
  12873. function lintTooltip(view, pos, side) {
  12874. let { diagnostics } = view.state.field(lintState)
  12875. let found = [],
  12876. stackStart = 2e8,
  12877. stackEnd = 0
  12878. diagnostics.between(pos - (side < 0 ? 1 : 0), pos + (side > 0 ? 1 : 0), (from, to, { spec }) => {
  12879. if (pos >= from && pos <= to && (from == to || ((pos > from || side > 0) && (pos < to || side < 0)))) {
  12880. found.push(spec.diagnostic)
  12881. stackStart = Math.min(from, stackStart)
  12882. stackEnd = Math.max(to, stackEnd)
  12883. }
  12884. })
  12885. if (!found.length) return null
  12886. return {
  12887. pos: stackStart,
  12888. end: stackEnd,
  12889. above: view.state.doc.lineAt(stackStart).to < stackEnd,
  12890. create() {
  12891. return {
  12892. dom: crelt(
  12893. 'ul',
  12894. { class: 'cm-tooltip-lint' },
  12895. found.map(d => renderDiagnostic(view, d, false))
  12896. )
  12897. }
  12898. }
  12899. }
  12900. }
  12901. const openLintPanel = view => {
  12902. let field = view.state.field(lintState, false)
  12903. if (!field || !field.panel) view.dispatch({ effects: maybeEnableLint(view.state, [togglePanel.of(true)]) })
  12904. let panel = getPanel(view, LintPanel.open)
  12905. if (panel) panel.dom.querySelector('.cm-panel-lint ul').focus()
  12906. return true
  12907. }
  12908. const closeLintPanel = view => {
  12909. let field = view.state.field(lintState, false)
  12910. if (!field || !field.panel) return false
  12911. view.dispatch({ effects: togglePanel.of(false) })
  12912. return true
  12913. }
  12914. const nextDiagnostic = view => {
  12915. let field = view.state.field(lintState, false)
  12916. if (!field) return false
  12917. let sel = view.state.selection.main,
  12918. next = field.diagnostics.iter(sel.to + 1)
  12919. if (!next.value) {
  12920. next = field.diagnostics.iter(0)
  12921. if (!next.value || (next.from == sel.from && next.to == sel.to)) return false
  12922. }
  12923. view.dispatch({ selection: { anchor: next.from, head: next.to }, scrollIntoView: true })
  12924. return true
  12925. }
  12926. const lintKeymap = [
  12927. { key: 'Mod-Shift-m', run: openLintPanel },
  12928. { key: 'F8', run: nextDiagnostic }
  12929. ]
  12930. function linter(source, config = {}) {
  12931. var _a
  12932. let delay = (_a = config.delay) !== null && _a !== void 0 ? _a : 750
  12933. return ViewPlugin.fromClass(
  12934. class {
  12935. constructor(view) {
  12936. this.view = view
  12937. this.lintTime = Date.now() + delay
  12938. this.set = true
  12939. this.run = this.run.bind(this)
  12940. setTimeout(this.run, delay)
  12941. }
  12942. run() {
  12943. let now = Date.now()
  12944. if (now < this.lintTime - 10) {
  12945. setTimeout(this.run, this.lintTime - now)
  12946. } else {
  12947. this.set = false
  12948. let { state } = this.view
  12949. Promise.resolve(source(this.view)).then(
  12950. annotations => {
  12951. var _a, _b
  12952. if (
  12953. this.view.state.doc == state.doc &&
  12954. (annotations.length ||
  12955. ((_b = (_a = this.view.state.field(lintState, false)) === null || _a === void 0 ? void 0 : _a.diagnostics) === null || _b === void 0 ? void 0 : _b.size))
  12956. )
  12957. this.view.dispatch(setDiagnostics(this.view.state, annotations))
  12958. },
  12959. error => {
  12960. logException(this.view.state, error)
  12961. }
  12962. )
  12963. }
  12964. }
  12965. update(update) {
  12966. if (update.docChanged) {
  12967. this.lintTime = Date.now() + delay
  12968. if (!this.set) {
  12969. this.set = true
  12970. setTimeout(this.run, delay)
  12971. }
  12972. }
  12973. }
  12974. }
  12975. )
  12976. }
  12977. function assignKeys(actions) {
  12978. let assigned = []
  12979. if (actions)
  12980. actions: for (let _i152 = 0, _length152 = actions.length; _i152 < _length152; _i152++) {
  12981. let { name } = actions[_i152]
  12982. for (let i = 0; i < name.length; i++) {
  12983. let ch = name[i]
  12984. if (/[a-zA-Z]/.test(ch) && !assigned.some(c => c.toLowerCase() == ch.toLowerCase())) {
  12985. assigned.push(ch)
  12986. continue actions
  12987. }
  12988. }
  12989. assigned.push('')
  12990. }
  12991. return assigned
  12992. }
  12993. function renderDiagnostic(view, diagnostic, inPanel) {
  12994. var _a
  12995. let keys = inPanel ? assignKeys(diagnostic.actions) : []
  12996. return crelt(
  12997. 'li',
  12998. { class: 'cm-diagnostic cm-diagnostic-' + diagnostic.severity },
  12999. crelt('span', { class: 'cm-diagnosticText' }, diagnostic.message),
  13000. (_a = diagnostic.actions) === null || _a === void 0
  13001. ? void 0
  13002. : _a.map((action, i) => {
  13003. let click = e => {
  13004. e.preventDefault()
  13005. let found = findDiagnostic(view.state.field(lintState).diagnostics, diagnostic)
  13006. if (found) action.apply(view, found.from, found.to)
  13007. }
  13008. let { name } = action,
  13009. keyIndex = keys[i] ? name.indexOf(keys[i]) : -1
  13010. let nameElt = keyIndex < 0 ? name : [name.slice(0, keyIndex), crelt('u', name.slice(keyIndex, keyIndex + 1)), name.slice(keyIndex + 1)]
  13011. return crelt(
  13012. 'button',
  13013. { class: 'cm-diagnosticAction', onclick: click, onmousedown: click, 'aria-label': ` Action: ${name}${keyIndex < 0 ? '' : ` (access key "${keys[i]})"`}.` },
  13014. nameElt
  13015. )
  13016. }),
  13017. diagnostic.source && crelt('div', { class: 'cm-diagnosticSource' }, diagnostic.source)
  13018. )
  13019. }
  13020. class DiagnosticWidget extends WidgetType {
  13021. constructor(diagnostic) {
  13022. super()
  13023. this.diagnostic = diagnostic
  13024. }
  13025. eq(other) {
  13026. return other.diagnostic == this.diagnostic
  13027. }
  13028. toDOM() {
  13029. return crelt('span', { class: 'cm-lintPoint cm-lintPoint-' + this.diagnostic.severity })
  13030. }
  13031. }
  13032. class PanelItem {
  13033. constructor(view, diagnostic) {
  13034. this.diagnostic = diagnostic
  13035. this.id = 'item_' + Math.floor(Math.random() * 0xffffffff).toString(16)
  13036. this.dom = renderDiagnostic(view, diagnostic, true)
  13037. this.dom.id = this.id
  13038. this.dom.setAttribute('role', 'option')
  13039. }
  13040. }
  13041. class LintPanel {
  13042. constructor(view) {
  13043. this.view = view
  13044. this.items = []
  13045. let onkeydown = event => {
  13046. if (event.keyCode == 27) {
  13047. closeLintPanel(this.view)
  13048. this.view.focus()
  13049. } else if (event.keyCode == 38 || event.keyCode == 33) {
  13050. this.moveSelection((this.selectedIndex - 1 + this.items.length) % this.items.length)
  13051. } else if (event.keyCode == 40 || event.keyCode == 34) {
  13052. this.moveSelection((this.selectedIndex + 1) % this.items.length)
  13053. } else if (event.keyCode == 36) {
  13054. this.moveSelection(0)
  13055. } else if (event.keyCode == 35) {
  13056. this.moveSelection(this.items.length - 1)
  13057. } else if (event.keyCode == 13) {
  13058. this.view.focus()
  13059. } else if (event.keyCode >= 65 && event.keyCode <= 90 && this.items.length) {
  13060. let { diagnostic } = this.items[this.selectedIndex],
  13061. keys = assignKeys(diagnostic.actions)
  13062. for (let i = 0; i < keys.length; i++)
  13063. if (keys[i].toUpperCase().charCodeAt(0) == event.keyCode) {
  13064. let found = findDiagnostic(this.view.state.field(lintState).diagnostics, diagnostic)
  13065. if (found) diagnostic.actions[i].apply(view, found.from, found.to)
  13066. }
  13067. } else {
  13068. return
  13069. }
  13070. event.preventDefault()
  13071. }
  13072. let onclick = event => {
  13073. for (let i = 0; i < this.items.length; i++) {
  13074. if (this.items[i].dom.contains(event.target)) this.moveSelection(i)
  13075. }
  13076. }
  13077. this.list = crelt('ul', { tabIndex: 0, role: 'listbox', 'aria-label': this.view.state.phrase('Diagnostics'), onkeydown, onclick })
  13078. this.dom = crelt(
  13079. 'div',
  13080. { class: 'cm-panel-lint' },
  13081. this.list,
  13082. crelt('button', { name: 'close', 'aria-label': this.view.state.phrase('close'), onclick: () => closeLintPanel(this.view) }, '×')
  13083. )
  13084. this.update()
  13085. }
  13086. get selectedIndex() {
  13087. let selected = this.view.state.field(lintState).selected
  13088. if (!selected) return -1
  13089. for (let i = 0; i < this.items.length; i++) if (this.items[i].diagnostic == selected.diagnostic) return i
  13090. return -1
  13091. }
  13092. update() {
  13093. let { diagnostics, selected } = this.view.state.field(lintState)
  13094. let i = 0,
  13095. needsSync = false,
  13096. newSelectedItem = null
  13097. diagnostics.between(0, this.view.state.doc.length, (_start, _end, { spec }) => {
  13098. let found = -1,
  13099. item
  13100. for (let j = i; j < this.items.length; j++)
  13101. if (this.items[j].diagnostic == spec.diagnostic) {
  13102. found = j
  13103. break
  13104. }
  13105. if (found < 0) {
  13106. item = new PanelItem(this.view, spec.diagnostic)
  13107. this.items.splice(i, 0, item)
  13108. needsSync = true
  13109. } else {
  13110. item = this.items[found]
  13111. if (found > i) {
  13112. this.items.splice(i, found - i)
  13113. needsSync = true
  13114. }
  13115. }
  13116. if (selected && item.diagnostic == selected.diagnostic) {
  13117. if (!item.dom.hasAttribute('aria-selected')) {
  13118. item.dom.setAttribute('aria-selected', 'true')
  13119. newSelectedItem = item
  13120. }
  13121. } else if (item.dom.hasAttribute('aria-selected')) {
  13122. item.dom.removeAttribute('aria-selected')
  13123. }
  13124. i++
  13125. })
  13126. while (i < this.items.length && !(this.items.length == 1 && this.items[0].diagnostic.from < 0)) {
  13127. needsSync = true
  13128. this.items.pop()
  13129. }
  13130. if (this.items.length == 0) {
  13131. this.items.push(new PanelItem(this.view, { from: -1, to: -1, severity: 'info', message: this.view.state.phrase('No diagnostics') }))
  13132. needsSync = true
  13133. }
  13134. if (newSelectedItem) {
  13135. this.list.setAttribute('aria-activedescendant', newSelectedItem.id)
  13136. this.view.requestMeasure({
  13137. key: this,
  13138. read: () => ({ sel: newSelectedItem.dom.getBoundingClientRect(), panel: this.list.getBoundingClientRect() }),
  13139. write: ({ sel, panel }) => {
  13140. if (sel.top < panel.top) this.list.scrollTop -= panel.top - sel.top
  13141. else if (sel.bottom > panel.bottom) this.list.scrollTop += sel.bottom - panel.bottom
  13142. }
  13143. })
  13144. } else if (!this.items.length) {
  13145. this.list.removeAttribute('aria-activedescendant')
  13146. }
  13147. if (needsSync) this.sync()
  13148. }
  13149. sync() {
  13150. let domPos = this.list.firstChild
  13151. function rm() {
  13152. let prev = domPos
  13153. domPos = prev.nextSibling
  13154. prev.remove()
  13155. }
  13156. for (let _i153 = 0, _this$items = this.items, _length153 = _this$items.length; _i153 < _length153; _i153++) {
  13157. let item = _this$items[_i153]
  13158. if (item.dom.parentNode == this.list) {
  13159. while (domPos != item.dom) rm()
  13160. domPos = item.dom.nextSibling
  13161. } else {
  13162. this.list.insertBefore(item.dom, domPos)
  13163. }
  13164. }
  13165. while (domPos) rm()
  13166. }
  13167. moveSelection(selectedIndex) {
  13168. if (this.items.length == 0) return
  13169. let field = this.view.state.field(lintState)
  13170. let selection = findDiagnostic(field.diagnostics, this.items[selectedIndex].diagnostic)
  13171. if (!selection) return
  13172. this.view.dispatch({ selection: { anchor: selection.from, head: selection.to }, scrollIntoView: true, effects: movePanelSelection.of(selection) })
  13173. }
  13174. static open(view) {
  13175. return new LintPanel(view)
  13176. }
  13177. }
  13178. function underline(color) {
  13179. if (typeof btoa != 'function') return 'none'
  13180. let svg = `<svg xmlns="http://www.w3.org/2000/svg" width="6" height="3">
  13181. <path d="m0 3 l2 -2 l1 0 l2 2 l1 0" stroke="${color}" fill="none" stroke-width=".7"/>
  13182. </svg>`
  13183. return `url('data:image/svg+xml;base64,${btoa(svg)}')`
  13184. }
  13185. const baseTheme$1 = EditorView.baseTheme({
  13186. '.cm-diagnostic': { padding: '3px 6px 3px 8px', marginLeft: '-1px', display: 'block', whiteSpace: 'pre-wrap' },
  13187. '.cm-diagnostic-error': { borderLeft: '5px solid #d11' },
  13188. '.cm-diagnostic-warning': { borderLeft: '5px solid orange' },
  13189. '.cm-diagnostic-info': { borderLeft: '5px solid #999' },
  13190. '.cm-diagnosticAction': { font: 'inherit', border: 'none', padding: '2px 4px', backgroundColor: '#444', color: 'white', borderRadius: '3px', marginLeft: '8px' },
  13191. '.cm-diagnosticSource': { fontSize: '70%', opacity: 0.7 },
  13192. '.cm-lintRange': { backgroundPosition: 'left bottom', backgroundRepeat: 'repeat-x' },
  13193. '.cm-lintRange-error': { backgroundImage: underline('#d11') },
  13194. '.cm-lintRange-warning': { backgroundImage: underline('orange') },
  13195. '.cm-lintRange-info': { backgroundImage: underline('#999') },
  13196. '.cm-lintRange-active': { backgroundColor: '#ffdd9980' },
  13197. '.cm-lintPoint': {
  13198. position: 'relative',
  13199. '&:after': { content: '""', position: 'absolute', bottom: 0, left: '-2px', borderLeft: '3px solid transparent', borderRight: '3px solid transparent', borderBottom: '4px solid #d11' }
  13200. },
  13201. '.cm-lintPoint-warning': { '&:after': { borderBottomColor: 'orange' } },
  13202. '.cm-lintPoint-info': { '&:after': { borderBottomColor: '#999' } },
  13203. '.cm-panel.cm-panel-lint': {
  13204. position: 'relative',
  13205. '& ul': {
  13206. maxHeight: '100px',
  13207. overflowY: 'auto',
  13208. '& [aria-selected]': { backgroundColor: '#ddd', '& u': { textDecoration: 'underline' } },
  13209. '&:focus [aria-selected]': { background_fallback: '#bdf', backgroundColor: 'Highlight', color_fallback: 'white', color: 'HighlightText' },
  13210. '& u': { textDecoration: 'none' },
  13211. padding: 0,
  13212. margin: 0
  13213. },
  13214. '& [name=close]': { position: 'absolute', top: '0', right: '2px', background: 'inherit', border: 'none', font: 'inherit', padding: 0, margin: 0 }
  13215. }
  13216. })
  13217. var _m15 = Object.freeze({
  13218. __proto__: null,
  13219. closeLintPanel: closeLintPanel,
  13220. lintKeymap: lintKeymap,
  13221. linter: linter,
  13222. nextDiagnostic: nextDiagnostic,
  13223. openLintPanel: openLintPanel,
  13224. setDiagnostics: setDiagnostics
  13225. })
  13226. let nextTagID = 0
  13227. class Tag {
  13228. constructor(set, base, modified) {
  13229. this.set = set
  13230. this.base = base
  13231. this.modified = modified
  13232. this.id = nextTagID++
  13233. }
  13234. static define(parent) {
  13235. if (parent === null || parent === void 0 ? void 0 : parent.base) throw new Error('Can not derive from a modified tag')
  13236. let tag = new Tag([], null, [])
  13237. tag.set.push(tag)
  13238. if (parent)
  13239. for (let _i154 = 0, _parent$set = parent.set, _length154 = _parent$set.length; _i154 < _length154; _i154++) {
  13240. let t = _parent$set[_i154]
  13241. tag.set.push(t)
  13242. }
  13243. return tag
  13244. }
  13245. static defineModifier() {
  13246. let mod = new Modifier()
  13247. return tag => {
  13248. if (tag.modified.indexOf(mod) > -1) return tag
  13249. return Modifier.get(
  13250. tag.base || tag,
  13251. tag.modified.concat(mod).sort((a, b) => a.id - b.id)
  13252. )
  13253. }
  13254. }
  13255. }
  13256. let nextModifierID = 0
  13257. class Modifier {
  13258. constructor() {
  13259. this.instances = []
  13260. this.id = nextModifierID++
  13261. }
  13262. static get(base, mods) {
  13263. if (!mods.length) return base
  13264. let exists = mods[0].instances.find(t => t.base == base && sameArray(mods, t.modified))
  13265. if (exists) return exists
  13266. let set = [],
  13267. tag = new Tag(set, base, mods)
  13268. for (let _i155 = 0, _length155 = mods.length; _i155 < _length155; _i155++) {
  13269. let m = mods[_i155]
  13270. m.instances.push(tag)
  13271. }
  13272. let configs = permute(mods)
  13273. for (let _i156 = 0, _base$set = base.set, _length156 = _base$set.length; _i156 < _length156; _i156++) {
  13274. let parent = _base$set[_i156]
  13275. for (let _i157 = 0, _length157 = configs.length; _i157 < _length157; _i157++) {
  13276. let config = configs[_i157]
  13277. set.push(Modifier.get(parent, config))
  13278. }
  13279. }
  13280. return tag
  13281. }
  13282. }
  13283. function sameArray(a, b) {
  13284. return a.length == b.length && a.every((x, i) => x == b[i])
  13285. }
  13286. function permute(array) {
  13287. let result = [array]
  13288. for (let i = 0; i < array.length; i++) {
  13289. for (let _i158 = 0, _permute = permute(array.slice(0, i).concat(array.slice(i + 1))), _length158 = _permute.length; _i158 < _length158; _i158++) {
  13290. let a = _permute[_i158]
  13291. result.push(a)
  13292. }
  13293. }
  13294. return result
  13295. }
  13296. function styleTags(spec) {
  13297. let byName = Object.create(null)
  13298. for (let prop in spec) {
  13299. let tags = spec[prop]
  13300. if (!Array.isArray(tags)) tags = [tags]
  13301. for (let _i159 = 0, _prop$split2 = prop.split(' '), _length159 = _prop$split2.length; _i159 < _length159; _i159++) {
  13302. let part = _prop$split2[_i159]
  13303. if (part) {
  13304. let pieces = [],
  13305. mode = 2,
  13306. rest = part
  13307. for (let pos = 0; ; ) {
  13308. if (rest == '...' && pos > 0 && pos + 3 == part.length) {
  13309. mode = 1
  13310. break
  13311. }
  13312. let m = /^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(rest)
  13313. if (!m) throw new RangeError('Invalid path: ' + part)
  13314. pieces.push(m[0] == '*' ? null : m[0][0] == '"' ? JSON.parse(m[0]) : m[0])
  13315. pos += m[0].length
  13316. if (pos == part.length) break
  13317. let next = part[pos++]
  13318. if (pos == part.length && next == '!') {
  13319. mode = 0
  13320. break
  13321. }
  13322. if (next != '/') throw new RangeError('Invalid path: ' + part)
  13323. rest = part.slice(pos)
  13324. }
  13325. let last = pieces.length - 1,
  13326. inner = pieces[last]
  13327. if (!inner) throw new RangeError('Invalid path: ' + part)
  13328. let rule = new Rule(tags, mode, last > 0 ? pieces.slice(0, last) : null)
  13329. byName[inner] = rule.sort(byName[inner])
  13330. }
  13331. }
  13332. }
  13333. return ruleNodeProp.add(byName)
  13334. }
  13335. const ruleNodeProp = new NodeProp()
  13336. const highlightStyle = Facet.define({
  13337. combine(stylings) {
  13338. return stylings.length ? HighlightStyle.combinedMatch(stylings) : null
  13339. }
  13340. })
  13341. const fallbackHighlightStyle = Facet.define({
  13342. combine(values) {
  13343. return values.length ? values[0].match : null
  13344. }
  13345. })
  13346. function getHighlightStyle(state) {
  13347. return state.facet(highlightStyle) || state.facet(fallbackHighlightStyle)
  13348. }
  13349. class Rule {
  13350. constructor(tags, mode, context, next) {
  13351. this.tags = tags
  13352. this.mode = mode
  13353. this.context = context
  13354. this.next = next
  13355. }
  13356. sort(other) {
  13357. if (!other || other.depth < this.depth) {
  13358. this.next = other
  13359. return this
  13360. }
  13361. other.next = this.sort(other.next)
  13362. return other
  13363. }
  13364. get depth() {
  13365. return this.context ? this.context.length : 0
  13366. }
  13367. }
  13368. class HighlightStyle {
  13369. constructor(spec, options) {
  13370. this.map = Object.create(null)
  13371. let modSpec
  13372. function def(spec) {
  13373. let cls = StyleModule.newName()
  13374. ;(modSpec || (modSpec = Object.create(null)))['.' + cls] = spec
  13375. return cls
  13376. }
  13377. this.all = typeof options.all == 'string' ? options.all : options.all ? def(options.all) : null
  13378. for (let _i160 = 0, _length160 = spec.length; _i160 < _length160; _i160++) {
  13379. let style = spec[_i160]
  13380. let cls = (style.class || def(Object.assign({}, style, { tag: null }))) + (this.all ? ' ' + this.all : '')
  13381. let tags = style.tag
  13382. if (!Array.isArray(tags)) this.map[tags.id] = cls
  13383. else
  13384. for (let _i161 = 0, _length161 = tags.length; _i161 < _length161; _i161++) {
  13385. let tag = tags[_i161]
  13386. this.map[tag.id] = cls
  13387. }
  13388. }
  13389. this.module = modSpec ? new StyleModule(modSpec) : null
  13390. this.scope = options.scope || null
  13391. this.match = this.match.bind(this)
  13392. let ext = [treeHighlighter]
  13393. if (this.module) ext.push(EditorView.styleModule.of(this.module))
  13394. this.extension = ext.concat(highlightStyle.of(this))
  13395. this.fallback = ext.concat(fallbackHighlightStyle.of(this))
  13396. }
  13397. match(tag, scope) {
  13398. if (this.scope && scope != this.scope) return null
  13399. for (let _i162 = 0, _tag$set = tag.set, _length162 = _tag$set.length; _i162 < _length162; _i162++) {
  13400. let t = _tag$set[_i162]
  13401. let match = this.map[t.id]
  13402. if (match !== undefined) {
  13403. if (t != tag) this.map[tag.id] = match
  13404. return match
  13405. }
  13406. }
  13407. return (this.map[tag.id] = this.all)
  13408. }
  13409. static combinedMatch(styles) {
  13410. if (styles.length == 1) return styles[0].match
  13411. let cache = styles.some(s => s.scope) ? undefined : Object.create(null)
  13412. return (tag, scope) => {
  13413. let cached = cache && cache[tag.id]
  13414. if (cached !== undefined) return cached
  13415. let result = null
  13416. for (let _i163 = 0, _length163 = styles.length; _i163 < _length163; _i163++) {
  13417. let style = styles[_i163]
  13418. let value = style.match(tag, scope)
  13419. if (value) result = result ? result + ' ' + value : value
  13420. }
  13421. if (cache) cache[tag.id] = result
  13422. return result
  13423. }
  13424. }
  13425. static define(specs, options) {
  13426. return new HighlightStyle(specs, options || {})
  13427. }
  13428. static get(state, tag, scope) {
  13429. let style = getHighlightStyle(state)
  13430. return style && style(tag, scope || NodeType.none)
  13431. }
  13432. }
  13433. function highlightTree(tree, getStyle, putStyle) {
  13434. highlightTreeRange(tree, 0, tree.length, getStyle, putStyle)
  13435. }
  13436. class TreeHighlighter {
  13437. constructor(view) {
  13438. this.markCache = Object.create(null)
  13439. this.tree = syntaxTree(view.state)
  13440. this.decorations = this.buildDeco(view, getHighlightStyle(view.state))
  13441. }
  13442. update(update) {
  13443. let tree = syntaxTree(update.state),
  13444. style = getHighlightStyle(update.state)
  13445. let styleChange = style != update.startState.facet(highlightStyle)
  13446. if (tree.length < update.view.viewport.to && !styleChange) {
  13447. this.decorations = this.decorations.map(update.changes)
  13448. } else if (tree != this.tree || update.viewportChanged || styleChange) {
  13449. this.tree = tree
  13450. this.decorations = this.buildDeco(update.view, style)
  13451. }
  13452. }
  13453. buildDeco(view, match) {
  13454. if (!match || !this.tree.length) return Decoration.none
  13455. let builder = new RangeSetBuilder()
  13456. for (let _i164 = 0, _view$visibleRanges5 = view.visibleRanges, _length164 = _view$visibleRanges5.length; _i164 < _length164; _i164++) {
  13457. let { from, to } = _view$visibleRanges5[_i164]
  13458. highlightTreeRange(this.tree, from, to, match, (from, to, style) => {
  13459. builder.add(from, to, this.markCache[style] || (this.markCache[style] = Decoration.mark({ class: style })))
  13460. })
  13461. }
  13462. return builder.finish()
  13463. }
  13464. }
  13465. const treeHighlighter = Prec.extend(ViewPlugin.fromClass(TreeHighlighter, { decorations: v => v.decorations }))
  13466. const nodeStack = ['']
  13467. function highlightTreeRange(tree, from, to, style, span) {
  13468. let spanStart = from,
  13469. spanClass = ''
  13470. let cursor = tree.topNode.cursor
  13471. function flush(at, newClass) {
  13472. if (spanClass) span(spanStart, at, spanClass)
  13473. spanStart = at
  13474. spanClass = newClass
  13475. }
  13476. function node(inheritedClass, depth, scope) {
  13477. let { type, from: start, to: end } = cursor
  13478. if (start >= to || end <= from) return
  13479. nodeStack[depth] = type.name
  13480. if (type.isTop) scope = type
  13481. let cls = inheritedClass
  13482. let rule = type.prop(ruleNodeProp),
  13483. opaque = false
  13484. while (rule) {
  13485. if (!rule.context || matchContext(rule.context, nodeStack, depth)) {
  13486. for (let _i165 = 0, _rule$tags = rule.tags, _length165 = _rule$tags.length; _i165 < _length165; _i165++) {
  13487. let tag = _rule$tags[_i165]
  13488. let st = style(tag, scope)
  13489. if (st) {
  13490. if (cls) cls += ' '
  13491. cls += st
  13492. if (rule.mode == 1) inheritedClass += (inheritedClass ? ' ' : '') + st
  13493. else if (rule.mode == 0) opaque = true
  13494. }
  13495. }
  13496. break
  13497. }
  13498. rule = rule.next
  13499. }
  13500. let upto = start
  13501. if (!opaque && cursor.firstChild()) {
  13502. do {
  13503. if (cursor.from > upto && spanClass != cls) flush(upto, cls)
  13504. upto = cursor.to
  13505. node(inheritedClass, depth + 1, scope)
  13506. } while (cursor.nextSibling())
  13507. cursor.parent()
  13508. }
  13509. if (end > upto && spanClass != cls) flush(upto, cls)
  13510. }
  13511. node('', 0, tree.type)
  13512. flush(to, '')
  13513. }
  13514. function matchContext(context, stack, depth) {
  13515. if (context.length > depth - 1) return false
  13516. for (let d = depth - 1, i = context.length - 1; i >= 0; i--, d--) {
  13517. let check = context[i]
  13518. if (check && check != stack[d]) return false
  13519. }
  13520. return true
  13521. }
  13522. const t = Tag.define
  13523. const comment = t(),
  13524. name = t(),
  13525. typeName = t(name),
  13526. literal = t(),
  13527. string = t(literal),
  13528. number = t(literal),
  13529. content = t(),
  13530. heading = t(content),
  13531. keyword = t(),
  13532. operator = t(),
  13533. punctuation = t(),
  13534. bracket = t(punctuation),
  13535. meta = t()
  13536. const tags$1 = {
  13537. comment,
  13538. lineComment: t(comment),
  13539. blockComment: t(comment),
  13540. docComment: t(comment),
  13541. name,
  13542. variableName: t(name),
  13543. typeName: typeName,
  13544. tagName: t(typeName),
  13545. propertyName: t(name),
  13546. className: t(name),
  13547. labelName: t(name),
  13548. namespace: t(name),
  13549. macroName: t(name),
  13550. literal,
  13551. string,
  13552. docString: t(string),
  13553. character: t(string),
  13554. number,
  13555. integer: t(number),
  13556. float: t(number),
  13557. bool: t(literal),
  13558. regexp: t(literal),
  13559. escape: t(literal),
  13560. color: t(literal),
  13561. url: t(literal),
  13562. keyword,
  13563. self: t(keyword),
  13564. null: t(keyword),
  13565. atom: t(keyword),
  13566. unit: t(keyword),
  13567. modifier: t(keyword),
  13568. operatorKeyword: t(keyword),
  13569. controlKeyword: t(keyword),
  13570. definitionKeyword: t(keyword),
  13571. operator,
  13572. derefOperator: t(operator),
  13573. arithmeticOperator: t(operator),
  13574. logicOperator: t(operator),
  13575. bitwiseOperator: t(operator),
  13576. compareOperator: t(operator),
  13577. updateOperator: t(operator),
  13578. definitionOperator: t(operator),
  13579. typeOperator: t(operator),
  13580. controlOperator: t(operator),
  13581. punctuation,
  13582. separator: t(punctuation),
  13583. bracket,
  13584. angleBracket: t(bracket),
  13585. squareBracket: t(bracket),
  13586. paren: t(bracket),
  13587. brace: t(bracket),
  13588. content,
  13589. heading,
  13590. heading1: t(heading),
  13591. heading2: t(heading),
  13592. heading3: t(heading),
  13593. heading4: t(heading),
  13594. heading5: t(heading),
  13595. heading6: t(heading),
  13596. contentSeparator: t(content),
  13597. list: t(content),
  13598. quote: t(content),
  13599. emphasis: t(content),
  13600. strong: t(content),
  13601. link: t(content),
  13602. monospace: t(content),
  13603. strikethrough: t(content),
  13604. inserted: t(),
  13605. deleted: t(),
  13606. changed: t(),
  13607. invalid: t(),
  13608. meta,
  13609. documentMeta: t(meta),
  13610. annotation: t(meta),
  13611. processingInstruction: t(meta),
  13612. definition: Tag.defineModifier(),
  13613. constant: Tag.defineModifier(),
  13614. function: Tag.defineModifier(),
  13615. standard: Tag.defineModifier(),
  13616. local: Tag.defineModifier(),
  13617. special: Tag.defineModifier()
  13618. }
  13619. const defaultHighlightStyle = HighlightStyle.define([
  13620. { tag: tags$1.link, textDecoration: 'underline' },
  13621. { tag: tags$1.heading, textDecoration: 'underline', fontWeight: 'bold' },
  13622. { tag: tags$1.emphasis, fontStyle: 'italic' },
  13623. { tag: tags$1.strong, fontWeight: 'bold' },
  13624. { tag: tags$1.strikethrough, textDecoration: 'line-through' },
  13625. { tag: tags$1.keyword, color: '#708' },
  13626. { tag: [tags$1.atom, tags$1.bool, tags$1.url, tags$1.contentSeparator, tags$1.labelName], color: '#219' },
  13627. { tag: [tags$1.literal, tags$1.inserted], color: '#164' },
  13628. { tag: [tags$1.string, tags$1.deleted], color: '#a11' },
  13629. { tag: [tags$1.regexp, tags$1.escape, tags$1.special(tags$1.string)], color: '#e40' },
  13630. { tag: tags$1.definition(tags$1.variableName), color: '#00f' },
  13631. { tag: tags$1.local(tags$1.variableName), color: '#30a' },
  13632. { tag: [tags$1.typeName, tags$1.namespace], color: '#085' },
  13633. { tag: tags$1.className, color: '#167' },
  13634. { tag: [tags$1.special(tags$1.variableName), tags$1.macroName], color: '#256' },
  13635. { tag: tags$1.definition(tags$1.propertyName), color: '#00c' },
  13636. { tag: tags$1.comment, color: '#940' },
  13637. { tag: tags$1.meta, color: '#7a757a' },
  13638. { tag: tags$1.invalid, color: '#f00' }
  13639. ])
  13640. const classHighlightStyle = HighlightStyle.define([
  13641. { tag: tags$1.link, class: 'cmt-link' },
  13642. { tag: tags$1.heading, class: 'cmt-heading' },
  13643. { tag: tags$1.emphasis, class: 'cmt-emphasis' },
  13644. { tag: tags$1.strong, class: 'cmt-strong' },
  13645. { tag: tags$1.keyword, class: 'cmt-keyword' },
  13646. { tag: tags$1.atom, class: 'cmt-atom' },
  13647. { tag: tags$1.bool, class: 'cmt-bool' },
  13648. { tag: tags$1.url, class: 'cmt-url' },
  13649. { tag: tags$1.labelName, class: 'cmt-labelName' },
  13650. { tag: tags$1.inserted, class: 'cmt-inserted' },
  13651. { tag: tags$1.deleted, class: 'cmt-deleted' },
  13652. { tag: tags$1.literal, class: 'cmt-literal' },
  13653. { tag: tags$1.string, class: 'cmt-string' },
  13654. { tag: tags$1.number, class: 'cmt-number' },
  13655. { tag: [tags$1.regexp, tags$1.escape, tags$1.special(tags$1.string)], class: 'cmt-string2' },
  13656. { tag: tags$1.variableName, class: 'cmt-variableName' },
  13657. { tag: tags$1.local(tags$1.variableName), class: 'cmt-variableName cmt-local' },
  13658. { tag: tags$1.definition(tags$1.variableName), class: 'cmt-variableName cmt-definition' },
  13659. { tag: tags$1.special(tags$1.variableName), class: 'cmt-variableName2' },
  13660. { tag: tags$1.typeName, class: 'cmt-typeName' },
  13661. { tag: tags$1.namespace, class: 'cmt-namespace' },
  13662. { tag: tags$1.macroName, class: 'cmt-macroName' },
  13663. { tag: tags$1.propertyName, class: 'cmt-propertyName' },
  13664. { tag: tags$1.operator, class: 'cmt-operator' },
  13665. { tag: tags$1.comment, class: 'cmt-comment' },
  13666. { tag: tags$1.meta, class: 'cmt-meta' },
  13667. { tag: tags$1.invalid, class: 'cmt-invalid' },
  13668. { tag: tags$1.punctuation, class: 'cmt-punctuation' }
  13669. ])
  13670. var _m16 = Object.freeze({
  13671. __proto__: null,
  13672. HighlightStyle: HighlightStyle,
  13673. Tag: Tag,
  13674. classHighlightStyle: classHighlightStyle,
  13675. defaultHighlightStyle: defaultHighlightStyle,
  13676. highlightTree: highlightTree,
  13677. styleTags: styleTags,
  13678. tags: tags$1
  13679. })
  13680. function countCol(string, end, tabSize, startIndex = 0, startValue = 0) {
  13681. if (end == null) {
  13682. end = string.search(/[^\s\u00a0]/)
  13683. if (end == -1) end = string.length
  13684. }
  13685. return countColumn(string.slice(startIndex, end), startValue, tabSize)
  13686. }
  13687. class StringStream {
  13688. constructor(string, tabSize, indentUnit) {
  13689. this.string = string
  13690. this.tabSize = tabSize
  13691. this.indentUnit = indentUnit
  13692. this.pos = 0
  13693. this.start = 0
  13694. this.lastColumnPos = 0
  13695. this.lastColumnValue = 0
  13696. }
  13697. eol() {
  13698. return this.pos >= this.string.length
  13699. }
  13700. sol() {
  13701. return this.pos == 0
  13702. }
  13703. peek() {
  13704. return this.string.charAt(this.pos) || undefined
  13705. }
  13706. next() {
  13707. if (this.pos < this.string.length) return this.string.charAt(this.pos++)
  13708. }
  13709. eat(match) {
  13710. let ch = this.string.charAt(this.pos)
  13711. let ok
  13712. if (typeof match == 'string') ok = ch == match
  13713. else ok = ch && (match instanceof RegExp ? match.test(ch) : match(ch))
  13714. if (ok) {
  13715. ++this.pos
  13716. return ch
  13717. }
  13718. }
  13719. eatWhile(match) {
  13720. let start = this.pos
  13721. while (this.eat(match)) {}
  13722. return this.pos > start
  13723. }
  13724. eatSpace() {
  13725. let start = this.pos
  13726. while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos
  13727. return this.pos > start
  13728. }
  13729. skipToEnd() {
  13730. this.pos = this.string.length
  13731. }
  13732. skipTo(ch) {
  13733. let found = this.string.indexOf(ch, this.pos)
  13734. if (found > -1) {
  13735. this.pos = found
  13736. return true
  13737. }
  13738. }
  13739. backUp(n) {
  13740. this.pos -= n
  13741. }
  13742. column() {
  13743. if (this.lastColumnPos < this.start) {
  13744. this.lastColumnValue = countCol(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue)
  13745. this.lastColumnPos = this.start
  13746. }
  13747. return this.lastColumnValue
  13748. }
  13749. indentation() {
  13750. return countCol(this.string, null, this.tabSize)
  13751. }
  13752. match(pattern, consume, caseInsensitive) {
  13753. if (typeof pattern == 'string') {
  13754. let cased = str => (caseInsensitive ? str.toLowerCase() : str)
  13755. let substr = this.string.substr(this.pos, pattern.length)
  13756. if (cased(substr) == cased(pattern)) {
  13757. if (consume !== false) this.pos += pattern.length
  13758. return true
  13759. } else return null
  13760. } else {
  13761. let match = this.string.slice(this.pos).match(pattern)
  13762. if (match && match.index > 0) return null
  13763. if (match && consume !== false) this.pos += match[0].length
  13764. return match
  13765. }
  13766. }
  13767. current() {
  13768. return this.string.slice(this.start, this.pos)
  13769. }
  13770. }
  13771. function fullParser(spec) {
  13772. return {
  13773. token: spec.token,
  13774. blankLine: spec.blankLine || (() => {}),
  13775. startState: spec.startState || (() => true),
  13776. copyState: spec.copyState || defaultCopyState,
  13777. indent: spec.indent || (() => null),
  13778. languageData: spec.languageData || {}
  13779. }
  13780. }
  13781. function defaultCopyState(state) {
  13782. if (typeof state != 'object') return state
  13783. let newState = {}
  13784. for (let prop in state) {
  13785. let val = state[prop]
  13786. newState[prop] = val instanceof Array ? val.slice() : val
  13787. }
  13788. return newState
  13789. }
  13790. class StreamLanguage extends Language {
  13791. constructor(parser) {
  13792. let data = defineLanguageFacet(parser.languageData)
  13793. let p = fullParser(parser)
  13794. let startParse = (input, startPos, context) => new Parse$1(this, input, startPos, context)
  13795. super(data, { startParse }, docID(data), [indentService.of((cx, pos) => this.getIndent(cx, pos))])
  13796. this.streamParser = p
  13797. this.stateAfter = new WeakMap()
  13798. }
  13799. static define(spec) {
  13800. return new StreamLanguage(spec)
  13801. }
  13802. getIndent(cx, pos) {
  13803. let tree = syntaxTree(cx.state),
  13804. at = tree.resolve(pos)
  13805. while (at && at.type != this.topNode) at = at.parent
  13806. if (!at) return null
  13807. let start = findState(this, tree, 0, at.from, pos),
  13808. statePos,
  13809. state
  13810. if (start) {
  13811. state = start.state
  13812. statePos = start.pos + 1
  13813. } else {
  13814. state = this.streamParser.startState(cx.unit)
  13815. statePos = 0
  13816. }
  13817. if (pos - statePos > 10000) return null
  13818. while (statePos < pos) {
  13819. let line = cx.state.doc.lineAt(statePos),
  13820. end = Math.min(pos, line.to)
  13821. if (line.length) {
  13822. let stream = new StringStream(line.text, cx.state.tabSize, cx.unit)
  13823. while (stream.pos < end - line.from) readToken$1(this.streamParser.token, stream, state)
  13824. } else {
  13825. this.streamParser.blankLine(state, cx.unit)
  13826. }
  13827. if (end == pos) break
  13828. statePos = line.to + 1
  13829. }
  13830. let { text } = cx.state.doc.lineAt(pos)
  13831. return this.streamParser.indent(state, /^\s*(.*)/.exec(text)[1], cx)
  13832. }
  13833. get allowsNesting() {
  13834. return false
  13835. }
  13836. }
  13837. function findState(lang, tree, off, startPos, before) {
  13838. let state = off >= startPos && off + tree.length <= before && lang.stateAfter.get(tree)
  13839. if (state) return { state: lang.streamParser.copyState(state), pos: off + tree.length }
  13840. for (let i = tree.children.length - 1; i >= 0; i--) {
  13841. let child = tree.children[i],
  13842. pos = off + tree.positions[i]
  13843. let found = child instanceof Tree && pos < before && findState(lang, child, pos, startPos, before)
  13844. if (found) return found
  13845. }
  13846. return null
  13847. }
  13848. function cutTree(lang, tree, from, to, inside) {
  13849. if (inside && from <= 0 && to >= tree.length) return tree
  13850. if (!inside && tree.type == lang.topNode) inside = true
  13851. for (let i = tree.children.length - 1; i >= 0; i--) {
  13852. let pos = tree.positions[i] + from,
  13853. child = tree.children[i],
  13854. inner
  13855. if (pos < to && child instanceof Tree) {
  13856. if (!(inner = cutTree(lang, child, from - pos, to - pos, inside))) break
  13857. return !inside ? inner : new Tree(tree.type, tree.children.slice(0, i).concat(inner), tree.positions.slice(0, i + 1), pos + inner.length)
  13858. }
  13859. }
  13860. return null
  13861. }
  13862. function findStartInFragments(lang, fragments, startPos, state) {
  13863. for (let _i166 = 0, _length166 = fragments.length; _i166 < _length166; _i166++) {
  13864. let f = fragments[_i166]
  13865. let found = f.from <= startPos && f.to > startPos && findState(lang, f.tree, 0 - f.offset, startPos, f.to),
  13866. tree
  13867. if (found && (tree = cutTree(lang, f.tree, startPos + f.offset, found.pos + f.offset, false))) return { state: found.state, tree }
  13868. }
  13869. return { state: lang.streamParser.startState(getIndentUnit(state)), tree: Tree.empty }
  13870. }
  13871. class Parse$1 {
  13872. constructor(lang, input, startPos, context) {
  13873. this.lang = lang
  13874. this.input = input
  13875. this.startPos = startPos
  13876. this.context = context
  13877. this.chunks = []
  13878. this.chunkPos = []
  13879. this.chunk = []
  13880. let { state, tree } = findStartInFragments(lang, context.fragments, startPos, context.state)
  13881. this.state = state
  13882. this.pos = this.chunkStart = startPos + tree.length
  13883. if (tree.length) {
  13884. this.chunks.push(tree)
  13885. this.chunkPos.push(0)
  13886. }
  13887. if (this.pos < context.viewport.from - 100000) {
  13888. this.state = this.lang.streamParser.startState(getIndentUnit(context.state))
  13889. context.skipUntilInView(this.pos, context.viewport.from)
  13890. this.pos = context.viewport.from
  13891. }
  13892. }
  13893. advance() {
  13894. let end = Math.min(this.context.viewport.to, this.input.length, this.chunkStart + 2048)
  13895. while (this.pos < end) this.parseLine()
  13896. if (this.chunkStart < this.pos) this.finishChunk()
  13897. if (end < this.input.length && this.pos < this.context.viewport.to) return null
  13898. this.context.skipUntilInView(this.pos, this.input.length)
  13899. return this.finish()
  13900. }
  13901. parseLine() {
  13902. let line = this.input.lineAfter(this.pos),
  13903. { streamParser } = this.lang
  13904. let stream = new StringStream(line, this.context ? this.context.state.tabSize : 4, getIndentUnit(this.context.state))
  13905. if (stream.eol()) {
  13906. streamParser.blankLine(this.state, stream.indentUnit)
  13907. } else {
  13908. while (!stream.eol()) {
  13909. let token = readToken$1(streamParser.token, stream, this.state)
  13910. if (token) this.chunk.push(tokenID(token), this.pos + stream.start, this.pos + stream.pos, 4)
  13911. }
  13912. }
  13913. this.pos += line.length
  13914. if (this.pos < this.input.length) this.pos++
  13915. }
  13916. finishChunk() {
  13917. let tree = Tree.build({ buffer: this.chunk, start: this.chunkStart, length: this.pos - this.chunkStart, nodeSet, topID: 0, maxBufferLength: 2048 })
  13918. this.lang.stateAfter.set(tree, this.lang.streamParser.copyState(this.state))
  13919. this.chunks.push(tree)
  13920. this.chunkPos.push(this.chunkStart - this.startPos)
  13921. this.chunk = []
  13922. this.chunkStart = this.pos
  13923. }
  13924. finish() {
  13925. return new Tree(this.lang.topNode, this.chunks, this.chunkPos, this.pos - this.startPos).balance()
  13926. }
  13927. forceFinish() {
  13928. return this.finish()
  13929. }
  13930. }
  13931. function readToken$1(token, stream, state) {
  13932. stream.start = stream.pos
  13933. for (let i = 0; i < 10; i++) {
  13934. let result = token(stream, state)
  13935. if (stream.pos > stream.start) return result
  13936. }
  13937. throw new Error('Stream parser failed to advance stream.')
  13938. }
  13939. const tokenTable = Object.create(null)
  13940. const typeArray = [NodeType.none]
  13941. const nodeSet = new NodeSet(typeArray)
  13942. const warned = []
  13943. function tokenID(tag) {
  13944. return !tag ? 0 : tokenTable[tag] || (tokenTable[tag] = createTokenType(tag))
  13945. }
  13946. for (
  13947. let _i167 = 0,
  13948. _ref5 = [
  13949. ['variable', 'variableName'],
  13950. ['variable-2', 'variableName.special'],
  13951. ['string-2', 'string.special'],
  13952. ['def', 'variableName.definition'],
  13953. ['tag', 'typeName'],
  13954. ['attribute', 'propertyName'],
  13955. ['type', 'typeName'],
  13956. ['builtin', 'variableName.standard'],
  13957. ['qualifier', 'modifier'],
  13958. ['error', 'invalid'],
  13959. ['header', 'heading'],
  13960. ['property', 'propertyName']
  13961. ],
  13962. _length167 = _ref5.length;
  13963. _i167 < _length167;
  13964. _i167++
  13965. ) {
  13966. let [legacyName, name] = _ref5[_i167]
  13967. tokenTable[legacyName] = tokenID(name)
  13968. }
  13969. function warnForPart(part, msg) {
  13970. if (warned.indexOf(part) > -1) return
  13971. warned.push(part)
  13972. console.warn(msg)
  13973. }
  13974. function createTokenType(tagStr) {
  13975. let tag = null
  13976. for (let _i168 = 0, _tagStr$split = tagStr.split('.'), _length168 = _tagStr$split.length; _i168 < _length168; _i168++) {
  13977. let part = _tagStr$split[_i168]
  13978. let value = tags$1[part]
  13979. if (!value) {
  13980. warnForPart(part, `Unknown highlighting tag ${part}`)
  13981. } else if (typeof value == 'function') {
  13982. if (!tag) warnForPart(part, `Modifier ${part} used at start of tag`)
  13983. else tag = value(tag)
  13984. } else {
  13985. if (tag) warnForPart(part, `Tag ${part} used as modifier`)
  13986. else tag = value
  13987. }
  13988. }
  13989. if (!tag) return 0
  13990. let name = tagStr.replace(/ /g, '_'),
  13991. type = NodeType.define({ id: typeArray.length, name, props: [styleTags({ [name]: tag })] })
  13992. typeArray.push(type)
  13993. return type.id
  13994. }
  13995. function docID(data) {
  13996. let type = NodeType.define({ id: typeArray.length, name: 'Document', props: [languageDataProp.add(() => data)] })
  13997. typeArray.push(type)
  13998. return type
  13999. }
  14000. var _m17 = Object.freeze({ __proto__: null, StreamLanguage: StreamLanguage, StringStream: StringStream })
  14001. class CompletionContext {
  14002. constructor(state, pos, explicit) {
  14003. this.state = state
  14004. this.pos = pos
  14005. this.explicit = explicit
  14006. this.abortListeners = []
  14007. }
  14008. tokenBefore(types) {
  14009. let token = syntaxTree(this.state).resolve(this.pos, -1)
  14010. while (token && types.indexOf(token.name) < 0) token = token.parent
  14011. return token ? { from: token.from, to: this.pos, text: this.state.sliceDoc(token.from, this.pos), type: token.type } : null
  14012. }
  14013. matchBefore(expr) {
  14014. let line = this.state.doc.lineAt(this.pos)
  14015. let start = Math.max(line.from, this.pos - 250)
  14016. let str = line.text.slice(start - line.from, this.pos - line.from)
  14017. let found = str.search(ensureAnchor(expr, false))
  14018. return found < 0 ? null : { from: start + found, to: this.pos, text: str.slice(found) }
  14019. }
  14020. get aborted() {
  14021. return this.abortListeners == null
  14022. }
  14023. addEventListener(type, listener) {
  14024. if (type == 'abort' && this.abortListeners) this.abortListeners.push(listener)
  14025. }
  14026. }
  14027. function toSet(chars) {
  14028. let flat = Object.keys(chars).join('')
  14029. let words = /\w/.test(flat)
  14030. if (words) flat = flat.replace(/\w/g, '')
  14031. return `[${words ? '\\w' : ''}${flat.replace(/[^\w\s]/g, '\\$&')}]`
  14032. }
  14033. function prefixMatch(options) {
  14034. let first = Object.create(null),
  14035. rest = Object.create(null)
  14036. for (let _i169 = 0, _length169 = options.length; _i169 < _length169; _i169++) {
  14037. let { label } = options[_i169]
  14038. first[label[0]] = true
  14039. for (let i = 1; i < label.length; i++) rest[label[i]] = true
  14040. }
  14041. let source = toSet(first) + toSet(rest) + '*$'
  14042. return [new RegExp('^' + source), new RegExp(source)]
  14043. }
  14044. function completeFromList(list) {
  14045. let options = list.map(o => (typeof o == 'string' ? { label: o } : o))
  14046. let [span, match] = options.every(o => /^\w+$/.test(o.label)) ? [/\w*$/, /\w+$/] : prefixMatch(options)
  14047. return context => {
  14048. let token = context.matchBefore(match)
  14049. return token || context.explicit ? { from: token ? token.from : context.pos, options, span } : null
  14050. }
  14051. }
  14052. function ifNotIn(nodes, source) {
  14053. return context => {
  14054. for (let pos = syntaxTree(context.state).resolve(context.pos, -1); pos; pos = pos.parent) if (nodes.indexOf(pos.name) > -1) return null
  14055. return source(context)
  14056. }
  14057. }
  14058. class Option {
  14059. constructor(completion, source, match) {
  14060. this.completion = completion
  14061. this.source = source
  14062. this.match = match
  14063. }
  14064. }
  14065. function cur(state) {
  14066. return state.selection.main.head
  14067. }
  14068. function ensureAnchor(expr, start) {
  14069. var _a
  14070. let { source } = expr
  14071. let addStart = start && source[0] != '^',
  14072. addEnd = source[source.length - 1] != '$'
  14073. if (!addStart && !addEnd) return expr
  14074. return new RegExp(`${addStart ? '^' : ''}(?:${source})${addEnd ? '$' : ''}`, (_a = expr.flags) !== null && _a !== void 0 ? _a : expr.ignoreCase ? 'i' : '')
  14075. }
  14076. function applyCompletion(view, option) {
  14077. let apply = option.completion.apply || option.completion.label
  14078. let result = option.source
  14079. if (typeof apply == 'string') {
  14080. view.dispatch({ changes: { from: result.from, to: result.to, insert: apply }, selection: { anchor: result.from + apply.length } })
  14081. } else {
  14082. apply(view, option.completion, result.from, result.to)
  14083. }
  14084. }
  14085. const SourceCache = new WeakMap()
  14086. function asSource(source) {
  14087. if (!Array.isArray(source)) return source
  14088. let known = SourceCache.get(source)
  14089. if (!known) SourceCache.set(source, (known = completeFromList(source)))
  14090. return known
  14091. }
  14092. class FuzzyMatcher {
  14093. constructor(pattern) {
  14094. this.pattern = pattern
  14095. this.chars = []
  14096. this.folded = []
  14097. this.any = []
  14098. this.precise = []
  14099. this.byWord = []
  14100. for (let p = 0; p < pattern.length; ) {
  14101. let char = codePointAt(pattern, p),
  14102. size = codePointSize(char)
  14103. this.chars.push(char)
  14104. let part = pattern.slice(p, p + size),
  14105. upper = part.toUpperCase()
  14106. this.folded.push(codePointAt(upper == part ? part.toLowerCase() : upper, 0))
  14107. p += size
  14108. }
  14109. this.astral = pattern.length != this.chars.length
  14110. }
  14111. match(word) {
  14112. if (this.pattern.length == 0) return [0]
  14113. if (word.length < this.pattern.length) return null
  14114. let { chars, folded, any, precise, byWord } = this
  14115. if (chars.length == 1) {
  14116. let first = codePointAt(word, 0)
  14117. return first == chars[0] ? [0, 0, codePointSize(first)] : first == folded[0] ? [-200, 0, codePointSize(first)] : null
  14118. }
  14119. let direct = word.indexOf(this.pattern)
  14120. if (direct == 0) return [0, 0, this.pattern.length]
  14121. let len = chars.length,
  14122. anyTo = 0
  14123. if (direct < 0) {
  14124. for (let i = 0, e = Math.min(word.length, 200); i < e && anyTo < len; ) {
  14125. let next = codePointAt(word, i)
  14126. if (next == chars[anyTo] || next == folded[anyTo]) any[anyTo++] = i
  14127. i += codePointSize(next)
  14128. }
  14129. if (anyTo < len) return null
  14130. }
  14131. let preciseTo = 0
  14132. let byWordTo = 0,
  14133. byWordFolded = false
  14134. let adjacentTo = 0,
  14135. adjacentStart = -1,
  14136. adjacentEnd = -1
  14137. let hasLower = /[a-z]/.test(word)
  14138. for (let i = 0, e = Math.min(word.length, 200), prevType = 0; i < e && byWordTo < len; ) {
  14139. let next = codePointAt(word, i)
  14140. if (direct < 0) {
  14141. if (preciseTo < len && next == chars[preciseTo]) precise[preciseTo++] = i
  14142. if (adjacentTo < len) {
  14143. if (next == chars[adjacentTo] || next == folded[adjacentTo]) {
  14144. if (adjacentTo == 0) adjacentStart = i
  14145. adjacentEnd = i
  14146. adjacentTo++
  14147. } else {
  14148. adjacentTo = 0
  14149. }
  14150. }
  14151. }
  14152. let ch,
  14153. type =
  14154. next < 0xff
  14155. ? (next >= 48 && next <= 57) || (next >= 97 && next <= 122)
  14156. ? 2
  14157. : next >= 65 && next <= 90
  14158. ? 1
  14159. : 0
  14160. : (ch = fromCodePoint(next)) != ch.toLowerCase()
  14161. ? 1
  14162. : ch != ch.toUpperCase()
  14163. ? 2
  14164. : 0
  14165. if (((type == 1 && hasLower) || (prevType == 0 && type != 0)) && (chars[byWordTo] == next || (folded[byWordTo] == next && (byWordFolded = true)))) byWord[byWordTo++] = i
  14166. prevType = type
  14167. i += codePointSize(next)
  14168. }
  14169. if (byWordTo == len && byWord[0] == 0) return this.result(-100 + (byWordFolded ? -200 : 0), byWord, word)
  14170. if (adjacentTo == len && adjacentStart == 0) return [-200, 0, adjacentEnd]
  14171. if (direct > -1) return [-700, direct, direct + this.pattern.length]
  14172. if (adjacentTo == len) return [-200 + -700, adjacentStart, adjacentEnd]
  14173. if (byWordTo == len) return this.result(-100 + (byWordFolded ? -200 : 0) + -700, byWord, word)
  14174. return chars.length == 2 ? null : this.result((any[0] ? -700 : 0) + -200 + -1100, any, word)
  14175. }
  14176. result(score, positions, word) {
  14177. let result = [score],
  14178. i = 1
  14179. for (let _i170 = 0, _length170 = positions.length; _i170 < _length170; _i170++) {
  14180. let pos = positions[_i170]
  14181. let to = pos + (this.astral ? codePointSize(codePointAt(word, pos)) : 1)
  14182. if (i > 1 && result[i - 1] == pos) result[i - 1] = to
  14183. else {
  14184. result[i++] = pos
  14185. result[i++] = to
  14186. }
  14187. }
  14188. return result
  14189. }
  14190. }
  14191. const completionConfig = Facet.define({
  14192. combine(configs) {
  14193. return combineConfig(configs, { activateOnTyping: true, override: null, maxRenderedOptions: 100, defaultKeymap: true }, { defaultKeymap: (a, b) => a && b })
  14194. }
  14195. })
  14196. const MaxInfoWidth = 300
  14197. const baseTheme = EditorView.baseTheme({
  14198. '.cm-tooltip.cm-tooltip-autocomplete': {
  14199. '& > ul': {
  14200. fontFamily: 'monospace',
  14201. whiteSpace: 'nowrap',
  14202. overflow: 'auto',
  14203. maxWidth_fallback: '700px',
  14204. maxWidth: 'min(700px, 95vw)',
  14205. maxHeight: '10em',
  14206. listStyle: 'none',
  14207. margin: 0,
  14208. padding: 0,
  14209. '& > li': { cursor: 'pointer', padding: '1px 1em 1px 3px', lineHeight: 1.2 },
  14210. '& > li[aria-selected]': { background_fallback: '#bdf', backgroundColor: 'Highlight', color_fallback: 'white', color: 'HighlightText' }
  14211. }
  14212. },
  14213. '.cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after': { content: '"···"', opacity: 0.5, display: 'block', textAlign: 'center' },
  14214. '.cm-tooltip.cm-completionInfo': { position: 'absolute', padding: '3px 9px', width: 'max-content', maxWidth: MaxInfoWidth + 'px' },
  14215. '.cm-completionInfo.cm-completionInfo-left': { right: '100%' },
  14216. '.cm-completionInfo.cm-completionInfo-right': { left: '100%' },
  14217. '&light .cm-snippetField': { backgroundColor: '#00000022' },
  14218. '&dark .cm-snippetField': { backgroundColor: '#ffffff22' },
  14219. '.cm-snippetFieldPosition': { verticalAlign: 'text-top', width: 0, height: '1.15em', margin: '0 -0.7px -.7em', borderLeft: '1.4px dotted #888' },
  14220. '.cm-completionMatchedText': { textDecoration: 'underline' },
  14221. '.cm-completionDetail': { marginLeft: '0.5em', fontStyle: 'italic' },
  14222. '.cm-completionIcon': { fontSize: '90%', width: '.8em', display: 'inline-block', textAlign: 'center', paddingRight: '.6em', opacity: '0.6' },
  14223. '.cm-completionIcon-function, .cm-completionIcon-method': { '&:after': { content: "'ƒ'" } },
  14224. '.cm-completionIcon-class': { '&:after': { content: "'○'" } },
  14225. '.cm-completionIcon-interface': { '&:after': { content: "'◌'" } },
  14226. '.cm-completionIcon-variable': { '&:after': { content: "'𝑥'" } },
  14227. '.cm-completionIcon-constant': { '&:after': { content: "'𝐶'" } },
  14228. '.cm-completionIcon-type': { '&:after': { content: "'𝑡'" } },
  14229. '.cm-completionIcon-enum': { '&:after': { content: "'∪'" } },
  14230. '.cm-completionIcon-property': { '&:after': { content: "'□'" } },
  14231. '.cm-completionIcon-keyword': { '&:after': { content: "'🔑\uFE0E'" } },
  14232. '.cm-completionIcon-namespace': { '&:after': { content: "'▢'" } },
  14233. '.cm-completionIcon-text': { '&:after': { content: "'abc'", fontSize: '50%', verticalAlign: 'middle' } }
  14234. })
  14235. function createListBox(options, id, range) {
  14236. const ul = document.createElement('ul')
  14237. ul.id = id
  14238. ul.setAttribute('role', 'listbox')
  14239. ul.setAttribute('aria-expanded', 'true')
  14240. for (let i = range.from; i < range.to; i++) {
  14241. let { completion, match } = options[i]
  14242. const li = ul.appendChild(document.createElement('li'))
  14243. li.id = id + '-' + i
  14244. let icon = li.appendChild(document.createElement('div'))
  14245. icon.classList.add('cm-completionIcon')
  14246. if (completion.type) icon.classList.add(...completion.type.split(/\s+/g).map(cls => 'cm-completionIcon-' + cls))
  14247. icon.setAttribute('aria-hidden', 'true')
  14248. let labelElt = li.appendChild(document.createElement('span'))
  14249. labelElt.className = 'cm-completionLabel'
  14250. let { label, detail } = completion,
  14251. off = 0
  14252. for (let j = 1; j < match.length; ) {
  14253. let from = match[j++],
  14254. to = match[j++]
  14255. if (from > off) labelElt.appendChild(document.createTextNode(label.slice(off, from)))
  14256. let span = labelElt.appendChild(document.createElement('span'))
  14257. span.appendChild(document.createTextNode(label.slice(from, to)))
  14258. span.className = 'cm-completionMatchedText'
  14259. off = to
  14260. }
  14261. if (off < label.length) labelElt.appendChild(document.createTextNode(label.slice(off)))
  14262. if (detail) {
  14263. let detailElt = li.appendChild(document.createElement('span'))
  14264. detailElt.className = 'cm-completionDetail'
  14265. detailElt.textContent = detail
  14266. }
  14267. li.setAttribute('role', 'option')
  14268. }
  14269. if (range.from) ul.classList.add('cm-completionListIncompleteTop')
  14270. if (range.to < options.length) ul.classList.add('cm-completionListIncompleteBottom')
  14271. return ul
  14272. }
  14273. function createInfoDialog(option, view) {
  14274. let dom = document.createElement('div')
  14275. dom.className = 'cm-tooltip cm-completionInfo'
  14276. let { info } = option.completion
  14277. if (typeof info == 'string') {
  14278. dom.textContent = info
  14279. } else {
  14280. let content = info(option.completion)
  14281. if (content.then)
  14282. content.then(
  14283. node => dom.appendChild(node),
  14284. e => logException(view.state, e, 'completion info')
  14285. )
  14286. else dom.appendChild(content)
  14287. }
  14288. return dom
  14289. }
  14290. function rangeAroundSelected(total, selected, max) {
  14291. if (total <= max) return { from: 0, to: total }
  14292. if (selected <= total >> 1) {
  14293. let off = Math.floor(selected / max)
  14294. return { from: off * max, to: (off + 1) * max }
  14295. }
  14296. let off = Math.floor((total - selected) / max)
  14297. return { from: total - (off + 1) * max, to: total - off * max }
  14298. }
  14299. class CompletionTooltip {
  14300. constructor(view, stateField) {
  14301. this.view = view
  14302. this.stateField = stateField
  14303. this.info = null
  14304. this.placeInfo = { read: () => this.measureInfo(), write: pos => this.positionInfo(pos), key: this }
  14305. let cState = view.state.field(stateField)
  14306. let { options, selected } = cState.open
  14307. let config = view.state.facet(completionConfig)
  14308. this.range = rangeAroundSelected(options.length, selected, config.maxRenderedOptions)
  14309. this.dom = document.createElement('div')
  14310. this.dom.className = 'cm-tooltip-autocomplete'
  14311. this.dom.addEventListener('mousedown', e => {
  14312. for (let dom = e.target, match; dom && dom != this.dom; dom = dom.parentNode) {
  14313. if (dom.nodeName == 'LI' && (match = /-(\d+)$/.exec(dom.id)) && +match[1] < options.length) {
  14314. applyCompletion(view, options[+match[1]])
  14315. e.preventDefault()
  14316. return
  14317. }
  14318. }
  14319. })
  14320. this.list = this.dom.appendChild(createListBox(options, cState.id, this.range))
  14321. this.list.addEventListener('scroll', () => {
  14322. if (this.info) this.view.requestMeasure(this.placeInfo)
  14323. })
  14324. }
  14325. mount() {
  14326. this.updateSel()
  14327. }
  14328. update(update) {
  14329. if (update.state.field(this.stateField) != update.startState.field(this.stateField)) this.updateSel()
  14330. }
  14331. positioned() {
  14332. if (this.info) this.view.requestMeasure(this.placeInfo)
  14333. }
  14334. updateSel() {
  14335. let cState = this.view.state.field(this.stateField),
  14336. open = cState.open
  14337. if (open.selected < this.range.from || open.selected >= this.range.to) {
  14338. this.range = rangeAroundSelected(open.options.length, open.selected, this.view.state.facet(completionConfig).maxRenderedOptions)
  14339. this.list.remove()
  14340. this.list = this.dom.appendChild(createListBox(open.options, cState.id, this.range))
  14341. this.list.addEventListener('scroll', () => {
  14342. if (this.info) this.view.requestMeasure(this.placeInfo)
  14343. })
  14344. }
  14345. if (this.updateSelectedOption(open.selected)) {
  14346. if (this.info) {
  14347. this.info.remove()
  14348. this.info = null
  14349. }
  14350. let option = open.options[open.selected]
  14351. if (option.completion.info) {
  14352. this.info = this.dom.appendChild(createInfoDialog(option, this.view))
  14353. this.view.requestMeasure(this.placeInfo)
  14354. }
  14355. }
  14356. }
  14357. updateSelectedOption(selected) {
  14358. let set = null
  14359. for (let opt = this.list.firstChild, i = this.range.from; opt; opt = opt.nextSibling, i++) {
  14360. if (i == selected) {
  14361. if (!opt.hasAttribute('aria-selected')) {
  14362. opt.setAttribute('aria-selected', 'true')
  14363. set = opt
  14364. }
  14365. } else {
  14366. if (opt.hasAttribute('aria-selected')) opt.removeAttribute('aria-selected')
  14367. }
  14368. }
  14369. if (set) scrollIntoView(this.list, set)
  14370. return set
  14371. }
  14372. measureInfo() {
  14373. let sel = this.dom.querySelector('[aria-selected]')
  14374. if (!sel) return null
  14375. let rect = this.dom.getBoundingClientRect()
  14376. let top = sel.getBoundingClientRect().top - rect.top
  14377. if (top < 0 || top > this.list.clientHeight - 10) return null
  14378. let left = this.view.textDirection == Direction.RTL
  14379. let spaceLeft = rect.left,
  14380. spaceRight = innerWidth - rect.right
  14381. if (left && spaceLeft < Math.min(MaxInfoWidth, spaceRight)) left = false
  14382. else if (!left && spaceRight < Math.min(MaxInfoWidth, spaceLeft)) left = true
  14383. return { top, left }
  14384. }
  14385. positionInfo(pos) {
  14386. if (this.info && pos) {
  14387. this.info.style.top = pos.top + 'px'
  14388. this.info.classList.toggle('cm-completionInfo-left', pos.left)
  14389. this.info.classList.toggle('cm-completionInfo-right', !pos.left)
  14390. }
  14391. }
  14392. }
  14393. function completionTooltip(stateField) {
  14394. return view => new CompletionTooltip(view, stateField)
  14395. }
  14396. function scrollIntoView(container, element) {
  14397. let parent = container.getBoundingClientRect()
  14398. let self = element.getBoundingClientRect()
  14399. if (self.top < parent.top) container.scrollTop -= parent.top - self.top
  14400. else if (self.bottom > parent.bottom) container.scrollTop += self.bottom - parent.bottom
  14401. }
  14402. const MaxOptions = 300
  14403. function score(option) {
  14404. return (option.boost || 0) * 100 + (option.apply ? 10 : 0) + (option.info ? 5 : 0) + (option.type ? 1 : 0)
  14405. }
  14406. function sortOptions(active, state) {
  14407. let options = []
  14408. for (let _i171 = 0, _length171 = active.length; _i171 < _length171; _i171++) {
  14409. let a = active[_i171]
  14410. if (a.hasResult()) {
  14411. let matcher = new FuzzyMatcher(state.sliceDoc(a.from, a.to)),
  14412. match
  14413. for (let _i172 = 0, _a$result$options = a.result.options, _length172 = _a$result$options.length; _i172 < _length172; _i172++) {
  14414. let option = _a$result$options[_i172]
  14415. if ((match = matcher.match(option.label))) {
  14416. if (option.boost != null) match[0] += option.boost
  14417. options.push(new Option(option, a, match))
  14418. }
  14419. }
  14420. }
  14421. }
  14422. options.sort(cmpOption)
  14423. let result = [],
  14424. prev = null
  14425. for (let _i173 = 0, _options$sort = options.sort(cmpOption), _length173 = _options$sort.length; _i173 < _length173; _i173++) {
  14426. let opt = _options$sort[_i173]
  14427. if (result.length == MaxOptions) break
  14428. if (!prev || prev.label != opt.completion.label || prev.detail != opt.completion.detail) result.push(opt)
  14429. else if (score(opt.completion) > score(prev)) result[result.length - 1] = opt
  14430. prev = opt.completion
  14431. }
  14432. return result
  14433. }
  14434. class CompletionDialog {
  14435. constructor(options, attrs, tooltip, timestamp, selected) {
  14436. this.options = options
  14437. this.attrs = attrs
  14438. this.tooltip = tooltip
  14439. this.timestamp = timestamp
  14440. this.selected = selected
  14441. }
  14442. setSelected(selected, id) {
  14443. return selected == this.selected || selected >= this.options.length ? this : new CompletionDialog(this.options, makeAttrs(id, selected), this.tooltip, this.timestamp, selected)
  14444. }
  14445. static build(active, state, id, prev) {
  14446. let options = sortOptions(active, state)
  14447. if (!options.length) return null
  14448. let selected = 0
  14449. if (prev && prev.selected) {
  14450. let selectedValue = prev.options[prev.selected].completion
  14451. for (let i = 0; i < options.length && !selected; i++) {
  14452. if (options[i].completion == selectedValue) selected = i
  14453. }
  14454. }
  14455. return new CompletionDialog(
  14456. options,
  14457. makeAttrs(id, selected),
  14458. { pos: active.reduce((a, b) => (b.hasResult() ? Math.min(a, b.from) : a), 1e8), create: completionTooltip(completionState) },
  14459. prev ? prev.timestamp : Date.now(),
  14460. selected
  14461. )
  14462. }
  14463. map(changes) {
  14464. return new CompletionDialog(this.options, this.attrs, Object.assign(Object.assign({}, this.tooltip), { pos: changes.mapPos(this.tooltip.pos) }), this.timestamp, this.selected)
  14465. }
  14466. }
  14467. class CompletionState {
  14468. constructor(active, id, open) {
  14469. this.active = active
  14470. this.id = id
  14471. this.open = open
  14472. }
  14473. static start() {
  14474. return new CompletionState(none$1, 'cm-ac-' + Math.floor(Math.random() * 2e6).toString(36), null)
  14475. }
  14476. update(tr) {
  14477. let { state } = tr,
  14478. conf = state.facet(completionConfig)
  14479. let sources = conf.override || state.languageDataAt('autocomplete', cur(state)).map(asSource)
  14480. let active = sources.map(source => {
  14481. let value = this.active.find(s => s.source == source) || new ActiveSource(source, this.active.some(a => a.state != 0) ? 1 : 0, false)
  14482. return value.update(tr, conf)
  14483. })
  14484. if (active.length == this.active.length && active.every((a, i) => a == this.active[i])) active = this.active
  14485. let open =
  14486. tr.selection || active.some(a => a.hasResult() && tr.changes.touchesRange(a.from, a.to)) || !sameResults(active, this.active)
  14487. ? CompletionDialog.build(active, state, this.id, this.open)
  14488. : this.open && tr.docChanged
  14489. ? this.open.map(tr.changes)
  14490. : this.open
  14491. if (!open && active.every(a => a.state != 1) && active.some(a => a.hasResult())) active = active.map(a => (a.hasResult() ? new ActiveSource(a.source, 0, false) : a))
  14492. for (let _i174 = 0, _tr$effects10 = tr.effects, _length174 = _tr$effects10.length; _i174 < _length174; _i174++) {
  14493. let effect = _tr$effects10[_i174]
  14494. if (effect.is(setSelectedEffect)) open = open && open.setSelected(effect.value, this.id)
  14495. }
  14496. return active == this.active && open == this.open ? this : new CompletionState(active, this.id, open)
  14497. }
  14498. get tooltip() {
  14499. return this.open ? this.open.tooltip : null
  14500. }
  14501. get attrs() {
  14502. return this.open ? this.open.attrs : baseAttrs
  14503. }
  14504. }
  14505. function sameResults(a, b) {
  14506. if (a == b) return true
  14507. for (let iA = 0, iB = 0; ; ) {
  14508. while (iA < a.length && !a[iA].hasResult) iA++
  14509. while (iB < b.length && !b[iB].hasResult) iB++
  14510. let endA = iA == a.length,
  14511. endB = iB == b.length
  14512. if (endA || endB) return endA == endB
  14513. if (a[iA++].result != b[iB++].result) return false
  14514. }
  14515. }
  14516. function makeAttrs(id, selected) {
  14517. return { 'aria-autocomplete': 'list', 'aria-activedescendant': id + '-' + selected, 'aria-owns': id }
  14518. }
  14519. const baseAttrs = { 'aria-autocomplete': 'list' },
  14520. none$1 = []
  14521. function cmpOption(a, b) {
  14522. let dScore = b.match[0] - a.match[0]
  14523. if (dScore) return dScore
  14524. let lA = a.completion.label,
  14525. lB = b.completion.label
  14526. return lA < lB ? -1 : lA == lB ? 0 : 1
  14527. }
  14528. class ActiveSource {
  14529. constructor(source, state, explicit) {
  14530. this.source = source
  14531. this.state = state
  14532. this.explicit = explicit
  14533. }
  14534. hasResult() {
  14535. return false
  14536. }
  14537. update(tr, conf) {
  14538. let event = tr.annotation(Transaction.userEvent),
  14539. value = this
  14540. if (event == 'input' || event == 'delete') value = value.handleUserEvent(tr, event, conf)
  14541. else if (tr.docChanged) value = value.handleChange(tr)
  14542. else if (tr.selection && value.state != 0) value = new ActiveSource(value.source, 0, false)
  14543. for (let _i175 = 0, _tr$effects11 = tr.effects, _length175 = _tr$effects11.length; _i175 < _length175; _i175++) {
  14544. let effect = _tr$effects11[_i175]
  14545. if (effect.is(startCompletionEffect)) value = new ActiveSource(value.source, 1, effect.value)
  14546. else if (effect.is(closeCompletionEffect)) value = new ActiveSource(value.source, 0, false)
  14547. else if (effect.is(setActiveEffect))
  14548. for (let _i176 = 0, _effect$value = effect.value, _length176 = _effect$value.length; _i176 < _length176; _i176++) {
  14549. let active = _effect$value[_i176]
  14550. if (active.source == value.source) value = active
  14551. }
  14552. }
  14553. return value
  14554. }
  14555. handleUserEvent(_tr, type, conf) {
  14556. return type == 'delete' || !conf.activateOnTyping ? this : new ActiveSource(this.source, 1, false)
  14557. }
  14558. handleChange(tr) {
  14559. return tr.changes.touchesRange(cur(tr.startState)) ? new ActiveSource(this.source, 0, false) : this
  14560. }
  14561. }
  14562. class ActiveResult extends ActiveSource {
  14563. constructor(source, explicit, result, from, to, span) {
  14564. super(source, 2, explicit)
  14565. this.result = result
  14566. this.from = from
  14567. this.to = to
  14568. this.span = span
  14569. }
  14570. hasResult() {
  14571. return true
  14572. }
  14573. handleUserEvent(tr, type, conf) {
  14574. let from = tr.changes.mapPos(this.from),
  14575. to = tr.changes.mapPos(this.to, 1)
  14576. let pos = cur(tr.state)
  14577. if ((this.explicit ? pos < from : pos <= from) || pos > to) return new ActiveSource(this.source, type == 'input' && conf.activateOnTyping ? 1 : 0, false)
  14578. if (this.span && (from == to || this.span.test(tr.state.sliceDoc(from, to)))) return new ActiveResult(this.source, this.explicit, this.result, from, to, this.span)
  14579. return new ActiveSource(this.source, 1, this.explicit)
  14580. }
  14581. handleChange(tr) {
  14582. return tr.changes.touchesRange(this.from, this.to)
  14583. ? new ActiveSource(this.source, 0, false)
  14584. : new ActiveResult(this.source, this.explicit, this.result, tr.changes.mapPos(this.from), tr.changes.mapPos(this.to, 1), this.span)
  14585. }
  14586. map(mapping) {
  14587. return new ActiveResult(this.source, this.explicit, this.result, mapping.mapPos(this.from), mapping.mapPos(this.to, 1), this.span)
  14588. }
  14589. }
  14590. const startCompletionEffect = StateEffect.define()
  14591. const closeCompletionEffect = StateEffect.define()
  14592. const setActiveEffect = StateEffect.define({
  14593. map(sources, mapping) {
  14594. return sources.map(s => (s.hasResult() && !mapping.empty ? s.map(mapping) : s))
  14595. }
  14596. })
  14597. const setSelectedEffect = StateEffect.define()
  14598. const completionState = StateField.define({
  14599. create() {
  14600. return CompletionState.start()
  14601. },
  14602. update(value, tr) {
  14603. return value.update(tr)
  14604. },
  14605. provide: f => [showTooltip.from(f, val => val.tooltip), EditorView.contentAttributes.from(f, state => state.attrs)]
  14606. })
  14607. const CompletionInteractMargin = 75
  14608. function moveCompletionSelection(forward, by = 'option') {
  14609. return view => {
  14610. let cState = view.state.field(completionState, false)
  14611. if (!cState || !cState.open || Date.now() - cState.open.timestamp < CompletionInteractMargin) return false
  14612. let step = 1,
  14613. tooltip
  14614. if (by == 'page' && (tooltip = view.dom.querySelector('.cm-tooltip-autocomplete'))) step = Math.max(2, Math.floor(tooltip.offsetHeight / tooltip.firstChild.offsetHeight))
  14615. let selected = cState.open.selected + step * (forward ? 1 : -1),
  14616. { length } = cState.open.options
  14617. if (selected < 0) selected = by == 'page' ? 0 : length - 1
  14618. else if (selected >= length) selected = by == 'page' ? length - 1 : 0
  14619. view.dispatch({ effects: setSelectedEffect.of(selected) })
  14620. return true
  14621. }
  14622. }
  14623. const acceptCompletion = view => {
  14624. let cState = view.state.field(completionState, false)
  14625. if (!cState || !cState.open || Date.now() - cState.open.timestamp < CompletionInteractMargin) return false
  14626. applyCompletion(view, cState.open.options[cState.open.selected])
  14627. return true
  14628. }
  14629. const startCompletion = view => {
  14630. let cState = view.state.field(completionState, false)
  14631. if (!cState) return false
  14632. view.dispatch({ effects: startCompletionEffect.of(true) })
  14633. return true
  14634. }
  14635. const closeCompletion = view => {
  14636. let cState = view.state.field(completionState, false)
  14637. if (!cState || !cState.active.some(a => a.state != 0)) return false
  14638. view.dispatch({ effects: closeCompletionEffect.of(null) })
  14639. return true
  14640. }
  14641. class RunningQuery {
  14642. constructor(source, context) {
  14643. this.source = source
  14644. this.context = context
  14645. this.time = Date.now()
  14646. this.updates = []
  14647. this.done = undefined
  14648. }
  14649. }
  14650. const DebounceTime = 50,
  14651. MaxUpdateCount = 50,
  14652. MinAbortTime = 1000
  14653. const completionPlugin = ViewPlugin.fromClass(
  14654. class {
  14655. constructor(view) {
  14656. this.view = view
  14657. this.debounceUpdate = -1
  14658. this.running = []
  14659. this.debounceAccept = -1
  14660. this.composing = 0
  14661. for (let _i177 = 0, _view$state$field$act = view.state.field(completionState).active, _length177 = _view$state$field$act.length; _i177 < _length177; _i177++) {
  14662. let active = _view$state$field$act[_i177]
  14663. if (active.state == 1) this.startQuery(active)
  14664. }
  14665. }
  14666. update(update) {
  14667. let cState = update.state.field(completionState)
  14668. if (!update.selectionSet && !update.docChanged && update.startState.field(completionState) == cState) return
  14669. let doesReset = update.transactions.some(tr => {
  14670. let event = tr.annotation(Transaction.userEvent)
  14671. return (tr.selection || tr.docChanged) && event != 'input' && event != 'delete'
  14672. })
  14673. for (let i = 0; i < this.running.length; i++) {
  14674. let query = this.running[i]
  14675. if (doesReset || (query.updates.length + update.transactions.length > MaxUpdateCount && query.time - Date.now() > MinAbortTime)) {
  14676. for (let _i178 = 0, _query$context$abortL = query.context.abortListeners, _length178 = _query$context$abortL.length; _i178 < _length178; _i178++) {
  14677. let handler = _query$context$abortL[_i178]
  14678. try {
  14679. handler()
  14680. } catch (e) {
  14681. logException(this.view.state, e)
  14682. }
  14683. }
  14684. query.context.abortListeners = null
  14685. this.running.splice(i--, 1)
  14686. } else {
  14687. query.updates.push(...update.transactions)
  14688. }
  14689. }
  14690. if (this.debounceUpdate > -1) clearTimeout(this.debounceUpdate)
  14691. this.debounceUpdate = cState.active.some(a => a.state == 1 && !this.running.some(q => q.source == a.source)) ? setTimeout(() => this.startUpdate(), DebounceTime) : -1
  14692. if (this.composing != 0)
  14693. for (let _i179 = 0, _update$transactions = update.transactions, _length179 = _update$transactions.length; _i179 < _length179; _i179++) {
  14694. let tr = _update$transactions[_i179]
  14695. if (tr.annotation(Transaction.userEvent) == 'input') this.composing = 2
  14696. else if (this.composing == 2 && tr.selection) this.composing = 3
  14697. }
  14698. }
  14699. startUpdate() {
  14700. this.debounceUpdate = -1
  14701. let { state } = this.view,
  14702. cState = state.field(completionState)
  14703. for (let _i180 = 0, _cState$active = cState.active, _length180 = _cState$active.length; _i180 < _length180; _i180++) {
  14704. let active = _cState$active[_i180]
  14705. if (active.state == 1 && !this.running.some(r => r.source == active.source)) this.startQuery(active)
  14706. }
  14707. }
  14708. startQuery(active) {
  14709. let { state } = this.view,
  14710. pos = cur(state)
  14711. let context = new CompletionContext(state, pos, active.explicit)
  14712. let pending = new RunningQuery(active.source, context)
  14713. this.running.push(pending)
  14714. Promise.resolve(active.source(context)).then(
  14715. result => {
  14716. if (!pending.context.aborted) {
  14717. pending.done = result || null
  14718. this.scheduleAccept()
  14719. }
  14720. },
  14721. err => {
  14722. this.view.dispatch({ effects: closeCompletionEffect.of(null) })
  14723. logException(this.view.state, err)
  14724. }
  14725. )
  14726. }
  14727. scheduleAccept() {
  14728. if (this.running.every(q => q.done !== undefined)) this.accept()
  14729. else if (this.debounceAccept < 0) this.debounceAccept = setTimeout(() => this.accept(), DebounceTime)
  14730. }
  14731. accept() {
  14732. var _a
  14733. if (this.debounceAccept > -1) clearTimeout(this.debounceAccept)
  14734. this.debounceAccept = -1
  14735. let updated = []
  14736. let conf = this.view.state.facet(completionConfig)
  14737. for (let i = 0; i < this.running.length; i++) {
  14738. let query = this.running[i]
  14739. if (query.done === undefined) continue
  14740. this.running.splice(i--, 1)
  14741. if (query.done) {
  14742. let active = new ActiveResult(
  14743. query.source,
  14744. query.context.explicit,
  14745. query.done,
  14746. query.done.from,
  14747. (_a = query.done.to) !== null && _a !== void 0 ? _a : cur(query.updates.length ? query.updates[0].startState : this.view.state),
  14748. query.done.span ? ensureAnchor(query.done.span, true) : null
  14749. )
  14750. for (let _i181 = 0, _query$updates = query.updates, _length181 = _query$updates.length; _i181 < _length181; _i181++) {
  14751. let tr = _query$updates[_i181]
  14752. active = active.update(tr, conf)
  14753. }
  14754. if (active.hasResult()) {
  14755. updated.push(active)
  14756. continue
  14757. }
  14758. }
  14759. let current = this.view.state.field(completionState).active.find(a => a.source == query.source)
  14760. if (current && current.state == 1) {
  14761. if (query.done == null) {
  14762. let active = new ActiveSource(query.source, 0, false)
  14763. for (let _i182 = 0, _query$updates2 = query.updates, _length182 = _query$updates2.length; _i182 < _length182; _i182++) {
  14764. let tr = _query$updates2[_i182]
  14765. active = active.update(tr, conf)
  14766. }
  14767. if (active.state != 1) updated.push(active)
  14768. } else {
  14769. this.startQuery(current)
  14770. }
  14771. }
  14772. }
  14773. if (updated.length) this.view.dispatch({ effects: setActiveEffect.of(updated) })
  14774. }
  14775. },
  14776. {
  14777. eventHandlers: {
  14778. compositionstart() {
  14779. this.composing = 1
  14780. },
  14781. compositionend() {
  14782. if (this.composing == 3) {
  14783. setTimeout(() => this.view.dispatch({ effects: startCompletionEffect.of(false) }), 20)
  14784. }
  14785. this.composing = 0
  14786. }
  14787. }
  14788. }
  14789. )
  14790. class FieldPos {
  14791. constructor(field, line, from, to) {
  14792. this.field = field
  14793. this.line = line
  14794. this.from = from
  14795. this.to = to
  14796. }
  14797. }
  14798. class FieldRange {
  14799. constructor(field, from, to) {
  14800. this.field = field
  14801. this.from = from
  14802. this.to = to
  14803. }
  14804. map(changes) {
  14805. return new FieldRange(this.field, changes.mapPos(this.from, -1), changes.mapPos(this.to, 1))
  14806. }
  14807. }
  14808. class Snippet {
  14809. constructor(lines, fieldPositions) {
  14810. this.lines = lines
  14811. this.fieldPositions = fieldPositions
  14812. }
  14813. instantiate(state, pos) {
  14814. let text = [],
  14815. lineStart = [pos]
  14816. let lineObj = state.doc.lineAt(pos),
  14817. baseIndent = /^\s*/.exec(lineObj.text)[0]
  14818. for (let _i183 = 0, _this$lines = this.lines, _length183 = _this$lines.length; _i183 < _length183; _i183++) {
  14819. let line = _this$lines[_i183]
  14820. if (text.length) {
  14821. let indent = baseIndent,
  14822. tabs = /^\t*/.exec(line)[0].length
  14823. for (let i = 0; i < tabs; i++) indent += state.facet(indentUnit)
  14824. lineStart.push(pos + indent.length - tabs)
  14825. line = indent + line.slice(tabs)
  14826. }
  14827. text.push(line)
  14828. pos += line.length + 1
  14829. }
  14830. let ranges = this.fieldPositions.map(pos => new FieldRange(pos.field, lineStart[pos.line] + pos.from, lineStart[pos.line] + pos.to))
  14831. return { text, ranges }
  14832. }
  14833. static parse(template) {
  14834. let fields = []
  14835. let lines = [],
  14836. positions = [],
  14837. m
  14838. for (let _i184 = 0, _template$split = template.split(/\r\n?|\n/), _length184 = _template$split.length; _i184 < _length184; _i184++) {
  14839. let line = _template$split[_i184]
  14840. while ((m = /[#$]\{(?:(\d+)(?::([^}]*))?|([^}]*))\}/.exec(line))) {
  14841. let seq = m[1] ? +m[1] : null,
  14842. name = m[2] || m[3],
  14843. found = -1
  14844. for (let i = 0; i < fields.length; i++) {
  14845. if (seq != null ? fields[i].seq == seq : name ? fields[i].name == name : false) found = i
  14846. }
  14847. if (found < 0) {
  14848. let i = 0
  14849. while (i < fields.length && (seq == null || (fields[i].seq != null && fields[i].seq < seq))) i++
  14850. fields.splice(i, 0, { seq, name: name || null })
  14851. found = i
  14852. for (let _i185 = 0, _length185 = positions.length; _i185 < _length185; _i185++) {
  14853. let pos = positions[_i185]
  14854. if (pos.field >= found) pos.field++
  14855. }
  14856. }
  14857. positions.push(new FieldPos(found, lines.length, m.index, m.index + name.length))
  14858. line = line.slice(0, m.index) + name + line.slice(m.index + m[0].length)
  14859. }
  14860. lines.push(line)
  14861. }
  14862. return new Snippet(lines, positions)
  14863. }
  14864. }
  14865. let fieldMarker = Decoration.widget({
  14866. widget: new (class extends WidgetType {
  14867. toDOM() {
  14868. let span = document.createElement('span')
  14869. span.className = 'cm-snippetFieldPosition'
  14870. return span
  14871. }
  14872. ignoreEvent() {
  14873. return false
  14874. }
  14875. })()
  14876. })
  14877. let fieldRange = Decoration.mark({ class: 'cm-snippetField' })
  14878. class ActiveSnippet {
  14879. constructor(ranges, active) {
  14880. this.ranges = ranges
  14881. this.active = active
  14882. this.deco = Decoration.set(ranges.map(r => (r.from == r.to ? fieldMarker : fieldRange).range(r.from, r.to)))
  14883. }
  14884. map(changes) {
  14885. return new ActiveSnippet(
  14886. this.ranges.map(r => r.map(changes)),
  14887. this.active
  14888. )
  14889. }
  14890. selectionInsideField(sel) {
  14891. return sel.ranges.every(range => this.ranges.some(r => r.field == this.active && r.from <= range.from && r.to >= range.to))
  14892. }
  14893. }
  14894. const setActive = StateEffect.define({
  14895. map(value, changes) {
  14896. return value && value.map(changes)
  14897. }
  14898. })
  14899. const moveToField = StateEffect.define()
  14900. const snippetState = StateField.define({
  14901. create() {
  14902. return null
  14903. },
  14904. update(value, tr) {
  14905. for (let _i186 = 0, _tr$effects12 = tr.effects, _length186 = _tr$effects12.length; _i186 < _length186; _i186++) {
  14906. let effect = _tr$effects12[_i186]
  14907. if (effect.is(setActive)) return effect.value
  14908. if (effect.is(moveToField) && value) return new ActiveSnippet(value.ranges, effect.value)
  14909. }
  14910. if (value && tr.docChanged) value = value.map(tr.changes)
  14911. if (value && tr.selection && !value.selectionInsideField(tr.selection)) value = null
  14912. return value
  14913. },
  14914. provide: f => EditorView.decorations.from(f, val => (val ? val.deco : Decoration.none))
  14915. })
  14916. function fieldSelection(ranges, field) {
  14917. return EditorSelection.create(ranges.filter(r => r.field == field).map(r => EditorSelection.range(r.from, r.to)))
  14918. }
  14919. function snippet(template) {
  14920. let snippet = Snippet.parse(template)
  14921. return (editor, _completion, from, to) => {
  14922. let { text, ranges } = snippet.instantiate(editor.state, from)
  14923. let spec = { changes: { from, to, insert: Text.of(text) } }
  14924. if (ranges.length) spec.selection = fieldSelection(ranges, 0)
  14925. if (ranges.length > 1) {
  14926. let active = new ActiveSnippet(ranges, 0)
  14927. let effects = (spec.effects = [setActive.of(active)])
  14928. if (editor.state.field(snippetState, false) === undefined)
  14929. effects.push(StateEffect.appendConfig.of([snippetState.init(() => active), addSnippetKeymap, snippetPointerHandler, baseTheme]))
  14930. }
  14931. editor.dispatch(editor.state.update(spec))
  14932. }
  14933. }
  14934. function moveField(dir) {
  14935. return ({ state, dispatch }) => {
  14936. let active = state.field(snippetState, false)
  14937. if (!active || (dir < 0 && active.active == 0)) return false
  14938. let next = active.active + dir,
  14939. last = dir > 0 && !active.ranges.some(r => r.field == next + dir)
  14940. dispatch(state.update({ selection: fieldSelection(active.ranges, next), effects: setActive.of(last ? null : new ActiveSnippet(active.ranges, next)) }))
  14941. return true
  14942. }
  14943. }
  14944. const clearSnippet = ({ state, dispatch }) => {
  14945. let active = state.field(snippetState, false)
  14946. if (!active) return false
  14947. dispatch(state.update({ effects: setActive.of(null) }))
  14948. return true
  14949. }
  14950. const nextSnippetField = moveField(1)
  14951. const prevSnippetField = moveField(-1)
  14952. const defaultSnippetKeymap = [
  14953. { key: 'Tab', run: nextSnippetField, shift: prevSnippetField },
  14954. { key: 'Escape', run: clearSnippet }
  14955. ]
  14956. const snippetKeymap = Facet.define({
  14957. combine(maps) {
  14958. return maps.length ? maps[0] : defaultSnippetKeymap
  14959. }
  14960. })
  14961. const addSnippetKeymap = Prec.override(keymap.compute([snippetKeymap], state => state.facet(snippetKeymap)))
  14962. function snippetCompletion(template, completion) {
  14963. return Object.assign(Object.assign({}, completion), { apply: snippet(template) })
  14964. }
  14965. const snippetPointerHandler = EditorView.domEventHandlers({
  14966. mousedown(event, view) {
  14967. let active = view.state.field(snippetState, false),
  14968. pos
  14969. if (!active || (pos = view.posAtCoords({ x: event.clientX, y: event.clientY })) == null) return false
  14970. let match = active.ranges.find(r => r.from <= pos && r.to >= pos)
  14971. if (!match || match.field == active.active) return false
  14972. view.dispatch({
  14973. selection: fieldSelection(active.ranges, match.field),
  14974. effects: setActive.of(active.ranges.some(r => r.field > match.field) ? new ActiveSnippet(active.ranges, match.field) : null)
  14975. })
  14976. return true
  14977. }
  14978. })
  14979. const completeAnyWord = context => {
  14980. let options = [],
  14981. seen = Object.create(null)
  14982. let cat = context.state.charCategorizer(context.pos)
  14983. let start = Math.max(0, context.pos - 50000),
  14984. end = Math.min(context.state.doc.length, start + 50000 * 2)
  14985. let from = context.pos
  14986. for (let cur = context.state.doc.iterRange(start, end), pos = start; !cur.next().done; ) {
  14987. let { value } = cur,
  14988. start = -1
  14989. for (let i = 0; ; i++) {
  14990. if (i < value.length && cat(value[i]) == CharCategory.Word) {
  14991. if (start < 0) start = i
  14992. } else if (start > -1) {
  14993. if (pos + start <= context.pos && pos + i >= context.pos) {
  14994. from = pos + start
  14995. } else {
  14996. let word = value.slice(start, i)
  14997. if (!seen[word]) {
  14998. options.push({ type: 'text', label: word })
  14999. seen[word] = true
  15000. }
  15001. }
  15002. start = -1
  15003. }
  15004. if (i == value.length) break
  15005. }
  15006. pos += value.length
  15007. }
  15008. return { from, options, span: /^\w*/ }
  15009. }
  15010. function autocompletion(config = {}) {
  15011. return [completionState, completionConfig.of(config), completionPlugin, completionKeymapExt, baseTheme]
  15012. }
  15013. const completionKeymap = [
  15014. { key: 'Ctrl-Space', run: startCompletion },
  15015. { key: 'Escape', run: closeCompletion },
  15016. { key: 'ArrowDown', run: moveCompletionSelection(true) },
  15017. { key: 'ArrowUp', run: moveCompletionSelection(false) },
  15018. { key: 'PageDown', run: moveCompletionSelection(true, 'page') },
  15019. { key: 'PageUp', run: moveCompletionSelection(false, 'page') },
  15020. { key: 'Enter', run: acceptCompletion }
  15021. ]
  15022. const completionKeymapExt = Prec.override(keymap.computeN([completionConfig], state => (state.facet(completionConfig).defaultKeymap ? [completionKeymap] : [])))
  15023. function completionStatus(state) {
  15024. let cState = state.field(completionState, false)
  15025. return cState && cState.active.some(a => a.state == 1) ? 'pending' : cState && cState.active.some(a => a.state != 0) ? 'active' : null
  15026. }
  15027. function currentCompletions(state) {
  15028. var _a
  15029. let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open
  15030. return open ? open.options.map(o => o.completion) : []
  15031. }
  15032. var _m18 = Object.freeze({
  15033. __proto__: null,
  15034. CompletionContext: CompletionContext,
  15035. acceptCompletion: acceptCompletion,
  15036. autocompletion: autocompletion,
  15037. clearSnippet: clearSnippet,
  15038. closeCompletion: closeCompletion,
  15039. completeAnyWord: completeAnyWord,
  15040. completeFromList: completeFromList,
  15041. completionKeymap: completionKeymap,
  15042. completionStatus: completionStatus,
  15043. currentCompletions: currentCompletions,
  15044. ifNotIn: ifNotIn,
  15045. moveCompletionSelection: moveCompletionSelection,
  15046. nextSnippetField: nextSnippetField,
  15047. prevSnippetField: prevSnippetField,
  15048. snippet: snippet,
  15049. snippetCompletion: snippetCompletion,
  15050. snippetKeymap: snippetKeymap,
  15051. startCompletion: startCompletion
  15052. })
  15053. const toggleComment = target => {
  15054. let config = getConfig(target.state)
  15055. return config.line ? toggleLineComment(target) : config.block ? toggleBlockComment(target) : false
  15056. }
  15057. function command(f, option) {
  15058. return ({ state, dispatch }) => {
  15059. let tr = f(option, state.selection.ranges, state)
  15060. if (!tr) return false
  15061. dispatch(state.update(tr))
  15062. return true
  15063. }
  15064. }
  15065. const toggleLineComment = command(changeLineComment, 0)
  15066. const lineComment = command(changeLineComment, 1)
  15067. const lineUncomment = command(changeLineComment, 2)
  15068. const toggleBlockComment = command(changeBlockComment, 0)
  15069. const blockComment = command(changeBlockComment, 1)
  15070. const blockUncomment = command(changeBlockComment, 2)
  15071. const commentKeymap = [
  15072. { key: 'Mod-/', run: toggleComment },
  15073. { key: 'Alt-A', run: toggleBlockComment }
  15074. ]
  15075. function getConfig(state, pos = state.selection.main.head) {
  15076. let data = state.languageDataAt('commentTokens', pos)
  15077. return data.length ? data[0] : {}
  15078. }
  15079. const SearchMargin = 50
  15080. function findBlockComment(state, { open, close }, from, to) {
  15081. let textBefore = state.sliceDoc(from - SearchMargin, from)
  15082. let textAfter = state.sliceDoc(to, to + SearchMargin)
  15083. let spaceBefore = /\s*$/.exec(textBefore)[0].length,
  15084. spaceAfter = /^\s*/.exec(textAfter)[0].length
  15085. let beforeOff = textBefore.length - spaceBefore
  15086. if (textBefore.slice(beforeOff - open.length, beforeOff) == open && textAfter.slice(spaceAfter, spaceAfter + close.length) == close) {
  15087. return { open: { pos: from - spaceBefore, margin: spaceBefore && 1 }, close: { pos: to + spaceAfter, margin: spaceAfter && 1 } }
  15088. }
  15089. let startText, endText
  15090. if (to - from <= 2 * SearchMargin) {
  15091. startText = endText = state.sliceDoc(from, to)
  15092. } else {
  15093. startText = state.sliceDoc(from, from + SearchMargin)
  15094. endText = state.sliceDoc(to - SearchMargin, to)
  15095. }
  15096. let startSpace = /^\s*/.exec(startText)[0].length,
  15097. endSpace = /\s*$/.exec(endText)[0].length
  15098. let endOff = endText.length - endSpace - close.length
  15099. if (startText.slice(startSpace, startSpace + open.length) == open && endText.slice(endOff, endOff + close.length) == close) {
  15100. return {
  15101. open: { pos: from + startSpace + open.length, margin: /\s/.test(startText.charAt(startSpace + open.length)) ? 1 : 0 },
  15102. close: { pos: to - endSpace - close.length, margin: /\s/.test(endText.charAt(endOff - 1)) ? 1 : 0 }
  15103. }
  15104. }
  15105. return null
  15106. }
  15107. function changeBlockComment(option, ranges, state) {
  15108. let tokens = ranges.map(r => getConfig(state, r.from).block)
  15109. if (!tokens.every(c => c)) return null
  15110. let comments = ranges.map((r, i) => findBlockComment(state, tokens[i], r.from, r.to))
  15111. if (option != 2 && !comments.every(c => c)) {
  15112. let index = 0
  15113. return state.changeByRange(range => {
  15114. let { open, close } = tokens[index++]
  15115. if (comments[index]) return { range }
  15116. let shift = open.length + 1
  15117. return {
  15118. changes: [
  15119. { from: range.from, insert: open + ' ' },
  15120. { from: range.to, insert: ' ' + close }
  15121. ],
  15122. range: EditorSelection.range(range.anchor + shift, range.head + shift)
  15123. }
  15124. })
  15125. } else if (option != 1 && comments.some(c => c)) {
  15126. let changes = []
  15127. for (let i = 0, comment; i < comments.length; i++)
  15128. if ((comment = comments[i])) {
  15129. let token = tokens[i],
  15130. { open, close } = comment
  15131. changes.push({ from: open.pos - token.open.length, to: open.pos + open.margin }, { from: close.pos - close.margin, to: close.pos + token.close.length })
  15132. }
  15133. return { changes }
  15134. }
  15135. return null
  15136. }
  15137. function changeLineComment(option, ranges, state) {
  15138. let lines = []
  15139. let prevLine = -1
  15140. for (let _i187 = 0, _length187 = ranges.length; _i187 < _length187; _i187++) {
  15141. let { from, to } = ranges[_i187]
  15142. let startI = lines.length,
  15143. minIndent = 1e9
  15144. for (let pos = from; pos <= to; ) {
  15145. let line = state.doc.lineAt(pos)
  15146. if (line.from > prevLine && (from == to || to > line.from)) {
  15147. prevLine = line.from
  15148. let token = getConfig(state, pos).line
  15149. if (!token) continue
  15150. let indent = /^\s*/.exec(line.text)[0].length
  15151. let empty = indent == line.length
  15152. let comment = line.text.slice(indent, indent + token.length) == token ? indent : -1
  15153. if (indent < line.text.length && indent < minIndent) minIndent = indent
  15154. lines.push({ line, comment, token, indent, empty, single: false })
  15155. }
  15156. pos = line.to + 1
  15157. }
  15158. if (minIndent < 1e9) for (let i = startI; i < lines.length; i++) if (lines[i].indent < lines[i].line.text.length) lines[i].indent = minIndent
  15159. if (lines.length == startI + 1) lines[startI].single = true
  15160. }
  15161. if (option != 2 && lines.some(l => l.comment < 0 && (!l.empty || l.single))) {
  15162. let changes = []
  15163. for (let _i188 = 0, _length188 = lines.length; _i188 < _length188; _i188++) {
  15164. let { line, token, indent, empty, single } = lines[_i188]
  15165. if (single || !empty) changes.push({ from: line.from + indent, insert: token + ' ' })
  15166. }
  15167. let changeSet = state.changes(changes)
  15168. return { changes: changeSet, selection: state.selection.map(changeSet, 1) }
  15169. } else if (option != 1 && lines.some(l => l.comment >= 0)) {
  15170. let changes = []
  15171. for (let _i189 = 0, _length189 = lines.length; _i189 < _length189; _i189++) {
  15172. let { line, comment, token } = lines[_i189]
  15173. if (comment >= 0) {
  15174. let from = line.from + comment,
  15175. to = from + token.length
  15176. if (line.text[to - line.from] == ' ') to++
  15177. changes.push({ from, to })
  15178. }
  15179. }
  15180. return { changes }
  15181. }
  15182. return null
  15183. }
  15184. var _m19 = Object.freeze({
  15185. __proto__: null,
  15186. blockComment: blockComment,
  15187. blockUncomment: blockUncomment,
  15188. commentKeymap: commentKeymap,
  15189. lineComment: lineComment,
  15190. lineUncomment: lineUncomment,
  15191. toggleBlockComment: toggleBlockComment,
  15192. toggleComment: toggleComment,
  15193. toggleLineComment: toggleLineComment
  15194. })
  15195. const MaxOff = 2000
  15196. function rectangleFor(state, a, b) {
  15197. let startLine = Math.min(a.line, b.line),
  15198. endLine = Math.max(a.line, b.line)
  15199. let ranges = []
  15200. if (a.off > MaxOff || b.off > MaxOff || a.col < 0 || b.col < 0) {
  15201. let startOff = Math.min(a.off, b.off),
  15202. endOff = Math.max(a.off, b.off)
  15203. for (let i = startLine; i <= endLine; i++) {
  15204. let line = state.doc.line(i)
  15205. if (line.length <= endOff) ranges.push(EditorSelection.range(line.from + startOff, line.to + endOff))
  15206. }
  15207. } else {
  15208. let startCol = Math.min(a.col, b.col),
  15209. endCol = Math.max(a.col, b.col)
  15210. for (let i = startLine; i <= endLine; i++) {
  15211. let line = state.doc.line(i),
  15212. str = line.length > MaxOff ? line.text.slice(0, 2 * endCol) : line.text
  15213. let start = findColumn(str, 0, startCol, state.tabSize),
  15214. end = findColumn(str, 0, endCol, state.tabSize)
  15215. if (!start.leftOver) ranges.push(EditorSelection.range(line.from + start.offset, line.from + end.offset))
  15216. }
  15217. }
  15218. return ranges
  15219. }
  15220. function absoluteColumn(view, x) {
  15221. let ref = view.coordsAtPos(view.viewport.from)
  15222. return ref ? Math.round(Math.abs((ref.left - x) / view.defaultCharacterWidth)) : -1
  15223. }
  15224. function getPos(view, event) {
  15225. let offset = view.posAtCoords({ x: event.clientX, y: event.clientY })
  15226. if (offset == null) return null
  15227. let line = view.state.doc.lineAt(offset),
  15228. off = offset - line.from
  15229. let col = off > MaxOff ? -1 : off == line.length ? absoluteColumn(view, event.clientX) : countColumn(line.text.slice(0, offset - line.from), 0, view.state.tabSize)
  15230. return { line: line.number, col, off }
  15231. }
  15232. function rectangleSelectionStyle(view, event) {
  15233. let start = getPos(view, event),
  15234. startSel = view.state.selection
  15235. if (!start) return null
  15236. return {
  15237. update(update) {
  15238. if (update.docChanged) {
  15239. let newStart = update.changes.mapPos(update.startState.doc.line(start.line).from)
  15240. let newLine = update.state.doc.lineAt(newStart)
  15241. start = { line: newLine.number, col: start.col, off: Math.min(start.off, newLine.length) }
  15242. startSel = startSel.map(update.changes)
  15243. }
  15244. },
  15245. get(event, _extend, multiple) {
  15246. let cur = getPos(view, event)
  15247. if (!cur) return startSel
  15248. let ranges = rectangleFor(view.state, start, cur)
  15249. if (!ranges.length) return startSel
  15250. if (multiple) return EditorSelection.create(ranges.concat(startSel.ranges))
  15251. else return EditorSelection.create(ranges)
  15252. }
  15253. }
  15254. }
  15255. function rectangularSelection(options) {
  15256. let filter = (options === null || options === void 0 ? void 0 : options.eventFilter) || (e => e.altKey && e.button == 0)
  15257. return EditorView.mouseSelectionStyle.of((view, event) => (filter(event) ? rectangleSelectionStyle(view, event) : null))
  15258. }
  15259. var _m20 = Object.freeze({ __proto__: null, rectangularSelection: rectangularSelection })
  15260. const basicSetup = [
  15261. lineNumbers(),
  15262. highlightActiveLineGutter(),
  15263. highlightSpecialChars(),
  15264. history(),
  15265. foldGutter(),
  15266. drawSelection(),
  15267. EditorState.allowMultipleSelections.of(true),
  15268. indentOnInput(),
  15269. defaultHighlightStyle.fallback,
  15270. bracketMatching(),
  15271. closeBrackets(),
  15272. autocompletion(),
  15273. rectangularSelection(),
  15274. highlightActiveLine(),
  15275. highlightSelectionMatches(),
  15276. keymap.of([...closeBracketsKeymap, ...defaultKeymap, ...searchKeymap, ...historyKeymap, ...foldKeymap, ...commentKeymap, ...completionKeymap, ...lintKeymap])
  15277. ]
  15278. var _m21 = Object.freeze({ __proto__: null, basicSetup: basicSetup, EditorView: EditorView, EditorState: EditorState })
  15279. class Stack {
  15280. constructor(p, stack, state, reducePos, pos, score, buffer, bufferBase, curContext, parent) {
  15281. this.p = p
  15282. this.stack = stack
  15283. this.state = state
  15284. this.reducePos = reducePos
  15285. this.pos = pos
  15286. this.score = score
  15287. this.buffer = buffer
  15288. this.bufferBase = bufferBase
  15289. this.curContext = curContext
  15290. this.parent = parent
  15291. }
  15292. toString() {
  15293. return `[${this.stack.filter((_, i) => i % 3 == 0).concat(this.state)}]@${this.pos}${this.score ? '!' + this.score : ''}`
  15294. }
  15295. static start(p, state, pos = 0) {
  15296. let cx = p.parser.context
  15297. return new Stack(p, [], state, pos, pos, 0, [], 0, cx ? new StackContext(cx, cx.start) : null, null)
  15298. }
  15299. get context() {
  15300. return this.curContext ? this.curContext.context : null
  15301. }
  15302. pushState(state, start) {
  15303. this.stack.push(this.state, start, this.bufferBase + this.buffer.length)
  15304. this.state = state
  15305. }
  15306. reduce(action) {
  15307. let depth = action >> 19,
  15308. type = action & 65535
  15309. let { parser } = this.p
  15310. let dPrec = parser.dynamicPrecedence(type)
  15311. if (dPrec) this.score += dPrec
  15312. if (depth == 0) {
  15313. if (type < parser.minRepeatTerm) this.storeNode(type, this.reducePos, this.reducePos, 4, true)
  15314. this.pushState(parser.getGoto(this.state, type, true), this.reducePos)
  15315. this.reduceContext(type)
  15316. return
  15317. }
  15318. let base = this.stack.length - (depth - 1) * 3 - (action & 262144 ? 6 : 0)
  15319. let start = this.stack[base - 2]
  15320. let bufferBase = this.stack[base - 1],
  15321. count = this.bufferBase + this.buffer.length - bufferBase
  15322. if (type < parser.minRepeatTerm || action & 131072) {
  15323. let pos = parser.stateFlag(this.state, 1) ? this.pos : this.reducePos
  15324. this.storeNode(type, start, pos, count + 4, true)
  15325. }
  15326. if (action & 262144) {
  15327. this.state = this.stack[base]
  15328. } else {
  15329. let baseStateID = this.stack[base - 3]
  15330. this.state = parser.getGoto(baseStateID, type, true)
  15331. }
  15332. while (this.stack.length > base) this.stack.pop()
  15333. this.reduceContext(type)
  15334. }
  15335. storeNode(term, start, end, size = 4, isReduce = false) {
  15336. if (term == 0) {
  15337. let cur = this,
  15338. top = this.buffer.length
  15339. if (top == 0 && cur.parent) {
  15340. top = cur.bufferBase - cur.parent.bufferBase
  15341. cur = cur.parent
  15342. }
  15343. if (top > 0 && cur.buffer[top - 4] == 0 && cur.buffer[top - 1] > -1) {
  15344. if (start == end) return
  15345. if (cur.buffer[top - 2] >= start) {
  15346. cur.buffer[top - 2] = end
  15347. return
  15348. }
  15349. }
  15350. }
  15351. if (!isReduce || this.pos == end) {
  15352. this.buffer.push(term, start, end, size)
  15353. } else {
  15354. let index = this.buffer.length
  15355. if (index > 0 && this.buffer[index - 4] != 0)
  15356. while (index > 0 && this.buffer[index - 2] > end) {
  15357. this.buffer[index] = this.buffer[index - 4]
  15358. this.buffer[index + 1] = this.buffer[index - 3]
  15359. this.buffer[index + 2] = this.buffer[index - 2]
  15360. this.buffer[index + 3] = this.buffer[index - 1]
  15361. index -= 4
  15362. if (size > 4) size -= 4
  15363. }
  15364. this.buffer[index] = term
  15365. this.buffer[index + 1] = start
  15366. this.buffer[index + 2] = end
  15367. this.buffer[index + 3] = size
  15368. }
  15369. }
  15370. shift(action, next, nextEnd) {
  15371. if (action & 131072) {
  15372. this.pushState(action & 65535, this.pos)
  15373. } else if ((action & 262144) == 0) {
  15374. let start = this.pos,
  15375. nextState = action,
  15376. { parser } = this.p
  15377. if (nextEnd > this.pos || next <= parser.maxNode) {
  15378. this.pos = nextEnd
  15379. if (!parser.stateFlag(nextState, 1)) this.reducePos = nextEnd
  15380. }
  15381. this.pushState(nextState, start)
  15382. if (next <= parser.maxNode) this.buffer.push(next, start, nextEnd, 4)
  15383. this.shiftContext(next)
  15384. } else {
  15385. if (next <= this.p.parser.maxNode) this.buffer.push(next, this.pos, nextEnd, 4)
  15386. this.pos = nextEnd
  15387. }
  15388. }
  15389. apply(action, next, nextEnd) {
  15390. if (action & 65536) this.reduce(action)
  15391. else this.shift(action, next, nextEnd)
  15392. }
  15393. useNode(value, next) {
  15394. let index = this.p.reused.length - 1
  15395. if (index < 0 || this.p.reused[index] != value) {
  15396. this.p.reused.push(value)
  15397. index++
  15398. }
  15399. let start = this.pos
  15400. this.reducePos = this.pos = start + value.length
  15401. this.pushState(next, start)
  15402. this.buffer.push(index, start, this.reducePos, -1)
  15403. if (this.curContext) this.updateContext(this.curContext.tracker.reuse(this.curContext.context, value, this.p.input, this))
  15404. }
  15405. split() {
  15406. let parent = this
  15407. let off = parent.buffer.length
  15408. while (off > 0 && parent.buffer[off - 2] > parent.reducePos) off -= 4
  15409. let buffer = parent.buffer.slice(off),
  15410. base = parent.bufferBase + off
  15411. while (parent && base == parent.bufferBase) parent = parent.parent
  15412. return new Stack(this.p, this.stack.slice(), this.state, this.reducePos, this.pos, this.score, buffer, base, this.curContext, parent)
  15413. }
  15414. recoverByDelete(next, nextEnd) {
  15415. let isNode = next <= this.p.parser.maxNode
  15416. if (isNode) this.storeNode(next, this.pos, nextEnd)
  15417. this.storeNode(0, this.pos, nextEnd, isNode ? 8 : 4)
  15418. this.pos = this.reducePos = nextEnd
  15419. this.score -= 200
  15420. }
  15421. canShift(term) {
  15422. for (let sim = new SimulatedStack(this); ; ) {
  15423. let action = this.p.parser.stateSlot(sim.top, 4) || this.p.parser.hasAction(sim.top, term)
  15424. if ((action & 65536) == 0) return true
  15425. if (action == 0) return false
  15426. sim.reduce(action)
  15427. }
  15428. }
  15429. get ruleStart() {
  15430. for (let state = this.state, base = this.stack.length; ; ) {
  15431. let force = this.p.parser.stateSlot(state, 5)
  15432. if (!(force & 65536)) return 0
  15433. base -= 3 * (force >> 19)
  15434. if ((force & 65535) < this.p.parser.minRepeatTerm) return this.stack[base + 1]
  15435. state = this.stack[base]
  15436. }
  15437. }
  15438. startOf(types, before) {
  15439. let state = this.state,
  15440. frame = this.stack.length,
  15441. { parser } = this.p
  15442. for (;;) {
  15443. let force = parser.stateSlot(state, 5)
  15444. let depth = force >> 19,
  15445. term = force & 65535
  15446. if (types.indexOf(term) > -1) {
  15447. let base = frame - 3 * (force >> 19),
  15448. pos = this.stack[base + 1]
  15449. if (before == null || before > pos) return pos
  15450. }
  15451. if (frame == 0) return null
  15452. if (depth == 0) {
  15453. frame -= 3
  15454. state = this.stack[frame]
  15455. } else {
  15456. frame -= 3 * (depth - 1)
  15457. state = parser.getGoto(this.stack[frame - 3], term, true)
  15458. }
  15459. }
  15460. }
  15461. recoverByInsert(next) {
  15462. if (this.stack.length >= 300) return []
  15463. let nextStates = this.p.parser.nextStates(this.state)
  15464. if (nextStates.length > 4 << 1 || this.stack.length >= 120) {
  15465. let best = []
  15466. for (let i = 0, s; i < nextStates.length; i += 2) {
  15467. if ((s = nextStates[i + 1]) != this.state && this.p.parser.hasAction(s, next)) best.push(nextStates[i], s)
  15468. }
  15469. if (this.stack.length < 120)
  15470. for (let i = 0; best.length < 4 << 1 && i < nextStates.length; i += 2) {
  15471. let s = nextStates[i + 1]
  15472. if (!best.some((v, i) => i & 1 && v == s)) best.push(nextStates[i], s)
  15473. }
  15474. nextStates = best
  15475. }
  15476. let result = []
  15477. for (let i = 0; i < nextStates.length && result.length < 4; i += 2) {
  15478. let s = nextStates[i + 1]
  15479. if (s == this.state) continue
  15480. let stack = this.split()
  15481. stack.storeNode(0, stack.pos, stack.pos, 4, true)
  15482. stack.pushState(s, this.pos)
  15483. stack.shiftContext(nextStates[i])
  15484. stack.score -= 200
  15485. result.push(stack)
  15486. }
  15487. return result
  15488. }
  15489. forceReduce() {
  15490. let reduce = this.p.parser.stateSlot(this.state, 5)
  15491. if ((reduce & 65536) == 0) return false
  15492. if (!this.p.parser.validAction(this.state, reduce)) {
  15493. this.storeNode(0, this.reducePos, this.reducePos, 4, true)
  15494. this.score -= 100
  15495. }
  15496. this.reduce(reduce)
  15497. return true
  15498. }
  15499. forceAll() {
  15500. while (!this.p.parser.stateFlag(this.state, 2) && this.forceReduce()) {}
  15501. return this
  15502. }
  15503. get deadEnd() {
  15504. if (this.stack.length != 3) return false
  15505. let { parser } = this.p
  15506. return parser.data[parser.stateSlot(this.state, 1)] == 65535 && !parser.stateSlot(this.state, 4)
  15507. }
  15508. restart() {
  15509. this.state = this.stack[0]
  15510. this.stack.length = 0
  15511. }
  15512. sameState(other) {
  15513. if (this.state != other.state || this.stack.length != other.stack.length) return false
  15514. for (let i = 0; i < this.stack.length; i += 3) if (this.stack[i] != other.stack[i]) return false
  15515. return true
  15516. }
  15517. get parser() {
  15518. return this.p.parser
  15519. }
  15520. dialectEnabled(dialectID) {
  15521. return this.p.parser.dialect.flags[dialectID]
  15522. }
  15523. shiftContext(term) {
  15524. if (this.curContext) this.updateContext(this.curContext.tracker.shift(this.curContext.context, term, this.p.input, this))
  15525. }
  15526. reduceContext(term) {
  15527. if (this.curContext) this.updateContext(this.curContext.tracker.reduce(this.curContext.context, term, this.p.input, this))
  15528. }
  15529. emitContext() {
  15530. let cx = this.curContext
  15531. if (!cx.tracker.strict) return
  15532. let last = this.buffer.length - 1
  15533. if (last < 0 || this.buffer[last] != -2) this.buffer.push(cx.hash, this.reducePos, this.reducePos, -2)
  15534. }
  15535. updateContext(context) {
  15536. if (context != this.curContext.context) {
  15537. let newCx = new StackContext(this.curContext.tracker, context)
  15538. if (newCx.hash != this.curContext.hash) this.emitContext()
  15539. this.curContext = newCx
  15540. }
  15541. }
  15542. }
  15543. class StackContext {
  15544. constructor(tracker, context) {
  15545. this.tracker = tracker
  15546. this.context = context
  15547. this.hash = tracker.hash(context)
  15548. }
  15549. }
  15550. var Recover
  15551. ;(function(Recover) {
  15552. Recover[(Recover['Token'] = 200)] = 'Token'
  15553. Recover[(Recover['Reduce'] = 100)] = 'Reduce'
  15554. Recover[(Recover['MaxNext'] = 4)] = 'MaxNext'
  15555. Recover[(Recover['MaxInsertStackDepth'] = 300)] = 'MaxInsertStackDepth'
  15556. Recover[(Recover['DampenInsertStackDepth'] = 120)] = 'DampenInsertStackDepth'
  15557. })(Recover || (Recover = {}))
  15558. class SimulatedStack {
  15559. constructor(stack) {
  15560. this.stack = stack
  15561. this.top = stack.state
  15562. this.rest = stack.stack
  15563. this.offset = this.rest.length
  15564. }
  15565. reduce(action) {
  15566. let term = action & 65535,
  15567. depth = action >> 19
  15568. if (depth == 0) {
  15569. if (this.rest == this.stack.stack) this.rest = this.rest.slice()
  15570. this.rest.push(this.top, 0, 0)
  15571. this.offset += 3
  15572. } else {
  15573. this.offset -= (depth - 1) * 3
  15574. }
  15575. let goto = this.stack.p.parser.getGoto(this.rest[this.offset - 3], term, true)
  15576. this.top = goto
  15577. }
  15578. }
  15579. class StackBufferCursor {
  15580. constructor(stack, pos, index) {
  15581. this.stack = stack
  15582. this.pos = pos
  15583. this.index = index
  15584. this.buffer = stack.buffer
  15585. if (this.index == 0) this.maybeNext()
  15586. }
  15587. static create(stack) {
  15588. return new StackBufferCursor(stack, stack.bufferBase + stack.buffer.length, stack.buffer.length)
  15589. }
  15590. maybeNext() {
  15591. let next = this.stack.parent
  15592. if (next != null) {
  15593. this.index = this.stack.bufferBase - next.bufferBase
  15594. this.stack = next
  15595. this.buffer = next.buffer
  15596. }
  15597. }
  15598. get id() {
  15599. return this.buffer[this.index - 4]
  15600. }
  15601. get start() {
  15602. return this.buffer[this.index - 3]
  15603. }
  15604. get end() {
  15605. return this.buffer[this.index - 2]
  15606. }
  15607. get size() {
  15608. return this.buffer[this.index - 1]
  15609. }
  15610. next() {
  15611. this.index -= 4
  15612. this.pos -= 4
  15613. if (this.index == 0) this.maybeNext()
  15614. }
  15615. fork() {
  15616. return new StackBufferCursor(this.stack, this.pos, this.index)
  15617. }
  15618. }
  15619. class Token {
  15620. constructor() {
  15621. this.start = -1
  15622. this.value = -1
  15623. this.end = -1
  15624. }
  15625. accept(value, end) {
  15626. this.value = value
  15627. this.end = end
  15628. }
  15629. }
  15630. class TokenGroup {
  15631. constructor(data, id) {
  15632. this.data = data
  15633. this.id = id
  15634. }
  15635. token(input, token, stack) {
  15636. readToken(this.data, input, token, stack, this.id)
  15637. }
  15638. }
  15639. TokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false
  15640. class ExternalTokenizer {
  15641. constructor(token, options = {}) {
  15642. this.token = token
  15643. this.contextual = !!options.contextual
  15644. this.fallback = !!options.fallback
  15645. this.extend = !!options.extend
  15646. }
  15647. }
  15648. function readToken(data, input, token, stack, group) {
  15649. let state = 0,
  15650. groupMask = 1 << group,
  15651. dialect = stack.p.parser.dialect
  15652. scan: for (let pos = token.start; ; ) {
  15653. if ((groupMask & data[state]) == 0) break
  15654. let accEnd = data[state + 1]
  15655. for (let i = state + 3; i < accEnd; i += 2)
  15656. if ((data[i + 1] & groupMask) > 0) {
  15657. let term = data[i]
  15658. if (dialect.allows(term) && (token.value == -1 || token.value == term || stack.p.parser.overrides(term, token.value))) {
  15659. token.accept(term, pos)
  15660. break
  15661. }
  15662. }
  15663. let next = input.get(pos++)
  15664. for (let low = 0, high = data[state + 2]; low < high; ) {
  15665. let mid = (low + high) >> 1
  15666. let index = accEnd + mid + (mid << 1)
  15667. let from = data[index],
  15668. to = data[index + 1]
  15669. if (next < from) high = mid
  15670. else if (next >= to) low = mid + 1
  15671. else {
  15672. state = data[index + 2]
  15673. continue scan
  15674. }
  15675. }
  15676. break
  15677. }
  15678. }
  15679. function decodeArray(input, Type = Uint16Array) {
  15680. if (typeof input != 'string') return input
  15681. let array = null
  15682. for (let pos = 0, out = 0; pos < input.length; ) {
  15683. let value = 0
  15684. for (;;) {
  15685. let next = input.charCodeAt(pos++),
  15686. stop = false
  15687. if (next == 126) {
  15688. value = 65535
  15689. break
  15690. }
  15691. if (next >= 92) next--
  15692. if (next >= 34) next--
  15693. let digit = next - 32
  15694. if (digit >= 46) {
  15695. digit -= 46
  15696. stop = true
  15697. }
  15698. value += digit
  15699. if (stop) break
  15700. value *= 46
  15701. }
  15702. if (array) array[out++] = value
  15703. else array = new Type(value)
  15704. }
  15705. return array
  15706. }
  15707. const verbose = typeof process != 'undefined' && /\bparse\b/.test(process.env.LOG)
  15708. let stackIDs = null
  15709. function cutAt(tree, pos, side) {
  15710. let cursor = tree.cursor(pos)
  15711. for (;;) {
  15712. if (!(side < 0 ? cursor.childBefore(pos) : cursor.childAfter(pos)))
  15713. for (;;) {
  15714. if ((side < 0 ? cursor.to < pos : cursor.from > pos) && !cursor.type.isError)
  15715. return side < 0 ? Math.max(0, Math.min(cursor.to - 1, pos - 5)) : Math.min(tree.length, Math.max(cursor.from + 1, pos + 5))
  15716. if (side < 0 ? cursor.prevSibling() : cursor.nextSibling()) break
  15717. if (!cursor.parent()) return side < 0 ? 0 : tree.length
  15718. }
  15719. }
  15720. }
  15721. class FragmentCursor$1 {
  15722. constructor(fragments) {
  15723. this.fragments = fragments
  15724. this.i = 0
  15725. this.fragment = null
  15726. this.safeFrom = -1
  15727. this.safeTo = -1
  15728. this.trees = []
  15729. this.start = []
  15730. this.index = []
  15731. this.nextFragment()
  15732. }
  15733. nextFragment() {
  15734. let fr = (this.fragment = this.i == this.fragments.length ? null : this.fragments[this.i++])
  15735. if (fr) {
  15736. this.safeFrom = fr.openStart ? cutAt(fr.tree, fr.from + fr.offset, 1) - fr.offset : fr.from
  15737. this.safeTo = fr.openEnd ? cutAt(fr.tree, fr.to + fr.offset, -1) - fr.offset : fr.to
  15738. while (this.trees.length) {
  15739. this.trees.pop()
  15740. this.start.pop()
  15741. this.index.pop()
  15742. }
  15743. this.trees.push(fr.tree)
  15744. this.start.push(-fr.offset)
  15745. this.index.push(0)
  15746. this.nextStart = this.safeFrom
  15747. } else {
  15748. this.nextStart = 1e9
  15749. }
  15750. }
  15751. nodeAt(pos) {
  15752. if (pos < this.nextStart) return null
  15753. while (this.fragment && this.safeTo <= pos) this.nextFragment()
  15754. if (!this.fragment) return null
  15755. for (;;) {
  15756. let last = this.trees.length - 1
  15757. if (last < 0) {
  15758. this.nextFragment()
  15759. return null
  15760. }
  15761. let top = this.trees[last],
  15762. index = this.index[last]
  15763. if (index == top.children.length) {
  15764. this.trees.pop()
  15765. this.start.pop()
  15766. this.index.pop()
  15767. continue
  15768. }
  15769. let next = top.children[index]
  15770. let start = this.start[last] + top.positions[index]
  15771. if (start > pos) {
  15772. this.nextStart = start
  15773. return null
  15774. } else if (start == pos && start + next.length <= this.safeTo) {
  15775. return start == pos && start >= this.safeFrom ? next : null
  15776. }
  15777. if (next instanceof TreeBuffer) {
  15778. this.index[last]++
  15779. this.nextStart = start + next.length
  15780. } else {
  15781. this.index[last]++
  15782. if (start + next.length >= pos) {
  15783. this.trees.push(next)
  15784. this.start.push(start)
  15785. this.index.push(0)
  15786. }
  15787. }
  15788. }
  15789. }
  15790. }
  15791. class CachedToken extends Token {
  15792. constructor() {
  15793. super(...arguments)
  15794. this.extended = -1
  15795. this.mask = 0
  15796. this.context = 0
  15797. }
  15798. clear(start) {
  15799. this.start = start
  15800. this.value = this.extended = -1
  15801. }
  15802. }
  15803. const dummyToken = new Token()
  15804. class TokenCache {
  15805. constructor(parser) {
  15806. this.tokens = []
  15807. this.mainToken = dummyToken
  15808. this.actions = []
  15809. this.tokens = parser.tokenizers.map(_ => new CachedToken())
  15810. }
  15811. getActions(stack, input) {
  15812. let actionIndex = 0
  15813. let main = null
  15814. let { parser } = stack.p,
  15815. { tokenizers } = parser
  15816. let mask = parser.stateSlot(stack.state, 3)
  15817. let context = stack.curContext ? stack.curContext.hash : 0
  15818. for (let i = 0; i < tokenizers.length; i++) {
  15819. if (((1 << i) & mask) == 0) continue
  15820. let tokenizer = tokenizers[i],
  15821. token = this.tokens[i]
  15822. if (main && !tokenizer.fallback) continue
  15823. if (tokenizer.contextual || token.start != stack.pos || token.mask != mask || token.context != context) {
  15824. this.updateCachedToken(token, tokenizer, stack, input)
  15825. token.mask = mask
  15826. token.context = context
  15827. }
  15828. if (token.value != 0) {
  15829. let startIndex = actionIndex
  15830. if (token.extended > -1) actionIndex = this.addActions(stack, token.extended, token.end, actionIndex)
  15831. actionIndex = this.addActions(stack, token.value, token.end, actionIndex)
  15832. if (!tokenizer.extend) {
  15833. main = token
  15834. if (actionIndex > startIndex) break
  15835. }
  15836. }
  15837. }
  15838. while (this.actions.length > actionIndex) this.actions.pop()
  15839. if (!main) {
  15840. main = dummyToken
  15841. main.start = stack.pos
  15842. if (stack.pos == input.length) main.accept(stack.p.parser.eofTerm, stack.pos)
  15843. else main.accept(0, stack.pos + 1)
  15844. }
  15845. this.mainToken = main
  15846. return this.actions
  15847. }
  15848. updateCachedToken(token, tokenizer, stack, input) {
  15849. token.clear(stack.pos)
  15850. tokenizer.token(input, token, stack)
  15851. if (token.value > -1) {
  15852. let { parser } = stack.p
  15853. for (let i = 0; i < parser.specialized.length; i++)
  15854. if (parser.specialized[i] == token.value) {
  15855. let result = parser.specializers[i](input.read(token.start, token.end), stack)
  15856. if (result >= 0 && stack.p.parser.dialect.allows(result >> 1)) {
  15857. if ((result & 1) == 0) token.value = result >> 1
  15858. else token.extended = result >> 1
  15859. break
  15860. }
  15861. }
  15862. } else if (stack.pos == input.length) {
  15863. token.accept(stack.p.parser.eofTerm, stack.pos)
  15864. } else {
  15865. token.accept(0, stack.pos + 1)
  15866. }
  15867. }
  15868. putAction(action, token, end, index) {
  15869. for (let i = 0; i < index; i += 3) if (this.actions[i] == action) return index
  15870. this.actions[index++] = action
  15871. this.actions[index++] = token
  15872. this.actions[index++] = end
  15873. return index
  15874. }
  15875. addActions(stack, token, end, index) {
  15876. let { state } = stack,
  15877. { parser } = stack.p,
  15878. { data } = parser
  15879. for (let set = 0; set < 2; set++) {
  15880. for (let i = parser.stateSlot(state, set ? 2 : 1); ; i += 3) {
  15881. if (data[i] == 65535) {
  15882. if (data[i + 1] == 1) {
  15883. i = pair(data, i + 2)
  15884. } else {
  15885. if (index == 0 && data[i + 1] == 2) index = this.putAction(pair(data, i + 1), token, end, index)
  15886. break
  15887. }
  15888. }
  15889. if (data[i] == token) index = this.putAction(pair(data, i + 1), token, end, index)
  15890. }
  15891. }
  15892. return index
  15893. }
  15894. }
  15895. var Rec
  15896. ;(function(Rec) {
  15897. Rec[(Rec['Distance'] = 5)] = 'Distance'
  15898. Rec[(Rec['MaxRemainingPerStep'] = 3)] = 'MaxRemainingPerStep'
  15899. Rec[(Rec['MinBufferLengthPrune'] = 200)] = 'MinBufferLengthPrune'
  15900. Rec[(Rec['ForceReduceLimit'] = 10)] = 'ForceReduceLimit'
  15901. })(Rec || (Rec = {}))
  15902. class Parse {
  15903. constructor(parser, input, startPos, context) {
  15904. this.parser = parser
  15905. this.input = input
  15906. this.startPos = startPos
  15907. this.context = context
  15908. this.pos = 0
  15909. this.recovering = 0
  15910. this.nextStackID = 0x2654
  15911. this.nested = null
  15912. this.nestEnd = 0
  15913. this.nestWrap = null
  15914. this.reused = []
  15915. this.tokens = new TokenCache(parser)
  15916. this.topTerm = parser.top[1]
  15917. this.stacks = [Stack.start(this, parser.top[0], this.startPos)]
  15918. let fragments = context === null || context === void 0 ? void 0 : context.fragments
  15919. this.fragments = fragments && fragments.length ? new FragmentCursor$1(fragments) : null
  15920. }
  15921. advance() {
  15922. if (this.nested) {
  15923. let result = this.nested.advance()
  15924. this.pos = this.nested.pos
  15925. if (result) {
  15926. this.finishNested(this.stacks[0], result)
  15927. this.nested = null
  15928. }
  15929. return null
  15930. }
  15931. let stacks = this.stacks,
  15932. pos = this.pos
  15933. let newStacks = (this.stacks = [])
  15934. let stopped, stoppedTokens
  15935. let maybeNest
  15936. for (let i = 0; i < stacks.length; i++) {
  15937. let stack = stacks[i],
  15938. nest
  15939. for (;;) {
  15940. if (stack.pos > pos) {
  15941. newStacks.push(stack)
  15942. } else if ((nest = this.checkNest(stack))) {
  15943. if (!maybeNest || maybeNest.stack.score < stack.score) maybeNest = nest
  15944. } else if (this.advanceStack(stack, newStacks, stacks)) {
  15945. continue
  15946. } else {
  15947. if (!stopped) {
  15948. stopped = []
  15949. stoppedTokens = []
  15950. }
  15951. stopped.push(stack)
  15952. let tok = this.tokens.mainToken
  15953. stoppedTokens.push(tok.value, tok.end)
  15954. }
  15955. break
  15956. }
  15957. }
  15958. if (maybeNest) {
  15959. this.startNested(maybeNest)
  15960. return null
  15961. }
  15962. if (!newStacks.length) {
  15963. let finished = stopped && findFinished(stopped)
  15964. if (finished) return this.stackToTree(finished)
  15965. if (this.parser.strict) {
  15966. if (verbose && stopped) console.log('Stuck with token ' + this.parser.getName(this.tokens.mainToken.value))
  15967. throw new SyntaxError('No parse at ' + pos)
  15968. }
  15969. if (!this.recovering) this.recovering = 5
  15970. }
  15971. if (this.recovering && stopped) {
  15972. let finished = this.runRecovery(stopped, stoppedTokens, newStacks)
  15973. if (finished) return this.stackToTree(finished.forceAll())
  15974. }
  15975. if (this.recovering) {
  15976. let maxRemaining = this.recovering == 1 ? 1 : this.recovering * 3
  15977. if (newStacks.length > maxRemaining) {
  15978. newStacks.sort((a, b) => b.score - a.score)
  15979. while (newStacks.length > maxRemaining) newStacks.pop()
  15980. }
  15981. if (newStacks.some(s => s.reducePos > pos)) this.recovering--
  15982. } else if (newStacks.length > 1) {
  15983. outer: for (let i = 0; i < newStacks.length - 1; i++) {
  15984. let stack = newStacks[i]
  15985. for (let j = i + 1; j < newStacks.length; j++) {
  15986. let other = newStacks[j]
  15987. if (stack.sameState(other) || (stack.buffer.length > 200 && other.buffer.length > 200)) {
  15988. if ((stack.score - other.score || stack.buffer.length - other.buffer.length) > 0) {
  15989. newStacks.splice(j--, 1)
  15990. } else {
  15991. newStacks.splice(i--, 1)
  15992. continue outer
  15993. }
  15994. }
  15995. }
  15996. }
  15997. }
  15998. this.pos = newStacks[0].pos
  15999. for (let i = 1; i < newStacks.length; i++) if (newStacks[i].pos < this.pos) this.pos = newStacks[i].pos
  16000. return null
  16001. }
  16002. advanceStack(stack, stacks, split) {
  16003. let start = stack.pos,
  16004. { input, parser } = this
  16005. let base = verbose ? this.stackID(stack) + ' -> ' : ''
  16006. if (this.fragments) {
  16007. let strictCx = stack.curContext && stack.curContext.tracker.strict,
  16008. cxHash = strictCx ? stack.curContext.hash : 0
  16009. for (let cached = this.fragments.nodeAt(start); cached; ) {
  16010. let match = this.parser.nodeSet.types[cached.type.id] == cached.type ? parser.getGoto(stack.state, cached.type.id) : -1
  16011. if (match > -1 && cached.length && (!strictCx || (cached.contextHash || 0) == cxHash)) {
  16012. stack.useNode(cached, match)
  16013. if (verbose) console.log(base + this.stackID(stack) + ` (via reuse of ${parser.getName(cached.type.id)})`)
  16014. return true
  16015. }
  16016. if (!(cached instanceof Tree) || cached.children.length == 0 || cached.positions[0] > 0) break
  16017. let inner = cached.children[0]
  16018. if (inner instanceof Tree) cached = inner
  16019. else break
  16020. }
  16021. }
  16022. let defaultReduce = parser.stateSlot(stack.state, 4)
  16023. if (defaultReduce > 0) {
  16024. stack.reduce(defaultReduce)
  16025. if (verbose) console.log(base + this.stackID(stack) + ` (via always-reduce ${parser.getName(defaultReduce & 65535)})`)
  16026. return true
  16027. }
  16028. let actions = this.tokens.getActions(stack, input)
  16029. for (let i = 0; i < actions.length; ) {
  16030. let action = actions[i++],
  16031. term = actions[i++],
  16032. end = actions[i++]
  16033. let last = i == actions.length || !split
  16034. let localStack = last ? stack : stack.split()
  16035. localStack.apply(action, term, end)
  16036. if (verbose)
  16037. console.log(
  16038. base +
  16039. this.stackID(localStack) +
  16040. ` (via ${(action & 65536) == 0 ? 'shift' : `reduce of ${parser.getName(action & 65535)}`} for ${parser.getName(term)} @ ${start}${localStack == stack ? '' : ', split'})`
  16041. )
  16042. if (last) return true
  16043. else if (localStack.pos > start) stacks.push(localStack)
  16044. else split.push(localStack)
  16045. }
  16046. return false
  16047. }
  16048. advanceFully(stack, newStacks) {
  16049. let pos = stack.pos
  16050. for (;;) {
  16051. let nest = this.checkNest(stack)
  16052. if (nest) return nest
  16053. if (!this.advanceStack(stack, null, null)) return false
  16054. if (stack.pos > pos) {
  16055. pushStackDedup(stack, newStacks)
  16056. return true
  16057. }
  16058. }
  16059. }
  16060. runRecovery(stacks, tokens, newStacks) {
  16061. let finished = null,
  16062. restarted = false
  16063. let maybeNest
  16064. for (let i = 0; i < stacks.length; i++) {
  16065. let stack = stacks[i],
  16066. token = tokens[i << 1],
  16067. tokenEnd = tokens[(i << 1) + 1]
  16068. let base = verbose ? this.stackID(stack) + ' -> ' : ''
  16069. if (stack.deadEnd) {
  16070. if (restarted) continue
  16071. restarted = true
  16072. stack.restart()
  16073. if (verbose) console.log(base + this.stackID(stack) + ' (restarted)')
  16074. let done = this.advanceFully(stack, newStacks)
  16075. if (done) {
  16076. if (done !== true) maybeNest = done
  16077. continue
  16078. }
  16079. }
  16080. let force = stack.split(),
  16081. forceBase = base
  16082. for (let j = 0; force.forceReduce() && j < 10; j++) {
  16083. if (verbose) console.log(forceBase + this.stackID(force) + ' (via force-reduce)')
  16084. let done = this.advanceFully(force, newStacks)
  16085. if (done) {
  16086. if (done !== true) maybeNest = done
  16087. break
  16088. }
  16089. if (verbose) forceBase = this.stackID(force) + ' -> '
  16090. }
  16091. for (let _i190 = 0, _stack$recoverByInser = stack.recoverByInsert(token), _length190 = _stack$recoverByInser.length; _i190 < _length190; _i190++) {
  16092. let insert = _stack$recoverByInser[_i190]
  16093. if (verbose) console.log(base + this.stackID(insert) + ' (via recover-insert)')
  16094. this.advanceFully(insert, newStacks)
  16095. }
  16096. if (this.input.length > stack.pos) {
  16097. if (tokenEnd == stack.pos) {
  16098. tokenEnd++
  16099. token = 0
  16100. }
  16101. stack.recoverByDelete(token, tokenEnd)
  16102. if (verbose) console.log(base + this.stackID(stack) + ` (via recover-delete ${this.parser.getName(token)})`)
  16103. pushStackDedup(stack, newStacks)
  16104. } else if (!finished || finished.score < stack.score) {
  16105. finished = stack
  16106. }
  16107. }
  16108. if (finished) return finished
  16109. if (maybeNest)
  16110. for (let _i191 = 0, _this$stacks = this.stacks, _length191 = _this$stacks.length; _i191 < _length191; _i191++) {
  16111. let s = _this$stacks[_i191]
  16112. if (s.score > maybeNest.stack.score) {
  16113. maybeNest = undefined
  16114. break
  16115. }
  16116. }
  16117. if (maybeNest) this.startNested(maybeNest)
  16118. return null
  16119. }
  16120. forceFinish() {
  16121. let stack = this.stacks[0].split()
  16122. if (this.nested) this.finishNested(stack, this.nested.forceFinish())
  16123. return this.stackToTree(stack.forceAll())
  16124. }
  16125. stackToTree(stack, pos = stack.pos) {
  16126. if (this.parser.context) stack.emitContext()
  16127. return Tree.build({
  16128. buffer: StackBufferCursor.create(stack),
  16129. nodeSet: this.parser.nodeSet,
  16130. topID: this.topTerm,
  16131. maxBufferLength: this.parser.bufferLength,
  16132. reused: this.reused,
  16133. start: this.startPos,
  16134. length: pos - this.startPos,
  16135. minRepeatType: this.parser.minRepeatTerm
  16136. })
  16137. }
  16138. checkNest(stack) {
  16139. let info = this.parser.findNested(stack.state)
  16140. if (!info) return null
  16141. let spec = info.value
  16142. if (typeof spec == 'function') spec = spec(this.input, stack)
  16143. return spec ? { stack, info, spec } : null
  16144. }
  16145. startNested(nest) {
  16146. let { stack, info, spec } = nest
  16147. this.stacks = [stack]
  16148. this.nestEnd = this.scanForNestEnd(stack, info.end, spec.filterEnd)
  16149. this.nestWrap = typeof spec.wrapType == 'number' ? this.parser.nodeSet.types[spec.wrapType] : spec.wrapType || null
  16150. if (spec.startParse) {
  16151. this.nested = spec.startParse(this.input.clip(this.nestEnd), stack.pos, this.context)
  16152. } else {
  16153. this.finishNested(stack)
  16154. }
  16155. }
  16156. scanForNestEnd(stack, endToken, filter) {
  16157. for (let pos = stack.pos; pos < this.input.length; pos++) {
  16158. dummyToken.start = pos
  16159. dummyToken.value = -1
  16160. endToken.token(this.input, dummyToken, stack)
  16161. if (dummyToken.value > -1 && (!filter || filter(this.input.read(pos, dummyToken.end)))) return pos
  16162. }
  16163. return this.input.length
  16164. }
  16165. finishNested(stack, tree) {
  16166. if (this.nestWrap) tree = new Tree(this.nestWrap, tree ? [tree] : [], tree ? [0] : [], this.nestEnd - stack.pos)
  16167. else if (!tree) tree = new Tree(NodeType.none, [], [], this.nestEnd - stack.pos)
  16168. let info = this.parser.findNested(stack.state)
  16169. stack.useNode(tree, this.parser.getGoto(stack.state, info.placeholder, true))
  16170. if (verbose) console.log(this.stackID(stack) + ` (via unnest)`)
  16171. }
  16172. stackID(stack) {
  16173. let id = (stackIDs || (stackIDs = new WeakMap())).get(stack)
  16174. if (!id) stackIDs.set(stack, (id = String.fromCodePoint(this.nextStackID++)))
  16175. return id + stack
  16176. }
  16177. }
  16178. function pushStackDedup(stack, newStacks) {
  16179. for (let i = 0; i < newStacks.length; i++) {
  16180. let other = newStacks[i]
  16181. if (other.pos == stack.pos && other.sameState(stack)) {
  16182. if (newStacks[i].score < stack.score) newStacks[i] = stack
  16183. return
  16184. }
  16185. }
  16186. newStacks.push(stack)
  16187. }
  16188. class Dialect {
  16189. constructor(source, flags, disabled) {
  16190. this.source = source
  16191. this.flags = flags
  16192. this.disabled = disabled
  16193. }
  16194. allows(term) {
  16195. return !this.disabled || this.disabled[term] == 0
  16196. }
  16197. }
  16198. const id = x => x
  16199. class ContextTracker {
  16200. constructor(spec) {
  16201. this.start = spec.start
  16202. this.shift = spec.shift || id
  16203. this.reduce = spec.reduce || id
  16204. this.reuse = spec.reuse || id
  16205. this.hash = spec.hash
  16206. this.strict = spec.strict !== false
  16207. }
  16208. }
  16209. class Parser {
  16210. constructor(spec) {
  16211. this.bufferLength = DefaultBufferLength
  16212. this.strict = false
  16213. this.cachedDialect = null
  16214. if (spec.version != 13) throw new RangeError(`Parser version (${spec.version}) doesn't match runtime version (${13})`)
  16215. let tokenArray = decodeArray(spec.tokenData)
  16216. let nodeNames = spec.nodeNames.split(' ')
  16217. this.minRepeatTerm = nodeNames.length
  16218. this.context = spec.context
  16219. for (let i = 0; i < spec.repeatNodeCount; i++) nodeNames.push('')
  16220. let nodeProps = []
  16221. for (let i = 0; i < nodeNames.length; i++) nodeProps.push([])
  16222. function setProp(nodeID, prop, value) {
  16223. nodeProps[nodeID].push([prop, prop.deserialize(String(value))])
  16224. }
  16225. if (spec.nodeProps)
  16226. for (let _i192 = 0, _spec$nodeProps = spec.nodeProps, _length192 = _spec$nodeProps.length; _i192 < _length192; _i192++) {
  16227. let propSpec = _spec$nodeProps[_i192]
  16228. let prop = propSpec[0]
  16229. for (let i = 1; i < propSpec.length; ) {
  16230. let next = propSpec[i++]
  16231. if (next >= 0) {
  16232. setProp(next, prop, propSpec[i++])
  16233. } else {
  16234. let value = propSpec[i + -next]
  16235. for (let j = -next; j > 0; j--) setProp(propSpec[i++], prop, value)
  16236. i++
  16237. }
  16238. }
  16239. }
  16240. this.specialized = new Uint16Array(spec.specialized ? spec.specialized.length : 0)
  16241. this.specializers = []
  16242. if (spec.specialized)
  16243. for (let i = 0; i < spec.specialized.length; i++) {
  16244. this.specialized[i] = spec.specialized[i].term
  16245. this.specializers[i] = spec.specialized[i].get
  16246. }
  16247. this.states = decodeArray(spec.states, Uint32Array)
  16248. this.data = decodeArray(spec.stateData)
  16249. this.goto = decodeArray(spec.goto)
  16250. let topTerms = Object.keys(spec.topRules).map(r => spec.topRules[r][1])
  16251. this.nodeSet = new NodeSet(
  16252. nodeNames.map((name, i) =>
  16253. NodeType.define({
  16254. name: i >= this.minRepeatTerm ? undefined : name,
  16255. id: i,
  16256. props: nodeProps[i],
  16257. top: topTerms.indexOf(i) > -1,
  16258. error: i == 0,
  16259. skipped: spec.skippedNodes && spec.skippedNodes.indexOf(i) > -1
  16260. })
  16261. )
  16262. )
  16263. this.maxTerm = spec.maxTerm
  16264. this.tokenizers = spec.tokenizers.map(value => (typeof value == 'number' ? new TokenGroup(tokenArray, value) : value))
  16265. this.topRules = spec.topRules
  16266. this.nested = (spec.nested || []).map(([name, value, endToken, placeholder]) => {
  16267. return { name, value, end: new TokenGroup(decodeArray(endToken), 0), placeholder }
  16268. })
  16269. this.dialects = spec.dialects || {}
  16270. this.dynamicPrecedences = spec.dynamicPrecedences || null
  16271. this.tokenPrecTable = spec.tokenPrec
  16272. this.termNames = spec.termNames || null
  16273. this.maxNode = this.nodeSet.types.length - 1
  16274. this.dialect = this.parseDialect()
  16275. this.top = this.topRules[Object.keys(this.topRules)[0]]
  16276. }
  16277. parse(input, startPos = 0, context = {}) {
  16278. if (typeof input == 'string') input = stringInput(input)
  16279. let cx = new Parse(this, input, startPos, context)
  16280. for (;;) {
  16281. let done = cx.advance()
  16282. if (done) return done
  16283. }
  16284. }
  16285. startParse(input, startPos = 0, context = {}) {
  16286. if (typeof input == 'string') input = stringInput(input)
  16287. return new Parse(this, input, startPos, context)
  16288. }
  16289. getGoto(state, term, loose = false) {
  16290. let table = this.goto
  16291. if (term >= table[0]) return -1
  16292. for (let pos = table[term + 1]; ; ) {
  16293. let groupTag = table[pos++],
  16294. last = groupTag & 1
  16295. let target = table[pos++]
  16296. if (last && loose) return target
  16297. for (let end = pos + (groupTag >> 1); pos < end; pos++) if (table[pos] == state) return target
  16298. if (last) return -1
  16299. }
  16300. }
  16301. hasAction(state, terminal) {
  16302. let data = this.data
  16303. for (let set = 0; set < 2; set++) {
  16304. for (let i = this.stateSlot(state, set ? 2 : 1), next; ; i += 3) {
  16305. if ((next = data[i]) == 65535) {
  16306. if (data[i + 1] == 1) next = data[(i = pair(data, i + 2))]
  16307. else if (data[i + 1] == 2) return pair(data, i + 2)
  16308. else break
  16309. }
  16310. if (next == terminal || next == 0) return pair(data, i + 1)
  16311. }
  16312. }
  16313. return 0
  16314. }
  16315. stateSlot(state, slot) {
  16316. return this.states[state * 6 + slot]
  16317. }
  16318. stateFlag(state, flag) {
  16319. return (this.stateSlot(state, 0) & flag) > 0
  16320. }
  16321. findNested(state) {
  16322. let flags = this.stateSlot(state, 0)
  16323. return flags & 4 ? this.nested[flags >> 10] : null
  16324. }
  16325. validAction(state, action) {
  16326. if (action == this.stateSlot(state, 4)) return true
  16327. for (let i = this.stateSlot(state, 1); ; i += 3) {
  16328. if (this.data[i] == 65535) {
  16329. if (this.data[i + 1] == 1) i = pair(this.data, i + 2)
  16330. else return false
  16331. }
  16332. if (action == pair(this.data, i + 1)) return true
  16333. }
  16334. }
  16335. nextStates(state) {
  16336. let result = []
  16337. for (let i = this.stateSlot(state, 1); ; i += 3) {
  16338. if (this.data[i] == 65535) {
  16339. if (this.data[i + 1] == 1) i = pair(this.data, i + 2)
  16340. else break
  16341. }
  16342. if ((this.data[i + 2] & (65536 >> 16)) == 0) {
  16343. let value = this.data[i + 1]
  16344. if (!result.some((v, i) => i & 1 && v == value)) result.push(this.data[i], value)
  16345. }
  16346. }
  16347. return result
  16348. }
  16349. overrides(token, prev) {
  16350. let iPrev = findOffset(this.data, this.tokenPrecTable, prev)
  16351. return iPrev < 0 || findOffset(this.data, this.tokenPrecTable, token) < iPrev
  16352. }
  16353. configure(config) {
  16354. let copy = Object.assign(Object.create(Parser.prototype), this)
  16355. if (config.props) copy.nodeSet = this.nodeSet.extend(...config.props)
  16356. if (config.top) {
  16357. let info = this.topRules[config.top]
  16358. if (!info) throw new RangeError(`Invalid top rule name ${config.top}`)
  16359. copy.top = info
  16360. }
  16361. if (config.tokenizers)
  16362. copy.tokenizers = this.tokenizers.map(t => {
  16363. let found = config.tokenizers.find(r => r.from == t)
  16364. return found ? found.to : t
  16365. })
  16366. if (config.dialect) copy.dialect = this.parseDialect(config.dialect)
  16367. if (config.nested)
  16368. copy.nested = this.nested.map(obj => {
  16369. if (!Object.prototype.hasOwnProperty.call(config.nested, obj.name)) return obj
  16370. return { name: obj.name, value: config.nested[obj.name], end: obj.end, placeholder: obj.placeholder }
  16371. })
  16372. if (config.strict != null) copy.strict = config.strict
  16373. if (config.bufferLength != null) copy.bufferLength = config.bufferLength
  16374. return copy
  16375. }
  16376. getName(term) {
  16377. return this.termNames ? this.termNames[term] : String((term <= this.maxNode && this.nodeSet.types[term].name) || term)
  16378. }
  16379. get eofTerm() {
  16380. return this.maxNode + 1
  16381. }
  16382. get hasNested() {
  16383. return this.nested.length > 0
  16384. }
  16385. get topNode() {
  16386. return this.nodeSet.types[this.top[1]]
  16387. }
  16388. dynamicPrecedence(term) {
  16389. let prec = this.dynamicPrecedences
  16390. return prec == null ? 0 : prec[term] || 0
  16391. }
  16392. parseDialect(dialect) {
  16393. if (this.cachedDialect && this.cachedDialect.source == dialect) return this.cachedDialect
  16394. let values = Object.keys(this.dialects),
  16395. flags = values.map(() => false)
  16396. if (dialect)
  16397. for (let _i193 = 0, _dialect$split = dialect.split(' '), _length193 = _dialect$split.length; _i193 < _length193; _i193++) {
  16398. let part = _dialect$split[_i193]
  16399. let id = values.indexOf(part)
  16400. if (id >= 0) flags[id] = true
  16401. }
  16402. let disabled = null
  16403. for (let i = 0; i < values.length; i++)
  16404. if (!flags[i]) {
  16405. for (let j = this.dialects[values[i]], id; (id = this.data[j++]) != 65535; ) (disabled || (disabled = new Uint8Array(this.maxTerm + 1)))[id] = 1
  16406. }
  16407. return (this.cachedDialect = new Dialect(dialect, flags, disabled))
  16408. }
  16409. static deserialize(spec) {
  16410. return new Parser(spec)
  16411. }
  16412. }
  16413. function pair(data, off) {
  16414. return data[off] | (data[off + 1] << 16)
  16415. }
  16416. function findOffset(data, start, term) {
  16417. for (let i = start, next; (next = data[i]) != 65535; i++) if (next == term) return i - start
  16418. return -1
  16419. }
  16420. function findFinished(stacks) {
  16421. let best = null
  16422. for (let _i194 = 0, _length194 = stacks.length; _i194 < _length194; _i194++) {
  16423. let stack = stacks[_i194]
  16424. if (stack.pos == stack.p.input.length && stack.p.parser.stateFlag(stack.state, 2) && (!best || best.score < stack.score)) best = stack
  16425. }
  16426. return best
  16427. }
  16428. var _m35 = Object.freeze({
  16429. __proto__: null,
  16430. ContextTracker: ContextTracker,
  16431. ExternalTokenizer: ExternalTokenizer,
  16432. Parser: Parser,
  16433. Stack: Stack,
  16434. Token: Token,
  16435. NodeProp: NodeProp,
  16436. NodeSet: NodeSet,
  16437. NodeType: NodeType,
  16438. Tree: Tree,
  16439. TreeCursor: TreeCursor
  16440. })
  16441. const noSemi = 269,
  16442. incdec = 1,
  16443. incdecPrefix = 2,
  16444. templateContent = 270,
  16445. templateDollarBrace = 271,
  16446. templateEnd = 272,
  16447. insertSemi = 273,
  16448. TSExtends = 3,
  16449. Dialect_ts = 1
  16450. const newline$2 = [10, 13, 8232, 8233]
  16451. const space$3 = [9, 11, 12, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200, 8201, 8202, 8239, 8287, 12288]
  16452. const braceR = 125,
  16453. braceL = 123,
  16454. semicolon = 59,
  16455. slash$1 = 47,
  16456. star = 42,
  16457. plus = 43,
  16458. minus = 45,
  16459. dollar = 36,
  16460. backtick = 96,
  16461. backslash = 92
  16462. function newlineBefore(input, pos) {
  16463. for (let i = pos - 1; i >= 0; i--) {
  16464. let prev = input.get(i)
  16465. if (newline$2.indexOf(prev) > -1) return true
  16466. if (space$3.indexOf(prev) < 0) break
  16467. }
  16468. return false
  16469. }
  16470. const insertSemicolon = new ExternalTokenizer(
  16471. (input, token, stack) => {
  16472. let pos = token.start,
  16473. next = input.get(pos)
  16474. if ((next == braceR || next == -1 || newlineBefore(input, pos)) && stack.canShift(insertSemi)) token.accept(insertSemi, token.start)
  16475. },
  16476. { contextual: true, fallback: true }
  16477. )
  16478. const noSemicolon = new ExternalTokenizer(
  16479. (input, token, stack) => {
  16480. let pos = token.start,
  16481. next = input.get(pos++)
  16482. if (space$3.indexOf(next) > -1 || newline$2.indexOf(next) > -1) return
  16483. if (next == slash$1) {
  16484. let after = input.get(pos++)
  16485. if (after == slash$1 || after == star) return
  16486. }
  16487. if (next != braceR && next != semicolon && next != -1 && !newlineBefore(input, token.start) && stack.canShift(noSemi)) token.accept(noSemi, token.start)
  16488. },
  16489. { contextual: true }
  16490. )
  16491. const incdecToken = new ExternalTokenizer(
  16492. (input, token, stack) => {
  16493. let pos = token.start,
  16494. next = input.get(pos)
  16495. if ((next == plus || next == minus) && next == input.get(pos + 1)) {
  16496. let mayPostfix = !newlineBefore(input, token.start) && stack.canShift(incdec)
  16497. token.accept(mayPostfix ? incdec : incdecPrefix, pos + 2)
  16498. }
  16499. },
  16500. { contextual: true }
  16501. )
  16502. const template = new ExternalTokenizer((input, token) => {
  16503. let pos = token.start,
  16504. afterDollar = false
  16505. for (;;) {
  16506. let next = input.get(pos++)
  16507. if (next < 0) {
  16508. if (pos - 1 > token.start) token.accept(templateContent, pos - 1)
  16509. break
  16510. } else if (next == backtick) {
  16511. if (pos == token.start + 1) token.accept(templateEnd, pos)
  16512. else token.accept(templateContent, pos - 1)
  16513. break
  16514. } else if (next == braceL && afterDollar) {
  16515. if (pos == token.start + 2) token.accept(templateDollarBrace, pos)
  16516. else token.accept(templateContent, pos - 2)
  16517. break
  16518. } else if (next == 10 && pos > token.start + 1) {
  16519. token.accept(templateContent, pos)
  16520. break
  16521. } else if (next == backslash && pos != input.length) {
  16522. pos++
  16523. }
  16524. afterDollar = next == dollar
  16525. }
  16526. })
  16527. function tsExtends(value, stack) {
  16528. return value == 'extends' && stack.dialectEnabled(Dialect_ts) ? TSExtends : -1
  16529. }
  16530. const spec_identifier$5 = {
  16531. __proto__: null,
  16532. export: 16,
  16533. as: 21,
  16534. from: 25,
  16535. default: 30,
  16536. async: 35,
  16537. function: 36,
  16538. this: 46,
  16539. true: 54,
  16540. false: 54,
  16541. void: 58,
  16542. typeof: 62,
  16543. null: 76,
  16544. super: 78,
  16545. new: 112,
  16546. await: 129,
  16547. yield: 131,
  16548. delete: 132,
  16549. class: 142,
  16550. extends: 144,
  16551. public: 181,
  16552. private: 181,
  16553. protected: 181,
  16554. readonly: 183,
  16555. in: 202,
  16556. instanceof: 204,
  16557. const: 206,
  16558. import: 238,
  16559. keyof: 289,
  16560. unique: 293,
  16561. infer: 299,
  16562. is: 333,
  16563. abstract: 353,
  16564. implements: 355,
  16565. type: 357,
  16566. let: 360,
  16567. var: 362,
  16568. interface: 369,
  16569. enum: 373,
  16570. namespace: 379,
  16571. module: 381,
  16572. declare: 385,
  16573. global: 389,
  16574. for: 410,
  16575. of: 419,
  16576. while: 422,
  16577. with: 426,
  16578. do: 430,
  16579. if: 434,
  16580. else: 436,
  16581. switch: 440,
  16582. case: 446,
  16583. try: 452,
  16584. catch: 454,
  16585. finally: 456,
  16586. return: 460,
  16587. throw: 464,
  16588. break: 468,
  16589. continue: 472,
  16590. debugger: 476
  16591. }
  16592. const spec_word = { __proto__: null, async: 99, get: 101, set: 103, public: 151, private: 151, protected: 151, static: 153, abstract: 155, readonly: 159, new: 337 }
  16593. const spec_LessThan = { __proto__: null, '<': 119 }
  16594. const parser$b = Parser.deserialize({
  16595. version: 13,
  16596. states:
  16597. "$,lO]QYOOO&zQ!LdO'#CgO'ROSO'#DRO)ZQYO'#DWO)kQYO'#DcO)rQYO'#DmO-iQYO'#DsOOQO'#ET'#ETO-|QWO'#ESO.RQWO'#ESO0QQ!LdO'#IgO2hQ!LdO'#IhO3UQWO'#EqO3ZQpO'#FWOOQ!LS'#Ey'#EyO3cO!bO'#EyO3qQWO'#F_O4{QWO'#F^OOQ!LS'#Ih'#IhOOQ!LQ'#Ig'#IgOOQQ'#JR'#JRO5QQWO'#HeO5VQ!LYO'#HfOOQQ'#I['#I[OOQQ'#Hg'#HgQ]QYOOO)rQYO'#DeO5_QWO'#GRO5dQ#tO'#ClO5rQWO'#ERO5}Q#tO'#ExO6iQWO'#GRO6nQWO'#GVO6yQWO'#GVO7XQWO'#GYO7XQWO'#GZO7XQWO'#G]O5_QWO'#G`O7xQWO'#GcO9WQWO'#CcO9hQWO'#GpO9pQWO'#GvO9pQWO'#GxO]QYO'#GzO9pQWO'#G|O9pQWO'#HPO9uQWO'#HVO9zQ!LZO'#HZO)rQYO'#H]O:VQ!LZO'#H_O:bQ!LZO'#HaO5VQ!LYO'#HcO)rQYO'#IjOOOS'#Hh'#HhO:mOSO,59mOOQ!LS,59m,59mO=OQbO'#CgO=YQYO'#HiO=gQWO'#IlO?fQbO'#IlO'^QYO'#IlO?mQWO,59rO@TQ&jO'#D]O@|QWO'#ETOAZQWO'#IvOAfQWO'#IuOAnQWO,5:qOAsQWO'#ItOAzQWO'#DtO5dQ#tO'#EROBYQWO'#EROBeQ`O'#ExOOQ!LS,59},59}OBmQYO,59}ODkQ!LdO,5:XOEXQWO,5:_OErQ!LYO'#IsO6nQWO'#IrOEyQWO'#IrOFRQWO,5:pOFWQWO'#IrOFfQYO,5:nOHcQWO'#EPOIjQWO,5:nOJvQWO'#DgOJ}QYO'#DlOKXQ&jO,5:wO)rQYO,5:wOOQQ'#Ei'#EiOOQQ'#Ek'#EkO)rQYO,5:xO)rQYO,5:xO)rQYO,5:xO)rQYO,5:xO)rQYO,5:xO)rQYO,5:xO)rQYO,5:xO)rQYO,5:xO)rQYO,5:xO)rQYO,5:xO)rQYO,5:xOOQQ'#Eo'#EoOK^QYO,5;YOOQ!LS,5;_,5;_OOQ!LS,5;`,5;`OMZQWO,5;`OOQ!LS,5;a,5;aO)rQYO'#HsOM`Q!LYO,5;zOMzQWO,5:xO)rQYO,5;]ONdQpO'#IzONRQpO'#IzONkQpO'#IzON|QpO,5;hOOQO,5;r,5;rO! [QYO'#FYOOOO'#Hr'#HrO3cO!bO,5;eO! cQpO'#F[OOQ!LS,5;e,5;eO!!PQ,UO'#CqOOQ!LS'#Ct'#CtO!!dQWO'#CtO!!zQ#tO,5;wO!#RQWO,5;yO!$[QWO'#FiO!$iQWO'#FjO!$nQWO'#FnO!%pQ&jO'#FrO!&cQ,UO'#IeOOQ!LS'#Ie'#IeO!&mQWO'#IdO!&{QWO'#IcOOQ!LS'#Cr'#CrOOQ!LS'#Cx'#CxO!'TQWO'#CzOIoQWO'#FaOIoQWO'#FcO!'YQWO'#FeOIeQWO'#FfO!'_QWO'#FlOIoQWO'#FqO!'dQWO'#EUO!'{QWO,5;xO]QYO,5>POOQQ'#I_'#I_OOQQ,5>Q,5>QOOQQ-E;e-E;eO!)wQ!LdO,5:POOQ!LQ'#Co'#CoO!*hQ#tO,5<mOOQO'#Ce'#CeO!*yQWO'#CpO!+RQ!LYO'#I`O4{QWO'#I`O9uQWO,59WO!+aQpO,59WO!+iQ#tO,59WO5dQ#tO,59WO!+tQWO,5:nO!+|QWO'#GoO!,UQWO'#JVO)rQYO,5;bOKXQ&jO,5;dO!,^QWO,5=YO!,cQWO,5=YO!,hQWO,5=YO5VQ!LYO,5=YO5_QWO,5<mO!,vQWO'#EVO!-XQ&jO'#EWOOQ!LQ'#It'#ItO!-jQ!LYO'#JSO5VQ!LYO,5<qO7XQWO,5<wOOQO'#Cq'#CqO!-uQpO,5<tO!-}Q#tO,5<uO!.YQWO,5<wO!._Q`O,5<zO9uQWO'#GeO5_QWO'#GgO!.gQWO'#GgO5dQ#tO'#GjO!.lQWO'#GjOOQQ,5<},5<}O!.qQWO'#GkO!.yQWO'#ClO!/OQWO,58}O!/YQWO,58}O!1XQYO,58}OOQQ,58},58}O!1fQ!LYO,58}O)rQYO,58}O!1qQYO'#GrOOQQ'#Gs'#GsOOQQ'#Gt'#GtO]QYO,5=[O!2RQWO,5=[O)rQYO'#DsO]QYO,5=bO]QYO,5=dO!2WQWO,5=fO]QYO,5=hO!2]QWO,5=kO!2bQYO,5=qOOQQ,5=u,5=uO)rQYO,5=uO5VQ!LYO,5=wOOQQ,5=y,5=yO!6`QWO,5=yOOQQ,5={,5={O!6`QWO,5={OOQQ,5=},5=}O!6eQ`O,5?UOOOS-E;f-E;fOOQ!LS1G/X1G/XO!6jQbO,5>TO)rQYO,5>TOOQO-E;g-E;gO!6tQWO,5?WO!6|QbO,5?WO!7TQWO,5?aOOQ!LS1G/^1G/^O!7]QpO'#DPOOQO'#In'#InO)rQYO'#InO!7zQpO'#InO!8iQpO'#D^O!8zQ&jO'#D^O!;SQYO'#D^O!;ZQWO'#ImO!;cQWO,59wO!;hQWO'#EXO!;vQWO'#IwO!<OQWO,5:rO!<fQ&jO'#D^O)rQYO,5?bO!<pQWO'#HnO!7TQWO,5?aOOQ!LQ1G0]1G0]O!=vQ&jO'#DwOOQ!LS,5:`,5:`O)rQYO,5:`OHcQWO,5:`O!=}QWO,5:`O9uQWO,5:mO!+aQpO,5:mO!+iQ#tO,5:mO5dQ#tO,5:mOOQ!LS1G/i1G/iOOQ!LS1G/y1G/yOOQ!LQ'#EO'#EOO)rQYO,5?_O!>YQ!LYO,5?_O!>kQ!LYO,5?_O!>rQWO,5?^O!>zQWO'#HpO!>rQWO,5?^OOQ!LQ1G0[1G0[O6nQWO,5?^OOQ!LS1G0Y1G0YO!?fQ!LdO1G0YO!@VQ!LbO,5:kOOQ!LS'#Fh'#FhO!@sQ!LdO'#IeOFfQYO1G0YO!BrQ#tO'#IoO!B|QWO,5:RO!CRQbO'#IpO)rQYO'#IpO!C]QWO,5:WOOQ!LS'#DP'#DPOOQ!LS1G0c1G0cO!CbQWO1G0cO!EsQ!LdO1G0dO!EzQ!LdO1G0dO!H_Q!LdO1G0dO!HfQ!LdO1G0dO!JmQ!LdO1G0dO!KQQ!LdO1G0dO!MqQ!LdO1G0dO!MxQ!LdO1G0dO#!]Q!LdO1G0dO#!dQ!LdO1G0dO#$XQ!LdO1G0dO#'RQ7^O'#CgO#(|Q7^O1G0tO#*wQ7^O'#IhOOQ!LS1G0z1G0zO#+[Q!LdO,5>_OOQ!LQ-E;q-E;qO#+{Q!LdO1G0dOOQ!LS1G0d1G0dO#-}Q!LdO1G0wO#.nQpO,5;jO#.sQpO,5;kO#.xQpO'#FRO#/^QWO'#FQOOQO'#I{'#I{OOQO'#Hq'#HqO#/cQpO1G1SOOQ!LS1G1S1G1SOOQO1G1]1G1]O#/qQ7^O'#IgO#/{QWO,5;tOK^QYO,5;tOOOO-E;p-E;pOOQ!LS1G1P1G1POOQ!LS,5;v,5;vO#0QQpO,5;vOOQ!LS,59`,59`O)rQYO1G1cOKXQ&jO'#HuO#0VQWO,5<[OOQ!LS,5<X,5<XOOQO'#F|'#F|OIoQWO,5<gOOQO'#GO'#GOOIoQWO,5<iOIoQWO,5<kOOQO1G1e1G1eO#0bQ`O'#CoO#0uQ`O,5<TO#0|QWO'#JOO5_QWO'#JOO#1[QWO,5<VOIoQWO,5<UO#1aQ`O'#FhO#1nQ`O'#JPO#1xQWO'#JPOHcQWO'#JPO#1}QWO,5<YOOQ!LQ'#Db'#DbO#2SQWO'#FkO#2_QpO'#FsO!%kQ&jO'#FsO!%kQ&jO'#FuO#2pQWO'#FvO!'_QWO'#FyOOQO'#Hw'#HwO#2uQ&jO,5<^OOQ!LS,5<^,5<^O#2|Q&jO'#FsO#3[Q&jO'#FtO#3dQ&jO'#FtOOQ!LS,5<l,5<lOIoQWO,5?OOIoQWO,5?OO#3iQWO'#HxO#3tQWO,5>}OOQ!LS'#Cg'#CgO#4hQ#tO,59fOOQ!LS,59f,59fO#5ZQ#tO,5;{O#5|Q#tO,5;}O#6WQWO,5<POOQ!LS,5<Q,5<QO#6]QWO,5<WO#6bQ#tO,5<]OFfQYO1G1dO#6rQWO1G1dOOQQ1G3k1G3kOOQ!LS1G/k1G/kOMZQWO1G/kOOQQ1G2X1G2XOHcQWO1G2XO)rQYO1G2XOHcQWO1G2XO#6wQWO1G2XO#7VQWO,59[O#8]QWO'#EPOOQ!LQ,5>z,5>zO#8gQ!LYO,5>zOOQQ1G.r1G.rO9uQWO1G.rO!+aQpO1G.rO!+iQ#tO1G.rO#8uQWO1G0YO#8zQWO'#CgO#9VQWO'#JWO#9_QWO,5=ZO#9dQWO'#JWO#9iQWO'#IQO#9wQWO,5?qO#:PQbO1G0|OOQ!LS1G1O1G1OO5_QWO1G2tO#:WQWO1G2tO#:]QWO1G2tO#:bQWO1G2tOOQQ1G2t1G2tO#:gQ#tO1G2XO6nQWO'#IuO6nQWO'#EXO6nQWO'#HzO#:xQ!LYO,5?nOOQQ1G2]1G2]O!.YQWO1G2cOHcQWO1G2`O#;TQWO1G2`OOQQ1G2a1G2aOHcQWO1G2aO#;YQWO1G2aO#;bQ&jO'#G_OOQQ1G2c1G2cO!%kQ&jO'#H|O!._Q`O1G2fOOQQ1G2f1G2fOOQQ,5=P,5=PO#;jQ#tO,5=RO5_QWO,5=RO#2pQWO,5=UO4{QWO,5=UO!+aQpO,5=UO!+iQ#tO,5=UO5dQ#tO,5=UO#;{QWO'#JUO#<WQWO,5=VOOQQ1G.i1G.iO#<]Q!LYO1G.iO#<hQWO1G.iO!'TQWO1G.iO5VQ!LYO1G.iO#<mQbO,5?sO#<wQWO,5?sO#=SQYO,5=^O#=ZQWO,5=^O6nQWO,5?sOOQQ1G2v1G2vO]QYO1G2vOOQQ1G2|1G2|OOQQ1G3O1G3OO9pQWO1G3QO#=`QYO1G3SO#AWQYO'#HROOQQ1G3V1G3VO9uQWO1G3]O#AeQWO1G3]O5VQ!LYO1G3aOOQQ1G3c1G3cOOQ!LQ'#Fo'#FoO5VQ!LYO1G3eO5VQ!LYO1G3gOOOS1G4p1G4pO#AmQ`O,5;zO#AuQbO1G3oO#BPQWO1G4rO#BXQWO1G4{O#BaQWO,5?YOK^QYO,5:sO6nQWO,5:sO9uQWO,59xOK^QYO,59xO!+aQpO,59xO#BfQ7^O,59xOOQO,5:s,5:sO#BpQ&jO'#HjO#CWQWO,5?XOOQ!LS1G/c1G/cO#C`Q&jO'#HoO#CtQWO,5?cOOQ!LQ1G0^1G0^O!8zQ&jO,59xO#C|QbO1G4|OOQO,5>Y,5>YO6nQWO,5>YOOQO-E;l-E;lO#DWQ!LrO'#D|O!%kQ&jO'#DxOOQO'#Hm'#HmO#DrQ&jO,5:cOOQ!LS,5:c,5:cO#DyQ&jO'#DxO#EXQ&jO'#D|O#EmQ&jO'#D|O!%kQ&jO'#D|O#EwQWO1G/zO#E|Q`O1G/zOOQ!LS1G/z1G/zO)rQYO1G/zOHcQWO1G/zOOQ!LS1G0X1G0XO9uQWO1G0XO!+aQpO1G0XO!+iQ#tO1G0XO#FTQ!LdO1G4yO)rQYO1G4yO#FeQ!LYO1G4yO#FvQWO1G4xO6nQWO,5>[OOQO,5>[,5>[O#GOQWO,5>[OOQO-E;n-E;nO#FvQWO1G4xO#G^Q!LdO,59fO#I]Q!LdO,5;{O#K_Q!LdO,5;}O#MaQ!LdO,5<]OOQ!LS7+%t7+%tO$ iQ!LdO7+%tO$!YQWO'#HkO$!dQWO,5?ZOOQ!LS1G/m1G/mO$!lQYO'#HlO$!yQWO,5?[O$#RQbO,5?[OOQ!LS1G/r1G/rOOQ!LS7+%}7+%}O$#]Q7^O,5:XO)rQYO7+&`O$#gQ7^O,5:POOQO1G1U1G1UOOQO1G1V1G1VO$#tQMhO,5;mOK^QYO,5;lOOQO-E;o-E;oOOQ!LS7+&n7+&nOOQO7+&w7+&wOOOO1G1`1G1`O$$PQWO1G1`OOQ!LS1G1b1G1bO$$UQ!LdO7+&}OOQ!LS,5>a,5>aO$$uQWO,5>aOOQ!LS1G1v1G1vP$$zQWO'#HuPOQ!LS-E;s-E;sO$%kQ#tO1G2RO$&^Q#tO1G2TO$&hQ#tO1G2VOOQ!LS1G1o1G1oO$&oQWO'#HtO$&}QWO,5?jO$&}QWO,5?jO$'VQWO,5?jO$'bQWO,5?jOOQO1G1q1G1qO$'pQ#tO1G1pO$(QQWO'#HvO$(bQWO,5?kOHcQWO,5?kO$(jQ`O,5?kOOQ!LS1G1t1G1tO5VQ!LYO,5<_O5VQ!LYO,5<`O$(tQWO,5<`O#2kQWO,5<`O!+aQpO,5<_O$(yQWO,5<aO5VQ!LYO,5<bO$(tQWO,5<eOOQO-E;u-E;uOOQ!LS1G1x1G1xO!%kQ&jO,5<_O$)RQWO,5<`O!%kQ&jO,5<aO!%kQ&jO,5<`O$)^Q#tO1G4jO$)hQ#tO1G4jOOQO,5>d,5>dOOQO-E;v-E;vOKXQ&jO,59hO)rQYO,59hO$)uQWO1G1kOIoQWO1G1rO$)zQ!LdO7+'OOOQ!LS7+'O7+'OOFfQYO7+'OOOQ!LS7+%V7+%VO$*kQ`O'#JQO#EwQWO7+'sO$*uQWO7+'sO$*}Q`O7+'sOOQQ7+'s7+'sOHcQWO7+'sO)rQYO7+'sOHcQWO7+'sOOQO1G.v1G.vO$+XQ!LbO'#CgO$+iQ!LbO,5<cO$,WQWO,5<cOOQ!LQ1G4f1G4fOOQQ7+$^7+$^O9uQWO7+$^O!+aQpO7+$^OFfQYO7+%tO$,]QWO'#IPO$,hQWO,5?rOOQO1G2u1G2uO5_QWO,5?rOOQO,5>l,5>lOOQO-E<O-E<OOOQ!LS7+&h7+&hO$,pQWO7+(`O5VQ!LYO7+(`O5_QWO7+(`O$,uQWO7+(`O$,zQWO7+'sOOQ!LQ,5>f,5>fOOQ!LQ-E;x-E;xOOQQ7+'}7+'}O$-YQ!LbO7+'zOHcQWO7+'zO$-dQ`O7+'{OOQQ7+'{7+'{OHcQWO7+'{O$-kQWO'#JTO$-vQWO,5<yOOQO,5>h,5>hOOQO-E;z-E;zOOQQ7+(Q7+(QO$.mQ&jO'#GhOOQQ1G2m1G2mOHcQWO1G2mO)rQYO1G2mOHcQWO1G2mO$.tQWO1G2mO$/SQ#tO1G2mO5VQ!LYO1G2pO#2pQWO1G2pO4{QWO1G2pO!+aQpO1G2pO!+iQ#tO1G2pO$/eQWO'#IOO$/pQWO,5?pO$/xQ&jO,5?pOOQ!LQ1G2q1G2qOOQQ7+$T7+$TO$/}QWO7+$TO5VQ!LYO7+$TO$0SQWO7+$TO)rQYO1G5_O)rQYO1G5`O$0XQYO1G2xO$0`QWO1G2xO$0eQYO1G2xO$0lQ!LYO1G5_OOQQ7+(b7+(bO5VQ!LYO7+(lO]QYO7+(nOOQQ'#JZ'#JZOOQQ'#IR'#IRO$0vQYO,5=mOOQQ,5=m,5=mO)rQYO'#HSO$1TQWO'#HUOOQQ7+(w7+(wO$1YQYO7+(wO6nQWO7+(wOOQQ7+({7+({OOQQ7+)P7+)POOQQ7+)R7+)ROOQO1G4t1G4tO$5TQ7^O1G0_O$5_QWO1G0_OOQO1G/d1G/dO$5jQ7^O1G/dO9uQWO1G/dOK^QYO'#D^OOQO,5>U,5>UOOQO-E;h-E;hOOQO,5>Z,5>ZOOQO-E;m-E;mO!+aQpO1G/dOOQO1G3t1G3tO9uQWO,5:dOOQO,5:h,5:hO)rQYO,5:hO$5tQ!LYO,5:hO$6PQ!LYO,5:hO!+aQpO,5:dOOQO-E;k-E;kOOQ!LS1G/}1G/}O!%kQ&jO,5:dO$6_Q!LrO,5:hO$6yQ&jO,5:dO!%kQ&jO,5:hO$7XQ&jO,5:hO$7mQ!LYO,5:hOOQ!LS7+%f7+%fO#EwQWO7+%fO#E|Q`O7+%fOOQ!LS7+%s7+%sO9uQWO7+%sO!+aQpO7+%sO$8RQ!LdO7+*eO)rQYO7+*eOOQO1G3v1G3vO6nQWO1G3vO$8cQWO7+*dO$8kQ!LdO1G2RO$:mQ!LdO1G2TO$<oQ!LdO1G1pO$>wQ#tO,5>VOOQO-E;i-E;iO$?RQbO,5>WO)rQYO,5>WOOQO-E;j-E;jO$?]QWO1G4vO$?eQ7^O1G0YO$AlQ7^O1G0dO$AsQ7^O1G0dO$CtQ7^O1G0dO$C{Q7^O1G0dO$EpQ7^O1G0dO$FTQ7^O1G0dO$HbQ7^O1G0dO$HiQ7^O1G0dO$JjQ7^O1G0dO$JqQ7^O1G0dO$LfQ7^O1G0dO$LyQ!LdO<<IzO$MjQ7^O1G0dO% YQ7^O'#IeO%#VQ7^O1G0wOK^QYO'#FTOOQO'#I|'#I|OOQO1G1X1G1XO%#dQWO1G1WO%#iQ7^O,5>_OOOO7+&z7+&zOOQ!LS1G3{1G3{OIoQWO7+'qO%#sQWO,5>`O5_QWO,5>`OOQO-E;r-E;rO%$RQWO1G5UO%$RQWO1G5UO%$ZQWO1G5UO%$fQ`O,5>bO%$pQWO,5>bOHcQWO,5>bOOQO-E;t-E;tO%$uQ`O1G5VO%%PQWO1G5VOOQO1G1y1G1yOOQO1G1z1G1zO5VQ!LYO1G1zO$(tQWO1G1zO5VQ!LYO1G1yO%%XQWO1G1{OHcQWO1G1{OOQO1G1|1G1|O5VQ!LYO1G2PO!+aQpO1G1yO#2kQWO1G1zO%%^QWO1G1{O%%fQWO1G1zOIoQWO7+*UOOQ!LS1G/S1G/SO%%qQWO1G/SOOQ!LS7+'V7+'VO%%vQ#tO7+'^O%&WQ!LdO<<JjOOQ!LS<<Jj<<JjOHcQWO'#HyO%&wQWO,5?lOOQQ<<K_<<K_OHcQWO<<K_O#EwQWO<<K_O%'PQWO<<K_O%'XQ`O<<K_OHcQWO1G1}OOQQ<<Gx<<GxO9uQWO<<GxO%'cQ!LdO<<I`OOQ!LS<<I`<<I`OOQO,5>k,5>kO%(SQWO,5>kOOQO-E;}-E;}O%(XQWO1G5^O%(aQWO<<KzOOQQ<<Kz<<KzO%(fQWO<<KzO5VQ!LYO<<KzO)rQYO<<K_OHcQWO<<K_OOQQ<<Kf<<KfO$-YQ!LbO<<KfOOQQ<<Kg<<KgO$-dQ`O<<KgO%(kQ&jO'#H{O%(vQWO,5?oOK^QYO,5?oOOQQ1G2e1G2eO#DWQ!LrO'#D|O!%kQ&jO'#GiOOQO'#H}'#H}O%)OQ&jO,5=SOOQQ,5=S,5=SO#3[Q&jO'#D|O%)VQ&jO'#D|O%)kQ&jO'#D|O%)uQ&jO'#GiO%*TQWO7+(XO%*YQWO7+(XO%*bQ`O7+(XOOQQ7+(X7+(XOHcQWO7+(XO)rQYO7+(XOHcQWO7+(XO%*lQWO7+(XOOQQ7+([7+([O5VQ!LYO7+([O#2pQWO7+([O4{QWO7+([O!+aQpO7+([O%*zQWO,5>jOOQO-E;|-E;|OOQO'#Gl'#GlO%+VQWO1G5[O5VQ!LYO<<GoOOQQ<<Go<<GoO%+_QWO<<GoO%+dQWO7+*yO%+iQWO7+*zOOQQ7+(d7+(dO%+nQWO7+(dO%+sQYO7+(dO%+zQWO7+(dO)rQYO7+*yO)rQYO7+*zOOQQ<<LW<<LWOOQQ<<LY<<LYOOQQ-E<P-E<POOQQ1G3X1G3XO%,PQWO,5=nOOQQ,5=p,5=pO9uQWO<<LcO%,UQWO<<LcOK^QYO7+%yOOQO7+%O7+%OO%,ZQ7^O1G4|O9uQWO7+%OOOQO1G0O1G0OO%,eQ!LdO1G0SOOQO1G0S1G0SO)rQYO1G0SO%,oQ!LYO1G0SO9uQWO1G0OO!+aQpO1G0OO%,zQ!LYO1G0SO!%kQ&jO1G0OO%-YQ!LYO1G0SO%-nQ!LrO1G0SO%-xQ&jO1G0OO!%kQ&jO1G0SOOQ!LS<<IQ<<IQOOQ!LS<<I_<<I_O9uQWO<<I_O%.WQ!LdO<<NPOOQO7+)b7+)bO%.hQ!LdO7+'^O%0pQbO1G3rO%0zQ7^O7+%tO%1XQ7^O,59fO%3UQ7^O,5;{O%5RQ7^O,5;}O%7OQ7^O,5<]O%8nQ7^O7+&}O%8{Q7^O7+'OO%9YQWO,5;oOOQO7+&r7+&rO%9_Q#tO<<K]OOQO1G3z1G3zO%9oQWO1G3zO%9zQWO1G3zO%:YQWO7+*pO%:YQWO7+*pOHcQWO1G3|O%:bQ`O1G3|O%:lQWO7+*qOOQO7+'f7+'fO5VQ!LYO7+'fOOQO7+'e7+'eO$(tQWO7+'gO%:tQ`O7+'gOOQO7+'k7+'kO5VQ!LYO7+'eO$(tQWO7+'fO%:{QWO7+'gOHcQWO7+'gO#2kQWO7+'fO%;QQ#tO<<MpOOQ!LS7+$n7+$nO%;[Q`O,5>eOOQO-E;w-E;wO#EwQWOAN@yOOQQAN@yAN@yOHcQWOAN@yO%;fQ!LbO7+'iOOQQAN=dAN=dO5_QWO1G4VO%;sQWO7+*xO5VQ!LYOANAfO%;{QWOANAfOOQQANAfANAfO%<QQWOAN@yO%<YQ`OAN@yOOQQANAQANAQOOQQANARANARO%<dQWO,5>gOOQO-E;y-E;yO%<oQ7^O1G5ZO#2pQWO,5=TO4{QWO,5=TO!+aQpO,5=TOOQO-E;{-E;{OOQQ1G2n1G2nO$6_Q!LrO,5:hO!%kQ&jO,5=TO%<yQ&jO,5=TO%=XQ&jO,5:hOOQQ<<Ks<<KsOHcQWO<<KsO%*TQWO<<KsO%=mQWO<<KsO%=uQ`O<<KsO)rQYO<<KsOHcQWO<<KsOOQQ<<Kv<<KvO5VQ!LYO<<KvO#2pQWO<<KvO4{QWO<<KvO%>PQ&jO1G4UO%>UQWO7+*vOOQQAN=ZAN=ZO5VQ!LYOAN=ZOOQQ<<Ne<<NeOOQQ<<Nf<<NfOOQQ<<LO<<LOO%>^QWO<<LOO%>cQYO<<LOO%>jQWO<<NeO%>oQWO<<NfOOQQ1G3Y1G3YOOQQANA}ANA}O9uQWOANA}O%>tQ7^O<<IeOOQO<<Hj<<HjOOQO7+%n7+%nO%,eQ!LdO7+%nO)rQYO7+%nOOQO7+%j7+%jO9uQWO7+%jO%?OQ!LYO7+%nO!+aQpO7+%jO%?ZQ!LYO7+%nO!%kQ&jO7+%jO%?iQ!LYO7+%nOOQ!LSAN>yAN>yO%?}Q!LdO<<K]O%BVQ7^O<<IzO%BdQ7^O1G1pO%DSQ7^O1G2RO%FPQ7^O1G2TO%G|Q7^O<<JjO%HZQ7^O<<I`OOQO1G1Z1G1ZOOQO7+)f7+)fO%HhQWO7+)fO%HsQWO<<N[O%H{Q`O7+)hOOQO<<KQ<<KQO5VQ!LYO<<KRO$(tQWO<<KROOQO<<KP<<KPO5VQ!LYO<<KQO%IVQ`O<<KRO$(tQWO<<KQOOQQG26eG26eO#EwQWOG26eOOQO7+)q7+)qOOQQG27QG27QO5VQ!LYOG27QOHcQWOG26eOK^QYO1G4RO%I^QWO7+*uO5VQ!LYO1G2oO#2pQWO1G2oO4{QWO1G2oO!+aQpO1G2oO!%kQ&jO1G2oO%-nQ!LrO1G0SO%IfQ&jO1G2oO%*TQWOANA_OOQQANA_ANA_OHcQWOANA_O%ItQWOANA_O%I|Q`OANA_OOQQANAbANAbO5VQ!LYOANAbO#2pQWOANAbOOQO'#Gm'#GmOOQO7+)p7+)pOOQQG22uG22uOOQQANAjANAjO%JWQWOANAjOOQQANDPANDPOOQQANDQANDQO%J]QYOG27iOOQO<<IY<<IYO%,eQ!LdO<<IYOOQO<<IU<<IUO)rQYO<<IYO9uQWO<<IUO%NWQ!LYO<<IYO!+aQpO<<IUO%NcQ!LYO<<IYO%NqQ7^O7+'^OOQO<<MQ<<MQOOQOAN@mAN@mO5VQ!LYOAN@mOOQOAN@lAN@lO$(tQWOAN@mO5VQ!LYOAN@lOOQQLD,PLD,POOQQLD,lLD,lO#EwQWOLD,PO&!aQ7^O7+)mOOQO7+(Z7+(ZO5VQ!LYO7+(ZO#2pQWO7+(ZO4{QWO7+(ZO!+aQpO7+(ZO!%kQ&jO7+(ZOOQQG26yG26yO%*TQWOG26yOHcQWOG26yOOQQG26|G26|O5VQ!LYOG26|OOQQG27UG27UO9uQWOLD-TOOQOAN>tAN>tO%,eQ!LdOAN>tOOQOAN>pAN>pO)rQYOAN>tO9uQWOAN>pO&!kQ!LYOAN>tO&!vQ7^O<<K]OOQOG26XG26XO5VQ!LYOG26XOOQOG26WG26WOOQQ!$( k!$( kOOQO<<Ku<<KuO5VQ!LYO<<KuO#2pQWO<<KuO4{QWO<<KuO!+aQpO<<KuOOQQLD,eLD,eO%*TQWOLD,eOOQQLD,hLD,hOOQQ!$(!o!$(!oOOQOG24`G24`O%,eQ!LdOG24`OOQOG24[G24[O)rQYOG24`OOQOLD+sLD+sOOQOANAaANAaO5VQ!LYOANAaO#2pQWOANAaO4{QWOANAaOOQQ!$(!P!$(!POOQOLD)zLD)zO%,eQ!LdOLD)zOOQOG26{G26{O5VQ!LYOG26{O#2pQWOG26{OOQO!$'Mf!$'MfOOQOLD,gLD,gO5VQ!LYOLD,gOOQO!$(!R!$(!ROK^QYO'#DmO&$fQbO'#IgOK^QYO'#DeO&$mQ!LdO'#CgO&%WQbO'#CgO&%hQYO,5:nOK^QYO,5:xOK^QYO,5:xOK^QYO,5:xOK^QYO,5:xOK^QYO,5:xOK^QYO,5:xOK^QYO,5:xOK^QYO,5:xOK^QYO,5:xOK^QYO,5:xOK^QYO,5:xOK^QYO'#HsO&'eQWO,5;zO&(tQWO,5:xOK^QYO,5;]O!'TQWO'#CzO!'TQWO'#CzOHcQWO'#FaO&'mQWO'#FaOHcQWO'#FcO&'mQWO'#FcOHcQWO'#FqO&'mQWO'#FqOK^QYO,5?bO&%hQYO1G0YO&({Q7^O'#CgOK^QYO1G1cOHcQWO,5<gO&'mQWO,5<gOHcQWO,5<iO&'mQWO,5<iOHcQWO,5<UO&'mQWO,5<UO&%hQYO1G1dOK^QYO7+&`OHcQWO1G1rO&'mQWO1G1rO&%hQYO7+'OO&%hQYO7+%tOHcQWO7+'qO&'mQWO7+'qO&)VQWO'#ESO&)[QWO'#ESO&)dQWO'#EqO&)iQWO'#IvO&)tQWO'#ItO&*PQWO,5:nO&*UQ#tO,5;wO&*]QWO'#FjO&*bQWO'#FjO&*gQWO,5;xO&*oQWO,5:nO&*wQ7^O1G0tO&+OQWO,5<WO&+TQWO,5<WO&+YQWO1G1dO&+_QWO1G0YO&+dQ#tO1G2VO&+kQ#tO1G2VO3qQWO'#F_O4{QWO'#F^OBYQWO'#EROK^QYO,5;YO!'_QWO'#FlO!'_QWO'#FlOIoQWO,5<kOIoQWO,5<k",
  16598. stateData:
  16599. "&,e~O&}OSSOSTOS~OPTOQTOWwO]bO^gOamOblOgbOiTOjbOkbOmTOoTOtROvbOwbOxbO!OSO!YjO!_UO!bTO!cTO!dTO!eTO!fTO!ikO#ZqO#knO#o]O$voO$xrO$zpO${pO%OsO%QtO%TuO%UuO%WvO%exO%kyO%mzO%o{O%q|O%t}O%z!OO&O!PO&Q!QO&S!RO&U!SO&W!TO'PPO']QO'q`O~OPZXYZX^ZXiZXqZXrZXtZX|ZX![ZX!]ZX!_ZX!eZX!tZX#OcX#RZX#SZX#TZX#UZX#VZX#WZX#XZX#YZX#[ZX#^ZX#`ZX#aZX#fZX&{ZX']ZX'eZX'lZX'mZX~O!W$cX~P$tO&x!VO&y!UO&z!XO~OPTOQTO]bOa!hOb!gOgbOiTOjbOkbOmTOoTOtROvbOwbOxbO!O!`O!YjO!_UO!bTO!cTO!dTO!eTO!fTO!i!fO#k!iO#o]O'P!YO']QO'q`O~O{!^O|!ZOy'`Py'iP~P'^O}!jO~P]OPTOQTO]bOa!hOb!gOgbOiTOjbOkbOmTOoTOtROvbOwbOxbO!O!`O!YjO!_UO!bTO!cTO!dTO!eTO!fTO!i!fO#k!iO#o]O'P8cO']QO'q`O~OPTOQTO]bOa!hOb!gOgbOiTOjbOkbOmTOoTOtROvbOwbOxbO!O!`O!YjO!_UO!bTO!cTO!dTO!eTO!fTO!i!fO#k!iO#o]O']QO'q`O~O{!oO!|!rO!}!oO'P8dO!^'fP~P+oO#O!sO~O!W!tO#O!sO~OP#ZOY#aOi#OOq!xOr!xOt!yO|#_O![#QO!]!vO!_!wO!e#ZO#R!|O#S!}O#T!}O#U!}O#V#PO#W#QO#X#QO#Y#QO#[#RO#^#TO#`#VO#a#WO']QO'e#XO'l!zO'm!{O~O^'ZX&{'ZX!^'ZXy'ZX!O'ZX$w'ZX!W'ZX~P.ZO!t#bO#f#bOP'[XY'[X^'[Xi'[Xq'[Xr'[Xt'[X|'[X!['[X!]'[X!_'[X!e'[X#R'[X#S'[X#T'[X#U'[X#V'[X#W'[X#Y'[X#['[X#^'[X#`'[X#a'[X']'[X'e'[X'l'[X'm'[X~O#X'[X&{'[Xy'[X!^'[X'_'[X!O'[X$w'[X!W'[X~P0kO!t#bO~O#q#cO#x#gO~O!O#hO#o]O#{#iO#}#kO~O]#nOg#zOi#oOj#nOk#nOm#{Oo#|Ot#tO!O#uO!Y$RO!_#rO!}$SO#k$PO$U#}O$W$OO$Z$QO'P#mO'T'VP~O!_$TO~O!W$VO~O^$WO&{$WO~O'P$[O~O!_$TO'P$[O'Q$^O'U$_O~Ob$eO!_$TO'P$[O~O]$nOq$jO!O$gO!_$iO$x$mO'P$[O'Q$^O['yP~O!i$oO~Ot$pO!O$qO'P$[O~Ot$pO!O$qO%Q$uO'P$[O~O'P$vO~O#ZqO$xrO$zpO${pO%OsO%QtO%TuO%UuO~Oa%POb%OO!i$|O$v$}O%Y${O~P7^Oa%SOblO!O%RO!ikO#ZqO$voO$zpO${pO%OsO%QtO%TuO%UuO%WvO~O_%VO!t%YO$x%TO'Q$^O~P8]O!_%ZO!b%_O~O!_%`O~O!OSO~O^$WO&w%hO&{$WO~O^$WO&w%kO&{$WO~O^$WO&w%mO&{$WO~O&x!VO&y!UO&z%qO~OPZXYZXiZXqZXrZXtZX|ZX|cX![ZX!]ZX!_ZX!eZX!tZX!tcX#OcX#RZX#SZX#TZX#UZX#VZX#WZX#XZX#YZX#[ZX#^ZX#`ZX#aZX#fZX']ZX'eZX'lZX'mZX~OyZXycX~P:xO{%sOy&]X|&]X~P)rO|!ZOy'`X~OP#ZOY#aOi#OOq!xOr!xOt!yO|!ZO![#QO!]!vO!_!wO!e#ZO#R!|O#S!}O#T!}O#U!}O#V#PO#W#QO#X#QO#Y#QO#[#RO#^#TO#`#VO#a#WO']QO'e#XO'l!zO'm!{O~Oy'`X~P=oOy%xO~Ot%{O!R&VO!S&OO!T&OO'Q$^O~O]%|Oj%|O{&PO'Y%yO}'aP}'kP~P?rOy'hX|'hX!W'hX!^'hX'e'hX~O!t'hX#O!wX}'hX~P@kO!t&WOy'jX|'jX~O|&XOy'iX~Oy&ZO~O!t#bO~P@kOR&_O!O&[O!j&^O'P$[O~Ob&dO!_$TO'P$[O~Oq$jO!_$iO~O}&eO~P]Oq!xOr!xOt!yO!]!vO!_!wO']QOP!aaY!aai!aa|!aa![!aa!e!aa#R!aa#S!aa#T!aa#U!aa#V!aa#W!aa#X!aa#Y!aa#[!aa#^!aa#`!aa#a!aa'e!aa'l!aa'm!aa~O^!aa&{!aay!aa!^!aa'_!aa!O!aa$w!aa!W!aa~PBtO!^&fO~O!W!tO!t&hO'e&gO|'gX^'gX&{'gX~O!^'gX~PE^O|&lO!^'fX~O!^&nO~Ot$pO!O$qO!}&oO'P$[O~OPTOQTO]bOa!hOb!gOgbOiTOjbOkbOmTOoTOtROvbOwbOxbO!OSO!YjO!_UO!bTO!cTO!dTO!eTO!fTO!i!fO#k!iO#o]O'P8cO']QO'q`O~O]#nOg#zOi#oOj#nOk#nOm#{Oo8uOt#tO!O#uO!Y9wO!_#rO!}8{O#k$PO$U8wO$W8yO$Z$QO'P&sO~O#O&uO~O]#nOg#zOi#oOj#nOk#nOm#{Oo#|Ot#tO!O#uO!Y$RO!_#rO!}$SO#k$PO$U#}O$W$OO$Z$QO'P&sO~O'T'cP~PIoO{&yO!^'dP~P)rO'Y&{O~OP8`OQ8`O]bOa9uOb!gOgbOi8`OjbOkbOm8`Oo8`OtROvbOwbOxbO!O!`O!Y8bO!_UO!b8`O!c8`O!d8`O!e8`O!f8`O!i!fO#k!iO#o]O'P'ZO']QO'q9sO~O!_!wO~O|#_O^$Sa&{$Sa!^$Say$Sa!O$Sa$w$Sa!W$Sa~O#Z'bO~PHcO!W'dO!O'nX#n'nX#q'nX#x'nX~Oq'eO~PNROq'eO!O'nX#n'nX#q'nX#x'nX~O!O'gO#n'kO#q'fO#x'lO~O{'oO~PK^O#q#cO#x'rO~Oq$[Xt$[X!]$[X'e$[X'l$[X'm$[X~OReX|eX!teX'TeX'T$[X~P! kOj'tO~Oq'vOt'wO'e#XO'l'yO'm'{O~O'T'uO~P!!iO'T(OO~O]#nOg#zOi#oOj#nOk#nOm#{Oo8uOt#tO!O#uO!Y9wO!_#rO!}8{O#k$PO$U8wO$W8yO$Z$QO~O{(SO'P(PO!^'rP~P!#WO#O(UO~O{(YO'P(VOy'sP~P!#WO^(cOi(hOt(`O!R(fO!S(_O!T(_O!_(]O!q(gO$n(bO'Q$^O'Y([O~O}(eO~P!${O!]!vOq'XXt'XX'e'XX'l'XX'm'XX|'XX!t'XX~O'T'XX#d'XX~P!%wOR(kO!t(jO|'WX'T'WX~O|(lO'T'VX~O'P(nO~O!_(sO~O!_(]O~Ot$pO{!oO!O$qO!|!rO!}!oO'P$[O!^'fP~O!W!tO#O(wO~OP#ZOY#aOi#OOq!xOr!xOt!yO![#QO!]!vO!_!wO!e#ZO#R!|O#S!}O#T!}O#U!}O#V#PO#W#QO#X#QO#Y#QO#[#RO#^#TO#`#VO#a#WO']QO'e#XO'l!zO'm!{O~O^!Xa|!Xa&{!Xay!Xa!^!Xa'_!Xa!O!Xa$w!Xa!W!Xa~P!(TOR)PO!O&[O!j)OO$w(}O'U$_O~O'P$vO'T'VP~O!W)SO!O'SX^'SX&{'SX~O!_$TO'U$_O~O!_$TO'P$[O'U$_O~O!W!tO#O&uO~O'P)[O}'zP~O|)`O['yX~OY)dO~O[)eO~O!O$gO'P$[O'Q$^O['yP~Ot$pO{)jO!O$qO'P$[Oy'iP~O]&SOj&SO{)kO'Y&{O}'kP~O|)lO^'vX&{'vX~O!t)pO'U$_O~OR)sO!O#uO'U$_O~O!O)uO~Oq)wO!OSO~O!i)|O~Ob*RO~O'P(nO}'xP~Ob$eO~O$xrO'P$vO~P8]OY*XO[*WO~OPTOQTO]bOamOblOgbOiTOjbOkbOmTOoTOtROvbOwbOxbO!YjO!_UO!bTO!cTO!dTO!eTO!fTO!ikO#o]O$voO']QO'q`O~O!O!`O#k!iO'P8cO~P!/bO[*WO^$WO&{$WO~O^*]O#Z*_O$z*_O${*_O~P)rO!_%ZO~O%k*dO~O!O*fO~O%{*iO%|*hOP%yaQ%yaW%ya]%ya^%yaa%yab%yag%yai%yaj%yak%yam%yao%yat%yav%yaw%yax%ya!O%ya!Y%ya!_%ya!b%ya!c%ya!d%ya!e%ya!f%ya!i%ya#Z%ya#k%ya#o%ya$v%ya$x%ya$z%ya${%ya%O%ya%Q%ya%T%ya%U%ya%W%ya%e%ya%k%ya%m%ya%o%ya%q%ya%t%ya%z%ya&O%ya&Q%ya&S%ya&U%ya&W%ya&v%ya'P%ya']%ya'q%ya}%ya%r%ya_%ya%w%ya~O'P*lO~O'_*oO~Oy&]a|&]a~P!(TO|!ZOy'`a~Oy'`a~P=oO|&XOy'ia~O|sX|!UX}sX}!UX!WsX!W!UX!_!UX!tsX'U!UX~O!W*vO!t*uO|!{X|'bX}!{X}'bX!W'bX!_'bX'U'bX~O!W*xO!_$TO'U$_O|!QX}!QX~O]%zOj%zOt%{O'Y([O~OP8`OQ8`O]bOa9uOb!gOgbOi8`OjbOkbOm8`Oo8`OtROvbOwbOxbO!O!`O!Y8bO!_UO!b8`O!c8`O!d8`O!e8`O!f8`O!i!fO#k!iO#o]O']QO'q9sO~O'P9PO~P!9YO|*|O}'aX~O}+OO~O!W*vO!t*uO|!{X}!{X~O|+PO}'kX~O}+RO~O]%zOj%zOt%{O'Q$^O'Y([O~O!S+SO!T+SO~P!<TOt$pO{+VO!O$qO'P$[Oy&bX|&bX~O^+ZO!R+^O!S+YO!T+YO!m+`O!n+_O!o+_O!q+aO'Q$^O'Y([O~O}+]O~P!=UOR+fO!O&[O!j+eO~O!t+lO|'ga!^'ga^'ga&{'ga~O!W!tO~P!>YO|&lO!^'fa~Ot$pO{+oO!O$qO!|+qO!}+oO'P$[O|&dX!^&dX~O^!vi|!vi&{!viy!vi!^!vi'_!vi!O!vi$w!vi!W!vi~P!(TO#O!sa|!sa!^!sa!t!sa!O!sa^!sa&{!say!sa~P!!iO#O'XXP'XXY'XX^'XXi'XXr'XX!['XX!_'XX!e'XX#R'XX#S'XX#T'XX#U'XX#V'XX#W'XX#X'XX#Y'XX#['XX#^'XX#`'XX#a'XX&{'XX']'XX!^'XXy'XX!O'XX$w'XX'_'XX!W'XX~P!%wO|+zO'T'cX~P!!iO'T+|O~O|+}O!^'dX~P!(TO!^,QO~Oy,RO~OP#ZOq!xOr!xOt!yO!]!vO!_!wO!e#ZO']QOY#Qi^#Qii#Qi|#Qi![#Qi#S#Qi#T#Qi#U#Qi#V#Qi#W#Qi#X#Qi#Y#Qi#[#Qi#^#Qi#`#Qi#a#Qi&{#Qi'e#Qi'l#Qi'm#Qiy#Qi!^#Qi'_#Qi!O#Qi$w#Qi!W#Qi~O#R#Qi~P!CgO#R!|O~P!CgOP#ZOq!xOr!xOt!yO!]!vO!_!wO!e#ZO#R!|O#S!}O#T!}O#U!}O']QOY#Qi^#Qi|#Qi![#Qi#V#Qi#W#Qi#X#Qi#Y#Qi#[#Qi#^#Qi#`#Qi#a#Qi&{#Qi'e#Qi'l#Qi'm#Qiy#Qi!^#Qi'_#Qi!O#Qi$w#Qi!W#Qi~Oi#Qi~P!FROi#OO~P!FROP#ZOi#OOq!xOr!xOt!yO!]!vO!_!wO!e#ZO#R!|O#S!}O#T!}O#U!}O#V#PO']QO^#Qi|#Qi#[#Qi#^#Qi#`#Qi#a#Qi&{#Qi'e#Qi'l#Qi'm#Qiy#Qi!^#Qi'_#Qi!O#Qi$w#Qi!W#Qi~OY#Qi![#Qi#W#Qi#X#Qi#Y#Qi~P!HmOY#aO![#QO#W#QO#X#QO#Y#QO~P!HmOP#ZOY#aOi#OOq!xOr!xOt!yO![#QO!]!vO!_!wO!e#ZO#R!|O#S!}O#T!}O#U!}O#V#PO#W#QO#X#QO#Y#QO#[#RO']QO^#Qi|#Qi#^#Qi#`#Qi#a#Qi&{#Qi'e#Qi'm#Qiy#Qi!^#Qi'_#Qi!O#Qi$w#Qi!W#Qi~O'l#Qi~P!KeO'l!zO~P!KeOP#ZOY#aOi#OOq!xOr!xOt!yO![#QO!]!vO!_!wO!e#ZO#R!|O#S!}O#T!}O#U!}O#V#PO#W#QO#X#QO#Y#QO#[#RO#^#TO']QO'l!zO^#Qi|#Qi#`#Qi#a#Qi&{#Qi'e#Qiy#Qi!^#Qi'_#Qi!O#Qi$w#Qi!W#Qi~O'm#Qi~P!NPO'm!{O~P!NPOP#ZOY#aOi#OOq!xOr!xOt!yO![#QO!]!vO!_!wO!e#ZO#R!|O#S!}O#T!}O#U!}O#V#PO#W#QO#X#QO#Y#QO#[#RO#^#TO#`#VO']QO'l!zO'm!{O~O^#Qi|#Qi#a#Qi&{#Qi'e#Qiy#Qi!^#Qi'_#Qi!O#Qi$w#Qi!W#Qi~P#!kOPZXYZXiZXqZXrZXtZX![ZX!]ZX!_ZX!eZX!tZX#OcX#RZX#SZX#TZX#UZX#VZX#WZX#XZX#YZX#[ZX#^ZX#`ZX#aZX#fZX']ZX'eZX'lZX'mZX|ZX}ZX~O#dZX~P#%OOP#ZOY8sOi8hOq!xOr!xOt!yO![8jO!]!vO!_!wO!e#ZO#R8fO#S8gO#T8gO#U8gO#V8iO#W8jO#X8jO#Y8jO#[8kO#^8mO#`8oO#a8pO']QO'e#XO'l!zO'm!{O~O#d,TO~P#'YOP'[XY'[Xi'[Xq'[Xr'[Xt'[X!['[X!]'[X!_'[X!e'[X#R'[X#S'[X#T'[X#U'[X#V'[X#W'[X#Y'[X#['[X#^'[X#`'[X#a'[X']'[X'e'[X'l'[X'm'[X|'[X~O!t8tO#f8tO#X'[X#d'[X}'[X~P#)TO^&ga|&ga&{&ga!^&ga'_&gay&ga!O&ga$w&ga!W&ga~P!(TOP#QiY#Qi^#Qii#Qir#Qi|#Qi![#Qi!]#Qi!_#Qi!e#Qi#R#Qi#S#Qi#T#Qi#U#Qi#V#Qi#W#Qi#X#Qi#Y#Qi#[#Qi#^#Qi#`#Qi#a#Qi&{#Qi']#Qiy#Qi!^#Qi'_#Qi!O#Qi$w#Qi!W#Qi~P!!iO^#ei|#ei&{#eiy#ei!^#ei'_#ei!O#ei$w#ei!W#ei~P!(TO#q,VO~O#q,WO~O!W'dO!t,XO!O#uX#n#uX#q#uX#x#uX~O{,YO~O!O'gO#n,[O#q'fO#x,]O~O|8qO}'ZX~P#'YO},^O~O#x,`O~O],cOj,cOy,dO~O|cX!WcX!^cX!^$[X'ecX~P! kO!^,jO~P!!iO|,kO!W!tO'e&gO!^'rX~O!^,pO~Oy$[X|$[X!W$cX~P! kO|,rOy'sX~P!!iO!W,tO~Oy,vO~O{(SO'P$[O!^'rP~Oi,zO!W!tO!_$TO'U$_O'e&gO~O!W)SO~O}-QO~P!${O!S-RO!T-RO'Q$^O'Y([O~Ot-TO'Y([O~O!q-UO~O'P$vO|&lX'T&lX~O|(lO'T'Va~Oq-ZOr-ZOt-[O'ena'lna'mna|na!tna~O'Tna#dna~P#3|Oq'vOt'wO'e$Ta'l$Ta'm$Ta|$Ta!t$Ta~O'T$Ta#d$Ta~P#4rOq'vOt'wO'e$Va'l$Va'm$Va|$Va!t$Va~O'T$Va#d$Va~P#5eO]-]O~O#O-^O~O'T$ea|$ea#d$ea!t$ea~P!!iO#O-aO~OR-jO!O&[O!j-iO$w-hO~O'T-kO~O]#nOi#oOj#nOk#nOm#{Oo8uOt#tO!O#uO!Y9wO!_#rO!}8{O#k$PO$U8wO$W8yO$Z$QO~Og-mO'P-lO~P#7[O!W)SO!O'Sa^'Sa&{'Sa~O#O-sO~OYZX|cX}cX~O|-tO}'zX~O}-vO~OY-wO~O!O$gO'P$[O[&tX|&tX~O|)`O['ya~O!^-zO~P!(TO]-|O~OY-}O~O[.OO~OR-jO!O&[O!j-iO$w-hO'U$_O~O|)lO^'va&{'va~O!t.UO~OR.XO!O#uO~O'Y&{O}'wP~OR.cO!O._O!j.bO$w.aO'U$_O~OY.mO|.kO}'xX~O}.nO~O[.pO^$WO&{$WO~O].qO~O#X.sO%i.tO~P0kO!t#bO#X.sO%i.tO~O^.uO~P)rO^.wO~O%r.{OP%piQ%piW%pi]%pi^%pia%pib%pig%pii%pij%pik%pim%pio%pit%piv%piw%pix%pi!O%pi!Y%pi!_%pi!b%pi!c%pi!d%pi!e%pi!f%pi!i%pi#Z%pi#k%pi#o%pi$v%pi$x%pi$z%pi${%pi%O%pi%Q%pi%T%pi%U%pi%W%pi%e%pi%k%pi%m%pi%o%pi%q%pi%t%pi%z%pi&O%pi&Q%pi&S%pi&U%pi&W%pi&v%pi'P%pi']%pi'q%pi}%pi_%pi%w%pi~O_/RO}/PO%w/QO~P]O!OSO!_/UO~O|#_O'_$Sa~Oy&]i|&]i~P!(TO|!ZOy'`i~O|&XOy'ii~Oy/YO~O|!Qa}!Qa~P#'YO]%zOj%zO{/`O'Y([O|&^X}&^X~P?rO|*|O}'aa~O]&SOj&SO{)kO'Y&{O|&cX}&cX~O|+PO}'ka~Oy'ji|'ji~P!(TO^$WO!W!tO!_$TO!e/kO!t/iO&{$WO'U$_O'e&gO~O}/nO~P!=UO!S/oO!T/oO'Q$^O'Y([O~O!R/qO!S/oO!T/oO!q/rO'Q$^O'Y([O~O!n/sO!o/sO~P#EXO!O&[O~O!O&[O~P!!iO|'gi!^'gi^'gi&{'gi~P!(TO!t/|O|'gi!^'gi^'gi&{'gi~O|&lO!^'fi~Ot$pO!O$qO!}0OO'P$[O~O#OnaPnaYna^naina![na!]na!_na!ena#Rna#Sna#Tna#Una#Vna#Wna#Xna#Yna#[na#^na#`na#ana&{na']na!^nayna!Ona$wna'_na!Wna~P#3|O#O$TaP$TaY$Ta^$Tai$Tar$Ta![$Ta!]$Ta!_$Ta!e$Ta#R$Ta#S$Ta#T$Ta#U$Ta#V$Ta#W$Ta#X$Ta#Y$Ta#[$Ta#^$Ta#`$Ta#a$Ta&{$Ta']$Ta!^$Tay$Ta!O$Ta$w$Ta'_$Ta!W$Ta~P#4rO#O$VaP$VaY$Va^$Vai$Var$Va![$Va!]$Va!_$Va!e$Va#R$Va#S$Va#T$Va#U$Va#V$Va#W$Va#X$Va#Y$Va#[$Va#^$Va#`$Va#a$Va&{$Va']$Va!^$Vay$Va!O$Va$w$Va'_$Va!W$Va~P#5eO#O$eaP$eaY$ea^$eai$ear$ea|$ea![$ea!]$ea!_$ea!e$ea#R$ea#S$ea#T$ea#U$ea#V$ea#W$ea#X$ea#Y$ea#[$ea#^$ea#`$ea#a$ea&{$ea']$ea!^$eay$ea!O$ea!t$ea$w$ea'_$ea!W$ea~P!!iO^!vq|!vq&{!vqy!vq!^!vq'_!vq!O!vq$w!vq!W!vq~P!(TO|&_X'T&_X~PIoO|+zO'T'ca~O{0WO|&`X!^&`X~P)rO|+}O!^'da~O|+}O!^'da~P!(TO#d!aa}!aa~PBtO#d!Xa|!Xa}!Xa~P#'YO!O0kO#o]O#v0lO~O}0pO~O^$Pq|$Pq&{$Pqy$Pq!^$Pq'_$Pq!O$Pq$w$Pq!W$Pq~P!(TOy0qO~O],cOj,cO~Oq'vOt'wO'm'{O'e$oi'l$oi|$oi!t$oi~O'T$oi#d$oi~P$%SOq'vOt'wO'e$qi'l$qi'm$qi|$qi!t$qi~O'T$qi#d$qi~P$%uO#d0rO~P!!iO{0tO'P$[O|&hX!^&hX~O|,kO!^'ra~O|,kO!W!tO!^'ra~O|,kO!W!tO'e&gO!^'ra~O'T$^i|$^i#d$^i!t$^i~P!!iO{0{O'P(VOy&jX|&jX~P!#WO|,rOy'sa~O|,rOy'sa~P!!iO!W!tO~O!W!tO#X1VO~Oi1ZO!W!tO'e&gO~O|'Wi'T'Wi~P!!iO!t1^O|'Wi'T'Wi~P!!iO!^1aO~O^$Qq|$Qq&{$Qqy$Qq!^$Qq'_$Qq!O$Qq$w$Qq!W$Qq~P!(TO|1eO!O'tX~P!!iO!O&[O$w1hO~O!O&[O$w1hO~P!!iO!O$[X$lZX^$[X&{$[X~P! kO$l1lOqfXtfX!OfX'efX'lfX'mfX^fX&{fX~O$l1lO~O'P)[O|&sX}&sX~O|-tO}'za~O[1uO~O]1xO~OR1zO!O&[O!j1yO$w1hO~O^$WO&{$WO~P!!iO!O#uO~P!!iO|2PO!t2RO}'wX~O}2SO~Ot(`O!R2]O!S2UO!T2UO!m2[O!n2ZO!o2ZO!q2YO'Q$^O'Y([O~O}2XO~P$-{OR2dO!O._O!j2cO$w2bO~OR2dO!O._O!j2cO$w2bO'U$_O~O'P(nO|&rX}&rX~O|.kO}'xa~O'Y2mO~O]2oO~O[2qO~O!^2tO~P)rO^2vO~O^2vO~P)rO#X2xO%i2yO~PE^O_/RO}2}O%w/QO~P]O!W3PO~O%|3QOP%yqQ%yqW%yq]%yq^%yqa%yqb%yqg%yqi%yqj%yqk%yqm%yqo%yqt%yqv%yqw%yqx%yq!O%yq!Y%yq!_%yq!b%yq!c%yq!d%yq!e%yq!f%yq!i%yq#Z%yq#k%yq#o%yq$v%yq$x%yq$z%yq${%yq%O%yq%Q%yq%T%yq%U%yq%W%yq%e%yq%k%yq%m%yq%o%yq%q%yq%t%yq%z%yq&O%yq&Q%yq&S%yq&U%yq&W%yq&v%yq'P%yq']%yq'q%yq}%yq%r%yq_%yq%w%yq~O|!{i}!{i~P#'YO!t3SO|!{i}!{i~O|!Qi}!Qi~P#'YO^$WO!t3ZO&{$WO~O^$WO!W!tO!t3ZO&{$WO~O^$WO!W!tO!_$TO!e3_O!t3ZO&{$WO'U$_O'e&gO~O!S3`O!T3`O'Q$^O'Y([O~O!R3cO!S3`O!T3`O!q3dO'Q$^O'Y([O~O^$WO!W!tO!e3_O!t3ZO&{$WO'e&gO~O|'gq!^'gq^'gq&{'gq~P!(TO|&lO!^'fq~O#O$oiP$oiY$oi^$oii$oir$oi![$oi!]$oi!_$oi!e$oi#R$oi#S$oi#T$oi#U$oi#V$oi#W$oi#X$oi#Y$oi#[$oi#^$oi#`$oi#a$oi&{$oi']$oi!^$oiy$oi!O$oi$w$oi'_$oi!W$oi~P$%SO#O$qiP$qiY$qi^$qii$qir$qi![$qi!]$qi!_$qi!e$qi#R$qi#S$qi#T$qi#U$qi#V$qi#W$qi#X$qi#Y$qi#[$qi#^$qi#`$qi#a$qi&{$qi']$qi!^$qiy$qi!O$qi$w$qi'_$qi!W$qi~P$%uO#O$^iP$^iY$^i^$^ii$^ir$^i|$^i![$^i!]$^i!_$^i!e$^i#R$^i#S$^i#T$^i#U$^i#V$^i#W$^i#X$^i#Y$^i#[$^i#^$^i#`$^i#a$^i&{$^i']$^i!^$^iy$^i!O$^i!t$^i$w$^i'_$^i!W$^i~P!!iO|&_a'T&_a~P!!iO|&`a!^&`a~P!(TO|+}O!^'di~O#d!vi|!vi}!vi~P#'YOP#ZOq!xOr!xOt!yO!]!vO!_!wO!e#ZO']QOY#Qii#Qi![#Qi#S#Qi#T#Qi#U#Qi#V#Qi#W#Qi#X#Qi#Y#Qi#[#Qi#^#Qi#`#Qi#a#Qi#d#Qi'e#Qi'l#Qi'm#Qi|#Qi}#Qi~O#R#Qi~P$?rO#R8fO~P$?rOP#ZOq!xOr!xOt!yO!]!vO!_!wO!e#ZO#R8fO#S8gO#T8gO#U8gO']QOY#Qi![#Qi#V#Qi#W#Qi#X#Qi#Y#Qi#[#Qi#^#Qi#`#Qi#a#Qi#d#Qi'e#Qi'l#Qi'm#Qi|#Qi}#Qi~Oi#Qi~P$AzOi8hO~P$AzOP#ZOi8hOq!xOr!xOt!yO!]!vO!_!wO!e#ZO#R8fO#S8gO#T8gO#U8gO#V8iO']QO#[#Qi#^#Qi#`#Qi#a#Qi#d#Qi'e#Qi'l#Qi'm#Qi|#Qi}#Qi~OY#Qi![#Qi#W#Qi#X#Qi#Y#Qi~P$DSOY8sO![8jO#W8jO#X8jO#Y8jO~P$DSOP#ZOY8sOi8hOq!xOr!xOt!yO![8jO!]!vO!_!wO!e#ZO#R8fO#S8gO#T8gO#U8gO#V8iO#W8jO#X8jO#Y8jO#[8kO']QO#^#Qi#`#Qi#a#Qi#d#Qi'e#Qi'm#Qi|#Qi}#Qi~O'l#Qi~P$FhO'l!zO~P$FhOP#ZOY8sOi8hOq!xOr!xOt!yO![8jO!]!vO!_!wO!e#ZO#R8fO#S8gO#T8gO#U8gO#V8iO#W8jO#X8jO#Y8jO#[8kO#^8mO']QO'l!zO#`#Qi#a#Qi#d#Qi'e#Qi|#Qi}#Qi~O'm#Qi~P$HpO'm!{O~P$HpOP#ZOY8sOi8hOq!xOr!xOt!yO![8jO!]!vO!_!wO!e#ZO#R8fO#S8gO#T8gO#U8gO#V8iO#W8jO#X8jO#Y8jO#[8kO#^8mO#`8oO']QO'l!zO'm!{O~O#a#Qi#d#Qi'e#Qi|#Qi}#Qi~P$JxO^#by|#by&{#byy#by!^#by'_#by!O#by$w#by!W#by~P!(TOP#QiY#Qii#Qir#Qi![#Qi!]#Qi!_#Qi!e#Qi#R#Qi#S#Qi#T#Qi#U#Qi#V#Qi#W#Qi#X#Qi#Y#Qi#[#Qi#^#Qi#`#Qi#a#Qi#d#Qi']#Qi|#Qi}#Qi~P!!iO!]!vOP'XXY'XXi'XXq'XXr'XXt'XX!['XX!_'XX!e'XX#R'XX#S'XX#T'XX#U'XX#V'XX#W'XX#X'XX#Y'XX#['XX#^'XX#`'XX#a'XX#d'XX']'XX'e'XX'l'XX'm'XX|'XX}'XX~O#d#ei|#ei}#ei~P#'YO}3tO~O|&ga}&ga~P#'YO!W!tO'e&gO|&ha!^&ha~O|,kO!^'ri~O|,kO!W!tO!^'ri~Oy&ja|&ja~P!!iO!W3{O~O|,rOy'si~P!!iO|,rOy'si~Oy4RO~O!W!tO#X4XO~Oi4YO!W!tO'e&gO~Oy4[O~O'T$`q|$`q#d$`q!t$`q~P!!iO^$Qy|$Qy&{$Qyy$Qy!^$Qy'_$Qy!O$Qy$w$Qy!W$Qy~P!(TO|1eO!O'ta~O!O&[O$w4aO~O!O&[O$w4aO~P!!iO^!vy|!vy&{!vyy!vy!^!vy'_!vy!O!vy$w!vy!W!vy~P!(TOY4dO~O|-tO}'zi~O]4fO~O[4gO~O'Y&{O|&oX}&oX~O|2PO}'wa~O}4tO~P$-{O!R4wO!S4vO!T4vO!q/rO'Q$^O'Y([O~O!n4xO!o4xO~P%)VO!S4vO!T4vO'Q$^O'Y([O~O!O._O~O!O._O$w4zO~O!O._O$w4zO~P!!iOR5PO!O._O!j5OO$w4zO~OY5UO|&ra}&ra~O|.kO}'xi~O]5XO~O!^5YO~O!^5ZO~O!^5[O~O!^5[O~P)rO^5^O~O!W5aO~O!^5cO~O|'ji}'ji~P#'YO^$WO&{$WO~P!(TO^$WO!t5hO&{$WO~O^$WO!W!tO!t5hO&{$WO~O^$WO!W!tO!e5mO!t5hO&{$WO'e&gO~O!_$TO'U$_O~P%-YO!S5nO!T5nO'Q$^O'Y([O~O|'gy!^'gy^'gy&{'gy~P!(TO#O$`qP$`qY$`q^$`qi$`qr$`q|$`q![$`q!]$`q!_$`q!e$`q#R$`q#S$`q#T$`q#U$`q#V$`q#W$`q#X$`q#Y$`q#[$`q#^$`q#`$`q#a$`q&{$`q']$`q!^$`qy$`q!O$`q!t$`q$w$`q'_$`q!W$`q~P!!iO|&`i!^&`i~P!(TO#d!vq|!vq}!vq~P#'YOq-ZOr-ZOt-[OPnaYnaina![na!]na!_na!ena#Rna#Sna#Tna#Una#Vna#Wna#Xna#Yna#[na#^na#`na#ana#dna']na'ena'lna'mna|na}na~Oq'vOt'wOP$TaY$Tai$Tar$Ta![$Ta!]$Ta!_$Ta!e$Ta#R$Ta#S$Ta#T$Ta#U$Ta#V$Ta#W$Ta#X$Ta#Y$Ta#[$Ta#^$Ta#`$Ta#a$Ta#d$Ta']$Ta'e$Ta'l$Ta'm$Ta|$Ta}$Ta~Oq'vOt'wOP$VaY$Vai$Var$Va![$Va!]$Va!_$Va!e$Va#R$Va#S$Va#T$Va#U$Va#V$Va#W$Va#X$Va#Y$Va#[$Va#^$Va#`$Va#a$Va#d$Va']$Va'e$Va'l$Va'm$Va|$Va}$Va~OP$eaY$eai$ear$ea![$ea!]$ea!_$ea!e$ea#R$ea#S$ea#T$ea#U$ea#V$ea#W$ea#X$ea#Y$ea#[$ea#^$ea#`$ea#a$ea#d$ea']$ea|$ea}$ea~P!!iO#d$Pq|$Pq}$Pq~P#'YO#d$Qq|$Qq}$Qq~P#'YO}5xO~O'T$sy|$sy#d$sy!t$sy~P!!iO!W!tO|&hi!^&hi~O!W!tO'e&gO|&hi!^&hi~O|,kO!^'rq~Oy&ji|&ji~P!!iO|,rOy'sq~Oy6PO~P!!iOy6PO~O|'Wy'T'Wy~P!!iO|&ma!O&ma~P!!iO!O$kq^$kq&{$kq~P!!iO|-tO}'zq~O]6YO~O!O&[O$w6ZO~O!O&[O$w6ZO~P!!iO!t6[O|&oa}&oa~O|2PO}'wi~P#'YO!S6bO!T6bO'Q$^O'Y([O~O!R6dO!S6bO!T6bO!q3dO'Q$^O'Y([O~O!O._O$w6gO~O!O._O$w6gO~P!!iO'Y6mO~O|.kO}'xq~O!^6pO~O!^6pO~P)rO!^6rO~O!^6sO~O|!{y}!{y~P#'YO^$WO!t6xO&{$WO~O^$WO!W!tO!t6xO&{$WO~O^$WO!W!tO!e6|O!t6xO&{$WO'e&gO~O#O$syP$syY$sy^$syi$syr$sy|$sy![$sy!]$sy!_$sy!e$sy#R$sy#S$sy#T$sy#U$sy#V$sy#W$sy#X$sy#Y$sy#[$sy#^$sy#`$sy#a$sy&{$sy']$sy!^$syy$sy!O$sy!t$sy$w$sy'_$sy!W$sy~P!!iO#d#by|#by}#by~P#'YOP$^iY$^ii$^ir$^i![$^i!]$^i!_$^i!e$^i#R$^i#S$^i#T$^i#U$^i#V$^i#W$^i#X$^i#Y$^i#[$^i#^$^i#`$^i#a$^i#d$^i']$^i|$^i}$^i~P!!iOq'vOt'wO'm'{OP$oiY$oii$oir$oi![$oi!]$oi!_$oi!e$oi#R$oi#S$oi#T$oi#U$oi#V$oi#W$oi#X$oi#Y$oi#[$oi#^$oi#`$oi#a$oi#d$oi']$oi'e$oi'l$oi|$oi}$oi~Oq'vOt'wOP$qiY$qii$qir$qi![$qi!]$qi!_$qi!e$qi#R$qi#S$qi#T$qi#U$qi#V$qi#W$qi#X$qi#Y$qi#[$qi#^$qi#`$qi#a$qi#d$qi']$qi'e$qi'l$qi'm$qi|$qi}$qi~O#d$Qy|$Qy}$Qy~P#'YO#d!vy|!vy}!vy~P#'YO!W!tO|&hq!^&hq~O|,kO!^'ry~Oy&jq|&jq~P!!iOy7SO~P!!iO|2PO}'wq~O!S7_O!T7_O'Q$^O'Y([O~O!O._O$w7bO~O!O._O$w7bO~P!!iO!^7eO~O%|7fOP%y!ZQ%y!ZW%y!Z]%y!Z^%y!Za%y!Zb%y!Zg%y!Zi%y!Zj%y!Zk%y!Zm%y!Zo%y!Zt%y!Zv%y!Zw%y!Zx%y!Z!O%y!Z!Y%y!Z!_%y!Z!b%y!Z!c%y!Z!d%y!Z!e%y!Z!f%y!Z!i%y!Z#Z%y!Z#k%y!Z#o%y!Z$v%y!Z$x%y!Z$z%y!Z${%y!Z%O%y!Z%Q%y!Z%T%y!Z%U%y!Z%W%y!Z%e%y!Z%k%y!Z%m%y!Z%o%y!Z%q%y!Z%t%y!Z%z%y!Z&O%y!Z&Q%y!Z&S%y!Z&U%y!Z&W%y!Z&v%y!Z'P%y!Z']%y!Z'q%y!Z}%y!Z%r%y!Z_%y!Z%w%y!Z~O^$WO!t7jO&{$WO~O^$WO!W!tO!t7jO&{$WO~OP$`qY$`qi$`qr$`q![$`q!]$`q!_$`q!e$`q#R$`q#S$`q#T$`q#U$`q#V$`q#W$`q#X$`q#Y$`q#[$`q#^$`q#`$`q#a$`q#d$`q']$`q|$`q}$`q~P!!iO|&oq}&oq~P#'YO^$WO!t8OO&{$WO~OP$syY$syi$syr$sy![$sy!]$sy!_$sy!e$sy#R$sy#S$sy#T$sy#U$sy#V$sy#W$sy#X$sy#Y$sy#[$sy#^$sy#`$sy#a$sy#d$sy']$sy|$sy}$sy~P!!iO'_'ZX~P.ZO'_ZXyZX!^ZX%iZX!OZX$wZX!WZX~P$tO!WcX!^ZX!^cX'ecX~P:xOP8`OQ8`O]bOa9uOb!gOgbOi8`OjbOkbOm8`Oo8`OtROvbOwbOxbO!OSO!Y8bO!_UO!b8`O!c8`O!d8`O!e8`O!f8`O!i!fO#k!iO#o]O'P'ZO']QO'q9sO~O|8qO}$Sa~O]#nOg#zOi#oOj#nOk#nOm#{Oo8vOt#tO!O#uO!Y9xO!_#rO!}8|O#k$PO$U8xO$W8zO$Z$QO'P&sO~O#Z'bO~P&'mO}ZX}cX~P:xO#O8eO~O!W!tO#O8eO~O!t8tO~O!t8}O|'jX}'jX~O!t8tO|'hX}'hX~O#O9OO~O'T9QO~P!!iO#O9VO~O#O9WO~O!W!tO#O9XO~O!W!tO#O9OO~O#d9YO~P#'YO#O9ZO~O#O9[O~O#O9]O~O#O9^O~O#d9_O~P!!iO#d9`O~P!!iO#o~!]!m!o!|!}'q$U$W$Z$l$v$w$x%O%Q%T%U%W%Y~TS#o'q#q'Y'P&}#Sx~",
  16600. goto:
  16601. "#<v(OPPPPPPP(PP(aP)|PPPP-]PP-r2v4i4|P4|PPP4|P4|P6iPP6nP7VPPPP;fPPPP;f>UPPP>[@_P;fPBrPPPPDj;fPPPPPFc;fPPIbJ_PPPJcPJkKlP;f;fNs!#l!([!([!+iPPP!+p;fPPPPPPPPPP!.dP!/uPP;f!1SP;fP;f;f;f;fP;f!3fPP!6]P!9O!9W!9[!9[P!6YP!9`!9`P!<RP!<V;f;f!<]!>}4|P4|P4|4|P!@Q4|4|!At4|4|4|!Cu4|4|!Dc!F[!F[!F`!F[!FhP!F[P4|!Gd4|!Hm4|4|-]PPP!IyPP!Jc!JcP!JcP!Jx!JcPP!KOP!JuP!Ju!KbJg!Ju!LP!LV!LY(P!L](PP!Ld!Ld!LdP(PP(PP(PP(PPP(PP!Lj!LmP!Lm(PPPP(PP(PP(PP(PP(PP(P(P!Lq!L{!MR!Ma!Mg!Mm!Mw!M}!NX!N_!Nm!Ns!Ny# X# n##P##_##e##k##q##w#$R#$X#$_#$i#$s#$yPPPPPPPP#%PPP#%s#)qPP#+U#+]#+eP#/n#2RP#7{P#8P#8S#8V#8b#8eP#8h#8l#9Z#:O#:S#:fPP#:j#:p#:tP#:w#:{#;O#;n#<U#<Z#<^#<a#<g#<j#<n#<rmgOSi{!k$V%^%a%b%d*a*f.{/OQ$dlQ$knQ%UwS&O!`*|Q&c!gS(_#u(dQ)Y$eQ)f$mQ*Q%OQ+S&VS+Y&[+[Q+j&dQ-R(fQ.j*RU/o+^+_+`S2U._2WS3`/q/sU4v2Z2[2]Q5n3cS6b4w4xR7_6d$lZORSTUij{!Q!U!Z!^!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#_#b$V$i%V%Y%^%`%a%b%d%h%s%{&W&^&h&u&y'u(w)O*]*a*f+e+l+},T-[-a-i-s.b.s.t.u.w.{/O/Q/i/|0W1y2c2v2x2y3Z5O5^5h6x7j8O!j']#Y#h&P'o*u*x,Y/`0k2R3S6[8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9vQ(o#|Q)_$gQ*S%RQ*Z%ZQ+t8uQ-n)SQ.r*XQ1r-tQ2k.kR3m8vpdOSiw{!k$V%T%^%a%b%d*a*f.{/OR*U%V&WVOSTijm{!Q!U!Z!h!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#Y#_#b#h$V$i%V%Y%Z%^%`%a%b%d%h%s%{&W&^&h&u&y'o'u(w)O*]*a*f*u*x+e+l+},T,Y-[-a-i-s.b.s.t.u.w.{/O/Q/`/i/|0W0k1y2R2c2v2x2y3S3Z5O5^5h6[6x7j8O8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9u9vW!aRU!^&PQ$]kQ$clS$hn$mv$rpq!o!r$T$p&X&l&o)j)k)l*_*v+V+o+q/U0OQ$zuQ&`!fQ&b!gS(R#r(]S)X$d$eQ)]$gQ)i$oQ){$|Q*P%OS+i&c&dQ,o(SQ-r)YQ-x)`Q-{)dQ.e)|S.i*Q*RQ/z+jQ0s,kQ1q-tQ1t-wQ1w-}Q2j.jQ3x0tR6W4d!W$al!g$c$d$e%}&b&c&d(^)X)Y*y+X+i+j,{-r/e/l/p/z1Y3^3b5l6{Q)Q$]Q)q$wQ)t$xQ*O%OQ.P)iQ.d){U.h*P*Q*RQ2e.eS2i.i.jQ4q2TQ5T2jS6`4r4uS7]6a6cQ7u7^R8T7vW#x`$_(l9sS$wr%TQ$xsQ$ytR)o$u$T#w`!t!v#a#r#t#}$O$S&_'z'|'}(U(Y(j(k(})P)S)p)s+f+z,r,t-^-h-j.U.X.a.c0r0{1V1^1e1h1l1z2b2d3{4X4a4z5P6Z6g7b8s8w8x8y8z8{8|9R9S9T9U9V9W9Z9[9_9`9s9y9zV(p#|8u8vU&S!`$q+PQ&|!xQ)c$jQ,b'vQ.Y)uQ1_-ZR4m2P&YbORSTUij{!Q!U!Z!^!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#Y#_#b#h$V$i%V%Y%Z%^%`%a%b%d%h%s%{&P&W&^&h&u&y'o'u(w)O*]*a*f*u*x+e+l+},T,Y-[-a-i-s.b.s.t.u.w.{/O/Q/`/i/|0W0k1y2R2c2v2x2y3S3Z5O5^5h6[6x7j8O8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9v$]#^Y!]!l$Z%r%v&q&x'O'P'Q'R'S'T'U'V'W'X'Y'['_'c'm)b*q*z+T+k+y,P,S,U,a-_/Z/^/{0V0Z0[0]0^0_0`0a0b0c0d0e0f0g0j0o1c1o3U3X3h3k3l3q3r4o5d5g5r5v5w6v7X7h7|8W8a9l&ZbORSTUij{!Q!U!Z!^!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#Y#_#b#h$V$i%V%Y%Z%^%`%a%b%d%h%s%{&P&W&^&h&u&y'o'u(w)O*]*a*f*u*x+e+l+},T,Y-[-a-i-s.b.s.t.u.w.{/O/Q/`/i/|0W0k1y2R2c2v2x2y3S3Z5O5^5h6[6x7j8O8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9vQ&Q!`R/a*|Y%z!`&O&V*|+SS(^#u(dS+X&[+[S,{(_(fQ,|(`Q-S(gQ.[)wS/l+Y+^S/p+_+`S/t+a2YQ1Y-RQ1[-TQ1]-US2T._2WS3^/o/qQ3a/rQ3b/sS4r2U2]S4u2Z2[S5l3`3cQ5o3dS6a4v4wQ6c4xQ6{5nS7^6b6dR7v7_lgOSi{!k$V%^%a%b%d*a*f.{/OQ%f!OS&p!s8eQ)V$bQ)y$zQ)z${Q+g&aS+x&u9OS-`(w9XQ-p)WQ.^)xQ/S*hQ/T*iQ/]*wQ/x+hS1d-a9]Q1m-qS1p-s9^Q3T/_Q3W/gQ3f/yQ4c1nQ5b3QQ5e3VQ5i3]Q5p3gQ6t5cQ6w5jQ7i6yQ7z7fR7}7k$W#]Y!]!l%r%v&q&x'O'P'Q'R'S'T'U'V'W'X'Y'['_'c'm)b*q*z+T+k+y,P,S,a-_/Z/^/{0V0Z0[0]0^0_0`0a0b0c0d0e0f0g0j0o1c1o3U3X3h3k3l3q3r4o5d5g5r5v5w6v7X7h7|8W8a9lU(i#v&t0iT({$Z,U$W#[Y!]!l%r%v&q&x'O'P'Q'R'S'T'U'V'W'X'Y'['_'c'm)b*q*z+T+k+y,P,S,a-_/Z/^/{0V0Z0[0]0^0_0`0a0b0c0d0e0f0g0j0o1c1o3U3X3h3k3l3q3r4o5d5g5r5v5w6v7X7h7|8W8a9lQ'^#]S(z$Z,UR-b({&YbORSTUij{!Q!U!Z!^!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#Y#_#b#h$V$i%V%Y%Z%^%`%a%b%d%h%s%{&P&W&^&h&u&y'o'u(w)O*]*a*f*u*x+e+l+},T,Y-[-a-i-s.b.s.t.u.w.{/O/Q/`/i/|0W0k1y2R2c2v2x2y3S3Z5O5^5h6[6x7j8O8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9vQ%ayQ%bzQ%d|Q%e}R.z*dQ&]!fQ(|$]Q+d&`S-g)Q)iS/u+b+cW1g-d-e-f.PS3e/v/wU4`1i1j1kU6U4_4i4jQ7U6VR7q7WT+Z&[+[S+Z&[+[T2V._2WS&j!n.xQ,n(RQ,y(^S/k+X2TQ0x,oS1S,z-SU3_/p/t4uQ3w0sS4V1Z1]U5m3a3b6cQ5z3xQ6T4YR6|5oQ!uXS&i!n.xQ(x$UQ)T$`Q)Z$fQ+m&jQ,m(RQ,x(^Q,}(aQ-o)UQ.f)}S/j+X2TS0w,n,oS1R,y-SQ1U,|Q1X-OQ2g.gW3[/k/p/t4uQ3v0sQ3z0xS4P1S1]Q4W1[Q5R2hW5k3_3a3b6cS5y3w3xQ6O4RQ6R4VQ6^4pQ6k5SS6z5m5oQ7O5zQ7Q6PQ7T6TQ7Z6_Q7d6lQ7l6|Q7o7SQ7s7[Q8R7tQ8Y8SQ8^8ZQ9f9bQ9o9jR9p9k$nWORSTUij{!Q!U!Z!^!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#_#b$V$i%V%Y%Z%^%`%a%b%d%h%s%{&W&^&h&u&y'u(w)O*]*a*f+e+l+},T-[-a-i-s.b.s.t.u.w.{/O/Q/i/|0W1y2c2v2x2y3Z5O5^5h6x7j8OS!um!h!j9a#Y#h&P'o*u*x,Y/`0k2R3S6[8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9vR9f9u$nXORSTUij{!Q!U!Z!^!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#_#b$V$i%V%Y%Z%^%`%a%b%d%h%s%{&W&^&h&u&y'u(w)O*]*a*f+e+l+},T-[-a-i-s.b.s.t.u.w.{/O/Q/i/|0W1y2c2v2x2y3Z5O5^5h6x7j8OQ$Ua!W$`l!g$c$d$e%}&b&c&d(^)X)Y*y+X+i+j,{-r/e/l/p/z1Y3^3b5l6{S$fm!hQ)U$aQ)}%OW.g*O*P*Q*RU2h.h.i.jQ4p2TS5S2i2jU6_4q4r4uQ6l5TU7[6`6a6cS7t7]7^S8S7u7vQ8Z8T!j9b#Y#h&P'o*u*x,Y/`0k2R3S6[8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9vQ9j9tR9k9u$f[OSTij{!Q!U!Z!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#_#b$V$i%V%Y%^%`%a%b%d%h%s%{&W&^&h&u&y'u(w)O*]*a*f+e+l+},T-[-a-i-s.b.s.t.u.w.{/O/Q/i/|0W1y2c2v2x2y3Z5O5^5h6x7j8OU!eRU!^v$rpq!o!r$T$p&X&l&o)j)k)l*_*v+V+o+q/U0OQ*[%Z!h9c#Y#h'o*u*x,Y/`0k2R3S6[8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9vR9e&PS&T!`$qR/c+P$lZORSTUij{!Q!U!Z!^!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#_#b$V$i%V%Y%^%`%a%b%d%h%s%{&W&^&h&u&y'u(w)O*]*a*f+e+l+},T-[-a-i-s.b.s.t.u.w.{/O/Q/i/|0W1y2c2v2x2y3Z5O5^5h6x7j8O!j']#Y#h&P'o*u*x,Y/`0k2R3S6[8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9vR*Z%Z!h#SY!]$Z%r%v&q&x'V'W'X'Y'_'c)b*q+T+k+y,P,a-_/{0V0g1c1o3X3h3k5g6v7h7|8W8a!R8l'['m*z,U/Z/^0Z0c0d0e0f0j0o3U3l3q3r4o5d5r5v5w7X9l!d#UY!]$Z%r%v&q&x'X'Y'_'c)b*q+T+k+y,P,a-_/{0V0g1c1o3X3h3k5g6v7h7|8W8a}8n'['m*z,U/Z/^0Z0e0f0j0o3U3l3q3r4o5d5r5v5w7X9l!`#YY!]$Z%r%v&q&x'_'c)b*q+T+k+y,P,a-_/{0V0g1c1o3X3h3k5g6v7h7|8W8al'}#p&v(v,i,q-V-W0T1b3u4Z9g9q9rx9v'['m*z,U/Z/^0Z0j0o3U3l3q3r4o5d5r5v5w7X9l!^9y&r'a(Q(W+c+w,u-c-f.T.V/w0S0y0}1k1|2O2`3j3|4S4]4b4j4}5q5|6S6iZ9z0h3p5s6}7m&YbORSTUij{!Q!U!Z!^!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#Y#_#b#h$V$i%V%Y%Z%^%`%a%b%d%h%s%{&P&W&^&h&u&y'o'u(w)O*]*a*f*u*x+e+l+},T,Y-[-a-i-s.b.s.t.u.w.{/O/Q/`/i/|0W0k1y2R2c2v2x2y3S3Z5O5^5h6[6x7j8O8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9vS#i_#jR0l,X&a^ORSTU_ij{!Q!U!Z!^!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#Y#_#b#h#j$V$i%V%Y%Z%^%`%a%b%d%h%s%{&P&W&^&h&u&y'o'u(w)O*]*a*f*u*x+e+l+},T,X,Y-[-a-i-s.b.s.t.u.w.{/O/Q/`/i/|0W0k1y2R2c2v2x2y3S3Z5O5^5h6[6x7j8O8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9vS#d]#kT'f#f'jT#e]#kT'h#f'j&a_ORSTU_ij{!Q!U!Z!^!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#Y#_#b#h#j$V$i%V%Y%Z%^%`%a%b%d%h%s%{&P&W&^&h&u&y'o'u(w)O*]*a*f*u*x+e+l+},T,X,Y-[-a-i-s.b.s.t.u.w.{/O/Q/`/i/|0W0k1y2R2c2v2x2y3S3Z5O5^5h6[6x7j8O8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9vT#i_#jQ#l_R'q#j$naORSTUij{!Q!U!Z!^!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#_#b$V$i%V%Y%Z%^%`%a%b%d%h%s%{&W&^&h&u&y'u(w)O*]*a*f+e+l+},T-[-a-i-s.b.s.t.u.w.{/O/Q/i/|0W1y2c2v2x2y3Z5O5^5h6x7j8O!k9t#Y#h&P'o*u*x,Y/`0k2R3S6[8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9v#RcOSUi{!Q!U!k!y#h$V%V%Y%Z%^%`%a%b%d%h%{&^'o)O*]*a*f+e,Y-[-i.b.s.t.u.w.{/O/Q0k1y2c2v2x2y5O5^t#v`!v#}$O$S'z'|'}(U(j(k+z-^0r1^9s9y9z!z&t!t#a#r#t&_(Y(})P)S)p)s+f,r,t-h-j.U.X.a.c0{1V1e1h1l1z2b2d3{4X4a4z5P6Z6g7b8w8y8{9R9T9V9Z9_Q(t$Qc0i8s8x8z8|9S9U9W9[9`t#s`!v#}$O$S'z'|'}(U(j(k+z-^0r1^9s9y9zS(a#u(dQ(u$RQ-O(b!z9h!t#a#r#t&_(Y(})P)S)p)s+f,r,t-h-j.U.X.a.c0{1V1e1h1l1z2b2d3{4X4a4z5P6Z6g7b8w8y8{9R9T9V9Z9_b9i8s8x8z8|9S9U9W9[9`Q9m9wR9n9xleOSi{!k$V%^%a%b%d*a*f.{/OQ(X#tQ*m%kQ*n%mR0z,r$S#w`!t!v#a#r#t#}$O$S&_'z'|'}(U(Y(j(k(})P)S)p)s+f+z,r,t-^-h-j.U.X.a.c0r0{1V1^1e1h1l1z2b2d3{4X4a4z5P6Z6g7b8s8w8x8y8z8{8|9R9S9T9U9V9W9Z9[9_9`9s9y9zQ)r$xQ.W)tQ1}.VR4l2OT(c#u(dS(c#u(dT2V._2WQ)T$`Q,}(aQ-o)UQ.f)}Q2g.gQ5R2hQ6^4pQ6k5SQ7Z6_Q7d6lQ7s7[Q8R7tQ8Y8SR8^8Zl'z#p&v(v,i,q-V-W0T1b3u4Z9g9q9r!^9R&r'a(Q(W+c+w,u-c-f.T.V/w0S0y0}1k1|2O2`3j3|4S4]4b4j4}5q5|6S6iZ9S0h3p5s6}7mn'|#p&v(v,g,i,q-V-W0T1b3u4Z9g9q9r!`9T&r'a(Q(W+c+w,u-c-f.T.V/w0Q0S0y0}1k1|2O2`3j3|4S4]4b4j4}5q5|6S6i]9U0h3p5s5t6}7mpdOSiw{!k$V%T%^%a%b%d*a*f.{/OQ%QvR*]%ZpdOSiw{!k$V%T%^%a%b%d*a*f.{/OR%QvQ)v$yR.S)oqdOSiw{!k$V%T%^%a%b%d*a*f.{/OQ.`){S2a.d.eW4y2^2_2`2eU6f4{4|4}U7`6e6h6iQ7w7aR8U7xQ%XwR*V%TR2n.mR6n5US$hn$mR-x)`Q%^xR*a%_R*g%eT.|*f/OQiOQ!kST$Yi!kQ!WQR%p!WQ![RU%t![%u*rQ%u!]R*r%vQ*}&QR/b*}Q+{&vR0U+{Q,O&xS0X,O0YR0Y,PQ+[&[R/m+[Q&Y!cQ*s%wT+W&Y*sQ+Q&TR/d+QQ&m!pQ+n&kU+r&m+n0PR0P+sQ'j#fR,Z'jQ#j_R'p#jQ#`YU'`#`*p8rQ*p8aR8r'mQ,l(RW0u,l0v3y5{U0v,m,n,oS3y0w0xR5{3z#o'x#p&r&v'a(Q(W(q(r(v+c+u+v+w,g,h,i,q,u-V-W-c-f.T.V/w0Q0R0S0T0h0y0}1b1k1|2O2`3j3n3o3p3u3|4S4Z4]4b4j4}5q5s5t5u5|6S6i6}7m9g9q9rQ,s(WU0|,s1O3}Q1O,uR3}0}Q(d#uR-P(dQ(m#yR-Y(mQ1f-cR4^1fQ)m$sR.R)mQ2Q.YS4n2Q6]R6]4oQ)x$zR.])xQ2W._R4s2WQ.l*SS2l.l5VR5V2nQ-u)]S1s-u4eR4e1tQ)a$hR-y)aQ/O*fR2|/OWhOSi!kQ%c{Q(y$VQ*`%^Q*b%aQ*c%bQ*e%dQ.y*aS.|*f/OR2{.{Q$XfQ%g!PQ%j!RQ%l!SQ%n!TQ)h$nQ)n$tQ*U%XQ*k%iS.o*V*YQ/V*jQ/W*mQ/X*nS/h+X2TQ1P,wQ1Q,xQ1W,}Q1v-|Q1{.TQ2f.fQ2p.qQ2z.zY3Y/j/k/p/t4uQ4O1RQ4Q1TQ4T1XQ4h1xQ4k1|Q5Q2gQ5W2o[5f3X3[3_3a3b6cQ5}4PQ6Q4UQ6X4fQ6j5RQ6o5XW6u5g5k5m5oQ7P6OQ7R6RQ7V6YQ7Y6^Q7c6kU7g6v6z6|Q7n7QQ7p7TQ7r7ZQ7y7dS7{7h7lQ8P7oQ8Q7sQ8V7|Q8X8RQ8[8WQ8]8YR8_8^Q$blQ&a!gU)W$c$d$eQ*w%}U+h&b&c&dQ,w(^S-q)X)YQ/_*yQ/g+XS/y+i+jQ1T,{Q1n-rQ3V/eS3]/l/pQ3g/zQ4U1YS5j3^3bQ6y5lR7k6{S#q`9sR)R$_U#y`$_9sR-X(lQ#p`S&r!t)SQ&v!vQ'a#aQ(Q#rQ(W#tQ(q#}Q(r$OQ(v$SQ+c&_Q+u8wQ+v8yQ+w8{Q,g'zQ,h'|Q,i'}Q,q(UQ,u(YQ-V(jQ-W(kd-c(}-h.a1h2b4a4z6Z6g7bQ-f)PQ.T)pQ.V)sQ/w+fQ0Q9RQ0R9TQ0S9VQ0T+zQ0h8sQ0y,rQ0},tQ1b-^Q1k-jQ1|.UQ2O.XQ2`.cQ3j9ZQ3n8xQ3o8zQ3p8|Q3u0rQ3|0{Q4S1VQ4Z1^Q4]1eQ4b1lQ4j1zQ4}2dQ5q9_Q5s9WQ5t9SQ5u9UQ5|3{Q6S4XQ6i5PQ6}9[Q7m9`Q9g9sQ9q9yR9r9zlfOSi{!k$V%^%a%b%d*a*f.{/OS!mU%`Q%i!QQ%o!UQ&}!yQ'n#hS*Y%V%YQ*^%ZQ*j%hQ*t%{Q+b&^Q,_'oQ-e)OQ.v*]Q/v+eQ0n,YQ1`-[Q1j-iQ2_.bQ2r.sQ2s.tQ2u.uQ2w.wQ3O/QQ3s0kQ4i1yQ4|2cQ5]2vQ5_2xQ5`2yQ6h5OR6q5^!vYOSUi{!Q!k!y$V%V%Y%Z%^%`%a%b%d%h%{&^)O*]*a*f+e-[-i.b.s.t.u.w.{/O/Q1y2c2v2x2y5O5^Q!]RQ!lTQ$ZjQ%r!ZQ%v!^Q&q!sQ&x!wQ'O!|Q'P!}Q'Q#OQ'R#PQ'S#QQ'T#RQ'U#SQ'V#TQ'W#UQ'X#VQ'Y#WQ'[#YQ'_#_Q'c#bW'm#h'o,Y0kQ)b$iQ*q%sS*z&P/`Q+T&WQ+k&hQ+y&uQ,P&yQ,S8`Q,U8bQ,a'uQ-_(wQ/Z*uQ/^*xQ/{+lQ0V+}Q0Z8eQ0[8fQ0]8gQ0^8hQ0_8iQ0`8jQ0a8kQ0b8lQ0c8mQ0d8nQ0e8oQ0f8pQ0g,TQ0j8tQ0o8qQ1c-aQ1o-sQ3U8}Q3X/iQ3h/|Q3k0WQ3l9OQ3q9QQ3r9XQ4o2RQ5d3SQ5g3ZQ5r9YQ5v9]Q5w9^Q6v5hQ7X6[Q7h6xQ7|7jQ8W8OQ8a!UR9l9vT!VQ!WR!_RR&R!`S%}!`*|S*y&O&VR/e+SR&w!vR&z!wT!qU$TS!pU$TU$spq*_S&k!o!rQ+p&lQ+s&oQ.Q)lS/}+o+qR3i0O[!bR!^$p&X)j+Vh!nUpq!o!r$T&l&o)l+o+q0OQ.x*_Q/[*vQ3R/UT9d&P)kT!dR$pS!cR$pS%w!^)jS*{&P)kQ+U&XR/f+VT&U!`$qQ#f]R's#kT'i#f'jR0m,XT(T#r(]R(Z#tQ-d(}Q1i-hQ2^.aQ4_1hQ4{2bQ6V4aQ6e4zQ7W6ZQ7a6gR7x7blgOSi{!k$V%^%a%b%d*a*f.{/OQ%WwR*U%TV$tpq*_R.Z)uR*T%RQ$lnR)g$mR)^$gT%[x%_T%]x%_T.}*f/O",
  16602. nodeNames:
  16603. '⚠ ArithOp ArithOp extends LineComment BlockComment Script ExportDeclaration export Star as VariableName from String ; default FunctionDeclaration async function VariableDefinition TypeParamList TypeDefinition ThisType this LiteralType ArithOp Number BooleanLiteral VoidType void TypeofType typeof MemberExpression . ?. PropertyName [ TemplateString null super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyNameDefinition Block : NewExpression new TypeArgList CompareOp < ) ( ArgList UnaryExpression await yield delete LogicOp BitOp ParenthesizedExpression ClassExpression class extends ClassBody MethodDeclaration Privacy static abstract PropertyDeclaration readonly Optional TypeAnnotation Equals FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp in instanceof const CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression TaggedTemplatExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXStartTag JSXSelfClosingTag JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast ArrowFunction TypeParamList SequenceExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature CallSignature TypePredicate is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody MethodDeclaration AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try catch finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement',
  16604. maxTerm: 321,
  16605. nodeProps: [
  16606. [
  16607. NodeProp.group,
  16608. -26,
  16609. 7,
  16610. 14,
  16611. 16,
  16612. 53,
  16613. 175,
  16614. 179,
  16615. 182,
  16616. 183,
  16617. 185,
  16618. 188,
  16619. 191,
  16620. 202,
  16621. 204,
  16622. 210,
  16623. 212,
  16624. 214,
  16625. 216,
  16626. 219,
  16627. 225,
  16628. 229,
  16629. 231,
  16630. 233,
  16631. 235,
  16632. 237,
  16633. 239,
  16634. 240,
  16635. 'Statement',
  16636. -30,
  16637. 11,
  16638. 13,
  16639. 23,
  16640. 26,
  16641. 27,
  16642. 37,
  16643. 38,
  16644. 39,
  16645. 40,
  16646. 42,
  16647. 47,
  16648. 55,
  16649. 63,
  16650. 69,
  16651. 70,
  16652. 83,
  16653. 84,
  16654. 93,
  16655. 94,
  16656. 110,
  16657. 113,
  16658. 115,
  16659. 116,
  16660. 117,
  16661. 118,
  16662. 120,
  16663. 121,
  16664. 139,
  16665. 140,
  16666. 142,
  16667. 'Expression',
  16668. -21,
  16669. 22,
  16670. 24,
  16671. 28,
  16672. 30,
  16673. 143,
  16674. 145,
  16675. 147,
  16676. 148,
  16677. 150,
  16678. 151,
  16679. 152,
  16680. 154,
  16681. 155,
  16682. 156,
  16683. 158,
  16684. 159,
  16685. 160,
  16686. 169,
  16687. 171,
  16688. 173,
  16689. 174,
  16690. 'Type',
  16691. -2,
  16692. 74,
  16693. 78,
  16694. 'ClassItem'
  16695. ],
  16696. [NodeProp.closedBy, 36, ']', 46, '}', 61, ')', 123, 'JSXSelfCloseEndTag JSXEndTag', 137, 'JSXEndTag'],
  16697. [NodeProp.openedBy, 41, '[', 45, '{', 60, '(', 122, 'JSXStartTag', 132, 'JSXStartTag JSXStartCloseTag']
  16698. ],
  16699. skippedNodes: [0, 4, 5],
  16700. repeatNodeCount: 27,
  16701. tokenData:
  16702. "!?v~R!ZOX$tX^%S^p$tpq%Sqr&rrs'zst$ttu/wuv2Xvw2|wx3zxy:byz:rz{;S{|<S|}<g}!O<S!O!P<w!P!QAT!Q!R!-s!R![!/Y![!]!4x!]!^!5[!^!_!5l!_!`!6i!`!a!7a!a!b!9W!b!c$t!c!}/w!}#O!:i#O#P$t#P#Q!:y#Q#R!;Z#R#S/w#S#T!;n#T#o/w#o#p!<O#p#q!<T#q#r!<k#r#s!<}#s#y$t#y#z%S#z$f$t$f$g%S$g#BY/w#BY#BZ!=_#BZ$IS/w$IS$I_!=_$I_$I|/w$I|$JO!=_$JO$JT/w$JT$JU!=_$JU$KV/w$KV$KW!=_$KW&FU/w&FU&FV!=_&FV~/wW$yR#{WO!^$t!_#o$t#p~$t,T%Zg#{W&}+{OX$tX^%S^p$tpq%Sq!^$t!_#o$t#p#y$t#y#z%S#z$f$t$f$g%S$g#BY$t#BY#BZ%S#BZ$IS$t$IS$I_%S$I_$I|$t$I|$JO%S$JO$JT$t$JT$JU%S$JU$KV$t$KV$KW%S$KW&FU$t&FU&FV%S&FV~$t$T&yS#{W!e#{O!^$t!_!`'V!`#o$t#p~$t$O'^S#[#v#{WO!^$t!_!`'j!`#o$t#p~$t$O'qR#[#v#{WO!^$t!_#o$t#p~$t'u(RZ#{W]!ROY'zYZ(tZr'zrs*Rs!^'z!^!_*e!_#O'z#O#P,q#P#o'z#o#p*e#p~'z&r(yV#{WOr(trs)`s!^(t!^!_)p!_#o(t#o#p)p#p~(t&r)gR#v&j#{WO!^$t!_#o$t#p~$t&j)sROr)prs)|s~)p&j*RO#v&j'u*[R#v&j#{W]!RO!^$t!_#o$t#p~$t'm*jV]!ROY*eYZ)pZr*ers+Ps#O*e#O#P+W#P~*e'm+WO#v&j]!R'm+ZROr*ers+ds~*e'm+kU#v&j]!ROY+}Zr+}rs,fs#O+}#O#P,k#P~+}!R,SU]!ROY+}Zr+}rs,fs#O+}#O#P,k#P~+}!R,kO]!R!R,nPO~+}'u,vV#{WOr'zrs-]s!^'z!^!_*e!_#o'z#o#p*e#p~'z'u-fZ#v&j#{W]!ROY.XYZ$tZr.Xrs/Rs!^.X!^!_+}!_#O.X#O#P/c#P#o.X#o#p+}#p~.X!Z.`Z#{W]!ROY.XYZ$tZr.Xrs/Rs!^.X!^!_+}!_#O.X#O#P/c#P#o.X#o#p+}#p~.X!Z/YR#{W]!RO!^$t!_#o$t#p~$t!Z/hT#{WO!^.X!^!_+}!_#o.X#o#p+}#p~.X&i0S_#{W#qS'Yp'P%kOt$ttu/wu}$t}!O1R!O!Q$t!Q![/w![!^$t!_!c$t!c!}/w!}#R$t#R#S/w#S#T$t#T#o/w#p$g$t$g~/w[1Y_#{W#qSOt$ttu1Ru}$t}!O1R!O!Q$t!Q![1R![!^$t!_!c$t!c!}1R!}#R$t#R#S1R#S#T$t#T#o1R#p$g$t$g~1R$O2`S#T#v#{WO!^$t!_!`2l!`#o$t#p~$t$O2sR#{W#f#vO!^$t!_#o$t#p~$t%r3TU'm%j#{WOv$tvw3gw!^$t!_!`2l!`#o$t#p~$t$O3nS#{W#`#vO!^$t!_!`2l!`#o$t#p~$t'u4RZ#{W]!ROY3zYZ4tZw3zwx*Rx!^3z!^!_5l!_#O3z#O#P7l#P#o3z#o#p5l#p~3z&r4yV#{WOw4twx)`x!^4t!^!_5`!_#o4t#o#p5`#p~4t&j5cROw5`wx)|x~5`'m5qV]!ROY5lYZ5`Zw5lwx+Px#O5l#O#P6W#P~5l'm6ZROw5lwx6dx~5l'm6kU#v&j]!ROY6}Zw6}wx,fx#O6}#O#P7f#P~6}!R7SU]!ROY6}Zw6}wx,fx#O6}#O#P7f#P~6}!R7iPO~6}'u7qV#{WOw3zwx8Wx!^3z!^!_5l!_#o3z#o#p5l#p~3z'u8aZ#v&j#{W]!ROY9SYZ$tZw9Swx/Rx!^9S!^!_6}!_#O9S#O#P9|#P#o9S#o#p6}#p~9S!Z9ZZ#{W]!ROY9SYZ$tZw9Swx/Rx!^9S!^!_6}!_#O9S#O#P9|#P#o9S#o#p6}#p~9S!Z:RT#{WO!^9S!^!_6}!_#o9S#o#p6}#p~9S%V:iR!_$}#{WO!^$t!_#o$t#p~$tZ:yR!^R#{WO!^$t!_#o$t#p~$t%R;]U'Q!R#U#v#{WOz$tz{;o{!^$t!_!`2l!`#o$t#p~$t$O;vS#R#v#{WO!^$t!_!`2l!`#o$t#p~$t$u<ZSi$m#{WO!^$t!_!`2l!`#o$t#p~$t&i<nR|&a#{WO!^$t!_#o$t#p~$t&i=OVq%n#{WO!O$t!O!P=e!P!Q$t!Q![>Z![!^$t!_#o$t#p~$ty=jT#{WO!O$t!O!P=y!P!^$t!_#o$t#p~$ty>QR{q#{WO!^$t!_#o$t#p~$ty>bZ#{WjqO!Q$t!Q![>Z![!^$t!_!g$t!g!h?T!h#R$t#R#S>Z#S#X$t#X#Y?T#Y#o$t#p~$ty?YZ#{WO{$t{|?{|}$t}!O?{!O!Q$t!Q![@g![!^$t!_#R$t#R#S@g#S#o$t#p~$ty@QV#{WO!Q$t!Q![@g![!^$t!_#R$t#R#S@g#S#o$t#p~$ty@nV#{WjqO!Q$t!Q![@g![!^$t!_#R$t#R#S@g#S#o$t#p~$t,TA[`#{W#S#vOYB^YZ$tZzB^z{HT{!PB^!P!Q!*|!Q!^B^!^!_Da!_!`!+u!`!a!,t!a!}B^!}#OFY#O#PGi#P#oB^#o#pDa#p~B^XBe[#{WxPOYB^YZ$tZ!PB^!P!QCZ!Q!^B^!^!_Da!_!}B^!}#OFY#O#PGi#P#oB^#o#pDa#p~B^XCb_#{WxPO!^$t!_#Z$t#Z#[CZ#[#]$t#]#^CZ#^#a$t#a#bCZ#b#g$t#g#hCZ#h#i$t#i#jCZ#j#m$t#m#nCZ#n#o$t#p~$tPDfVxPOYDaZ!PDa!P!QD{!Q!}Da!}#OEd#O#PFP#P~DaPEQUxP#Z#[D{#]#^D{#a#bD{#g#hD{#i#jD{#m#nD{PEgTOYEdZ#OEd#O#PEv#P#QDa#Q~EdPEyQOYEdZ~EdPFSQOYDaZ~DaXF_Y#{WOYFYYZ$tZ!^FY!^!_Ed!_#OFY#O#PF}#P#QB^#Q#oFY#o#pEd#p~FYXGSV#{WOYFYYZ$tZ!^FY!^!_Ed!_#oFY#o#pEd#p~FYXGnV#{WOYB^YZ$tZ!^B^!^!_Da!_#oB^#o#pDa#p~B^,TH[^#{WxPOYHTYZIWZzHTz{Ki{!PHT!P!Q!)j!Q!^HT!^!_Mt!_!}HT!}#O!%e#O#P!(x#P#oHT#o#pMt#p~HT,TI]V#{WOzIWz{Ir{!^IW!^!_Jt!_#oIW#o#pJt#p~IW,TIwX#{WOzIWz{Ir{!PIW!P!QJd!Q!^IW!^!_Jt!_#oIW#o#pJt#p~IW,TJkR#{WT+{O!^$t!_#o$t#p~$t+{JwROzJtz{KQ{~Jt+{KTTOzJtz{KQ{!PJt!P!QKd!Q~Jt+{KiOT+{,TKp^#{WxPOYHTYZIWZzHTz{Ki{!PHT!P!QLl!Q!^HT!^!_Mt!_!}HT!}#O!%e#O#P!(x#P#oHT#o#pMt#p~HT,TLu_#{WT+{xPO!^$t!_#Z$t#Z#[CZ#[#]$t#]#^CZ#^#a$t#a#bCZ#b#g$t#g#hCZ#h#i$t#i#jCZ#j#m$t#m#nCZ#n#o$t#p~$t+{MyYxPOYMtYZJtZzMtz{Ni{!PMt!P!Q!$a!Q!}Mt!}#O! w#O#P!#}#P~Mt+{NnYxPOYMtYZJtZzMtz{Ni{!PMt!P!Q! ^!Q!}Mt!}#O! w#O#P!#}#P~Mt+{! eUT+{xP#Z#[D{#]#^D{#a#bD{#g#hD{#i#jD{#m#nD{+{! zWOY! wYZJtZz! wz{!!d{#O! w#O#P!#k#P#QMt#Q~! w+{!!gYOY! wYZJtZz! wz{!!d{!P! w!P!Q!#V!Q#O! w#O#P!#k#P#QMt#Q~! w+{!#[TT+{OYEdZ#OEd#O#PEv#P#QDa#Q~Ed+{!#nTOY! wYZJtZz! wz{!!d{~! w+{!$QTOYMtYZJtZzMtz{Ni{~Mt+{!$f_xPOzJtz{KQ{#ZJt#Z#[!$a#[#]Jt#]#^!$a#^#aJt#a#b!$a#b#gJt#g#h!$a#h#iJt#i#j!$a#j#mJt#m#n!$a#n~Jt,T!%j[#{WOY!%eYZIWZz!%ez{!&`{!^!%e!^!_! w!_#O!%e#O#P!(W#P#QHT#Q#o!%e#o#p! w#p~!%e,T!&e^#{WOY!%eYZIWZz!%ez{!&`{!P!%e!P!Q!'a!Q!^!%e!^!_! w!_#O!%e#O#P!(W#P#QHT#Q#o!%e#o#p! w#p~!%e,T!'hY#{WT+{OYFYYZ$tZ!^FY!^!_Ed!_#OFY#O#PF}#P#QB^#Q#oFY#o#pEd#p~FY,T!(]X#{WOY!%eYZIWZz!%ez{!&`{!^!%e!^!_! w!_#o!%e#o#p! w#p~!%e,T!(}X#{WOYHTYZIWZzHTz{Ki{!^HT!^!_Mt!_#oHT#o#pMt#p~HT,T!)qc#{WxPOzIWz{Ir{!^IW!^!_Jt!_#ZIW#Z#[!)j#[#]IW#]#^!)j#^#aIW#a#b!)j#b#gIW#g#h!)j#h#iIW#i#j!)j#j#mIW#m#n!)j#n#oIW#o#pJt#p~IW,T!+TV#{WS+{OY!*|YZ$tZ!^!*|!^!_!+j!_#o!*|#o#p!+j#p~!*|+{!+oQS+{OY!+jZ~!+j$P!,O[#{W#f#vxPOYB^YZ$tZ!PB^!P!QCZ!Q!^B^!^!_Da!_!}B^!}#OFY#O#PGi#P#oB^#o#pDa#p~B^]!,}[#nS#{WxPOYB^YZ$tZ!PB^!P!QCZ!Q!^B^!^!_Da!_!}B^!}#OFY#O#PGi#P#oB^#o#pDa#p~B^y!-zd#{WjqO!O$t!O!P>Z!P!Q$t!Q![!/Y![!^$t!_!g$t!g!h?T!h#R$t#R#S!/Y#S#U$t#U#V!0p#V#X$t#X#Y?T#Y#b$t#b#c!0`#c#d!2O#d#l$t#l#m!3W#m#o$t#p~$ty!/a_#{WjqO!O$t!O!P>Z!P!Q$t!Q![!/Y![!^$t!_!g$t!g!h?T!h#R$t#R#S!/Y#S#X$t#X#Y?T#Y#b$t#b#c!0`#c#o$t#p~$ty!0gR#{WjqO!^$t!_#o$t#p~$ty!0uW#{WO!Q$t!Q!R!1_!R!S!1_!S!^$t!_#R$t#R#S!1_#S#o$t#p~$ty!1fW#{WjqO!Q$t!Q!R!1_!R!S!1_!S!^$t!_#R$t#R#S!1_#S#o$t#p~$ty!2TV#{WO!Q$t!Q!Y!2j!Y!^$t!_#R$t#R#S!2j#S#o$t#p~$ty!2qV#{WjqO!Q$t!Q!Y!2j!Y!^$t!_#R$t#R#S!2j#S#o$t#p~$ty!3]Z#{WO!Q$t!Q![!4O![!^$t!_!c$t!c!i!4O!i#R$t#R#S!4O#S#T$t#T#Z!4O#Z#o$t#p~$ty!4VZ#{WjqO!Q$t!Q![!4O![!^$t!_!c$t!c!i!4O!i#R$t#R#S!4O#S#T$t#T#Z!4O#Z#o$t#p~$t%w!5RR!WV#{W#d%hO!^$t!_#o$t#p~$t!P!5cR^w#{WO!^$t!_#o$t#p~$t+c!5wR'Ud![%Y#o&s'qP!P!Q!6Q!^!_!6V!_!`!6dW!6VO#}W#v!6[P#V#v!_!`!6_#v!6dO#f#v#v!6iO#W#v%w!6pT!t%o#{WO!^$t!_!`'V!`!a!7P!a#o$t#p~$t$P!7WR#O#w#{WO!^$t!_#o$t#p~$t%w!7lT'T!s#W#v#xS#{WO!^$t!_!`!7{!`!a!8]!a#o$t#p~$t$O!8SR#W#v#{WO!^$t!_#o$t#p~$t$O!8dT#V#v#{WO!^$t!_!`2l!`!a!8s!a#o$t#p~$t$O!8zS#V#v#{WO!^$t!_!`2l!`#o$t#p~$t%w!9_V'e%o#{WO!O$t!O!P!9t!P!^$t!_!a$t!a!b!:U!b#o$t#p~$t$`!9{Rr$W#{WO!^$t!_#o$t#p~$t$O!:]S#{W#a#vO!^$t!_!`2l!`#o$t#p~$t&e!:pRt&]#{WO!^$t!_#o$t#p~$tZ!;QRyR#{WO!^$t!_#o$t#p~$t$O!;bS#^#v#{WO!^$t!_!`2l!`#o$t#p~$t$P!;uR#{W']#wO!^$t!_#o$t#p~$t~!<TO!O~%r!<[T'l%j#{WO!^$t!_!`2l!`#o$t#p#q!:U#q~$t$u!<tR}$k#{W'_QO!^$t!_#o$t#p~$tX!=UR!fP#{WO!^$t!_#o$t#p~$t,T!=lr#{W#qS'Yp'P%k&}+{OX$tX^%S^p$tpq%Sqt$ttu/wu}$t}!O1R!O!Q$t!Q![/w![!^$t!_!c$t!c!}/w!}#R$t#R#S/w#S#T$t#T#o/w#p#y$t#y#z%S#z$f$t$f$g%S$g#BY/w#BY#BZ!=_#BZ$IS/w$IS$I_!=_$I_$I|/w$I|$JO!=_$JO$JT/w$JT$JU!=_$JU$KV/w$KV$KW!=_$KW&FU/w&FU&FV!=_&FV~/w",
  16703. tokenizers: [noSemicolon, incdecToken, template, 0, 1, 2, 3, 4, 5, 6, 7, 8, insertSemicolon],
  16704. topRules: { Script: [0, 6] },
  16705. dialects: { jsx: 11074, ts: 11076 },
  16706. dynamicPrecedences: { '140': 1, '167': 1 },
  16707. specialized: [
  16708. { term: 277, get: (value, stack) => (tsExtends(value, stack) << 1) | 1 },
  16709. { term: 277, get: value => spec_identifier$5[value] || -1 },
  16710. { term: 286, get: value => spec_word[value] || -1 },
  16711. { term: 58, get: value => spec_LessThan[value] || -1 }
  16712. ],
  16713. tokenPrec: 11096
  16714. })
  16715. const snippets = [
  16716. snippetCompletion('function ${name}(${params}) {\n\t${}\n}', { label: 'function', detail: 'definition', type: 'keyword' }),
  16717. snippetCompletion('for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\n\t${}\n}', { label: 'for', detail: 'loop', type: 'keyword' }),
  16718. snippetCompletion('for (let ${name} of ${collection}) {\n\t${}\n}', { label: 'for', detail: 'of loop', type: 'keyword' }),
  16719. snippetCompletion('try {\n\t${}\n} catch (${error}) {\n\t${}\n}', { label: 'try', detail: 'block', type: 'keyword' }),
  16720. snippetCompletion('class ${name} {\n\tconstructor(${params}) {\n\t\t${}\n\t}\n}', { label: 'class', detail: 'definition', type: 'keyword' }),
  16721. snippetCompletion('import {${names}} from "${module}"\n${}', { label: 'import', detail: 'named', type: 'keyword' }),
  16722. snippetCompletion('import ${name} from "${module}"\n${}', { label: 'import', detail: 'default', type: 'keyword' })
  16723. ]
  16724. const javascriptLanguage = LezerLanguage.define({
  16725. parser: parser$b.configure({
  16726. props: [
  16727. indentNodeProp.add({
  16728. IfStatement: continuedIndent({ except: /^\s*({|else\b)/ }),
  16729. TryStatement: continuedIndent({ except: /^\s*({|catch|finally)\b/ }),
  16730. LabeledStatement: flatIndent,
  16731. SwitchBody: context => {
  16732. let after = context.textAfter,
  16733. closed = /^\s*\}/.test(after),
  16734. isCase = /^\s*(case|default)\b/.test(after)
  16735. return context.baseIndent + (closed ? 0 : isCase ? 1 : 2) * context.unit
  16736. },
  16737. Block: delimitedIndent({ closing: '}' }),
  16738. ArrowFunction: cx => cx.baseIndent + cx.unit,
  16739. 'TemplateString BlockComment': () => -1,
  16740. 'Statement Property': continuedIndent({ except: /^{/ }),
  16741. JSXElement(context) {
  16742. let closed = /^\s*<\//.test(context.textAfter)
  16743. return context.lineIndent(context.state.doc.lineAt(context.node.from)) + (closed ? 0 : context.unit)
  16744. },
  16745. JSXEscape(context) {
  16746. let closed = /\s*\}/.test(context.textAfter)
  16747. return context.lineIndent(context.state.doc.lineAt(context.node.from)) + (closed ? 0 : context.unit)
  16748. },
  16749. 'JSXOpenTag JSXSelfClosingTag'(context) {
  16750. return context.column(context.node.from) + context.unit
  16751. }
  16752. }),
  16753. foldNodeProp.add({
  16754. 'Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression': foldInside$1,
  16755. BlockComment(tree) {
  16756. return { from: tree.from + 2, to: tree.to - 2 }
  16757. }
  16758. }),
  16759. styleTags({
  16760. 'get set async static': tags$1.modifier,
  16761. 'for while do if else switch try catch finally return throw break continue default case': tags$1.controlKeyword,
  16762. 'in of await yield void typeof delete instanceof': tags$1.operatorKeyword,
  16763. 'export import let var const function class extends': tags$1.definitionKeyword,
  16764. 'with debugger from as new': tags$1.keyword,
  16765. TemplateString: tags$1.special(tags$1.string),
  16766. Super: tags$1.atom,
  16767. BooleanLiteral: tags$1.bool,
  16768. this: tags$1.self,
  16769. null: tags$1.null,
  16770. Star: tags$1.modifier,
  16771. VariableName: tags$1.variableName,
  16772. 'CallExpression/VariableName': tags$1.function(tags$1.variableName),
  16773. VariableDefinition: tags$1.definition(tags$1.variableName),
  16774. Label: tags$1.labelName,
  16775. PropertyName: tags$1.propertyName,
  16776. 'CallExpression/MemberExpression/PropertyName': tags$1.function(tags$1.propertyName),
  16777. 'FunctionDeclaration/VariableDefinition': tags$1.function(tags$1.definition(tags$1.variableName)),
  16778. 'ClassDeclaration/VariableDefinition': tags$1.definition(tags$1.className),
  16779. PropertyNameDefinition: tags$1.definition(tags$1.propertyName),
  16780. UpdateOp: tags$1.updateOperator,
  16781. LineComment: tags$1.lineComment,
  16782. BlockComment: tags$1.blockComment,
  16783. Number: tags$1.number,
  16784. String: tags$1.string,
  16785. ArithOp: tags$1.arithmeticOperator,
  16786. LogicOp: tags$1.logicOperator,
  16787. BitOp: tags$1.bitwiseOperator,
  16788. CompareOp: tags$1.compareOperator,
  16789. RegExp: tags$1.regexp,
  16790. Equals: tags$1.definitionOperator,
  16791. 'Arrow : Spread': tags$1.punctuation,
  16792. '( )': tags$1.paren,
  16793. '[ ]': tags$1.squareBracket,
  16794. '{ }': tags$1.brace,
  16795. '.': tags$1.derefOperator,
  16796. ', ;': tags$1.separator,
  16797. TypeName: tags$1.typeName,
  16798. TypeDefinition: tags$1.definition(tags$1.typeName),
  16799. 'type enum interface implements namespace module declare': tags$1.definitionKeyword,
  16800. 'abstract global privacy readonly': tags$1.modifier,
  16801. 'is keyof unique infer': tags$1.operatorKeyword,
  16802. JSXAttributeValue: tags$1.string,
  16803. JSXText: tags$1.content,
  16804. 'JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag': tags$1.angleBracket,
  16805. 'JSXIdentifier JSXNameSpacedName': tags$1.tagName,
  16806. 'JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName': tags$1.propertyName
  16807. })
  16808. ]
  16809. }),
  16810. languageData: {
  16811. closeBrackets: { brackets: ['(', '[', '{', "'", '"', '`'] },
  16812. commentTokens: { line: '//', block: { open: '/*', close: '*/' } },
  16813. indentOnInput: /^\s*(?:case |default:|\{|\}|<\/)$/,
  16814. wordChars: '$'
  16815. }
  16816. })
  16817. const typescriptLanguage = javascriptLanguage.configure({ dialect: 'ts' })
  16818. const jsxLanguage = javascriptLanguage.configure({ dialect: 'jsx' })
  16819. const tsxLanguage = javascriptLanguage.configure({ dialect: 'jsx ts' })
  16820. function javascript(config = {}) {
  16821. let lang = config.jsx ? (config.typescript ? tsxLanguage : jsxLanguage) : config.typescript ? typescriptLanguage : javascriptLanguage
  16822. return new LanguageSupport(lang, javascriptLanguage.data.of({ autocomplete: ifNotIn(['LineComment', 'BlockComment', 'String'], completeFromList(snippets)) }))
  16823. }
  16824. function esLint(eslint, config) {
  16825. if (!config) {
  16826. config = { parserOptions: { ecmaVersion: 2019, sourceType: 'module' }, env: { browser: true, node: true, es6: true, es2015: true, es2017: true, es2020: true }, rules: {} }
  16827. eslint.getRules().forEach((desc, name) => {
  16828. if (desc.meta.docs.recommended) config.rules[name] = 2
  16829. })
  16830. }
  16831. return view => {
  16832. let { state } = view,
  16833. found = []
  16834. for (let _i195 = 0, _javascriptLanguage$f = javascriptLanguage.findRegions(state), _length195 = _javascriptLanguage$f.length; _i195 < _length195; _i195++) {
  16835. let { from, to } = _javascriptLanguage$f[_i195]
  16836. let fromLine = state.doc.lineAt(from),
  16837. offset = { line: fromLine.number - 1, col: from - fromLine.from, pos: from }
  16838. for (let _i196 = 0, _eslint$verify = eslint.verify(state.sliceDoc(from, to), config), _length196 = _eslint$verify.length; _i196 < _length196; _i196++) {
  16839. let d = _eslint$verify[_i196]
  16840. found.push(translateDiagnostic(d, state.doc, offset))
  16841. }
  16842. }
  16843. return found
  16844. }
  16845. }
  16846. function mapPos(line, col, doc, offset) {
  16847. return doc.line(line + offset.line).from + col + (line == 1 ? offset.col - 1 : -1)
  16848. }
  16849. function translateDiagnostic(input, doc, offset) {
  16850. let start = mapPos(input.line, input.column, doc, offset)
  16851. let result = {
  16852. from: start,
  16853. to: input.endLine != null && input.endColumn != 1 ? mapPos(input.endLine, input.endColumn, doc, offset) : start,
  16854. message: input.message,
  16855. source: input.ruleId ? 'jshint:' + input.ruleId : 'jshint',
  16856. severity: input.severity == 1 ? 'warning' : 'error'
  16857. }
  16858. if (input.fix) {
  16859. let { range, text } = input.fix,
  16860. from = range[0] + offset.pos - start,
  16861. to = range[1] + offset.pos - start
  16862. result.actions = [
  16863. {
  16864. name: 'fix',
  16865. apply(view, start) {
  16866. view.dispatch({ changes: { from: start + from, to: start + to, insert: text }, scrollIntoView: true })
  16867. }
  16868. }
  16869. ]
  16870. }
  16871. return result
  16872. }
  16873. var _m22 = Object.freeze({
  16874. __proto__: null,
  16875. esLint: esLint,
  16876. javascript: javascript,
  16877. javascriptLanguage: javascriptLanguage,
  16878. jsxLanguage: jsxLanguage,
  16879. snippets: snippets,
  16880. tsxLanguage: tsxLanguage,
  16881. typescriptLanguage: typescriptLanguage
  16882. })
  16883. const spec_identifier$4 = {
  16884. __proto__: null,
  16885. true: 34,
  16886. false: 34,
  16887. null: 40,
  16888. void: 44,
  16889. byte: 46,
  16890. short: 46,
  16891. int: 46,
  16892. long: 46,
  16893. char: 46,
  16894. float: 46,
  16895. double: 46,
  16896. boolean: 46,
  16897. extends: 60,
  16898. super: 62,
  16899. class: 74,
  16900. this: 76,
  16901. new: 82,
  16902. public: 98,
  16903. protected: 100,
  16904. private: 102,
  16905. abstract: 104,
  16906. static: 106,
  16907. final: 108,
  16908. strictfp: 110,
  16909. default: 112,
  16910. synchronized: 114,
  16911. native: 116,
  16912. transient: 118,
  16913. volatile: 120,
  16914. throws: 148,
  16915. implements: 158,
  16916. interface: 164,
  16917. enum: 174,
  16918. instanceof: 234,
  16919. open: 263,
  16920. module: 265,
  16921. requires: 270,
  16922. transitive: 272,
  16923. exports: 274,
  16924. to: 276,
  16925. opens: 278,
  16926. uses: 280,
  16927. provides: 282,
  16928. with: 284,
  16929. package: 288,
  16930. import: 292,
  16931. if: 304,
  16932. else: 306,
  16933. while: 310,
  16934. for: 314,
  16935. assert: 326,
  16936. switch: 330,
  16937. case: 336,
  16938. do: 340,
  16939. break: 344,
  16940. continue: 350,
  16941. return: 356,
  16942. throw: 362,
  16943. try: 366,
  16944. catch: 370,
  16945. finally: 378
  16946. }
  16947. const parser$a = Parser.deserialize({
  16948. version: 13,
  16949. states:
  16950. "#'fQ]QPOOO&nQQO'#H[O)OQQO'#CbOOQO'#Cb'#CbO)VQPO'#CaOOQO'#Ha'#HaOOQO'#Ct'#CtO*oQPO'#D^O+YQQO'#HhOOQO'#Hh'#HhO-nQQO'#HcO-uQQO'#HcOOQO'#Hc'#HcOOQO'#Hb'#HbO-|QPO'#DTO0PQPO'#GlO1dQPO'#D^O2tQPO'#DyO)VQPO'#EZO2{QPO'#EZOOQO'#DU'#DUO4nQQO'#H_O6rQQO'#EdO6yQPO'#EcO7OQPO'#EeOOQO'#H`'#H`O5UQQO'#H`O8RQQO'#FfO8YQPO'#EvO8_QPO'#E{O8_QPO'#E}OOQO'#H_'#H_OOQO'#HW'#HWOOQO'#Gf'#GfOOQO'#HV'#HVO9lQPO'#FgOOQO'#HU'#HUOOQO'#Ge'#GeQ]QPOOOOQO'#Hn'#HnO9qQPO'#HnO9vQPO'#DzO9vQPO'#EUO9vQPO'#EPO:OQPO'#HkO:aQQO'#EeO)VQPO'#C`O:iQPO'#C`O)VQPO'#FaO:nQPO'#FcO:yQPO'#FiO:yQPO'#FlO;OQPO'#FnO8_QPO'#FtO:yQPO'#FvO]QPO'#F{O;TQPO'#F}O;]QPO'#GQO;eQPO'#GTO:yQPO'#GVO8_QPO'#GWO;lQPO'#GYOOQO'#H['#H[O<]QQO,58{OOQO'#HY'#HYOOQO'#Hd'#HdO>aQPO,59dO?fQPO,59xOOQO-E:d-E:dO)VQPO,58zO@VQPO,58zO)VQPO,5;{O@[QPO'#DOO@aQPO'#DOOOQO'#Gh'#GhOAjQQO,59iOOQO'#Dl'#DlOBuQPO'#HpOCPQPO'#DkOC_QPO'#HoOCgQPO,5<]OClQPO,59]ODVQPO'#CwOOQO,59b,59bOD^QPO,59aOFfQQO'#CbO)_QPO'#D^OG_QQO'#HhOGrQQO,59oOGyQPO'#DuOHXQPO'#HwOHaQPO,5:_OHfQPO,5:_OH|QPO,5;lOIXQPO'#IOOIdQPO,5;cOIiQPO,5=WOOQO-E:j-E:jOOQO,5:e,5:eOJ|QPO,5:eOKTQPO,5:uOKYQPO,5<]O)VQPO,5:uO9vQPO,5:fO9vQPO,5:pO9vQPO,5:kOKyQPO,59pOLQQPO,5:|OM_QPO,5;PO8_QPO,59TOMmQPO'#DWOOQO,5:},5:}OOQO'#Ek'#EkOOQO'#Em'#EmO8_QPO,5;TO8_QPO,5;TO8_QPO,5;TO8_QPO,5;TO8_QPO,5;TO8_QPO,5;TO8_QPO,5;dOOQO,5;g,5;gOOQO,5<Q,5<QOMtQPO,5;`ONVQPO,5;bOMtQPO'#CxON^QQO'#HhONlQQO,5;iO]QPO,5<ROOQO-E:c-E:cOOQO,5>Y,5>YO! |QPO,5:fO!![QPO,5:pO!!dQPO,5:kO!!oQPO,5>VOGyQPO,5>VOKhQPO,59UO!!zQQO,58zO!#SQQO,5;{O!#[QQO,5;}O)VQPO,5;}O8_QPO'#DTO]QPO,5<TO]QPO,5<WO!#dQPO'#FpO]QPO,5<YO]QPO,5<^O!$^QQO,5<`O!$hQPO,5<bO!$mQPO,5<gOOQO'#GP'#GPOOQO,5<i,5<iO!$rQPO,5<iOOQO'#GS'#GSOOQO,5<l,5<lO!$wQPO,5<lO!$|QQO,5<oOOQO,5<o,5<oO;oQPO,5<qO!%TQQO,5<rO!%[QPO'#GcO!&_QPO,5<tO;oQPO,5<|O)VQPO,58}O!*VQPO'#ChOOQO1G.k1G.kO!*aQPO,59iO!!zQQO1G.fO)VQPO1G.fO!+bQQO1G1gOOQO'#Gi'#GiO!,hQQO,59jO@[QPO,59jOOQO-E:f-E:fO!-hQPO,5>[O!.PQPO,5:VO9vQPO'#GnO!.WQPO,5>ZOOQO1G1w1G1wOOQO1G.w1G.wO!.qQPO'#CxO!/^QPO'#HhO!/kQPO'#CyO!/yQPO'#HgO!0RQPO,59cOOQO1G.{1G.{OD^QPO1G.{O!0iQPO,59dO!0vQQO'#H[O!1XQQO'#CbOOQO,5:a,5:aO9vQPO,5:bOOQO,5:`,5:`O!1jQQO,5:`OOQO1G/Z1G/ZO!1oQPO,5:aO!2QQPO'#GqO!2eQPO,5>cOOQO1G/y1G/yO!2mQPO'#DuO!3OQPO'#D^O!3VQPO1G/yOMtQPO'#GoO!3[QPO1G1WO8_QPO1G1WO9vQPO'#GwO!3dQPO,5>jOOQO1G0}1G0}OOQO1G0P1G0PO!3lQPO'#E[OOQO1G0a1G0aO!4]QPO1G1wOKTQPO1G0aO! |QPO1G0QO!![QPO1G0[O!!dQPO1G0VOOQO1G/[1G/[O!4bQQO1G.pO6yQPO1G0iO)VQPO1G0iO:OQPO'#HkO!6UQQO1G.pOOQO1G.p1G.pO!7XQQO1G0hOOQO1G0k1G0kO!7`QPO1G0kO!7kQQO1G.oO!8OQQO'#HlO!8]QPO,59rO!9iQQO1G0oO!:}QQO1G0oO!<YQQO1G0oO!<gQQO1G0oO!=iQQO1G0oO!>PQQO1G0oO!>^QQO1G1OO!>eQQO'#HhOOQO1G0z1G0zO!?hQQO1G0|OOQO1G0|1G0|OOQO1G1m1G1mOK]QPO'#DpO!AfQPO'#DZOMtQPO'#D{OMtQPO'#D|OOQO1G0Q1G0QO!AmQPO1G0QO!ArQPO1G0QO!AzQPO1G0QO!BVQPO'#EWOOQO1G0[1G0[O!BjQPO1G0[O!BoQPO'#ESOMtQPO'#EROOQO1G0V1G0VO!CiQPO1G0VO!CnQPO1G0VO!CvQPO'#EgO!C}QPO'#EgOOQO'#Gv'#GvO!DVQQO1G0lO!EvQQO1G3qO6yQPO1G3qO!GuQPO'#FVOOQO1G.f1G.fOOQO1G1g1G1gO!G|QPO1G1iOOQO1G1i1G1iO!HXQQO1G1iO!HaQPO1G1oOOQO1G1r1G1rO)_QPO'#D^O+YQQO,5<_OGyQPO,5<_O!LRQPO,5<[O!LYQPO,5<[OOQO1G1t1G1tOOQO1G1x1G1xOOQO1G1z1G1zO8_QPO1G1zO# vQPO'#FxOOQO1G1|1G1|O:yQPO1G2ROOQO1G2T1G2TOOQO1G2W1G2WOOQO1G2Z1G2ZOOQO1G2]1G2]OOQO1G2^1G2^O#!uQQO'#H[O#!|QQO'#CbO+YQQO'#HhO##wQQOOO#$eQQO'#EdO#$SQQO'#H`OGyQPO'#GdO#$lQPO,5<}OOQO'#HO'#HOO#$tQPO1G2`O#(lQPO'#G[O;oQPO'#G`OOQO1G2`1G2`O#(qQPO1G2hOOQO1G.i1G.iO#-sQQO'#EdO#.QQQO'#H^O#.bQPO'#FROOQO'#H^'#H^O#.lQPO'#H^O#/ZQPO'#IRO#/cQPO,59SO#/hQPO,59jOOQO7+$Q7+$QO!!zQQO7+$QOOQO7+'R7+'ROOQO-E:g-E:gO#0|QQO1G/UO#1|QPO'#DnO#2WQQO'#HqOOQO'#Hq'#HqOOQO1G/q1G/qOOQO,5=Y,5=YOOQO-E:l-E:lO#2hQSO,58{O#2oQPO,59eOOQO,59e,59eOMtQPO'#HjOCqQPO'#GgO#2}QPO,5>ROOQO1G.}1G.}OOQO7+$g7+$gOOQO1G/z1G/zO#3VQQO1G/zOOQO1G/|1G/|O#3[QPO1G/zOOQO1G/{1G/{O9vQPO1G/|OOQO,5=],5=]OOQO-E:o-E:oOOQO7+%e7+%eOOQO,5=Z,5=ZOOQO-E:m-E:mO8_QPO7+&rOOQO7+&r7+&rOOQO,5=c,5=cOOQO-E:u-E:uO#3aQPO'#ETO#3oQPO'#ETOOQO'#Gu'#GuO#4WQPO,5:vOOQO,5:v,5:vOOQO7+'c7+'cOOQO7+%{7+%{OOQO7+%l7+%lO!AmQPO7+%lO!ArQPO7+%lO!AzQPO7+%lOOQO7+%v7+%vO!BjQPO7+%vOOQO7+%q7+%qO!CiQPO7+%qO!CnQPO7+%qOOQO7+&T7+&TOOQO'#Ed'#EdO6yQPO7+&TO6yQPO,5>VO#4wQPO7+$[OOQO7+&S7+&SOOQO7+&V7+&VO8_QPO'#GjO#5VQPO,5>WOOQO1G/^1G/^O8_QPO7+&jO#5bQQO,59dO#6eQPO'#DqOK]QPO'#DqO#6pQPO'#HtO#6xQPO,5:[O#7cQQO'#HdO#8OQQO'#CtOKYQPO'#HsO#8nQPO'#DoO#8xQPO'#HsO#9ZQPO'#DoO#9cQPO'#H|O#9hQPO'#E_OOQO'#Hm'#HmOOQO'#Gk'#GkO#9pQPO,59uOOQO,59u,59uO#9wQPO'#HnOOQO,5:g,5:gO#;_QPO'#HyOOQO'#EO'#EOOOQO,5:h,5:hO#;jQPO'#EXO9vQPO'#EXO#;{QPO'#HzO#<WQPO,5:rOKYQPO'#HsOMtQPO'#HsO#<`QPO'#DoOOQO'#Gs'#GsO#<gQPO,5:nOOQO,5:n,5:nOOQO,5:m,5:mOOQO,5;R,5;RO#=aQQO,5;RO#=hQPO,5;ROOQO-E:t-E:tOOQO7+&W7+&WOOQO7+)]7+)]O#=oQQO7+)]OOQO'#Gz'#GzO#?]QPO,5;qOOQO,5;q,5;qO#?dQPO'#FWO)VQPO'#FWO)VQPO'#FWO)VQPO'#FWO#?rQPO7+'TO#?wQPO7+'TOOQO7+'T7+'TO]QPO7+'ZO#@SQPO1G1yOKYQPO1G1yO#@bQQO1G1vOMmQPO1G1vO#@iQPO1G1vO#@pQQO7+'fOOQO'#G}'#G}O#@wQPO,5<dOOQO,5<d,5<dO#AOQPO'#HnO8_QPO'#FyO#AWQPO7+'mO#A]QPO,5=OOKYQPO,5=OO#AbQPO1G2iO#BhQPO1G2iOOQO1G2i1G2iOOQO-E:|-E:|OOQO7+'z7+'zO!2QQPO'#G^O;oQPO,5<vOOQO,5<z,5<zO#BpQPO7+(SOOQO7+(S7+(SO#FhQPO,59TO#FoQPO'#IQO#FwQPO,5;mO)VQPO'#GyO#F|QPO,5>mOOQO1G.n1G.nO#GUQPO1G/UOOQO<<Gl<<GlO#GlQPO'#HrO#GtQPO,5:YOOQO1G/P1G/POOQO,5>U,5>UOOQO,5=R,5=ROOQO-E:e-E:eO#GyQPO7+%fOOQO7+%f7+%fOOQO7+%h7+%hOOQO<<J^<<J^O#HaQPO'#H[O#HhQPO'#CbO#HoQPO,5:oO#HtQPO,5:wO#3aQPO,5:oOOQO-E:s-E:sOOQO1G0b1G0bOOQO<<IW<<IWO!AmQPO<<IWO!ArQPO<<IWOOQO<<Ib<<IbOOQO<<I]<<I]O!CiQPO<<I]OOQO<<Io<<IoO#HyQQO<<GvO6yQPO<<IoO)VQPO<<IoOOQO<<Gv<<GvO#JmQQO,5=UOOQO-E:h-E:hO#JzQQO<<JUOOQO,5:],5:]OMtQPO'#DrO#K_QPO,5:]OK]QPO'#GpO#KjQPO,5>`OOQO1G/v1G/vO#KrQPO'#HpO#KyQPO,59wO#LOQPO,5>_OKYQPO,59wO#LZQPO,5:ZO#9hQPO,5:yOKYQPO,5>_OMtQPO,5>_O#9cQPO,5>hOOQO,5:Z,5:ZOHfQPO'#DsOOQO,5>h,5>hO#LcQPO'#E`OOQO,5:y,5:yO$ ^QPO,5:yOMtQPO'#DwOOQO-E:i-E:iOOQO1G/a1G/aOOQO,5:x,5:xOMtQPO'#GrO$ cQPO,5>eOOQO,5:s,5:sO$ nQPO,5:sO$ |QPO,5:sO$!_QPO'#GtO$!uQPO,5>fO$#QQPO'#EYOOQO1G0^1G0^O$#XQPO1G0^OKYQPO,5:oOOQO-E:q-E:qOOQO1G0Y1G0YOOQO1G0m1G0mO$#^QQO1G0mOOQO<<Lw<<LwOOQO-E:x-E:xOOQO1G1]1G1]O$#eQQO,5;rOOQO'#G{'#G{O#?dQPO,5;rOOQO'#IS'#ISO$#mQQO,5;rO$$OQQO,5;rOOQO<<Jo<<JoO$$WQPO<<JoOOQO<<Ju<<JuO8_QPO7+'eO$$]QPO7+'eOMmQPO7+'bO$$kQPO7+'bO$$pQQO7+'bOOQO<<KQ<<KQOOQO-E:{-E:{OOQO1G2O1G2OOOQO,5<e,5<eO$$wQQO,5<eOOQO<<KX<<KXO8_QPO1G2jO$%OQPO1G2jOOQO,5=l,5=lOOQO7+(T7+(TO$%TQPO7+(TOOQO-E;O-E;OO$&oQSO'#HcO$&ZQSO'#HcO$&vQPO'#G_O9vQPO,5<xOGyQPO,5<xOOQO1G2b1G2bOOQO<<Kn<<KnO$'XQQO1G.oOOQO1G1Y1G1YO$'cQPO'#GxO$'pQPO,5>lOOQO1G1X1G1XO$'xQPO'#FSOOQO,5=e,5=eOOQO-E:w-E:wO$'}QPO'#GmO$([QPO,5>^OOQO1G/t1G/tOOQO<<IQ<<IQOOQO1G0Z1G0ZO$(dQPO1G0cO$(iQPO1G0ZO$(nQPO1G0cOOQOAN>rAN>rO!AmQPOAN>rOOQOAN>wAN>wOOQOAN?ZAN?ZO6yQPOAN?ZO$(sQPO,5:^OOQO1G/w1G/wOOQO,5=[,5=[OOQO-E:n-E:nO$)OQPO,5>bOOQO1G/c1G/cOOQO1G3y1G3yO$)aQPO1G/cOOQO1G/u1G/uOOQO1G0e1G0eO$ ^QPO1G0eO#9cQPO'#HvO$)fQPO1G3yOKYQPO1G3yOOQO1G4S1G4SO$)qQPO'#DuO)_QPO'#D^OOQO,5:z,5:zO$)xQPO,5:zO$)xQPO,5:zO$*PQQO'#H_O$+_QQO'#H`O$+iQQO'#EaO$+tQPO'#EaOOQO,5:c,5:cOOQO,5=^,5=^OOQO-E:p-E:pOOQO1G0_1G0_O$+|QPO1G0_OOQO,5=`,5=`OOQO-E:r-E:rO$,[QPO,5:tOOQO7+%x7+%xOOQO7+&X7+&XOOQO1G1^1G1^O$,cQQO1G1^OOQO-E:y-E:yO$,kQQO'#ITO$,fQPO1G1^O$#sQPO1G1^O)VQPO1G1^OOQOAN@ZAN@ZO$,vQQO<<KPO8_QPO<<KPO$,}QPO<<J|OOQO<<J|<<J|OMmQPO<<J|OOQO1G2P1G2PO$-SQQO7+(UO8_QPO7+(UOOQO<<Ko<<KoP!%[QPO'#HQOGyQPO'#HPO$-^QPO,5<yO$-iQPO1G2dO9vQPO1G2dOOQO,5=d,5=dOOQO-E:v-E:vO#FhQPO,5;nOOQO,5=X,5=XOOQO-E:k-E:kO$-nQPO7+%}OOQO7+%u7+%uO$-|QPO7+%}OOQOG24^G24^OOQOG24uG24uOOQO,59j,59jO$.RQPO1G/xO$.^QPO1G3|OOQO7+$}7+$}OOQO7+&P7+&POOQO7+)e7+)eO$.oQPO7+)eO!0WQPO,5:`OOQO1G0f1G0fO$.zQPO1G0fO$/RQPO,59pO$/gQPO,5:{O6yQPO,5:{OOQO7+%y7+%yOOQO7+&x7+&xO)VQPO'#G|O$/lQPO,5>oO$/tQPO7+&xO$/yQQO'#IUOOQOAN@kAN@kO$0UQQOAN@kOOQOAN@hAN@hO$0]QPOAN@hO$0bQQO<<KpO$0lQPO,5=kOOQO-E:}-E:}OOQO7+(O7+(OO$0}QPO7+(OO$1SQPO<<IiOOQO<<Ii<<IiO#FhQPO<<IiO$1SQPO<<IiOOQO1G/U1G/UOOQO<<MP<<MPOOQO7+&Q7+&QO$1bQPO1G0iO$1mQQO1G0gOOQO1G0g1G0gO$1uQPO1G0gO$1zQQO,5=hOOQO-E:z-E:zOOQO<<Jd<<JdO$2VQPO,5>pOOQOG26VG26VOOQOG26SG26SOOQO<<Kj<<KjOOQOAN?TAN?TO#FhQPOAN?TO$2_QPOAN?TO$2dQPOAN?TO6yQPO7+&RO$2rQPO7+&ROOQO7+&R7+&RO$2wQPOG24oOOQOG24oG24oO#FhQPOG24oO$2|QPO<<ImOOQO<<Im<<ImOOQOLD*ZLD*ZO$3RQPOLD*ZOOQOAN?XAN?XOOQO!$'Mu!$'MuO$3WQQO'#H[O)VQPO'#CaO@[QPO'#DOO@[QPO'#DOO$3nQQO,59iO$3xQQO'#CbOMtQPO'#CxO@[QPO,59jO@[QPO,59jO$4]QQO'#HhO$5dQQO,59dO$6kQPO'#DOO$6sQPO'#DOOMtQPO,5;`O$6{QQO1G.oO$8QQQO1G0oO$9PQQO1G0oO$9^QQO1G0oO$:YQQO1G0oO$:jQQO1G0|O$:qQQO<<JUOMtQPO'#CxOLQQPO,59TOLQQPO,5;TOLQQPO,5;TOLQQPO,5;TOLQQPO,5;TO$:xQPO,5;bOLQQPO7+&jO$;PQQO'#EdO$;^QQO'#H`O$;kQPO'#EvOLQQPO'#E{OLQQPO'#E}OLQQPO,5;TOLQQPO,5;TOLQQPO1G1WO$;pQQO1G0oO$<QQQO1G1OOLQQPO7+&rO$<XQPO,5;lO8_QPO,5;dO$<dQPO1G1WO-|QPO'#DT",
  16951. stateData:
  16952. "$<o~OPOSQOS%wOS~OZ^O_TO`TOaTObTOcTOdTOf[Og[Oo}OuyOviOy|O|aO!OtO!RwO!SwO!TwO!UwO!VwO!WwO!XwO!YxO!Z!]O![wO!]wO!^wO!t{O!yzO#dnO#pmO#rnO#snO#w!PO#x!OO$U!QO$W!RO$^!SO$a!TO$c!UO$i!VO$k!WO$p!XO$r!YO$u!ZO$x![O${!^O$}!_O%{SO%}QO&PPO&obO~OWhXW&OXZ&OXshXs&OX!a&OX#[&OX#^&OX#`&OX#b&OX#c&OX#d&OX#e&OX#f&OX#g&OX#i&OX#m&OX#p&OX%{hX%}hX&PhX&X&OX&YhX&Y&OX&i&OX&qhX&q&OX&s!`XY&OX~O!O&OX#n&OXt&OXp&OX{&OX~P$qOWUXW&WXZUXsUXs&WX!OUX!aUX#[UX#^UX#`UX#bUX#cUX#dUX#eUX#fUX#gUX#iUX#mUX#pUX%{&WX%}&WX&P&WX&XUX&YUX&Y&WX&iUX&qUX&q&WX&s!`X~O#n$[X~P'RO%}RO&P!`O~Of[Og[O!RwO!SwO!TwO!UwO!VwO!WwO!XwO!YxO![wO!]wO!^wO%{SO%}!cO&PUOf!QXg!QX%}!QX&P!QX~O#w!hO#x!gO$U!iOu!QX!t!QX!y!QX&o!QX~P)_OW!sOs!jO%{SO%}!nO&P!nO&q&[X~OW!vOs&VX%{&VX%}&VX&P&VX&q&VXY&VXv&VX&i&VX&l&VXZ&VXp&VX&X&VX!O&VX#^&VX#`&VX#b&VX#c&VX#d&VX#e&VX#f&VX#g&VX#i&VX#m&VX#p&VX|&VX!q&VX#n&VXt&VX{&VX~O&Y!tO~P+nO&Y&VX~P+nOZ^O_TO`TOaTObTOcTOdTOf[Og[Oo}OviOy|O!RwO!SwO!TwO!UwO!VwO!WwO!XwO!YxO![wO!]wO!^wO#dnO#pmO#rnO#snO%{SO%}!wO&P0eOY&kP~O%{SOf%`Xg%`Xu%`X!R%`X!S%`X!T%`X!U%`X!V%`X!W%`X!X%`X!Y%`X![%`X!]%`X!^%`X!t%`X!y%`X%}%`X&P%`X&o%`X&Y%`X~O!RwO!SwO!TwO!UwO!VwO!WwO!XwO!YxO![wO!]wO!^wOf!QXg!QXu!QX!t!QX!y!QX%}!QX&P!QX&o!QX&Y!QX~O{#UO~P]Of[Og[Ou#ZO!t#]O!y#[O%}!cO&PUO&o#YO~Os#_O&q#`O!O&RX#^&RX#`&RX#b&RX#c&RX#d&RX#e&RX#f&RX#g&RX#i&RX#m&RX#p&RX&X&RX&Y&RX&i&RX~OW#^OY&RX#n&RXt&RXp&RX{&RX~P3gO!a#aO#[#aOW&SXs&SX!O&SX#^&SX#`&SX#b&SX#c&SX#d&SX#e&SX#f&SX#g&SX#i&SX#m&SX#p&SX&X&SX&Y&SX&i&SX&q&SXY&SX#n&SXp&SX{&SX~OZ#WX~P5UOZ#bO~O&q#`O~O#^#fO#`#gO#b#hO#c#hO#d#iO#e#jO#f#kO#g#kO#i#oO#m#lO#p#mO&X#dO&Y#dO&i#eO~O!O#nO~P7TO&s#pO~OZ^O_TO`TOaTObTOcTOdTOf[Og[Oo}OviOy|O#dnO#pmO#rnO#snO%{SO%}0jO&PPO~O#n#tO~O!Z#vO~O%}!nO&P!nO~Of[Og[O%}!cO&PUO&Y!tO~OW#|O&q#`O~O#x!gO~O!V$QO%}RO&P!`O~OZ$RO~OZ$UO~O!O$]O%}$[O~O!O$`O%}$_O~O!O$cO~P8_OZ$fO|aO~OW$iOZ$jOfTagTa%{Ta%}Ta&PTa~OuTa!RTa!STa!TTa!UTa!VTa!WTa!XTa!YTa![Ta!]Ta!^Ta!tTa!yTa#wTa#xTa$UTa&oTasTaYTa&YTapTa{Ta!OTa~P;tO%{SOpla&XlaYla&ila!Ola~Os0gO&qla|la!qla~P={O!RwO!SwO!TwO!UwO!VwO!WwO!XwO!YxO![wO!]wO!^wO~Of!Qag!Qau!Qa!t!Qa!y!Qa%}!Qa&P!Qa&o!Qa&Y!Qa~P>qO#x$nO~Ot$pO~Os$rO%{SO~O%{qa&iqa#^qa#`qa#bqa#cqa#dqa#eqa#fqa#gqa#iqa#mqa#pqa&Xqa&Yqa~Os!jOWqa%}qa&Pqa&qqaYqavqa&lqa!Oqa#nqapqa{qa~P@iOs0gO%{SOp&dX!O&dX!a&dX~OY&dX#n&dX~PBdO!a$uOp!_X!O!_XY!_X~Op$vO!O&cX~O!O$xO~Ou$yO~Of[Og[O%{0fO%}!cO&PUO&]$|O~O&X&ZP~PCqO%{SO%}!cO&PUO~OWUXW&WXYUXZUXsUXs&WX!aUX#[UX#^UX#`UX#bUX#cUX#dUX#eUX#fUX#gUX#iUX#mUX#pUX%{&WX%}&WX&P&WX&XUX&YUX&Y&WX&iUX&qUX&q&WX&s!`X~OY!`XY&WXp!`Xv&WX&i&WX&l&WX~PDiOv%WO%{SO%}%TO&P%SO&l%VO~OW!sOs!jOY&[X&i&[X&q&[X~PF|OY%YO~P7TOf[Og[O%}!cO&PUO~Op%[OY&kX~OY%^O~Of[Og[O%{SO%}!cO&PUOY&kP~P>qOY%dO&i%bO&q#`O~Op%eO&s#pOY&rX~OY%gO~O%{SOf%`ag%`au%`a!R%`a!S%`a!T%`a!U%`a!V%`a!W%`a!X%`a!Y%`a![%`a!]%`a!^%`a!t%`a!y%`a%}%`a&P%`a&o%`a&Y%`a~O{%hO~P]O|%iO~Os0gO%{SO%}!nO&P!nO~Oo%uOv%vO%}RO&P!`O&Y!tO~Oy%tO~PKhOZ1bO_TO`TOaTObTOcTOdTOf[Og[Oo}OviOy|O#d1WO#p1VO#r1WO#s1WO%{SO%}0jO&PPO~Oy%xO%}RO&P!`O&Y!tO~OY&`P~P8_Of[Og[O%{SO%}!cO&PUO~O|aO~P8_OW!sOs!jO%{SO&q&[X~O#p#mO!O#qa#^#qa#`#qa#b#qa#c#qa#d#qa#e#qa#f#qa#g#qa#i#qa#m#qa&X#qa&Y#qa&i#qaY#qa#n#qat#qap#qa{#qa~On&]O|&[O!q&^O&Y&ZO~O|&cO!q&^O~On&gO|&fO&Y&ZO~OZ#bOs&kO%{SO~OW$iO|&qO~OW$iO!O&sO~OW&tO!O&uO~O!RwO!SwO!TwO!UwO!VwO!WwO!XwO!YxO![wO!]wO!^wO!O&`P~P8_O!O'QO#n'RO~P7TO|'SO~O$a'UO~O!O'VO~O!O'WO~O!O'XO~P7TO!O'ZO~P7TOZ$RO_TO`TOaTObTOcTOdTOf[Og[Oo}OviOy|O%{SO%}']O&P'[O~P>qO%P'fO%T'gOZ$|a_$|a`$|aa$|ab$|ac$|ad$|af$|ag$|ao$|au$|av$|ay$|a|$|a!O$|a!R$|a!S$|a!T$|a!U$|a!V$|a!W$|a!X$|a!Y$|a!Z$|a![$|a!]$|a!^$|a!t$|a!y$|a#d$|a#p$|a#r$|a#s$|a#w$|a#x$|a$U$|a$W$|a$^$|a$a$|a$c$|a$i$|a$k$|a$p$|a$r$|a$u$|a$x$|a${$|a$}$|a%u$|a%{$|a%}$|a&P$|a&o$|a{$|a$_$|a$n$|a~O|'mOY&uP~P8_Os0gO%{qa&qqa%}qa&Pqapqa&XqaYqavqa&iqa&lqa|qa!qqa&yqa!Oqa~OW$iO!O'uO~Ot$pOsra%{ra%}ra&Pra&qraYravra&ira&lra!Ora&Xra#nrapra~OWra#^ra#`ra#bra#cra#dra#era#fra#gra#ira#mra#pra&Yra{ra~P!+jOs0gO%{SOp&da!O&da!a&daY&da#n&da~O|'xO~P8_Op$vO!O&ca~Of[Og[O%{0fO%}!cO&PUO~O&](PO~P!.`O%{SOp&[X&X&[XY&[X&i&[X!O&[X~Os0gO|&[X!q&[X~P!.xOn(ROo(ROpmX&XmX~Op(SO&X&ZX~O&X(UO~Os0gOv(WO%{SO%}RO&P!`O~OYla&ila&qla~P!0WOW&OXY!`Xp!`Xs!`X%{!`X~OWUXY!`Xp!`Xs!`X%{!`X~OW(ZO~Os0gO%{SO%}!nO&P!nO&l(]O~Of[Og[O%{SO%}!cO&PUO~P>qOp%[OY&ka~Os0gO%{SO%}!nO&P!nO&l%VO~O%{SO~P1dOY(`O~OY(cO&i%bO~Op%eOY&ra~Of[Og[OuyO{(kO!t{O%{SO%}!cO&PUO&obO~P>qO!O(lO~OW^iZ#WXs^i!O^i!a^i#[^i#^^i#`^i#b^i#c^i#d^i#e^i#f^i#g^i#i^i#m^i#p^i&X^i&Y^i&i^i&q^iY^i#n^it^ip^i{^i~OW({O~O#^1XO#`0|O#b0}O#c0}O#d1OO#e1PO#f1YO#g1YO#i0rO#m1`O#p#mO&X#dO&Y#dO&i#eO~Ot(|O~P!6ZOy(}O%}RO&P!`O~O!O]iY]i#n]ip]i{]i~P7TOp)OOY&`X!O&`X~P7TOY)QO~O#p#mO!O#]i#^#]i#`#]i#b#]i#c#]i#d#]i#e#]i#i#]i#m#]i&X#]i&Y#]i&i#]iY#]i#n#]ip#]i{#]i~O#f#kO#g#kO~P!8bO#^#fO#e#jO#f#kO#g#kO#i#oO#p#mO&X#dO&Y#dO!O#]i#`#]i#b#]i#c#]i#m#]i&i#]iY#]i#n#]ip#]i{#]i~O#d#iO~P!9sO#^#fO#e#jO#f#kO#g#kO#i#oO#p#mO&X#dO&Y#dO!O#]i#b#]i#c#]i#m#]iY#]i#n#]ip#]i{#]i~O#`#gO#d#iO&i#eO~P!;UO#d#]i~P!9sO#p#mO!O#]i#`#]i#b#]i#c#]i#d#]i#e#]i#m#]i&i#]iY#]i#n#]ip#]i{#]i~O#^#fO#f#kO#g#kO#i#oO&X#dO&Y#dO~P!<nO#f#]i#g#]it#]i~P!8bO#n)RO~P7TOs!jO#^&[X#`&[X#b&[X#c&[X#d&[X#e&[X#f&[X#g&[X#i&[X#m&[X#p&[X&Y&[X#n&[X{&[X~P!.xO!O#jiY#ji#n#jip#ji{#ji~P7TOf[Og[OuyO|aO!O)aO!RwO!SwO!TwO!UwO!V)eO!WwO!XwO!YxO![wO!]wO!^wO!t{O!yzO%{SO%})XO&P)YO&Y&ZO&obO~O{)dO~P!?{O|&[O~O|&[O!q&^O~On&]O|&[O!q&^O~O%{SO%}!nO&P!nO{&nP!O&nP~P>qO|&cO~Of[Og[OuyO{)sO!O)qO!t{O!yzO%{SO%}!cO&PUO&Y&ZO&obO~P>qO|&fO~On&gO|&fO~Ot)uO~PLQOs)wO%{SO~Os&kO|'xO%{SOW#Yi!O#Yi#^#Yi#`#Yi#b#Yi#c#Yi#d#Yi#e#Yi#f#Yi#g#Yi#i#Yi#m#Yi#p#Yi&X#Yi&Y#Yi&i#Yi&q#YiY#Yi#n#Yit#Yip#Yi{#Yi~O|&[OW&_is&_i!O&_i#^&_i#`&_i#b&_i#c&_i#d&_i#e&_i#f&_i#g&_i#i&_i#m&_i#p&_i&X&_i&Y&_i&i&_i&q&_iY&_i#n&_it&_ip&_i{&_i~O#{*PO#}*QO$P*QO$Q*RO$R*SO~O{*OO~P!GdO$X*TO%}RO&P!`O~OW*UO!O*VO~O$_*WOZ$]i_$]i`$]ia$]ib$]ic$]id$]if$]ig$]io$]iu$]iv$]iy$]i|$]i!O$]i!R$]i!S$]i!T$]i!U$]i!V$]i!W$]i!X$]i!Y$]i!Z$]i![$]i!]$]i!^$]i!t$]i!y$]i#d$]i#p$]i#r$]i#s$]i#w$]i#x$]i$U$]i$W$]i$^$]i$a$]i$c$]i$i$]i$k$]i$p$]i$r$]i$u$]i$x$]i${$]i$}$]i%u$]i%{$]i%}$]i&P$]i&o$]i{$]i$n$]i~O!O*[O~P8_O!O*]O~OZ^O_TO`TOaTObTOcTOdTOf[Og[Oo}OuyOviOy|O|aO!OtO!RwO!SwO!TwO!UwO!VwO!WwO!XwO!Y*bO!Z!]O![wO!]wO!^wO!t{O!yzO#dnO#pmO#rnO#snO#w!PO#x!OO$U!QO$W!RO$^!SO$a!TO$c!UO$i!VO$k!WO$n*cO$p!XO$r!YO$u!ZO$x![O${!^O$}!_O%{SO%}QO&PPO&obO~O{*aO~P!L_OWhXW&OXY&OXZ&OXshXs&OX%{hX%}hX&PhX&YhX&qhX&q&OX~O!O&OX~P# }OWUXW&WXYUXZUXsUXs&WX!OUX%{&WX%}&WX&P&WX&Y&WX&qUX&q&WX~OW#^Os#_O&q#`O~OW&SXY%WXs&SX!O%WX&q&SX~OZ#WX~P#$SOY*iO!O*gO~O%P'fO%T'gOZ$|i_$|i`$|ia$|ib$|ic$|id$|if$|ig$|io$|iu$|iv$|iy$|i|$|i!O$|i!R$|i!S$|i!T$|i!U$|i!V$|i!W$|i!X$|i!Y$|i!Z$|i![$|i!]$|i!^$|i!t$|i!y$|i#d$|i#p$|i#r$|i#s$|i#w$|i#x$|i$U$|i$W$|i$^$|i$a$|i$c$|i$i$|i$k$|i$p$|i$r$|i$u$|i$x$|i${$|i$}$|i%u$|i%{$|i%}$|i&P$|i&o$|i{$|i$_$|i$n$|i~OZ*lO~O%P'fO%T'gOZ%Ui_%Ui`%Uia%Uib%Uic%Uid%Uif%Uig%Uio%Uiu%Uiv%Uiy%Ui|%Ui!O%Ui!R%Ui!S%Ui!T%Ui!U%Ui!V%Ui!W%Ui!X%Ui!Y%Ui!Z%Ui![%Ui!]%Ui!^%Ui!t%Ui!y%Ui#d%Ui#p%Ui#r%Ui#s%Ui#w%Ui#x%Ui$U%Ui$W%Ui$^%Ui$a%Ui$c%Ui$i%Ui$k%Ui$p%Ui$r%Ui$u%Ui$x%Ui${%Ui$}%Ui%u%Ui%{%Ui%}%Ui&P%Ui&o%Ui{%Ui$_%Ui$n%Ui~OW&SXZ#WXs&SX#^&SX#`&SX#b&SX#c&SX#d&SX#e&SX#f&SX#g&SX#i&SX#m&SX#p&SX&X&SX&Y&SX&i&SX&q&SX~O!a*qO#[#aOY&SX~P#,iOY&QXp&QX{&QX!O&QX~P7TO|'mO{&tP~P8_OY&QXf%YXg%YX%{%YX%}%YX&P%YXp&QX{&QX!O&QX~Op*tOY&uX~OY*vO~O!ara|ra!qra&yra!lra!Yra~P!+jOt$pOsri%{ri%}ri&Pri&qriYrivri&iri&lri!Ori&Xri#nripri~OWri#^ri#`ri#bri#cri#dri#eri#fri#gri#iri#mri#pri&Yri{ri~P#0OO|'xO{&fP~P8_Op&eX!O&eX{&eXY&eX~P7TO&]Ta~P;tOn(ROo(ROpma&Xma~Op(SO&X&Za~OW+PO~Ov+QO~Os0gO%{SO%}+UO&P+TO~Of[Og[Ou#ZO!t#]O%}!cO&PUO&o#YO~Of[Og[OuyO{+ZO!t{O%{SO%}!cO&PUO&obO~P>qOv+fO%}RO&P!`O&Y!tO~Op)OOY&`a!O&`a~Os!jO#^la#`la#bla#cla#dla#ela#fla#gla#ila#mla#pla&Yla#nla{la~P={On+kOp!eX&X!eX~Op+mO&X&hX~O&X+oO~OW&WXs&WX%{&WX%}&WX&P&WX&Y&WX~OZ!`X~P#6}OWhXshX%{hX%}hX&PhX&YhX~OZ!`X~P#7jOf[Og[Ou#ZO!t#]O!y#[O&Y&ZO&o#YO~O%})XO&P)YO~P#8VOf[Og[O%{SO%})XO&P)YO~O|aO!O+yO~OZ+zO~O|+|O!l,PO~O{,RO~P!?{O|aOf&bXg&bXu&bX!R&bX!S&bX!T&bX!U&bX!V&bX!W&bX!X&bX!Y&bX![&bX!]&bX!^&bX!t&bX!y&bX%{&bX%}&bX&P&bX&Y&bX&o&bX~Op,TO|&mX!O&mX~OZ#bO|&[Op!{X{!{X!O!{X~Op,YO{&nX!O&nX~O{,]O!O,[O~O&Y&ZO~P2{Of[Og[OuyO{,aO!O)qO!t{O!yzO%{SO%}!cO&PUO&Y&ZO&obO~P>qOt,bO~P!6ZOt,bO~PLQO|&[OW&_qs&_q!O&_q#^&_q#`&_q#b&_q#c&_q#d&_q#e&_q#f&_q#g&_q#i&_q#m&_q#p&_q&X&_q&Y&_q&i&_q&q&_qY&_q#n&_qt&_qp&_q{&_q~O{,fO~P!GdO!V,jO#|,jO%}RO&P!`O~O!O,mO~O$X,nO%}RO&P!`O~O!a$uO#n,pOp!_X!O!_X~O!O,rO~P7TO!O,rO~P8_O!O,uO~P7TO{,wO~P!L_O!Z#vO#n,xO~O!O,zO~O!a,{O~OY-OOZ$RO_TO`TOaTObTOcTOdTOf[Og[Oo}OviOy|O%{SO%}']O&P'[O~P>qOY-OO!O-PO~O%P'fO%T'gOZ%Uq_%Uq`%Uqa%Uqb%Uqc%Uqd%Uqf%Uqg%Uqo%Uqu%Uqv%Uqy%Uq|%Uq!O%Uq!R%Uq!S%Uq!T%Uq!U%Uq!V%Uq!W%Uq!X%Uq!Y%Uq!Z%Uq![%Uq!]%Uq!^%Uq!t%Uq!y%Uq#d%Uq#p%Uq#r%Uq#s%Uq#w%Uq#x%Uq$U%Uq$W%Uq$^%Uq$a%Uq$c%Uq$i%Uq$k%Uq$p%Uq$r%Uq$u%Uq$x%Uq${%Uq$}%Uq%u%Uq%{%Uq%}%Uq&P%Uq&o%Uq{%Uq$_%Uq$n%Uq~O|'mO~P8_Op-[O{&tX~O{-^O~Op*tOY&ua~O!ari|ri!qri&yri!lri!Yri~P#0OOp-bO{&fX~O{-dO~Ov-eO~Op!`Xs!`X!O!`X!a!`X%{!`X~OZ&OX~P#HOOZUX~P#HOO!O-fO~OZ-gO~OW^yZ#WXs^y!O^y!a^y#[^y#^^y#`^y#b^y#c^y#d^y#e^y#f^y#g^y#i^y#m^y#p^y&X^y&Y^y&i^y&q^yY^y#n^yt^yp^y{^y~OY%^ap%^a!O%^a~P7TO!O#lyY#ly#n#lyp#ly{#ly~P7TOn+kOp!ea&X!ea~Op+mO&X&ha~OZ+zO~PBdO!O-tO~O!l,PO|&ga!O&ga~O|aO!O-wO~OZ^O_TO`TOaTObTOcTOdTOf[Og[Oo.VOuyOv.UOy|O{.QO|aO!OtO!Z!]O!t{O!yzO#dnO#pmO#rnO#snO#w!PO#x!OO$U!QO$W!RO$^!SO$a!TO$c!UO$i!VO$k!WO$p!XO$r!YO$u!ZO$x![O${!^O$}!_O%{SO%}QO&PPO&Y!tO&obO~P>qO|+|O~Op,TO|&ma!O&ma~O|&[Op!{a{!{a!O!{a~OZ#bO|&[Op!{a{!{a!O!{a~O%{SO%}!nO&P!nOp%hX{%hX!O%hX~P>qOp,YO{&na!O&na~O{!|X~P!?{O{.aO~Ot.bO~P!6ZOW$iO!O.cO~OW$iO$O.hO%}RO&P!`O!O&wP~OW$iO$S.iO~O!O.jO~O!a$uO#n.lOp!_X!O!_X~OY.nO~O!O.oO~P7TO#n.pO~P7TO!a.rO~OY.sOZ$RO_TO`TOaTObTOcTOdTOf[Og[Oo}OviOy|O%{SO%}']O&P'[O~P>qOW!vOs&VX%{&VX%}&VX&P&VX&y&VX~O&Y!tO~P$&ZOs0gO%{SO&y.uO%}%RX&P%RX~OY&QXp&QX~P7TO|'mOp%lX{%lX~P8_Op-[O{&ta~O!a.{O~O|'xOp%aX{%aX~P8_Op-bO{&fa~OY/OO~O!O/PO~OZ/QO~O&i%bOp!fa&X!fa~Os0gO%{SO|&ja!O&ja!l&ja~O!O/WO~O!l,PO|&gi!O&gi~Os0gO~PF|O{/]O~P]OW/_O~P3gOW&SXs&SX#^&SX#`&SX#b&SX#c&SX#d&SX#e&SX#f&SX#g&SX#i&SX#m&SX#p&SX&X&SX&Y&SX&i&SX&q&SX~OZ#bO!O&SX~P$*WOW#|OZ#bO&q#`O~Oo/aOv/aO~O|&[Op!{i{!{i!O!{i~O{!|a~P!?{OW$iO!O/cO~OW$iOp/dO!O&wX~OY/hO~P7TOY/jO~OY%Wq!O%Wq~P7TO&y.uO%}%Ra&P%Ra~OY/oO~Os0gO!O/rO!Y/sO%{SO~OY/tO~O&i%bOp!fi&X!fi~Os0gO%{SO|&ji!O&ji!l&ji~O!l,PO|&gq!O&gq~O{/wO~P]Oo/yOv%vOy%tO%}RO&P!`O&Y!tO~O!O/zO~Op/dO!O&wa~O!O0OO~OW$iOp/dO!O&xX~OY0QO~P7TOY0RO~OY%Wy!O%Wy~P7TOs0gO%{SO%}%sa&P%sa&y%sa~OY0SO~Os0gO!O0TO!Y0UO%{SO~Oo0XO%}RO&P!`O~OW({OZ#bO~O!O0ZO~OW$iOp%pa!O%pa~Op/dO!O&xa~O!O0]O~Os0gO!O0]O!Y0^O%{SO~O!O0`O~O!O0aO~O!O0cO~O!O0dO~OYhXY!`Xp!`XvhX&ihX&lhX~P$qOs0hOtqa~P@iO#nUXYUXtUXpUX{UX~P'ROs0hO%{SOt&[X#^&[X#`&[X#b&[X#c&[X#d&[X#e&[X#f&[X#g&[X#i&[X#m&[X#p&[X&X&[X&Y&[X&i&[X~Os0hO%{SOtla#^la#`la#bla#cla#dla#ela#fla#gla#ila#mla#pla&Xla&Yla&ila~Os0lO%{SO~Os0mO%{SO~Ot]i~P!6ZO#^1XO#e1PO#f1YO#g1YO#i0rO#p#mO&X#dO&Y#dOt#]i#`#]i#b#]i#c#]i#m#]i&i#]i~O#d1OO~P$7SO#^1XO#e1PO#f1YO#g1YO#i0rO#p#mO&X#dO&Y#dOt#]i#b#]i#c#]i#m#]i~O#`0|O#d1OO&i#eO~P$8XO#d#]i~P$7SO#f1YO#g1YO#p#mOt#]i#`#]i#b#]i#c#]i#d#]i#e#]i#m#]i&i#]i~O#^1XO#i0rO&X#dO&Y#dO~P$9eOt#ji~P!6ZOt#ly~P!6ZO|aO~PLQO!a0{O#[0{Ot&SX~P#,iO!a0{O#[0{Ot&SX~P$*WO&s1QO~O#^#]i#i#]i&X#]i&Y#]i~P$9eO#n1RO~P7TOY1ZO&i%bO&q#`O~OY1^O&i%bO~O`#e~",
  16953. goto:
  16954. "#1q&yPPPP&z'_+T.iP'_PP.}/R0vPPPPPP2sPP4l7n:j=f>O@TPPP@ZCQPPPPC}2sPFVPPGQPGwG}PPPPPPPPPPPPIXInPMTM]MgNPNVN]!!^!!c!!c!!lP!!{!$S!$u!%PP!%f!$SP!%l!%v!&V!&_P!&|!'W!'^!$S!'a!'gGwGw!'k!'u!'x2s!)u2s2s!+}P/RP!,RP!,|PPPPPP/RP/R!-q/RPP/RP/RPP/R!/h!/rPP!/x!0RPPPPPPPP&zP&zPP!0V!0V!0j!0VPP!0VP!0VP!0}!1Q!0V!1h!0VP!0VP!1k!1nP!0VP!0VP!1r!0VP!1u!0VP!0V!0VP!0VP!1xP!2O!2R!2XP!0V!2e!2h!2p!3S!7l!7r!8}!9g!9m!9w!:|!;S!;Y!;h!;n!;t!;z!<Q!<W!<^!<d!<j!<p!<v!<|!=S!=^!=d!=n!=tPPP!=z!0V!>oP!BgP!CkP!F]!Fs!Jb2s!L_#!`#%`PP#([#(_P#*z#+Q#,}#-^#-d#.e#.{#/t#/}#0Q#0^P#0a#0mP#0u#0|P#1PP#1YP#1^#1a#1d#1h#1nsrOav!X#V#t$S$T$V$W'S*W*`+|.R.S/^(gpOVW^_amnv!V!X![!^!d!k!o!t!v!x!y#O#S#V#X#_#a#b#f#g#h#i#j#k#l#o#p#q#r#t#z$R$S$T$U$V$W$f$j$t$u$z${%Q%R%Z%[%_%`%b%d%i&U&Z&[&]&^&c&f&g&k&l&n&y&z&|'R'S'^'m'x(R(S(c(g(j)O)R)S)U)Z)])c)n)o)r)w*W*Y*[*]*`*c*f*g*l*q+X+k+m+p+s+v+w+z+|,P,T,Y,[,_,p,r,{-P-T-[-b-s-|.O.P.R.S.`.l.o.r.t.{/O/V/[/^/m/q/s/t0U0W0^0k0n0o0p0q0r0z0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1b#pfO^amnv!V!X![!^#V#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$u%d&|'R'S'm'x(c)O)R*W*[*]*`*c*q+|,p,r,{-[-b.R.S.l.o.r.{/^/s0U0^1`1bt!bS!O!Q!R!g!i$Q$n*P*Q*R*S,i,k.h.i/d0fQ#WbS%X!y.OQ%l#YU%q#^#|/_Q%x#`W'`$f*g-P.tU'j$i&t*UQ'k$jS(X%R/[U(x%s+e/xQ(}%yQ+W(gQ+c({Q-_*tQ-i+Xq1S#_&k)w0{0|0}1O1P1Q1R1V1W1X1Y1Z1^u!bS!O!Q!R!g!i$Q$n*P*Q*R*S,i,k.h.i/d0fT$k!a(O$eoO^amnv!V!X![!^#V#_#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$j$u%d&k&|'R'S'm'x(c)O)R)w*W*[*]*`*c*q+|,p,r,{-[-b.R.S.l.o.r.{/^/s0U0^0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1b#rjO^amnv!V!X![!^#V#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$j$u%d&|'R'S'm'x(c)O)R*W*[*]*`*c*q+|,p,r,{-[-b.R.S.l.o.r.{/^/s0U0^1`1bW'a$f*g-P.tq1T#_&k)w0{0|0}1O1P1Q1R1V1W1X1Y1Z1^$miO^amnv!V!X![!^#V#_#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$f$j$u%d&k&|'R'S'm'x(c)O)R)w*W*[*]*`*c*g*q+|,p,r,{-P-[-b.R.S.l.o.r.t.{/^/s0U0^0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1b&hYOV^acmnv|!V!X![!^!t!x!{#O#V#_#a#b#f#g#h#i#j#k#l#o#p#q#t#{$R$S$T$U$V$W$f$j$u$z%[%b%d%i%t&[&]&^&f&g&k&y&{&|'R'S'b'm'x(R(S(c(h(j)O)R)[)])c)o)p)r)w*W*[*]*`*c*g*q+k+w+z+|,P,T,[,p,r,{-P-[-b.P.R.S.`.l.o.r.t.{/^/s0U0^0k0r0z0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1bQ%P!vQ(V%QV-R*l-V.u&hYOV^acmnv|!V!X![!^!t!x!{#O#V#_#a#b#f#g#h#i#j#k#l#o#p#q#t#{$R$S$T$U$V$W$f$j$u$z%[%b%d%i%t&[&]&^&f&g&k&y&{&|'R'S'b'm'x(R(S(c(h(j)O)R)[)])c)o)p)r)w*W*[*]*`*c*g*q+k+w+z+|,P,T,[,p,r,{-P-[-b.P.R.S.`.l.o.r.t.{/^/s0U0^0k0r0z0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1bV-R*l-V.u&hZOV^acmnv|!V!X![!^!t!x!{#O#V#_#a#b#f#g#h#i#j#k#l#o#p#q#t#{$R$S$T$U$V$W$f$j$u$z%[%b%d%i%t&[&]&^&f&g&k&y&{&|'R'S'b'm'x(R(S(c(h(j)O)R)[)])c)o)p)r)w*W*[*]*`*c*g*q+k+w+z+|,P,T,[,p,r,{-P-[-b.P.R.S.`.l.o.r.t.{/^/s0U0^0k0r0z0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1bV-S*l-V.uS!uY-RS#{|%tS%s#^#|Q%y#`Q+e({Q.W+|R/x/_%VXO^amnv!V!X![!^!t#V#_#a#b#f#g#h#i#j#k#l#o#p#t$R$S$T$U$V$W$f$j$u%b%d&]&^&g&k&|'R'S'm'x(R(S(c)O)R)w*W*[*]*`*c*g*q+k+|,P,T,p,r,{-P-[-b.R.S.l.o.r.t.{/^/s0U0^0r0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1bQ$}!tR*}(S&i]OV^acmnv!V!X![!^!t!x!{#O#V#_#a#b#f#g#h#i#j#k#l#o#p#q#t$R$S$T$U$V$W$f$j$u$z%[%b%d%i&[&]&^&f&g&k&y&{&|'R'S'b'm'x(R(S(c(h(j)O)R)[)])c)o)p)r)w*W*[*]*`*c*g*l*q+k+w+z+|,P,T,[,p,r,{-P-V-[-b.P.R.S.`.l.o.r.t.u.{/^/s0U0^0k0r0z0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1b!u!lW!d!m!o!y#X#r$l$t${%R%Z%_&U&z'^(g)S)Z)n*Y*f+X+p+s+v,_-T-s-|.O/O/V/[/m/q/t0W0i0n0o$liO^amnv!V!X![!^#V#_#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$f$j$u%d&k&|'R'S'm'x(c)O)R)w*W*[*]*`*c*g*q+|,p,r,{-P-[-b.R.S.l.o.r.t.{/^/s0U0^0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1bQ$S!SQ$T!TQ$Y!WQ$d!]R*d'UQ#cgS&o#z(zQ(w%rQ){&pQ+b(yQ,W)jQ-m+dQ.],XQ/S-nS/`.U.VQ/{/aQ0Y/yR0_0XQ&_#wW(n%m&`&a&bQ)z&oU+[(o(p(qQ,V)jQ,d){S-j+]+^S.[,W,XQ/R-kR/b.]X)a&[)c,[.`rcOav!X#V#t$S$T$V$W'S*W*`+|.R.S/^Y!{^#O%[+z1bQ&{$UW'b$f*g-P.tS(h%i(jW)[&[)c,[.`S)k&c,YS)p&f)rR-V*ld!qW#X&z(g)Z)n*Y+X+s,_Q'|$vQ(Y%VR+R(]#nlOamnv!V!X![!^#V#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$j$u%d&|'R'S'm'x(c)O)R*W*[*]*`*c*q+|,p,r,{-[-b.R.S.l.o.r.{/^/s0U0^1`r!oW!y#X$v%V%Z%_&z'^(](g*Y*f+X-U.O.xS#Q^1bQ#wyQ#xzQ#y{Q%m#ZQ%n#[Q%o#]Q(e%eS)T&Z+mY)_&[)[)c,[.`S)j&c,YQ+l)UW+p)Z)n+s,_Q+x)]Q,X)kS-z+v-|q1U#_&k)w0{0|0}1O1P1Q1R1V1W1X1Y1Z1^U'z$u'x-bR)y&nW)a&[)c,[.`T)q&f)rQ&b#wQ&j#yQ(q%mQ(v%oY)]&[)[)c,[.`V)o&f)p)rQ)V&ZR-q+mQ+j)TR-p+l#rlO^amnv!V!X![!^#V#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$j$u%d&|'R'S'm'x(c)O)R*W*[*]*`*c*q+|,p,r,{-[-b.R.S.l.o.r.{/^/s0U0^1`1bQ+{)_S-s+p-zQ-}+xq1U#_&k)w0{0|0}1O1P1Q1R1V1W1X1Y1Z1^V#O^+z1bW!|^#O+z1bR(^%[Q,O)`Q-u+rQ-y+uQ/Y-{R/v/ZrtOav!X#V#t$S$T$V$W'S*W*`+|.R.S/^Q$g!_S&X#p1QQ'Y$dQ'i$hW)a&[)c,[.`Q*n'gQ+y)^Q,S)eQ-W*mR-w+trrOav!X#V#t$S$T$V$W'S*W*`+|.R.S/^S(i%i(jW)a&[)c,[.`T)q&f)rQ&a#wS(p%m&bR+^(qQ&`#wQ&e#xU(o%m&a&bQ(s%nS+](p(qR-k+^Q)i&^R)t&gQ&i#yS(u%o&jR+a(vQ&h#yU(t%o&i&jS+`(u(vR-l+aS(i%i(jT)q&f)rrrOav!X#V#t$S$T$V$W'S*W*`+|.R.S/^W)a&[)c,[.`T)q&f)rQ&d#xS(r%n&eR+_(sQ)l&cR.^,YR,^)mQ%j#WR(m%lT(i%i(jQ+})`S-x+u,OR/X-yR.S+|Wi$f*g-P.t#rjO^amnv!V!X![!^#V#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$j$u%d&|'R'S'm'x(c)O)R*W*[*]*`*c*q+|,p,r,{-[-b.R.S.l.o.r.{/^/s0U0^1`1bq1T#_&k)w0{0|0}1O1P1Q1R1V1W1X1Y1Z1^$lgO^amnv!V!X![!^#V#_#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$f$j$u%d&k&|'R'S'm'x(c)O)R)w*W*[*]*`*c*g*q+|,p,r,{-P-[-b.R.S.l.o.r.t.{/^/s0U0^0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1bU%r#^#|/_S(y%s/xQ+d({R-n+eT&m#z&n!W#fk!z$X$b$e%z%{&O&P&Q&R&T&W'l'y*Z*^+g+i,t,y-Y.k.q/i/l1]e1X%w)v,c0s0t0u0v0w0x0y!Q#gk!z$X$b$e%z%{&P&T&W'l'y*Z*^+g+i,t,y-Y.k.q/i/l1]_0|%w)v,c0s0u0x0y#rlO^amnv!V!X![!^#V#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$j$u%d&|'R'S'm'x(c)O)R*W*[*]*`*c*q+|,p,r,{-[-b.R.S.l.o.r.{/^/s0U0^1`1bq1U#_&k)w0{0|0}1O1P1Q1R1V1W1X1Y1Z1^a'n$j'm*q-[.{/s0U0^Q'p$jR-`*tQ&r#}Q's$mR*x'tT)|&q)}stOav!X#V#t$S$T$V$W'S*W*`+|.R.S/^ssOav!X#V#t$S$T$V$W'S*W*`+|.R.S/^R$V!UrtOav!X#V#t$S$T$V$W'S*W*`+|.R.S/^R&|$UR$W!UR'T$YT*_'S*`R$^!YR$a!ZX'd$g'e'i*oR*m'fQ-U*lR.x-VQ'h$gQ*k'eQ*p'iR-X*oR$h!_Q'c$fV,}*g-P.tQvOQ#VaW#uv#V.R/^Q.R+|R/^.SrVOav!X#V#t$S$T$V$W'S*W*`+|.R.S/^r!fV!k!x#S#q$z%Q%`&l&y)U+w.P0k0p0q0z^!kW!y#r&U&z'^)SS!x^1bQ#S_#z#qmn!V![!^#_#a#b#f#g#h#i#j#k#l#p$R$j$u%b%d&]&^&g&k&|'R'm'x(R(c)O)R)w*[*]*c*q+k,P,T,p,r,{-[-b.l.o.r.{/s0U0^0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`S$z!t(SQ%Q!vj%`#O%[%i&[&c&f(j)c)r*l,Y,[.`S&l#z&nY&y$U$f*g-P.tS)U&Z+mS+w)])oQ.P+zQ0k#o![0p!d!o#X$t${%R%Z%_(g)Z)n*Y*f+X+p+s+v,_-T-s-|.O/O/V/[/m/q/t0WS0q0n0oR0z0rQ(T$}R+O(T^!mW!y#r&U&z'^)Sx$l!d#X${%R%Z%_(g)Z)n*Y*f+X+s+v,_-T-|.O/[/m^$s!m$l$t/V/q0W0iS$t!o+pQ/V-sQ/q/OQ0W/tT0i0n0oQ$q!jQ'r0gW'v$q'r'w*wQ'w$rQ*w0lQ/T0hR/u0mQ)P%{R+h)PQ)c&[S,Q)c.`R.`,[!n`O^av!X#O#V#t$S$T$U$V$W$f%[%i&[&c&f'S(j)c)r*W*`*g*l+z+|,Y,[-P.R.S.`.t/^1bY!eV!x%`&y.PT#T`!eQ-c*yR.}-cQ$w!qR'}$wQ%c#PU(b%c/U1aQ/U-oR1a1_Q+n)VR-r+nQ%]!|R(_%]Q,U)gR.Z,UQ)r&fR,`)rQ,Z)lR._,ZQ(j%iR+Y(jQ&n#zR)x&nQ%f#QR(f%fQ-]*rR.z-]Q*u'pR-a*uQ)}&qR,e)}Q,i*PR.e,iQ/e.fS/}/e0PR0P/gQ*`'SR,v*`Q'e$gS*j'e*oR*o'iQ.v-TR/n.vQ*h'cR-Q*h`uOav#V+|.R.S/^Q$Z!XQ&Y#tQ&w$SQ&x$TQ'O$VQ'P$WS*_'S*`R,o*W(UqOVW^_amnv!V!X![!^!d!k!o!t!v!x!y#O#S#V#X#_#a#b#f#g#h#i#j#k#l#o#p#q#r#t#z$R$S$T$U$V$W$f$t$u$z${%Q%R%Z%[%_%`%b%d%i&U&Z&[&]&^&c&f&g&k&l&n&y&z&|'R'S'^'x(R(S(c(g(j)O)R)S)U)Z)])c)n)o)r)w*W*Y*[*]*`*c*f*g*l+X+k+m+p+s+v+w+z+|,P,T,Y,[,_,p,r,{-P-T-b-s-|.O.P.R.S.`.l.o.r.t/O/V/[/^/m/q/t0W0k0n0o0p0q0r0z0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1ba'o$j'm*q-[.{/s0U0^Q!aSQ#}!OQ$O!QQ$P!RQ$m!gQ$o!iQ&v$QQ't$nQ(O0fS,g*P*RQ,k*QQ,l*SQ.d,iS.f,k.hQ/g.iR/|/d&_ROS^abmnv!O!Q!R!V!X![!^!g!i!y#V#Y#^#_#`#a#b#f#g#h#i#j#k#l#p#t#|$Q$R$S$T$U$V$W$f$i$j$n$u%R%d%s%y&k&t&|'R'S'm'x(c(g({)O)R)w*P*Q*R*S*U*W*[*]*`*c*g*q*t+X+e+|,i,k,p,r,{-P-[-b.O.R.S.h.i.l.o.r.t.{/[/^/_/d/s/x0U0^0f0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1bQ'q$jQ*r'mS-Z*q.{Q.y-[Q0V/sQ0[0UR0b0^rkOav!X#V#t$S$T$V$W'S*W*`+|.R.S/^U!z^$R1bS#mm1VS#sn1WQ$X!VQ$b![Q$e!^Q%w#_Q%z#aY%{#b$U*[,r.oQ%}#fQ&O#gQ&P#hQ&Q#iQ&R#jS&S#k1YQ&T#lQ&W#p^'l$j'm-[.{/s0U0^U'y$u'x-bS(d%d1ZQ)v&kQ*Z&|Q*^'RS+S(c1^Q+g)OQ+i)RQ,c)wQ,t*]Q,y*cQ-Y*qQ.k,pQ.q,{Q/i.lQ/l.rQ0s0{Q0t0|Q0u0}Q0v1OQ0w1PQ0x1QQ0y1RQ1[1XR1]1`$beO^amnv!V!X![!^#V#_#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$j$u%d&k&|'R'S'm'x(c)O)R)w*W*[*]*`*c*q,p,r,{-[-b.R.S.l.o.r.{/^/s0U0^0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1bW'_$f*g-P.tR.T+|rWOav!X#V#t$S$T$V$W'S*W*`+|.R.S/^W!dV#q$z&yS!y^1bQ#Xc#j#rmn!V![!^#_#a#b#f#g#h#i#j#k#l#p$R$j$u%d&k&|'R'm'x(c)O)R)w*[*]*c*q,p,r,{-[-b.l.o.r.{/s0U0^0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`d${!t%b&]&^&g(R(S+k,P,TQ%R!xQ%Z!{S%_#O%[Q&U#oQ&z$UW'^$f*g-P.tS(g%i(jQ)S0kW)Z&[)c,[.`S)n&f)rQ*Y&{Q*f'bQ+X(hQ+s)[S+v)])oQ,_)pS-T*l-VQ-|+wQ.O+zQ/[.PQ/m.uQ0n0rR0o0z&h]OV^acmnv!V!X![!^!t!x!{#O#V#_#a#b#f#g#h#i#j#k#l#o#p#q#t$R$S$T$U$V$W$f$j$u$z%[%b%d%i&[&]&^&f&g&k&y&{&|'R'S'b'm'x(R(S(c(h(j)O)R)[)])c)o)p)r)w*W*[*]*`*c*g*l*q+k+w+z+|,P,T,[,p,r,{-P-V-[-b.P.R.S.`.l.o.r.t.u.{/^/s0U0^0k0r0z0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1bQ#z|Q&p#{R(z%t&sUOV^acmnv|!V!X![!^!t!v!x!{#O#V#_#a#b#f#g#h#i#j#k#l#o#p#q#t#{$R$S$T$U$V$W$f$j$u$z%Q%[%b%d%i%t&[&]&^&f&g&k&y&{&|'R'S'b'm'x(R(S(c(h(j)O)R)[)])c)o)p)r)w*W*[*]*`*c*g*l*q+k+w+z+|,P,T,[,p,r,{-P-V-[-b.P.R.S.`.l.o.r.t.u.{/^/s0U0^0k0r0z0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1bR%O!t$hhOamnv!V!X![!^#V#_#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$f$j$u%d&k&|'R'S'm'x(c)O)R)w*W*[*]*`*c*g*q+|,p,r,{-P-[-b.R.S.l.o.r.t.{/^/s0U0^0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`Q#P^Q$}!tS&V#o0rQ(a%bQ)f&]U)g&^&g,PQ*|(RQ*}(SQ-o+kQ.Y,TR1_1bQ(Q$|R*{(P$ldO^amnv!V!X![!^#V#_#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$f$j$u%d&k&|'R'S'm'x(c)O)R)w*W*[*]*`*c*g*q+|,p,r,{-P-[-b.R.S.l.o.r.t.{/^/s0U0^0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1bT%p#^/_Q%|#bQ&}$UQ,s*[Q.m,rR/k.oX)b&[)c,[.`!}_OV^`av!X!e!x#O#V#t$S$T$U$V$W$f%[%`%i&[&c&f&y'S(j)c)r*W*`*g*l+z+|,Y,[-P.P.R.S.`.t/^1bS!rW&zS%k#X*YS+V(g)nQ+q)ZS-h+X,_R-v+sf!pW#X$v%V(](g)Z)n+X+s,_U%U!y%_.OQ([%ZQ*X&zQ*e'^Q,q*YQ,|*fQ.w-UR/p.xQ'{$uQ*y'xR.|-bR*z'x[)^&[&f)c)r,[.`T+t)[)pR)W&ZW+r)Z)n+s,_Q-{+vR/Z-|U!}^+z1bR%a#OS)h&^&gR.X,PR)m&cW)`&[)c,[.`R+u)[T#R^1bR*s'mR'q$jT,h*P,iQ.g,kR/f.hR/f.i",
  16955. nodeNames:
  16956. '⚠ LineComment BlockComment Program ModuleDeclaration MarkerAnnotation Identifier ScopedIdentifier . Annotation ) ( AnnotationArgumentList AssignmentExpression FieldAccess IntegerLiteral FloatingPointLiteral BooleanLiteral CharacterLiteral StringLiteral null ClassLiteral void PrimitiveType TypeName ScopedTypeName GenericType TypeArguments AnnotatedType Wildcard extends super , ArrayType Dimension [ ] class this ParenthesizedExpression ObjectCreationExpression new ArgumentList } { ClassBody ; FieldDeclaration Modifiers public protected private abstract static final strictfp default synchronized native transient volatile VariableDeclarator Definition AssignOp ArrayInitializer MethodDeclaration TypeParameters TypeParameter TypeBound FormalParameters ReceiverParameter FormalParameter SpreadParameter Throws throws Block ClassDeclaration Superclass SuperInterfaces implements InterfaceTypeList InterfaceDeclaration interface ExtendsInterfaces InterfaceBody ConstantDeclaration EnumDeclaration enum EnumBody EnumConstant EnumBodyDeclarations AnnotationTypeDeclaration AnnotationTypeBody AnnotationTypeElementDeclaration StaticInitializer ConstructorDeclaration ConstructorBody ExplicitConstructorInvocation ArrayAccess MethodInvocation MethodName MethodReference ArrayCreationExpression Dimension AssignOp BinaryExpression CompareOp CompareOp LogicOp BitOp BitOp LogicOp ArithOp ArithOp ArithOp BitOp InstanceofExpression instanceof LambdaExpression InferredParameters TernaryExpression LogicOp : UpdateExpression UpdateOp UnaryExpression LogicOp BitOp CastExpression ElementValueArrayInitializer ElementValuePair open module ModuleBody ModuleDirective requires transitive exports to opens uses provides with PackageDeclaration package ImportDeclaration import Asterisk ExpressionStatement LabeledStatement Label IfStatement if else WhileStatement while ForStatement for ForSpec LocalVariableDeclaration EnhancedForStatement ForSpec AssertStatement assert SwitchStatement switch SwitchBlock SwitchLabel case DoStatement do BreakStatement break Label ContinueStatement continue Label ReturnStatement return SynchronizedStatement ThrowStatement throw TryStatement try CatchClause catch CatchFormalParameter CatchType FinallyClause finally TryWithResourcesStatement ResourceSpecification Resource',
  16957. maxTerm: 271,
  16958. nodeProps: [
  16959. [
  16960. NodeProp.group,
  16961. -26,
  16962. 4,
  16963. 46,
  16964. 75,
  16965. 76,
  16966. 81,
  16967. 86,
  16968. 91,
  16969. 143,
  16970. 145,
  16971. 148,
  16972. 149,
  16973. 151,
  16974. 154,
  16975. 156,
  16976. 159,
  16977. 160,
  16978. 162,
  16979. 164,
  16980. 169,
  16981. 171,
  16982. 174,
  16983. 177,
  16984. 179,
  16985. 180,
  16986. 182,
  16987. 190,
  16988. 'Statement',
  16989. -24,
  16990. 6,
  16991. 13,
  16992. 14,
  16993. 15,
  16994. 16,
  16995. 17,
  16996. 18,
  16997. 19,
  16998. 20,
  16999. 21,
  17000. 38,
  17001. 39,
  17002. 40,
  17003. 98,
  17004. 99,
  17005. 101,
  17006. 102,
  17007. 105,
  17008. 116,
  17009. 118,
  17010. 120,
  17011. 123,
  17012. 125,
  17013. 128,
  17014. 'Expression',
  17015. -7,
  17016. 22,
  17017. 23,
  17018. 24,
  17019. 25,
  17020. 26,
  17021. 28,
  17022. 33,
  17023. 'Type'
  17024. ],
  17025. [NodeProp.openedBy, 10, '(', 43, '{'],
  17026. [NodeProp.closedBy, 11, ')', 44, '}']
  17027. ],
  17028. skippedNodes: [0, 1, 2],
  17029. repeatNodeCount: 28,
  17030. tokenData:
  17031. "Cr~R{X^#xpq#xqr$mrs$ztu%ruv&Wvw&ewx&uxy(]yz(bz{(g{|(q|})R}!O)W!O!P)k!P!Q-S!Q!R.b!R![3S![!]?[!]!^?i!^!_?n!_!`@R!`!a@Z!a!b@q!b!c@x!c!}BX!}#OBm#P#QBr#Q#RBw#R#S%r#T#o%r#o#pCP#p#qCU#q#rCh#r#sCm#y#z#x$f$g#x#BY#BZ#x$IS$I_#x$I|$JO#x$JT$JU#x$KV$KW#x&FU&FV#x~#}Y%w~X^#xpq#x#y#z#x$f$g#x#BY#BZ#x$IS$I_#x$I|$JO#x$JT$JU#x$KV$KW#x&FU&FV#xR$rP#rP!_!`$uQ$zO#^Q~$}UOY$zZr$zrs%as#O$z#O#P%f#P~$z~%fOc~~%iROY$zYZ$zZ~$z~%wT%}~tu%r!Q![%r!c!}%r#R#S%r#T#o%r~&]P#f~!_!`&`Q&eO#[Q~&jQ&i~vw&p!_!`&`~&uO#`~~&xTOY'XZw'Xx#O'X#O#P(P#P~'X~'[UOY'XZw'Xwx'nx#O'X#O#P's#P~'X~'sOb~~'vROY'XYZ'XZ~'X~(SROY'XYZ'XZ~'X~(bOZ~~(gOY~R(nP$XP#eQ!_!`&`~(vQ#d~{|(|!_!`&`~)RO#p~~)WOp~~)]R#d~}!O(|!_!`&`!`!a)f~)kO&s~~)pQWU!O!P)v!Q![*R~)yP!O!P)|~*RO&l~P*WW`P!Q![*R!f!g*p!g!h*u!h!i*p#R#S,_#W#X*p#X#Y*u#Y#Z*pP*uO`PP*xR{|+R}!O+R!Q![+XP+UP!Q![+XP+^U`P!Q![+X!f!g*p!h!i*p#R#S+p#W#X*p#Y#Z*pP+sP!Q![+vP+{U`P!Q![+v!f!g*p!h!i*p#R#S+p#W#X*p#Y#Z*pP,bP!Q![,eP,jW`P!Q![,e!f!g*p!g!h*u!h!i*p#R#S,_#W#X*p#X#Y*u#Y#Z*p~-XR#eQz{-b!P!Q.V!_!`&`~-eROz-bz{-n{~-b~-qTOz-bz{-n{!P-b!P!Q.Q!Q~-b~.VOQ~~.[QP~OY.VZ~.V~.ga_~!O!P/l!Q![3S!d!e6g!f!g*p!g!h3z!h!i*p!n!o5d!q!r7s!z!{8s#R#S5i#U#V6g#W#X*p#X#Y3z#Y#Z*p#`#a5d#c#d7s#l#m8sP/qV`P!Q![0W!f!g*p!g!h0u!h!i*p#W#X*p#X#Y0u#Y#Z*pP0]W`P!Q![0W!f!g*p!g!h0u!h!i*p#R#S2_#W#X*p#X#Y0u#Y#Z*pP0xR{|1R}!O1R!Q![1XP1UP!Q![1XP1^U`P!Q![1X!f!g*p!h!i*p#R#S1p#W#X*p#Y#Z*pP1sP!Q![1vP1{U`P!Q![1v!f!g*p!h!i*p#R#S1p#W#X*p#Y#Z*pP2bP!Q![2eP2jW`P!Q![2e!f!g*p!g!h0u!h!i*p#R#S2_#W#X*p#X#Y0u#Y#Z*p~3XZ_~!O!P/l!Q![3S!f!g*p!g!h3z!h!i*p!n!o5d#R#S5i#W#X*p#X#Y3z#Y#Z*p#`#a5dP3}R{|4W}!O4W!Q![4^P4ZP!Q![4^P4cU`P!Q![4^!f!g*p!h!i*p#R#S4u#W#X*p#Y#Z*pP4xP!Q![4{P5QU`P!Q![4{!f!g*p!h!i*p#R#S4u#W#X*p#Y#Z*p~5iO_~~5lP!Q![5o~5tZ_~!O!P/l!Q![5o!f!g*p!g!h3z!h!i*p!n!o5d#R#S5i#W#X*p#X#Y3z#Y#Z*p#`#a5d~6jQ!Q!R6p!R!S6p~6uT_~!Q!R6p!R!S6p!n!o5d#R#S7U#`#a5d~7XQ!Q!R7_!R!S7_~7dT_~!Q!R7_!R!S7_!n!o5d#R#S7U#`#a5d~7vP!Q!Y7y~8OS_~!Q!Y7y!n!o5d#R#S8[#`#a5d~8_P!Q!Y8b~8gS_~!Q!Y8b!n!o5d#R#S8[#`#a5d~8vS!O!P9S!Q![<Q!c!i<Q#T#Z<QP9VR!Q![9`!c!i9`#T#Z9`P9cU!Q![9`!c!i9`!r!s9u#R#S;_#T#Z9`#d#e9uP9xR{|:R}!O:R!Q![:XP:UP!Q![:XP:^U`P!Q![:X!f!g*p!h!i*p#R#S:p#W#X*p#Y#Z*pP:sP!Q![:vP:{U`P!Q![:v!f!g*p!h!i*p#R#S:p#W#X*p#Y#Z*pP;bR!Q![;k!c!i;k#T#Z;kP;nU!Q![;k!c!i;k!r!s9u#R#S;_#T#Z;k#d#e9u~<VX_~!O!P<r!Q![<Q!c!i<Q!n!o5d!r!s9u#R#S>^#T#Z<Q#`#a5d#d#e9uP<uT!Q![=U!c!i=U!r!s9u#T#Z=U#d#e9uP=XU!Q![=U!c!i=U!r!s9u#R#S=k#T#Z=U#d#e9uP=nR!Q![=w!c!i=w#T#Z=wP=zU!Q![=w!c!i=w!r!s9u#R#S=k#T#Z=w#d#e9u~>aR!Q![>j!c!i>j#T#Z>j~>oX_~!O!P<r!Q![>j!c!i>j!n!o5d!r!s9u#R#S>^#T#Z>j#`#a5d#d#e9u~?aP#n~![!]?d~?iO&q~~?nO!O~~?sQ&Y~!^!_?y!_!`$u~@OP#g~!_!`&`~@WP!a~!_!`$u~@`Q&X~!_!`$u!`!a@f~@kQ#g~!_!`&`!`!a?yV@xO&]T#mQ~@}P%{~#]#^AQ~ATP#b#cAW~AZP#h#iA^~AaP#X#YAd~AgP#f#gAj~AmP#Y#ZAp~AsP#T#UAv~AyP#V#WA|~BPP#X#YBS~BXO&o~~B^T&P~tuBX!Q![BX!c!}BX#R#SBX#T#oBX~BrOs~~BwOt~QB|P#bQ!_!`&`~CUO|~VC]Q&yT#bQ!_!`&`#p#qCcQChO#cQ~CmO{~~CrO#s~",
  17032. tokenizers: [0, 1, 2],
  17033. topRules: { Program: [0, 3] },
  17034. dynamicPrecedences: { '26': 1, '230': -1, '238': -1 },
  17035. specialized: [{ term: 229, get: value => spec_identifier$4[value] || -1 }],
  17036. tokenPrec: 7618
  17037. })
  17038. const javaLanguage = LezerLanguage.define({
  17039. parser: parser$a.configure({
  17040. props: [
  17041. indentNodeProp.add({
  17042. IfStatement: continuedIndent({ except: /^\s*({|else\b)/ }),
  17043. TryStatement: continuedIndent({ except: /^\s*({|catch|finally)\b/ }),
  17044. LabeledStatement: flatIndent,
  17045. SwitchBlock: context => {
  17046. let after = context.textAfter,
  17047. closed = /^\s*\}/.test(after),
  17048. isCase = /^\s*(case|default)\b/.test(after)
  17049. return context.baseIndent + (closed ? 0 : isCase ? 1 : 2) * context.unit
  17050. },
  17051. BlockComment: () => -1,
  17052. Statement: continuedIndent({ except: /^{/ })
  17053. }),
  17054. foldNodeProp.add({
  17055. ['Block SwitchBlock ClassBody ElementValueArrayInitializer ModuleBody EnumBody ' + 'ConstructorBody InterfaceBody ArrayInitializer']: foldInside$1,
  17056. BlockComment(tree) {
  17057. return { from: tree.from + 2, to: tree.to - 2 }
  17058. }
  17059. }),
  17060. styleTags({
  17061. null: tags$1.null,
  17062. instanceof: tags$1.operatorKeyword,
  17063. this: tags$1.self,
  17064. 'new super assert open to with void': tags$1.keyword,
  17065. 'class interface extends implements module package import enum': tags$1.definitionKeyword,
  17066. 'switch while for if else case default do break continue return try catch finally throw': tags$1.controlKeyword,
  17067. ['requires exports opens uses provides public private protected static transitive abstract final ' + 'strictfp synchronized native transient volatile throws']: tags$1.modifier,
  17068. IntegerLiteral: tags$1.integer,
  17069. FloatLiteral: tags$1.float,
  17070. StringLiteral: tags$1.string,
  17071. CharacterLiteral: tags$1.character,
  17072. LineComment: tags$1.lineComment,
  17073. BlockComment: tags$1.blockComment,
  17074. BooleanLiteral: tags$1.bool,
  17075. PrimitiveType: tags$1.standard(tags$1.typeName),
  17076. TypeName: tags$1.typeName,
  17077. Identifier: tags$1.variableName,
  17078. 'MethodName/Identifier': tags$1.function(tags$1.variableName),
  17079. Definition: tags$1.definition(tags$1.variableName),
  17080. ArithOp: tags$1.arithmeticOperator,
  17081. LogicOp: tags$1.logicOperator,
  17082. BitOp: tags$1.bitwiseOperator,
  17083. CompareOp: tags$1.compareOperator,
  17084. AssignOp: tags$1.definitionOperator,
  17085. UpdateOp: tags$1.updateOperator,
  17086. Asterisk: tags$1.punctuation,
  17087. Label: tags$1.labelName,
  17088. '( )': tags$1.paren,
  17089. '[ ]': tags$1.squareBracket,
  17090. '{ }': tags$1.brace,
  17091. '.': tags$1.derefOperator,
  17092. ', ;': tags$1.separator
  17093. })
  17094. ]
  17095. }),
  17096. languageData: { commentTokens: { line: '//', block: { open: '/*', close: '*/' } }, indentOnInput: /^\s*(?:case |default:|\{|\})$/ }
  17097. })
  17098. function java() {
  17099. return new LanguageSupport(javaLanguage)
  17100. }
  17101. var _m23 = Object.freeze({ __proto__: null, java: java, javaLanguage: javaLanguage })
  17102. const parser$9 = Parser.deserialize({
  17103. version: 13,
  17104. states:
  17105. "$bOVQPOOOOQO'#Cb'#CbOnQPO'#CcOvQPO'#CfOOQO'#Cl'#ClQOQPOOOOQO'#Ce'#CeO}QPO'#CdO!SQPO'#CpOOQO,58},58}O![QPO,58}O!aQPO'#CuOOQO,59Q,59QO!iQPO,59QOVQPO,59OO!nQPO'#CgO!sQPO,59[OOQO1G.i1G.iOVQPO'#ChO!{QPO,59aOOQO1G.l1G.lOOQO1G.j1G.jOOQO,59R,59ROOQO-E6e-E6eOOQO,59S,59SOOQO-E6f-E6f",
  17106. stateData: '#T~O_OS~OQSORSOSSOTSOaPOcQOhRO~OaUObXO~Og[O~PVOe^O~Of_ObdX~ObaO~OfbOgiX~OgdO~OaUO~Of_Obda~OfbOgia~O',
  17107. goto: '!kjPPPPPPkkqwk{!RPPP!XPPP!ePPPP!hXSOR^bQWQRf_TVQ_Q`WRg`QcZRicQTOQZRQe^RhbRYQR]R',
  17108. nodeNames: '⚠ JsonText True False Null Number String Object Property PropertyName Array',
  17109. maxTerm: 25,
  17110. skippedNodes: [0],
  17111. repeatNodeCount: 2,
  17112. tokenData:
  17113. "(p~RaXY!WYZ!W]^!Wpq!Wrs!]|}$i}!O$n!Q!R$w!R![&V![!]&h!}#O&m#P#Q&r#Y#Z&w#b#c'f#h#i'}#o#p(f#q#r(k~!]O_~~!`Upq!]qr!]rs!rs#O!]#O#P!w#P~!]~!wOa~~!zXrs!]!P!Q!]#O#P!]#U#V!]#Y#Z!]#b#c!]#f#g!]#h#i!]#i#j#g~#jR!Q![#s!c!i#s#T#Z#s~#vR!Q![$P!c!i$P#T#Z$P~$SR!Q![$]!c!i$]#T#Z$]~$`R!Q![!]!c!i!]#T#Z!]~$nOf~~$qQ!Q!R$w!R![&V~$|RT~!O!P%V!g!h%k#X#Y%k~%YP!Q![%]~%bRT~!Q![%]!g!h%k#X#Y%k~%nR{|%w}!O%w!Q![%}~%zP!Q![%}~&SPT~!Q![%}~&[ST~!O!P%V!Q![&V!g!h%k#X#Y%k~&mOe~~&rOh~~&wOg~~&zP#T#U&}~'QP#`#a'T~'WP#g#h'Z~'^P#X#Y'a~'fOR~~'iP#i#j'l~'oP#`#a'r~'uP#`#a'x~'}OS~~(QP#f#g(T~(WP#i#j(Z~(^P#X#Y(a~(fOQ~~(kOc~~(pOb~",
  17114. tokenizers: [0],
  17115. topRules: { JsonText: [0, 1] },
  17116. tokenPrec: 0
  17117. })
  17118. const jsonParseLinter = () => view => {
  17119. try {
  17120. JSON.parse(view.state.doc.toString())
  17121. } catch (e) {
  17122. if (!(e instanceof SyntaxError)) throw e
  17123. const pos = getErrorPosition(e, view.state.doc)
  17124. return [{ from: pos, message: e.message, severity: 'error', to: pos }]
  17125. }
  17126. return []
  17127. }
  17128. function getErrorPosition(error, doc) {
  17129. let m
  17130. if ((m = error.message.match(/at position (\d+)/))) return Math.min(+m[1], doc.length)
  17131. if ((m = error.message.match(/at line (\d+) column (\d+)/))) return Math.min(doc.line(+m[1]).from + +m[2] - 1, doc.length)
  17132. return 0
  17133. }
  17134. const jsonLanguage = LezerLanguage.define({
  17135. parser: parser$9.configure({
  17136. props: [
  17137. indentNodeProp.add({ Object: continuedIndent({ except: /^\s*\}/ }), Array: continuedIndent({ except: /^\s*\]/ }) }),
  17138. foldNodeProp.add({ 'Object Array': foldInside$1 }),
  17139. styleTags({
  17140. String: tags$1.string,
  17141. Number: tags$1.number,
  17142. 'True False': tags$1.bool,
  17143. PropertyName: tags$1.propertyName,
  17144. null: tags$1.null,
  17145. ',': tags$1.separator,
  17146. '[ ]': tags$1.squareBracket,
  17147. '{ }': tags$1.brace
  17148. })
  17149. ]
  17150. }),
  17151. languageData: { closeBrackets: { brackets: ['[', '{', '"'] }, indentOnInput: /^\s*[\}\]]$/ }
  17152. })
  17153. function json() {
  17154. return new LanguageSupport(jsonLanguage)
  17155. }
  17156. var _m24 = Object.freeze({ __proto__: null, json: json, jsonLanguage: jsonLanguage, jsonParseLinter: jsonParseLinter })
  17157. const rawStringStart = 305,
  17158. rawStringContent = 306,
  17159. rawStringEnd = 307,
  17160. templateArgsEndFallback = 1,
  17161. MacroName = 2
  17162. const R = 82,
  17163. L = 76,
  17164. u = 117,
  17165. U = 85,
  17166. a = 97,
  17167. z = 122,
  17168. A = 65,
  17169. Z = 90,
  17170. Underscore = 95,
  17171. Zero = 48,
  17172. Quote$1 = 34,
  17173. ParenL$1 = 40,
  17174. ParenR$1 = 41,
  17175. Space$1 = 32,
  17176. Newline = 10,
  17177. GreaterThan$1 = 62
  17178. const rawString = new ExternalTokenizer((input, token) => {
  17179. let pos = token.start,
  17180. next = input.get(pos++)
  17181. if (next == L || next == U) {
  17182. next = input.get(pos++)
  17183. } else if (next == u) {
  17184. next = input.get(pos++)
  17185. if (next == Zero + 8) next = input.get(pos++)
  17186. }
  17187. if (next != R) return
  17188. next = input.get(pos++)
  17189. if (next != Quote$1) return
  17190. next = input.get(pos++)
  17191. while (next != ParenL$1) {
  17192. if (next == Space$1 || next <= 13 || next == ParenR$1) return
  17193. next = input.get(pos++)
  17194. }
  17195. return token.accept(rawStringStart, pos)
  17196. })
  17197. const rawStringContinue = new ExternalTokenizer(
  17198. (input, token, stack) => {
  17199. let pos = token.start,
  17200. next = input.get(pos++),
  17201. markerString = null
  17202. for (;;) {
  17203. if (next < 0) {
  17204. if (pos > token.start + 1) token.accept(rawStringContent, pos - 1)
  17205. return
  17206. } else if (next == ParenR$1) {
  17207. if (!markerString) {
  17208. let ruleStart = stack.ruleStart
  17209. let match = /"(\S*?)\(/.exec(input.read(ruleStart, Math.min(token.start, ruleStart + 100)))
  17210. if (!match) return
  17211. markerString = match[1] + '"'
  17212. }
  17213. if (input.read(pos, pos + markerString.length) == markerString) {
  17214. token.accept(rawStringEnd, pos + markerString.length)
  17215. return
  17216. }
  17217. } else if (next == Newline) {
  17218. token.accept(rawStringContent, pos)
  17219. return
  17220. }
  17221. next = input.get(pos++)
  17222. }
  17223. },
  17224. { contextual: true }
  17225. )
  17226. const fallback = new ExternalTokenizer(
  17227. (input, token) => {
  17228. let pos = token.start,
  17229. next = input.get(pos)
  17230. if (next == GreaterThan$1) {
  17231. if (input.get(pos + 1) == GreaterThan$1) token.accept(templateArgsEndFallback, pos + 1)
  17232. } else {
  17233. let sawLetter = false
  17234. for (; ; next = input.get(++pos)) {
  17235. if (next >= A && next <= Z) sawLetter = true
  17236. else if (next >= a && next <= z) return
  17237. else if (next != Underscore && !(next >= Zero && next <= Zero + 9)) break
  17238. }
  17239. if (sawLetter && pos >= token.start + 2) token.accept(MacroName, pos)
  17240. }
  17241. },
  17242. { extend: true }
  17243. )
  17244. const spec_identifier$3 = {
  17245. __proto__: null,
  17246. bool: 32,
  17247. char: 32,
  17248. int: 32,
  17249. float: 32,
  17250. double: 32,
  17251. void: 32,
  17252. size_t: 32,
  17253. ssize_t: 32,
  17254. intptr_t: 32,
  17255. uintptr_t: 32,
  17256. charptr_t: 32,
  17257. int8_t: 32,
  17258. int16_t: 32,
  17259. int32_t: 32,
  17260. int64_t: 32,
  17261. uint8_t: 32,
  17262. uint16_t: 32,
  17263. uint32_t: 32,
  17264. uint64_t: 32,
  17265. char8_t: 32,
  17266. char16_t: 32,
  17267. char32_t: 32,
  17268. char64_t: 32,
  17269. const: 66,
  17270. volatile: 68,
  17271. restrict: 70,
  17272. _Atomic: 72,
  17273. mutable: 74,
  17274. constexpr: 76,
  17275. struct: 80,
  17276. __declspec: 84,
  17277. final: 88,
  17278. override: 88,
  17279. public: 92,
  17280. private: 92,
  17281. protected: 92,
  17282. virtual: 154,
  17283. extern: 156,
  17284. static: 158,
  17285. register: 160,
  17286. inline: 162,
  17287. __attribute__: 166,
  17288. __based: 172,
  17289. __restrict: 174,
  17290. __uptr: 174,
  17291. __sptr: 174,
  17292. _unaligned: 174,
  17293. __unaligned: 174,
  17294. noexcept: 188,
  17295. throw: 192,
  17296. template: 248,
  17297. typename: 254,
  17298. class: 256,
  17299. using: 266,
  17300. __cdecl: 274,
  17301. __clrcall: 274,
  17302. __stdcall: 274,
  17303. __fastcall: 274,
  17304. __thiscall: 274,
  17305. __vectorcall: 274,
  17306. case: 284,
  17307. default: 286,
  17308. if: 298,
  17309. else: 304,
  17310. switch: 308,
  17311. do: 312,
  17312. while: 314,
  17313. for: 322,
  17314. return: 326,
  17315. break: 330,
  17316. continue: 334,
  17317. goto: 338,
  17318. typedef: 342,
  17319. try: 356,
  17320. catch: 360,
  17321. namespace: 366,
  17322. static_assert: 372,
  17323. explicit: 382,
  17324. delete: 392,
  17325. operator: 400,
  17326. friend: 420,
  17327. union: 422,
  17328. enum: 430,
  17329. signed: 434,
  17330. unsigned: 434,
  17331. long: 434,
  17332. short: 434,
  17333. decltype: 446,
  17334. auto: 448,
  17335. sizeof: 480,
  17336. TRUE: 742,
  17337. true: 742,
  17338. FALSE: 744,
  17339. false: 744,
  17340. NULL: 488,
  17341. new: 494,
  17342. nullptr: 508,
  17343. this: 510
  17344. }
  17345. const spec_ = { __proto__: null, '<': 137 }
  17346. const spec_templateArgsEnd = { __proto__: null, '>': 141 }
  17347. const spec_scopedIdentifier = { __proto__: null, operator: 398, new: 492, delete: 500 }
  17348. const parser$8 = Parser.deserialize({
  17349. version: 13,
  17350. states:
  17351. "$BhQ!QQ]OOP&tO[OOO'fO`O'#CcO+PQ[O'#CfO+ZQ[O'#FdO-SQtO'#CvO-ZQ[O'#CvO.yQ[O'#J_O/QQ[O'#CuO/]OQO'#DxO/eO!bO'#DyO/mQ#xO'#DaOOQS'#IV'#IVO/xQ[O'#J|O1iQ[O'#I[OOQS'#I['#I[O4nQ[O'#JpO7oQ[O'#JpO9vQ]O'#EZO:WQ[O'#EZO:]Q[OOO:eQ]O'#EhO<xQ]O'#EiO=VQ[O'#EiO?qQ[O'#JtO?{Q[O'#JtO@VQ]O'#HrOOQS'#Jt'#JtOAvQ[O'#JtOC{Q[O'#JtODYQ[O'#FWODzQ[O'#FbOOQT'#Fd'#FdO,lQ[O'#FdOOQT'#KQ'#KQOOQT'#KP'#KPOEPQ]O'#JUOFzQ[O'#KTOGXQ[O'#KTOOQT'#Ga'#GaOG|Q[O'#KVOOQT'#Gi'#GiOOQT'#Gm'#GmOOQT'#KO'#KOOOQT'#Ik'#IkQ!QQ]OOOHXQ]O'#F[OOQS'#Ir'#IrOH`Q[O'#G|OOQS'#J_'#J_OKwQ[O'#J_OLeQ[O'#JUONbQ]O'#H`ONbQ]O'#HcOOQS'#Hh'#HhOOQS'#Hi'#HiO!!^Q[O'#HqOOQS'#JU'#JUO!$bQ[O'#J_OOQT'#J^'#J^O!$iQ[O'#DVO!$nQ[O'#JqOOQS'#Jq'#JqO!&}Q[O'#EQO!'SQ[O'#ETO!'XQ[O'#G[O!'dQ[O'#FfO!'lQ[O'#FkO!'qQ]O'#FmO!'lQ[O'#FqO!*ZQ[O'#FrO!*`Q]O'#FtO!*jQ[O'#FvO!*oQ[O'#FxO!*tQ[O'#FzO!*yQ[O'#F|O!,QQ]O'#F_O!-kQ[O'#F_O!-pQ[O'#GTO!-uQ]O'#GXO!-|Q[O'#GYO!.UQ[O'#G]O!0WQ[O'#G`O!0eQ[O'#GbO!1YQ[O'#GjO4nQ[O'#FYO!1pQ[O'#DTO!2UQ[O'#GyO!2jQ[O'#GzO!2{Q[O'#HQO!3aQ[O'#HRO!4UQ[O'#HSO!4ZQ]O'#HeO!4eQ[O'#HkO!5]Q]O'#HoP!6v{&jO'#CaP!.P{&jO'#CaP!7R{,UO'#CaP!.P{&jO'#CaP!7W{&jO'#CaP!7]OWO'#IPPOOO)CDr)CDrOOOO'#IR'#IRO!7hO`O,58}OOQT,58},58}O!,QQ]O,59TOOQS,59V,59VONbQ]O,5<POOQT,5<O,5<OO!7sQ[O,59XONbQ]O,5=uOOQT'#H]'#H]OOQT'#H^'#H^OOQT'#H_'#H_ONbQ]O,5=vONbQ]O,5=vONbQ]O,5=vONbQ]O,5=vONbQ]O,5=vONbQ]O,5=vONbQ]O,5=vONbQ]O,5=vONbQ]O,5=vO!:XQ]O,5=}OOQS,5>_,5>_O!;UQ]O'#CgO!>nQ[O'#CxOOQS,59b,59bOOQS,59a,59aOOQS,5;U,5;UO!1YQ[O,5=UO!4eQ[O,5>VO!@cQ]O,5>ZO!@jQtO,59bO!@xQ]O'#EwOOQS,5>R,5>RONbQ]O,59UOOOQ'#IY'#IYO!AYOQO,5:dOOQT,5:d,5:dO!AbOpO,5:eO!AgQtO'#DbO!AxQtO'#JeO!BWQtO,59{O!DYQ[O'#CrO!ExQtO'#CvO!E}Q[O'#CuO!IbQ[O'#J_OOQS-E<T-E<TO!IiQ[O,5@hODYQ[O,5;rO!IpQ[O'#J_O4nQ[O,5;tOOQS-E<Y-E<YO!IzQ[O,5@[O!IzQ[O,5@[OOQT,5@h,5@hO!MzQ[O'#CfO# rQ[O,5=tO#!`QtO'#CvO#!qQ[O'#EjO#!vQ[O'#HgO##OQ[O'#CuOOQT'#IS'#ISO##ZQ[O,5:uO##qQ[O,5:uO#$mQ[O,5:uO#$zQ[O'#CsO!'SQ[O'#CkOOQS'#I]'#I]O##qQ[O,5:uO#&WQ[O,5:vO#([Q]O,5;RO#(fQ[O'#EXO#*WQ[O,5<[O#+YQ[O'#J_O!*yQ[O'#C|O#+aQ[O,5;SO#+lQ[O,5<[O#+qQ[O'#C|O#,kQ[O,5>OO#-RQ[O,5;TO#-`QtO'#CvO##qQ[O'#EZO=VQ[O'#EhO#-kQ[O'#JtO!.PQ[O'#EnO#.`Q[O'#CsOOQS,5;X,5;XO#0zQ]O'#CzO#2iQ[O'#KaO#4dQ[O'#JwO#4kQ[O'#JUO#5OQ[O,5;YO#5TQ]O'#FpONbQ]O'#HYO#7jQ]O,5>^O@VQ]O'#HrO#7tQ[O,5>^O#7wQ[O,5>^OOQS,5>^,5>^O#7|Q[O'#GdOOQT,5@o,5@oO#8UQ[O,5@oO#8^Q[O'#GfO#8fQ[O,5;tO#8zQ[O'#J}O#9SQ[O,5;rO!'qQ]O,5;|OOQT'#Io'#IoO#9XQ]O,5<yO#;_QtO'#CvO#;mQ[O'#EjOAvQ[O,5@oOOQS'#Ip'#IpOOQS-E<n-E<nOGXQ[O,5@oO#8UQ[O,5@qO#;rQ[O,5@qOOQT,5@q,5@qOOQT,5@r,5@rO#;}Q]O,5@rOOQT-E<i-E<iO#=kQ]O,5;vOOQT,5;v,5;vOOQS-E<p-E<pOOQS,5=h,5=hOOQS,59_,59_O#=rQ[O,5=zO#?rQ[O'#JUO#A^Q[O,5=}O#AzQ[O'#EbO#CiQ[O'#EcO#CvQ[O'#EcO#DOQ]O'#EdO#DYQ[O'#EeO#DvQ[O'#EfOOQS'#Jv'#JvO#E^Q[O,5>]OOQS,5>],5>]O!.PQ[O,59qO#EiQ[O,5;wO!'SQ[O,5:lOOQS,5:o,5:oO#EvQ[O,5;pO#FOQ[O,5<vO#FTQ[O,5<vO#IXQ]O'#FhO!'qQ]O,5<QO!'lQ[O,5<QO!-pQ[O,5<VO#I`Q[O,5<XO!'qQ]O,5<]O#IeQ]O,5<^O#LdQ[O,5<`OOQT,5<`,5<`O#LkQ[O,5<`OOQT,5<b,5<bOOQT,5<d,5<dOOQS'#Fc'#FcO#LpQ[O,5<fO!*yQ[O,5<hO#LuQ[O,5<hO#NeQ[O,5;yO#NlQ]O,5;yO$!qQ[O,5<oO$$WQ[O,5<sOOQT,5<s,5<sOOQS'#Cf'#CfO$$_Q]O'#F^OOQT,5<t,5<tO$$fQ[O,5<tONbQ]O,5<wO$&OQ[O'#J_O$&VQ[O'#JpO$&vQ[O,5<zO$(rQ[O'#E}O=VQ[O,5<zO$(|Q[O,5;gONbQ]O,5<|O$)mQ[O,5=UODYQ[O,5;tOOQS'#J`'#J`O$-WQ[O'#J`O$-hQ[O'#DZO$-sQ[O'#D^O$0yQ[O,59oOOQS,59o,59oO$1dQ[O,59oO$1iQ[O,59oO$1qQ[O,59oO$3sQ[O,5=eOOQS,5=e,5=eO$1dQ[O,5=eO$1iQ[O,5=eO$4^Q[O,5=eO$4oQ[O'#HOO$6bQ[O,5=fOOQS,5=f,5=fO$7[Q[O,5=fO$9gQ[O,5=lOOQS,5=l,5=lO$1dQ[O,5=lO$1iQ[O,5=lO$9qQ[O,5=lOOQS,5=m,5=mONbQ]O,5=nO$;^Q[O,5>PO#5TQ]O'#FpOOQS,5>P,5>PO$<TQ[O,5>PO$<YQ[O,5>VO!4hQ[O,5>VO$>]Q[O,5>ZO$@jQ]O,5>ZP$@q{&jO,58{P$@v{&jO,58{P$AO{,UO,58{POOO,58{,58{POOO,5>k,5>kP$AWOWO,5>kOOOO-E<P-E<POOQT1G.i1G.iO$A`Q[O1G.oO$AgQ[O1G1kOOQS1G1k1G1kO$AqQ[O'#CnO$C}QtO'#CvO$DYQ[O'#CqO$D_Q[O1G.sO#.`Q[O'#CpOOQS1G.s1G.sO$FbQ[O1G3aO$HcQ[O1G3bO$J^Q[O1G3bO$LeQ[O1G3bO$LlQ[O1G3bO$NmQ[O1G3bO$NtQ[O1G3bO%!oQ[O1G3bO%!|Q[O1G3bO%#ZQ[O1G3bO%$lQ[O1G3bO%%cQ[O'#JTO%%mQ[O'#JTO%%uQ[O,59RO$)mQ[O1G2pO%'zQ[O1G3qO!4hQ[O1G3qO%(RQ[O1G3uO%(rQ]O1G3uOOQS1G.|1G.|OOQS1G.{1G.{OOQS1G0p1G0pO!1YQ[O1G2pO%(yQ[O'#JyO@VQ]O'#HrO%)TQ[O'#EzOOQS'#Ig'#IgO%)YQ[O'#ExO%)eQ[O'#JyO%)mQ[O,5;cO%)rQ[O1G.pOOOQ-E<W-E<WOOQT1G0O1G0OOOQT1G0P1G0PO%*iQ#xO'#IWO%*nQtO,59|O%-PQ#yO'#DdO%-WQ#xO'#IZO%-]QtO,5@PO%-]QtO,5@POOQS1G/g1G/gO%-hQtO1G/gO%/jQ[O'#CxO!ExQtO,59bOOQT1G6S1G6SO#8fQ[O1G1`O%1VQ[O1G1^ODYQ[O1G1`O%2SQ[O1G5vO%3cQtO,59bOOQT-E<Q-E<QO%4PQ[O1G0aO##ZQ[O1G0aOOQS-E<Z-E<ZO##qQ[O1G0aOOQS'#I^'#I^O%5eQ[O1G0bO%6gQ[O'#EaOOQS'#I_'#I_O%4^Q[O1G0bO%6wQ[O'#E]O%8[Q[O'#E_O%8aQ[O1G0mO%8hQ]O1G0mOOQS1G0m1G0mO%8rQ]O1G0mO#EoQ[O'#EYO%9hQ[O'#EYO%:RQ[O'#JsO%:ZQ[O,5:sOOQS1G1v1G1vO%:`Q[O,59hOOQS1G0n1G0nO%:`Q[O,59hO%;YQ[O,59hO%;tQ]O1G3jO%;{Q[O'#J`O%<SQ[O'#JwO%<[Q[O'#KZO%<iQ[O'#J]O%<wQ[O'#J[O%=SQ[O,59fONbQ]O'#IuO%=[Q[O,5@{O!.PQ[O'#IcO%=dQ[O,5@cOOQS1G0t1G0tOOQS1G3x1G3xONbQ]O1G3xO%=lQ[O'#GeO%=tQ[O'#KUOOQS,5=O,5=OOOQT1G6Z1G6ZO%>PQ[O,5=QO%>UQ[O,5=RO%>ZQ]O'#EXO%E]Q]O'#F[O%;tQ]O,5;sOOQS,5;s,5;sODYQ[O'#IjO%EmQ[O,5@iOOQT1G1`1G1`OOQT1G1^1G1^OOQT1G1h1G1hOOQT-E<m-E<mO#8UQ[O1G6ZOAvQ[O1G6ZO#8UQ[O1G6]OOQT1G6]1G6]OOQT1G6^1G6^O#;}Q]O1G6^O%EuQ[O1G6^O%E|Q]O,5=ROOQT1G1b1G1bOOQS'#Ia'#IaO%FTQ[O,5:|O%GfQ[O,5:|OOQS'#Ib'#IbO%GmQ[O,5:}OOQS,5:},5:}O%GmQ[O,5:}O%HkQ]O,5;OO%HuQ[O,5;OO%HkQ]O,5;OOOQS,5;O,5;OO%H|Q]O,5;OO%ITQ[O,5;PO%IwQ[O,5;QOOQS1G3w1G3wO%JOQ[O1G/]O/xQ[O'#FWOOQT1G1c1G1cO%JTQ[O1G0WO!*yQ[O1G1[OOQT1G2b1G2bO%JYQ[O1G2bO%J_Q[O,5<SO#EoQ[O'#FWODYQ[O'#FWO%JfQ[O,5<SONbQ]O,5<SO%JnQ[O,5<SO%JsQ]O1G1lO!'qQ]O1G1lOOQT1G1q1G1qO& pQ[O1G1sOOQT1G1w1G1wO& uQ[O1G1xO& |Q[O1G2YO&!nQ]O1G1xO&!uQ[O1G1xOOQT1G1z1G1zOOQT1G2Q1G2QO#LuQ[O1G2SOOQS'#Ct'#CtO&!zQ[O'#GOO&#oQ[O'#GOO&#tQ[O'#KRO#LuQ[O'#GROOQS'#KS'#KSO&$SQ[O1G2SO&$XQ]O1G1eODYQ[O'#FWOOQT'#Il'#IlO&$XQ]O1G1eO&&^Q[O'#FrOOQT'#In'#InO&&cQ]O1G2ZO&+cQ[O'#GVOOQT1G2_1G2_OOQT,5;x,5;xO&+hQ]O,5;xOOQT1G2`1G2`O&+oQ[O1G2cOOQT1G2f1G2fOOQS'#J{'#J{O&+yQ[O'#JzO&,UQ[O,5;iO&,^Q[O'#FOO&,qQ[O'#FOO&-UQ[O'#FTO&-ZQ[O1G2fO&-fQ[O'#J_OGXQ[O'#KTO#8UQ[O'#KVOOQT'#Gn'#GnOOQT'#Go'#GoO&-pQ[O'#FUO&-UQ[O'#E{OOQT1G1R1G1RO&-uQ[O1G2hO&-|Q[O1G2pO&._Q[O1G1`O&.jQ[O'#JaOOQS,59u,59uO&.uQ[O'#JaO&.}Q[O'#D`O&/zQ[O'#JtO&0sQ[O'#D`OGXQ[O'#KTOOQS'#Gq'#GqOOQS'#Gs'#GsOOQS'#Gt'#GtOOQS'#Jc'#JcOOQS'#IU'#IUO&0}Q[O,59xOOQS,59x,59xO&2dQ[O'#D`O&3vQ[O'#GuO&4sQ[O'#GxOOQS1G/Z1G/ZO$1dQ[O1G/ZO$1iQ[O1G/ZO&6iQ[O1G/ZOOQS1G3P1G3PO$1dQ[O1G3PO$1iQ[O1G3PO&8sQ[O1G3PO&9^Q[O'#HPO&9iQ[O'#KYO&9qQ[O,5=jO&9vQ[O'#KXOOQS1G3Q1G3QO&:UQ[O1G3QO&<bQ[O1G3QOOQS1G3W1G3WO$1dQ[O1G3WO$1iQ[O1G3WO&>iQ[O1G3WO&>sQ[O1G3YO&>zQ[O,5@xO!.PQ[O1G3kONbQ]O'#HnOOQS1G3q1G3qO&?PQ[O1G3qO&?WQ]O1G3uPOOO1G.g1G.gP&@w{&jO1G.gP&@|Q[O'#KcP&AX{,UO1G.gPOOO1G4V1G4VONbQ]O7+$ZO&A^Q[O'#CxOOQS,59],59]O&AiQtO,59bOOQS,59[,59[OOQS7+({7+({O%;tQ]O'#IvO&AtQ[O,5?oOOQS1G.m1G.mO&A|Q[O7+([OOQS7+)]7+)]O&D_Q[O7+)]O&DfQ[O7+)]O&?WQ]O7+)aO$)mQ[O7+([O&DmQ]O'#IhO&EQQ[O,5@eO&EYQ[O,5;eOOQS'#Cn'#CnOOQS,5;f,5;fONbQ]O'#EyOOQS-E<e-E<eO%;tQ]O,5;dOOQS1G0}1G0}OOQS,5>r,5>rOOQS-E<U-E<UOOQT'#Dj'#DjOOQT'#Dl'#DlOOQT'#Do'#DoO&EaQ#yO'#JfO&EhQ7aO'#JfO&EoQ#yO'#JfOOQT'#Jf'#JfOOQT'#IX'#IXO&EvQ#yO,5:OOOQS,5:O,5:OO&E}QtO,5>uOOQS-E<X-E<XO&F]QtO1G5kOOQS7+%R7+%ROOQT7+&z7+&zOOQT7+&x7+&xO&._Q[O7+&zO&FyQ[O7+%{O##ZQ[O7+%{OOQS-E<[-E<[O&HXQ[O7+%|O&HzQ[O,5:{O&JQQ[O,5:{OOQS-E<]-E<]O&JuQ]O,5:wO&J|Q[O,5:yOOQS7+&X7+&XO&KTQ[O7+&XO&K[Q]O7+&XO&LTQ[O,5:tO&MlQ[O'#EbO&N_Q[O,5:tO#DOQ]O'#EdO&NfQ[O'#EeO'!OQ[O'#EfO'!fQ[O,5:tONbQ]O,5;ZO'!pQ[O'#EqOOQS,5;[,5;[O'#RQ[O'#IdO'#]Q[O,5@_OOQS1G0_1G0_O'#eQ[O1G/SO'$_Q[O1G/SO'$yQ[O7+)UOOQS7+)X7+)XOOQS,5=q,5=qO#.eQ]O'#ItO'%jQ[O,5?vOOQS1G/Q1G/QO'%uQ[O,5?aOOQS-E<s-E<sOOQS,5>},5>}OOQS-E<a-E<aO'&PQ[O7+)dO'&UQ[O,5=PO#7|Q[O'#IqO'&dQ[O,5@pOOQT1G2l1G2lOOQT1G2m1G2mO'&oQ[O'#JyO@VQ]O'#HrO'&|Q[O1G1_OOQS1G1_1G1_O''WQ[O,5?UOOQS,5?U,5?UOOQS-E<h-E<hOOQT7++u7++uO#8UQ[O7++uOOQT7++w7++wO''lQ[O7++xOOQT7++x7++xOOQS-E<_-E<_O'([Q[O1G0hOOQS-E<`-E<`OOQS1G0i1G0iO')WQ[O1G0iO')eQ[O1G0jO')lQ]O1G0jOOQS1G0j1G0jO')vQ]O1G0jOOQS1G0k1G0kOOQS7+$w7+$wOOQS7+%r7+%rO')}Q[O7+&vOOQT7+'|7+'|OOQT1G1n1G1nODYQ[O,5;rO'*eQ[O,5<TO'*lQ[O1G1nO'*sQ[O1G1nO!'qQ]O7+'WO'*xQ]O7+'WONbQ]O'#FpO'/uQ[O7+'_O'/zQ]O7+'dO'0RQ[O7+'tO'0]Q[O7+'dO'0dQ]O7+'dO'0kQ[O7+'nO'0pQ[O,5<jO&!zQ[O,5<jO'1bQ[O,5<jO&!zQ[O,5<jOOQS,5<k,5<kO'1sQ]O,5<lO#LuQ[O'#ImO'1}Q[O,5@mO'2VQ[O,5<mOOQT7+'n7+'nO'2bQ]O7+'PO'0UQ[O'#J}OOQT-E<j-E<jO#IeQ]O,5<^OOQT-E<l-E<lO!-pQ[O,5<qOOQT1G1d1G1dO'4gQ[O7+'}O'4lQ]O7+'}O$'RQ[O'#IiO'4tQ[O,5@fOOQS1G1T1G1TO'5PQ[O,5;jO'5jQ[O,5;mO'6_Q[O,5;nO'6mQ[O,5;jO'8pQ[O,5;oOOQT7+(Q7+(QO#EyQ[O,5;pOOQS7+(S7+(SO'8xQ[O'#ITO'9TQ[O,5?{O'9TQ[O,5?{O'9]Q[O,5?{O'9hQ[O,59zO'9rQ[O,59zOOQS,5=^,5=^O':iQ[O'#ESO';jQ[O'#ESO'<QQ[O,59zO'<[Q[O'#EtO'<vQ[O'#EuOOQS'#Jr'#JrO'=bQ[O'#JrONbQ]O'#EvOOQS,59z,59zO'>PQ[O,59zO%;tQ]O,59zO'>UQ[O,5@oOOQS-E<S-E<SOOQS1G/d1G/dO'>]Q[O'#J`O'>gQ[O'#J`OOQS,5=a,5=aO'>tQ[O,5=aO!2{Q[O,5=aO!1pQ[O,5=aO!2UQ[O,5=aOOQS,5=d,5=dOOQS7+$u7+$uO$1dQ[O7+$uO$1iQ[O7+$uOOQS7+(k7+(kO$1dQ[O7+(kO$1iQ[O7+(kONbQ]O,5=kO'>yQ[O'#IsO'?UQ[O,5@tOOQS1G3U1G3UO'?^Q[O,5@sOOQS,5@s,5@sOOQS7+(l7+(lO'BrQ[O7+(lOOQS7+(r7+(rO$1dQ[O7+(rO$1iQ[O7+(rOOQS7+(t7+(tO'G[Q]O1G6dO'HXQ[O7+)VO'H^Q[O,5>YO'HeQ[O7+)aPOOO7+$R7+$RP'IUQ[O'#KdP'I^Q[O,5@}P'Ic{&jO7+$RO'IhQ[O<<GuOOQS1G.w1G.wO'JXQ[O,5?bOOQS,5?b,5?bOOQS-E<t-E<tOOQS<<Lw<<LwO'JcQ[O<<LwO'LfQ[O<<L{O'MVQ[O<<KvO'MhQ[O,5?SOOQS,5?S,5?SOOQS-E<f-E<fOOQS1G1P1G1PO'MrQ[O,5;eO'MyQ[O1G1OOOQS1G1O1G1OOOQT,5@Q,5@QO'NTQ#yO,5@QO'N[Q7aO,5@QO'NcQ#yO,5@QOOQT-E<V-E<VOOQS1G/j1G/jO'NjQ#yO'#DzOOQS1G4a1G4aOOQT<<Jf<<JfO( SQ[O<<IgOOQS'#Ec'#EcO(!kQ[O1G0gO(!uQ[O1G0gO(#YQ[O1G0cOOQS1G0c1G0cO(#aQ[O'#JuO(#iQ[O1G0eOOQS<<Is<<IsO($PQ[O1G0`O($WQ[O'#EfO($hQ[O1G0`O($oQ[O'#ISOOQS,5;^,5;^ONbQ]O1G0uO(&PQ[O1G0uOOQS,5;],5;]OOQS,5?O,5?OOOQS-E<b-E<bO(&aQ[O7+$nO(&{Q[O'#K]O('YQ[O'#K[OOQS,5?`,5?`OOQS-E<r-E<rOOQS<<MO<<MOOOQS1G2k1G2kOOQS,5?],5?]OOQS-E<o-E<oO&DmQ]O,5<POOQT<= a<= aOOQT<= d<= dOOQS7+&T7+&TOOQS7+&U7+&UO('hQ[O7+&UO('oQ]O7+&UOOQT<<Jb<<JbO%;tQ]O1G1oO('vQ[O1G1oOOQT7+'Y7+'YOOQT<<Jr<<JrO!'qQ]O<<JrOOQT<<Jy<<JyO((RQ[O<<KOO((YQ]O<<KOO%;tQ]O<<K`O((aQ[O<<KOO!'qQ]O<<KOO((hQ[O<<KOOOQT<<KY<<KYO((mQ[O1G2UO'0pQ[O1G2UO&!zQ[O1G2UO()OQ[O1G2WO()VQ]O1G2WOOQS1G2W1G2WO()aQ]O1G2WO()hQ[O,5?XOOQS-E<k-E<kOOQS1G2X1G2XOOQT1G2]1G2]OOQT<<Ki<<KiO()vQ]O<<KiO(*RQ[O<<KiOOQS,5?T,5?TOOQS-E<g-E<gO'5jQ[O1G1XOOQS1G1X1G1XOOQS1G1Y1G1YO(*WQ[O'#FOOOQS1G1Z1G1ZO(*lQ[O,5>oO&.uQ[O,5>oOOQS-E<R-E<RO(*wQ[O1G5gO(*wQ[O1G5gO(+PQ[O1G/fOOQS1G/f1G/fO(+ZQ[O1G/fO%;tQ]O1G/fO(+`Q[O1G/fO(+jQ[O,5:nO':iQ[O,5:nO(,QQ[O,5:nO':iQ[O,5:nO(-^Q[O,5:rO(-tQ]O,5;_O'<vQ[O'#IfO(.OQ[O1G/fO(.aQ]O1G/fOOQS1G2v1G2vO(.hQ[O,5;`O(.sQ[O,5;aO(/[Q[O,5;bO(/cQ[O1G/fOOQS1G2x1G2xOOQS1G2{1G2{O(1TQ[O1G2{O(1bQ[O1G2{O(1iQ[O1G2{OOQS<<Ha<<HaO$1dQ[O<<HaOOQS<<LV<<LVO$1dQ[O<<LVO(1pQ[O1G3VOOQS,5?_,5?_OOQS-E<q-E<qOOQS<<LW<<LWOOQS<<L^<<L^O$1dQ[O<<L^OOQS<<Lq<<LqO(1zQ[O1G3tP(3}Q[O'#IwP(4VQ[O,5AOPO{O1G6i1G6iPOOO<<Gm<<GmOOQSANBcANBcOOQT1G5l1G5lO(4_Q#yO,5:fOOQS,5:f,5:fO(4}Q[O7+&ROOQS7+%}7+%}O!*yQ[O'#I`O(5zQ[O,5@aOOQS7+&P7+&PO(6SQ[O7+&aOOQS,5=r,5=rO(6dQ[O1G1kOOQS<<Ip<<IpO(6nQ[O7+'ZOOQTAN@^AN@^O(6{Q]OAN@jO(7SQ[OAN@jO!'qQ]OAN@jO(7ZQ[OAN@jO(7`Q[OAN@zO(7gQ[OAN@zOOQTAN@jAN@jO(7lQ[O7+'pO'0pQ[O7+'pOOQS7+'r7+'rO(7}Q[O7+'rO(8UQ]O7+'rO(8]Q[OANATOOQS7+&s7+&sO(8bQ[O,5;jOOQS1G4Z1G4ZO(8pQ[O1G4ZO(8{Q[O7++RO(9TQ[O7+%QOOQS7+%Q7+%QO(9fQ[O7+%QO(.aQ]O7+%QOOQS7+(b7+(bO(9kQ[O7+%QO(9rQ[O7+%QO%;tQ]O7+%QO(9|Q[O1G0YO(+jQ[O1G0YO':iQ[O1G0YOOQS'#Ie'#IeO(;YQ[O1G0^O(;pQ[O1G0yO(;wQ]O1G0yOOQS1G0y1G0yO(<RQ]O1G0yO(<YQ[O,5?QOOQS-E<d-E<dOOQS1G0z1G0zOOQS7+(g7+(gOOQSAN={AN={OOQSANAqANAqOOQSANAxANAxOOQS7+)`7+)`POQS,5?c,5?cPOQS-E<u-E<uOOQS1G0Q1G0QOOQS,5>z,5>zOOQS-E<^-E<^O(<qQ[OG26UO!'qQ]OG26UO(<xQ[OG26UOOQTG26UG26UO!'qQ]OG26fO(<}Q[O<<K[OOQS<<K^<<K^OOQTG26oG26oOOQS7+)u7+)uOOQS<<Hl<<HlO(=`Q[O<<HlO%;tQ]O<<HlO(=eQ[O<<HlO(=lQ[O<<HlO(.aQ]O<<HlOOQS<<K|<<K|O(=}Q[O7+%tO(+jQ[O7+%tOOQS-E<c-E<cOOQS7+&e7+&eO(>fQ[O7+&eO(>mQ]O7+&eO!'qQ]OLD+pOOQTLD+pLD+pOOQTLD,QLD,QOOQSAN>WAN>WO(>tQ[OAN>WO(>{Q[OAN>WO%;tQ]OAN>WO(?QQ[O<<I`OOQS<<JP<<JPOOQT!$( [!$( [OOQSG23rG23rO(?iQ[OG23rO(?pQ[OG23rOOQSLD)^LD)^O(?uQ[O'#CfO'qQ[O'#CfO!1pQ[O'#DTO!1pQ[O'#DTO!2UQ[O'#GyO!2UQ[O'#GyO(ArQ[O'#GzO(BTQ[O'#GzO(BfQ[O'#GzO!2{Q[O'#HQO'5jQ[O'#HRO&JQQ[O'#HRO(BwQ[O'#HRO(ClQ[O'#HRO(DaQ[O'#HkO(FOQ]O'#HoO!,QQ]O,5=vO!,QQ]O,5=vO!,QQ]O,5=vO!,QQ]O,5=vO!,QQ]O,5=vO!,QQ]O,5=vO!,QQ]O,5=vO!,QQ]O,5=vO!,QQ]O,5=vO(FVQ]O,5=}O(HpQ[O'#CxO(KQQ[O'#CxO(KyQ[O'#CxO(LZQ[O'#CxO(NbQ[O'#CxO(NoQ[O'#CxO)!bQ[O'#CxO)$XQ[O'#CxO(DaQ[O,5>VO)$dQ]O,5>ZO)$kQtO,59bO)$yQtO,59bO)%XQtO,59bO!,QQ]O,59UO)%gQ[O'#CfO)'kQ[O'#CfO)'uQ[O'#CfO)*WQ[O'#CfO),}Q[O'#CfO)-_Q[O'#CfO).[Q[O'#CfO)1bQ[O'#CfO)1oQ[O'#CfO)1yQ[O,5=tO,qQtO'#CvO)2TQtO'#CvO)2fQtO'#CvO)2wQtO'#CvO)3YQ[O'#CuO)3eQ[O,5:uO)3{Q[O,5:uO)3{Q[O,5:uO)4fQtO'#CvO)4qQtO'#CvO)4|QtO'#CvO)5XQtO'#CvO)3{Q[O'#EZO)5dQ[O'#EZODYQ[O'#EiO)6kQ[O'#EiO#2pQ[O'#JwO!,QQ]O'#HYO)7]QtO'#CvO)7kQtO'#CvO)7yQ[O'#CuO)8OQ[O'#CuO)9nQ[O'#JUO)9uQ[O,5=}O):tQ[O'#EbO)<PQ[O'#EfO)>|Q[O,59oO)@tQ[O,59oO)AUQ[O,59oO)A]Q[O,59oO$1qQ[O,59oO$1qQ[O,59oO)DVQ[O,5=eO)E}Q[O,5=eO)F_Q[O,5=eO)FfQ[O,5=eO$4^Q[O,5=eO$4^Q[O,5=eO)GoQ[O,5=fO$7[Q[O,5=fO$7[Q[O,5=fO$7[Q[O,5=fO)HxQ[O,5=lO)KcQ[O,5=lO)KsQ[O,5=lO$9qQ[O,5=lO)KzQ[O,5>PO(BwQ[O,5>VO)L_Q[O,5>ZO)LlQ[O'#CnO)NbQ[O1G3bO* yQ[O1G3bO*#nQ[O1G3bO*#uQ[O1G3bO*%dQ[O1G3bO*%kQ[O1G3bO*'SQ[O1G3bO*'aQ[O1G3bO*'nQ[O1G3bO*)PQ[O1G3bO(BwQ[O1G3qO*)dQ[O1G3uO*)qQ[O1G.pO**UQtO,59bO**aQtO,59bO**lQtO,59bO**wQtO,59bO*+SQtO,59bO*+_QtO,59bO*+jQtO,59bO)3eQ[O1G0aO*+uQ[O1G0aO)3{Q[O1G0aO)5dQ[O1G0aO*,]Q[O'#EaO*,sQ[O1G0bO*-}Q]O1G3jO*.UQ[O,5:|O*/OQ[O,5:|O*/{Q[O,5;QO*2YQ[O'#J_O*4ZQ[O1G/ZO*6RQ[O1G/ZO*6cQ[O1G/ZO*6jQ[O1G/ZO*9dQ[O1G3PO*;[Q[O1G3PO*;lQ[O1G3PO*;sQ[O1G3PO*<|Q[O1G3QO*?lQ[O1G3WO*BVQ[O1G3WO*BgQ[O1G3WO*BnQ]O1G3uO!,QQ]O7+$ZO*D_Q[O'#CxO*DmQtO,59bO*BnQ]O7+)aO)3eQ[O7+%{O*+uQ[O7+%{O*EvQ[O7+%|O*FWQ[O,5:{O!4hQ[O,5:{O*FeQ[O'#EbO*FuQ[O7+)UO*GSQ[O1G0hO*HPQ]O1G6dO*HjQ[O7+)aO*HwQ[O<<GuO*IUQ[O<<L{O*IcQ[O1G0gO*ItQ[O1G0gO*JdQ[O'#EfO*KTQ[O,5:rO*K_Q[O,5;aO*KjQ[O7+&RO*K{Q[O1G0YO*LWQ[O1G0^O*LbQ[O7+%tO*LmQ[O<<I`O!1YQ[O'#JpO'9rQ[O'#JpO*LxQ[O'#EZO)8TQ[O'#JUO!,QQ]O'#H`O!,QQ]O'#HcO!1pQ[O'#DTO!2UQ[O'#GyO!2{Q[O'#HQO*L}Q]O'#HeO*MXQ[O'#CvO*M^Q[O'#EjO*McQ[O'#EjO*MhQ[O'#CuO*MmQ[O'#CuO*MrQ[O'#CvO*MwQ[O'#CvO*M|Q[O'#CuO*NXQ[O'#CuO*NdQ[O'#CuO*+uQ[O,5:uO)5dQ[O,5:uO)5dQ[O,5:uO+ pQ[O,5:vO+!QQ[O'#J_O+!nQ[O'#J_O+!xQ[O,5>OO+!}Q[O,5;TO#5TQ]O'#FpO+#XQ[O'#J_O$1qQ[O,59oO$4^Q[O,5=eO$9qQ[O,5=lO+#lQ]O,5>ZO+#sQ[O1G.oO+#zQtO'#CvO+$VQ[O'#CqO+$[Q]O1G3uO+$cQ[O1G0aO+$mQ[O1G0bO+$tQ[O,5@xO+$yQ[O7+%{O'<[Q[O'#EuO+%TQ[O<<IgO+%_Q[O,5:nO+%uQ[O,5:nO+&`Q[O,5:nO+%uQ[O,5:nO+%_Q[O1G0YO+%uQ[O1G0YO+%_Q[O7+%tO!1pQ[O'#DTO!1pQ[O'#DTO!1pQ[O'#DTO!1pQ[O'#DTO!2UQ[O'#GyO!2UQ[O'#GyO!2UQ[O'#GyO!2UQ[O'#GyO+&kQ[O'#GzO!2{Q[O'#HQO!2{Q[O'#HQO!2{Q[O'#HQO+&|Q[O'#HRO!4hQ[O'#HRO+'qQ[O'#HRO+(fQ[O,5:uO+(|Q[O,5:uO+(|Q[O,5:uO+(|Q[O'#EZO& |Q[O'#EiO$1qQ[O,59oO$1qQ[O,59oO$1qQ[O,59oO$1qQ[O,59oO$4^Q[O,5=eO$4^Q[O,5=eO$4^Q[O,5=eO$4^Q[O,5=eO$7[Q[O,5=fO$9qQ[O,5=lO$9qQ[O,5=lO$9qQ[O,5=lO+(fQ[O1G0aO+(|Q[O1G0aO+)gQ[O'#EaO!*yQ[O'#EaO+)}Q[O'#EaO+*_Q[O1G0bO+(fQ[O7+%{O++cQ[O7+%|O+&|Q[O,5:{O'5jQ[O,5:{O+'qQ[O,5:{O++jQ[O'#EZO!,QQ]O,59TO++oQ[O,5:uO++yQ[O'#EcO+,aQ[O'#EfO#5TQ]O'#FpO+,nQ[O,5:|O+-_Q[O,5:}O+-_Q[O,5:}O+.fQ[O,5;QO+.wQ[O1G0hO+/YQ[O1G0iO+%uQ[O'#ESO+/pQ[O'#ESO+/uQ[O,5:{O+0kQ[O1G0gO+0uQ[O1G0gO+1YQ[O7+&RO+1aQ[O'#EZO+1fQ[O,5:vO+1mQ[O1G0bO+1tQ[O,5:uO+1{Q[O,5;TO+2SQ[O'#EbO+2sQ[O1G0aO+2zQ[O,5:|O+3]Q[O7+%{O+3dQ[O<<Ig",
  17352. stateData:
  17353. "+4[~O'rOSROSSOSQPQUPQ&jPQ&lPQ&mPQ&nPQ&oPQ&pPQ&qPQ&rPQ~O)XOS~O[eO`![OckOkTOq!]Or!]Os!]Ot!]Ou!]Ov!]Ox!xOz!^O!R!OO!YjO![!VO!]!UO!k!ZO!ovO!p!_O!q!`O!r!`O!s!`O!u!aO!x!bO#S!qO#`kO#p!tO#s!|O#t!{O#y!cO#}!wO$S!nO$T!oO$Z!dO$`!eO$b!fO$c!gO$g!hO$i!iO$k!jO$m!kO$o!lO$q!mO$x!pO$}!rO%Q!sO%V!uO%[#QO%`!vO%k!yO%o!zO%q!PO%w!}O%x!RO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'vRO(WZO(ZbO(]gO(^fO(_pO(`YO)R!WO)S!XO~OQ#WOU#RO&j#SO&l#TO&m#UO&n#UO&o#VO&p#VO&q#TO&r#TO~OW#YO't#YO'u#[O~O[YX[hXchXkfXoYXohXqhXrhXshXthXuhXvhXzhX!PYX!RhX!YYX!YhX![YX!]YX!_YX!aYX!bYX!dYX!eYX!fYX!hYX!iYX!jYX!phX!qhX!rhX!shX!uhX!xhX#`hX'vhX'yYX'z$VX'{YX'|YX(UYX(ZYX(ZhX([YX(]YX(]hX(^YX(^hX(_YX(lYX~O(_hX!XYX~P'qO[#qO!P#_O!Y#bO![#oO!]#fO!_#gO!a#iO!b#jO!d#lO!e#mO!f#mO!h#mO!i#nO'y#]O'{#aO'|#aO(U#pO(Z#cO([#dO(]#dO(^#eO(_#`O~Oc#uO#`#uO&`#wO&d#xO'}#rO~O%_#vO~P,qOk#yO~O!R#zO[(RXc(RXq(RXr(RXs(RXt(RXu(RXv(RXz(RX!Y(RX!p(RX!q(RX!r(RX!s(RX!u(RX!x(RX#`(RX'v(RX(Z(RX(](RX(^(RX(_(RX~Ok#yO~P-`Ok#yO!j#|O(l#|O~O'n#}O'o$PO~OW$QO(a$QO~O!V$RO(U(XP(c(XP~O`!ROk$VOq!]Or!]Os!]Ot!]Ou!]Ov!]Ox!xOz!^O!p!`O!q!`O!r!`O!s!`O!u!aO#s!|O#t!{O#}$^O%k!yO%o!zO%q!PO%w!}O%x!RO'v$UO(WZO~O['dX`'OXc'dXk'OXk'dXq'OXq'dXr'OXr'dXs'OXs'dXt'OXt'dXu'OXu'dXv'OXv'dXx'OXz'OX!Y'dX!o'dX!p'OX!p'dX!q'OX!q'dX!r'OX!r'dX!s'OX!s'dX!u'OX!u'dX!x'dX#`'dX#s'OX#t'OX%V'dX%`'dX%k'OX%o'OX%q'OX%w'OX%x'OX'v'OX'v'dX(Z'dX(]'dX(^'dX~O`!ROk$VOq!]Or!]Os!]Ot!]Ou!]Ov!]Ox!xOz!^O!p!`O!q!`O!r!`O!s!`O!u!aO#s!|O#t!{O%k!yO%o!zO%q!PO%w!}O%x!RO'v$UO~Oq!]Or!]Os!]Ot!]Ou!]Ov!]Oz!^O!p!`O!q!`O!r!`O!s!`O!u!aO[(dXc(dXk(dX!Y(dX!x(dX#`(dX'v(dX(Z(dX(](dX(^(dX~O(_$bO~P6XO[eOckOq!]Or!]Os!]Ot!]Ou!]Ov!]O!YjO![!VO!]!UO!k!ZO!x!bO#`kO%[#QO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO(ZbO(]gO(^fO(`YO)R!WO)S!XO~O`$nOk$eO!y$oO'v$cO~P7vO(Z$pO~O[$sO!Y$rO~O`![Ok8_Ox7]O#s7eO#t7dO%k7_O%o7aO%q!PO%w!}O%x!RO'v8TO~P7vO[eOckO!YjO![!VO!]!UO!k!ZO!x!bO#`kO%[#QO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO(ZbO(]gO(^fO(`YO)R!WO)S!XO~O`$nOk$eO'v$cO~P;[O[%OOckOk$|O!Y%QO!x!bO#`kO'v$cO(Z$}O(]gO(^gO~Oo%TO['xX[(hX!P'xX!Y'xX!Y(hX!['xX!]'xX!_'xX!a'xX!b'xX!d'xX!e'xX!f'xX!h'xX!i'xX'y'xX'{'xX'|'xX(U'xX(Z'xX(['xX(]'xX(^'xX(_'xX{'xX{(hX!X'xX~O!j#|O(l#|O~P=wO!j'xX(l'xX~P=wO[%YO`$nOk$eO!Y%]O!Z%`O![!VO!]!UO!k!ZO%[#QO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v$cO(Z%ZO(^%[O(`YO(l%^O)R!WO)S!XO~O!R!OO'z%aO(l%dO[(hX!Y(hX~O['xX!P'xX!Y'xX!['xX!]'xX!_'xX!a'xX!b'xX!d'xX!e'xX!f'xX!h'xX!i'xX'y'xX'{'xX'|'xX(U'xX(Z'xX(['xX(]'xX(^'xX(_'xX!j'xX(l'xX{'xX!X'xX~O[(hX!Y(hX{(hX~PBXO[%OOckOk8gO!Y%QO!x!bO#`kO'v8UO(Z8kO(]8mO(^8mO~O'z%hO~O'mXO'sQO!Z'xX'z'xXP'xX!g'xX~PBXO[%OOckOq!]Or!]Os!]Ot!]Ou!]Ov!]O!Y%QO!p!`O!q!`O!r!`O!s!`O!u!aO!x!bO#`kO%V!uO%`!vO(Z$}O(]gO(^gO~Ok%kO!o%pO'v$cO~PEgO[%OOckOk%kO!Y%QO!x!bO#`kO%`!vO'v$cO(Z$}O(]gO(^gO~O!R!OO(_%tO(l%uO~O!X%xO~P!QO`%zO%q!PO[%pXc%pXk%pXq%pXr%pXs%pXt%pXu%pXv%pXz%pX!Y%pX!p%pX!q%pX!r%pX!s%pX!u%pX!x%pX#`%pX'v%pX(Z%pX(]%pX(^%pX(_%pX{%pX!P%pX!R%pX![%pX!]%pX!_%pX!a%pX!b%pX!d%pX!e%pX!f%pX!h%pX!i%pX'y%pX'{%pX'|%pX(U%pX([%pX!j%pX(l%pXP%pX!g%pX!Z%pX'z%pX!X%pX|%pX#Q%pX#S%pX~Oo%TOk(RX{(RXP(RX!P(RX!g(RX(U(RX(l(RX~P-`O!j#|O(l#|O['xX!P'xX!Y'xX!['xX!]'xX!_'xX!a'xX!b'xX!d'xX!e'xX!f'xX!h'xX!i'xX'y'xX'{'xX'|'xX(U'xX(Z'xX(['xX(]'xX(^'xX(_'xX{'xX!Z'xX!X'xXP'xX!g'xX~O[%YO`$nOk$eO!Y%]O![!VO!]!UO!k!ZO%[#QO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v$cO(Z%ZO(^%ZO(`YO)R!WO)S!XO~O[&TO!Y&SO(Z&PO(]&UO(^&UO~O!R!OO~P! {O[(RXc(RXk(RXq(RXr(RXs(RXt(RXu(RXv(RXz(RX!Y(RX!p(RX!q(RX!r(RX!s(RX!u(RX!x(RX#`(RX'v(RX(Z(RX(](RX(^(RX(_(RX{(RXP(RX!P(RX!g(RX(U(RX(l(RX~O[#qO~P!!eO[&YO~O'sQO[(eX`(eXc(eXk(eXq(eXr(eXs(eXt(eXu(eXv(eXx(eXz(eX!Y(eX!o(eX!p(eX!q(eX!r(eX!s(eX!u(eX!x(eX#`(eX#s(eX#t(eX%V(eX%`(eX%k(eX%o(eX%q(eX%w(eX%x(eX'v(eX(Z(eX(](eX(^(eX~O[&[O~O[#qO~Ok8hO$}&`O'v8VO~O[&aOv&cO~O[&aO~O[%YO`$nOk$eO!R!OO!Y%]O![!VO!]!UO!k!ZO#S!qO$S!nO$T!oO$Z!dO$`!eO$b!fO$c!gO$g!hO$i!iO$k!jO$m!kO$o!lO$x!pO%[#QO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v7ZO(Z%ZO(^%ZO(_pO(`YO)R!WO)S!XO~O[&gO~O!R#zO(_&iO~PNbO(_&kO~O(_&lO~O'v&mO~O`!ROk$VOq!]Or!]Os!]Ot!]Ou!]Ov!]Ox7]O#s7eO#t7dO%k7_O%o7aO%q!PO%w!}O%x!RO'v$UO~O[;iO`$nOk8`O!Y%]O![;QO!];PO!k!ZO%[7jO&T;PO&U;PO&Y;UO&^!ZO&a7iO&h!ZO&i!ZO'mXO'sQO'v$cO(Z8pO(^8pO(`YO)R!WO)S!XO~O'z&rO~O!R!OO~O(_&uO~PNbO!R&wO'v&vO~O[&zO~O[%OO`!ROckOq!]Or!]Os!]Ot!]Ou!]Ov!]Ox!xOz!^O!Y%QO!p!`O!q!`O!r!`O!s!`O!u!aO!x!bO#`kO#s!|O#t!{O%k!yO%o!zO%q!PO%w!}O%x!RO(Z$}O(]gO(^gO~Ok8jOo'OO'v8WO~P!.ZO['ROc%UXk%UX!Y%UX!x%UX#`%UX%`%UX'v%UX(Z%UX(]%UX(^%UX~Oz!^O!p!`O!q!`O!r!`O!s!`O!u!aO~P!*yOk$VOz!^O|']O!R'XO'v$UO'z'WO~Ok$VOz!^O|'bO!R'XO'v$UO'z'WO~Ok$VOx'gO!R'dO#t'gO'v$UO~Ok$VOz!^O|'kO!R'XO'v$UO'z'WO~O`!ROk$VOx!xO#s!|O#t!{O%k!yO%o!zO%q!PO%w!}O%x!RO'v$UO~O['nO~O['pO(U'rO~PNeO[#qO`!ROk$VOx<RO#s<_O#t<[O%k<VO%o<YO%q!PO%w!}O%x!RO'v$UO~O[%YO`$nOk$eO!Y'vO![!VO!]!UO!k!ZO%[#QO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v$cO(Z%ZO(^%ZO(`YO)R!WO)S!XO~OX'wO'sQO'v&vO~O&k'wO~O)U'zO~O[#qO'r'|O'l&sX~OW#YO't#YO'u(OO~Oc(XOk(TO'v(SO~O`$nO!k!ZO&^!ZO&h!ZO&i!ZO'mXO'sQO'v$cO(`YO)R!WO)S!XO[&Va!Y&Va![&Va!]&Va!_&Va!a&Va!b&Va!d&Va!e&Va!f&Va!h&Va!i&Va'y&Va'{&Va'|&Va(U&Va(Z&Va([&Va(]&Va(^&Va!j&Va(l&Va~Ok$eO%[#QO&T!UO&U!UO&Y#OO&a#PO!P&Va(_&Va{&Va!Z&Va!X&VaP&Va!g&Va~P!8OO!R#zO{'wP~PNbO[mX[#_XcmXklXomXo#_XqmXrmXsmXtmXumXvmXzmX!P#_X!RmX!YmX!Y#_X![#_X!]#_X!_#_X!a#_X!b#_X!d#_X!e#_X!f#_X!h#_X!i#_X!jlX!pmX!qmX!rmX!smX!umX!xmX#`mX'vmX'y#_X'{#_X'|#_X(U#_X(ZmX(Z#_X([#_X(]mX(]#_X(^mX(^#_X(llX{mX{#_X~O(_mX(_#_X!X#_X~P!;`O[%YO`$nOk$eO![!VO!]!UO!k!ZO%[#QO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v$cO(Z%ZO(^%ZO(`YO)R!WO)S!XO~O!Y(lO~P!>{Oc(oO#`(oO%_(pO'}#rO~O!R#zO!Y(rO'{(sO!X(mP~P!>{O'n#}O'o(zO~O(b({O~Ok(|O[!UX!P!UX(U!UX(c!UX~O[)OO!P)PO(U(XX(c(XX~O(U)TO(c)SO~O[hXchXkfXohXqhXrhXshXthXuhXvhXzhX!YhX!phX!qhX!rhX!shX!uhX!xhX#`hX'vhX(ZhX(]hX(^hX!RhX!PhX(UhX(lhX{hX~O(_hX|hX'zhX![hX!]hX!_hX!ahX!bhX!dhX!ehX!fhX!hhX!ihX'yhX'{hX'|hX([hX!jhX!ZhXPhX!ghX!XhX#QhX#ShX~P!B`O'})UO~Ok)VO~O[(RXc(RXq(RXr(RXs(RXt(RXu(RXv(RXz(RX!Y(RX!p(RX!q(RX!r(RX!s(RX!u(RX!x(RX#`(RX'v(RX(Z(RX(](RX(^(RX(_(RX!P(RX!R(RX![(RX!](RX!_(RX!a(RX!b(RX!d(RX!e(RX!f(RX!h(RX!i(RX'y(RX'{(RX'|(RX(U(RX([(RX!j(RX(l(RX{(RX!Z(RX'z(RXP(RX!g(RX!X(RX|(RX#Q(RX#S(RX~Ok)VO~P!FSO(_)WO~P6XOo%TOk(RX~P!FSOq!]Or!]Os!]Ot!]Ou!]Ov!]Oz!^O!p!`O!q!`O!r!`O!s!`O!u!aO[(dac(dak(da!Y(da!x(da#`(da'v(da(Z(da(](da(^(da{(da!P(da(U(da(l(daP(da!g(da!R(da'z(da(_(da~O[YXkfXoYXohX!PYX!RhX!YYX![YX!]YX!_YX!aYX!bYX!dYX!eYX!fYX!hYX!iYX!jYX'yYX'{YX'|YX(UYX(ZYX([YX(]YX(^YX(_YX(lYX{YX~O!ZYX'zYX!XYXPYX!gYX~P!K}O[#qO!Y#bO'{#aO'|#aO!]%|a!_%|a!a%|a!b%|a!d%|a!e%|a!f%|a!h%|a!i%|a!j%|a'y%|a(U%|a(Z%|a([%|a(]%|a(^%|a(l%|a~O![#oO!P%|a(_%|a{%|a!Z%|a!X%|aP%|a!g%|a~P!N_Oc#uO#`#uO&`#wO&d#xO'}7uO~Ok)]O~Ok)]O!R#zO~Ok)]O!j#|O(l#|O~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O~P=VOq!]Or!]Os!]Ot!]Ou!]Ov!]O!y$oO~P=VO[$sO!Y$rO(_!}a!P!}a(l!}a~O{!}aP!}a!g!}a~P#$[Oo%TO!R#zO~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O|)fO!u!aO#Q)hO#S)iO[#Oa!R#Oa!Y#Oa(l#Oa(_#Oa!P#Oa~O'|)eO'z#Oa~P#%SO[%YO`$nOk$eOq!]Or!]Os!]Ot!]Ou!]Ov!]O!Y%]O![!VO!]!UO!k!ZO%[#QO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v$cO(^%ZO(`YO)R!WO)S!XO~O!Z)lO(Z)mO~P#&bO(U)pO(WZO{(gP~P4nO[#qO!P#_O!Y#bO![#oO!]#fO!_#gO!a#iO!b#jO!d#lO!e#mO!f#mO!h#mO!i#nO'y#]O'{#aO'|#aO(U#pO(Z#cO([#dO(]#dO(^#eO~O{)rO~P#(sO!R#zO[(RXq(RXr(RXs(RXt(RXu(RXv(RX{(RX!Y(RX(Z(RX(](RX(^(RX~Ok9pO~P#*_O[$sO{)tO!Y$rO~O{)rO~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O{pXPpX!PpX!gpX(UpX(_pX~P! {O{)wO~O[$sO!Y$rO(_#]a!P#]a(l#]a~O{#]aP#]a!g#]a~P#,pOc#uO#`#uO'}7uO~Oo%TO[(hX!Y(hX!P(hX!R(hX(_(hX(l(hX{(hX'z(hXP(hX!g(hX~Oo%TO~O[%YO`![Ok8aOq!]Or!]Os!]Ot!]Ou!]Ov!]Ox7]O!Y%]O![!VO!]!UO!k!ZO#s7eO#t7dO%[#QO%k7_O%o7aO%q!PO%w!}O%x!RO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v8XO(Z%ZO(^%ZO(`YO)R!WO)S!XO~OP(OP!g(OP~P#.eO[#qO!P*OO!Y#bO![#oO!]#fO!_#gO!a#iO!b#jO!d#lO!e#mO!f#mO!h#mO!i#nO'y#]O'{#aO'|#aO(U#pO(Z#cO([#dO(]#dO(^#eO~O!Z)TX~P#1UOo%TO!P*QO!j#|O(l#|O['xX!Y'xX!Z'xX!Z(kX!['xX!]'xX!_'xX!a'xX!b'xX!d'xX!e'xX!f'xX!h'xX!i'xX'y'xX'{'xX'|'xX(U'xX(Z'xX(['xX(]'xX(^'xX~O!P'xX~P#2pOo%TO!Z'xX'z'xXP'xX!g'xX~PBXO!Z*SO~O[%YO`![Ok8_Oq!]Or!]Os!]Ot!]Ou!]Ov!]Ox7]O!Y%]O![!VO!]!UO!k!ZO#s7eO#t7dO%[#QO%k7_O%o7aO%q!PO%w!}O%x!RO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v8TO(Z%ZO(^%ZO(`YO)R!WO)S!XO~O!P*UO!Z*TO~PNbO!P*UO!Z*TO~Ok;pO'v9bO~O!R!OO(l%dO~O$T*ZO%[*[O~O[*]O!P*aO!R*^O!Y$rO(l*_O(_(qX~O!P*aO(_(qX~O(_*dO~O'mXO'sQO[%Ra!P%Ra!Y%Ra![%Ra!]%Ra!_%Ra!a%Ra!b%Ra!d%Ra!e%Ra!f%Ra!h%Ra!i%Ra'y%Ra'{%Ra'|%Ra(U%Ra(Z%Ra([%Ra(]%Ra(^%Ra(_%Ra!j%Ra(l%Ra{%Ra!Z%Ra'z%Ra!X%RaP%Ra!g%Ra~Oc#uO#`#uO%_#vO'}7uO~Ok8PO~O!R!OO(_*kO(l*lO~O[%YO`$nOk$eO!Y%]O![!VO!]!UO!k!ZO$T*ZO%[*nO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v$cO(Z%ZO(^%ZO(`YO)R!WO)S!XO~O!X*oO~P!QO[#qO!Y#bO'{#aO'|#aO!P&Sa![&Sa!]&Sa!_&Sa!a&Sa!b&Sa!d&Sa!e&Sa!f&Sa!h&Sa!i&Sa'y&Sa(U&Sa(Z&Sa([&Sa(]&Sa(^&Sa(_&Sa!j&Sa(l&Sa{&Sa!Z&Sa'z&Sa!X&SaP&Sa!g&Sa~Oo%TO~PLeO[#qO!Y#bO'{#aO'|#aO!]&Va!_&Va!a&Va!b&Va!d&Va!e&Va!f&Va!h&Va!i&Va'y&Va(U&Va(Z&Va([&Va(]&Va(^&Va!j&Va(l&Va~O![#oO!P&Va(_&Va{&Va!Z&Va!X&VaP&Va!g&Va~P#?yOq!]Or!]Os!]Ot!]Ou!]Ov!]O{#UXP#UX!P#UX!g#UX(U#UX(_#UX~P! {Oq!]Or!]Os!]Ot!]Ou!]Ov!]O#Q)hO#S)iO[#VX!Y#VX(_#VX~O'|9{O!R#VX(l#VX~P#BtO[$sO!Y*wO~O!Z*zO(Z*{O~P#&bO[&TO!Y&SO(U)pO(WZO(Z&PO(]&UO(^&UO{(gP~P4nO{#YXP#YX!P#YX!g#YX(U#YX(_#YX~P! {O!R!OO[(jX!Y(jX~O!R&wO#}!wO(WZO~P4nOo%TO(l+TO~O(_+UO~Ok8hO'v8VO~O[%YO`![Ok8bOq!]Or!]Os!]Ot!]Ou!]Ov!]Ox!xOz!^O!Y%]O![!VO!]!UO!k!ZO!p!`O!q!`O!r!`O!s!`O!u!aO#s!|O#t!{O%[#QO%k!yO%o!zO%q!PO%w!}O%x!RO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO(WZO(Z%ZO(^%ZO(_pO(`YO)R!WO)S!XO~O'v8ZO~P#F]O$c+aO~O[%YO`![Ok8bOq!]Or!]Os!]Ot!]Ou!]Ov!]Ox!xOz!^O!Y%]O![!VO!]!UO!k!ZO!p!`O!q!`O!r!`O!s!`O!u!aO#s!|O#t!{O%[#QO%k!yO%o!zO%q!PO%w!}O%x!RO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v8TO(WZO(Z%ZO(^%ZO(_+eO(`YO)R!WO)S!XO~O(_+gO~P#(sO(_+gO~O(_+hO~O[+nO!x!bO'v+jO(Z+kO~O[#qO!Y#bO![7tO!]7kO!_7lO!a7nO!b7oO!d7qO!e7rO!f7rO!h7rO!i7sO'y=OO'{#aO'|#aO(U#pO(Z#cO([#dO(]#dO(^#eO~O'z+qO~P#MTO!R!OO$Z!dO$`!eO$b!fO$c!gO$g+uO$i!iO$k!jO$m!kO$o!lO$q!mO'v7[Oc$Ra!o$Ra!x$Ra#S$Ra#`$Ra#p$Ra#y$Ra#}$Ra$S$Ra$T$Ra$x$Ra$}$Ra%Q$Ra%V$Ra%`$Ra'l$Ra(]$Ra!X$Ra$^$Ra~P#F]O$z+xO~O[#qO!Y#bO![#oO!]#fO!_#gO!a#iO!b#jO!d#lO!e#mO!f#mO!h#mO!i#nO'y#]O'{#aO'|#aO(U#pO(Z#cO([#dO(]#dO(^#eO~O(_+yO~P$!vO!X+zO~P!QO!R&wO~O[(RXc(RXq(RXr(RXs(RXt(RXu(RXv(RXz(RX!Y(RX!p(RX!q(RX!r(RX!s(RX!u(RX!x(RX#`(RX'v(RX(Z(RX(](RX(^(RX~Ok9sO~P$$kO{(dX!P(dX(U(dX(l(dXP(dX!g(dX!R(dX'z(dX(_(dX~P6XO[$sO!Y$rO(_,OO~O`!ROk$VOq!]Or!]Os!]Ot!]Ou!]Ov!]Ox!xOz!^O!p!`O!q!`O!r!`O!s!`O!u!aO#p,UO#s,SO#t,TO%k!yO%o!zO%q!PO%w!}O%x!RO'v$UO(WZO~OP(nP!g(nP~P$'ROk8qO!o,XO#p,^O#y,]O#}!wO%V!uO%`!vO'v8]O(WZO~P!.ZO[&TO!Y&SO(Z=fO(]=RO(^=RO~O[(SXq(SXr(SXs(SXt(SXu(SXv(SXz(SX|(SX!R(SX!Y(SX!p(SX!q(SX!r(SX!s(SX!u(SX!x(SX'v(SX'z(SX(Z(SX(](SX(^(SX(_(SX{(SX!P(SX(U(SX![(SX!](SX!_(SX!a(SX!b(SX!d(SX!e(SX!f(SX!h(SX!i(SX'y(SX'{(SX'|(SX([(SX!j(SX(l(SXP(SX!g(SX!Z(SX!X(SX#Q(SX#S(SX~Oo%TOc(SXk(SX#`(SX~P$*OOk$VO!O,eO'v$UO~O`!ROk8rOx;ROz!^O!O,sO!X,pO!o,qO#p,^O#s7hO#t;TO#y!cO$q!mO%Q!sO%j,rO%k;SO%o7cO%q!PO%w!}O%x!RO'v8[O(WZO~PEgO|,vO!R'XO'z'WO[wacwakwaqwarwaswatwauwavwazwa!Ywa!pwa!qwa!rwa!swa!uwa!xwa#`wa'vwa(Zwa(]wa(^wa~O(_wa{wa!Pwa(Uwa(lwaPwa!gwa~P$/YO!R'XO~O!R'XO'z'WO~Ok$VO|,vO!R'XO'v$UO'z'WO~O|,zO!R'XO'z'WO[%mac%mak%maq%mar%mas%mat%mau%mav%maz%ma!Y%ma!p%ma!q%ma!r%ma!s%ma!u%ma!x%ma#`%ma'v%ma(Z%ma(]%ma(^%ma~O(_%ma{%ma!P%ma(U%ma(l%maP%ma!g%ma~P$2SOk$VO|,zO!R'XO'v$UO'z'WO~O'v&vO!X(|P~O'z-PO[%naq%nar%nas%nat%nau%nav%na!Y%na(Z%na(]%na(^%na(_%na{%na!P%na(U%na(l%naP%na!g%na|%na#Q%na#S%na'|%na~O!R'dOc%nak%naz%na!p%na!q%na!r%na!s%na!u%na!x%na#`%na'v%na~P$4wOk$VO!R'dO'v$UO~O|-VO'z'WO[%tak%taq%tar%tas%tat%tau%tav%taz%ta!Y%ta!p%ta!q%ta!r%ta!s%ta!u%ta!x%ta#`%ta'v%ta(Z%ta(]%ta(^%ta(_%ta{%ta!P%ta(U%ta(l%taP%ta!g%ta~O!R'XOc%ta~P$7gOk$VO|-VO!R'XO'v$UO'z'WO~O[#qO!Y#bO'{#aO'|#aO(Z#cO!a&Xa!b&Xa!d&Xa!e&Xa!f&Xa!h&Xa'y&Xa(U&Xa([&Xa(]&Xa(^&Xa!j&Xa(l&Xa~O![#oO!]#fO!_#gO!i#nO!P&Xa(_&Xa{&Xa!Z&Xa!X&XaP&Xa!g&Xa~P$:SO[-ZO~O[#qO!R#zO!Y-[O!P&_a![&_a!]&_a!_&_a!a&_a!b&_a!d&_a!e&_a!f&_a!h&_a!i&_a'y&_a'{&_a'|&_a(U&_a(Z&_a([&_a(]&_a(^&_a(_&_a!j&_a(l&_a{&_a!Z&_a'z&_a!X&_aP&_a!g&_a~O!P&ca(_&ca!j&ca(l&ca{&ca!Z&ca!X&caP&ca!g&ca~P$!vO[%YO`$nOk$eO!Y%]O![!VO!]!UO!k!ZO%[#QO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v$cO(Z%ZO(^%[O(`YO(l%^O)R!WO)S!XO~O!Z-_O~P$>|O)U-`O~O[#qO)U-`O~O[-bO&k-aO~O[#qO'l&sa~O'z-eO~P#MTO(_$Xi{$Xi~P#(sO[bXkfXobXohX!PbX!YbX![bX!]bX!_bX!abX!bbX!dbX!ebX!fbX!hbX!ibX!jbX'ybX'{bX'|bX(UbX(ZbX([bX(]bX(^bX(_bX(lbX{bX!ZbX'zbX!RbX!XbXPbX!gbX~Oc-gO#`-gO'}-fO~Ok-hO~Oo%TO[ai!Pai!Yai![ai!]ai!_ai!aai!bai!dai!eai!fai!hai!iai!jai'yai'{ai'|ai(Uai(Zai([ai(]ai(^ai(_ai(lai{ai!Zai'zai!XaiPai!gai~O!Z-jO~P$!vO[#qO!Y#bO![#oO!_#gO'{#aO'|#aO(Z#cO!P&Oi!a&Oi!b&Oi!d&Oi!e&Oi!f&Oi!h&Oi!i&Oi'y&Oi(U&Oi([&Oi(]&Oi(^&Oi(_&Oi!j&Oi(l&Oi{&Oi!Z&Oi!X&OiP&Oi!g&Oi~O!]&Oi~P$FiO[#qO!Y#bO![#oO'{#aO'|#aO!P&Oi!a&Oi!b&Oi!d&Oi!e&Oi!f&Oi!h&Oi!i&Oi'y&Oi(U&Oi([&Oi(]&Oi(^&Oi(_&Oi!j&Oi(l&Oi{&Oi!Z&Oi!X&OiP&Oi!g&Oi~O!]&Oi!_&Oi(Z&Oi~P$HjO[#qO!Y#bO![#oO!]#fO!_#gO!b#jO!d#lO!e#mO!f#mO!h#mO!i#nO'{#aO'|#aO(Z#cO(^#eO!P&Oi'y&Oi(U&Oi([&Oi(]&Oi(_&Oi!j&Oi(l&Oi{&Oi!Z&Oi!X&OiP&Oi!g&Oi~O!a#iO~P$JkO!a&Oi~P$JkO[#qO!Y#bO![#oO!]#fO!_#gO!d#lO!e#mO!f#mO!h#mO!i#nO'{#aO'|#aO(Z#cO!P&Oi!a&Oi!b&Oi'y&Oi(U&Oi([&Oi(]&Oi(_&Oi!j&Oi(l&Oi{&Oi!Z&Oi!X&OiP&Oi!g&Oi~O(^#eO~P$LsO(^&Oi~P$LsO[#qO!Y#bO![#oO!]#fO!_#gO!i#nO'{#aO'|#aO(Z#cO!P&Oi!a&Oi!b&Oi!d&Oi'y&Oi(U&Oi([&Oi(]&Oi(^&Oi(_&Oi!j&Oi(l&Oi{&Oi!Z&Oi!X&OiP&Oi!g&Oi~O!e#mO!f#mO!h#mO~P$N{O!e&Oi!f&Oi!h&Oi~P$N{O!]#fO~P$FiO[#qO!Y#bO![#oO!]#fO!_#gO!a#iO!b#jO!d#lO!e#mO!f#mO!h#mO!i#nO'{#aO'|#aO(Z#cO([#dO(]#dO(^#eO~O!P&Oi'y&Oi(U&Oi(_&Oi!j&Oi(l&Oi{&Oi!Z&Oi!X&OiP&Oi!g&Oi~P%#bO!P-kO{'wX~P$!vO!P-kO{'wX~O{-mO~O[#qO!R#zO!P&_i![&_i!]&_i!_&_i!a&_i!b&_i!d&_i!e&_i!f&_i!h&_i!i&_i'y&_i'{&_i'|&_i(U&_i(Z&_i([&_i(]&_i(^&_i(_&_i!j&_i(l&_i{&_i!Z&_i'z&_i!X&_iP&_i!g&_i~O!Y-[O~P%%zO!P&ci(_&ci!j&ci(l&ci{&ci!Z&ci!X&ciP&ci!g&ci~P$!vO!Z-rO~P$>|O!P-tO!X(mX~P$!vO'v-wO~O!Y-yO'{(sO(l-{O~O!P-tO!X(mX~O!X-|O~O(U#pO!P^i'y^i(_^i!j^i(l^i{^i!Z^i!X^iP^i!g^i~P%#bO!V-}O~Ok(|O[!Ua!P!Ua(U!Ua(c!Ua~O[.UOk.VO!P.VO!R.SO!V.VO!Y.TO![.VO!].VO!_.VO!a.VO!b.VO!d.VO!e.VO!f.VO!h.VO!i.VO!j.VO!k.VO'mXO'sQO'z.VO'{.VO'|.VO(U.VO(Z.PO([.QO(].QO(^.RO(_.VO(`YO~O{.YO~P%+PO!V$RO~O!P)PO(U(Xa(c(Xa~O(c.^O~O[mXcmXklXomXqmXrmXsmXtmXumXvmXzmX!YmX!pmX!qmX!rmX!smX!umX!xmX#`mX'vmX(ZmX(]mX(^mX!RmX!PmX(UmX{mXPmX!gmX~O(_mX|mX'zmX![mX!]mX!_mX!amX!bmX!dmX!emX!fmX!hmX!imX'ymX'{mX'|mX([mX!jmX(lmX!ZmX!XmX#QmX#SmX~P%-mO(_.`O~Oq!]Or!]Os!]Ot!]Ou!]Ov!]Oz!^O!p!`O!q!`O!r!`O!s!`O!u!aO~O[(dic(dik(di!Y(di!x(di#`(di'v(di(Z(di(](di(^(di{(di!P(di(U(di(l(diP(di!g(di!R(di'z(di(_(di~P%1[Oc(oO#`(oO'}7uO~O[$sO!Y$rO(_!}i!P!}i(l!}i~O{!}iP!}i!g!}i~P%3nOq!]Or!]Os!]Ot!]Ou!]Ov!]O|)fO#Q)hO#S)iO'|)eO[#Oi!R#Oi!Y#Oi'z#Oi(l#Oi(_#Oi!P#Oi~O!u!aO~P%4^O`!ROk$VOq!]Or!]Os!]Ot!]Ou!]Ov!]O#t<]O%q!PO%w!}O%x!RO'v$UO~Ox7^O#s7fO%k7`O%o7bO~P%5lO[.iOq#PXr#PXs#PXt#PXu#PXv#PX|#PX!R#PX!Y#PX#Q#PX#S#PX'z#PX'|#PX(l#PX{#PX!P#PX(_#PXP#PX!g#PX(U#PX~O[.jO~O!Z.kO~P$!vO!Z.kO(Z.mO~P#&bO!Z.kO~PNbO[.rOckOk8gO!Y.qO!x!bO#`kO'v$cO(U.vO(Z.oO~O(].sO(^.sO(l.uO{!|X!P!|XP!|X!g!|X~P%8yO!P.xO{(gX~O{.zO~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O{paPpa!Ppa!gpa(Upa(_pa~P! {O[$sO!Y*wO{paPpa!Ppa!gpa(Upa(_pa~O!R#zO~PNbOk)VO~P$*OO!P*QO!Z(kX~OP(}X!P(}X!g(}X~P$!vO(U/POP(PX!P(PX!g(PX~O!P/QOP(OX!g(OX~OP/SO!g/SO~O!P*OO!Z)Ta~O!P*QO!Z(ka~O[#qO!R#zO~O!P/ZO!R(xX(l(xX~O(_/]O~O(_/^O~O[%YO`![Ok8aOx!xO!R#zO!Y%]O![!VO!]!UO!k!ZO#s!|O#t!{O%[#QO%k!yO%o!zO%q!PO%w!}O%x!RO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v8YO(U)pO(WZO(Z%ZO(^%ZO(`YO)R!WO)S!XO{'wP{(gP~P%1[O[eO`![OckOkTOq!]Or!]Os!]Ot!]Ou!]Ov!]Ox!xOz!^O![!VO!]!UO!k!ZO!ovO!p!_O!q!`O!r!`O!s!`O!u!aO!x!bO#S!qO#`kO#p!tO#s!|O#t!{O#y!cO#}!wO$S!nO$T!oO$Z!dO$`!eO$b!fO$c!gO$g!hO$i!iO$k!jO$m!kO$o!lO$q!mO$x!pO$}!rO%Q!sO%V!uO%[#QO%`!vO%k!yO%o!zO%q!PO%w!}O%x!RO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'vRO(WZO(ZbO(]gO(^fO(_pO(`YO)R!WO)S!XO~O!R*^O!X%xO!Y/`O'{(sO~P%@oO!P*aO(_(qa~O(_/jO~P$!vO(_/^O~P!5]Oq!]Or!]Os!]Ot!]Ou!]Ov!]O{#Ua!P#UaP#Ua!g#Ua(U#Ua(_#Ua~P! {O[$sO!Y*wO{#Ua!P#UaP#Ua!g#Ua(_#Ua~O(U#Ua~P%F}Oq!]Or!]Os!]Ot!]Ou!]Ov!]O#Q)hO#S)iO'|9{O[#Va!R#Va!Y#Va(_#Va(l#Va~O!Z/rO(Z/sO~P#&bO!Z/rO~P$!vO!Z/rO~PNbO[$sO{/tO!Y*wO~O[$sO!Y*wO{#Ya!P#YaP#Ya!g#Ya(_#Ya~O(U#Ya~P%I`O{/uO~O{/vO~O(_/xO~O{/yO~P+ZO{/yO(_#`O~O{/yO~O$^0OO[$Yi`$Yic$Yik$Yiq$Yir$Yis$Yit$Yiu$Yiv$Yix$Yiz$Yi!R$Yi!Y$Yi![$Yi!]$Yi!k$Yi!o$Yi!p$Yi!q$Yi!r$Yi!s$Yi!u$Yi!x$Yi#S$Yi#`$Yi#p$Yi#s$Yi#t$Yi#y$Yi#}$Yi$S$Yi$T$Yi$Z$Yi$`$Yi$b$Yi$c$Yi$g$Yi$i$Yi$k$Yi$m$Yi$o$Yi$q$Yi$x$Yi$}$Yi%Q$Yi%V$Yi%[$Yi%`$Yi%k$Yi%o$Yi%q$Yi%w$Yi%x$Yi&T$Yi&U$Yi&Y$Yi&^$Yi&a$Yi&h$Yi&i$Yi'l$Yi'm$Yi's$Yi'v$Yi(W$Yi(Z$Yi(]$Yi(^$Yi(_$Yi(`$Yi)R$Yi)S$Yi!X$Yi~O[0QO~O(_0SO~P#(sO[%OOckOk8gO!Y%QO!x!bO#`kO'v8UO(Z<dO(]<eO(^<eO~O(_0VO~PNbO(_0SO~O[+nOq!]Or!]Os!]Ot!]Ou!]Ov!]O!x!bO!y$oO'v+jO(Z+kO~O(Z0[O~O[$sO!P0_O!Y0^O(_(uX~O(_0bO~O!R!OO$Z!dO$`!eO$b!fO$c!gO$g+uO$i!iO$k!jO$m!kO$o!lO$q!mO'v7[Oc$Ri!o$Ri!x$Ri#S$Ri#`$Ri#p$Ri#y$Ri#}$Ri$S$Ri$T$Ri$x$Ri$}$Ri%Q$Ri%V$Ri%`$Ri'l$Ri(]$Ri!X$Ri$^$Ri~P#F]O[0fO~O$z+xO[$wi`$wic$wik$wiq$wir$wis$wit$wiu$wiv$wix$wiz$wi!R$wi!Y$wi![$wi!]$wi!k$wi!o$wi!p$wi!q$wi!r$wi!s$wi!u$wi!x$wi#S$wi#`$wi#p$wi#s$wi#t$wi#y$wi#}$wi$S$wi$T$wi$Z$wi$`$wi$b$wi$c$wi$g$wi$i$wi$k$wi$m$wi$o$wi$q$wi$x$wi$}$wi%Q$wi%V$wi%[$wi%`$wi%k$wi%o$wi%q$wi%w$wi%x$wi&T$wi&U$wi&Y$wi&^$wi&a$wi&h$wi&i$wi'l$wi'm$wi's$wi'v$wi(W$wi(Z$wi(]$wi(^$wi(_$wi(`$wi)R$wi)S$wi!X$wi$^$wi~O[$sO~O!X0iO~P!QO{0jO!P0kO~P$!vO!P0lOP(nX!g(nX~OP0nO!g0nO~O(U0qO(l0pOP#rX!P#rX!g#rX~P!3aO(U0qO(l0pOP#rX!P#rX!g#rX~P!2{Oo'OO~O[$sO!Y$rO(_0tO~Ok8RO(_(RX~P$$kO'v+jO~O{0vO~P$!vO[$sO!Y*wO!R%^i(_%^i(l%^i~O[$sO!R!OO!Y$rO~O!P0wO(U0yO!R(TX~Ok$VO'v$UO~O`!ROk$VOx;RO!o0|O#s7hO#t;TO%k;SO%o7cO%q!PO%w!}O%x!RO'v$UO(WZO~P%1[O(_0}O~PAvO[1ROk(TO!R#zO!x!bO#`1TO'v(SO'z1VO(Z1OO(]1SO(^1SO~O(_1WO(l1YO~P&0RO`!ROk8rOx;ROz!^O!O,sO!X1]O!o,qO#p,^O#s7hO#t;TO#y!cO$q!mO%Q!sO%j,rO%k;SO%o7cO%q!PO%w!}O%x!RO'v8[O(WZO~PEgO[%OO`!ROckOk8rOx;RO!Y%QO!x!bO#`kO#s7hO#t;TO%`!vO%k;SO%o7cO%q!PO%w!}O%x!RO'v8[O(Z$}O(]gO(^gO~P%1[O`!ROk$VOx1cO#s!|O#t1bO#}!wO%k1dO%o!zO%q!PO%w!}O%x!RO'v$UO(WZO~P%1[O'z1eO~O|1hO[wikwiqwirwiswitwiuwivwizwi!Ywi!pwi!qwi!rwi!swi!uwi!xwi#`wi'vwi(Zwi(]wi(^wi(_wi(Uwi(lwi~O!R'XO'z'WOcwi{wi!PwiPwi!gwi~P&4xO|1kO[%mik%miq%mir%mis%mit%miu%miv%miz%mi!Y%mi!p%mi!q%mi!r%mi!s%mi!u%mi!x%mi#`%mi'v%mi(Z%mi(]%mi(^%mi(_%mi(U%mi(l%mi~O!R'XO'z'WOc%mi{%mi!P%miP%mi!g%mi~P&7SO(l1lO!P%sX!X%sX~O!P1mO!X(|X~O!X1oO~O`1qOk$VO%q!PO'v$UO~O!R'dO[%nic%nik%niq%nir%nis%nit%niu%niv%niz%ni!Y%ni!p%ni!q%ni!r%ni!s%ni!u%ni!x%ni#`%ni'v%ni(Z%ni(]%ni(^%ni(_%ni{%ni!P%ni(U%ni(l%niP%ni!g%ni|%ni#Q%ni#S%ni'|%ni~O'z-PO~P&:UO|1vO'z'WO[%tik%tiq%tir%tis%tit%tiu%tiv%tiz%ti!Y%ti!p%ti!q%ti!r%ti!s%ti!u%ti!x%ti#`%ti'v%ti(Z%ti(]%ti(^%ti(_%ti{%ti!P%ti(U%ti(l%tiP%ti!g%ti~O!R'XOc%ti~P&<iO{1wO~P$!vO{1xO~O!Y&_i~P%%zO`$nOk$eO![!VO!]!UO!k!ZO%[#QO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v$cO(`YO)R!WO)S!XO[&fa!R&fa!Y&fa(Z&fa(]&fa(^&fa~O)U1|O~O'v&vO(U1}O{)WP~O&k2PO~OklXomXo%{X~Oc2RO#`2RO'}-fO~O!P-kO{'wa~O[$sO!Y*wO!R%^q(_%^q(l%^q~O[#qO!R#zO!P&_q![&_q!]&_q!_&_q!a&_q!b&_q!d&_q!e&_q!f&_q!h&_q!i&_q'y&_q'{&_q'|&_q(U&_q(Z&_q([&_q(]&_q(^&_q(_&_q!j&_q(l&_q{&_q!Z&_q'z&_q!X&_qP&_q!g&_q~O!Y&_q~P&B_O!Y-[O~P&B_O!R#zO!Y(rO'{(sO!P'[X!X'[X~P!>{O!P-tO!X(ma~O!Z2^O~P#1UO!X2bO~P%+PO!Z2bO~P%+PO{2bO~P%+PO{2gO~P%+PO[2hO!P&}a(U&}a(c&}a~O!P)PO(U(Xi(c(Xi~O[$sO!Y$rO(_!}q!P!}q(l!}q~O{!}qP!}q!g!}q~P&FhOq!]Or!]Os!]Ot!]Ou!]Ov!]O|)fO#Q)hO#S)iO[#Oq!R#Oq!Y#Oq(l#Oq(_#Oq!P#Oq~O'|)eO'z#Oq~P&GWO[&TO!Y&SO{#Ta!P#Ta(_#TaP#Ta!g#Ta~O(Z8wO(]8xO(^8xOq#Tar#Tas#Tat#Tau#Tav#Ta|#Ta!R#Ta#Q#Ta#S#Ta'z#Ta'|#Ta(l#Ta~P&HcO`!ROk$VOx7^O#s7fO#t<]O%k7`O%o7bO%q!PO%w!}O%x!RO'v$UO~O{2pO~PNbO{(iP~P!*yO!Z2sO~P$!vO!Z2sO~PNbO[.rOckOk$|O!Y.qO!x!bO#`kO'v$cO(Z:jO(]2uO(^2uO~O{!|a!P!|aP!|a!g!|a~P&KcO[.rOckOq!]Or!]Os!]Ot!]Ou!]Ov!]O!Y.qO!x!bO!y$oO#`kO'v$cO{#UX!P#UXP#UX!g#UX~Ok8gO(Z.oO(]:sO(^:sO~P&LeO[$sO{!|a!P!|aP!|a!g!|a~O!Y*wO~P&M|O[.rO`!ROckOk8iOx!xO!Y.qO!x!bO#`kO#s!|O#t!{O%k!yO%o!zO%q!PO%w!}O%x!RO'v8WO(U)pO(WZO(Z:jO(]2uO(^2uO{(gP~P%1[O(]:sO(^:sO{#YX!P#YXP#YX!g#YX~P%8yO!Y$rO(l2yO~P&M|O'v&vO{#eX!P#eXP#eX!g#eX~O(U2|O(WZO~P4nO!P.xO{(ga~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O{piPpi!Ppi!gpi(Upi(_pi~P! {O[$sO!Y*wO{piPpi!Ppi!gpi(Upi(_pi~O!P&Wq(_&Wq!j&Wq(l&Wq{&Wq!Z&Wq!X&WqP&Wq!g&Wq~P$!vO!P/QOP(Oa!g(Oa~O!P'ia!Z'ia~P$!vO!Z3TO~O(U3UO!P%Xa!R%Xa(l%Xa~O!P/ZO!R(xa(l(xa~O!P3XO(_#`O!X(mX~P$!vO!P#{i(_#{i~P$!vO[*]O!R#zO!Y$rO(l*_O!P'^a(_'^a~O(_3ZO~P$!vO[$sO!Y*wO{#Ui!P#UiP#Ui!g#Ui(_#Ui~O(U#Ui~P''sOq!]Or!]Os!]Ot!]Ou!]Ov!]O#Q)hO#S)iO[#Vi!Y#Vi(_#Vi~O'|9{O!R#Vi(l#Vi~P'(cO!Z3]O~P$!vO!Z3]O(Z3_O~P#&bO!Z3]O~PNbO(_3`O~O[*]O!P*aO!R#zO!Y$rO(_(qX~O(l3aO~P'*SO{3cO~P#(sO{3cO~O$^3eO[$Yq`$Yqc$Yqk$Yqq$Yqr$Yqs$Yqt$Yqu$Yqv$Yqx$Yqz$Yq!R$Yq!Y$Yq![$Yq!]$Yq!k$Yq!o$Yq!p$Yq!q$Yq!r$Yq!s$Yq!u$Yq!x$Yq#S$Yq#`$Yq#p$Yq#s$Yq#t$Yq#y$Yq#}$Yq$S$Yq$T$Yq$Z$Yq$`$Yq$b$Yq$c$Yq$g$Yq$i$Yq$k$Yq$m$Yq$o$Yq$q$Yq$x$Yq$}$Yq%Q$Yq%V$Yq%[$Yq%`$Yq%k$Yq%o$Yq%q$Yq%w$Yq%x$Yq&T$Yq&U$Yq&Y$Yq&^$Yq&a$Yq&h$Yq&i$Yq'l$Yq'm$Yq's$Yq'v$Yq(W$Yq(Z$Yq(]$Yq(^$Yq(_$Yq(`$Yq)R$Yq)S$Yq!X$Yq~O(_3fO~O(_3hO~PNbO'z3iO(l*_O~P'*SO(_3hO~P$!vO{3kO~PNbO(_3mO~O[+nOq!]Or!]Os!]Ot!]Ou!]Ov!]O!x!bO'v+jO(Z+kO~O[$sO!Y0^O!P$ra(_$ra{$ra~O!Z3sO(Z3tO~P#&bO!P0_O(_(ua~O[$sO{3wO!Y0^O~O!R!OO$Z!dO$`!eO$b!fO$c!gO$g+uO$i!iO$k!jO$m!kO$o!lO$q!mO'v7[Oc$Rq!o$Rq!x$Rq#S$Rq#`$Rq#p$Rq#y$Rq#}$Rq$S$Rq$T$Rq$x$Rq$}$Rq%Q$Rq%V$Rq%`$Rq'l$Rq(]$Rq!X$Rq$^$Rq~P#F]O(_3yO~O'mXO'sQO~O!P0lOP(na!g(na~Oo%TO(l4OOP#rak(RX!P#ra!g#ra(U(RX~P$$kO`!ROk$VOx7]O#s7eO#t7dO%k7_O%o7aO%q!PO%w!}O%x!RO'v$UO~O'v+jOP#va!P#va!g#va~Oo%TO(l4OOP#ra[(SXc(SXk(SXq(SXr(SXs(SXt(SXu(SXv(SXz(SX|(SX!P#ra!R(SX!Y(SX!g#ra!p(SX!q(SX!r(SX!s(SX!u(SX!x(SX#`(SX'v(SX'z(SX(U(SX(Z(SX(](SX(^(SX~O#s4RO#t4RO~Ok$VO!O4UO'v$UO~O!P0wO!R(Ta~O!P0wO(U4XO!R(Ta~O(_4ZO(l4]O~P&0RO`!ROk$VOx;RO#s7hO#t;TO%k;SO%o7cO%q!PO%w!}O%x!RO'v$UO~P%1[O[1ROk(TOq!]Or!]Os!]Ot!]Ou!]Ov!]O!x!bO!y$oO#`1TO'v(SO(Z1OO(]1SO(^1SO~O(Z4bO~O[$sO!P4eO!R*^O!Y4dO'z1VO~O(_4ZO(l4gO~P';oO[1ROk(TO!x!bO#`1TO'v(SO(Z=ZO(];wO(^;wO~O[1ROk(TO!x!bO#`1TO'v(SO(Z1OO(]1SO(^1SO~Oo%TO[(fX!P(fX!R(fX!Y(fX'z(fX(_(fX(l(fX{(fX~O(_4ZO~O(_4mO~PAvOk)VO(_(SX~P$$kOo%TOk(RX(_(SX~P$$kO(_4nO~O'v&vO!P'gX!X'gX~O!P1mO!X(|a~Oo%TO[({ac({ak({aq({ar({as({at({au({av({az({a!R({a!Y({a!p({a!q({a!r({a!s({a!u({a!x({a#`({a'v({a(Z({a(]({a(^({a(_({a{({a!P({a![({a!]({a!_({a!a({a!b({a!d({a!e({a!f({a!h({a!i({a'y({a'{({a'|({a(U({a([({a!j({a(l({aP({a!g({a!Z({a'z({a!X({a|({a#Q({a#S({a~O!R'dO[%nqc%nqk%nqq%nqr%nqs%nqt%nqu%nqv%nqz%nq!Y%nq!p%nq!q%nq!r%nq!s%nq!u%nq!x%nq#`%nq'v%nq(Z%nq(]%nq(^%nq(_%nq{%nq!P%nq(U%nq(l%nqP%nq!g%nq|%nq#Q%nq#S%nq'|%nq~O`$nO!R#zO!k!ZO&^!ZO&h!ZO&i!ZO'mXO'sQO'v$cO(`YO)R!WO)S!XO[)Qi!Y)Qi![)Qi!])Qi!_)Qi!a)Qi!b)Qi!d)Qi!e)Qi!f)Qi!h)Qi!i)Qi'y)Qi'{)Qi'|)Qi(U)Qi(Z)Qi([)Qi(])Qi(^)Qi!j)Qi(l)Qi~Ok$eO%[#QO&T!UO&U!UO&Y#OO&a#PO!P)Qi(_)Qi{)Qi!Z)Qi!X)QiP)Qi!g)Qi~P'EOO{4|O~O!Z4}O~P$!vO!P&cq(_&cq!j&cq(l&cq{&cq!Z&cq!X&cqP&cq!g&cq~P$!vO!P5OO{)WX~O{5QO~O)U5RO~O!P]y(_]y!j]y(l]y{]y!Z]y!X]yP]y!g]y~P$!vO{'ja!P'ja~P$!vO[#qO!R#zO!P&_y!Y&_y![&_y!]&_y!_&_y!a&_y!b&_y!d&_y!e&_y!f&_y!h&_y!i&_y'y&_y'{&_y'|&_y(U&_y(Z&_y([&_y(]&_y(^&_y(_&_y!j&_y(l&_y{&_y!Z&_y'z&_y!X&_yP&_y!g&_y~O!P&cy(_&cy!j&cy(l&cy{&cy!Z&cy!X&cyP&cy!g&cy~P$!vO[$sO!Y*wO!R%^y(_%^y(l%^y~O!P'[a!X'[a~P$!vO!Z2^O~P$!vO!P#li!X#li~P$!vO!X5TO~P%+PO!Z5TO~P%+PO{5TO~P%+PO{5VO~P%+PO[$sO!Y$rO(_!}y!P!}y(l!}y~O{!}yP!}y!g!}y~P'NqOq#Tir#Tis#Tit#Tiu#Tiv#Ti|#Ti!R#Ti#Q#Ti#S#Ti'z#Ti'|#Ti(l#Ti{#Ti!P#Ti(_#TiP#Ti!g#Ti~O[$sO!Y*wO~P( aO[&TO!Y&SO(Z8wO(]8xO(^8xO~P( aO{5XO~P$!vO!P5YO{(iX~O{5[O~O[$sO{!|i!P!|iP!|i!g!|i~O!Y*wO~P(#nO{#YX!P#YXP#YX!g#YX~P&KcO!Y$rO~P(#nO['TXc&vXk&vXq'TXr'TXs'TXt'TXu'TXv'TX{'TX!P'TX!Y'TX!x&vX#`&vX'v&vX(Z'TX(]'TX(^'TXP'TX!g'TX~O{#ci!P#ciP#ci!g#ci~P$!vO[$sO!Y*wO{pqPpq!Ppq!gpq(Upq(_pq~OP)PX!P)PX!g)PX~P$!vO(U5^OP)OX!P)OX!g)OX~O!Z5`O~P$!vO!Z5`O~PNbO{$]i!P#{a(_#{a~O(_5cO~P$!vO{5eO~PNbO{5eO~P#(sO{5eO~O[$sO!Y0^O!P$ri(_$ri{$ri~O!Z5lO~P$!vO!Z5lO(Z5nO~P#&bO!Z5lO~PNbO[$sO!Y0^O!P'aa(_'aa~O{5oO'mXO'sQO~O{5oO~O'v+jO(U0qO(l0pOP#rX!P#rX!g#rX~O(U5rO!P&wa!R&wa~O!P0wO!R(Ti~O(_5vO(l5xO~P';oO(_5vO~O(_5vO(l5|O~P&0ROq!]Or!]Os!]Ot!]Ou!]Ov!]O~P'<vO[$sO!Y4dO!P!va!R!va'z!va(_!va(l!va~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O|6QO#Q)hO#S)iO[!za!Y!za~O'|)eO!P!za!R!za'z!za(_!za(l!za~P(,iO!Z6UO(Z6VO~P#&bO!P4eO!R#zO'z1VO(_5vO(l5|O~O!R#zO~P#;}O[$sO{6YO!Y4dO~O[$sO!Y4dO!P#ia!R#ia'z#ia(_#ia(l#ia~O(_#ja~P$!vO(_5vO~P$!vO|-VO'z'WO[%tak%taq%tar%tas%tat%tau%tav%taz%ta!Y%ta!p%ta!q%ta!r%ta!s%ta!u%ta!x%ta#`%ta'v%ta(Z%ta(]%ta(^%ta~O!R'XO(_6ZOc%ta~P(/jO(_6ZO~P$/YO(_6ZO~P$2SO!P%si!X%si~P$!vO!Y-[O[&bi!P&bi!R&bi![&bi!]&bi!_&bi!a&bi!b&bi!d&bi!e&bi!f&bi!h&bi!i&bi'y&bi'{&bi'|&bi(U&bi(Z&bi([&bi(]&bi(^&bi(_&bi!j&bi(l&bi{&bi!Z&bi'z&bi!X&biP&bi!g&bi~O'v&vO(U6`O~O!P5OO{)Wa~O{6bO~P%+PO[$sO!Y*wO{#Tq!P#Tq(_#TqP#Tq!g#Tq~Oq#Tqr#Tqs#Tqt#Tqu#Tqv#Tq|#Tq!R#Tq#Q#Tq#S#Tq'z#Tq'|#Tq(l#Tq~P(4fO!P5YO{(ia~O{#cq!P#cqP#cq!g#cq~P$!vO!X'[a(_$Xi~P#(sO{$]q!P#{i(_#{i~P$!vO{6fO~PNbO{6fO~P#(sO{6fO~O{6iO~P$!vO{6iO~O[$sO!Y0^O!P$rq(_$rq{$rq~O!Z6kO~P$!vO!Z6kO~PNbO(_6lO~O(l4OOP#ra!P#ra!g#ra~O(U6mO!P&wi!R&wi~O!P0wO!R(Tq~O!P4eO!R#zO'z1VO(_6nO(l6pO~O(_6nO~O(_6nO~P$!vO(_6nO(l6sO~P';oO[$sO!Y4dO!P!vi!R!vi'z!vi(_!vi(l!vi~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O|6QO#Q)hO#S)iO[!zi!Y!zi~O'|)eO!P!zi!R!zi'z!zi(_!zi(l!zi~P(:eO!Z6xO~P$!vO!Z6xO(Z6zO~P#&bO!Z6xO~PNbO[$sO!Y4dO!P'Ya!R'Ya'z'Ya(_'Ya(l'Ya~O{6{O~P#(sO{6{O~O[$sO!Y0^O!P$ry(_$ry{$ry~O(_7OO~O(_7OO~P$!vO!P4eO!R#zO'z1VO(_7OO(l7RO~O[$sO!Y4dO!P!vq!R!vq'z!vq(_!vq(l!vq~O!Z7TO~P$!vO!Z7TO~PNbO(_7VO~P$!vO(_7VO~O[$sO!Y4dO!P!vy!R!vy'z!vy(_!vy(l!vy~O(_7YO~P$!vO(_7YO~O[YXkfXoYXohX!PYX!RhX!YYX![YX!]YX!_YX!aYX!bYX!dYX!eYX!fYX!hYX!iYX!jYX'yYX'z$VX'{YX'|YX(UYX(ZYX([YX(]YX(^YX(_YX(lYX~Ok$VOx9WO!R'dO#t9WO'v$UO~Ok$VOx9XO!R'dO#t9XO'v$UO~Ok$VOx9YO!R'dO#t9YO'v$UO~O`!ROk$VOx<SO#s7gO#t<[O%k<WO%o7bO%q!PO%w!}O%x!RO'v$UO~O`!ROk$VOx;RO#s7hO#t;TO%k;SO%o7cO%q!PO%w!}O%x!RO'v$UO~O[#qO~P(BwO[;iO`$nOk8`O![;QO!];PO!k!ZO%[7jO&T;PO&U;PO&Y;UO&^!ZO&a7iO&h!ZO&i!ZO'mXO'sQO'v$cO(Z8pO(^8pO(`YO)R!WO)S!XO~O!Y;nO~P(DhOk8`O%[7jO&T;PO&U;PO&Y;UO&a7iO'z&Va~P!8OO[#_XklXomXo#_X!P#_X!RmX!Y#_X![#_X!]#_X!_#_X!a#_X!b#_X!d#_X!e#_X!f#_X!h#_X!i#_X!jlX'y#_X'{#_X'|#_X(U#_X(Z#_X([#_X(]#_X(^#_X(llX{#_XP#_X!g#_X~O(_#_X!Z#_X'z#_X!X#_X~P(FpO[mX[#_XcmXklXomXo#_XqmXrmXsmXtmXumXvmXzmX!YmX!Y#_X!pmX!qmX!rmX!smX!umX!xmX#`mX'vmX(ZmX(]mX(^mX{mX{#_X!PmX(UmX~O(_mX(lmX~P(IQO[#_XklXomXo#_X!P#_X!Y#_X{#_XP#_X!g#_X~O!R#_X(_#_X(l#_X'z#_X~P(K[OPmXP#_X!PmX!gmX!g#_X(UmX~P!;`O[mX[#_XklXomXo#_XqmXrmXsmXtmXumXvmXzmX!RmX!Y#_X!pmX!qmX!rmX!smX!umX!xmX#`mX'vmX(ZmX(]mX(^mX~O'zmX(_mX(lmX~P(LqOcmX{#_X!P#_X!YmX![#_X!]#_X!_#_X!a#_X!b#_X!d#_X!e#_X!f#_X!h#_X!i#_X!jlX'y#_X'{#_X'|#_X(U#_X(Z#_X([#_X(]#_X(^#_X(_#_X(llX~P(LqO[mX[#_XcmXklXomXo#_XqmXrmXsmXtmXumXvmXzmX!YmX!Y#_X!pmX!qmX!rmX!smX!umX!xmX#`mX'vmX(ZmX(]mX(^mX(_#_X~OklXomX(_#_X~O!Y;rO~P(DhOc(oO#`(oO%_(pO'}7uO~Oc(oO#`(oO%_(pO'}7yO~Oc(oO#`(oO%_(pO'}7vO~O[hXqhXrhXshXthXuhXvhX{hX!YhX(ZhX(]hX(^hXchXzhX!phX!qhX!rhX!shX!uhX!xhX#`hX'vhX~P!K}O[YXkfXoYXohX!PYX!YYX(_YX(lYX~O!RYX'zYX~P)'POkfXohX(_YX(lhX~O[YX[hXchXkfXoYXohXqhXrhXshXthXuhXvhXzhX!YYX!YhX!phX!qhX!rhX!shX!uhX!xhX#`hX'vhX(ZhX(]hX(^hX{YX{hX!PhX(UhX(lhX~O(_YX~P)(TO[YX[hXkfXoYXohXqhXrhXshXthXuhXvhX!PYX!PhX!RhX!YYX!YhX![YX!]YX!_YX!aYX!bYX!dYX!eYX!fYX!hYX!iYX!jYX'yYX'{YX'|YX(UYX(UhX(ZYX(ZhX([YX(]YX(]hX(^YX(^hX(lYX~OPYXPhX!gYX!ghX~P)*_OchXzhX{YX{hX!phX!qhX!rhX!shX!uhX!xhX#`hX'vhX(lhX~P)*_O[hXchXqhXrhXshXthXuhXvhXzhX!YhX!phX!qhX!rhX!shX!uhX!xhX#`hX'vhX(ZhX(]hX(^hX~P!K}O[YX[hXkfXoYXohXqhXrhXshXthXuhXvhXzhX!YYX!phX!qhX!rhX!shX!uhX!xhX#`hX'vhX(ZhX(]hX(^hX(_hX~O!RhX'zhX(lhX~P)/qOchX!YhX~P)/qO![7tO'z%|a~P!N_Oc#uO#`#uO&`7}O&d8OO'}7uO~Oc#uO#`#uO&`#wO&d#xO'}7xO~Oc#uO#`#uO&`#wO&d#xO'}7zO~Ok)]O!j8SO(l8SO~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O~PDYOq!]Or!]Os!]Ot!]Ou!]Ov!]O!y$oO~PDYOc#uO#`#uO'}7wO~Oc#uO#`#uO'}7|O~Oc#uO#`#uO'}7vO~Oc#uO#`#uO'}7{O~O[%OOckOk8gOq!]Or!]Os!]Ot!]Ou!]Ov!]O!Y%QO!x!bO!y$oO#`kO'v$cO(Z8lO(]8nO(^8nO~O[%OOckOk8gO!Y%QO!x!bO#`kO'v$cO(Z8lO(]8nO(^8nO~Oc#uO#`#uO%_#vO'}7vO~Oc#uO#`#uO%_#vO'}7yO~Ok8RO~Ok8QO~O!j8SO(l8SO['xX!Y'xX!['xX!]'xX!_'xX!a'xX!b'xX!d'xX!e'xX!f'xX!h'xX!i'xX'y'xX'z'xX'{'xX'|'xX(U'xX(Z'xX(['xX(]'xX(^'xX~Oo%TO~P)8TO![7tO'z&Va~P#?yO[&TOq!]Or!]Os!]Ot!]Ou!]Ov!]O!Y&SO(Z8wO(]8xO(^8xO~O|#UX!R#UX#Q#UX#S#UX'z#UX'|#UX(l#UX{#UX!P#UX(_#UXP#UX!g#UX~P):PO[&TO!Y&SO(Z8wO(]8xO(^8xO~Oq#YXr#YXs#YXt#YXu#YXv#YX|#YX!R#YX#Q#YX#S#YX'z#YX'|#YX(l#YX{#YX!P#YX(_#YXP#YX!g#YX~P);nO|,vO[wa!Rwa!Ywa![wa!]wa!_wa!awa!bwa!dwa!ewa!fwa!hwa!iwa'ywa'{wa'|wa(Uwa(Zwa([wa(]wa(^wa(_wa!jwa(lwa~O'z'WO!Pwa{wa!Zwa!XwaPwa!gwa~P)=]O'z'WO[waqwarwaswatwauwavwa|wa!Ywa#Qwa#Swa'|wa(Zwa(]wa(^wa(_wa!Pwa(lwa~O!R'XO{waPwa!gwa~P)?gO!Rwa~P)?gO'zwakwaqwarwaswatwauwavwazwa!pwa!qwa!rwa!swa!uwa!xwa#`wa'vwa~P)=]O|,zO[%ma!R%ma!Y%ma![%ma!]%ma!_%ma!a%ma!b%ma!d%ma!e%ma!f%ma!h%ma!i%ma'y%ma'{%ma'|%ma(U%ma(Z%ma([%ma(]%ma(^%ma(_%ma!j%ma(l%ma~O'z'WO!P%ma{%ma!Z%ma!X%maP%ma!g%ma~P)BfO'z'WO[%maq%mar%mas%mat%mau%mav%ma|%ma!Y%ma#Q%ma#S%ma'|%ma(Z%ma(]%ma(^%ma(_%ma!P%ma(l%ma~O!R'XO{%maP%ma!g%ma~P)DpO!R%ma~P)DpO'z%mak%maq%mar%mas%mat%mau%mav%maz%ma!p%ma!q%ma!r%ma!s%ma!u%ma!x%ma#`%ma'v%ma~P)BfO!R%na![%na!]%na!_%na!a%na!b%na!d%na!e%na!f%na!h%na!i%na'y%na'{%na([%na!j%na!Z%na!X%na~P$4wO!R%ta![%ta!]%ta!_%ta!a%ta!b%ta!d%ta!e%ta!f%ta!h%ta!i%ta'y%ta'{%ta'|%ta([%ta!j%ta!Z%ta!X%ta~P$7gO'z'WO[%taq%tar%tas%tat%tau%tav%ta|%ta!Y%ta#Q%ta#S%ta'|%ta(Z%ta(]%ta(^%ta(_%ta!P%ta(l%ta~O!R'XO{%taP%ta!g%ta~P)JUO!R%ta~P)JUO![7tO!]7kO!_7lO!i7sO'z&Xa~P$:SO'z&ca!j&ca(l&ca~P#MTO[bXkfXohX!RbX~O[#qO!Y#bO![7tO!_7lO'{#aO'|#aO(Z#cO!a&Oi!b&Oi!d&Oi!e&Oi!f&Oi!h&Oi!i&Oi'y&Oi'z&Oi(U&Oi([&Oi(]&Oi(^&Oi!j&Oi(l&Oi~O!]&Oi~P)LzO[#qO!Y#bO![7tO'{#aO'|#aO!a&Oi!b&Oi!d&Oi!e&Oi!f&Oi!h&Oi!i&Oi'y&Oi'z&Oi(U&Oi([&Oi(]&Oi(^&Oi!j&Oi(l&Oi~O!]&Oi!_&Oi(Z&Oi~P)NiO[#qO!Y#bO![7tO!]7kO!_7lO!b7oO!d7qO!e7rO!f7rO!h7rO!i7sO'{#aO'|#aO(Z#cO(^#eO'y&Oi'z&Oi(U&Oi([&Oi(]&Oi!j&Oi(l&Oi~O!a7nO~P*!WO!a&Oi~P*!WO[#qO!Y#bO![7tO!]7kO!_7lO!d7qO!e7rO!f7rO!h7rO!i7sO'{#aO'|#aO(Z#cO!a&Oi!b&Oi'y&Oi'z&Oi(U&Oi([&Oi(]&Oi!j&Oi(l&Oi~O(^#eO~P*#|O(^&Oi~P*#|O[#qO!Y#bO![7tO!]7kO!_7lO!i7sO'{#aO'|#aO(Z#cO!a&Oi!b&Oi!d&Oi'y&Oi'z&Oi(U&Oi([&Oi(]&Oi(^&Oi!j&Oi(l&Oi~O!e7rO!f7rO!h7rO~P*%rO!e&Oi!f&Oi!h&Oi~P*%rO!]7kO~P)LzO[#qO!Y#bO![7tO!]7kO!_7lO!a7nO!b7oO!d7qO!e7rO!f7rO!h7rO!i7sO'{#aO'|#aO(Z#cO([#dO(]#dO(^#eO~O'y&Oi'z&Oi(U&Oi!j&Oi(l&Oi~P*'uO'z&ci!j&ci(l&ci~P#MTO(U#pO'y^i'z^i!j^i(l^i~P*'uOc(oO#`(oO'}#rO~Oc(oO#`(oO'}7wO~Oc(oO#`(oO'}7|O~Oc(oO#`(oO'}7{O~Oc(oO#`(oO'}7vO~Oc(oO#`(oO'}7xO~Oc(oO#`(oO'}7zO~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O~P)6kOq!]Or!]Os!]Ot!]Ou!]Ov!]O~P!4hOq!]Or!]Os!]Ot!]Ou!]Ov!]O|)fO#Q)hO#S)iO'|<tO[#Oi!Y#Oi{#Oi(_#Oi!P#Oi(l#OiP#Oi!g#Oi~O!R#zO~P!,QO|#Ua!R#Ua#Q#Ua#S#Ua'z#Ua'|#Ua(l#Ua{#Ua!P#Ua(_#UaP#Ua!g#Ua~P):POq#Uar#Uas#Uat#Uau#Uav#Ua|#Ua!R#Ua#Q#Ua#S#Ua'z#Ua'|#Ua(l#Ua~P%F}Oq#Yar#Yas#Yat#Yau#Yav#Ya|#Ya!R#Ya#Q#Ya#S#Ya'z#Ya'|#Ya(l#Ya~P%I`O[(RXq(RXr(RXs(RXt(RXu(RXv(RXz(RX!p(RX!q(RX!r(RX!s(RX!u(RX!x(RX#`(RX'v(RX(Z(RX(](RX(^(RX(l(RX~Ok8QO!R(RX'z(RX(_(RX~P*0xO|1hO[wi!Rwi!Ywi![wi!]wi!_wi!awi!bwi!dwi!ewi!fwi!hwi!iwi'ywi'{wi'|wi(Uwi(Zwi([wi(]wi(^wi(_wi!jwi(lwi~O'z'WO!Pwi{wi!Zwi!XwiPwi!gwi~P*2jO'z'WO[wiqwirwiswitwiuwivwi|wi!Ywi#Qwi#Swi'|wi(Zwi(]wi(^wi(_wi!Pwi(lwi~O!R'XO{wiPwi!gwi~P*4tO!Rwi~P*4tO!Rwi![wi!]wi!_wi!awi!bwi!dwi!ewi!fwi!hwi!iwi'ywi'zwi'{wi'|wi([wi!jwi~P&4xO|1kO[%mi!R%mi!Y%mi![%mi!]%mi!_%mi!a%mi!b%mi!d%mi!e%mi!f%mi!h%mi!i%mi'y%mi'{%mi'|%mi(U%mi(Z%mi([%mi(]%mi(^%mi(_%mi!j%mi(l%mi~O'z'WO!P%mi{%mi!Z%mi!X%miP%mi!g%mi~P*7sO'z'WO[%miq%mir%mis%mit%miu%miv%mi|%mi!Y%mi#Q%mi#S%mi'|%mi(Z%mi(]%mi(^%mi(_%mi!P%mi(l%mi~O!R'XO{%miP%mi!g%mi~P*9}O!R%mi~P*9}O!R%mi![%mi!]%mi!_%mi!a%mi!b%mi!d%mi!e%mi!f%mi!h%mi!i%mi'y%mi'z%mi'{%mi'|%mi([%mi!j%mi~P&7SO'z-PO[%ni!P%ni!R%ni!Y%ni![%ni!]%ni!_%ni!a%ni!b%ni!d%ni!e%ni!f%ni!h%ni!i%ni'y%ni'{%ni'|%ni(U%ni(Z%ni([%ni(]%ni(^%ni(_%ni!j%ni(l%ni{%ni!Z%ni!X%niP%ni!g%niq%nir%nis%nit%niu%niv%ni|%ni#Q%ni#S%ni~O!R%ti![%ti!]%ti!_%ti!a%ti!b%ti!d%ti!e%ti!f%ti!h%ti!i%ti'y%ti'{%ti'|%ti([%ti!j%ti!Z%ti!X%ti~P&<iO'z'WO[%tiq%tir%tis%tit%tiu%tiv%ti|%ti!Y%ti#Q%ti#S%ti'|%ti(Z%ti(]%ti(^%ti(_%ti!P%ti(l%ti~O!R'XO{%tiP%ti!g%ti~P*@xO!R%ti~P*@xO`$nOk8`O![;QO!];PO!k!ZO%[7jO&T;PO&U;PO&Y;UO&^!ZO&a7iO&h!ZO&i!ZO'mXO'sQO'v$cO(`YO)R!WO)S!XO[&fa!R&fa!Y&fa(Z&fa(]&fa(^&fa~O[%{XklXomX!R%{X~Oc2RO#`2RO'}:bO~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O|)fO#Q)hO#S)iO[#Oq!Y#Oq(_#Oq!P#Oq(l#Oq~O'|<tO{#OqP#Oq!g#Oq~P*DxO!R#Ta(_#Ta(l#Ta~P$)mOk$|O(Z:jO(]2uO(^2uO~P&LeO'z&Wq!j&Wq(l&Wq~P#MTOq#Uir#Uis#Uit#Uiu#Uiv#Ui|#Ui!R#Ui#Q#Ui#S#Ui'z#Ui'|#Ui(l#Ui~P''sOk8`O%[7jO&T;PO&U;PO&Y;UO&a7iO'z)Qi~P'EOO'z&cq!j&cq(l&cq~P#MTO'z]y!j]y(l]y~P#MTO'z&cy!j&cy(l&cy~P#MTO[$sO!Y*wO!R#Ti(_#Ti(l#Ti~O!R#Ti(_#Ti(l#Ti~P$)mOckOk8gO!x!bO#`kO'v$cO~O[.rO!Y.qO(Z.oO(]:sO(^:sO{#YX!P#YXP#YX!g#YX~P*JRO'|<tO{!za~P(,iO[$sO!Y4dO{#ia~O[$sO!Y*wO!R#Tq(_#Tq(l#Tq~O[$sO!Y4dO{!vi~O'|<tO{!zi~P(:eO[$sO!Y4dO{!vq~O[$sO!Y4dO{!vy~O(Z8fO~O[=SO(U'rO~P!,TOk9pO~Ok9qO~Ok9rO~Ok9sO~Ok9tO~Ok9uO~Ok9vO~Ok9pO!j#|O(l#|O~Ok9uO!j#|O(l#|O~Ok9vO!j#|O(l#|O~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O|)fO!u!aO#Q)hO#S)iO[#Oa!Y#Oa(_#Oa!P#Oa(l#Oa~O'|<tO{#OaP#Oa!g#Oa~P*NoOk9uO!R#zOP(RX!P(RX!g(RX(U(RX{(RX(l(RX~P$$kOk9vO!R#zO~P$$kO{9}O~O!R#]a'z#]a~P#,pOk9tO{(RX!P(RX(U(RX(l(RX~P$$kO!Z:`O~P$>|O'z:aO~P#MTOc-gO#`-gO'}:bO~Ok:cO~O!Z:dO~P$>|O!R!}i'z!}i~P%3nO!u!aO~P*,sO{:mO~O!R!}q'z!}q~P&FhO!R!}y'z!}y~P'NqOq!]Or!]Os!]Ot!]Ou!]Ov!]O~P'<[Oq!]Or!]Os!]Ot!]Ou!]Ov!]O!y$oO~P'<[O[$sO!Y4dO{!va~Ok$VOx<nO!R'dO#t<nO'v$UO~O`!ROk$VOx<QO#s<^O#t<ZO%k<UO%o7aO%q!PO%w!}O%x!RO'v$UO~O`!ROk$VOx<TO#s<`O#t<]O%k<XO%o<YO%q!PO%w!}O%x!RO'v$UO~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O~P& |Oq!]Or!]Os!]Ot!]Ou!]Ov!]O!y$oO~P& |Oq!]Or!]Os!]Ot!]Ou!]Ov!]O~P+&|Ox<TO#s<`O%k<XO%o<YO~P%5lOq!]Or!]Os!]Ot!]Ou!]Ov!]O|)fO#Q)hO#S)iO'|<vO[#Oi!P#Oi!R#Oi!Y#Oi(_#Oi(l#Oi~O'|<vO~P&GWO(Z;cO~O!R!}a'z!}a~P#$[O'|<uO{#VX!P#VXP#VX!g#VX(U#VX~P#BtO!R#YX(_#YX(l#YX~P$)mOq!]Or!]Os!]Ot!]Ou!]Ov!]O!R#Ua(_#Ua(l#Ua~P$)mOq!]Or!]Os!]Ot!]Ou!]Ov!]O#Q)hO#S)iO'|<uO[#Va{#Va!Y#Va!P#VaP#Va!g#Va(U#Va(_#Va~O[$sO!Y*wO!R#Ya(_#Ya(l#Ya~O[$sO!Y*wO!R#Ui(_#Ui(l#Ui~O'|<uO{#Vi!P#ViP#Vi!g#Vi(U#Vi~P'(cO(Z;|O~O(Z&PO(]&UO(^&UO(U#Ta~P&HcO{#Ti!P#TiP#Ti!g#Ti(U#Ti(_#Ti~O[$sO!Y*wO~P+0VO[&TO!Y&SO(Z&PO(]&UO(^&UO~P+0VO(U#Tq~P(4fO(Z<cO~O'|<vO~P#%SO!u!aO~P+*_O!R!}a~P#$[O!R#]a~P#,pOq!]Or!]Os!]Ot!]Ou!]Ov!]O!R#UX(_#UX(l#UX~P$)mO!R!}i~P%3nO[$sO!Y*wO!R#Ua(_#Ua(l#Ua~O!R!}q~P&FhO!R!}y~P'NqOU&j&m's(`!V#`'v'}&n&lRS!_!]c!a!k'{&U[&k)X&p&o!i!b&q&r&q~",
  17354. goto:
  17355. "%6i)XPPPPP)YP)]PP-[3VP6h6h9{P9{=bP>T>o?]Gt!!g!+[!3cP!<O!<t!=jP!>VPPPPPP!>sP!@mPPP!CZPP!EkP!HR!HV!HxP!IOPPPPP!IRP!IRPP!IRPPPPPPPP!I_!MW#!wPPPPP#!zP>W#$]PP>W#&v#)s#*Q#+m#-dP#-dP#.S#.v#/j#.v#.v#.v#*Q#*Q#*Q#0`#5^P#5|#*Q#)s#)s#:t#:z>W>W>W#:}#;b#=i#=q#=q#=xP#>Y#>aPP#>a#>a#>h#=xP#>l#?]#?hP#?z#At#A}#BWPP#Bm#CW#Ct#Db#BmP#Eo#E{P#BmP#BmPP#FO#Bm#BmP#BmP#BmP#BmP#BmP#I`P#Is#Is#Is#Is#BW#BWP#JQP#BW#AtP#JU#JUP#Jc#At#At#MyP#N^#Ni#No#NoP#At$ ePP#At$!P$!P!HR!HR!HR!HR!HR!HRPP!HR!>s!>sP$!SP$$P$$g!>s!>s!>sPP$$m$$p$$s$${9{6h$(Y$*^$,O6hPP6h$-v6hP6h6h6hP6hPP$1R6hP$-v$1_6hPPPPPPPPPPP)YP$4j$4p$7t$8T$8Z$9W$9^$9t$9z$:U$;d$<s$=R$=m$=s$>T$>g$>o$>u$?P$?_$?h$?p$?v$@R$@b$@l$@r$@x$AP$A`$Af$Cd$Cj$Cp$Cw$DOPPPPPPPPPPP$DU$DYPPPPP$Ky$$m$K|%!U%$v%(XP%([P%(`%(cPPPPPPPPP%(o%*[%+e%,j%,p%/g%/j%1`P%1f%1j%1m%1s%2P%2Z%2d%3c%4O%4U%4o%5P%5S%5d%5q%5}$$m$$p$$p%6QPP%6UP%6c%6fR#XP'rtObefj}!O!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%T%Y%Z%[%]%h%u%w&S&a&b&f&g&r&w&z'R'n'p'v(l(r)k)m)w*O*U*]*^*_*l*n*w*y*{+[+_+e+q+t+{-[-_-e-k-r-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U;i;n;r=O=SU%it%j3zQ&Z!_Q'w#Rd.V)O.S.T.U.X2c2d2e2h5UR3z0kdhObef}!O%w&w*^+{#n%Pgnuv!t$[$j$k$p$}%O%p'P'Q'T'X)Z)`)b)o*a+Y+d+r,X,i,o,q.c.n.o.r.s/z2u8d8e8f8k8l8m8n9w9x9y9z:e:f:j:s;a;b;c<a<b<c<d<e<r<s<xS%Vj/`&S%}!U!V!f!i!q#O#Q#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%T%Y%Z%[%]%h%u&S&a&b&f&g&r&z'R'n'p'v(l(r)k)m)w*O*U*]*_*l*n*w*y*{+[+_+e+q+t-[-_-e-k-r-t-y-{.i.m.u/Q/q/s0O0Q0S0V0^0c0f1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R;i;n;r=SQ&_!cQ&y!rQ'w#UQ'x#RQ'y#SQ)y%QQ+P&YQ+V&`S,|'d1mQ/V*QQ1y-ZQ1}-bQ2{.vQ6`5OQ8o.q!T8u!n#]7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U=O%b#^S![$d$n$t%U%|&O&h&q&t'o'u(P(Q(Y(Z([(](^(_(`(a(b(c(d(e(k(q(x)j)z*m*x+W+c+},`-X-v.l.}/T/_/a/i/p/|0U1z1{2Q2S2X2Z2_2`2o2z3P3^3g3j3q4k4l4v5]5_5a5d5g5m5z6S6e6q6y7P7W8^8v9_9a9c9d9e9f9g9h9i9j9k9l9n9o:k:n:o:p;oQ&]!bQ't#PQ'{#WQ(j#w[*`%e)X/c/{0T0dQ+S&[Q-]'sQ-a'xQ-d'|S-o(i-^Q/Y*VS2V-p-qQ5S2WQ9`7iR9m7}'s!ZObefj}!O!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%T%Y%Z%[%]%h%u%w&S&a&b&f&g&r&w&z'R'n'p'v(l(r)k)m)w*O*U*]*^*_*l*n*w*y*{+[+_+e+q+t+{-[-_-e-k-r-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U;i;n;r=O=S&n!TObefj}!O!U!V!f!i!q#O#Q#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%T%Y%Z%[%]%h%u%w&S&a&b&f&g&r&w&z'R'n'p'v(l(r)k)m)w*O*U*]*^*_*l*n*w*y*{+[+_+e+q+t+{-[-_-e-k-r-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R;i;n;r=S!T;O!n#]7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U=OQ(V#aS*V%a/ZQ-x(s{1U,h0{1O1R1S4^4_4`4b4e6O6P6v;w;y;z;|;}<O<P=ZQ(X#a{1T,h0{1O1R1S4^4_4`4b4e6O6P6v;w;y;z;|;}<O<P=Z|(W#a,h0{1O1R1S4^4_4`4b4e6O6P6v;w;y;z;|;}<O<P=ZT*V%a/Z^UO}!O%w&w*^+{&W$W]`!m!v!w!x!y!z!{!|#P#v#w$^$s$v&T&Z&o'O'W'^'c'g'l't(j(p)e)n+Q+T+X,S,T,e,f,r-P.g.j.x0l0p0w0|1b1c1d4O4U5Y7]7^7_7`7a7b7c7d7e7f7g7h7i7}8}9O9T9U9W9X9Y9^9`9m9{:i:{:|;R;S;T;k;l;m<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<f<g<h<i<j<k<l<m<n<o<p<q<t<u<v<z<{<|'`$fbfgj!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$j$k$p$r$}%O%Z%[%]%h%u&S&b&f&z'P'R'n'v(l(r)`)b)k)m)w*O*U*_*l*n*w*y*{+[+_+e-[-_-e-k-r-t-y-{.c.i.m.n.q.u/`/q/s0O0Q0S0V0^1V1Y1l1x2u2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:j:m;P;Q;U;n;r=OY%luv%p,X,i|(U#a,h0{1O1R1S4^4_4`4b4e6O6P6v;w;y;z;|;}<O<P=ZQ8s'QU8t'X,o,qY;Ve%Y'p;i=S!l;Wn$['T)Z)o*a+Y+d+r.o.s/z8d8e8f8k8l8m8n9w9x9y9z:e:f:s;a;b;c<a<b<c<d<e<r<s<xS;X!c&`Q;Y!tQ;Z.rU;[%T*]/Q^;]&a&g&r+q+t0c0fT;q%a/Z^VO}!O%w&w*^+{Q$W-P#b$X]`!m!v!w!|#P#v#w$^$s$v&T&Z&o'O't(j(p)e)n+Q+T+X,S,f.g.j.x0l0p0|4O5Y7e7f7g7h7i7}9`9m9{:i:{:|<^<_<`<t<u<v<z<{<|j$fg$j$k$p$}%O'P)`)b.c.n2u:j&t$gbfj!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%Z%[%]%h%u&S&b&f&z'R'n'v(l(r)k)m)w*O*U*_*l*n*w*y*{+[+_+e-[-_-e-k-r-t-y-{.i.m.q.u/`/q/s0O0Q0S0V0^1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U;n;r=OY$ue%Y'p;i=SY%luv%p,X,iQ&{!tx'U!x!y!z!{'^'c'g'l,T1b1c1d7c9Y;R;S;T;k;l;m|(U#a,h0{1O1R1S4^4_4`4b4e6O6P6v;w;y;z;|;}<O<P=Z!v)x'W,e0w4U7]7^7_7`7a7b7d8}9O9T9U9W9X9^<Q<R<S<T<U<V<W<X<Y<Z<[<]<f<g<h<i<j<k<l<m<n<o<p<qQ,W'QQ1^,rU:R'X,o,q!l;Wn$['T)Z)o*a+Y+d+r.o.s/z8d8e8f8k8l8m8n9w9x9y9z:e:f:s;a;b;c<a<b<c<d<e<r<s<xS;X!c&`U;e%T*]/Q^;f&a&g&r+q+t0c0fQ;j.rT;q%a/Z|!SOe}!O%T%Y%w&a&g&r&w'p*]*^+q+t+{/Q0c0f;i=S#l$]]`!m!t!v!w!|#P#v#w$^$s$v&T&Z&o'O'Q'X't(j(p)e)n+Q+T+X,f,o,q.g.j.r.x0l0p0|4O5Y7e7f7g7h7i7}9`9m9{:i:{:|<^<_<`<t<u<v<z<{<|&t$mbfj!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%Z%[%]%h%u&S&b&f&z'R'n'v(l(r)k)m)w*O*U*_*l*n*w*y*{+[+_+e-[-_-e-k-r-t-y-{.i.m.q.u/`/q/s0O0Q0S0V0^1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U;n;r=O$f%Rgnuv#a$[$j$k$p$}%O%a%p&`'P'T)Z)`)b)o*a+Y+d+r,X,h,i.c.n.o.s/Z/z0{1O1R1S2u4^4_4`4b4e6O6P6v8d8e8f8k8l8m8n9w9x9y9z:e:f:j:s;a;b;c;w;y;z;|;}<O<P<a<b<c<d<e<r<s<x=ZQ&^!c#n'V!x!y!z!{'W'^'c'g'l,e0w1b1c1d4U7]7^7_7`7a7b7c7d8}9O9T9U9W9X9Y9^;R;S;T;k;l;m<Q<R<S<T<U<V<W<X<Y<Z<[<]<f<g<h<i<j<k<l<m<n<o<p<qf+o&p+i+k+n0X0Y0[0_3o3p5kQ0o,SQ0r,TQ0u,]Q1_,rQ1p-PQ4Q0qR5q4R|!SOe}!O%T%Y%w&a&g&r&w'p*]*^+q+t+{/Q0c0f;i=S#n$]]`!m!t!v!w!|#P#v#w$^$s$v&T&Z&o'O'Q'X't(j(p)e)n+Q+T+X,S,f,o,q.g.j.r.x0l0p0|4O5Y7e7f7g7h7i7}9`9m9{:i:{:|<^<_<`<t<u<v<z<{<|&t$mbfj!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%Z%[%]%h%u&S&b&f&z'R'n'v(l(r)k)m)w*O*U*_*l*n*w*y*{+[+_+e-[-_-e-k-r-t-y-{.i.m.q.u/`/q/s0O0Q0S0V0^1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U;n;r=O$h%Rgnuv!c#a$[$j$k$p$}%O%a%p&`'P'T)Z)`)b)o*a+Y+d+r,X,h,i.c.n.o.s/Z/z0{1O1R1S2u4^4_4`4b4e6O6P6v8d8e8f8k8l8m8n9w9x9y9z:e:f:j:s;a;b;c;w;y;z;|;}<O<P<a<b<c<d<e<r<s<x=Z#p'V!x!y!z!{'W'^'c'g'l,T,e0w1b1c1d4U7]7^7_7`7a7b7c7d8}9O9T9U9W9X9Y9^;R;S;T;k;l;m<Q<R<S<T<U<V<W<X<Y<Z<[<]<f<g<h<i<j<k<l<m<n<o<p<qQ1_,rR1p-P^WO}!O%w&w*^+{&W$W]`!m!v!w!x!y!z!{!|#P#v#w$^$s$v&T&Z&o'O'W'^'c'g'l't(j(p)e)n+Q+T+X,S,T,e,f,r-P.g.j.x0l0p0w0|1b1c1d4O4U5Y7]7^7_7`7a7b7c7d7e7f7g7h7i7}8}9O9T9U9W9X9Y9^9`9m9{:i:{:|;R;S;T;k;l;m<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<f<g<h<i<j<k<l<m<n<o<p<q<t<u<v<z<{<|j$fg$j$k$p$}%O'P)`)b.c.n2u:j%p$hbfj!U!V!f!i!q#O#Q#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%Z%[%]%h%u&S&b&f&z'R'n'v(l(r)k)m)w*O*U*_*l*n*w*y*{+[+_+e-[-_-e-k-r-t-y-{.i.m.q.u/`/q/s0O0Q0S0V0^1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R;n;rY%luv%p,X,i|(U#a,h0{1O1R1S4^4_4`4b4e6O6P6v;w;y;z;|;}<O<P=Z!S8c!n#]7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U=OQ8s'QU8t'X,o,q!l;Wn$['T)Z)o*a+Y+d+r.o.s/z8d8e8f8k8l8m8n9w9x9y9z:e:f:s;a;b;c<a<b<c<d<e<r<s<xS;X!c&`Q;Y!tQ;Z.rY;^e%Y'p;i=SU;_%T*]/Q^;`&a&g&r+q+t0c0fT;q%a/Zr#sT$V$e$|%k(T8_8`8a8b8g8h8i8j8q8r;po(m#y)V)]-h8P8Q8R9p9q9r9s9t9u9v:cr#tT$V$e$|%k(T8_8`8a8b8g8h8i8j8q8r;po(n#y)V)]-h8P8Q8R9p9q9r9s9t9u9v:c`%Shi%P%V%W%}8o8ud%{!S$]$m%R&^'V0o0r1_1pV-i(V(W1US$ze%YQ){%TQ-Y'pQ/w+TQ2q.jQ3Q/QQ6c5YQ;g;iR;u=S$o!RO]`e}!O!m!t!v!w!|#P#v#w$^$s$v%T%Y%w&T&Z&a&g&o&r&w'O'Q'X'p't(j(p)e)n*]*^+Q+T+X+q+t+{,S,f,o,q,r.g.j.r.x/Q0c0f0l0p0|4O5Y7e7f7g7h7i7}9`9m9{:i:{:|;i<^<_<`<t<u<v<z<{<|=S#S_O]`a}!O!t!v!w#v$Z$^$`$a$s%w&T&Z&a&g&r&w&|'O'Q'X(p)[)n*]*^+Q+X+q+t+{,f,o,q,r.r.x0c0f0l0|:{:|S'^!x1cS'c!y1dU'l!{,T1bQ8}7]Q9O7^Q9T7_Q9U7`Q9^7dQ;k;RQ;l;SQ;m;TQ<f<QQ<g<RQ<h<SQ<i<TQ<j<UQ<k<VQ<l<WQ<m<XQ<o<ZQ<p<[R<q<]b'[!x1c7]7^;R<Q<R<S<Tb'a!y1d7_7`;S<U<V<W<X`'j!{,T1b7d;T<Z<[<]l,u'Y']'^4p8y8z8{8}9O;k<f<g<h<il,y'_'b'c4q9P9Q9R9T9U;l<j<k<l<mh-U'h'k'l4o9Z9[9]9^;m<o<p<qY1g,v,w:S:T:UY1j,z,{:W:X:YY1u-V-W:]:^:_Q4s1hQ4u1kR4{1vb'Z!x1c7]7^;R<Q<R<S<Tb'`!y1d7_7`;S<U<V<W<X`'i!{,T1b7d;T<Z<[<]j,t'Y'[']'^4p8z8}9O;k<f<g<h<ij,x'_'a'b'c4q9Q9T9U;l<j<k<l<mf-T'h'j'k'l4o9[9^;m<o<p<qW1f,u,v,w:TW1i,y,z,{:XW1t-U-V-W:^S4r1g1hS4t1j1kS4z1u1vQ6[4sQ6]4uR6^4{T,m'X,o!a[O]}!O$s%w&T&Z&a&g&r&w'O'Q'X)n*]*^+Q+X+q+t+{,f,o,r.r.x0c0f0lQ$SZR.Z)PR)R$Se.V)O.S.T.U.X2c2d2e2h5U'rtObefj}!O!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%T%Y%Z%[%]%h%u%w&S&a&b&f&g&r&w&z'R'n'p'v(l(r)k)m)w*O*U*]*^*_*l*n*w*y*{+[+_+e+q+t+{-[-_-e-k-r-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U;i;n;r=O=SU%it%j3zd.V)O.S.T.U.X2c2d2e2h5UR3z0k'r!ZObefj}!O!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%T%Y%Z%[%]%h%u%w&S&a&b&f&g&r&w&z'R'n'p'v(l(r)k)m)w*O*U*]*^*_*l*n*w*y*{+[+_+e+q+t+{-[-_-e-k-r-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U;i;n;r=O=Se.V)O.S.T.U.X2c2d2e2h5UR2i.Zd^O}!O%w&w'Q'X*^+{,o!n_]`a!t!v!w#v$Z$^$`$a$s&T&Z&a&g&r&|'O(p)[)n*]+Q+X+q+t,f,q,r.r.x0c0f0l0|:{:|Q%nu])c$q)d;d;t=b=c!fcObefguv}!O!t$j$k$p$}%O%p%w&w'P'Q'X)`)b*^+{,X,i,o,q.c.n.r2u:jf+l&p+i+k+n0X0Y0[0_3o3p5kh1P,h0{1O1S4^4_4`4b4e6O6P6vp:}n$['T)Z*a+Y+r/z8d8e8f8k8m9w9y:eh<})o.o.s8l8n9x9z:f:s;a;b;cb=[1R;w;y;z;|;}<O<P=Zc=a+d<a<b<c<d<e<r<s<x^$qd0T;h;s;v;x=Pb&Q!Y'S(h-s:h:r=R=T=fY*u2m5W:P:Q:lb*v&R,a-n2Y:q:v=W=X=h^0]+m0Z0a3n3u5j6jQ0h+xY2l.f2n8w8x:Ob4c1Q4Y4a4j5{5}6W6u7S[:t4i:u:w:y:z;{d;d$l$w${&})_,V.b.t2k2vt=Q$y&P&T&U)o)s)u*q.n.o.r.s.{2u:j:s=]=_f=V)v*r*|*}.p.|/l2t3O=^=`i=b%e)X,b.a/c/{0d=d=e=g=i=jW)p$s&T*].rS,P'O0lR2|.x$TkObefgnuv}!O!t$[$j$k$p$}%O%p%w&w'P'Q'T'X)Z)`)b)o*^*a+Y+d+r+{,X,i,o,q.c.n.o.r.s/z2u8d8e8f8k8l8m8n9w9x9y9z:e:f:j:s;a;b;c<a<b<c<d<e<r<s<x#bkbefgn!t$[$j$k$p$}%O'P'T)Z)`)b)o*a+Y+d+r.c.n.o.r.s/z2u8d8e8f8k8l8m8n9w9x9y9z:e:f:j:s;a;b;c<a<b<c<d<e<r<s<x`lO}!O%w&w'Q*^+{U%muv,XQ*h%pS,g'X,oT1Z,i,qh)f$q)d)g.e9|:g;d;t<w<y=b=c`*s&Q*t*v/o=Q=U=V=YX6Q4c6R:t:xh)f$q)d)g.e9|:g;d;t<w<y=b=cS*u&Q=QW/n*t*v=U=VS3[/o=YX6Q4c6R:t:x!c&V!Y$y&P&T&U'S(h)o)s)u*q-s.f.n.o.r.s.{2n2u8w8x:O:h:j:r:s=R=T=]=_=f!`&V$y&P&T&U'S(h)o)s)u*q-s.f.n.o.r.s.{2n2u8w8x:O:h:j:r:s=R=T=]=_=fR&W!YdiObef}!O%w&w*^+{#n%Pgnuv!t$[$j$k$p$}%O%p'P'Q'T'X)Z)`)b)o*a+Y+d+r,X,i,o,q.c.n.o.r.s/z2u8d8e8f8k8l8m8n9w9x9y9z:e:f:j:s;a;b;c<a<b<c<d<e<r<s<x'^%Wj!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%T%Y%Z%[%]%h%u&S&a&b&f&g&r&z'R'n'p'v(l(r)k)m)w*O*U*]*_*l*n*w*y*{+[+_+e+q+t-[-_-e-k-r-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U;i;n;r=O=SQ&_!cR+V&`l#uT$e$|%k8_8`8a8b8g8h8i8j8q8ri(o#y)]8P8Q8R9p9q9r9s9t9u9v#nkgnuv!t$[$j$k$p$}%O%p'P'Q'T'X)Z)`)b)o*a+Y+d+r,X,i,o,q.c.n.o.r.s/z2u8d8e8f8k8l8m8n9w9x9y9z:e:f:j:s;a;b;c<a<b<c<d<e<r<s<xdmObef}!O%w&w*^+{'_!Zj!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%T%Y%Z%[%]%h%u&S&a&b&f&g&r&z'R'n'p'v(l(r)k)m)w*O*U*]*_*l*n*w*y*{+[+_+e+q+t-[-_-e-k-r-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U;i;n;r=O=SQ.w)oR2x.sR.w)oQ1X,hS4[0{1QU5w4Y4^4fS6o5u5{R7Q6r^#{V!S$g$m$u;e;fQ&j!iS(f#q*]S(v#z*^Y*`%e)X/c0T0dQ-]'sS-o(i-^W/O)w1x9}:mQ/Y*VS/b*_3aQ1X,hQ2T-kS2V-p-qS2[-t3XQ2a-{Q3b/{U4[0{1Q1YQ5S2WQ5h3iY5w4Y4]4^4f4gW6o5u5x5{5|U7Q6p6r6sR7X7RS(v#z*^T2[-t3XZ(t#z(u*^-t3X^{O}!O%w&w*^+{Q,_'QT,m'X,oS'Q!t,^R0s,US,P'O0lR4S0sT,P'O0l^{O}!O%w&w*^+{Q+R&ZQ+[&aS+e&g0fW+s&r+q+t0cQ,_'QR1`,r[%fn$[+Y+d+r/zR/d*a^{O}!O%w&w*^+{Q+R&ZQ,_'QR1`,r!OrO}!O!f%h%w&b&f&r&w*^+_+q+t+{0O0c3e3k5e6f6i6{S%bl,gS%sx,YQ&X!YQ&s!pU*Y%c%m1ZQ*c%eS*j%q%rQ+O&WQ+`&dS._)X,bS/f*g*hQ/h*iQ2j.aQ3Y/gQ3x0hQ4h1QQ5y4YR6t5{_{O}!O%w&w*^+{Q&x!rQ+R&ZR+|&ywsO}!O!f%h%w&b&f&w*^+_+{0O3e3k5e6f6i6{!PrO}!O!f%h%w&b&f&r&w*^+_+q+t+{0O0c3e3k5e6f6i6{!OoO}!O!f%h%w&b&f&r&w*^+_+q+t+{0O0c3e3k5e6f6i6{R&n!l!OrO}!O!f%h%w&b&f&r&w*^+_+q+t+{0O0c3e3k5e6f6i6{R+[&a!OqO}!O!f%h%w&b&f&r&w*^+_+q+t+{0O0c3e3k5e6f6i6{[$xe%Y'p0Q;i=SQ&j!iS(R#_3XQ+Z&aS+f&g0fQ/}+[Q3l0VQ5f3hR6g5cQ&b!dQ&d!eQ&f!gR+_&cR+]&a&f!TObefj}!O!U!V!f!i!q#O#Q#_#b#f#g#h#i#j#k#l#m#n#q#x#z#|$r%T%Y%Z%[%]%h%u%w&S&a&b&f&g&r&w&z'R'n'p'v(l(r)k)m)w*O*U*]*^*_*l*n*w*y*{+[+_+e+q+t+{-[-e-k-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R;i;n;r=SQ0R+a{;O!n#]7j7k7l7m7n7o7p7q7r7s8O8S8p9}:a;P;Q;U=O^{O}!O%w&w*^+{W+s&r+q+t0cT,m'X,og+o&p+i+k+n0X0Y0[0_3o3p5kT+v&s+w^{O}!O%w&w*^+{T,m'X,o'r!ZObefj}!O!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%T%Y%Z%[%]%h%u%w&S&a&b&f&g&r&w&z'R'n'p'v(l(r)k)m)w*O*U*]*^*_*l*n*w*y*{+[+_+e+q+t+{-[-_-e-k-r-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U;i;n;r=O=SR3{0k^vO}!O%w&w*^+{Q%puQ,X'QT,i'X,oS%cl,gS*g%m1ZR/g*hQ*W%aR3V/ZS%bl,gS%sx,YU*Y%c%m1ZS*j%q%rS/f*g*hQ/h*iQ3Y/gQ4h1QQ5y4YR6t5{bxO}!O%w&w'X*^+{,oS%qu,XU%rv,i,qQ*i%pR,Y'QR,_'Q$n!RO]`e}!O!m!t!v!w!|#P#v#w$^$s$v%T%Y%w&T&Z&a&g&o&r&w'O'Q'X'p't(j(p)e)n*]*^+Q+T+X+q+t+{,S,f,o,q,r.g.j.r.x/Q0c0f0l0p0|4O5Y7e7f7g7h7i7}9`9m9{:i:{:|;i<^<_<`<t<u<v<z<{<|=SR1q-PY'f!z7a7b7c<Y[-Q'e'g9W9X9Y<nS1r-R-SR4y1sQ,}'dR4w1mR)|%TR3R/QS-g(T;pT2R-h:c&f!TObefj}!O!U!V!f!i!q#O#Q#_#b#f#g#h#i#j#k#l#m#n#q#x#z#|$r%T%Y%Z%[%]%h%u%w&S&a&b&f&g&r&w&z'R'n'p'v(l(r)k)m)w*O*U*]*^*_*l*n*w*y*{+[+_+e+q+t+{-[-e-k-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R;i;n;r=S{;O!n#]7j7k7l7m7n7o7p7q7r7s8O8S8p9}:a;P;Q;U=O$U#gS$t%U&h&t'o'u(Q(Y(Z(](^(_(`(a(b(c(d(e(k(q(x)j)z*m*x+W+c+},`-X-v.l.}/T/_/a/i/p/|0U1z1{2Q2S2X2Z2_2`2o2z3P3^3g3j3q4k4l4v5]5_5a5d5g5m5z6S6e6q6y7P7Wy7l&q(P9_9a9c9e9f9g9h9i9j9k9l9n9o:k:n:o:p;o#r#hS$t%U&h&t'u(Q(Y(d(e(k(q(x)j)z*m*x+W+c+},`-X-v.l.}/T/_/a/i/p/|0U1z1{2Q2S2X2Z2_2`2o2z3P3^3g3j3q4k4l4v5]5_5a5d5g5m5z6S6e6q6y7P7Wg7m&q(P9a9l9n9o:k:n:o:p;o#x#kS$t%U&h&t'u(Q(Y(](^(_(d(e(k(q(x)j)z*m*x+W+c+},`-X-v.l.}/T/_/a/i/p/|0U1z1{2Q2S2X2Z2_2`2o2z3P3^3g3j3q4k4l4v5]5_5a5d5g5m5z6S6e6q6y7P7Wm7p&q(P9a9e9f9g9l9n9o:k:n:o:p;o'c!ZObefj}!O!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#q#x#z#|$r%T%Y%Z%[%]%h%u%w&S&a&b&f&g&r&w&z'R'n'p'v(l(r)k)m)w*O*U*]*^*_*l*n*w*y*{+[+_+e+q+t+{-[-e-k-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s8O8S8p9}:a;P;Q;U;i;n;r=O=SQ-^'sQ-p(iQ2W-qR6_4}'c!YObefj}!O!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#q#x#z#|$r%T%Y%Z%[%]%h%u%w&S&a&b&f&g&r&w&z'R'n'p'v(l(r)k)m)w*O*U*]*^*_*l*n*w*y*{+[+_+e+q+t+{-[-e-k-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s8O8S8p9}:a;P;Q;U;i;n;r=O=SQ#ZQR'}#ZU$jb$}:jd$ve%T%Y'p+T.j/Q5Y;i=SQ&o!m!^)^$j$v&o)`)k)u*y.c.{/q0X3o3r4_5k6O6T6v8d9w9x:e:f;a;y;}<P<a<r<xS)`$k$pQ)k$rQ)u$yS*y&S.qQ.c)bQ.{)sQ/q*wQ0X+kS3o0Y0[Q3r0^Q4_1OQ5k3pS6O4`4bQ6T4dQ6v6PQ8d8kS9w8e8fS9x;b;cQ:e9yQ:f9zS;a.o8lQ;y=ZS;};z;|Q<P<OQ<a<dS<r<b<cR<x<sQ0x,cU4V0x4W5tS4W0y0zR5t4XQ,o'XR1[,o`]O}!O%w&w'Q*^+{Y$Y])n+Q+X,f^)n$s&T'O*].r.x0lS+Q&Z,r^+X&a&g&r+q+t0c0fT,f'X,oQ(}$RR.O(}Q.X)OQ2c.SQ2d.TQ2e.UY2f.X2c2d2e5UR5U2hQ$OXR(y$OQ)Q$SS.[)Q.]R.])R!``O]}!O!t!w$^$s%w&T&Z&a&g&r&w'O'Q)n*]*^+Q+X+q+t+{,r.r.x0c0f0lY$_`$a)[:{:|U$aa$Z&|Q)[$`U:{!v#v(pZ:|'X,f,o,q0|U$kb$}:jl)a$k)b0Y3p4`6P8e9y9z;b;z<O<b<sQ)b$pQ0Y+kQ3p0[Q4`1OQ6P4bQ8e8kQ9y8fQ9z;cS;b.o8lQ;z=ZQ<O;|Q<b<dR<s<cQ)d$qU.d)d;t=cQ;t;dR=c=bQ)g$qQ.e)d[.h)g.e9|:g<w<yQ9|;dQ:g;tQ<w=bR<y=cQ5Z2qR6d5ZU*q&P.o:jU/k*q:O=TQ:O8wR=T=fQ*t&QW/m*t/o=U=YQ/o*vQ=U=QR=Y=VU*R%V)y8oR/W*RQ.y)pR2}.yQ6R4cS6w6R:xR:x:tQ4f1QQ5u4YU6X4f5u6rR6r5{W(u#z*^-t3XR-z(uU-u(q(v/_R2]-uQ0m,QR3}0m[*b%e%f)X/{0T0dR/e*bQ}OU%v}%w+{S%w!O*^R+{&wQ+t&rQ0c+qT0e+t0cQ0`+mR3v0`Q+w&sR0g+wS%jt3zR*f%jduO}!O%w&w'Q'X*^+{,oR%ouQ/[*WR3W/[$p!QO]`e}!O!m!t!v!w!|#P#v#w$^$s$v%T%Y%w&T&Z&a&g&o&r&w'O'Q'X'p't(j(p)e)n*]*^+Q+T+X+q+t+{,S,f,o,q,r-P.g.j.r.x/Q0c0f0l0p0|4O5Y7e7f7g7h7i7}9`9m9{:i:{:|;i<^<_<`<t<u<v<z<{<|=SR%y!QQ1n,}R4x1nQ/R)|R3S/RS*P%U-vR/U*PS-l(e(fR2U-lQ5P1}R6a5PT(g#q*]|SO}!O!f%h%w&b&f&r&w+_+q+t+{0O0c3e3k5e6f6i6{j$dbf%Z%[)m*{.m/s3_3t5n6V6z[$te%Y'p0Q;i=S^%Uj%]'v(l*U;n;rS%|!U;PQ&O!VQ&h!iQ&q!nQ&t!qQ'o#OS'u#Q*nQ(P#]Q(Q#_Q(Y#bQ(Z#fQ([#gQ(]#hQ(^#iQ(_#jQ(`#kQ(a#lQ(b#mQ(c#nQ(d#oS(e#q*]Q(k#xQ(q#zQ(x#|Q)j$rQ)z%TQ*m%uS*x&S.qQ+W&aS+c&g0fQ+}&zQ,`'RQ-X'nS-v(r/`Q.l)kS.})w1xQ/T*OQ/_*^Q/a*_Q/i*lS/p*w*yQ/|+[Q0U+eQ1z-[Q1{-_Q2Q-eQ2S-kQ2X-rQ2Z-tQ2_-yQ2`-{Q2o.iQ2z.uQ3P/QQ3^/qQ3g0SQ3j0VQ3q0^Q4k1VQ4l1YQ4v1lQ5]2yQ5_3XQ5a3aQ5d3hQ5g3iQ5m3rS5z4]4gQ6S4dQ6e5cS6q5x5|Q6y6TS7P6p6sQ7W7RQ8^8pQ8v;QQ9_;UQ9a7jQ9c7kQ9d7lQ9e7mQ9f7nQ9g7oQ9h7pQ9i7qQ9j7rQ9k7sQ9l7tQ9n8OQ9o8SS:k9}:mQ:n:`Q:o:aQ:p:dR;o=OR)}%Td^O}!O%w&w'Q'X*^+{,o!n_]`a!t!v!w#v$Z$^$`$a$s&T&Z&a&g&r&|'O(p)[)n*]+Q+X+q+t,f,q,r.r.x0c0f0l0|:{:|$b$ibe!m$j$k$p$r$v$y$}%T%Y&S&o'p)`)b)k)s)u*w*y+T+k.c.j.q.{/Q/q0X0Y0[0^1O3o3p3r4_4`4b4d5Y5k6O6P6T6v8d8e8f8k8l9w9x9y9z:e:f;a;b;c;i;y;z;|;}<O<P<a<b<c<d<r<s<x=S=ZQ%nuh)f$q)d)g.e9|:g;d;t<w<y=b=c[*p&P*q8w:O=T=f`*s&Q*t*v/o=Q=U=V=YQ.g)eS2w.o:jW6Q4c6R:t:xQ:i9{Q<z<tQ<{<uR<|<v`aO}!O%w&w'Q*^+{Q$Z]U$``:{:|d$ye%T%Y'p+T.j/Q5Y;i=SQ&p!m!^&|!t!v!w#v$^$s&T&Z&a&g&r'O'X(p)n*]+Q+X+q+t,f,o,q,r.r.x0c0f0l0|b'm!|,S7e7f7g7h<^<_<`S's#P7iW(i#w't7}9`Q)s$vQ+i&oS-q(j9mU.f)e<t<vU2n.g<z<|Q4P0pQ5p4OQ:h9{Q:r:iQ=]<uR=_<{S'Y!x7]Q'Z7^S'_!y7_Q'`7`S'e!z7aS'f7b7cU'h!{,T7dQ,c'WQ,t9OS,w'^8}Q,x9US,{'c9TS-Q9X9YS-S'g9WS-W'l9^Q0z,eQ1a,rQ4T0wQ4o1bQ4p1cQ4q1dQ5s4UQ8y<RQ8z<QQ8{<TS8|;R<SQ9P<VQ9Q<UQ9R<XS9S;S<WQ9V<YS9Z;T<[Q9[<ZQ9]<]Q:S<gQ:T<fQ:U<iS:V;k<hQ:W<kQ:X<jQ:Y<mS:Z;l<lQ:[<nS:];m<pQ:^<oR:_<qR,d'WT,n'X,oR$TZe.W)O.S.T.U.X2c2d2e2h5UdnO}!O%w&Z&w'Q*^+{,rS$[]+QQ'P!tQ'S!vQ'T!wQ(h#vQ)Z$^^)o$s&T'O*].r.x0lQ+Y&aQ+d&gY+r&r+q+t0c0fS,h'X,oQ-s(pQ.n)nQ/z+XS0{,f,qR4^0|d^O}!O%w&w'Q'X*^+{,o!n_]`a!t!v!w#v$Z$^$`$a$s&T&Z&a&g&r&|'O(p)[)n*]+Q+X+q+t,f,q,r.r.x0c0f0l0|:{:|R%nuQ1Q,hQ4Y0{Q4a1OQ4i1RQ4j1SQ5{4^U5}4_4`4bQ6W4eS6u6O6PQ7S6vQ:u;wU:w;y;z;|S:y;}<OQ:z<PR;{=ZX)q$s&T*].rpdOuv}!O%p%w&w'Q'X*^+{,X,i,o,qY$lb$}.o8l:jU$we%O.r[${fg.s2u8n:sQ%enQ&}!tQ)X$[[)_$j$k$p;a;b;cQ,V'PQ,b'TQ.a)ZW.b)`)b9x9zQ.t)oQ/c*aQ/{+YQ0T+dS0d+r/zS2k.c:fQ2v.nQ;h<eU;s<a<b<cS;v<r<sQ;x<xQ=P<dQ=d8kQ=e8mU=g8d8e8fS=i9w9yR=j:eR2r.jQ&R!YQ)v$yU*r&P.o:jS*|&T.rW*}&U.s2u:sQ,a'SQ-n(hQ.p)oS.|)s)uQ/l*qQ2Y-sQ2m.fQ2t.nQ3O.{Q5W2nQ:P8wQ:Q8xQ:l:OQ:q:hQ:v:rQ=W=RQ=X=TQ=^=]Q=`=_R=h=fX%Xj%Q.q/`T(w#z*^R,R'OQ,Q'OR3|0l^{O}!O%w&w*^+{R,_'QW%gn+Y+d+rT)Y$[/z_|O}!O%w&w*^+{^{O}!O%w&w*^+{Q&e!fQ*e%hQ+^&bQ+b&fQ0P+_Q3d0OQ5b3eQ5i3kQ6h5eQ6|6fQ6}6iR7U6{vsO}!O!f%h%w&b&f&w*^+_+{0O3e3k5e6f6i6{X+s&r+q+t0cQ+p&pR0W+iS+m&p+iQ0Z+kQ0a+nU3n0X0Y0[Q3u0_S5j3o3pR6j5k^wO}!O%w&w*^+{Q,Z'QT,j'X,oR*X%a^yO}!O%w&w*^+{Q,['QT,k'X,o^zO}!O%w&w*^+{T,l'X,oQ-Q9VQ-R'eQ1r:[R1s-SR-O'dT'q#O;U`%_j%]'v(l(r/`;n;rR/X*UR-c'yR2O-b",
  17356. nodeNames:
  17357. '⚠ > MacroName LineComment BlockComment PreprocDirective #include String EscapeSequence SystemLibString Identifier ArgumentList ( ConditionalExpression AssignmentExpression CallExpression PrimitiveType FieldExpression FieldIdentifier DestructorName TemplateMethod ScopedFieldIdentifier NamespaceIdentifier TemplateType TypeIdentifier ScopedTypeIdentifier ScopedNamespaceIdentifier :: NamespaceIdentifier TypeIdentifier TemplateArgumentList < TypeDescriptor const volatile restrict _Atomic mutable constexpr StructSpecifier struct MsDeclspecModifier __declspec ) VirtualSpecifier BaseClassClause Access , FieldDeclarationList { FieldDeclaration Attribute AttributeName Identifier AttributeArgs } [ ] UpdateOp ArithOp ArithOp ArithOp LogicOp BitOp BitOp BitOp CompareOp CompareOp CompareOp > CompareOp BitOp UpdateOp Number RawString CharLiteral AttributeArgs virtual extern static register inline AttributeSpecifier __attribute__ PointerDeclarator MsBasedModifier __based MsPointerModifier FunctionDeclarator ParameterList ParameterDeclaration PointerDeclarator FunctionDeclarator Noexcept noexcept ThrowSpecifier throw TrailingReturnType AbstractPointerDeclarator AbstractFunctionDeclarator AbstractArrayDeclarator AbstractParenthesizedDeclarator AbstractReferenceDeclarator ArrayDeclarator ParenthesizedDeclarator ReferenceDeclarator ScopedIdentifier Identifier OperatorName TemplateFunction StructuredBindingDeclarator OptionalParameterDeclaration VariadicParameterDeclaration VariadicDeclarator ReferenceDeclarator ArrayDeclarator ParenthesizedDeclarator ReferenceDeclarator BitfieldClause InitializerList InitializerPair SubscriptDesignator FieldDesignator TemplateDeclaration template TemplateParameterList TypeParameterDeclaration typename class OptionalTypeParameterDeclaration VariadicTypeParameterDeclaration TemplateTemplateParameterDeclaration AliasDeclaration using Declaration InitDeclarator FunctionDefinition MsCallModifier CompoundStatement LinkageSpecification DeclarationList CaseStatement case default LabeledStatement StatementIdentifier ExpressionStatement CommaExpression IfStatement if ConditionClause Declaration else SwitchStatement switch DoStatement do while ParenthesizedExpression WhileStatement ForStatement for ReturnStatement return BreakStatement break ContinueStatement continue GotoStatement goto TypeDefinition typedef PointerDeclarator FunctionDeclarator ArrayDeclarator ParenthesizedDeclarator ForRangeLoop TryStatement try CatchClause catch ThrowStatement NamespaceDefinition namespace UsingDeclaration StaticAssertDeclaration static_assert ConcatenatedString TemplateInstantiation FunctionDefinition ExplicitFunctionSpecifier explicit FieldInitializerList FieldInitializer DefaultMethodClause DeleteMethodClause delete FunctionDefinition OperatorCast operator operator Declaration FunctionDefinition FunctionDefinition FunctionDefinition FunctionDefinition Declaration FunctionDefinition Declaration FriendDeclaration friend union AccessSpecifier UnionSpecifier EnumSpecifier enum SizedTypeSpecifier TypeSize EnumeratorList Enumerator ClassSpecifier DependentType Decltype decltype auto ParameterPackExpansion ParameterPackExpansion FieldIdentifier PointerExpression SubscriptExpression BinaryExpression ArithOp LogicOp BitOp UnaryExpression LogicOp BitOp UpdateExpression CastExpression SizeofExpression sizeof CompoundLiteralExpression True False NULL NewExpression new new NewDeclarator DeleteExpression delete LambdaExpression LambdaCaptureSpecifier ParameterPackExpansion nullptr this #define PreprocArg #if #ifdef #ifndef #else #endif #elif PreprocDirectiveName Macro Program',
  17358. maxTerm: 377,
  17359. nodeProps: [
  17360. [
  17361. NodeProp.group,
  17362. -30,
  17363. 7,
  17364. 10,
  17365. 13,
  17366. 14,
  17367. 15,
  17368. 17,
  17369. 73,
  17370. 74,
  17371. 75,
  17372. 106,
  17373. 109,
  17374. 158,
  17375. 187,
  17376. 228,
  17377. 229,
  17378. 230,
  17379. 234,
  17380. 237,
  17381. 238,
  17382. 239,
  17383. 241,
  17384. 242,
  17385. 243,
  17386. 244,
  17387. 245,
  17388. 249,
  17389. 251,
  17390. 253,
  17391. 254,
  17392. 255,
  17393. 'Expression',
  17394. -12,
  17395. 16,
  17396. 23,
  17397. 24,
  17398. 25,
  17399. 39,
  17400. 213,
  17401. 214,
  17402. 216,
  17403. 220,
  17404. 221,
  17405. 222,
  17406. 224,
  17407. 'Type',
  17408. -16,
  17409. 138,
  17410. 141,
  17411. 144,
  17412. 146,
  17413. 148,
  17414. 153,
  17415. 155,
  17416. 159,
  17417. 160,
  17418. 162,
  17419. 164,
  17420. 166,
  17421. 168,
  17422. 176,
  17423. 177,
  17424. 181,
  17425. 'Statement'
  17426. ]
  17427. ],
  17428. skippedNodes: [0, 2, 3, 4, 5, 6, 9, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 303],
  17429. repeatNodeCount: 37,
  17430. tokenData:
  17431. "':`&iR!UOX$eXY'mYZ,iZ]$e]^)k^p$epq'mqr-Prs.ost/^tu$euv!/wvw!1gwx!3Yxy!3wyz!4lz{!5a{|!6[|}!8Q}!O!8u!O!P!:n!P!Q##Y!Q!R#4m!R![$6p![!]%Ki!]!^%MX!^!_%M|!_!`&*k!`!a&+f!a!b&.S!b!c$e!c!n&.w!n!o&0Y!o!w&.w!w!x&2s!x!}&.w!}#O&4U#O#P&5q#P#Q&Ep#Q#R&G]#R#S&.w#S#T$e#T#c&.w#c#d&HW#d#i&.w#i#j'0Z#j#o&.w#o#p'3T#p#q'3x#q#r'5n#r#s'6c#s~$e!l$nW(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e!j%_U(aW&k!bOY%WZw%Wwx%qx#O%W#O#P&S#P~%W!b%vS&k!bOY%qZ#O%q#O#P&S#P~%q!b&XV&k!bOY%qYZ%qZ]%q]^&n^#O%q#O#P&S#P~%q!b&sT&k!bOY%qYZ%qZ#O%q#O#P&S#P~%q!d'ZU'tQ&k!bOY'SZr'Srs%qs#O'S#O#P&S#P~'S&i'z^(aW'tQ'r$Z&k!b)X#SOX$eXY'mYZ(vZ]$e]^)k^p$epq'mqr$ers%Wsw$ewx'Sx#O$e#O#P*r#P~$e$Z({T'r$ZXY(vYZ(v]^(vpq(v#O#P)[$Z)_QYZ(v]^)e$Z)hPYZ(v%w)v^(aW'tQ'r$Z&k!bOX$eXY)kYZ(vZ]$e]^)k^p$epq)kqr$ers%Wsw$ewx'Sx#O$e#O#P*r#P~$e%m*wV&k!bOY%qYZ+^Z]%q]^,T^#O%q#O#P&S#P~%q%m+eY'r$Z&k!bOX%qXY+^YZ(vZ]%q]^+^^p%qpq+^q#O%q#O#P*r#P~%q%m,YT&k!bOY%qYZ+^Z#O%q#O#P&S#P~%q${,pT)Up'r$ZXY(vYZ(v]^(vpq(v#O#P)[%s-[Y&TP(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`-z!`#O$e#O#P&S#P~$e%s.VW!d$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e&e.zU(aW'uQ's$w&k!bOY%WZw%Wwx%qx#O%W#O#P&S#P~%W%w/gd(aW'tQ&k!bOX$eXY/^Zp$epq/^qr$ers%Wsw$ewx'Sx!c$e!c!}0u!}#O$e#O#P&S#P#T$e#T#W0u#W#X2S#X#Y:f#Y#]0u#]#^Hl#^#o0u#o~$e%w1Q`(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%w2_b(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#X0u#X#Y3g#Y#o0u#o~$e%w3rb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#Y0u#Y#Z4z#Z#o0u#o~$e%w5Vb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#]0u#]#^6_#^#o0u#o~$e%w6jb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#b0u#b#c7r#c#o0u#o~$e%w7}b(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#X0u#X#Y9V#Y#o0u#o~$e%w9d`(aW'tQ&j$Z&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%w:qd(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#`0u#`#a<P#a#b0u#b#cCQ#c#o0u#o~$e%w<[d(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#]0u#]#^=j#^#g0u#g#h@^#h#o0u#o~$e%w=ub(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#Y0u#Y#Z>}#Z#o0u#o~$e%w?[`(aW'tQ&k!b&q$Z&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%w@ib(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#X0u#X#YAq#Y#o0u#o~$e%wBO`(aW'tQ&k!b&o$Z&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%wC]b(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#W0u#W#XDe#X#o0u#o~$e%wDpb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#]0u#]#^Ex#^#o0u#o~$e%wFTb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#Y0u#Y#ZG]#Z#o0u#o~$e%wGj`(aW'tQ&k!b&p$Z&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%wHwd(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#Y0u#Y#ZJV#Z#b0u#b#c!'e#c#o0u#o~$e%wJdd(aW'tQ&l$Z&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#W0u#W#XKr#X#b0u#b#c! y#c#o0u#o~$e%wK}b(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#X0u#X#YMV#Y#o0u#o~$e%wMbb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#Y0u#Y#ZNj#Z#o0u#o~$e%wNw`(aW'tQ&m$Z&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%w!!Ub(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#W0u#W#X!#^#X#o0u#o~$e%w!#ib(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#X0u#X#Y!$q#Y#o0u#o~$e%w!$|b(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#Y0u#Y#Z!&U#Z#o0u#o~$e%w!&c`(aW'tQ&n$Z&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%w!'pb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#V0u#V#W!(x#W#o0u#o~$e%w!)Tb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#`0u#`#a!*]#a#o0u#o~$e%w!*hb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#i0u#i#j!+p#j#o0u#o~$e%w!+{b(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#W0u#W#X!-T#X#o0u#o~$e%w!-`b(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#X0u#X#Y!.h#Y#o0u#o~$e%w!.u`(aW'tQU$Z&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%s!0SY(aW'tQ!_$V&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`!0r!`#O$e#O#P&S#P~$e%s!0}W!j$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%s!1rZ(^$V(aW'tQ&k!bOY$eZr$ers%Wsv$evw!2ewx'Sx!_$e!_!`!0r!`#O$e#O#P&S#P~$e%s!2pW(]$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%o!3eU(bS'tQ(`$V&k!bOY'SZr'Srs%qs#O'S#O#P&S#P~'S&i!4SW(aW'tQ[&_&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e!}!4wW{a(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%s!5lY(Z$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`!0r!`#O$e#O#P&S#P~$e%s!6g[(aW'tQ!]$V&k!bOY$eZr$ers%Wsw$ewx'Sx{$e{|!7]|!_$e!_!`!0r!`#O$e#O#P&S#P~$e%s!7hW(aW![$V'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%w!8]W!P$Z(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%s!9Q](aW'tQ!]$V&k!bOY$eZr$ers%Wsw$ewx'Sx}$e}!O!7]!O!_$e!_!`!0r!`!a!9y!a#O$e#O#P&S#P~$e%s!:UW'|$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%w!:y[(aW'tQ'{$V&k!bOY$eZr$ers%Wsw$ewx'Sx!O$e!O!P!;o!P!Q$e!Q![!=]![#O$e#O#P&S#P~$e%w!;xY(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!O$e!O!P!<h!P#O$e#O#P&S#P~$e%w!<sW(U$Z(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%s!=hl(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx!?`x!Q$e!Q![!=]![!g$e!g!h!Jp!h!i# o!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#X$e#X#Y!Jp#Y#Z# o#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%k!?gW'tQ&k!bOY'SZr'Srs%qs!Q'S!Q![!@P![#O'S#O#P&S#P~'S%k!@Yl'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx!?`x!Q'S!Q![!@P![!g'S!g!h!BQ!h!i!I_!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#X'S#X#Y!BQ#Y#Z!I_#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k!BZj'tQ!k$V&k!bOY'SZr'Srs%qs{'S{|!C{|!Q'S!Q![!Dx![!c'S!c!h!Dx!h!i!Dx!i!n'S!n!o!I_!o!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#Y!Dx#Y#Z!Dx#Z#`'S#`#a!I_#a#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k!DS['tQ&k!bOY'SZr'Srs%qs!Q'S!Q![!Dx![!c'S!c!i!Dx!i#O'S#O#P&S#P#T'S#T#Z!Dx#Z~'S%k!ERh'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx!Fmx!Q'S!Q![!Dx![!c'S!c!h!Dx!h!i!Dx!i!n'S!n!o!I_!o!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#Y!Dx#Y#Z!Dx#Z#`'S#`#a!I_#a#i'S#i#j!I_#j~'S%k!Ft['tQ&k!bOY'SZr'Srs%qs!Q'S!Q![!Gj![!c'S!c!i!Gj!i#O'S#O#P&S#P#T'S#T#Z!Gj#Z~'S%k!Gsh'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx!Fmx!Q'S!Q![!Gj![!c'S!c!h!Gj!h!i!Gj!i!n'S!n!o!I_!o!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#Y!Gj#Y#Z!Gj#Z#`'S#`#a!I_#a#i'S#i#j!I_#j~'S%k!Ihb'tQ!k$V&k!bOY'SZr'Srs%qs!h'S!h!i!I_!i!n'S!n!o!I_!o!w'S!w!x!I_!x#O'S#O#P&S#P#Y'S#Y#Z!I_#Z#`'S#`#a!I_#a#i'S#i#j!I_#j~'S%s!J{l(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx'Sx{$e{|!Ls|!Q$e!Q![!Mx![!c$e!c!h!Mx!h!i!Mx!i!n$e!n!o# o!o!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#Y!Mx#Y#Z!Mx#Z#`$e#`#a# o#a#i$e#i#j# o#j?Ar$e?Ar?As!Ls?As~$e%s!L|^(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![!Mx![!c$e!c!i!Mx!i#O$e#O#P&S#P#T$e#T#Z!Mx#Z~$e%s!NTh(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx!Fmx!Q$e!Q![!Mx![!c$e!c!h!Mx!h!i!Mx!i!n$e!n!o# o!o!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#Y!Mx#Y#Z!Mx#Z#`$e#`#a# o#a#i$e#i#j# o#j~$e%s# zd(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx'Sx!h$e!h!i# o!i!n$e!n!o# o!o!w$e!w!x# o!x#O$e#O#P&S#P#Y$e#Y#Z# o#Z#`$e#`#a# o#a#i$e#i#j# o#j~$e%w##e^(aW'tQ!_$V&k!bOY$eZr$ers%Wsw$ewx'Sxz$ez{#$a{!P$e!P!Q#/W!Q!_$e!_!`!0r!`#O$e#O#P&S#P~$e%w#$jZ(aW'tQ&k!bOY#$aYZ#%]Zr#$ars#&Qsw#$awx#+Wxz#$az{#-a{#O#$a#O#P#(e#P~#$a$Z#%`ROz#%]z{#%i{~#%]$Z#%lTOz#%]z{#%i{!P#%]!P!Q#%{!Q~#%]$Z#&QOS$Z%u#&XX(aW&k!bOY#&QYZ#%]Zw#&Qwx#&txz#&Qz{#)q{#O#&Q#O#P#(e#P~#&Q%m#&yV&k!bOY#&tYZ#%]Zz#&tz{#'`{#O#&t#O#P#(e#P~#&t%m#'eX&k!bOY#&tYZ#%]Zz#&tz{#'`{!P#&t!P!Q#(Q!Q#O#&t#O#P#(e#P~#&t%m#(XSS$Z&k!bOY%qZ#O%q#O#P&S#P~%q%m#(jX&k!bOY#&tYZ#&tZ]#&t]^#)V^z#&tz{#'`{#O#&t#O#P#(e#P~#&t%m#)[V&k!bOY#&tYZ#&tZz#&tz{#'`{#O#&t#O#P#(e#P~#&t%u#)xZ(aW&k!bOY#&QYZ#%]Zw#&Qwx#&txz#&Qz{#)q{!P#&Q!P!Q#*k!Q#O#&Q#O#P#(e#P~#&Q%u#*tU(aWS$Z&k!bOY%WZw%Wwx%qx#O%W#O#P&S#P~%W%o#+_X'tQ&k!bOY#+WYZ#%]Zr#+Wrs#&tsz#+Wz{#+z{#O#+W#O#P#(e#P~#+W%o#,RZ'tQ&k!bOY#+WYZ#%]Zr#+Wrs#&tsz#+Wz{#+z{!P#+W!P!Q#,t!Q#O#+W#O#P#(e#P~#+W%o#,}U'tQS$Z&k!bOY'SZr'Srs%qs#O'S#O#P&S#P~'S%w#-j](aW'tQ&k!bOY#$aYZ#%]Zr#$ars#&Qsw#$awx#+Wxz#$az{#-a{!P#$a!P!Q#.c!Q#O#$a#O#P#(e#P~#$a%w#.nW(aW'tQS$Z&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%w#/cW(aW'tQR$Z&k!bOY#/WZr#/Wrs#/{sw#/Wwx#4Qx#O#/W#O#P#0{#P~#/W%u#0UU(aWR$Z&k!bOY#/{Zw#/{wx#0hx#O#/{#O#P#0{#P~#/{%m#0oSR$Z&k!bOY#0hZ#O#0h#O#P#0{#P~#0h%m#1SVR$Z&k!bOY#0hYZ%qZ]#0h]^#1i^#O#0h#O#P#2P#P~#0h%m#1pTR$Z&k!bOY#0hYZ%qZ#O#0h#O#P#0{#P~#0h%m#2WZR$Z&k!bOY#0hYZ%qZ]#0h]^#1i^#O#0h#O#P#2P#P#b#0h#b#c#0h#c#f#0h#f#g#2y#g~#0h%m#3QSR$Z&k!bOY#0hZ#O#0h#O#P#3^#P~#0h%m#3eXR$Z&k!bOY#0hYZ%qZ]#0h]^#1i^#O#0h#O#P#2P#P#b#0h#b#c#0h#c~#0h%o#4ZU'tQR$Z&k!bOY#4QZr#4Qrs#0hs#O#4Q#O#P#0{#P~#4Q%s#4xr(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx#7Sx!O$e!O!P$+X!P!Q$e!Q![$6p![!g$e!g!h!Jp!h!i# o!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#U$e#U#V$8y#V#X$e#X#Y!Jp#Y#Z# o#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j#l$e#l#m%:Z#m~$e%k#7ZW'tQ&k!bOY'SZr'Srs%qs!Q'S!Q![#7s![#O'S#O#P&S#P~'S%k#7|n'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#7Sx!O'S!O!P#9z!P!Q'S!Q![#7s![!g'S!g!h!BQ!h!i!I_!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#X'S#X#Y!BQ#Y#Z!I_#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k#:Tl'tQ!k$V&k!bOY'SZr'Srs%qs!Q'S!Q![#;{![!c'S!c!g#;{!g!h$$Y!h!i#;{!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#;{#X#Y$$Y#Y#Z#;{#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k#<Un'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#>Sx!Q'S!Q![#;{![!c'S!c!g#;{!g!h$$Y!h!i#;{!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#;{#X#Y$$Y#Y#Z#;{#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k#>Z['tQ&k!bOY'SZr'Srs%qs!Q'S!Q![#?P![!c'S!c!i#?P!i#O'S#O#P&S#P#T'S#T#Z#?P#Z~'S%k#?Yn'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#>Sx!Q'S!Q![#?P![!c'S!c!g#?P!g!h#AW!h!i#?P!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#?P#X#Y#AW#Y#Z#?P#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k#Aar'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#>Sx{'S{|!C{|!Q'S!Q![#Ck![!c'S!c!g#Ck!g!h$ u!h!i#Ck!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#Ck#X#Y$ u#Y#Z#Ck#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k#Ctn'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx!Q'S!Q![#Ck![!c'S!c!g#Ck!g!h$ u!h!i#Ck!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#Ck#X#Y$ u#Y#Z#Ck#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k#Ey['tQ&k!bOY'SZr'Srs%qs!Q'S!Q![#Fo![!c'S!c!i#Fo!i#O'S#O#P&S#P#T'S#T#Z#Fo#Z~'S%k#Fxn'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx!Q'S!Q![#Fo![!c'S!c!g#Fo!g!h#Hv!h!i#Fo!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#Fo#X#Y#Hv#Y#Z#Fo#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k#IPr'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx{'S{|!C{|!Q'S!Q![#KZ![!c'S!c!g#KZ!g!h#Mb!h!i#KZ!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#KZ#X#Y#Mb#Y#Z#KZ#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k#Kdn'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx!Q'S!Q![#KZ![!c'S!c!g#KZ!g!h#Mb!h!i#KZ!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#KZ#X#Y#Mb#Y#Z#KZ#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k#Mkr'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx{'S{|!C{|!Q'S!Q![#KZ![!c'S!c!g#KZ!g!h#Mb!h!i#KZ!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#KZ#X#Y#Mb#Y#Z#KZ#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k$!Or'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx{'S{|!C{|!Q'S!Q![#Ck![!c'S!c!g#Ck!g!h$ u!h!i#Ck!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#Ck#X#Y$ u#Y#Z#Ck#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k$$cr'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#>Sx{'S{|!C{|!Q'S!Q![$&m![!c'S!c!g$&m!g!h$(t!h!i$&m!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X$&m#X#Y$(t#Y#Z$&m#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k$&vn'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx!Q'S!Q![$&m![!c'S!c!g$&m!g!h$(t!h!i$&m!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X$&m#X#Y$(t#Y#Z$&m#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k$(}r'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx{'S{|!C{|!Q'S!Q![$&m![!c'S!c!g$&m!g!h$(t!h!i$&m!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X$&m#X#Y$(t#Y#Z$&m#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%s$+dn(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![$-b![!c$e!c!g$-b!g!h$/k!h!i$-b!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$-b#X#Y$/k#Y#Z$-b#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%s$-mn(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx#>Sx!Q$e!Q![$-b![!c$e!c!g$-b!g!h$/k!h!i$-b!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$-b#X#Y$/k#Y#Z$-b#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%s$/vr(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx#>Sx{$e{|!Ls|!Q$e!Q![$2Q![!c$e!c!g$2Q!g!h$4Z!h!i$2Q!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$2Q#X#Y$4Z#Y#Z$2Q#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j?Ar$e?Ar?As!Ls?As~$e%s$2]n(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx#Erx!Q$e!Q![$2Q![!c$e!c!g$2Q!g!h$4Z!h!i$2Q!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$2Q#X#Y$4Z#Y#Z$2Q#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%s$4fr(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx#Erx{$e{|!Ls|!Q$e!Q![$2Q![!c$e!c!g$2Q!g!h$4Z!h!i$2Q!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$2Q#X#Y$4Z#Y#Z$2Q#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j?Ar$e?Ar?As!Ls?As~$e%s$6{n(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx#7Sx!O$e!O!P$+X!P!Q$e!Q![$6p![!g$e!g!h!Jp!h!i# o!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#X$e#X#Y!Jp#Y#Z# o#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%s$9S](aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!O$e!O!P$9{!P!Q$e!Q!R$:t!R![$@R![#O$e#O#P&S#P~$e%s$:UY(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![!=]![#O$e#O#P&S#P~$e%s$;Pr(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx$=Zx!O$e!O!P$+X!P!Q$e!Q![$@R![!g$e!g!h!Jp!h!i# o!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#U$e#U#V$B[#V#X$e#X#Y!Jp#Y#Z# o#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j#l$e#l#m$HU#m~$e%k$=bW'tQ&k!bOY'SZr'Srs%qs!Q'S!Q![$=z![#O'S#O#P&S#P~'S%k$>Tn'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx$=Zx!O'S!O!P#9z!P!Q'S!Q![$=z![!g'S!g!h!BQ!h!i!I_!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#X'S#X#Y!BQ#Y#Z!I_#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%s$@^n(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx$=Zx!O$e!O!P$+X!P!Q$e!Q![$@R![!g$e!g!h!Jp!h!i# o!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#X$e#X#Y!Jp#Y#Z# o#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%s$BeY(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![$CT![#O$e#O#P&S#P~$e%s$C`n(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx$E^x!O$e!O!P$+X!P!Q$e!Q![$CT![!g$e!g!h!Jp!h!i# o!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#X$e#X#Y!Jp#Y#Z# o#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%k$EeW'tQ&k!bOY'SZr'Srs%qs!Q'S!Q![$E}![#O'S#O#P&S#P~'S%k$FWn'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx$E^x!O'S!O!P#9z!P!Q'S!Q![$E}![!g'S!g!h!BQ!h!i!I_!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#X'S#X#Y!BQ#Y#Z!I_#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%s$H_^(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![$IZ![!c$e!c!i$IZ!i#O$e#O#P&S#P#T$e#T#Z$IZ#Z~$e%s$Ifp(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx$Kjx!O$e!O!P$+X!P!Q$e!Q![$IZ![!c$e!c!g$IZ!g!h%2r!h!i$IZ!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$IZ#X#Y%2r#Y#Z$IZ#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%k$Kq['tQ&k!bOY'SZr'Srs%qs!Q'S!Q![$Lg![!c'S!c!i$Lg!i#O'S#O#P&S#P#T'S#T#Z$Lg#Z~'S%k$Lpp'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx$Kjx!O'S!O!P#9z!P!Q'S!Q![$Lg![!c'S!c!g$Lg!g!h$Nt!h!i$Lg!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X$Lg#X#Y$Nt#Y#Z$Lg#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k$N}t'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx$Kjx{'S{|!C{|!O'S!O!P#9z!P!Q'S!Q![%#_![!c'S!c!g%#_!g!h%0X!h!i%#_!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X%#_#X#Y%0X#Y#Z%#_#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k%#hp'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx%%lx!O'S!O!P#9z!P!Q'S!Q![%#_![!c'S!c!g%#_!g!h%0X!h!i%#_!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X%#_#X#Y%0X#Y#Z%#_#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k%%s['tQ&k!bOY'SZr'Srs%qs!Q'S!Q![%&i![!c'S!c!i%&i!i#O'S#O#P&S#P#T'S#T#Z%&i#Z~'S%k%&rp'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx%%lx!O'S!O!P#9z!P!Q'S!Q![%&i![!c'S!c!g%&i!g!h%(v!h!i%&i!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X%&i#X#Y%(v#Y#Z%&i#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k%)Pt'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx%%lx{'S{|!C{|!O'S!O!P#9z!P!Q'S!Q![%+a![!c'S!c!g%+a!g!h%-n!h!i%+a!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X%+a#X#Y%-n#Y#Z%+a#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k%+jp'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx%%lx!O'S!O!P#9z!P!Q'S!Q![%+a![!c'S!c!g%+a!g!h%-n!h!i%+a!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X%+a#X#Y%-n#Y#Z%+a#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k%-wt'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx%%lx{'S{|!C{|!O'S!O!P#9z!P!Q'S!Q![%+a![!c'S!c!g%+a!g!h%-n!h!i%+a!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X%+a#X#Y%-n#Y#Z%+a#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k%0bt'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx%%lx{'S{|!C{|!O'S!O!P#9z!P!Q'S!Q![%#_![!c'S!c!g%#_!g!h%0X!h!i%#_!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X%#_#X#Y%0X#Y#Z%#_#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%s%2}t(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx$Kjx{$e{|!Ls|!O$e!O!P$+X!P!Q$e!Q![%5_![!c$e!c!g%5_!g!h%7n!h!i%5_!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X%5_#X#Y%7n#Y#Z%5_#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j?Ar$e?Ar?As!Ls?As~$e%s%5jp(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx%%lx!O$e!O!P$+X!P!Q$e!Q![%5_![!c$e!c!g%5_!g!h%7n!h!i%5_!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X%5_#X#Y%7n#Y#Z%5_#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%s%7yt(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx%%lx{$e{|!Ls|!O$e!O!P$+X!P!Q$e!Q![%5_![!c$e!c!g%5_!g!h%7n!h!i%5_!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X%5_#X#Y%7n#Y#Z%5_#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j?Ar$e?Ar?As!Ls?As~$e%s%:da(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!O$e!O!P$9{!P!Q$e!Q!R%;i!R![%A`![!c$e!c!i$IZ!i#O$e#O#P&S#P#T$e#T#Z$IZ#Z~$e%s%;tt(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx%>Ux!O$e!O!P$+X!P!Q$e!Q![%A`![!c$e!c!g$IZ!g!h%2r!h!i$IZ!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#U$IZ#U#V%Co#V#X$IZ#X#Y%2r#Y#Z$IZ#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j#l$e#l#m$HU#m~$e%k%>]['tQ&k!bOY'SZr'Srs%qs!Q'S!Q![%?R![!c'S!c!i$Lg!i#O'S#O#P&S#P#T'S#T#Z$Lg#Z~'S%k%?[p'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx%>Ux!O'S!O!P#9z!P!Q'S!Q![%?R![!c'S!c!g$Lg!g!h$Nt!h!i$Lg!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X$Lg#X#Y$Nt#Y#Z$Lg#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%s%Akp(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx%>Ux!O$e!O!P$+X!P!Q$e!Q![%A`![!c$e!c!g$IZ!g!h%2r!h!i$IZ!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$IZ#X#Y%2r#Y#Z$IZ#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%s%Czp(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx$Kjx!O$e!O!P$+X!P!Q$e!Q![%FO![!c$e!c!g$IZ!g!h%2r!h!i$IZ!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$IZ#X#Y%2r#Y#Z$IZ#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%s%FZp(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx%H_x!O$e!O!P$+X!P!Q$e!Q![%FO![!c$e!c!g$IZ!g!h%2r!h!i$IZ!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$IZ#X#Y%2r#Y#Z$IZ#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%k%Hf['tQ&k!bOY'SZr'Srs%qs!Q'S!Q![%I[![!c'S!c!i$Lg!i#O'S#O#P&S#P#T'S#T#Z$Lg#Z~'S%k%Iep'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx%H_x!O'S!O!P#9z!P!Q'S!Q![%I[![!c'S!c!g$Lg!g!h$Nt!h!i$Lg!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X$Lg#X#Y$Nt#Y#Z$Lg#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%w%KtY'z$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx![$e![!]%Ld!]#O$e#O#P&S#P~$e%w%LoWk$Z(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%s%MdW(_$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e&e%NX[o$V(aW'tQ&k!bOY%N}Zr%N}rs& vsw%N}wx&%vx!^%N}!^!_&'w!_!`&)p!`!a&'S!a#O%N}#O#P&#c#P~%N}#^& WY(aW'tQ&k!bOY%N}Zr%N}rs& vsw%N}wx&%vx!`%N}!`!a&'S!a#O%N}#O#P&#c#P~%N}#[& }W(aW&k!bOY& vZw& vwx&!gx!`& v!`!a&%Z!a#O& v#O#P&#c#P~& v#S&!lU&k!bOY&!gZ!`&!g!`!a&#O!a#O&!g#O#P&#c#P~&!g#S&#VSXp&k!bOY%qZ#O%q#O#P&S#P~%q#S&#hV&k!bOY&!gYZ&!gZ]&!g]^&#}^#O&!g#O#P&$i#P~&!g#S&$SV&k!bOY&!gYZ%qZ!`&!g!`!a&#O!a#O&!g#O#P&#c#P~&!g#S&$nX&k!bOY&!gYZ%qZ]&!g]^&#}^!`&!g!`!a&#O!a#O&!g#O#P&#c#P~&!g#[&%dUXp(aW&k!bOY%WZw%Wwx%qx#O%W#O#P&S#P~%W#U&%}W'tQ&k!bOY&%vZr&%vrs&!gs!`&%v!`!a&&g!a#O&%v#O#P&#c#P~&%v#U&&pUXp'tQ&k!bOY'SZr'Srs%qs#O'S#O#P&S#P~'S#^&'_WXp(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e&e&(SZ(aW'tQ&k!b!i$VOY%N}Zr%N}rs& vsw%N}wx&%vx!_%N}!_!`&(u!`!a&'S!a#O%N}#O#P&#c#P~%N}&e&)QY!j$V(aW'tQ&k!bOY%N}Zr%N}rs& vsw%N}wx&%vx!`%N}!`!a&'S!a#O%N}#O#P&#c#P~%N}&e&){Y!e$V(aW'tQ&k!bOY%N}Zr%N}rs& vsw%N}wx&%vx!`%N}!`!a&'S!a#O%N}#O#P&#c#P~%N}%s&*vY(lP(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`-z!`#O$e#O#P&S#P~$e%s&+qZ(aW'tQ!g$V&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`&,d!`!a&-X!a#O$e#O#P&S#P~$e%s&,oW!e$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%s&-dY(aW'tQ&k!b!i$VOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`!0r!`#O$e#O#P&S#P~$e!m&._W'yP(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e&i&/W`(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#o&.w#o~$e&i&0i`(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers&1ksw$ewx&2Wx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#o&.w#o~$e&c&1tU(aW's$w&k!bOY%WZw%Wwx%qx#O%W#O#P&S#P~%W%k&2aU'tQ(`$V&k!bOY'SZr'Srs%qs#O'S#O#P&S#P~'S&i&3S`(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers&1ksw$ewx&2Wx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#o&.w#o~$e%s&4aX!Y$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!}$e!}#O&4|#O#P&S#P~$e!m&5XW(WP(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%w&5v_&k!bOY&6uYZ&7YZ]&6u]^&8R^!Q&6u!Q![&8i![!w&6u!w!x&9m!x#O&6u#O#P&?q#P#i&6u#i#j&@_#j#l&6u#l#m&Ca#m~&6u!l&6|SWY&k!bOY%qZ#O%q#O#P&S#P~%q%w&7cYWY'r$Z&k!bOX%qXY+^YZ(vZ]%q]^+^^p%qpq+^q#O%q#O#P*r#P~%q%w&8YTWY&k!bOY%qYZ+^Z#O%q#O#P&S#P~%q!l&8pUWY&k!bOY%qZ!Q%q!Q![&9S![#O%q#O#P&S#P~%q!l&9ZUWY&k!bOY%qZ!Q%q!Q![&6u![#O%q#O#P&S#P~%q!l&9rY&k!bOY%qZ!Q%q!Q![&:b![!c%q!c!i&:b!i#O%q#O#P&S#P#T%q#T#Z&:b#Z~%q!l&:gY&k!bOY%qZ!Q%q!Q![&;V![!c%q!c!i&;V!i#O%q#O#P&S#P#T%q#T#Z&;V#Z~%q!l&;[Y&k!bOY%qZ!Q%q!Q![&;z![!c%q!c!i&;z!i#O%q#O#P&S#P#T%q#T#Z&;z#Z~%q!l&<PY&k!bOY%qZ!Q%q!Q![&<o![!c%q!c!i&<o!i#O%q#O#P&S#P#T%q#T#Z&<o#Z~%q!l&<tY&k!bOY%qZ!Q%q!Q![&=d![!c%q!c!i&=d!i#O%q#O#P&S#P#T%q#T#Z&=d#Z~%q!l&=iY&k!bOY%qZ!Q%q!Q![&>X![!c%q!c!i&>X!i#O%q#O#P&S#P#T%q#T#Z&>X#Z~%q!l&>^Y&k!bOY%qZ!Q%q!Q![&>|![!c%q!c!i&>|!i#O%q#O#P&S#P#T%q#T#Z&>|#Z~%q!l&?RY&k!bOY%qZ!Q%q!Q![&6u![!c%q!c!i&6u!i#O%q#O#P&S#P#T%q#T#Z&6u#Z~%q!l&?xVWY&k!bOY%qYZ%qZ]%q]^&n^#O%q#O#P&S#P~%q!l&@dY&k!bOY%qZ!Q%q!Q![&AS![!c%q!c!i&AS!i#O%q#O#P&S#P#T%q#T#Z&AS#Z~%q!l&AXY&k!bOY%qZ!Q%q!Q![&Aw![!c%q!c!i&Aw!i#O%q#O#P&S#P#T%q#T#Z&Aw#Z~%q!l&A|Y&k!bOY%qZ!Q%q!Q![&Bl![!c%q!c!i&Bl!i#O%q#O#P&S#P#T%q#T#Z&Bl#Z~%q!l&BqY&k!bOY%qZ!Q%q!Q![&6u![!c%q!c!i&6u!i#O%q#O#P&S#P#T%q#T#Z&6u#Z~%q!l&CfY&k!bOY%qZ!Q%q!Q![&DU![!c%q!c!i&DU!i#O%q#O#P&S#P#T%q#T#Z&DU#Z~%q!l&DZY&k!bOY%qZ!Q%q!Q![&Dy![!c%q!c!i&Dy!i#O%q#O#P&S#P#T%q#T#Z&Dy#Z~%q!l&EQYWY&k!bOY%qZ!Q%q!Q![&Dy![!c%q!c!i&Dy!i#O%q#O#P&S#P#T%q#T#Z&Dy#Z~%q%w&E{X!Z#u(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P#Q&Fh#Q~$e#Q&FsW(cd(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%s&GhY(aW'tQ&k!b!b$VOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`!0r!`#O$e#O#P&S#P~$e&i&Hgb(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#d&.w#d#e&Io#e#o&.w#o~$e&i&JOb(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#X&.w#X#Y&KW#Y#o&.w#o~$e&i&Kgb(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#f&.w#f#g&Lo#g#o&.w#o~$e&i&MOa(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#U&NT#U#o&.w#o~$e&i&Ndb(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#h&.w#h#i' l#i#o&.w#o~$e&i' {b(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#c&.w#c#d'#T#d#o&.w#o~$e&i'#db(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#f&.w#f#g'$l#g#o&.w#o~$e&i'${s(aW'tQ!V$U'vq'}S&k!bOY$eZq$eqr''Yrs%Wsu$euv'(xvw')swx'Sxy'*qyz$ez{'(x{|'(x|}$e}!O'+j!O!P$e!P!Q'(x!Q![&.w![!^$e!^!_',h!_!`''Y!`!a'-f!a!c$e!c!}&.w!}#O'.d#O#P&S#P#Q$e#Q#R'(x#R#S&.w#S#T$e#T#o&.w#o#p$e#p#q'/Y#q#r$e#r#s'(T#s~$e!q''eY(aW'tQ#`T&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`'(T!`#O$e#O#P&S#P~$e!q'(`W(aW'tQ#`T&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e!q')TY(aW'tQ#`T&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`'(T!`#O$e#O#P&S#P~$e!q'*OZ(aW'tQ#`T&k!bOY$eZr$ers%Wsv$evw'(Twx'Sx!_$e!_!`'(T!`#O$e#O#P&S#P~$e!q'*zY(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sxy$eyz'(Tz#O$e#O#P&S#P~$e!q'+uZ(aW'tQ#`T&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`'(T!`!a'(T!a#O$e#O#P&S#P~$e!q',sZ(aW'tQ#`T&k!bOY$eZr$ers%Wsw$ewx'Sx!^$e!^!_'(x!_!`'(T!`#O$e#O#P&S#P~$e!q'-qZ(aW'tQ#`T&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`'(T!`!a'(x!a#O$e#O#P&S#P~$e!q'.mX(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P#Q'(T#Q~$e!q'/e[(aW'tQ#`T&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`'(T!`#O$e#O#P&S#P#p$e#p#q'(T#q~$e&i'0jb(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers&1ksw$ewx&2Wx!Q$e!Q!Y&.w!Y!Z'1r!Z![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#o&.w#o~$e&i'2R`(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers&1ksw$ewx&2Wx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#o&.w#o~$e%s'3`W!R$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%s'4T[(aW'tQ!a$V&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`!0r!`#O$e#O#P&S#P#p$e#p#q'4y#q~$e%s'5UW([$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e!}'5yW!Xa(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e!q'6na(aW'tQ&UP&k!bOX$eXY'7sZp$epq'7sqr$ers%Wsw$ewx'Sx!c$e!c!}'9R!}#O$e#O#P&S#P#R$e#R#S'9R#S#T$e#T#o'9R#o~$e!q'7|a(aW'tQ&k!bOX$eXY'7sZp$epq'7sqr$ers%Wsw$ewx'Sx!c$e!c!}'9R!}#O$e#O#P&S#P#R$e#R#S'9R#S#T$e#T#o'9R#o~$e!q'9^`(aW'tQcT&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q!['9R![!c$e!c!}'9R!}#O$e#O#P&S#P#R$e#R#S'9R#S#T$e#T#o'9R#o~$e",
  17432. tokenizers: [rawString, rawStringContinue, fallback, 0, 1, 2, 3, 4, 5, 6, 7],
  17433. topRules: { Program: [0, 266] },
  17434. dynamicPrecedences: {
  17435. '84': 1,
  17436. '91': 1,
  17437. '98': 1,
  17438. '104': -10,
  17439. '105': 1,
  17440. '110': -1,
  17441. '116': -10,
  17442. '117': 1,
  17443. '172': 1,
  17444. '175': -10,
  17445. '221': -1,
  17446. '225': 2,
  17447. '226': 2,
  17448. '265': -10,
  17449. '323': 3,
  17450. '367': 1,
  17451. '368': 3,
  17452. '369': 1,
  17453. '370': 1
  17454. },
  17455. specialized: [
  17456. { term: 314, get: value => spec_identifier$3[value] || -1 },
  17457. { term: 31, get: value => spec_[value] || -1 },
  17458. { term: 69, get: value => spec_templateArgsEnd[value] || -1 },
  17459. { term: 321, get: value => spec_scopedIdentifier[value] || -1 }
  17460. ],
  17461. tokenPrec: 22015
  17462. })
  17463. const cppLanguage = LezerLanguage.define({
  17464. parser: parser$8.configure({
  17465. props: [
  17466. indentNodeProp.add({
  17467. IfStatement: continuedIndent({ except: /^\s*({|else\b)/ }),
  17468. TryStatement: continuedIndent({ except: /^\s*({|catch)\b/ }),
  17469. LabeledStatement: flatIndent,
  17470. CaseStatement: context => context.baseIndent + context.unit,
  17471. BlockComment: () => -1,
  17472. Statement: continuedIndent({ except: /^{/ })
  17473. }),
  17474. foldNodeProp.add({
  17475. 'DeclarationList CompoundStatement EnumeratorList FieldDeclarationList InitializerList': foldInside$1,
  17476. BlockComment(tree) {
  17477. return { from: tree.from + 2, to: tree.to - 2 }
  17478. }
  17479. }),
  17480. styleTags({
  17481. 'typedef struct union enum class typename decltype auto template operator friend noexcept namespace using __attribute__ __declspec __based': tags$1.definitionKeyword,
  17482. 'extern MsCallModifier MsPointerModifier extern static register inline const volatile restrict _Atomic mutable constexpr virtual explicit VirtualSpecifier Access': tags$1.modifier,
  17483. 'if else switch for while do case default return break continue goto throw try catch': tags$1.controlKeyword,
  17484. 'new sizeof delete static_assert': tags$1.operatorKeyword,
  17485. 'NULL nullptr': tags$1.null,
  17486. this: tags$1.self,
  17487. 'True False': tags$1.bool,
  17488. 'TypeSize PrimitiveType': tags$1.standard(tags$1.typeName),
  17489. TypeIdentifier: tags$1.typeName,
  17490. FieldIdentifier: tags$1.propertyName,
  17491. 'CallExpression/FieldExpression/FieldIdentifier': tags$1.function(tags$1.propertyName),
  17492. StatementIdentifier: tags$1.labelName,
  17493. Identifier: tags$1.variableName,
  17494. 'CallExpression/Identifier': tags$1.function(tags$1.variableName),
  17495. 'CallExpression/ScopedIdentifier/Identifier': tags$1.function(tags$1.variableName),
  17496. DestructorName: tags$1.name,
  17497. NamespaceIdentifier: tags$1.namespace,
  17498. OperatorName: tags$1.operator,
  17499. ArithOp: tags$1.arithmeticOperator,
  17500. LogicOp: tags$1.logicOperator,
  17501. BitOp: tags$1.bitwiseOperator,
  17502. CompareOp: tags$1.compareOperator,
  17503. AssignOp: tags$1.definitionOperator,
  17504. UpdateOp: tags$1.updateOperator,
  17505. LineComment: tags$1.lineComment,
  17506. BlockComment: tags$1.blockComment,
  17507. Number: tags$1.number,
  17508. String: tags$1.string,
  17509. 'RawString SystemLibString': tags$1.special(tags$1.string),
  17510. CharLiteral: tags$1.character,
  17511. EscapeSequence: tags$1.escape,
  17512. PreProcArg: tags$1.meta,
  17513. 'PreprocDirectiveName #include #ifdef #ifndef #if #define #else #endif #elif': tags$1.processingInstruction,
  17514. MacroName: tags$1.special(tags$1.name),
  17515. '( )': tags$1.paren,
  17516. '[ ]': tags$1.squareBracket,
  17517. '{ }': tags$1.brace,
  17518. '< >': tags$1.angleBracket,
  17519. '. ->': tags$1.derefOperator,
  17520. ', ;': tags$1.separator
  17521. })
  17522. ]
  17523. }),
  17524. languageData: { commentTokens: { line: '//', block: { open: '/*', close: '*/' } }, indentOnInput: /^\s*(?:case |default:|\{|\})$/ }
  17525. })
  17526. function cpp() {
  17527. return new LanguageSupport(cppLanguage)
  17528. }
  17529. var _m25 = Object.freeze({ __proto__: null, cpp: cpp, cppLanguage: cppLanguage })
  17530. const printKeyword = 1,
  17531. indent = 162,
  17532. dedent = 163,
  17533. newline = 164,
  17534. newlineBracketed = 165,
  17535. newlineEmpty = 166,
  17536. eof = 167,
  17537. ParenthesizedExpression = 21,
  17538. TupleExpression = 47,
  17539. ComprehensionExpression = 48,
  17540. ArrayExpression = 52,
  17541. ArrayComprehensionExpression = 55,
  17542. DictionaryExpression = 56,
  17543. DictionaryComprehensionExpression = 59,
  17544. SetExpression = 60,
  17545. SetComprehensionExpression = 61
  17546. const newline$1 = 10,
  17547. carriageReturn = 13,
  17548. space$2 = 32,
  17549. tab = 9,
  17550. hash$1 = 35,
  17551. parenOpen = 40,
  17552. dot = 46
  17553. const bracketed = [
  17554. ParenthesizedExpression,
  17555. TupleExpression,
  17556. ComprehensionExpression,
  17557. ArrayExpression,
  17558. ArrayComprehensionExpression,
  17559. DictionaryExpression,
  17560. DictionaryComprehensionExpression,
  17561. SetExpression,
  17562. SetComprehensionExpression
  17563. ]
  17564. let cachedIndent = 0,
  17565. cachedInput$2 = null,
  17566. cachedPos$2 = 0
  17567. function getIndent(input, pos) {
  17568. if (pos == cachedPos$2 && input == cachedInput$2) return cachedIndent
  17569. cachedInput$2 = input
  17570. cachedPos$2 = pos
  17571. return (cachedIndent = getIndentInner(input, pos))
  17572. }
  17573. function getIndentInner(input, pos) {
  17574. for (let indent = 0; ; pos++) {
  17575. let ch = input.get(pos)
  17576. if (ch == space$2) indent++
  17577. else if (ch == tab) indent += 8 - (indent % 8)
  17578. else if (ch == newline$1 || ch == carriageReturn || ch == hash$1) return -1
  17579. else return indent
  17580. }
  17581. }
  17582. const newlines = new ExternalTokenizer(
  17583. (input, token, stack) => {
  17584. let next = input.get(token.start)
  17585. if (next < 0) {
  17586. token.accept(eof, token.start)
  17587. } else if (next != newline$1 && next != carriageReturn);
  17588. else if (stack.startOf(bracketed) != null) {
  17589. token.accept(newlineBracketed, token.start + 1)
  17590. } else if (getIndent(input, token.start + 1) < 0) {
  17591. token.accept(newlineEmpty, token.start + 1)
  17592. } else {
  17593. token.accept(newline, token.start + 1)
  17594. }
  17595. },
  17596. { contextual: true, fallback: true }
  17597. )
  17598. const indentation = new ExternalTokenizer((input, token, stack) => {
  17599. let prev = input.get(token.start - 1),
  17600. depth
  17601. if ((prev == newline$1 || prev == carriageReturn) && (depth = getIndent(input, token.start)) >= 0 && depth != stack.context.depth && stack.startOf(bracketed) == null)
  17602. token.accept(depth < stack.context.depth ? dedent : indent, token.start)
  17603. })
  17604. function IndentLevel(parent, depth) {
  17605. this.parent = parent
  17606. this.depth = depth
  17607. this.hash = (parent ? (parent.hash + parent.hash) << 8 : 0) + depth + (depth << 4)
  17608. }
  17609. const topIndent = new IndentLevel(null, 0)
  17610. const trackIndent = new ContextTracker({
  17611. start: topIndent,
  17612. shift(context, term, input, stack) {
  17613. return term == indent ? new IndentLevel(context, getIndent(input, stack.pos)) : term == dedent ? context.parent : context
  17614. },
  17615. hash(context) {
  17616. return context.hash
  17617. }
  17618. })
  17619. const legacyPrint = new ExternalTokenizer((input, token) => {
  17620. let pos = token.start
  17621. for (let print = 'print', i = 0; i < print.length; i++, pos++) if (input.get(pos) != print.charCodeAt(i)) return
  17622. let end = pos
  17623. if (/\w/.test(String.fromCharCode(input.get(pos)))) return
  17624. for (; ; pos++) {
  17625. let next = input.get(pos)
  17626. if (next == space$2 || next == tab) continue
  17627. if (next != parenOpen && next != dot && next != newline$1 && next != carriageReturn && next != hash$1) token.accept(printKeyword, end)
  17628. return
  17629. }
  17630. })
  17631. const spec_identifier$2 = {
  17632. __proto__: null,
  17633. await: 40,
  17634. or: 48,
  17635. and: 50,
  17636. in: 54,
  17637. not: 56,
  17638. is: 58,
  17639. if: 64,
  17640. else: 66,
  17641. lambda: 70,
  17642. yield: 88,
  17643. from: 90,
  17644. async: 98,
  17645. for: 100,
  17646. None: 152,
  17647. True: 154,
  17648. False: 154,
  17649. del: 168,
  17650. pass: 172,
  17651. break: 176,
  17652. continue: 180,
  17653. return: 184,
  17654. raise: 192,
  17655. import: 196,
  17656. as: 198,
  17657. global: 202,
  17658. nonlocal: 204,
  17659. assert: 208,
  17660. elif: 218,
  17661. while: 222,
  17662. try: 228,
  17663. except: 230,
  17664. finally: 232,
  17665. with: 236,
  17666. def: 240,
  17667. class: 250
  17668. }
  17669. const parser$7 = Parser.deserialize({
  17670. version: 13,
  17671. states:
  17672. "!?|O`Q$IXOOO%cQ$I[O'#GaOOQ$IS'#Cm'#CmOOQ$IS'#Cn'#CnO'RQ$IWO'#ClO(tQ$I[O'#G`OOQ$IS'#Ga'#GaOOQ$IS'#DR'#DROOQ$IS'#G`'#G`O)bQ$IWO'#CqO)rQ$IWO'#DbO*SQ$IWO'#DfOOQ$IS'#Ds'#DsO*gO`O'#DsO*oOpO'#DsO*wO!bO'#DtO+SO#tO'#DtO+_O&jO'#DtO+jO,UO'#DtO-lQ$I[O'#GQOOQ$IS'#GQ'#GQO'RQ$IWO'#GPO/OQ$I[O'#GPOOQ$IS'#E]'#E]O/gQ$IWO'#E^OOQ$IS'#GO'#GOO/qQ$IWO'#F}OOQ$IV'#F}'#F}O/|Q$IWO'#FPOOQ$IS'#Fr'#FrO0RQ$IWO'#FOOOQ$IV'#HZ'#HZOOQ$IV'#F|'#F|OOQ$IT'#FR'#FRQ`Q$IXOOO'RQ$IWO'#CoO0aQ$IWO'#CzO0hQ$IWO'#DOO0vQ$IWO'#GeO1WQ$I[O'#EQO'RQ$IWO'#EROOQ$IS'#ET'#ETOOQ$IS'#EV'#EVOOQ$IS'#EX'#EXO1lQ$IWO'#EZO2SQ$IWO'#E_O/|Q$IWO'#EaO2gQ$I[O'#EaO/|Q$IWO'#EdO/gQ$IWO'#EgO/gQ$IWO'#EkO/gQ$IWO'#EnO2rQ$IWO'#EpO2yQ$IWO'#EuO3UQ$IWO'#EqO/gQ$IWO'#EuO/|Q$IWO'#EwO/|Q$IWO'#E|OOQ$IS'#Cc'#CcOOQ$IS'#Cd'#CdOOQ$IS'#Ce'#CeOOQ$IS'#Cf'#CfOOQ$IS'#Cg'#CgOOQ$IS'#Ch'#ChOOQ$IS'#Cj'#CjO'RQ$IWO,58|O'RQ$IWO,58|O'RQ$IWO,58|O'RQ$IWO,58|O'RQ$IWO,58|O'RQ$IWO,58|O3ZQ$IWO'#DmOOQ$IS,5:W,5:WO3nQ$IWO,5:ZO3{Q%1`O,5:ZO4QQ$I[O,59WO0aQ$IWO,59_O0aQ$IWO,59_O0aQ$IWO,59_O6pQ$IWO,59_O6uQ$IWO,59_O6|Q$IWO,59gO7TQ$IWO'#G`O8ZQ$IWO'#G_OOQ$IS'#G_'#G_OOQ$IS'#DX'#DXO8rQ$IWO,59]O'RQ$IWO,59]O9QQ$IWO,59]O9VQ$IWO,5:PO'RQ$IWO,5:POOQ$IS,59|,59|O9eQ$IWO,59|O9jQ$IWO,5:VO'RQ$IWO,5:VO'RQ$IWO,5:TOOQ$IS,5:Q,5:QO9{Q$IWO,5:QO:QQ$IWO,5:UOOOO'#FZ'#FZO:VO`O,5:_OOQ$IS,5:_,5:_OOOO'#F['#F[O:_OpO,5:_O:gQ$IWO'#DuOOOO'#F]'#F]O:wO!bO,5:`OOQ$IS,5:`,5:`OOOO'#F`'#F`O;SO#tO,5:`OOOO'#Fa'#FaO;_O&jO,5:`OOOO'#Fb'#FbO;jO,UO,5:`OOQ$IS'#Fc'#FcO;uQ$I[O,5:dO>gQ$I[O,5<kO?QQ%GlO,5<kO?qQ$I[O,5<kOOQ$IS,5:x,5:xO@YQ$IXO'#FkOAiQ$IWO,5;TOOQ$IV,5<i,5<iOAtQ$I[O'#HWOB]Q$IWO,5;kOOQ$IS-E9p-E9pOOQ$IV,5;j,5;jO3PQ$IWO'#EwOOQ$IT-E9P-E9POBeQ$I[O,59ZODlQ$I[O,59fOEVQ$IWO'#GbOEbQ$IWO'#GbO/|Q$IWO'#GbOEmQ$IWO'#DQOEuQ$IWO,59jOEzQ$IWO'#GfO'RQ$IWO'#GfO/gQ$IWO,5=POOQ$IS,5=P,5=PO/gQ$IWO'#D|OOQ$IS'#D}'#D}OFiQ$IWO'#FeOFyQ$IWO,58zOGXQ$IWO,58zO)eQ$IWO,5:jOG^Q$I[O'#GhOOQ$IS,5:m,5:mOOQ$IS,5:u,5:uOGqQ$IWO,5:yOHSQ$IWO,5:{OOQ$IS'#Fh'#FhOHbQ$I[O,5:{OHpQ$IWO,5:{OHuQ$IWO'#HYOOQ$IS,5;O,5;OOITQ$IWO'#HVOOQ$IS,5;R,5;RO3UQ$IWO,5;VO3UQ$IWO,5;YOIfQ$I[O'#H[O'RQ$IWO'#H[OIpQ$IWO,5;[O2rQ$IWO,5;[O/gQ$IWO,5;aO/|Q$IWO,5;cOIuQ$IXO'#ElOKOQ$IZO,5;]ONaQ$IWO'#H]O3UQ$IWO,5;aONlQ$IWO,5;cONqQ$IWO,5;hO!#fQ$I[O1G.hO!#mQ$I[O1G.hO!&^Q$I[O1G.hO!&hQ$I[O1G.hO!)RQ$I[O1G.hO!)fQ$I[O1G.hO!)yQ$IWO'#GnO!*XQ$I[O'#GQO/gQ$IWO'#GnO!*cQ$IWO'#GmOOQ$IS,5:X,5:XO!*kQ$IWO,5:XO!*pQ$IWO'#GoO!*{Q$IWO'#GoO!+`Q$IWO1G/uOOQ$IS'#Dq'#DqOOQ$IS1G/u1G/uOOQ$IS1G.y1G.yO!,`Q$I[O1G.yO!,gQ$I[O1G.yO0aQ$IWO1G.yO!-SQ$IWO1G/ROOQ$IS'#DW'#DWO/gQ$IWO,59qOOQ$IS1G.w1G.wO!-ZQ$IWO1G/cO!-kQ$IWO1G/cO!-sQ$IWO1G/dO'RQ$IWO'#GgO!-xQ$IWO'#GgO!-}Q$I[O1G.wO!._Q$IWO,59fO!/eQ$IWO,5=VO!/uQ$IWO,5=VO!/}Q$IWO1G/kO!0SQ$I[O1G/kOOQ$IS1G/h1G/hO!0dQ$IWO,5=QO!1ZQ$IWO,5=QO/gQ$IWO1G/oO!1xQ$IWO1G/qO!1}Q$I[O1G/qO!2_Q$I[O1G/oOOQ$IS1G/l1G/lOOQ$IS1G/p1G/pOOOO-E9X-E9XOOQ$IS1G/y1G/yOOOO-E9Y-E9YO!2oQ$IWO'#GzO/gQ$IWO'#GzO!2}Q$IWO,5:aOOOO-E9Z-E9ZOOQ$IS1G/z1G/zOOOO-E9^-E9^OOOO-E9_-E9_OOOO-E9`-E9`OOQ$IS-E9a-E9aO!3YQ%GlO1G2VO!3yQ$I[O1G2VO'RQ$IWO,5<OOOQ$IS,5<O,5<OOOQ$IS-E9b-E9bOOQ$IS,5<V,5<VOOQ$IS-E9i-E9iOOQ$IV1G0o1G0oO/|Q$IWO'#FgO!4bQ$I[O,5=rOOQ$IS1G1V1G1VO!4yQ$IWO1G1VOOQ$IS'#DS'#DSO/gQ$IWO,5<|OOQ$IS,5<|,5<|O!5OQ$IWO'#FSO!5ZQ$IWO,59lO!5cQ$IWO1G/UO!5mQ$I[O,5=QOOQ$IS1G2k1G2kOOQ$IS,5:h,5:hO!6^Q$IWO'#GPOOQ$IS,5<P,5<POOQ$IS-E9c-E9cO!6oQ$IWO1G.fOOQ$IS1G0U1G0UO!6}Q$IWO,5=SO!7_Q$IWO,5=SO/gQ$IWO1G0eO/gQ$IWO1G0eO/|Q$IWO1G0gOOQ$IS-E9f-E9fO!7pQ$IWO1G0gO!7{Q$IWO1G0gO!8QQ$IWO,5=tO!8`Q$IWO,5=tO!8nQ$IWO,5=qO!9UQ$IWO,5=qO!9gQ$IZO1G0qO!<uQ$IZO1G0tO!@QQ$IWO,5=vO!@[Q$IWO,5=vO!@dQ$I[O,5=vO/gQ$IWO1G0vO!@nQ$IWO1G0vO3UQ$IWO1G0{ONlQ$IWO1G0}OOQ$IV,5;W,5;WO!@sQ$IYO,5;WO!@xQ$IZO1G0wO!DZQ$IWO'#FoO3UQ$IWO1G0wO3UQ$IWO1G0wO!DhQ$IWO,5=wO!DuQ$IWO,5=wO/|Q$IWO,5=wOOQ$IV1G0{1G0{O!D}Q$IWO'#EyO!E`Q%1`O1G0}OOQ$IV1G1S1G1SO3UQ$IWO1G1SOOQ$IS,5=Y,5=YOOQ$IS'#Dn'#DnO/gQ$IWO,5=YO!EhQ$IWO,5=XO!E{Q$IWO,5=XOOQ$IS1G/s1G/sO!FTQ$IWO,5=ZO!FeQ$IWO,5=ZO!FmQ$IWO,5=ZO!GQQ$IWO,5=ZO!GbQ$IWO,5=ZOOQ$IS7+%a7+%aOOQ$IS7+$e7+$eO!5cQ$IWO7+$mO!ITQ$IWO1G.yO!I[Q$IWO1G.yOOQ$IS1G/]1G/]OOQ$IS,5;p,5;pO'RQ$IWO,5;pOOQ$IS7+$}7+$}O!IcQ$IWO7+$}OOQ$IS-E9S-E9SOOQ$IS7+%O7+%OO!IsQ$IWO,5=RO'RQ$IWO,5=ROOQ$IS7+$c7+$cO!IxQ$IWO7+$}O!JQQ$IWO7+%OO!JVQ$IWO1G2qOOQ$IS7+%V7+%VO!JgQ$IWO1G2qO!JoQ$IWO7+%VOOQ$IS,5;o,5;oO'RQ$IWO,5;oO!JtQ$IWO1G2lOOQ$IS-E9R-E9RO!KkQ$IWO7+%ZOOQ$IS7+%]7+%]O!KyQ$IWO1G2lO!LhQ$IWO7+%]O!LmQ$IWO1G2rO!L}Q$IWO1G2rO!MVQ$IWO7+%ZO!M[Q$IWO,5=fO!MrQ$IWO,5=fO!MrQ$IWO,5=fO!NQO!LQO'#DwO!N]OSO'#G{OOOO1G/{1G/{O!NbQ$IWO1G/{O!NjQ%GlO7+'qO# ZQ$I[O1G1jP# tQ$IWO'#FdOOQ$IS,5<R,5<ROOQ$IS-E9e-E9eOOQ$IS7+&q7+&qOOQ$IS1G2h1G2hOOQ$IS,5;n,5;nOOQ$IS-E9Q-E9QOOQ$IS7+$p7+$pO#!RQ$IWO,5<kO#!lQ$IWO,5<kO#!}Q$I[O,5;qO##bQ$IWO1G2nOOQ$IS-E9T-E9TOOQ$IS7+&P7+&PO##rQ$IWO7+&POOQ$IS7+&R7+&RO#$QQ$IWO'#HXO/|Q$IWO7+&RO#$fQ$IWO7+&ROOQ$IS,5<U,5<UO#$qQ$IWO1G3`OOQ$IS-E9h-E9hOOQ$IS,5<Q,5<QO#%PQ$IWO1G3]OOQ$IS-E9d-E9dO#%gQ$IZO7+&]O!DZQ$IWO'#FmO3UQ$IWO7+&]O3UQ$IWO7+&`O#(uQ$I[O,5<YO'RQ$IWO,5<YO#)PQ$IWO1G3bOOQ$IS-E9l-E9lO#)ZQ$IWO1G3bO3UQ$IWO7+&bO/gQ$IWO7+&bOOQ$IV7+&g7+&gO!E`Q%1`O7+&iO#)cQ$IXO1G0rOOQ$IV-E9m-E9mO3UQ$IWO7+&cO3UQ$IWO7+&cOOQ$IV,5<Z,5<ZO#+UQ$IWO,5<ZOOQ$IV7+&c7+&cO#+aQ$IZO7+&cO#.lQ$IWO,5<[O#.wQ$IWO1G3cOOQ$IS-E9n-E9nO#/UQ$IWO1G3cO#/^Q$IWO'#H_O#/lQ$IWO'#H_O/|Q$IWO'#H_OOQ$IS'#H_'#H_O#/wQ$IWO'#H^OOQ$IS,5;e,5;eO#0PQ$IWO,5;eO/gQ$IWO'#E{OOQ$IV7+&i7+&iO3UQ$IWO7+&iOOQ$IV7+&n7+&nOOQ$IS1G2t1G2tOOQ$IS,5;s,5;sO#0UQ$IWO1G2sOOQ$IS-E9V-E9VO#0iQ$IWO,5;tO#0tQ$IWO,5;tO#1XQ$IWO1G2uOOQ$IS-E9W-E9WO#1iQ$IWO1G2uO#1qQ$IWO1G2uO#2RQ$IWO1G2uO#1iQ$IWO1G2uOOQ$IS<<HX<<HXO#2^Q$I[O1G1[OOQ$IS<<Hi<<HiP#2kQ$IWO'#FUO6|Q$IWO1G2mO#2xQ$IWO1G2mO#2}Q$IWO<<HiOOQ$IS<<Hj<<HjO#3_Q$IWO7+(]OOQ$IS<<Hq<<HqO#3oQ$I[O1G1ZP#4`Q$IWO'#FTO#4mQ$IWO7+(^O#4}Q$IWO7+(^O#5VQ$IWO<<HuO#5[Q$IWO7+(WOOQ$IS<<Hw<<HwO#6RQ$IWO,5;rO'RQ$IWO,5;rOOQ$IS-E9U-E9UOOQ$IS<<Hu<<HuOOQ$IS,5;x,5;xO/gQ$IWO,5;xO#6WQ$IWO1G3QOOQ$IS-E9[-E9[O#6nQ$IWO1G3QOOOO'#F_'#F_O#6|O!LQO,5:cOOOO,5=g,5=gOOOO7+%g7+%gO#7XQ$IWO1G2VO#7rQ$IWO1G2VP'RQ$IWO'#FVO/gQ$IWO<<IkO#8TQ$IWO,5=sO#8fQ$IWO,5=sO/|Q$IWO,5=sO#8wQ$IWO<<ImOOQ$IS<<Im<<ImO/|Q$IWO<<ImP/|Q$IWO'#FjP/gQ$IWO'#FfOOQ$IV-E9k-E9kO3UQ$IWO<<IwOOQ$IV,5<X,5<XO3UQ$IWO,5<XOOQ$IV<<Iw<<IwOOQ$IV<<Iz<<IzO#8|Q$I[O1G1tP#9WQ$IWO'#FnO#9_Q$IWO7+(|O#9iQ$IZO<<I|O3UQ$IWO<<I|OOQ$IV<<JT<<JTO3UQ$IWO<<JTOOQ$IV'#Fl'#FlO#<tQ$IZO7+&^OOQ$IV<<I}<<I}O#>mQ$IZO<<I}OOQ$IV1G1u1G1uO/|Q$IWO1G1uO3UQ$IWO<<I}O/|Q$IWO1G1vP/gQ$IWO'#FpO#AxQ$IWO7+(}O#BVQ$IWO7+(}OOQ$IS'#Ez'#EzO/gQ$IWO,5=yO#B_Q$IWO,5=yOOQ$IS,5=y,5=yO#BjQ$IWO,5=xO#B{Q$IWO,5=xOOQ$IS1G1P1G1POOQ$IS,5;g,5;gP#CTQ$IWO'#FXO#CeQ$IWO1G1`O#CxQ$IWO1G1`O#DYQ$IWO1G1`P#DeQ$IWO'#FYO#DrQ$IWO7+(aO#ESQ$IWO7+(aO#ESQ$IWO7+(aO#E[Q$IWO7+(aO#ElQ$IWO7+(XO6|Q$IWO7+(XOOQ$ISAN>TAN>TO#FVQ$IWO<<KxOOQ$ISAN>aAN>aO/gQ$IWO1G1^O#FgQ$I[O1G1^P#FqQ$IWO'#FWOOQ$IS1G1d1G1dP#GOQ$IWO'#F^O#G]Q$IWO7+(lOOOO-E9]-E9]O#GsQ$IWO7+'qOOQ$ISAN?VAN?VO#H^Q$IWO,5<TO#HrQ$IWO1G3_OOQ$IS-E9g-E9gO#ITQ$IWO1G3_OOQ$ISAN?XAN?XO#IfQ$IWOAN?XOOQ$IVAN?cAN?cOOQ$IV1G1s1G1sO3UQ$IWOAN?hO#IkQ$IZOAN?hOOQ$IVAN?oAN?oOOQ$IV-E9j-E9jOOQ$IV<<Ix<<IxO3UQ$IWOAN?iO3UQ$IWO7+'aOOQ$IVAN?iAN?iOOQ$IS7+'b7+'bO#LvQ$IWO<<LiOOQ$IS1G3e1G3eO/gQ$IWO1G3eOOQ$IS,5<],5<]O#MTQ$IWO1G3dOOQ$IS-E9o-E9oO#MfQ$IWO7+&zO#MvQ$IWO7+&zOOQ$IS7+&z7+&zO#NRQ$IWO<<K{O#NcQ$IWO<<K{O#NcQ$IWO<<K{O#NkQ$IWO'#GiOOQ$IS<<Ks<<KsO#NuQ$IWO<<KsOOQ$IS7+&x7+&xO/|Q$IWO1G1oP/|Q$IWO'#FiO$ `Q$IWO7+(yO$ qQ$IWO7+(yOOQ$ISG24sG24sOOQ$IVG25SG25SO3UQ$IWOG25SOOQ$IVG25TG25TOOQ$IV<<J{<<J{OOQ$IS7+)P7+)PP$!SQ$IWO'#FqOOQ$IS<<Jf<<JfO$!bQ$IWO<<JfO$!rQ$IWOANAgO$#SQ$IWOANAgO$#[Q$IWO'#GjOOQ$IS'#Gj'#GjO0hQ$IWO'#DaO$#uQ$IWO,5=TOOQ$ISANA_ANA_OOQ$IS7+'Z7+'ZO$$^Q$IWO<<LeOOQ$IVLD*nLD*nOOQ$ISAN@QAN@QO$$oQ$IWOG27RO$%PQ$IWO,59{OOQ$IS1G2o1G2oO#NkQ$IWO1G/gOOQ$IS7+%R7+%RO6|Q$IWO'#CzO6|Q$IWO,59_O6|Q$IWO,59_O6|Q$IWO,59_O$%UQ$I[O,5<kO6|Q$IWO1G.yO/gQ$IWO1G/UO/gQ$IWO7+$mP$%iQ$IWO'#FdO'RQ$IWO'#GPO$%vQ$IWO,59_O$%{Q$IWO,59_O$&SQ$IWO,59jO$&XQ$IWO1G/RO0hQ$IWO'#DOO6|Q$IWO,59g",
  17673. stateData:
  17674. "$&o~O$oOS$lOS$kOSQOS~OPhOTeOdsOfXOltOp!SOsuO|vO}!PO!R!VO!S!UO!VYO!ZZO!fdO!mdO!ndO!odO!vxO!xyO!zzO!|{O#O|O#S}O#U!OO#X!QO#Y!QO#[!RO#c!TO#f!WO#j!XO#l!YO#q!ZO#tlO$jqO$zQO${QO%PRO%QVO%e[O%f]O%i^O%l_O%r`O%uaO%wbO~OT!aO]!aO_!bOf!iO!V!kO!d!lO$u![O$v!]O$w!^O$x!_O$y!_O$z!`O${!`O$|!aO$}!aO%O!aO~Oh%TXi%TXj%TXk%TXl%TXm%TXp%TXw%TXx%TX!s%TX#^%TX$j%TX$m%TX%V%TX!O%TX!R%TX!S%TX%W%TX!W%TX![%TX}%TX#V%TXq%TX!j%TX~P$_OdsOfXO!VYO!ZZO!fdO!mdO!ndO!odO$zQO${QO%PRO%QVO%e[O%f]O%i^O%l_O%r`O%uaO%wbO~Ow%SXx%SX#^%SX$j%SX$m%SX%V%SX~Oh!oOi!pOj!nOk!nOl!qOm!rOp!sO!s%SX~P(`OT!yOl-fOs-tO|vO~P'ROT!|Ol-fOs-tO!W!}O~P'ROT#QO_#ROl-fOs-tO![#SO~P'RO%g#VO%h#XO~O%j#YO%k#XO~O!Z#[O%m#]O%q#_O~O!Z#[O%s#`O%t#_O~O!Z#[O%h#_O%v#bO~O!Z#[O%k#_O%x#dO~OT$tX]$tX_$tXf$tXh$tXi$tXj$tXk$tXl$tXm$tXp$tXw$tX!V$tX!d$tX$u$tX$v$tX$w$tX$x$tX$y$tX$z$tX${$tX$|$tX$}$tX%O$tX!O$tX!R$tX!S$tX~O%e[O%f]O%i^O%l_O%r`O%uaO%wbOx$tX!s$tX#^$tX$j$tX$m$tX%V$tX%W$tX!W$tX![$tX}$tX#V$tXq$tX!j$tX~P+uOw#iOx$sX!s$sX#^$sX$j$sX$m$sX%V$sX~Ol-fOs-tO~P'RO#^#lO$j#nO$m#nO~O%QVO~O!R#sO#l!YO#q!ZO#tlO~OltO~P'ROT#xO_#yO%QVOxtP~OT#}Ol-fOs-tO}$OO~P'ROx$QO!s$VO%V$RO#^!tX$j!tX$m!tX~OT#}Ol-fOs-tO#^!}X$j!}X$m!}X~P'ROl-fOs-tO#^#RX$j#RX$m#RX~P'RO!d$]O!m$]O%QVO~OT$gO~P'RO!S$iO#j$jO#l$kO~Ox$lO~OT$zO_$zOl-fOs-tO!O$|O~P'ROl-fOs-tOx%PO~P'RO%d%RO~O_!bOf!iO!V!kO!d!lOT`a]`ah`ai`aj`ak`al`am`ap`aw`ax`a!s`a#^`a$j`a$m`a$u`a$v`a$w`a$x`a$y`a$z`a${`a$|`a$}`a%O`a%V`a!O`a!R`a!S`a%W`a!W`a![`a}`a#V`aq`a!j`a~Ok%WO~Ol%WO~P'ROl-fO~P'ROh-hOi-iOj-gOk-gOl-pOm-qOp-uO!O%SX!R%SX!S%SX%W%SX!W%SX![%SX}%SX#V%SX!j%SX~P(`O%W%YOw%RX!O%RX!R%RX!S%RX!W%RXx%RX~Ow%]O!O%[O!R%aO!S%`O~O!O%[O~Ow%dO!R%aO!S%`O!W%_X~O!W%hO~Ow%iOx%kO!R%aO!S%`O![%YX~O![%oO~O![%pO~O%g#VO%h%rO~O%j#YO%k%rO~OT%uOl-fOs-tO|vO~P'RO!Z#[O%m#]O%q%xO~O!Z#[O%s#`O%t%xO~O!Z#[O%h%xO%v#bO~O!Z#[O%k%xO%x#dO~OT!la]!la_!laf!lah!lai!laj!lak!lal!lam!lap!law!lax!la!V!la!d!la!s!la#^!la$j!la$m!la$u!la$v!la$w!la$x!la$y!la$z!la${!la$|!la$}!la%O!la%V!la!O!la!R!la!S!la%W!la!W!la![!la}!la#V!laq!la!j!la~P#vOw%}Ox$sa!s$sa#^$sa$j$sa$m$sa%V$sa~P$_OT&POltOsuOx$sa!s$sa#^$sa$j$sa$m$sa%V$sa~P'ROw%}Ox$sa!s$sa#^$sa$j$sa$m$sa%V$sa~OPhOTeOltOsuO|vO}!PO!vxO!xyO!zzO!|{O#O|O#S}O#U!OO#X!QO#Y!QO#[!RO#^$_X$j$_X$m$_X~P'RO#^#lO$j&UO$m&UO~O!d&VOf%zX$j%zX#V%zX#^%zX$m%zX#U%zX~Of!iO$j&XO~Ohcaicajcakcalcamcapcawcaxca!sca#^ca$jca$mca%Vca!Oca!Rca!Sca%Wca!Wca![ca}ca#Vcaqca!jca~P$_Opnawnaxna#^na$jna$mna%Vna~Oh!oOi!pOj!nOk!nOl!qOm!rO!sna~PDTO%V&ZOw%UXx%UX~O%QVOw%UXx%UX~Ow&^OxtX~Ox&`O~Ow%iO#^%YX$j%YX$m%YX!O%YXx%YX![%YX!j%YX%V%YX~OT-oOl-fOs-tO|vO~P'RO%V$RO#^Sa$jSa$mSa~O%V$RO~Ow&iO#^%[X$j%[X$m%[Xk%[X~P$_Ow&lO}&kO#^#Ra$j#Ra$m#Ra~O#V&mO#^#Ta$j#Ta$m#Ta~O!d$]O!m$]O#U&oO%QVO~O#U&oO~Ow&qO#^%|X$j%|X$m%|X~Ow&sO#^%yX$j%yX$m%yXx%yX~Ow&wOk&OX~P$_Ok&zO~OPhOTeOltOsuO|vO}!PO!vxO!xyO!zzO!|{O#O|O#S}O#U!OO#X!QO#Y!QO#[!RO$j'PO~P'ROq'TO#g'RO#h'SOP#eaT#ead#eaf#eal#eap#eas#ea|#ea}#ea!R#ea!S#ea!V#ea!Z#ea!f#ea!m#ea!n#ea!o#ea!v#ea!x#ea!z#ea!|#ea#O#ea#S#ea#U#ea#X#ea#Y#ea#[#ea#c#ea#f#ea#j#ea#l#ea#q#ea#t#ea$g#ea$j#ea$z#ea${#ea%P#ea%Q#ea%e#ea%f#ea%i#ea%l#ea%r#ea%u#ea%w#ea$i#ea$m#ea~Ow'UO#V'WOx&PX~Of'YO~Of!iOx$lO~OT!aO]!aO_!bOf!iO!V!kO!d!lO$w!^O$x!_O$y!_O$z!`O${!`O$|!aO$}!aO%O!aOhUiiUijUikUilUimUipUiwUixUi!sUi#^Ui$jUi$mUi$uUi%VUi!OUi!RUi!SUi%WUi!WUi![Ui}Ui#VUiqUi!jUi~O$v!]O~PNyO$vUi~PNyOT!aO]!aO_!bOf!iO!V!kO!d!lO$z!`O${!`O$|!aO$}!aO%O!aOhUiiUijUikUilUimUipUiwUixUi!sUi#^Ui$jUi$mUi$uUi$vUi$wUi%VUi!OUi!RUi!SUi%WUi!WUi![Ui}Ui#VUiqUi!jUi~O$x!_O$y!_O~P!#tO$xUi$yUi~P!#tO_!bOf!iO!V!kO!d!lOhUiiUijUikUilUimUipUiwUixUi!sUi#^Ui$jUi$mUi$uUi$vUi$wUi$xUi$yUi$zUi${Ui%VUi!OUi!RUi!SUi%WUi!WUi![Ui}Ui#VUiqUi!jUi~OT!aO]!aO$|!aO$}!aO%O!aO~P!&rOTUi]Ui$|Ui$}Ui%OUi~P!&rO!R%aO!S%`Ow%bX!O%bX~O%V'_O%W'_O~P+uOw'aO!O%aX~O!O'cO~Ow'dOx'fO!W%cX~Ol-fOs-tOw'dOx'gO!W%cX~P'RO!W'iO~Oj!nOk!nOl!qOm!rOhgipgiwgixgi!sgi#^gi$jgi$mgi%Vgi~Oi!pO~P!+eOigi~P!+eOh-hOi-iOj-gOk-gOl-pOm-qO~Oq'kO~P!,nOT'pOl-fOs-tO!O'qO~P'ROw'rO!O'qO~O!O'tO~O!S'vO~Ow'rO!O'wO!R%aO!S%`O~P$_Oh-hOi-iOj-gOk-gOl-pOm-qO!Ona!Rna!Sna%Wna!Wna![na}na#Vnaqna!jna~PDTOT'pOl-fOs-tO!W%_a~P'ROw'zO!W%_a~O!W'{O~Ow'zO!R%aO!S%`O!W%_a~P$_OT(POl-fOs-tO![%Ya#^%Ya$j%Ya$m%Ya!O%Yax%Ya!j%Ya%V%Ya~P'ROw(QO![%Ya#^%Ya$j%Ya$m%Ya!O%Yax%Ya!j%Ya%V%Ya~O![(TO~Ow(QO!R%aO!S%`O![%Ya~P$_Ow(WO!R%aO!S%`O![%`a~P$_Ow(ZOx%nX![%nX!j%nX~Ox(^O![(`O!j(aO~OT&POltOsuOx$si!s$si#^$si$j$si$m$si%V$si~P'ROw(bOx$si!s$si#^$si$j$si$m$si%V$si~O!d&VOf%za$j%za#V%za#^%za$m%za#U%za~O$j(gO~OT#xO_#yO%QVO~Ow&^Oxta~OltOsuO~P'ROw(QO#^%Ya$j%Ya$m%Ya!O%Yax%Ya![%Ya!j%Ya%V%Ya~P$_Ow(lO#^$sX$j$sX$m$sX%V$sX~O%V$RO#^Si$jSi$mSi~O#^%[a$j%[a$m%[ak%[a~P'ROw(oO#^%[a$j%[a$m%[ak%[a~OT(sOf(uO%QVO~O#U(vO~O%QVO#^%|a$j%|a$m%|a~Ow(xO#^%|a$j%|a$m%|a~Ol-fOs-tO#^%ya$j%ya$m%yax%ya~P'ROw({O#^%ya$j%ya$m%yax%ya~Oq)PO#a)OOP#_iT#_id#_if#_il#_ip#_is#_i|#_i}#_i!R#_i!S#_i!V#_i!Z#_i!f#_i!m#_i!n#_i!o#_i!v#_i!x#_i!z#_i!|#_i#O#_i#S#_i#U#_i#X#_i#Y#_i#[#_i#c#_i#f#_i#j#_i#l#_i#q#_i#t#_i$g#_i$j#_i$z#_i${#_i%P#_i%Q#_i%e#_i%f#_i%i#_i%l#_i%r#_i%u#_i%w#_i$i#_i$m#_i~Oq)QOP#biT#bid#bif#bil#bip#bis#bi|#bi}#bi!R#bi!S#bi!V#bi!Z#bi!f#bi!m#bi!n#bi!o#bi!v#bi!x#bi!z#bi!|#bi#O#bi#S#bi#U#bi#X#bi#Y#bi#[#bi#c#bi#f#bi#j#bi#l#bi#q#bi#t#bi$g#bi$j#bi$z#bi${#bi%P#bi%Q#bi%e#bi%f#bi%i#bi%l#bi%r#bi%u#bi%w#bi$i#bi$m#bi~OT)SOk&Oa~P'ROw)TOk&Oa~Ow)TOk&Oa~P$_Ok)XO~O$h)[O~Oq)_O#g'RO#h)^OP#eiT#eid#eif#eil#eip#eis#ei|#ei}#ei!R#ei!S#ei!V#ei!Z#ei!f#ei!m#ei!n#ei!o#ei!v#ei!x#ei!z#ei!|#ei#O#ei#S#ei#U#ei#X#ei#Y#ei#[#ei#c#ei#f#ei#j#ei#l#ei#q#ei#t#ei$g#ei$j#ei$z#ei${#ei%P#ei%Q#ei%e#ei%f#ei%i#ei%l#ei%r#ei%u#ei%w#ei$i#ei$m#ei~Ol-fOs-tOx$lO~P'ROl-fOs-tOx&Pa~P'ROw)eOx&Pa~OT)iO_)jO!O)mO$|)kO%QVO~Ox$lO&S)oO~OT$zO_$zOl-fOs-tO!O%aa~P'ROw)uO!O%aa~Ol-fOs-tOx)xO!W%ca~P'ROw)yO!W%ca~Ol-fOs-tOw)yOx)|O!W%ca~P'ROl-fOs-tOw)yO!W%ca~P'ROw)yOx)|O!W%ca~Oj-gOk-gOl-pOm-qOhgipgiwgi!Ogi!Rgi!Sgi%Wgi!Wgixgi![gi#^gi$jgi$mgi}gi#Vgiqgi!jgi%Vgi~Oi-iO~P!GmOigi~P!GmOT'pOl-fOs-tO!O*RO~P'ROk*TO~Ow*VO!O*RO~O!O*WO~OT'pOl-fOs-tO!W%_i~P'ROw*XO!W%_i~O!W*YO~OT(POl-fOs-tO![%Yi#^%Yi$j%Yi$m%Yi!O%Yix%Yi!j%Yi%V%Yi~P'ROw*]O!R%aO!S%`O![%`i~Ow*`O![%Yi#^%Yi$j%Yi$m%Yi!O%Yix%Yi!j%Yi%V%Yi~O![*aO~O_*cOl-fOs-tO![%`i~P'ROw*]O![%`i~O![*eO~OT*gOl-fOs-tOx%na![%na!j%na~P'ROw*hOx%na![%na!j%na~O!Z#[O%p*kO![!kX~O![*mO~Ox(^O![*nO~OT&POltOsuOx$sq!s$sq#^$sq$j$sq$m$sq%V$sq~P'ROw$Wix$Wi!s$Wi#^$Wi$j$Wi$m$Wi%V$Wi~P$_OT&POltOsuO~P'ROT&POl-fOs-tO#^$sa$j$sa$m$sa%V$sa~P'ROw*oO#^$sa$j$sa$m$sa%V$sa~Ow#ya#^#ya$j#ya$m#yak#ya~P$_O#^%[i$j%[i$m%[ik%[i~P'ROw*rO#^#Rq$j#Rq$m#Rq~Ow*sO#V*uO#^%{X$j%{X$m%{X!O%{X~OT*wOf*xO%QVO~O%QVO#^%|i$j%|i$m%|i~Ol-fOs-tO#^%yi$j%yi$m%yix%yi~P'ROq*|O#a)OOP#_qT#_qd#_qf#_ql#_qp#_qs#_q|#_q}#_q!R#_q!S#_q!V#_q!Z#_q!f#_q!m#_q!n#_q!o#_q!v#_q!x#_q!z#_q!|#_q#O#_q#S#_q#U#_q#X#_q#Y#_q#[#_q#c#_q#f#_q#j#_q#l#_q#q#_q#t#_q$g#_q$j#_q$z#_q${#_q%P#_q%Q#_q%e#_q%f#_q%i#_q%l#_q%r#_q%u#_q%w#_q$i#_q$m#_q~Ok$baw$ba~P$_OT)SOk&Oi~P'ROw+TOk&Oi~OPhOTeOltOp!SOsuO|vO}!PO!R!VO!S!UO!vxO!xyO!zzO!|{O#O|O#S}O#U!OO#X!QO#Y!QO#[!RO#c!TO#f!WO#j!XO#l!YO#q!ZO#tlO~P'ROw+_Ox$lO#V+_O~O#h+`OP#eqT#eqd#eqf#eql#eqp#eqs#eq|#eq}#eq!R#eq!S#eq!V#eq!Z#eq!f#eq!m#eq!n#eq!o#eq!v#eq!x#eq!z#eq!|#eq#O#eq#S#eq#U#eq#X#eq#Y#eq#[#eq#c#eq#f#eq#j#eq#l#eq#q#eq#t#eq$g#eq$j#eq$z#eq${#eq%P#eq%Q#eq%e#eq%f#eq%i#eq%l#eq%r#eq%u#eq%w#eq$i#eq$m#eq~O#V+aOw$dax$da~Ol-fOs-tOx&Pi~P'ROw+cOx&Pi~Ox$QO%V+eOw&RX!O&RX~O%QVOw&RX!O&RX~Ow+iO!O&QX~O!O+kO~OT$zO_$zOl-fOs-tO!O%ai~P'ROx+nOw#|a!W#|a~Ol-fOs-tOx+oOw#|a!W#|a~P'ROl-fOs-tOx)xO!W%ci~P'ROw+rO!W%ci~Ol-fOs-tOw+rO!W%ci~P'ROw+rOx+uO!W%ci~Ow#xi!O#xi!W#xi~P$_OT'pOl-fOs-tO~P'ROk+wO~OT'pOl-fOs-tO!O+xO~P'ROT'pOl-fOs-tO!W%_q~P'ROw#wi![#wi#^#wi$j#wi$m#wi!O#wix#wi!j#wi%V#wi~P$_OT(POl-fOs-tO~P'RO_*cOl-fOs-tO![%`q~P'ROw+yO![%`q~O![+zO~OT(POl-fOs-tO![%Yq#^%Yq$j%Yq$m%Yq!O%Yqx%Yq!j%Yq%V%Yq~P'ROx+{O~OT*gOl-fOs-tOx%ni![%ni!j%ni~P'ROw,QOx%ni![%ni!j%ni~O!Z#[O%p*kO![!ka~OT&POl-fOs-tO#^$si$j$si$m$si%V$si~P'ROw,SO#^$si$j$si$m$si%V$si~O%QVO#^%{a$j%{a$m%{a!O%{a~Ow,VO#^%{a$j%{a$m%{a!O%{a~O!O,YO~Ok$biw$bi~P$_OT)SO~P'ROT)SOk&Oq~P'ROq,^OP#dyT#dyd#dyf#dyl#dyp#dys#dy|#dy}#dy!R#dy!S#dy!V#dy!Z#dy!f#dy!m#dy!n#dy!o#dy!v#dy!x#dy!z#dy!|#dy#O#dy#S#dy#U#dy#X#dy#Y#dy#[#dy#c#dy#f#dy#j#dy#l#dy#q#dy#t#dy$g#dy$j#dy$z#dy${#dy%P#dy%Q#dy%e#dy%f#dy%i#dy%l#dy%r#dy%u#dy%w#dy$i#dy$m#dy~OPhOTeOltOp!SOsuO|vO}!PO!R!VO!S!UO!vxO!xyO!zzO!|{O#O|O#S}O#U!OO#X!QO#Y!QO#[!RO#c!TO#f!WO#j!XO#l!YO#q!ZO#tlO$i,bO$m,bO~P'RO#h,cOP#eyT#eyd#eyf#eyl#eyp#eys#ey|#ey}#ey!R#ey!S#ey!V#ey!Z#ey!f#ey!m#ey!n#ey!o#ey!v#ey!x#ey!z#ey!|#ey#O#ey#S#ey#U#ey#X#ey#Y#ey#[#ey#c#ey#f#ey#j#ey#l#ey#q#ey#t#ey$g#ey$j#ey$z#ey${#ey%P#ey%Q#ey%e#ey%f#ey%i#ey%l#ey%r#ey%u#ey%w#ey$i#ey$m#ey~Ol-fOs-tOx&Pq~P'ROw,gOx&Pq~O%V+eOw&Ra!O&Ra~OT)iO_)jO$|)kO%QVO!O&Qa~Ow,kO!O&Qa~OT$zO_$zOl-fOs-tO~P'ROl-fOs-tOx,mOw#|i!W#|i~P'ROl-fOs-tOw#|i!W#|i~P'ROx,mOw#|i!W#|i~Ol-fOs-tOx)xO~P'ROl-fOs-tOx)xO!W%cq~P'ROw,pO!W%cq~Ol-fOs-tOw,pO!W%cq~P'ROp,sO!R%aO!S%`O!O%Zq!W%Zq![%Zqw%Zq~P!,nO_*cOl-fOs-tO![%`y~P'ROw#zi![#zi~P$_O_*cOl-fOs-tO~P'ROT*gOl-fOs-tO~P'ROT*gOl-fOs-tOx%nq![%nq!j%nq~P'ROT&POl-fOs-tO#^$sq$j$sq$m$sq%V$sq~P'RO#V,wOw$]a#^$]a$j$]a$m$]a!O$]a~O%QVO#^%{i$j%{i$m%{i!O%{i~Ow,yO#^%{i$j%{i$m%{i!O%{i~O!O,{O~Oq,}OP#d!RT#d!Rd#d!Rf#d!Rl#d!Rp#d!Rs#d!R|#d!R}#d!R!R#d!R!S#d!R!V#d!R!Z#d!R!f#d!R!m#d!R!n#d!R!o#d!R!v#d!R!x#d!R!z#d!R!|#d!R#O#d!R#S#d!R#U#d!R#X#d!R#Y#d!R#[#d!R#c#d!R#f#d!R#j#d!R#l#d!R#q#d!R#t#d!R$g#d!R$j#d!R$z#d!R${#d!R%P#d!R%Q#d!R%e#d!R%f#d!R%i#d!R%l#d!R%r#d!R%u#d!R%w#d!R$i#d!R$m#d!R~Ol-fOs-tOx&Py~P'ROT)iO_)jO$|)kO%QVO!O&Qi~Ol-fOs-tOw#|q!W#|q~P'ROx-TOw#|q!W#|q~Ol-fOs-tOx)xO!W%cy~P'ROw-UO!W%cy~Ol-fOs-YO~P'ROp,sO!R%aO!S%`O!O%Zy!W%Zy![%Zyw%Zy~P!,nO%QVO#^%{q$j%{q$m%{q!O%{q~Ow-^O#^%{q$j%{q$m%{q!O%{q~OT)iO_)jO$|)kO%QVO~Ol-fOs-tOw#|y!W#|y~P'ROl-fOs-tOx)xO!W%c!R~P'ROw-aO!W%c!R~Op%^X!O%^X!R%^X!S%^X!W%^X![%^Xw%^X~P!,nOp,sO!R%aO!S%`O!O%]a!W%]a![%]aw%]a~O%QVO#^%{y$j%{y$m%{y!O%{y~Ol-fOs-tOx)xO!W%c!Z~P'ROx-dO~Ow*oO#^$sa$j$sa$m$sa%V$sa~P$_OT&POl-fOs-tO~P'ROk-kO~Ol-kO~P'ROx-lO~Oq-mO~P!,nO%f%i%u%w%e!Z%m%s%v%x%l%r%l%Q~",
  17675. goto:
  17676. "!,u&SPPPP&TP&])n*T*k+S+l,VP,qP&]-_-_&]P&]P0pPPPPPP0p3`PP3`P5l5u:yPP:|;[;_PPP&]&]PP;k&]PP&]&]PP&]&]&]&];o<c&]P<fP<i<i@OP@d&]PPP@h@n&TP&T&TP&TP&TP&TP&TP&T&T&TP&TPP&TPP&TP@tP@{ARP@{P@{@{PPP@{PBzPCTCZCaBzP@{CgPCnCtCzDWDjDpDzEQEnEtEzFQF[FbFhFnFtFzG^GhGnGtGzHUH[HbHhHnHxIOIYI`PPPPPPPPPIiIqIzJUJaPPPPPPPPPPPPNv! `!%n!(zPP!)S!)b!)k!*a!*W!*j!*p!*s!*v!*y!+RPPPPPPPPPP!+U!+XPPPPPPPPP!+_!+k!+w!,T!,W!,^!,d!,j!,m]iOr#l$l)[+Z'odOSXYZehrstvx|}!R!S!T!U!X!c!d!e!f!g!h!i!k!n!o!p!r!s!y!|#Q#R#[#i#l#}$O$Q$S$V$g$i$j$l$z%P%W%Z%]%`%d%i%k%u%}&P&[&`&i&k&l&s&w&z'R'U'`'a'd'f'g'k'p'r'v'z(P(Q(W(Z(b(d(l(o({)O)S)T)X)[)e)o)u)x)y)|*S*T*V*X*[*]*`*c*g*h*o*q*r*z+S+T+Z+b+c+f+m+n+o+q+r+u+w+y+{+},P,Q,S,g,i,m,p,s-T-U-a-d-f-g-h-i-k-l-m-n-o-q-uw!cP#h#u$W$f%b%g%m%n&a&y(c(n)R*Q*Z+R+|-jy!dP#h#u$W$f$r%b%g%m%n&a&y(c(n)R*Q*Z+R+|-j{!eP#h#u$W$f$r$s%b%g%m%n&a&y(c(n)R*Q*Z+R+|-j}!fP#h#u$W$f$r$s$t%b%g%m%n&a&y(c(n)R*Q*Z+R+|-j!P!gP#h#u$W$f$r$s$t$u%b%g%m%n&a&y(c(n)R*Q*Z+R+|-j!R!hP#h#u$W$f$r$s$t$u$v%b%g%m%n&a&y(c(n)R*Q*Z+R+|-j!V!hP!m#h#u$W$f$r$s$t$u$v$w%b%g%m%n&a&y(c(n)R*Q*Z+R+|-j'oSOSXYZehrstvx|}!R!S!T!U!X!c!d!e!f!g!h!i!k!n!o!p!r!s!y!|#Q#R#[#i#l#}$O$Q$S$V$g$i$j$l$z%P%W%Z%]%`%d%i%k%u%}&P&[&`&i&k&l&s&w&z'R'U'`'a'd'f'g'k'p'r'v'z(P(Q(W(Z(b(d(l(o({)O)S)T)X)[)e)o)u)x)y)|*S*T*V*X*[*]*`*c*g*h*o*q*r*z+S+T+Z+b+c+f+m+n+o+q+r+u+w+y+{+},P,Q,S,g,i,m,p,s-T-U-a-d-f-g-h-i-k-l-m-n-o-q-u&ZUOXYZhrtv|}!R!S!T!X!i!k!n!o!p!r!s#[#i#l$O$Q$S$V$j$l$z%P%W%Z%]%d%i%k%u%}&[&`&k&l&s&z'R'U'`'a'd'f'g'k'r'z(Q(W(Z(b(d(l({)O)X)[)e)o)u)x)y)|*S*T*V*X*[*]*`*g*h*o*r*z+Z+b+c+f+m+n+o+q+r+u+w+y+{+},P,Q,S,g,i,m,p,s-T-U-a-d-f-g-h-i-k-l-m-n-q-u%eWOXYZhrv|}!R!S!T!X!i!k#[#i#l$O$Q$S$V$j$l$z%P%Z%]%d%i%k%u%}&[&`&k&l&s&z'R'U'`'a'd'f'g'k'r'z(Q(W(Z(b(d(l({)O)X)[)e)o)u)x)y)|*S*V*X*[*]*`*g*h*o*r*z+Z+b+c+f+m+n+o+q+r+u+y+{+},P,Q,S,g,i,m,p-T-U-a-l-m-nQ#{uQ-b-YR-r-t'fdOSXYZehrstvx|}!R!S!T!U!X!c!d!e!f!g!h!k!n!o!p!r!s!y!|#Q#R#[#i#l#}$O$Q$S$V$g$i$j$l$z%P%W%Z%]%`%d%i%k%u%}&P&[&`&i&k&l&s&w&z'R'U'`'d'f'g'k'p'r'v'z(P(Q(W(Z(b(d(l(o({)O)S)T)X)[)e)o)x)y)|*S*T*V*X*[*]*`*c*g*h*o*q*r*z+S+T+Z+b+c+f+n+o+q+r+u+w+y+{+},P,Q,S,g,i,m,p,s-T-U-a-d-f-g-h-i-k-l-m-n-o-q-uW#ol!O!P$^W#wu&^-Y-tQ$`!QQ$p!YQ$q!ZW$y!i'a)u+mS&]#x#yQ&}$kQ(e&VQ(s&mW(t&o(u(v*xU(w&q(x*yQ)g'WW)h'Y+i,k-RS+h)i)jY,U*s,V,x,y-^Q,X*uQ,d+_Q,f+aR-],wR&[#wi!vXY!S!T%]%d'r'z)O*S*V*XR%Z!uQ!zXQ%v#[Q&e$SR&h$VT-X,s-d!U!jP!m#h#u$W$f$r$s$t$u$v$w%b%g%m%n&a&y(c(n)R*Q*Z+R+|-jQ&Y#pR']$qR'`$yR%S!l'ncOSXYZehrstvx|}!R!S!T!U!X!c!d!e!f!g!h!i!k!n!o!p!r!s!y!|#Q#R#[#i#l#}$O$Q$S$V$g$i$j$l$z%P%W%Z%]%`%d%i%k%u%}&P&[&`&i&k&l&s&w&z'R'U'`'a'd'f'g'k'p'r'v'z(P(Q(W(Z(b(d(l(o({)O)S)T)X)[)e)o)u)x)y)|*S*T*V*X*[*]*`*c*g*h*o*q*r*z+S+T+Z+b+c+f+m+n+o+q+r+u+w+y+{+},P,Q,S,g,i,m,p,s-T-U-a-d-f-g-h-i-k-l-m-n-o-q-uT#fc#gS#]_#^S#``#aS#ba#cS#db#eT*k(^*lT(_%v(aQ$UwR+g)hX$Sw$T$U&gZkOr$l)[+ZXoOr)[+ZQ$m!WQ&u$dQ&v$eQ'X$oQ'[$qQ)Y&|Q)`'RQ)b'SQ)c'TQ)p'ZQ)r']Q*})OQ+P)PQ+Q)QQ+U)WS+W)Z)qQ+[)^Q+])_Q+^)aQ,[*|Q,]+OQ,_+VQ,`+XQ,e+`Q,|,^Q-O,cQ-P,dR-_,}WoOr)[+ZR#rnQ'Z$pR)Z&}Q+f)hR,i+gQ)q'ZR+X)ZZmOnr)[+ZQrOR#trQ&_#zR(j&_S%j#P#|S(R%j(UT(U%m&aQ%^!xQ%e!{W's%^%e'x'|Q'x%bR'|%gQ&j$WR(p&jQ(X%nQ*^(ST*d(X*^Q'b${R)v'bS'e%O%PY)z'e){+s,q-VU){'f'g'hU+s)|)}*OS,q+t+uR-V,rQ#W]R%q#WQ#Z^R%s#ZQ#^_R%w#^Q([%tS*i([*jR*j(]Q*l(^R,R*lQ#a`R%y#aQ#caR%z#cQ#ebR%{#eQ#gcR%|#gQ#jfQ&O#hW&R#j&O(m*pQ(m&dR*p-jQ$TwS&f$T&gR&g$UQ&t$bR(|&tQ&W#oR(f&WQ$^!PR&n$^Q*t(tS,W*t,zR,z,XQ&r$`R(y&rQ#mjR&T#mQ+Z)[R,a+ZQ(}&uR*{(}Q&x$fS)U&x)VR)V&yQ'Q$mR)]'QQ'V$nS)f'V+dR+d)gQ+j)lR,l+jWnOr)[+ZR#qnSqOrT+Y)[+ZWpOr)[+ZR'O$lYjOr$l)[+ZR&S#l[wOr#l$l)[+ZR&e$S&YPOXYZhrtv|}!R!S!T!X!i!k!n!o!p!r!s#[#i#l$O$Q$S$V$j$l$z%P%W%Z%]%d%i%k%u%}&[&`&k&l&s&z'R'U'`'a'd'f'g'k'r'z(Q(W(Z(b(d(l({)O)X)[)e)o)u)x)y)|*S*T*V*X*[*]*`*g*h*o*r*z+Z+b+c+f+m+n+o+q+r+u+w+y+{+},P,Q,S,g,i,m,p,s-T-U-a-d-f-g-h-i-k-l-m-n-q-uQ!mSQ#heQ#usU$Wx%`'vS$f!U$iQ$r!cQ$s!dQ$t!eQ$u!fQ$v!gQ$w!hQ%b!yQ%g!|Q%m#QQ%n#RQ&a#}Q&y$gQ(c&PU(n&i(o*qW)R&w)T+S+TQ*Q'pQ*Z(PQ+R)SQ+|*cR-j-oQ!xXQ!{YQ$d!SQ$e!T^'o%]%d'r'z*S*V*XR+O)O[fOr#l$l)[+Zh!uXY!S!T%]%d'r'z)O*S*V*XQ#PZQ#khS#|v|Q$Z}W$b!R$V&z)XS$n!X$jW$x!i'a)u+mQ%O!kQ%t#[`&Q#i%}(b(d(l*o,S-nQ&b$OQ&c$QQ&d$SQ'^$zQ'h%PQ'n%ZW(O%i(Q*[*`Q(S%kQ(]%uQ(h&[S(k&`-lQ(q&kQ(r&lU(z&s({*zQ)a'RY)d'U)e+b+c,gQ)s'`^)w'd)y+q+r,p-U-aQ)}'fQ*O'gS*P'k-mW*b(W*]+y+}W*f(Z*h,P,QQ+l)oQ+p)xQ+t)|Q,O*gQ,T*rQ,h+fQ,n+nQ,o+oQ,r+uQ,v+{Q-Q,iQ-S,mR-`-ThTOr#i#l$l%}&`'k(b(d)[+Z$z!tXYZhv|}!R!S!T!X!i!k#[$O$Q$S$V$j$z%P%Z%]%d%i%k%u&[&k&l&s&z'R'U'`'a'd'f'g'r'z(Q(W(Z(l({)O)X)e)o)u)x)y)|*S*V*X*[*]*`*g*h*o*r*z+b+c+f+m+n+o+q+r+u+y+{+},P,Q,S,g,i,m,p-T-U-a-l-m-nQ#vtW%T!n!r-g-qQ%U!oQ%V!pQ%X!sQ%c-fS'j%W-kQ'l-hQ'm-iQ+v*TQ,u+wS-W,s-dR-s-uU#zu-Y-tR(i&^[gOr#l$l)[+ZX!wX#[$S$VQ#UZQ$PvR$Y|Q%_!xQ%f!{Q%l#PQ'^$xQ'y%bQ'}%gQ(V%mQ(Y%nQ*_(SQ,t+vQ-[,uR-c-ZQ$XxQ'u%`R*U'vQ-Z,sR-e-dR#OYR#TZR$}!iQ${!iV)t'a)u+mR%Q!kR%v#[Q(`%vR*n(aQ$c!RQ&h$VQ)W&zR+V)XQ#plQ$[!OQ$_!PR&p$^Q(s&oQ*v(uQ*w(vR,Z*xR$a!QXpOr)[+ZQ$h!UR&{$iQ$o!XR&|$jR)n'YQ)l'YV,j+i,k-R",
  17677. nodeNames:
  17678. '⚠ print Comment Script AssignStatement * BinaryExpression BitOp BitOp BitOp BitOp ArithOp ArithOp @ ArithOp ** UnaryExpression ArithOp BitOp AwaitExpression await ParenthesizedExpression ( BinaryExpression or and CompareOp in not is UnaryExpression ConditionalExpression if else LambdaExpression lambda ParamList VariableName AssignOp , : NamedExpression AssignOp YieldExpression yield from ) TupleExpression ComprehensionExpression async for LambdaExpression ArrayExpression [ ] ArrayComprehensionExpression DictionaryExpression { } DictionaryComprehensionExpression SetExpression SetComprehensionExpression CallExpression ArgList AssignOp MemberExpression . PropertyName Number String FormatString FormatReplacement FormatConversion FormatSpec ContinuedString Ellipsis None Boolean TypeDef AssignOp UpdateStatement UpdateOp ExpressionStatement DeleteStatement del PassStatement pass BreakStatement break ContinueStatement continue ReturnStatement return YieldStatement PrintStatement RaiseStatement raise ImportStatement import as ScopeStatement global nonlocal AssertStatement assert StatementGroup ; IfStatement Body elif WhileStatement while ForStatement TryStatement try except finally WithStatement with FunctionDefinition def ParamList AssignOp TypeDef ClassDefinition class DecoratedStatement Decorator At',
  17679. maxTerm: 234,
  17680. context: trackIndent,
  17681. nodeProps: [
  17682. [
  17683. NodeProp.group,
  17684. -14,
  17685. 4,
  17686. 80,
  17687. 82,
  17688. 83,
  17689. 85,
  17690. 87,
  17691. 89,
  17692. 91,
  17693. 93,
  17694. 94,
  17695. 95,
  17696. 97,
  17697. 100,
  17698. 103,
  17699. 'Statement Statement',
  17700. -22,
  17701. 6,
  17702. 16,
  17703. 19,
  17704. 21,
  17705. 37,
  17706. 47,
  17707. 48,
  17708. 52,
  17709. 55,
  17710. 56,
  17711. 59,
  17712. 60,
  17713. 61,
  17714. 62,
  17715. 65,
  17716. 68,
  17717. 69,
  17718. 70,
  17719. 74,
  17720. 75,
  17721. 76,
  17722. 77,
  17723. 'Expression',
  17724. -9,
  17725. 105,
  17726. 107,
  17727. 110,
  17728. 112,
  17729. 113,
  17730. 117,
  17731. 119,
  17732. 124,
  17733. 126,
  17734. 'Statement'
  17735. ]
  17736. ],
  17737. skippedNodes: [0, 2],
  17738. repeatNodeCount: 32,
  17739. tokenData:
  17740. "(#RMgR!^OX$}XY!5[Y[$}[]!5[]p$}pq!5[qr!7frs!;]st#+otu$}uv%3Tvw%5gwx%6sxy&)oyz&*uz{&+{{|&.k|}&/w}!O&0}!O!P&3d!P!Q&>j!Q!R&AY!R![&GW![!]'$S!]!^'&f!^!_''l!_!`'*[!`!a'+h!a!b$}!b!c'.T!c!d'/c!d!e'1T!e!h'/c!h!i'=R!i!t'/c!t!u'Fg!u!w'/c!w!x';a!x!}'/c!}#O'Hq#O#P'Iw#P#Q'Ji#Q#R'Ko#R#S'/c#S#T$}#T#U'/c#U#V'1T#V#Y'/c#Y#Z'=R#Z#f'/c#f#g'Fg#g#i'/c#i#j';a#j#o'/c#o#p'L{#p#q'Mq#q#r'N}#r#s( {#s$g$}$g~'/c<r%`Z%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}9[&^Z%p7[%gS%m`%v!bOr'PrsLQsw'Pwx(Px#O'P#O#PNp#P#o'P#o#pKQ#p#q'P#q#rGW#r~'P9['^Z%p7[%gS%jW%m`%v!bOr'Prs&Rsw'Pwx(Px#O'P#O#PFr#P#o'P#o#pKQ#p#q'P#q#rGW#r~'P8z(WZ%p7[%jWOr(yrs)wsw(ywxAjx#O(y#O#PF^#P#o(y#o#p>v#p#q(y#q#r5T#r~(y8z)UZ%p7[%gS%jW%v!bOr(yrs)wsw(ywx(Px#O(y#O#PAU#P#o(y#o#p?p#p#q(y#q#r5T#r~(y8z*QZ%p7[%gS%v!bOr(yrs*ssw(ywx(Px#O(y#O#P@p#P#o(y#o#p?p#p#q(y#q#r5T#r~(y8z*|Z%p7[%gS%v!bOr(yrs+osw(ywx(Px#O(y#O#P4o#P#o(y#o#p?p#p#q(y#q#r5T#r~(y8r+xX%p7[%gS%v!bOw+owx,ex#O+o#O#P4Z#P#o+o#o#p3Z#p#q+o#q#r.k#r~+o8r,jX%p7[Ow+owx-Vx#O+o#O#P3u#P#o+o#o#p2i#p#q+o#q#r.k#r~+o8r-[X%p7[Ow+owx-wx#O+o#O#P.V#P#o+o#o#p0^#p#q+o#q#r.k#r~+o7[-|R%p7[O#o-w#p#q-w#r~-w8r.[T%p7[O#o+o#o#p.k#p#q+o#q#r.k#r~+o!f.rV%gS%v!bOw.kwx/Xx#O.k#O#P3T#P#o.k#o#p3Z#p~.k!f/[VOw.kwx/qx#O.k#O#P2c#P#o.k#o#p2i#p~.k!f/tUOw.kx#O.k#O#P0W#P#o.k#o#p0^#p~.k!f0ZPO~.k!f0cV%gSOw0xwx1^x#O0x#O#P2]#P#o0x#o#p.k#p~0xS0}T%gSOw0xwx1^x#O0x#O#P2]#P~0xS1aTOw0xwx1px#O0x#O#P2V#P~0xS1sSOw0xx#O0x#O#P2P#P~0xS2SPO~0xS2YPO~0xS2`PO~0x!f2fPO~.k!f2nV%gSOw0xwx1^x#O0x#O#P2]#P#o0x#o#p.k#p~0x!f3WPO~.k!f3`V%gSOw0xwx1^x#O0x#O#P2]#P#o0x#o#p.k#p~0x8r3zT%p7[O#o+o#o#p.k#p#q+o#q#r.k#r~+o8r4`T%p7[O#o+o#o#p.k#p#q+o#q#r.k#r~+o8z4tT%p7[O#o(y#o#p5T#p#q(y#q#r5T#r~(y!n5^X%gS%jW%v!bOr5Trs5ysw5Twx7ax#O5T#O#P@j#P#o5T#o#p?p#p~5T!n6QX%gS%v!bOr5Trs6msw5Twx7ax#O5T#O#P@d#P#o5T#o#p?p#p~5T!n6tX%gS%v!bOr5Trs.ksw5Twx7ax#O5T#O#P?j#P#o5T#o#p?p#p~5T!n7fX%jWOr5Trs5ysw5Twx8Rx#O5T#O#P>p#P#o5T#o#p>v#p~5T!n8WX%jWOr5Trs5ysw5Twx8sx#O5T#O#P:^#P#o5T#o#p:d#p~5TW8xT%jWOr8srs9Xs#O8s#O#P:W#P~8sW9[TOr8srs9ks#O8s#O#P:Q#P~8sW9nSOr8ss#O8s#O#P9z#P~8sW9}PO~8sW:TPO~8sW:ZPO~8s!n:aPO~5T!n:kX%gS%jWOr;Wrs;tsw;Wwx<zx#O;W#O#P>j#P#o;W#o#p5T#p~;W[;_V%gS%jWOr;Wrs;tsw;Wwx<zx#O;W#O#P>j#P~;W[;yV%gSOr;Wrs<`sw;Wwx<zx#O;W#O#P>d#P~;W[<eV%gSOr;Wrs0xsw;Wwx<zx#O;W#O#P>^#P~;W[=PV%jWOr;Wrs;tsw;Wwx=fx#O;W#O#P>W#P~;W[=kV%jWOr;Wrs;tsw;Wwx8sx#O;W#O#P>Q#P~;W[>TPO~;W[>ZPO~;W[>aPO~;W[>gPO~;W[>mPO~;W!n>sPO~5T!n>}X%gS%jWOr;Wrs;tsw;Wwx<zx#O;W#O#P>j#P#o;W#o#p5T#p~;W!n?mPO~5T!n?wX%gS%jWOr;Wrs;tsw;Wwx<zx#O;W#O#P>j#P#o;W#o#p5T#p~;W!n@gPO~5T!n@mPO~5T8z@uT%p7[O#o(y#o#p5T#p#q(y#q#r5T#r~(y8zAZT%p7[O#o(y#o#p5T#p#q(y#q#r5T#r~(y8zAqZ%p7[%jWOr(yrs)wsw(ywxBdx#O(y#O#PEx#P#o(y#o#p:d#p#q(y#q#r5T#r~(y7dBkX%p7[%jWOrBdrsCWs#OBd#O#PEd#P#oBd#o#p8s#p#qBd#q#r8s#r~Bd7dC]X%p7[OrBdrsCxs#OBd#O#PEO#P#oBd#o#p8s#p#qBd#q#r8s#r~Bd7dC}X%p7[OrBdrs-ws#OBd#O#PDj#P#oBd#o#p8s#p#qBd#q#r8s#r~Bd7dDoT%p7[O#oBd#o#p8s#p#qBd#q#r8s#r~Bd7dETT%p7[O#oBd#o#p8s#p#qBd#q#r8s#r~Bd7dEiT%p7[O#oBd#o#p8s#p#qBd#q#r8s#r~Bd8zE}T%p7[O#o(y#o#p5T#p#q(y#q#r5T#r~(y8zFcT%p7[O#o(y#o#p5T#p#q(y#q#r5T#r~(y9[FwT%p7[O#o'P#o#pGW#p#q'P#q#rGW#r~'P#OGcX%gS%jW%m`%v!bOrGWrsHOswGWwx7ax#OGW#O#PKz#P#oGW#o#pKQ#p~GW#OHXX%gS%m`%v!bOrGWrsHtswGWwx7ax#OGW#O#PKt#P#oGW#o#pKQ#p~GW#OH}X%gS%m`%v!bOrGWrsIjswGWwx7ax#OGW#O#PJz#P#oGW#o#pKQ#p~GW!vIsV%gS%m`%v!bOwIjwx/Xx#OIj#O#PJY#P#oIj#o#pJ`#p~Ij!vJ]PO~Ij!vJeV%gSOw0xwx1^x#O0x#O#P2]#P#o0x#o#pIj#p~0x#OJ}PO~GW#OKXX%gS%jWOr;Wrs;tsw;Wwx<zx#O;W#O#P>j#P#o;W#o#pGW#p~;W#OKwPO~GW#OK}PO~GW9[L]Z%p7[%gS%m`%v!bOr'PrsMOsw'Pwx(Px#O'P#O#PN[#P#o'P#o#pKQ#p#q'P#q#rGW#r~'P9SMZX%p7[%gS%m`%v!bOwMOwx,ex#OMO#O#PMv#P#oMO#o#pJ`#p#qMO#q#rIj#r~MO9SM{T%p7[O#oMO#o#pIj#p#qMO#q#rIj#r~MO9[NaT%p7[O#o'P#o#pGW#p#q'P#q#rGW#r~'P9[NuT%p7[O#o'P#o#pGW#p#q'P#q#rGW#r~'P<b! aZ%p7[%jW%sp%x#tOr!!Srs)wsw!!Swx!-Qx#O!!S#O#P!2l#P#o!!S#o#p!+d#p#q!!S#q#r!#j#r~!!S<b!!cZ%p7[%gS%jW%sp%v!b%x#tOr!!Srs)wsw!!Swx! Ux#O!!S#O#P!#U#P#o!!S#o#p!,^#p#q!!S#q#r!#j#r~!!S<b!#ZT%p7[O#o!!S#o#p!#j#p#q!!S#q#r!#j#r~!!S&U!#wX%gS%jW%sp%v!b%x#tOr!#jrs5ysw!#jwx!$dx#O!#j#O#P!,W#P#o!#j#o#p!,^#p~!#j&U!$mX%jW%sp%x#tOr!#jrs5ysw!#jwx!%Yx#O!#j#O#P!+^#P#o!#j#o#p!+d#p~!#j&U!%cX%jW%sp%x#tOr!#jrs5ysw!#jwx!&Ox#O!#j#O#P!*d#P#o!#j#o#p!*j#p~!#j$n!&XX%jW%sp%x#tOr!&trs9Xsw!&twx!&Ox#O!&t#O#P!)r#P#o!&t#o#p!)x#p~!&t$n!&}X%jW%sp%x#tOr!&trs9Xsw!&twx!'jx#O!&t#O#P!)Q#P#o!&t#o#p!)W#p~!&t$n!'sX%jW%sp%x#tOr!&trs9Xsw!&twx!&Ox#O!&t#O#P!(`#P#o!&t#o#p!(f#p~!&t$n!(cPO~!&t$n!(kV%jWOr8srs9Xs#O8s#O#P:W#P#o8s#o#p!&t#p~8s$n!)TPO~!&t$n!)]V%jWOr8srs9Xs#O8s#O#P:W#P#o8s#o#p!&t#p~8s$n!)uPO~!&t$n!)}V%jWOr8srs9Xs#O8s#O#P:W#P#o8s#o#p!&t#p~8s&U!*gPO~!#j&U!*qX%gS%jWOr;Wrs;tsw;Wwx<zx#O;W#O#P>j#P#o;W#o#p!#j#p~;W&U!+aPO~!#j&U!+kX%gS%jWOr;Wrs;tsw;Wwx<zx#O;W#O#P>j#P#o;W#o#p!#j#p~;W&U!,ZPO~!#j&U!,eX%gS%jWOr;Wrs;tsw;Wwx<zx#O;W#O#P>j#P#o;W#o#p!#j#p~;W<b!-]Z%p7[%jW%sp%x#tOr!!Srs)wsw!!Swx!.Ox#O!!S#O#P!2W#P#o!!S#o#p!*j#p#q!!S#q#r!#j#r~!!S:z!.ZZ%p7[%jW%sp%x#tOr!.|rsCWsw!.|wx!.Ox#O!.|#O#P!1r#P#o!.|#o#p!)x#p#q!.|#q#r!&t#r~!.|:z!/XZ%p7[%jW%sp%x#tOr!.|rsCWsw!.|wx!/zx#O!.|#O#P!1^#P#o!.|#o#p!)W#p#q!.|#q#r!&t#r~!.|:z!0VZ%p7[%jW%sp%x#tOr!.|rsCWsw!.|wx!.Ox#O!.|#O#P!0x#P#o!.|#o#p!(f#p#q!.|#q#r!&t#r~!.|:z!0}T%p7[O#o!.|#o#p!&t#p#q!.|#q#r!&t#r~!.|:z!1cT%p7[O#o!.|#o#p!&t#p#q!.|#q#r!&t#r~!.|:z!1wT%p7[O#o!.|#o#p!&t#p#q!.|#q#r!&t#r~!.|<b!2]T%p7[O#o!!S#o#p!#j#p#q!!S#q#r!#j#r~!!S<b!2qT%p7[O#o!!S#o#p!#j#p#q!!S#q#r!#j#r~!!S<r!3VT%p7[O#o$}#o#p!3f#p#q$}#q#r!3f#r~$}&f!3uX%gS%jW%m`%sp%v!b%x#tOr!3frsHOsw!3fwx!$dx#O!3f#O#P!4b#P#o!3f#o#p!4h#p~!3f&f!4ePO~!3f&f!4oX%gS%jWOr;Wrs;tsw;Wwx<zx#O;W#O#P>j#P#o;W#o#p!3f#p~;WMg!5oa%p7[%gS%jW$o1s%m`%sp%v!b%x#tOX$}XY!5[Y[$}[]!5[]p$}pq!5[qr$}rs&Rsw$}wx! Ux#O$}#O#P!6t#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Mg!6yX%p7[OY$}YZ!5[Z]$}]^!5[^#o$}#o#p!3f#p#q$}#q#r!3f#r~$}<u!7wb%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`!9P!`#O$}#O#P!3Q#P#T$}#T#U!:V#U#f$}#f#g!:V#g#h!:V#h#o$}#o#p!4h#p#q$}#q#r!3f#r~$}<u!9dZjR%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}<u!:jZ!jR%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{!;l_%tp%p7[%gS%e,X%m`%v!bOY!<kYZ'PZ]!<k]^'P^r!<krs#(ysw!<kwx!>yx#O!<k#O#P#+Z#P#o!<k#o#p#'w#p#q!<k#q#r#%s#r~!<kDe!<z_%p7[%gS%jW%e,X%m`%v!bOY!<kYZ'PZ]!<k]^'P^r!<krs!=ysw!<kwx!>yx#O!<k#O#P#%_#P#o!<k#o#p#'w#p#q!<k#q#r#%s#r~!<kDe!>WZ%p7[%gS%e,X%m`%v!bOr'PrsLQsw'Pwx(Px#O'P#O#PNp#P#o'P#o#pKQ#p#q'P#q#rGW#r~'PDT!?S_%p7[%jW%e,XOY!@RYZ(yZ]!@R]^(y^r!@Rrs!A_sw!@Rwx# Rx#O!@R#O#P#$y#P#o!@R#o#p!Lw#p#q!@R#q#r!Bq#r~!@RDT!@`_%p7[%gS%jW%e,X%v!bOY!@RYZ(yZ]!@R]^(y^r!@Rrs!A_sw!@Rwx!>yx#O!@R#O#P!B]#P#o!@R#o#p!NP#p#q!@R#q#r!Bq#r~!@RDT!AjZ%p7[%gS%e,X%v!bOr(yrs*ssw(ywx(Px#O(y#O#P@p#P#o(y#o#p?p#p#q(y#q#r5T#r~(yDT!BbT%p7[O#o!@R#o#p!Bq#p#q!@R#q#r!Bq#r~!@R-w!B|]%gS%jW%e,X%v!bOY!BqYZ5TZ]!Bq]^5T^r!Bqrs!Cusw!Bqwx!Dkx#O!Bq#O#P!My#P#o!Bq#o#p!NP#p~!Bq-w!DOX%gS%e,X%v!bOr5Trs6msw5Twx7ax#O5T#O#P@d#P#o5T#o#p?p#p~5T-w!Dr]%jW%e,XOY!BqYZ5TZ]!Bq]^5T^r!Bqrs!Cusw!Bqwx!Ekx#O!Bq#O#P!Lq#P#o!Bq#o#p!Lw#p~!Bq-w!Er]%jW%e,XOY!BqYZ5TZ]!Bq]^5T^r!Bqrs!Cusw!Bqwx!Fkx#O!Bq#O#P!Gy#P#o!Bq#o#p!HP#p~!Bq,a!FrX%jW%e,XOY!FkYZ8sZ]!Fk]^8s^r!Fkrs!G_s#O!Fk#O#P!Gs#P~!Fk,a!GdT%e,XOr8srs9ks#O8s#O#P:Q#P~8s,a!GvPO~!Fk-w!G|PO~!Bq-w!HY]%gS%jW%e,XOY!IRYZ;WZ]!IR]^;W^r!IRrs!I}sw!IRwx!Jkx#O!IR#O#P!Lk#P#o!IR#o#p!Bq#p~!IR,e!I[Z%gS%jW%e,XOY!IRYZ;WZ]!IR]^;W^r!IRrs!I}sw!IRwx!Jkx#O!IR#O#P!Lk#P~!IR,e!JUV%gS%e,XOr;Wrs<`sw;Wwx<zx#O;W#O#P>d#P~;W,e!JrZ%jW%e,XOY!IRYZ;WZ]!IR]^;W^r!IRrs!I}sw!IRwx!Kex#O!IR#O#P!Le#P~!IR,e!KlZ%jW%e,XOY!IRYZ;WZ]!IR]^;W^r!IRrs!I}sw!IRwx!Fkx#O!IR#O#P!L_#P~!IR,e!LbPO~!IR,e!LhPO~!IR,e!LnPO~!IR-w!LtPO~!Bq-w!MQ]%gS%jW%e,XOY!IRYZ;WZ]!IR]^;W^r!IRrs!I}sw!IRwx!Jkx#O!IR#O#P!Lk#P#o!IR#o#p!Bq#p~!IR-w!M|PO~!Bq-w!NY]%gS%jW%e,XOY!IRYZ;WZ]!IR]^;W^r!IRrs!I}sw!IRwx!Jkx#O!IR#O#P!Lk#P#o!IR#o#p!Bq#p~!IRDT# [_%p7[%jW%e,XOY!@RYZ(yZ]!@R]^(y^r!@Rrs!A_sw!@Rwx#!Zx#O!@R#O#P#$e#P#o!@R#o#p!HP#p#q!@R#q#r!Bq#r~!@RBm#!d]%p7[%jW%e,XOY#!ZYZBdZ]#!Z]^Bd^r#!Zrs##]s#O#!Z#O#P#$P#P#o#!Z#o#p!Fk#p#q#!Z#q#r!Fk#r~#!ZBm##dX%p7[%e,XOrBdrsCxs#OBd#O#PEO#P#oBd#o#p8s#p#qBd#q#r8s#r~BdBm#$UT%p7[O#o#!Z#o#p!Fk#p#q#!Z#q#r!Fk#r~#!ZDT#$jT%p7[O#o!@R#o#p!Bq#p#q!@R#q#r!Bq#r~!@RDT#%OT%p7[O#o!@R#o#p!Bq#p#q!@R#q#r!Bq#r~!@RDe#%dT%p7[O#o!<k#o#p#%s#p#q!<k#q#r#%s#r~!<k.X#&Q]%gS%jW%e,X%m`%v!bOY#%sYZGWZ]#%s]^GW^r#%srs#&ysw#%swx!Dkx#O#%s#O#P#'q#P#o#%s#o#p#'w#p~#%s.X#'UX%gS%e,X%m`%v!bOrGWrsHtswGWwx7ax#OGW#O#PKt#P#oGW#o#pKQ#p~GW.X#'tPO~#%s.X#(Q]%gS%jW%e,XOY!IRYZ;WZ]!IR]^;W^r!IRrs!I}sw!IRwx!Jkx#O!IR#O#P!Lk#P#o!IR#o#p#%s#p~!IRGZ#)WZ%p7[%gS%e,X%m`%v!bOr'Prs#)ysw'Pwx(Px#O'P#O#P#*u#P#o'P#o#pKQ#p#q'P#q#rGW#r~'PGZ#*YX%k#|%p7[%gS%i,X%m`%v!bOwMOwx,ex#OMO#O#PMv#P#oMO#o#pJ`#p#qMO#q#rIj#r~MO9[#*zT%p7[O#o'P#o#pGW#p#q'P#q#rGW#r~'PDe#+`T%p7[O#o!<k#o#p#%s#p#q!<k#q#r#%s#r~!<kMg#,S_Q1s%p7[%gS%jW%m`%sp%v!b%x#tOY#+oYZ$}Z]#+o]^$}^r#+ors#-Rsw#+owx$Bmx#O#+o#O#P%/o#P#o#+o#o#p%2R#p#q#+o#q#r%0c#r~#+oJP#-`_Q1s%p7[%gS%m`%v!bOY#._YZ'PZ]#._]^'P^r#._rs$>Psw#._wx#/mx#O#._#O#P$Ay#P#o#._#o#p$<T#p#q#._#q#r$6T#r~#._JP#.n_Q1s%p7[%gS%jW%m`%v!bOY#._YZ'PZ]#._]^'P^r#._rs#-Rsw#._wx#/mx#O#._#O#P$5a#P#o#._#o#p$<T#p#q#._#q#r$6T#r~#._Io#/v_Q1s%p7[%jWOY#0uYZ(yZ]#0u]^(y^r#0urs#2Rsw#0uwx$-ex#O#0u#O#P$4m#P#o#0u#o#p$(k#p#q#0u#q#r#Eg#r~#0uIo#1S_Q1s%p7[%gS%jW%v!bOY#0uYZ(yZ]#0u]^(y^r#0urs#2Rsw#0uwx#/mx#O#0u#O#P$,q#P#o#0u#o#p$*R#p#q#0u#q#r#Eg#r~#0uIo#2^_Q1s%p7[%gS%v!bOY#0uYZ(yZ]#0u]^(y^r#0urs#3]sw#0uwx#/mx#O#0u#O#P$+}#P#o#0u#o#p$*R#p#q#0u#q#r#Eg#r~#0uIo#3h_Q1s%p7[%gS%v!bOY#0uYZ(yZ]#0u]^(y^r#0urs#4gsw#0uwx#/mx#O#0u#O#P#Ds#P#o#0u#o#p$*R#p#q#0u#q#r#Eg#r~#0uIg#4r]Q1s%p7[%gS%v!bOY#4gYZ+oZ]#4g]^+o^w#4gwx#5kx#O#4g#O#P#DP#P#o#4g#o#p#Bc#p#q#4g#q#r#9a#r~#4gIg#5r]Q1s%p7[OY#4gYZ+oZ]#4g]^+o^w#4gwx#6kx#O#4g#O#P#C]#P#o#4g#o#p#AT#p#q#4g#q#r#9a#r~#4gIg#6r]Q1s%p7[OY#4gYZ+oZ]#4g]^+o^w#4gwx#7kx#O#4g#O#P#8m#P#o#4g#o#p#<a#p#q#4g#q#r#9a#r~#4gHP#7rXQ1s%p7[OY#7kYZ-wZ]#7k]^-w^#o#7k#o#p#8_#p#q#7k#q#r#8_#r~#7k1s#8dRQ1sOY#8_Z]#8_^~#8_Ig#8tXQ1s%p7[OY#4gYZ+oZ]#4g]^+o^#o#4g#o#p#9a#p#q#4g#q#r#9a#r~#4g3Z#9jZQ1s%gS%v!bOY#9aYZ.kZ]#9a]^.k^w#9awx#:]x#O#9a#O#P#A}#P#o#9a#o#p#Bc#p~#9a3Z#:bZQ1sOY#9aYZ.kZ]#9a]^.k^w#9awx#;Tx#O#9a#O#P#@o#P#o#9a#o#p#AT#p~#9a3Z#;YZQ1sOY#9aYZ.kZ]#9a]^.k^w#9awx#8_x#O#9a#O#P#;{#P#o#9a#o#p#<a#p~#9a3Z#<QTQ1sOY#9aYZ.kZ]#9a]^.k^~#9a3Z#<hZQ1s%gSOY#=ZYZ0xZ]#=Z]^0x^w#=Zwx#=}x#O#=Z#O#P#@Z#P#o#=Z#o#p#9a#p~#=Z1w#=bXQ1s%gSOY#=ZYZ0xZ]#=Z]^0x^w#=Zwx#=}x#O#=Z#O#P#@Z#P~#=Z1w#>SXQ1sOY#=ZYZ0xZ]#=Z]^0x^w#=Zwx#>ox#O#=Z#O#P#?u#P~#=Z1w#>tXQ1sOY#=ZYZ0xZ]#=Z]^0x^w#=Zwx#8_x#O#=Z#O#P#?a#P~#=Z1w#?fTQ1sOY#=ZYZ0xZ]#=Z]^0x^~#=Z1w#?zTQ1sOY#=ZYZ0xZ]#=Z]^0x^~#=Z1w#@`TQ1sOY#=ZYZ0xZ]#=Z]^0x^~#=Z3Z#@tTQ1sOY#9aYZ.kZ]#9a]^.k^~#9a3Z#A[ZQ1s%gSOY#=ZYZ0xZ]#=Z]^0x^w#=Zwx#=}x#O#=Z#O#P#@Z#P#o#=Z#o#p#9a#p~#=Z3Z#BSTQ1sOY#9aYZ.kZ]#9a]^.k^~#9a3Z#BjZQ1s%gSOY#=ZYZ0xZ]#=Z]^0x^w#=Zwx#=}x#O#=Z#O#P#@Z#P#o#=Z#o#p#9a#p~#=ZIg#CdXQ1s%p7[OY#4gYZ+oZ]#4g]^+o^#o#4g#o#p#9a#p#q#4g#q#r#9a#r~#4gIg#DWXQ1s%p7[OY#4gYZ+oZ]#4g]^+o^#o#4g#o#p#9a#p#q#4g#q#r#9a#r~#4gIo#DzXQ1s%p7[OY#0uYZ(yZ]#0u]^(y^#o#0u#o#p#Eg#p#q#0u#q#r#Eg#r~#0u3c#Er]Q1s%gS%jW%v!bOY#EgYZ5TZ]#Eg]^5T^r#Egrs#Fksw#Egwx#Hox#O#Eg#O#P$+i#P#o#Eg#o#p$*R#p~#Eg3c#Ft]Q1s%gS%v!bOY#EgYZ5TZ]#Eg]^5T^r#Egrs#Gmsw#Egwx#Hox#O#Eg#O#P$+T#P#o#Eg#o#p$*R#p~#Eg3c#Gv]Q1s%gS%v!bOY#EgYZ5TZ]#Eg]^5T^r#Egrs#9asw#Egwx#Hox#O#Eg#O#P$)m#P#o#Eg#o#p$*R#p~#Eg3c#Hv]Q1s%jWOY#EgYZ5TZ]#Eg]^5T^r#Egrs#Fksw#Egwx#Iox#O#Eg#O#P$(V#P#o#Eg#o#p$(k#p~#Eg3c#Iv]Q1s%jWOY#EgYZ5TZ]#Eg]^5T^r#Egrs#Fksw#Egwx#Jox#O#Eg#O#P#NT#P#o#Eg#o#p#Ni#p~#Eg1{#JvXQ1s%jWOY#JoYZ8sZ]#Jo]^8s^r#Jors#Kcs#O#Jo#O#P#Mo#P~#Jo1{#KhXQ1sOY#JoYZ8sZ]#Jo]^8s^r#Jors#LTs#O#Jo#O#P#MZ#P~#Jo1{#LYXQ1sOY#JoYZ8sZ]#Jo]^8s^r#Jors#8_s#O#Jo#O#P#Lu#P~#Jo1{#LzTQ1sOY#JoYZ8sZ]#Jo]^8s^~#Jo1{#M`TQ1sOY#JoYZ8sZ]#Jo]^8s^~#Jo1{#MtTQ1sOY#JoYZ8sZ]#Jo]^8s^~#Jo3c#NYTQ1sOY#EgYZ5TZ]#Eg]^5T^~#Eg3c#Nr]Q1s%gS%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$$Zx#O$ k#O#P$'q#P#o$ k#o#p#Eg#p~$ k2P$ tZQ1s%gS%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$$Zx#O$ k#O#P$'q#P~$ k2P$!nZQ1s%gSOY$ kYZ;WZ]$ k]^;W^r$ krs$#asw$ kwx$$Zx#O$ k#O#P$']#P~$ k2P$#hZQ1s%gSOY$ kYZ;WZ]$ k]^;W^r$ krs#=Zsw$ kwx$$Zx#O$ k#O#P$&w#P~$ k2P$$bZQ1s%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$%Tx#O$ k#O#P$&c#P~$ k2P$%[ZQ1s%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx#Jox#O$ k#O#P$%}#P~$ k2P$&STQ1sOY$ kYZ;WZ]$ k]^;W^~$ k2P$&hTQ1sOY$ kYZ;WZ]$ k]^;W^~$ k2P$&|TQ1sOY$ kYZ;WZ]$ k]^;W^~$ k2P$'bTQ1sOY$ kYZ;WZ]$ k]^;W^~$ k2P$'vTQ1sOY$ kYZ;WZ]$ k]^;W^~$ k3c$([TQ1sOY#EgYZ5TZ]#Eg]^5T^~#Eg3c$(t]Q1s%gS%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$$Zx#O$ k#O#P$'q#P#o$ k#o#p#Eg#p~$ k3c$)rTQ1sOY#EgYZ5TZ]#Eg]^5T^~#Eg3c$*[]Q1s%gS%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$$Zx#O$ k#O#P$'q#P#o$ k#o#p#Eg#p~$ k3c$+YTQ1sOY#EgYZ5TZ]#Eg]^5T^~#Eg3c$+nTQ1sOY#EgYZ5TZ]#Eg]^5T^~#EgIo$,UXQ1s%p7[OY#0uYZ(yZ]#0u]^(y^#o#0u#o#p#Eg#p#q#0u#q#r#Eg#r~#0uIo$,xXQ1s%p7[OY#0uYZ(yZ]#0u]^(y^#o#0u#o#p#Eg#p#q#0u#q#r#Eg#r~#0uIo$-n_Q1s%p7[%jWOY#0uYZ(yZ]#0u]^(y^r#0urs#2Rsw#0uwx$.mx#O#0u#O#P$3y#P#o#0u#o#p#Ni#p#q#0u#q#r#Eg#r~#0uHX$.v]Q1s%p7[%jWOY$.mYZBdZ]$.m]^Bd^r$.mrs$/os#O$.m#O#P$3V#P#o$.m#o#p#Jo#p#q$.m#q#r#Jo#r~$.mHX$/v]Q1s%p7[OY$.mYZBdZ]$.m]^Bd^r$.mrs$0os#O$.m#O#P$2c#P#o$.m#o#p#Jo#p#q$.m#q#r#Jo#r~$.mHX$0v]Q1s%p7[OY$.mYZBdZ]$.m]^Bd^r$.mrs#7ks#O$.m#O#P$1o#P#o$.m#o#p#Jo#p#q$.m#q#r#Jo#r~$.mHX$1vXQ1s%p7[OY$.mYZBdZ]$.m]^Bd^#o$.m#o#p#Jo#p#q$.m#q#r#Jo#r~$.mHX$2jXQ1s%p7[OY$.mYZBdZ]$.m]^Bd^#o$.m#o#p#Jo#p#q$.m#q#r#Jo#r~$.mHX$3^XQ1s%p7[OY$.mYZBdZ]$.m]^Bd^#o$.m#o#p#Jo#p#q$.m#q#r#Jo#r~$.mIo$4QXQ1s%p7[OY#0uYZ(yZ]#0u]^(y^#o#0u#o#p#Eg#p#q#0u#q#r#Eg#r~#0uIo$4tXQ1s%p7[OY#0uYZ(yZ]#0u]^(y^#o#0u#o#p#Eg#p#q#0u#q#r#Eg#r~#0uJP$5hXQ1s%p7[OY#._YZ'PZ]#._]^'P^#o#._#o#p$6T#p#q#._#q#r$6T#r~#._3s$6b]Q1s%gS%jW%m`%v!bOY$6TYZGWZ]$6T]^GW^r$6Trs$7Zsw$6Twx#Hox#O$6T#O#P$=k#P#o$6T#o#p$<T#p~$6T3s$7f]Q1s%gS%m`%v!bOY$6TYZGWZ]$6T]^GW^r$6Trs$8_sw$6Twx#Hox#O$6T#O#P$=V#P#o$6T#o#p$<T#p~$6T3s$8j]Q1s%gS%m`%v!bOY$6TYZGWZ]$6T]^GW^r$6Trs$9csw$6Twx#Hox#O$6T#O#P$;o#P#o$6T#o#p$<T#p~$6T3k$9nZQ1s%gS%m`%v!bOY$9cYZIjZ]$9c]^Ij^w$9cwx#:]x#O$9c#O#P$:a#P#o$9c#o#p$:u#p~$9c3k$:fTQ1sOY$9cYZIjZ]$9c]^Ij^~$9c3k$:|ZQ1s%gSOY#=ZYZ0xZ]#=Z]^0x^w#=Zwx#=}x#O#=Z#O#P#@Z#P#o#=Z#o#p$9c#p~#=Z3s$;tTQ1sOY$6TYZGWZ]$6T]^GW^~$6T3s$<^]Q1s%gS%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$$Zx#O$ k#O#P$'q#P#o$ k#o#p$6T#p~$ k3s$=[TQ1sOY$6TYZGWZ]$6T]^GW^~$6T3s$=pTQ1sOY$6TYZGWZ]$6T]^GW^~$6TJP$>^_Q1s%p7[%gS%m`%v!bOY#._YZ'PZ]#._]^'P^r#._rs$?]sw#._wx#/mx#O#._#O#P$AV#P#o#._#o#p$<T#p#q#._#q#r$6T#r~#._Iw$?j]Q1s%p7[%gS%m`%v!bOY$?]YZMOZ]$?]]^MO^w$?]wx#5kx#O$?]#O#P$@c#P#o$?]#o#p$:u#p#q$?]#q#r$9c#r~$?]Iw$@jXQ1s%p7[OY$?]YZMOZ]$?]]^MO^#o$?]#o#p$9c#p#q$?]#q#r$9c#r~$?]JP$A^XQ1s%p7[OY#._YZ'PZ]#._]^'P^#o#._#o#p$6T#p#q#._#q#r$6T#r~#._JP$BQXQ1s%p7[OY#._YZ'PZ]#._]^'P^#o#._#o#p$6T#p#q#._#q#r$6T#r~#._MV$Bz_Q1s%p7[%jW%sp%x#tOY$CyYZ!!SZ]$Cy]^!!S^r$Cyrs#2Rsw$Cywx%&{x#O$Cy#O#P%.{#P#o$Cy#o#p%$c#p#q$Cy#q#r$E}#r~$CyMV$D[_Q1s%p7[%gS%jW%sp%v!b%x#tOY$CyYZ!!SZ]$Cy]^!!S^r$Cyrs#2Rsw$Cywx$Bmx#O$Cy#O#P$EZ#P#o$Cy#o#p%%y#p#q$Cy#q#r$E}#r~$CyMV$EbXQ1s%p7[OY$CyYZ!!SZ]$Cy]^!!S^#o$Cy#o#p$E}#p#q$Cy#q#r$E}#r~$Cy6y$F^]Q1s%gS%jW%sp%v!b%x#tOY$E}YZ!#jZ]$E}]^!#j^r$E}rs#Fksw$E}wx$GVx#O$E}#O#P%%e#P#o$E}#o#p%%y#p~$E}6y$Gb]Q1s%jW%sp%x#tOY$E}YZ!#jZ]$E}]^!#j^r$E}rs#Fksw$E}wx$HZx#O$E}#O#P%#}#P#o$E}#o#p%$c#p~$E}6y$Hf]Q1s%jW%sp%x#tOY$E}YZ!#jZ]$E}]^!#j^r$E}rs#Fksw$E}wx$I_x#O$E}#O#P%!g#P#o$E}#o#p%!{#p~$E}5c$Ij]Q1s%jW%sp%x#tOY$JcYZ!&tZ]$Jc]^!&t^r$Jcrs#Kcsw$Jcwx$I_x#O$Jc#O#P% X#P#o$Jc#o#p% m#p~$Jc5c$Jn]Q1s%jW%sp%x#tOY$JcYZ!&tZ]$Jc]^!&t^r$Jcrs#Kcsw$Jcwx$Kgx#O$Jc#O#P$My#P#o$Jc#o#p$N_#p~$Jc5c$Kr]Q1s%jW%sp%x#tOY$JcYZ!&tZ]$Jc]^!&t^r$Jcrs#Kcsw$Jcwx$I_x#O$Jc#O#P$Lk#P#o$Jc#o#p$MP#p~$Jc5c$LpTQ1sOY$JcYZ!&tZ]$Jc]^!&t^~$Jc5c$MWZQ1s%jWOY#JoYZ8sZ]#Jo]^8s^r#Jors#Kcs#O#Jo#O#P#Mo#P#o#Jo#o#p$Jc#p~#Jo5c$NOTQ1sOY$JcYZ!&tZ]$Jc]^!&t^~$Jc5c$NfZQ1s%jWOY#JoYZ8sZ]#Jo]^8s^r#Jors#Kcs#O#Jo#O#P#Mo#P#o#Jo#o#p$Jc#p~#Jo5c% ^TQ1sOY$JcYZ!&tZ]$Jc]^!&t^~$Jc5c% tZQ1s%jWOY#JoYZ8sZ]#Jo]^8s^r#Jors#Kcs#O#Jo#O#P#Mo#P#o#Jo#o#p$Jc#p~#Jo6y%!lTQ1sOY$E}YZ!#jZ]$E}]^!#j^~$E}6y%#U]Q1s%gS%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$$Zx#O$ k#O#P$'q#P#o$ k#o#p$E}#p~$ k6y%$STQ1sOY$E}YZ!#jZ]$E}]^!#j^~$E}6y%$l]Q1s%gS%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$$Zx#O$ k#O#P$'q#P#o$ k#o#p$E}#p~$ k6y%%jTQ1sOY$E}YZ!#jZ]$E}]^!#j^~$E}6y%&S]Q1s%gS%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$$Zx#O$ k#O#P$'q#P#o$ k#o#p$E}#p~$ kMV%'Y_Q1s%p7[%jW%sp%x#tOY$CyYZ!!SZ]$Cy]^!!S^r$Cyrs#2Rsw$Cywx%(Xx#O$Cy#O#P%.X#P#o$Cy#o#p%!{#p#q$Cy#q#r$E}#r~$CyKo%(f_Q1s%p7[%jW%sp%x#tOY%)eYZ!.|Z]%)e]^!.|^r%)ers$/osw%)ewx%(Xx#O%)e#O#P%-e#P#o%)e#o#p% m#p#q%)e#q#r$Jc#r~%)eKo%)r_Q1s%p7[%jW%sp%x#tOY%)eYZ!.|Z]%)e]^!.|^r%)ers$/osw%)ewx%*qx#O%)e#O#P%,q#P#o%)e#o#p$N_#p#q%)e#q#r$Jc#r~%)eKo%+O_Q1s%p7[%jW%sp%x#tOY%)eYZ!.|Z]%)e]^!.|^r%)ers$/osw%)ewx%(Xx#O%)e#O#P%+}#P#o%)e#o#p$MP#p#q%)e#q#r$Jc#r~%)eKo%,UXQ1s%p7[OY%)eYZ!.|Z]%)e]^!.|^#o%)e#o#p$Jc#p#q%)e#q#r$Jc#r~%)eKo%,xXQ1s%p7[OY%)eYZ!.|Z]%)e]^!.|^#o%)e#o#p$Jc#p#q%)e#q#r$Jc#r~%)eKo%-lXQ1s%p7[OY%)eYZ!.|Z]%)e]^!.|^#o%)e#o#p$Jc#p#q%)e#q#r$Jc#r~%)eMV%.`XQ1s%p7[OY$CyYZ!!SZ]$Cy]^!!S^#o$Cy#o#p$E}#p#q$Cy#q#r$E}#r~$CyMV%/SXQ1s%p7[OY$CyYZ!!SZ]$Cy]^!!S^#o$Cy#o#p$E}#p#q$Cy#q#r$E}#r~$CyMg%/vXQ1s%p7[OY#+oYZ$}Z]#+o]^$}^#o#+o#o#p%0c#p#q#+o#q#r%0c#r~#+o7Z%0t]Q1s%gS%jW%m`%sp%v!b%x#tOY%0cYZ!3fZ]%0c]^!3f^r%0crs$7Zsw%0cwx$GVx#O%0c#O#P%1m#P#o%0c#o#p%2R#p~%0c7Z%1rTQ1sOY%0cYZ!3fZ]%0c]^!3f^~%0c7Z%2[]Q1s%gS%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$$Zx#O$ k#O#P$'q#P#o$ k#o#p%0c#p~$ kGz%3h]$}Q%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gz%4tZ!s,W%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gz%5z]$wQ%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{%7S_%q`%p7[%jW%e,X%sp%x#tOY%8RYZ!!SZ]%8R]^!!S^r%8Rrs%9csw%8Rwx&$}x#O%8R#O#P&(X#P#o%8R#o#p&(m#p#q%8R#q#r& u#r~%8RGk%8d_%p7[%gS%jW%e,X%sp%v!b%x#tOY%8RYZ!!SZ]%8R]^!!S^r%8Rrs%9csw%8Rwx%Nax#O%8R#O#P& a#P#o%8R#o#p&#{#p#q%8R#q#r& u#r~%8RDT%9n_%p7[%gS%e,X%v!bOY%:mYZ(yZ]%:m]^(y^r%:mrs%JPsw%:mwx%;yx#O%:m#O#P%M{#P#o%:m#o#p%ER#p#q%:m#q#r%=Z#r~%:mDT%:z_%p7[%gS%jW%e,X%v!bOY%:mYZ(yZ]%:m]^(y^r%:mrs%9csw%:mwx%;yx#O%:m#O#P%<u#P#o%:m#o#p%ER#p#q%:m#q#r%=Z#r~%:mDT%<SZ%p7[%jW%e,XOr(yrs)wsw(ywxAjx#O(y#O#PF^#P#o(y#o#p>v#p#q(y#q#r5T#r~(yDT%<zT%p7[O#o%:m#o#p%=Z#p#q%:m#q#r%=Z#r~%:m-w%=f]%gS%jW%e,X%v!bOY%=ZYZ5TZ]%=Z]^5T^r%=Zrs%>_sw%=Zwx%DXx#O%=Z#O#P%Iy#P#o%=Z#o#p%ER#p~%=Z-w%>h]%gS%e,X%v!bOY%=ZYZ5TZ]%=Z]^5T^r%=Zrs%?asw%=Zwx%DXx#O%=Z#O#P%Is#P#o%=Z#o#p%ER#p~%=Z-w%?j]%gS%e,X%v!bOY%=ZYZ5TZ]%=Z]^5T^r%=Zrs%@csw%=Zwx%DXx#O%=Z#O#P%D{#P#o%=Z#o#p%ER#p~%=Z-o%@lZ%gS%e,X%v!bOY%@cYZ.kZ]%@c]^.k^w%@cwx%A_x#O%@c#O#P%Ay#P#o%@c#o#p%BP#p~%@c-o%AdV%e,XOw.kwx/qx#O.k#O#P2c#P#o.k#o#p2i#p~.k-o%A|PO~%@c-o%BWZ%gS%e,XOY%ByYZ0xZ]%By]^0x^w%Bywx%Cmx#O%By#O#P%DR#P#o%By#o#p%@c#p~%By,]%CQX%gS%e,XOY%ByYZ0xZ]%By]^0x^w%Bywx%Cmx#O%By#O#P%DR#P~%By,]%CrT%e,XOw0xwx1px#O0x#O#P2V#P~0x,]%DUPO~%By-w%D`X%jW%e,XOr5Trs5ysw5Twx8Rx#O5T#O#P>p#P#o5T#o#p>v#p~5T-w%EOPO~%=Z-w%E[]%gS%jW%e,XOY%FTYZ;WZ]%FT]^;W^r%FTrs%GPsw%FTwx%Hsx#O%FT#O#P%Im#P#o%FT#o#p%=Z#p~%FT,e%F^Z%gS%jW%e,XOY%FTYZ;WZ]%FT]^;W^r%FTrs%GPsw%FTwx%Hsx#O%FT#O#P%Im#P~%FT,e%GWZ%gS%e,XOY%FTYZ;WZ]%FT]^;W^r%FTrs%Gysw%FTwx%Hsx#O%FT#O#P%Ig#P~%FT,e%HQZ%gS%e,XOY%FTYZ;WZ]%FT]^;W^r%FTrs%Bysw%FTwx%Hsx#O%FT#O#P%Ia#P~%FT,e%HzV%jW%e,XOr;Wrs;tsw;Wwx=fx#O;W#O#P>W#P~;W,e%IdPO~%FT,e%IjPO~%FT,e%IpPO~%FT-w%IvPO~%=Z-w%I|PO~%=ZDT%J[_%p7[%gS%e,X%v!bOY%:mYZ(yZ]%:m]^(y^r%:mrs%KZsw%:mwx%;yx#O%:m#O#P%Mg#P#o%:m#o#p%ER#p#q%:m#q#r%=Z#r~%:mC{%Kf]%p7[%gS%e,X%v!bOY%KZYZ+oZ]%KZ]^+o^w%KZwx%L_x#O%KZ#O#P%MR#P#o%KZ#o#p%BP#p#q%KZ#q#r%@c#r~%KZC{%LfX%p7[%e,XOw+owx-Vx#O+o#O#P3u#P#o+o#o#p2i#p#q+o#q#r.k#r~+oC{%MWT%p7[O#o%KZ#o#p%@c#p#q%KZ#q#r%@c#r~%KZDT%MlT%p7[O#o%:m#o#p%=Z#p#q%:m#q#r%=Z#r~%:mDT%NQT%p7[O#o%:m#o#p%=Z#p#q%:m#q#r%=Z#r~%:mGk%NnZ%p7[%jW%e,X%sp%x#tOr!!Srs)wsw!!Swx!-Qx#O!!S#O#P!2l#P#o!!S#o#p!+d#p#q!!S#q#r!#j#r~!!SGk& fT%p7[O#o%8R#o#p& u#p#q%8R#q#r& u#r~%8R1_&!U]%gS%jW%e,X%sp%v!b%x#tOY& uYZ!#jZ]& u]^!#j^r& urs%>_sw& uwx&!}x#O& u#O#P&#u#P#o& u#o#p&#{#p~& u1_&#YX%jW%e,X%sp%x#tOr!#jrs5ysw!#jwx!%Yx#O!#j#O#P!+^#P#o!#j#o#p!+d#p~!#j1_&#xPO~& u1_&$U]%gS%jW%e,XOY%FTYZ;WZ]%FT]^;W^r%FTrs%GPsw%FTwx%Hsx#O%FT#O#P%Im#P#o%FT#o#p& u#p~%FTGk&%[Z%p7[%jW%e,X%sp%x#tOr!!Srs)wsw!!Swx&%}x#O!!S#O#P&'P#P#o!!S#o#p&'e#p#q!!S#q#r!#j#r~!!SGk&&^Z%h!f%p7[%jW%f,X%sp%x#tOr!.|rsCWsw!.|wx!.Ox#O!.|#O#P!1r#P#o!.|#o#p!)x#p#q!.|#q#r!&t#r~!.|<b&'UT%p7[O#o!!S#o#p!#j#p#q!!S#q#r!#j#r~!!S&U&'lX%gS%jWOr;Wrs;tsw;Wwx<zx#O;W#O#P>j#P#o;W#o#p!#j#p~;WGk&(^T%p7[O#o%8R#o#p& u#p#q%8R#q#r& u#r~%8R1_&(v]%gS%jW%e,XOY%FTYZ;WZ]%FT]^;W^r%FTrs%GPsw%FTwx%Hsx#O%FT#O#P%Im#P#o%FT#o#p& u#p~%FTG{&*SZf,X%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}<u&+YZ!OR%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{&,`_T,X%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Uxz$}z{&-_{!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{&-r]_R%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{&/O]$z,X%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}<u&0[ZwR%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Mg&1b^${,X%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`!a&2^!a#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}B^&2qZ&S&j%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{&3w_!dQ%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!O$}!O!P&4v!P!Q$}!Q![&7W![#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{&5X]%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!O$}!O!P&6Q!P#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{&6eZ!m,X%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&7kg!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q![&7W![!g$}!g!h&9S!h!l$}!l!m&=d!m#O$}#O#P!3Q#P#R$}#R#S&7W#S#X$}#X#Y&9S#Y#^$}#^#_&=d#_#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&9ea%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux{$}{|&:j|}$}}!O&:j!O!Q$}!Q![&;t![#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&:{]%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q![&;t![#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&<Xc!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q![&;t![!l$}!l!m&=d!m#O$}#O#P!3Q#P#R$}#R#S&;t#S#^$}#^#_&=d#_#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&=wZ!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{&>}_$|R%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!P$}!P!Q&?|!Q!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gz&@a]%OQ%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&Amu!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!O$}!O!P&DQ!P!Q$}!Q![&GW![!d$}!d!e&IY!e!g$}!g!h&9S!h!l$}!l!m&=d!m!q$}!q!r&LS!r!z$}!z!{&Nv!{#O$}#O#P!3Q#P#R$}#R#S&GW#S#U$}#U#V&IY#V#X$}#X#Y&9S#Y#^$}#^#_&=d#_#c$}#c#d&LS#d#l$}#l#m&Nv#m#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&Dc]%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q![&E[![#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&Eog!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q![&E[![!g$}!g!h&9S!h!l$}!l!m&=d!m#O$}#O#P!3Q#P#R$}#R#S&E[#S#X$}#X#Y&9S#Y#^$}#^#_&=d#_#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&Gki!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!O$}!O!P&DQ!P!Q$}!Q![&GW![!g$}!g!h&9S!h!l$}!l!m&=d!m#O$}#O#P!3Q#P#R$}#R#S&GW#S#X$}#X#Y&9S#Y#^$}#^#_&=d#_#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&Ik`%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q!R&Jm!R!S&Jm!S#O$}#O#P!3Q#P#R$}#R#S&Jm#S#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&KQ`!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q!R&Jm!R!S&Jm!S#O$}#O#P!3Q#P#R$}#R#S&Jm#S#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&Le_%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q!Y&Md!Y#O$}#O#P!3Q#P#R$}#R#S&Md#S#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&Mw_!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q!Y&Md!Y#O$}#O#P!3Q#P#R$}#R#S&Md#S#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy' Xc%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q!['!d![!c$}!c!i'!d!i#O$}#O#P!3Q#P#R$}#R#S'!d#S#T$}#T#Z'!d#Z#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy'!wc!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q!['!d![!c$}!c!i'!d!i#O$}#O#P!3Q#P#R$}#R#S'!d#S#T$}#T#Z'!d#Z#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Mg'$g]x1s%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`'%`!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}<u'%sZ%WR%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{'&yZ#^,X%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{'(P_jR%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!^$}!^!_')O!_!`!9P!`!a!9P!a#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gz')c]$xQ%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{'*o]%V,X%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`!9P!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{'+{^jR%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`!9P!`!a',w!a#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gz'-[]$yQ%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{'.j]]Q#tP%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Mg'/xc%p7[%gS%jW%d&j%m`%sp%v!b%x#t%Q,XOr$}rs&Rsw$}wx! Ux!Q$}!Q!['/c![!c$}!c!}'/c!}#O$}#O#P!3Q#P#R$}#R#S'/c#S#T$}#T#o'/c#o#p!4h#p#q$}#q#r!3f#r$g$}$g~'/cMg'1jg%p7[%gS%jW%d&j%m`%sp%v!b%x#t%Q,XOr$}rs'3Rsw$}wx'6mx!Q$}!Q!['/c![!c$}!c!t'/c!t!u';a!u!}'/c!}#O$}#O#P!3Q#P#R$}#R#S'/c#S#T$}#T#f'/c#f#g';a#g#o'/c#o#p!4h#p#q$}#q#r!3f#r$g$}$g~'/cDe'3`_%p7[%gS%e,X%m`%v!bOY!<kYZ'PZ]!<k]^'P^r!<krs'4_sw!<kwx!>yx#O!<k#O#P'6X#P#o!<k#o#p#'w#p#q!<k#q#r#%s#r~!<kDe'4lZ%p7[%gS%e,X%m`%v!bOr'Prs'5_sw'Pwx(Px#O'P#O#PN[#P#o'P#o#pKQ#p#q'P#q#rGW#r~'PD]'5lX%p7[%gS%i,X%m`%v!bOwMOwx,ex#OMO#O#PMv#P#oMO#o#pJ`#p#qMO#q#rIj#r~MODe'6^T%p7[O#o!<k#o#p#%s#p#q!<k#q#r#%s#r~!<kGk'6z_%p7[%jW%e,X%sp%x#tOY%8RYZ!!SZ]%8R]^!!S^r%8Rrs%9csw%8Rwx'7yx#O%8R#O#P'9y#P#o%8R#o#p':_#p#q%8R#q#r& u#r~%8RGk'8WZ%p7[%jW%e,X%sp%x#tOr!!Srs)wsw!!Swx'8yx#O!!S#O#P!2W#P#o!!S#o#p!*j#p#q!!S#q#r!#j#r~!!SFT'9WZ%p7[%jW%f,X%sp%x#tOr!.|rsCWsw!.|wx!.Ox#O!.|#O#P!1r#P#o!.|#o#p!)x#p#q!.|#q#r!&t#r~!.|Gk':OT%p7[O#o%8R#o#p& u#p#q%8R#q#r& u#r~%8R1_':h]%gS%jW%e,XOY%FTYZ;WZ]%FT]^;W^r%FTrs%GPsw%FTwx%Hsx#O%FT#O#P%Im#P#o%FT#o#p& u#p~%FTMg';vc%p7[%gS%jW%d&j%m`%sp%v!b%x#t%Q,XOr$}rs'3Rsw$}wx'6mx!Q$}!Q!['/c![!c$}!c!}'/c!}#O$}#O#P!3Q#P#R$}#R#S'/c#S#T$}#T#o'/c#o#p!4h#p#q$}#q#r!3f#r$g$}$g~'/cMg'=hg%p7[%gS%jW%d&j%m`%sp%v!b%x#t%Q,XOr$}rs'?Psw$}wx'Awx!Q$}!Q!['/c![!c$}!c!t'/c!t!u'Du!u!}'/c!}#O$}#O#P!3Q#P#R$}#R#S'/c#S#T$}#T#f'/c#f#g'Du#g#o'/c#o#p!4h#p#q$}#q#r!3f#r$g$}$g~'/cDe'?^Z%p7[%gS%m`%v!b%r,XOr'Prs'@Psw'Pwx(Px#O'P#O#PNp#P#o'P#o#pKQ#p#q'P#q#rGW#r~'PDe'@[Z%p7[%gS%m`%v!bOr'Prs'@}sw'Pwx(Px#O'P#O#PN[#P#o'P#o#pKQ#p#q'P#q#rGW#r~'PD]'A[X%p7[%gS%w,X%m`%v!bOwMOwx,ex#OMO#O#PMv#P#oMO#o#pJ`#p#qMO#q#rIj#r~MOGk'BUZ%p7[%jW%sp%x#t%l,XOr!!Srs)wsw!!Swx'Bwx#O!!S#O#P!2l#P#o!!S#o#p!+d#p#q!!S#q#r!#j#r~!!SGk'CSZ%p7[%jW%sp%x#tOr!!Srs)wsw!!Swx'Cux#O!!S#O#P!2W#P#o!!S#o#p!*j#p#q!!S#q#r!#j#r~!!SFT'DSZ%p7[%jW%u,X%sp%x#tOr!.|rsCWsw!.|wx!.Ox#O!.|#O#P!1r#P#o!.|#o#p!)x#p#q!.|#q#r!&t#r~!.|Mg'E[c%p7[%gS%jW%d&j%m`%sp%v!b%x#t%Q,XOr$}rs'?Psw$}wx'Awx!Q$}!Q!['/c![!c$}!c!}'/c!}#O$}#O#P!3Q#P#R$}#R#S'/c#S#T$}#T#o'/c#o#p!4h#p#q$}#q#r!3f#r$g$}$g~'/cMg'F|k%p7[%gS%jW%d&j%m`%sp%v!b%x#t%Q,XOr$}rs'3Rsw$}wx'6mx!Q$}!Q!['/c![!c$}!c!h'/c!h!i'Du!i!t'/c!t!u';a!u!}'/c!}#O$}#O#P!3Q#P#R$}#R#S'/c#S#T$}#T#U'/c#U#V';a#V#Y'/c#Y#Z'Du#Z#o'/c#o#p!4h#p#q$}#q#r!3f#r$g$}$g~'/cG{'IUZ!V,X%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Mg'I|X%p7[OY$}YZ!5[Z]$}]^!5[^#o$}#o#p!3f#p#q$}#q#r!3f#r~$}<u'J|Z!WR%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gz'LS]$vQ%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy'MUX%gS%jW!ZGmOr;Wrs;tsw;Wwx<zx#O;W#O#P>j#P#o;W#o#p!3f#p~;WGz'NU]$uQ%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}<u( `X![7_%gS%jW%m`%sp%v!b%x#tOr!3frsHOsw!3fwx!$dx#O!3f#O#P!4b#P#o!3f#o#p!4h#p~!3fGy(!`Z%P,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}",
  17741. tokenizers: [legacyPrint, indentation, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, newlines],
  17742. topRules: { Script: [0, 3] },
  17743. specialized: [{ term: 186, get: value => spec_identifier$2[value] || -1 }],
  17744. tokenPrec: 6594
  17745. })
  17746. const pythonLanguage = LezerLanguage.define({
  17747. parser: parser$7.configure({
  17748. props: [
  17749. indentNodeProp.add({ Body: continuedIndent() }),
  17750. foldNodeProp.add({ 'Body ArrayExpression DictionaryExpression': foldInside$1 }),
  17751. styleTags({
  17752. "async '*' '**' FormatConversion": tags$1.modifier,
  17753. 'for while if elif else try except finally return raise break continue with pass assert await yield': tags$1.controlKeyword,
  17754. 'in not and or is del': tags$1.operatorKeyword,
  17755. 'import from def class global nonlocal lambda': tags$1.definitionKeyword,
  17756. 'with as print': tags$1.keyword,
  17757. self: tags$1.self,
  17758. Boolean: tags$1.bool,
  17759. None: tags$1.null,
  17760. VariableName: tags$1.variableName,
  17761. 'CallExpression/VariableName': tags$1.function(tags$1.variableName),
  17762. 'FunctionDefinition/VariableName': tags$1.function(tags$1.definition(tags$1.variableName)),
  17763. 'ClassDefinition/VariableName': tags$1.definition(tags$1.className),
  17764. PropertyName: tags$1.propertyName,
  17765. 'CallExpression/MemberExpression/ProperyName': tags$1.function(tags$1.propertyName),
  17766. Comment: tags$1.lineComment,
  17767. Number: tags$1.number,
  17768. String: tags$1.string,
  17769. FormatString: tags$1.special(tags$1.string),
  17770. UpdateOp: tags$1.updateOperator,
  17771. ArithOp: tags$1.arithmeticOperator,
  17772. BitOp: tags$1.bitwiseOperator,
  17773. CompareOp: tags$1.compareOperator,
  17774. AssignOp: tags$1.definitionOperator,
  17775. Ellipsis: tags$1.punctuation,
  17776. At: tags$1.meta,
  17777. '( )': tags$1.paren,
  17778. '[ ]': tags$1.squareBracket,
  17779. '{ }': tags$1.brace,
  17780. '.': tags$1.derefOperator,
  17781. ', ;': tags$1.separator
  17782. })
  17783. ]
  17784. }),
  17785. languageData: { closeBrackets: { brackets: ['(', '[', '{', "'", '"', "'''", '"""'] }, commentTokens: { line: '#' }, indentOnInput: /^\s*[\}\]\)]$/ }
  17786. })
  17787. function python() {
  17788. return new LanguageSupport(pythonLanguage)
  17789. }
  17790. var _m26 = Object.freeze({ __proto__: null, python: python, pythonLanguage: pythonLanguage })
  17791. const descendantOp = 92,
  17792. Unit = 1,
  17793. callee = 93,
  17794. identifier$1 = 94
  17795. const space$1 = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200, 8201, 8202, 8232, 8233, 8239, 8287, 12288]
  17796. const colon = 58,
  17797. parenL = 40,
  17798. underscore = 95,
  17799. bracketL = 91,
  17800. dash = 45,
  17801. period = 46,
  17802. hash = 35,
  17803. percent = 37
  17804. function isAlpha$1(ch) {
  17805. return (ch >= 65 && ch <= 90) || (ch >= 97 && ch <= 122) || ch >= 161
  17806. }
  17807. function isDigit(ch) {
  17808. return ch >= 48 && ch <= 57
  17809. }
  17810. const identifiers = new ExternalTokenizer((input, token) => {
  17811. let start = token.start,
  17812. pos = start,
  17813. inside = false
  17814. for (;;) {
  17815. let next = input.get(pos)
  17816. if (isAlpha$1(next) || next == dash || next == underscore || (inside && isDigit(next))) {
  17817. if (!inside && (next != dash || pos > start)) inside = true
  17818. pos++
  17819. continue
  17820. }
  17821. if (inside) token.accept(next == parenL ? callee : identifier$1, pos)
  17822. break
  17823. }
  17824. })
  17825. const descendant = new ExternalTokenizer((input, token) => {
  17826. if (space$1.includes(input.get(token.start - 1))) {
  17827. let next = input.get(token.start)
  17828. if (isAlpha$1(next) || next == underscore || next == hash || next == period || next == bracketL || next == colon || next == dash) token.accept(descendantOp, token.start)
  17829. }
  17830. })
  17831. const unitToken = new ExternalTokenizer((input, token) => {
  17832. let { start } = token
  17833. if (!space$1.includes(input.get(start - 1))) {
  17834. let next = input.get(start)
  17835. if (next == percent) token.accept(Unit, start + 1)
  17836. if (isAlpha$1(next)) {
  17837. let pos = start + 1
  17838. while (isAlpha$1(input.get(pos))) pos++
  17839. token.accept(Unit, pos)
  17840. }
  17841. }
  17842. })
  17843. const spec_callee = { __proto__: null, not: 30, url: 64, 'url-prefix': 64, domain: 64, regexp: 64, selector: 132 }
  17844. const spec_AtKeyword = { __proto__: null, '@import': 112, '@media': 136, '@charset': 140, '@namespace': 144, '@keyframes': 150, '@supports': 162 }
  17845. const spec_identifier$1 = { __proto__: null, not: 126, only: 126, from: 156, to: 158 }
  17846. const parser$6 = Parser.deserialize({
  17847. version: 13,
  17848. states:
  17849. "7WOYQ[OOOOQP'#Cc'#CcOOQP'#Cb'#CbO!ZQ[O'#CeO!}QXO'#C`O#UQ[O'#CgO#aQ[O'#DOO#fQ[O'#DSOOQP'#Eb'#EbO#kQdO'#DdO$SQ[O'#DqO#kQdO'#DsO$eQ[O'#DuO$pQ[O'#DxO$uQ[O'#EOO%TQ[O'#EQOOQS'#Ea'#EaOOQS'#ER'#ERQYQ[OOOOQP'#Cf'#CfOOQP,59P,59PO!ZQ[O,59PO%[Q[O'#ESO%vQWO,58zO&OQ[O,59RO#aQ[O,59jO#fQ[O,59nO%[Q[O,59rO%[Q[O,59tO%[Q[O,59uO'[Q[O'#D_OOQS,58z,58zOOQP'#Cj'#CjOOQO'#Cp'#CpOOQP,59R,59RO'cQWO,59RO'hQWO,59ROOQP'#DQ'#DQOOQP,59j,59jOOQO'#DU'#DUO'mQ`O,59nOOQS'#Cr'#CrO#kQdO'#CsO'uQvO'#CuO(|QtO,5:OOOQO'#Cz'#CzO'hQWO'#CyO)bQWO'#C{OOQS'#Ef'#EfOOQO'#Dg'#DgO)gQ[O'#DnO)uQWO'#EhO$uQ[O'#DlO*TQWO'#DoOOQO'#Ei'#EiO%yQWO,5:]O*YQpO,5:_OOQS'#Dw'#DwO*bQWO,5:aO*gQ[O,5:aOOQO'#Dz'#DzO*oQWO,5:dO*tQWO,5:jO*|QWO,5:lOOQS-E8P-E8POOQP1G.k1G.kO+pQXO,5:nOOQO-E8Q-E8QOOQS1G.f1G.fOOQP1G.m1G.mO'cQWO1G.mO'hQWO1G.mOOQP1G/U1G/UO+}Q`O1G/YO,hQXO1G/^O-OQXO1G/`O-fQXO1G/aO-|QXO'#CcO.qQWO'#D`OOQS,59y,59yO.vQWO,59yO/OQ[O,59yO/VQ[O'#CnO/^QdO'#CqOOQP1G/Y1G/YO#kQdO1G/YO/eQpO,59_OOQS,59a,59aO#kQdO,59cO/mQWO1G/jOOQS,59e,59eO/rQ!bO,59gO/zQWO'#DgO0VQWO,5:SO0[QWO,5:YO$uQ[O,5:UO$uQ[O'#EXO0dQWO,5;SO0oQWO,5:WO%[Q[O,5:ZOOQS1G/w1G/wOOQS1G/y1G/yOOQS1G/{1G/{O1QQWO1G/{O1VQdO'#D{OOQS1G0O1G0OOOQS1G0U1G0UOOQS1G0W1G0WOOQP7+$X7+$XOOQP7+$t7+$tO#kQdO7+$tO#kQdO,59zO1eQ[O'#EWO1oQWO1G/eOOQS1G/e1G/eO1oQWO1G/eO1wQXO'#EdO2OQWO,59YO2TQtO'#ETO2uQdO'#EeO3PQWO,59]O3UQpO7+$tOOQS1G.y1G.yOOQS1G.}1G.}OOQS7+%U7+%UO3^QWO1G/RO#kQdO1G/nOOQO1G/t1G/tOOQO1G/p1G/pO3cQWO,5:sOOQO-E8V-E8VO3qQXO1G/uOOQS7+%g7+%gO3xQYO'#CuO%yQWO'#EYO4QQdO,5:gOOQS,5:g,5:gO4`QpO<<H`O4hQtO1G/fOOQO,5:r,5:rO4{Q[O,5:rOOQO-E8U-E8UOOQS7+%P7+%PO5VQWO7+%PO5_QWO,5;OOOQP1G.t1G.tOOQS-E8R-E8RO#kQdO'#EUO5gQWO,5;POOQT1G.w1G.wOOQP<<H`<<H`OOQS7+$m7+$mO5oQdO7+%YOOQO7+%a7+%aOOQS,5:t,5:tOOQS-E8W-E8WOOQS1G0R1G0ROOQPAN=zAN=zO5vQtO'#EVO#kQdO'#EVO6nQdO7+%QOOQO7+%Q7+%QOOQO1G0^1G0^OOQS<<Hk<<HkO7OQdO,5:pOOQO-E8S-E8SOOQO<<Ht<<HtO7YQtO,5:qOOQS-E8T-E8TOOQO<<Hl<<Hl",
  17850. stateData:
  17851. '8W~O#SOSQOS~OTWOWWO[TO]TOsUOwVO!X_O!YXO!fYO!hZO!j[O!m]O!s^O#QPO#VRO~O#QcO~O[hO]hOcfOsiOwjO{kO!OmO#OlO#VeO~O!QnO~P!`O_sO#PqO#QpO~O#QuO~O#QwO~OazOh!QOj!QOp!PO#P}O#QyO#Z{O~Oa!SO!a!UO!d!VO#Q!RO!Q#[P~Oj![Op!PO#Q!ZO~O#Q!^O~Oa!SO!a!UO!d!VO#Q!RO~O!V#[P~P$SOTWOWWO[TO]TOsUOwVO#QPO#VRO~OcfO!QnO~O_!hO#PqO#QpO~OTWOWWO[TO]TOsUOwVO!X_O!YXO!fYO!hZO!j[O!m]O!s^O#Q!oO#VRO~O!P!qO~P&ZOa!tO~Oa!uO~Ou!vOy!wO~OP!yOaiXliX!ViX!aiX!diX#QiX`iXciXhiXjiXpiX#PiX#ZiXuiX!PiX!UiX~Oa!SOl!zO!a!UO!d!VO#Q!RO!V#[P~Oa!}O~Oa!SO!a!UO!d!VO#Q#OO~Oc#SO!_#RO!Q#[X!V#[X~Oa#VO~Ol!zO!V#XO~O!V#YO~Oj#ZOp!PO~O!Q#[O~O!QnO!_#RO~O!QnO!V#_O~O[hO]hOsiOwjO{kO!OmO#OlO#VeO~Oc!va!Q!va`!va~P+UOu#aOy#bO~O[hO]hOsiOwjO#VeO~Oczi{zi!Ozi!Qzi#Ozi`zi~P,VOc|i{|i!O|i!Q|i#O|i`|i~P,VOc}i{}i!O}i!Q}i#O}i`}i~P,VO[VX[!TX]VXcVXsVXwVX{VX!OVX!QVX#OVX#VVX~O[#cO~O!P#fO!V#dO~O!P#fO~P&ZO`#WP~P%[O`#XP~P#kO`#nOl!zO~O!V#pO~Oj#qOq#qO~O[!]X`!ZX!_!ZX~O[#rO~O`#sO!_#RO~Oc#SO!Q#[a!V#[a~O!_#ROc!`a!Q!`a!V!`a`!`a~O!V#xO~O!P#|O!p#zO!q#zO#Z#yO~O!P!zX!V!zX~P&ZO!P$SO!V#dO~O`#WX~P!`O`$VO~Ol!zO`!wXa!wXc!wXh!wXj!wXp!wX#P!wX#Q!wX#Z!wX~Oc$XO`#XX~P#kO`$ZO~Ol!zOu$[O~O`$]O~O!_#ROc!{a!Q!{a!V!{a~O`$_O~P+UOP!yO!QiX~O!P$bO!p#zO!q#zO#Z#yO~Ol!zOu$cO~Oc$eOl!zO!U$gO!P!Si!V!Si~P#kO!P!za!V!za~P&ZO!P$iO!V#dO~OcfO`#Wa~Oc$XO`#Xa~O`$lO~P#kOl!zOa!yXc!yXh!yXj!yXp!yX!P!yX!U!yX!V!yX#P!yX#Q!yX#Z!yX~Oc$eO!U$oO!P!Sq!V!Sq~P#kO`!xac!xa~P#kOl!zOa!yac!yah!yaj!yap!ya!P!ya!U!ya!V!ya#P!ya#Q!ya#Z!ya~Oq#Zl!Ol~',
  17852. goto:
  17853. "+}#^PPPP#_P#g#uP#g$T#gPP$ZPPP$aP$g$m$v$vP%YP$vP$v%p&SPP#gP&lP#gP&rP#gP#g#gPPP&x'['hPP#_PP'n'n'x'nP'nP'n'nP#_P#_P#_P'{#_P(O(RPP#_P#_(U(d(n(|)S)Y)d)jPPPPPP)p)xP*d*g*jP+`+i]`Obn!s#d$QiWObfklmn!s!t#V#d$QiQObfklmn!s!t#V#d$QQdRR!ceQrTR!ghQ!gsR#`!hQtTR!ihQ!gtQ!|!OR#`!iq!QXZz!u!w!z#b#c#k#r$O$X$^$e$f$jp!QXZz!u!w!z#b#c#k#r$O$X$^$e$f$jT#z#[#{q!OXZz!u!w!z#b#c#k#r$O$X$^$e$f$jp!QXZz!u!w!z#b#c#k#r$O$X$^$e$f$jQ![[R#Z!]QvUR!jiQxVR!kjQoSQ!fgQ#W!XQ#^!`Q#_!aR$`#zQ!rnQ#g!sQ$P#dR$h$QX!pn!s#d$Qa!WY^_|!S!U#R#SR#P!SR!][R!_]R#]!_QbOU!bb!s$QQ!snR$Q#dQgSS!eg$UR$U#hQ#k!uU$W#k$^$jQ$^#rR$j$XQ$Y#kR$k$YQ$f$OR$n$fQ#e!rS$R#e$TR$T#gQ#T!TR#v#TQ#{#[R$a#{]aObn!s#d$Q[SObn!s#d$QQ!dfQ!lkQ!mlQ!nmQ#h!tR#w#VR#i!tR#l!uQ|XQ!YZQ!xz[#j!u#k#r$X$^$jQ#m!wQ#o!zQ#}#bQ$O#cS$d$O$fR$m$eQ!XYQ!a_R!{|U!TY_|Q!`^Q#Q!SQ#U!UQ#t#RR#u#S",
  17854. nodeNames:
  17855. '⚠ Unit Comment StyleSheet RuleSet UniversalSelector TagSelector TagName NestingSelector ClassSelector ClassName PseudoClassSelector : :: PseudoClassName not ) ( ArgList , PseudoClassName ArgList ValueName ParenthesizedValue ColorLiteral NumberLiteral StringLiteral BinaryExpression BinOp CallExpression Callee CallLiteral CallTag ParenthesizedContent IdSelector # IdName ] AttributeSelector [ AttributeName MatchOp ChildSelector ChildOp DescendantSelector SiblingSelector SiblingOp } { Block Declaration PropertyName Important ; ImportStatement AtKeyword import KeywordQuery FeatureQuery FeatureName BinaryQuery LogicOp UnaryQuery UnaryQueryOp ParenthesizedQuery SelectorQuery callee MediaStatement media CharsetStatement charset NamespaceStatement namespace NamespaceName KeyframesStatement keyframes KeyframeName KeyframeList from to SupportsStatement supports AtRule',
  17856. maxTerm: 105,
  17857. nodeProps: [
  17858. [NodeProp.openedBy, 16, '(', 47, '{'],
  17859. [NodeProp.closedBy, 17, ')', 48, '}']
  17860. ],
  17861. skippedNodes: [0, 2],
  17862. repeatNodeCount: 8,
  17863. tokenData:
  17864. 'Bj~R![OX$wX^%]^p$wpq%]qr(crs+}st,otu2Uuv$wvw2rwx2}xy3jyz3uz{3z{|4_|}8u}!O9Q!O!P9i!P!Q9z!Q![<U![!]<y!]!^=i!^!_$w!_!`=t!`!a>P!a!b$w!b!c>o!c!}$w!}#O?{#O#P$w#P#Q@W#Q#R2U#R#T$w#T#U@c#U#c$w#c#dAb#d#o$w#o#pAq#p#q2U#q#rA|#r#sBX#s#y$w#y#z%]#z$f$w$f$g%]$g#BY$w#BY#BZ%]#BZ$IS$w$IS$I_%]$I_$I|$w$I|$JO%]$JO$JT$w$JT$JU%]$JU$KV$w$KV$KW%]$KW&FU$w&FU&FV%]&FV~$wW$zQOy%Qz~%QW%VQqWOy%Qz~%Q~%bf#S~OX%QX^&v^p%Qpq&vqy%Qz#y%Q#y#z&v#z$f%Q$f$g&v$g#BY%Q#BY#BZ&v#BZ$IS%Q$IS$I_&v$I_$I|%Q$I|$JO&v$JO$JT%Q$JT$JU&v$JU$KV%Q$KV$KW&v$KW&FU%Q&FU&FV&v&FV~%Q~&}f#S~qWOX%QX^&v^p%Qpq&vqy%Qz#y%Q#y#z&v#z$f%Q$f$g&v$g#BY%Q#BY#BZ&v#BZ$IS%Q$IS$I_&v$I_$I|%Q$I|$JO&v$JO$JT%Q$JT$JU&v$JU$KV%Q$KV$KW&v$KW&FU%Q&FU&FV&v&FV~%Q^(fSOy%Qz#]%Q#]#^(r#^~%Q^(wSqWOy%Qz#a%Q#a#b)T#b~%Q^)YSqWOy%Qz#d%Q#d#e)f#e~%Q^)kSqWOy%Qz#c%Q#c#d)w#d~%Q^)|SqWOy%Qz#f%Q#f#g*Y#g~%Q^*_SqWOy%Qz#h%Q#h#i*k#i~%Q^*pSqWOy%Qz#T%Q#T#U*|#U~%Q^+RSqWOy%Qz#b%Q#b#c+_#c~%Q^+dSqWOy%Qz#h%Q#h#i+p#i~%Q^+wQ!UUqWOy%Qz~%Q~,QUOY+}Zr+}rs,ds#O+}#O#P,i#P~+}~,iOj~~,lPO~+}_,tWsPOy%Qz!Q%Q!Q![-^![!c%Q!c!i-^!i#T%Q#T#Z-^#Z~%Q^-cWqWOy%Qz!Q%Q!Q![-{![!c%Q!c!i-{!i#T%Q#T#Z-{#Z~%Q^.QWqWOy%Qz!Q%Q!Q![.j![!c%Q!c!i.j!i#T%Q#T#Z.j#Z~%Q^.qWhUqWOy%Qz!Q%Q!Q![/Z![!c%Q!c!i/Z!i#T%Q#T#Z/Z#Z~%Q^/bWhUqWOy%Qz!Q%Q!Q![/z![!c%Q!c!i/z!i#T%Q#T#Z/z#Z~%Q^0PWqWOy%Qz!Q%Q!Q![0i![!c%Q!c!i0i!i#T%Q#T#Z0i#Z~%Q^0pWhUqWOy%Qz!Q%Q!Q![1Y![!c%Q!c!i1Y!i#T%Q#T#Z1Y#Z~%Q^1_WqWOy%Qz!Q%Q!Q![1w![!c%Q!c!i1w!i#T%Q#T#Z1w#Z~%Q^2OQhUqWOy%Qz~%QY2XSOy%Qz!_%Q!_!`2e!`~%QY2lQyQqWOy%Qz~%QX2wQWPOy%Qz~%Q~3QUOY2}Zw2}wx,dx#O2}#O#P3d#P~2}~3gPO~2}_3oQaVOy%Qz~%Q~3zO`~_4RSTPlSOy%Qz!_%Q!_!`2e!`~%Q_4fUlS!OPOy%Qz!O%Q!O!P4x!P!Q%Q!Q![7_![~%Q^4}SqWOy%Qz!Q%Q!Q![5Z![~%Q^5bWqW#ZUOy%Qz!Q%Q!Q![5Z![!g%Q!g!h5z!h#X%Q#X#Y5z#Y~%Q^6PWqWOy%Qz{%Q{|6i|}%Q}!O6i!O!Q%Q!Q![6z![~%Q^6nSqWOy%Qz!Q%Q!Q![6z![~%Q^7RSqW#ZUOy%Qz!Q%Q!Q![6z![~%Q^7fYqW#ZUOy%Qz!O%Q!O!P8U!P!Q%Q!Q![7_![!g%Q!g!h5z!h#X%Q#X#Y5z#Y~%Q^8]WqW#ZUOy%Qz!Q%Q!Q![8U![!g%Q!g!h5z!h#X%Q#X#Y5z#Y~%Q_8zQcVOy%Qz~%Q^9VUlSOy%Qz!O%Q!O!P4x!P!Q%Q!Q![7_![~%Q_9nS#VPOy%Qz!Q%Q!Q![5Z![~%Q~:PRlSOy%Qz{:Y{~%Q~:_SqWOy:Yyz:kz{;`{~:Y~:nROz:kz{:w{~:k~:zTOz:kz{:w{!P:k!P!Q;Z!Q~:k~;`OQ~~;eUqWOy:Yyz:kz{;`{!P:Y!P!Q;w!Q~:Y~<OQQ~qWOy%Qz~%Q^<ZY#ZUOy%Qz!O%Q!O!P8U!P!Q%Q!Q![7_![!g%Q!g!h5z!h#X%Q#X#Y5z#Y~%QX=OS[POy%Qz![%Q![!]=[!]~%QX=cQ]PqWOy%Qz~%Q_=nQ!VVOy%Qz~%QY=yQyQOy%Qz~%QX>US{POy%Qz!`%Q!`!a>b!a~%QX>iQ{PqWOy%Qz~%QX>rUOy%Qz!c%Q!c!}?U!}#T%Q#T#o?U#o~%QX?]Y!XPqWOy%Qz}%Q}!O?U!O!Q%Q!Q![?U![!c%Q!c!}?U!}#T%Q#T#o?U#o~%QX@QQwPOy%Qz~%Q^@]QuUOy%Qz~%QX@fSOy%Qz#b%Q#b#c@r#c~%QX@wSqWOy%Qz#W%Q#W#XAT#X~%QXA[Q!_PqWOy%Qz~%QXAeSOy%Qz#f%Q#f#gAT#g~%QXAvQ!QPOy%Qz~%Q_BRQ!PVOy%Qz~%QZB^S!OPOy%Qz!_%Q!_!`2e!`~%Q',
  17865. tokenizers: [descendant, unitToken, identifiers, 0, 1, 2, 3],
  17866. topRules: { StyleSheet: [0, 3] },
  17867. specialized: [
  17868. { term: 93, get: value => spec_callee[value] || -1 },
  17869. { term: 55, get: value => spec_AtKeyword[value] || -1 },
  17870. { term: 94, get: value => spec_identifier$1[value] || -1 }
  17871. ],
  17872. tokenPrec: 1060
  17873. })
  17874. let _properties = null
  17875. function properties() {
  17876. if (!_properties && typeof document == 'object' && document.body) {
  17877. let names = []
  17878. for (let prop in document.body.style) {
  17879. if (!/[A-Z]|^-|^(item|length)$/.test(prop)) names.push(prop)
  17880. }
  17881. _properties = names.sort().map(name => ({ type: 'property', label: name }))
  17882. }
  17883. return _properties || []
  17884. }
  17885. const pseudoClasses = [
  17886. 'active',
  17887. 'after',
  17888. 'before',
  17889. 'checked',
  17890. 'default',
  17891. 'disabled',
  17892. 'empty',
  17893. 'enabled',
  17894. 'first-child',
  17895. 'first-letter',
  17896. 'first-line',
  17897. 'first-of-type',
  17898. 'focus',
  17899. 'hover',
  17900. 'in-range',
  17901. 'indeterminate',
  17902. 'invalid',
  17903. 'lang',
  17904. 'last-child',
  17905. 'last-of-type',
  17906. 'link',
  17907. 'not',
  17908. 'nth-child',
  17909. 'nth-last-child',
  17910. 'nth-last-of-type',
  17911. 'nth-of-type',
  17912. 'only-of-type',
  17913. 'only-child',
  17914. 'optional',
  17915. 'out-of-range',
  17916. 'placeholder',
  17917. 'read-only',
  17918. 'read-write',
  17919. 'required',
  17920. 'root',
  17921. 'selection',
  17922. 'target',
  17923. 'valid',
  17924. 'visited'
  17925. ].map(name => ({ type: 'class', label: name }))
  17926. const values = [
  17927. 'above',
  17928. 'absolute',
  17929. 'activeborder',
  17930. 'additive',
  17931. 'activecaption',
  17932. 'after-white-space',
  17933. 'ahead',
  17934. 'alias',
  17935. 'all',
  17936. 'all-scroll',
  17937. 'alphabetic',
  17938. 'alternate',
  17939. 'always',
  17940. 'antialiased',
  17941. 'appworkspace',
  17942. 'asterisks',
  17943. 'attr',
  17944. 'auto',
  17945. 'auto-flow',
  17946. 'avoid',
  17947. 'avoid-column',
  17948. 'avoid-page',
  17949. 'avoid-region',
  17950. 'axis-pan',
  17951. 'background',
  17952. 'backwards',
  17953. 'baseline',
  17954. 'below',
  17955. 'bidi-override',
  17956. 'blink',
  17957. 'block',
  17958. 'block-axis',
  17959. 'bold',
  17960. 'bolder',
  17961. 'border',
  17962. 'border-box',
  17963. 'both',
  17964. 'bottom',
  17965. 'break',
  17966. 'break-all',
  17967. 'break-word',
  17968. 'bullets',
  17969. 'button',
  17970. 'button-bevel',
  17971. 'buttonface',
  17972. 'buttonhighlight',
  17973. 'buttonshadow',
  17974. 'buttontext',
  17975. 'calc',
  17976. 'capitalize',
  17977. 'caps-lock-indicator',
  17978. 'caption',
  17979. 'captiontext',
  17980. 'caret',
  17981. 'cell',
  17982. 'center',
  17983. 'checkbox',
  17984. 'circle',
  17985. 'cjk-decimal',
  17986. 'clear',
  17987. 'clip',
  17988. 'close-quote',
  17989. 'col-resize',
  17990. 'collapse',
  17991. 'color',
  17992. 'color-burn',
  17993. 'color-dodge',
  17994. 'column',
  17995. 'column-reverse',
  17996. 'compact',
  17997. 'condensed',
  17998. 'contain',
  17999. 'content',
  18000. 'contents',
  18001. 'content-box',
  18002. 'context-menu',
  18003. 'continuous',
  18004. 'copy',
  18005. 'counter',
  18006. 'counters',
  18007. 'cover',
  18008. 'crop',
  18009. 'cross',
  18010. 'crosshair',
  18011. 'currentcolor',
  18012. 'cursive',
  18013. 'cyclic',
  18014. 'darken',
  18015. 'dashed',
  18016. 'decimal',
  18017. 'decimal-leading-zero',
  18018. 'default',
  18019. 'default-button',
  18020. 'dense',
  18021. 'destination-atop',
  18022. 'destination-in',
  18023. 'destination-out',
  18024. 'destination-over',
  18025. 'difference',
  18026. 'disc',
  18027. 'discard',
  18028. 'disclosure-closed',
  18029. 'disclosure-open',
  18030. 'document',
  18031. 'dot-dash',
  18032. 'dot-dot-dash',
  18033. 'dotted',
  18034. 'double',
  18035. 'down',
  18036. 'e-resize',
  18037. 'ease',
  18038. 'ease-in',
  18039. 'ease-in-out',
  18040. 'ease-out',
  18041. 'element',
  18042. 'ellipse',
  18043. 'ellipsis',
  18044. 'embed',
  18045. 'end',
  18046. 'ethiopic-abegede-gez',
  18047. 'ethiopic-halehame-aa-er',
  18048. 'ethiopic-halehame-gez',
  18049. 'ew-resize',
  18050. 'exclusion',
  18051. 'expanded',
  18052. 'extends',
  18053. 'extra-condensed',
  18054. 'extra-expanded',
  18055. 'fantasy',
  18056. 'fast',
  18057. 'fill',
  18058. 'fill-box',
  18059. 'fixed',
  18060. 'flat',
  18061. 'flex',
  18062. 'flex-end',
  18063. 'flex-start',
  18064. 'footnotes',
  18065. 'forwards',
  18066. 'from',
  18067. 'geometricPrecision',
  18068. 'graytext',
  18069. 'grid',
  18070. 'groove',
  18071. 'hand',
  18072. 'hard-light',
  18073. 'help',
  18074. 'hidden',
  18075. 'hide',
  18076. 'higher',
  18077. 'highlight',
  18078. 'highlighttext',
  18079. 'horizontal',
  18080. 'hsl',
  18081. 'hsla',
  18082. 'hue',
  18083. 'icon',
  18084. 'ignore',
  18085. 'inactiveborder',
  18086. 'inactivecaption',
  18087. 'inactivecaptiontext',
  18088. 'infinite',
  18089. 'infobackground',
  18090. 'infotext',
  18091. 'inherit',
  18092. 'initial',
  18093. 'inline',
  18094. 'inline-axis',
  18095. 'inline-block',
  18096. 'inline-flex',
  18097. 'inline-grid',
  18098. 'inline-table',
  18099. 'inset',
  18100. 'inside',
  18101. 'intrinsic',
  18102. 'invert',
  18103. 'italic',
  18104. 'justify',
  18105. 'keep-all',
  18106. 'landscape',
  18107. 'large',
  18108. 'larger',
  18109. 'left',
  18110. 'level',
  18111. 'lighter',
  18112. 'lighten',
  18113. 'line-through',
  18114. 'linear',
  18115. 'linear-gradient',
  18116. 'lines',
  18117. 'list-item',
  18118. 'listbox',
  18119. 'listitem',
  18120. 'local',
  18121. 'logical',
  18122. 'loud',
  18123. 'lower',
  18124. 'lower-hexadecimal',
  18125. 'lower-latin',
  18126. 'lower-norwegian',
  18127. 'lowercase',
  18128. 'ltr',
  18129. 'luminosity',
  18130. 'manipulation',
  18131. 'match',
  18132. 'matrix',
  18133. 'matrix3d',
  18134. 'medium',
  18135. 'menu',
  18136. 'menutext',
  18137. 'message-box',
  18138. 'middle',
  18139. 'min-intrinsic',
  18140. 'mix',
  18141. 'monospace',
  18142. 'move',
  18143. 'multiple',
  18144. 'multiple_mask_images',
  18145. 'multiply',
  18146. 'n-resize',
  18147. 'narrower',
  18148. 'ne-resize',
  18149. 'nesw-resize',
  18150. 'no-close-quote',
  18151. 'no-drop',
  18152. 'no-open-quote',
  18153. 'no-repeat',
  18154. 'none',
  18155. 'normal',
  18156. 'not-allowed',
  18157. 'nowrap',
  18158. 'ns-resize',
  18159. 'numbers',
  18160. 'numeric',
  18161. 'nw-resize',
  18162. 'nwse-resize',
  18163. 'oblique',
  18164. 'opacity',
  18165. 'open-quote',
  18166. 'optimizeLegibility',
  18167. 'optimizeSpeed',
  18168. 'outset',
  18169. 'outside',
  18170. 'outside-shape',
  18171. 'overlay',
  18172. 'overline',
  18173. 'padding',
  18174. 'padding-box',
  18175. 'painted',
  18176. 'page',
  18177. 'paused',
  18178. 'perspective',
  18179. 'pinch-zoom',
  18180. 'plus-darker',
  18181. 'plus-lighter',
  18182. 'pointer',
  18183. 'polygon',
  18184. 'portrait',
  18185. 'pre',
  18186. 'pre-line',
  18187. 'pre-wrap',
  18188. 'preserve-3d',
  18189. 'progress',
  18190. 'push-button',
  18191. 'radial-gradient',
  18192. 'radio',
  18193. 'read-only',
  18194. 'read-write',
  18195. 'read-write-plaintext-only',
  18196. 'rectangle',
  18197. 'region',
  18198. 'relative',
  18199. 'repeat',
  18200. 'repeating-linear-gradient',
  18201. 'repeating-radial-gradient',
  18202. 'repeat-x',
  18203. 'repeat-y',
  18204. 'reset',
  18205. 'reverse',
  18206. 'rgb',
  18207. 'rgba',
  18208. 'ridge',
  18209. 'right',
  18210. 'rotate',
  18211. 'rotate3d',
  18212. 'rotateX',
  18213. 'rotateY',
  18214. 'rotateZ',
  18215. 'round',
  18216. 'row',
  18217. 'row-resize',
  18218. 'row-reverse',
  18219. 'rtl',
  18220. 'run-in',
  18221. 'running',
  18222. 's-resize',
  18223. 'sans-serif',
  18224. 'saturation',
  18225. 'scale',
  18226. 'scale3d',
  18227. 'scaleX',
  18228. 'scaleY',
  18229. 'scaleZ',
  18230. 'screen',
  18231. 'scroll',
  18232. 'scrollbar',
  18233. 'scroll-position',
  18234. 'se-resize',
  18235. 'self-start',
  18236. 'self-end',
  18237. 'semi-condensed',
  18238. 'semi-expanded',
  18239. 'separate',
  18240. 'serif',
  18241. 'show',
  18242. 'single',
  18243. 'skew',
  18244. 'skewX',
  18245. 'skewY',
  18246. 'skip-white-space',
  18247. 'slide',
  18248. 'slider-horizontal',
  18249. 'slider-vertical',
  18250. 'sliderthumb-horizontal',
  18251. 'sliderthumb-vertical',
  18252. 'slow',
  18253. 'small',
  18254. 'small-caps',
  18255. 'small-caption',
  18256. 'smaller',
  18257. 'soft-light',
  18258. 'solid',
  18259. 'source-atop',
  18260. 'source-in',
  18261. 'source-out',
  18262. 'source-over',
  18263. 'space',
  18264. 'space-around',
  18265. 'space-between',
  18266. 'space-evenly',
  18267. 'spell-out',
  18268. 'square',
  18269. 'start',
  18270. 'static',
  18271. 'status-bar',
  18272. 'stretch',
  18273. 'stroke',
  18274. 'stroke-box',
  18275. 'sub',
  18276. 'subpixel-antialiased',
  18277. 'svg_masks',
  18278. 'super',
  18279. 'sw-resize',
  18280. 'symbolic',
  18281. 'symbols',
  18282. 'system-ui',
  18283. 'table',
  18284. 'table-caption',
  18285. 'table-cell',
  18286. 'table-column',
  18287. 'table-column-group',
  18288. 'table-footer-group',
  18289. 'table-header-group',
  18290. 'table-row',
  18291. 'table-row-group',
  18292. 'text',
  18293. 'text-bottom',
  18294. 'text-top',
  18295. 'textarea',
  18296. 'textfield',
  18297. 'thick',
  18298. 'thin',
  18299. 'threeddarkshadow',
  18300. 'threedface',
  18301. 'threedhighlight',
  18302. 'threedlightshadow',
  18303. 'threedshadow',
  18304. 'to',
  18305. 'top',
  18306. 'transform',
  18307. 'translate',
  18308. 'translate3d',
  18309. 'translateX',
  18310. 'translateY',
  18311. 'translateZ',
  18312. 'transparent',
  18313. 'ultra-condensed',
  18314. 'ultra-expanded',
  18315. 'underline',
  18316. 'unidirectional-pan',
  18317. 'unset',
  18318. 'up',
  18319. 'upper-latin',
  18320. 'uppercase',
  18321. 'url',
  18322. 'var',
  18323. 'vertical',
  18324. 'vertical-text',
  18325. 'view-box',
  18326. 'visible',
  18327. 'visibleFill',
  18328. 'visiblePainted',
  18329. 'visibleStroke',
  18330. 'visual',
  18331. 'w-resize',
  18332. 'wait',
  18333. 'wave',
  18334. 'wider',
  18335. 'window',
  18336. 'windowframe',
  18337. 'windowtext',
  18338. 'words',
  18339. 'wrap',
  18340. 'wrap-reverse',
  18341. 'x-large',
  18342. 'x-small',
  18343. 'xor',
  18344. 'xx-large',
  18345. 'xx-small'
  18346. ]
  18347. .map(name => ({ type: 'keyword', label: name }))
  18348. .concat(
  18349. [
  18350. 'aliceblue',
  18351. 'antiquewhite',
  18352. 'aqua',
  18353. 'aquamarine',
  18354. 'azure',
  18355. 'beige',
  18356. 'bisque',
  18357. 'black',
  18358. 'blanchedalmond',
  18359. 'blue',
  18360. 'blueviolet',
  18361. 'brown',
  18362. 'burlywood',
  18363. 'cadetblue',
  18364. 'chartreuse',
  18365. 'chocolate',
  18366. 'coral',
  18367. 'cornflowerblue',
  18368. 'cornsilk',
  18369. 'crimson',
  18370. 'cyan',
  18371. 'darkblue',
  18372. 'darkcyan',
  18373. 'darkgoldenrod',
  18374. 'darkgray',
  18375. 'darkgreen',
  18376. 'darkkhaki',
  18377. 'darkmagenta',
  18378. 'darkolivegreen',
  18379. 'darkorange',
  18380. 'darkorchid',
  18381. 'darkred',
  18382. 'darksalmon',
  18383. 'darkseagreen',
  18384. 'darkslateblue',
  18385. 'darkslategray',
  18386. 'darkturquoise',
  18387. 'darkviolet',
  18388. 'deeppink',
  18389. 'deepskyblue',
  18390. 'dimgray',
  18391. 'dodgerblue',
  18392. 'firebrick',
  18393. 'floralwhite',
  18394. 'forestgreen',
  18395. 'fuchsia',
  18396. 'gainsboro',
  18397. 'ghostwhite',
  18398. 'gold',
  18399. 'goldenrod',
  18400. 'gray',
  18401. 'grey',
  18402. 'green',
  18403. 'greenyellow',
  18404. 'honeydew',
  18405. 'hotpink',
  18406. 'indianred',
  18407. 'indigo',
  18408. 'ivory',
  18409. 'khaki',
  18410. 'lavender',
  18411. 'lavenderblush',
  18412. 'lawngreen',
  18413. 'lemonchiffon',
  18414. 'lightblue',
  18415. 'lightcoral',
  18416. 'lightcyan',
  18417. 'lightgoldenrodyellow',
  18418. 'lightgray',
  18419. 'lightgreen',
  18420. 'lightpink',
  18421. 'lightsalmon',
  18422. 'lightseagreen',
  18423. 'lightskyblue',
  18424. 'lightslategray',
  18425. 'lightsteelblue',
  18426. 'lightyellow',
  18427. 'lime',
  18428. 'limegreen',
  18429. 'linen',
  18430. 'magenta',
  18431. 'maroon',
  18432. 'mediumaquamarine',
  18433. 'mediumblue',
  18434. 'mediumorchid',
  18435. 'mediumpurple',
  18436. 'mediumseagreen',
  18437. 'mediumslateblue',
  18438. 'mediumspringgreen',
  18439. 'mediumturquoise',
  18440. 'mediumvioletred',
  18441. 'midnightblue',
  18442. 'mintcream',
  18443. 'mistyrose',
  18444. 'moccasin',
  18445. 'navajowhite',
  18446. 'navy',
  18447. 'oldlace',
  18448. 'olive',
  18449. 'olivedrab',
  18450. 'orange',
  18451. 'orangered',
  18452. 'orchid',
  18453. 'palegoldenrod',
  18454. 'palegreen',
  18455. 'paleturquoise',
  18456. 'palevioletred',
  18457. 'papayawhip',
  18458. 'peachpuff',
  18459. 'peru',
  18460. 'pink',
  18461. 'plum',
  18462. 'powderblue',
  18463. 'purple',
  18464. 'rebeccapurple',
  18465. 'red',
  18466. 'rosybrown',
  18467. 'royalblue',
  18468. 'saddlebrown',
  18469. 'salmon',
  18470. 'sandybrown',
  18471. 'seagreen',
  18472. 'seashell',
  18473. 'sienna',
  18474. 'silver',
  18475. 'skyblue',
  18476. 'slateblue',
  18477. 'slategray',
  18478. 'snow',
  18479. 'springgreen',
  18480. 'steelblue',
  18481. 'tan',
  18482. 'teal',
  18483. 'thistle',
  18484. 'tomato',
  18485. 'turquoise',
  18486. 'violet',
  18487. 'wheat',
  18488. 'white',
  18489. 'whitesmoke',
  18490. 'yellow',
  18491. 'yellowgreen'
  18492. ].map(name => ({ type: 'constant', label: name }))
  18493. )
  18494. const tags = [
  18495. 'a',
  18496. 'abbr',
  18497. 'address',
  18498. 'article',
  18499. 'aside',
  18500. 'b',
  18501. 'bdi',
  18502. 'bdo',
  18503. 'blockquote',
  18504. 'body',
  18505. 'br',
  18506. 'button',
  18507. 'canvas',
  18508. 'caption',
  18509. 'cite',
  18510. 'code',
  18511. 'col',
  18512. 'colgroup',
  18513. 'dd',
  18514. 'del',
  18515. 'details',
  18516. 'dfn',
  18517. 'dialog',
  18518. 'div',
  18519. 'dl',
  18520. 'dt',
  18521. 'em',
  18522. 'figcaption',
  18523. 'figure',
  18524. 'footer',
  18525. 'form',
  18526. 'header',
  18527. 'hgroup',
  18528. 'h1',
  18529. 'h2',
  18530. 'h3',
  18531. 'h4',
  18532. 'h5',
  18533. 'h6',
  18534. 'hr',
  18535. 'html',
  18536. 'i',
  18537. 'iframe',
  18538. 'img',
  18539. 'input',
  18540. 'ins',
  18541. 'kbd',
  18542. 'label',
  18543. 'legend',
  18544. 'li',
  18545. 'main',
  18546. 'meter',
  18547. 'nav',
  18548. 'ol',
  18549. 'output',
  18550. 'p',
  18551. 'pre',
  18552. 'ruby',
  18553. 'section',
  18554. 'select',
  18555. 'small',
  18556. 'source',
  18557. 'span',
  18558. 'strong',
  18559. 'sub',
  18560. 'summary',
  18561. 'sup',
  18562. 'table',
  18563. 'tbody',
  18564. 'td',
  18565. 'template',
  18566. 'textarea',
  18567. 'tfoot',
  18568. 'th',
  18569. 'thead',
  18570. 'tr',
  18571. 'u',
  18572. 'ul'
  18573. ].map(name => ({ type: 'type', label: name }))
  18574. const span = /^[\w-]*/
  18575. const completeCSS = context => {
  18576. let { state, pos } = context,
  18577. node = syntaxTree(state).resolve(pos, -1)
  18578. if (node.name == 'PropertyName') return { from: node.from, options: properties(), span }
  18579. if (node.name == 'ValueName') return { from: node.from, options: values, span }
  18580. if (node.name == 'PseudoClassName') return { from: node.from, options: pseudoClasses, span }
  18581. if (node.name == 'TagName') {
  18582. for (let { parent } = node; parent; parent = parent.parent) if (parent.name == 'Block') return { from: node.from, options: properties(), span }
  18583. return { from: node.from, options: tags, span }
  18584. }
  18585. if (!context.explicit) return null
  18586. let above = node.resolve(pos),
  18587. before = above.childBefore(pos)
  18588. if (before && before.name == ':' && above.name == 'PseudoClassSelector') return { from: pos, options: pseudoClasses, span }
  18589. if ((before && before.name == ':' && above.name == 'Declaration') || above.name == 'ArgList') return { from: pos, options: values, span }
  18590. if (above.name == 'Block') return { from: pos, options: properties(), span }
  18591. return null
  18592. }
  18593. const cssLanguage = LezerLanguage.define({
  18594. parser: parser$6.configure({
  18595. props: [
  18596. indentNodeProp.add({ Declaration: continuedIndent() }),
  18597. foldNodeProp.add({ Block: foldInside$1 }),
  18598. styleTags({
  18599. 'import charset namespace keyframes': tags$1.definitionKeyword,
  18600. 'media supports': tags$1.controlKeyword,
  18601. 'from to': tags$1.keyword,
  18602. NamespaceName: tags$1.namespace,
  18603. KeyframeName: tags$1.labelName,
  18604. TagName: tags$1.typeName,
  18605. ClassName: tags$1.className,
  18606. PseudoClassName: tags$1.constant(tags$1.className),
  18607. not: tags$1.operatorKeyword,
  18608. IdName: tags$1.labelName,
  18609. 'FeatureName PropertyName AttributeName': tags$1.propertyName,
  18610. NumberLiteral: tags$1.number,
  18611. KeywordQuery: tags$1.keyword,
  18612. UnaryQueryOp: tags$1.operatorKeyword,
  18613. callee: tags$1.keyword,
  18614. 'CallTag ValueName': tags$1.atom,
  18615. Callee: tags$1.variableName,
  18616. Unit: tags$1.unit,
  18617. 'UniversalSelector NestingSelector': tags$1.definitionOperator,
  18618. AtKeyword: tags$1.keyword,
  18619. MatchOp: tags$1.compareOperator,
  18620. 'ChildOp SiblingOp, LogicOp': tags$1.logicOperator,
  18621. BinOp: tags$1.arithmeticOperator,
  18622. Important: tags$1.modifier,
  18623. Comment: tags$1.blockComment,
  18624. ParenthesizedContent: tags$1.special(tags$1.name),
  18625. ColorLiteral: tags$1.color,
  18626. StringLiteral: tags$1.string,
  18627. ':': tags$1.punctuation,
  18628. 'PseudoOp #': tags$1.derefOperator,
  18629. '; ,': tags$1.separator,
  18630. '( )': tags$1.paren,
  18631. '[ ]': tags$1.squareBracket,
  18632. '{ }': tags$1.brace
  18633. })
  18634. ]
  18635. }),
  18636. languageData: { commentTokens: { block: { open: '/*', close: '*/' } }, indentOnInput: /^\s*\}$/ }
  18637. })
  18638. const cssCompletion = cssLanguage.data.of({ autocomplete: completeCSS })
  18639. function css() {
  18640. return new LanguageSupport(cssLanguage, cssCompletion)
  18641. }
  18642. var _m27 = Object.freeze({ __proto__: null, css: css, cssCompletion: cssCompletion, cssLanguage: cssLanguage })
  18643. const StartTag$1 = 1,
  18644. StartCloseTag$1 = 2,
  18645. MismatchedStartCloseTag = 3,
  18646. missingCloseTag = 33,
  18647. IncompleteCloseTag = 4,
  18648. SelfCloseEndTag = 5,
  18649. commentContent$2 = 34,
  18650. Element$4 = 10,
  18651. OpenTag$1 = 11,
  18652. RawText = 25,
  18653. Dialect_noMatch = 0
  18654. const selfClosers = {
  18655. area: true,
  18656. base: true,
  18657. br: true,
  18658. col: true,
  18659. command: true,
  18660. embed: true,
  18661. frame: true,
  18662. hr: true,
  18663. img: true,
  18664. input: true,
  18665. keygen: true,
  18666. link: true,
  18667. meta: true,
  18668. param: true,
  18669. source: true,
  18670. track: true,
  18671. wbr: true,
  18672. menuitem: true
  18673. }
  18674. const implicitlyClosed = { dd: true, li: true, optgroup: true, option: true, p: true, rp: true, rt: true, tbody: true, td: true, tfoot: true, th: true, tr: true }
  18675. const closeOnOpen = {
  18676. dd: { dd: true, dt: true },
  18677. dt: { dd: true, dt: true },
  18678. li: { li: true },
  18679. option: { option: true, optgroup: true },
  18680. optgroup: { optgroup: true },
  18681. p: {
  18682. address: true,
  18683. article: true,
  18684. aside: true,
  18685. blockquote: true,
  18686. dir: true,
  18687. div: true,
  18688. dl: true,
  18689. fieldset: true,
  18690. footer: true,
  18691. form: true,
  18692. h1: true,
  18693. h2: true,
  18694. h3: true,
  18695. h4: true,
  18696. h5: true,
  18697. h6: true,
  18698. header: true,
  18699. hgroup: true,
  18700. hr: true,
  18701. menu: true,
  18702. nav: true,
  18703. ol: true,
  18704. p: true,
  18705. pre: true,
  18706. section: true,
  18707. table: true,
  18708. ul: true
  18709. },
  18710. rp: { rp: true, rt: true },
  18711. rt: { rp: true, rt: true },
  18712. tbody: { tbody: true, tfoot: true },
  18713. td: { td: true, th: true },
  18714. tfoot: { tbody: true },
  18715. th: { td: true, th: true },
  18716. thead: { tbody: true, tfoot: true },
  18717. tr: { tr: true }
  18718. }
  18719. function nameChar$1(ch) {
  18720. return ch == 45 || ch == 46 || ch == 58 || (ch >= 65 && ch <= 90) || ch == 95 || (ch >= 97 && ch <= 122) || ch >= 161
  18721. }
  18722. function isSpace$1(ch) {
  18723. return ch == 9 || ch == 10 || ch == 13 || ch == 32
  18724. }
  18725. let cachedName$1 = null,
  18726. cachedInput$1 = null,
  18727. cachedPos$1 = 0
  18728. function tagNameAfter$1(input, pos) {
  18729. if (cachedPos$1 == pos && cachedInput$1 == input) return cachedName$1
  18730. let next = input.get(pos)
  18731. while (isSpace$1(next)) next = input.get(++pos)
  18732. let start = pos
  18733. while (nameChar$1(next)) next = input.get(++pos)
  18734. cachedInput$1 = input
  18735. cachedPos$1 = pos
  18736. return (cachedName$1 = pos > start ? input.read(start, pos).toLowerCase() : next == question || next == bang ? undefined : null)
  18737. }
  18738. const lessThan = 60,
  18739. greaterThan = 62,
  18740. slash = 47,
  18741. question = 63,
  18742. bang = 33
  18743. function ElementContext$1(name, parent) {
  18744. this.name = name
  18745. this.parent = parent
  18746. this.hash = parent ? parent.hash : 0
  18747. for (let i = 0; i < name.length; i++) this.hash += (this.hash << 4) + name.charCodeAt(i) + (name.charCodeAt(i) << 8)
  18748. }
  18749. const elementContext$1 = new ContextTracker({
  18750. start: null,
  18751. shift(context, term, input, stack) {
  18752. return term == StartTag$1 ? new ElementContext$1(tagNameAfter$1(input, stack.pos) || '', context) : context
  18753. },
  18754. reduce(context, term) {
  18755. return term == Element$4 && context ? context.parent : context
  18756. },
  18757. reuse(context, node, input, stack) {
  18758. let type = node.type.id
  18759. return type == StartTag$1 || type == OpenTag$1 ? new ElementContext$1(tagNameAfter$1(input, stack.pos - node.length + 1) || '', context) : context
  18760. },
  18761. hash(context) {
  18762. return context ? context.hash : 0
  18763. },
  18764. strict: false
  18765. })
  18766. const tagStart = new ExternalTokenizer((input, token, stack) => {
  18767. let pos = token.start,
  18768. first = input.get(pos),
  18769. close
  18770. if (first < 0 && stack.context) token.accept(missingCloseTag, token.start)
  18771. if (first != lessThan) return
  18772. pos++
  18773. if ((close = input.get(pos) == slash)) pos++
  18774. let name = tagNameAfter$1(input, pos)
  18775. if (name === undefined) return
  18776. if (!name) return token.accept(close ? IncompleteCloseTag : StartTag$1, pos)
  18777. let parent = stack.context ? stack.context.name : null
  18778. if (close) {
  18779. if (name == parent) return token.accept(StartCloseTag$1, pos)
  18780. if (parent && implicitlyClosed[parent]) return token.accept(missingCloseTag, token.start)
  18781. if (stack.dialectEnabled(Dialect_noMatch)) return token.accept(StartCloseTag$1, pos)
  18782. for (let cx = stack.context; cx; cx = cx.parent) if (cx.name == name) return
  18783. token.accept(MismatchedStartCloseTag, pos)
  18784. } else {
  18785. if (parent && closeOnOpen[parent] && closeOnOpen[parent][name]) token.accept(missingCloseTag, token.start)
  18786. else token.accept(StartTag$1, pos)
  18787. }
  18788. })
  18789. const selfClosed = new ExternalTokenizer((input, token, stack) => {
  18790. let next = input.get(token.start),
  18791. end = token.start + 1
  18792. if (next == slash) {
  18793. if (input.get(end) != greaterThan) return
  18794. end++
  18795. } else if (next != greaterThan) {
  18796. return
  18797. }
  18798. if (stack.context && selfClosers[stack.context.name]) token.accept(SelfCloseEndTag, end)
  18799. })
  18800. const commentContent$1$1 = new ExternalTokenizer((input, token) => {
  18801. let pos = token.start,
  18802. endPos = 0
  18803. for (;;) {
  18804. let next = input.get(pos)
  18805. if (next < 0) break
  18806. pos++
  18807. if (next == '-->'.charCodeAt(endPos)) {
  18808. endPos++
  18809. if (endPos == 3) {
  18810. pos -= 3
  18811. break
  18812. }
  18813. } else {
  18814. endPos = 0
  18815. }
  18816. }
  18817. if (pos > token.start) token.accept(commentContent$2, pos)
  18818. })
  18819. const openTag = /^<\/?\s*([\.\-\:\w\xa1-\uffff]+)/
  18820. function tagName$1(tag) {
  18821. let m = openTag.exec(tag)
  18822. return m ? m[1].toLowerCase() : null
  18823. }
  18824. function attributes(tag) {
  18825. let open = openTag.exec(tag),
  18826. attrs = {}
  18827. if (open) {
  18828. let attr = /\s*([\.\-\:\w\xa1-\uffff]+)\s*(?:=\s*(?:"([^"]*)"|'([^']*)'|([^\s=<>"'/]+)))?/g,
  18829. m
  18830. attr.lastIndex = open.index + open[0].length
  18831. while ((m = attr.exec(tag))) attrs[m[1]] = m[4] || m[3] || m[2] || m[1]
  18832. }
  18833. return attrs
  18834. }
  18835. function skip(name) {
  18836. return token => tagName$1(token) == name
  18837. }
  18838. function resolveContent(tags) {
  18839. let tagMap = null
  18840. for (let _i197 = 0, _length197 = tags.length; _i197 < _length197; _i197++) {
  18841. let tag = tags[_i197]
  18842. if (!tagMap) tagMap = Object.create(null)
  18843. ;(tagMap[tag.tag] || (tagMap[tag.tag] = [])).push({ attrs: tag.attrs, value: { filterEnd: skip(tag.tag), startParse: tag.parser.startParse.bind(tag.parser) } })
  18844. }
  18845. return function(input, stack) {
  18846. let openTag = input.read(stack.ruleStart, stack.pos)
  18847. let name = tagName$1(openTag),
  18848. matches,
  18849. attrs
  18850. if (!name) return null
  18851. if (tagMap && (matches = tagMap[name])) {
  18852. for (let _i198 = 0, _matches = matches, _length198 = _matches.length; _i198 < _length198; _i198++) {
  18853. let match = _matches[_i198]
  18854. if (!match.attrs || match.attrs(attrs || (attrs = attributes(openTag)))) return match.value
  18855. }
  18856. }
  18857. if (name == 'script' || name == 'textarea' || name == 'style') return { filterEnd: skip(name), wrapType: RawText }
  18858. return null
  18859. }
  18860. }
  18861. const elementContent = resolveContent([])
  18862. function configureNesting(tags) {
  18863. return { elementContent: resolveContent(tags) }
  18864. }
  18865. const parser$5 = Parser.deserialize({
  18866. version: 13,
  18867. states:
  18868. "'OOVOXOOOtQ`O'#CgS!eOXO'#CfOOOP'#Cf'#CfO!oOdO'#CqO!wQ`O'#CsOOOP'#DR'#DROOOP'#Cv'#CvQVOXOOO!|QrO,59ROOOP'#Cz'#CzO#XOXO'#DWO#cOPO,59QOOOS'#C{'#C{O#kOdO,59]OOOP,59],59]O#sQ`O,59_OOOP-E6t-E6tO#xQrO'#CiOOQQ'#Cw'#CwO$WQrO1G.mOOOP1G.m1G.mOOOP1G.v1G.vOOOP-E6x-E6xO$cQ`O'#CoOOOP1G.l1G.lOOOS-E6y-E6yOOOP1G.w1G.wOOOP1G.y1G.yO$hQ!bO,59TOOQQ-E6u-E6uOOOP7+$X7+$XOOOP7+$b7+$bO$sQ`O,59ZO$xO#tO'#ClO%WO&jO'#ClOOQQ1G.o1G.oOOOP1G.u1G.uOOOO'#Cx'#CxO%fO#tO,59WOOQQ,59W,59WOOOO'#Cy'#CyO%tO&jO,59WOOOO-E6v-E6vOOQQ1G.r1G.rOOOO-E6w-E6w",
  18869. stateData:
  18870. '&X~OtOS~OPPORTOSUOVUOWUOXUOfUOhVO{SO~O[XO~OPPORTOSUOVUOWUOXUOfUO{SO~OQzPqzP~PyOr]O|_O~O[`O~OTfO^bObeO~OQzXqzX~PyOQhOqiO~Or]O|kO~OblO~O_mOT]X^]Xb]X~OTpO^bOboO~O[qO~OatOvrOxsO~ObuO~OWvOXvOvxOwvO~OWyOXyOxxOyyO~OWvOXvOv|OwvO~OWyOXyOx|OyyO~O{fhf~',
  18871. goto: '#k{PPPPPPPPPP|!SP!YPP!^PP!a!d|P|PP!j!p!v!|#S#YPPPPP#`PPPP#hXUOQWZXQOQWZTcXdRtmRi[XROQWZQWORaWQdXRndQwrR{wQzsR}zQZQRgZQ^SRj^SVOWTYQZR[Q',
  18872. nodeNames:
  18873. '⚠ StartTag StartCloseTag StartCloseTag IncompleteCloseTag SelfCloseEndTag Document Text EntityReference CharacterReference Element OpenTag TagName Attribute AttributeName Is AttributeValue UnquotedAttributeValue EndTag CloseTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag DoctypeDecl RawText',
  18874. maxTerm: 44,
  18875. context: elementContext$1,
  18876. nodeProps: [
  18877. [NodeProp.closedBy, -2, 1, 2, 'EndTag SelfCloseEndTag', 11, 'CloseTag'],
  18878. [NodeProp.openedBy, 5, 'StartTag', 18, 'StartTag StartCloseTag', 19, 'OpenTag']
  18879. ],
  18880. skippedNodes: [0, 25],
  18881. repeatNodeCount: 6,
  18882. tokenData:
  18883. "!#`!aR!WOX$kXY)sYZ)sZ]$k]^)s^p$kpq)sqr$krs*zsv$kvw+dwx2wx}$k}!O3d!O!P$k!P!Q7]!Q![$k![!]8s!]!^$k!^!_>`!_!`!!n!`!a8R!a!c$k!c!}8s!}#R$k#R#S8s#S#T$k#T#o8s#o$f$k$f$g&R$g%W$k%W%o8s%o%p$k%p&a8s&a&b$k&b1p8s1p4U$k4U4d8s4d4e$k4e$IS8s$IS$I`$k$I`$Ib8s$Ib$Kh$k$Kh%#t8s%#t&/x$k&/x&Et8s&Et&FV$k&FV;'S8s;'S;:j<r;:j?&r$k?&r?Ah8s?Ah?BY$k?BY?Mn8s?Mn~$k!Z$vcVPaWw`ypOX$kXZ&RZ]$k]^&R^p$kpq&Rqr$krs&qsv$kvw)Rwx'rx!P$k!P!Q&R!Q!^$k!^!_(k!_!a&R!a$f$k$f$g&R$g~$k!R&[VVPw`ypOr&Rrs&qsv&Rwx'rx!^&R!^!_(k!_~&Rq&xTVPypOv&qwx'Xx!^&q!^!_'g!_~&qP'^RVPOv'Xw!^'X!_~'Xp'lQypOv'gx~'ga'yUVPw`Or'rrs'Xsv'rw!^'r!^!_(]!_~'r`(bRw`Or(]sv(]w~(]!Q(rTw`ypOr(krs'gsv(kwx(]x~(kW)WXaWOX)RZ])R^p)Rqr)Rsw)Rx!P)R!Q!^)R!a$f)R$g~)R!a*O^VPw`ypt^OX&RXY)sYZ)sZ]&R]^)s^p&Rpq)sqr&Rrs&qsv&Rwx'rx!^&R!^!_(k!_~&R!Z+TTvhVPypOv&qwx'Xx!^&q!^!_'g!_~&q!Z+ibaWOX,qXZ.OZ],q]^.O^p,qqr,qrs.Ost/Ztw,qwx.Ox!P,q!P!Q.O!Q!],q!]!^)R!^!a.O!a$f,q$f$g.O$g~,q!Z,vbaWOX,qXZ.OZ],q]^.O^p,qqr,qrs.Ost)Rtw,qwx.Ox!P,q!P!Q.O!Q!],q!]!^.g!^!a.O!a$f,q$f$g.O$g~,q!R.RTOp.Oqs.Ot!].O!]!^.b!^~.O!R.gOW!R!Z.nXW!RaWOX)RZ])R^p)Rqr)Rsw)Rx!P)R!Q!^)R!a$f)R$g~)R!Z/`aaWOX0eXZ1oZ]0e]^1o^p0eqr0ers1osw0ewx1ox!P0e!P!Q1o!Q!]0e!]!^)R!^!a1o!a$f0e$f$g1o$g~0e!Z0jaaWOX0eXZ1oZ]0e]^1o^p0eqr0ers1osw0ewx1ox!P0e!P!Q1o!Q!]0e!]!^2T!^!a1o!a$f0e$f$g1o$g~0e!R1rSOp1oq!]1o!]!^2O!^~1o!R2TOX!R!Z2[XX!RaWOX)RZ])R^p)Rqr)Rsw)Rx!P)R!Q!^)R!a$f)R$g~)R!Z3QUxxVPw`Or'rrs'Xsv'rw!^'r!^!_(]!_~'r!]3oeVPaWw`ypOX$kXZ&RZ]$k]^&R^p$kpq&Rqr$krs&qsv$kvw)Rwx'rx}$k}!O5Q!O!P$k!P!Q&R!Q!^$k!^!_(k!_!a&R!a$f$k$f$g&R$g~$k!]5]dVPaWw`ypOX$kXZ&RZ]$k]^&R^p$kpq&Rqr$krs&qsv$kvw)Rwx'rx!P$k!P!Q&R!Q!^$k!^!_(k!_!`&R!`!a6k!a$f$k$f$g&R$g~$k!T6vVVPw`yp|QOr&Rrs&qsv&Rwx'rx!^&R!^!_(k!_~&R!X7fXVPw`ypOr&Rrs&qsv&Rwx'rx!^&R!^!_(k!_!`&R!`!a8R!a~&R!X8^VbUVPw`ypOr&Rrs&qsv&Rwx'rx!^&R!^!_(k!_~&R!a9S!Y^S[QVPaWw`ypOX$kXZ&RZ]$k]^&R^p$kpq&Rqr$krs&qsv$kvw)Rwx'rx}$k}!O8s!O!P8s!P!Q&R!Q![8s![!]8s!]!^$k!^!_(k!_!a&R!a!c$k!c!}8s!}#R$k#R#S8s#S#T$k#T#o8s#o$f$k$f$g&R$g$}$k$}%O8s%O%W$k%W%o8s%o%p$k%p&a8s&a&b$k&b1p8s1p4U8s4U4d8s4d4e$k4e$IS8s$IS$I`$k$I`$Ib8s$Ib$Je$k$Je$Jg8s$Jg$Kh$k$Kh%#t8s%#t&/x$k&/x&Et8s&Et&FV$k&FV;'S8s;'S;:j<r;:j?&r$k?&r?Ah8s?Ah?BY$k?BY?Mn8s?Mn~$k!a<}eVPaWw`ypOX$kXZ&RZ]$k]^&R^p$kpq&Rqr$krs&qsv$kvw)Rwx'rx!P$k!P!Q&R!Q!^$k!^!_(k!_!a&R!a$f$k$f$g&R$g;=`$k;=`<%l8s<%l~$k!R>gWw`ypOq(kqr?Prs'gsv(kwx(]x!a(k!a!bKh!b~(k!R?WZw`ypOr(krs'gsv(kwx(]x}(k}!O?y!O!f(k!f!gAP!g#W(k#W#XGx#X~(k!R@QVw`ypOr(krs'gsv(kwx(]x}(k}!O@g!O~(k!R@pTw`yp{POr(krs'gsv(kwx(]x~(k!RAWVw`ypOr(krs'gsv(kwx(]x!q(k!q!rAm!r~(k!RAtVw`ypOr(krs'gsv(kwx(]x!e(k!e!fBZ!f~(k!RBbVw`ypOr(krs'gsv(kwx(]x!v(k!v!wBw!w~(k!RCOVw`ypOr(krs'gsv(kwx(]x!{(k!{!|Ce!|~(k!RClVw`ypOr(krs'gsv(kwx(]x!r(k!r!sDR!s~(k!RDYVw`ypOr(krs'gsv(kwx(]x!g(k!g!hDo!h~(k!RDvWw`ypOrDorsE`svDovwEtwxFdx!`Do!`!aG`!a~DoqEeTypOvE`vxEtx!`E`!`!aFV!a~E`PEwRO!`Et!`!aFQ!a~EtPFVOhPqF^QyphPOv'gx~'gaFiVw`OrFdrsEtsvFdvwEtw!`Fd!`!aGO!a~FdaGVRw`hPOr(]sv(]w~(]!RGiTw`yphPOr(krs'gsv(kwx(]x~(k!RHPVw`ypOr(krs'gsv(kwx(]x#c(k#c#dHf#d~(k!RHmVw`ypOr(krs'gsv(kwx(]x#V(k#V#WIS#W~(k!RIZVw`ypOr(krs'gsv(kwx(]x#h(k#h#iIp#i~(k!RIwVw`ypOr(krs'gsv(kwx(]x#m(k#m#nJ^#n~(k!RJeVw`ypOr(krs'gsv(kwx(]x#d(k#d#eJz#e~(k!RKRVw`ypOr(krs'gsv(kwx(]x#X(k#X#YDo#Y~(k!RKoWw`ypOrKhrsLXsvKhvwLmwxM}x!aKh!a!b! e!b~KhqL^TypOvLXvxLmx!aLX!a!bM[!b~LXPLpRO!aLm!a!bLy!b~LmPL|RO!`Lm!`!aMV!a~LmPM[OfPqMaTypOvLXvxLmx!`LX!`!aMp!a~LXqMwQypfPOv'gx~'gaNSVw`OrM}rsLmsvM}vwLmw!aM}!a!bNi!b~M}aNnVw`OrM}rsLmsvM}vwLmw!`M}!`!a! T!a~M}a! [Rw`fPOr(]sv(]w~(]!R! lWw`ypOrKhrsLXsvKhvwLmwxM}x!`Kh!`!a!!U!a~Kh!R!!_Tw`ypfPOr(krs'gsv(kwx(]x~(k!V!!yV_SVPw`ypOr&Rrs&qsv&Rwx'rx!^&R!^!_(k!_~&R",
  18884. tokenizers: [tagStart, selfClosed, commentContent$1$1, 0, 1, 2, 3, 4, 5],
  18885. topRules: { Document: [0, 6] },
  18886. nested: [
  18887. [
  18888. 'elementContent',
  18889. elementContent,
  18890. "%S~RP!^!_U~XP!P!Q[~_dXY[YZ[]^[pq[![!]!m!c!}!m#R#S!m#T#o!m%W%o!m%p&a!m&b1p!m4U4d!m4e$IS!m$I`$Ib!m$Kh%#t!m&/x&Et!m&FV;'S!m;'S;:j$|?&r?Ah!m?BY?Mn!m~!pkXY$eYZ$e]^$epq$e}!O!m!O!P!m!Q![!m![!]!m!`!a$w!c!}!m#R#S!m#T#o!m$}%O!m%W%o!m%p&a!m&b1p!m1p4U!m4U4d!m4e$IS!m$I`$Ib!m$Je$Jg!m$Kh%#t!m&/x&Et!m&FV;'S!m;'S;:j$|?&r?Ah!m?BY?Mn!m~$hTXY$eYZ$e]^$epq$e!`!a$w~$|Op~~%PP;=`<%l!m",
  18891. 42
  18892. ]
  18893. ],
  18894. dialects: { noMatch: 0 },
  18895. tokenPrec: 234
  18896. })
  18897. const Targets = ['_blank', '_self', '_top', '_parent']
  18898. const Charsets = ['ascii', 'utf-8', 'utf-16', 'latin1', 'latin1']
  18899. const Methods = ['get', 'post', 'put', 'delete']
  18900. const Encs = ['application/x-www-form-urlencoded', 'multipart/form-data', 'text/plain']
  18901. const Bool$1 = ['true', 'false']
  18902. const S = {}
  18903. const Tags = {
  18904. a: { attrs: { href: null, ping: null, type: null, media: null, target: Targets, hreflang: null } },
  18905. abbr: S,
  18906. acronym: S,
  18907. address: S,
  18908. applet: S,
  18909. area: { attrs: { alt: null, coords: null, href: null, target: null, ping: null, media: null, hreflang: null, type: null, shape: ['default', 'rect', 'circle', 'poly'] } },
  18910. article: S,
  18911. aside: S,
  18912. audio: {
  18913. attrs: { src: null, mediagroup: null, crossorigin: ['anonymous', 'use-credentials'], preload: ['none', 'metadata', 'auto'], autoplay: ['autoplay'], loop: ['loop'], controls: ['controls'] }
  18914. },
  18915. b: S,
  18916. base: { attrs: { href: null, target: Targets } },
  18917. basefont: S,
  18918. bdi: S,
  18919. bdo: S,
  18920. big: S,
  18921. blockquote: { attrs: { cite: null } },
  18922. body: S,
  18923. br: S,
  18924. button: {
  18925. attrs: {
  18926. form: null,
  18927. formaction: null,
  18928. name: null,
  18929. value: null,
  18930. autofocus: ['autofocus'],
  18931. disabled: ['autofocus'],
  18932. formenctype: Encs,
  18933. formmethod: Methods,
  18934. formnovalidate: ['novalidate'],
  18935. formtarget: Targets,
  18936. type: ['submit', 'reset', 'button']
  18937. }
  18938. },
  18939. canvas: { attrs: { width: null, height: null } },
  18940. caption: S,
  18941. center: S,
  18942. cite: S,
  18943. code: S,
  18944. col: { attrs: { span: null } },
  18945. colgroup: { attrs: { span: null } },
  18946. command: { attrs: { type: ['command', 'checkbox', 'radio'], label: null, icon: null, radiogroup: null, command: null, title: null, disabled: ['disabled'], checked: ['checked'] } },
  18947. data: { attrs: { value: null } },
  18948. datagrid: { attrs: { disabled: ['disabled'], multiple: ['multiple'] } },
  18949. datalist: { attrs: { data: null } },
  18950. dd: S,
  18951. del: { attrs: { cite: null, datetime: null } },
  18952. details: { attrs: { open: ['open'] } },
  18953. dfn: S,
  18954. dir: S,
  18955. div: S,
  18956. dl: S,
  18957. dt: S,
  18958. em: S,
  18959. embed: { attrs: { src: null, type: null, width: null, height: null } },
  18960. eventsource: { attrs: { src: null } },
  18961. fieldset: { attrs: { disabled: ['disabled'], form: null, name: null } },
  18962. figcaption: S,
  18963. figure: S,
  18964. font: S,
  18965. footer: S,
  18966. form: { attrs: { action: null, name: null, 'accept-charset': Charsets, autocomplete: ['on', 'off'], enctype: Encs, method: Methods, novalidate: ['novalidate'], target: Targets } },
  18967. frame: S,
  18968. frameset: S,
  18969. h1: S,
  18970. h2: S,
  18971. h3: S,
  18972. h4: S,
  18973. h5: S,
  18974. h6: S,
  18975. head: { children: ['title', 'base', 'link', 'style', 'meta', 'script', 'noscript', 'command'] },
  18976. header: S,
  18977. hgroup: S,
  18978. hr: S,
  18979. html: { attrs: { manifest: null }, children: ['head', 'body'] },
  18980. i: S,
  18981. iframe: {
  18982. attrs: { src: null, srcdoc: null, name: null, width: null, height: null, sandbox: ['allow-top-navigation', 'allow-same-origin', 'allow-forms', 'allow-scripts'], seamless: ['seamless'] }
  18983. },
  18984. img: { attrs: { alt: null, src: null, ismap: null, usemap: null, width: null, height: null, crossorigin: ['anonymous', 'use-credentials'] } },
  18985. input: {
  18986. attrs: {
  18987. alt: null,
  18988. dirname: null,
  18989. form: null,
  18990. formaction: null,
  18991. height: null,
  18992. list: null,
  18993. max: null,
  18994. maxlength: null,
  18995. min: null,
  18996. name: null,
  18997. pattern: null,
  18998. placeholder: null,
  18999. size: null,
  19000. src: null,
  19001. step: null,
  19002. value: null,
  19003. width: null,
  19004. accept: ['audio/*', 'video/*', 'image/*'],
  19005. autocomplete: ['on', 'off'],
  19006. autofocus: ['autofocus'],
  19007. checked: ['checked'],
  19008. disabled: ['disabled'],
  19009. formenctype: Encs,
  19010. formmethod: Methods,
  19011. formnovalidate: ['novalidate'],
  19012. formtarget: Targets,
  19013. multiple: ['multiple'],
  19014. readonly: ['readonly'],
  19015. required: ['required'],
  19016. type: [
  19017. 'hidden',
  19018. 'text',
  19019. 'search',
  19020. 'tel',
  19021. 'url',
  19022. 'email',
  19023. 'password',
  19024. 'datetime',
  19025. 'date',
  19026. 'month',
  19027. 'week',
  19028. 'time',
  19029. 'datetime-local',
  19030. 'number',
  19031. 'range',
  19032. 'color',
  19033. 'checkbox',
  19034. 'radio',
  19035. 'file',
  19036. 'submit',
  19037. 'image',
  19038. 'reset',
  19039. 'button'
  19040. ]
  19041. }
  19042. },
  19043. ins: { attrs: { cite: null, datetime: null } },
  19044. kbd: S,
  19045. keygen: { attrs: { challenge: null, form: null, name: null, autofocus: ['autofocus'], disabled: ['disabled'], keytype: ['RSA'] } },
  19046. label: { attrs: { for: null, form: null } },
  19047. legend: S,
  19048. li: { attrs: { value: null } },
  19049. link: { attrs: { href: null, type: null, hreflang: null, media: null, sizes: ['all', '16x16', '16x16 32x32', '16x16 32x32 64x64'] } },
  19050. map: { attrs: { name: null } },
  19051. mark: S,
  19052. menu: { attrs: { label: null, type: ['list', 'context', 'toolbar'] } },
  19053. meta: {
  19054. attrs: {
  19055. content: null,
  19056. charset: Charsets,
  19057. name: ['viewport', 'application-name', 'author', 'description', 'generator', 'keywords'],
  19058. 'http-equiv': ['content-language', 'content-type', 'default-style', 'refresh']
  19059. }
  19060. },
  19061. meter: { attrs: { value: null, min: null, low: null, high: null, max: null, optimum: null } },
  19062. nav: S,
  19063. noframes: S,
  19064. noscript: S,
  19065. object: { attrs: { data: null, type: null, name: null, usemap: null, form: null, width: null, height: null, typemustmatch: ['typemustmatch'] } },
  19066. ol: { attrs: { reversed: ['reversed'], start: null, type: ['1', 'a', 'A', 'i', 'I'] }, children: ['li', 'script', 'template', 'ul', 'ol'] },
  19067. optgroup: { attrs: { disabled: ['disabled'], label: null } },
  19068. option: { attrs: { disabled: ['disabled'], label: null, selected: ['selected'], value: null } },
  19069. output: { attrs: { for: null, form: null, name: null } },
  19070. p: S,
  19071. param: { attrs: { name: null, value: null } },
  19072. pre: S,
  19073. progress: { attrs: { value: null, max: null } },
  19074. q: { attrs: { cite: null } },
  19075. rp: S,
  19076. rt: S,
  19077. ruby: S,
  19078. s: S,
  19079. samp: S,
  19080. script: { attrs: { type: ['text/javascript'], src: null, async: ['async'], defer: ['defer'], charset: Charsets } },
  19081. section: S,
  19082. select: { attrs: { form: null, name: null, size: null, autofocus: ['autofocus'], disabled: ['disabled'], multiple: ['multiple'] } },
  19083. small: S,
  19084. source: { attrs: { src: null, type: null, media: null } },
  19085. span: S,
  19086. strike: S,
  19087. strong: S,
  19088. style: { attrs: { type: ['text/css'], media: null, scoped: null } },
  19089. sub: S,
  19090. summary: S,
  19091. sup: S,
  19092. table: S,
  19093. tbody: S,
  19094. td: { attrs: { colspan: null, rowspan: null, headers: null } },
  19095. textarea: {
  19096. attrs: {
  19097. dirname: null,
  19098. form: null,
  19099. maxlength: null,
  19100. name: null,
  19101. placeholder: null,
  19102. rows: null,
  19103. cols: null,
  19104. autofocus: ['autofocus'],
  19105. disabled: ['disabled'],
  19106. readonly: ['readonly'],
  19107. required: ['required'],
  19108. wrap: ['soft', 'hard']
  19109. }
  19110. },
  19111. tfoot: S,
  19112. th: { attrs: { colspan: null, rowspan: null, headers: null, scope: ['row', 'col', 'rowgroup', 'colgroup'] } },
  19113. thead: S,
  19114. time: { attrs: { datetime: null } },
  19115. title: S,
  19116. tr: S,
  19117. track: { attrs: { src: null, label: null, default: null, kind: ['subtitles', 'captions', 'descriptions', 'chapters', 'metadata'], srclang: null } },
  19118. tt: S,
  19119. u: S,
  19120. ul: { children: ['li', 'script', 'template', 'ul', 'ol'] },
  19121. var: S,
  19122. video: {
  19123. attrs: {
  19124. src: null,
  19125. poster: null,
  19126. width: null,
  19127. height: null,
  19128. crossorigin: ['anonymous', 'use-credentials'],
  19129. preload: ['auto', 'metadata', 'none'],
  19130. autoplay: ['autoplay'],
  19131. mediagroup: ['movie'],
  19132. muted: ['muted'],
  19133. controls: ['controls']
  19134. }
  19135. },
  19136. wbr: S
  19137. }
  19138. const GlobalAttrs = {
  19139. accesskey: null,
  19140. class: null,
  19141. contenteditable: Bool$1,
  19142. contextmenu: null,
  19143. dir: ['ltr', 'rtl', 'auto'],
  19144. draggable: ['true', 'false', 'auto'],
  19145. dropzone: ['copy', 'move', 'link', 'string:', 'file:'],
  19146. hidden: ['hidden'],
  19147. id: null,
  19148. inert: ['inert'],
  19149. itemid: null,
  19150. itemprop: null,
  19151. itemref: null,
  19152. itemscope: ['itemscope'],
  19153. itemtype: null,
  19154. lang: ['ar', 'bn', 'de', 'en-GB', 'en-US', 'es', 'fr', 'hi', 'id', 'ja', 'pa', 'pt', 'ru', 'tr', 'zh'],
  19155. spellcheck: Bool$1,
  19156. autocorrect: Bool$1,
  19157. autocapitalize: Bool$1,
  19158. style: null,
  19159. tabindex: null,
  19160. title: null,
  19161. translate: ['yes', 'no'],
  19162. onclick: null,
  19163. rel: ['stylesheet', 'alternate', 'author', 'bookmark', 'help', 'license', 'next', 'nofollow', 'noreferrer', 'prefetch', 'prev', 'search', 'tag'],
  19164. role: 'alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer'.split(
  19165. ' '
  19166. ),
  19167. 'aria-activedescendant': null,
  19168. 'aria-atomic': Bool$1,
  19169. 'aria-autocomplete': ['inline', 'list', 'both', 'none'],
  19170. 'aria-busy': Bool$1,
  19171. 'aria-checked': ['true', 'false', 'mixed', 'undefined'],
  19172. 'aria-controls': null,
  19173. 'aria-describedby': null,
  19174. 'aria-disabled': Bool$1,
  19175. 'aria-dropeffect': null,
  19176. 'aria-expanded': ['true', 'false', 'undefined'],
  19177. 'aria-flowto': null,
  19178. 'aria-grabbed': ['true', 'false', 'undefined'],
  19179. 'aria-haspopup': Bool$1,
  19180. 'aria-hidden': Bool$1,
  19181. 'aria-invalid': ['true', 'false', 'grammar', 'spelling'],
  19182. 'aria-label': null,
  19183. 'aria-labelledby': null,
  19184. 'aria-level': null,
  19185. 'aria-live': ['off', 'polite', 'assertive'],
  19186. 'aria-multiline': Bool$1,
  19187. 'aria-multiselectable': Bool$1,
  19188. 'aria-owns': null,
  19189. 'aria-posinset': null,
  19190. 'aria-pressed': ['true', 'false', 'mixed', 'undefined'],
  19191. 'aria-readonly': Bool$1,
  19192. 'aria-relevant': null,
  19193. 'aria-required': Bool$1,
  19194. 'aria-selected': ['true', 'false', 'undefined'],
  19195. 'aria-setsize': null,
  19196. 'aria-sort': ['ascending', 'descending', 'none', 'other'],
  19197. 'aria-valuemax': null,
  19198. 'aria-valuemin': null,
  19199. 'aria-valuenow': null,
  19200. 'aria-valuetext': null
  19201. }
  19202. const AllTags = Object.keys(Tags)
  19203. const GlobalAttrNames = Object.keys(GlobalAttrs)
  19204. function elementName$1(doc, tree) {
  19205. let tag = tree.firstChild
  19206. let name = tag && tag.getChild('TagName')
  19207. return name ? doc.sliceString(name.from, name.to) : ''
  19208. }
  19209. function findParentElement$1(tree, skip = false) {
  19210. for (let cur = tree.parent; cur; cur = cur.parent)
  19211. if (cur.name == 'Element') {
  19212. if (skip) skip = false
  19213. else return cur
  19214. }
  19215. return null
  19216. }
  19217. function allowedChildren(doc, tree) {
  19218. let parent = findParentElement$1(tree, true)
  19219. let parentInfo = parent ? Tags[elementName$1(doc, parent)] : null
  19220. return (parentInfo === null || parentInfo === void 0 ? void 0 : parentInfo.children) || AllTags
  19221. }
  19222. function openTags(doc, tree) {
  19223. let open = []
  19224. for (let parent = tree; (parent = findParentElement$1(parent)); ) {
  19225. let tagName = elementName$1(doc, parent)
  19226. if (tagName && parent.lastChild.name == 'CloseTag') break
  19227. if (tagName && open.indexOf(tagName) < 0 && (tree.name == 'EndTag' || tree.from >= parent.firstChild.to)) open.push(tagName)
  19228. }
  19229. return open
  19230. }
  19231. const identifier = /^[:\-\.\w\u00b7-\uffff]+$/
  19232. function completeTag(state, tree, from, to) {
  19233. let end = /\s*>/.test(state.sliceDoc(to, to + 5)) ? '' : '>'
  19234. return {
  19235. from,
  19236. to,
  19237. options: allowedChildren(state.doc, tree)
  19238. .map(tagName => ({ label: tagName, type: 'type' }))
  19239. .concat(openTags(state.doc, tree).map((tag, i) => ({ label: '/' + tag, apply: '/' + tag + end, type: 'type', boost: 99 - i }))),
  19240. span: /^\/?[:\-\.\w\u00b7-\uffff]*$/
  19241. }
  19242. }
  19243. function completeCloseTag(state, tree, from, to) {
  19244. let end = /\s*>/.test(state.sliceDoc(to, to + 5)) ? '' : '>'
  19245. return { from, to, options: openTags(state.doc, tree).map((tag, i) => ({ label: tag, apply: tag + end, type: 'type', boost: 99 - i })), span: identifier }
  19246. }
  19247. function completeStartTag(state, tree, pos) {
  19248. let options = [],
  19249. level = 0
  19250. for (let _i199 = 0, _allowedChildren = allowedChildren(state.doc, tree), _length199 = _allowedChildren.length; _i199 < _length199; _i199++) {
  19251. let tagName = _allowedChildren[_i199]
  19252. options.push({ label: '<' + tagName, type: 'type' })
  19253. }
  19254. for (let _i200 = 0, _openTags = openTags(state.doc, tree), _length200 = _openTags.length; _i200 < _length200; _i200++) {
  19255. let open = _openTags[_i200]
  19256. options.push({ label: '</' + open + '>', type: 'type', boost: 99 - level++ })
  19257. }
  19258. return { from: pos, to: pos, options, span: /^<\/?[:\-\.\w\u00b7-\uffff]*$/ }
  19259. }
  19260. function completeAttrName(state, tree, from, to) {
  19261. let elt = findParentElement$1(tree),
  19262. info = elt ? Tags[elementName$1(state.doc, elt)] : null
  19263. let names = info && info.attrs ? Object.keys(info.attrs).concat(GlobalAttrNames) : GlobalAttrNames
  19264. return { from, to, options: names.map(attrName => ({ label: attrName, type: 'property' })), span: identifier }
  19265. }
  19266. function completeAttrValue(state, tree, from, to) {
  19267. var _a
  19268. let nameNode = (_a = tree.parent) === null || _a === void 0 ? void 0 : _a.getChild('AttributeName')
  19269. let options = [],
  19270. span = undefined
  19271. if (nameNode) {
  19272. let attrName = state.sliceDoc(nameNode.from, nameNode.to)
  19273. let attrs = GlobalAttrs[attrName]
  19274. if (!attrs) {
  19275. let elt = findParentElement$1(tree),
  19276. info = elt ? Tags[elementName$1(state.doc, elt)] : null
  19277. attrs = (info === null || info === void 0 ? void 0 : info.attrs) && info.attrs[attrName]
  19278. }
  19279. if (attrs) {
  19280. let base = state.sliceDoc(from, to).toLowerCase(),
  19281. quoteStart = '"',
  19282. quoteEnd = '"'
  19283. if (/^['"]/.test(base)) {
  19284. span = base[0] == '"' ? /^[^"]*$/ : /^[^']*$/
  19285. quoteStart = ''
  19286. quoteEnd = state.sliceDoc(to, to + 1) == base[0] ? '' : base[0]
  19287. base = base.slice(1)
  19288. from++
  19289. } else {
  19290. span = /^[^\s<>='"]*$/
  19291. }
  19292. for (let _i201 = 0, _attrs = attrs, _length201 = _attrs.length; _i201 < _length201; _i201++) {
  19293. let value = _attrs[_i201]
  19294. options.push({ label: value, apply: quoteStart + value + quoteEnd, type: 'constant' })
  19295. }
  19296. }
  19297. }
  19298. return { from, to, options, span }
  19299. }
  19300. function completeHTML(context) {
  19301. let { state, pos } = context,
  19302. around = syntaxTree(state).resolve(pos),
  19303. tree = around.resolve(pos, -1)
  19304. for (let scan = pos, before; around == tree && (before = tree.childBefore(scan)); ) {
  19305. let last = before.lastChild
  19306. if (!last || !last.type.isError || last.from < last.to) break
  19307. around = tree = before
  19308. scan = last.from
  19309. }
  19310. if (tree.name == 'TagName') {
  19311. return tree.parent && /CloseTag$/.test(tree.parent.name) ? completeCloseTag(state, tree, tree.from, pos) : completeTag(state, tree, tree.from, pos)
  19312. } else if (tree.name == 'StartTag') {
  19313. return completeTag(state, tree, pos, pos)
  19314. } else if (tree.name == 'StartCloseTag' || tree.name == 'IncompleteCloseTag') {
  19315. return completeCloseTag(state, tree, pos, pos)
  19316. } else if ((context.explicit && (tree.name == 'OpenTag' || tree.name == 'SelfClosingTag')) || tree.name == 'AttributeName') {
  19317. return completeAttrName(state, tree, tree.name == 'AttributeName' ? tree.from : pos, pos)
  19318. } else if (tree.name == 'Is' || tree.name == 'AttributeValue' || tree.name == 'UnquotedAttributeValue') {
  19319. return completeAttrValue(state, tree, tree.name == 'Is' ? pos : tree.from, pos)
  19320. } else if (context.explicit && (around.name == 'Element' || around.name == 'Text' || around.name == 'Document')) {
  19321. return completeStartTag(state, tree, pos)
  19322. } else {
  19323. return null
  19324. }
  19325. }
  19326. const htmlLanguage = LezerLanguage.define({
  19327. parser: parser$5.configure({
  19328. props: [
  19329. indentNodeProp.add({
  19330. Element(context) {
  19331. let after = /^(\s*)(<\/)?/.exec(context.textAfter)
  19332. if (context.node.to <= context.pos + after[0].length) return context.continue()
  19333. return context.lineIndent(context.state.doc.lineAt(context.node.from)) + (after[2] ? 0 : context.unit)
  19334. },
  19335. 'OpenTag CloseTag SelfClosingTag'(context) {
  19336. return context.column(context.node.from) + context.unit
  19337. },
  19338. Document(context) {
  19339. if (context.pos + /\s*/.exec(context.textAfter)[0].length < context.node.to) return context.continue()
  19340. let endElt = null,
  19341. close
  19342. for (let cur = context.node; ; ) {
  19343. let last = cur.lastChild
  19344. if (!last || last.name != 'Element' || last.to != cur.to) break
  19345. endElt = cur = last
  19346. }
  19347. if (endElt && !((close = endElt.lastChild) && (close.name == 'CloseTag' || close.name == 'SelfClosingTag')))
  19348. return context.lineIndent(context.state.doc.lineAt(endElt.from)) + context.unit
  19349. return null
  19350. }
  19351. }),
  19352. foldNodeProp.add({
  19353. Element(node) {
  19354. let first = node.firstChild,
  19355. last = node.lastChild
  19356. if (!first || first.name != 'OpenTag') return null
  19357. return { from: first.to, to: last.name == 'CloseTag' ? last.from : node.to }
  19358. }
  19359. }),
  19360. styleTags({
  19361. AttributeValue: tags$1.string,
  19362. 'Text RawText': tags$1.content,
  19363. 'StartTag StartCloseTag SelfCloserEndTag EndTag SelfCloseEndTag': tags$1.angleBracket,
  19364. TagName: tags$1.tagName,
  19365. 'MismatchedCloseTag/TagName': [tags$1.tagName, tags$1.invalid],
  19366. AttributeName: tags$1.propertyName,
  19367. UnquotedAttributeValue: tags$1.string,
  19368. Is: tags$1.definitionOperator,
  19369. 'EntityReference CharacterReference': tags$1.character,
  19370. Comment: tags$1.blockComment,
  19371. ProcessingInst: tags$1.processingInstruction,
  19372. DoctypeDecl: tags$1.documentMeta
  19373. })
  19374. ],
  19375. nested: configureNesting([
  19376. {
  19377. tag: 'script',
  19378. attrs(attrs) {
  19379. return !attrs.type || /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(attrs.type)
  19380. },
  19381. parser: javascriptLanguage.parser
  19382. },
  19383. {
  19384. tag: 'style',
  19385. attrs(attrs) {
  19386. return (!attrs.lang || attrs.lang == 'css') && (!attrs.type || /^(text\/)?(x-)?(stylesheet|css)$/i.test(attrs.type))
  19387. },
  19388. parser: cssLanguage.parser
  19389. }
  19390. ])
  19391. }),
  19392. languageData: { commentTokens: { block: { open: '<!--', close: '-->' } }, indentOnInput: /^\s*<\/$/ }
  19393. })
  19394. const htmlCompletion = htmlLanguage.data.of({ autocomplete: completeHTML })
  19395. function html() {
  19396. return new LanguageSupport(htmlLanguage, [htmlCompletion, javascript().support, css().support])
  19397. }
  19398. var _m28 = Object.freeze({ __proto__: null, html: html, htmlCompletion: htmlCompletion, htmlLanguage: htmlLanguage })
  19399. const whitespace = 34,
  19400. LineComment = 1,
  19401. BlockComment = 2,
  19402. String$1 = 3,
  19403. Number$1 = 4,
  19404. Bool = 5,
  19405. Null = 6,
  19406. ParenL = 7,
  19407. ParenR = 8,
  19408. BraceL = 9,
  19409. BraceR = 10,
  19410. BracketL = 11,
  19411. BracketR = 12,
  19412. Semi = 13,
  19413. Dot$1 = 14,
  19414. Operator = 15,
  19415. Punctuation$1 = 16,
  19416. SpecialVar = 17,
  19417. Identifier$1 = 18,
  19418. QuotedIdentifier = 19,
  19419. Keyword = 20,
  19420. Type$1 = 21,
  19421. Builtin = 22
  19422. function isAlpha(ch) {
  19423. return (ch >= 65 && ch <= 90) || (ch >= 97 && ch <= 122) || (ch >= 48 && ch <= 57)
  19424. }
  19425. function isHexDigit(ch) {
  19426. return (ch >= 48 && ch <= 57) || (ch >= 97 && ch <= 102) || (ch >= 65 && ch <= 70)
  19427. }
  19428. function readLiteral(input, pos, endQuote, backslashEscapes) {
  19429. for (let escaped = false; ; ) {
  19430. let next = input.get(pos++)
  19431. if (next < 0) return pos - 1
  19432. if (next == endQuote && !escaped) return pos
  19433. escaped = backslashEscapes && !escaped && next == 92
  19434. }
  19435. }
  19436. function readWord(input, pos) {
  19437. for (; ; pos++) {
  19438. let next = input.get(pos)
  19439. if (next != 95 && !isAlpha(next)) break
  19440. }
  19441. return pos
  19442. }
  19443. function readWordOrQuoted(input, pos) {
  19444. let next = input.get(pos)
  19445. if (next == 39 || next == 34 || next == 96) return readLiteral(input, pos + 1, next, false)
  19446. return readWord(input, pos)
  19447. }
  19448. function readNumber(input, pos, sawDot) {
  19449. let next
  19450. for (; ; pos++) {
  19451. next = input.get(pos)
  19452. if (next == 46) {
  19453. if (sawDot) break
  19454. sawDot = true
  19455. } else if (next < 48 || next > 57) {
  19456. break
  19457. }
  19458. }
  19459. if (next == 69 || next == 101) {
  19460. next = input.get(++pos)
  19461. if (next == 43 || next == 45) pos++
  19462. for (; ; pos++) {
  19463. next = input.get(pos)
  19464. if (next < 48 || next > 57) break
  19465. }
  19466. }
  19467. return pos
  19468. }
  19469. function eol(input, pos) {
  19470. for (; ; pos++) {
  19471. let next = input.get(pos)
  19472. if (next < 0 || next == 10) return pos
  19473. }
  19474. }
  19475. function inString(ch, str) {
  19476. for (let i = 0; i < str.length; i++) if (str.charCodeAt(i) == ch) return true
  19477. return false
  19478. }
  19479. const Space = ' \t\r\n'
  19480. function keywords(keywords, types, builtin) {
  19481. let result = Object.create(null)
  19482. result['true'] = result['false'] = Bool
  19483. result['null'] = result['unknown'] = Null
  19484. for (let _i202 = 0, _keywords$split = keywords.split(' '), _length202 = _keywords$split.length; _i202 < _length202; _i202++) {
  19485. let kw = _keywords$split[_i202]
  19486. if (kw) result[kw] = Keyword
  19487. }
  19488. for (let _i203 = 0, _types$split = types.split(' '), _length203 = _types$split.length; _i203 < _length203; _i203++) {
  19489. let tp = _types$split[_i203]
  19490. if (tp) result[tp] = Type$1
  19491. }
  19492. for (let _i204 = 0, _split = (builtin || '').split(' '), _length204 = _split.length; _i204 < _length204; _i204++) {
  19493. let kw = _split[_i204]
  19494. if (kw) result[kw] = Builtin
  19495. }
  19496. return result
  19497. }
  19498. const SQLTypes =
  19499. 'array binary bit boolean char character clob date decimal double float int integer interval large national nchar nclob numeric object precision real smallint time timestamp varchar varying '
  19500. const SQLKeywords =
  19501. 'absolute action add after all allocate alter and any are as asc assertion at authorization before begin between blob both breadth by call cascade cascaded case cast catalog check close collate collation column commit condition connect connection constraint constraints constructor continue corresponding count create cross cube current current_date current_default_transform_group current_transform_group_for_type current_path current_role current_time current_timestamp current_user cursor cycle data day deallocate dec declare default deferrable deferred delete depth deref desc describe descriptor deterministic diagnostics disconnect distinct do domain drop dynamic each else elseif end end-exec equals escape except exception exec execute exists exit external fetch first for foreign found from free full function general get global go goto grant group grouping handle having hold hour identity if immediate in indicator initially inner inout input insert intersect into is isolation join key language last lateral leading leave left level like limit local localtime localtimestamp locator loop map match method minute modifies module month names natural nesting new next no none not of old on only open option or order ordinality out outer output overlaps pad parameter partial path prepare preserve primary prior privileges procedure public read reads recursive redo ref references referencing relative release repeat resignal restrict result return returns revoke right role rollback rollup routine row rows savepoint schema scroll search second section select session session_user set sets signal similar size some space specific specifictype sql sqlexception sqlstate sqlwarning start state static system_user table temporary then timezone_hour timezone_minute to trailing transaction translation treat trigger under undo union unique unnest until update usage user using value values view when whenever where while with without work write year zone '
  19502. const defaults = {
  19503. backslashEscapes: false,
  19504. hashComments: false,
  19505. spaceAfterDashes: false,
  19506. slashComments: false,
  19507. doubleQuotedStrings: false,
  19508. charSetCasts: false,
  19509. operatorChars: '*+-%<>!=&|~^/',
  19510. specialVar: '?',
  19511. identifierQuotes: '"',
  19512. words: keywords(SQLKeywords, SQLTypes)
  19513. }
  19514. function dialect(spec, kws, types, builtin) {
  19515. let dialect = {}
  19516. for (let prop in defaults) dialect[prop] = (spec.hasOwnProperty(prop) ? spec : defaults)[prop]
  19517. if (kws) dialect.words = keywords(kws, types || '', builtin)
  19518. return dialect
  19519. }
  19520. function tokensFor(d) {
  19521. return new ExternalTokenizer((input, token) => {
  19522. var _a
  19523. let pos = token.start,
  19524. next = input.get(pos++),
  19525. next2 = input.get(pos)
  19526. if (inString(next, Space)) {
  19527. while (inString(input.get(pos), Space)) pos++
  19528. token.accept(whitespace, pos)
  19529. } else if (next == 39 || (next == 34 && d.doubleQuotedStrings)) {
  19530. token.accept(String$1, readLiteral(input, pos, next, d.backslashEscapes))
  19531. } else if ((next == 35 && d.hashComments) || (next == 47 && next2 == 47 && d.slashComments)) {
  19532. token.accept(LineComment, eol(input, pos))
  19533. } else if (next == 45 && next2 == 45 && (!d.spaceAfterDashes || input.get(pos + 1) == 32)) {
  19534. token.accept(LineComment, eol(input, pos + 1))
  19535. } else if (next == 47 && next2 == 42) {
  19536. pos++
  19537. for (let prev = -1, depth = 1; ; ) {
  19538. let next = input.get(pos++)
  19539. if (next < 0) {
  19540. pos--
  19541. break
  19542. } else if (prev == 42 && next == 47) {
  19543. depth--
  19544. if (!depth) break
  19545. next = -1
  19546. } else if (prev == 47 && next == 42) {
  19547. depth++
  19548. next = -1
  19549. }
  19550. prev = next
  19551. }
  19552. token.accept(BlockComment, pos)
  19553. } else if ((next == 101 || next == 69) && next2 == 39) {
  19554. token.accept(String$1, readLiteral(input, pos + 1, 39, true))
  19555. } else if ((next == 110 || next == 78) && next2 == 39 && d.charSetCasts) {
  19556. token.accept(String$1, readLiteral(input, pos + 1, 39, d.backslashEscapes))
  19557. } else if (next == 95 && d.charSetCasts) {
  19558. for (;;) {
  19559. let next = input.get(pos++)
  19560. if (next == 39 && pos > token.start + 2) {
  19561. token.accept(String$1, readLiteral(input, pos, 39, d.backslashEscapes))
  19562. break
  19563. }
  19564. if (!isAlpha(next)) break
  19565. }
  19566. } else if (next == 40) {
  19567. token.accept(ParenL, pos)
  19568. } else if (next == 41) {
  19569. token.accept(ParenR, pos)
  19570. } else if (next == 123) {
  19571. token.accept(BraceL, pos)
  19572. } else if (next == 125) {
  19573. token.accept(BraceR, pos)
  19574. } else if (next == 91) {
  19575. token.accept(BracketL, pos)
  19576. } else if (next == 93) {
  19577. token.accept(BracketR, pos)
  19578. } else if (next == 59) {
  19579. token.accept(Semi, pos)
  19580. } else if ((next == 48 && (next2 == 98 || next2 == 66)) || ((next == 98 || next == 66) && next2 == 39)) {
  19581. let quoted = next2 == 39
  19582. pos++
  19583. while ((next = input.get(pos)) == 48 || next == 49) pos++
  19584. if (quoted && next == 39) pos++
  19585. token.accept(Number$1, pos)
  19586. } else if ((next == 48 && (next2 == 120 || next2 == 88)) || ((next == 120 || next == 88) && next2 == 39)) {
  19587. let quoted = next2 == 39
  19588. pos++
  19589. while (isHexDigit((next = input.get(pos)))) pos++
  19590. if (quoted && next == 39) pos++
  19591. token.accept(Number$1, pos)
  19592. } else if (next == 46 && next2 >= 48 && next2 <= 57) {
  19593. token.accept(Number$1, readNumber(input, pos + 1, true))
  19594. } else if (next == 46) {
  19595. token.accept(Dot$1, pos)
  19596. } else if (next >= 48 && next <= 57) {
  19597. token.accept(Number$1, readNumber(input, pos, false))
  19598. } else if (inString(next, d.operatorChars)) {
  19599. while (inString(input.get(pos), d.operatorChars)) pos++
  19600. token.accept(Operator, pos)
  19601. } else if (inString(next, d.specialVar)) {
  19602. token.accept(SpecialVar, readWordOrQuoted(input, next2 == next ? pos + 1 : pos))
  19603. } else if (inString(next, d.identifierQuotes)) {
  19604. token.accept(QuotedIdentifier, readLiteral(input, pos, next, false))
  19605. } else if (next == 58 || next == 44) {
  19606. token.accept(Punctuation$1, pos)
  19607. } else if (isAlpha(next)) {
  19608. pos = readWord(input, pos)
  19609. token.accept((_a = d.words[input.read(token.start, pos).toLowerCase()]) !== null && _a !== void 0 ? _a : Identifier$1, pos)
  19610. }
  19611. })
  19612. }
  19613. const tokens = tokensFor(defaults)
  19614. const parser$1$1 = Parser.deserialize({
  19615. version: 13,
  19616. states:
  19617. "%dQ]QQOOO#kQRO'#DQO#rQQO'#CuO%RQQO'#CvO%YQQO'#CwO%aQQO'#CxOOQQ'#DQ'#DQOOQQ'#C{'#C{O&lQRO'#CyOOQQ'#Ct'#CtOOQQ'#Cz'#CzQ]QQOOQOQQOOO&vQQO,59aO'RQQO,59aO'WQQO'#DQOOQQ,59b,59bO'eQQO,59bOOQQ,59c,59cO'lQQO,59cOOQQ,59d,59dO'sQQO,59dOOQQ-E6y-E6yOOQQ,59`,59`OOQQ-E6x-E6xOOQQ'#C|'#C|OOQQ1G.{1G.{O&vQQO1G.{OOQQ1G.|1G.|OOQQ1G.}1G.}OOQQ1G/O1G/OP'zQQO'#C{POQQ-E6z-E6zOOQQ7+$g7+$g",
  19618. stateData:
  19619. '(R~OrOSPOSQOS~ORUOSUOTUOUUOVROXSOZTO]XO^QO_UO`UOaPObPOcPOdUOeUOfUO~O^]ORtXStXTtXUtXVtXXtXZtX]tX_tX`tXatXbtXctXdtXetXftX~OqtX~P!dOa^Ob^Oc^O~ORUOSUOTUOUUOVROXSOZTO^QO_UO`UOa_Ob_Oc_OdUOeUOfUO~OW`O~P#}OYbO~P#}O[dO~P#}ORUOSUOTUOUUOVROXSOZTO^QO_UO`UOaPObPOcPOdUOeUOfUO~O]gOqmX~P%hOaiObiOciO~O^kO~OWtXYtX[tX~P!dOWlO~P#}OYmO~P#}O[nO~P#}O]gO~P#}O',
  19620. goto: '#YuPPPPPPPPPPPPPPPPPPPPPPPPvzzzz!W![!b!vPPP!|TYOZeUORSTWZaceoT[OZQZORhZSWOZQaRQcSQeTZfWaceoQj]RqkeVORSTWZaceo',
  19621. nodeNames:
  19622. '⚠ LineComment BlockComment String Number Bool Null ( ) [ ] { } ; . Operator Punctuation SpecialVar Identifier QuotedIdentifier Keyword Type Builtin Script Statement CompositeIdentifier Parens Braces Brackets Statement',
  19623. maxTerm: 36,
  19624. skippedNodes: [0, 1, 2],
  19625. repeatNodeCount: 3,
  19626. tokenData: 'RORO',
  19627. tokenizers: [0, tokens],
  19628. topRules: { Script: [0, 23] },
  19629. tokenPrec: 0
  19630. })
  19631. function tokenBefore(tree) {
  19632. let cursor = tree.cursor.moveTo(tree.from, -1)
  19633. while (/Comment/.test(cursor.name)) cursor.moveTo(cursor.from, -1)
  19634. return cursor.node
  19635. }
  19636. function stripQuotes(name) {
  19637. let quoted = /^[`'"](.*)[`'"]$/.exec(name)
  19638. return quoted ? quoted[1] : name
  19639. }
  19640. function sourceContext(state, startPos) {
  19641. let pos = syntaxTree(state).resolve(startPos, -1)
  19642. let empty = false
  19643. if (pos.name == 'Identifier' || pos.name == 'QuotedIdentifier') {
  19644. empty = false
  19645. let parent = null
  19646. let dot = tokenBefore(pos)
  19647. if (dot && dot.name == '.') {
  19648. let before = tokenBefore(dot)
  19649. if ((before && before.name == 'Identifier') || before.name == 'QuotedIdentifier') parent = stripQuotes(state.sliceDoc(before.from, before.to).toLowerCase())
  19650. }
  19651. return { parent, from: pos.from, quoted: pos.name == 'QuotedIdentifier' ? state.sliceDoc(pos.from, pos.from + 1) : null }
  19652. } else if (pos.name == '.') {
  19653. let before = tokenBefore(pos)
  19654. if ((before && before.name == 'Identifier') || before.name == 'QuotedIdentifier')
  19655. return { parent: stripQuotes(state.sliceDoc(before.from, before.to).toLowerCase()), from: startPos, quoted: null }
  19656. } else {
  19657. empty = true
  19658. }
  19659. return { parent: null, from: startPos, quoted: null, empty }
  19660. }
  19661. function maybeQuoteCompletions(quote, completions) {
  19662. if (!quote) return completions
  19663. return completions.map(c => Object.assign(Object.assign({}, c), { label: quote + c.label + quote, apply: undefined }))
  19664. }
  19665. const Span = /^\w*$/,
  19666. QuotedSpan = /^[`'"]?\w*[`'"]?$/
  19667. function completeFromSchema$1(schema, tables, defaultTable) {
  19668. let byTable = Object.create(null)
  19669. for (let table in schema)
  19670. byTable[table] = schema[table].map(val => {
  19671. return typeof val == 'string' ? { label: val, type: 'property' } : val
  19672. })
  19673. let topOptions = (tables || Object.keys(byTable).map(name => ({ label: name, type: 'type' }))).concat((defaultTable && byTable[defaultTable]) || [])
  19674. return context => {
  19675. let { parent, from, quoted, empty } = sourceContext(context.state, context.pos)
  19676. if (empty && !context.explicit) return null
  19677. let options = topOptions
  19678. if (parent) {
  19679. let columns = byTable[parent]
  19680. if (!columns) return null
  19681. options = columns
  19682. }
  19683. let quoteAfter = quoted && context.state.sliceDoc(context.pos, context.pos + 1) == quoted
  19684. return { from, to: quoteAfter ? context.pos + 1 : undefined, options: maybeQuoteCompletions(quoted, options), span: quoted ? QuotedSpan : Span }
  19685. }
  19686. }
  19687. function completeKeywords(keywords, upperCase) {
  19688. let completions = Object.keys(keywords).map(keyword => ({
  19689. label: upperCase ? keyword.toUpperCase() : keyword,
  19690. type: keywords[keyword] == Type$1 ? 'type' : keywords[keyword] == Keyword ? 'keyword' : 'variable',
  19691. boost: -1
  19692. }))
  19693. return ifNotIn(['QuotedIdentifier', 'SpecialVar', 'String', 'LineComment', 'BlockComment', '.'], completeFromList(completions))
  19694. }
  19695. let parser$4 = parser$1$1.configure({
  19696. props: [
  19697. indentNodeProp.add({ Statement: continuedIndent() }),
  19698. foldNodeProp.add({
  19699. Statement(tree) {
  19700. return { from: tree.firstChild.to, to: tree.to }
  19701. },
  19702. BlockComment(tree) {
  19703. return { from: tree.from + 2, to: tree.to - 2 }
  19704. }
  19705. }),
  19706. styleTags({
  19707. Keyword: tags$1.keyword,
  19708. Type: tags$1.typeName,
  19709. Builtin: tags$1.standard(tags$1.name),
  19710. Bool: tags$1.bool,
  19711. Null: tags$1.null,
  19712. Number: tags$1.number,
  19713. String: tags$1.string,
  19714. Identifier: tags$1.name,
  19715. QuotedIdentifier: tags$1.special(tags$1.string),
  19716. SpecialVar: tags$1.special(tags$1.name),
  19717. LineComment: tags$1.lineComment,
  19718. BlockComment: tags$1.blockComment,
  19719. Operator: tags$1.operator,
  19720. 'Semi Punctuation': tags$1.punctuation,
  19721. '( )': tags$1.paren,
  19722. '{ }': tags$1.brace,
  19723. '[ ]': tags$1.squareBracket
  19724. })
  19725. ]
  19726. })
  19727. class SQLDialect {
  19728. constructor(dialect, language) {
  19729. this.dialect = dialect
  19730. this.language = language
  19731. }
  19732. get extension() {
  19733. return this.language.extension
  19734. }
  19735. static define(spec) {
  19736. let d = dialect(spec, spec.keywords, spec.types, spec.builtin)
  19737. let language = LezerLanguage.define({
  19738. parser: parser$4.configure({ tokenizers: [{ from: tokens, to: tokensFor(d) }] }),
  19739. languageData: { commentTokens: { line: '--', block: { open: '/*', close: '*/' } }, closeBrackets: { brackets: ['(', '[', '{', "'", '"', '`'] } }
  19740. })
  19741. return new SQLDialect(d, language)
  19742. }
  19743. }
  19744. function keywordCompletion(dialect, upperCase = false) {
  19745. return dialect.language.data.of({ autocomplete: completeKeywords(dialect.dialect.words, upperCase) })
  19746. }
  19747. function schemaCompletion(config) {
  19748. return config.schema ? (config.dialect || StandardSQL).language.data.of({ autocomplete: completeFromSchema$1(config.schema, config.tables, config.defaultTable) }) : []
  19749. }
  19750. function sql(config = {}) {
  19751. let lang = config.dialect || StandardSQL
  19752. return new LanguageSupport(lang.language, [schemaCompletion(config), keywordCompletion(lang, !!config.upperCaseKeywords)])
  19753. }
  19754. const StandardSQL = SQLDialect.define({})
  19755. const PostgreSQL = SQLDialect.define({
  19756. charSetCasts: true,
  19757. operatorChars: '+-*/<>=~!@#%^&|`?',
  19758. specialVar: '',
  19759. keywords:
  19760. SQLKeywords +
  19761. 'a abort abs absent access according ada admin aggregate alias also always analyse analyze array_agg array_max_cardinality asensitive assert assignment asymmetric atomic attach attribute attributes avg backward base64 begin_frame begin_partition bernoulli bit_length blocked bom c cache called cardinality catalog_name ceil ceiling chain char_length character_length character_set_catalog character_set_name character_set_schema characteristics characters checkpoint class class_origin cluster coalesce cobol collation_catalog collation_name collation_schema collect column_name columns command_function command_function_code comment comments committed concurrently condition_number configuration conflict connection_name constant constraint_catalog constraint_name constraint_schema contains content control conversion convert copy corr cost covar_pop covar_samp csv cume_dist current_catalog current_row current_schema cursor_name database datalink datatype datetime_interval_code datetime_interval_precision db debug defaults defined definer degree delimiter delimiters dense_rank depends derived detach detail dictionary disable discard dispatch dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue document dump dynamic_function dynamic_function_code element elsif empty enable encoding encrypted end_frame end_partition endexec enforced enum errcode error event every exclude excluding exclusive exp explain expression extension extract family file filter final first_value flag floor following force foreach fortran forward frame_row freeze fs functions fusion g generated granted greatest groups handler header hex hierarchy hint id ignore ilike immediately immutable implementation implicit import include including increment indent index indexes info inherit inherits inline insensitive instance instantiable instead integrity intersection invoker isnull k key_member key_type label lag last_value lead leakproof least length library like_regex link listen ln load location lock locked log logged lower m mapping matched materialized max max_cardinality maxvalue member merge message message_length message_octet_length message_text min minvalue mod mode more move multiset mumps name namespace nfc nfd nfkc nfkd nil normalize normalized nothing notice notify notnull nowait nth_value ntile nullable nullif nulls number occurrences_regex octet_length octets off offset oids operator options ordering others over overlay overriding owned owner p parallel parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partition pascal passing passthrough password percent percent_rank percentile_cont percentile_disc perform period permission pg_context pg_datatype_name pg_exception_context pg_exception_detail pg_exception_hint placing plans pli policy portion position position_regex power precedes preceding prepared print_strict_params procedural procedures program publication query quote raise range rank reassign recheck recovery refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex rename repeatable replace replica requiring reset respect restart restore result_oid returned_cardinality returned_length returned_octet_length returned_sqlstate returning reverse routine_catalog routine_name routine_schema routines row_count row_number rowtype rule scale schema_name schemas scope scope_catalog scope_name scope_schema security selective self sensitive sequence sequences serializable server server_name setof share show simple skip slice snapshot source specific_name sqlcode sqlerror sqrt stable stacked standalone statement statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset subscription substring substring_regex succeeds sum symmetric sysid system system_time t table_name tables tablesample tablespace temp template ties token top_level_count transaction_active transactions_committed transactions_rolled_back transform transforms translate translate_regex trigger_catalog trigger_name trigger_schema trim trim_array truncate trusted type types uescape unbounded uncommitted unencrypted unlink unlisten unlogged unnamed untyped upper uri use_column use_variable user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema vacuum valid validate validator value_of var_pop var_samp varbinary variable_conflict variadic verbose version versioning views volatile warning whitespace width_bucket window within wrapper xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate yes',
  19762. types:
  19763. SQLTypes +
  19764. 'bigint int8 bigserial serial8 varbit bool box bytea cidr circle precision float8 inet int4 json jsonb line lseg macaddr macaddr8 money numeric path pg_lsn point polygon float4 int2 smallserial serial2 serial serial4 text without zone with timetz timestamptz tsquery tsvector txid_snapshot uuid xml'
  19765. })
  19766. const MySQLKeywords =
  19767. 'accessible algorithm analyze asensitive authors auto_increment autocommit avg avg_row_length binlog btree cache catalog_name chain change changed checkpoint checksum class_origin client_statistics coalesce code collations columns comment committed completion concurrent consistent contains contributors convert database databases day_hour day_microsecond day_minute day_second delay_key_write delayed delimiter des_key_file dev_pop dev_samp deviance directory disable discard distinctrow div dual dumpfile enable enclosed ends engine engines enum errors escaped even event events every explain extended fast field fields flush force found_rows fulltext grants handler hash high_priority hosts hour_microsecond hour_minute hour_second ignore ignore_server_ids import index index_statistics infile innodb insensitive insert_method install invoker iterate keys kill linear lines list load lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modify mutex mysql_errno no_write_to_binlog offline offset one online optimize optionally outfile pack_keys parser partition partitions password phase plugin plugins prev processlist profile profiles purge query quick range read_write rebuild recover regexp relaylog remove rename reorganize repair repeatable replace require resume rlike row_format rtree schedule schema_name schemas second_microsecond security sensitive separator serializable server share show slave slow snapshot soname spatial sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result ssl starting starts std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace terminated triggers truncate uncommitted uninstall unlock upgrade use use_frm user_resources user_statistics utc_date utc_time utc_timestamp variables views warnings xa xor year_month zerofill'
  19768. const MySQLTypes =
  19769. SQLTypes +
  19770. 'bool blob long longblob longtext medium mediumblob mediumint mediumtext tinyblob tinyint tinytext text bigint int1 int2 int3 int4 int8 float4 float8 varbinary varcharacter precision datetime year unsigned signed'
  19771. const MySQLBuiltin = 'charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee'
  19772. const MySQL = SQLDialect.define({
  19773. operatorChars: '*+-%<>!=&|^',
  19774. charSetCasts: true,
  19775. doubleQuotedStrings: true,
  19776. hashComments: true,
  19777. spaceAfterDashes: true,
  19778. specialVar: '@?',
  19779. identifierQuotes: '`',
  19780. keywords: SQLKeywords + 'group_concat ' + MySQLKeywords,
  19781. types: MySQLTypes,
  19782. builtin: MySQLBuiltin
  19783. })
  19784. const MariaSQL = SQLDialect.define({
  19785. operatorChars: '*+-%<>!=&|^',
  19786. charSetCasts: true,
  19787. doubleQuotedStrings: true,
  19788. hashComments: true,
  19789. spaceAfterDashes: true,
  19790. specialVar: '@?',
  19791. identifierQuotes: '`',
  19792. keywords: SQLKeywords + 'always generated groupby_concat hard persistent shutdown soft virtual ' + MySQLKeywords,
  19793. types: MySQLTypes,
  19794. builtin: MySQLBuiltin
  19795. })
  19796. const MSSQL = SQLDialect.define({
  19797. keywords:
  19798. SQLKeywords +
  19799. 'trigger proc view index for add constraint key primary foreign collate clustered nonclustered declare exec go if use index holdlock nolock nowait paglock pivot readcommitted readcommittedlock readpast readuncommitted repeatableread rowlock serializable snapshot tablock tablockx unpivot updlock with',
  19800. types: SQLTypes + 'bigint smallint smallmoney tinyint money real text nvarchar ntext varbinary image cursor hierarchyid uniqueidentifier sql_variant xml table',
  19801. builtin:
  19802. 'binary_checksum checksum connectionproperty context_info current_request_id error_line error_message error_number error_procedure error_severity error_state formatmessage get_filestream_transaction_context getansinull host_id host_name isnull isnumeric min_active_rowversion newid newsequentialid rowcount_big xact_state object_id',
  19803. operatorChars: '*+-%<>!=^&|/',
  19804. specialVar: '@'
  19805. })
  19806. const SQLite = SQLDialect.define({
  19807. keywords:
  19808. SQLKeywords +
  19809. 'abort analyze attach autoincrement conflict database detach exclusive fail glob ignore index indexed instead isnull notnull offset plan pragma query raise regexp reindex rename replace temp vacuum virtual',
  19810. types: SQLTypes + 'bool blob long longblob longtext medium mediumblob mediumint mediumtext tinyblob tinyint tinytext text bigint int2 int8 year unsigned signed real',
  19811. builtin:
  19812. 'auth backup bail binary changes check clone databases dbinfo dump echo eqp exit explain fullschema headers help import imposter indexes iotrace limit lint load log mode nullvalue once open output print prompt quit read restore save scanstats schema separator session shell show stats system tables testcase timeout timer trace vfsinfo vfslist vfsname width',
  19813. operatorChars: '*+-%<>!=&|/~',
  19814. identifierQuotes: '`"',
  19815. specialVar: '@:?$'
  19816. })
  19817. const Cassandra = SQLDialect.define({
  19818. keywords:
  19819. 'add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime infinity NaN',
  19820. types: SQLTypes + 'ascii bigint blob counter frozen inet list map static text timeuuid tuple uuid varint',
  19821. slashComments: true
  19822. })
  19823. const PLSQL = SQLDialect.define({
  19824. keywords:
  19825. SQLKeywords +
  19826. 'abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work',
  19827. builtin:
  19828. 'appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap',
  19829. types: SQLTypes + 'ascii bfile bfilename bigserial bit blob dec number nvarchar nvarchar2 serial smallint string text uid varchar2 xml',
  19830. operatorChars: '*/+-%<>!=~',
  19831. doubleQuotedStrings: true,
  19832. charSetCasts: true
  19833. })
  19834. var _m29 = Object.freeze({
  19835. __proto__: null,
  19836. Cassandra: Cassandra,
  19837. MSSQL: MSSQL,
  19838. MariaSQL: MariaSQL,
  19839. MySQL: MySQL,
  19840. PLSQL: PLSQL,
  19841. PostgreSQL: PostgreSQL,
  19842. SQLDialect: SQLDialect,
  19843. SQLite: SQLite,
  19844. StandardSQL: StandardSQL,
  19845. keywordCompletion: keywordCompletion,
  19846. schemaCompletion: schemaCompletion,
  19847. sql: sql
  19848. })
  19849. const closureParamDelim = 1,
  19850. tpOpen = 2,
  19851. tpClose = 3,
  19852. RawString = 4,
  19853. Float = 5
  19854. const _b = 98,
  19855. _e = 101,
  19856. _f = 102,
  19857. _r = 114,
  19858. _E = 69,
  19859. Dot = 46,
  19860. Plus = 43,
  19861. Minus = 45,
  19862. Hash = 35,
  19863. Quote = 34,
  19864. Pipe = 124,
  19865. LessThan = 60,
  19866. GreaterThan = 62
  19867. function isNum(ch) {
  19868. return ch >= 48 && ch <= 57
  19869. }
  19870. function isNum_(ch) {
  19871. return isNum(ch) || ch == 95
  19872. }
  19873. const literalTokens = new ExternalTokenizer((input, token, stack) => {
  19874. let pos = token.start,
  19875. next = input.get(pos)
  19876. if (isNum(next)) {
  19877. let isFloat = false
  19878. do {
  19879. next = input.get(++pos)
  19880. } while (isNum_(next))
  19881. if (next == Dot) {
  19882. isFloat = true
  19883. next = input.get(++pos)
  19884. if (isNum(next)) {
  19885. do {
  19886. next = input.get(++pos)
  19887. } while (isNum_(next))
  19888. } else if (next == Dot || next > 0x7f || /\w/.test(String.fromCharCode(next))) {
  19889. return
  19890. }
  19891. }
  19892. if (next == _e || next == _E) {
  19893. isFloat = true
  19894. next = input.get(++pos)
  19895. if (next == Plus || next == Minus) next = input.get(++pos)
  19896. let startNum = pos
  19897. while (isNum_(next)) next = input.get(++pos)
  19898. if (pos == startNum) return
  19899. }
  19900. if (next == _f) {
  19901. if (!/32|64/.test(input.read(pos + 1, pos + 3))) return
  19902. isFloat = true
  19903. pos += 3
  19904. }
  19905. if (isFloat) token.accept(Float, pos)
  19906. } else if (next == _b || next == _r) {
  19907. if (next == _b) next = input.get(++pos)
  19908. if (next != _r) return
  19909. next = input.get(++pos)
  19910. let count = 0
  19911. while (next == Hash) {
  19912. count++
  19913. next = input.get(++pos)
  19914. }
  19915. if (next != Quote) return
  19916. next = input.get(++pos)
  19917. content: for (;;) {
  19918. if (next < 0) return
  19919. let isQuote = next == Quote
  19920. next = input.get(++pos)
  19921. if (isQuote) {
  19922. for (let i = 0; i < count; i++) {
  19923. if (next != Hash) continue content
  19924. next = input.get(++pos)
  19925. }
  19926. token.accept(RawString, pos)
  19927. return
  19928. }
  19929. }
  19930. }
  19931. })
  19932. const closureParam = new ExternalTokenizer((input, token) => {
  19933. if (input.get(token.start) == Pipe) token.accept(closureParamDelim, token.start + 1)
  19934. })
  19935. const tpDelim = new ExternalTokenizer((input, token) => {
  19936. let pos = token.start,
  19937. next = input.get(pos)
  19938. if (next == LessThan) token.accept(tpOpen, pos + 1)
  19939. else if (next == GreaterThan) token.accept(tpClose, pos + 1)
  19940. })
  19941. const spec_identifier = {
  19942. __proto__: null,
  19943. self: 28,
  19944. super: 32,
  19945. crate: 34,
  19946. impl: 46,
  19947. true: 72,
  19948. false: 72,
  19949. pub: 88,
  19950. in: 92,
  19951. const: 96,
  19952. unsafe: 104,
  19953. async: 108,
  19954. move: 110,
  19955. if: 114,
  19956. let: 118,
  19957. ref: 142,
  19958. mut: 144,
  19959. _: 198,
  19960. else: 200,
  19961. match: 204,
  19962. as: 248,
  19963. return: 252,
  19964. await: 262,
  19965. break: 270,
  19966. continue: 276,
  19967. while: 312,
  19968. loop: 316,
  19969. for: 320,
  19970. macro_rules: 327,
  19971. mod: 334,
  19972. extern: 342,
  19973. struct: 346,
  19974. where: 364,
  19975. union: 379,
  19976. enum: 382,
  19977. type: 390,
  19978. default: 395,
  19979. fn: 396,
  19980. trait: 412,
  19981. use: 420,
  19982. static: 438,
  19983. dyn: 476
  19984. }
  19985. const parser$3 = Parser.deserialize({
  19986. version: 13,
  19987. states:
  19988. "$3tQ]Q_OOP$wOWOOO&sQWO'#CnO)WQWO'#IaOOQP'#Ia'#IaOOQQ'#If'#IfO)hO`O'#C}OOQR'#Ii'#IiO)sQWO'#IvOOQO'#Hk'#HkO)xQWO'#DpOOQR'#Ix'#IxO)xQWO'#DpO*ZQWO'#DpOOQO'#Iw'#IwO,SQWO'#J`O,ZQWO'#EiOOQV'#Hp'#HpO,cQYO'#F{OOQV'#El'#ElOOQV'#Em'#EmOOQV'#En'#EnO.YQ_O'#EkO0_Q_O'#EoO2gQWOOO4QQ_O'#FPO7hQWO'#J`OOQV'#FY'#FYO7{Q_O'#F^O:WQ_O'#FaOOQO'#F`'#F`O=sQ_O'#FcO=}Q_O'#FbO@VQWO'#FgOOQO'#J`'#J`OOQV'#Ip'#IpOA]Q_O'#IoOEPQWO'#IoOOQV'#Fw'#FwOF[QWO'#JuOFcQWO'#F|OOQO'#IO'#IOOGrQWO'#GhOOQV'#In'#InOOQV'#Im'#ImOOQV'#Hj'#HjQGyQ_OOOKeQ_O'#DUOKlQYO'#CqOOQP'#I`'#I`OOQV'#Hg'#HgQ]Q_OOOLuQWO'#IaONsQYO'#DXO!!eQWO'#JuO!!lQWO'#JuO!!vQ_O'#DfO!%]Q_O'#E}O!(sQ_O'#FWO!,ZQWO'#FZO!.^QXO'#FbO!.cQ_O'#EeO!!vQ_O'#FmO!0uQWO'#FoO!0zQWO'#FoO!1PQ^O'#FqO!1WQWO'#JuO!1_QWO'#FtO!1dQWO'#FxO!2WQWO'#JjO!2_QWO'#GOO!2_QWO'#G`O!2_QWO'#GbO!2_QWO'#GsOOQO'#Ju'#JuO!2dQWO'#GhO!2lQYO'#GpO!2_QWO'#GqO!3uQ^O'#GtO!3|QWO'#GuO!4hQWO'#HOP!4sOpO'#CcPOOO)CDO)CDOOOOO'#Hi'#HiO!5OO`O,59iOOQV,59i,59iO!5ZQYO,5?bOOQO-E;i-E;iOOQO,5:[,5:[OOQP,59Z,59ZO)xQWO,5:[O)xQWO,5:[O!5oQWO,5?lO!5zQYO,5;qO!6PQYO,5;TO!6hQWO,59QO!7kQXO'#CnO!7rQXO'#IaO!8vQWO'#CoO,^QWO'#EiOOQV-E;n-E;nO!9XQWO'#FsOOQV,5<g,5<gO!8vQWO'#CoO!9^QWO'#CoO!9cQWO'#IaO! yQWO'#JuO!9mQWO'#J`O!:TQWO,5;VOOQO'#Io'#IoO!0zQWO'#DaO!<TQWO'#DcO!<]QWO,5;ZO.YQ_O,5;ZOOQO,5;[,5;[OOQV'#Er'#ErOOQV'#Es'#EsOOQV'#Et'#EtOOQV'#Eu'#EuOOQV'#Ev'#EvOOQV'#Ew'#EwOOQV'#Ex'#ExOOQV'#Ey'#EyO.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;fO!<sQ_O,5;kO!@ZQ_O'#FROOQO,5;l,5;lO!BfQWO,5;pO.YQ_O,5;wOKlQYO,5;gO!DRQWO,5;kO!DrQWO,5;xOOQO,5;x,5;xO!EPQWO,5;xO!EUQ_O,5;xO!GaQWO'#CfO!GfQWO,5<QO!GpQ_O,5<QOOQO,5;{,5;{O!J^QXO'#CnO!KoQXO'#IaOOQS'#Dk'#DkOOQP'#Is'#IsO!LiQ[O'#IsO!LqQXO'#DjO!MoQWO'#DnO!MoQWO'#DnO!NQQWO'#DnOOQP'#Iu'#IuO!NVQXO'#IuO# QQ^O'#DoO# [QWO'#DrO# dQ^O'#DzO# nQ^O'#D|O# uQWO'#EPO#!QQXO'#FdOOQP'#ES'#ESOOQP'#Ir'#IrO#!`QXO'#JfOOQP'#Je'#JeO#!hQXO,5;}O#!mQXO'#IaO!1PQ^O'#DyO!1PQ^O'#FdO##gQWO,5;|OOQO,5;|,5;|OKlQYO,5;|O##}QWO'#FhOOQO,5<R,5<ROOQV,5=l,5=lO#&SQYO'#FzOOQV,5<h,5<hO#&ZQWO,5<hO#&bQWO,5=SO!1WQWO,59rO!1dQWO,5<dO#&iQWO,5=iO!2_QWO,5<jO!2_QWO,5<zO!2_QWO,5<|O!2_QWO,5=QO#&pQWO,5=]O#&wQWO,5=SO!2_QWO,5=]O!3|QWO,5=aO#'PQWO,5=jOOQO-E;|-E;|O#'[QWO'#JjOOQV-E;h-E;hO#'sQWO'#HRO#'zQ_O,59pOOQV,59p,59pO#(RQWO,59pO#(WQ_O,59pO#(vQZO'#CuO#+OQZO'#CvOOQV'#C|'#C|O#-kQWO'#HTO#-rQYO'#IeOOQO'#Hh'#HhO#-zQWO'#CwO#-zQWO'#CwO#.]QWO'#CwOOQR'#Id'#IdO#.bQZO'#IcO#0wQYO'#HTO#1eQYO'#H[O#2qQYO'#H_OKlQYO'#H`OOQR'#Hb'#HbO#3}QWO'#HeO#4SQYO,59]OOQR'#Ic'#IcO#4sQZO'#CtO#7OQYO'#HUO#7TQWO'#HTO#7YQYO'#CrO#7yQWO'#H]O#7YQYO'#HcOOQV-E;e-E;eO#8RQWO,59sOOQV,59{,59{O#8aQYO,5=[OOQV,59},59}O!0zQWO,59}O#;TQWO'#IqOOQO'#Iq'#IqO!1PQ^O'#DhO!0zQWO,5:QO#;[QWO,5;iO#;rQWO,5;rO#<YQ_O,5;rOOQO,5;u,5;uO#?sQ_O,5;|O#A{QWO,5;PO!0zQWO,5<XO#BSQWO,5<ZOOQV,5<Z,5<ZO#B_QWO,5<]O!1PQ^O'#EOOOQQ'#D_'#D_O#BgQWO,59rO#BlQWO,5<`O#BqQWO,5<dOOQO,5@U,5@UO#ByQWO,5=iOOQQ'#Cv'#CvO#COQYO,5<jO#CaQYO,5<zO#ClQYO,5<|O#CwQYO,5=_O#DVQYO,5=SO#EoQYO'#GQO#E|QYO,5=[O#FaQWO,5=[O#FoQYO,5=[O#GxQYO,5=]O#HWQWO,5=`O!1PQ^O,5=`O#HfQWO'#CnO#HwQWO'#IaOOQO'#Jy'#JyO#IYQWO'#IQO#I_QWO'#GwOOQO'#Jz'#JzO#IvQWO'#GzOOQO'#G|'#G|OOQO'#Jx'#JxO#I_QWO'#GwO#I}QWO'#GxO#JSQWO,5=aO#JXQWO,5=jO!1dQWO,5=jO#'SQWO,5=jPOOO'#Hf'#HfP#J^OpO,58}POOO,58},58}OOOO-E;g-E;gOOQV1G/T1G/TO#JiQWO1G4|O#JnQ^O'#CyPOQQ'#Cx'#CxOOQO1G/v1G/vOOQP1G.u1G.uO)xQWO1G/vO#MwQ!fO'#EUO#NOQ!fO'#EVO#NVQ!fO'#ETO$ _QWO1G5WO$!RQ_O1G5WOOQO1G1]1G1]O$%uQWO1G0oO$%zQWO'#CiO!7rQXO'#IaO!6PQYO1G.lO!5oQWO,5<_O!8vQWO,59ZO!8vQWO,59ZO!5oQWO,5?lO$&]QWO1G0uO$(jQWO1G0wO$*bQWO1G0wO$*xQWO1G0wO$,|QWO1G0wO$-TQWO1G0wO$/UQWO1G0wO$/]QWO1G0wO$1^QWO1G0wO$1eQWO1G0wO$2|QWO1G1QO$4}QWO1G1VO$5nQ_O'#JcO$7vQWO'#JcOOQO'#Jb'#JbO$8QQWO,5;mOOQO'#Dw'#DwOOQO1G1[1G1[OOQO1G1Y1G1YO$8VQWO1G1cOOQO1G1R1G1RO$8^Q_O'#HrO$:lQWO,5@OO.YQ_O1G1dOOQO1G1d1G1dO$:tQWO1G1dO$;RQWO1G1dO$;WQWO1G1eOOQO1G1l1G1lO$;`QWO1G1lOOQP,5?_,5?_O$;jQ^O,5:kO$<TQXO,5:YO!MoQWO,5:YO!MoQWO,5:YO!1PQ^O,5:gO$=UQWO'#IzOOQO'#Iy'#IyO$=dQWO,5:ZO# QQ^O,5:ZO$=iQWO'#DsOOQP,5:^,5:^O$=zQWO,5:fOOQP,5:h,5:hO!1PQ^O,5:hO!1PQ^O,5:mO$>PQYO,5<OO$>ZQ_O'#HsO$>hQXO,5@QOOQV1G1i1G1iOOQP,5:e,5:eO$>pQXO,5<OO$?OQWO1G1hO$?WQWO'#CnO$?cQWO'#FiOOQO'#Fi'#FiO$?kQWO'#FjO.YQ_O'#FkOOQO'#Ji'#JiO$?pQWO'#JhOOQO'#Jg'#JgO$?xQWO,5<SOOQQ'#Hv'#HvO$?}QYO,5<fOOQV,5<f,5<fO$@UQYO,5<fOOQV1G2S1G2SO$@]QWO1G2nO$@eQWO1G/^O$@jQWO1G2OO#ByQWO1G3TO$@rQYO1G2UO#CaQYO1G2fO#ClQYO1G2hO$ATQYO1G2lO!2_QWO1G2wO#DVQYO1G2nO#GxQYO1G2wO$A]QWO1G2{O$AbQWO1G3UO!1dQWO1G3UO$AgQWO1G3UOOQV1G/[1G/[O$AoQWO1G/[O$AtQ_O1G/[O#7TQWO,5=oO$A{QYO,5?PO$BaQWO,5?PO$BfQZO'#IfOOQO-E;f-E;fOOQR,59c,59cO#-zQWO,59cO#-zQWO,59cOOQR,5=n,5=nO$ERQYO'#HVO$FkQZO,5=oO!5oQWO,5={O$H}QWO,5=oO$IUQZO,5=vO$KeQYO,5=vO$>PQYO,5=vO$KuQWO'#KRO$LQQWO,5=xOOQR,5=y,5=yO$LVQWO,5=zO$>PQYO,5>PO$>PQYO,5>POOQO1G.w1G.wO$>PQYO1G.wO$LbQYO,5=pO$LjQZO,59^OOQR,59^,59^O$>PQYO,5=wO$N|QZO,5=}OOQR,5=},5=}O%#`QWO1G/_O!6PQYO1G/_O#E|QYO1G2vO%#eQWO1G2vO%#sQYO1G2vOOQV1G/i1G/iO%$|QWO,5:SO%%UQ_O1G/lO%*_QWO1G1^O%*uQWO1G1hOOQO1G1h1G1hO$>PQYO1G1hO%+]Q^O'#EgOOQV1G0k1G0kOOQV1G1s1G1sO!!vQ_O1G1sO!0zQWO1G1uO!1PQ^O1G1wO!.cQ_O1G1wOOQP,5:j,5:jO$>PQYO1G/^OOQO'#Cn'#CnO%+jQWO1G1zOOQV1G2O1G2OO%+rQWO'#CnO%+zQWO1G3TO%,PQWO1G3TO%,UQYO'#GQO%,gQWO'#G]O%,xQYO'#G_O%.[QYO'#GXOOQV1G2U1G2UO%/kQWO1G2UO%/pQWO1G2UO$@uQWO1G2UOOQV1G2f1G2fO%/kQWO1G2fO#CdQWO1G2fO%/xQWO'#GdOOQV1G2h1G2hO%0ZQWO1G2hO#CoQWO1G2hO%0`QYO'#GSO$>PQYO1G2lO$AWQWO1G2lOOQV1G2y1G2yO%1lQWO1G2yO%3[Q^O'#GkO%3fQWO1G2nO#DYQWO1G2nO%3tQYO,5<lO%4OQYO,5<lO%4^QYO,5<lO%4{QYO,5<lOOQQ,5<l,5<lO!1WQWO'#JuO%5WQYO,5<lO%5`QWO1G2vOOQV1G2v1G2vO%5hQWO1G2vO$>PQYO1G2vOOQV1G2w1G2wO%5hQWO1G2wO%5mQWO1G2wO#G{QWO1G2wOOQV1G2z1G2zO.YQ_O1G2zO$>PQYO1G2zO%5uQWO1G2zOOQO,5>l,5>lOOQO-E<O-E<OOOQO,5=c,5=cOOQO,5=e,5=eOOQO,5=g,5=gOOQO,5=h,5=hO%6TQWO'#J|OOQO'#J{'#J{O%6]QWO,5=fO%6bQWO,5=cO!1dQWO,5=dOOQV1G2{1G2{O$>PQYO1G3UPOOO-E;d-E;dPOOO1G.i1G.iOOQO7+*h7+*hO%6yQYO'#IdO%7bQYO'#IgO%7mQYO'#IgO%7uQYO'#IgO%8QQYO,59eOOQO7+%b7+%bOOQP7+$a7+$aOOQV,5:p,5:pO%8VQ!fO,5:pO%8^Q!fO'#JTOOQS'#EZ'#EZOOQS'#E['#E[OOQS'#E]'#E]OOQS'#JT'#JTO%;PQWO'#EYOOQS'#Eb'#EbOOQS'#JR'#JROOQS'#Hn'#HnOOQV,5:q,5:qO%;UQ!fO,5:qO%;]Q!fO,5:oOOQV,5:o,5:oOOQV7+'e7+'eOOQV7+&Z7+&ZO%;dQ[O,59TO%;xQ^O,59TO%<cQWO7+$WO%<hQWO1G1yOOQV1G1y1G1yO!8vQWO1G.uOOQP1G5W1G5WO%<mQWO,5?}O%<wQ_O'#HqO%?SQWO,5?}OOQO1G1X1G1XOOQO7+&}7+&}O%?[QWO,5>^OOQO-E;p-E;pO%?iQWO7+'OO%?pQ_O7+'OOOQO7+'O7+'OOOQO7+'P7+'PO%ArQWO7+'POOQO7+'W7+'WOOQP1G0V1G0VO%AzQXO1G/tO!MoQWO1G/tO%B{QXO1G0RO%CsQ^O'#HlO%DTQWO,5?fOOQP1G/u1G/uO%D`QWO1G/uO%DeQWO'#D_OOQO'#Dt'#DtO%DpQWO'#DtO%DuQWO'#I|OOQO'#I{'#I{O%D}QWO,5:_O%ESQWO'#DtO%EXQWO'#DtOOQP1G0Q1G0QOOQP1G0S1G0SOOQP1G0X1G0XO%EaQXO1G1jO%ElQXO'#FeOOQP,5>_,5>_O!1PQ^O'#FeOOQP-E;q-E;qO$>PQYO1G1jOOQO7+'S7+'SOOQO,5<T,5<TO%EzQWO,5<UO%?pQ_O,5<UO%FPQWO,5<VO%FZQWO'#HtO%FlQWO,5@SOOQO1G1n1G1nOOQQ-E;t-E;tOOQV1G2Q1G2QO%FtQYO1G2QO#DVQYO7+(YO$>PQYO7+$xOOQV7+'j7+'jO%F{QWO7+(oO%GQQWO7+(oOOQV7+'p7+'pO%/kQWO7+'pO%GVQWO7+'pO%G_QWO7+'pOOQV7+(Q7+(QO%/kQWO7+(QO#CdQWO7+(QOOQV7+(S7+(SO%0ZQWO7+(SO#CoQWO7+(SO$>PQYO7+(WO%GmQWO7+(WO#GxQYO7+(cO%GrQWO7+(YO#DYQWO7+(YOOQV7+(c7+(cO%5hQWO7+(cO%5mQWO7+(cO#G{QWO7+(cOOQV7+(g7+(gO$>PQYO7+(pO%HQQWO7+(pO!1dQWO7+(pOOQV7+$v7+$vO%HVQWO7+$vO%H[QZO1G3ZO%JnQWO1G4kOOQO1G4k1G4kOOQR1G.}1G.}O#-zQWO1G.}O%JsQWO'#KQOOQO'#HW'#HWO%KUQWO'#HXO%KaQWO'#KQOOQO'#KP'#KPO%KiQWO,5=qO%KnQYO'#H[O%LzQWO'#GmO%MVQYO'#CtO%MaQWO'#GmO$>PQYO1G3ZOOQR1G3g1G3gO#7TQWO1G3ZO%MfQZO1G3bO$>PQYO1G3bO& uQYO'#IVO&!VQWO,5@mOOQR1G3d1G3dOOQR1G3f1G3fO%?pQ_O1G3fOOQR1G3k1G3kO&!_QYO7+$cO&!gQYO'#KOOOQQ'#J}'#J}O&!oQYO1G3[O&!tQZO1G3cOOQQ7+$y7+$yO&%TQWO7+$yO&%YQWO7+(bOOQV7+(b7+(bO%5hQWO7+(bO$>PQYO7+(bO#E|QYO7+(bO&%bQWO7+(bO!.cQ_O1G/nO&%pQWO7+%WO$?OQWO7+'SO&%xQWO'#EhO&&TQ^O'#EhOOQU'#Ho'#HoO&&TQ^O,5;ROOQV,5;R,5;RO&&_QWO,5;RO&&dQ^O,5;RO!0zQWO7+'_OOQV7+'a7+'aO&&qQWO7+'cO&&yQWO7+'cO&'QQWO7+$xO&)uQ!fO7+'fO&)|Q!fO7+'fOOQV7+(o7+(oO!1dQWO7+(oO&*TQYO,5<lO&*`QYO,5<lO!1dQWO'#GWO&*nQWO'#JpO&*|QWO'#G^O!BlQWO'#G^O&+RQWO'#JpOOQO'#Jo'#JoO&+ZQWO,5<wOOQO'#DX'#DXO&+`QYO'#JrO&,oQWO'#JrO$>PQYO'#JrOOQO'#Jq'#JqO&,zQWO,5<yO&-PQWO'#GZO#DQQWO'#G[O&-XQWO'#G[O&-aQWO'#JmOOQO'#Jl'#JlO&-lQYO'#GTOOQO,5<s,5<sO&-qQWO7+'pO&-vQWO'#JtO&.UQWO'#GeO#BlQWO'#GeO&.gQWO'#JtOOQO'#Js'#JsO&.oQWO,5=OO$>PQYO'#GUO&.tQYO'#JkOOQQ,5<n,5<nO&/]QWO7+(WOOQV7+(e7+(eO&/eQ^O'#D|O&0kQWO'#GlO&0sQ^O'#JwOOQO'#Gn'#GnO&0zQWO'#JwOOQO'#Jv'#JvO&1SQWO,5=VO&1XQWO'#IaO&1iQ^O'#GmO&2lQWO'#IrO&2zQWO'#GmOOQV7+(Y7+(YO&3SQWO7+(YO$>PQYO7+(YO&3[QYO'#HxO&3pQYO1G2WOOQQ1G2W1G2WOOQQ,5<m,5<mO$>PQYO,5<qO&3xQWO,5<rO&3}QWO7+(bO&4YQWO7+(fO&4aQWO7+(fOOQV7+(f7+(fO%?pQ_O7+(fO$>PQYO7+(fO&4lQWO'#IRO&4vQWO,5@hOOQO1G3Q1G3QOOQO1G2}1G2}OOQO1G3P1G3POOQO1G3R1G3ROOQO1G3S1G3SOOQO1G3O1G3OO&5OQWO7+(pO$>PQYO,59fO&5ZQ^O'#ISO&6QQYO,5?ROOQR1G/P1G/POOQV1G0[1G0[OOQS-E;l-E;lO&6YQ!bO,5:rO&6_Q!fO,5:tOOQV1G0]1G0]OOQV1G0Z1G0ZOOQO1G.o1G.oO&6fQWO'#KTOOQO'#KS'#KSO&6nQWO1G.oOOQV<<Gr<<GrO&6sQWO1G5iO&6{Q_O,5>]O&9QQWO,5>]OOQO-E;o-E;oOOQO<<Jj<<JjO&9[QWO<<JjOOQO<<Jk<<JkO&9cQXO7+%`O&:dQWO,5>WOOQO-E;j-E;jOOQP7+%a7+%aO!1PQ^O,5:`O&:rQWO'#HmO&;WQWO,5?hOOQP1G/y1G/yOOQO,5:`,5:`O&;`QWO,5:`O%ESQWO,5:`O$>PQYO,5<PO&;eQXO,5<PO&;sQXO7+'UO%?pQ_O1G1pO&<OQWO1G1pOOQO,5>`,5>`OOQO-E;r-E;rOOQV7+'l7+'lO&<YQWO<<KtO#DYQWO<<KtO&<hQWO<<HdOOQV<<LZ<<LZO!1dQWO<<LZOOQV<<K[<<K[O&<sQWO<<K[O%/kQWO<<K[O&<xQWO<<K[OOQV<<Kl<<KlO%/kQWO<<KlOOQV<<Kn<<KnO%0ZQWO<<KnO&=QQWO<<KrO$>PQYO<<KrOOQV<<K}<<K}O%5hQWO<<K}O%5mQWO<<K}O#G{QWO<<K}OOQV<<Kt<<KtO&=YQWO<<KtO$>PQYO<<KtO&=bQWO<<L[O$>PQYO<<L[O&=mQWO<<L[OOQV<<Hb<<HbO$>PQYO7+(uOOQO7+*V7+*VOOQR7+$i7+$iO&=rQWO,5@lOOQO'#Gm'#GmO&=zQWO'#GmO&>VQYO'#IUO&=rQWO,5@lOOQR1G3]1G3]O&?rQYO,5=vO&ARQYO,5=XO&A]QWO,5=XOOQO,5=X,5=XOOQR7+(u7+(uO&AbQZO7+(uO&CtQZO7+(|O&FTQWO,5>qOOQO-E<T-E<TO&F`QWO7+)QOOQO<<G}<<G}O&FgQYO'#ITO&FrQYO,5@jOOQQ7+(v7+(vOOQQ<<He<<HeO$>PQYO<<K|OOQV<<K|<<K|O&3}QWO<<K|O&FzQWO<<K|O%5hQWO<<K|O&GSQWO7+%YOOQV<<Hr<<HrOOQO<<Jn<<JnO%?pQ_O,5;SO&GZQWO,5;SO%?pQ_O'#EjO&G`QWO,5;SOOQU-E;m-E;mO&GkQWO1G0mOOQV1G0m1G0mO&&TQ^O1G0mOOQV<<Jy<<JyO!.cQ_O<<J}OOQV<<J}<<J}OOQV<<Hd<<HdO%?pQ_O<<HdO&GpQWO'#JTO&GxQWO'#FvO&G}QWO<<KQO&HVQ!fO<<KQO&H^QWO<<KQO&HcQWO<<KQO&HkQ!fO<<KQOOQV<<KQ<<KQO&HrQWO<<LZO&HwQWO,5@[O$>PQYO,5<xO&IPQWO,5<xO&IUQWO'#H{O&HwQWO,5@[OOQV1G2c1G2cO&IjQWO,5@^O$>PQYO,5@^O&IuQYO'#H|O&K[QWO,5@^OOQO1G2e1G2eO%,bQWO,5<uOOQO,5<v,5<vO&KdQYO'#HzO&LvQWO,5@XO%,UQYO,5=pO$>PQYO,5<oO&MRQWO,5@`O%?pQ_O,5=PO&MZQWO,5=PO&MfQWO,5=PO&MwQWO'#H}O&MRQWO,5@`OOQV1G2j1G2jO&N]QYO,5<pO%0`QYO,5>PO&NtQYO,5@VOOQV<<Kr<<KrO' ]QWO,5=XO' mQ^O,5:hO'!pQWO,5=XO$>PQYO,5=WO'!xQWO,5@cO'#QQWO,5@cO'#`Q^O'#IPO'!xQWO,5@cOOQO1G2q1G2qO'$rQWO,5=WO'$zQWO<<KtO'%YQYO,5>oO'%eQYO,5>dO'%sQYO,5>dOOQQ,5>d,5>dOOQQ-E;v-E;vOOQQ7+'r7+'rO'&OQYO1G2]O$>PQYO1G2^OOQV<<LQ<<LQO%?pQ_O<<LQO'&ZQWO<<LQO'&bQWO<<LQOOQO,5>m,5>mOOQO-E<P-E<POOQV<<L[<<L[O%?pQ_O<<L[O'&mQYO1G/QO'&xQYO,5>nOOQQ,5>n,5>nO''TQYO,5>nOOQQ-E<Q-E<QOOQS1G0^1G0^O')cQ!fO1G0`O')pQ!fO1G0`O')wQ^O'#IWO'*eQWO,5@oOOQO7+$Z7+$ZO'*mQWO1G3wOOQOAN@UAN@UO'*wQWO1G/zOOQO,5>X,5>XOOQO-E;k-E;kO!1PQ^O1G/zOOQO1G/z1G/zO'+SQWO1G/zO'+XQXO1G1kO$>PQYO1G1kO'+dQWO7+'[OOQVANA`ANA`O'+nQWOANA`O$>PQYOANA`O'+vQWOANA`OOQVAN>OAN>OO%?pQ_OAN>OO',UQWOANAuOOQVAN@vAN@vO',ZQWOAN@vOOQVANAWANAWOOQVANAYANAYOOQVANA^ANA^O',`QWOANA^OOQVANAiANAiO%5hQWOANAiO%5mQWOANAiO',hQWOANA`OOQVANAvANAvO%?pQ_OANAvO',vQWOANAvO$>PQYOANAvOOQR<<La<<LaO'-RQWO1G6WO%JsQWO,5>pOOQO'#HY'#HYO'-ZQWO'#HZOOQO,5>p,5>pOOQO-E<S-E<SO'-fQYO1G2sO'-pQWO1G2sOOQO1G2s1G2sO$>PQYO<<LaOOQR<<Ll<<LlOOQQ,5>o,5>oOOQQ-E<R-E<RO&3}QWOANAhOOQVANAhANAhO%5hQWOANAhO$>PQYOANAhO'-uQWO1G1rO'.iQ^O1G0nO%?pQ_O1G0nO'0_QWO,5;UO'0fQWO1G0nP'0kQWO'#ERP&&TQ^O'#HpOOQV7+&X7+&XO'0vQWO7+&XO&&yQWOAN@iO'0{QWOAN>OO!5oQWO,5<bOOQS,5>a,5>aO'1SQWOAN@lO'1XQWOAN@lOOQS-E;s-E;sOOQVAN@lAN@lO'1aQWOAN@lOOQVANAuANAuO'1iQWO1G5vO'1qQWO1G2dO$>PQYO1G2dO&*nQWO,5>gOOQO,5>g,5>gOOQO-E;y-E;yO'1|QWO1G5xO'2UQWO1G5xO&+`QYO,5>hO'2aQWO,5>hO$>PQYO,5>hOOQO-E;z-E;zO'2lQWO'#JnOOQO1G2a1G2aOOQO,5>f,5>fOOQO-E;x-E;xO&*TQYO,5<lO'2zQYO1G2ZO'3fQWO1G5zO'3nQWO1G2kO%?pQ_O1G2kO'3xQWO1G2kO&-vQWO,5>iOOQO,5>i,5>iOOQO-E;{-E;{OOQQ,5>c,5>cOOQQ-E;u-E;uO'4TQWO1G2sO'4eQWO1G2rO'4pQWO1G5}O'4xQ^O,5>kOOQO'#Go'#GoOOQO,5>k,5>kO'6UQWO,5>kOOQO-E;}-E;}O$>PQYO1G2rO'6dQYO7+'xO'6oQWOANAlOOQVANAlANAlO%?pQ_OANAlO'6vQWOANAvOOQS7+%z7+%zO'6}QWO7+%zO'7YQ!fO7+%zOOQO,5>r,5>rOOQO-E<U-E<UO'7gQWO7+%fO!1PQ^O7+%fO'7rQXO7+'VOOQVG26zG26zO'7}QWOG26zO'8]QWOG26zO$>PQYOG26zO'8eQWOG23jOOQVG27aG27aOOQVG26bG26bOOQVG26xG26xOOQVG27TG27TO%5hQWOG27TO'8lQWOG27bOOQVG27bG27bO%?pQ_OG27bO'8sQWOG27bOOQO1G4[1G4[OOQO7+(_7+(_OOQRANA{ANA{OOQVG27SG27SO%5hQWOG27SO&3}QWOG27SO'9OQ^O7+&YO':iQWO7+'^O';]Q^O7+&YO%?pQ_O7+&YP%?pQ_O,5;SP'<iQWO,5;SP'<nQWO,5;SOOQV<<Is<<IsOOQVG26TG26TOOQVG23jG23jOOQO1G1|1G1|OOQVG26WG26WO'<yQWOG26WP&HfQWO'#HuO'=OQWO7+(OOOQO1G4R1G4RO'=ZQWO7++dO'=cQWO1G4SO$>PQYO1G4SO%,bQWO'#HyO'=nQWO,5@YO'=|QWO7+(VO%?pQ_O7+(VOOQO1G4T1G4TOOQO1G4V1G4VO'>WQWO1G4VO'>fQWO7+(^OOQVG27WG27WO'>qQWOG27WOOQS<<If<<IfO'>xQWO<<IfO'?TQWO<<IQOOQVLD,fLD,fO'?`QWOLD,fO'?hQWOLD,fOOQVLD)ULD)UOOQVLD,oLD,oOOQVLD,|LD,|O'?vQWOLD,|O%?pQ_OLD,|OOQVLD,nLD,nO%5hQWOLD,nO'?}Q^O<<ItO'AhQWO<<JxO'B[Q^O<<ItP'ChQWO1G0nP'DXQ^O1G0nP%?pQ_O1G0nP'EzQWO1G0nOOQVLD+rLD+rO'FPQWO7+)nOOQO,5>e,5>eOOQO-E;w-E;wO'F[QWO<<KqOOQVLD,rLD,rOOQSAN?QAN?QOOQV!$(!Q!$(!QO'FfQWO!$(!QOOQV!$(!h!$(!hO'FnQWO!$(!hOOQV!$(!Y!$(!YO'FuQ^OAN?`POQU7+&Y7+&YP'H`QWO7+&YP'IPQ^O7+&YP%?pQ_O7+&YOOQV!)9El!)9ElOOQV!)9FS!)9FSPOQU<<It<<ItP'JrQWO<<ItP'KcQ^O<<ItPOQUAN?`AN?`O'MUQWO'#CnO'M]QXO'#CnO'NUQWO'#IaO( kQXO'#IaO(!bQWO'#DpO(!bQWO'#DpO!.cQ_O'#EkO(!sQ_O'#EoO(!zQ_O'#FPO(%{Q_O'#FbO(&SQXO'#IaO(&yQ_O'#E}O('|Q_O'#FWO(!bQWO,5:[O(!bQWO,5:[O!.cQ_O,5;ZO!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;fO()PQ_O,5;kO(,QQWO,5;kO(,bQWO,5;|O(,iQYO'#CuO(,tQYO'#CvO(-PQWO'#CwO(-PQWO'#CwO(-bQYO'#CtO(-mQWO,5;iO(-tQWO,5;rO(-{Q_O,5;rO(/RQ_O,5;|O(!bQWO1G/vO(/YQWO1G0uO(0wQWO1G0wO(1RQWO1G0wO(2vQWO1G0wO(2}QWO1G0wO(4oQWO1G0wO(4vQWO1G0wO(6hQWO1G0wO(6oQWO1G0wO(6vQWO1G1QO(7WQWO1G1VO(7hQYO'#IfO(-PQWO,59cO(-PQWO,59cO(7sQWO1G1^O(7zQWO1G1hO(-PQWO1G.}O(8RQWO'#DpO!.^QXO'#FbO(8WQWO,5;ZO(8_QWO'#Cw",
  19989. stateData:
  19990. "(8q~O&}OSUOS'OPQ~OPoOQ!QOSVOTVOZeO[lO^RO_RO`ROa!UOd[Og!nOsVOtVOuVOw!POyvO|!VO}mO!Q!dO!U!WO!W!XO!X!^O!Z!YO!]!pO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO$i!eO$m!fO$q!gO$s!hO%T!iO%V!jO%Z!kO%]!lO%^!mO%f!oO%j!qO%s!rO'R`O'UQO'[kO'_UO'hcO'riO(QdO~O'O!sO~OZbX[bXdbXdlXobXwjX}bX!lbX!qbX!tbX#QbX#RbX#pbX'hbX'rbX'sbX'xbX'ybX'zbX'{bX'|bX'}bX(ObX(PbX(QbX(RbX(TbX~OybXXbX!ebX!PbXvbX#TbX~P$|OZ'TX['TXd'TXd'YXo'TXw'lXy'TX}'TX!l'TX!q'TX!t'TX#Q'TX#R'TX#p'TX'h'TX'r'TX's'TX'x'TX'y'TX'z'TX'{'TX'|'TX'}'TX(O'TX(P'TX(Q'TX(R'TX(T'TXv'TX~OX'TX!e'TX!P'TX#T'TX~P'ZOr!uO'^!wO'`!uO~Od!xO~O^RO_RO`ROaRO'UQO~Od!}O~Od#PO[(SXo(SXy(SX}(SX!l(SX!q(SX!t(SX#Q(SX#R(SX#p(SX'h(SX'r(SX's(SX'x(SX'y(SX'z(SX'{(SX'|(SX'}(SX(O(SX(P(SX(Q(SX(R(SX(T(SXv(SX~OZ#OO~P*`OZ#RO[#QO~OQ!QO^#TO_#TO`#TOa#]Od#ZOg!nOyvO|!VO!Q!dO!U#^O!W!lO!]!pO$i!eO$m!fO$q!gO$s!hO%T!iO%V!jO%Z!kO%]!lO%^!mO%f!oO%j!qO%s!rO'R#VO'U#SO~OPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'[kO'_UO'hcO'riO(QdO~P)xOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!j#eO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'[kO'_UO'hcO'riO(QdO~P)xO[#}Oo#xO}#zO!l#yO!q#jO!t#yO#Q#xO#R#uO#p$OO'h#gO'r#yO's#lO'x#hO'y#iO'z#iO'{#kO'|#nO'}#mO(O#|O(P#gO(Q#hO(R#fO(T#hO~OPoOQ!QOSVOTVOZeOd[OsVOtVOuVOw!PO!U#bO!W#cO!X!^O!Z!YO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'[kO'_UO[#sXo#sXy#sX}#sX!l#sX!q#sX!t#sX#Q#sX#R#sX#p#sX'h#sX'r#sX's#sX'x#sX'y#sX'z#sX'{#sX'|#sX'}#sX(O#sX(P#sX(Q#sX(R#sX(T#sXX#sX!e#sX!P#sXv#sX#T#sX~P)xOX(SX!e(SX!P(SXw(SX#T(SX~P*`OPoOQ!QOSVOTVOX$ROZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'R$UO'[kO'_UO'hcO'riO(QdO~P)xOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!P$XO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'R$UO'[kO'_UO'hcO'riO(QdO~P)xOQ!QOSVOTVO[$gO^$pO_$ZO`:QOa:QOd$aOsVOtVOuVO}$eO!i$qO!l$lO!q$hO#V$lO'U$YO'_UO'h$[O~O!j$rOP(XP~P<cOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#S$uO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'[kO'_UO'hcO'riO(QdO~P)xOw$vO~Oo'cX#Q'cX#R'cX#p'cX's'cX'x'cX'y'cX'z'cX'{'cX'|'cX'}'cX(O'cX(P'cX(R'cX(T'cX~OP%tXQ%tXS%tXT%tXZ%tX[%tX^%tX_%tX`%tXa%tXd%tXg%tXs%tXt%tXu%tXw%tXy%tX|%tX}%tX!Q%tX!U%tX!W%tX!X%tX!Z%tX!]%tX!l%tX!q%tX!t%tX#Y%tX#r%tX#{%tX$O%tX$b%tX$d%tX$f%tX$i%tX$m%tX$q%tX$s%tX%T%tX%V%tX%Z%tX%]%tX%^%tX%f%tX%j%tX%s%tX&{%tX'R%tX'U%tX'[%tX'_%tX'h%tX'r%tX(Q%tXv%tX~P@[Oy$xO['cX}'cX!l'cX!q'cX!t'cX'h'cX'r'cX(Q'cXv'cX~P@[Ow$yO!Q(iX!U(iX!W(iX$q(iX%](iX%^(iX~Oy$zO~PEsO!Q$}O!U%UO!W!lO$m%OO$q%PO$s%QO%T%RO%V%SO%Z%TO%]!lO%^%VO%f%WO%j%XO%s%YO~O!Q!lO!U!lO!W!lO$q%[O%]!lO~O%^%VO~PGaOPoOQ!QOSVOTVOZeO[lO^RO_RO`ROa!UOd[Og!nOsVOtVOuVOw!POyvO|!VO}mO!Q!dO!U!WO!W!XO!X!^O!Z!YO!]!pO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO$i!eO$m!fO$q!gO$s!hO%T!iO%V!jO%Z!kO%]!lO%^!mO%f!oO%j!qO%s!rO'R#VO'UQO'[kO'_UO'hcO'riO(QdO~Ov%`O~P]OQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f%wO%^%xO&W%{O'U%dO'[%eO(Q%zO~PGaO!Q{X!U{X!W{X$m{X$q{X$s{X%T{X%V{X%Z{X%]{X%^{X%f{X%j{X%s{X~P'ZO!Q{X!U{X!W{X$m{X$q{X$s{X%T{X%V{X%Z{X%]{X%^{X%f{X%j{X%s{X~O}%}O'U{XQ{XZ{X[{X^{X_{X`{Xa{Xd{Xg{X!q{X$f{X&W{X'[{X(Q{X~PMuOg&PO%f%WO!Q(iX!U(iX!W(iX$q(iX%](iX%^(iX~Ow!PO~P! yOw!PO!X&RO~PEvOPoOQ!QOSVOTVOZeO[lO^9xO_9xO`9xOa9xOd9{OsVOtVOuVOw!PO}mO!U#bO!W#cO!X;RO!Z!YO!]&UO!l:OO!q9}O!t:OO#Y!_O#r:RO#{:SO$O!]O$b!`O$d!bO$f!cO'U9vO'[kO'_UO'hcO'r:OO(QdO~OPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'[kO'_UO'hcO'riO(QdOo#qXy#qX#Q#qX#R#qX#p#qX's#qX'x#qX'y#qX'z#qX'{#qX'|#qX'}#qX(O#qX(P#qX(R#qX(T#qXX#qX!e#qX!P#qXv#qX#T#qX~P)xOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'[kO'_UO'hcO'riO(QdOo#zXy#zX#Q#zX#R#zX#p#zX's#zX'x#zX'y#zX'z#zX'{#zX'|#zX'}#zX(O#zX(P#zX(R#zX(T#zXX#zX!e#zX!P#zXv#zX#T#zX~P)xO'[kO[#}Xo#}Xy#}X}#}X!l#}X!q#}X!t#}X#Q#}X#R#}X#p#}X'h#}X'r#}X's#}X'x#}X'y#}X'z#}X'{#}X'|#}X'}#}X(O#}X(P#}X(Q#}X(R#}X(T#}XX#}X!e#}X!P#}Xv#}Xw#}X#T#}X~OPoO~OPoOQ!QOSVOTVOZeO[lO^9xO_9xO`9xOa9xOd9{OsVOtVOuVOw!PO}mO!U#bO!W#cO!X;RO!Z!YO!l:OO!q9}O!t:OO#Y!_O#r:RO#{:SO$O!]O$b!`O$d!bO$f!cO'U9vO'[kO'_UO'hcO'r:OO(QdO~O!S&_O~Ow!PO~O!j&bO~P<cO'U&cO~PEvOZ&eO~O'U&cO~O'_UOw(^Xy(^X!Q(^X!U(^X!W(^X$q(^X%](^X%^(^X~Oa&hO~P!1iO'U&iO~O_&nO'U&cO~OQ&oOZ&pO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f%wO%^%xO&W%{O'U%dO'[%eO(Q%zO~PGaO!j&uO~P<cO^&wO_&wO`&wOa&wOd'POw&|O'U&vO(Q&}O~O!i'UO!j'TO'U&cO~O'O!sO'P'VO'Q'XO~Or!uO'^'ZO'`!uO~OQ']O^'ja_'ja`'jaa'ja'U'ja~O['bOw'cO}'dO~OQ']O~OQ!QO^#TO_#TO`#TOa'jOd#ZO'U#SO~O['kO~OZbXdlXXbXobXPbX!SbX!ebX'sbX!PbX!ObXybX!ZbX#TbXvbX~O}bX~P!6mOZ'TXd'YXX'TXo'TX}'TX#p'TXP'TX!S'TX!e'TX's'TX!P'TX!O'TXy'TX!Z'TX#T'TXv'TX~O^#TO_#TO`#TOa'jO'U#SO~OZ'lO~Od'nO~OZ'TXd'YX~PMuOZ'oOX(SX!e(SX!P(SXw(SX#T(SX~P*`O[#}O}#zO(O#|O(R#fOo#_ay#_a!l#_a!q#_a!t#_a#Q#_a#R#_a#p#_a'h#_a'r#_a's#_a'x#_a'y#_a'z#_a'{#_a'|#_a'}#_a(P#_a(Q#_a(T#_aX#_a!e#_a!P#_av#_aw#_a#T#_a~Ow!PO!X&RO~Oy#caX#ca!e#ca!P#cav#ca#T#ca~P2gOPoOQ!QOSVOTVOZeOd[OsVOtVOuVOw!PO!U#bO!W#cO!X!^O!Z!YO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'[kO'_UO[#sao#say#sa}#sa!l#sa!q#sa!t#sa#Q#sa#R#sa#p#sa'h#sa'r#sa's#sa'x#sa'y#sa'z#sa'{#sa'|#sa'}#sa(O#sa(P#sa(Q#sa(R#sa(T#saX#sa!e#sa!P#sav#sa#T#sa~P)xOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'R#VO'[kO'_UO'hcO'riO(QdO!P(UP~P)xOu(RO#w(SO'U(QO~O[#}O}#zO!q#jO'h#gO's#lO'x#hO'y#iO'z#iO'{#kO'|#nO'}#mO(O#|O(P#gO(Q#hO(R#fO(T#hO!l#sa!t#sa#p#sa'r#sa~Oo#xO#Q#xO#R#uOy#saX#sa!e#sa!P#sav#sa#T#sa~P!BqOy(XO!e(VOX(WX~P2gOX(YO~OPoOQ!QOSVOTVOX(YOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'R$UO'[kO'_UO'hcO'riO(QdO~P)xOZ#RO~O!P(^O!e(VO~P2gOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'R$UO'[kO'_UO'hcO'riO(QdO~P)xOZbXdlXwjX}jX!tbX'rbX~OP!RX!S!RX!e!RX'q!RX's!RX!O!RXo!RXy!RX!P!RXX!RX!Z!RX#T!RXv!RX~P!IxOZ'TXd'YXw'lX}'lX!t'TX'r'TX~OP!`X!S!`X!e!`X's!`X!O!`Xo!`Xy!`X!P!`XX!`X!Z!`X#T!`Xv!`X~P!KZOT(`Ou(`O~O!t(aO'r(aOP!^X!S!^X!e!^X's!^X!O!^Xo!^Xy!^X!P!^XX!^X!Z!^X#T!^Xv!^X~O^9yO_9yO`:QOa:QO'U9wO~Od(dO~O'q(eOP'iX!S'iX!e'iX's'iX!O'iXo'iXy'iX!P'iXX'iX!Z'iX#T'iXv'iX~O!j&bO!P'mP~P<cOw(jO}(iO~O!j&bOX'mP~P<cO!j(nO~P<cOZ'oO!t(aO'r(aO~O!S(pO's(oOP$WX!e$WX~O!e(qOP(YX~OP(sO~OP!aX!S!aX!e!aX's!aX!O!aXo!aXy!aX!P!aXX!aX!Z!aX#T!aXv!aX~P!KZOy$UaX$Ua!e$Ua!P$Uav$Ua#T$Ua~P2gO!l({O'R#VO'U(wOv(ZP~OQ!QO^#TO_#TO`#TOa#]Od#ZOg!nOyvO|!VO!Q!dO!U#^O!W!lO!]!pO$i!eO$m!fO$q!gO$s!hO%T!iO%V!jO%Z!kO%]!lO%^!mO%f!oO%j!qO%s!rO'R`O'U#SO~Ov)SO~P#$]Oy)UO~PEsO%^)VO~PGaOa)YO~P!1iO%f)_O~PEvO_)`O'U&cO~O!i)eO!j)dO'U&cO~O'_UO!Q(^X!U(^X!W(^X$q(^X%](^X%^(^X~Ov%uX~P2gOv)fO~PGyOv)fO~Ov)fO~P]OQiXQ'YXZiXd'YX}iX#piX(PiX~ORiXwiX$fiX$|iX[iXoiXyiX!liX!qiX!tiX#QiX#RiX'hiX'riX'siX'xiX'yiX'ziX'{iX'|iX'}iX(OiX(QiX(RiX(TiX!PiX!eiXXiXPiXviX!SiX#TiX~P#(_OQjXQlXRjXZjXdlX}jX#pjX(PjXwjX$fjX$|jX[jXojXyjX!ljX!qjX!tjX#QjX#RjX'hjX'rjX'sjX'xjX'yjX'zjX'{jX'|jX'}jX(OjX(QjX(RjX(TjX!PjX!ejXXjX!SjXPjXvjX#TjX~O%^)iO~PGaOQ']Od)jO~O^)lO_)lO`)lOa)lO'U%dO~Od)pO~OQ']OZ)tO})rOR'VX#p'VX(P'VXw'VX$f'VX$|'VX['VXo'VXy'VX!l'VX!q'VX!t'VX#Q'VX#R'VX'h'VX'r'VX's'VX'x'VX'y'VX'z'VX'{'VX'|'VX'}'VX(O'VX(Q'VX(R'VX(T'VX!P'VX!e'VXX'VXP'VXv'VX!S'VX#T'VX~OQ!QO^:iO_:eO`TOaTOd:hO%^)iO'U:fO~PGaOQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!j)xO!q%oO$f%wO%^%xO&W%{O'U%dO'[%eO(Q%zO~PGaOQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!P){O!q%oO$f%wO%^%xO&W%{O'U%dO'[%eO(Q%zO~PGaO(P)}O~OR*PO#p*QO(P*OO~OQhXQ'YXZhXd'YX}hX(PhX~ORhX#phXwhX$fhX$|hX[hXohXyhX!lhX!qhX!thX#QhX#RhX'hhX'rhX'shX'xhX'yhX'zhX'{hX'|hX'}hX(OhX(QhX(RhX(ThX!PhX!ehXXhXPhXvhX!ShX#ThX~P#4_OQ*RO~O})rO~OQ!QO^%vO_%cO`TOaTOd%jO$f%wO%^%xO'U%dO~PGaO!Q*UO!j*UO~O^*XO`*XOa*XO!O*YO~OQ&oOZ*ZO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f%wO%^%xO&W%{O'U%dO'[%eO(Q%zO~PGaO[#}Oo:aO}#zO!l:bO!q#jO!t:bO#Q:aO#R:^O#p$OO'h#gO'r:bO's#lO'x#hO'y#iO'z#iO'{#kO'|#nO'}#mO(O#|O(P#gO(Q#hO(R#fO(T#hO~Ow'eX~P#9jOy#qaX#qa!e#qa!P#qav#qa#T#qa~P2gOy#zaX#za!e#za!P#zav#za#T#za~P2gOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!S&_O!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'[kO'_UO'hcO'riO(QdOo#zay#za#Q#za#R#za#p#za's#za'x#za'y#za'z#za'{#za'|#za'}#za(O#za(P#za(R#za(T#zaX#za!e#za!P#zav#za#T#za~P)xOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#S*dO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'[kO'_UO'hcO'riO(QdO~P)xOw*eO~P#9jO$b*hO$d*iO$f*jO~O!O*kO's(oO~O!S*mO~O'U*nO~Ow$yOy*pO~O'U*qO~OQ*tOw*uOy*xO}*vO$|*wO~OQ*tOw*uO$|*wO~OQ*tOw+PO$|*wO~OQ*tOo+UOy+WO!S+TO~OQ*tO}+YO~OQ!QOZ%rO[%qO^%vO`TOaTOd%jOg%yO}%pO!U!lO!W!lO!q%oO$f%wO$q%[O%]!lO%^%xO&W%{O'U%dO'[%eO(Q%zO~OR+aO_+]O!Q+bO~P#D_O_%cO!Q!lOw&UX$|&UX(P&UX~P#D_Ow$yO$f+gO$|*wO(P*OO~OQ!QOZ*ZO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f%wO%^%xO&W%{O'U%dO'[%eO(Q%zO~PGaOQ*tOw$yO!S+TO$|*wO~Oo+mOy+lO!S+nO's(oO~OdlXy!RX#pbXv!RX!e!RX~Od'YXy(mX#p'TXv(mX!e(mX~Od+pO~O^#TO_#TO`#TOa'jOw&|O'U&vO(Q+uO~Ov(oP~P!3|O#p+zO~Oy+{O~O!S+|O~O'O!sO'P'VO'Q,OO~Od,PO~OSVOTVO_%cOsVOtVOuVOw!PO!Q!lO'_UO~P#D_OS,_OT,_OZ,_O['bO_,ZOd,_Oo,_Os,_Ou,_Ow'cOy,_O}'dO!S,_O!e,_O!l,_O!q,]O!t,_O!{,_O#Q,_O#R,_O#S,_O#T,_O'R,_O'[%eO'_UO'h,[O's,]O'v,`O'x,[O'y,]O'z,]O'{,]O'|,^O'},^O(O,_O(P,aO(Q,aO(R,bO~OX,XO~P#K_Ov,dO~P#K_O!P,gO~P#K_Oo'ti#Q'ti#R'ti#p'ti's'ti'x'ti'y'ti'z'ti'{'ti'|'ti'}'ti(O'ti(P'ti(R'ti(T'ti~Oy,hO['ti}'ti!l'ti!q'ti!t'ti'h'ti'r'ti(Q'tiv'ti~P#N^OP$giQ$giS$giT$giZ$gi[$gi^$gi_$gi`$gia$gid$gig$gis$git$giu$giw$giy$gi|$gi}$gi!Q$gi!U$gi!W$gi!X$gi!Z$gi!]$gi!l$gi!q$gi!t$gi#Y$gi#r$gi#{$gi$O$gi$b$gi$d$gi$f$gi$i$gi$m$gi$q$gi$s$gi%T$gi%V$gi%Z$gi%]$gi%^$gi%f$gi%j$gi%s$gi&{$gi'R$gi'U$gi'[$gi'_$gi'h$gi'r$gi(Q$giv$gi~P#N^OX,iO~Oo,jO},kOX]X!P]X!e]X~Oy#ciX#ci!e#ci!P#civ#ci#T#ci~P2gO[#}O}#zO'x#hO(O#|O(Q#hO(R#fO(T#hOo#eiy#ei!l#ei!q#ei!t#ei#Q#ei#R#ei#p#ei'r#ei's#ei'y#ei'z#ei'{#ei'|#ei'}#eiX#ei!e#ei!P#eiv#ei#T#ei~O'h#ei(P#ei~P$&sO[#}O}#zO(O#|O(R#fOo#eiy#ei!l#ei!q#ei!t#ei#Q#ei#R#ei#p#ei'r#ei's#ei'y#ei'z#ei'{#ei'|#ei'}#eiX#ei!e#ei!P#eiv#ei#T#ei~O'h#ei'x#ei(P#ei(Q#ei(T#eiw#ei~P$(tO'h#gO(P#gO~P$&sO[#}O}#zO'h#gO'x#hO'y#iO'z#iO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiy#ei!l#ei!t#ei#Q#ei#R#ei#p#ei'r#ei's#ei'{#ei'|#ei'}#eiX#ei!e#ei!P#eiv#ei#T#ei~O!q#ei~P$+SO!q#jO~P$+SO[#}O}#zO!q#jO'h#gO'x#hO'y#iO'z#iO'{#kO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiy#ei!l#ei!t#ei#Q#ei#R#ei#p#ei'r#ei'|#ei'}#eiX#ei!e#ei!P#eiv#ei#T#ei~O's#ei~P$-[O's#lO~P$-[O[#}O}#zO!q#jO#R#uO'h#gO's#lO'x#hO'y#iO'z#iO'{#kO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiy#ei!l#ei!t#ei#Q#ei#p#ei'r#ei'|#eiX#ei!e#ei!P#eiv#ei#T#ei~O'}#ei~P$/dO'}#mO~P$/dO[#}O}#zO!q#jO'h#gO's#lO'x#hO'y#iO'z#iO'{#kO'|#nO'}#mO(O#|O(P#gO(Q#hO(R#fO(T#hO!l#ni!t#ni#p#ni'r#ni~Oo#xO#Q#xO#R#uOy#niX#ni!e#ni!P#niv#ni#T#ni~P$1lO[#}O}#zO!q#jO'h#gO's#lO'x#hO'y#iO'z#iO'{#kO'|#nO'}#mO(O#|O(P#gO(Q#hO(R#fO(T#hO!l#si!t#si#p#si'r#si~Oo#xO#Q#xO#R#uOy#siX#si!e#si!P#siv#si#T#si~P$3mOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'R#VO'[kO'_UO'hcO'riO(QdO~P)xO!e,rO!P(VX~P2gO!P,tO~OX,uO~P2gOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'[kO'_UO'hcO'riO(QdOX&fX!e&fX!P&fX~P)xO!e(VOX(Wa~Oy,yO!e(VOX(WX~P2gOX,zO~O!P,{O!e(VO~O!P,}O!e(VO~P2gOSVOTVOsVOtVOuVO'_UO'h$[O~P!6POP!baZca!S!ba!e!ba!tca'rca's!ba!O!bao!bay!ba!P!baX!ba!Z!ba#T!bav!ba~O!e-SO's(oO!P'nXX'nX~O!P-UO~O!i-_O!j-^O!l-ZO'U-WOv'oP~OX-`O~O_%cO!Q!lO~P#D_O!j-fOP&gX!e&gX~P<cO!e(qOP(Ya~O!S-hO's(oOP$Wa!e$Wa~Ow!PO(P*OO~OvbX!S!kX!ebX~O'R#VO'U(wO~O!S-lO~O!e-nOv([X~Ov-pO~Ov-rO~P,cOv-rO~P#$]O_-tO'U&cO~O!S-uO~Ow$yOy-vO~OQ*tOw*uOy-yO}*vO$|*wO~OQ*tOo.TO~Oy.^O~O!S._O~O!j.aO'U&cO~Ov.bO~Ov.bO~PGyOQ']O^'Xa_'Xa`'Xaa'Xa'U'Xa~Od.fO~OQ'YXQ'lXR'lXZ'lXd'YX}'lX#p'lX(P'lXw'lX$f'lX$|'lX['lXo'lXy'lX!l'lX!q'lX!t'lX#Q'lX#R'lX'h'lX'r'lX's'lX'x'lX'y'lX'z'lX'{'lX'|'lX'}'lX(O'lX(Q'lX(R'lX(T'lX!P'lX!e'lXX'lXP'lXv'lX!S'lX#T'lX~OQ!QOZ%rO[%qO^.qO_%cO`TOaTOd%jOg%yO}%pO!j.rO!q.oO!t.jO#V.lO$f%wO%^%xO&W%{O'R#VO'U%dO'[%eO(Q%zO!P(sP~PGaO#S.sOR%wa#p%wa(P%waw%wa$f%wa$|%wa[%wao%way%wa}%wa!l%wa!q%wa!t%wa#Q%wa#R%wa'h%wa'r%wa's%wa'x%wa'y%wa'z%wa'{%wa'|%wa'}%wa(O%wa(Q%wa(R%wa(T%wa!P%wa!e%waX%waP%wav%wa!S%wa#T%wa~O%^.uO~PGaO(P*OOR&Oa#p&Oaw&Oa$f&Oa$|&Oa[&Oao&Oay&Oa}&Oa!l&Oa!q&Oa!t&Oa#Q&Oa#R&Oa'h&Oa'r&Oa's&Oa'x&Oa'y&Oa'z&Oa'{&Oa'|&Oa'}&Oa(O&Oa(Q&Oa(R&Oa(T&Oa!P&Oa!e&OaX&OaP&Oav&Oa!S&Oa#T&Oa~O_%cO!Q!lO!j.wO(P)}O~P#D_O!e.xO(P*OO!P(uX~O!P.zO~OX.{Oy.|O(P*OO~O'[%eOR(qP~OQ']O})rORfa#pfa(Pfawfa$ffa$|fa[faofayfa!lfa!qfa!tfa#Qfa#Rfa'hfa'rfa'sfa'xfa'yfa'zfa'{fa'|fa'}fa(Ofa(Qfa(Rfa(Tfa!Pfa!efaXfaPfavfa!Sfa#Tfa~OQ']O})rOR&Va#p&Va(P&Vaw&Va$f&Va$|&Va[&Vao&Vay&Va!l&Va!q&Va!t&Va#Q&Va#R&Va'h&Va'r&Va's&Va'x&Va'y&Va'z&Va'{&Va'|&Va'}&Va(O&Va(Q&Va(R&Va(T&Va!P&Va!e&VaX&VaP&Vav&Va!S&Va#T&Va~O!P/TO~Ow$yO$f/YO$|*wO(P*OO~OQ!QOZ/ZO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f%wO%^%xO&W%{O'U%dO'[%eO(Q%zO~PGaOo/]O's(oO~O#W/^OP!YiQ!YiS!YiT!YiZ!Yi[!Yi^!Yi_!Yi`!Yia!Yid!Yig!Yio!Yis!Yit!Yiu!Yiw!Yiy!Yi|!Yi}!Yi!Q!Yi!U!Yi!W!Yi!X!Yi!Z!Yi!]!Yi!l!Yi!q!Yi!t!Yi#Q!Yi#R!Yi#Y!Yi#p!Yi#r!Yi#{!Yi$O!Yi$b!Yi$d!Yi$f!Yi$i!Yi$m!Yi$q!Yi$s!Yi%T!Yi%V!Yi%Z!Yi%]!Yi%^!Yi%f!Yi%j!Yi%s!Yi&{!Yi'R!Yi'U!Yi'[!Yi'_!Yi'h!Yi'r!Yi's!Yi'x!Yi'y!Yi'z!Yi'{!Yi'|!Yi'}!Yi(O!Yi(P!Yi(Q!Yi(R!Yi(T!YiX!Yi!e!Yi!P!Yiv!Yi!i!Yi!j!Yi#V!Yi#T!Yi~Oy#ziX#zi!e#zi!P#ziv#zi#T#zi~P2gOy$UiX$Ui!e$Ui!P$Uiv$Ui#T$Ui~P2gOv/dO!j&bO'R`O~P<cOw/mO}/lO~Oy!RX#pbX~Oy/nO~O#p/oO~OR+aO_+cO!Q/rO'U&iO'[%eO~Oa/yO|!VO'R#VO'U(QOv(cP~OQ!QOZ%rO[%qO^%vO_%cO`TOa/yOd%jOg%yO|!VO}%pO!q%oO$f%wO%^%xO&W%{O'R#VO'U%dO'[%eO(Q%zO!P(eP~PGaOQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f0UO%^%xO&W%{O'U%dO'[%eO(Q%zOw(`Py(`P~PGaOw*uO~Oy-yO$|*wO~Oa/yO|!VO'R#VO'U*nOv(gP~Ow+PO~OQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f0UO%^%xO&W%{O'U%dO'[%eO(Q%zO(R0_O~PGaOy0cO~OQ!QOSVOTVO[$gO^0kO_$ZO`:QOa:QOd$aOsVOtVOuVO}$eO!i$qO!j0lO!l$lO!q0dO!t0gO'R#VO'U$YO'[%eO'_UO'h$[O~O#V0mO!P(jP~P%1qOw!POy0oO#S0qO$|*wO~OR0tO!e0rO~P#(_OR0tO!S+TO!e0rO(P)}O~OR0tOo0vO!S+TO!e0rOQ'WXZ'WX}'WX#p'WX(P'WX~OR0tOo0vO!e0rO~OR0tO!e0rO~O$f/YO(P*OO~Ow$yO~Ow$yO$|*wO~Oo0|Oy0{O!S0}O's(oO~O!e1OOv(pX~Ov1QO~O^#TO_#TO`#TOa'jOw&|O'U&vO(Q1UO~Oo1XOQ'WXR'WXZ'WX}'WX!e'WX(P'WX~O!e1YO(P*OOR'ZX~O!e1YOR'ZX~O!e1YO(P)}OR'ZX~OR1[O~OX1]O~P#K_O!S1_OS'wXT'wXX'wXZ'wX['wX_'wXd'wXo'wXs'wXu'wXw'wXy'wX}'wX!e'wX!l'wX!q'wX!t'wX!{'wX#Q'wX#R'wX#S'wX#T'wX'R'wX'['wX'_'wX'h'wX's'wX'v'wX'x'wX'y'wX'z'wX'{'wX'|'wX'}'wX(O'wX(P'wX(Q'wX(R'wXv'wX!P'wX~O}1`O~Ov1aO~P#K_O!P1bO~P#K_OSVOTVOsVOtVOuVO'_UO~OSVOTVOsVOtVOuVO'_UO!P(vP~P!6POX1gO~Oy,hO~O!e,rO!P(Va~P2gOPoOQ!QOZeO[lO^RO_RO`ROaROd[Ow!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'R#VO'UQO'[kO'hcO'riO(QdO!P&eX!e&eX~P%;dO!e,rO!P(Va~OX&fa!e&fa!P&fa~P2gOX1lO~P2gOPoOQ!QOZeO[lO^RO_RO`ROaROd[Ow!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'UQO'[kO'hcO'riO(QdO~P%;dO!P1nO!e(VO~OP!biZci!S!bi!e!bi!tci'rci's!bi!O!bio!biy!bi!P!biX!bi!Z!bi#T!biv!bi~O's(oOP!oi!S!oi!e!oi!O!oio!oiy!oi!P!oiX!oi!Z!oi#T!oiv!oi~O!j&bO!P&`X!e&`XX&`X~P<cO!e-SO!P'naX'na~O!P1rO~Ov!RX!S!kX!e!RX~O!S1sO~O!e1tOv'pX~Ov1vO~O'U-WO~O!j1yO'U-WO~O(P*OOP$Wi!e$Wi~O!S1zO's(oOP$XX!e$XX~O!S1}O~Ov$_a!e$_a~P2gO!l({O'R#VO'U(wOv&hX!e&hX~O!e-nOv([a~Ov2RO~P,cOy2VO~O#p2WO~Oy2XO$|*wO~Ow*uOy2XO}*vO$|*wO~Oo2bO~Ow!POy2gO#S2iO$|*wO~O!S2kO~Ov2mO~O#S2nOR%wi#p%wi(P%wiw%wi$f%wi$|%wi[%wio%wiy%wi}%wi!l%wi!q%wi!t%wi#Q%wi#R%wi'h%wi'r%wi's%wi'x%wi'y%wi'z%wi'{%wi'|%wi'}%wi(O%wi(Q%wi(R%wi(T%wi!P%wi!e%wiX%wiP%wiv%wi!S%wi#T%wi~Od2oO~O^2rO!j.rO!q2sO'R#VO'[%eO~O(P*OO!P%{X!e%{X~O!e2tO!P(tX~O!P2vO~OQ!QOZ%rO[%qO^2xO_%cO`TOaTOd%jOg%yO}%pO!j2yO!q%oO$f%wO%^%xO&W%{O'U%dO'[%eO(Q%zO~PGaO^2zO!j2yO(P)}O~O!P%aX!e%aX~P#4_O^2zO~O(P*OOR&Oi#p&Oiw&Oi$f&Oi$|&Oi[&Oio&Oiy&Oi}&Oi!l&Oi!q&Oi!t&Oi#Q&Oi#R&Oi'h&Oi'r&Oi's&Oi'x&Oi'y&Oi'z&Oi'{&Oi'|&Oi'}&Oi(O&Oi(Q&Oi(R&Oi(T&Oi!P&Oi!e&OiX&OiP&Oiv&Oi!S&Oi#T&Oi~O_%cO!Q!lO!P&yX!e&yX~P#D_O!e.xO!P(ua~OR3RO(P*OO~O!e3SOR(rX~OR3UO~O(P*OOR&Pi#p&Piw&Pi$f&Pi$|&Pi[&Pio&Piy&Pi}&Pi!l&Pi!q&Pi!t&Pi#Q&Pi#R&Pi'h&Pi'r&Pi's&Pi'x&Pi'y&Pi'z&Pi'{&Pi'|&Pi'}&Pi(O&Pi(Q&Pi(R&Pi(T&Pi!P&Pi!e&PiX&PiP&Piv&Pi!S&Pi#T&Pi~O!P3VO~O$f3WO(P*OO~Ow$yO$f3WO$|*wO(P*OO~Ow!PO!Z!YO~O!Z3bO#T3`O's(oO~O!j&bO'R#VO~P<cOv3fO~Ov3fO!j&bO'R`O~P<cO!O3iO's(oO~Ow!PO~P#9jOo3lOy3kO(P*OO~OS,_OT,_OZ,_O['bO_3mOd,_Oo,_Os,_Ou,_Ow'cOy,_O}'dO!S,_O!e,_O!l,_O!q,]O!t,_O!{,_O#Q,_O#R,_O#S,_O#T,_O'R,_O'[%eO'_UO'h,[O's,]O'v,`O'x,[O'y,]O'z,]O'{,]O'|,^O'},^O(O,_O(P,aO(Q,aO(R,bO~O!P3qO~P&']Ov3tO~P&']OR0tO!S+TO!e0rO~OR0tOo0vO!S+TO!e0rO~Oa/yO|!VO'R#VO'U(QO~O!S3wO~O!e3yOv(dX~Ov3{O~OQ!QOZ%rO[%qO^%vO_%cO`TOa/yOd%jOg%yO|!VO}%pO!q%oO$f%wO%^%xO&W%{O'R#VO'U%dO'[%eO(Q%zO~PGaO!e4OO(P*OO!P(fX~O!P4QO~O!S4RO(P)}O~O!S+TO(P*OO~O!e4TOw(aXy(aX~OQ4VO~Oy2XO~Oa/yO|!VO'R#VO'U*nO~Oo4YOw*uO}*vOv%XX!e%XX~O!e4]Ov(hX~Ov4_O~O(P4aOy(_Xw(_X$|(_XR(_Xo(_X!e(_X~Oy4cO(P*OO~OQ!QO[$gO^4dO_$ZO`:QOa:QOd$aO}$eO!i$qO!j4eO!l$lO!q$hO#V$lO'U$YO'[%eO'h$[O~P%;dO!S4gO's(oO~O#V4iO~P%1qO!e4jO!P(kX~O!P4lO~O!P%aX!S!aX!e%aX's!aX~P!KZOQ!QO[$gO^4dO_$ZO`:QOa:QOd$aO}$eO!i$qO!j&bO!l$lO!q$hO#V$lO'U$YO'h$[O~P%;dO!e4jO!P(kX!S'fX's'fX~O^2zO!j2yO~Ow!POy2gO~O_4rO!Q/rO'U&iO'[%eOR&lX!e&lX~OR4tO!e0rO~O!S4vO~Ow$yO$|*wO(P*OO~Oy4wO~P2gOo4xOy4wO(P*OO~Ov&uX!e&uX~P!3|O!e1OOv(pa~Oo5OOy4}O(P*OO~OSVOTVO_%cOsVOtVOuVOw!PO!Q!lO'_UOR&vX!e&vX~P#D_O!e1YOR'Za~O!{5UO~O!P5VO~P#K_O!e5XO!P(wX~O!P5ZO~O!e,rO!P(Vi~OPoOQ!QOZeO[lO^RO_RO`ROaROd[Ow!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'R#VO'UQO'[kO'hcO'riO(QdO~P%;dO!P&ea!e&ea~P2gOX5]O~P2gOP!bqZcq!S!bq!e!bq!tcq'rcq's!bq!O!bqo!bqy!bq!P!bqX!bq!Z!bq#T!bqv!bq~O's(oO!P&`a!e&`aX&`a~O!i-_O!j-^O!l5_O'U-WOv&aX!e&aX~O!e1tOv'pa~O!S5aO~O!S5eO's(oOP$Xa!e$Xa~O(P*OOP$Wq!e$Wq~Ov$^i!e$^i~P2gOw!POy5gO#S5iO$|*wO~Oo5lOy5kO(P*OO~Oy5nO~Oy5nO$|*wO~Oy5rO(P*OO~Ow!POy5gO~Oo5yOy5xO(P*OO~O!S5{O~O!e2tO!P(ta~O^2zO!j2yO'[%eO~OQ!QOZ%rO[%qO^.qO_%cO`TOaTOd%jOg%yO}%pO!j.rO!q.oO!t6PO#V6RO$f%wO%^%xO&W%{O'R#VO'U%dO'[%eO(Q%zO!P&xX!e&xX~PGaOQ!QOZ%rO[%qO^6TO_%cO`TOaTOd%jOg%yO}%pO!j6UO!q%oO$f%wO%^%xO&W%{O'U%dO'[%eO(P)}O(Q%zO~PGaO!P%aa!e%aa~P#4_O^6VO~O#S6WOR%wq#p%wq(P%wqw%wq$f%wq$|%wq[%wqo%wqy%wq}%wq!l%wq!q%wq!t%wq#Q%wq#R%wq'h%wq'r%wq's%wq'x%wq'y%wq'z%wq'{%wq'|%wq'}%wq(O%wq(Q%wq(R%wq(T%wq!P%wq!e%wqX%wqP%wqv%wq!S%wq#T%wq~O(P*OOR&Oq#p&Oqw&Oq$f&Oq$|&Oq[&Oqo&Oqy&Oq}&Oq!l&Oq!q&Oq!t&Oq#Q&Oq#R&Oq'h&Oq'r&Oq's&Oq'x&Oq'y&Oq'z&Oq'{&Oq'|&Oq'}&Oq(O&Oq(Q&Oq(R&Oq(T&Oq!P&Oq!e&OqX&OqP&Oqv&Oq!S&Oq#T&Oq~O(P*OO!P&ya!e&ya~OX6XO~P2gO'[%eOR&wX!e&wX~O!e3SOR(ra~O$f6_O(P*OO~Ow![q~P#9jO#T6bO~O!Z3bO#T6bO's(oO~Ov6gO~O!S1_O#T'wX~O#T6kO~Oy6lO!P6mO~O!P6mO~P&']Oy6pO~Ov6pOy6lO~Ov6pO~P&']Oy6rO~O!e3yOv(da~O!S6uO~Oa/yO|!VO'R#VO'U(QOv&oX!e&oX~O!e4OO(P*OO!P(fa~OQ!QOZ%rO[%qO^%vO_%cO`TOa/yOd%jOg%yO|!VO}%pO!q%oO$f%wO%^%xO&W%{O'R#VO'U%dO'[%eO(Q%zO!P&pX!e&pX~PGaO!e4OO!P(fa~OQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f0UO%^%xO&W%{O'U%dO'[%eO(Q%zOw&nX!e&nXy&nX~PGaO!e4TOw(aay(aa~O!e4]Ov(ha~Oo7XOv%Xa!e%Xa~Oo7XOw*uO}*vOv%Xa!e%Xa~Oa/yO|!VO'R#VO'U*nOv&qX!e&qX~O(P*OOy$xaw$xa$|$xaR$xao$xa!e$xa~O(P4aOy(_aw(_a$|(_aR(_ao(_a!e(_a~O!P%aa!S!aX!e%aa's!aX~P!KZOQ!QO[$gO^7`O_$ZO`:QOa:QOd$aO}$eO!i$qO!j&bO!l$lO!q$hO#V$lO'U$YO'h$[O~P%;dO^6VO!j6UO~O!e4jO!P(ka~O!e4jO!P(ka!S'fX's'fX~OQ!QO[$gO^0kO_$ZO`:QOa:QOd$aO}$eO!i$qO!j0lO!l$lO!q0dO!t7dO#V7fO'R#VO'U$YO'[%eO'h$[O!P&sX!e&sX~P%;dO!S7hO's(oO~Ow!POy5gO$|*wO(P*OO~O!S+TOR&la!e&la~Oo0vO!S+TOR&la!e&la~Oo0vOR&la!e&la~O(P*OOR$yi!e$yi~Oy7kO~P2gOo7lOy7kO(P*OO~O(P*OORni!eni~O(P*OOR&va!e&va~O(P)}OR&va!e&va~OS,_OT,_OZ,_O_,_Od,_Oo,_Os,_Ou,_Oy,_O!S,_O!e,_O!l,_O!q,]O!t,_O!{,_O#Q,_O#R,_O#S,_O#T,_O'R,_O'[%eO'_UO'h,[O's,]O'x,[O'y,]O'z,]O'{,]O'|,^O'},^O(O,_O~O(P7nO(Q7nO(R7nO~P''`O!P7pO~P#K_OSVOTVOsVOtVOuVO'_UO!P&zX!e&zX~P!6PO!e5XO!P(wa~O!P&ei!e&ei~P2gO's(oOv!hi!e!hi~O!S7tO~O(P*OOP$Xi!e$Xi~Ov$^q!e$^q~P2gOw!POy7vO~Ow!POy7vO#S7yO$|*wO~Oy7{O~Oy7|O~Oy7}O(P*OO~Ow!POy7vO$|*wO(P*OO~Oo8SOy8RO(P*OO~O!e2tO!P(ti~O(P*OO!P%}X!e%}X~O!P%ai!e%ai~P#4_O^8VO~O!e8[O['cXv$`i}'cX!l'cX!q'cX!t'cX'h'cX'r'cX(Q'cX~P@[OQ#[iS#[iT#[i[#[i^#[i_#[i`#[ia#[id#[is#[it#[iu#[iv$`i}#[i!i#[i!j#[i!l#[i!q#[i!t'cX#V#[i'R#[i'U#[i'_#[i'h#[i'r'cX(Q'cX~P@[O#T#^a~P2gO#T8_O~O!Z3bO#T8`O's(oO~Ov8cO~Oy8eO~P2gOy8gO~Oy6lO!P8hO~Ov8gOy6lO~O!e3yOv(di~O(P*OOv%Qi!e%Qi~O!e4OO!P(fi~O!e4OO(P*OO!P(fi~O(P*OO!P&pa!e&pa~O(P8oOw(bX!e(bXy(bX~O(P*OO!S$wiy$wiw$wi$|$wiR$wio$wi!e$wi~O!e4]Ov(hi~Ov%Xi!e%Xi~P2gOo8rOv%Xi!e%Xi~O!P%ai!S!aX!e%ai's!aX~P!KZO(P*OO!P%`i!e%`i~O!e4jO!P(ki~OQ!QO[$gO^0kO_$ZO`:QOa:QOd$aO}$eO!i$qO!j0lO!l$lO!q0dO!t7dO#V8uO'R#VO'U$YO'[%eO'h$[O~P%;dO!P&sa!S'fX!e&sa's'fX~O(P*OOR$zq!e$zq~Oy8wO~P2gOy8RO~P2gO(P8yO(Q8yO(R8yO~O(P8yO(Q8yO(R8yO~P''`O's(oOv!hq!e!hq~O(P*OOP$Xq!e$Xq~Ow!POy8|O$|*wO(P*OO~Ow!POy8|O~Oy9PO~P2gOy9RO~P2gOo9TOy9RO(P*OO~OQ#[qS#[qT#[q[#[q^#[q_#[q`#[qa#[qd#[qs#[qt#[qu#[qv$`q}#[q!i#[q!j#[q!l#[q!q#[q#V#[q'R#[q'U#[q'_#[q'h#[q~O!e9WO['cXv$`q}'cX!l'cX!q'cX!t'cX'h'cX'r'cX(Q'cX~P@[Oo'cX!t'cX#Q'cX#R'cX#p'cX'r'cX's'cX'x'cX'y'cX'z'cX'{'cX'|'cX'}'cX(O'cX(P'cX(Q'cX(R'cX(T'cX~P'9OO#T9]O~O!Z3bO#T9]O's(oO~Oy9_O~O(P*OOv%Qq!e%Qq~O!e4OO!P(fq~O(P*OO!P&pi!e&pi~O(P8oOw(ba!e(bay(ba~Ov%Xq!e%Xq~P2gO!P&si!S'fX!e&si's'fX~O(P*OO!P%`q!e%`q~Oy9dO~P2gO(P9eO(Q9eO(R9eO~O's(oOv!hy!e!hy~Ow!POy9fO~Ow!POy9fO$|*wO(P*OO~Oy9hO~P2gOQ#[yS#[yT#[y[#[y^#[y_#[y`#[ya#[yd#[ys#[yt#[yu#[yv$`y}#[y!i#[y!j#[y!l#[y!q#[y#V#[y'R#[y'U#[y'_#[y'h#[y~O!e9kO['cXv$`y}'cX!l'cX!q'cX!t'cX'h'cX'r'cX(Q'cX~P@[Oo'cX!t'cX#Q'cX#R'cX#p'cX'r'cX's'cX'x'cX'y'cX'z'cX'{'cX'|'cX'}'cX(O'cX(P'cX(Q'cX(R'cX(T'cX~P'?}O!e9lO['cX}'cX!l'cX!q'cX!t'cX'h'cX'r'cX(Q'cX~P@[OQ#[iS#[iT#[i[#[i^#[i_#[i`#[ia#[id#[is#[it#[iu#[i}#[i!i#[i!j#[i!l#[i!q#[i!t'cX#V#[i'R#[i'U#[i'_#[i'h#[i'r'cX(Q'cX~P@[O#T9oO~O(P*OO!P&pq!e&pq~Ov%Xy!e%Xy~P2gOw!POy9pO~Oy9qO~P2gOQ#[!RS#[!RT#[!R[#[!R^#[!R_#[!R`#[!Ra#[!Rd#[!Rs#[!Rt#[!Ru#[!Rv$`!R}#[!R!i#[!R!j#[!R!l#[!R!q#[!R#V#[!R'R#[!R'U#[!R'_#[!R'h#[!R~O!e9rO['cX}'cX!l'cX!q'cX!t'cX'h'cX'r'cX(Q'cX~P@[OQ#[qS#[qT#[q[#[q^#[q_#[q`#[qa#[qd#[qs#[qt#[qu#[q}#[q!i#[q!j#[q!l#[q!q#[q!t'cX#V#[q'R#[q'U#[q'_#[q'h#[q'r'cX(Q'cX~P@[O!e9uO['cX}'cX!l'cX!q'cX!t'cX'h'cX'r'cX(Q'cX~P@[OQ#[yS#[yT#[y[#[y^#[y_#[y`#[ya#[yd#[ys#[yt#[yu#[y}#[y!i#[y!j#[y!l#[y!q#[y!t'cX#V#[y'R#[y'U#[y'_#[y'h#[y'r'cX(Q'cX~P@[OwbX~P$|OwjX}jX!tbX'rbX~P!6mOZ'TXd'YXo'TXw'lX!t'TX'r'TX's'TX~O['TXd'TXw'TX}'TX!l'TX!q'TX#Q'TX#R'TX#p'TX'h'TX'x'TX'y'TX'z'TX'{'TX'|'TX'}'TX(O'TX(P'TX(Q'TX(R'TX(T'TX~P'MmOP'TX}'lX!S'TX!e'TX!O'TXy'TX!P'TXX'TX!Z'TX#T'TXv'TX~P'MmO^9xO_9xO`9xOa9xO'U9vO~O!j:VO~P!.cOPoOQ!QOZeO^9xO_9xO`9xOa9xOd9{O!U#bO!W#cO!X;RO!Z!YO#Y!_O#r:RO#{:SO$O!]O$b!`O$d!bO$f!cO'U9vO'[kO[#sXo#sXw#sX}#sX!l#sX!q#sX!t#sX#Q#sX#R#sX#p#sX'h#sX'r#sX's#sX'x#sX'y#sX'z#sX'{#sX'|#sX'}#sX(O#sX(P#sX(Q#sX(R#sX(T#sX~P%;dO#S$uO~P!.cO}'lXP'TX!S'TX!e'TX!O'TXy'TX!P'TXX'TX!Z'TX#T'TXv'TX~P'MmOo#qX#Q#qX#R#qX#p#qX's#qX'x#qX'y#qX'z#qX'{#qX'|#qX'}#qX(O#qX(P#qX(R#qX(T#qX~P!.cOo#zX#Q#zX#R#zX#p#zX's#zX'x#zX'y#zX'z#zX'{#zX'|#zX'}#zX(O#zX(P#zX(R#zX(T#zX~P!.cOPoOQ!QOZeO^9xO_9xO`9xOa9xOd9{O!U#bO!W#cO!X;RO!Z!YO#Y!_O#r:RO#{:SO$O!]O$b!`O$d!bO$f!cO'U9vO'[kO[#sao#saw#sa}#sa!l#sa!q#sa!t#sa#Q#sa#R#sa#p#sa'h#sa'r#sa's#sa'x#sa'y#sa'z#sa'{#sa'|#sa'}#sa(O#sa(P#sa(Q#sa(R#sa(T#sa~P%;dOo:aO#Q:aO#R:^Ow#sa~P!BqOw$Ua~P#9jOQ'YXd'YX}iX~OQlXdlX}jX~O^:zO_:zO`:zOa:zO'U:fO~OQ'YXd'YX}hX~Ow#qa~P#9jOw#za~P#9jO!S&_Oo#za#Q#za#R#za#p#za's#za'x#za'y#za'z#za'{#za'|#za'}#za(O#za(P#za(R#za(T#za~P!.cO#S*dO~P!.cOw#ci~P#9jO[#}O}#zO'x#hO(O#|O(Q#hO(R#fO(T#hOo#eiw#ei!l#ei!q#ei!t#ei#Q#ei#R#ei#p#ei'r#ei's#ei'y#ei'z#ei'{#ei'|#ei'}#ei~O'h#ei(P#ei~P(/aO'h#gO(P#gO~P(/aO[#}O}#zO'h#gO'x#hO'y#iO'z#iO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiw#ei!l#ei!t#ei#Q#ei#R#ei#p#ei'r#ei's#ei'{#ei'|#ei'}#ei~O!q#ei~P(1]O!q#jO~P(1]O[#}O}#zO!q#jO'h#gO'x#hO'y#iO'z#iO'{#kO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiw#ei!l#ei!t#ei#Q#ei#R#ei#p#ei'r#ei'|#ei'}#ei~O's#ei~P(3UO's#lO~P(3UO[#}O}#zO!q#jO#R:^O'h#gO's#lO'x#hO'y#iO'z#iO'{#kO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiw#ei!l#ei!t#ei#Q#ei#p#ei'r#ei'|#ei~O'}#ei~P(4}O'}#mO~P(4}Oo:aO#Q:aO#R:^Ow#ni~P$1lOo:aO#Q:aO#R:^Ow#si~P$3mOQ'YXd'YX}'lX~Ow#zi~P#9jOw$Ui~P#9jOd:UO~Ow#ca~P#9jOd:|O~OU'x_'v'Q'P'_s!{'_'U'[~",
  19991. goto:
  19992. "$L^(xPPPPPPP(yPP)QPP)`PPPP)l-rP0r5oP7a7a9U7a?VDoEQPEWHaPPPPPPKqP! b! pPPPPP!!hP!%QP!%QPP!'QP!)TP!)Y!*P!*w!*w!*w!)Y!+nP!)Y!.c!.fPP!.lP!)Y!)Y!)Y!)YP!)Y!)YP!)Y!)Y!/[!/[!/y!0hP!0hKaKaKaPPPP!0hPP!%QP!0v!0y!1P!2Q!2^!4^!4^!6[!8^!2^!2^!:Y!;w!=h!?T!@n!BV!Cl!D}!2^!2^P!2^P!2^!2^!F^!2^P!G}!2^!2^P!I}!2^P!2^!8^!8^!2^!8^!2^!LU!N^!Na!8^!2^!Nd!Ng!Ng!Ng!Nk!%QP!%QP!%QP! b! bP!Nu! b! bP# R#!g! bP! bP#!v##{#$T#$s#$w#$}#$}#%VP#']#']#'c#(X#(e! bP! bP#(u#)U! bP! bPP#)b#)p#)|#*f#)v! b! bP! b! b! bP#*l#*l#*r#*x#*l#*l! b! bP#+V#+`#+j#+j#-b#/U#/b#/b#/e#/e5o5o5o5o5o5o5o5oP5o#/h#/n#0Y#2e#2k#2z#6x#7O#7U#7h#7r#9c#9m#9|#:S#:Y#:d#:n#:t#;R#;X#;_#;i#;w#<R#>a#>m#>z#?Q#?Y#?a#?k#?qPPPPPPP#?w#CTP#GS#Kn#Mi$ h$'UP$'XPPP$*`$*i$*{$0V$2e$2n$4gP!)Y$5a$8u$;l$?W$?a$?f$?iPPP$?l$BcP$BsPPPPPPPPPP$CXP$Eg$Ej$Em$Es$Ev$Ey$E|$FP$FV$Ha$Hd$Hg$Hj$Hm$Hp$Hs$Hv$Hy$H|$IP$KV$KY$K]#*l$Ki$Ko$Kr$Ku$Ky$K}$LQ$LT$LW$LZQ!tPT'V!s'Wi!SOlm!P!T$T$W$y%b)T*e/fQ'h#QQ,l'kQ1d,kR7q5X(SSOY[bfgilmop!O!P!T!Y!Z![!_!`!c!p!q!|!}#Q#U#Z#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$`$a$e$g$h$q$r$y%X%_%b&U&Y&[&b&u&z&|'P'a'k'm'n'|(V(X(a(c(d(e(i(n(o(q({)R)T)h*Y*e*h*j*k+Y+m+y,k,o,r,y-Q-S-f-l-s.|/]/a/c/f0d0f0l0|1O1i1s1}3`3b3g3i3l4Y4e4j4x5O5X5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9z9{9|9}:O:P:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m:nS(y$v-nQ*o&eQ*s&hQ-j(xQ-x)YW0Y+P0X4]7ZR4[0Z&{!RObfgilmop!O!P!T!Y!Z![!_!`!c!p#Q#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r$y%_%b&U&Y&[&b&u'k'|(V(X(a(e(i(n(o(q({)R)T)h*Y*e*h*j*k+Y+m,k,r,y-S-f-l-s.|/]/a/c/f0d0f0l0|1i1s1}3`3b3g3i3l4Y4e4j4x5O5X5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m#r]Ofgilmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h+m,r,y-l.|0|1i1}3`3b3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9of#[b#Q$y'k(a)R)T*Y,k-s5X!h$bo!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7t$b%k!Q!n$O$u%o%p%q%y%{&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8n!W;Q!Y!_!`*h*k/]3i9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mR;T%n$_%u!Q!n$O$u%o%p%q&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8n$e%l!Q!n$O$u%n%o%p%q%y%{&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8n'hZOY[fgilmop!O!P!T!Y!Z![!_!`!c!p!|!}#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$`$a$e$g$h$q$r%_%b%i%j&U&Y&[&b&u'a'|(V(X(c(d(e(i(n(o(q({)h)o)p*e*h*j*k+Y+m,r,y-Q-S-f-l.h.|/]/a/c/f0d0f0l0|1i1s1}3`3b3g3i3l4Y4e4j4x5O5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9z9{9|9}:O:P:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:g:h:l:m:n:{:|;P$^%l!Q!n$O$u%n%o%p%q%y%{&P&p&r(p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8nQ&j!hQ&k!iQ&l!jQ&m!kQ&s!oQ)Z%QQ)[%RQ)]%SQ)^%TQ)a%WQ+_&oS,Q']1YQ.V)_S/q*t4VR4p0r+}TOY[bfgilmop!O!P!Q!T!Y!Z![!_!`!c!n!p!q!|!}#Q#U#Z#e#o#p#q#r#s#t#u#v#w#x#y#z#}$O$T$W$`$a$e$g$h$q$r$u$y%X%_%b%i%j%n%o%p%q%y%{&P&U&Y&[&b&o&p&r&u&z&|'P']'a'k'm'n'|(V(X(a(c(d(e(i(n(o(p(q({)R)T)h)o)p)r)w)x)}*O*Q*U*Y*Z*]*d*e*h*j*k*m*v*w+T+U+Y+g+m+n+y+|,k,o,r,y-Q-S-f-h-l-s-u.T._.h.o.s.w.x.|/Y/Z/]/a/c/f/z/|0_0d0f0l0q0v0|0}1O1X1Y1i1s1z1}2b2i2k2n2t2w3W3`3b3g3i3l3w3}4O4T4W4Y4a4e4g4j4v4x5O5X5a5e5i5l5y5{6W6_6b6f6u6{6}7X7c7h7l7t7y8S8_8`8n8r9T9]9o9z9{9|9}:O:P:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:g:h:l:m:n:{:|;PQ'[!xQ'g#PQ)k%gU)q%m*S*VR.e)jQ,S']R5R1Y#t%s!Q!n$O$u%p%q&P&p&r(p)w)x)}*Q*U*Z*]*d*m*v+U+g+n+|-h-u.T._.s.w.x/Y/Z/z/|0_0q0v0}1X1z2b2i2k2n2w3W3w3}4O4W4g4v5e5i5{6W6_6u6{6}7h7y8nQ)w%oQ+^&oQ,T']l,_'b'c'd,Y,e,f/l/m1`3p3s5V5W7pS.p)r2tQ.}*OQ/P*RQ/p*tS0P*w4TQ0`+T[0n+Y.i0f4j6O7cQ2w.oS4f0d2sQ4o0rQ5S1YQ6Y3SQ7P4RQ7T4VQ7^4aR9a8o&pVOfgilmop!O!P!T!Y!Z![!_!`!c!p#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r%_%b&U&Y&[&b&u']'|(V(X(a(e(i(n(o(q({)h*e*h*j*k+Y+m,j,k,r,y-S-f-l.|/]/a/c/f0d0f0l0|1Y1i1s1}3`3b3g3i3l4Y4e4j4x5O5X5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mU&g!g%P%[m,_'b'c'd,Y,e,f/l/m1`3p3s5V5W7p$nsOfgilm!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y'|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:R:S:V:W:X:Y:Z:[:]:^:_:`:a:lS$tp:PS&O!W#bS&Q!X#cQ&`!bQ*^&RQ*`&VS*c&[:mQ*g&^Q,S']Q-i(vQ/h*iQ0o+ZS2g.W0pQ3^/^Q3_/_Q3h/gQ3j/jQ5R1YU5g2S2h4nU7v5h5j5wQ8d6iS8|7w7xS9f8}9OR9p9gi{Ob!O!P!T$y%_%b)R)T)h-shxOb!O!P!T$y%_%b)R)T)h-sW/u*u/s3y6vQ/|*vW0Z+P0X4]7ZQ3}/zQ6}4OR8n6{!h$do!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7tQ&d!dQ&f!fQ&n!mW&x!q%X&|1OQ'S!rQ)W$}Q)X%OQ)`%VU)c%Y'T'UQ*r&hS+r&z'PS-X(j1tQ-t)VQ-w)YS.`)d)eS0w+b/rQ1R+yQ1V+zS1w-^-_Q2l.aQ3u/oQ5b1yR5m2W${sOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m$zsOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mR3^/^V&T!Y!`*h!i$lo!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7t!k$^o!c!p$e$g$h$q$r&U&b&u(a(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7t!i$co!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7t&e^Ofgilmop!O!P!T!Y!Z![!_!`!c!p#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r%_%b&U&Y&[&b&u'|(V(X(e(i(n(o(q({)h*e*h*j*k+Y+m,r,y-S-f-l.|/]/a/c/f0d0f0l0|1i1s1}3`3b3g3i3l4Y4e4j4x5O5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mR(k$fQ-Z(jR5_1tQ(R#|S(z$v-nS-Y(j1tQ-k(xW/t*u/s3y6vS1x-^-_Q3x/uR5c1yQ'e#Oh,b'b'c'd,Y,e,f/l/m1`3p3s5WQ,m'lQ,p'oQ.t)tR8f6kQ'f#Oh,b'b'c'd,Y,e,f/l/m1`3p3s5WQ,n'lQ,p'oQ.t)tR8f6ki,b'b'c'd,Y,e,f/l/m1`3p3s5WR*f&]X/b*e/c/f3g!}aOb!O!P!T#z$v$y%_%b'|(x)R)T)h)r*e*u*v+P+Y,r-n-s.i/a/c/f/s/z0X0f1i2t3g3y4O4]4j6O6f6v6{7Z7cQ3a/`Q6d3cQ8a6eR9^8b${rOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m#nfOfglmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#z#}$T$W%_%b&Y&['|(V(X({)h+m,r,y-l.|0|1i1}3`3b3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o!T9|!Y!_!`*h*k/]3i9|9}:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:l:m#rfOfgilmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h+m,r,y-l.|0|1i1}3`3b3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o!X9|!Y!_!`*h*k/]3i9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m$srOfglmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:l:m#U#oh#d$P$Q$V$s%^&W&X'p's't'u'v'w'x'y'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9i}:W&S&]/j3]6i:c:d:j:k:o:q:r:s:t:u:v:w:x:y:};O;S#W#ph#d$P$Q$V$s%^&W&X'p'q's't'u'v'w'x'y'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9i!P:X&S&]/j3]6i:c:d:j:k:o:p:q:r:s:t:u:v:w:x:y:};O;S#S#qh#d$P$Q$V$s%^&W&X'p't'u'v'w'x'y'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9i{:Y&S&]/j3]6i:c:d:j:k:o:r:s:t:u:v:w:x:y:};O;S#Q#rh#d$P$Q$V$s%^&W&X'p'u'v'w'x'y'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9iy:Z&S&]/j3]6i:c:d:j:k:o:s:t:u:v:w:x:y:};O;S#O#sh#d$P$Q$V$s%^&W&X'p'v'w'x'y'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9iw:[&S&]/j3]6i:c:d:j:k:o:t:u:v:w:x:y:};O;S!|#th#d$P$Q$V$s%^&W&X'p'w'x'y'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9iu:]&S&]/j3]6i:c:d:j:k:o:u:v:w:x:y:};O;S!x#vh#d$P$Q$V$s%^&W&X'p'y'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9iq:_&S&]/j3]6i:c:d:j:k:o:w:x:y:};O;S!v#wh#d$P$Q$V$s%^&W&X'p'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9io:`&S&]/j3]6i:c:d:j:k:o:x:y:};O;S$]#{h#`#d$P$Q$V$s%^&S&W&X&]'p'q'r's't'u'v'w'x'y'z'{'}(T(Z(_*a*b,q,v,x-m/j0y1j1m2O3Q3]4y5[5f6c6i6j7W7j7m7z8Q8q8x9S9c9i:c:d:j:k:o:p:q:r:s:t:u:v:w:x:y:};O;S${jOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m$v!aOfgilmp!O!P!T!Y!Z!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mQ&Y![Q&Z!]R:l:S#rpOfgilmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h+m,r,y-l.|0|1i1}3`3b3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9oQ&[!^!W:P!Y!_!`*h*k/]3i9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mR:m;RR$moR-e(qR$wqT(|$v-nQ/e*eS3e/c/fR6h3gQ3o/lQ3r/mQ6n3pR6q3sQ$zwQ)U${Q*p&fQ+e&qQ+h&sQ-v)XW.Y)a+i+j+kS/W*[+fW2c.V.Z.[.]U3X/X/[0xU5t2d2e2fS6]3Y3[S8O5u5vS8X6[6^Q9Q8PS9U8Y8ZR9j9V^|O!O!P!T%_%b)hX)Q$y)R)T-sQ&r!nQ*]&PQ*{&jQ+O&kQ+S&lQ+V&mQ+[&nQ+k&sQ-|)ZQ.P)[Q.S)]Q.U)^Q.X)`Q.])aQ2T-tQ2f.VR4W0UU+`&o*t4VR4q0rQ+X&mQ+j&sS.[)a+k^0u+^+_/p/q4o4p7TS2e.V.]S4S0Q0RR5v2fS0Q*w4TQ0`+TR7^4aU+c&o*t4VR4r0rQ*y&jQ*}&kQ+R&lQ+f&qQ+i&sS-z)Z*{S.O)[+OS.R)]+SU.Z)a+j+kQ/X*[Q0W*zQ0p+ZQ2Y-{Q2Z-|Q2^.PQ2`.SU2d.V.[.]Q2h.WS3[/[0xS5h2S4nQ5o2[S5u2e2fQ6^3YS7x5j5wQ8P5vQ8Y6[Q8}7wQ9V8ZR9g9OQ0S*wR7R4TQ*x&jQ*|&kU-y)Z*y*{U-})[*}+OS2X-z-|S2].O.PQ4Z0YQ5n2ZQ5p2^R7Y4[Q/v*uQ3v/sQ6w3yR8k6vQ*z&jS-{)Z*{Q2[-|Q4Z0YR7Y4[Q+Q&lU.Q)]+R+SS2_.R.SR5q2`Q0[+PQ4X0XQ7[4]R8s7ZQ+Z&nS.W)`+[S2S-t.XR5j2TQ0h+YQ4h0fQ7e4jR8t7cQ.l)rQ0h+YQ2q.iQ4h0fQ6R2tQ7e4jQ8U6OR8t7cQ0h+YR4h0fX'O!q%X&|1OX&{!q%X&|1OW'O!q%X&|1OS+t&z'PR1T+y_|O!O!P!T%_%b)hQ%a!PS)g%_%bR.c)h$^%u!Q!n$O$u%o%p%q&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8nQ*T%yR*W%{$c%n!Q!n$O$u%o%p%q%y%{&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8nW)s%m%x*S*VQ.d)iR2|.uR.l)rR6R2tQ'W!sR+}'WQ!TOQ$TlQ$WmQ%b!P[%|!T$T$W%b)T/fQ)T$yR/f*e$b%i!Q!n$O$u%o%p%q%y%{&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8n[)m%i)o.h:g:{;PQ)o%jQ.h)pQ:g%nQ:{:hR;P:|Q!vUR'Y!vS!OO!TU%]!O%_)hQ%_!PR)h%b#rYOfgilmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h+m,r,y-l.|0|1i1}3`3b3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9oh!yY!|#U$`'a'm(c,o-Q9z:T:nQ!|[f#Ub#Q$y'k(a)R)T*Y,k-s5X!h$`o!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7tQ'a!}Q'm#ZQ(c$aQ,o'nQ-Q(d!W9z!Y!_!`*h*k/]3i9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mQ:T9{R:n:UQ-T(fR1q-TQ1u-ZR5`1uQ,Y'bQ,e'cQ,f'dW1^,Y,e,f5WR5W1`Q/c*eS3d/c3gR3g/ffbO!O!P!T$y%_%b)R)T)h-sp#Wb'|(x.i/a/s/z0X0f1i6O6f6v6{7Z7cQ'|#zS(x$v-nQ.i)rW/a*e/c/f3gQ/s*uQ/z*vQ0X+PQ0f+YQ1i,rQ6O2tQ6v3yQ6{4OQ7Z4]R7c4jQ,s'}Q1h,qT1k,s1hS(W$Q(ZQ(]$VU,w(W(],|R,|(_Q(r$mR-g(rQ-o(}R2Q-oQ3p/lQ3s/mT6o3p3sQ)R$yS-q)R-sR-s)TQ4b0`R7_4b`0s+]+^+_+`+c/p/q7TR4s0sQ8p7PR9b8pQ4U0SR7S4UQ3z/vQ6s3vT6x3z6sQ4P/{Q6y3|U7O4P6y8lR8l6zQ4^0[Q7V4XT7]4^7VhzOb!O!P!T$y%_%b)R)T)h-sQ$|xW%Zz$|%f)u$b%f!Q!n$O$u%o%p%q%y%{&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8nR)u%nS4k0h0mS7b4h4iT7g4k7bW&z!q%X&|1OS+q&z+yR+y'PQ1P+vR4|1PU1Z,R,S,TR5T1ZS3T/P7TR6Z3TQ2u.lQ5}2qT6S2u5}Q.y)yR3P.yQ5Y1dR7r5Y^_O!O!P!T%_%b)hY#Xb$y)R)T-s$l#_fgilmp!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W&Y&['|(V(X({*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m!h$io!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7tW'i#Q'k,k5XQ-O(aR/U*Y&z!RObfgilmop!O!P!T!Y!Z![!_!`!c!p#Q#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r$y%_%b&U&Y&[&b&u'k'|(V(X(a(e(i(n(o(q({)R)T)h*Y*e*h*j*k+Y+m,k,r,y-S-f-l-s.|/]/a/c/f0d0f0l0|1i1s1}3`3b3g3i3l4Y4e4j4x5O5X5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m[!{Y[#U#Z9z9{W&{!q%X&|1O['`!|!}'m'n:T:US(b$`$aS+s&z'PU,W'a,o:nS-P(c(dQ1S+yR1o-QS%t!Q&oQ&q!nQ(U$OQ(v$uS)v%o.oQ)y%pQ)|%qS*[&P&rQ+d&pQ,R']Q-c(pQ.k)rU.v)w)x2wS.})}*OQ/O*QQ/S*UQ/V*ZQ/[*]Q/_*dQ/k*mQ/{*vS0R*w4TQ0`+TQ0b+UQ0x+gQ0z+nQ1W+|Q1|-hQ2U-uQ2a.TQ2j._Q2{.sQ2}.wQ3O.xQ3Y/YQ3Z/ZS3|/z/|Q4`0_Q4n0qQ4u0vQ4z0}Q5P1XQ5Q1YQ5d1zQ5s2bQ5w2iQ5z2kQ5|2nQ6Q2tQ6[3WQ6t3wQ6z3}Q6|4OQ7U4WQ7^4aQ7a4gQ7i4vQ7u5eQ7w5iQ8T5{Q8W6WQ8Z6_Q8j6uS8m6{6}Q8v7hQ9O7yR9`8n$^%m!Q!n$O$u%o%p%q&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8nQ)i%nQ*S%yR*V%{$y%h!Q!n$O$u%i%j%n%o%p%q%y%{&P&o&p&r'](p)o)p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.h.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8n:g:h:{:|;P'tWOY[bfgilmop!O!P!T!Y!Z![!_!`!c!p!|!}#Q#U#Z#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$`$a$e$g$h$q$r$y%_%b&U&Y&[&b&u'a'k'm'n'|(V(X(a(c(d(e(i(n(o(q({)R)T)h*Y*e*h*j*k+Y+m,k,o,r,y-Q-S-f-l-s.|/]/a/c/f0d0f0l0|1i1s1}3`3b3g3i3l4Y4e4j4x5O5X5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9z9{9|9}:O:P:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m:n$x%g!Q!n$O$u%i%j%n%o%p%q%y%{&P&o&p&r'](p)o)p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.h.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8n:g:h:{:|;P_&y!q%X&z&|'P+y1OR,U']$zrOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m!j$]o!c!p$e$g$h$q$r&U&b&u(a(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7tQ,S']Q1c,jQ1d,kQ5R1YR7q5X_}O!O!P!T%_%b)h^|O!O!P!T%_%b)hQ#YbX)Q$y)R)T-sbhO!O!T3`6b8_8`9]9oS#`f9|Q#dgQ$PiQ$QlQ$VmQ$spW%^!P%_%b)hU&S!Y!`*hQ&W!ZQ&X![Q&]!_Q'p#eQ'q#oS'r#p:XQ's#qQ't#rQ'u#sQ'v#tQ'w#uQ'x#vQ'y#wQ'z#xQ'{#yQ'}#zQ(T#}Q(Z$TQ(_$WQ*a&YQ*b&[Q,q'|Q,v(VQ,x(XQ-m({Q/j*kQ0y+mQ1j,rQ1m,yQ2O-lQ3Q.|Q3]/]Q4y0|Q5[1iQ5f1}Q6c3bQ6i3iQ6j3lQ7W4YQ7j4xQ7m5OQ7z5lQ8Q5yQ8q7XQ8x7lQ9S8SQ9c8rQ9i9TQ:c:OQ:d:PQ:j:RQ:k:SQ:o:VQ:p:WQ:q:YQ:r:ZQ:s:[Q:t:]Q:u:^Q:v:_Q:w:`Q:x:aQ:y:bQ:}:lQ;O:mR;S9}^tO!O!P!T%_%b)h$`#afgilmp!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W&Y&['|(V(X({*h*k+m,r,y-l.|/]0|1i1}3b3i3l4Y4x5O5l5y7X7l8S8r9T9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mQ6a3`Q8^6bQ9Y8_Q9[8`Q9n9]R9t9oQ&V!YQ&^!`R/g*hQ$joQ&a!cQ&t!pU(f$e$g(iS(m$h0dQ(t$qQ(u$rQ*_&UQ*l&bQ+o&uQ-R(eS-a(n4eQ-b(oQ-d(qW/`*e/c/f3gQ/i*jW0e+Y0f4j7cQ1p-SQ1{-fQ3c/aQ4m0lQ5^1sQ7s5aQ8b6fR8{7t!h$_o!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7tR-O(a'uXOY[bfgilmop!O!P!T!Y!Z![!_!`!c!p!|!}#Q#U#Z#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$`$a$e$g$h$q$r$y%_%b&U&Y&[&b&u'a'k'm'n'|(V(X(a(c(d(e(i(n(o(q({)R)T)h*Y*e*h*j*k+Y+m,k,o,r,y-Q-S-f-l-s.|/]/a/c/f0d0f0l0|1i1s1}3`3b3g3i3l4Y4e4j4x5O5X5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9z9{9|9}:O:P:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m:n$zqOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m!i$fo!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7t&d^Ofgilmop!O!P!T!Y!Z![!_!`!c!p#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r%_%b&U&Y&[&b&u'|(V(X(e(i(n(o(q({)h*e*h*j*k+Y+m,r,y-S-f-l.|/]/a/c/f0d0f0l0|1i1s1}3`3b3g3i3l4Y4e4j4x5O5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m[!zY[$`$a9z9{['_!|!}(c(d:T:UW)n%i%j:g:hU,V'a-Q:nW.g)o)p:{:|T2p.h;PQ(h$eQ(l$gR-V(iV(g$e$g(iR-](jR-[(j$znOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m!i$ko!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7t`,c'b'c'd,Y,e,f1`5WX3n/l/m3p3sh,b'b'c'd,Y,e,f/l/m1`3p3s5WQ7o5VR8z7p^uO!O!P!T%_%b)h$`#afgilmp!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W&Y&['|(V(X({*h*k+m,r,y-l.|/]0|1i1}3b3i3l4Y4x5O5l5y7X7l8S8r9T9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mQ6`3`Q8]6bQ9X8_Q9Z8`Q9m9]R9s9oR(P#zR(O#zQ$SlR([$TR$ooR$noR)P$vR)O$vQ(}$vR2P-nhwOb!O!P!T$y%_%b)R)T)h-s$l!lz!Q!n$O$u$|%f%n%o%p%q%y%{&P&o&p&r'](p)r)u)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8nR${xR0a+TR0V*wR0T*wR7Q4RR/x*uR/w*uR0O*vR/}*vR0^+PR0]+P%XyObxz!O!P!Q!T!n$O$u$y$|%_%b%f%n%o%p%q%y%{&P&o&p&r'](p)R)T)h)r)u)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-s-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8nR0j+YR0i+YQ'R!qQ)b%XQ+v&|R4{1OX'Q!q%X&|1OR+x&|R+w&|T/R*R4VT/Q*R4VR.n)rR.m)rR)z%pR1f,kR1e,k",
  19993. nodeNames:
  19994. '⚠ | < > RawString Float LineComment BlockComment SourceFile ] InnerAttribute ! [ MetaItem self Metavariable super crate Identifier ScopedIdentifier :: QualifiedScope AbstractType impl SelfType MetaType TypeIdentifier ScopedTypeIdentifier ScopeIdentifier TypeArgList TypeBinding = Lifetime String Escape Char Boolean Integer } { Block ; ConstItem Vis pub ( in ) const BoundIdentifier : UnsafeBlock unsafe AsyncBlock async move IfExpression if LetDeclaration let LiteralPattern ArithOp MetaPattern SelfPattern ScopedIdentifier TuplePattern ScopedTypeIdentifier , StructPattern FieldPatternList FieldPattern ref mut FieldIdentifier .. RefPattern SlicePattern CapturedPattern ReferencePattern & MutPattern RangePattern ... OrPattern MacroPattern ParenthesizedTokens BracketedTokens BracedTokens TokenBinding Identifier TokenRepetition ArithOp BitOp LogicOp UpdateOp CompareOp -> => ArithOp _ else MatchExpression match MatchBlock MatchArm Attribute Guard UnaryExpression ArithOp DerefOp LogicOp ReferenceExpression TryExpression BinaryExpression ArithOp ArithOp BitOp BitOp BitOp BitOp LogicOp LogicOp AssignmentExpression TypeCastExpression as ReturnExpression return RangeExpression CallExpression ArgList AwaitExpression await FieldExpression GenericFunction BreakExpression break LoopLabel ContinueExpression continue IndexExpression ArrayExpression TupleExpression MacroInvocation UnitExpression ClosureExpression ParamList Parameter Parameter ParenthesizedExpression StructExpression FieldInitializerList ShorthandFieldInitializer FieldInitializer BaseFieldInitializer MatchArm WhileExpression while LoopExpression loop ForExpression for MacroInvocation MacroDefinition macro_rules MacroRule EmptyStatement ModItem mod DeclarationList AttributeItem ForeignModItem extern StructItem struct TypeParamList ConstrainedTypeParameter TraitBounds HigherRankedTraitBound RemovedTraitBound OptionalTypeParameter ConstParameter WhereClause where LifetimeClause TypeBoundClause FieldDeclarationList FieldDeclaration OrderedFieldDeclarationList UnionItem union EnumItem enum EnumVariantList EnumVariant TypeItem type FunctionItem default fn ParamList Parameter SelfParameter VariadicParameter VariadicParameter ImplItem TraitItem trait AssociatedType LetDeclaration UseDeclaration use ScopedIdentifier UseAsClause ScopedIdentifier UseList ScopedUseList UseWildcard ExternCrateDeclaration StaticItem static ExpressionStatement ExpressionStatement GenericType FunctionType ForLifetimes ParamList VariadicParameter Parameter VariadicParameter Parameter ReferenceType PointerType TupleType UnitType ArrayType MacroInvocation EmptyType DynamicType dyn BoundedType',
  19995. maxTerm: 361,
  19996. nodeProps: [
  19997. [
  19998. NodeProp.group,
  19999. -42,
  20000. 4,
  20001. 5,
  20002. 14,
  20003. 15,
  20004. 16,
  20005. 17,
  20006. 18,
  20007. 19,
  20008. 33,
  20009. 35,
  20010. 36,
  20011. 37,
  20012. 40,
  20013. 51,
  20014. 53,
  20015. 56,
  20016. 101,
  20017. 107,
  20018. 111,
  20019. 112,
  20020. 113,
  20021. 122,
  20022. 123,
  20023. 125,
  20024. 127,
  20025. 128,
  20026. 130,
  20027. 132,
  20028. 133,
  20029. 134,
  20030. 137,
  20031. 139,
  20032. 140,
  20033. 141,
  20034. 142,
  20035. 143,
  20036. 144,
  20037. 148,
  20038. 149,
  20039. 155,
  20040. 157,
  20041. 159,
  20042. 'Expression',
  20043. -16,
  20044. 22,
  20045. 24,
  20046. 25,
  20047. 26,
  20048. 27,
  20049. 222,
  20050. 223,
  20051. 230,
  20052. 231,
  20053. 232,
  20054. 233,
  20055. 234,
  20056. 235,
  20057. 236,
  20058. 237,
  20059. 239,
  20060. 'Type',
  20061. -20,
  20062. 42,
  20063. 161,
  20064. 162,
  20065. 165,
  20066. 166,
  20067. 169,
  20068. 170,
  20069. 172,
  20070. 188,
  20071. 190,
  20072. 194,
  20073. 196,
  20074. 204,
  20075. 205,
  20076. 207,
  20077. 208,
  20078. 209,
  20079. 217,
  20080. 218,
  20081. 220,
  20082. 'Statement',
  20083. -17,
  20084. 49,
  20085. 60,
  20086. 62,
  20087. 63,
  20088. 64,
  20089. 65,
  20090. 68,
  20091. 74,
  20092. 75,
  20093. 76,
  20094. 77,
  20095. 78,
  20096. 80,
  20097. 81,
  20098. 83,
  20099. 84,
  20100. 99,
  20101. 'Pattern'
  20102. ],
  20103. [NodeProp.openedBy, 9, '[', 38, '{', 47, '('],
  20104. [NodeProp.closedBy, 12, ']', 39, '}', 45, ')']
  20105. ],
  20106. skippedNodes: [0, 6, 7, 240],
  20107. repeatNodeCount: 33,
  20108. tokenData:
  20109. "#CO_R!VOX$hXY1_YZ2ZZ]$h]^1_^p$hpq1_qr2srs4qst5Ztu6Vuv9lvw;jwx=nxy!#yyz!$uz{!%q{|!'k|}!(m}!O!)i!O!P!+j!P!Q!/f!Q!R!7q!R![!9f![!]!La!]!^!N_!^!_# Z!_!`##b!`!a#%c!a!b#'j!b!c#(f!c!}#)b!}#O#+X#O#P#,T#P#Q#4d#Q#R#5`#R#S#)b#S#T$h#T#U#)b#U#V#6b#V#f#)b#f#g#9u#g#o#)b#o#p#?S#p#q#@O#q#r#BS#r${$h${$|#)b$|4w$h4w5b#)b5b5i$h5i6S#)b6S~$hU$oZ'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$hU%iT'`Q'PSOz%xz{&^{!P%x!P!Q'S!Q~%xS%}T'PSOz%xz{&^{!P%x!P!Q'S!Q~%xS&aTOz&pz{&^{!P&p!P!Q({!Q~&pS&sTOz%xz{&^{!P%x!P!Q'S!Q~%xS'VSOz&p{!P&p!P!Q'c!Q~&pS'fSOz'r{!P'r!P!Q'c!Q~'rS'uTOz(Uz{(l{!P(U!P!Q'c!Q~(US(]T'QS'PSOz(Uz{(l{!P(U!P!Q'c!Q~(US(oSOz'rz{(l{!P'r!Q~'rS)QO'QSU)VZ'`QOY)xYZ+hZr)xrs&psz)xz{)Q{!P)x!P!Q0w!Q#O)x#O#P&p#P~)xU)}Z'`QOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$hU*uZ'`QOY)xYZ+hZr)xrs&psz)xz{+|{!P)x!P!Q,g!Q#O)x#O#P&p#P~)xU+mT'`QOz%xz{&^{!P%x!P!Q'S!Q~%xQ,RT'`QOY+|YZ,bZr+|s#O+|#P~+|Q,gO'`QU,lZ'`QOY-_YZ0cZr-_rs'rsz-_z{+|{!P-_!P!Q,g!Q#O-_#O#P'r#P~-_U-dZ'`QOY.VYZ/RZr.Vrs(Usz.Vz{/k{!P.V!P!Q,g!Q#O.V#O#P(U#P~.VU.`Z'`Q'QS'PSOY.VYZ/RZr.Vrs(Usz.Vz{/k{!P.V!P!Q,g!Q#O.V#O#P(U#P~.VU/[T'`Q'QS'PSOz(Uz{(l{!P(U!P!Q'c!Q~(UU/pZ'`QOY-_YZ0cZr-_rs'rsz-_z{/k{!P-_!P!Q+|!Q#O-_#O#P'r#P~-_U0hT'`QOz(Uz{(l{!P(U!P!Q'c!Q~(UU1OT'`Q'QSOY+|YZ,bZr+|s#O+|#P~+|_1hZ'`Q&}X'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_2dT'`Q&}X'PSOz%xz{&^{!P%x!P!Q'S!Q~%x_2|]ZX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`3u!`#O$h#O#P%x#P~$h_4OZ#RX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_4zT'^Q'PS'_XOz%xz{&^{!P%x!P!Q'S!Q~%x_5dZ'RX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_6`g'`Q'vW'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!c$h!c!}7w!}#O$h#O#P%x#P#R$h#R#S7w#S#T$h#T#o7w#o${$h${$|7w$|4w$h4w5b7w5b5i$h5i6S7w6S~$h_8Qh'`Q_X'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![7w![!c$h!c!}7w!}#O$h#O#P%x#P#R$h#R#S7w#S#T$h#T#o7w#o${$h${$|7w$|4w$h4w5b7w5b5i$h5i6S7w6S~$h_9u](TP'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P~$h_:wZ#QX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_;s_!qX'`Q'PSOY$hYZ%bZr$hrs%xsv$hvw<rwz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P~$h_<{Z'}X'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_=ui'`Q'PSOY?dYZA`Zr?drsBdsw?dwx@dxz?dz{CO{!P?d!P!QDv!Q!c?d!c!}Et!}#O?d#O#PId#P#R?d#R#SEt#S#T?d#T#oEt#o${?d${$|Et$|4w?d4w5bEt5b5i?d5i6SEt6S~?d_?k]'`Q'PSOY$hYZ%bZr$hrs%xsw$hwx@dxz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_@mZ'`Q'PSsXOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_AgV'`Q'PSOw%xwxA|xz%xz{&^{!P%x!P!Q'S!Q~%x]BTT'PSsXOz%xz{&^{!P%x!P!Q'S!Q~%x]BiV'PSOw%xwxA|xz%xz{&^{!P%x!P!Q'S!Q~%x_CT]'`QOY)xYZ+hZr)xrs&psw)xwxC|xz)xz{)Q{!P)x!P!Q0w!Q#O)x#O#P&p#P~)x_DTZ'`QsXOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_D{]'`QOY)xYZ+hZr)xrs&psw)xwxC|xz)xz{+|{!P)x!P!Q,g!Q#O)x#O#P&p#P~)x_E}j'`Q'PS'[XOY$hYZ%bZr$hrs%xsw$hwx@dxz$hz{)Q{!P$h!P!Q*p!Q![Go![!c$h!c!}Go!}#O$h#O#P%x#P#R$h#R#SGo#S#T$h#T#oGo#o${$h${$|Go$|4w$h4w5bGo5b5i$h5i6SGo6S~$h_Gxh'`Q'PS'[XOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![Go![!c$h!c!}Go!}#O$h#O#P%x#P#R$h#R#SGo#S#T$h#T#oGo#o${$h${$|Go$|4w$h4w5bGo5b5i$h5i6SGo6S~$h]IiX'PSOzBdz{JU{!PBd!P!QKS!Q#iBd#i#jKi#j#lBd#l#m!!a#m~Bd]JXVOw&pwxJnxz&pz{&^{!P&p!P!Q({!Q~&p]JsTsXOz%xz{&^{!P%x!P!Q'S!Q~%x]KVUOw&pwxJnxz&p{!P&p!P!Q'c!Q~&p]Kn['PSOz%xz{&^{!P%x!P!Q'S!Q![Ld![!c%x!c!iLd!i#T%x#T#ZLd#Z#o%x#o#pNq#p~%x]LiY'PSOz%xz{&^{!P%x!P!Q'S!Q![MX![!c%x!c!iMX!i#T%x#T#ZMX#Z~%x]M^Y'PSOz%xz{&^{!P%x!P!Q'S!Q![M|![!c%x!c!iM|!i#T%x#T#ZM|#Z~%x]NRY'PSOz%xz{&^{!P%x!P!Q'S!Q![Bd![!c%x!c!iBd!i#T%x#T#ZBd#Z~%x]NvY'PSOz%xz{&^{!P%x!P!Q'S!Q![! f![!c%x!c!i! f!i#T%x#T#Z! f#Z~%x]! k['PSOz%xz{&^{!P%x!P!Q'S!Q![! f![!c%x!c!i! f!i#T%x#T#Z! f#Z#q%x#q#rBd#r~%x]!!fY'PSOz%xz{&^{!P%x!P!Q'S!Q![!#U![!c%x!c!i!#U!i#T%x#T#Z!#U#Z~%x]!#ZY'PSOz%xz{&^{!P%x!P!Q'S!Q![Bd![!c%x!c!iBd!i#T%x#T#ZBd#Z~%x_!$SZ}X'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!%OZ!PX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!%x](QX'`QOY)xYZ+hZr)xrs&psz)xz{)Q{!P)x!P!Q0w!Q!_)x!_!`!&q!`#O)x#O#P&p#P~)x_!&xZ#QX'`QOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!'t](PX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P~$h_!(vZ!eX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!)r^'hX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`!a!*n!a#O$h#O#P%x#P~$h_!*wZ#SX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!+s[(OX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!O$h!O!P!,i!P!Q*p!Q#O$h#O#P%x#P~$h_!,r^!lX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!O$h!O!P!-n!P!Q*p!Q!_$h!_!`!.j!`#O$h#O#P%x#P~$h_!-wZ!tX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$hV!.sZ'rP'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!/m]'`Q'xXOY)xYZ+hZr)xrs&psz)xz{!0f{!P)x!P!Q!0|!Q!_)x!_!`!&q!`#O)x#O#P&p#P~)x_!0mT'O]'`QOY+|YZ,bZr+|s#O+|#P~+|_!1TZ'`QUXOY!1vYZ0cZr!1vrs!4xsz!1vz{!7T{!P!1v!P!Q!0|!Q#O!1v#O#P!4x#P~!1v_!1}Z'`QUXOY!2pYZ/RZr!2prs!3nsz!2pz{!6Z{!P!2p!P!Q!0|!Q#O!2p#O#P!3n#P~!2p_!2{Z'`QUX'QS'PSOY!2pYZ/RZr!2prs!3nsz!2pz{!6Z{!P!2p!P!Q!0|!Q#O!2p#O#P!3n#P~!2p]!3wVUX'QS'PSOY!3nYZ(UZz!3nz{!4^{!P!3n!P!Q!5d!Q~!3n]!4cVUXOY!4xYZ'rZz!4xz{!4^{!P!4x!P!Q!6O!Q~!4x]!4}VUXOY!3nYZ(UZz!3nz{!4^{!P!3n!P!Q!5d!Q~!3n]!5iVUXOY!4xYZ'rZz!4xz{!6O{!P!4x!P!Q!5d!Q~!4xX!6TQUXOY!6OZ~!6O_!6bZ'`QUXOY!1vYZ0cZr!1vrs!4xsz!1vz{!6Z{!P!1v!P!Q!7T!Q#O!1v#O#P!4x#P~!1vZ!7[V'`QUXOY!7TYZ,bZr!7Trs!6Os#O!7T#O#P!6O#P~!7T_!7zhuX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![!9f![#O$h#O#P%x#P#R$h#R#S!9f#S#U$h#U#V!Dc#V#]$h#]#^!:w#^#c$h#c#d!F}#d#i$h#i#j!:w#j#l$h#l#m!Ic#m~$h_!9obuX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![!9f![#O$h#O#P%x#P#R$h#R#S!9f#S#]$h#]#^!:w#^#i$h#i#j!:w#j~$h_!;Oe'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!R$h!R!S!<a!S!T$h!T!U!?c!U!W$h!W!X!@c!X!Y$h!Y!Z!>g!Z#O$h#O#P%x#P#g$h#g#h!Ac#h~$h_!<h_'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!S$h!S!T!=g!T!W$h!W!X!>g!X#O$h#O#P%x#P~$h_!=n]'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!Y$h!Y!Z!>g!Z#O$h#O#P%x#P~$h_!>pZuX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!?j]'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!S$h!S!T!>g!T#O$h#O#P%x#P~$h_!@j]'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!U$h!U!V!>g!V#O$h#O#P%x#P~$h_!Aj]'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P#]$h#]#^!Bc#^~$h_!Bj]'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P#n$h#n#o!Cc#o~$h_!Cj]'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P#X$h#X#Y!>g#Y~$h_!Dj_'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!R!Ei!R!S!Ei!S#O$h#O#P%x#P#R$h#R#S!Ei#S~$h_!ErcuX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!R!Ei!R!S!Ei!S#O$h#O#P%x#P#R$h#R#S!Ei#S#]$h#]#^!:w#^#i$h#i#j!:w#j~$h_!GU^'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!Y!HQ!Y#O$h#O#P%x#P#R$h#R#S!HQ#S~$h_!HZbuX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!Y!HQ!Y#O$h#O#P%x#P#R$h#R#S!HQ#S#]$h#]#^!:w#^#i$h#i#j!:w#j~$h_!Ijb'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![!Jr![!c$h!c!i!Jr!i#O$h#O#P%x#P#R$h#R#S!Jr#S#T$h#T#Z!Jr#Z~$h_!J{fuX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![!Jr![!c$h!c!i!Jr!i#O$h#O#P%x#P#R$h#R#S!Jr#S#T$h#T#Z!Jr#Z#]$h#]#^!:w#^#i$h#i#j!:w#j~$h_!Lj]!SX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![$h![!]!Mc!]#O$h#O#P%x#P~$h_!MlZdX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!NhZyX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_# d^#RX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!^$h!^!_#!`!_!`3u!`#O$h#O#P%x#P~$h_#!i]'yX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P~$h_##k^oX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`3u!`!a#$g!a#O$h#O#P%x#P~$h_#$pZ#TX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_#%l^#RX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`3u!`!a#&h!a#O$h#O#P%x#P~$h_#&q]'zX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P~$h_#'sZ(RX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$hV#(oZ'qP'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_#)mh'`Q'PS!{W'UPOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![#)b![!c$h!c!}#)b!}#O$h#O#P%x#P#R$h#R#S#)b#S#T$h#T#o#)b#o${$h${$|#)b$|4w$h4w5b#)b5b5i$h5i6S#)b6S~$h_#+bZ[X'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$hU#,YX'PSOz#,uz{#-]{!P#,u!P!Q#-q!Q#i#,u#i#j#.S#j#l#,u#l#m#2z#m~#,uU#,|TrQ'PSOz%xz{&^{!P%x!P!Q'S!Q~%xU#-bTrQOz&pz{&^{!P&p!P!Q({!Q~&pU#-vSrQOz&p{!P&p!P!Q'c!Q~&pU#.X['PSOz%xz{&^{!P%x!P!Q'S!Q![#.}![!c%x!c!i#.}!i#T%x#T#Z#.}#Z#o%x#o#p#1[#p~%xU#/SY'PSOz%xz{&^{!P%x!P!Q'S!Q![#/r![!c%x!c!i#/r!i#T%x#T#Z#/r#Z~%xU#/wY'PSOz%xz{&^{!P%x!P!Q'S!Q![#0g![!c%x!c!i#0g!i#T%x#T#Z#0g#Z~%xU#0lY'PSOz%xz{&^{!P%x!P!Q'S!Q![#,u![!c%x!c!i#,u!i#T%x#T#Z#,u#Z~%xU#1aY'PSOz%xz{&^{!P%x!P!Q'S!Q![#2P![!c%x!c!i#2P!i#T%x#T#Z#2P#Z~%xU#2U['PSOz%xz{&^{!P%x!P!Q'S!Q![#2P![!c%x!c!i#2P!i#T%x#T#Z#2P#Z#q%x#q#r#,u#r~%xU#3PY'PSOz%xz{&^{!P%x!P!Q'S!Q![#3o![!c%x!c!i#3o!i#T%x#T#Z#3o#Z~%xU#3tY'PSOz%xz{&^{!P%x!P!Q'S!Q![#,u![!c%x!c!i#,u!i#T%x#T#Z#,u#Z~%x_#4mZXX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_#5i]'{X'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P~$h_#6mj'`Q'PS!{W'UPOY$hYZ%bZr$hrs#8_sw$hwx#8uxz$hz{)Q{!P$h!P!Q*p!Q![#)b![!c$h!c!}#)b!}#O$h#O#P%x#P#R$h#R#S#)b#S#T$h#T#o#)b#o${$h${$|#)b$|4w$h4w5b#)b5b5i$h5i6S#)b6S~$h]#8fT'PS'_XOz%xz{&^{!P%x!P!Q'S!Q~%x_#8|]'`Q'PSOY?dYZA`Zr?drsBdsw?dwx@dxz?dz{CO{!P?d!P!QDv!Q#O?d#O#PId#P~?d_#:Qi'`Q'PS!{W'UPOY$hYZ%bZr$hrs%xst#;otz$hz{)Q{!P$h!P!Q*p!Q![#)b![!c$h!c!}#)b!}#O$h#O#P%x#P#R$h#R#S#)b#S#T$h#T#o#)b#o${$h${$|#)b$|4w$h4w5b#)b5b5i$h5i6S#)b6S~$hV#;vg'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!c$h!c!}#=_!}#O$h#O#P%x#P#R$h#R#S#=_#S#T$h#T#o#=_#o${$h${$|#=_$|4w$h4w5b#=_5b5i$h5i6S#=_6S~$hV#=hh'`Q'PS'UPOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![#=_![!c$h!c!}#=_!}#O$h#O#P%x#P#R$h#R#S#=_#S#T$h#T#o#=_#o${$h${$|#=_$|4w$h4w5b#=_5b5i$h5i6S#=_6S~$h_#?]ZwX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_#@X_'sX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P#p$h#p#q#AW#q~$h_#AaZ'|X'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_#B]ZvX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h",
  20110. tokenizers: [closureParam, tpDelim, literalTokens, 0, 1, 2, 3],
  20111. topRules: { SourceFile: [0, 8] },
  20112. specialized: [{ term: 282, get: value => spec_identifier[value] || -1 }],
  20113. tokenPrec: 15890
  20114. })
  20115. const rustLanguage = LezerLanguage.define({
  20116. parser: parser$3.configure({
  20117. props: [
  20118. indentNodeProp.add({ IfExpression: continuedIndent({ except: /^\s*({|else\b)/ }), 'String BlockComment': () => -1, 'Statement MatchArm': continuedIndent() }),
  20119. foldNodeProp.add(type => {
  20120. if (/(Block|edTokens|List)$/.test(type.name)) return foldInside$1
  20121. if (type.name == 'BlockComment') return tree => ({ from: tree.from + 2, to: tree.to - 2 })
  20122. return undefined
  20123. }),
  20124. styleTags({
  20125. 'const macro_rules mod struct union enum type fn impl trait let use crate static': tags$1.definitionKeyword,
  20126. 'pub unsafe async mut extern default move': tags$1.modifier,
  20127. 'for if else loop while match continue break return await': tags$1.controlKeyword,
  20128. 'as in ref': tags$1.operatorKeyword,
  20129. 'where _ crate super dyn': tags$1.keyword,
  20130. self: tags$1.self,
  20131. String: tags$1.string,
  20132. RawString: tags$1.special(tags$1.string),
  20133. Boolean: tags$1.bool,
  20134. Identifier: tags$1.variableName,
  20135. 'CallExpression/Identifier': tags$1.function(tags$1.variableName),
  20136. BoundIdentifier: tags$1.definition(tags$1.variableName),
  20137. LoopLabel: tags$1.labelName,
  20138. FieldIdentifier: tags$1.propertyName,
  20139. 'CallExpression/FieldExpression/FieldIdentifier': tags$1.function(tags$1.propertyName),
  20140. Lifetime: tags$1.special(tags$1.variableName),
  20141. ScopeIdentifier: tags$1.namespace,
  20142. TypeIdentifier: tags$1.typeName,
  20143. 'MacroInvocation/Identifier MacroInvocation/ScopedIdentifier/Identifier': tags$1.macroName,
  20144. 'MacroInvocation/TypeIdentifier MacroInvocation/ScopedIdentifier/TypeIdentifier': tags$1.macroName,
  20145. '"!"': tags$1.macroName,
  20146. UpdateOp: tags$1.updateOperator,
  20147. LineComment: tags$1.lineComment,
  20148. BlockComment: tags$1.blockComment,
  20149. Integer: tags$1.integer,
  20150. Float: tags$1.float,
  20151. ArithOp: tags$1.arithmeticOperator,
  20152. LogicOp: tags$1.logicOperator,
  20153. BitOp: tags$1.bitwiseOperator,
  20154. CompareOp: tags$1.compareOperator,
  20155. '=': tags$1.definitionOperator,
  20156. '.. ... => ->': tags$1.punctuation,
  20157. '( )': tags$1.paren,
  20158. '[ ]': tags$1.squareBracket,
  20159. '{ }': tags$1.brace,
  20160. '.': tags$1.derefOperator,
  20161. '&': tags$1.operator,
  20162. ', ; ::': tags$1.separator
  20163. })
  20164. ]
  20165. }),
  20166. languageData: { commentTokens: { line: '//', block: { open: '/*', close: '*/' } }, indentOnInput: /^\s*(?:\{|\})$/ }
  20167. })
  20168. function rust() {
  20169. return new LanguageSupport(rustLanguage)
  20170. }
  20171. var _m30 = Object.freeze({ __proto__: null, rust: rust, rustLanguage: rustLanguage })
  20172. const StartTag = 1,
  20173. StartCloseTag = 2,
  20174. mismatchedStartCloseTag = 3,
  20175. incompleteStartCloseTag = 4,
  20176. commentContent = 35,
  20177. piContent = 36,
  20178. cdataContent = 37,
  20179. Element$3 = 9,
  20180. OpenTag = 11
  20181. function nameChar(ch) {
  20182. return ch == 45 || ch == 46 || ch == 58 || (ch >= 65 && ch <= 90) || ch == 95 || (ch >= 97 && ch <= 122) || ch >= 161
  20183. }
  20184. function isSpace(ch) {
  20185. return ch == 9 || ch == 10 || ch == 13 || ch == 32
  20186. }
  20187. let cachedName = null,
  20188. cachedInput = null,
  20189. cachedPos = 0
  20190. function tagNameAfter(input, pos) {
  20191. if (cachedPos == pos && cachedInput == input) return cachedName
  20192. let next = input.get(pos)
  20193. while (isSpace(next)) next = input.get(++pos)
  20194. let start = pos
  20195. while (nameChar(next)) next = input.get(++pos)
  20196. cachedInput = input
  20197. cachedPos = pos
  20198. return (cachedName = pos > start ? input.read(start, pos).toLowerCase() : null)
  20199. }
  20200. function ElementContext(name, parent) {
  20201. this.name = name
  20202. this.parent = parent
  20203. this.hash = parent ? parent.hash : 0
  20204. for (let i = 0; i < name.length; i++) this.hash += (this.hash << 4) + name.charCodeAt(i) + (name.charCodeAt(i) << 8)
  20205. }
  20206. const elementContext = new ContextTracker({
  20207. start: null,
  20208. shift(context, term, input, stack) {
  20209. return term == StartTag ? new ElementContext(tagNameAfter(input, stack.pos) || '', context) : context
  20210. },
  20211. reduce(context, term) {
  20212. return term == Element$3 && context ? context.parent : context
  20213. },
  20214. reuse(context, node, input, stack) {
  20215. let type = node.type.id
  20216. return type == StartTag || type == OpenTag ? new ElementContext(tagNameAfter(input, stack.pos - node.length + 1) || '', context) : context
  20217. },
  20218. hash(context) {
  20219. return context ? context.hash : 0
  20220. },
  20221. strict: false
  20222. })
  20223. const startTag = new ExternalTokenizer((input, token, stack) => {
  20224. let pos = token.start
  20225. if (input.get(pos++) != 60) return
  20226. let next = input.get(pos)
  20227. if (next == 47) {
  20228. pos++
  20229. let name = tagNameAfter(input, pos)
  20230. if (!name) return token.accept(incompleteStartCloseTag, pos)
  20231. if (stack.context && name == stack.context.name) return token.accept(StartCloseTag, pos)
  20232. for (let cx = stack.context; cx; cx = cx.parent) if (cx.name == name) return
  20233. token.accept(mismatchedStartCloseTag, pos)
  20234. } else if (next != 33 && next != 63) {
  20235. return token.accept(StartTag, pos)
  20236. }
  20237. })
  20238. function scanTo(type, end) {
  20239. return new ExternalTokenizer((input, token) => {
  20240. let pos = token.start,
  20241. endPos = 0
  20242. for (;;) {
  20243. let next = input.get(pos)
  20244. if (next < 0) break
  20245. pos++
  20246. if (next == end.charCodeAt(endPos)) {
  20247. endPos++
  20248. if (endPos == end.length) {
  20249. pos -= end.length
  20250. break
  20251. }
  20252. } else {
  20253. endPos = 0
  20254. }
  20255. }
  20256. if (pos > token.start) token.accept(type, pos)
  20257. })
  20258. }
  20259. const commentContent$1 = scanTo(commentContent, '-->')
  20260. const piContent$1 = scanTo(piContent, '?>')
  20261. const cdataContent$1 = scanTo(cdataContent, '?>')
  20262. const parser$2 = Parser.deserialize({
  20263. version: 13,
  20264. states:
  20265. "-OOQOaOOOcObO'#CbOkOdO'#CcOOOP'#Cu'#CuOsOaO'#DSO!XOaOOOOOQ'#Cv'#CvO!aObO,58|OOOP,58|,58|OOOS'#Cw'#CwO!iOdO,58}OOOP,58},58}OOOP-E6s-E6sO!qO`O'#CgO!yOqO'#CeOOOP'#Ce'#CeO#kOaO'#CxQ#|OPOOO$ROaOOOOOQ-E6t-E6tOOOP1G.h1G.hOOOS-E6u-E6uOOOP1G.i1G.iOOOO'#Cy'#CyO$aO`O,59RO$iO!bO,59RO$wOhO'#CpO%PO`O'#CqOOOP'#D['#D[OOOP'#C|'#C|O!yOqO,59PO%XO`O'#CrOOOP,59P,59POOOP,59d,59dOOOP-E6v-E6vO#|OPOOOOOO-E6w-E6wO%aO!bO1G.mO%aO!bO1G.mO%oO`O'#CiO%wO!bO'#CzO&VO!bO1G.mOOOP1G.m1G.mOOOP1G.z1G.zOOOW'#C}'#C}O&bOhO,59[OOOP,59[,59[O&jO`O,59]O&rO`O,59]OOOP-E6z-E6zOOOP1G.k1G.kO&zO`O,59^O'SO`O,59^O'[O!bO7+$XO'jO!bO7+$XOOOP7+$X7+$XOOOP7+$f7+$fO'uO`O,59TO'}O`O,59TO(VO!bO,59fOOOO-E6x-E6xOOOW-E6{-E6{OOOP1G.v1G.vO(eO`O1G.wO(eO`O1G.wOOOP1G.w1G.wO(mO`O1G.xO(mO`O1G.xOOOP1G.x1G.xO(uO!bO<<GsOOOP<<Gs<<GsOOOP<<HQ<<HQO'}O`O1G.oO'}O`O1G.oO)QO#tO'#ClOOOO1G.o1G.oO)`O`O7+$cOOOP7+$c7+$cO)hO`O7+$dOOOP7+$d7+$dOOOPAN=_AN=_OOOPAN=lAN=lO'}O`O7+$ZOOOO7+$Z7+$ZOOOO'#C{'#C{O)pO#tO,59WOOOO,59W,59WOOOP<<G}<<G}OOOP<<HO<<HOOOOO<<Gu<<GuOOOO-E6y-E6yOOOO1G.r1G.r",
  20266. stateData:
  20267. '*O~OxPOyRO{QOPvPWvP~OsUOwWO~OtXOzZO~OxPOyRO{QOPvXWvXrvX~OP]OWbO~OsUOwdO~OtXOzfO~O[iOygO~OP]OQoORkOSlOalOblOclOxPO{QO!QjO~OxPOyRO{QOPvPrvP~OP]O~OxPOyRO{QOPvP~O[uOygO~OYzO^wOg{OygO~Ou|O!P!OO~O[!QOygO~O[!UOygO~OY!XO^wOg!YOygO~O_![OygO~OygOYnX^nXgnX~OY!XO^wOg!YO~Ou|O!P!`O~O[!aOygO~OY!cOygO~O[!dOygO~OY!fOygO~OY!hO^wOg!iOygO~OY!hO^wOg!iO~O_!jOygO~OygO|!lO~OygOYna^nagna~OY!oOygO~OY!qOygO~OY!rO^wOg!sO~Oa!vOb!vO|!xO}!vO~OY!yOygO~OY!zOygO~Oa!vOb!vO|!}O}!vO~O',
  20268. goto:
  20269. '&R!PPPPPPP!Q!QP![P!eP!lPP!uPPP!W!W#PP#V#^#f#l#r#y%R%b%h%nPPPP%tPPPPPPP%}WROS`bTl^nU`TasTl^nZ^T^ans_xiuvy!V!W!gQ!m![S!u!j!kR!{!tQp^R!SnZ_T^ansUSO`bR[SQVPRcVQYQReYSaTsRraQh]jthv!P!T!V!Z!]!b!e!k!n!p!tQviQ!PkQ!ToQ!VuQ!ZwQ!]xQ!b!QQ!e!UQ!k![Q!n!aQ!p!dR!t!jQyiS!WuvU!^y!W!gR!g!VQ!w!lR!|!wQn^R!RnQ}jR!_}QTOQq`RsbTm^n',
  20270. nodeNames:
  20271. '⚠ StartTag StartCloseTag StartCloseTag StartCloseTag Document Comment ProcessingInst DoctypeDecl Element EndTag OpenTag TagName Attribute AttributeName Is AttributeValue EntityReference CharacterReference Text Cdata MismatchedCloseTag CloseTag SelfCloseEndTag SelfClosingTag',
  20272. maxTerm: 48,
  20273. context: elementContext,
  20274. nodeProps: [
  20275. [NodeProp.closedBy, 1, 'SelfCloseEndTag EndTag', 11, 'CloseTag'],
  20276. [NodeProp.openedBy, 10, 'StartTag StartCloseTag', 22, 'OpenTag', 23, 'StartTag']
  20277. ],
  20278. skippedNodes: [0],
  20279. repeatNodeCount: 9,
  20280. tokenData:
  20281. "Bk~R!WOX$kXY%rYZ%rZ]$k]^%r^p$kpq%rqr$krs&tsv$kvw'Uw}$k}!O(q!O!P$k!P!Q*n!Q![$k![!]+z!]!^$k!^!_/s!_!`=i!`!a>U!a!b>q!b!c$k!c!}+z!}#P$k#P#Q?}#Q#R$k#R#S+z#S#T$k#T#o+z#o%W$k%W%o+z%o%p$k%p&a+z&a&b$k&b1p+z1p4U$k4U4d+z4d4e$k4e$IS+z$IS$I`$k$I`$Ib+z$Ib$Kh$k$Kh%#t+z%#t&/x$k&/x&Et+z&Et&FV$k&FV;'S+z;'S;:jAz;:j?&r$k?&r?Ah+z?Ah?BY$k?BY?Mn+z?Mn~$kY$rUcQ}WOr$krs%Usv$kw!^$k!^!_%d!_~$kQ%ZRcQOv%Uw!^%U!_~%UW%iR}WOr%dsv%dw~%d_%{]cQ}WyTOX$kXY%rYZ%rZ]$k]^%r^p$kpq%rqr$krs%Usv$kw!^$k!^!_%d!_~$kZ&{R|XcQOv%Uw!^%U!_~%U~'XTOp'hqs'hst(Pt!]'h!^~'h~'kTOp'hqs'ht!]'h!]!^'z!^~'h~(POa~~(SROp(]q!](]!^~(]~(`SOp(]q!](]!]!^(l!^~(]~(qOb~Z(xWcQ}WOr$krs%Usv$kw}$k}!O)b!O!^$k!^!_%d!_~$kZ)iWcQ}WOr$krs%Usv$kw!^$k!^!_%d!_!`$k!`!a*R!a~$kZ*[UwPcQ}WOr$krs%Usv$kw!^$k!^!_%d!_~$k^*uWcQ}WOr$krs%Usv$kw!^$k!^!_%d!_!`$k!`!a+_!a~$k^+hUgScQ}WOr$krs%Usv$kw!^$k!^!_%d!_~$k_,V}^S[PcQ}WOr$krs%Usv$kw}$k}!O+z!O!P+z!P!Q$k!Q![+z![!]+z!]!^$k!^!_%d!_!c$k!c!}+z!}#R$k#R#S+z#S#T$k#T#o+z#o$}$k$}%O+z%O%W$k%W%o+z%o%p$k%p&a+z&a&b$k&b1p+z1p4U+z4U4d+z4d4e$k4e$IS+z$IS$I`$k$I`$Ib+z$Ib$Je$k$Je$Jg+z$Jg$Kh$k$Kh%#t+z%#t&/x$k&/x&Et+z&Et&FV$k&FV;'S+z;'S;:j/S;:j?&r$k?&r?Ah+z?Ah?BY$k?BY?Mn+z?Mn~$k_/ZWcQ}WOr$krs%Usv$kw!^$k!^!_%d!_;=`$k;=`<%l+z<%l~$kZ/xU}WOq%dqr0[sv%dw!a%d!a!b=X!b~%dZ0aZ}WOr%dsv%dw}%d}!O1S!O!f%d!f!g1x!g!}%d!}#O5s#O#W%d#W#X:k#X~%dZ1XT}WOr%dsv%dw}%d}!O1h!O~%dZ1oRxR}WOr%dsv%dw~%dX1}T}WOr%dsv%dw!q%d!q!r2^!r~%dX2cT}WOr%dsv%dw!e%d!e!f2r!f~%dX2wT}WOr%dsv%dw!v%d!v!w3W!w~%dX3]T}WOr%dsv%dw!{%d!{!|3l!|~%dX3qT}WOr%dsv%dw!r%d!r!s4Q!s~%dX4VT}WOr%dsv%dw!g%d!g!h4f!h~%dX4kV}WOr4frs5Qsv4fvw5Qw!`4f!`!a5c!a~4fP5TRO!`5Q!`!a5^!a~5QP5cOWPX5jRWP}WOr%dsv%dw~%dY5xV}WOr%dsv%dw!e%d!e!f6_!f#V%d#V#W8w#W~%dY6dT}WOr%dsv%dw!f%d!f!g6s!g~%dY6xT}WOr%dsv%dw!c%d!c!d7X!d~%dY7^T}WOr%dsv%dw!v%d!v!w7m!w~%dY7rT}WOr%dsv%dw!c%d!c!d8R!d~%dY8WT}WOr%dsv%dw!}%d!}#O8g#O~%dY8nR}W!QQOr%dsv%dw~%dY8|T}WOr%dsv%dw#W%d#W#X9]#X~%dY9bT}WOr%dsv%dw#T%d#T#U9q#U~%dY9vT}WOr%dsv%dw#h%d#h#i:V#i~%dY:[T}WOr%dsv%dw#T%d#T#U8R#U~%dX:pT}WOr%dsv%dw#c%d#c#d;P#d~%dX;UT}WOr%dsv%dw#V%d#V#W;e#W~%dX;jT}WOr%dsv%dw#h%d#h#i;y#i~%dX<OT}WOr%dsv%dw#m%d#m#n<_#n~%dX<dT}WOr%dsv%dw#d%d#d#e<s#e~%dX<xT}WOr%dsv%dw#X%d#X#Y4f#Y~%dZ=`R{R}WOr%dsv%dw~%dZ=rU_PcQ}WOr$krs%Usv$kw!^$k!^!_%d!_~$k_>_UYTcQ}WOr$krs%Usv$kw!^$k!^!_%d!_~$kZ>xWcQ}WOr$krs%Usv$kw!^$k!^!_%d!_!`$k!`!a?b!a~$kZ?kUzPcQ}WOr$krs%Usv$kw!^$k!^!_%d!_~$kZ@UWcQ}WOr$krs%Usv$kw!^$k!^!_%d!_#P$k#P#Q@n#Q~$kZ@uWcQ}WOr$krs%Usv$kw!^$k!^!_%d!_!`$k!`!aA_!a~$kZAhU!PPcQ}WOr$krs%Usv$kw!^$k!^!_%d!_~$k_BRWcQ}WOr$krs%Usv$kw!^$k!^!_%d!_;=`$k;=`<%l+z<%l~$k",
  20282. tokenizers: [startTag, commentContent$1, piContent$1, cdataContent$1, 0, 1, 2, 3],
  20283. topRules: { Document: [0, 5] },
  20284. tokenPrec: 0
  20285. })
  20286. function tagName(doc, tag) {
  20287. let name = tag && tag.getChild('TagName')
  20288. return name ? doc.sliceString(name.from, name.to) : ''
  20289. }
  20290. function elementName(doc, tree) {
  20291. let tag = tree && tree.firstChild
  20292. return !tag || tag.name != 'OpenTag' ? '' : tagName(doc, tag)
  20293. }
  20294. function attrName(doc, tag, pos) {
  20295. let attr = tag && tag.getChildren('Attribute').find(a => a.from <= pos && a.to >= pos)
  20296. let name = attr && attr.getChild('AttributeName')
  20297. return name ? doc.sliceString(name.from, name.to) : ''
  20298. }
  20299. function findParentElement(tree) {
  20300. for (let cur = tree && tree.parent; cur; cur = cur.parent) if (cur.name == 'Element') return cur
  20301. return null
  20302. }
  20303. function findLocation(state, pos) {
  20304. var _a
  20305. let at = syntaxTree(state).resolve(pos, -1),
  20306. inTag = null
  20307. for (let cur = at; !inTag && cur.parent; cur = cur.parent) if (cur.name == 'OpenTag' || cur.name == 'CloseTag' || cur.name == 'SelfClosingTag' || cur.name == 'MismatchedCloseTag') inTag = cur
  20308. if (inTag && (inTag.to > pos || inTag.lastChild.type.isError)) {
  20309. let elt = inTag.parent
  20310. if (at.name == 'TagName')
  20311. return inTag.name == 'CloseTag' || inTag.name == 'MismatchedCloseTag'
  20312. ? { type: 'closeTag', from: at.from, context: elt }
  20313. : { type: 'openTag', from: at.from, context: findParentElement(elt) }
  20314. if (at.name == 'AttributeName') return { type: 'attrName', from: at.from, context: inTag }
  20315. if (at.name == 'AttributeValue') return { type: 'attrValue', from: at.from, context: inTag }
  20316. let before = at == inTag || at.name == 'Attribute' ? at.childBefore(pos) : at
  20317. if ((before === null || before === void 0 ? void 0 : before.name) == 'StartTag') return { type: 'openTag', from: pos, context: findParentElement(elt) }
  20318. if ((before === null || before === void 0 ? void 0 : before.name) == 'StartCloseTag' && before.to <= pos) return { type: 'closeTag', from: pos, context: elt }
  20319. if ((before === null || before === void 0 ? void 0 : before.name) == 'Is') return { type: 'attrValue', from: pos, context: inTag }
  20320. if (before) return { type: 'attrName', from: pos, context: inTag }
  20321. return null
  20322. } else if (at.name == 'StartCloseTag') {
  20323. return { type: 'closeTag', from: pos, context: at.parent }
  20324. }
  20325. while (at.parent && at.to == pos && !((_a = at.lastChild) === null || _a === void 0 ? void 0 : _a.type.isError)) at = at.parent
  20326. if (at.name == 'Element' || at.name == 'Text' || at.name == 'Document') return { type: 'tag', from: pos, context: at.name == 'Element' ? at : findParentElement(at) }
  20327. return null
  20328. }
  20329. class Element$2 {
  20330. constructor(spec, attrs, attrValues) {
  20331. this.attrs = attrs
  20332. this.attrValues = attrValues
  20333. this.children = []
  20334. this.name = spec.name
  20335. this.completion = Object.assign(Object.assign({ type: 'type' }, spec.completion || {}), { label: this.name })
  20336. this.openCompletion = Object.assign(Object.assign({}, this.completion), { label: '<' + this.name })
  20337. this.closeCompletion = Object.assign(Object.assign({}, this.completion), { label: '</' + this.name + '>', boost: 2 })
  20338. this.closeNameCompletion = Object.assign(Object.assign({}, this.completion), { label: this.name + '>' })
  20339. this.text = spec.textContent ? spec.textContent.map(s => ({ label: s, type: 'text' })) : []
  20340. }
  20341. }
  20342. const Identifier = /^[:\-\.\w\u00b7-\uffff]*$/
  20343. function attrCompletion(spec) {
  20344. return Object.assign(Object.assign({ type: 'property' }, spec.completion || {}), { label: spec.name })
  20345. }
  20346. function valueCompletion(spec) {
  20347. return typeof spec == 'string' ? { label: `"${spec}"`, type: 'constant' } : /^"/.test(spec.label) ? spec : Object.assign(Object.assign({}, spec), { label: `"${spec.label}"` })
  20348. }
  20349. function completeFromSchema(eltSpecs, attrSpecs) {
  20350. let allAttrs = [],
  20351. globalAttrs = []
  20352. let attrValues = Object.create(null)
  20353. for (let _i205 = 0, _length205 = attrSpecs.length; _i205 < _length205; _i205++) {
  20354. let s = attrSpecs[_i205]
  20355. let completion = attrCompletion(s)
  20356. allAttrs.push(completion)
  20357. if (s.global) globalAttrs.push(completion)
  20358. if (s.values) attrValues[s.name] = s.values.map(valueCompletion)
  20359. }
  20360. let allElements = [],
  20361. topElements = []
  20362. let byName = Object.create(null)
  20363. for (let _i206 = 0, _length206 = eltSpecs.length; _i206 < _length206; _i206++) {
  20364. let s = eltSpecs[_i206]
  20365. let attrs = globalAttrs,
  20366. attrVals = attrValues
  20367. if (s.attributes)
  20368. attrs = attrs.concat(
  20369. s.attributes.map(s => {
  20370. if (typeof s == 'string') return allAttrs.find(a => a.label == s) || { label: s, type: 'property' }
  20371. if (s.values) {
  20372. if (attrVals == attrValues) attrVals = Object.create(attrVals)
  20373. attrVals[s.name] = s.values.map(valueCompletion)
  20374. }
  20375. return attrCompletion(s)
  20376. })
  20377. )
  20378. let elt = new Element$2(s, attrs, attrVals)
  20379. byName[elt.name] = elt
  20380. allElements.push(elt)
  20381. if (s.top) topElements.push(elt)
  20382. }
  20383. if (!topElements.length) topElements = allElements
  20384. for (let i = 0; i < allElements.length; i++) {
  20385. let s = eltSpecs[i],
  20386. elt = allElements[i]
  20387. if (s.children) {
  20388. for (let _i207 = 0, _s$children = s.children, _length207 = _s$children.length; _i207 < _length207; _i207++) {
  20389. let ch = _s$children[_i207]
  20390. if (byName[ch]) elt.children.push(byName[ch])
  20391. }
  20392. } else {
  20393. elt.children = allElements
  20394. }
  20395. }
  20396. return cx => {
  20397. var _a
  20398. let { doc } = cx.state,
  20399. loc = findLocation(cx.state, cx.pos)
  20400. if (!loc || (loc.type == 'tag' && !cx.explicit)) return null
  20401. let { type, from, context } = loc
  20402. if (type == 'openTag') {
  20403. let children = topElements
  20404. let parentName = elementName(doc, context)
  20405. if (parentName) {
  20406. let parent = byName[parentName]
  20407. children = (parent === null || parent === void 0 ? void 0 : parent.children) || allElements
  20408. }
  20409. return { from, options: children.map(ch => ch.completion), span: Identifier }
  20410. } else if (type == 'closeTag') {
  20411. let parentName = elementName(doc, context)
  20412. return parentName
  20413. ? {
  20414. from,
  20415. to: cx.pos + (doc.sliceString(cx.pos, cx.pos + 1) == '>' ? 1 : 0),
  20416. options: [((_a = byName[parentName]) === null || _a === void 0 ? void 0 : _a.closeNameCompletion) || { label: parentName + '>', type: 'type' }],
  20417. span: Identifier
  20418. }
  20419. : null
  20420. } else if (type == 'attrName') {
  20421. let parent = byName[tagName(doc, context)]
  20422. return { from, options: (parent === null || parent === void 0 ? void 0 : parent.attrs) || globalAttrs, span: Identifier }
  20423. } else if (type == 'attrValue') {
  20424. let attr = attrName(doc, context, from)
  20425. if (!attr) return null
  20426. let parent = byName[tagName(doc, context)]
  20427. let values = ((parent === null || parent === void 0 ? void 0 : parent.attrValues) || attrValues)[attr]
  20428. if (!values || !values.length) return null
  20429. return { from, to: cx.pos + (doc.sliceString(cx.pos, cx.pos + 1) == '"' ? 1 : 0), options: values, span: /^"[^"]*"?$/ }
  20430. } else if (type == 'tag') {
  20431. let parentName = elementName(doc, context),
  20432. parent = byName[parentName]
  20433. let closing = [],
  20434. last = context && context.lastChild
  20435. if (parentName && (!last || last.name != 'CloseTag' || tagName(doc, last) != parentName))
  20436. closing.push(parent ? parent.closeCompletion : { label: '</' + parentName + '>', type: 'type', boost: 2 })
  20437. let options = closing.concat(((parent === null || parent === void 0 ? void 0 : parent.children) || (context ? allElements : topElements)).map(e => e.openCompletion))
  20438. if (context && (parent === null || parent === void 0 ? void 0 : parent.text.length)) {
  20439. let openTag = context.firstChild
  20440. if (openTag.to > cx.pos - 20 && !/\S/.test(cx.state.sliceDoc(openTag.to, cx.pos))) options = options.concat(parent.text)
  20441. }
  20442. return { from, options, span: /^<\/?[:\-\.\w\u00b7-\uffff]*$/ }
  20443. } else {
  20444. return null
  20445. }
  20446. }
  20447. }
  20448. const xmlLanguage = LezerLanguage.define({
  20449. parser: parser$2.configure({
  20450. props: [
  20451. indentNodeProp.add({
  20452. Element(context) {
  20453. let closed = /^\s*<\//.test(context.textAfter)
  20454. return context.lineIndent(context.state.doc.lineAt(context.node.from)) + (closed ? 0 : context.unit)
  20455. },
  20456. 'OpenTag CloseTag SelfClosingTag'(context) {
  20457. return context.column(context.node.from) + context.unit
  20458. }
  20459. }),
  20460. foldNodeProp.add({
  20461. Element(subtree) {
  20462. let first = subtree.firstChild,
  20463. last = subtree.lastChild
  20464. if (!first || first.name != 'OpenTag') return null
  20465. return { from: first.to, to: last.name == 'CloseTag' ? last.from : subtree.to }
  20466. }
  20467. }),
  20468. styleTags({
  20469. AttributeValue: tags$1.string,
  20470. Text: tags$1.content,
  20471. 'StartTag StartCloseTag EndTag SelfCloseEndTag': tags$1.angleBracket,
  20472. TagName: tags$1.tagName,
  20473. 'MismatchedCloseTag/Tagname': [tags$1.tagName, tags$1.invalid],
  20474. AttributeName: tags$1.propertyName,
  20475. UnquotedAttributeValue: tags$1.string,
  20476. Is: tags$1.definitionOperator,
  20477. 'EntityReference CharacterReference': tags$1.character,
  20478. Comment: tags$1.blockComment,
  20479. ProcessingInst: tags$1.processingInstruction,
  20480. DoctypeDecl: tags$1.documentMeta,
  20481. Cdata: tags$1.special(tags$1.string)
  20482. })
  20483. ]
  20484. }),
  20485. languageData: { commentTokens: { block: { open: '<!--', close: '-->' } }, indentOnInput: /^\s*<\/$/ }
  20486. })
  20487. function xml(conf = {}) {
  20488. return new LanguageSupport(xmlLanguage, xmlLanguage.data.of({ autocomplete: completeFromSchema(conf.elements || [], conf.attributes || []) }))
  20489. }
  20490. var _m31 = Object.freeze({ __proto__: null, completeFromSchema: completeFromSchema, xml: xml, xmlLanguage: xmlLanguage })
  20491. class CompositeBlock {
  20492. constructor(type, value, from, hash, end, children, positions) {
  20493. this.type = type
  20494. this.value = value
  20495. this.from = from
  20496. this.hash = hash
  20497. this.end = end
  20498. this.children = children
  20499. this.positions = positions
  20500. }
  20501. static create(type, value, from, parentHash, end) {
  20502. let hash = (parentHash + (parentHash << 8) + type + (value << 4)) | 0
  20503. return new CompositeBlock(type, value, from, hash, end, [], [])
  20504. }
  20505. toTree(nodeSet, end = this.end) {
  20506. let last = this.children.length - 1
  20507. if (last >= 0) end = Math.max(end, this.positions[last] + this.children[last].length + this.from)
  20508. let tree = new Tree(nodeSet.types[this.type], this.children, this.positions, end - this.from).balance(2048)
  20509. stampContext(tree.children, this.hash)
  20510. return tree
  20511. }
  20512. copy() {
  20513. return new CompositeBlock(this.type, this.value, this.from, this.hash, this.end, this.children.slice(), this.positions.slice())
  20514. }
  20515. }
  20516. var Type
  20517. ;(function(Type) {
  20518. Type[(Type['Document'] = 1)] = 'Document'
  20519. Type[(Type['CodeBlock'] = 2)] = 'CodeBlock'
  20520. Type[(Type['FencedCode'] = 3)] = 'FencedCode'
  20521. Type[(Type['Blockquote'] = 4)] = 'Blockquote'
  20522. Type[(Type['HorizontalRule'] = 5)] = 'HorizontalRule'
  20523. Type[(Type['BulletList'] = 6)] = 'BulletList'
  20524. Type[(Type['OrderedList'] = 7)] = 'OrderedList'
  20525. Type[(Type['ListItem'] = 8)] = 'ListItem'
  20526. Type[(Type['ATXHeading1'] = 9)] = 'ATXHeading1'
  20527. Type[(Type['ATXHeading2'] = 10)] = 'ATXHeading2'
  20528. Type[(Type['ATXHeading3'] = 11)] = 'ATXHeading3'
  20529. Type[(Type['ATXHeading4'] = 12)] = 'ATXHeading4'
  20530. Type[(Type['ATXHeading5'] = 13)] = 'ATXHeading5'
  20531. Type[(Type['ATXHeading6'] = 14)] = 'ATXHeading6'
  20532. Type[(Type['SetextHeading1'] = 15)] = 'SetextHeading1'
  20533. Type[(Type['SetextHeading2'] = 16)] = 'SetextHeading2'
  20534. Type[(Type['HTMLBlock'] = 17)] = 'HTMLBlock'
  20535. Type[(Type['LinkReference'] = 18)] = 'LinkReference'
  20536. Type[(Type['Paragraph'] = 19)] = 'Paragraph'
  20537. Type[(Type['CommentBlock'] = 20)] = 'CommentBlock'
  20538. Type[(Type['ProcessingInstructionBlock'] = 21)] = 'ProcessingInstructionBlock'
  20539. Type[(Type['Escape'] = 22)] = 'Escape'
  20540. Type[(Type['Entity'] = 23)] = 'Entity'
  20541. Type[(Type['HardBreak'] = 24)] = 'HardBreak'
  20542. Type[(Type['Emphasis'] = 25)] = 'Emphasis'
  20543. Type[(Type['StrongEmphasis'] = 26)] = 'StrongEmphasis'
  20544. Type[(Type['Link'] = 27)] = 'Link'
  20545. Type[(Type['Image'] = 28)] = 'Image'
  20546. Type[(Type['InlineCode'] = 29)] = 'InlineCode'
  20547. Type[(Type['HTMLTag'] = 30)] = 'HTMLTag'
  20548. Type[(Type['Comment'] = 31)] = 'Comment'
  20549. Type[(Type['ProcessingInstruction'] = 32)] = 'ProcessingInstruction'
  20550. Type[(Type['URL'] = 33)] = 'URL'
  20551. Type[(Type['HeaderMark'] = 34)] = 'HeaderMark'
  20552. Type[(Type['QuoteMark'] = 35)] = 'QuoteMark'
  20553. Type[(Type['ListMark'] = 36)] = 'ListMark'
  20554. Type[(Type['LinkMark'] = 37)] = 'LinkMark'
  20555. Type[(Type['EmphasisMark'] = 38)] = 'EmphasisMark'
  20556. Type[(Type['CodeMark'] = 39)] = 'CodeMark'
  20557. Type[(Type['CodeInfo'] = 40)] = 'CodeInfo'
  20558. Type[(Type['LinkTitle'] = 41)] = 'LinkTitle'
  20559. Type[(Type['LinkLabel'] = 42)] = 'LinkLabel'
  20560. })(Type || (Type = {}))
  20561. class LeafBlock {
  20562. constructor(start, content) {
  20563. this.start = start
  20564. this.content = content
  20565. this.marks = []
  20566. this.parsers = []
  20567. }
  20568. }
  20569. class Line {
  20570. constructor() {
  20571. this.text = ''
  20572. this.baseIndent = 0
  20573. this.basePos = 0
  20574. this.depth = 0
  20575. this.markers = []
  20576. this.pos = 0
  20577. this.indent = 0
  20578. this.next = -1
  20579. }
  20580. forward() {
  20581. if (this.basePos > this.pos) this.forwardInner()
  20582. }
  20583. forwardInner() {
  20584. let newPos = this.skipSpace(this.basePos)
  20585. this.indent = this.countIndent(newPos, this.pos, this.indent)
  20586. this.pos = newPos
  20587. this.next = newPos == this.text.length ? -1 : this.text.charCodeAt(newPos)
  20588. }
  20589. skipSpace(from) {
  20590. return skipSpace(this.text, from)
  20591. }
  20592. reset(text) {
  20593. this.text = text
  20594. this.baseIndent = this.basePos = this.pos = this.indent = 0
  20595. this.forwardInner()
  20596. this.depth = 1
  20597. while (this.markers.length) this.markers.pop()
  20598. }
  20599. moveBase(to) {
  20600. this.basePos = to
  20601. this.baseIndent = this.countIndent(to, this.pos, this.indent)
  20602. }
  20603. moveBaseColumn(indent) {
  20604. this.baseIndent = indent
  20605. this.basePos = this.findColumn(indent)
  20606. }
  20607. addMarker(elt) {
  20608. this.markers.push(elt)
  20609. }
  20610. countIndent(to, from = 0, indent = 0) {
  20611. for (let i = from; i < to; i++) indent += this.text.charCodeAt(i) == 9 ? 4 - (indent % 4) : 1
  20612. return indent
  20613. }
  20614. findColumn(goal) {
  20615. let i = 0
  20616. for (let indent = 0; i < this.text.length && indent < goal; i++) indent += this.text.charCodeAt(i) == 9 ? 4 - (indent % 4) : 1
  20617. return i
  20618. }
  20619. scrub() {
  20620. if (!this.baseIndent) return this.text
  20621. let result = ''
  20622. for (let i = 0; i < this.basePos; i++) result += ' '
  20623. return result + this.text.slice(this.basePos)
  20624. }
  20625. }
  20626. function skipForList(bl, cx, line) {
  20627. if (line.pos == line.text.length || (bl != cx.block && line.indent >= cx.stack[line.depth + 1].value + line.baseIndent)) return true
  20628. if (line.indent >= line.baseIndent + 4) return false
  20629. let size = (bl.type == Type.OrderedList ? isOrderedList : isBulletList)(line, cx, false)
  20630. return size > 0 && (bl.type != Type.BulletList || isHorizontalRule(line, cx, false) < 0) && line.text.charCodeAt(line.pos + size - 1) == bl.value
  20631. }
  20632. const DefaultSkipMarkup = {
  20633. [Type.Blockquote](bl, cx, line) {
  20634. if (line.next != 62) return false
  20635. line.markers.push(elt(Type.QuoteMark, cx.lineStart + line.pos, cx.lineStart + line.pos + 1))
  20636. line.moveBase(line.pos + 1)
  20637. bl.end = cx.lineStart + line.text.length
  20638. return true
  20639. },
  20640. [Type.ListItem](bl, _cx, line) {
  20641. if (line.indent < line.baseIndent + bl.value && line.next > -1) return false
  20642. line.moveBaseColumn(line.baseIndent + bl.value)
  20643. return true
  20644. },
  20645. [Type.OrderedList]: skipForList,
  20646. [Type.BulletList]: skipForList,
  20647. [Type.Document]() {
  20648. return true
  20649. }
  20650. }
  20651. function space(ch) {
  20652. return ch == 32 || ch == 9 || ch == 10 || ch == 13
  20653. }
  20654. function skipSpace(line, i = 0) {
  20655. while (i < line.length && space(line.charCodeAt(i))) i++
  20656. return i
  20657. }
  20658. function skipSpaceBack(line, i, to) {
  20659. while (i > to && space(line.charCodeAt(i - 1))) i--
  20660. return i
  20661. }
  20662. function isFencedCode(line) {
  20663. if (line.next != 96 && line.next != 126) return -1
  20664. let pos = line.pos + 1
  20665. while (pos < line.text.length && line.text.charCodeAt(pos) == line.next) pos++
  20666. if (pos < line.pos + 3) return -1
  20667. if (line.next == 96) for (let i = pos; i < line.text.length; i++) if (line.text.charCodeAt(i) == 96) return -1
  20668. return pos
  20669. }
  20670. function isBlockquote(line) {
  20671. return line.next != 62 ? -1 : line.text.charCodeAt(line.pos + 1) == 32 ? 2 : 1
  20672. }
  20673. function isHorizontalRule(line, cx, breaking) {
  20674. if (line.next != 42 && line.next != 45 && line.next != 95) return -1
  20675. let count = 1
  20676. for (let pos = line.pos + 1; pos < line.text.length; pos++) {
  20677. let ch = line.text.charCodeAt(pos)
  20678. if (ch == line.next) count++
  20679. else if (!space(ch)) return -1
  20680. }
  20681. if (breaking && line.next == 45 && isSetextUnderline(line) > -1 && line.depth == cx.stack.length) return -1
  20682. return count < 3 ? -1 : 1
  20683. }
  20684. function inList(cx, type) {
  20685. return cx.block.type == type || (cx.stack.length > 1 && cx.stack[cx.stack.length - 2].type == type)
  20686. }
  20687. function isBulletList(line, cx, breaking) {
  20688. return (line.next == 45 || line.next == 43 || line.next == 42) &&
  20689. (line.pos == line.text.length - 1 || space(line.text.charCodeAt(line.pos + 1))) &&
  20690. (!breaking || inList(cx, Type.BulletList) || line.skipSpace(line.pos + 2) < line.text.length)
  20691. ? 1
  20692. : -1
  20693. }
  20694. function isOrderedList(line, cx, breaking) {
  20695. let pos = line.pos,
  20696. next = line.next
  20697. for (;;) {
  20698. if (next >= 48 && next <= 57) pos++
  20699. else break
  20700. if (pos == line.text.length) return -1
  20701. next = line.text.charCodeAt(pos)
  20702. }
  20703. if (
  20704. pos == line.pos ||
  20705. pos > line.pos + 9 ||
  20706. (next != 46 && next != 41) ||
  20707. (pos < line.text.length - 1 && !space(line.text.charCodeAt(pos + 1))) ||
  20708. (breaking && !inList(cx, Type.OrderedList) && (line.skipSpace(pos + 1) == line.text.length || pos > line.pos + 1 || line.next != 49))
  20709. )
  20710. return -1
  20711. return pos + 1 - line.pos
  20712. }
  20713. function isAtxHeading(line) {
  20714. if (line.next != 35) return -1
  20715. let pos = line.pos + 1
  20716. while (pos < line.text.length && line.text.charCodeAt(pos) == 35) pos++
  20717. if (pos < line.text.length && line.text.charCodeAt(pos) != 32) return -1
  20718. let size = pos - line.pos
  20719. return size > 6 ? -1 : size
  20720. }
  20721. function isSetextUnderline(line) {
  20722. if ((line.next != 45 && line.next != 61) || line.indent >= line.baseIndent + 4) return -1
  20723. let pos = line.pos + 1
  20724. while (pos < line.text.length && line.text.charCodeAt(pos) == line.next) pos++
  20725. let end = pos
  20726. while (pos < line.text.length && space(line.text.charCodeAt(pos))) pos++
  20727. return pos == line.text.length ? end : -1
  20728. }
  20729. const EmptyLine = /^[ \t]*$/,
  20730. CommentEnd = /-->/,
  20731. ProcessingEnd = /\?>/
  20732. const HTMLBlockStyle = [
  20733. [/^<(?:script|pre|style)(?:\s|>|$)/i, /<\/(?:script|pre|style)>/i],
  20734. [/^\s*<!--/, CommentEnd],
  20735. [/^\s*<\?/, ProcessingEnd],
  20736. [/^\s*<![A-Z]/, />/],
  20737. [/^\s*<!\[CDATA\[/, /\]\]>/],
  20738. [
  20739. /^\s*<\/?(?:address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul)(?:\s|\/?>|$)/i,
  20740. EmptyLine
  20741. ],
  20742. [/^\s*(?:<\/[a-z][\w-]*\s*>|<[a-z][\w-]*(\s+[a-z:_][\w-.]*(?:\s*=\s*(?:[^\s"'=<>`]+|'[^']*'|"[^"]*"))?)*\s*>)\s*$/i, EmptyLine]
  20743. ]
  20744. function isHTMLBlock(line, _cx, breaking) {
  20745. if (line.next != 60) return -1
  20746. let rest = line.text.slice(line.pos)
  20747. for (let i = 0, e = HTMLBlockStyle.length - (breaking ? 1 : 0); i < e; i++) if (HTMLBlockStyle[i][0].test(rest)) return i
  20748. return -1
  20749. }
  20750. function getListIndent(line, pos) {
  20751. let indentAfter = line.countIndent(pos, line.pos, line.indent)
  20752. let indented = line.countIndent(line.skipSpace(pos), pos, indentAfter)
  20753. return indented >= indentAfter + 5 ? indentAfter + 1 : indented
  20754. }
  20755. const DefaultBlockParsers = {
  20756. LinkReference: undefined,
  20757. IndentedCode(cx, line) {
  20758. let base = line.baseIndent + 4
  20759. if (line.indent < base) return false
  20760. let start = line.findColumn(base)
  20761. let from = cx.lineStart + start,
  20762. end = cx.lineStart + line.text.length
  20763. let marks = [],
  20764. pendingMarks = []
  20765. for (; cx.nextLine(); ) {
  20766. if (line.depth < cx.stack.length) break
  20767. if (line.pos == line.text.length) {
  20768. for (let _i208 = 0, _line$markers = line.markers, _length208 = _line$markers.length; _i208 < _length208; _i208++) {
  20769. let m = _line$markers[_i208]
  20770. pendingMarks.push(m)
  20771. }
  20772. } else if (line.indent < base) {
  20773. break
  20774. } else {
  20775. if (pendingMarks.length) {
  20776. for (let _i209 = 0, _pendingMarks = pendingMarks, _length209 = _pendingMarks.length; _i209 < _length209; _i209++) {
  20777. let m = _pendingMarks[_i209]
  20778. marks.push(m)
  20779. }
  20780. pendingMarks = []
  20781. }
  20782. for (let _i210 = 0, _line$markers2 = line.markers, _length210 = _line$markers2.length; _i210 < _length210; _i210++) {
  20783. let m = _line$markers2[_i210]
  20784. marks.push(m)
  20785. }
  20786. end = cx.lineStart + line.text.length
  20787. }
  20788. }
  20789. if (pendingMarks.length) line.markers = pendingMarks.concat(line.markers)
  20790. let nest = !marks.length && cx.parser.codeParser && cx.parser.codeParser('')
  20791. if (nest) cx.startNested(from, nest.startParse(cx.input.clip(end), from, cx.parseContext), tree => new Tree(cx.parser.nodeSet.types[Type.CodeBlock], [tree], [0], end - from))
  20792. else cx.addNode(cx.buffer.writeElements(marks, -from).finish(Type.CodeBlock, end - from), from)
  20793. return true
  20794. },
  20795. FencedCode(cx, line) {
  20796. let fenceEnd = isFencedCode(line)
  20797. if (fenceEnd < 0) return false
  20798. let from = cx.lineStart + line.pos,
  20799. ch = line.next,
  20800. len = fenceEnd - line.pos
  20801. let infoFrom = line.skipSpace(fenceEnd),
  20802. infoTo = skipSpaceBack(line.text, line.text.length, infoFrom)
  20803. let marks = [elt(Type.CodeMark, from, from + len)],
  20804. info = ''
  20805. if (infoFrom < infoTo) {
  20806. marks.push(elt(Type.CodeInfo, cx.lineStart + infoFrom, cx.lineStart + infoTo))
  20807. info = line.text.slice(infoFrom, infoTo)
  20808. }
  20809. let ownMarks = marks.length,
  20810. startMarks = ownMarks
  20811. let codeStart = cx.lineStart + line.text.length + 1,
  20812. codeEnd = -1
  20813. for (; cx.nextLine(); ) {
  20814. if (line.depth < cx.stack.length) break
  20815. for (let _i211 = 0, _line$markers3 = line.markers, _length211 = _line$markers3.length; _i211 < _length211; _i211++) {
  20816. let m = _line$markers3[_i211]
  20817. marks.push(m)
  20818. }
  20819. let i = line.pos
  20820. if (line.indent - line.baseIndent < 4) while (i < line.text.length && line.text.charCodeAt(i) == ch) i++
  20821. if (i - line.pos >= len && line.skipSpace(i) == line.text.length) {
  20822. marks.push(elt(Type.CodeMark, cx.lineStart + line.pos, cx.lineStart + i))
  20823. ownMarks++
  20824. codeEnd = cx.lineStart - 1
  20825. cx.nextLine()
  20826. break
  20827. }
  20828. }
  20829. let to = cx.prevLineEnd()
  20830. if (codeEnd < 0) codeEnd = to
  20831. let nest = marks.length == ownMarks && cx.parser.codeParser && cx.parser.codeParser(info)
  20832. if (nest && codeStart < codeEnd) {
  20833. cx.startNested(from, nest.startParse(cx.input.clip(codeEnd), codeStart, cx.parseContext), tree => {
  20834. marks.splice(startMarks, 0, new TreeElement(tree, codeStart))
  20835. return elt(Type.FencedCode, from, to, marks)
  20836. })
  20837. } else {
  20838. cx.addNode(cx.buffer.writeElements(marks, -from).finish(Type.FencedCode, cx.prevLineEnd() - from), from)
  20839. }
  20840. return true
  20841. },
  20842. Blockquote(cx, line) {
  20843. let size = isBlockquote(line)
  20844. if (size < 0) return false
  20845. cx.startContext(Type.Blockquote, line.pos)
  20846. cx.addNode(Type.QuoteMark, cx.lineStart + line.pos, cx.lineStart + line.pos + 1)
  20847. line.moveBase(line.pos + size)
  20848. return null
  20849. },
  20850. HorizontalRule(cx, line) {
  20851. if (isHorizontalRule(line, cx, false) < 0) return false
  20852. let from = cx.lineStart + line.pos
  20853. cx.nextLine()
  20854. cx.addNode(Type.HorizontalRule, from)
  20855. return true
  20856. },
  20857. BulletList(cx, line) {
  20858. let size = isBulletList(line, cx, false)
  20859. if (size < 0) return false
  20860. if (cx.block.type != Type.BulletList) cx.startContext(Type.BulletList, line.basePos, line.next)
  20861. let newBase = getListIndent(line, line.pos + 1)
  20862. cx.startContext(Type.ListItem, line.basePos, newBase - line.baseIndent)
  20863. cx.addNode(Type.ListMark, cx.lineStart + line.pos, cx.lineStart + line.pos + size)
  20864. line.moveBaseColumn(newBase)
  20865. return null
  20866. },
  20867. OrderedList(cx, line) {
  20868. let size = isOrderedList(line, cx, false)
  20869. if (size < 0) return false
  20870. if (cx.block.type != Type.OrderedList) cx.startContext(Type.OrderedList, line.basePos, line.text.charCodeAt(line.pos + size - 1))
  20871. let newBase = getListIndent(line, line.pos + size)
  20872. cx.startContext(Type.ListItem, line.basePos, newBase - line.baseIndent)
  20873. cx.addNode(Type.ListMark, cx.lineStart + line.pos, cx.lineStart + line.pos + size)
  20874. line.moveBaseColumn(newBase)
  20875. return null
  20876. },
  20877. ATXHeading(cx, line) {
  20878. let size = isAtxHeading(line)
  20879. if (size < 0) return false
  20880. let off = line.pos,
  20881. from = cx.lineStart + off
  20882. let endOfSpace = skipSpaceBack(line.text, line.text.length, off),
  20883. after = endOfSpace
  20884. while (after > off && line.text.charCodeAt(after - 1) == line.next) after--
  20885. if (after == endOfSpace || after == off || !space(line.text.charCodeAt(after - 1))) after = line.text.length
  20886. let buf = cx.buffer.write(Type.HeaderMark, 0, size).writeElements(cx.parser.parseInline(line.text.slice(off + size + 1, after), from + size + 1), -from)
  20887. if (after < line.text.length) buf.write(Type.HeaderMark, after - off, endOfSpace - off)
  20888. let node = buf.finish(Type.ATXHeading1 - 1 + size, line.text.length - off)
  20889. cx.nextLine()
  20890. cx.addNode(node, from)
  20891. return true
  20892. },
  20893. HTMLBlock(cx, line) {
  20894. let type = isHTMLBlock(line, cx, false)
  20895. if (type < 0) return false
  20896. let from = cx.lineStart + line.pos,
  20897. end = HTMLBlockStyle[type][1]
  20898. let marks = [],
  20899. trailing = end != EmptyLine
  20900. while (!end.test(line.text) && cx.nextLine()) {
  20901. if (line.depth < cx.stack.length) {
  20902. trailing = false
  20903. break
  20904. }
  20905. for (let _i212 = 0, _line$markers4 = line.markers, _length212 = _line$markers4.length; _i212 < _length212; _i212++) {
  20906. let m = _line$markers4[_i212]
  20907. marks.push(m)
  20908. }
  20909. }
  20910. if (trailing) cx.nextLine()
  20911. let nodeType = end == CommentEnd ? Type.CommentBlock : end == ProcessingEnd ? Type.ProcessingInstructionBlock : Type.HTMLBlock
  20912. let to = cx.prevLineEnd()
  20913. if (!marks.length && nodeType == Type.HTMLBlock && cx.parser.htmlParser) {
  20914. cx.startNested(from, cx.parser.htmlParser.startParse(cx.input.clip(to), from, cx.parseContext), tree => new Tree(cx.parser.nodeSet.types[nodeType], [tree], [0], to - from))
  20915. } else {
  20916. cx.addNode(cx.buffer.writeElements(marks, -from).finish(nodeType, to - from), from)
  20917. }
  20918. return true
  20919. },
  20920. SetextHeading: undefined
  20921. }
  20922. class LinkReferenceParser {
  20923. constructor(leaf) {
  20924. this.stage = 0
  20925. this.elts = []
  20926. this.pos = 0
  20927. this.start = leaf.start
  20928. this.advance(leaf.content)
  20929. }
  20930. nextLine(cx, line, leaf) {
  20931. if (this.stage == -1) return false
  20932. let content = leaf.content + '\n' + line.scrub()
  20933. let finish = this.advance(content)
  20934. if (finish > -1 && finish < content.length) return this.complete(cx, leaf, finish)
  20935. return false
  20936. }
  20937. finish(cx, leaf) {
  20938. if ((this.stage == 2 || this.stage == 3) && skipSpace(leaf.content, this.pos) == leaf.content.length) return this.complete(cx, leaf, leaf.content.length)
  20939. return false
  20940. }
  20941. complete(cx, leaf, len) {
  20942. cx.addLeafElement(leaf, elt(Type.LinkReference, this.start, this.start + len, this.elts))
  20943. return true
  20944. }
  20945. nextStage(elt) {
  20946. if (elt) {
  20947. this.pos = elt.to - this.start
  20948. this.elts.push(elt)
  20949. this.stage++
  20950. return true
  20951. }
  20952. if (elt === false) this.stage = -1
  20953. return false
  20954. }
  20955. advance(content) {
  20956. for (;;) {
  20957. if (this.stage == -1) {
  20958. return -1
  20959. } else if (this.stage == 0) {
  20960. if (!this.nextStage(parseLinkLabel(content, this.pos, this.start, true))) return -1
  20961. if (content.charCodeAt(this.pos) != 58) return (this.stage = -1)
  20962. this.elts.push(elt(Type.LinkMark, this.pos + this.start, this.pos + this.start + 1))
  20963. this.pos++
  20964. } else if (this.stage == 1) {
  20965. if (!this.nextStage(parseURL(content, skipSpace(content, this.pos), this.start))) return -1
  20966. } else if (this.stage == 2) {
  20967. let skip = skipSpace(content, this.pos),
  20968. end = 0
  20969. if (skip > this.pos) {
  20970. let title = parseLinkTitle(content, skip, this.start)
  20971. if (title) {
  20972. let titleEnd = lineEnd(content, title.to - this.start)
  20973. if (titleEnd > 0) {
  20974. this.nextStage(title)
  20975. end = titleEnd
  20976. }
  20977. }
  20978. }
  20979. if (!end) end = lineEnd(content, this.pos)
  20980. return end > 0 && end < content.length ? end : -1
  20981. } else {
  20982. return lineEnd(content, this.pos)
  20983. }
  20984. }
  20985. }
  20986. }
  20987. function lineEnd(text, pos) {
  20988. for (; pos < text.length; pos++) {
  20989. let next = text.charCodeAt(pos)
  20990. if (next == 10) break
  20991. if (!space(next)) return -1
  20992. }
  20993. return pos
  20994. }
  20995. class SetextHeadingParser {
  20996. nextLine(cx, line, leaf) {
  20997. let underline = line.depth < cx.stack.length ? -1 : isSetextUnderline(line)
  20998. let next = line.next
  20999. if (underline < 0) return false
  21000. let underlineMark = elt(Type.HeaderMark, cx.lineStart + line.pos, cx.lineStart + underline)
  21001. cx.nextLine()
  21002. cx.addLeafElement(leaf, elt(next == 61 ? Type.SetextHeading1 : Type.SetextHeading2, leaf.start, cx.prevLineEnd(), [...cx.parser.parseInline(leaf.content, leaf.start), underlineMark]))
  21003. return true
  21004. }
  21005. finish() {
  21006. return false
  21007. }
  21008. }
  21009. const DefaultLeafBlocks = {
  21010. LinkReference(_, leaf) {
  21011. return leaf.content.charCodeAt(0) == 91 ? new LinkReferenceParser(leaf) : null
  21012. },
  21013. SetextHeading() {
  21014. return new SetextHeadingParser()
  21015. }
  21016. }
  21017. const DefaultEndLeaf = [
  21018. (_, line) => isAtxHeading(line) >= 0,
  21019. (_, line) => isFencedCode(line) >= 0,
  21020. (_, line) => isBlockquote(line) >= 0,
  21021. (p, line) => isBulletList(line, p, true) >= 0,
  21022. (p, line) => isOrderedList(line, p, true) >= 0,
  21023. (p, line) => isHorizontalRule(line, p, true) >= 0,
  21024. (p, line) => isHTMLBlock(line, p, true) >= 0
  21025. ]
  21026. class NestedParse {
  21027. constructor(from, parse, finish) {
  21028. this.from = from
  21029. this.parse = parse
  21030. this.finish = finish
  21031. }
  21032. }
  21033. class BlockContext {
  21034. constructor(parser, input, startPos, parseContext) {
  21035. this.parser = parser
  21036. this.input = input
  21037. this.parseContext = parseContext
  21038. this.line = new Line()
  21039. this.atEnd = false
  21040. this.nested = null
  21041. this.lineStart = startPos
  21042. this.block = CompositeBlock.create(Type.Document, 0, this.lineStart, 0, 0)
  21043. this.stack = [this.block]
  21044. this.fragments = (parseContext === null || parseContext === void 0 ? void 0 : parseContext.fragments) ? new FragmentCursor(parseContext.fragments, input) : null
  21045. this.updateLine(input.lineAfter(this.lineStart))
  21046. }
  21047. get pos() {
  21048. return this.nested ? this.nested.parse.pos : this.lineStart
  21049. }
  21050. advance() {
  21051. if (this.nested) {
  21052. let done = this.nested.parse.advance()
  21053. if (done) {
  21054. let node = this.nested.finish(done)
  21055. if (node instanceof Element$1) node = node.toTree(this.parser.nodeSet)
  21056. this.addNode(node, this.nested.from)
  21057. this.nested = null
  21058. }
  21059. return null
  21060. }
  21061. let { line } = this
  21062. for (;;) {
  21063. while (line.depth < this.stack.length) this.finishContext()
  21064. for (let _i213 = 0, _line$markers5 = line.markers, _length213 = _line$markers5.length; _i213 < _length213; _i213++) {
  21065. let mark = _line$markers5[_i213]
  21066. this.addNode(mark.type, mark.from, mark.to)
  21067. }
  21068. if (line.pos < line.text.length) break
  21069. if (!this.nextLine()) return this.finish()
  21070. }
  21071. if (this.fragments && this.reuseFragment(line.basePos)) return null
  21072. start: for (;;) {
  21073. for (let _i214 = 0, _this$parser$blockPar = this.parser.blockParsers, _length214 = _this$parser$blockPar.length; _i214 < _length214; _i214++) {
  21074. let type = _this$parser$blockPar[_i214]
  21075. if (type) {
  21076. let result = type(this, line)
  21077. if (result != false) {
  21078. if (result == true) return null
  21079. line.forward()
  21080. continue start
  21081. }
  21082. }
  21083. }
  21084. break
  21085. }
  21086. let leaf = new LeafBlock(this.lineStart + line.pos, line.text.slice(line.pos))
  21087. for (let _i215 = 0, _this$parser$leafBloc = this.parser.leafBlockParsers, _length215 = _this$parser$leafBloc.length; _i215 < _length215; _i215++) {
  21088. let parse = _this$parser$leafBloc[_i215]
  21089. if (parse) {
  21090. let parser = parse(this, leaf)
  21091. if (parser) leaf.parsers.push(parser)
  21092. }
  21093. }
  21094. lines: while (this.nextLine()) {
  21095. if (line.pos == line.text.length) break
  21096. if (line.indent < line.baseIndent + 4) {
  21097. for (let _i216 = 0, _parser$1$endLeafBloc = parser$1.endLeafBlock, _length216 = _parser$1$endLeafBloc.length; _i216 < _length216; _i216++) {
  21098. let stop = _parser$1$endLeafBloc[_i216]
  21099. if (stop(this, line)) break lines
  21100. }
  21101. }
  21102. for (let _i217 = 0, _leaf$parsers = leaf.parsers, _length217 = _leaf$parsers.length; _i217 < _length217; _i217++) {
  21103. let parser = _leaf$parsers[_i217]
  21104. if (parser.nextLine(this, line, leaf)) return null
  21105. }
  21106. leaf.content += '\n' + line.scrub()
  21107. for (let _i218 = 0, _line$markers6 = line.markers, _length218 = _line$markers6.length; _i218 < _length218; _i218++) {
  21108. let m = _line$markers6[_i218]
  21109. leaf.marks.push(m)
  21110. }
  21111. }
  21112. this.finishLeaf(leaf)
  21113. return null
  21114. }
  21115. reuseFragment(start) {
  21116. if (!this.fragments.moveTo(this.lineStart + start, this.lineStart) || !this.fragments.matches(this.block.hash)) return false
  21117. let taken = this.fragments.takeNodes(this)
  21118. if (!taken) return false
  21119. this.lineStart += taken
  21120. if (this.lineStart < this.input.length) {
  21121. this.lineStart++
  21122. this.updateLine(this.input.lineAfter(this.lineStart))
  21123. } else {
  21124. this.atEnd = true
  21125. this.updateLine('')
  21126. }
  21127. return true
  21128. }
  21129. nextLine() {
  21130. this.lineStart += this.line.text.length
  21131. if (this.lineStart >= this.input.length) {
  21132. this.atEnd = true
  21133. this.updateLine('')
  21134. return false
  21135. } else {
  21136. this.lineStart++
  21137. this.updateLine(this.input.lineAfter(this.lineStart))
  21138. return true
  21139. }
  21140. }
  21141. updateLine(text) {
  21142. let { line } = this
  21143. line.reset(text)
  21144. for (; line.depth < this.stack.length; line.depth++) {
  21145. let cx = this.stack[line.depth],
  21146. handler = this.parser.skipContextMarkup[cx.type]
  21147. if (!handler) throw new Error('Unhandled block context ' + Type[cx.type])
  21148. if (!handler(cx, this, line)) break
  21149. line.forward()
  21150. }
  21151. }
  21152. prevLineEnd() {
  21153. return this.atEnd ? this.lineStart : this.lineStart - 1
  21154. }
  21155. startContext(type, start, value = 0) {
  21156. this.block = CompositeBlock.create(type, value, this.lineStart + start, this.block.hash, this.lineStart + this.line.text.length)
  21157. this.stack.push(this.block)
  21158. }
  21159. startComposite(type, start, value = 0) {
  21160. this.startContext(this.parser.getNodeType(type), start, value)
  21161. }
  21162. addNode(block, from, to) {
  21163. if (typeof block == 'number') block = new Tree(this.parser.nodeSet.types[block], none, none, (to !== null && to !== void 0 ? to : this.prevLineEnd()) - from)
  21164. this.block.children.push(block)
  21165. this.block.positions.push(from - this.block.from)
  21166. }
  21167. addElement(elt) {
  21168. this.block.children.push(elt.toTree(this.parser.nodeSet))
  21169. this.block.positions.push(elt.from - this.block.from)
  21170. }
  21171. addLeafElement(leaf, elt) {
  21172. this.addNode(this.buffer.writeElements(injectMarks(elt.children, leaf.marks), -elt.from).finish(elt.type, elt.to - elt.from), elt.from)
  21173. }
  21174. startNested(from, parse, finish) {
  21175. this.nested = new NestedParse(from, parse, finish)
  21176. }
  21177. finishContext() {
  21178. this.block = finishContext(this.stack, this.parser.nodeSet)
  21179. }
  21180. finish() {
  21181. while (this.stack.length > 1) this.finishContext()
  21182. return this.block.toTree(this.parser.nodeSet, this.lineStart)
  21183. }
  21184. forceFinish() {
  21185. let cx = this.stack.map(cx => cx.copy()),
  21186. pos = this.lineStart
  21187. if (this.nested) {
  21188. let inner = cx[cx.length - 1]
  21189. let result = this.nested.finish(this.nested.parse.forceFinish())
  21190. if (result instanceof Element$1) result = result.toTree(this.parser.nodeSet)
  21191. let len = pos - this.nested.from
  21192. if (result.length > len)
  21193. result = new Tree(
  21194. result.type,
  21195. result.children.filter((_, i) => result.positions[i] <= len),
  21196. result.positions.filter(p => p <= len),
  21197. len
  21198. )
  21199. inner.children.push(result)
  21200. inner.positions.push(this.nested.from)
  21201. }
  21202. while (cx.length > 1) finishContext(cx, this.parser.nodeSet)
  21203. return cx[0].toTree(this.parser.nodeSet, pos)
  21204. }
  21205. finishLeaf(leaf) {
  21206. for (let _i219 = 0, _leaf$parsers2 = leaf.parsers, _length219 = _leaf$parsers2.length; _i219 < _length219; _i219++) {
  21207. let parser = _leaf$parsers2[_i219]
  21208. if (parser.finish(this, leaf)) return
  21209. }
  21210. let inline = injectMarks(this.parser.parseInline(leaf.content, leaf.start), leaf.marks)
  21211. this.addNode(this.buffer.writeElements(inline, -leaf.start).finish(Type.Paragraph, leaf.content.length), leaf.start)
  21212. }
  21213. elt(type, from, to, children) {
  21214. if (typeof type == 'string') return elt(this.parser.getNodeType(type), from, to, children)
  21215. return new TreeElement(type, from)
  21216. }
  21217. get buffer() {
  21218. return new Buffer(this.parser.nodeSet)
  21219. }
  21220. }
  21221. class MarkdownParser {
  21222. constructor(nodeSet, codeParser, htmlParser, blockParsers, leafBlockParsers, blockNames, endLeafBlock, skipContextMarkup, inlineParsers, inlineNames) {
  21223. this.nodeSet = nodeSet
  21224. this.codeParser = codeParser
  21225. this.htmlParser = htmlParser
  21226. this.blockParsers = blockParsers
  21227. this.leafBlockParsers = leafBlockParsers
  21228. this.blockNames = blockNames
  21229. this.endLeafBlock = endLeafBlock
  21230. this.skipContextMarkup = skipContextMarkup
  21231. this.inlineParsers = inlineParsers
  21232. this.inlineNames = inlineNames
  21233. this.nodeTypes = Object.create(null)
  21234. for (let _i220 = 0, _nodeSet$types = nodeSet.types, _length220 = _nodeSet$types.length; _i220 < _length220; _i220++) {
  21235. let t = _nodeSet$types[_i220]
  21236. this.nodeTypes[t.name] = t.id
  21237. }
  21238. }
  21239. startParse(input, startPos = 0, parseContext = {}) {
  21240. return new BlockContext(this, input, startPos, parseContext)
  21241. }
  21242. configure(spec) {
  21243. let config = resolveConfig(spec)
  21244. if (!config) return this
  21245. let { nodeSet, skipContextMarkup } = this
  21246. let blockParsers = this.blockParsers.slice(),
  21247. leafBlockParsers = this.leafBlockParsers.slice(),
  21248. blockNames = this.blockNames.slice(),
  21249. inlineParsers = this.inlineParsers.slice(),
  21250. inlineNames = this.inlineNames.slice(),
  21251. endLeafBlock = this.endLeafBlock.slice()
  21252. if (nonEmpty(config.defineNodes)) {
  21253. skipContextMarkup = Object.assign({}, skipContextMarkup)
  21254. let nodeTypes = nodeSet.types.slice()
  21255. for (let _i221 = 0, _config$defineNodes = config.defineNodes, _length221 = _config$defineNodes.length; _i221 < _length221; _i221++) {
  21256. let s = _config$defineNodes[_i221]
  21257. let { name, block, composite } = typeof s == 'string' ? { name: s } : s
  21258. if (nodeTypes.some(t => t.name == name)) continue
  21259. if (composite) skipContextMarkup[nodeTypes.length] = (bl, cx, line) => composite(cx, line, bl.value)
  21260. let id = nodeTypes.length
  21261. let group = composite
  21262. ? ['Block', 'BlockContext']
  21263. : !block
  21264. ? undefined
  21265. : id >= Type.ATXHeading1 && id <= Type.SetextHeading2
  21266. ? ['Block', 'LeafBlock', 'Heading']
  21267. : ['Block', 'LeafBlock']
  21268. nodeTypes.push(NodeType.define({ id, name, props: group && [[NodeProp.group, group]] }))
  21269. }
  21270. nodeSet = new NodeSet(nodeTypes)
  21271. }
  21272. if (nonEmpty(config.props)) nodeSet = nodeSet.extend(...config.props)
  21273. if (nonEmpty(config.remove)) {
  21274. for (let _i222 = 0, _config$remove = config.remove, _length222 = _config$remove.length; _i222 < _length222; _i222++) {
  21275. let rm = _config$remove[_i222]
  21276. let block = this.blockNames.indexOf(rm),
  21277. inline = this.inlineNames.indexOf(rm)
  21278. if (block > -1) blockParsers[block] = leafBlockParsers[block] = undefined
  21279. if (inline > -1) inlineParsers[inline] = undefined
  21280. }
  21281. }
  21282. if (nonEmpty(config.parseBlock)) {
  21283. for (let _i223 = 0, _config$parseBlock = config.parseBlock, _length223 = _config$parseBlock.length; _i223 < _length223; _i223++) {
  21284. let spec = _config$parseBlock[_i223]
  21285. let found = blockNames.indexOf(spec.name)
  21286. if (found > -1) {
  21287. blockParsers[found] = spec.parse
  21288. leafBlockParsers[found] = spec.leaf
  21289. } else {
  21290. let pos = spec.before ? findName(blockNames, spec.before) : spec.after ? findName(blockNames, spec.after) + 1 : blockNames.length - 1
  21291. blockParsers.splice(pos, 0, spec.parse)
  21292. leafBlockParsers.splice(pos, 0, spec.leaf)
  21293. blockNames.splice(pos, 0, spec.name)
  21294. }
  21295. if (spec.endLeaf) endLeafBlock.push(spec.endLeaf)
  21296. }
  21297. }
  21298. if (nonEmpty(config.parseInline)) {
  21299. for (let _i224 = 0, _config$parseInline = config.parseInline, _length224 = _config$parseInline.length; _i224 < _length224; _i224++) {
  21300. let spec = _config$parseInline[_i224]
  21301. let found = inlineNames.indexOf(spec.name)
  21302. if (found > -1) {
  21303. inlineParsers[found] = spec.parse
  21304. } else {
  21305. let pos = spec.before ? findName(inlineNames, spec.before) : spec.after ? findName(inlineNames, spec.after) + 1 : inlineNames.length - 1
  21306. inlineParsers.splice(pos, 0, spec.parse)
  21307. inlineNames.splice(pos, 0, spec.name)
  21308. }
  21309. }
  21310. }
  21311. return new MarkdownParser(
  21312. nodeSet,
  21313. config.codeParser || this.codeParser,
  21314. config.htmlParser || this.htmlParser,
  21315. blockParsers,
  21316. leafBlockParsers,
  21317. blockNames,
  21318. endLeafBlock,
  21319. skipContextMarkup,
  21320. inlineParsers,
  21321. inlineNames
  21322. )
  21323. }
  21324. getNodeType(name) {
  21325. let found = this.nodeTypes[name]
  21326. if (found == null) throw new RangeError(`Unknown node type '${name}'`)
  21327. return found
  21328. }
  21329. parseInline(text, offset) {
  21330. let cx = new InlineContext(this, text, offset)
  21331. outer: for (let pos = offset; pos < cx.end; ) {
  21332. let next = cx.char(pos)
  21333. for (let _i225 = 0, _this$inlineParsers = this.inlineParsers, _length225 = _this$inlineParsers.length; _i225 < _length225; _i225++) {
  21334. let token = _this$inlineParsers[_i225]
  21335. if (token) {
  21336. let result = token(cx, next, pos)
  21337. if (result >= 0) {
  21338. pos = result
  21339. continue outer
  21340. }
  21341. }
  21342. }
  21343. pos++
  21344. }
  21345. return cx.resolveMarkers(0)
  21346. }
  21347. }
  21348. function nonEmpty(a) {
  21349. return a != null && a.length > 0
  21350. }
  21351. function resolveConfig(spec) {
  21352. if (!Array.isArray(spec)) return spec
  21353. if (spec.length == 0) return null
  21354. let conf = resolveConfig(spec[0])
  21355. if (spec.length == 1) return conf
  21356. let rest = resolveConfig(spec.slice(1))
  21357. if (!rest || !conf) return conf || rest
  21358. let conc = (a, b) => (a || none).concat(b || none)
  21359. return {
  21360. props: conc(conf.props, rest.props),
  21361. codeParser: rest.codeParser || conf.codeParser,
  21362. htmlParser: rest.htmlParser || conf.htmlParser,
  21363. defineNodes: conc(conf.defineNodes, rest.defineNodes),
  21364. parseBlock: conc(conf.parseBlock, rest.parseBlock),
  21365. parseInline: conc(conf.parseInline, rest.parseInline),
  21366. remove: conc(conf.remove, rest.remove)
  21367. }
  21368. }
  21369. function findName(names, name) {
  21370. let found = names.indexOf(name)
  21371. if (found < 0) throw new RangeError(`Position specified relative to unknown parser ${name}`)
  21372. return found
  21373. }
  21374. let nodeTypes = [NodeType.none]
  21375. for (let i = 1, name; (name = Type[i]); i++) {
  21376. nodeTypes[i] = NodeType.define({ id: i, name, props: i >= Type.Escape ? [] : [[NodeProp.group, i in DefaultSkipMarkup ? ['Block', 'BlockContext'] : ['Block', 'LeafBlock']]] })
  21377. }
  21378. function finishContext(stack, nodeSet) {
  21379. let cx = stack.pop()
  21380. let top = stack[stack.length - 1]
  21381. top.children.push(cx.toTree(nodeSet))
  21382. top.positions.push(cx.from - top.from)
  21383. return top
  21384. }
  21385. const none = []
  21386. class Buffer {
  21387. constructor(nodeSet) {
  21388. this.nodeSet = nodeSet
  21389. this.content = []
  21390. this.nodes = []
  21391. }
  21392. write(type, from, to, children = 0) {
  21393. this.content.push(type, from, to, 4 + children * 4)
  21394. return this
  21395. }
  21396. writeElements(elts, offset = 0) {
  21397. for (let _i226 = 0, _length226 = elts.length; _i226 < _length226; _i226++) {
  21398. let e = elts[_i226]
  21399. e.writeTo(this, offset)
  21400. }
  21401. return this
  21402. }
  21403. finish(type, length) {
  21404. return Tree.build({ buffer: this.content, nodeSet: this.nodeSet, reused: this.nodes, topID: type, length })
  21405. }
  21406. }
  21407. class Element$1 {
  21408. constructor(type, from, to, children = none) {
  21409. this.type = type
  21410. this.from = from
  21411. this.to = to
  21412. this.children = children
  21413. }
  21414. writeTo(buf, offset) {
  21415. let startOff = buf.content.length
  21416. buf.writeElements(this.children, offset)
  21417. buf.content.push(this.type, this.from + offset, this.to + offset, buf.content.length + 4 - startOff)
  21418. }
  21419. toTree(nodeSet) {
  21420. return new Buffer(nodeSet).writeElements(this.children, -this.from).finish(this.type, this.to - this.from)
  21421. }
  21422. }
  21423. class TreeElement {
  21424. constructor(tree, from) {
  21425. this.tree = tree
  21426. this.from = from
  21427. }
  21428. get to() {
  21429. return this.from + this.tree.length
  21430. }
  21431. get type() {
  21432. return this.tree.type.id
  21433. }
  21434. get children() {
  21435. return none
  21436. }
  21437. writeTo(buf, offset) {
  21438. buf.nodes.push(this.tree)
  21439. buf.content.push(buf.nodes.length - 1, this.from + offset, this.to + offset, -1)
  21440. }
  21441. toTree() {
  21442. return this.tree
  21443. }
  21444. }
  21445. function elt(type, from, to, children) {
  21446. return new Element$1(type, from, to, children)
  21447. }
  21448. const EmphasisUnderscore = { resolve: 'Emphasis', mark: 'EmphasisMark' }
  21449. const EmphasisAsterisk = { resolve: 'Emphasis', mark: 'EmphasisMark' }
  21450. const LinkStart = {},
  21451. ImageStart = {}
  21452. class InlineDelimiter {
  21453. constructor(type, from, to, side) {
  21454. this.type = type
  21455. this.from = from
  21456. this.to = to
  21457. this.side = side
  21458. }
  21459. }
  21460. const Escapable = '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
  21461. let Punctuation = /[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~\xA1\u2010-\u2027]/
  21462. try {
  21463. Punctuation = /[\p{Pc}|\p{Pd}|\p{Pe}|\p{Pf}|\p{Pi}|\p{Po}|\p{Ps}]/u
  21464. } catch (_) {}
  21465. const DefaultInline = {
  21466. Escape(cx, next, start) {
  21467. if (next != 92 || start == cx.end - 1) return -1
  21468. let escaped = cx.char(start + 1)
  21469. for (let i = 0; i < Escapable.length; i++) if (Escapable.charCodeAt(i) == escaped) return cx.append(elt(Type.Escape, start, start + 2))
  21470. return -1
  21471. },
  21472. Entity(cx, next, start) {
  21473. if (next != 38) return -1
  21474. let m = /^(?:#\d+|#x[a-f\d]+|\w+);/i.exec(cx.slice(start + 1, start + 31))
  21475. return m ? cx.append(elt(Type.Entity, start, start + 1 + m[0].length)) : -1
  21476. },
  21477. InlineCode(cx, next, start) {
  21478. if (next != 96 || (start && cx.char(start - 1) == 96)) return -1
  21479. let pos = start + 1
  21480. while (pos < cx.end && cx.char(pos) == 96) pos++
  21481. let size = pos - start,
  21482. curSize = 0
  21483. for (; pos < cx.end; pos++) {
  21484. if (cx.char(pos) == 96) {
  21485. curSize++
  21486. if (curSize == size && cx.char(pos + 1) != 96)
  21487. return cx.append(elt(Type.InlineCode, start, pos + 1, [elt(Type.CodeMark, start, start + size), elt(Type.CodeMark, pos + 1 - size, pos + 1)]))
  21488. } else {
  21489. curSize = 0
  21490. }
  21491. }
  21492. return -1
  21493. },
  21494. HTMLTag(cx, next, start) {
  21495. if (next != 60 || start == cx.end - 1) return -1
  21496. let after = cx.slice(start + 1, cx.end)
  21497. let url = /^(?:[a-z][-\w+.]+:[^\s>]+|[a-z\d.!#$%&'*+/=?^_`{|}~-]+@[a-z\d](?:[a-z\d-]{0,61}[a-z\d])?(?:\.[a-z\d](?:[a-z\d-]{0,61}[a-z\d])?)*)>/i.exec(after)
  21498. if (url) return cx.append(elt(Type.URL, start, start + 1 + url[0].length))
  21499. let comment = /^!--[^>](?:-[^-]|[^-])*?-->/i.exec(after)
  21500. if (comment) return cx.append(elt(Type.Comment, start, start + 1 + comment[0].length))
  21501. let procInst = /^\?[^]*?\?>/.exec(after)
  21502. if (procInst) return cx.append(elt(Type.ProcessingInstruction, start, start + 1 + procInst[0].length))
  21503. let m = /^(?:![A-Z][^]*?>|!\[CDATA\[[^]*?\]\]>|\/\s*[a-zA-Z][\w-]*\s*>|\s*[a-zA-Z][\w-]*(\s+[a-zA-Z:_][\w-.:]*(?:\s*=\s*(?:[^\s"'=<>`]+|'[^']*'|"[^"]*"))?)*\s*(\/\s*)?>)/.exec(after)
  21504. if (!m) return -1
  21505. let children = []
  21506. if (cx.parser.htmlParser) {
  21507. let p = cx.parser.htmlParser.startParse(stringInput(cx.slice(start, start + 1 + m[0].length)), 0, {}),
  21508. tree
  21509. while (!(tree = p.advance())) {}
  21510. children = tree.children.map((ch, i) => new TreeElement(ch, start + tree.positions[i]))
  21511. }
  21512. return cx.append(elt(Type.HTMLTag, start, start + 1 + m[0].length, children))
  21513. },
  21514. Emphasis(cx, next, start) {
  21515. if (next != 95 && next != 42) return -1
  21516. let pos = start + 1
  21517. while (cx.char(pos) == next) pos++
  21518. let before = cx.slice(start - 1, start),
  21519. after = cx.slice(pos, pos + 1)
  21520. let pBefore = Punctuation.test(before),
  21521. pAfter = Punctuation.test(after)
  21522. let sBefore = /\s|^$/.test(before),
  21523. sAfter = /\s|^$/.test(after)
  21524. let leftFlanking = !sAfter && (!pAfter || sBefore || pBefore)
  21525. let rightFlanking = !sBefore && (!pBefore || sAfter || pAfter)
  21526. let canOpen = leftFlanking && (next == 42 || !rightFlanking || pBefore)
  21527. let canClose = rightFlanking && (next == 42 || !leftFlanking || pAfter)
  21528. return cx.append(new InlineDelimiter(next == 95 ? EmphasisUnderscore : EmphasisAsterisk, start, pos, (canOpen ? 1 : 0) | (canClose ? 2 : 0)))
  21529. },
  21530. HardBreak(cx, next, start) {
  21531. if (next == 92 && cx.char(start + 1) == 10) return cx.append(elt(Type.HardBreak, start, start + 2))
  21532. if (next == 32) {
  21533. let pos = start + 1
  21534. while (cx.char(pos) == 32) pos++
  21535. if (cx.char(pos) == 10 && pos >= start + 2) return cx.append(elt(Type.HardBreak, start, pos + 1))
  21536. }
  21537. return -1
  21538. },
  21539. Link(cx, next, start) {
  21540. return next == 91 ? cx.append(new InlineDelimiter(LinkStart, start, start + 1, 1)) : -1
  21541. },
  21542. Image(cx, next, start) {
  21543. return next == 33 && cx.char(start + 1) == 91 ? cx.append(new InlineDelimiter(ImageStart, start, start + 2, 1)) : -1
  21544. },
  21545. LinkEnd(cx, next, start) {
  21546. if (next != 93) return -1
  21547. for (let i = cx.parts.length - 1; i >= 0; i--) {
  21548. let part = cx.parts[i]
  21549. if (part instanceof InlineDelimiter && (part.type == LinkStart || part.type == ImageStart)) {
  21550. if (!part.side || (cx.skipSpace(part.to) == start && !/[(\[]/.test(cx.slice(start + 1, start + 2)))) {
  21551. cx.parts[i] = null
  21552. return -1
  21553. }
  21554. let content = cx.takeContent(i)
  21555. let link = (cx.parts[i] = finishLink(cx, content, part.type == LinkStart ? Type.Link : Type.Image, part.from, start + 1))
  21556. if (part.type == LinkStart)
  21557. for (let j = 0; j < i; j++) {
  21558. let p = cx.parts[j]
  21559. if (p instanceof InlineDelimiter && p.type == LinkStart) p.side = 0
  21560. }
  21561. return link.to
  21562. }
  21563. }
  21564. return -1
  21565. }
  21566. }
  21567. function finishLink(cx, content, type, start, startPos) {
  21568. let { text } = cx,
  21569. next = cx.char(startPos),
  21570. endPos = startPos
  21571. content.unshift(elt(Type.LinkMark, start, start + (type == Type.Image ? 2 : 1)))
  21572. content.push(elt(Type.LinkMark, startPos - 1, startPos))
  21573. if (next == 40) {
  21574. let pos = cx.skipSpace(startPos + 1)
  21575. let dest = parseURL(text, pos - cx.offset, cx.offset),
  21576. title
  21577. if (dest) {
  21578. pos = cx.skipSpace(dest.to)
  21579. title = parseLinkTitle(text, pos - cx.offset, cx.offset)
  21580. if (title) pos = cx.skipSpace(title.to)
  21581. }
  21582. if (cx.char(pos) == 41) {
  21583. content.push(elt(Type.LinkMark, startPos, startPos + 1))
  21584. endPos = pos + 1
  21585. if (dest) content.push(dest)
  21586. if (title) content.push(title)
  21587. content.push(elt(Type.LinkMark, pos, endPos))
  21588. }
  21589. } else if (next == 91) {
  21590. let label = parseLinkLabel(text, startPos - cx.offset, cx.offset, false)
  21591. if (label) {
  21592. content.push(label)
  21593. endPos = label.to
  21594. }
  21595. }
  21596. return elt(type, start, endPos, content)
  21597. }
  21598. function parseURL(text, start, offset) {
  21599. let next = text.charCodeAt(start)
  21600. if (next == 60) {
  21601. for (let pos = start + 1; pos < text.length; pos++) {
  21602. let ch = text.charCodeAt(pos)
  21603. if (ch == 62) return elt(Type.URL, start + offset, pos + 1 + offset)
  21604. if (ch == 60 || ch == 10) return false
  21605. }
  21606. return null
  21607. } else {
  21608. let depth = 0,
  21609. pos = start
  21610. for (let escaped = false; pos < text.length; pos++) {
  21611. let ch = text.charCodeAt(pos)
  21612. if (space(ch)) {
  21613. break
  21614. } else if (escaped) {
  21615. escaped = false
  21616. } else if (ch == 40) {
  21617. depth++
  21618. } else if (ch == 41) {
  21619. if (!depth) break
  21620. depth--
  21621. } else if (ch == 92) {
  21622. escaped = true
  21623. }
  21624. }
  21625. return pos > start ? elt(Type.URL, start + offset, pos + offset) : pos == text.length ? null : false
  21626. }
  21627. }
  21628. function parseLinkTitle(text, start, offset) {
  21629. let next = text.charCodeAt(start)
  21630. if (next != 39 && next != 34 && next != 40) return false
  21631. let end = next == 40 ? 41 : next
  21632. for (let pos = start + 1, escaped = false; pos < text.length; pos++) {
  21633. let ch = text.charCodeAt(pos)
  21634. if (escaped) escaped = false
  21635. else if (ch == end) return elt(Type.LinkTitle, start + offset, pos + 1 + offset)
  21636. else if (ch == 92) escaped = true
  21637. }
  21638. return null
  21639. }
  21640. function parseLinkLabel(text, start, offset, requireNonWS) {
  21641. for (let escaped = false, pos = start + 1, end = Math.min(text.length, pos + 999); pos < end; pos++) {
  21642. let ch = text.charCodeAt(pos)
  21643. if (escaped) escaped = false
  21644. else if (ch == 93) return requireNonWS ? false : elt(Type.LinkLabel, start + offset, pos + 1 + offset)
  21645. else {
  21646. if (requireNonWS && !space(ch)) requireNonWS = false
  21647. if (ch == 91) return false
  21648. else if (ch == 92) escaped = true
  21649. }
  21650. }
  21651. return null
  21652. }
  21653. class InlineContext {
  21654. constructor(parser, text, offset) {
  21655. this.parser = parser
  21656. this.text = text
  21657. this.offset = offset
  21658. this.parts = []
  21659. }
  21660. char(pos) {
  21661. return pos >= this.end ? -1 : this.text.charCodeAt(pos - this.offset)
  21662. }
  21663. get end() {
  21664. return this.offset + this.text.length
  21665. }
  21666. slice(from, to) {
  21667. return this.text.slice(from - this.offset, to - this.offset)
  21668. }
  21669. append(elt) {
  21670. this.parts.push(elt)
  21671. return elt.to
  21672. }
  21673. addDelimiter(type, from, to, open, close) {
  21674. return this.append(new InlineDelimiter(type, from, to, (open ? 1 : 0) | (close ? 2 : 0)))
  21675. }
  21676. addElement(elt) {
  21677. return this.append(elt)
  21678. }
  21679. resolveMarkers(from) {
  21680. for (let i = from; i < this.parts.length; i++) {
  21681. let close = this.parts[i]
  21682. if (!(close instanceof InlineDelimiter && close.type.resolve && close.side & 2)) continue
  21683. let emp = close.type == EmphasisUnderscore || close.type == EmphasisAsterisk
  21684. let closeSize = close.to - close.from
  21685. let open,
  21686. j = i - 1
  21687. for (; j >= from; j--) {
  21688. let part = this.parts[j]
  21689. if (
  21690. !(part instanceof InlineDelimiter && part.side & 1 && part.type == close.type) ||
  21691. (emp && (close.side & 1 || part.side & 2) && (part.to - part.from + closeSize) % 3 == 0 && ((part.to - part.from) % 3 || closeSize % 3))
  21692. )
  21693. continue
  21694. open = part
  21695. break
  21696. }
  21697. if (!open) continue
  21698. let type = close.type.resolve,
  21699. content = []
  21700. let start = open.from,
  21701. end = close.to
  21702. if (emp) {
  21703. let size = Math.min(2, open.to - open.from, closeSize)
  21704. start = open.to - size
  21705. end = close.from + size
  21706. type = size == 1 ? 'Emphasis' : 'StrongEmphasis'
  21707. }
  21708. if (open.type.mark) content.push(this.elt(open.type.mark, start, open.to))
  21709. for (let k = j + 1; k < i; k++) {
  21710. if (this.parts[k] instanceof Element$1) content.push(this.parts[k])
  21711. this.parts[k] = null
  21712. }
  21713. if (close.type.mark) content.push(this.elt(close.type.mark, close.from, end))
  21714. let element = this.elt(type, start, end, content)
  21715. this.parts[j] = emp && open.from != start ? new InlineDelimiter(open.type, open.from, start, open.side) : null
  21716. let keep = (this.parts[i] = emp && close.to != end ? new InlineDelimiter(close.type, end, close.to, close.side) : null)
  21717. if (keep) this.parts.splice(i, 0, element)
  21718. else this.parts[i] = element
  21719. }
  21720. let result = []
  21721. for (let i = from; i < this.parts.length; i++) {
  21722. let part = this.parts[i]
  21723. if (part instanceof Element$1) result.push(part)
  21724. }
  21725. return result
  21726. }
  21727. findOpeningDelimiter(type) {
  21728. for (let i = this.parts.length - 1; i >= 0; i--) {
  21729. let part = this.parts[i]
  21730. if (part instanceof InlineDelimiter && part.type == type) return i
  21731. }
  21732. return null
  21733. }
  21734. takeContent(startIndex) {
  21735. let content = this.resolveMarkers(startIndex)
  21736. this.parts.length = startIndex
  21737. return content
  21738. }
  21739. skipSpace(from) {
  21740. return skipSpace(this.text, from - this.offset) + this.offset
  21741. }
  21742. elt(type, from, to, children) {
  21743. if (typeof type == 'string') return elt(this.parser.getNodeType(type), from, to, children)
  21744. return new TreeElement(type, from)
  21745. }
  21746. }
  21747. function injectMarks(elements, marks) {
  21748. if (!marks.length) return elements
  21749. if (!elements.length) return marks
  21750. let elts = elements.slice(),
  21751. eI = 0
  21752. for (let _i227 = 0, _length227 = marks.length; _i227 < _length227; _i227++) {
  21753. let mark = marks[_i227]
  21754. while (eI < elts.length && elts[eI].to < mark.to) eI++
  21755. if (eI < elts.length && elts[eI].from < mark.from) {
  21756. let e = elts[eI]
  21757. if (e instanceof Element$1) elts[eI] = new Element$1(e.type, e.from, e.to, injectMarks(e.children, [mark]))
  21758. } else {
  21759. elts.splice(eI++, 0, mark)
  21760. }
  21761. }
  21762. return elts
  21763. }
  21764. const ContextHash = new WeakMap()
  21765. function stampContext(nodes, hash) {
  21766. for (let _i228 = 0, _length228 = nodes.length; _i228 < _length228; _i228++) {
  21767. let n = nodes[_i228]
  21768. ContextHash.set(n, hash)
  21769. if (n instanceof Tree && n.type.isAnonymous) stampContext(n.children, hash)
  21770. }
  21771. }
  21772. const NotLast = [Type.CodeBlock, Type.ListItem, Type.OrderedList, Type.BulletList]
  21773. class FragmentCursor {
  21774. constructor(fragments, input) {
  21775. this.fragments = fragments
  21776. this.input = input
  21777. this.i = 0
  21778. this.fragment = null
  21779. this.fragmentEnd = -1
  21780. this.cursor = null
  21781. if (fragments.length) this.fragment = fragments[this.i++]
  21782. }
  21783. nextFragment() {
  21784. this.fragment = this.i < this.fragments.length ? this.fragments[this.i++] : null
  21785. this.cursor = null
  21786. this.fragmentEnd = -1
  21787. }
  21788. moveTo(pos, lineStart) {
  21789. while (this.fragment && this.fragment.to <= pos) this.nextFragment()
  21790. if (!this.fragment || this.fragment.from > (pos ? pos - 1 : 0)) return false
  21791. if (this.fragmentEnd < 0) {
  21792. let end = this.fragment.to
  21793. while (end > 0 && this.input.get(end - 1) != 10) end--
  21794. this.fragmentEnd = end ? end - 1 : 0
  21795. }
  21796. let c = this.cursor
  21797. if (!c) {
  21798. c = this.cursor = this.fragment.tree.cursor()
  21799. c.firstChild()
  21800. }
  21801. let rPos = pos + this.fragment.offset
  21802. while (c.to <= rPos) if (!c.parent()) return false
  21803. for (;;) {
  21804. if (c.from >= rPos) return this.fragment.from <= lineStart
  21805. if (!c.childAfter(rPos)) return false
  21806. }
  21807. }
  21808. matches(hash) {
  21809. let tree = this.cursor.tree
  21810. return tree && ContextHash.get(tree) == hash
  21811. }
  21812. takeNodes(cx) {
  21813. let cur = this.cursor,
  21814. off = this.fragment.offset
  21815. let start = cx.lineStart,
  21816. end = start,
  21817. blockI = cx.block.children.length
  21818. let prevEnd = end,
  21819. prevI = blockI
  21820. for (;;) {
  21821. if (cur.to - off >= this.fragmentEnd) {
  21822. if (cur.type.isAnonymous && cur.firstChild()) continue
  21823. break
  21824. }
  21825. cx.addNode(cur.tree, cur.from - off)
  21826. if (cur.type.is('Block')) {
  21827. if (NotLast.indexOf(cur.type.id) < 0) {
  21828. end = cur.to - off
  21829. blockI = cx.block.children.length
  21830. } else {
  21831. end = prevEnd
  21832. blockI = prevI
  21833. prevEnd = cur.to - off
  21834. prevI = cx.block.children.length
  21835. }
  21836. }
  21837. if (!cur.nextSibling()) break
  21838. }
  21839. while (cx.block.children.length > blockI) {
  21840. cx.block.children.pop()
  21841. cx.block.positions.pop()
  21842. }
  21843. return end - start
  21844. }
  21845. }
  21846. const parser$1 = new MarkdownParser(
  21847. new NodeSet(nodeTypes),
  21848. null,
  21849. null,
  21850. Object.keys(DefaultBlockParsers).map(n => DefaultBlockParsers[n]),
  21851. Object.keys(DefaultBlockParsers).map(n => DefaultLeafBlocks[n]),
  21852. Object.keys(DefaultBlockParsers),
  21853. DefaultEndLeaf,
  21854. DefaultSkipMarkup,
  21855. Object.keys(DefaultInline).map(n => DefaultInline[n]),
  21856. Object.keys(DefaultInline)
  21857. )
  21858. const StrikethroughDelim = { resolve: 'Strikethrough', mark: 'StrikethroughMark' }
  21859. const Strikethrough = {
  21860. defineNodes: ['Strikethrough', 'StrikethroughMark'],
  21861. parseInline: [
  21862. {
  21863. name: 'Strikethrough',
  21864. parse(cx, next, pos) {
  21865. if (next != 126 || cx.char(pos + 1) != 126) return -1
  21866. return cx.addDelimiter(StrikethroughDelim, pos, pos + 2, true, true)
  21867. },
  21868. after: 'Emphasis'
  21869. }
  21870. ]
  21871. }
  21872. function parseRow(cx, line, startI = 0, elts, offset = 0) {
  21873. let count = 0,
  21874. first = true,
  21875. cellStart = -1,
  21876. cellEnd = -1,
  21877. esc = false
  21878. let parseCell = () => {
  21879. elts.push(cx.elt('TableCell', offset + cellStart, offset + cellEnd, cx.parser.parseInline(line.slice(cellStart, cellEnd), offset + cellStart)))
  21880. }
  21881. for (let i = startI; i < line.length; i++) {
  21882. let next = line.charCodeAt(i)
  21883. if (next == 124 && !esc) {
  21884. if (!first || cellStart > -1) count++
  21885. first = false
  21886. if (elts) {
  21887. if (cellStart > -1) parseCell()
  21888. elts.push(cx.elt('TableDelimiter', i + offset, i + offset + 1))
  21889. }
  21890. cellStart = cellEnd = -1
  21891. } else if (esc || (next != 32 && next != 9)) {
  21892. if (cellStart < 0) cellStart = i
  21893. cellEnd = i + 1
  21894. }
  21895. esc = !esc && next == 92
  21896. }
  21897. if (cellStart > -1) {
  21898. count++
  21899. if (elts) parseCell()
  21900. }
  21901. return count
  21902. }
  21903. function hasPipe(str, start) {
  21904. for (let i = start; i < str.length; i++) {
  21905. let next = str.charCodeAt(i)
  21906. if (next == 124) return true
  21907. if (next == 92) i++
  21908. }
  21909. return false
  21910. }
  21911. class TableParser {
  21912. constructor() {
  21913. this.rows = null
  21914. }
  21915. nextLine(cx, line, leaf) {
  21916. if (this.rows == null) {
  21917. this.rows = false
  21918. let lineText
  21919. if ((line.next == 45 || line.next == 58 || line.next == 124) && /^\|?(\s*:?-+:?\s*\|)+(\s*:?-+:?\s*)?$/.test((lineText = line.text.slice(line.pos)))) {
  21920. let firstRow = [],
  21921. firstCount = parseRow(cx, leaf.content, 0, firstRow, leaf.start)
  21922. if (firstCount == parseRow(cx, lineText, line.pos))
  21923. this.rows = [cx.elt('TableHeader', leaf.start, leaf.start + leaf.content.length, firstRow), cx.elt('TableDelimiter', cx.lineStart + line.pos, cx.lineStart + line.text.length)]
  21924. }
  21925. } else if (this.rows) {
  21926. let content = []
  21927. parseRow(cx, line.text, line.pos, content, cx.lineStart)
  21928. this.rows.push(cx.elt('TableRow', cx.lineStart + line.pos, cx.lineStart + line.text.length, content))
  21929. }
  21930. return false
  21931. }
  21932. finish(cx, leaf) {
  21933. if (this.rows) {
  21934. this.emit(cx, leaf)
  21935. return true
  21936. }
  21937. return false
  21938. }
  21939. emit(cx, leaf) {
  21940. cx.addLeafElement(leaf, cx.elt('Table', leaf.start, leaf.start + leaf.content.length, this.rows))
  21941. }
  21942. }
  21943. const Table = {
  21944. defineNodes: [{ name: 'Table', block: true }, 'TableHeader', 'TableRow', 'TableCell', 'TableDelimiter'],
  21945. parseBlock: [
  21946. {
  21947. name: 'Table',
  21948. leaf(_, leaf) {
  21949. return hasPipe(leaf.content, 0) ? new TableParser() : null
  21950. },
  21951. before: 'SetextHeading'
  21952. }
  21953. ]
  21954. }
  21955. class TaskParser {
  21956. nextLine() {
  21957. return false
  21958. }
  21959. finish(cx, leaf) {
  21960. cx.addLeafElement(
  21961. leaf,
  21962. cx.elt('Task', leaf.start, leaf.start + leaf.content.length, [cx.elt('TaskMarker', leaf.start, leaf.start + 3), ...cx.parser.parseInline(leaf.content.slice(3), leaf.start + 3)])
  21963. )
  21964. return true
  21965. }
  21966. }
  21967. const TaskList = {
  21968. defineNodes: [{ name: 'Task', block: true }, 'TaskMarker'],
  21969. parseBlock: [
  21970. {
  21971. name: 'TaskList',
  21972. leaf(cx, leaf) {
  21973. return /^\[[ xX]\]/.test(leaf.content) && cx.parser.nodeSet.types[cx.block.type].name == 'ListItem' ? new TaskParser() : null
  21974. },
  21975. after: 'SetextHeading'
  21976. }
  21977. ]
  21978. }
  21979. const GFM = [Table, TaskList, Strikethrough]
  21980. function parseSubSuper(ch, node, mark) {
  21981. return (cx, next, pos) => {
  21982. if (next != ch || cx.char(pos + 1) == ch) return -1
  21983. let elts = [cx.elt(mark, pos, pos + 1)]
  21984. for (let i = pos + 1; i < cx.end; i++) {
  21985. let next = cx.char(i)
  21986. if (next == ch) return cx.addElement(cx.elt(node, pos, i + 1, elts.concat(cx.elt(mark, i, i + 1))))
  21987. if (next == 92) elts.push(cx.elt('Escape', i, i++ + 2))
  21988. if (space(next)) break
  21989. }
  21990. return -1
  21991. }
  21992. }
  21993. const Superscript = { defineNodes: ['Superscript', 'SuperscriptMark'], parseInline: [{ name: 'Superscript', parse: parseSubSuper(94, 'Superscript', 'SuperscriptMark') }] }
  21994. const Subscript = { defineNodes: ['Subscript', 'SubscriptMark'], parseInline: [{ name: 'Subscript', parse: parseSubSuper(126, 'Subscript', 'SubscriptMark') }] }
  21995. const Emoji = {
  21996. defineNodes: ['Emoji'],
  21997. parseInline: [
  21998. {
  21999. name: 'Emoji',
  22000. parse(cx, next, pos) {
  22001. let match
  22002. if (next != 58 || !(match = /^[a-zA-Z_0-9]+:/.exec(cx.slice(pos + 1, cx.end)))) return -1
  22003. return cx.addElement(cx.elt('Emoji', pos, pos + 1 + match[0].length))
  22004. }
  22005. }
  22006. ]
  22007. }
  22008. const data = defineLanguageFacet({ block: { open: '<!--', close: '-->' } })
  22009. const commonmark = parser$1.configure({
  22010. props: [
  22011. styleTags({
  22012. 'Blockquote/...': tags$1.quote,
  22013. HorizontalRule: tags$1.contentSeparator,
  22014. 'ATXHeading1/... SetextHeading1/...': tags$1.heading1,
  22015. 'ATXHeading2/... SetextHeading2/...': tags$1.heading2,
  22016. 'ATXHeading3/...': tags$1.heading3,
  22017. 'ATXHeading4/...': tags$1.heading4,
  22018. 'ATXHeading5/...': tags$1.heading5,
  22019. 'ATXHeading6/...': tags$1.heading6,
  22020. 'Comment CommentBlock': tags$1.comment,
  22021. Escape: tags$1.escape,
  22022. Entity: tags$1.character,
  22023. 'Emphasis/...': tags$1.emphasis,
  22024. 'StrongEmphasis/...': tags$1.strong,
  22025. 'Link/... Image/...': tags$1.link,
  22026. 'OrderedList/... BulletList/...': tags$1.list,
  22027. 'BlockQuote/...': tags$1.quote,
  22028. 'InlineCode/... CodeBlock FencedCode': tags$1.monospace,
  22029. URL: tags$1.url,
  22030. 'HeaderMark HardBreak QuoteMark ListMark LinkMark EmphasisMark CodeMark': tags$1.processingInstruction,
  22031. 'CodeInfo LinkLabel': tags$1.labelName,
  22032. LinkTitle: tags$1.string,
  22033. Paragraph: tags$1.content
  22034. }),
  22035. foldNodeProp.add(type => {
  22036. if (!type.is('Block') || type.is('Document')) return undefined
  22037. return (tree, state) => ({ from: state.doc.lineAt(tree.from).to, to: tree.to })
  22038. }),
  22039. indentNodeProp.add({ Document: () => null }),
  22040. languageDataProp.add({ Document: data })
  22041. ],
  22042. htmlParser: htmlLanguage.parser.configure({ dialect: 'noMatch' })
  22043. })
  22044. const commonmarkLanguage = mkLang(commonmark)
  22045. const extended = commonmark.configure([
  22046. GFM,
  22047. Subscript,
  22048. Superscript,
  22049. Emoji,
  22050. {
  22051. props: [
  22052. styleTags({
  22053. 'TableDelimiter SubscriptMark SuperscriptMark StrikethroughMark': tags$1.processingInstruction,
  22054. 'TableHeader/...': tags$1.heading,
  22055. 'Strikethrough/...': tags$1.strikethrough,
  22056. TaskMarker: tags$1.atom,
  22057. Task: tags$1.list,
  22058. Emoji: tags$1.character,
  22059. 'Subscript Superscript': tags$1.special(tags$1.content),
  22060. TableCell: tags$1.content
  22061. })
  22062. ]
  22063. }
  22064. ])
  22065. const markdownLanguage = mkLang(extended)
  22066. function mkLang(parser) {
  22067. return new Language(
  22068. data,
  22069. parser,
  22070. parser.nodeSet.types.find(t => t.name == 'Document')
  22071. )
  22072. }
  22073. function addCodeLanguages(languages, defaultLanguage) {
  22074. return {
  22075. codeParser(info) {
  22076. let found = info && LanguageDescription.matchLanguageName(languages, info, true)
  22077. if (!found) return defaultLanguage ? defaultLanguage.parser : null
  22078. if (found.support) return found.support.language.parser
  22079. return EditorParseContext.getSkippingParser(found.load())
  22080. }
  22081. }
  22082. }
  22083. function nodeStart(node, doc) {
  22084. return doc.sliceString(node.from, node.from + 50)
  22085. }
  22086. function gatherMarkup(node, line, doc) {
  22087. let nodes = []
  22088. for (let cur = node; cur && cur.name != 'Document'; cur = cur.parent) {
  22089. if (cur.name == 'ListItem' || cur.name == 'Blockquote') nodes.push(cur)
  22090. }
  22091. let markup = [],
  22092. pos = 0
  22093. for (let i = nodes.length - 1; i >= 0; i--) {
  22094. let node = nodes[i],
  22095. match
  22096. if (node.name == 'Blockquote' && (match = /^\s*> ?/.exec(line.slice(pos)))) {
  22097. markup.push({ from: pos, string: match[0], node })
  22098. pos += match[0].length
  22099. } else if (node.name == 'ListItem' && node.parent.name == 'OrderedList' && (match = /^\s*\d+([.)])\s*/.exec(nodeStart(node, doc)))) {
  22100. let len = match[1].length >= 4 ? match[0].length - match[1].length + 1 : match[0].length
  22101. markup.push({ from: pos, string: line.slice(pos, pos + len).replace(/\S/g, ' '), node })
  22102. pos += len
  22103. } else if (node.name == 'ListItem' && node.parent.name == 'BulletList' && (match = /^\s*[-+*] (\s*)/.exec(nodeStart(node, doc)))) {
  22104. let len = match[1].length >= 4 ? match[0].length - match[1].length : match[0].length
  22105. markup.push({ from: pos, string: line.slice(pos, pos + len).replace(/\S/g, ' '), node })
  22106. pos += len
  22107. }
  22108. }
  22109. return markup
  22110. }
  22111. function renumberList(after, doc, changes) {
  22112. for (let prev = -1, node = after; ; ) {
  22113. if (node.name == 'ListItem') {
  22114. let m = /^(\s*)(\d+)(?=[.)])/.exec(doc.sliceString(node.from, node.from + 10))
  22115. if (!m) return
  22116. let number = +m[2]
  22117. if (prev >= 0) {
  22118. if (number != prev + 1) return
  22119. changes.push({ from: node.from + m[1].length, to: node.from + m[0].length, insert: String(prev + 2) })
  22120. }
  22121. prev = number
  22122. }
  22123. let next = node.nextSibling
  22124. if (!next) break
  22125. node = next
  22126. }
  22127. }
  22128. const insertNewlineContinueMarkup = ({ state, dispatch }) => {
  22129. let tree = syntaxTree(state)
  22130. let dont = null,
  22131. changes = state.changeByRange(range => {
  22132. if (range.empty && markdownLanguage.isActiveAt(state, range.from)) {
  22133. let line = state.doc.lineAt(range.from)
  22134. let markup = gatherMarkup(tree.resolve(range.from, -1), line.text, state.doc)
  22135. let from = range.from,
  22136. changes = []
  22137. if (markup.length) {
  22138. let inner = markup[markup.length - 1],
  22139. innerEnd = inner.from + inner.string.length
  22140. let emptyLine = range.from - line.from >= innerEnd && !/\S/.test(line.text.slice(innerEnd, range.from - line.from))
  22141. if (emptyLine) {
  22142. let start = /List/.test(inner.node.name) ? inner.from : innerEnd
  22143. while (start > 0 && /\s/.test(line.text[start - 1])) start--
  22144. from = line.from + start
  22145. }
  22146. if (inner.node.name == 'ListItem') {
  22147. if (emptyLine && line.from > 0 && !/[^\s>]/.test(state.doc.lineAt(line.from - 1).text)) return { range: EditorSelection.cursor(from), changes: { from, to: range.from } }
  22148. if (from < range.from && inner.node.parent.from == inner.node.from) {
  22149. inner.string = ''
  22150. } else {
  22151. if (inner.node.from >= line.from) inner.string = line.text.slice(inner.from, inner.from + inner.string.length)
  22152. else inner.string = /^\s*/.exec(line.text)[0].slice(0, inner.string.length)
  22153. if (inner.node.parent.name == 'OrderedList' && from == range.from) {
  22154. inner.string = inner.string.replace(/\d+/, m => +m + 1)
  22155. renumberList(inner.node, state.doc, changes)
  22156. }
  22157. }
  22158. }
  22159. }
  22160. let insert = markup.map(m => m.string).join('')
  22161. if (range.from - line.from < insert.length) insert = ''
  22162. changes.push({ from, to: range.from, insert: Text.of(['', insert]) })
  22163. return { range: EditorSelection.cursor(from + 1 + insert.length), changes }
  22164. }
  22165. return (dont = { range })
  22166. })
  22167. if (dont) return false
  22168. dispatch(state.update(changes, { scrollIntoView: true }))
  22169. return true
  22170. }
  22171. const deleteMarkupBackward = ({ state, dispatch }) => {
  22172. let tree = syntaxTree(state)
  22173. let dont = null,
  22174. changes = state.changeByRange(range => {
  22175. if (range.empty && markdownLanguage.isActiveAt(state, range.from)) {
  22176. let line = state.doc.lineAt(range.from)
  22177. let markup = gatherMarkup(tree.resolve(range.from, -1), line.text, state.doc)
  22178. if (markup.length) {
  22179. let inner = markup[markup.length - 1],
  22180. innerEnd = inner.from + inner.string.length
  22181. if (range.from > innerEnd + line.from && !/\S/.test(line.text.slice(innerEnd, range.from - line.from)))
  22182. return { range: EditorSelection.cursor(innerEnd + line.from), changes: { from: innerEnd + line.from, to: range.from } }
  22183. if (range.from - line.from == innerEnd) {
  22184. let start = line.from + inner.from
  22185. if (inner.node.name == 'ListItem' && inner.node.parent.from < inner.node.from && /\S/.test(line.text.slice(inner.from, innerEnd)))
  22186. return { range, changes: { from: start, to: start + inner.string.length, insert: inner.string } }
  22187. return { range: EditorSelection.cursor(start), changes: { from: start, to: range.from } }
  22188. }
  22189. }
  22190. }
  22191. return (dont = { range })
  22192. })
  22193. if (dont) return false
  22194. dispatch(state.update(changes, { scrollIntoView: true }))
  22195. return true
  22196. }
  22197. const markdownKeymap = [
  22198. { key: 'Enter', run: insertNewlineContinueMarkup },
  22199. { key: 'Backspace', run: deleteMarkupBackward }
  22200. ]
  22201. function markdown(config = {}) {
  22202. let { codeLanguages, defaultCodeLanguage, addKeymap = true, base: { parser } = commonmarkLanguage } = config
  22203. let extensions = config.extensions ? [config.extensions] : []
  22204. if (!(parser instanceof MarkdownParser)) throw new RangeError('Base parser provided to `markdown` should be a Markdown parser')
  22205. if (codeLanguages || defaultCodeLanguage) extensions.push(addCodeLanguages(codeLanguages || [], defaultCodeLanguage))
  22206. return new LanguageSupport(mkLang(parser.configure(extensions)), addKeymap ? Prec.extend(keymap.of(markdownKeymap)) : [])
  22207. }
  22208. var _m32 = Object.freeze({
  22209. __proto__: null,
  22210. commonmarkLanguage: commonmarkLanguage,
  22211. deleteMarkupBackward: deleteMarkupBackward,
  22212. insertNewlineContinueMarkup: insertNewlineContinueMarkup,
  22213. markdown: markdown,
  22214. markdownKeymap: markdownKeymap,
  22215. markdownLanguage: markdownLanguage
  22216. })
  22217. const spec_AtName = {
  22218. __proto__: null,
  22219. '@specialize': 62,
  22220. '@extend': 64,
  22221. '@top': 84,
  22222. '@precedence': 88,
  22223. '@left': 94,
  22224. '@right': 96,
  22225. '@cut': 98,
  22226. '@tokens': 102,
  22227. '@conflict': 112,
  22228. '@external': 120,
  22229. '@context': 150,
  22230. '@dialects': 154,
  22231. '@skip': 160,
  22232. '@detectDelim': 168
  22233. }
  22234. const spec_keyword = { __proto__: null, tokens: 122, from: 124, grammar: 132, as: 134, empty: 136, prop: 140, extend: 144, specialize: 146 }
  22235. const parser = Parser.deserialize({
  22236. version: 13,
  22237. states:
  22238. "<OQ]QPOOOOQO'#Ca'#CaOzQPO'#C`OOQO'#Ee'#EeOOQO'#ET'#ETQ]QPOOOuQPO'#DVO!VQPO'#DXO![QPO'#D`O!aQQO'#DoO!rQPO'#DxO!wQPO'#DzO!|QPO'#D}OOQO'#ER'#ERO#RQPO'#CbO#^QPO'#CjO$^QPO'#CkOOQO,58z,58zO!|QPO,58zO}QPO,58zOOQO-E8R-E8ROzQPO,59qO$eQPO'#DZOOQO,59s,59sO$mQPO'#DbOOQO,59z,59zO!rQPO,5:TO!rQPO,5:ZO!rQPO,5:_O!|QPO,5:aOOQO'#Ce'#CeO%OQQO,5:dO%TQPO'#D|OOQO,5:f,5:fO%]QPO,5:iO&QQPO'#CcO&]QPO,58|O&eQPO,58|OOQO,58|,58|OOQO,59U,59UO&mQPO,59UO(SQPO'#EqO(aQPO'#EqOOQO'#Eq'#EqO)]QPO'#EoO!|QPO'#CxO)yQPO'#CyOOQO'#Ep'#EpO*QQPO'#DOO!rQPO'#DROOQO'#Et'#EtO*VQPO'#C}OOQO'#Eo'#EoO*jQPO'#EZO*}QPO'#DTO+`QPO'#EnOOQO'#En'#EnOOQO,59V,59VO+qQPO,59VO+vQPO'#CzOOQO1G.f1G.fO!|QPO1G.fOOQO1G/]1G/]O!|QPO1G/]O}QPO1G/]OOQO'#DQ'#DQO,OQPO'#D[O,dQPO'#E[O,oQPO,59uOOQO,59u,59uO,wQPO'#DhOOQO'#Eu'#EuOOQO'#E]'#E]O-]QPO,59|OOQO,59|,59|O-nQPO'#DcO-sQPO'#DeO-xQQO1G/oO-}QQO1G/uO.YQQO1G/yO!rQPO1G/{O.bQPO1G0OO.gQPO'#E`O.rQPO,5:hOOQO,5:h,5:hO.zQPO'#EQOOQO1G0V1G0VO/SQPO,58}OOQO,5:p,5:pOOQO1G.h1G.hO/hQPO1G.hOOQO-E8S-E8SO!rQPO'#EWO/pQPO1G.pOOQO1G.p1G.pOuQPO,59ZO/xQPO'#CqOOQO,59[,59[OOQO,59d,59dO!|QPO,59dO0PQPO'#EYOOQO,59_,59_OOQO,59a,59aOOQO,59c,59cOOQO'#EY'#EYO1^QPO,59iOOQO,59e,59eO1qQPO,59eOOQO,59j,59jOOQO,59m,59mOOQO,5:u,5:uOOQO-E8X-E8XO1vQPO,59oOOQO1G.q1G.qOOQO,59f,59fO+yQPO,59fOOQO7+$Q7+$QOOQO7+$w7+$wO!|QPO7+$wOOQO,59v,59vOOQO,5:v,5:vOOQO-E8Y-E8YOOQO1G/a1G/aOOQO,5:S,5:SOOQO-E8Z-E8ZOOQO1G/h1G/hO2XQPO'#DdOOQO,59},59}O2dQPO'#DgOOQO,5:P,5:PO2lQPO7+%ZO2qQPO7+%aOOQO7+%a7+%aO!rQPO7+%aO2vQPO7+%eO!rQPO7+%eO2{QQO7+%gOOQO7+%j7+%jOOQO,5:z,5:zOOQO-E8^-E8^OOQO1G0S1G0SOOQO'#Ea'#EaO3QQPO,5:lOOQO,5:l,5:lOuQPO'#CiOOQO'#EV'#EVO3YQPO1G.iOOQO7+$S7+$SP&`QPO'#EUOOQO,5:r,5:rOOQO-E8U-E8UOOQO7+$[7+$[OOQO1G.u1G.uOOQO,59],59]O3nQPO,59]OOQO1G/O1G/OOOQO-E8W-E8WOOQO1G/P1G/POOQO1G/Q1G/QOOQO<<Hc<<HcO3vQPO'#EqO4[QPO'#E^O4jQPO,5:OOOQO,5:O,5:OO4uQPO,5:RO5QQPO<<HuOOQO<<H{<<H{O5VQQO<<H{OOQO<<IP<<IPO5_QQO<<IPO5dQPO<<IROOQO-E8_-E8_OOQO1G0W1G0WO5iQPO,59TOOQO-E8T-E8TO#fQPO'#EXO5nQPO1G.wOOQO1G.w1G.wOOQO,5:x,5:xOOQO-E8[-E8[OOQO1G/j1G/jO5vQPO1G/mO5{QPO1G/mO6TQPO'#DmOOQOAN>aAN>aO6]QPOAN>gOOQOAN>gAN>gO6bQPOAN>kO5QQPOAN>mOOQO1G.o1G.oOOQO,5:s,5:sOOQO-E8V-E8VOOQO7+$c7+$cOOQO7+%X7+%XO6gQPO7+%XO6lQPO'#DnO6zQPO'#E_O7VQPO,5:XOOQO,5:X,5:XOOQOG24RG24ROOQOG24VG24VOOQOG24XG24XOOQO<<Hs<<HsOOQO,5:Y,5:YOOQO,5:y,5:yOOQO-E8]-E8]OOQO1G/s1G/s",
  22239. stateData:
  22240. '7c~O#WOSPOSQOS~OzUO|VO!TWO!^XO!mYO!oZO!r[O!v]O#YPO~O#[^O#^`O#a_O~O#^fO~O#^hO~O!_jO!dkO!hlO!jmO!kmO~O#YnO~O#^pO~O#^`O~OWsO#YnO#ZvO~O#YnO#`wO~OZ!PO`!POa!POb!POo!]Op!]Os!QOv!ROx!VO#YPO#[^O#g!OO~O#]!ZO~P#fO#Y!cO#]!gO~OZ!hO|!mO!Y!nO#YPO#]!lO~O!`!sO~O#YnO#]!vO~O#^!wOz!qa|!qa!T!qa!^!qa!m!qa!o!qa!r!qa!v!qa#U!qa#Y!qa~OY!yO#ZVX#_VX~O#Z!{O#_!zO~OWsO#YnO~O#_#OO#`#QO~O#a#SOZ#eX`#eXa#eXb#eXf#eXh#eXj#eXo#eXp#eXs#eXv#eXx#eX#Y#eX#]#eX#g#eX#f#eX#_#eX#`#eX~O[#RO#[^O#^`O~P&uO#[#eX~P&uOZ!PO`!POa!POb!POo!]Op!]Os!QOv!RO#YPO#[^O#g!OO~Of#XOh#YOj#ZOx#cX#]#cX#f#cX#_#cX#`#cX~P(hO#f#^O~P#fO#Y!cO~OxqX#]qX#fqX#_qX#`qX~P(hOx!}X#]!}X#f!}X#_!}X#`!}X~P(hOx!VO#]wX#fwX#_wX#`wX~Ox!VO#]#bX#f#bX#_#bX#`#bX~O#]#eO~O#[^O#a#SO~O!P#kO!Q#kO!R#kO#Y!OX#]!OX#_!OX~O#_#lO#Y#OX#]#OX~O#Y!cO#]#nO~O#[^OZ![X|![X!Y![X#Y![X#]![X~OZ!hO|!mO!Y!nO#YPO#]#qO~O#^#rO~O#^#tO~O!`#vO~O!`#wO!e#yO!f#xO~O!`#zO!e#{O~OZ#}O~O#_$OO#Y#SX#]#SX~O#YnO#]$QO~O#YPO#]$TO~OZ$VO[$VO#YnO#^$UO#ZVa#_Va~O#Z$XO#_!zO~O#_#OO#`$]O~O#`$_O~P#fOf#XOh#YOj#ZOZ!|X`!|Xa!|Xb!|Xo!|Xp!|Xs!|Xv!|Xx!|X#Y!|X#[!|X#]!|X#g!|X#f!|X#_!|X#`!|X~Oxqa#]qa#fqa#_qa#`qa~P(hO#f$cO~Ox!VO#]wa#fwa#_wa#`wa~OZ$gO#YPO#]$iO~OZ$jO#YPO~OZ$kO~OZ$lO~OZ$nO~O!`$pO~O#YPO#]$rO~OZ$VO[$VO#YnO#^$UO#ZVi#_Vi~O#_$uO#`$wO~O[#RO#a#SOZ#eX#Y#eX#]#eX#_#eX~O#_$xOZ#QX#Y#QX#]#QX~OZ$gO#YPO#]$zO~OZ${O#YPO#_$|O~O#^$}O~O!`%PO!f%QO~O!`%RO~OZ%SO~O#]%TO~O#_$uO#`%WO~O#]%XO~OZ%YO#YPO~O#YPO#]%^O~OZ%_O~OZ%`O~O#]%bO~O#[^O#Y!bX#]!bX#_!bX~O#_%dO#Y#RX#]#RX~O#YPO#]%fO~Oa#Y#j~',
  22241. goto:
  22242. "-i#jPPPP#k#w$o%]P%cPPP&_&c&oPPP'b'q(QP(]P(]P(](](](]PP(g(nP(x(nP)PP)VP)VP)Z)^PPP)VP)b)e)i)eP)l)e)VPPP)o)u)VPPP)VP)VPP)VP)VP)y)VP)V)|)VP*P*V*]*c*i*o*v+T+Z+a+g+m+sPPP+yPPPPPPPP+},Z,d,pPP-X-eSROTS!ih!kT$R!w$S[QOTh!k!w$SQeU`y`|!O!T!V#S#]$uQ$^#RY$f#r#t$h$j$|Q$s$UT%Z$}%]QcQ`}`|!O!T!V#S#]$uQ!beQ#VyQ#g!]Q#o!hR%c%ZQt^R!|uQoYSs^uQx_Q!ojQ!pkQ!qlS!tp!uQ#a!RQ#|!rS$V!y$WQ$Z#OQ$m#yR$o#{T$V!y$WQbQQ!_cQ!aeR#j!bQaQQr[S!^bcQ!`eQ!rmS#Uy}Q#h!_S#i!a!bQ$a#VR$e#jkz`|!O!T!V#S#]#r#t$h$j$u$|k{`|!O!T!V#S#]#r#t$h$j$u$|U#Tyz$fQ#f!]R$d#ga!P`|!O!T!V#S#]$uZ!U`!O!V#S$ua!S`|!O!T!V#S#]$uS!df!fR#`!QX!Y`!O#S$uTROTRgVT!ef!fRiWT!ih!kR#s!mR#u!nQ%O$kR%a%ST%[$}%]RqZR!xrQTORdTQu^R!}uQ$W!yR$t$WQ#PxR$[#PQ$v$`R%V$vS#]|!TR$b#]W!W`!O#S$uS#c!W#dR#d!XQ!ffR#m!fQ!khR#p!kQ$h#rR$y$hQ%]$}R%e%]Q!upR$P!uQ$S!wR$q$STSOTQ![`Q#_!OQ$`#SR%U$uW!X`!O#S$uR#b!VY|`!O!V#S$uV#W|!T#]`!P`|!O!T!V#S#]$uS$g#r$hQ$j#tQ${$jR%Y$|Y!T`!O!V#S$uV#[|!T#]T!jh!k",
  22243. nodeNames:
  22244. '⚠ LineComment BlockComment Grammar RuleDeclaration RuleName Props Prop AtName Name = Literal . PropEsc ParamList Body CharSet AnyChar InvertedCharSet ScopedName Call ArgList ? Optional * Repeat + Repeat1 InlineRule ParenExpression Specialization @specialize @extend Sequence PrecedenceMarker ! PrecedenceName AmbiguityMarker ~ Choice | RuleDeclaration @top PrecedenceDeclaration @precedence PrecedenceBody Precedence @left @right @cut TokensDeclaration @tokens TokensBody TokenPrecedenceDeclaration PrecedenceBody TokenConflictDeclaration @conflict ConflictBody LiteralTokenDeclaration ExternalTokensDeclaration @external tokens from TokensBody Token ExternalGrammarDeclaration grammar as empty ExternalPropDeclaration prop ExternalSpecializeDeclaration extend specialize ContextDeclaration @context DialectsDeclaration @dialects DialectBody TopSkipDeclaration @skip SkipScope SkipBody DetectDelimDeclaration @detectDelim',
  22245. maxTerm: 118,
  22246. nodeProps: [
  22247. [
  22248. NodeProp.group,
  22249. 4,
  22250. 'Declaration Declaration',
  22251. -15,
  22252. 5,
  22253. 11,
  22254. 16,
  22255. 17,
  22256. 18,
  22257. 19,
  22258. 20,
  22259. 23,
  22260. 25,
  22261. 27,
  22262. 28,
  22263. 29,
  22264. 30,
  22265. 33,
  22266. 39,
  22267. 'Expression',
  22268. -15,
  22269. 41,
  22270. 43,
  22271. 50,
  22272. 53,
  22273. 55,
  22274. 58,
  22275. 59,
  22276. 65,
  22277. 69,
  22278. 71,
  22279. 74,
  22280. 76,
  22281. 79,
  22282. 81,
  22283. 83,
  22284. 'Declaration'
  22285. ]
  22286. ],
  22287. skippedNodes: [0, 1, 2],
  22288. repeatNodeCount: 13,
  22289. tokenData:
  22290. ".V~R|X^#{pq#{qr$prs%dtu&Wwx&xxy'gyz'lz{'q{|'v|}'{}!O(Q!O!P(k!P!Q(p!Q![(Q!^!_)y!_!`*O!`!a*T!a!b*Y!b!c*_!c!}(Q!}#O+]#P#Q+b#R#S+g#T#o(Q#o#p,S#p#q,X#q#r,^#r#s,c#y#z#{$f$g#{$g#BY(Q#BY#BZ,h#BZ$IS(Q$IS$I_,h$I_$I|(Q$I|$JO,h$JO$JT(Q$JT$JU,h$JU$KV(Q$KV$KW,h$KW&FU(Q&FU&FV,h&FV~(Q~$QY#W~X^#{pq#{#y#z#{$f$g#{#BY#BZ#{$IS$I_#{$I|$JO#{$JT$JU#{$KV$KW#{&FU&FV#{~$uPs~!}#O$x~${SO#O$x#O#P%X#P#Q%_#Q~$x~%[PO~$x~%dOb~~%iUZ~OY%dZr%drs%{s#O%d#O#P&Q#P~%d~&QOZ~~&TPO~%d~&ZP!}#O&^~&aSO#O&^#O#P&m#P#Q&s#Q~&^~&pPO~&^~&xO`~~&}UZ~OY&xZw&xwx%{x#O&x#O#P'a#P~&x~'dPO~&x~'lO#g~~'qO#f~~'vOh~~'{Oj~~(QO#_~R(XU#YP#jQ}!O(Q!Q![(Q!c!}(Q#R#S(Q#T#o(Q$g~(Q~(pO[~~(sQz{(y!P!Q)n~(|ROz(yz{)V{~(y~)YTOz(yz{)V{!P(y!P!Q)i!Q~(y~)nOQ~~)sQP~OY)nZ~)n~*OO#a~~*TOY~~*YO#`~~*_Of~~*bU}!O*t!Q![*t!c!}*t#R#S*t#T#o*t$g~*t~*yUW~}!O*t!Q![*t!c!}*t#R#S*t#T#o*t$g~*t~+bO#[~~+gO#Z~R+pUaP#YP#jQ}!O(Q!Q![(Q!c!}(Q#R#S(Q#T#o(Q$g~(Q~,XO#^~~,^Ox~~,cO#]~~,hOv~~,qf#W~#YP#jQX^#{pq#{}!O(Q!Q![(Q!c!}(Q#R#S(Q#T#o(Q#y#z#{$f$g#{$g#BY(Q#BY#BZ,h#BZ$IS(Q$IS$I_,h$I_$I|(Q$I|$JO,h$JO$JT(Q$JT$JU,h$JU$KV(Q$KV$KW,h$KW&FU(Q&FU&FV,h&FV~(Q",
  22291. tokenizers: [0, 1],
  22292. topRules: { Grammar: [0, 3] },
  22293. specialized: [
  22294. { term: 8, get: value => spec_AtName[value] || -1 },
  22295. { term: 118, get: value => spec_keyword[value] || -1 }
  22296. ],
  22297. tokenPrec: 1027
  22298. })
  22299. const lezerLanguage = LezerLanguage.define({
  22300. parser: parser.configure({
  22301. props: [
  22302. foldNodeProp.add({ 'Body TokensBody SkipBody PrecedenceBody': foldInside$1 }),
  22303. styleTags({
  22304. LineComment: tags$1.lineComment,
  22305. BlockComment: tags$1.blockComment,
  22306. AnyChar: tags$1.character,
  22307. Literal: tags$1.string,
  22308. 'tokens from grammar as empty prop extend specialize': tags$1.keyword,
  22309. '@top @left @right @cut @external': tags$1.modifier,
  22310. '@precedence @tokens @context @dialects @skip @detectDelim @conflict': tags$1.definitionKeyword,
  22311. '@extend @specialize': tags$1.operatorKeyword,
  22312. 'CharSet InvertedCharSet': tags$1.regexp,
  22313. RuleName: tags$1.variableName,
  22314. 'RuleDeclaration/RuleName InlineRule/RuleName TokensBody/RuleName': tags$1.definition(tags$1.variableName),
  22315. PrecedenceName: tags$1.labelName,
  22316. Name: tags$1.name,
  22317. '( )': tags$1.paren,
  22318. '[ ]': tags$1.squareBracket,
  22319. '{ }': tags$1.brace,
  22320. '"!" ~ "*" + ? |': tags$1.operator
  22321. })
  22322. ]
  22323. }),
  22324. languageData: { commentTokens: { block: { open: '/*', close: '*/' }, line: '//' }, indentOnInput: /^\s*\}$/ }
  22325. })
  22326. function lezer() {
  22327. return new LanguageSupport(lezerLanguage)
  22328. }
  22329. var _m33 = Object.freeze({ __proto__: null, lezer: lezer, lezerLanguage: lezerLanguage })
  22330. const chalky = '#e5c07b',
  22331. coral = '#e06c75',
  22332. cyan = '#56b6c2',
  22333. invalid = '#ffffff',
  22334. ivory = '#abb2bf',
  22335. stone = '#7d8799',
  22336. malibu = '#61afef',
  22337. sage = '#98c379',
  22338. whiskey = '#d19a66',
  22339. violet = '#c678dd',
  22340. darkBackground = '#21252b',
  22341. highlightBackground = '#2c313a',
  22342. background = '#282c34',
  22343. selection = '#3E4451',
  22344. cursor = '#528bff'
  22345. const oneDarkTheme = EditorView.theme(
  22346. {
  22347. '&': { color: ivory, backgroundColor: background },
  22348. '.cm-content': { caretColor: cursor },
  22349. '&.cm-focused .cm-cursor': { borderLeftColor: cursor },
  22350. '&.cm-focused .cm-selectionBackground, .cm-selectionBackground, ::selection': { backgroundColor: selection },
  22351. '.cm-panels': { backgroundColor: darkBackground, color: ivory },
  22352. '.cm-panels.cm-panels-top': { borderBottom: '2px solid black' },
  22353. '.cm-panels.cm-panels-bottom': { borderTop: '2px solid black' },
  22354. '.cm-searchMatch': { backgroundColor: '#72a1ff59', outline: '1px solid #457dff' },
  22355. '.cm-searchMatch.cm-searchMatch-selected': { backgroundColor: '#6199ff2f' },
  22356. '.cm-activeLine': { backgroundColor: highlightBackground },
  22357. '.cm-selectionMatch': { backgroundColor: '#aafe661a' },
  22358. '.cm-matchingBracket, .cm-nonmatchingBracket': { backgroundColor: '#bad0f847', outline: '1px solid #515a6b' },
  22359. '.cm-gutters': { backgroundColor: background, color: stone, border: 'none' },
  22360. '.cm-activeLineGutter': { backgroundColor: highlightBackground },
  22361. '.cm-foldPlaceholder': { backgroundColor: 'transparent', border: 'none', color: '#ddd' },
  22362. '.cm-tooltip': { border: '1px solid #181a1f', backgroundColor: darkBackground },
  22363. '.cm-tooltip-autocomplete': { '& > ul > li[aria-selected]': { backgroundColor: highlightBackground, color: ivory } }
  22364. },
  22365. { dark: true }
  22366. )
  22367. const oneDarkHighlightStyle = HighlightStyle.define([
  22368. { tag: tags$1.keyword, color: violet },
  22369. { tag: [tags$1.name, tags$1.deleted, tags$1.character, tags$1.propertyName, tags$1.macroName], color: coral },
  22370. { tag: [tags$1.function(tags$1.variableName), tags$1.labelName], color: malibu },
  22371. { tag: [tags$1.color, tags$1.constant(tags$1.name), tags$1.standard(tags$1.name)], color: whiskey },
  22372. { tag: [tags$1.definition(tags$1.name), tags$1.separator], color: ivory },
  22373. { tag: [tags$1.typeName, tags$1.className, tags$1.number, tags$1.changed, tags$1.annotation, tags$1.modifier, tags$1.self, tags$1.namespace], color: chalky },
  22374. { tag: [tags$1.operator, tags$1.operatorKeyword, tags$1.url, tags$1.escape, tags$1.regexp, tags$1.link, tags$1.special(tags$1.string)], color: cyan },
  22375. { tag: [tags$1.meta, tags$1.comment], color: stone },
  22376. { tag: tags$1.strong, fontWeight: 'bold' },
  22377. { tag: tags$1.emphasis, fontStyle: 'italic' },
  22378. { tag: tags$1.strikethrough, textDecoration: 'line-through' },
  22379. { tag: tags$1.link, color: stone, textDecoration: 'underline' },
  22380. { tag: tags$1.heading, fontWeight: 'bold', color: coral },
  22381. { tag: [tags$1.atom, tags$1.bool, tags$1.special(tags$1.variableName)], color: whiskey },
  22382. { tag: [tags$1.processingInstruction, tags$1.string, tags$1.inserted], color: sage },
  22383. { tag: tags$1.invalid, color: invalid }
  22384. ])
  22385. const oneDark = [oneDarkTheme, oneDarkHighlightStyle]
  22386. var _m34 = Object.freeze({ __proto__: null, oneDark: oneDark, oneDarkHighlightStyle: oneDarkHighlightStyle, oneDarkTheme: oneDarkTheme })
  22387. window.CM = {
  22388. '@codemirror/text': _m0,
  22389. '@codemirror/state': _m1,
  22390. '@codemirror/rangeset': _m2,
  22391. '@codemirror/view': _m3,
  22392. '@codemirror/language': _m4,
  22393. '@codemirror/commands': _m5,
  22394. '@codemirror/panel': _m6,
  22395. '@codemirror/tooltip': _m7,
  22396. '@codemirror/history': _m8,
  22397. '@codemirror/gutter': _m9,
  22398. '@codemirror/collab': _m10,
  22399. '@codemirror/fold': _m11,
  22400. '@codemirror/matchbrackets': _m12,
  22401. '@codemirror/closebrackets': _m13,
  22402. '@codemirror/search': _m14,
  22403. '@codemirror/lint': _m15,
  22404. '@codemirror/highlight': _m16,
  22405. '@codemirror/stream-parser': _m17,
  22406. '@codemirror/autocomplete': _m18,
  22407. '@codemirror/comment': _m19,
  22408. '@codemirror/rectangular-selection': _m20,
  22409. '@codemirror/basic-setup': _m21,
  22410. '@codemirror/lang-javascript': _m22,
  22411. '@codemirror/lang-java': _m23,
  22412. '@codemirror/lang-json': _m24,
  22413. '@codemirror/lang-cpp': _m25,
  22414. '@codemirror/lang-python': _m26,
  22415. '@codemirror/lang-css': _m27,
  22416. '@codemirror/lang-html': _m28,
  22417. '@codemirror/lang-sql': _m29,
  22418. '@codemirror/lang-rust': _m30,
  22419. '@codemirror/lang-xml': _m31,
  22420. '@codemirror/lang-markdown': _m32,
  22421. '@codemirror/lang-lezer': _m33,
  22422. '@codemirror/theme-one-dark': _m34,
  22423. lezer: _m35,
  22424. 'lezer-tree': _m36,
  22425. crelt: _m37
  22426. }
  22427. })()