@limetech/lime-elements 37.1.0-next.34 → 37.1.0-next.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/limel-action-bar-item_2.cjs.entry.js +1 -1
- package/dist/cjs/limel-action-bar-item_2.cjs.entry.js.map +1 -1
- package/dist/cjs/limel-markdown.cjs.entry.js +21277 -8084
- package/dist/cjs/limel-markdown.cjs.entry.js.map +1 -1
- package/dist/collection/components/action-bar/action-bar-item/action-bar-item.css +1 -0
- package/dist/esm/limel-action-bar-item_2.entry.js +1 -1
- package/dist/esm/limel-action-bar-item_2.entry.js.map +1 -1
- package/dist/esm/limel-markdown.entry.js +21274 -8081
- package/dist/esm/limel-markdown.entry.js.map +1 -1
- package/dist/lime-elements/lime-elements.esm.js +1 -1
- package/dist/lime-elements/p-7d76f0d4.entry.js +2 -0
- package/dist/lime-elements/p-7d76f0d4.entry.js.map +1 -0
- package/dist/lime-elements/p-9230aa49.entry.js +14 -0
- package/dist/lime-elements/p-9230aa49.entry.js.map +1 -0
- package/package.json +3 -3
- package/dist/lime-elements/p-d50e89fe.entry.js +0 -14
- package/dist/lime-elements/p-d50e89fe.entry.js.map +0 -1
- package/dist/lime-elements/p-db30704e.entry.js +0 -2
- package/dist/lime-elements/p-db30704e.entry.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createBaseEach","eachFunc","fromRight","collection","iteratee","isArrayLike","length","index","iterable","Object","baseEach","baseForOwn","baseFilter","predicate","result","value","push","reject","func","isArray","arrayFilter","negate","baseIteratee","bail_1","bail","err","isBuffer","obj","constructor","hasOwn","prototype","hasOwnProperty","toStr","toString","defineProperty","gOPD","getOwnPropertyDescriptor","arr","Array","call","isPlainObject","hasOwnConstructor","hasIsPrototypeOf","key","setProperty","target","options","name","enumerable","configurable","newValue","writable","getProperty","extend$1","extend","src","copy","copyIsArray","clone","arguments","i","deep","isPlainObj","getPrototypeOf","slice","wrap_1$1","wrap","fn","callback","invoked","wrapped","params","done","apply","error","then","Error","trough_1","trough","fns","middleware","run","use","input","next","concat","values","pos","undefined","own","unistUtilStringifyPosition","stringify","position","point","line","column","start","end","vfileMessage","VMessage","VMessagePrototype","proto","file","reason","message","stack","fatal","origin","parts","range","location","parseOrigin","this","source","ruleId","indexOf","normalizeArray","allowAboveRoot","up","last","splice","unshift","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","TypeError","charAt","filter","split","p","join","normalize","isPathAbsolute","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","Math","min","samePartsLength","outputParts","sep","delimiter","dirname","root","dir","basename","ext","f","extname","path$2","xs","res","str","len","replaceExt","npath","nFileName","replaceExt_1","core$1","VFile","order","get","getPath","set","setPath","getDirname","setDirname","getBasename","setBasename","getExtname","setExtname","getStem","setStem","prop","buffer","contents","data","messages","history","cwd","process","assertNonEmpty","assertPath","assertPart","replace","stem","encoding","String","part","vfile","info","fail","filePath","unified_1","unified","freeze","pipeline","pipelineParse","pipelineRun","pipelineStringify","ctx","tree","parse","attachers","transformers","namespace","freezeIndex","frozen","processor","runSync","processSync","destination","transformer","Infinity","assertUnfrozen","settings","addPlugin","addList","addPreset","plugins","add","plugin","entry","find","plain","doc","Parser","assertParser","newable","node","cb","assertNode","Promise","executor","complete","assertDone","Compiler","assertCompiler","compile","keys","type","asyncName","emptyOptions","includeImageAlt","includeHtml","one","alt","all","children","Boolean","characterEntities","AElig","AMP","Aacute","Abreve","Acirc","Acy","Afr","Agrave","Alpha","Amacr","And","Aogon","Aopf","ApplyFunction","Aring","Ascr","Assign","Atilde","Auml","Backslash","Barv","Barwed","Bcy","Because","Bernoullis","Beta","Bfr","Bopf","Breve","Bscr","Bumpeq","CHcy","COPY","Cacute","Cap","CapitalDifferentialD","Cayleys","Ccaron","Ccedil","Ccirc","Cconint","Cdot","Cedilla","CenterDot","Cfr","Chi","CircleDot","CircleMinus","CirclePlus","CircleTimes","ClockwiseContourIntegral","CloseCurlyDoubleQuote","CloseCurlyQuote","Colon","Colone","Congruent","Conint","ContourIntegral","Copf","Coproduct","CounterClockwiseContourIntegral","Cross","Cscr","Cup","CupCap","DD","DDotrahd","DJcy","DScy","DZcy","Dagger","Darr","Dashv","Dcaron","Dcy","Del","Delta","Dfr","DiacriticalAcute","DiacriticalDot","DiacriticalDoubleAcute","DiacriticalGrave","DiacriticalTilde","Diamond","DifferentialD","Dopf","Dot","DotDot","DotEqual","DoubleContourIntegral","DoubleDot","DoubleDownArrow","DoubleLeftArrow","DoubleLeftRightArrow","DoubleLeftTee","DoubleLongLeftArrow","DoubleLongLeftRightArrow","DoubleLongRightArrow","DoubleRightArrow","DoubleRightTee","DoubleUpArrow","DoubleUpDownArrow","DoubleVerticalBar","DownArrow","DownArrowBar","DownArrowUpArrow","DownBreve","DownLeftRightVector","DownLeftTeeVector","DownLeftVector","DownLeftVectorBar","DownRightTeeVector","DownRightVector","DownRightVectorBar","DownTee","DownTeeArrow","Downarrow","Dscr","Dstrok","ENG","ETH","Eacute","Ecaron","Ecirc","Ecy","Edot","Efr","Egrave","Element","Emacr","EmptySmallSquare","EmptyVerySmallSquare","Eogon","Eopf","Epsilon","Equal","EqualTilde","Equilibrium","Escr","Esim","Eta","Euml","Exists","ExponentialE","Fcy","Ffr","FilledSmallSquare","FilledVerySmallSquare","Fopf","ForAll","Fouriertrf","Fscr","GJcy","GT","Gamma","Gammad","Gbreve","Gcedil","Gcirc","Gcy","Gdot","Gfr","Gg","Gopf","GreaterEqual","GreaterEqualLess","GreaterFullEqual","GreaterGreater","GreaterLess","GreaterSlantEqual","GreaterTilde","Gscr","Gt","HARDcy","Hacek","Hat","Hcirc","Hfr","HilbertSpace","Hopf","HorizontalLine","Hscr","Hstrok","HumpDownHump","HumpEqual","IEcy","IJlig","IOcy","Iacute","Icirc","Icy","Idot","Ifr","Igrave","Im","Imacr","ImaginaryI","Implies","Int","Integral","Intersection","InvisibleComma","InvisibleTimes","Iogon","Iopf","Iota","Iscr","Itilde","Iukcy","Iuml","Jcirc","Jcy","Jfr","Jopf","Jscr","Jsercy","Jukcy","KHcy","KJcy","Kappa","Kcedil","Kcy","Kfr","Kopf","Kscr","LJcy","LT","Lacute","Lambda","Lang","Laplacetrf","Larr","Lcaron","Lcedil","Lcy","LeftAngleBracket","LeftArrow","LeftArrowBar","LeftArrowRightArrow","LeftCeiling","LeftDoubleBracket","LeftDownTeeVector","LeftDownVector","LeftDownVectorBar","LeftFloor","LeftRightArrow","LeftRightVector","LeftTee","LeftTeeArrow","LeftTeeVector","LeftTriangle","LeftTriangleBar","LeftTriangleEqual","LeftUpDownVector","LeftUpTeeVector","LeftUpVector","LeftUpVectorBar","LeftVector","LeftVectorBar","Leftarrow","Leftrightarrow","LessEqualGreater","LessFullEqual","LessGreater","LessLess","LessSlantEqual","LessTilde","Lfr","Ll","Lleftarrow","Lmidot","LongLeftArrow","LongLeftRightArrow","LongRightArrow","Longleftarrow","Longleftrightarrow","Longrightarrow","Lopf","LowerLeftArrow","LowerRightArrow","Lscr","Lsh","Lstrok","Lt","Map","Mcy","MediumSpace","Mellintrf","Mfr","MinusPlus","Mopf","Mscr","Mu","NJcy","Nacute","Ncaron","Ncedil","Ncy","NegativeMediumSpace","NegativeThickSpace","NegativeThinSpace","NegativeVeryThinSpace","NestedGreaterGreater","NestedLessLess","NewLine","Nfr","NoBreak","NonBreakingSpace","Nopf","Not","NotCongruent","NotCupCap","NotDoubleVerticalBar","NotElement","NotEqual","NotEqualTilde","NotExists","NotGreater","NotGreaterEqual","NotGreaterFullEqual","NotGreaterGreater","NotGreaterLess","NotGreaterSlantEqual","NotGreaterTilde","NotHumpDownHump","NotHumpEqual","NotLeftTriangle","NotLeftTriangleBar","NotLeftTriangleEqual","NotLess","NotLessEqual","NotLessGreater","NotLessLess","NotLessSlantEqual","NotLessTilde","NotNestedGreaterGreater","NotNestedLessLess","NotPrecedes","NotPrecedesEqual","NotPrecedesSlantEqual","NotReverseElement","NotRightTriangle","NotRightTriangleBar","NotRightTriangleEqual","NotSquareSubset","NotSquareSubsetEqual","NotSquareSuperset","NotSquareSupersetEqual","NotSubset","NotSubsetEqual","NotSucceeds","NotSucceedsEqual","NotSucceedsSlantEqual","NotSucceedsTilde","NotSuperset","NotSupersetEqual","NotTilde","NotTildeEqual","NotTildeFullEqual","NotTildeTilde","NotVerticalBar","Nscr","Ntilde","Nu","OElig","Oacute","Ocirc","Ocy","Odblac","Ofr","Ograve","Omacr","Omega","Omicron","Oopf","OpenCurlyDoubleQuote","OpenCurlyQuote","Or","Oscr","Oslash","Otilde","Otimes","Ouml","OverBar","OverBrace","OverBracket","OverParenthesis","PartialD","Pcy","Pfr","Phi","Pi","PlusMinus","Poincareplane","Popf","Pr","Precedes","PrecedesEqual","PrecedesSlantEqual","PrecedesTilde","Prime","Product","Proportion","Proportional","Pscr","Psi","QUOT","Qfr","Qopf","Qscr","RBarr","REG","Racute","Rang","Rarr","Rarrtl","Rcaron","Rcedil","Rcy","Re","ReverseElement","ReverseEquilibrium","ReverseUpEquilibrium","Rfr","Rho","RightAngleBracket","RightArrow","RightArrowBar","RightArrowLeftArrow","RightCeiling","RightDoubleBracket","RightDownTeeVector","RightDownVector","RightDownVectorBar","RightFloor","RightTee","RightTeeArrow","RightTeeVector","RightTriangle","RightTriangleBar","RightTriangleEqual","RightUpDownVector","RightUpTeeVector","RightUpVector","RightUpVectorBar","RightVector","RightVectorBar","Rightarrow","Ropf","RoundImplies","Rrightarrow","Rscr","Rsh","RuleDelayed","SHCHcy","SHcy","SOFTcy","Sacute","Sc","Scaron","Scedil","Scirc","Scy","Sfr","ShortDownArrow","ShortLeftArrow","ShortRightArrow","ShortUpArrow","Sigma","SmallCircle","Sopf","Sqrt","Square","SquareIntersection","SquareSubset","SquareSubsetEqual","SquareSuperset","SquareSupersetEqual","SquareUnion","Sscr","Star","Sub","Subset","SubsetEqual","Succeeds","SucceedsEqual","SucceedsSlantEqual","SucceedsTilde","SuchThat","Sum","Sup","Superset","SupersetEqual","Supset","THORN","TRADE","TSHcy","TScy","Tab","Tau","Tcaron","Tcedil","Tcy","Tfr","Therefore","Theta","ThickSpace","ThinSpace","Tilde","TildeEqual","TildeFullEqual","TildeTilde","Topf","TripleDot","Tscr","Tstrok","Uacute","Uarr","Uarrocir","Ubrcy","Ubreve","Ucirc","Ucy","Udblac","Ufr","Ugrave","Umacr","UnderBar","UnderBrace","UnderBracket","UnderParenthesis","Union","UnionPlus","Uogon","Uopf","UpArrow","UpArrowBar","UpArrowDownArrow","UpDownArrow","UpEquilibrium","UpTee","UpTeeArrow","Uparrow","Updownarrow","UpperLeftArrow","UpperRightArrow","Upsi","Upsilon","Uring","Uscr","Utilde","Uuml","VDash","Vbar","Vcy","Vdash","Vdashl","Vee","Verbar","Vert","VerticalBar","VerticalLine","VerticalSeparator","VerticalTilde","VeryThinSpace","Vfr","Vopf","Vscr","Vvdash","Wcirc","Wedge","Wfr","Wopf","Wscr","Xfr","Xi","Xopf","Xscr","YAcy","YIcy","YUcy","Yacute","Ycirc","Ycy","Yfr","Yopf","Yscr","Yuml","ZHcy","Zacute","Zcaron","Zcy","Zdot","ZeroWidthSpace","Zeta","Zfr","Zopf","Zscr","aacute","abreve","ac","acE","acd","acirc","acute","acy","aelig","af","afr","agrave","alefsym","aleph","alpha","amacr","amalg","amp","and","andand","andd","andslope","andv","ang","ange","angle","angmsd","angmsdaa","angmsdab","angmsdac","angmsdad","angmsdae","angmsdaf","angmsdag","angmsdah","angrt","angrtvb","angrtvbd","angsph","angst","angzarr","aogon","aopf","ap","apE","apacir","ape","apid","apos","approx","approxeq","aring","ascr","ast","asymp","asympeq","atilde","auml","awconint","awint","bNot","backcong","backepsilon","backprime","backsim","backsimeq","barvee","barwed","barwedge","bbrk","bbrktbrk","bcong","bcy","bdquo","becaus","because","bemptyv","bepsi","bernou","beta","beth","between","bfr","bigcap","bigcirc","bigcup","bigodot","bigoplus","bigotimes","bigsqcup","bigstar","bigtriangledown","bigtriangleup","biguplus","bigvee","bigwedge","bkarow","blacklozenge","blacksquare","blacktriangle","blacktriangledown","blacktriangleleft","blacktriangleright","blank","blk12","blk14","blk34","block","bne","bnequiv","bnot","bopf","bot","bottom","bowtie","boxDL","boxDR","boxDl","boxDr","boxH","boxHD","boxHU","boxHd","boxHu","boxUL","boxUR","boxUl","boxUr","boxV","boxVH","boxVL","boxVR","boxVh","boxVl","boxVr","boxbox","boxdL","boxdR","boxdl","boxdr","boxh","boxhD","boxhU","boxhd","boxhu","boxminus","boxplus","boxtimes","boxuL","boxuR","boxul","boxur","boxv","boxvH","boxvL","boxvR","boxvh","boxvl","boxvr","bprime","breve","brvbar","bscr","bsemi","bsim","bsime","bsol","bsolb","bsolhsub","bull","bullet","bump","bumpE","bumpe","bumpeq","cacute","cap","capand","capbrcup","capcap","capcup","capdot","caps","caret","caron","ccaps","ccaron","ccedil","ccirc","ccups","ccupssm","cdot","cedil","cemptyv","cent","centerdot","cfr","chcy","check","checkmark","chi","cir","cirE","circ","circeq","circlearrowleft","circlearrowright","circledR","circledS","circledast","circledcirc","circleddash","cire","cirfnint","cirmid","cirscir","clubs","clubsuit","colon","colone","coloneq","comma","commat","comp","compfn","complement","complexes","cong","congdot","conint","copf","coprod","copysr","crarr","cross","cscr","csub","csube","csup","csupe","ctdot","cudarrl","cudarrr","cuepr","cuesc","cularr","cularrp","cup","cupbrcap","cupcap","cupcup","cupdot","cupor","cups","curarr","curarrm","curlyeqprec","curlyeqsucc","curlyvee","curlywedge","curren","curvearrowleft","curvearrowright","cuvee","cuwed","cwconint","cwint","cylcty","dArr","dHar","dagger","daleth","darr","dash","dashv","dbkarow","dblac","dcaron","dcy","dd","ddagger","ddarr","ddotseq","deg","delta","demptyv","dfisht","dfr","dharl","dharr","diam","diamond","diamondsuit","diams","die","digamma","disin","div","divide","divideontimes","divonx","djcy","dlcorn","dlcrop","dollar","dopf","dot","doteq","doteqdot","dotminus","dotplus","dotsquare","doublebarwedge","downarrow","downdownarrows","downharpoonleft","downharpoonright","drbkarow","drcorn","drcrop","dscr","dscy","dsol","dstrok","dtdot","dtri","dtrif","duarr","duhar","dwangle","dzcy","dzigrarr","eDDot","eDot","eacute","easter","ecaron","ecir","ecirc","ecolon","ecy","edot","ee","efDot","efr","eg","egrave","egs","egsdot","el","elinters","ell","els","elsdot","emacr","empty","emptyset","emptyv","emsp13","emsp14","emsp","eng","ensp","eogon","eopf","epar","eparsl","eplus","epsi","epsilon","epsiv","eqcirc","eqcolon","eqsim","eqslantgtr","eqslantless","equals","equest","equiv","equivDD","eqvparsl","erDot","erarr","escr","esdot","esim","eta","eth","euml","euro","excl","exist","expectation","exponentiale","fallingdotseq","fcy","female","ffilig","fflig","ffllig","ffr","filig","fjlig","flat","fllig","fltns","fnof","fopf","forall","fork","forkv","fpartint","frac12","frac13","frac14","frac15","frac16","frac18","frac23","frac25","frac34","frac35","frac38","frac45","frac56","frac58","frac78","frasl","frown","fscr","gE","gEl","gacute","gamma","gammad","gap","gbreve","gcirc","gcy","gdot","ge","gel","geq","geqq","geqslant","ges","gescc","gesdot","gesdoto","gesdotol","gesl","gesles","gfr","gg","ggg","gimel","gjcy","gl","glE","gla","glj","gnE","gnap","gnapprox","gne","gneq","gneqq","gnsim","gopf","grave","gscr","gsim","gsime","gsiml","gt","gtcc","gtcir","gtdot","gtlPar","gtquest","gtrapprox","gtrarr","gtrdot","gtreqless","gtreqqless","gtrless","gtrsim","gvertneqq","gvnE","hArr","hairsp","half","hamilt","hardcy","harr","harrcir","harrw","hbar","hcirc","hearts","heartsuit","hellip","hercon","hfr","hksearow","hkswarow","hoarr","homtht","hookleftarrow","hookrightarrow","hopf","horbar","hscr","hslash","hstrok","hybull","hyphen","iacute","ic","icirc","icy","iecy","iexcl","iff","ifr","igrave","ii","iiiint","iiint","iinfin","iiota","ijlig","imacr","image","imagline","imagpart","imath","imof","imped","in","incare","infin","infintie","inodot","int","intcal","integers","intercal","intlarhk","intprod","iocy","iogon","iopf","iota","iprod","iquest","iscr","isin","isinE","isindot","isins","isinsv","isinv","it","itilde","iukcy","iuml","jcirc","jcy","jfr","jmath","jopf","jscr","jsercy","jukcy","kappa","kappav","kcedil","kcy","kfr","kgreen","khcy","kjcy","kopf","kscr","lAarr","lArr","lAtail","lBarr","lE","lEg","lHar","lacute","laemptyv","lagran","lambda","lang","langd","langle","lap","laquo","larr","larrb","larrbfs","larrfs","larrhk","larrlp","larrpl","larrsim","larrtl","lat","latail","late","lates","lbarr","lbbrk","lbrace","lbrack","lbrke","lbrksld","lbrkslu","lcaron","lcedil","lceil","lcub","lcy","ldca","ldquo","ldquor","ldrdhar","ldrushar","ldsh","le","leftarrow","leftarrowtail","leftharpoondown","leftharpoonup","leftleftarrows","leftrightarrow","leftrightarrows","leftrightharpoons","leftrightsquigarrow","leftthreetimes","leg","leq","leqq","leqslant","les","lescc","lesdot","lesdoto","lesdotor","lesg","lesges","lessapprox","lessdot","lesseqgtr","lesseqqgtr","lessgtr","lesssim","lfisht","lfloor","lfr","lg","lgE","lhard","lharu","lharul","lhblk","ljcy","ll","llarr","llcorner","llhard","lltri","lmidot","lmoust","lmoustache","lnE","lnap","lnapprox","lne","lneq","lneqq","lnsim","loang","loarr","lobrk","longleftarrow","longleftrightarrow","longmapsto","longrightarrow","looparrowleft","looparrowright","lopar","lopf","loplus","lotimes","lowast","lowbar","loz","lozenge","lozf","lpar","lparlt","lrarr","lrcorner","lrhar","lrhard","lrm","lrtri","lsaquo","lscr","lsh","lsim","lsime","lsimg","lsqb","lsquo","lsquor","lstrok","lt","ltcc","ltcir","ltdot","lthree","ltimes","ltlarr","ltquest","ltrPar","ltri","ltrie","ltrif","lurdshar","luruhar","lvertneqq","lvnE","mDDot","macr","male","malt","maltese","map","mapsto","mapstodown","mapstoleft","mapstoup","marker","mcomma","mcy","mdash","measuredangle","mfr","mho","micro","mid","midast","midcir","middot","minus","minusb","minusd","minusdu","mlcp","mldr","mnplus","models","mopf","mp","mscr","mstpos","mu","multimap","mumap","nGg","nGt","nGtv","nLeftarrow","nLeftrightarrow","nLl","nLt","nLtv","nRightarrow","nVDash","nVdash","nabla","nacute","nang","nap","napE","napid","napos","napprox","natur","natural","naturals","nbsp","nbump","nbumpe","ncap","ncaron","ncedil","ncong","ncongdot","ncup","ncy","ndash","ne","neArr","nearhk","nearr","nearrow","nedot","nequiv","nesear","nesim","nexist","nexists","nfr","ngE","nge","ngeq","ngeqq","ngeqslant","nges","ngsim","ngt","ngtr","nhArr","nharr","nhpar","ni","nis","nisd","niv","njcy","nlArr","nlE","nlarr","nldr","nle","nleftarrow","nleftrightarrow","nleq","nleqq","nleqslant","nles","nless","nlsim","nlt","nltri","nltrie","nmid","nopf","not","notin","notinE","notindot","notinva","notinvb","notinvc","notni","notniva","notnivb","notnivc","npar","nparallel","nparsl","npart","npolint","npr","nprcue","npre","nprec","npreceq","nrArr","nrarr","nrarrc","nrarrw","nrightarrow","nrtri","nrtrie","nsc","nsccue","nsce","nscr","nshortmid","nshortparallel","nsim","nsime","nsimeq","nsmid","nspar","nsqsube","nsqsupe","nsub","nsubE","nsube","nsubset","nsubseteq","nsubseteqq","nsucc","nsucceq","nsup","nsupE","nsupe","nsupset","nsupseteq","nsupseteqq","ntgl","ntilde","ntlg","ntriangleleft","ntrianglelefteq","ntriangleright","ntrianglerighteq","nu","num","numero","numsp","nvDash","nvHarr","nvap","nvdash","nvge","nvgt","nvinfin","nvlArr","nvle","nvlt","nvltrie","nvrArr","nvrtrie","nvsim","nwArr","nwarhk","nwarr","nwarrow","nwnear","oS","oacute","oast","ocir","ocirc","ocy","odash","odblac","odiv","odot","odsold","oelig","ofcir","ofr","ogon","ograve","ogt","ohbar","ohm","oint","olarr","olcir","olcross","oline","olt","omacr","omega","omicron","omid","ominus","oopf","opar","operp","oplus","or","orarr","ord","orderof","ordf","ordm","origof","oror","orslope","orv","oscr","oslash","osol","otilde","otimes","otimesas","ouml","ovbar","par","para","parallel","parsim","parsl","pcy","percnt","period","permil","perp","pertenk","pfr","phi","phiv","phmmat","phone","pi","pitchfork","piv","planck","planckh","plankv","plus","plusacir","plusb","pluscir","plusdo","plusdu","pluse","plusmn","plussim","plustwo","pm","pointint","popf","pound","pr","prE","prap","prcue","pre","prec","precapprox","preccurlyeq","preceq","precnapprox","precneqq","precnsim","precsim","prime","primes","prnE","prnap","prnsim","prod","profalar","profline","profsurf","propto","prsim","prurel","pscr","psi","puncsp","qfr","qint","qopf","qprime","qscr","quaternions","quatint","quest","questeq","quot","rAarr","rArr","rAtail","rBarr","rHar","race","racute","radic","raemptyv","rang","rangd","rangle","raquo","rarr","rarrap","rarrb","rarrbfs","rarrc","rarrfs","rarrhk","rarrlp","rarrpl","rarrsim","rarrtl","rarrw","ratail","ratio","rationals","rbarr","rbbrk","rbrace","rbrack","rbrke","rbrksld","rbrkslu","rcaron","rcedil","rceil","rcub","rcy","rdca","rdldhar","rdquo","rdquor","rdsh","real","realine","realpart","reals","rect","reg","rfisht","rfloor","rfr","rhard","rharu","rharul","rho","rhov","rightarrow","rightarrowtail","rightharpoondown","rightharpoonup","rightleftarrows","rightleftharpoons","rightrightarrows","rightsquigarrow","rightthreetimes","ring","risingdotseq","rlarr","rlhar","rlm","rmoust","rmoustache","rnmid","roang","roarr","robrk","ropar","ropf","roplus","rotimes","rpar","rpargt","rppolint","rrarr","rsaquo","rscr","rsh","rsqb","rsquo","rsquor","rthree","rtimes","rtri","rtrie","rtrif","rtriltri","ruluhar","rx","sacute","sbquo","sc","scE","scap","scaron","sccue","sce","scedil","scirc","scnE","scnap","scnsim","scpolint","scsim","scy","sdot","sdotb","sdote","seArr","searhk","searr","searrow","sect","semi","seswar","setminus","setmn","sext","sfr","sfrown","sharp","shchcy","shcy","shortmid","shortparallel","shy","sigma","sigmaf","sigmav","sim","simdot","sime","simeq","simg","simgE","siml","simlE","simne","simplus","simrarr","slarr","smallsetminus","smashp","smeparsl","smid","smile","smt","smte","smtes","softcy","sol","solb","solbar","sopf","spades","spadesuit","spar","sqcap","sqcaps","sqcup","sqcups","sqsub","sqsube","sqsubset","sqsubseteq","sqsup","sqsupe","sqsupset","sqsupseteq","squ","square","squarf","squf","srarr","sscr","ssetmn","ssmile","sstarf","star","starf","straightepsilon","straightphi","strns","sub","subE","subdot","sube","subedot","submult","subnE","subne","subplus","subrarr","subset","subseteq","subseteqq","subsetneq","subsetneqq","subsim","subsub","subsup","succ","succapprox","succcurlyeq","succeq","succnapprox","succneqq","succnsim","succsim","sum","sung","sup1","sup2","sup3","sup","supE","supdot","supdsub","supe","supedot","suphsol","suphsub","suplarr","supmult","supnE","supne","supplus","supset","supseteq","supseteqq","supsetneq","supsetneqq","supsim","supsub","supsup","swArr","swarhk","swarr","swarrow","swnwar","szlig","tau","tbrk","tcaron","tcedil","tcy","tdot","telrec","tfr","there4","therefore","theta","thetasym","thetav","thickapprox","thicksim","thinsp","thkap","thksim","thorn","tilde","times","timesb","timesbar","timesd","tint","toea","top","topbot","topcir","topf","topfork","tosa","tprime","trade","triangle","triangledown","triangleleft","trianglelefteq","triangleq","triangleright","trianglerighteq","tridot","trie","triminus","triplus","trisb","tritime","trpezium","tscr","tscy","tshcy","tstrok","twixt","twoheadleftarrow","twoheadrightarrow","uArr","uHar","uacute","uarr","ubrcy","ubreve","ucirc","ucy","udarr","udblac","udhar","ufisht","ufr","ugrave","uharl","uharr","uhblk","ulcorn","ulcorner","ulcrop","ultri","umacr","uml","uogon","uopf","uparrow","updownarrow","upharpoonleft","upharpoonright","uplus","upsi","upsih","upsilon","upuparrows","urcorn","urcorner","urcrop","uring","urtri","uscr","utdot","utilde","utri","utrif","uuarr","uuml","uwangle","vArr","vBar","vBarv","vDash","vangrt","varepsilon","varkappa","varnothing","varphi","varpi","varpropto","varr","varrho","varsigma","varsubsetneq","varsubsetneqq","varsupsetneq","varsupsetneqq","vartheta","vartriangleleft","vartriangleright","vcy","vdash","vee","veebar","veeeq","vellip","verbar","vert","vfr","vltri","vnsub","vnsup","vopf","vprop","vrtri","vscr","vsubnE","vsubne","vsupnE","vsupne","vzigzag","wcirc","wedbar","wedge","wedgeq","weierp","wfr","wopf","wp","wr","wreath","wscr","xcap","xcirc","xcup","xdtri","xfr","xhArr","xharr","xi","xlArr","xlarr","xmap","xnis","xodot","xopf","xoplus","xotime","xrArr","xrarr","xscr","xsqcup","xuplus","xutri","xvee","xwedge","yacute","yacy","ycirc","ycy","yen","yfr","yicy","yopf","yscr","yucy","yuml","zacute","zcaron","zcy","zdot","zeetrf","zeta","zfr","zhcy","zigrarr","zopf","zscr","zwj","zwnj","decodeNamedCharacterReference","list","remove","items","chunkStart","parameters","combineExtensions","extensions","syntaxExtension","extension","hook","maybe","left","right","code","constructs","existing","before","decodeNumericCharacterReference","base","Number","parseInt","fromCharCode","normalizeIdentifier","toLowerCase","toUpperCase","unicodePunctuationInternal","regexCheck","asciiAlpha","asciiAlphanumeric","asciiAtext","asciiControl","asciiDigit","asciiHexDigit","asciiPunctuation","markdownLineEnding","markdownLineEndingOrSpace","markdownSpace","unicodePunctuation","unicodeWhitespace","regex","test","factorySpace","effects","ok","max","limit","POSITIVE_INFINITY","size","enter","prefix","consume","exit","content","tokenize","initializeContent","contentStart","attempt","parser","contentInitial","afterContentStartConstruct","paragraphInitial","previous","lineStart","token","contentType","document","initializeDocument","containerConstruct","tokenizeContainer","self","continued","childFlow","childToken","lineStartOffset","item","containerState","continuation","documentContinue","checkNewContainers","_closeFlow","closeFlow","indexBeforeExits","events","indexBeforeFlow","exitContainers","assign","documentContinued","currentConstruct","concrete","flowStart","interrupt","_gfmTableDynamicInterruptHack","thereIsANewContainer","thereIsNoNewContainer","lazy","now","offset","containerContinue","flow","_tokenizer","flowContinue","writeToChild","eof","stream","sliceStream","defineSkip","write","seen","nok","disable","null","includes","classifyCharacter","resolveAll","context","called","attention","tokenizeAttention","resolveAllAttention","open","group","text","openingSequence","closingSequence","nextEvents","_close","_open","sliceSerialize","charCodeAt","movePoint","insideSpan","attentionMarkers","inside","after","close","_bufferIndex","autolink","tokenizeAutolink","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","blankLine","tokenizeBlankLine","partial","blockQuote","tokenizeBlockQuoteStart","tokenizeBlockQuoteContinuation","state","_container","contStart","contBefore","characterEscape","tokenizeCharacterEscape","characterReference","tokenizeCharacterReference","numeric","nonLazyContinuation","tokenizeNonLazyContinuation","codeFenced","tokenizeCodeFenced","closeStart","tokenizeCloseStart","initialPrefix","sizeOpen","beforeSequenceOpen","tail","sequenceOpen","infoBefore","atNonLazyBreak","metaBefore","meta","contentBefore","beforeContentChunk","contentChunk","startBefore","beforeSequenceClose","sequenceClose","sequenceCloseAfter","codeIndented","tokenizeCodeIndented","furtherStart","tokenizeFurtherStart","afterPrefix","atBreak","codeText","tokenizeCodeText","resolveCodeText","tailExitIndex","headEnterIndex","subtokenize","jumps","event","lineIndex","otherIndex","otherEvent","subevents","more","_isInFirstContentOfListItem","subcontent","eventIndex","startPosition","startPositions","tokenizer","childEvents","gaps","current","adjust","breaks","_gfmTasklistFirstContentOfListItem","pop","tokenizeContent","resolveContent","continuationConstruct","tokenizeContinuation","chunkInside","contentEnd","contentContinue","startLookahead","prefixed","factoryDestination","literalType","literalMarkerType","rawType","stringType","balance","enclosedBefore","raw","enclosed","enclosedEscape","rawEscape","factoryLabel","markerType","labelInside","labelEscape","factoryTitle","begin","escape","factoryWhitespace","definition","tokenizeDefinition","titleBefore","tokenizeTitleBefore","identifier","labelAfter","markerAfter","destinationBefore","destinationAfter","afterWhitespace","defined","beforeMarker","titleAfter","titleAfterOptionalWhitespace","hardBreakEscape","tokenizeHardBreakEscape","headingAtx","tokenizeHeadingAtx","resolveHeadingAtx","sequenceFurther","htmlBlockNames","htmlRawNames","htmlFlow","tokenizeHtmlFlow","resolveTo","resolveToHtmlFlow","blankLineBefore","tokenizeBlankLineBefore","nonLazyContinuationStart","tokenizeNonLazyContinuationStart","closingTag","markerB","declarationOpen","tagCloseStart","continuationDeclarationInside","tagName","commentOpenInside","cdataOpenInside","slash","basicSelfClosing","completeClosingTagAfter","completeAttributeNameBefore","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCdataInside","continuationAfter","continuationStart","continuationStartNonLazy","continuationBefore","continuationRawEndTag","htmlText","tokenizeHtmlText","returnState","instruction","tagOpen","declaration","commentEnd","comment","commentClose","lineEndingBefore","cdata","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","lineEndingAfter","lineEndingAfterPrefix","labelEnd","tokenizeLabelEnd","resolveToLabelEnd","resolveAllLabelEnd","resourceConstruct","tokenizeResource","referenceFullConstruct","tokenizeReferenceFull","referenceCollapsedConstruct","tokenizeReferenceCollapsed","media","_inactive","_balanced","label","labelStart","labelEndNok","labelEndOk","referenceNotFull","resourceStart","resourceBefore","resourceOpen","resourceEnd","resourceDestinationAfter","resourceDestinationMissing","resourceBetween","resourceTitleAfter","referenceFull","referenceFullAfter","referenceFullMissing","referenceCollapsedStart","referenceCollapsedOpen","labelStartImage","tokenizeLabelStartImage","labelStartLink","tokenizeLabelStartLink","lineEnding","tokenizeLineEnding","thematicBreak","tokenizeThematicBreak","sequence","tokenizeListStart","tokenizeListContinuation","tokenizeListEnd","listItemPrefixWhitespaceConstruct","tokenizeListItemPrefixWhitespace","indentConstruct","tokenizeIndent","initialSize","kind","atMarker","onBlank","endOfPrefix","otherPrefix","initialBlankLine","notBlank","furtherBlankLines","notInCurrentItem","setextUnderline","tokenizeSetextUnderline","resolveToSetextUnderline","heading","paragraph","initializeFlow","initial","atBlankEnding","flowInitial","afterConstruct","resolver","createResolver","string","initializeFactory","field","initializeText","resolveAllLineSuffixes","notText","extraResolver","resolveAllText","chunks","bufferIndex","tabs","chunk","_index","createTokenizer","initialize","columnStart","resolveAllConstructs","constructFactory","onsuccessfulconstruct","onsuccessfulcheck","main","addResult","expandTabs","serializeChunks","sliceChunks","accountForPotentialSkip","chunkIndex","go","fields","construct","_","restore","onreturn","bogusState","listOfConstructs","constructIndex","handleListOfConstructs","handleMapOfConstructs","def","handleConstruct","store","create","startPoint","startPrevious","startCurrentConstruct","startEventsIndex","startStack","startIndex","startBufferIndex","endIndex","endBufferIndex","view","head","shift","atTab","resolveText","defaultConstructs","creator","postprocess","search","preprocess","atCarriageReturn","preprocessor","match","endPosition","TextDecoder","decode","lastIndex","ceil","characterEscapeOrReference","decodeString","$0","$1","$2","hex","stringifyPosition","fromMarkdown","compiler","config","transforms","canContainEols","opener","link","autolinkProtocol","onenterdata","autolinkEmail","atxHeading","codeFlow","codeFencedFenceInfo","codeFencedFenceMeta","codeTextData","codeFlowValue","definitionDestinationString","definitionLabelString","definitionTitleString","emphasis","hardBreak","hardBreakTrailing","html","htmlFlowData","htmlTextData","listItem","listItemValue","onenterlistitemvalue","listOrdered","onenterlistordered","listUnordered","reference","onenterreference","referenceString","resourceDestinationString","resourceTitleString","setextHeading","strong","closer","atxHeadingSequence","onexitatxheadingsequence","onexitautolinkemail","onexitautolinkprotocol","characterEscapeValue","onexitdata","characterReferenceMarkerHexadecimal","onexitcharacterreferencemarker","characterReferenceMarkerNumeric","characterReferenceValue","onexitcharacterreferencevalue","onexitcodefenced","codeFencedFence","onexitcodefencedfence","onexitcodefencedfenceinfo","onexitcodefencedfencemeta","onexitcodeindented","onexitcodetext","onexitdefinitiondestinationstring","onexitdefinitionlabelstring","onexitdefinitiontitlestring","onexithardbreak","onexithtmlflow","onexithtmltext","onexitimage","onexitlabel","labelText","onexitlabeltext","onexitlineending","onexitlink","onexitreferencestring","onexitresourcedestinationstring","onexitresourcetitlestring","resource","onexitresource","onexitsetextheading","setextHeadingLineSequence","onexitsetextheadinglinesequence","setextHeadingText","onexitsetextheadingtext","configure","mdastExtensions","tokenStack","resume","listStack","prepareList","handler","defaultOnError","containerBalance","listSpread","firstBlankLineIndex","tailIndex","tailEvent","_spread","errorHandler","parent","siblings","onExitError","expectingFirstListItemValue","ancestor","flowCodeInside","title","url","depth","setextHeadingSlurpLineEnding","codePointAt","atHardBreak","inReference","referenceType","fragment","characterReferenceType","ordered","spread","checked","d","combined","remarkParse","unistBuilder","u","props","convert_1$1","convert","typeFactory","anyFactory","allFactory","tests","checks","any","color_browser","identity","unistUtilVisitParents","visitParents","CONTINUE","SKIP","EXIT","visitor","reverse","step","is","factory","parents","visit","displayName","color","grandparents","subresult","toResult","unistUtilVisit","overload","unistUtilPosition","isNaN","unistUtilGenerated","generated","mdastUtilDefinitions","getDefinitionFactory","getterFactory","gather","cache","ondefinition","id","normalise","getter","all_1$1","h","nodes","one_1","unknown","augment","handlers","passThrough","returnNode","unknownHandler","thematicBreak_1","wrap_1","loose","list_1","properties","className","footer","generateFootnotes","footnoteById","footnoteOrder","listItems","backReference","hProperties","blockquote_1","blockquote","_break","code_1","_delete","strikethrough","emphasis_1","footnoteReference_1","footnoteReference","href","footnote_1","footnote","heading_1","html_1$2","dangerous","encodeCache","getEncodeCache","exclude","ch","encode","keepEscaped","l","nextCode","defaultChars","encodeURIComponent","componentChars","encode_1$1","revert_1","revert","subtype","suffix","imageReference_1","imageReference","image_1","inlineCode_1","inlineCode","linkReference_1","linkReference","link_1","listItem_1","listLoose","listItemLoose","child","disabled","paragraph_1","root_1","strong_1","table_1","table","rows","align","alignLength","row","out","cell","text_1","handlers$2","require$$0","break","require$$1","require$$2","delete","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","toml","ignore","yaml","footnoteDefinition","lib$3","toHast","deprecationWarningIssued","allowDangerousHTML","console","warn","allowDangerousHtml","definitions","onfootnotedefinition","hName","hChildren","foot","mdastUtilToHast","remarkRehype","remark2rehype","bridge","mutate","mdast2hast","ccount","character","count","escapeStringRegexp","castFactory","propsFactory","checkAsRecord","nodeAsRecord","testFunction","looksLikeANode","nodeAsParent","findAndReplace","ignored","pairs","toPairs","pairIndex","grandparent","change","matchObject","global","tupleOrList","tuple","toExpression","toFunction","RegExp","inConstruct","notInConstruct","gfmAutolinkLiteralFromMarkdown","transformGfmAutolinkLiterals","literalAutolink","enterLiteralAutolink","literalAutolinkEmail","enterLiteralAutolinkValue","literalAutolinkHttp","literalAutolinkWww","exitLiteralAutolink","exitLiteralAutolinkEmail","exitLiteralAutolinkHttp","exitLiteralAutolinkWww","gfmAutolinkLiteralToMarkdown","unsafe","assert","findUrl","findEmail","protocol","domain","isCorrectDomain","splitUrl","atext","trailExec","trail","closingParenIndex","openingParens","closingParens","email","peek","footnoteReferencePeek","gfmFootnoteFromMarkdown","gfmFootnoteDefinition","enterFootnoteDefinition","gfmFootnoteDefinitionLabelString","enterFootnoteDefinitionLabelString","gfmFootnoteCall","enterFootnoteCall","gfmFootnoteCallString","enterFootnoteCallString","exitFootnoteDefinition","exitFootnoteDefinitionLabelString","exitFootnoteCall","exitFootnoteCallString","gfmFootnoteToMarkdown","tracker","createTracker","move","subexit","safe","associationId","indentLines","containerFlow","constructsWithoutStrikethrough","handleDelete","peekDelete","gfmStrikethroughFromMarkdown","enterStrikethrough","exitStrikethrough","gfmStrikethroughToMarkdown","containerPhrasing","markdownTable","stringLength","defaultStringLength","alignments","cellMatrix","sizeMatrix","longestCellByColumn","mostCellsPerRow","rowIndex","sizes","columnIndex","serialize","alignDelimiters","toAlignment","repeat","lines","delimiterStart","padding","delimiterEnd","patternInScope","pattern","listInScope","none","_1","longestStreak","substring","expected","formatCodeAsIndented","fences","checkFence","fence","checkQuote","quote","checkEmphasis","emphasisPeek","testOrVisitor","visitorOrReverse","maybeReverse","formatHeadingAsSetext","literalWithBreak","setext","rank","lastIndexOf","closeAtx","htmlPeek","imagePeek","imageReferencePeek","inlineCodePeek","expression","compilePattern","formatLinkAsAutolink","resourceLink","linkPeek","linkReferencePeek","checkBullet","checkBulletOther","bulletOther","checkBulletOrdered","bulletOrdered","checkRule","rule","bulletCurrent","useDifferentMarker","bulletLastUsed","firstListItem","indexStack","checkListItemIndent","style","listItemIndent","incrementListMarker","phrasing","hasPhrasing","some","checkStrong","strongPeek","checkRuleRepetition","repetition","ruleRepetition","ruleSpaces","handle","gfmTableFromMarkdown","enterTable","tableData","enterCell","tableHeader","tableRow","enterRow","exitCodeText","exitTable","_align","inTable","gfmTableToMarkdown","tableCellPadding","tablePipeAlign","around","inlineCodeWithTable","handleTable","tableCell","handleTableCell","handleTableRow","serializeData","handleTableAsData","handleTableRowAsData","matrix","defaultHandlers","gfmTaskListItemFromMarkdown","taskListCheckValueChecked","exitCheck","taskListCheckValueUnchecked","exitParagraphWithTaskListItem","gfmTaskListItemToMarkdown","listItemWithTaskListItem","firstParaghraph","sibling","checkable","checkbox","gfmFromMarkdown","gfmToMarkdown","wwwPrefix","tokenizeWwwPrefix","tokenizeDomain","tokenizePath","tokenizeTrail","emailDomainDotTrail","tokenizeEmailDomainDotTrail","wwwAutolink","tokenizeWwwAutolink","previousWww","protocolAutolink","tokenizeProtocolAutolink","previousProtocol","emailAutolink","tokenizeEmailAutolink","previousEmail","gfmAutolinkLiteral","gfmAtext","previousUnbalanced","emailDomain","emailDomainAfter","emailDomainDot","wwwStart","wwwAfter","protocolStart","fromCodePoint","protocolPrefixInside","protocolSlashesInside","afterProtocol","protocolAfter","wwwPrefixInside","wwwPrefixAfter","underscoreInLastSegment","underscoreInLastLastSegment","domainInside","domainAfter","domainAtPunctuation","sizeClose","pathInside","pathAtPunctuation","trailCharRefStart","trailBracketAfter","trailCharRefInside","_gfmAutolinkLiteralWalkedInto","indent","gfmFootnote","tokenizeDefinitionStart","tokenizeDefinitionContinuation","gfmFootnoteDefinitionEnd","tokenizeGfmFootnoteCall","tokenizePotentialGfmFootnoteCall","resolveToPotentialGfmFootnoteCall","gfmFootnotes","replacement","callStart","callData","callEscape","labelAtMarker","whitespaceAfter","gfmStrikethrough","options_","single","singleTilde","tokenizeStrikethrough","resolveAllStrikethrough","EditMap","addImpl","sort","a","b","vecs","editMap","at","gfmTableAlign","inDelimiterRow","alignIndex","gfmTable","tokenizeTable","resolveTable","sizeB","bodyRowStart","headRowBefore","headRowStart","headRowBreak","headDelimiterStart","headRowData","headRowEscape","headDelimiterBefore","headDelimiterValueBefore","headDelimiterCellBefore","headDelimiterNok","headDelimiterLeftAlignmentAfter","headDelimiterCellAfter","headDelimiterFiller","headDelimiterRightAlignmentAfter","bodyRowBreak","bodyRowData","bodyRowEscape","inFirstCellAwaitingPipe","rowKind","lastCell","afterHeadAwaitingFirstBodyRow","lastTableEnd","currentTable","currentBody","currentCell","flushTableEnd","flushCell","rowEnd","previousCell","groupName","valueName","getPoint","relatedStart","relatedEnd","valueToken","tableBody","exits","related","side","tasklistCheck","tokenizeTasklistCheck","gfmTaskListItem","spaceThenNonSpace","gfm","remarkGfm","micromarkExtensions","fromMarkdownExtensions","toMarkdownExtensions","normalizeIdentifier_1","markdownLineEnding_1","markdownSpace_1","spaceFactory","partialBlankLine","tokenizePartialBlankLine","partialBlankLine_1","splice_1","chunkedSplice","chunkedSplice_1","sizeChunks","sizeChunks_1","prefixSize","prefixSize_1","assign_1","shallow","object","shallow_1","resolveAll_1","micromarkExtensionFootnote","tokenizeFootnoteCall","noteStart","tokenizeNoteStart","resolveAllNote","noteEnd","tokenizeNoteEnd","resolveToNoteEnd","footnoteDefinitionEnd","inlineNotes","_hiddenFootnoteSupport","openIndex","note","footnotes","hasStart","nonBlank","createSpace","footnoteDefinitionLabelString","footnoteCall","footnoteCallString","inlineNote","enterNote","exitNote","semicolon","decodeEntity_browser","decodeEntity","characters","entity","char","createElement","innerHTML","textContent","association_1","association","decodeIfPossible","safeOptions","results","repeatString","indentLines_1","eol","patternCompile_1","patternCompile","_compiled","patternInScope_1","safe_1","positions","infos","numerical","escapeBackslashes","whole","handlers$1","footnotePeek","warningIssued","remarkFootnotes","blockTokenizers","visitors","syntax","toMarkdown","assertion","convertElement","element","tagNameFactory","ABSOLUTE_URL_REGEX","WINDOWS_PATH_REGEX","isAbsoluteUrl","defaultRel","defaultProtocols","callIfNeeded","rehypeExternalLinks","relRaw","rel","protocols","contentRaw","contentProperties","startsWith","immutable","lib$2","wrapper","nodeSchema","doctype","handleDoctype","handleComment","handleTagName","handleProperties","handleValue","allow","schema","xtend","defaults","allowed","strip","reqs","required","toPropertyValueMap","attributes","handlePropertyValues","handlePropertyValue","handleProtocol","clobber","clobberPrefix","questionMark","numberSign","handleDoctypeName","tagNames","ancestors","allowDoctypes","allowComments","handleCommentValue","hastUtilSanitize","rehypeSanitize","sanitize","clean","Schema","space","normal","property","merge_1","merge","normalize_1","Info","attribute","boolean","booleanish","overloadedBoolean","number","commaSeparated","spaceSeparated","commaOrSpaceSeparated","mustUseProperty","powers","boolean_1","increment","booleanish$2","overloadedBoolean$1","number$3","spaceSeparated$3","commaSeparated$2","commaOrSpaceSeparated$1","pow","definedInfo","DefinedInfo","checksLength","mask","mark","types","create_1","transform","xlink$1","xlinkTransform","xLinkActuate","xLinkArcRole","xLinkHref","xLinkRole","xLinkShow","xLinkTitle","xLinkType","xml$1","xmlTransform","xmlLang","xmlBase","xmlSpace","caseSensitiveTransform_1","caseSensitiveTransform","caseInsensitiveTransform_1","caseInsensitiveTransform","xmlns$1","xmlnsxlink","xmlns","xmlnsXLink","aria","ariaTransform","ariaActiveDescendant","ariaAtomic","ariaAutoComplete","ariaBusy","ariaChecked","ariaColCount","ariaColIndex","ariaColSpan","ariaControls","ariaCurrent","ariaDescribedBy","ariaDetails","ariaDisabled","ariaDropEffect","ariaErrorMessage","ariaExpanded","ariaFlowTo","ariaGrabbed","ariaHasPopup","ariaHidden","ariaInvalid","ariaKeyShortcuts","ariaLabel","ariaLabelledBy","ariaLevel","ariaLive","ariaModal","ariaMultiLine","ariaMultiSelectable","ariaOrientation","ariaOwns","ariaPlaceholder","ariaPosInSet","ariaPressed","ariaReadOnly","ariaRelevant","ariaRequired","ariaRoleDescription","ariaRowCount","ariaRowIndex","ariaRowSpan","ariaSelected","ariaSetSize","ariaSort","ariaValueMax","ariaValueMin","ariaValueNow","ariaValueText","role","html$5","acceptcharset","classname","htmlfor","httpequiv","abbr","accept","acceptCharset","accessKey","action","allowFullScreen","allowPaymentRequest","allowUserMedia","as","async","autoCapitalize","autoComplete","autoFocus","autoPlay","capture","charSet","cite","cols","colSpan","contentEditable","controls","controlsList","coords","crossOrigin","dateTime","decoding","default","defer","dirName","download","draggable","encType","enterKeyHint","form","formAction","formEncType","formMethod","formNoValidate","formTarget","headers","height","hidden","high","hrefLang","htmlFor","httpEquiv","imageSizes","imageSrcSet","inputMode","integrity","isMap","itemId","itemProp","itemRef","itemScope","itemType","language","loading","loop","low","manifest","maxLength","method","minLength","multiple","muted","nonce","noModule","noValidate","onAbort","onAfterPrint","onAuxClick","onBeforePrint","onBeforeUnload","onBlur","onCancel","onCanPlay","onCanPlayThrough","onChange","onClick","onClose","onContextMenu","onCopy","onCueChange","onCut","onDblClick","onDrag","onDragEnd","onDragEnter","onDragExit","onDragLeave","onDragOver","onDragStart","onDrop","onDurationChange","onEmptied","onEnded","onError","onFocus","onFormData","onHashChange","onInput","onInvalid","onKeyDown","onKeyPress","onKeyUp","onLanguageChange","onLoad","onLoadedData","onLoadedMetadata","onLoadEnd","onLoadStart","onMessage","onMessageError","onMouseDown","onMouseEnter","onMouseLeave","onMouseMove","onMouseOut","onMouseOver","onMouseUp","onOffline","onOnline","onPageHide","onPageShow","onPaste","onPause","onPlay","onPlaying","onPopState","onProgress","onRateChange","onRejectionHandled","onReset","onResize","onScroll","onSecurityPolicyViolation","onSeeked","onSeeking","onSelect","onSlotChange","onStalled","onStorage","onSubmit","onSuspend","onTimeUpdate","onToggle","onUnhandledRejection","onUnload","onVolumeChange","onWaiting","onWheel","optimum","ping","placeholder","playsInline","poster","preload","readOnly","referrerPolicy","reversed","rowSpan","sandbox","scope","scoped","seamless","selected","shape","slot","span","spellCheck","srcDoc","srcLang","srcSet","tabIndex","translate","typeMustMatch","useMap","width","aLink","archive","axis","background","bgColor","border","borderColor","bottomMargin","cellPadding","cellSpacing","charOff","classId","clear","codeBase","codeType","compact","declare","face","frame","frameBorder","hSpace","leftMargin","longDesc","lowSrc","marginHeight","marginWidth","noResize","noHref","noShade","noWrap","profile","prompt","rev","rightMargin","rules","scheme","scrolling","standby","summary","topMargin","valueType","version","vAlign","vLink","vSpace","allowTransparency","autoCorrect","autoSave","disablePictureInPicture","disableRemotePlayback","security","unselectable","html_1$1","xml","xlink","svg$2","accentHeight","alignmentBaseline","arabicForm","baselineShift","capHeight","clipPath","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","dataType","dominantBaseline","enableBackground","fillOpacity","fillRule","floodColor","floodOpacity","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","horizAdvX","horizOriginX","horizOriginY","imageRendering","letterSpacing","lightingColor","markerEnd","markerMid","markerStart","navDown","navDownLeft","navDownRight","navLeft","navNext","navPrev","navRight","navUp","navUpLeft","navUpRight","onActivate","onBegin","onEnd","onFocusIn","onFocusOut","onMouseWheel","onRepeat","onShow","onZoom","overlinePosition","overlineThickness","paintOrder","panose1","pointerEvents","renderingIntent","shapeRendering","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","strokeDashArray","strokeDashOffset","strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeOpacity","strokeWidth","textAnchor","textDecoration","textRendering","typeOf","underlinePosition","underlineThickness","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","vHanging","vIdeographic","vMathematical","vectorEffect","vertAdvY","vertOriginX","vertOriginY","wordSpacing","writingMode","xHeight","playbackOrder","timelineBegin","about","accumulate","additive","alphabetic","amplitude","ascent","attributeName","attributeType","azimuth","bandwidth","baseFrequency","baseProfile","bbox","bias","by","calcMode","clip","clipPathUnits","contentScriptType","contentStyleType","cursor","cx","cy","defaultAction","descent","diffuseConstant","direction","display","dur","divisor","dx","dy","edgeMode","editable","elevation","exponent","externalResourcesRequired","fill","filterRes","filterUnits","focusable","focusHighlight","format","fr","fx","fy","g1","g2","glyphRef","gradientTransform","gradientUnits","hanging","hatchContentUnits","hatchUnits","ideographic","initialVisibility","in2","intercept","k","k1","k2","k3","k4","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","kerning","lengthAdjust","limitingConeAngle","local","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","mathematical","mediaCharacterEncoding","mediaContentEncodings","mediaSize","mediaTime","mode","numOctaves","observer","opacity","operator","orient","orientation","overflow","overlay","pathLength","patternContentUnits","patternTransform","patternUnits","phase","pitch","points","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","propagate","r","radius","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","requiredFonts","requiredFormats","restart","rotate","ry","scale","seed","slope","snapshotTime","specularConstant","specularExponent","spreadMethod","spacing","startOffset","stdDeviation","stemh","stemv","stitchTiles","stroke","surfaceScale","syncBehavior","syncBehaviorDefault","syncMaster","syncTolerance","syncToleranceDefault","systemLanguage","tableValues","targetX","targetY","textLength","transformBehavior","u1","u2","unicode","viewBox","viewTarget","visibility","widths","x","x1","x2","xChannelSelector","y","y1","y2","yChannelSelector","z","zoomAndPan","svg_1$1","svg","convert_1","callFactory","convertAll","matches","hastUtilIsElement","isElement","hasParent","hasIndex","hastUtilWhitespace","interElementWhiteSpace","re","includeWhiteSpace","whiteSpace","whiteSpaceStart_1","whiteSpaceStart","isText","comment$3","omission_1","omission","omit","closing$1","headOrColgroupOrCaption","body","li","dt","rt","rubyElement","rp","optgroup","option","menuitem","colgroup","caption","thead","tbody","tfoot","tr","td","cells","th","opening$1","closing","opening","core","charactersToExpression","basic","escapeOnly","surrogate","pair","groups","toHexadecimal","toHexReference","toDecimal","toDecimalReference","characters_1","entities","hasOwnProperty_1","toNamed_1","toNamed","legacy","formatSmart","formatPretty","named","decimal","useNamedReferences","useShortestReferences","omitOptionalSemicolons","encode_1","smart","_escape","lib$1","stringifyEntities","comment$2","serializeComment","bogusComments","ccount_1","doctype$3","serializeDoctype","tightDoctype","upperDoctype","public","system","alternative","find_1","valid","Type","datasetToProperty","datasetToAttribute","camelcase","kebab","parse_1$1","stringify_1$1","parse_1","stringify_1","val","padLeft","padRight","all_1","constants","unquoted","double","element$3","serializeElement","selfClosing","closeEmpty","voids","attrs","serializeAttributes","tightClose","serializeAttribute","tight","commas","spaces","tightLists","collapseEmpty","text$3","serializeText","serializeRaw","one$1","lib","toHtml","allowParseErrors","allowDangerousCharacters","omitOptionalTags","quoteSmart","preferUnquoted","tightAttributes","tightCommaSeparatedLists","tightSelfClosing","collapseEmptyAttributes","closeSelfClosing","closeEmptyElements","hastUtilToHtml","rehypeStringify","toHTML","UNDEFINED_CODE_POINTS","REPLACEMENT_CHARACTER","CODE_POINTS","EOF","NULL","TABULATION","CARRIAGE_RETURN","LINE_FEED","FORM_FEED","SPACE","EXCLAMATION_MARK","QUOTATION_MARK","NUMBER_SIGN","AMPERSAND","APOSTROPHE","HYPHEN_MINUS","SOLIDUS","DIGIT_0","DIGIT_9","SEMICOLON","LESS_THAN_SIGN","EQUALS_SIGN","GREATER_THAN_SIGN","QUESTION_MARK","LATIN_CAPITAL_A","LATIN_CAPITAL_F","LATIN_CAPITAL_X","LATIN_CAPITAL_Z","RIGHT_SQUARE_BRACKET","GRAVE_ACCENT","LATIN_SMALL_A","LATIN_SMALL_F","LATIN_SMALL_X","LATIN_SMALL_Z","CODE_POINT_SEQUENCES","DASH_DASH_STRING","DOCTYPE_STRING","CDATA_START_STRING","SCRIPT_STRING","PUBLIC_STRING","SYSTEM_STRING","isSurrogate","cp","isSurrogatePair","getSurrogatePairCodePoint","cp1","cp2","isControlCodePoint","isUndefinedCodePoint","errorCodes","controlCharacterInInputStream","noncharacterInInputStream","surrogateInInputStream","nonVoidHtmlElementStartTagWithTrailingSolidus","endTagWithAttributes","endTagWithTrailingSolidus","unexpectedSolidusInTag","unexpectedNullCharacter","unexpectedQuestionMarkInsteadOfTagName","invalidFirstCharacterOfTagName","unexpectedEqualsSignBeforeAttributeName","missingEndTagName","unexpectedCharacterInAttributeName","unknownNamedCharacterReference","missingSemicolonAfterCharacterReference","unexpectedCharacterAfterDoctypeSystemIdentifier","unexpectedCharacterInUnquotedAttributeValue","eofBeforeTagName","eofInTag","missingAttributeValue","missingWhitespaceBetweenAttributes","missingWhitespaceAfterDoctypePublicKeyword","missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers","missingWhitespaceAfterDoctypeSystemKeyword","missingQuoteBeforeDoctypePublicIdentifier","missingQuoteBeforeDoctypeSystemIdentifier","missingDoctypePublicIdentifier","missingDoctypeSystemIdentifier","abruptDoctypePublicIdentifier","abruptDoctypeSystemIdentifier","cdataInHtmlContent","incorrectlyOpenedComment","eofInScriptHtmlCommentLikeText","eofInDoctype","nestedComment","abruptClosingOfEmptyComment","eofInComment","incorrectlyClosedComment","eofInCdata","absenceOfDigitsInNumericCharacterReference","nullCharacterReference","surrogateCharacterReference","characterReferenceOutsideUnicodeRange","controlCharacterReference","noncharacterCharacterReference","missingWhitespaceBeforeDoctypeName","missingDoctypeName","invalidCharacterSequenceAfterDoctypeName","duplicateAttribute","nonConformingDoctype","missingDoctype","misplacedDoctype","endTagWithoutMatchingOpenElement","closingOfElementWithOpenChildElements","disallowedContentInNoscriptInHead","openElementsLeftAfterEof","abandonedHeadElementChild","misplacedStartTagForHeadElement","nestedNoscriptInHead","eofInElementThatCanContainOnlyText","$","DEFAULT_BUFFER_WATERLINE","Preprocessor","lastGapPos","lastCharPos","gapStack","skipNextNewLine","lastChunkWritten","endOfChunkHit","bufferWaterline","_err","_addGap","_processSurrogate","nextCp","ERR","dropParsedChunk","isLastChunk","insertHtmlAtCurrentPos","advance","isCommonValidRange","_checkForProblematicCharacters","retreat","namedEntityData","Uint16Array","$$","C1_CONTROLS_REFERENCE_REPLACEMENTS","HAS_DATA_FLAG","DATA_DUPLET_FLAG","HAS_BRANCHES_FLAG","MAX_BRANCH_MARKER_VALUE","DATA_STATE","RCDATA_STATE","RAWTEXT_STATE","SCRIPT_DATA_STATE","PLAINTEXT_STATE","TAG_OPEN_STATE","END_TAG_OPEN_STATE","TAG_NAME_STATE","RCDATA_LESS_THAN_SIGN_STATE","RCDATA_END_TAG_OPEN_STATE","RCDATA_END_TAG_NAME_STATE","RAWTEXT_LESS_THAN_SIGN_STATE","RAWTEXT_END_TAG_OPEN_STATE","RAWTEXT_END_TAG_NAME_STATE","SCRIPT_DATA_LESS_THAN_SIGN_STATE","SCRIPT_DATA_END_TAG_OPEN_STATE","SCRIPT_DATA_END_TAG_NAME_STATE","SCRIPT_DATA_ESCAPE_START_STATE","SCRIPT_DATA_ESCAPE_START_DASH_STATE","SCRIPT_DATA_ESCAPED_STATE","SCRIPT_DATA_ESCAPED_DASH_STATE","SCRIPT_DATA_ESCAPED_DASH_DASH_STATE","SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE","SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE","SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE","SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE","SCRIPT_DATA_DOUBLE_ESCAPED_STATE","SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE","SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE","SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE","SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE","BEFORE_ATTRIBUTE_NAME_STATE","ATTRIBUTE_NAME_STATE","AFTER_ATTRIBUTE_NAME_STATE","BEFORE_ATTRIBUTE_VALUE_STATE","ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE","ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE","ATTRIBUTE_VALUE_UNQUOTED_STATE","AFTER_ATTRIBUTE_VALUE_QUOTED_STATE","SELF_CLOSING_START_TAG_STATE","BOGUS_COMMENT_STATE","MARKUP_DECLARATION_OPEN_STATE","COMMENT_START_STATE","COMMENT_START_DASH_STATE","COMMENT_STATE","COMMENT_LESS_THAN_SIGN_STATE","COMMENT_LESS_THAN_SIGN_BANG_STATE","COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE","COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE","COMMENT_END_DASH_STATE","COMMENT_END_STATE","COMMENT_END_BANG_STATE","DOCTYPE_STATE","BEFORE_DOCTYPE_NAME_STATE","DOCTYPE_NAME_STATE","AFTER_DOCTYPE_NAME_STATE","AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE","BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE","DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE","DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE","AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE","BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE","AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE","BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE","DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE","DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE","AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE","BOGUS_DOCTYPE_STATE","CDATA_SECTION_STATE","CDATA_SECTION_BRACKET_STATE","CDATA_SECTION_END_STATE","CHARACTER_REFERENCE_STATE","NAMED_CHARACTER_REFERENCE_STATE","AMBIGUOUS_AMPERSAND_STATE","NUMERIC_CHARACTER_REFERENCE_STATE","HEXADEMICAL_CHARACTER_REFERENCE_START_STATE","DECIMAL_CHARACTER_REFERENCE_START_STATE","HEXADEMICAL_CHARACTER_REFERENCE_STATE","DECIMAL_CHARACTER_REFERENCE_STATE","NUMERIC_CHARACTER_REFERENCE_END_STATE","isWhitespace","isAsciiDigit","isAsciiUpper","isAsciiLower","isAsciiLetter","isAsciiAlphaNumeric","isAsciiUpperHexDigit","isAsciiLowerHexDigit","isAsciiHexDigit","toAsciiLowerCodePoint","toChar","toAsciiLowerChar","findNamedEntityTreeBranch","nodeIx","branchCount","neTree","lo","hi","midCp","Tokenizer","tokenQueue","allowCDATA","charRefCode","tempBuff","lastStartTagName","consumedAfterSnapshot","active","currentCharacterToken","currentToken","currentAttr","_errOnNextCodePoint","_consume","_unconsume","getNextToken","_ensureHibernation","HIBERNATION_TOKEN","_reconsumeInState","_consumeSequenceIfMatch","startCp","caseSensitive","consumedCount","isMatch","patternLength","patternPos","patternCp","_isTempBufferEqualToScriptString","_createStartTagToken","START_TAG_TOKEN","ackSelfClosing","_createEndTagToken","END_TAG_TOKEN","_createCommentToken","COMMENT_TOKEN","_createDoctypeToken","initialName","DOCTYPE_TOKEN","forceQuirks","publicId","systemId","_createCharacterToken","chars","_createEOFToken","EOF_TOKEN","_createAttr","attrNameFirstCh","_leaveAttrName","toState","getTokenAttr","_leaveAttrValue","_emitCurrentToken","_emitCurrentCharacterToken","ct","_emitEOFToken","_appendCharToCurrentCharacterToken","_emitCodePoint","CHARACTER_TOKEN","WHITESPACE_CHARACTER_TOKEN","NULL_CHARACTER_TOKEN","_emitSeveralCodePoints","codePoints","_emitChars","_matchNamedCharacterReference","excess","inNode","nodeWithData","_isCharacterReferenceInAttribute","_isCharacterReferenceAttributeQuirk","withSemicolon","_flushCodePointsConsumedAsCharacterReference","matchResult","MODE","DATA","RCDATA","RAWTEXT","SCRIPT_DATA","PLAINTEXT","attrName","NS","exports","NAMESPACES","HTML","MATHML","SVG","XLINK","XML","XMLNS","ATTRS","TYPE","ACTION","ENCODING","PROMPT","NAME","COLOR","FACE","SIZE","DOCUMENT_MODE","NO_QUIRKS","QUIRKS","LIMITED_QUIRKS","TAG_NAMES","A","ADDRESS","ANNOTATION_XML","APPLET","AREA","ARTICLE","ASIDE","B","BASE","BASEFONT","BGSOUND","BIG","BLOCKQUOTE","BODY","BR","BUTTON","CAPTION","CENTER","CODE","COL","COLGROUP","DESC","DETAILS","DIALOG","DIR","DIV","DL","DT","EM","EMBED","FIELDSET","FIGCAPTION","FIGURE","FONT","FOOTER","FOREIGN_OBJECT","FORM","FRAME","FRAMESET","H1","H2","H3","H4","H5","H6","HEAD","HEADER","HGROUP","HR","I","IMG","IMAGE","INPUT","IFRAME","KEYGEN","LABEL","LI","LINK","LISTING","MAIN","MALIGNMARK","MARQUEE","MATH","MENU","META","MGLYPH","MI","MO","MN","MS","MTEXT","NAV","NOBR","NOFRAMES","NOEMBED","NOSCRIPT","OBJECT","OL","OPTGROUP","OPTION","P","PARAM","PRE","RB","RP","RT","RTC","RUBY","S","SCRIPT","SECTION","SELECT","SOURCE","SMALL","SPAN","STRIKE","STRONG","STYLE","SUB","SUMMARY","SUP","TABLE","TBODY","TEMPLATE","TEXTAREA","TFOOT","TD","TH","THEAD","TITLE","TR","TRACK","TT","U","UL","VAR","WBR","XMP","SPECIAL_ELEMENTS","isImpliedEndTagRequired","tn","isImpliedEndTagRequiredThoroughly","isScopingElement","ns","OpenElementStack","treeAdapter","stackTop","currentTagName","currentTmplContent","tmplCount","_indexOf","idx","_isInTemplate","getNamespaceURI","_updateCurrentElement","getTagName","getTemplateContent","oldElement","newElement","insertAfter","referenceElement","insertionIdx","popUntilTagNamePopped","popUntilElementPopped","poppedElement","popUntilNumberedHeaderPopped","popUntilTableCellPopped","popAllUpToHtmlElement","clearBackToTableContext","clearBackToTableBodyContext","clearBackToTableRowContext","tryPeekProperlyNestedBodyElement","contains","getCommonAncestor","elementIdx","isRootHtmlElementCurrent","hasInScope","hasNumberedHeaderInScope","hasInListItemScope","hasInButtonScope","hasInTableScope","hasTableBodyContextInTableScope","hasInSelectScope","generateImpliedEndTags","generateImpliedEndTagsThoroughly","generateImpliedEndTagsWithExclusion","exclusionTagName","openElementStack","NOAH_ARK_CAPACITY","FormattingElementList","entries","bookmark","_getNoahArkConditionCandidates","candidates","neAttrsLength","getAttrList","neTagName","neNamespaceURI","MARKER_ENTRY","elementAttrs","isCandidate","_ensureNoahArkCondition","cLength","neAttrs","neAttrsMap","neAttr","j","cAttr","insertMarker","pushElement","ELEMENT_ENTRY","insertElementAfterBookmark","bookmarkIdx","removeEntry","clearToLastMarker","getElementEntryInScopeWithTagName","getElementEntry","formattingElementList","Mixin","host","originalMethods","overriddenMethods","_getOverriddenMethods","install","Ctor","opts","__mixins","mixin","PositionTrackingPreprocessorMixin","super","isEol","lineStartPos","droppedBufferSize","col","mxn","orig","prevPos","reduction","preprocessorMixin$1","LocationInfoTokenizerMixin","posTracker","currentAttrLocation","ctLoc","_getCurrentLocation","startLine","startCol","endLine","endCol","endOffset","_attachCurrentAttrLocationInfo","methods","forEach","modeName","tokenizerMixin$1","LocationInfoOpenElementStackMixin","onItemPop","openElementStackMixin","LocationInfoParserMixin","lastStartTagToken","lastFosterParentingLocation","_setStartLocation","loc","startTag","setNodeSourceCodeLocation","_setEndLocation","closingToken","getNodeSourceCodeLocation","isClosingEndTag","endLoc","endTag","updateNodeSourceCodeLocation","_bootstrap","fragmentContext","tokenizerMixin","openElements","_runParsingLoop","scriptHandler","_processTokenInForeignContent","_processToken","requireExplicitUpdate","_setDocumentType","documentChildren","getChildNodes","cnLength","isDocumentTypeNode","_attachElementToTree","_appendElement","namespaceURI","_insertElement","_insertTemplate","tmplContent","_insertFakeRootElement","_appendCommentNode","commentNode","_findFosterParentingLocation","_insertCharacters","hasFosterParent","_shouldFosterParentOnInsertion","textNodeIdx","beforeElement","textNode","tnLoc","parserMixin$1","ErrorReportingMixinBase","onParseError","_setErrorLocation","_reportError","mixinBase","ErrorReportingPreprocessorMixin","lastErrOffset","preprocessorMixin","ErrorReportingTokenizerMixin","ErrorReportingParserMixin","locBeforeToken","_processInputToken","beforeToken","parserMixin","createDocument","nodeName","childNodes","createDocumentFragment","parentNode","createCommentNode","createTextNode","appendChild","newNode","insertBefore","referenceNode","setTemplateContent","templateElement","contentElement","setDocumentType","doctypeNode","setDocumentMode","getDocumentMode","detachNode","insertText","prevNode","insertTextBefore","adoptAttributes","recipient","recipientAttrsMap","getFirstChild","getParentNode","getTextNodeContent","getCommentNodeContent","getDocumentTypeNodeName","getDocumentTypeNodePublicId","getDocumentTypeNodeSystemId","isTextNode","isCommentNode","isElementNode","sourceCodeLocation","endLocation","mergeOptions","reduce","merged","optObj","VALID_DOCTYPE_NAME","VALID_SYSTEM_ID","QUIRKS_MODE_SYSTEM_ID","QUIRKS_MODE_PUBLIC_ID_PREFIXES","QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES","QUIRKS_MODE_PUBLIC_IDS","LIMITED_QUIRKS_PUBLIC_ID_PREFIXES","LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES","enquoteDoctypeId","hasPrefix","prefixes","isConforming","serializeContent","MIME_TYPES","TEXT_HTML","APPLICATION_XML","DEFINITION_URL_ATTR","ADJUSTED_DEFINITION_URL_ATTR","SVG_ATTRS_ADJUSTMENT_MAP","attributename","attributetype","basefrequency","baseprofile","calcmode","clippathunits","diffuseconstant","edgemode","filterunits","glyphref","gradienttransform","gradientunits","kernelmatrix","kernelunitlength","keypoints","keysplines","keytimes","lengthadjust","limitingconeangle","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","numoctaves","pathlength","patterncontentunits","patterntransform","patternunits","pointsatx","pointsaty","pointsatz","preservealpha","preserveaspectratio","primitiveunits","refx","refy","repeatcount","repeatdur","requiredextensions","requiredfeatures","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","surfacescale","systemlanguage","tablevalues","targetx","targety","textlength","viewbox","viewtarget","xchannelselector","ychannelselector","zoomandpan","XML_ATTRS_ADJUSTMENT_MAP","SVG_TAG_NAMES_ADJUSTMENT_MAP","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","clippath","feblend","fecolormatrix","fecomponenttransfer","fecomposite","feconvolvematrix","fediffuselighting","fedisplacementmap","fedistantlight","feflood","fefunca","fefuncb","fefuncg","fefuncr","fegaussianblur","feimage","femerge","femergenode","femorphology","feoffset","fepointlight","fespecularlighting","fespotlight","fetile","feturbulence","foreignobject","lineargradient","radialgradient","textpath","EXITS_FOREIGN_CONTENT","causesExit","startTagToken","isFontWithAttrs","adjustTokenMathMLAttrs","adjustTokenSVGAttrs","adjustedAttrName","adjustTokenXMLAttrs","adjustedAttrEntry","adjustTokenSVGTagName","adjustedTagName","isMathMLTextIntegrationPoint","isHtmlIntegrationPoint","isIntegrationPoint","foreignNS","DEFAULT_OPTIONS","scriptingEnabled","sourceCodeLocationInfo","defaultTreeAdapter","HIDDEN_INPUT_TYPE","AA_OUTER_LOOP_ITER","AA_INNER_LOOP_ITER","INITIAL_MODE","BEFORE_HTML_MODE","BEFORE_HEAD_MODE","IN_HEAD_MODE","IN_HEAD_NO_SCRIPT_MODE","AFTER_HEAD_MODE","IN_BODY_MODE","TEXT_MODE","IN_TABLE_MODE","IN_TABLE_TEXT_MODE","IN_CAPTION_MODE","IN_COLUMN_GROUP_MODE","IN_TABLE_BODY_MODE","IN_ROW_MODE","IN_CELL_MODE","IN_SELECT_MODE","IN_SELECT_IN_TABLE_MODE","IN_TEMPLATE_MODE","AFTER_BODY_MODE","IN_FRAMESET_MODE","AFTER_FRAMESET_MODE","AFTER_AFTER_BODY_MODE","AFTER_AFTER_FRAMESET_MODE","INSERTION_MODE_RESET_MAP","TEMPLATE_INSERTION_MODE_SWITCH_MAP","TOKEN_HANDLERS","tokenInInitialMode","ignoreToken","appendComment","doctypeInInitialMode","tokenBeforeHtml","startTagBeforeHtml","endTagBeforeHtml","tokenBeforeHead","startTagBeforeHead","endTagBeforeHead","tokenInHead","insertCharacters","startTagInHead","endTagInHead","tokenInHeadNoScript","startTagInHeadNoScript","endTagInHeadNoScript","tokenAfterHead","startTagAfterHead","endTagAfterHead","characterInBody","whitespaceCharacterInBody","startTagInBody","endTagInBody","eofInBody","endTagInText","eofInText","characterInTable","startTagInTable","endTagInTable","characterInTableText","whitespaceCharacterInTableText","tokenInTableText","startTagInCaption","endTagInCaption","tokenInColumnGroup","startTagInColumnGroup","endTagInColumnGroup","startTagInTableBody","endTagInTableBody","startTagInRow","endTagInRow","startTagInCell","endTagInCell","startTagInSelect","endTagInSelect","startTagInSelectInTable","endTagInSelectInTable","startTagInTemplate","endTagInTemplate","eofInTemplate","tokenAfterBody","appendCommentToRootHtmlElement","startTagAfterBody","endTagAfterBody","stopParsing","startTagInFrameset","endTagInFrameset","startTagAfterFrameset","endTagAfterFrameset","tokenAfterAfterBody","appendCommentToDocument","startTagAfterAfterBody","startTagAfterAfterFrameset","pendingScript","parseFragment","documentMock","_pushTmplInsertionMode","_initTokenizerForFragmentParsing","_resetInsertionMode","_findFormInFragmentContext","rootElement","_adoptNodes","stopped","insertionMode","originalInsertionMode","headElement","formElement","activeFormattingElements","tmplInsertionModeStack","tmplInsertionModeStackTop","currentTmplInsertionMode","pendingCharacterTokens","hasNonWhitespacePendingCharacterToken","framesetOk","fosterParentingEnabled","_setupTokenizerCDATAMode","runParsingLoopForCurrentChunk","writeCallback","script","_getAdjustedCurrentElement","_isIntegrationPoint","_switchToTextParsing","nextTokenizerState","switchToPlaintextParsing","_fosterParentElement","_insertFakeElement","tmpl","_fosterParentText","donor","_shouldProcessTokenInForeignContent","isCharacterToken","isMathMLTextStartTag","_processTokenInBodyMode","characterInForeignContent","nullCharacterInForeignContent","startTagInForeignContent","endTagInForeignContent","foreignContent","_reconstructActiveFormattingElements","listLength","unopenIdx","_closeTableCell","_closePElement","newInsertionMode","_resetInsertionModeForSelect","selectIdx","_popTmplInsertionMode","_isElementCausesFosterParenting","openElement","_isSpecialElement","aaObtainFormattingElementEntry","formattingElementEntry","genericEndTagInBody","aaObtainFurthestBlock","furthestBlock","aaInnerLoop","formattingElement","lastElement","nextElement","elementEntry","counterOverflow","shouldRemoveFromOpenElements","aaRecreateElementFromEntry","aaInsertLastNodeInCommonAncestor","commonAncestor","aaReplaceFormattingElement","callAdoptionAgency","errCode","htmlStartTagInBody","bodyStartTagInBody","bodyElement","framesetStartTagInBody","addressStartTagInBody","numberedHeaderStartTagInBody","preStartTagInBody","formStartTagInBody","inTemplate","listItemStartTagInBody","elementTn","closeTn","plaintextStartTagInBody","buttonStartTagInBody","aStartTagInBody","activeElementEntry","bStartTagInBody","nobrStartTagInBody","appletStartTagInBody","tableStartTagInBody","areaStartTagInBody","inputStartTagInBody","inputType","paramStartTagInBody","hrStartTagInBody","imageStartTagInBody","textareaStartTagInBody","xmpStartTagInBody","iframeStartTagInBody","noembedStartTagInBody","selectStartTagInBody","optgroupStartTagInBody","rbStartTagInBody","rtStartTagInBody","menuStartTagInBody","mathStartTagInBody","svgStartTagInBody","genericStartTagInBody","bodyEndTagInBody","htmlEndTagInBody","addressEndTagInBody","formEndTagInBody","pEndTagInBody","liEndTagInBody","ddEndTagInBody","numberedHeaderEndTagInBody","appletEndTagInBody","brEndTagInBody","curTn","tokenInTable","captionStartTagInTable","colgroupStartTagInTable","colStartTagInTable","tbodyStartTagInTable","tdStartTagInTable","tableStartTagInTable","inputStartTagInTable","formStartTagInTable","savedFosterParentingState","prevOpenElement","prevOpenElementTn","currentNs","hastUtilParseSelector","selector","defaultTagName","subvalue","factory_1","createAdjustMap","parseSelector","isChildren","addProperty","addChild","parsePrimitives","isNode","parsePrimitive","positiveNumber","svg_1","html_1","hastscript","vfileLocation","indices","toPoint","offsetToPoint","toPosition","toOffset","pointToOffset","hastUtilFromParse5","verbose","quirksMode","s","COMMENT_REGEX","NEWLINE_REGEX","WHITESPACE_REGEX","PROPERTY_REGEX","COLON_REGEX","VALUE_REGEX","SEMICOLON_REGEX","TRIM_REGEX","NEWLINE","FORWARD_SLASH","ASTERISK","EMPTY_STRING","TYPE_COMMENT","TYPE_DECLARATION","inlineStyleParser","lineno","updatePosition","Position","whitespace","msg","silent","m","comments","c","ret","declarations","decls","decl","StyleToObject","iterator","output","hasIterator","styleToObject","hastToHyperscript","react","v","vue","vd","vdom","toH","hyperscript","parentSchema","addAttribute","subprop","parseStyle","hastToReact","cleanup","_isVue","styleReplacer","zwitch","noop","Function","invalid","hastUtilToParse5","ignoredSpaces","patch","p5","attr","hastUtilRaw","inTemplateMode","dataState","characterToken","endTagToken","commentToken","doctypeToken","parseOptions","stitches","locationTracker","stitch","fromParse5","documentMode","mend","mock","resetTokenizer","createParse5Location","toParse5","rehypeRaw_1","rehypeRaw","markdownToHTML","forceHardLineBreaks","markdownCss","Markdown","textChanged","render","ref"],"sources":["./node_modules/lodash-es/_createBaseEach.js","./node_modules/lodash-es/_baseEach.js","./node_modules/lodash-es/_baseFilter.js","./node_modules/lodash-es/reject.js","./node_modules/bail/index.js","./node_modules/is-buffer/index.js","./node_modules/extend/index.js","./node_modules/is-plain-obj/index.js","./node_modules/trough/wrap.js","./node_modules/trough/index.js","./node_modules/unist-util-stringify-position/index.js","./node_modules/vfile-message/index.js","./node_modules/rollup-plugin-node-polyfills/polyfills/path.js","./node_modules/replace-ext/index.js","./node_modules/vfile/core.js","./node_modules/vfile/index.js","./node_modules/unified/index.js","./node_modules/mdast-util-from-markdown/node_modules/mdast-util-to-string/lib/index.js","./node_modules/decode-named-character-reference/node_modules/character-entities/index.js","./node_modules/decode-named-character-reference/index.js","./node_modules/micromark-util-chunked/index.js","./node_modules/micromark-util-combine-extensions/index.js","./node_modules/micromark-util-decode-numeric-character-reference/index.js","./node_modules/micromark-util-normalize-identifier/index.js","./node_modules/micromark-util-character/index.js","./node_modules/micromark-factory-space/index.js","./node_modules/mdast-util-from-markdown/node_modules/micromark/lib/initialize/content.js","./node_modules/mdast-util-from-markdown/node_modules/micromark/lib/initialize/document.js","./node_modules/micromark-util-classify-character/index.js","./node_modules/micromark-util-resolve-all/index.js","./node_modules/micromark-core-commonmark/lib/attention.js","./node_modules/micromark-core-commonmark/lib/autolink.js","./node_modules/micromark-core-commonmark/lib/blank-line.js","./node_modules/micromark-core-commonmark/lib/block-quote.js","./node_modules/micromark-core-commonmark/lib/character-escape.js","./node_modules/micromark-core-commonmark/lib/character-reference.js","./node_modules/micromark-core-commonmark/lib/code-fenced.js","./node_modules/micromark-core-commonmark/lib/code-indented.js","./node_modules/micromark-core-commonmark/lib/code-text.js","./node_modules/micromark-util-subtokenize/index.js","./node_modules/micromark-core-commonmark/lib/content.js","./node_modules/micromark-factory-destination/index.js","./node_modules/micromark-factory-label/index.js","./node_modules/micromark-factory-title/index.js","./node_modules/micromark-factory-whitespace/index.js","./node_modules/micromark-core-commonmark/lib/definition.js","./node_modules/micromark-core-commonmark/lib/hard-break-escape.js","./node_modules/micromark-core-commonmark/lib/heading-atx.js","./node_modules/micromark-util-html-tag-name/index.js","./node_modules/micromark-core-commonmark/lib/html-flow.js","./node_modules/micromark-core-commonmark/lib/html-text.js","./node_modules/micromark-core-commonmark/lib/label-end.js","./node_modules/micromark-core-commonmark/lib/label-start-image.js","./node_modules/micromark-core-commonmark/lib/label-start-link.js","./node_modules/micromark-core-commonmark/lib/line-ending.js","./node_modules/micromark-core-commonmark/lib/thematic-break.js","./node_modules/micromark-core-commonmark/lib/list.js","./node_modules/micromark-core-commonmark/lib/setext-underline.js","./node_modules/mdast-util-from-markdown/node_modules/micromark/lib/initialize/flow.js","./node_modules/mdast-util-from-markdown/node_modules/micromark/lib/initialize/text.js","./node_modules/mdast-util-from-markdown/node_modules/micromark/lib/create-tokenizer.js","./node_modules/mdast-util-from-markdown/node_modules/micromark/lib/constructs.js","./node_modules/mdast-util-from-markdown/node_modules/micromark/lib/parse.js","./node_modules/mdast-util-from-markdown/node_modules/micromark/lib/postprocess.js","./node_modules/mdast-util-from-markdown/node_modules/micromark/lib/preprocess.js","./node_modules/micromark-util-decode-string/index.js","./node_modules/mdast-util-from-markdown/node_modules/unist-util-stringify-position/lib/index.js","./node_modules/mdast-util-from-markdown/lib/index.js","./node_modules/remark-parse/lib/index.js","./node_modules/unist-builder/index.js","./node_modules/unist-util-is/convert.js","./node_modules/unist-util-visit-parents/color.browser.js","./node_modules/unist-util-visit-parents/index.js","./node_modules/unist-util-visit/index.js","./node_modules/unist-util-position/index.js","./node_modules/unist-util-generated/index.js","./node_modules/mdast-util-definitions/index.js","./node_modules/mdast-util-to-hast/lib/all.js","./node_modules/mdast-util-to-hast/lib/one.js","./node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js","./node_modules/mdast-util-to-hast/lib/wrap.js","./node_modules/mdast-util-to-hast/lib/handlers/list.js","./node_modules/mdast-util-to-hast/lib/footer.js","./node_modules/mdast-util-to-hast/lib/handlers/blockquote.js","./node_modules/mdast-util-to-hast/lib/handlers/break.js","./node_modules/mdast-util-to-hast/lib/handlers/code.js","./node_modules/mdast-util-to-hast/lib/handlers/delete.js","./node_modules/mdast-util-to-hast/lib/handlers/emphasis.js","./node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js","./node_modules/mdast-util-to-hast/lib/handlers/footnote.js","./node_modules/mdast-util-to-hast/lib/handlers/heading.js","./node_modules/mdast-util-to-hast/lib/handlers/html.js","./node_modules/mdurl/encode.js","./node_modules/mdast-util-to-hast/lib/revert.js","./node_modules/mdast-util-to-hast/lib/handlers/image-reference.js","./node_modules/mdast-util-to-hast/lib/handlers/image.js","./node_modules/mdast-util-to-hast/lib/handlers/inline-code.js","./node_modules/mdast-util-to-hast/lib/handlers/link-reference.js","./node_modules/mdast-util-to-hast/lib/handlers/link.js","./node_modules/mdast-util-to-hast/lib/handlers/list-item.js","./node_modules/mdast-util-to-hast/lib/handlers/paragraph.js","./node_modules/mdast-util-to-hast/lib/handlers/root.js","./node_modules/mdast-util-to-hast/lib/handlers/strong.js","./node_modules/mdast-util-to-hast/lib/handlers/table.js","./node_modules/mdast-util-to-hast/lib/handlers/text.js","./node_modules/mdast-util-to-hast/lib/handlers/index.js","./node_modules/mdast-util-to-hast/lib/index.js","./node_modules/mdast-util-to-hast/index.js","./node_modules/remark-rehype/index.js","./node_modules/mdast-util-gfm-autolink-literal/node_modules/ccount/index.js","./node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp/index.js","./node_modules/mdast-util-find-and-replace/node_modules/unist-util-is/lib/index.js","./node_modules/mdast-util-find-and-replace/node_modules/unist-util-visit-parents/lib/index.js","./node_modules/mdast-util-find-and-replace/lib/index.js","./node_modules/mdast-util-gfm-autolink-literal/lib/index.js","./node_modules/mdast-util-gfm-footnote/lib/index.js","./node_modules/mdast-util-gfm-strikethrough/lib/index.js","./node_modules/markdown-table/index.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/handle/blockquote.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/util/pattern-in-scope.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/handle/break.js","./node_modules/mdast-util-gfm-table/node_modules/longest-streak/index.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/util/format-code-as-indented.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/util/check-fence.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/handle/code.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/util/check-quote.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/handle/definition.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/util/check-emphasis.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/handle/emphasis.js","./node_modules/mdast-util-gfm-table/node_modules/unist-util-is/lib/index.js","./node_modules/mdast-util-gfm-table/node_modules/unist-util-visit-parents/lib/index.js","./node_modules/mdast-util-gfm-table/node_modules/unist-util-visit/lib/index.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-string/lib/index.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/util/format-heading-as-setext.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/handle/heading.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/handle/html.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/handle/image.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/handle/image-reference.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/handle/inline-code.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/util/format-link-as-autolink.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/handle/link.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/handle/link-reference.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/util/check-bullet.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/util/check-bullet-other.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/util/check-bullet-ordered.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/util/check-rule.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/handle/list.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/handle/list-item.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/handle/paragraph.js","./node_modules/mdast-util-phrasing/node_modules/unist-util-is/lib/index.js","./node_modules/mdast-util-phrasing/lib/index.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/handle/root.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/util/check-strong.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/handle/strong.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/handle/text.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/util/check-rule-repetition.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/handle/thematic-break.js","./node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown/lib/handle/index.js","./node_modules/mdast-util-gfm-table/lib/index.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/handle/blockquote.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/util/pattern-in-scope.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/handle/break.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/longest-streak/index.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/util/format-code-as-indented.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/util/check-fence.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/handle/code.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/util/check-quote.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/handle/definition.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/util/check-emphasis.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/handle/emphasis.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/unist-util-is/lib/index.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/unist-util-visit-parents/lib/index.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/unist-util-visit/lib/index.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-string/lib/index.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/util/format-heading-as-setext.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/handle/heading.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/handle/html.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/handle/image.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/handle/image-reference.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/handle/inline-code.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/util/format-link-as-autolink.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/handle/link.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/handle/link-reference.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/util/check-bullet.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/util/check-bullet-other.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/util/check-bullet-ordered.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/util/check-rule.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/handle/list.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/handle/list-item.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/handle/paragraph.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/handle/root.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/util/check-strong.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/handle/strong.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/handle/text.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/util/check-rule-repetition.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/handle/thematic-break.js","./node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown/lib/handle/index.js","./node_modules/mdast-util-gfm-task-list-item/lib/index.js","./node_modules/mdast-util-gfm/lib/index.js","./node_modules/micromark-extension-gfm-autolink-literal/lib/syntax.js","./node_modules/micromark-extension-gfm-footnote/lib/syntax.js","./node_modules/micromark-extension-gfm-strikethrough/lib/syntax.js","./node_modules/micromark-extension-gfm-table/lib/edit-map.js","./node_modules/micromark-extension-gfm-table/lib/infer.js","./node_modules/micromark-extension-gfm-table/lib/syntax.js","./node_modules/micromark-extension-gfm-task-list-item/lib/syntax.js","./node_modules/micromark-extension-gfm/index.js","./node_modules/remark-gfm/lib/index.js","./node_modules/micromark/dist/util/normalize-identifier.js","./node_modules/micromark/dist/character/markdown-line-ending.js","./node_modules/micromark/dist/character/markdown-space.js","./node_modules/micromark/dist/tokenize/factory-space.js","./node_modules/micromark/dist/tokenize/partial-blank-line.js","./node_modules/micromark/dist/constant/splice.js","./node_modules/micromark/dist/util/chunked-splice.js","./node_modules/micromark/dist/util/size-chunks.js","./node_modules/micromark/dist/util/prefix-size.js","./node_modules/micromark/dist/constant/assign.js","./node_modules/micromark/dist/util/shallow.js","./node_modules/micromark/dist/util/resolve-all.js","./node_modules/micromark-extension-footnote/index.js","./node_modules/mdast-util-footnote/from-markdown.js","./node_modules/parse-entities/decode-entity.browser.js","./node_modules/mdast-util-to-markdown/lib/util/association.js","./node_modules/mdast-util-to-markdown/lib/util/container-phrasing.js","./node_modules/repeat-string/index.js","./node_modules/mdast-util-to-markdown/lib/util/container-flow.js","./node_modules/mdast-util-to-markdown/lib/util/indent-lines.js","./node_modules/mdast-util-to-markdown/lib/util/pattern-compile.js","./node_modules/mdast-util-to-markdown/lib/util/pattern-in-scope.js","./node_modules/mdast-util-to-markdown/lib/util/safe.js","./node_modules/mdast-util-footnote/to-markdown.js","./node_modules/remark-footnotes/index.js","./node_modules/rehype-external-links/node_modules/unist-util-is/lib/index.js","./node_modules/rehype-external-links/node_modules/unist-util-visit-parents/lib/color.browser.js","./node_modules/rehype-external-links/node_modules/unist-util-visit-parents/lib/index.js","./node_modules/rehype-external-links/node_modules/unist-util-visit/lib/index.js","./node_modules/rehype-external-links/node_modules/space-separated-tokens/index.js","./node_modules/rehype-external-links/node_modules/hast-util-is-element/index.js","./node_modules/is-absolute-url/index.js","./node_modules/rehype-external-links/index.js","./node_modules/xtend/immutable.js","./node_modules/hast-util-sanitize/lib/index.js","./node_modules/hast-util-sanitize/index.js","./node_modules/rehype-sanitize/index.js","./node_modules/property-information/lib/util/schema.js","./node_modules/property-information/lib/util/merge.js","./node_modules/property-information/normalize.js","./node_modules/property-information/lib/util/info.js","./node_modules/property-information/lib/util/types.js","./node_modules/property-information/lib/util/defined-info.js","./node_modules/property-information/lib/util/create.js","./node_modules/property-information/lib/xlink.js","./node_modules/property-information/lib/xml.js","./node_modules/property-information/lib/util/case-sensitive-transform.js","./node_modules/property-information/lib/util/case-insensitive-transform.js","./node_modules/property-information/lib/xmlns.js","./node_modules/property-information/lib/aria.js","./node_modules/property-information/lib/html.js","./node_modules/property-information/html.js","./node_modules/property-information/lib/svg.js","./node_modules/property-information/svg.js","./node_modules/hast-util-is-element/convert.js","./node_modules/hast-util-is-element/index.js","./node_modules/hast-util-whitespace/index.js","./node_modules/hast-util-to-html/lib/omission/util/siblings.js","./node_modules/hast-util-to-html/lib/omission/util/white-space-start.js","./node_modules/hast-util-to-html/lib/omission/util/comment.js","./node_modules/hast-util-to-html/lib/omission/omission.js","./node_modules/hast-util-to-html/lib/omission/closing.js","./node_modules/hast-util-to-html/lib/omission/opening.js","./node_modules/hast-util-to-html/lib/omission/index.js","./node_modules/stringify-entities/lib/core.js","./node_modules/stringify-entities/lib/constant/from-char-code.js","./node_modules/stringify-entities/lib/util/to-hexadecimal.js","./node_modules/stringify-entities/lib/util/to-decimal.js","./node_modules/stringify-entities/lib/constant/characters.js","./node_modules/stringify-entities/lib/constant/has-own-property.js","./node_modules/stringify-entities/lib/util/to-named.js","./node_modules/stringify-entities/lib/util/format-smart.js","./node_modules/stringify-entities/lib/encode.js","./node_modules/stringify-entities/lib/escape.js","./node_modules/stringify-entities/lib/index.js","./node_modules/stringify-entities/index.js","./node_modules/hast-util-to-html/lib/comment.js","./node_modules/ccount/index.js","./node_modules/hast-util-to-html/lib/doctype.js","./node_modules/property-information/find.js","./node_modules/space-separated-tokens/index.js","./node_modules/comma-separated-tokens/index.js","./node_modules/hast-util-to-html/lib/all.js","./node_modules/hast-util-to-html/lib/constants.js","./node_modules/hast-util-to-html/lib/element.js","./node_modules/hast-util-to-html/lib/text.js","./node_modules/hast-util-to-html/lib/raw.js","./node_modules/hast-util-to-html/lib/one.js","./node_modules/hast-util-to-html/lib/index.js","./node_modules/hast-util-to-html/index.js","./node_modules/rehype-stringify/index.js","./node_modules/hast-util-raw/node_modules/parse5/lib/common/unicode.js","./node_modules/hast-util-raw/node_modules/parse5/lib/common/error-codes.js","./node_modules/hast-util-raw/node_modules/parse5/lib/tokenizer/preprocessor.js","./node_modules/hast-util-raw/node_modules/parse5/lib/tokenizer/named-entity-data.js","./node_modules/hast-util-raw/node_modules/parse5/lib/tokenizer/index.js","./node_modules/hast-util-raw/node_modules/parse5/lib/common/html.js","./node_modules/hast-util-raw/node_modules/parse5/lib/parser/open-element-stack.js","./node_modules/hast-util-raw/node_modules/parse5/lib/parser/formatting-element-list.js","./node_modules/hast-util-raw/node_modules/parse5/lib/utils/mixin.js","./node_modules/hast-util-raw/node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js","./node_modules/hast-util-raw/node_modules/parse5/lib/extensions/location-info/tokenizer-mixin.js","./node_modules/hast-util-raw/node_modules/parse5/lib/extensions/location-info/open-element-stack-mixin.js","./node_modules/hast-util-raw/node_modules/parse5/lib/extensions/location-info/parser-mixin.js","./node_modules/hast-util-raw/node_modules/parse5/lib/extensions/error-reporting/mixin-base.js","./node_modules/hast-util-raw/node_modules/parse5/lib/extensions/error-reporting/preprocessor-mixin.js","./node_modules/hast-util-raw/node_modules/parse5/lib/extensions/error-reporting/tokenizer-mixin.js","./node_modules/hast-util-raw/node_modules/parse5/lib/extensions/error-reporting/parser-mixin.js","./node_modules/hast-util-raw/node_modules/parse5/lib/tree-adapters/default.js","./node_modules/hast-util-raw/node_modules/parse5/lib/utils/merge-options.js","./node_modules/hast-util-raw/node_modules/parse5/lib/common/doctype.js","./node_modules/hast-util-raw/node_modules/parse5/lib/common/foreign-content.js","./node_modules/hast-util-raw/node_modules/parse5/lib/parser/index.js","./node_modules/hast-util-parse-selector/index.js","./node_modules/hast-util-raw/node_modules/hastscript/factory.js","./node_modules/hast-util-raw/node_modules/hastscript/svg.js","./node_modules/hast-util-raw/node_modules/hastscript/html.js","./node_modules/hast-util-raw/node_modules/hastscript/index.js","./node_modules/vfile-location/index.js","./node_modules/hast-util-raw/node_modules/hast-util-from-parse5/index.js","./node_modules/inline-style-parser/index.js","./node_modules/style-to-object/index.js","./node_modules/hast-to-hyperscript/index.js","./node_modules/zwitch/index.js","./node_modules/hast-util-to-parse5/index.js","./node_modules/hast-util-raw/index.js","./node_modules/rehype-raw/index.js","./src/components/markdown/markdown-parser.ts","./src/components/markdown/markdown.scss?tag=limel-markdown&encapsulation=shadow","./src/components/markdown/markdown.tsx"],"sourcesContent":["import isArrayLike from './isArrayLike.js';\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nexport default createBaseEach;\n","import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nexport default baseEach;\n","import baseEach from './_baseEach.js';\n\n/**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n}\n\nexport default baseFilter;\n","import arrayFilter from './_arrayFilter.js';\nimport baseFilter from './_baseFilter.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\nimport negate from './negate.js';\n\n/**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\nfunction reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(baseIteratee(predicate, 3)));\n}\n\nexport default reject;\n","'use strict'\n\nmodule.exports = bail\n\nfunction bail(err) {\n if (err) {\n throw err\n }\n}\n","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n\nmodule.exports = function isBuffer (obj) {\n return obj != null && obj.constructor != null &&\n typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","'use strict';\n\nmodule.exports = value => {\n\tif (Object.prototype.toString.call(value) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn prototype === null || prototype === Object.prototype;\n};\n","'use strict'\n\nvar slice = [].slice\n\nmodule.exports = wrap\n\n// Wrap `fn`.\n// Can be sync or async; return a promise, receive a completion handler, return\n// new values and errors.\nfunction wrap(fn, callback) {\n var invoked\n\n return wrapped\n\n function wrapped() {\n var params = slice.call(arguments, 0)\n var callback = fn.length > params.length\n var result\n\n if (callback) {\n params.push(done)\n }\n\n try {\n result = fn.apply(null, params)\n } catch (error) {\n // Well, this is quite the pickle.\n // `fn` received a callback and invoked it (thus continuing the pipeline),\n // but later also threw an error.\n // We’re not about to restart the pipeline again, so the only thing left\n // to do is to throw the thing instead.\n if (callback && invoked) {\n throw error\n }\n\n return done(error)\n }\n\n if (!callback) {\n if (result && typeof result.then === 'function') {\n result.then(then, done)\n } else if (result instanceof Error) {\n done(result)\n } else {\n then(result)\n }\n }\n }\n\n // Invoke `next`, only once.\n function done() {\n if (!invoked) {\n invoked = true\n\n callback.apply(null, arguments)\n }\n }\n\n // Invoke `done` with one value.\n // Tracks if an error is passed, too.\n function then(value) {\n done(null, value)\n }\n}\n","'use strict'\n\nvar wrap = require('./wrap.js')\n\nmodule.exports = trough\n\ntrough.wrap = wrap\n\nvar slice = [].slice\n\n// Create new middleware.\nfunction trough() {\n var fns = []\n var middleware = {}\n\n middleware.run = run\n middleware.use = use\n\n return middleware\n\n // Run `fns`. Last argument must be a completion handler.\n function run() {\n var index = -1\n var input = slice.call(arguments, 0, -1)\n var done = arguments[arguments.length - 1]\n\n if (typeof done !== 'function') {\n throw new Error('Expected function as last argument, not ' + done)\n }\n\n next.apply(null, [null].concat(input))\n\n // Run the next `fn`, if any.\n function next(err) {\n var fn = fns[++index]\n var params = slice.call(arguments, 0)\n var values = params.slice(1)\n var length = input.length\n var pos = -1\n\n if (err) {\n done(err)\n return\n }\n\n // Copy non-nully input into values.\n while (++pos < length) {\n if (values[pos] === null || values[pos] === undefined) {\n values[pos] = input[pos]\n }\n }\n\n input = values\n\n // Next or done.\n if (fn) {\n wrap(fn, next).apply(null, input)\n } else {\n done.apply(null, [null].concat(input))\n }\n }\n }\n\n // Add `fn` to the list.\n function use(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Expected `fn` to be a function, not ' + fn)\n }\n\n fns.push(fn)\n\n return middleware\n }\n}\n","'use strict'\n\nvar own = {}.hasOwnProperty\n\nmodule.exports = stringify\n\nfunction stringify(value) {\n // Nothing.\n if (!value || typeof value !== 'object') {\n return ''\n }\n\n // Node.\n if (own.call(value, 'position') || own.call(value, 'type')) {\n return position(value.position)\n }\n\n // Position.\n if (own.call(value, 'start') || own.call(value, 'end')) {\n return position(value)\n }\n\n // Point.\n if (own.call(value, 'line') || own.call(value, 'column')) {\n return point(value)\n }\n\n // ?\n return ''\n}\n\nfunction point(point) {\n if (!point || typeof point !== 'object') {\n point = {}\n }\n\n return index(point.line) + ':' + index(point.column)\n}\n\nfunction position(pos) {\n if (!pos || typeof pos !== 'object') {\n pos = {}\n }\n\n return point(pos.start) + '-' + point(pos.end)\n}\n\nfunction index(value) {\n return value && typeof value === 'number' ? value : 1\n}\n","'use strict'\n\nvar stringify = require('unist-util-stringify-position')\n\nmodule.exports = VMessage\n\n// Inherit from `Error#`.\nfunction VMessagePrototype() {}\nVMessagePrototype.prototype = Error.prototype\nVMessage.prototype = new VMessagePrototype()\n\n// Message properties.\nvar proto = VMessage.prototype\n\nproto.file = ''\nproto.name = ''\nproto.reason = ''\nproto.message = ''\nproto.stack = ''\nproto.fatal = null\nproto.column = null\nproto.line = null\n\n// Construct a new VMessage.\n//\n// Note: We cannot invoke `Error` on the created context, as that adds readonly\n// `line` and `column` attributes on Safari 9, thus throwing and failing the\n// data.\nfunction VMessage(reason, position, origin) {\n var parts\n var range\n var location\n\n if (typeof position === 'string') {\n origin = position\n position = null\n }\n\n parts = parseOrigin(origin)\n range = stringify(position) || '1:1'\n\n location = {\n start: {line: null, column: null},\n end: {line: null, column: null}\n }\n\n // Node.\n if (position && position.position) {\n position = position.position\n }\n\n if (position) {\n // Position.\n if (position.start) {\n location = position\n position = position.start\n } else {\n // Point.\n location.start = position\n }\n }\n\n if (reason.stack) {\n this.stack = reason.stack\n reason = reason.message\n }\n\n this.message = reason\n this.name = range\n this.reason = reason\n this.line = position ? position.line : null\n this.column = position ? position.column : null\n this.location = location\n this.source = parts[0]\n this.ruleId = parts[1]\n}\n\nfunction parseOrigin(origin) {\n var result = [null, null]\n var index\n\n if (typeof origin === 'string') {\n index = origin.indexOf(':')\n\n if (index === -1) {\n result[1] = origin\n } else {\n result[0] = origin.slice(0, index)\n result[1] = origin.slice(index + 1)\n }\n }\n\n return result\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nexport function resolve() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : '/';\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexport function normalize(path) {\n var isPathAbsolute = isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isPathAbsolute).join('/');\n\n if (!path && !isPathAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isPathAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexport function isAbsolute(path) {\n return path.charAt(0) === '/';\n}\n\n// posix version\nexport function join() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n}\n\n\n// path.relative(from, to)\n// posix version\nexport function relative(from, to) {\n from = resolve(from).substr(1);\n to = resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n}\n\nexport var sep = '/';\nexport var delimiter = ':';\n\nexport function dirname(path) {\n var result = splitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n}\n\nexport function basename(path, ext) {\n var f = splitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n}\n\n\nexport function extname(path) {\n return splitPath(path)[3];\n}\nexport default {\n extname: extname,\n basename: basename,\n dirname: dirname,\n sep: sep,\n delimiter: delimiter,\n relative: relative,\n join: join,\n isAbsolute: isAbsolute,\n normalize: normalize,\n resolve: resolve\n};\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b' ?\n function (str, start, len) { return str.substr(start, len) } :\n function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n","'use strict';\n\nvar path = require('path');\n\nfunction replaceExt(npath, ext) {\n if (typeof npath !== 'string') {\n return npath;\n }\n\n if (npath.length === 0) {\n return npath;\n }\n\n var nFileName = path.basename(npath, path.extname(npath)) + ext;\n return path.join(path.dirname(npath), nFileName);\n}\n\nmodule.exports = replaceExt;\n","'use strict'\n\nvar path = require('path')\nvar replace = require('replace-ext')\nvar buffer = require('is-buffer')\n\nmodule.exports = VFile\n\nvar own = {}.hasOwnProperty\nvar proto = VFile.prototype\n\n// Order of setting (least specific to most), we need this because otherwise\n// `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n// stem can be set.\nvar order = ['history', 'path', 'basename', 'stem', 'extname', 'dirname']\n\nproto.toString = toString\n\n// Access full path (`~/index.min.js`).\nObject.defineProperty(proto, 'path', {get: getPath, set: setPath})\n\n// Access parent path (`~`).\nObject.defineProperty(proto, 'dirname', {get: getDirname, set: setDirname})\n\n// Access basename (`index.min.js`).\nObject.defineProperty(proto, 'basename', {get: getBasename, set: setBasename})\n\n// Access extname (`.js`).\nObject.defineProperty(proto, 'extname', {get: getExtname, set: setExtname})\n\n// Access stem (`index.min`).\nObject.defineProperty(proto, 'stem', {get: getStem, set: setStem})\n\n// Construct a new file.\nfunction VFile(options) {\n var prop\n var index\n var length\n\n if (!options) {\n options = {}\n } else if (typeof options === 'string' || buffer(options)) {\n options = {contents: options}\n } else if ('message' in options && 'messages' in options) {\n return options\n }\n\n if (!(this instanceof VFile)) {\n return new VFile(options)\n }\n\n this.data = {}\n this.messages = []\n this.history = []\n this.cwd = process.cwd()\n\n // Set path related properties in the correct order.\n index = -1\n length = order.length\n\n while (++index < length) {\n prop = order[index]\n\n if (own.call(options, prop)) {\n this[prop] = options[prop]\n }\n }\n\n // Set non-path related properties.\n for (prop in options) {\n if (order.indexOf(prop) === -1) {\n this[prop] = options[prop]\n }\n }\n}\n\nfunction getPath() {\n return this.history[this.history.length - 1]\n}\n\nfunction setPath(path) {\n assertNonEmpty(path, 'path')\n\n if (path !== this.path) {\n this.history.push(path)\n }\n}\n\nfunction getDirname() {\n return typeof this.path === 'string' ? path.dirname(this.path) : undefined\n}\n\nfunction setDirname(dirname) {\n assertPath(this.path, 'dirname')\n this.path = path.join(dirname || '', this.basename)\n}\n\nfunction getBasename() {\n return typeof this.path === 'string' ? path.basename(this.path) : undefined\n}\n\nfunction setBasename(basename) {\n assertNonEmpty(basename, 'basename')\n assertPart(basename, 'basename')\n this.path = path.join(this.dirname || '', basename)\n}\n\nfunction getExtname() {\n return typeof this.path === 'string' ? path.extname(this.path) : undefined\n}\n\nfunction setExtname(extname) {\n var ext = extname || ''\n\n assertPart(ext, 'extname')\n assertPath(this.path, 'extname')\n\n if (ext) {\n if (ext.charAt(0) !== '.') {\n throw new Error('`extname` must start with `.`')\n }\n\n if (ext.indexOf('.', 1) !== -1) {\n throw new Error('`extname` cannot contain multiple dots')\n }\n }\n\n this.path = replace(this.path, ext)\n}\n\nfunction getStem() {\n return typeof this.path === 'string'\n ? path.basename(this.path, this.extname)\n : undefined\n}\n\nfunction setStem(stem) {\n assertNonEmpty(stem, 'stem')\n assertPart(stem, 'stem')\n this.path = path.join(this.dirname || '', stem + (this.extname || ''))\n}\n\n// Get the value of the file.\nfunction toString(encoding) {\n var value = this.contents || ''\n return buffer(value) ? value.toString(encoding) : String(value)\n}\n\n// Assert that `part` is not a path (i.e., does not contain `path.sep`).\nfunction assertPart(part, name) {\n if (part.indexOf(path.sep) !== -1) {\n throw new Error(\n '`' + name + '` cannot be a path: did not expect `' + path.sep + '`'\n )\n }\n}\n\n// Assert that `part` is not empty.\nfunction assertNonEmpty(part, name) {\n if (!part) {\n throw new Error('`' + name + '` cannot be empty')\n }\n}\n\n// Assert `path` exists.\nfunction assertPath(path, name) {\n if (!path) {\n throw new Error('Setting `' + name + '` requires `path` to be set too')\n }\n}\n","'use strict'\n\nvar VMessage = require('vfile-message')\nvar VFile = require('./core.js')\n\nmodule.exports = VFile\n\nvar proto = VFile.prototype\n\nproto.message = message\nproto.info = info\nproto.fail = fail\n\n// Create a message with `reason` at `position`.\n// When an error is passed in as `reason`, copies the stack.\nfunction message(reason, position, origin) {\n var filePath = this.path\n var message = new VMessage(reason, position, origin)\n\n if (filePath) {\n message.name = filePath + ':' + message.name\n message.file = filePath\n }\n\n message.fatal = false\n\n this.messages.push(message)\n\n return message\n}\n\n// Fail: creates a vmessage, associates it with the file, and throws it.\nfunction fail() {\n var message = this.message.apply(this, arguments)\n\n message.fatal = true\n\n throw message\n}\n\n// Info: creates a vmessage, associates it with the file, and marks the fatality\n// as null.\nfunction info() {\n var message = this.message.apply(this, arguments)\n\n message.fatal = null\n\n return message\n}\n","'use strict'\n\nvar bail = require('bail')\nvar buffer = require('is-buffer')\nvar extend = require('extend')\nvar plain = require('is-plain-obj')\nvar trough = require('trough')\nvar vfile = require('vfile')\n\n// Expose a frozen processor.\nmodule.exports = unified().freeze()\n\nvar slice = [].slice\nvar own = {}.hasOwnProperty\n\n// Process pipeline.\nvar pipeline = trough()\n .use(pipelineParse)\n .use(pipelineRun)\n .use(pipelineStringify)\n\nfunction pipelineParse(p, ctx) {\n ctx.tree = p.parse(ctx.file)\n}\n\nfunction pipelineRun(p, ctx, next) {\n p.run(ctx.tree, ctx.file, done)\n\n function done(error, tree, file) {\n if (error) {\n next(error)\n } else {\n ctx.tree = tree\n ctx.file = file\n next()\n }\n }\n}\n\nfunction pipelineStringify(p, ctx) {\n var result = p.stringify(ctx.tree, ctx.file)\n\n if (result === undefined || result === null) {\n // Empty.\n } else if (typeof result === 'string' || buffer(result)) {\n if ('value' in ctx.file) {\n ctx.file.value = result\n }\n\n ctx.file.contents = result\n } else {\n ctx.file.result = result\n }\n}\n\n// Function to create the first processor.\nfunction unified() {\n var attachers = []\n var transformers = trough()\n var namespace = {}\n var freezeIndex = -1\n var frozen\n\n // Data management.\n processor.data = data\n\n // Lock.\n processor.freeze = freeze\n\n // Plugins.\n processor.attachers = attachers\n processor.use = use\n\n // API.\n processor.parse = parse\n processor.stringify = stringify\n processor.run = run\n processor.runSync = runSync\n processor.process = process\n processor.processSync = processSync\n\n // Expose.\n return processor\n\n // Create a new processor based on the processor in the current scope.\n function processor() {\n var destination = unified()\n var index = -1\n\n while (++index < attachers.length) {\n destination.use.apply(null, attachers[index])\n }\n\n destination.data(extend(true, {}, namespace))\n\n return destination\n }\n\n // Freeze: used to signal a processor that has finished configuration.\n //\n // For example, take unified itself: it’s frozen.\n // Plugins should not be added to it.\n // Rather, it should be extended, by invoking it, before modifying it.\n //\n // In essence, always invoke this when exporting a processor.\n function freeze() {\n var values\n var transformer\n\n if (frozen) {\n return processor\n }\n\n while (++freezeIndex < attachers.length) {\n values = attachers[freezeIndex]\n\n if (values[1] === false) {\n continue\n }\n\n if (values[1] === true) {\n values[1] = undefined\n }\n\n transformer = values[0].apply(processor, values.slice(1))\n\n if (typeof transformer === 'function') {\n transformers.use(transformer)\n }\n }\n\n frozen = true\n freezeIndex = Infinity\n\n return processor\n }\n\n // Data management.\n // Getter / setter for processor-specific informtion.\n function data(key, value) {\n if (typeof key === 'string') {\n // Set `key`.\n if (arguments.length === 2) {\n assertUnfrozen('data', frozen)\n namespace[key] = value\n return processor\n }\n\n // Get `key`.\n return (own.call(namespace, key) && namespace[key]) || null\n }\n\n // Set space.\n if (key) {\n assertUnfrozen('data', frozen)\n namespace = key\n return processor\n }\n\n // Get space.\n return namespace\n }\n\n // Plugin management.\n //\n // Pass it:\n // * an attacher and options,\n // * a preset,\n // * a list of presets, attachers, and arguments (list of attachers and\n // options).\n function use(value) {\n var settings\n\n assertUnfrozen('use', frozen)\n\n if (value === null || value === undefined) {\n // Empty.\n } else if (typeof value === 'function') {\n addPlugin.apply(null, arguments)\n } else if (typeof value === 'object') {\n if ('length' in value) {\n addList(value)\n } else {\n addPreset(value)\n }\n } else {\n throw new Error('Expected usable value, not `' + value + '`')\n }\n\n if (settings) {\n namespace.settings = extend(namespace.settings || {}, settings)\n }\n\n return processor\n\n function addPreset(result) {\n addList(result.plugins)\n\n if (result.settings) {\n settings = extend(settings || {}, result.settings)\n }\n }\n\n function add(value) {\n if (typeof value === 'function') {\n addPlugin(value)\n } else if (typeof value === 'object') {\n if ('length' in value) {\n addPlugin.apply(null, value)\n } else {\n addPreset(value)\n }\n } else {\n throw new Error('Expected usable value, not `' + value + '`')\n }\n }\n\n function addList(plugins) {\n var index = -1\n\n if (plugins === null || plugins === undefined) {\n // Empty.\n } else if (typeof plugins === 'object' && 'length' in plugins) {\n while (++index < plugins.length) {\n add(plugins[index])\n }\n } else {\n throw new Error('Expected a list of plugins, not `' + plugins + '`')\n }\n }\n\n function addPlugin(plugin, value) {\n var entry = find(plugin)\n\n if (entry) {\n if (plain(entry[1]) && plain(value)) {\n value = extend(true, entry[1], value)\n }\n\n entry[1] = value\n } else {\n attachers.push(slice.call(arguments))\n }\n }\n }\n\n function find(plugin) {\n var index = -1\n\n while (++index < attachers.length) {\n if (attachers[index][0] === plugin) {\n return attachers[index]\n }\n }\n }\n\n // Parse a file (in string or vfile representation) into a unist node using\n // the `Parser` on the processor.\n function parse(doc) {\n var file = vfile(doc)\n var Parser\n\n freeze()\n Parser = processor.Parser\n assertParser('parse', Parser)\n\n if (newable(Parser, 'parse')) {\n return new Parser(String(file), file).parse()\n }\n\n return Parser(String(file), file) // eslint-disable-line new-cap\n }\n\n // Run transforms on a unist node representation of a file (in string or\n // vfile representation), async.\n function run(node, file, cb) {\n assertNode(node)\n freeze()\n\n if (!cb && typeof file === 'function') {\n cb = file\n file = null\n }\n\n if (!cb) {\n return new Promise(executor)\n }\n\n executor(null, cb)\n\n function executor(resolve, reject) {\n transformers.run(node, vfile(file), done)\n\n function done(error, tree, file) {\n tree = tree || node\n if (error) {\n reject(error)\n } else if (resolve) {\n resolve(tree)\n } else {\n cb(null, tree, file)\n }\n }\n }\n }\n\n // Run transforms on a unist node representation of a file (in string or\n // vfile representation), sync.\n function runSync(node, file) {\n var result\n var complete\n\n run(node, file, done)\n\n assertDone('runSync', 'run', complete)\n\n return result\n\n function done(error, tree) {\n complete = true\n result = tree\n bail(error)\n }\n }\n\n // Stringify a unist node representation of a file (in string or vfile\n // representation) into a string using the `Compiler` on the processor.\n function stringify(node, doc) {\n var file = vfile(doc)\n var Compiler\n\n freeze()\n Compiler = processor.Compiler\n assertCompiler('stringify', Compiler)\n assertNode(node)\n\n if (newable(Compiler, 'compile')) {\n return new Compiler(node, file).compile()\n }\n\n return Compiler(node, file) // eslint-disable-line new-cap\n }\n\n // Parse a file (in string or vfile representation) into a unist node using\n // the `Parser` on the processor, then run transforms on that node, and\n // compile the resulting node using the `Compiler` on the processor, and\n // store that result on the vfile.\n function process(doc, cb) {\n freeze()\n assertParser('process', processor.Parser)\n assertCompiler('process', processor.Compiler)\n\n if (!cb) {\n return new Promise(executor)\n }\n\n executor(null, cb)\n\n function executor(resolve, reject) {\n var file = vfile(doc)\n\n pipeline.run(processor, {file: file}, done)\n\n function done(error) {\n if (error) {\n reject(error)\n } else if (resolve) {\n resolve(file)\n } else {\n cb(null, file)\n }\n }\n }\n }\n\n // Process the given document (in string or vfile representation), sync.\n function processSync(doc) {\n var file\n var complete\n\n freeze()\n assertParser('processSync', processor.Parser)\n assertCompiler('processSync', processor.Compiler)\n file = vfile(doc)\n\n process(file, done)\n\n assertDone('processSync', 'process', complete)\n\n return file\n\n function done(error) {\n complete = true\n bail(error)\n }\n }\n}\n\n// Check if `value` is a constructor.\nfunction newable(value, name) {\n return (\n typeof value === 'function' &&\n value.prototype &&\n // A function with keys in its prototype is probably a constructor.\n // Classes’ prototype methods are not enumerable, so we check if some value\n // exists in the prototype.\n (keys(value.prototype) || name in value.prototype)\n )\n}\n\n// Check if `value` is an object with keys.\nfunction keys(value) {\n var key\n for (key in value) {\n return true\n }\n\n return false\n}\n\n// Assert a parser is available.\nfunction assertParser(name, Parser) {\n if (typeof Parser !== 'function') {\n throw new Error('Cannot `' + name + '` without `Parser`')\n }\n}\n\n// Assert a compiler is available.\nfunction assertCompiler(name, Compiler) {\n if (typeof Compiler !== 'function') {\n throw new Error('Cannot `' + name + '` without `Compiler`')\n }\n}\n\n// Assert the processor is not frozen.\nfunction assertUnfrozen(name, frozen) {\n if (frozen) {\n throw new Error(\n 'Cannot invoke `' +\n name +\n '` on a frozen processor.\\nCreate a new processor first, by invoking it: use `processor()` instead of `processor`.'\n )\n }\n}\n\n// Assert `node` is a unist node.\nfunction assertNode(node) {\n if (!node || typeof node.type !== 'string') {\n throw new Error('Expected node, got `' + node + '`')\n }\n}\n\n// Assert that `complete` is `true`.\nfunction assertDone(name, asyncName, complete) {\n if (!complete) {\n throw new Error(\n '`' + name + '` finished async. Use `' + asyncName + '` instead'\n )\n }\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n *\n * @typedef Options\n * Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n * Whether to use `alt` for `image`s (default: `true`).\n * @property {boolean | null | undefined} [includeHtml=true]\n * Whether to use `value` of HTML (default: `true`).\n */\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node’s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} [value]\n * Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Serialized `value`.\n */\nexport function toString(value, options) {\n const settings = options || emptyOptions\n const includeImageAlt =\n typeof settings.includeImageAlt === 'boolean'\n ? settings.includeImageAlt\n : true\n const includeHtml =\n typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true\n\n return one(value, includeImageAlt, includeHtml)\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n * Thing to serialize.\n * @param {boolean} includeImageAlt\n * Include image `alt`s.\n * @param {boolean} includeHtml\n * Include HTML.\n * @returns {string}\n * Serialized node.\n */\nfunction one(value, includeImageAlt, includeHtml) {\n if (node(value)) {\n if ('value' in value) {\n return value.type === 'html' && !includeHtml ? '' : value.value\n }\n\n if (includeImageAlt && 'alt' in value && value.alt) {\n return value.alt\n }\n\n if ('children' in value) {\n return all(value.children, includeImageAlt, includeHtml)\n }\n }\n\n if (Array.isArray(value)) {\n return all(value, includeImageAlt, includeHtml)\n }\n\n return ''\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array<unknown>} values\n * Thing to serialize.\n * @param {boolean} includeImageAlt\n * Include image `alt`s.\n * @param {boolean} includeHtml\n * Include HTML.\n * @returns {string}\n * Serialized nodes.\n */\nfunction all(values, includeImageAlt, includeHtml) {\n /** @type {Array<string>} */\n const result = []\n let index = -1\n\n while (++index < values.length) {\n result[index] = one(values[index], includeImageAlt, includeHtml)\n }\n\n return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n * Thing.\n * @returns {value is Nodes}\n * Whether `value` is a node.\n */\nfunction node(value) {\n return Boolean(value && typeof value === 'object')\n}\n","/**\n * Map of named character references.\n *\n * @type {Record<string, string>}\n */\nexport const characterEntities = {\n AElig: 'Æ',\n AMP: '&',\n Aacute: 'Á',\n Abreve: 'Ă',\n Acirc: 'Â',\n Acy: 'А',\n Afr: '𝔄',\n Agrave: 'À',\n Alpha: 'Α',\n Amacr: 'Ā',\n And: '⩓',\n Aogon: 'Ą',\n Aopf: '𝔸',\n ApplyFunction: '',\n Aring: 'Å',\n Ascr: '𝒜',\n Assign: '≔',\n Atilde: 'Ã',\n Auml: 'Ä',\n Backslash: '∖',\n Barv: '⫧',\n Barwed: '⌆',\n Bcy: 'Б',\n Because: '∵',\n Bernoullis: 'ℬ',\n Beta: 'Β',\n Bfr: '𝔅',\n Bopf: '𝔹',\n Breve: '˘',\n Bscr: 'ℬ',\n Bumpeq: '≎',\n CHcy: 'Ч',\n COPY: '©',\n Cacute: 'Ć',\n Cap: '⋒',\n CapitalDifferentialD: 'ⅅ',\n Cayleys: 'ℭ',\n Ccaron: 'Č',\n Ccedil: 'Ç',\n Ccirc: 'Ĉ',\n Cconint: '∰',\n Cdot: 'Ċ',\n Cedilla: '¸',\n CenterDot: '·',\n Cfr: 'ℭ',\n Chi: 'Χ',\n CircleDot: '⊙',\n CircleMinus: '⊖',\n CirclePlus: '⊕',\n CircleTimes: '⊗',\n ClockwiseContourIntegral: '∲',\n CloseCurlyDoubleQuote: '”',\n CloseCurlyQuote: '’',\n Colon: '∷',\n Colone: '⩴',\n Congruent: '≡',\n Conint: '∯',\n ContourIntegral: '∮',\n Copf: 'ℂ',\n Coproduct: '∐',\n CounterClockwiseContourIntegral: '∳',\n Cross: '⨯',\n Cscr: '𝒞',\n Cup: '⋓',\n CupCap: '≍',\n DD: 'ⅅ',\n DDotrahd: '⤑',\n DJcy: 'Ђ',\n DScy: 'Ѕ',\n DZcy: 'Џ',\n Dagger: '‡',\n Darr: '↡',\n Dashv: '⫤',\n Dcaron: 'Ď',\n Dcy: 'Д',\n Del: '∇',\n Delta: 'Δ',\n Dfr: '𝔇',\n DiacriticalAcute: '´',\n DiacriticalDot: '˙',\n DiacriticalDoubleAcute: '˝',\n DiacriticalGrave: '`',\n DiacriticalTilde: '˜',\n Diamond: '⋄',\n DifferentialD: 'ⅆ',\n Dopf: '𝔻',\n Dot: '¨',\n DotDot: '⃜',\n DotEqual: '≐',\n DoubleContourIntegral: '∯',\n DoubleDot: '¨',\n DoubleDownArrow: '⇓',\n DoubleLeftArrow: '⇐',\n DoubleLeftRightArrow: '⇔',\n DoubleLeftTee: '⫤',\n DoubleLongLeftArrow: '⟸',\n DoubleLongLeftRightArrow: '⟺',\n DoubleLongRightArrow: '⟹',\n DoubleRightArrow: '⇒',\n DoubleRightTee: '⊨',\n DoubleUpArrow: '⇑',\n DoubleUpDownArrow: '⇕',\n DoubleVerticalBar: '∥',\n DownArrow: '↓',\n DownArrowBar: '⤓',\n DownArrowUpArrow: '⇵',\n DownBreve: '̑',\n DownLeftRightVector: '⥐',\n DownLeftTeeVector: '⥞',\n DownLeftVector: '↽',\n DownLeftVectorBar: '⥖',\n DownRightTeeVector: '⥟',\n DownRightVector: '⇁',\n DownRightVectorBar: '⥗',\n DownTee: '⊤',\n DownTeeArrow: '↧',\n Downarrow: '⇓',\n Dscr: '𝒟',\n Dstrok: 'Đ',\n ENG: 'Ŋ',\n ETH: 'Ð',\n Eacute: 'É',\n Ecaron: 'Ě',\n Ecirc: 'Ê',\n Ecy: 'Э',\n Edot: 'Ė',\n Efr: '𝔈',\n Egrave: 'È',\n Element: '∈',\n Emacr: 'Ē',\n EmptySmallSquare: '◻',\n EmptyVerySmallSquare: '▫',\n Eogon: 'Ę',\n Eopf: '𝔼',\n Epsilon: 'Ε',\n Equal: '⩵',\n EqualTilde: '≂',\n Equilibrium: '⇌',\n Escr: 'ℰ',\n Esim: '⩳',\n Eta: 'Η',\n Euml: 'Ë',\n Exists: '∃',\n ExponentialE: 'ⅇ',\n Fcy: 'Ф',\n Ffr: '𝔉',\n FilledSmallSquare: '◼',\n FilledVerySmallSquare: '▪',\n Fopf: '𝔽',\n ForAll: '∀',\n Fouriertrf: 'ℱ',\n Fscr: 'ℱ',\n GJcy: 'Ѓ',\n GT: '>',\n Gamma: 'Γ',\n Gammad: 'Ϝ',\n Gbreve: 'Ğ',\n Gcedil: 'Ģ',\n Gcirc: 'Ĝ',\n Gcy: 'Г',\n Gdot: 'Ġ',\n Gfr: '𝔊',\n Gg: '⋙',\n Gopf: '𝔾',\n GreaterEqual: '≥',\n GreaterEqualLess: '⋛',\n GreaterFullEqual: '≧',\n GreaterGreater: '⪢',\n GreaterLess: '≷',\n GreaterSlantEqual: '⩾',\n GreaterTilde: '≳',\n Gscr: '𝒢',\n Gt: '≫',\n HARDcy: 'Ъ',\n Hacek: 'ˇ',\n Hat: '^',\n Hcirc: 'Ĥ',\n Hfr: 'ℌ',\n HilbertSpace: 'ℋ',\n Hopf: 'ℍ',\n HorizontalLine: '─',\n Hscr: 'ℋ',\n Hstrok: 'Ħ',\n HumpDownHump: '≎',\n HumpEqual: '≏',\n IEcy: 'Е',\n IJlig: 'IJ',\n IOcy: 'Ё',\n Iacute: 'Í',\n Icirc: 'Î',\n Icy: 'И',\n Idot: 'İ',\n Ifr: 'ℑ',\n Igrave: 'Ì',\n Im: 'ℑ',\n Imacr: 'Ī',\n ImaginaryI: 'ⅈ',\n Implies: '⇒',\n Int: '∬',\n Integral: '∫',\n Intersection: '⋂',\n InvisibleComma: '',\n InvisibleTimes: '',\n Iogon: 'Į',\n Iopf: '𝕀',\n Iota: 'Ι',\n Iscr: 'ℐ',\n Itilde: 'Ĩ',\n Iukcy: 'І',\n Iuml: 'Ï',\n Jcirc: 'Ĵ',\n Jcy: 'Й',\n Jfr: '𝔍',\n Jopf: '𝕁',\n Jscr: '𝒥',\n Jsercy: 'Ј',\n Jukcy: 'Є',\n KHcy: 'Х',\n KJcy: 'Ќ',\n Kappa: 'Κ',\n Kcedil: 'Ķ',\n Kcy: 'К',\n Kfr: '𝔎',\n Kopf: '𝕂',\n Kscr: '𝒦',\n LJcy: 'Љ',\n LT: '<',\n Lacute: 'Ĺ',\n Lambda: 'Λ',\n Lang: '⟪',\n Laplacetrf: 'ℒ',\n Larr: '↞',\n Lcaron: 'Ľ',\n Lcedil: 'Ļ',\n Lcy: 'Л',\n LeftAngleBracket: '⟨',\n LeftArrow: '←',\n LeftArrowBar: '⇤',\n LeftArrowRightArrow: '⇆',\n LeftCeiling: '⌈',\n LeftDoubleBracket: '⟦',\n LeftDownTeeVector: '⥡',\n LeftDownVector: '⇃',\n LeftDownVectorBar: '⥙',\n LeftFloor: '⌊',\n LeftRightArrow: '↔',\n LeftRightVector: '⥎',\n LeftTee: '⊣',\n LeftTeeArrow: '↤',\n LeftTeeVector: '⥚',\n LeftTriangle: '⊲',\n LeftTriangleBar: '⧏',\n LeftTriangleEqual: '⊴',\n LeftUpDownVector: '⥑',\n LeftUpTeeVector: '⥠',\n LeftUpVector: '↿',\n LeftUpVectorBar: '⥘',\n LeftVector: '↼',\n LeftVectorBar: '⥒',\n Leftarrow: '⇐',\n Leftrightarrow: '⇔',\n LessEqualGreater: '⋚',\n LessFullEqual: '≦',\n LessGreater: '≶',\n LessLess: '⪡',\n LessSlantEqual: '⩽',\n LessTilde: '≲',\n Lfr: '𝔏',\n Ll: '⋘',\n Lleftarrow: '⇚',\n Lmidot: 'Ŀ',\n LongLeftArrow: '⟵',\n LongLeftRightArrow: '⟷',\n LongRightArrow: '⟶',\n Longleftarrow: '⟸',\n Longleftrightarrow: '⟺',\n Longrightarrow: '⟹',\n Lopf: '𝕃',\n LowerLeftArrow: '↙',\n LowerRightArrow: '↘',\n Lscr: 'ℒ',\n Lsh: '↰',\n Lstrok: 'Ł',\n Lt: '≪',\n Map: '⤅',\n Mcy: 'М',\n MediumSpace: ' ',\n Mellintrf: 'ℳ',\n Mfr: '𝔐',\n MinusPlus: '∓',\n Mopf: '𝕄',\n Mscr: 'ℳ',\n Mu: 'Μ',\n NJcy: 'Њ',\n Nacute: 'Ń',\n Ncaron: 'Ň',\n Ncedil: 'Ņ',\n Ncy: 'Н',\n NegativeMediumSpace: '',\n NegativeThickSpace: '',\n NegativeThinSpace: '',\n NegativeVeryThinSpace: '',\n NestedGreaterGreater: '≫',\n NestedLessLess: '≪',\n NewLine: '\\n',\n Nfr: '𝔑',\n NoBreak: '',\n NonBreakingSpace: ' ',\n Nopf: 'ℕ',\n Not: '⫬',\n NotCongruent: '≢',\n NotCupCap: '≭',\n NotDoubleVerticalBar: '∦',\n NotElement: '∉',\n NotEqual: '≠',\n NotEqualTilde: '≂̸',\n NotExists: '∄',\n NotGreater: '≯',\n NotGreaterEqual: '≱',\n NotGreaterFullEqual: '≧̸',\n NotGreaterGreater: '≫̸',\n NotGreaterLess: '≹',\n NotGreaterSlantEqual: '⩾̸',\n NotGreaterTilde: '≵',\n NotHumpDownHump: '≎̸',\n NotHumpEqual: '≏̸',\n NotLeftTriangle: '⋪',\n NotLeftTriangleBar: '⧏̸',\n NotLeftTriangleEqual: '⋬',\n NotLess: '≮',\n NotLessEqual: '≰',\n NotLessGreater: '≸',\n NotLessLess: '≪̸',\n NotLessSlantEqual: '⩽̸',\n NotLessTilde: '≴',\n NotNestedGreaterGreater: '⪢̸',\n NotNestedLessLess: '⪡̸',\n NotPrecedes: '⊀',\n NotPrecedesEqual: '⪯̸',\n NotPrecedesSlantEqual: '⋠',\n NotReverseElement: '∌',\n NotRightTriangle: '⋫',\n NotRightTriangleBar: '⧐̸',\n NotRightTriangleEqual: '⋭',\n NotSquareSubset: '⊏̸',\n NotSquareSubsetEqual: '⋢',\n NotSquareSuperset: '⊐̸',\n NotSquareSupersetEqual: '⋣',\n NotSubset: '⊂⃒',\n NotSubsetEqual: '⊈',\n NotSucceeds: '⊁',\n NotSucceedsEqual: '⪰̸',\n NotSucceedsSlantEqual: '⋡',\n NotSucceedsTilde: '≿̸',\n NotSuperset: '⊃⃒',\n NotSupersetEqual: '⊉',\n NotTilde: '≁',\n NotTildeEqual: '≄',\n NotTildeFullEqual: '≇',\n NotTildeTilde: '≉',\n NotVerticalBar: '∤',\n Nscr: '𝒩',\n Ntilde: 'Ñ',\n Nu: 'Ν',\n OElig: 'Œ',\n Oacute: 'Ó',\n Ocirc: 'Ô',\n Ocy: 'О',\n Odblac: 'Ő',\n Ofr: '𝔒',\n Ograve: 'Ò',\n Omacr: 'Ō',\n Omega: 'Ω',\n Omicron: 'Ο',\n Oopf: '𝕆',\n OpenCurlyDoubleQuote: '“',\n OpenCurlyQuote: '‘',\n Or: '⩔',\n Oscr: '𝒪',\n Oslash: 'Ø',\n Otilde: 'Õ',\n Otimes: '⨷',\n Ouml: 'Ö',\n OverBar: '‾',\n OverBrace: '⏞',\n OverBracket: '⎴',\n OverParenthesis: '⏜',\n PartialD: '∂',\n Pcy: 'П',\n Pfr: '𝔓',\n Phi: 'Φ',\n Pi: 'Π',\n PlusMinus: '±',\n Poincareplane: 'ℌ',\n Popf: 'ℙ',\n Pr: '⪻',\n Precedes: '≺',\n PrecedesEqual: '⪯',\n PrecedesSlantEqual: '≼',\n PrecedesTilde: '≾',\n Prime: '″',\n Product: '∏',\n Proportion: '∷',\n Proportional: '∝',\n Pscr: '𝒫',\n Psi: 'Ψ',\n QUOT: '\"',\n Qfr: '𝔔',\n Qopf: 'ℚ',\n Qscr: '𝒬',\n RBarr: '⤐',\n REG: '®',\n Racute: 'Ŕ',\n Rang: '⟫',\n Rarr: '↠',\n Rarrtl: '⤖',\n Rcaron: 'Ř',\n Rcedil: 'Ŗ',\n Rcy: 'Р',\n Re: 'ℜ',\n ReverseElement: '∋',\n ReverseEquilibrium: '⇋',\n ReverseUpEquilibrium: '⥯',\n Rfr: 'ℜ',\n Rho: 'Ρ',\n RightAngleBracket: '⟩',\n RightArrow: '→',\n RightArrowBar: '⇥',\n RightArrowLeftArrow: '⇄',\n RightCeiling: '⌉',\n RightDoubleBracket: '⟧',\n RightDownTeeVector: '⥝',\n RightDownVector: '⇂',\n RightDownVectorBar: '⥕',\n RightFloor: '⌋',\n RightTee: '⊢',\n RightTeeArrow: '↦',\n RightTeeVector: '⥛',\n RightTriangle: '⊳',\n RightTriangleBar: '⧐',\n RightTriangleEqual: '⊵',\n RightUpDownVector: '⥏',\n RightUpTeeVector: '⥜',\n RightUpVector: '↾',\n RightUpVectorBar: '⥔',\n RightVector: '⇀',\n RightVectorBar: '⥓',\n Rightarrow: '⇒',\n Ropf: 'ℝ',\n RoundImplies: '⥰',\n Rrightarrow: '⇛',\n Rscr: 'ℛ',\n Rsh: '↱',\n RuleDelayed: '⧴',\n SHCHcy: 'Щ',\n SHcy: 'Ш',\n SOFTcy: 'Ь',\n Sacute: 'Ś',\n Sc: '⪼',\n Scaron: 'Š',\n Scedil: 'Ş',\n Scirc: 'Ŝ',\n Scy: 'С',\n Sfr: '𝔖',\n ShortDownArrow: '↓',\n ShortLeftArrow: '←',\n ShortRightArrow: '→',\n ShortUpArrow: '↑',\n Sigma: 'Σ',\n SmallCircle: '∘',\n Sopf: '𝕊',\n Sqrt: '√',\n Square: '□',\n SquareIntersection: '⊓',\n SquareSubset: '⊏',\n SquareSubsetEqual: '⊑',\n SquareSuperset: '⊐',\n SquareSupersetEqual: '⊒',\n SquareUnion: '⊔',\n Sscr: '𝒮',\n Star: '⋆',\n Sub: '⋐',\n Subset: '⋐',\n SubsetEqual: '⊆',\n Succeeds: '≻',\n SucceedsEqual: '⪰',\n SucceedsSlantEqual: '≽',\n SucceedsTilde: '≿',\n SuchThat: '∋',\n Sum: '∑',\n Sup: '⋑',\n Superset: '⊃',\n SupersetEqual: '⊇',\n Supset: '⋑',\n THORN: 'Þ',\n TRADE: '™',\n TSHcy: 'Ћ',\n TScy: 'Ц',\n Tab: '\\t',\n Tau: 'Τ',\n Tcaron: 'Ť',\n Tcedil: 'Ţ',\n Tcy: 'Т',\n Tfr: '𝔗',\n Therefore: '∴',\n Theta: 'Θ',\n ThickSpace: ' ',\n ThinSpace: ' ',\n Tilde: '∼',\n TildeEqual: '≃',\n TildeFullEqual: '≅',\n TildeTilde: '≈',\n Topf: '𝕋',\n TripleDot: '⃛',\n Tscr: '𝒯',\n Tstrok: 'Ŧ',\n Uacute: 'Ú',\n Uarr: '↟',\n Uarrocir: '⥉',\n Ubrcy: 'Ў',\n Ubreve: 'Ŭ',\n Ucirc: 'Û',\n Ucy: 'У',\n Udblac: 'Ű',\n Ufr: '𝔘',\n Ugrave: 'Ù',\n Umacr: 'Ū',\n UnderBar: '_',\n UnderBrace: '⏟',\n UnderBracket: '⎵',\n UnderParenthesis: '⏝',\n Union: '⋃',\n UnionPlus: '⊎',\n Uogon: 'Ų',\n Uopf: '𝕌',\n UpArrow: '↑',\n UpArrowBar: '⤒',\n UpArrowDownArrow: '⇅',\n UpDownArrow: '↕',\n UpEquilibrium: '⥮',\n UpTee: '⊥',\n UpTeeArrow: '↥',\n Uparrow: '⇑',\n Updownarrow: '⇕',\n UpperLeftArrow: '↖',\n UpperRightArrow: '↗',\n Upsi: 'ϒ',\n Upsilon: 'Υ',\n Uring: 'Ů',\n Uscr: '𝒰',\n Utilde: 'Ũ',\n Uuml: 'Ü',\n VDash: '⊫',\n Vbar: '⫫',\n Vcy: 'В',\n Vdash: '⊩',\n Vdashl: '⫦',\n Vee: '⋁',\n Verbar: '‖',\n Vert: '‖',\n VerticalBar: '∣',\n VerticalLine: '|',\n VerticalSeparator: '❘',\n VerticalTilde: '≀',\n VeryThinSpace: ' ',\n Vfr: '𝔙',\n Vopf: '𝕍',\n Vscr: '𝒱',\n Vvdash: '⊪',\n Wcirc: 'Ŵ',\n Wedge: '⋀',\n Wfr: '𝔚',\n Wopf: '𝕎',\n Wscr: '𝒲',\n Xfr: '𝔛',\n Xi: 'Ξ',\n Xopf: '𝕏',\n Xscr: '𝒳',\n YAcy: 'Я',\n YIcy: 'Ї',\n YUcy: 'Ю',\n Yacute: 'Ý',\n Ycirc: 'Ŷ',\n Ycy: 'Ы',\n Yfr: '𝔜',\n Yopf: '𝕐',\n Yscr: '𝒴',\n Yuml: 'Ÿ',\n ZHcy: 'Ж',\n Zacute: 'Ź',\n Zcaron: 'Ž',\n Zcy: 'З',\n Zdot: 'Ż',\n ZeroWidthSpace: '',\n Zeta: 'Ζ',\n Zfr: 'ℨ',\n Zopf: 'ℤ',\n Zscr: '𝒵',\n aacute: 'á',\n abreve: 'ă',\n ac: '∾',\n acE: '∾̳',\n acd: '∿',\n acirc: 'â',\n acute: '´',\n acy: 'а',\n aelig: 'æ',\n af: '',\n afr: '𝔞',\n agrave: 'à',\n alefsym: 'ℵ',\n aleph: 'ℵ',\n alpha: 'α',\n amacr: 'ā',\n amalg: '⨿',\n amp: '&',\n and: '∧',\n andand: '⩕',\n andd: '⩜',\n andslope: '⩘',\n andv: '⩚',\n ang: '∠',\n ange: '⦤',\n angle: '∠',\n angmsd: '∡',\n angmsdaa: '⦨',\n angmsdab: '⦩',\n angmsdac: '⦪',\n angmsdad: '⦫',\n angmsdae: '⦬',\n angmsdaf: '⦭',\n angmsdag: '⦮',\n angmsdah: '⦯',\n angrt: '∟',\n angrtvb: '⊾',\n angrtvbd: '⦝',\n angsph: '∢',\n angst: 'Å',\n angzarr: '⍼',\n aogon: 'ą',\n aopf: '𝕒',\n ap: '≈',\n apE: '⩰',\n apacir: '⩯',\n ape: '≊',\n apid: '≋',\n apos: \"'\",\n approx: '≈',\n approxeq: '≊',\n aring: 'å',\n ascr: '𝒶',\n ast: '*',\n asymp: '≈',\n asympeq: '≍',\n atilde: 'ã',\n auml: 'ä',\n awconint: '∳',\n awint: '⨑',\n bNot: '⫭',\n backcong: '≌',\n backepsilon: '϶',\n backprime: '‵',\n backsim: '∽',\n backsimeq: '⋍',\n barvee: '⊽',\n barwed: '⌅',\n barwedge: '⌅',\n bbrk: '⎵',\n bbrktbrk: '⎶',\n bcong: '≌',\n bcy: 'б',\n bdquo: '„',\n becaus: '∵',\n because: '∵',\n bemptyv: '⦰',\n bepsi: '϶',\n bernou: 'ℬ',\n beta: 'β',\n beth: 'ℶ',\n between: '≬',\n bfr: '𝔟',\n bigcap: '⋂',\n bigcirc: '◯',\n bigcup: '⋃',\n bigodot: '⨀',\n bigoplus: '⨁',\n bigotimes: '⨂',\n bigsqcup: '⨆',\n bigstar: '★',\n bigtriangledown: '▽',\n bigtriangleup: '△',\n biguplus: '⨄',\n bigvee: '⋁',\n bigwedge: '⋀',\n bkarow: '⤍',\n blacklozenge: '⧫',\n blacksquare: '▪',\n blacktriangle: '▴',\n blacktriangledown: '▾',\n blacktriangleleft: '◂',\n blacktriangleright: '▸',\n blank: '␣',\n blk12: '▒',\n blk14: '░',\n blk34: '▓',\n block: '█',\n bne: '=⃥',\n bnequiv: '≡⃥',\n bnot: '⌐',\n bopf: '𝕓',\n bot: '⊥',\n bottom: '⊥',\n bowtie: '⋈',\n boxDL: '╗',\n boxDR: '╔',\n boxDl: '╖',\n boxDr: '╓',\n boxH: '═',\n boxHD: '╦',\n boxHU: '╩',\n boxHd: '╤',\n boxHu: '╧',\n boxUL: '╝',\n boxUR: '╚',\n boxUl: '╜',\n boxUr: '╙',\n boxV: '║',\n boxVH: '╬',\n boxVL: '╣',\n boxVR: '╠',\n boxVh: '╫',\n boxVl: '╢',\n boxVr: '╟',\n boxbox: '⧉',\n boxdL: '╕',\n boxdR: '╒',\n boxdl: '┐',\n boxdr: '┌',\n boxh: '─',\n boxhD: '╥',\n boxhU: '╨',\n boxhd: '┬',\n boxhu: '┴',\n boxminus: '⊟',\n boxplus: '⊞',\n boxtimes: '⊠',\n boxuL: '╛',\n boxuR: '╘',\n boxul: '┘',\n boxur: '└',\n boxv: '│',\n boxvH: '╪',\n boxvL: '╡',\n boxvR: '╞',\n boxvh: '┼',\n boxvl: '┤',\n boxvr: '├',\n bprime: '‵',\n breve: '˘',\n brvbar: '¦',\n bscr: '𝒷',\n bsemi: '⁏',\n bsim: '∽',\n bsime: '⋍',\n bsol: '\\\\',\n bsolb: '⧅',\n bsolhsub: '⟈',\n bull: '•',\n bullet: '•',\n bump: '≎',\n bumpE: '⪮',\n bumpe: '≏',\n bumpeq: '≏',\n cacute: 'ć',\n cap: '∩',\n capand: '⩄',\n capbrcup: '⩉',\n capcap: '⩋',\n capcup: '⩇',\n capdot: '⩀',\n caps: '∩︀',\n caret: '⁁',\n caron: 'ˇ',\n ccaps: '⩍',\n ccaron: 'č',\n ccedil: 'ç',\n ccirc: 'ĉ',\n ccups: '⩌',\n ccupssm: '⩐',\n cdot: 'ċ',\n cedil: '¸',\n cemptyv: '⦲',\n cent: '¢',\n centerdot: '·',\n cfr: '𝔠',\n chcy: 'ч',\n check: '✓',\n checkmark: '✓',\n chi: 'χ',\n cir: '○',\n cirE: '⧃',\n circ: 'ˆ',\n circeq: '≗',\n circlearrowleft: '↺',\n circlearrowright: '↻',\n circledR: '®',\n circledS: 'Ⓢ',\n circledast: '⊛',\n circledcirc: '⊚',\n circleddash: '⊝',\n cire: '≗',\n cirfnint: '⨐',\n cirmid: '⫯',\n cirscir: '⧂',\n clubs: '♣',\n clubsuit: '♣',\n colon: ':',\n colone: '≔',\n coloneq: '≔',\n comma: ',',\n commat: '@',\n comp: '∁',\n compfn: '∘',\n complement: '∁',\n complexes: 'ℂ',\n cong: '≅',\n congdot: '⩭',\n conint: '∮',\n copf: '𝕔',\n coprod: '∐',\n copy: '©',\n copysr: '℗',\n crarr: '↵',\n cross: '✗',\n cscr: '𝒸',\n csub: '⫏',\n csube: '⫑',\n csup: '⫐',\n csupe: '⫒',\n ctdot: '⋯',\n cudarrl: '⤸',\n cudarrr: '⤵',\n cuepr: '⋞',\n cuesc: '⋟',\n cularr: '↶',\n cularrp: '⤽',\n cup: '∪',\n cupbrcap: '⩈',\n cupcap: '⩆',\n cupcup: '⩊',\n cupdot: '⊍',\n cupor: '⩅',\n cups: '∪︀',\n curarr: '↷',\n curarrm: '⤼',\n curlyeqprec: '⋞',\n curlyeqsucc: '⋟',\n curlyvee: '⋎',\n curlywedge: '⋏',\n curren: '¤',\n curvearrowleft: '↶',\n curvearrowright: '↷',\n cuvee: '⋎',\n cuwed: '⋏',\n cwconint: '∲',\n cwint: '∱',\n cylcty: '⌭',\n dArr: '⇓',\n dHar: '⥥',\n dagger: '†',\n daleth: 'ℸ',\n darr: '↓',\n dash: '‐',\n dashv: '⊣',\n dbkarow: '⤏',\n dblac: '˝',\n dcaron: 'ď',\n dcy: 'д',\n dd: 'ⅆ',\n ddagger: '‡',\n ddarr: '⇊',\n ddotseq: '⩷',\n deg: '°',\n delta: 'δ',\n demptyv: '⦱',\n dfisht: '⥿',\n dfr: '𝔡',\n dharl: '⇃',\n dharr: '⇂',\n diam: '⋄',\n diamond: '⋄',\n diamondsuit: '♦',\n diams: '♦',\n die: '¨',\n digamma: 'ϝ',\n disin: '⋲',\n div: '÷',\n divide: '÷',\n divideontimes: '⋇',\n divonx: '⋇',\n djcy: 'ђ',\n dlcorn: '⌞',\n dlcrop: '⌍',\n dollar: '$',\n dopf: '𝕕',\n dot: '˙',\n doteq: '≐',\n doteqdot: '≑',\n dotminus: '∸',\n dotplus: '∔',\n dotsquare: '⊡',\n doublebarwedge: '⌆',\n downarrow: '↓',\n downdownarrows: '⇊',\n downharpoonleft: '⇃',\n downharpoonright: '⇂',\n drbkarow: '⤐',\n drcorn: '⌟',\n drcrop: '⌌',\n dscr: '𝒹',\n dscy: 'ѕ',\n dsol: '⧶',\n dstrok: 'đ',\n dtdot: '⋱',\n dtri: '▿',\n dtrif: '▾',\n duarr: '⇵',\n duhar: '⥯',\n dwangle: '⦦',\n dzcy: 'џ',\n dzigrarr: '⟿',\n eDDot: '⩷',\n eDot: '≑',\n eacute: 'é',\n easter: '⩮',\n ecaron: 'ě',\n ecir: '≖',\n ecirc: 'ê',\n ecolon: '≕',\n ecy: 'э',\n edot: 'ė',\n ee: 'ⅇ',\n efDot: '≒',\n efr: '𝔢',\n eg: '⪚',\n egrave: 'è',\n egs: '⪖',\n egsdot: '⪘',\n el: '⪙',\n elinters: '⏧',\n ell: 'ℓ',\n els: '⪕',\n elsdot: '⪗',\n emacr: 'ē',\n empty: '∅',\n emptyset: '∅',\n emptyv: '∅',\n emsp13: ' ',\n emsp14: ' ',\n emsp: ' ',\n eng: 'ŋ',\n ensp: ' ',\n eogon: 'ę',\n eopf: '𝕖',\n epar: '⋕',\n eparsl: '⧣',\n eplus: '⩱',\n epsi: 'ε',\n epsilon: 'ε',\n epsiv: 'ϵ',\n eqcirc: '≖',\n eqcolon: '≕',\n eqsim: '≂',\n eqslantgtr: '⪖',\n eqslantless: '⪕',\n equals: '=',\n equest: '≟',\n equiv: '≡',\n equivDD: '⩸',\n eqvparsl: '⧥',\n erDot: '≓',\n erarr: '⥱',\n escr: 'ℯ',\n esdot: '≐',\n esim: '≂',\n eta: 'η',\n eth: 'ð',\n euml: 'ë',\n euro: '€',\n excl: '!',\n exist: '∃',\n expectation: 'ℰ',\n exponentiale: 'ⅇ',\n fallingdotseq: '≒',\n fcy: 'ф',\n female: '♀',\n ffilig: 'ffi',\n fflig: 'ff',\n ffllig: 'ffl',\n ffr: '𝔣',\n filig: 'fi',\n fjlig: 'fj',\n flat: '♭',\n fllig: 'fl',\n fltns: '▱',\n fnof: 'ƒ',\n fopf: '𝕗',\n forall: '∀',\n fork: '⋔',\n forkv: '⫙',\n fpartint: '⨍',\n frac12: '½',\n frac13: '⅓',\n frac14: '¼',\n frac15: '⅕',\n frac16: '⅙',\n frac18: '⅛',\n frac23: '⅔',\n frac25: '⅖',\n frac34: '¾',\n frac35: '⅗',\n frac38: '⅜',\n frac45: '⅘',\n frac56: '⅚',\n frac58: '⅝',\n frac78: '⅞',\n frasl: '⁄',\n frown: '⌢',\n fscr: '𝒻',\n gE: '≧',\n gEl: '⪌',\n gacute: 'ǵ',\n gamma: 'γ',\n gammad: 'ϝ',\n gap: '⪆',\n gbreve: 'ğ',\n gcirc: 'ĝ',\n gcy: 'г',\n gdot: 'ġ',\n ge: '≥',\n gel: '⋛',\n geq: '≥',\n geqq: '≧',\n geqslant: '⩾',\n ges: '⩾',\n gescc: '⪩',\n gesdot: '⪀',\n gesdoto: '⪂',\n gesdotol: '⪄',\n gesl: '⋛︀',\n gesles: '⪔',\n gfr: '𝔤',\n gg: '≫',\n ggg: '⋙',\n gimel: 'ℷ',\n gjcy: 'ѓ',\n gl: '≷',\n glE: '⪒',\n gla: '⪥',\n glj: '⪤',\n gnE: '≩',\n gnap: '⪊',\n gnapprox: '⪊',\n gne: '⪈',\n gneq: '⪈',\n gneqq: '≩',\n gnsim: '⋧',\n gopf: '𝕘',\n grave: '`',\n gscr: 'ℊ',\n gsim: '≳',\n gsime: '⪎',\n gsiml: '⪐',\n gt: '>',\n gtcc: '⪧',\n gtcir: '⩺',\n gtdot: '⋗',\n gtlPar: '⦕',\n gtquest: '⩼',\n gtrapprox: '⪆',\n gtrarr: '⥸',\n gtrdot: '⋗',\n gtreqless: '⋛',\n gtreqqless: '⪌',\n gtrless: '≷',\n gtrsim: '≳',\n gvertneqq: '≩︀',\n gvnE: '≩︀',\n hArr: '⇔',\n hairsp: ' ',\n half: '½',\n hamilt: 'ℋ',\n hardcy: 'ъ',\n harr: '↔',\n harrcir: '⥈',\n harrw: '↭',\n hbar: 'ℏ',\n hcirc: 'ĥ',\n hearts: '♥',\n heartsuit: '♥',\n hellip: '…',\n hercon: '⊹',\n hfr: '𝔥',\n hksearow: '⤥',\n hkswarow: '⤦',\n hoarr: '⇿',\n homtht: '∻',\n hookleftarrow: '↩',\n hookrightarrow: '↪',\n hopf: '𝕙',\n horbar: '―',\n hscr: '𝒽',\n hslash: 'ℏ',\n hstrok: 'ħ',\n hybull: '⁃',\n hyphen: '‐',\n iacute: 'í',\n ic: '',\n icirc: 'î',\n icy: 'и',\n iecy: 'е',\n iexcl: '¡',\n iff: '⇔',\n ifr: '𝔦',\n igrave: 'ì',\n ii: 'ⅈ',\n iiiint: '⨌',\n iiint: '∭',\n iinfin: '⧜',\n iiota: '℩',\n ijlig: 'ij',\n imacr: 'ī',\n image: 'ℑ',\n imagline: 'ℐ',\n imagpart: 'ℑ',\n imath: 'ı',\n imof: '⊷',\n imped: 'Ƶ',\n in: '∈',\n incare: '℅',\n infin: '∞',\n infintie: '⧝',\n inodot: 'ı',\n int: '∫',\n intcal: '⊺',\n integers: 'ℤ',\n intercal: '⊺',\n intlarhk: '⨗',\n intprod: '⨼',\n iocy: 'ё',\n iogon: 'į',\n iopf: '𝕚',\n iota: 'ι',\n iprod: '⨼',\n iquest: '¿',\n iscr: '𝒾',\n isin: '∈',\n isinE: '⋹',\n isindot: '⋵',\n isins: '⋴',\n isinsv: '⋳',\n isinv: '∈',\n it: '',\n itilde: 'ĩ',\n iukcy: 'і',\n iuml: 'ï',\n jcirc: 'ĵ',\n jcy: 'й',\n jfr: '𝔧',\n jmath: 'ȷ',\n jopf: '𝕛',\n jscr: '𝒿',\n jsercy: 'ј',\n jukcy: 'є',\n kappa: 'κ',\n kappav: 'ϰ',\n kcedil: 'ķ',\n kcy: 'к',\n kfr: '𝔨',\n kgreen: 'ĸ',\n khcy: 'х',\n kjcy: 'ќ',\n kopf: '𝕜',\n kscr: '𝓀',\n lAarr: '⇚',\n lArr: '⇐',\n lAtail: '⤛',\n lBarr: '⤎',\n lE: '≦',\n lEg: '⪋',\n lHar: '⥢',\n lacute: 'ĺ',\n laemptyv: '⦴',\n lagran: 'ℒ',\n lambda: 'λ',\n lang: '⟨',\n langd: '⦑',\n langle: '⟨',\n lap: '⪅',\n laquo: '«',\n larr: '←',\n larrb: '⇤',\n larrbfs: '⤟',\n larrfs: '⤝',\n larrhk: '↩',\n larrlp: '↫',\n larrpl: '⤹',\n larrsim: '⥳',\n larrtl: '↢',\n lat: '⪫',\n latail: '⤙',\n late: '⪭',\n lates: '⪭︀',\n lbarr: '⤌',\n lbbrk: '❲',\n lbrace: '{',\n lbrack: '[',\n lbrke: '⦋',\n lbrksld: '⦏',\n lbrkslu: '⦍',\n lcaron: 'ľ',\n lcedil: 'ļ',\n lceil: '⌈',\n lcub: '{',\n lcy: 'л',\n ldca: '⤶',\n ldquo: '“',\n ldquor: '„',\n ldrdhar: '⥧',\n ldrushar: '⥋',\n ldsh: '↲',\n le: '≤',\n leftarrow: '←',\n leftarrowtail: '↢',\n leftharpoondown: '↽',\n leftharpoonup: '↼',\n leftleftarrows: '⇇',\n leftrightarrow: '↔',\n leftrightarrows: '⇆',\n leftrightharpoons: '⇋',\n leftrightsquigarrow: '↭',\n leftthreetimes: '⋋',\n leg: '⋚',\n leq: '≤',\n leqq: '≦',\n leqslant: '⩽',\n les: '⩽',\n lescc: '⪨',\n lesdot: '⩿',\n lesdoto: '⪁',\n lesdotor: '⪃',\n lesg: '⋚︀',\n lesges: '⪓',\n lessapprox: '⪅',\n lessdot: '⋖',\n lesseqgtr: '⋚',\n lesseqqgtr: '⪋',\n lessgtr: '≶',\n lesssim: '≲',\n lfisht: '⥼',\n lfloor: '⌊',\n lfr: '𝔩',\n lg: '≶',\n lgE: '⪑',\n lhard: '↽',\n lharu: '↼',\n lharul: '⥪',\n lhblk: '▄',\n ljcy: 'љ',\n ll: '≪',\n llarr: '⇇',\n llcorner: '⌞',\n llhard: '⥫',\n lltri: '◺',\n lmidot: 'ŀ',\n lmoust: '⎰',\n lmoustache: '⎰',\n lnE: '≨',\n lnap: '⪉',\n lnapprox: '⪉',\n lne: '⪇',\n lneq: '⪇',\n lneqq: '≨',\n lnsim: '⋦',\n loang: '⟬',\n loarr: '⇽',\n lobrk: '⟦',\n longleftarrow: '⟵',\n longleftrightarrow: '⟷',\n longmapsto: '⟼',\n longrightarrow: '⟶',\n looparrowleft: '↫',\n looparrowright: '↬',\n lopar: '⦅',\n lopf: '𝕝',\n loplus: '⨭',\n lotimes: '⨴',\n lowast: '∗',\n lowbar: '_',\n loz: '◊',\n lozenge: '◊',\n lozf: '⧫',\n lpar: '(',\n lparlt: '⦓',\n lrarr: '⇆',\n lrcorner: '⌟',\n lrhar: '⇋',\n lrhard: '⥭',\n lrm: '',\n lrtri: '⊿',\n lsaquo: '‹',\n lscr: '𝓁',\n lsh: '↰',\n lsim: '≲',\n lsime: '⪍',\n lsimg: '⪏',\n lsqb: '[',\n lsquo: '‘',\n lsquor: '‚',\n lstrok: 'ł',\n lt: '<',\n ltcc: '⪦',\n ltcir: '⩹',\n ltdot: '⋖',\n lthree: '⋋',\n ltimes: '⋉',\n ltlarr: '⥶',\n ltquest: '⩻',\n ltrPar: '⦖',\n ltri: '◃',\n ltrie: '⊴',\n ltrif: '◂',\n lurdshar: '⥊',\n luruhar: '⥦',\n lvertneqq: '≨︀',\n lvnE: '≨︀',\n mDDot: '∺',\n macr: '¯',\n male: '♂',\n malt: '✠',\n maltese: '✠',\n map: '↦',\n mapsto: '↦',\n mapstodown: '↧',\n mapstoleft: '↤',\n mapstoup: '↥',\n marker: '▮',\n mcomma: '⨩',\n mcy: 'м',\n mdash: '—',\n measuredangle: '∡',\n mfr: '𝔪',\n mho: '℧',\n micro: 'µ',\n mid: '∣',\n midast: '*',\n midcir: '⫰',\n middot: '·',\n minus: '−',\n minusb: '⊟',\n minusd: '∸',\n minusdu: '⨪',\n mlcp: '⫛',\n mldr: '…',\n mnplus: '∓',\n models: '⊧',\n mopf: '𝕞',\n mp: '∓',\n mscr: '𝓂',\n mstpos: '∾',\n mu: 'μ',\n multimap: '⊸',\n mumap: '⊸',\n nGg: '⋙̸',\n nGt: '≫⃒',\n nGtv: '≫̸',\n nLeftarrow: '⇍',\n nLeftrightarrow: '⇎',\n nLl: '⋘̸',\n nLt: '≪⃒',\n nLtv: '≪̸',\n nRightarrow: '⇏',\n nVDash: '⊯',\n nVdash: '⊮',\n nabla: '∇',\n nacute: 'ń',\n nang: '∠⃒',\n nap: '≉',\n napE: '⩰̸',\n napid: '≋̸',\n napos: 'ʼn',\n napprox: '≉',\n natur: '♮',\n natural: '♮',\n naturals: 'ℕ',\n nbsp: ' ',\n nbump: '≎̸',\n nbumpe: '≏̸',\n ncap: '⩃',\n ncaron: 'ň',\n ncedil: 'ņ',\n ncong: '≇',\n ncongdot: '⩭̸',\n ncup: '⩂',\n ncy: 'н',\n ndash: '–',\n ne: '≠',\n neArr: '⇗',\n nearhk: '⤤',\n nearr: '↗',\n nearrow: '↗',\n nedot: '≐̸',\n nequiv: '≢',\n nesear: '⤨',\n nesim: '≂̸',\n nexist: '∄',\n nexists: '∄',\n nfr: '𝔫',\n ngE: '≧̸',\n nge: '≱',\n ngeq: '≱',\n ngeqq: '≧̸',\n ngeqslant: '⩾̸',\n nges: '⩾̸',\n ngsim: '≵',\n ngt: '≯',\n ngtr: '≯',\n nhArr: '⇎',\n nharr: '↮',\n nhpar: '⫲',\n ni: '∋',\n nis: '⋼',\n nisd: '⋺',\n niv: '∋',\n njcy: 'њ',\n nlArr: '⇍',\n nlE: '≦̸',\n nlarr: '↚',\n nldr: '‥',\n nle: '≰',\n nleftarrow: '↚',\n nleftrightarrow: '↮',\n nleq: '≰',\n nleqq: '≦̸',\n nleqslant: '⩽̸',\n nles: '⩽̸',\n nless: '≮',\n nlsim: '≴',\n nlt: '≮',\n nltri: '⋪',\n nltrie: '⋬',\n nmid: '∤',\n nopf: '𝕟',\n not: '¬',\n notin: '∉',\n notinE: '⋹̸',\n notindot: '⋵̸',\n notinva: '∉',\n notinvb: '⋷',\n notinvc: '⋶',\n notni: '∌',\n notniva: '∌',\n notnivb: '⋾',\n notnivc: '⋽',\n npar: '∦',\n nparallel: '∦',\n nparsl: '⫽⃥',\n npart: '∂̸',\n npolint: '⨔',\n npr: '⊀',\n nprcue: '⋠',\n npre: '⪯̸',\n nprec: '⊀',\n npreceq: '⪯̸',\n nrArr: '⇏',\n nrarr: '↛',\n nrarrc: '⤳̸',\n nrarrw: '↝̸',\n nrightarrow: '↛',\n nrtri: '⋫',\n nrtrie: '⋭',\n nsc: '⊁',\n nsccue: '⋡',\n nsce: '⪰̸',\n nscr: '𝓃',\n nshortmid: '∤',\n nshortparallel: '∦',\n nsim: '≁',\n nsime: '≄',\n nsimeq: '≄',\n nsmid: '∤',\n nspar: '∦',\n nsqsube: '⋢',\n nsqsupe: '⋣',\n nsub: '⊄',\n nsubE: '⫅̸',\n nsube: '⊈',\n nsubset: '⊂⃒',\n nsubseteq: '⊈',\n nsubseteqq: '⫅̸',\n nsucc: '⊁',\n nsucceq: '⪰̸',\n nsup: '⊅',\n nsupE: '⫆̸',\n nsupe: '⊉',\n nsupset: '⊃⃒',\n nsupseteq: '⊉',\n nsupseteqq: '⫆̸',\n ntgl: '≹',\n ntilde: 'ñ',\n ntlg: '≸',\n ntriangleleft: '⋪',\n ntrianglelefteq: '⋬',\n ntriangleright: '⋫',\n ntrianglerighteq: '⋭',\n nu: 'ν',\n num: '#',\n numero: '№',\n numsp: ' ',\n nvDash: '⊭',\n nvHarr: '⤄',\n nvap: '≍⃒',\n nvdash: '⊬',\n nvge: '≥⃒',\n nvgt: '>⃒',\n nvinfin: '⧞',\n nvlArr: '⤂',\n nvle: '≤⃒',\n nvlt: '<⃒',\n nvltrie: '⊴⃒',\n nvrArr: '⤃',\n nvrtrie: '⊵⃒',\n nvsim: '∼⃒',\n nwArr: '⇖',\n nwarhk: '⤣',\n nwarr: '↖',\n nwarrow: '↖',\n nwnear: '⤧',\n oS: 'Ⓢ',\n oacute: 'ó',\n oast: '⊛',\n ocir: '⊚',\n ocirc: 'ô',\n ocy: 'о',\n odash: '⊝',\n odblac: 'ő',\n odiv: '⨸',\n odot: '⊙',\n odsold: '⦼',\n oelig: 'œ',\n ofcir: '⦿',\n ofr: '𝔬',\n ogon: '˛',\n ograve: 'ò',\n ogt: '⧁',\n ohbar: '⦵',\n ohm: 'Ω',\n oint: '∮',\n olarr: '↺',\n olcir: '⦾',\n olcross: '⦻',\n oline: '‾',\n olt: '⧀',\n omacr: 'ō',\n omega: 'ω',\n omicron: 'ο',\n omid: '⦶',\n ominus: '⊖',\n oopf: '𝕠',\n opar: '⦷',\n operp: '⦹',\n oplus: '⊕',\n or: '∨',\n orarr: '↻',\n ord: '⩝',\n order: 'ℴ',\n orderof: 'ℴ',\n ordf: 'ª',\n ordm: 'º',\n origof: '⊶',\n oror: '⩖',\n orslope: '⩗',\n orv: '⩛',\n oscr: 'ℴ',\n oslash: 'ø',\n osol: '⊘',\n otilde: 'õ',\n otimes: '⊗',\n otimesas: '⨶',\n ouml: 'ö',\n ovbar: '⌽',\n par: '∥',\n para: '¶',\n parallel: '∥',\n parsim: '⫳',\n parsl: '⫽',\n part: '∂',\n pcy: 'п',\n percnt: '%',\n period: '.',\n permil: '‰',\n perp: '⊥',\n pertenk: '‱',\n pfr: '𝔭',\n phi: 'φ',\n phiv: 'ϕ',\n phmmat: 'ℳ',\n phone: '☎',\n pi: 'π',\n pitchfork: '⋔',\n piv: 'ϖ',\n planck: 'ℏ',\n planckh: 'ℎ',\n plankv: 'ℏ',\n plus: '+',\n plusacir: '⨣',\n plusb: '⊞',\n pluscir: '⨢',\n plusdo: '∔',\n plusdu: '⨥',\n pluse: '⩲',\n plusmn: '±',\n plussim: '⨦',\n plustwo: '⨧',\n pm: '±',\n pointint: '⨕',\n popf: '𝕡',\n pound: '£',\n pr: '≺',\n prE: '⪳',\n prap: '⪷',\n prcue: '≼',\n pre: '⪯',\n prec: '≺',\n precapprox: '⪷',\n preccurlyeq: '≼',\n preceq: '⪯',\n precnapprox: '⪹',\n precneqq: '⪵',\n precnsim: '⋨',\n precsim: '≾',\n prime: '′',\n primes: 'ℙ',\n prnE: '⪵',\n prnap: '⪹',\n prnsim: '⋨',\n prod: '∏',\n profalar: '⌮',\n profline: '⌒',\n profsurf: '⌓',\n prop: '∝',\n propto: '∝',\n prsim: '≾',\n prurel: '⊰',\n pscr: '𝓅',\n psi: 'ψ',\n puncsp: ' ',\n qfr: '𝔮',\n qint: '⨌',\n qopf: '𝕢',\n qprime: '⁗',\n qscr: '𝓆',\n quaternions: 'ℍ',\n quatint: '⨖',\n quest: '?',\n questeq: '≟',\n quot: '\"',\n rAarr: '⇛',\n rArr: '⇒',\n rAtail: '⤜',\n rBarr: '⤏',\n rHar: '⥤',\n race: '∽̱',\n racute: 'ŕ',\n radic: '√',\n raemptyv: '⦳',\n rang: '⟩',\n rangd: '⦒',\n range: '⦥',\n rangle: '⟩',\n raquo: '»',\n rarr: '→',\n rarrap: '⥵',\n rarrb: '⇥',\n rarrbfs: '⤠',\n rarrc: '⤳',\n rarrfs: '⤞',\n rarrhk: '↪',\n rarrlp: '↬',\n rarrpl: '⥅',\n rarrsim: '⥴',\n rarrtl: '↣',\n rarrw: '↝',\n ratail: '⤚',\n ratio: '∶',\n rationals: 'ℚ',\n rbarr: '⤍',\n rbbrk: '❳',\n rbrace: '}',\n rbrack: ']',\n rbrke: '⦌',\n rbrksld: '⦎',\n rbrkslu: '⦐',\n rcaron: 'ř',\n rcedil: 'ŗ',\n rceil: '⌉',\n rcub: '}',\n rcy: 'р',\n rdca: '⤷',\n rdldhar: '⥩',\n rdquo: '”',\n rdquor: '”',\n rdsh: '↳',\n real: 'ℜ',\n realine: 'ℛ',\n realpart: 'ℜ',\n reals: 'ℝ',\n rect: '▭',\n reg: '®',\n rfisht: '⥽',\n rfloor: '⌋',\n rfr: '𝔯',\n rhard: '⇁',\n rharu: '⇀',\n rharul: '⥬',\n rho: 'ρ',\n rhov: 'ϱ',\n rightarrow: '→',\n rightarrowtail: '↣',\n rightharpoondown: '⇁',\n rightharpoonup: '⇀',\n rightleftarrows: '⇄',\n rightleftharpoons: '⇌',\n rightrightarrows: '⇉',\n rightsquigarrow: '↝',\n rightthreetimes: '⋌',\n ring: '˚',\n risingdotseq: '≓',\n rlarr: '⇄',\n rlhar: '⇌',\n rlm: '',\n rmoust: '⎱',\n rmoustache: '⎱',\n rnmid: '⫮',\n roang: '⟭',\n roarr: '⇾',\n robrk: '⟧',\n ropar: '⦆',\n ropf: '𝕣',\n roplus: '⨮',\n rotimes: '⨵',\n rpar: ')',\n rpargt: '⦔',\n rppolint: '⨒',\n rrarr: '⇉',\n rsaquo: '›',\n rscr: '𝓇',\n rsh: '↱',\n rsqb: ']',\n rsquo: '’',\n rsquor: '’',\n rthree: '⋌',\n rtimes: '⋊',\n rtri: '▹',\n rtrie: '⊵',\n rtrif: '▸',\n rtriltri: '⧎',\n ruluhar: '⥨',\n rx: '℞',\n sacute: 'ś',\n sbquo: '‚',\n sc: '≻',\n scE: '⪴',\n scap: '⪸',\n scaron: 'š',\n sccue: '≽',\n sce: '⪰',\n scedil: 'ş',\n scirc: 'ŝ',\n scnE: '⪶',\n scnap: '⪺',\n scnsim: '⋩',\n scpolint: '⨓',\n scsim: '≿',\n scy: 'с',\n sdot: '⋅',\n sdotb: '⊡',\n sdote: '⩦',\n seArr: '⇘',\n searhk: '⤥',\n searr: '↘',\n searrow: '↘',\n sect: '§',\n semi: ';',\n seswar: '⤩',\n setminus: '∖',\n setmn: '∖',\n sext: '✶',\n sfr: '𝔰',\n sfrown: '⌢',\n sharp: '♯',\n shchcy: 'щ',\n shcy: 'ш',\n shortmid: '∣',\n shortparallel: '∥',\n shy: '',\n sigma: 'σ',\n sigmaf: 'ς',\n sigmav: 'ς',\n sim: '∼',\n simdot: '⩪',\n sime: '≃',\n simeq: '≃',\n simg: '⪞',\n simgE: '⪠',\n siml: '⪝',\n simlE: '⪟',\n simne: '≆',\n simplus: '⨤',\n simrarr: '⥲',\n slarr: '←',\n smallsetminus: '∖',\n smashp: '⨳',\n smeparsl: '⧤',\n smid: '∣',\n smile: '⌣',\n smt: '⪪',\n smte: '⪬',\n smtes: '⪬︀',\n softcy: 'ь',\n sol: '/',\n solb: '⧄',\n solbar: '⌿',\n sopf: '𝕤',\n spades: '♠',\n spadesuit: '♠',\n spar: '∥',\n sqcap: '⊓',\n sqcaps: '⊓︀',\n sqcup: '⊔',\n sqcups: '⊔︀',\n sqsub: '⊏',\n sqsube: '⊑',\n sqsubset: '⊏',\n sqsubseteq: '⊑',\n sqsup: '⊐',\n sqsupe: '⊒',\n sqsupset: '⊐',\n sqsupseteq: '⊒',\n squ: '□',\n square: '□',\n squarf: '▪',\n squf: '▪',\n srarr: '→',\n sscr: '𝓈',\n ssetmn: '∖',\n ssmile: '⌣',\n sstarf: '⋆',\n star: '☆',\n starf: '★',\n straightepsilon: 'ϵ',\n straightphi: 'ϕ',\n strns: '¯',\n sub: '⊂',\n subE: '⫅',\n subdot: '⪽',\n sube: '⊆',\n subedot: '⫃',\n submult: '⫁',\n subnE: '⫋',\n subne: '⊊',\n subplus: '⪿',\n subrarr: '⥹',\n subset: '⊂',\n subseteq: '⊆',\n subseteqq: '⫅',\n subsetneq: '⊊',\n subsetneqq: '⫋',\n subsim: '⫇',\n subsub: '⫕',\n subsup: '⫓',\n succ: '≻',\n succapprox: '⪸',\n succcurlyeq: '≽',\n succeq: '⪰',\n succnapprox: '⪺',\n succneqq: '⪶',\n succnsim: '⋩',\n succsim: '≿',\n sum: '∑',\n sung: '♪',\n sup1: '¹',\n sup2: '²',\n sup3: '³',\n sup: '⊃',\n supE: '⫆',\n supdot: '⪾',\n supdsub: '⫘',\n supe: '⊇',\n supedot: '⫄',\n suphsol: '⟉',\n suphsub: '⫗',\n suplarr: '⥻',\n supmult: '⫂',\n supnE: '⫌',\n supne: '⊋',\n supplus: '⫀',\n supset: '⊃',\n supseteq: '⊇',\n supseteqq: '⫆',\n supsetneq: '⊋',\n supsetneqq: '⫌',\n supsim: '⫈',\n supsub: '⫔',\n supsup: '⫖',\n swArr: '⇙',\n swarhk: '⤦',\n swarr: '↙',\n swarrow: '↙',\n swnwar: '⤪',\n szlig: 'ß',\n target: '⌖',\n tau: 'τ',\n tbrk: '⎴',\n tcaron: 'ť',\n tcedil: 'ţ',\n tcy: 'т',\n tdot: '⃛',\n telrec: '⌕',\n tfr: '𝔱',\n there4: '∴',\n therefore: '∴',\n theta: 'θ',\n thetasym: 'ϑ',\n thetav: 'ϑ',\n thickapprox: '≈',\n thicksim: '∼',\n thinsp: ' ',\n thkap: '≈',\n thksim: '∼',\n thorn: 'þ',\n tilde: '˜',\n times: '×',\n timesb: '⊠',\n timesbar: '⨱',\n timesd: '⨰',\n tint: '∭',\n toea: '⤨',\n top: '⊤',\n topbot: '⌶',\n topcir: '⫱',\n topf: '𝕥',\n topfork: '⫚',\n tosa: '⤩',\n tprime: '‴',\n trade: '™',\n triangle: '▵',\n triangledown: '▿',\n triangleleft: '◃',\n trianglelefteq: '⊴',\n triangleq: '≜',\n triangleright: '▹',\n trianglerighteq: '⊵',\n tridot: '◬',\n trie: '≜',\n triminus: '⨺',\n triplus: '⨹',\n trisb: '⧍',\n tritime: '⨻',\n trpezium: '⏢',\n tscr: '𝓉',\n tscy: 'ц',\n tshcy: 'ћ',\n tstrok: 'ŧ',\n twixt: '≬',\n twoheadleftarrow: '↞',\n twoheadrightarrow: '↠',\n uArr: '⇑',\n uHar: '⥣',\n uacute: 'ú',\n uarr: '↑',\n ubrcy: 'ў',\n ubreve: 'ŭ',\n ucirc: 'û',\n ucy: 'у',\n udarr: '⇅',\n udblac: 'ű',\n udhar: '⥮',\n ufisht: '⥾',\n ufr: '𝔲',\n ugrave: 'ù',\n uharl: '↿',\n uharr: '↾',\n uhblk: '▀',\n ulcorn: '⌜',\n ulcorner: '⌜',\n ulcrop: '⌏',\n ultri: '◸',\n umacr: 'ū',\n uml: '¨',\n uogon: 'ų',\n uopf: '𝕦',\n uparrow: '↑',\n updownarrow: '↕',\n upharpoonleft: '↿',\n upharpoonright: '↾',\n uplus: '⊎',\n upsi: 'υ',\n upsih: 'ϒ',\n upsilon: 'υ',\n upuparrows: '⇈',\n urcorn: '⌝',\n urcorner: '⌝',\n urcrop: '⌎',\n uring: 'ů',\n urtri: '◹',\n uscr: '𝓊',\n utdot: '⋰',\n utilde: 'ũ',\n utri: '▵',\n utrif: '▴',\n uuarr: '⇈',\n uuml: 'ü',\n uwangle: '⦧',\n vArr: '⇕',\n vBar: '⫨',\n vBarv: '⫩',\n vDash: '⊨',\n vangrt: '⦜',\n varepsilon: 'ϵ',\n varkappa: 'ϰ',\n varnothing: '∅',\n varphi: 'ϕ',\n varpi: 'ϖ',\n varpropto: '∝',\n varr: '↕',\n varrho: 'ϱ',\n varsigma: 'ς',\n varsubsetneq: '⊊︀',\n varsubsetneqq: '⫋︀',\n varsupsetneq: '⊋︀',\n varsupsetneqq: '⫌︀',\n vartheta: 'ϑ',\n vartriangleleft: '⊲',\n vartriangleright: '⊳',\n vcy: 'в',\n vdash: '⊢',\n vee: '∨',\n veebar: '⊻',\n veeeq: '≚',\n vellip: '⋮',\n verbar: '|',\n vert: '|',\n vfr: '𝔳',\n vltri: '⊲',\n vnsub: '⊂⃒',\n vnsup: '⊃⃒',\n vopf: '𝕧',\n vprop: '∝',\n vrtri: '⊳',\n vscr: '𝓋',\n vsubnE: '⫋︀',\n vsubne: '⊊︀',\n vsupnE: '⫌︀',\n vsupne: '⊋︀',\n vzigzag: '⦚',\n wcirc: 'ŵ',\n wedbar: '⩟',\n wedge: '∧',\n wedgeq: '≙',\n weierp: '℘',\n wfr: '𝔴',\n wopf: '𝕨',\n wp: '℘',\n wr: '≀',\n wreath: '≀',\n wscr: '𝓌',\n xcap: '⋂',\n xcirc: '◯',\n xcup: '⋃',\n xdtri: '▽',\n xfr: '𝔵',\n xhArr: '⟺',\n xharr: '⟷',\n xi: 'ξ',\n xlArr: '⟸',\n xlarr: '⟵',\n xmap: '⟼',\n xnis: '⋻',\n xodot: '⨀',\n xopf: '𝕩',\n xoplus: '⨁',\n xotime: '⨂',\n xrArr: '⟹',\n xrarr: '⟶',\n xscr: '𝓍',\n xsqcup: '⨆',\n xuplus: '⨄',\n xutri: '△',\n xvee: '⋁',\n xwedge: '⋀',\n yacute: 'ý',\n yacy: 'я',\n ycirc: 'ŷ',\n ycy: 'ы',\n yen: '¥',\n yfr: '𝔶',\n yicy: 'ї',\n yopf: '𝕪',\n yscr: '𝓎',\n yucy: 'ю',\n yuml: 'ÿ',\n zacute: 'ź',\n zcaron: 'ž',\n zcy: 'з',\n zdot: 'ż',\n zeetrf: 'ℨ',\n zeta: 'ζ',\n zfr: '𝔷',\n zhcy: 'ж',\n zigrarr: '⇝',\n zopf: '𝕫',\n zscr: '𝓏',\n zwj: '',\n zwnj: ''\n}\n","import {characterEntities} from 'character-entities'\n\nconst own = {}.hasOwnProperty\n\n/**\n * Decode a single character reference (without the `&` or `;`).\n * You probably only need this when you’re building parsers yourself that follow\n * different rules compared to HTML.\n * This is optimized to be tiny in browsers.\n *\n * @param {string} value\n * `notin` (named), `#123` (deci), `#x123` (hexa).\n * @returns {string|false}\n * Decoded reference.\n */\nexport function decodeNamedCharacterReference(value) {\n return own.call(characterEntities, value) ? characterEntities[value] : false\n}\n","/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n * Item type.\n * @param {Array<T>} list\n * List to operate on.\n * @param {number} start\n * Index to remove/insert at (can be negative).\n * @param {number} remove\n * Number of items to remove.\n * @param {Array<T>} items\n * Items to inject into `list`.\n * @returns {undefined}\n * Nothing.\n */\nexport function splice(list, start, remove, items) {\n const end = list.length\n let chunkStart = 0\n /** @type {Array<unknown>} */\n let parameters\n\n // Make start between zero and `end` (included).\n if (start < 0) {\n start = -start > end ? 0 : end + start\n } else {\n start = start > end ? end : start\n }\n remove = remove > 0 ? remove : 0\n\n // No need to chunk the items if there’s only a couple (10k) items.\n if (items.length < 10000) {\n parameters = Array.from(items)\n parameters.unshift(start, remove)\n // @ts-expect-error Hush, it’s fine.\n list.splice(...parameters)\n } else {\n // Delete `remove` items starting from `start`\n if (remove) list.splice(start, remove)\n\n // Insert the items in chunks to not cause stack overflows.\n while (chunkStart < items.length) {\n parameters = items.slice(chunkStart, chunkStart + 10000)\n parameters.unshift(start, 0)\n // @ts-expect-error Hush, it’s fine.\n list.splice(...parameters)\n chunkStart += 10000\n start += 10000\n }\n }\n}\n\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n * Item type.\n * @param {Array<T>} list\n * List to operate on.\n * @param {Array<T>} items\n * Items to add to `list`.\n * @returns {Array<T>}\n * Either `list` or `items`.\n */\nexport function push(list, items) {\n if (list.length > 0) {\n splice(list, list.length, 0, items)\n return list\n }\n return items\n}\n","/**\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Handles} Handles\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine multiple syntax extensions into one.\n *\n * @param {Array<Extension>} extensions\n * List of syntax extensions.\n * @returns {NormalizedExtension}\n * A single combined extension.\n */\nexport function combineExtensions(extensions) {\n /** @type {NormalizedExtension} */\n const all = {}\n let index = -1\n\n while (++index < extensions.length) {\n syntaxExtension(all, extensions[index])\n }\n\n return all\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all\n * Extension to merge into.\n * @param {Extension} extension\n * Extension to merge.\n * @returns {undefined}\n */\nfunction syntaxExtension(all, extension) {\n /** @type {keyof Extension} */\n let hook\n\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n /** @type {Record<string, unknown>} */\n const left = maybe || (all[hook] = {})\n /** @type {Record<string, unknown> | undefined} */\n const right = extension[hook]\n /** @type {string} */\n let code\n\n if (right) {\n for (code in right) {\n if (!hasOwnProperty.call(left, code)) left[code] = []\n const value = right[code]\n constructs(\n // @ts-expect-error Looks like a list.\n left[code],\n Array.isArray(value) ? value : value ? [value] : []\n )\n }\n }\n }\n}\n\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {Array<unknown>} existing\n * @param {Array<unknown>} list\n * @returns {undefined}\n */\nfunction constructs(existing, list) {\n let index = -1\n /** @type {Array<unknown>} */\n const before = []\n\n while (++index < list.length) {\n // @ts-expect-error Looks like an object.\n ;(list[index].add === 'after' ? existing : before).push(list[index])\n }\n\n splice(existing, 0, 0, before)\n}\n\n/**\n * Combine multiple HTML extensions into one.\n *\n * @param {Array<HtmlExtension>} htmlExtensions\n * List of HTML extensions.\n * @returns {HtmlExtension}\n * A single combined HTML extension.\n */\nexport function combineHtmlExtensions(htmlExtensions) {\n /** @type {HtmlExtension} */\n const handlers = {}\n let index = -1\n\n while (++index < htmlExtensions.length) {\n htmlExtension(handlers, htmlExtensions[index])\n }\n\n return handlers\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all\n * Extension to merge into.\n * @param {HtmlExtension} extension\n * Extension to merge.\n * @returns {undefined}\n */\nfunction htmlExtension(all, extension) {\n /** @type {keyof HtmlExtension} */\n let hook\n\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n const left = maybe || (all[hook] = {})\n const right = extension[hook]\n /** @type {keyof Handles} */\n let type\n\n if (right) {\n for (type in right) {\n // @ts-expect-error assume document vs regular handler are managed correctly.\n left[type] = right[type]\n }\n }\n }\n}\n","/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n * Value to decode.\n * @param {number} base\n * Numeric base.\n * @returns {string}\n * Character.\n */\nexport function decodeNumericCharacterReference(value, base) {\n const code = Number.parseInt(value, base)\n if (\n // C0 except for HT, LF, FF, CR, space.\n code < 9 ||\n code === 11 ||\n (code > 13 && code < 32) ||\n // Control character (DEL) of C0, and C1 controls.\n (code > 126 && code < 160) ||\n // Lone high surrogates and low surrogates.\n (code > 55_295 && code < 57_344) ||\n // Noncharacters.\n (code > 64_975 && code < 65_008) /* eslint-disable no-bitwise */ ||\n (code & 65_535) === 65_535 ||\n (code & 65_535) === 65_534 /* eslint-enable no-bitwise */ ||\n // Out of range\n code > 1_114_111\n ) {\n return '\\uFFFD'\n }\n return String.fromCharCode(code)\n}\n","/**\n * Normalize an identifier (as found in references, definitions).\n *\n * Collapses markdown whitespace, trim, and then lower- and uppercase.\n *\n * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their\n * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different\n * uppercase character (U+0398 (`Θ`)).\n * So, to get a canonical form, we perform both lower- and uppercase.\n *\n * Using uppercase last makes sure keys will never interact with default\n * prototypal values (such as `constructor`): nothing in the prototype of\n * `Object` is uppercase.\n *\n * @param {string} value\n * Identifier to normalize.\n * @returns {string}\n * Normalized identifier.\n */\nexport function normalizeIdentifier(value) {\n return (\n value\n // Collapse markdown whitespace.\n .replace(/[\\t\\n\\r ]+/g, ' ')\n // Trim.\n .replace(/^ | $/g, '')\n // Some characters are considered “uppercase”, but if their lowercase\n // counterpart is uppercased will result in a different uppercase\n // character.\n // Hence, to get that form, we perform both lower- and uppercase.\n // Upper case makes sure keys will not interact with default prototypal\n // methods: no method is uppercase.\n .toLowerCase()\n .toUpperCase()\n )\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n */\n\nconst unicodePunctuationInternal = regexCheck(/\\p{P}/u)\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAlpha = regexCheck(/[A-Za-z]/)\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/)\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/)\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function asciiControl(code) {\n return (\n // Special whitespace codes (which have negative values), C0 and Control\n // character DEL\n code !== null && (code < 32 || code === 127)\n )\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiDigit = regexCheck(/\\d/)\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/)\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/)\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownLineEnding(code) {\n return code !== null && code < -2\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownLineEndingOrSpace(code) {\n return code !== null && (code < 0 || code === 32)\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownSpace(code) {\n return code === -2 || code === -1 || code === 32\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function unicodePunctuation(code) {\n return asciiPunctuation(code) || unicodePunctuationInternal(code)\n}\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const unicodeWhitespace = regexCheck(/\\s/)\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n * @returns {(code: Code) => boolean}\n */\nfunction regexCheck(regex) {\n return check\n\n /**\n * Check whether a code matches the bound regex.\n *\n * @param {Code} code\n * Character code.\n * @returns {boolean}\n * Whether the character code matches the bound regex.\n */\n function check(code) {\n return code !== null && code > -1 && regex.test(String.fromCharCode(code))\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {markdownSpace} from 'micromark-util-character'\n\n// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`.\n\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * * spaces in markdown are often optional, in which case this factory can be\n * used and `ok` will be switched to whether spaces were found or not\n * * one line ending or space can be detected with `markdownSpace(code)` right\n * before using `factorySpace`\n *\n * ###### Examples\n *\n * Where `␉` represents a tab (plus how much it expands) and `␠` represents a\n * single space.\n *\n * ```markdown\n * ␉\n * ␠␠␠␠\n * ␉␠\n * ```\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {TokenType} type\n * Type (`' \\t'`).\n * @param {number | undefined} [max=Infinity]\n * Max (exclusive).\n * @returns {State}\n * Start state.\n */\nexport function factorySpace(effects, ok, type, max) {\n const limit = max ? max - 1 : Number.POSITIVE_INFINITY\n let size = 0\n return start\n\n /** @type {State} */\n function start(code) {\n if (markdownSpace(code)) {\n effects.enter(type)\n return prefix(code)\n }\n return ok(code)\n }\n\n /** @type {State} */\n function prefix(code) {\n if (markdownSpace(code) && size++ < limit) {\n effects.consume(code)\n return prefix\n }\n effects.exit(type)\n return ok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {InitialConstruct} */\nexport const content = {\n tokenize: initializeContent\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeContent(effects) {\n const contentStart = effects.attempt(\n this.parser.constructs.contentInitial,\n afterContentStartConstruct,\n paragraphInitial\n )\n /** @type {Token} */\n let previous\n return contentStart\n\n /** @type {State} */\n function afterContentStartConstruct(code) {\n if (code === null) {\n effects.consume(code)\n return\n }\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(effects, contentStart, 'linePrefix')\n }\n\n /** @type {State} */\n function paragraphInitial(code) {\n effects.enter('paragraph')\n return lineStart(code)\n }\n\n /** @type {State} */\n function lineStart(code) {\n const token = effects.enter('chunkText', {\n contentType: 'text',\n previous\n })\n if (previous) {\n previous.next = token\n }\n previous = token\n return data(code)\n }\n\n /** @type {State} */\n function data(code) {\n if (code === null) {\n effects.exit('chunkText')\n effects.exit('paragraph')\n effects.consume(code)\n return\n }\n if (markdownLineEnding(code)) {\n effects.consume(code)\n effects.exit('chunkText')\n return lineStart\n }\n\n // Data.\n effects.consume(code)\n return data\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ContainerState} ContainerState\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n/**\n * @typedef {[Construct, ContainerState]} StackItem\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {splice} from 'micromark-util-chunked'\n/** @type {InitialConstruct} */\nexport const document = {\n tokenize: initializeDocument\n}\n\n/** @type {Construct} */\nconst containerConstruct = {\n tokenize: tokenizeContainer\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeDocument(effects) {\n const self = this\n /** @type {Array<StackItem>} */\n const stack = []\n let continued = 0\n /** @type {TokenizeContext | undefined} */\n let childFlow\n /** @type {Token | undefined} */\n let childToken\n /** @type {number} */\n let lineStartOffset\n return start\n\n /** @type {State} */\n function start(code) {\n // First we iterate through the open blocks, starting with the root\n // document, and descending through last children down to the last open\n // block.\n // Each block imposes a condition that the line must satisfy if the block is\n // to remain open.\n // For example, a block quote requires a `>` character.\n // A paragraph requires a non-blank line.\n // In this phase we may match all or just some of the open blocks.\n // But we cannot close unmatched blocks yet, because we may have a lazy\n // continuation line.\n if (continued < stack.length) {\n const item = stack[continued]\n self.containerState = item[1]\n return effects.attempt(\n item[0].continuation,\n documentContinue,\n checkNewContainers\n )(code)\n }\n\n // Done.\n return checkNewContainers(code)\n }\n\n /** @type {State} */\n function documentContinue(code) {\n continued++\n\n // Note: this field is called `_closeFlow` but it also closes containers.\n // Perhaps a good idea to rename it but it’s already used in the wild by\n // extensions.\n if (self.containerState._closeFlow) {\n self.containerState._closeFlow = undefined\n if (childFlow) {\n closeFlow()\n }\n\n // Note: this algorithm for moving events around is similar to the\n // algorithm when dealing with lazy lines in `writeToChild`.\n const indexBeforeExits = self.events.length\n let indexBeforeFlow = indexBeforeExits\n /** @type {Point | undefined} */\n let point\n\n // Find the flow chunk.\n while (indexBeforeFlow--) {\n if (\n self.events[indexBeforeFlow][0] === 'exit' &&\n self.events[indexBeforeFlow][1].type === 'chunkFlow'\n ) {\n point = self.events[indexBeforeFlow][1].end\n break\n }\n }\n exitContainers(continued)\n\n // Fix positions.\n let index = indexBeforeExits\n while (index < self.events.length) {\n self.events[index][1].end = Object.assign({}, point)\n index++\n }\n\n // Inject the exits earlier (they’re still also at the end).\n splice(\n self.events,\n indexBeforeFlow + 1,\n 0,\n self.events.slice(indexBeforeExits)\n )\n\n // Discard the duplicate exits.\n self.events.length = index\n return checkNewContainers(code)\n }\n return start(code)\n }\n\n /** @type {State} */\n function checkNewContainers(code) {\n // Next, after consuming the continuation markers for existing blocks, we\n // look for new block starts (e.g. `>` for a block quote).\n // If we encounter a new block start, we close any blocks unmatched in\n // step 1 before creating the new block as a child of the last matched\n // block.\n if (continued === stack.length) {\n // No need to `check` whether there’s a container, of `exitContainers`\n // would be moot.\n // We can instead immediately `attempt` to parse one.\n if (!childFlow) {\n return documentContinued(code)\n }\n\n // If we have concrete content, such as block HTML or fenced code,\n // we can’t have containers “pierce” into them, so we can immediately\n // start.\n if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n return flowStart(code)\n }\n\n // If we do have flow, it could still be a blank line,\n // but we’d be interrupting it w/ a new container if there’s a current\n // construct.\n // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer\n // needed in micromark-extension-gfm-table@1.0.6).\n self.interrupt = Boolean(\n childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack\n )\n }\n\n // Check if there is a new container.\n self.containerState = {}\n return effects.check(\n containerConstruct,\n thereIsANewContainer,\n thereIsNoNewContainer\n )(code)\n }\n\n /** @type {State} */\n function thereIsANewContainer(code) {\n if (childFlow) closeFlow()\n exitContainers(continued)\n return documentContinued(code)\n }\n\n /** @type {State} */\n function thereIsNoNewContainer(code) {\n self.parser.lazy[self.now().line] = continued !== stack.length\n lineStartOffset = self.now().offset\n return flowStart(code)\n }\n\n /** @type {State} */\n function documentContinued(code) {\n // Try new containers.\n self.containerState = {}\n return effects.attempt(\n containerConstruct,\n containerContinue,\n flowStart\n )(code)\n }\n\n /** @type {State} */\n function containerContinue(code) {\n continued++\n stack.push([self.currentConstruct, self.containerState])\n // Try another.\n return documentContinued(code)\n }\n\n /** @type {State} */\n function flowStart(code) {\n if (code === null) {\n if (childFlow) closeFlow()\n exitContainers(0)\n effects.consume(code)\n return\n }\n childFlow = childFlow || self.parser.flow(self.now())\n effects.enter('chunkFlow', {\n contentType: 'flow',\n previous: childToken,\n _tokenizer: childFlow\n })\n return flowContinue(code)\n }\n\n /** @type {State} */\n function flowContinue(code) {\n if (code === null) {\n writeToChild(effects.exit('chunkFlow'), true)\n exitContainers(0)\n effects.consume(code)\n return\n }\n if (markdownLineEnding(code)) {\n effects.consume(code)\n writeToChild(effects.exit('chunkFlow'))\n // Get ready for the next line.\n continued = 0\n self.interrupt = undefined\n return start\n }\n effects.consume(code)\n return flowContinue\n }\n\n /**\n * @param {Token} token\n * @param {boolean | undefined} [eof]\n * @returns {undefined}\n */\n function writeToChild(token, eof) {\n const stream = self.sliceStream(token)\n if (eof) stream.push(null)\n token.previous = childToken\n if (childToken) childToken.next = token\n childToken = token\n childFlow.defineSkip(token.start)\n childFlow.write(stream)\n\n // Alright, so we just added a lazy line:\n //\n // ```markdown\n // > a\n // b.\n //\n // Or:\n //\n // > ~~~c\n // d\n //\n // Or:\n //\n // > | e |\n // f\n // ```\n //\n // The construct in the second example (fenced code) does not accept lazy\n // lines, so it marked itself as done at the end of its first line, and\n // then the content construct parses `d`.\n // Most constructs in markdown match on the first line: if the first line\n // forms a construct, a non-lazy line can’t “unmake” it.\n //\n // The construct in the third example is potentially a GFM table, and\n // those are *weird*.\n // It *could* be a table, from the first line, if the following line\n // matches a condition.\n // In this case, that second line is lazy, which “unmakes” the first line\n // and turns the whole into one content block.\n //\n // We’ve now parsed the non-lazy and the lazy line, and can figure out\n // whether the lazy line started a new flow block.\n // If it did, we exit the current containers between the two flow blocks.\n if (self.parser.lazy[token.start.line]) {\n let index = childFlow.events.length\n while (index--) {\n if (\n // The token starts before the line ending…\n childFlow.events[index][1].start.offset < lineStartOffset &&\n // …and either is not ended yet…\n (!childFlow.events[index][1].end ||\n // …or ends after it.\n childFlow.events[index][1].end.offset > lineStartOffset)\n ) {\n // Exit: there’s still something open, which means it’s a lazy line\n // part of something.\n return\n }\n }\n\n // Note: this algorithm for moving events around is similar to the\n // algorithm when closing flow in `documentContinue`.\n const indexBeforeExits = self.events.length\n let indexBeforeFlow = indexBeforeExits\n /** @type {boolean | undefined} */\n let seen\n /** @type {Point | undefined} */\n let point\n\n // Find the previous chunk (the one before the lazy line).\n while (indexBeforeFlow--) {\n if (\n self.events[indexBeforeFlow][0] === 'exit' &&\n self.events[indexBeforeFlow][1].type === 'chunkFlow'\n ) {\n if (seen) {\n point = self.events[indexBeforeFlow][1].end\n break\n }\n seen = true\n }\n }\n exitContainers(continued)\n\n // Fix positions.\n index = indexBeforeExits\n while (index < self.events.length) {\n self.events[index][1].end = Object.assign({}, point)\n index++\n }\n\n // Inject the exits earlier (they’re still also at the end).\n splice(\n self.events,\n indexBeforeFlow + 1,\n 0,\n self.events.slice(indexBeforeExits)\n )\n\n // Discard the duplicate exits.\n self.events.length = index\n }\n }\n\n /**\n * @param {number} size\n * @returns {undefined}\n */\n function exitContainers(size) {\n let index = stack.length\n\n // Exit open containers.\n while (index-- > size) {\n const entry = stack[index]\n self.containerState = entry[1]\n entry[0].exit.call(self, effects)\n }\n stack.length = size\n }\n function closeFlow() {\n childFlow.write([null])\n childToken = undefined\n childFlow = undefined\n self.containerState._closeFlow = undefined\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContainer(effects, ok, nok) {\n // Always populated by defaults.\n\n return factorySpace(\n effects,\n effects.attempt(this.parser.constructs.document, ok, nok),\n 'linePrefix',\n this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4\n )\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n */\n\nimport {\n markdownLineEndingOrSpace,\n unicodePunctuation,\n unicodeWhitespace\n} from 'micromark-util-character'\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > 👉 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n * Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n * Group.\n */\nexport function classifyCharacter(code) {\n if (\n code === null ||\n markdownLineEndingOrSpace(code) ||\n unicodeWhitespace(code)\n ) {\n return 1\n }\n if (unicodePunctuation(code)) {\n return 2\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {Array<{resolveAll?: Resolver | undefined}>} constructs\n * List of constructs, optionally with `resolveAll`s.\n * @param {Array<Event>} events\n * List of events.\n * @param {TokenizeContext} context\n * Context used by `tokenize`.\n * @returns {Array<Event>}\n * Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n /** @type {Array<Resolver>} */\n const called = []\n let index = -1\n\n while (++index < constructs.length) {\n const resolve = constructs[index].resolveAll\n\n if (resolve && !called.includes(resolve)) {\n events = resolve(events, context)\n called.push(resolve)\n }\n }\n\n return events\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {push, splice} from 'micromark-util-chunked'\nimport {classifyCharacter} from 'micromark-util-classify-character'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/** @type {Construct} */\nexport const attention = {\n name: 'attention',\n tokenize: tokenizeAttention,\n resolveAll: resolveAllAttention\n}\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n// eslint-disable-next-line complexity\nfunction resolveAllAttention(events, context) {\n let index = -1\n /** @type {number} */\n let open\n /** @type {Token} */\n let group\n /** @type {Token} */\n let text\n /** @type {Token} */\n let openingSequence\n /** @type {Token} */\n let closingSequence\n /** @type {number} */\n let use\n /** @type {Array<Event>} */\n let nextEvents\n /** @type {number} */\n let offset\n\n // Walk through all events.\n //\n // Note: performance of this is fine on an mb of normal markdown, but it’s\n // a bottleneck for malicious stuff.\n while (++index < events.length) {\n // Find a token that can close.\n if (\n events[index][0] === 'enter' &&\n events[index][1].type === 'attentionSequence' &&\n events[index][1]._close\n ) {\n open = index\n\n // Now walk back to find an opener.\n while (open--) {\n // Find a token that can open the closer.\n if (\n events[open][0] === 'exit' &&\n events[open][1].type === 'attentionSequence' &&\n events[open][1]._open &&\n // If the markers are the same:\n context.sliceSerialize(events[open][1]).charCodeAt(0) ===\n context.sliceSerialize(events[index][1]).charCodeAt(0)\n ) {\n // If the opening can close or the closing can open,\n // and the close size *is not* a multiple of three,\n // but the sum of the opening and closing size *is* multiple of three,\n // then don’t match.\n if (\n (events[open][1]._close || events[index][1]._open) &&\n (events[index][1].end.offset - events[index][1].start.offset) % 3 &&\n !(\n (events[open][1].end.offset -\n events[open][1].start.offset +\n events[index][1].end.offset -\n events[index][1].start.offset) %\n 3\n )\n ) {\n continue\n }\n\n // Number of markers to use from the sequence.\n use =\n events[open][1].end.offset - events[open][1].start.offset > 1 &&\n events[index][1].end.offset - events[index][1].start.offset > 1\n ? 2\n : 1\n const start = Object.assign({}, events[open][1].end)\n const end = Object.assign({}, events[index][1].start)\n movePoint(start, -use)\n movePoint(end, use)\n openingSequence = {\n type: use > 1 ? 'strongSequence' : 'emphasisSequence',\n start,\n end: Object.assign({}, events[open][1].end)\n }\n closingSequence = {\n type: use > 1 ? 'strongSequence' : 'emphasisSequence',\n start: Object.assign({}, events[index][1].start),\n end\n }\n text = {\n type: use > 1 ? 'strongText' : 'emphasisText',\n start: Object.assign({}, events[open][1].end),\n end: Object.assign({}, events[index][1].start)\n }\n group = {\n type: use > 1 ? 'strong' : 'emphasis',\n start: Object.assign({}, openingSequence.start),\n end: Object.assign({}, closingSequence.end)\n }\n events[open][1].end = Object.assign({}, openingSequence.start)\n events[index][1].start = Object.assign({}, closingSequence.end)\n nextEvents = []\n\n // If there are more markers in the opening, add them before.\n if (events[open][1].end.offset - events[open][1].start.offset) {\n nextEvents = push(nextEvents, [\n ['enter', events[open][1], context],\n ['exit', events[open][1], context]\n ])\n }\n\n // Opening.\n nextEvents = push(nextEvents, [\n ['enter', group, context],\n ['enter', openingSequence, context],\n ['exit', openingSequence, context],\n ['enter', text, context]\n ])\n\n // Always populated by defaults.\n\n // Between.\n nextEvents = push(\n nextEvents,\n resolveAll(\n context.parser.constructs.insideSpan.null,\n events.slice(open + 1, index),\n context\n )\n )\n\n // Closing.\n nextEvents = push(nextEvents, [\n ['exit', text, context],\n ['enter', closingSequence, context],\n ['exit', closingSequence, context],\n ['exit', group, context]\n ])\n\n // If there are more markers in the closing, add them after.\n if (events[index][1].end.offset - events[index][1].start.offset) {\n offset = 2\n nextEvents = push(nextEvents, [\n ['enter', events[index][1], context],\n ['exit', events[index][1], context]\n ])\n } else {\n offset = 0\n }\n splice(events, open - 1, index - open + 3, nextEvents)\n index = open + nextEvents.length - offset - 2\n break\n }\n }\n }\n }\n\n // Remove remaining sequences.\n index = -1\n while (++index < events.length) {\n if (events[index][1].type === 'attentionSequence') {\n events[index][1].type = 'data'\n }\n }\n return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAttention(effects, ok) {\n const attentionMarkers = this.parser.constructs.attentionMarkers.null\n const previous = this.previous\n const before = classifyCharacter(previous)\n\n /** @type {NonNullable<Code>} */\n let marker\n return start\n\n /**\n * Before a sequence.\n *\n * ```markdown\n * > | **\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n marker = code\n effects.enter('attentionSequence')\n return inside(code)\n }\n\n /**\n * In a sequence.\n *\n * ```markdown\n * > | **\n * ^^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n if (code === marker) {\n effects.consume(code)\n return inside\n }\n const token = effects.exit('attentionSequence')\n\n // To do: next major: move this to resolver, just like `markdown-rs`.\n const after = classifyCharacter(code)\n\n // Always populated by defaults.\n\n const open =\n !after || (after === 2 && before) || attentionMarkers.includes(code)\n const close =\n !before || (before === 2 && after) || attentionMarkers.includes(previous)\n token._open = Boolean(marker === 42 ? open : open && (before || !close))\n token._close = Boolean(marker === 42 ? close : close && (after || !open))\n return ok(code)\n }\n}\n\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n * @param {number} offset\n * @returns {undefined}\n */\nfunction movePoint(point, offset) {\n point.column += offset\n point.offset += offset\n point._bufferIndex += offset\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {\n asciiAlpha,\n asciiAlphanumeric,\n asciiAtext,\n asciiControl\n} from 'micromark-util-character'\n/** @type {Construct} */\nexport const autolink = {\n name: 'autolink',\n tokenize: tokenizeAutolink\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAutolink(effects, ok, nok) {\n let size = 0\n return start\n\n /**\n * Start of an autolink.\n *\n * ```markdown\n * > | a<https://example.com>b\n * ^\n * > | a<user@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('autolink')\n effects.enter('autolinkMarker')\n effects.consume(code)\n effects.exit('autolinkMarker')\n effects.enter('autolinkProtocol')\n return open\n }\n\n /**\n * After `<`, at protocol or atext.\n *\n * ```markdown\n * > | a<https://example.com>b\n * ^\n * > | a<user@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (asciiAlpha(code)) {\n effects.consume(code)\n return schemeOrEmailAtext\n }\n return emailAtext(code)\n }\n\n /**\n * At second byte of protocol or atext.\n *\n * ```markdown\n * > | a<https://example.com>b\n * ^\n * > | a<user@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function schemeOrEmailAtext(code) {\n // ASCII alphanumeric and `+`, `-`, and `.`.\n if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {\n // Count the previous alphabetical from `open` too.\n size = 1\n return schemeInsideOrEmailAtext(code)\n }\n return emailAtext(code)\n }\n\n /**\n * In ambiguous protocol or atext.\n *\n * ```markdown\n * > | a<https://example.com>b\n * ^\n * > | a<user@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function schemeInsideOrEmailAtext(code) {\n if (code === 58) {\n effects.consume(code)\n size = 0\n return urlInside\n }\n\n // ASCII alphanumeric and `+`, `-`, and `.`.\n if (\n (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) &&\n size++ < 32\n ) {\n effects.consume(code)\n return schemeInsideOrEmailAtext\n }\n size = 0\n return emailAtext(code)\n }\n\n /**\n * After protocol, in URL.\n *\n * ```markdown\n * > | a<https://example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function urlInside(code) {\n if (code === 62) {\n effects.exit('autolinkProtocol')\n effects.enter('autolinkMarker')\n effects.consume(code)\n effects.exit('autolinkMarker')\n effects.exit('autolink')\n return ok\n }\n\n // ASCII control, space, or `<`.\n if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n return nok(code)\n }\n effects.consume(code)\n return urlInside\n }\n\n /**\n * In email atext.\n *\n * ```markdown\n * > | a<user.name@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailAtext(code) {\n if (code === 64) {\n effects.consume(code)\n return emailAtSignOrDot\n }\n if (asciiAtext(code)) {\n effects.consume(code)\n return emailAtext\n }\n return nok(code)\n }\n\n /**\n * In label, after at-sign or dot.\n *\n * ```markdown\n * > | a<user.name@example.com>b\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function emailAtSignOrDot(code) {\n return asciiAlphanumeric(code) ? emailLabel(code) : nok(code)\n }\n\n /**\n * In label, where `.` and `>` are allowed.\n *\n * ```markdown\n * > | a<user.name@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailLabel(code) {\n if (code === 46) {\n effects.consume(code)\n size = 0\n return emailAtSignOrDot\n }\n if (code === 62) {\n // Exit, then change the token type.\n effects.exit('autolinkProtocol').type = 'autolinkEmail'\n effects.enter('autolinkMarker')\n effects.consume(code)\n effects.exit('autolinkMarker')\n effects.exit('autolink')\n return ok\n }\n return emailValue(code)\n }\n\n /**\n * In label, where `.` and `>` are *not* allowed.\n *\n * Though, this is also used in `emailLabel` to parse other values.\n *\n * ```markdown\n * > | a<user.name@ex-ample.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailValue(code) {\n // ASCII alphanumeric or `-`.\n if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n const next = code === 45 ? emailValue : emailLabel\n effects.consume(code)\n return next\n }\n return nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const blankLine = {\n tokenize: tokenizeBlankLine,\n partial: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLine(effects, ok, nok) {\n return start\n\n /**\n * Start of blank line.\n *\n * > 👉 **Note**: `␠` represents a space character.\n *\n * ```markdown\n * > | ␠␠␊\n * ^\n * > | ␊\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n return markdownSpace(code)\n ? factorySpace(effects, after, 'linePrefix')(code)\n : after(code)\n }\n\n /**\n * At eof/eol, after optional whitespace.\n *\n * > 👉 **Note**: `␠` represents a space character.\n *\n * ```markdown\n * > | ␠␠␊\n * ^\n * > | ␊\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const blockQuote = {\n name: 'blockQuote',\n tokenize: tokenizeBlockQuoteStart,\n continuation: {\n tokenize: tokenizeBlockQuoteContinuation\n },\n exit\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n const self = this\n return start\n\n /**\n * Start of block quote.\n *\n * ```markdown\n * > | > a\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (code === 62) {\n const state = self.containerState\n if (!state.open) {\n effects.enter('blockQuote', {\n _container: true\n })\n state.open = true\n }\n effects.enter('blockQuotePrefix')\n effects.enter('blockQuoteMarker')\n effects.consume(code)\n effects.exit('blockQuoteMarker')\n return after\n }\n return nok(code)\n }\n\n /**\n * After `>`, before optional whitespace.\n *\n * ```markdown\n * > | > a\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n if (markdownSpace(code)) {\n effects.enter('blockQuotePrefixWhitespace')\n effects.consume(code)\n effects.exit('blockQuotePrefixWhitespace')\n effects.exit('blockQuotePrefix')\n return ok\n }\n effects.exit('blockQuotePrefix')\n return ok(code)\n }\n}\n\n/**\n * Start of block quote continuation.\n *\n * ```markdown\n * | > a\n * > | > b\n * ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n const self = this\n return contStart\n\n /**\n * Start of block quote continuation.\n *\n * Also used to parse the first block quote opening.\n *\n * ```markdown\n * | > a\n * > | > b\n * ^\n * ```\n *\n * @type {State}\n */\n function contStart(code) {\n if (markdownSpace(code)) {\n // Always populated by defaults.\n\n return factorySpace(\n effects,\n contBefore,\n 'linePrefix',\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4\n )(code)\n }\n return contBefore(code)\n }\n\n /**\n * At `>`, after optional whitespace.\n *\n * Also used to parse the first block quote opening.\n *\n * ```markdown\n * | > a\n * > | > b\n * ^\n * ```\n *\n * @type {State}\n */\n function contBefore(code) {\n return effects.attempt(blockQuote, ok, nok)(code)\n }\n}\n\n/** @type {Exiter} */\nfunction exit(effects) {\n effects.exit('blockQuote')\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {asciiPunctuation} from 'micromark-util-character'\n/** @type {Construct} */\nexport const characterEscape = {\n name: 'characterEscape',\n tokenize: tokenizeCharacterEscape\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n return start\n\n /**\n * Start of character escape.\n *\n * ```markdown\n * > | a\\*b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('characterEscape')\n effects.enter('escapeMarker')\n effects.consume(code)\n effects.exit('escapeMarker')\n return inside\n }\n\n /**\n * After `\\`, at punctuation.\n *\n * ```markdown\n * > | a\\*b\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n // ASCII punctuation.\n if (asciiPunctuation(code)) {\n effects.enter('characterEscapeValue')\n effects.consume(code)\n effects.exit('characterEscapeValue')\n effects.exit('characterEscape')\n return ok\n }\n return nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {\n asciiAlphanumeric,\n asciiDigit,\n asciiHexDigit\n} from 'micromark-util-character'\n/** @type {Construct} */\nexport const characterReference = {\n name: 'characterReference',\n tokenize: tokenizeCharacterReference\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterReference(effects, ok, nok) {\n const self = this\n let size = 0\n /** @type {number} */\n let max\n /** @type {(code: Code) => boolean} */\n let test\n return start\n\n /**\n * Start of character reference.\n *\n * ```markdown\n * > | a&b\n * ^\n * > | a{b\n * ^\n * > | a	b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('characterReference')\n effects.enter('characterReferenceMarker')\n effects.consume(code)\n effects.exit('characterReferenceMarker')\n return open\n }\n\n /**\n * After `&`, at `#` for numeric references or alphanumeric for named\n * references.\n *\n * ```markdown\n * > | a&b\n * ^\n * > | a{b\n * ^\n * > | a	b\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 35) {\n effects.enter('characterReferenceMarkerNumeric')\n effects.consume(code)\n effects.exit('characterReferenceMarkerNumeric')\n return numeric\n }\n effects.enter('characterReferenceValue')\n max = 31\n test = asciiAlphanumeric\n return value(code)\n }\n\n /**\n * After `#`, at `x` for hexadecimals or digit for decimals.\n *\n * ```markdown\n * > | a{b\n * ^\n * > | a	b\n * ^\n * ```\n *\n * @type {State}\n */\n function numeric(code) {\n if (code === 88 || code === 120) {\n effects.enter('characterReferenceMarkerHexadecimal')\n effects.consume(code)\n effects.exit('characterReferenceMarkerHexadecimal')\n effects.enter('characterReferenceValue')\n max = 6\n test = asciiHexDigit\n return value\n }\n effects.enter('characterReferenceValue')\n max = 7\n test = asciiDigit\n return value(code)\n }\n\n /**\n * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n *\n * The character reference kind defines what and how many characters are\n * allowed.\n *\n * ```markdown\n * > | a&b\n * ^^^\n * > | a{b\n * ^^^\n * > | a	b\n * ^\n * ```\n *\n * @type {State}\n */\n function value(code) {\n if (code === 59 && size) {\n const token = effects.exit('characterReferenceValue')\n if (\n test === asciiAlphanumeric &&\n !decodeNamedCharacterReference(self.sliceSerialize(token))\n ) {\n return nok(code)\n }\n\n // To do: `markdown-rs` uses a different name:\n // `CharacterReferenceMarkerSemi`.\n effects.enter('characterReferenceMarker')\n effects.consume(code)\n effects.exit('characterReferenceMarker')\n effects.exit('characterReference')\n return ok\n }\n if (test(code) && size++ < max) {\n effects.consume(code)\n return value\n }\n return nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nconst nonLazyContinuation = {\n tokenize: tokenizeNonLazyContinuation,\n partial: true\n}\n\n/** @type {Construct} */\nexport const codeFenced = {\n name: 'codeFenced',\n tokenize: tokenizeCodeFenced,\n concrete: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n const self = this\n /** @type {Construct} */\n const closeStart = {\n tokenize: tokenizeCloseStart,\n partial: true\n }\n let initialPrefix = 0\n let sizeOpen = 0\n /** @type {NonNullable<Code>} */\n let marker\n return start\n\n /**\n * Start of code.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: parse whitespace like `markdown-rs`.\n return beforeSequenceOpen(code)\n }\n\n /**\n * In opening fence, after prefix, at sequence.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function beforeSequenceOpen(code) {\n const tail = self.events[self.events.length - 1]\n initialPrefix =\n tail && tail[1].type === 'linePrefix'\n ? tail[2].sliceSerialize(tail[1], true).length\n : 0\n marker = code\n effects.enter('codeFenced')\n effects.enter('codeFencedFence')\n effects.enter('codeFencedFenceSequence')\n return sequenceOpen(code)\n }\n\n /**\n * In opening fence sequence.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === marker) {\n sizeOpen++\n effects.consume(code)\n return sequenceOpen\n }\n if (sizeOpen < 3) {\n return nok(code)\n }\n effects.exit('codeFencedFenceSequence')\n return markdownSpace(code)\n ? factorySpace(effects, infoBefore, 'whitespace')(code)\n : infoBefore(code)\n }\n\n /**\n * In opening fence, after the sequence (and optional whitespace), before info.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function infoBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFencedFence')\n return self.interrupt\n ? ok(code)\n : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code)\n }\n effects.enter('codeFencedFenceInfo')\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return info(code)\n }\n\n /**\n * In info.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function info(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('chunkString')\n effects.exit('codeFencedFenceInfo')\n return infoBefore(code)\n }\n if (markdownSpace(code)) {\n effects.exit('chunkString')\n effects.exit('codeFencedFenceInfo')\n return factorySpace(effects, metaBefore, 'whitespace')(code)\n }\n if (code === 96 && code === marker) {\n return nok(code)\n }\n effects.consume(code)\n return info\n }\n\n /**\n * In opening fence, after info and whitespace, before meta.\n *\n * ```markdown\n * > | ~~~js eval\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function metaBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n return infoBefore(code)\n }\n effects.enter('codeFencedFenceMeta')\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return meta(code)\n }\n\n /**\n * In meta.\n *\n * ```markdown\n * > | ~~~js eval\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function meta(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('chunkString')\n effects.exit('codeFencedFenceMeta')\n return infoBefore(code)\n }\n if (code === 96 && code === marker) {\n return nok(code)\n }\n effects.consume(code)\n return meta\n }\n\n /**\n * At eol/eof in code, before a non-lazy closing fence or content.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function atNonLazyBreak(code) {\n return effects.attempt(closeStart, after, contentBefore)(code)\n }\n\n /**\n * Before code content, not a closing fence, at eol.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentBefore(code) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return contentStart\n }\n\n /**\n * Before code content, not a closing fence.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentStart(code) {\n return initialPrefix > 0 && markdownSpace(code)\n ? factorySpace(\n effects,\n beforeContentChunk,\n 'linePrefix',\n initialPrefix + 1\n )(code)\n : beforeContentChunk(code)\n }\n\n /**\n * Before code content, after optional prefix.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function beforeContentChunk(code) {\n if (code === null || markdownLineEnding(code)) {\n return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code)\n }\n effects.enter('codeFlowValue')\n return contentChunk(code)\n }\n\n /**\n * In code content.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^^^^^^^^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentChunk(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFlowValue')\n return beforeContentChunk(code)\n }\n effects.consume(code)\n return contentChunk\n }\n\n /**\n * After code.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n effects.exit('codeFenced')\n return ok(code)\n }\n\n /**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n function tokenizeCloseStart(effects, ok, nok) {\n let size = 0\n return startBefore\n\n /**\n *\n *\n * @type {State}\n */\n function startBefore(code) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return start\n }\n\n /**\n * Before closing fence, at optional whitespace.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Always populated by defaults.\n\n // To do: `enter` here or in next state?\n effects.enter('codeFencedFence')\n return markdownSpace(code)\n ? factorySpace(\n effects,\n beforeSequenceClose,\n 'linePrefix',\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4\n )(code)\n : beforeSequenceClose(code)\n }\n\n /**\n * In closing fence, after optional whitespace, at sequence.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function beforeSequenceClose(code) {\n if (code === marker) {\n effects.enter('codeFencedFenceSequence')\n return sequenceClose(code)\n }\n return nok(code)\n }\n\n /**\n * In closing fence sequence.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceClose(code) {\n if (code === marker) {\n size++\n effects.consume(code)\n return sequenceClose\n }\n if (size >= sizeOpen) {\n effects.exit('codeFencedFenceSequence')\n return markdownSpace(code)\n ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code)\n : sequenceCloseAfter(code)\n }\n return nok(code)\n }\n\n /**\n * After closing fence sequence, after optional whitespace.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceCloseAfter(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFencedFence')\n return ok(code)\n }\n return nok(code)\n }\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n const self = this\n return start\n\n /**\n *\n *\n * @type {State}\n */\n function start(code) {\n if (code === null) {\n return nok(code)\n }\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return lineStart\n }\n\n /**\n *\n *\n * @type {State}\n */\n function lineStart(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const codeIndented = {\n name: 'codeIndented',\n tokenize: tokenizeCodeIndented\n}\n\n/** @type {Construct} */\nconst furtherStart = {\n tokenize: tokenizeFurtherStart,\n partial: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeIndented(effects, ok, nok) {\n const self = this\n return start\n\n /**\n * Start of code (indented).\n *\n * > **Parsing note**: it is not needed to check if this first line is a\n * > filled line (that it has a non-whitespace character), because blank lines\n * > are parsed already, so we never run into that.\n *\n * ```markdown\n * > | aaa\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: manually check if interrupting like `markdown-rs`.\n\n effects.enter('codeIndented')\n // To do: use an improved `space_or_tab` function like `markdown-rs`,\n // so that we can drop the next state.\n return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code)\n }\n\n /**\n * At start, after 1 or 4 spaces.\n *\n * ```markdown\n * > | aaa\n * ^\n * ```\n *\n * @type {State}\n */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1]\n return tail &&\n tail[1].type === 'linePrefix' &&\n tail[2].sliceSerialize(tail[1], true).length >= 4\n ? atBreak(code)\n : nok(code)\n }\n\n /**\n * At a break.\n *\n * ```markdown\n * > | aaa\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === null) {\n return after(code)\n }\n if (markdownLineEnding(code)) {\n return effects.attempt(furtherStart, atBreak, after)(code)\n }\n effects.enter('codeFlowValue')\n return inside(code)\n }\n\n /**\n * In code content.\n *\n * ```markdown\n * > | aaa\n * ^^^^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFlowValue')\n return atBreak(code)\n }\n effects.consume(code)\n return inside\n }\n\n /** @type {State} */\n function after(code) {\n effects.exit('codeIndented')\n // To do: allow interrupting like `markdown-rs`.\n // Feel free to interrupt.\n // tokenizer.interrupt = false\n return ok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeFurtherStart(effects, ok, nok) {\n const self = this\n return furtherStart\n\n /**\n * At eol, trying to parse another indent.\n *\n * ```markdown\n * > | aaa\n * ^\n * | bbb\n * ```\n *\n * @type {State}\n */\n function furtherStart(code) {\n // To do: improve `lazy` / `pierce` handling.\n // If this is a lazy line, it can’t be code.\n if (self.parser.lazy[self.now().line]) {\n return nok(code)\n }\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return furtherStart\n }\n\n // To do: the code here in `micromark-js` is a bit different from\n // `markdown-rs` because there it can attempt spaces.\n // We can’t yet.\n //\n // To do: use an improved `space_or_tab` function like `markdown-rs`,\n // so that we can drop the next state.\n return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code)\n }\n\n /**\n * At start, after 1 or 4 spaces.\n *\n * ```markdown\n * > | aaa\n * ^\n * ```\n *\n * @type {State}\n */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1]\n return tail &&\n tail[1].type === 'linePrefix' &&\n tail[2].sliceSerialize(tail[1], true).length >= 4\n ? ok(code)\n : markdownLineEnding(code)\n ? furtherStart(code)\n : nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Previous} Previous\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {Construct} */\nexport const codeText = {\n name: 'codeText',\n tokenize: tokenizeCodeText,\n resolve: resolveCodeText,\n previous\n}\n\n// To do: next major: don’t resolve, like `markdown-rs`.\n/** @type {Resolver} */\nfunction resolveCodeText(events) {\n let tailExitIndex = events.length - 4\n let headEnterIndex = 3\n /** @type {number} */\n let index\n /** @type {number | undefined} */\n let enter\n\n // If we start and end with an EOL or a space.\n if (\n (events[headEnterIndex][1].type === 'lineEnding' ||\n events[headEnterIndex][1].type === 'space') &&\n (events[tailExitIndex][1].type === 'lineEnding' ||\n events[tailExitIndex][1].type === 'space')\n ) {\n index = headEnterIndex\n\n // And we have data.\n while (++index < tailExitIndex) {\n if (events[index][1].type === 'codeTextData') {\n // Then we have padding.\n events[headEnterIndex][1].type = 'codeTextPadding'\n events[tailExitIndex][1].type = 'codeTextPadding'\n headEnterIndex += 2\n tailExitIndex -= 2\n break\n }\n }\n }\n\n // Merge adjacent spaces and data.\n index = headEnterIndex - 1\n tailExitIndex++\n while (++index <= tailExitIndex) {\n if (enter === undefined) {\n if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') {\n enter = index\n }\n } else if (\n index === tailExitIndex ||\n events[index][1].type === 'lineEnding'\n ) {\n events[enter][1].type = 'codeTextData'\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end\n events.splice(enter + 2, index - enter - 2)\n tailExitIndex -= index - enter - 2\n index = enter + 2\n }\n enter = undefined\n }\n }\n return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previous(code) {\n // If there is a previous code, there will always be a tail.\n return (\n code !== 96 ||\n this.events[this.events.length - 1][1].type === 'characterEscape'\n )\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeText(effects, ok, nok) {\n const self = this\n let sizeOpen = 0\n /** @type {number} */\n let size\n /** @type {Token} */\n let token\n return start\n\n /**\n * Start of code (text).\n *\n * ```markdown\n * > | `a`\n * ^\n * > | \\`a`\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('codeText')\n effects.enter('codeTextSequence')\n return sequenceOpen(code)\n }\n\n /**\n * In opening sequence.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === 96) {\n effects.consume(code)\n sizeOpen++\n return sequenceOpen\n }\n effects.exit('codeTextSequence')\n return between(code)\n }\n\n /**\n * Between something and something else.\n *\n * ```markdown\n * > | `a`\n * ^^\n * ```\n *\n * @type {State}\n */\n function between(code) {\n // EOF.\n if (code === null) {\n return nok(code)\n }\n\n // To do: next major: don’t do spaces in resolve, but when compiling,\n // like `markdown-rs`.\n // Tabs don’t work, and virtual spaces don’t make sense.\n if (code === 32) {\n effects.enter('space')\n effects.consume(code)\n effects.exit('space')\n return between\n }\n\n // Closing fence? Could also be data.\n if (code === 96) {\n token = effects.enter('codeTextSequence')\n size = 0\n return sequenceClose(code)\n }\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return between\n }\n\n // Data.\n effects.enter('codeTextData')\n return data(code)\n }\n\n /**\n * In data.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function data(code) {\n if (\n code === null ||\n code === 32 ||\n code === 96 ||\n markdownLineEnding(code)\n ) {\n effects.exit('codeTextData')\n return between(code)\n }\n effects.consume(code)\n return data\n }\n\n /**\n * In closing sequence.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceClose(code) {\n // More.\n if (code === 96) {\n effects.consume(code)\n size++\n return sequenceClose\n }\n\n // Done!\n if (size === sizeOpen) {\n effects.exit('codeTextSequence')\n effects.exit('codeText')\n return ok(code)\n }\n\n // More or less accents: mark as data.\n token.type = 'codeTextData'\n return data(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Token} Token\n */\n\nimport {splice} from 'micromark-util-chunked'\n/**\n * Tokenize subcontent.\n *\n * @param {Array<Event>} events\n * List of events.\n * @returns {boolean}\n * Whether subtokens were found.\n */ // eslint-disable-next-line complexity\nexport function subtokenize(events) {\n /** @type {Record<string, number>} */\n const jumps = {}\n let index = -1\n /** @type {Event} */\n let event\n /** @type {number | undefined} */\n let lineIndex\n /** @type {number} */\n let otherIndex\n /** @type {Event} */\n let otherEvent\n /** @type {Array<Event>} */\n let parameters\n /** @type {Array<Event>} */\n let subevents\n /** @type {boolean | undefined} */\n let more\n while (++index < events.length) {\n while (index in jumps) {\n index = jumps[index]\n }\n event = events[index]\n\n // Add a hook for the GFM tasklist extension, which needs to know if text\n // is in the first content of a list item.\n if (\n index &&\n event[1].type === 'chunkFlow' &&\n events[index - 1][1].type === 'listItemPrefix'\n ) {\n subevents = event[1]._tokenizer.events\n otherIndex = 0\n if (\n otherIndex < subevents.length &&\n subevents[otherIndex][1].type === 'lineEndingBlank'\n ) {\n otherIndex += 2\n }\n if (\n otherIndex < subevents.length &&\n subevents[otherIndex][1].type === 'content'\n ) {\n while (++otherIndex < subevents.length) {\n if (subevents[otherIndex][1].type === 'content') {\n break\n }\n if (subevents[otherIndex][1].type === 'chunkText') {\n subevents[otherIndex][1]._isInFirstContentOfListItem = true\n otherIndex++\n }\n }\n }\n }\n\n // Enter.\n if (event[0] === 'enter') {\n if (event[1].contentType) {\n Object.assign(jumps, subcontent(events, index))\n index = jumps[index]\n more = true\n }\n }\n // Exit.\n else if (event[1]._container) {\n otherIndex = index\n lineIndex = undefined\n while (otherIndex--) {\n otherEvent = events[otherIndex]\n if (\n otherEvent[1].type === 'lineEnding' ||\n otherEvent[1].type === 'lineEndingBlank'\n ) {\n if (otherEvent[0] === 'enter') {\n if (lineIndex) {\n events[lineIndex][1].type = 'lineEndingBlank'\n }\n otherEvent[1].type = 'lineEnding'\n lineIndex = otherIndex\n }\n } else {\n break\n }\n }\n if (lineIndex) {\n // Fix position.\n event[1].end = Object.assign({}, events[lineIndex][1].start)\n\n // Switch container exit w/ line endings.\n parameters = events.slice(lineIndex, index)\n parameters.unshift(event)\n splice(events, lineIndex, index - lineIndex + 1, parameters)\n }\n }\n }\n return !more\n}\n\n/**\n * Tokenize embedded tokens.\n *\n * @param {Array<Event>} events\n * @param {number} eventIndex\n * @returns {Record<string, number>}\n */\nfunction subcontent(events, eventIndex) {\n const token = events[eventIndex][1]\n const context = events[eventIndex][2]\n let startPosition = eventIndex - 1\n /** @type {Array<number>} */\n const startPositions = []\n const tokenizer =\n token._tokenizer || context.parser[token.contentType](token.start)\n const childEvents = tokenizer.events\n /** @type {Array<[number, number]>} */\n const jumps = []\n /** @type {Record<string, number>} */\n const gaps = {}\n /** @type {Array<Chunk>} */\n let stream\n /** @type {Token | undefined} */\n let previous\n let index = -1\n /** @type {Token | undefined} */\n let current = token\n let adjust = 0\n let start = 0\n const breaks = [start]\n\n // Loop forward through the linked tokens to pass them in order to the\n // subtokenizer.\n while (current) {\n // Find the position of the event for this token.\n while (events[++startPosition][1] !== current) {\n // Empty.\n }\n startPositions.push(startPosition)\n if (!current._tokenizer) {\n stream = context.sliceStream(current)\n if (!current.next) {\n stream.push(null)\n }\n if (previous) {\n tokenizer.defineSkip(current.start)\n }\n if (current._isInFirstContentOfListItem) {\n tokenizer._gfmTasklistFirstContentOfListItem = true\n }\n tokenizer.write(stream)\n if (current._isInFirstContentOfListItem) {\n tokenizer._gfmTasklistFirstContentOfListItem = undefined\n }\n }\n\n // Unravel the next token.\n previous = current\n current = current.next\n }\n\n // Now, loop back through all events (and linked tokens), to figure out which\n // parts belong where.\n current = token\n while (++index < childEvents.length) {\n if (\n // Find a void token that includes a break.\n childEvents[index][0] === 'exit' &&\n childEvents[index - 1][0] === 'enter' &&\n childEvents[index][1].type === childEvents[index - 1][1].type &&\n childEvents[index][1].start.line !== childEvents[index][1].end.line\n ) {\n start = index + 1\n breaks.push(start)\n // Help GC.\n current._tokenizer = undefined\n current.previous = undefined\n current = current.next\n }\n }\n\n // Help GC.\n tokenizer.events = []\n\n // If there’s one more token (which is the cases for lines that end in an\n // EOF), that’s perfect: the last point we found starts it.\n // If there isn’t then make sure any remaining content is added to it.\n if (current) {\n // Help GC.\n current._tokenizer = undefined\n current.previous = undefined\n } else {\n breaks.pop()\n }\n\n // Now splice the events from the subtokenizer into the current events,\n // moving back to front so that splice indices aren’t affected.\n index = breaks.length\n while (index--) {\n const slice = childEvents.slice(breaks[index], breaks[index + 1])\n const start = startPositions.pop()\n jumps.unshift([start, start + slice.length - 1])\n splice(events, start, 2, slice)\n }\n index = -1\n while (++index < jumps.length) {\n gaps[adjust + jumps[index][0]] = adjust + jumps[index][1]\n adjust += jumps[index][1] - jumps[index][0] - 1\n }\n return gaps\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {subtokenize} from 'micromark-util-subtokenize'\n/**\n * No name because it must not be turned off.\n * @type {Construct}\n */\nexport const content = {\n tokenize: tokenizeContent,\n resolve: resolveContent\n}\n\n/** @type {Construct} */\nconst continuationConstruct = {\n tokenize: tokenizeContinuation,\n partial: true\n}\n\n/**\n * Content is transparent: it’s parsed right now. That way, definitions are also\n * parsed right now: before text in paragraphs (specifically, media) are parsed.\n *\n * @type {Resolver}\n */\nfunction resolveContent(events) {\n subtokenize(events)\n return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContent(effects, ok) {\n /** @type {Token | undefined} */\n let previous\n return chunkStart\n\n /**\n * Before a content chunk.\n *\n * ```markdown\n * > | abc\n * ^\n * ```\n *\n * @type {State}\n */\n function chunkStart(code) {\n effects.enter('content')\n previous = effects.enter('chunkContent', {\n contentType: 'content'\n })\n return chunkInside(code)\n }\n\n /**\n * In a content chunk.\n *\n * ```markdown\n * > | abc\n * ^^^\n * ```\n *\n * @type {State}\n */\n function chunkInside(code) {\n if (code === null) {\n return contentEnd(code)\n }\n\n // To do: in `markdown-rs`, each line is parsed on its own, and everything\n // is stitched together resolving.\n if (markdownLineEnding(code)) {\n return effects.check(\n continuationConstruct,\n contentContinue,\n contentEnd\n )(code)\n }\n\n // Data.\n effects.consume(code)\n return chunkInside\n }\n\n /**\n *\n *\n * @type {State}\n */\n function contentEnd(code) {\n effects.exit('chunkContent')\n effects.exit('content')\n return ok(code)\n }\n\n /**\n *\n *\n * @type {State}\n */\n function contentContinue(code) {\n effects.consume(code)\n effects.exit('chunkContent')\n previous.next = effects.enter('chunkContent', {\n contentType: 'content',\n previous\n })\n previous = previous.next\n return chunkInside\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContinuation(effects, ok, nok) {\n const self = this\n return startLookahead\n\n /**\n *\n *\n * @type {State}\n */\n function startLookahead(code) {\n effects.exit('chunkContent')\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(effects, prefixed, 'linePrefix')\n }\n\n /**\n *\n *\n * @type {State}\n */\n function prefixed(code) {\n if (code === null || markdownLineEnding(code)) {\n return nok(code)\n }\n\n // Always populated by defaults.\n\n const tail = self.events[self.events.length - 1]\n if (\n !self.parser.constructs.disable.null.includes('codeIndented') &&\n tail &&\n tail[1].type === 'linePrefix' &&\n tail[2].sliceSerialize(tail[1], true).length >= 4\n ) {\n return ok(code)\n }\n return effects.interrupt(self.parser.constructs.flow, nok, ok)(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {\n asciiControl,\n markdownLineEndingOrSpace,\n markdownLineEnding\n} from 'micromark-util-character'\n/**\n * Parse destinations.\n *\n * ###### Examples\n *\n * ```markdown\n * <a>\n * <a\\>b>\n * <a b>\n * <a)>\n * a\n * a\\)b\n * a(b)c\n * a(b)\n * ```\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {State} nok\n * State switched to when unsuccessful.\n * @param {TokenType} type\n * Type for whole (`<a>` or `b`).\n * @param {TokenType} literalType\n * Type when enclosed (`<a>`).\n * @param {TokenType} literalMarkerType\n * Type for enclosing (`<` and `>`).\n * @param {TokenType} rawType\n * Type when not enclosed (`b`).\n * @param {TokenType} stringType\n * Type for the value (`a` or `b`).\n * @param {number | undefined} [max=Infinity]\n * Depth of nested parens (inclusive).\n * @returns {State}\n * Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryDestination(\n effects,\n ok,\n nok,\n type,\n literalType,\n literalMarkerType,\n rawType,\n stringType,\n max\n) {\n const limit = max || Number.POSITIVE_INFINITY\n let balance = 0\n return start\n\n /**\n * Start of destination.\n *\n * ```markdown\n * > | <aa>\n * ^\n * > | aa\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (code === 60) {\n effects.enter(type)\n effects.enter(literalType)\n effects.enter(literalMarkerType)\n effects.consume(code)\n effects.exit(literalMarkerType)\n return enclosedBefore\n }\n\n // ASCII control, space, closing paren.\n if (code === null || code === 32 || code === 41 || asciiControl(code)) {\n return nok(code)\n }\n effects.enter(type)\n effects.enter(rawType)\n effects.enter(stringType)\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return raw(code)\n }\n\n /**\n * After `<`, at an enclosed destination.\n *\n * ```markdown\n * > | <aa>\n * ^\n * ```\n *\n * @type {State}\n */\n function enclosedBefore(code) {\n if (code === 62) {\n effects.enter(literalMarkerType)\n effects.consume(code)\n effects.exit(literalMarkerType)\n effects.exit(literalType)\n effects.exit(type)\n return ok\n }\n effects.enter(stringType)\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return enclosed(code)\n }\n\n /**\n * In enclosed destination.\n *\n * ```markdown\n * > | <aa>\n * ^\n * ```\n *\n * @type {State}\n */\n function enclosed(code) {\n if (code === 62) {\n effects.exit('chunkString')\n effects.exit(stringType)\n return enclosedBefore(code)\n }\n if (code === null || code === 60 || markdownLineEnding(code)) {\n return nok(code)\n }\n effects.consume(code)\n return code === 92 ? enclosedEscape : enclosed\n }\n\n /**\n * After `\\`, at a special character.\n *\n * ```markdown\n * > | <a\\*a>\n * ^\n * ```\n *\n * @type {State}\n */\n function enclosedEscape(code) {\n if (code === 60 || code === 62 || code === 92) {\n effects.consume(code)\n return enclosed\n }\n return enclosed(code)\n }\n\n /**\n * In raw destination.\n *\n * ```markdown\n * > | aa\n * ^\n * ```\n *\n * @type {State}\n */\n function raw(code) {\n if (\n !balance &&\n (code === null || code === 41 || markdownLineEndingOrSpace(code))\n ) {\n effects.exit('chunkString')\n effects.exit(stringType)\n effects.exit(rawType)\n effects.exit(type)\n return ok(code)\n }\n if (balance < limit && code === 40) {\n effects.consume(code)\n balance++\n return raw\n }\n if (code === 41) {\n effects.consume(code)\n balance--\n return raw\n }\n\n // ASCII control (but *not* `\\0`) and space and `(`.\n // Note: in `markdown-rs`, `\\0` exists in codes, in `micromark-js` it\n // doesn’t.\n if (code === null || code === 32 || code === 40 || asciiControl(code)) {\n return nok(code)\n }\n effects.consume(code)\n return code === 92 ? rawEscape : raw\n }\n\n /**\n * After `\\`, at special character.\n *\n * ```markdown\n * > | a\\*a\n * ^\n * ```\n *\n * @type {State}\n */\n function rawEscape(code) {\n if (code === 40 || code === 41 || code === 92) {\n effects.consume(code)\n return raw\n }\n return raw(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/**\n * Parse labels.\n *\n * > 👉 **Note**: labels in markdown are capped at 999 characters in the string.\n *\n * ###### Examples\n *\n * ```markdown\n * [a]\n * [a\n * b]\n * [a\\]b]\n * ```\n *\n * @this {TokenizeContext}\n * Tokenize context.\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {State} nok\n * State switched to when unsuccessful.\n * @param {TokenType} type\n * Type of the whole label (`[a]`).\n * @param {TokenType} markerType\n * Type for the markers (`[` and `]`).\n * @param {TokenType} stringType\n * Type for the identifier (`a`).\n * @returns {State}\n * Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryLabel(effects, ok, nok, type, markerType, stringType) {\n const self = this\n let size = 0\n /** @type {boolean} */\n let seen\n return start\n\n /**\n * Start of label.\n *\n * ```markdown\n * > | [a]\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(type)\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n effects.enter(stringType)\n return atBreak\n }\n\n /**\n * In label, at something, before something else.\n *\n * ```markdown\n * > | [a]\n * ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (\n size > 999 ||\n code === null ||\n code === 91 ||\n (code === 93 && !seen) ||\n // To do: remove in the future once we’ve switched from\n // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n // which doesn’t need this.\n // Hidden footnotes hook.\n /* c8 ignore next 3 */\n (code === 94 &&\n !size &&\n '_hiddenFootnoteSupport' in self.parser.constructs)\n ) {\n return nok(code)\n }\n if (code === 93) {\n effects.exit(stringType)\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n effects.exit(type)\n return ok\n }\n\n // To do: indent? Link chunks and EOLs together?\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return atBreak\n }\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return labelInside(code)\n }\n\n /**\n * In label, in text.\n *\n * ```markdown\n * > | [a]\n * ^\n * ```\n *\n * @type {State}\n */\n function labelInside(code) {\n if (\n code === null ||\n code === 91 ||\n code === 93 ||\n markdownLineEnding(code) ||\n size++ > 999\n ) {\n effects.exit('chunkString')\n return atBreak(code)\n }\n effects.consume(code)\n if (!seen) seen = !markdownSpace(code)\n return code === 92 ? labelEscape : labelInside\n }\n\n /**\n * After `\\`, at a special character.\n *\n * ```markdown\n * > | [a\\*a]\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code)\n size++\n return labelInside\n }\n return labelInside(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/**\n * Parse titles.\n *\n * ###### Examples\n *\n * ```markdown\n * \"a\"\n * 'b'\n * (c)\n * \"a\n * b\"\n * 'a\n * b'\n * (a\\)b)\n * ```\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {State} nok\n * State switched to when unsuccessful.\n * @param {TokenType} type\n * Type of the whole title (`\"a\"`, `'b'`, `(c)`).\n * @param {TokenType} markerType\n * Type for the markers (`\"`, `'`, `(`, and `)`).\n * @param {TokenType} stringType\n * Type for the value (`a`).\n * @returns {State}\n * Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryTitle(effects, ok, nok, type, markerType, stringType) {\n /** @type {NonNullable<Code>} */\n let marker\n return start\n\n /**\n * Start of title.\n *\n * ```markdown\n * > | \"a\"\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (code === 34 || code === 39 || code === 40) {\n effects.enter(type)\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n marker = code === 40 ? 41 : code\n return begin\n }\n return nok(code)\n }\n\n /**\n * After opening marker.\n *\n * This is also used at the closing marker.\n *\n * ```markdown\n * > | \"a\"\n * ^\n * ```\n *\n * @type {State}\n */\n function begin(code) {\n if (code === marker) {\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n effects.exit(type)\n return ok\n }\n effects.enter(stringType)\n return atBreak(code)\n }\n\n /**\n * At something, before something else.\n *\n * ```markdown\n * > | \"a\"\n * ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === marker) {\n effects.exit(stringType)\n return begin(marker)\n }\n if (code === null) {\n return nok(code)\n }\n\n // Note: blank lines can’t exist in content.\n if (markdownLineEnding(code)) {\n // To do: use `space_or_tab_eol_with_options`, connect.\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(effects, atBreak, 'linePrefix')\n }\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return inside(code)\n }\n\n /**\n *\n *\n * @type {State}\n */\n function inside(code) {\n if (code === marker || code === null || markdownLineEnding(code)) {\n effects.exit('chunkString')\n return atBreak(code)\n }\n effects.consume(code)\n return code === 92 ? escape : inside\n }\n\n /**\n * After `\\`, at a special character.\n *\n * ```markdown\n * > | \"a\\*b\"\n * ^\n * ```\n *\n * @type {State}\n */\n function escape(code) {\n if (code === marker || code === 92) {\n effects.consume(code)\n return inside\n }\n return inside(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * * line endings or spaces in markdown are often optional, in which case this\n * factory can be used and `ok` will be switched to whether spaces were found\n * or not\n * * one line ending or space can be detected with\n * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace`\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @returns {State}\n * Start state.\n */\nexport function factoryWhitespace(effects, ok) {\n /** @type {boolean} */\n let seen\n return start\n\n /** @type {State} */\n function start(code) {\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n seen = true\n return start\n }\n if (markdownSpace(code)) {\n return factorySpace(\n effects,\n start,\n seen ? 'linePrefix' : 'lineSuffix'\n )(code)\n }\n return ok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factoryDestination} from 'micromark-factory-destination'\nimport {factoryLabel} from 'micromark-factory-label'\nimport {factorySpace} from 'micromark-factory-space'\nimport {factoryTitle} from 'micromark-factory-title'\nimport {factoryWhitespace} from 'micromark-factory-whitespace'\nimport {\n markdownLineEnding,\n markdownLineEndingOrSpace,\n markdownSpace\n} from 'micromark-util-character'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\n/** @type {Construct} */\nexport const definition = {\n name: 'definition',\n tokenize: tokenizeDefinition\n}\n\n/** @type {Construct} */\nconst titleBefore = {\n tokenize: tokenizeTitleBefore,\n partial: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinition(effects, ok, nok) {\n const self = this\n /** @type {string} */\n let identifier\n return start\n\n /**\n * At start of a definition.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Do not interrupt paragraphs (but do follow definitions).\n // To do: do `interrupt` the way `markdown-rs` does.\n // To do: parse whitespace the way `markdown-rs` does.\n effects.enter('definition')\n return before(code)\n }\n\n /**\n * After optional whitespace, at `[`.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n // To do: parse whitespace the way `markdown-rs` does.\n\n return factoryLabel.call(\n self,\n effects,\n labelAfter,\n // Note: we don’t need to reset the way `markdown-rs` does.\n nok,\n 'definitionLabel',\n 'definitionLabelMarker',\n 'definitionLabelString'\n )(code)\n }\n\n /**\n * After label.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function labelAfter(code) {\n identifier = normalizeIdentifier(\n self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n )\n if (code === 58) {\n effects.enter('definitionMarker')\n effects.consume(code)\n effects.exit('definitionMarker')\n return markerAfter\n }\n return nok(code)\n }\n\n /**\n * After marker.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function markerAfter(code) {\n // Note: whitespace is optional.\n return markdownLineEndingOrSpace(code)\n ? factoryWhitespace(effects, destinationBefore)(code)\n : destinationBefore(code)\n }\n\n /**\n * Before destination.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function destinationBefore(code) {\n return factoryDestination(\n effects,\n destinationAfter,\n // Note: we don’t need to reset the way `markdown-rs` does.\n nok,\n 'definitionDestination',\n 'definitionDestinationLiteral',\n 'definitionDestinationLiteralMarker',\n 'definitionDestinationRaw',\n 'definitionDestinationString'\n )(code)\n }\n\n /**\n * After destination.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function destinationAfter(code) {\n return effects.attempt(titleBefore, after, after)(code)\n }\n\n /**\n * After definition.\n *\n * ```markdown\n * > | [a]: b\n * ^\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return markdownSpace(code)\n ? factorySpace(effects, afterWhitespace, 'whitespace')(code)\n : afterWhitespace(code)\n }\n\n /**\n * After definition, after optional whitespace.\n *\n * ```markdown\n * > | [a]: b\n * ^\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function afterWhitespace(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('definition')\n\n // Note: we don’t care about uniqueness.\n // It’s likely that that doesn’t happen very frequently.\n // It is more likely that it wastes precious time.\n self.parser.defined.push(identifier)\n\n // To do: `markdown-rs` interrupt.\n // // You’d be interrupting.\n // tokenizer.interrupt = true\n return ok(code)\n }\n return nok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTitleBefore(effects, ok, nok) {\n return titleBefore\n\n /**\n * After destination, at whitespace.\n *\n * ```markdown\n * > | [a]: b\n * ^\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function titleBefore(code) {\n return markdownLineEndingOrSpace(code)\n ? factoryWhitespace(effects, beforeMarker)(code)\n : nok(code)\n }\n\n /**\n * At title.\n *\n * ```markdown\n * | [a]: b\n * > | \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function beforeMarker(code) {\n return factoryTitle(\n effects,\n titleAfter,\n nok,\n 'definitionTitle',\n 'definitionTitleMarker',\n 'definitionTitleString'\n )(code)\n }\n\n /**\n * After title.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function titleAfter(code) {\n return markdownSpace(code)\n ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code)\n : titleAfterOptionalWhitespace(code)\n }\n\n /**\n * After title, after optional whitespace.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function titleAfterOptionalWhitespace(code) {\n return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {Construct} */\nexport const hardBreakEscape = {\n name: 'hardBreakEscape',\n tokenize: tokenizeHardBreakEscape\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n return start\n\n /**\n * Start of a hard break (escape).\n *\n * ```markdown\n * > | a\\\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('hardBreakEscape')\n effects.consume(code)\n return after\n }\n\n /**\n * After `\\`, at eol.\n *\n * ```markdown\n * > | a\\\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function after(code) {\n if (markdownLineEnding(code)) {\n effects.exit('hardBreakEscape')\n return ok(code)\n }\n return nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n markdownLineEnding,\n markdownLineEndingOrSpace,\n markdownSpace\n} from 'micromark-util-character'\nimport {splice} from 'micromark-util-chunked'\n/** @type {Construct} */\nexport const headingAtx = {\n name: 'headingAtx',\n tokenize: tokenizeHeadingAtx,\n resolve: resolveHeadingAtx\n}\n\n/** @type {Resolver} */\nfunction resolveHeadingAtx(events, context) {\n let contentEnd = events.length - 2\n let contentStart = 3\n /** @type {Token} */\n let content\n /** @type {Token} */\n let text\n\n // Prefix whitespace, part of the opening.\n if (events[contentStart][1].type === 'whitespace') {\n contentStart += 2\n }\n\n // Suffix whitespace, part of the closing.\n if (\n contentEnd - 2 > contentStart &&\n events[contentEnd][1].type === 'whitespace'\n ) {\n contentEnd -= 2\n }\n if (\n events[contentEnd][1].type === 'atxHeadingSequence' &&\n (contentStart === contentEnd - 1 ||\n (contentEnd - 4 > contentStart &&\n events[contentEnd - 2][1].type === 'whitespace'))\n ) {\n contentEnd -= contentStart + 1 === contentEnd ? 2 : 4\n }\n if (contentEnd > contentStart) {\n content = {\n type: 'atxHeadingText',\n start: events[contentStart][1].start,\n end: events[contentEnd][1].end\n }\n text = {\n type: 'chunkText',\n start: events[contentStart][1].start,\n end: events[contentEnd][1].end,\n contentType: 'text'\n }\n splice(events, contentStart, contentEnd - contentStart + 1, [\n ['enter', content, context],\n ['enter', text, context],\n ['exit', text, context],\n ['exit', content, context]\n ])\n }\n return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n let size = 0\n return start\n\n /**\n * Start of a heading (atx).\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: parse indent like `markdown-rs`.\n effects.enter('atxHeading')\n return before(code)\n }\n\n /**\n * After optional whitespace, at `#`.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n effects.enter('atxHeadingSequence')\n return sequenceOpen(code)\n }\n\n /**\n * In opening sequence.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === 35 && size++ < 6) {\n effects.consume(code)\n return sequenceOpen\n }\n\n // Always at least one `#`.\n if (code === null || markdownLineEndingOrSpace(code)) {\n effects.exit('atxHeadingSequence')\n return atBreak(code)\n }\n return nok(code)\n }\n\n /**\n * After something, before something else.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === 35) {\n effects.enter('atxHeadingSequence')\n return sequenceFurther(code)\n }\n if (code === null || markdownLineEnding(code)) {\n effects.exit('atxHeading')\n // To do: interrupt like `markdown-rs`.\n // // Feel free to interrupt.\n // tokenizer.interrupt = false\n return ok(code)\n }\n if (markdownSpace(code)) {\n return factorySpace(effects, atBreak, 'whitespace')(code)\n }\n\n // To do: generate `data` tokens, add the `text` token later.\n // Needs edit map, see: `markdown.rs`.\n effects.enter('atxHeadingText')\n return data(code)\n }\n\n /**\n * In further sequence (after whitespace).\n *\n * Could be normal “visible” hashes in the heading or a final sequence.\n *\n * ```markdown\n * > | ## aa ##\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceFurther(code) {\n if (code === 35) {\n effects.consume(code)\n return sequenceFurther\n }\n effects.exit('atxHeadingSequence')\n return atBreak(code)\n }\n\n /**\n * In text.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function data(code) {\n if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n effects.exit('atxHeadingText')\n return atBreak(code)\n }\n effects.consume(code)\n return data\n }\n}\n","/**\n * List of lowercase HTML “block” tag names.\n *\n * The list, when parsing HTML (flow), results in more relaxed rules (condition\n * 6).\n * Because they are known blocks, the HTML-like syntax doesn’t have to be\n * strictly parsed.\n * For tag names not in this list, a more strict algorithm (condition 7) is used\n * to detect whether the HTML-like syntax is seen as HTML (flow) or not.\n *\n * This is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `search` was added in `CommonMark@0.31`.\n */\nexport const htmlBlockNames = [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'search',\n 'section',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n]\n\n/**\n * List of lowercase HTML “raw” tag names.\n *\n * The list, when parsing HTML (flow), results in HTML that can include lines\n * without exiting, until a closing tag also in this list is found (condition\n * 1).\n *\n * This module is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`.\n */\nexport const htmlRawNames = ['pre', 'script', 'style', 'textarea']\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {\n asciiAlpha,\n asciiAlphanumeric,\n markdownLineEnding,\n markdownLineEndingOrSpace,\n markdownSpace\n} from 'micromark-util-character'\nimport {htmlBlockNames, htmlRawNames} from 'micromark-util-html-tag-name'\nimport {blankLine} from './blank-line.js'\n\n/** @type {Construct} */\nexport const htmlFlow = {\n name: 'htmlFlow',\n tokenize: tokenizeHtmlFlow,\n resolveTo: resolveToHtmlFlow,\n concrete: true\n}\n\n/** @type {Construct} */\nconst blankLineBefore = {\n tokenize: tokenizeBlankLineBefore,\n partial: true\n}\nconst nonLazyContinuationStart = {\n tokenize: tokenizeNonLazyContinuationStart,\n partial: true\n}\n\n/** @type {Resolver} */\nfunction resolveToHtmlFlow(events) {\n let index = events.length\n while (index--) {\n if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') {\n break\n }\n }\n if (index > 1 && events[index - 2][1].type === 'linePrefix') {\n // Add the prefix start to the HTML token.\n events[index][1].start = events[index - 2][1].start\n // Add the prefix start to the HTML line token.\n events[index + 1][1].start = events[index - 2][1].start\n // Remove the line prefix.\n events.splice(index - 2, 2)\n }\n return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n const self = this\n /** @type {number} */\n let marker\n /** @type {boolean} */\n let closingTag\n /** @type {string} */\n let buffer\n /** @type {number} */\n let index\n /** @type {Code} */\n let markerB\n return start\n\n /**\n * Start of HTML (flow).\n *\n * ```markdown\n * > | <x />\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: parse indent like `markdown-rs`.\n return before(code)\n }\n\n /**\n * At `<`, after optional whitespace.\n *\n * ```markdown\n * > | <x />\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n effects.enter('htmlFlow')\n effects.enter('htmlFlowData')\n effects.consume(code)\n return open\n }\n\n /**\n * After `<`, at tag name or other stuff.\n *\n * ```markdown\n * > | <x />\n * ^\n * > | <!doctype>\n * ^\n * > | <!--xxx-->\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 33) {\n effects.consume(code)\n return declarationOpen\n }\n if (code === 47) {\n effects.consume(code)\n closingTag = true\n return tagCloseStart\n }\n if (code === 63) {\n effects.consume(code)\n marker = 3\n // To do:\n // tokenizer.concrete = true\n // To do: use `markdown-rs` style interrupt.\n // While we’re in an instruction instead of a declaration, we’re on a `?`\n // right now, so we do need to search for `>`, similar to declarations.\n return self.interrupt ? ok : continuationDeclarationInside\n }\n\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code)\n // @ts-expect-error: not null.\n buffer = String.fromCharCode(code)\n return tagName\n }\n return nok(code)\n }\n\n /**\n * After `<!`, at declaration, comment, or CDATA.\n *\n * ```markdown\n * > | <!doctype>\n * ^\n * > | <!--xxx-->\n * ^\n * > | <![CDATA[>&<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function declarationOpen(code) {\n if (code === 45) {\n effects.consume(code)\n marker = 2\n return commentOpenInside\n }\n if (code === 91) {\n effects.consume(code)\n marker = 5\n index = 0\n return cdataOpenInside\n }\n\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code)\n marker = 4\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuationDeclarationInside\n }\n return nok(code)\n }\n\n /**\n * After `<!-`, inside a comment, at another `-`.\n *\n * ```markdown\n * > | <!--xxx-->\n * ^\n * ```\n *\n * @type {State}\n */\n function commentOpenInside(code) {\n if (code === 45) {\n effects.consume(code)\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuationDeclarationInside\n }\n return nok(code)\n }\n\n /**\n * After `<![`, inside CDATA, expecting `CDATA[`.\n *\n * ```markdown\n * > | <![CDATA[>&<]]>\n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function cdataOpenInside(code) {\n const value = 'CDATA['\n if (code === value.charCodeAt(index++)) {\n effects.consume(code)\n if (index === value.length) {\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuation\n }\n return cdataOpenInside\n }\n return nok(code)\n }\n\n /**\n * After `</`, in closing tag, at tag name.\n *\n * ```markdown\n * > | </x>\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseStart(code) {\n if (asciiAlpha(code)) {\n effects.consume(code)\n // @ts-expect-error: not null.\n buffer = String.fromCharCode(code)\n return tagName\n }\n return nok(code)\n }\n\n /**\n * In tag name.\n *\n * ```markdown\n * > | <ab>\n * ^^\n * > | </ab>\n * ^^\n * ```\n *\n * @type {State}\n */\n function tagName(code) {\n if (\n code === null ||\n code === 47 ||\n code === 62 ||\n markdownLineEndingOrSpace(code)\n ) {\n const slash = code === 47\n const name = buffer.toLowerCase()\n if (!slash && !closingTag && htmlRawNames.includes(name)) {\n marker = 1\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok(code) : continuation(code)\n }\n if (htmlBlockNames.includes(buffer.toLowerCase())) {\n marker = 6\n if (slash) {\n effects.consume(code)\n return basicSelfClosing\n }\n\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok(code) : continuation(code)\n }\n marker = 7\n // Do not support complete HTML when interrupting.\n return self.interrupt && !self.parser.lazy[self.now().line]\n ? nok(code)\n : closingTag\n ? completeClosingTagAfter(code)\n : completeAttributeNameBefore(code)\n }\n\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code)\n buffer += String.fromCharCode(code)\n return tagName\n }\n return nok(code)\n }\n\n /**\n * After closing slash of a basic tag name.\n *\n * ```markdown\n * > | <div/>\n * ^\n * ```\n *\n * @type {State}\n */\n function basicSelfClosing(code) {\n if (code === 62) {\n effects.consume(code)\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuation\n }\n return nok(code)\n }\n\n /**\n * After closing slash of a complete tag name.\n *\n * ```markdown\n * > | <x/>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeClosingTagAfter(code) {\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeClosingTagAfter\n }\n return completeEnd(code)\n }\n\n /**\n * At an attribute name.\n *\n * At first, this state is used after a complete tag name, after whitespace,\n * where it expects optional attributes or the end of the tag.\n * It is also reused after attributes, when expecting more optional\n * attributes.\n *\n * ```markdown\n * > | <a />\n * ^\n * > | <a :b>\n * ^\n * > | <a _b>\n * ^\n * > | <a b>\n * ^\n * > | <a >\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeNameBefore(code) {\n if (code === 47) {\n effects.consume(code)\n return completeEnd\n }\n\n // ASCII alphanumerical and `:` and `_`.\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code)\n return completeAttributeName\n }\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAttributeNameBefore\n }\n return completeEnd(code)\n }\n\n /**\n * In attribute name.\n *\n * ```markdown\n * > | <a :b>\n * ^\n * > | <a _b>\n * ^\n * > | <a b>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeName(code) {\n // ASCII alphanumerical and `-`, `.`, `:`, and `_`.\n if (\n code === 45 ||\n code === 46 ||\n code === 58 ||\n code === 95 ||\n asciiAlphanumeric(code)\n ) {\n effects.consume(code)\n return completeAttributeName\n }\n return completeAttributeNameAfter(code)\n }\n\n /**\n * After attribute name, at an optional initializer, the end of the tag, or\n * whitespace.\n *\n * ```markdown\n * > | <a b>\n * ^\n * > | <a b=c>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code)\n return completeAttributeValueBefore\n }\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAttributeNameAfter\n }\n return completeAttributeNameBefore(code)\n }\n\n /**\n * Before unquoted, double quoted, or single quoted attribute value, allowing\n * whitespace.\n *\n * ```markdown\n * > | <a b=c>\n * ^\n * > | <a b=\"c\">\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeValueBefore(code) {\n if (\n code === null ||\n code === 60 ||\n code === 61 ||\n code === 62 ||\n code === 96\n ) {\n return nok(code)\n }\n if (code === 34 || code === 39) {\n effects.consume(code)\n markerB = code\n return completeAttributeValueQuoted\n }\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAttributeValueBefore\n }\n return completeAttributeValueUnquoted(code)\n }\n\n /**\n * In double or single quoted attribute value.\n *\n * ```markdown\n * > | <a b=\"c\">\n * ^\n * > | <a b='c'>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeValueQuoted(code) {\n if (code === markerB) {\n effects.consume(code)\n markerB = null\n return completeAttributeValueQuotedAfter\n }\n if (code === null || markdownLineEnding(code)) {\n return nok(code)\n }\n effects.consume(code)\n return completeAttributeValueQuoted\n }\n\n /**\n * In unquoted attribute value.\n *\n * ```markdown\n * > | <a b=c>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeValueUnquoted(code) {\n if (\n code === null ||\n code === 34 ||\n code === 39 ||\n code === 47 ||\n code === 60 ||\n code === 61 ||\n code === 62 ||\n code === 96 ||\n markdownLineEndingOrSpace(code)\n ) {\n return completeAttributeNameAfter(code)\n }\n effects.consume(code)\n return completeAttributeValueUnquoted\n }\n\n /**\n * After double or single quoted attribute value, before whitespace or the\n * end of the tag.\n *\n * ```markdown\n * > | <a b=\"c\">\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeValueQuotedAfter(code) {\n if (code === 47 || code === 62 || markdownSpace(code)) {\n return completeAttributeNameBefore(code)\n }\n return nok(code)\n }\n\n /**\n * In certain circumstances of a complete tag where only an `>` is allowed.\n *\n * ```markdown\n * > | <a b=\"c\">\n * ^\n * ```\n *\n * @type {State}\n */\n function completeEnd(code) {\n if (code === 62) {\n effects.consume(code)\n return completeAfter\n }\n return nok(code)\n }\n\n /**\n * After `>` in a complete tag.\n *\n * ```markdown\n * > | <x>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAfter(code) {\n if (code === null || markdownLineEnding(code)) {\n // // Do not form containers.\n // tokenizer.concrete = true\n return continuation(code)\n }\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAfter\n }\n return nok(code)\n }\n\n /**\n * In continuation of any HTML kind.\n *\n * ```markdown\n * > | <!--xxx-->\n * ^\n * ```\n *\n * @type {State}\n */\n function continuation(code) {\n if (code === 45 && marker === 2) {\n effects.consume(code)\n return continuationCommentInside\n }\n if (code === 60 && marker === 1) {\n effects.consume(code)\n return continuationRawTagOpen\n }\n if (code === 62 && marker === 4) {\n effects.consume(code)\n return continuationClose\n }\n if (code === 63 && marker === 3) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n if (code === 93 && marker === 5) {\n effects.consume(code)\n return continuationCdataInside\n }\n if (markdownLineEnding(code) && (marker === 6 || marker === 7)) {\n effects.exit('htmlFlowData')\n return effects.check(\n blankLineBefore,\n continuationAfter,\n continuationStart\n )(code)\n }\n if (code === null || markdownLineEnding(code)) {\n effects.exit('htmlFlowData')\n return continuationStart(code)\n }\n effects.consume(code)\n return continuation\n }\n\n /**\n * In continuation, at eol.\n *\n * ```markdown\n * > | <x>\n * ^\n * | asd\n * ```\n *\n * @type {State}\n */\n function continuationStart(code) {\n return effects.check(\n nonLazyContinuationStart,\n continuationStartNonLazy,\n continuationAfter\n )(code)\n }\n\n /**\n * In continuation, at eol, before non-lazy content.\n *\n * ```markdown\n * > | <x>\n * ^\n * | asd\n * ```\n *\n * @type {State}\n */\n function continuationStartNonLazy(code) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return continuationBefore\n }\n\n /**\n * In continuation, before non-lazy content.\n *\n * ```markdown\n * | <x>\n * > | asd\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n return continuationStart(code)\n }\n effects.enter('htmlFlowData')\n return continuation(code)\n }\n\n /**\n * In comment continuation, after one `-`, expecting another.\n *\n * ```markdown\n * > | <!--xxx-->\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationCommentInside(code) {\n if (code === 45) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n return continuation(code)\n }\n\n /**\n * In raw continuation, after `<`, at `/`.\n *\n * ```markdown\n * > | <script>console.log(1)</script>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationRawTagOpen(code) {\n if (code === 47) {\n effects.consume(code)\n buffer = ''\n return continuationRawEndTag\n }\n return continuation(code)\n }\n\n /**\n * In raw continuation, after `</`, in a raw tag name.\n *\n * ```markdown\n * > | <script>console.log(1)</script>\n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function continuationRawEndTag(code) {\n if (code === 62) {\n const name = buffer.toLowerCase()\n if (htmlRawNames.includes(name)) {\n effects.consume(code)\n return continuationClose\n }\n return continuation(code)\n }\n if (asciiAlpha(code) && buffer.length < 8) {\n effects.consume(code)\n // @ts-expect-error: not null.\n buffer += String.fromCharCode(code)\n return continuationRawEndTag\n }\n return continuation(code)\n }\n\n /**\n * In cdata continuation, after `]`, expecting `]>`.\n *\n * ```markdown\n * > | <![CDATA[>&<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationCdataInside(code) {\n if (code === 93) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n return continuation(code)\n }\n\n /**\n * In declaration or instruction continuation, at `>`.\n *\n * ```markdown\n * > | <!-->\n * ^\n * > | <?>\n * ^\n * > | <!q>\n * ^\n * > | <!--ab-->\n * ^\n * > | <![CDATA[>&<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationDeclarationInside(code) {\n if (code === 62) {\n effects.consume(code)\n return continuationClose\n }\n\n // More dashes.\n if (code === 45 && marker === 2) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n return continuation(code)\n }\n\n /**\n * In closed continuation: everything we get until the eol/eof is part of it.\n *\n * ```markdown\n * > | <!doctype>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationClose(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('htmlFlowData')\n return continuationAfter(code)\n }\n effects.consume(code)\n return continuationClose\n }\n\n /**\n * Done.\n *\n * ```markdown\n * > | <!doctype>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationAfter(code) {\n effects.exit('htmlFlow')\n // // Feel free to interrupt.\n // tokenizer.interrupt = false\n // // No longer concrete.\n // tokenizer.concrete = false\n return ok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuationStart(effects, ok, nok) {\n const self = this\n return start\n\n /**\n * At eol, before continuation.\n *\n * ```markdown\n * > | * ```js\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return after\n }\n return nok(code)\n }\n\n /**\n * A continuation.\n *\n * ```markdown\n * | * ```js\n * > | b\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n return start\n\n /**\n * Before eol, expecting blank line.\n *\n * ```markdown\n * > | <div>\n * ^\n * |\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return effects.attempt(blankLine, ok, nok)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n asciiAlpha,\n asciiAlphanumeric,\n markdownLineEnding,\n markdownLineEndingOrSpace,\n markdownSpace\n} from 'micromark-util-character'\n/** @type {Construct} */\nexport const htmlText = {\n name: 'htmlText',\n tokenize: tokenizeHtmlText\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n const self = this\n /** @type {NonNullable<Code> | undefined} */\n let marker\n /** @type {number} */\n let index\n /** @type {State} */\n let returnState\n return start\n\n /**\n * Start of HTML (text).\n *\n * ```markdown\n * > | a <b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('htmlText')\n effects.enter('htmlTextData')\n effects.consume(code)\n return open\n }\n\n /**\n * After `<`, at tag name or other stuff.\n *\n * ```markdown\n * > | a <b> c\n * ^\n * > | a <!doctype> c\n * ^\n * > | a <!--b--> c\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 33) {\n effects.consume(code)\n return declarationOpen\n }\n if (code === 47) {\n effects.consume(code)\n return tagCloseStart\n }\n if (code === 63) {\n effects.consume(code)\n return instruction\n }\n\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code)\n return tagOpen\n }\n return nok(code)\n }\n\n /**\n * After `<!`, at declaration, comment, or CDATA.\n *\n * ```markdown\n * > | a <!doctype> c\n * ^\n * > | a <!--b--> c\n * ^\n * > | a <![CDATA[>&<]]> c\n * ^\n * ```\n *\n * @type {State}\n */\n function declarationOpen(code) {\n if (code === 45) {\n effects.consume(code)\n return commentOpenInside\n }\n if (code === 91) {\n effects.consume(code)\n index = 0\n return cdataOpenInside\n }\n if (asciiAlpha(code)) {\n effects.consume(code)\n return declaration\n }\n return nok(code)\n }\n\n /**\n * In a comment, after `<!-`, at another `-`.\n *\n * ```markdown\n * > | a <!--b--> c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentOpenInside(code) {\n if (code === 45) {\n effects.consume(code)\n return commentEnd\n }\n return nok(code)\n }\n\n /**\n * In comment.\n *\n * ```markdown\n * > | a <!--b--> c\n * ^\n * ```\n *\n * @type {State}\n */\n function comment(code) {\n if (code === null) {\n return nok(code)\n }\n if (code === 45) {\n effects.consume(code)\n return commentClose\n }\n if (markdownLineEnding(code)) {\n returnState = comment\n return lineEndingBefore(code)\n }\n effects.consume(code)\n return comment\n }\n\n /**\n * In comment, after `-`.\n *\n * ```markdown\n * > | a <!--b--> c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentClose(code) {\n if (code === 45) {\n effects.consume(code)\n return commentEnd\n }\n return comment(code)\n }\n\n /**\n * In comment, after `--`.\n *\n * ```markdown\n * > | a <!--b--> c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentEnd(code) {\n return code === 62\n ? end(code)\n : code === 45\n ? commentClose(code)\n : comment(code)\n }\n\n /**\n * After `<![`, in CDATA, expecting `CDATA[`.\n *\n * ```markdown\n * > | a <![CDATA[>&<]]> b\n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function cdataOpenInside(code) {\n const value = 'CDATA['\n if (code === value.charCodeAt(index++)) {\n effects.consume(code)\n return index === value.length ? cdata : cdataOpenInside\n }\n return nok(code)\n }\n\n /**\n * In CDATA.\n *\n * ```markdown\n * > | a <![CDATA[>&<]]> b\n * ^^^\n * ```\n *\n * @type {State}\n */\n function cdata(code) {\n if (code === null) {\n return nok(code)\n }\n if (code === 93) {\n effects.consume(code)\n return cdataClose\n }\n if (markdownLineEnding(code)) {\n returnState = cdata\n return lineEndingBefore(code)\n }\n effects.consume(code)\n return cdata\n }\n\n /**\n * In CDATA, after `]`, at another `]`.\n *\n * ```markdown\n * > | a <![CDATA[>&<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n function cdataClose(code) {\n if (code === 93) {\n effects.consume(code)\n return cdataEnd\n }\n return cdata(code)\n }\n\n /**\n * In CDATA, after `]]`, at `>`.\n *\n * ```markdown\n * > | a <![CDATA[>&<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n function cdataEnd(code) {\n if (code === 62) {\n return end(code)\n }\n if (code === 93) {\n effects.consume(code)\n return cdataEnd\n }\n return cdata(code)\n }\n\n /**\n * In declaration.\n *\n * ```markdown\n * > | a <!b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function declaration(code) {\n if (code === null || code === 62) {\n return end(code)\n }\n if (markdownLineEnding(code)) {\n returnState = declaration\n return lineEndingBefore(code)\n }\n effects.consume(code)\n return declaration\n }\n\n /**\n * In instruction.\n *\n * ```markdown\n * > | a <?b?> c\n * ^\n * ```\n *\n * @type {State}\n */\n function instruction(code) {\n if (code === null) {\n return nok(code)\n }\n if (code === 63) {\n effects.consume(code)\n return instructionClose\n }\n if (markdownLineEnding(code)) {\n returnState = instruction\n return lineEndingBefore(code)\n }\n effects.consume(code)\n return instruction\n }\n\n /**\n * In instruction, after `?`, at `>`.\n *\n * ```markdown\n * > | a <?b?> c\n * ^\n * ```\n *\n * @type {State}\n */\n function instructionClose(code) {\n return code === 62 ? end(code) : instruction(code)\n }\n\n /**\n * After `</`, in closing tag, at tag name.\n *\n * ```markdown\n * > | a </b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseStart(code) {\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code)\n return tagClose\n }\n return nok(code)\n }\n\n /**\n * After `</x`, in a tag name.\n *\n * ```markdown\n * > | a </b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagClose(code) {\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code)\n return tagClose\n }\n return tagCloseBetween(code)\n }\n\n /**\n * In closing tag, after tag name.\n *\n * ```markdown\n * > | a </b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseBetween(code) {\n if (markdownLineEnding(code)) {\n returnState = tagCloseBetween\n return lineEndingBefore(code)\n }\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagCloseBetween\n }\n return end(code)\n }\n\n /**\n * After `<x`, in opening tag name.\n *\n * ```markdown\n * > | a <b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpen(code) {\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code)\n return tagOpen\n }\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code)\n }\n return nok(code)\n }\n\n /**\n * In opening tag, after tag name.\n *\n * ```markdown\n * > | a <b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenBetween(code) {\n if (code === 47) {\n effects.consume(code)\n return end\n }\n\n // ASCII alphabetical and `:` and `_`.\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code)\n return tagOpenAttributeName\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenBetween\n return lineEndingBefore(code)\n }\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagOpenBetween\n }\n return end(code)\n }\n\n /**\n * In attribute name.\n *\n * ```markdown\n * > | a <b c> d\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeName(code) {\n // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n if (\n code === 45 ||\n code === 46 ||\n code === 58 ||\n code === 95 ||\n asciiAlphanumeric(code)\n ) {\n effects.consume(code)\n return tagOpenAttributeName\n }\n return tagOpenAttributeNameAfter(code)\n }\n\n /**\n * After attribute name, before initializer, the end of the tag, or\n * whitespace.\n *\n * ```markdown\n * > | a <b c> d\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code)\n return tagOpenAttributeValueBefore\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeNameAfter\n return lineEndingBefore(code)\n }\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagOpenAttributeNameAfter\n }\n return tagOpenBetween(code)\n }\n\n /**\n * Before unquoted, double quoted, or single quoted attribute value, allowing\n * whitespace.\n *\n * ```markdown\n * > | a <b c=d> e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueBefore(code) {\n if (\n code === null ||\n code === 60 ||\n code === 61 ||\n code === 62 ||\n code === 96\n ) {\n return nok(code)\n }\n if (code === 34 || code === 39) {\n effects.consume(code)\n marker = code\n return tagOpenAttributeValueQuoted\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueBefore\n return lineEndingBefore(code)\n }\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagOpenAttributeValueBefore\n }\n effects.consume(code)\n return tagOpenAttributeValueUnquoted\n }\n\n /**\n * In double or single quoted attribute value.\n *\n * ```markdown\n * > | a <b c=\"d\"> e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueQuoted(code) {\n if (code === marker) {\n effects.consume(code)\n marker = undefined\n return tagOpenAttributeValueQuotedAfter\n }\n if (code === null) {\n return nok(code)\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueQuoted\n return lineEndingBefore(code)\n }\n effects.consume(code)\n return tagOpenAttributeValueQuoted\n }\n\n /**\n * In unquoted attribute value.\n *\n * ```markdown\n * > | a <b c=d> e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueUnquoted(code) {\n if (\n code === null ||\n code === 34 ||\n code === 39 ||\n code === 60 ||\n code === 61 ||\n code === 96\n ) {\n return nok(code)\n }\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code)\n }\n effects.consume(code)\n return tagOpenAttributeValueUnquoted\n }\n\n /**\n * After double or single quoted attribute value, before whitespace or the end\n * of the tag.\n *\n * ```markdown\n * > | a <b c=\"d\"> e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueQuotedAfter(code) {\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code)\n }\n return nok(code)\n }\n\n /**\n * In certain circumstances of a tag where only an `>` is allowed.\n *\n * ```markdown\n * > | a <b c=\"d\"> e\n * ^\n * ```\n *\n * @type {State}\n */\n function end(code) {\n if (code === 62) {\n effects.consume(code)\n effects.exit('htmlTextData')\n effects.exit('htmlText')\n return ok\n }\n return nok(code)\n }\n\n /**\n * At eol.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * > | a <!--a\n * ^\n * | b-->\n * ```\n *\n * @type {State}\n */\n function lineEndingBefore(code) {\n effects.exit('htmlTextData')\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return lineEndingAfter\n }\n\n /**\n * After eol, at optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a <!--a\n * > | b-->\n * ^\n * ```\n *\n * @type {State}\n */\n function lineEndingAfter(code) {\n // Always populated by defaults.\n\n return markdownSpace(code)\n ? factorySpace(\n effects,\n lineEndingAfterPrefix,\n 'linePrefix',\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4\n )(code)\n : lineEndingAfterPrefix(code)\n }\n\n /**\n * After eol, after optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a <!--a\n * > | b-->\n * ^\n * ```\n *\n * @type {State}\n */\n function lineEndingAfterPrefix(code) {\n effects.enter('htmlTextData')\n return returnState(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factoryDestination} from 'micromark-factory-destination'\nimport {factoryLabel} from 'micromark-factory-label'\nimport {factoryTitle} from 'micromark-factory-title'\nimport {factoryWhitespace} from 'micromark-factory-whitespace'\nimport {markdownLineEndingOrSpace} from 'micromark-util-character'\nimport {push, splice} from 'micromark-util-chunked'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/** @type {Construct} */\nexport const labelEnd = {\n name: 'labelEnd',\n tokenize: tokenizeLabelEnd,\n resolveTo: resolveToLabelEnd,\n resolveAll: resolveAllLabelEnd\n}\n\n/** @type {Construct} */\nconst resourceConstruct = {\n tokenize: tokenizeResource\n}\n/** @type {Construct} */\nconst referenceFullConstruct = {\n tokenize: tokenizeReferenceFull\n}\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {\n tokenize: tokenizeReferenceCollapsed\n}\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n let index = -1\n while (++index < events.length) {\n const token = events[index][1]\n if (\n token.type === 'labelImage' ||\n token.type === 'labelLink' ||\n token.type === 'labelEnd'\n ) {\n // Remove the marker.\n events.splice(index + 1, token.type === 'labelImage' ? 4 : 2)\n token.type = 'data'\n index++\n }\n }\n return events\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n let index = events.length\n let offset = 0\n /** @type {Token} */\n let token\n /** @type {number | undefined} */\n let open\n /** @type {number | undefined} */\n let close\n /** @type {Array<Event>} */\n let media\n\n // Find an opening.\n while (index--) {\n token = events[index][1]\n if (open) {\n // If we see another link, or inactive link label, we’ve been here before.\n if (\n token.type === 'link' ||\n (token.type === 'labelLink' && token._inactive)\n ) {\n break\n }\n\n // Mark other link openings as inactive, as we can’t have links in\n // links.\n if (events[index][0] === 'enter' && token.type === 'labelLink') {\n token._inactive = true\n }\n } else if (close) {\n if (\n events[index][0] === 'enter' &&\n (token.type === 'labelImage' || token.type === 'labelLink') &&\n !token._balanced\n ) {\n open = index\n if (token.type !== 'labelLink') {\n offset = 2\n break\n }\n }\n } else if (token.type === 'labelEnd') {\n close = index\n }\n }\n const group = {\n type: events[open][1].type === 'labelLink' ? 'link' : 'image',\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n }\n const label = {\n type: 'label',\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[close][1].end)\n }\n const text = {\n type: 'labelText',\n start: Object.assign({}, events[open + offset + 2][1].end),\n end: Object.assign({}, events[close - 2][1].start)\n }\n media = [\n ['enter', group, context],\n ['enter', label, context]\n ]\n\n // Opening marker.\n media = push(media, events.slice(open + 1, open + offset + 3))\n\n // Text open.\n media = push(media, [['enter', text, context]])\n\n // Always populated by defaults.\n\n // Between.\n media = push(\n media,\n resolveAll(\n context.parser.constructs.insideSpan.null,\n events.slice(open + offset + 4, close - 3),\n context\n )\n )\n\n // Text close, marker close, label close.\n media = push(media, [\n ['exit', text, context],\n events[close - 2],\n events[close - 1],\n ['exit', label, context]\n ])\n\n // Reference, resource, or so.\n media = push(media, events.slice(close + 1))\n\n // Media close.\n media = push(media, [['exit', group, context]])\n splice(events, open, events.length, media)\n return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n const self = this\n let index = self.events.length\n /** @type {Token} */\n let labelStart\n /** @type {boolean} */\n let defined\n\n // Find an opening.\n while (index--) {\n if (\n (self.events[index][1].type === 'labelImage' ||\n self.events[index][1].type === 'labelLink') &&\n !self.events[index][1]._balanced\n ) {\n labelStart = self.events[index][1]\n break\n }\n }\n return start\n\n /**\n * Start of label end.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // If there is not an okay opening.\n if (!labelStart) {\n return nok(code)\n }\n\n // If the corresponding label (link) start is marked as inactive,\n // it means we’d be wrapping a link, like this:\n //\n // ```markdown\n // > | a [b [c](d) e](f) g.\n // ^\n // ```\n //\n // We can’t have that, so it’s just balanced brackets.\n if (labelStart._inactive) {\n return labelEndNok(code)\n }\n defined = self.parser.defined.includes(\n normalizeIdentifier(\n self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n })\n )\n )\n effects.enter('labelEnd')\n effects.enter('labelMarker')\n effects.consume(code)\n effects.exit('labelMarker')\n effects.exit('labelEnd')\n return after\n }\n\n /**\n * After `]`.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n // an extension.\n\n // Resource (`[asd](fgh)`)?\n if (code === 40) {\n return effects.attempt(\n resourceConstruct,\n labelEndOk,\n defined ? labelEndOk : labelEndNok\n )(code)\n }\n\n // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n if (code === 91) {\n return effects.attempt(\n referenceFullConstruct,\n labelEndOk,\n defined ? referenceNotFull : labelEndNok\n )(code)\n }\n\n // Shortcut (`[asd]`) reference?\n return defined ? labelEndOk(code) : labelEndNok(code)\n }\n\n /**\n * After `]`, at `[`, but not at a full reference.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceNotFull(code) {\n return effects.attempt(\n referenceCollapsedConstruct,\n labelEndOk,\n labelEndNok\n )(code)\n }\n\n /**\n * Done, we found something.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEndOk(code) {\n // Note: `markdown-rs` does a bunch of stuff here.\n return ok(code)\n }\n\n /**\n * Done, it’s nothing.\n *\n * There was an okay opening, but we didn’t match anything.\n *\n * ```markdown\n * > | [a](b c\n * ^\n * > | [a][b c\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEndNok(code) {\n labelStart._balanced = true\n return nok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n return resourceStart\n\n /**\n * At a resource.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceStart(code) {\n effects.enter('resource')\n effects.enter('resourceMarker')\n effects.consume(code)\n effects.exit('resourceMarker')\n return resourceBefore\n }\n\n /**\n * In resource, after `(`, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceBefore(code) {\n return markdownLineEndingOrSpace(code)\n ? factoryWhitespace(effects, resourceOpen)(code)\n : resourceOpen(code)\n }\n\n /**\n * In resource, after optional whitespace, at `)` or a destination.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceOpen(code) {\n if (code === 41) {\n return resourceEnd(code)\n }\n return factoryDestination(\n effects,\n resourceDestinationAfter,\n resourceDestinationMissing,\n 'resourceDestination',\n 'resourceDestinationLiteral',\n 'resourceDestinationLiteralMarker',\n 'resourceDestinationRaw',\n 'resourceDestinationString',\n 32\n )(code)\n }\n\n /**\n * In resource, after destination, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceDestinationAfter(code) {\n return markdownLineEndingOrSpace(code)\n ? factoryWhitespace(effects, resourceBetween)(code)\n : resourceEnd(code)\n }\n\n /**\n * At invalid destination.\n *\n * ```markdown\n * > | [a](<<) b\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceDestinationMissing(code) {\n return nok(code)\n }\n\n /**\n * In resource, after destination and whitespace, at `(` or title.\n *\n * ```markdown\n * > | [a](b ) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceBetween(code) {\n if (code === 34 || code === 39 || code === 40) {\n return factoryTitle(\n effects,\n resourceTitleAfter,\n nok,\n 'resourceTitle',\n 'resourceTitleMarker',\n 'resourceTitleString'\n )(code)\n }\n return resourceEnd(code)\n }\n\n /**\n * In resource, after title, at optional whitespace.\n *\n * ```markdown\n * > | [a](b \"c\") d\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceTitleAfter(code) {\n return markdownLineEndingOrSpace(code)\n ? factoryWhitespace(effects, resourceEnd)(code)\n : resourceEnd(code)\n }\n\n /**\n * In resource, at `)`.\n *\n * ```markdown\n * > | [a](b) d\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceEnd(code) {\n if (code === 41) {\n effects.enter('resourceMarker')\n effects.consume(code)\n effects.exit('resourceMarker')\n effects.exit('resource')\n return ok\n }\n return nok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n const self = this\n return referenceFull\n\n /**\n * In a reference (full), at the `[`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFull(code) {\n return factoryLabel.call(\n self,\n effects,\n referenceFullAfter,\n referenceFullMissing,\n 'reference',\n 'referenceMarker',\n 'referenceString'\n )(code)\n }\n\n /**\n * In a reference (full), after `]`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFullAfter(code) {\n return self.parser.defined.includes(\n normalizeIdentifier(\n self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n )\n )\n ? ok(code)\n : nok(code)\n }\n\n /**\n * In reference (full) that was missing.\n *\n * ```markdown\n * > | [a][b d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFullMissing(code) {\n return nok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n return referenceCollapsedStart\n\n /**\n * In reference (collapsed), at `[`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceCollapsedStart(code) {\n // We only attempt a collapsed label if there’s a `[`.\n\n effects.enter('reference')\n effects.enter('referenceMarker')\n effects.consume(code)\n effects.exit('referenceMarker')\n return referenceCollapsedOpen\n }\n\n /**\n * In reference (collapsed), at `]`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceCollapsedOpen(code) {\n if (code === 93) {\n effects.enter('referenceMarker')\n effects.consume(code)\n effects.exit('referenceMarker')\n effects.exit('reference')\n return ok\n }\n return nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {labelEnd} from './label-end.js'\n\n/** @type {Construct} */\nexport const labelStartImage = {\n name: 'labelStartImage',\n tokenize: tokenizeLabelStartImage,\n resolveAll: labelEnd.resolveAll\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n const self = this\n return start\n\n /**\n * Start of label (image) start.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('labelImage')\n effects.enter('labelImageMarker')\n effects.consume(code)\n effects.exit('labelImageMarker')\n return open\n }\n\n /**\n * After `!`, at `[`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 91) {\n effects.enter('labelMarker')\n effects.consume(code)\n effects.exit('labelMarker')\n effects.exit('labelImage')\n return after\n }\n return nok(code)\n }\n\n /**\n * After `![`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * This is needed in because, when GFM footnotes are enabled, images never\n * form when started with a `^`.\n * Instead, links form:\n *\n * ```markdown\n * \n *\n * ![^a][b]\n *\n * [b]: c\n * ```\n *\n * ```html\n * <p>!<a href=\\\"b\\\">^a</a></p>\n * <p>!<a href=\\\"c\\\">^a</a></p>\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // To do: use a new field to do this, this is still needed for\n // `micromark-extension-gfm-footnote`, but the `label-start-link`\n // behavior isn’t.\n // Hidden footnotes hook.\n /* c8 ignore next 3 */\n return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs\n ? nok(code)\n : ok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {labelEnd} from './label-end.js'\n\n/** @type {Construct} */\nexport const labelStartLink = {\n name: 'labelStartLink',\n tokenize: tokenizeLabelStartLink,\n resolveAll: labelEnd.resolveAll\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n const self = this\n return start\n\n /**\n * Start of label (link) start.\n *\n * ```markdown\n * > | a [b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('labelLink')\n effects.enter('labelMarker')\n effects.consume(code)\n effects.exit('labelMarker')\n effects.exit('labelLink')\n return after\n }\n\n /** @type {State} */\n function after(code) {\n // To do: this isn’t needed in `micromark-extension-gfm-footnote`,\n // remove.\n // Hidden footnotes hook.\n /* c8 ignore next 3 */\n return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs\n ? nok(code)\n : ok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {Construct} */\nexport const lineEnding = {\n name: 'lineEnding',\n tokenize: tokenizeLineEnding\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n return start\n\n /** @type {State} */\n function start(code) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(effects, ok, 'linePrefix')\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const thematicBreak = {\n name: 'thematicBreak',\n tokenize: tokenizeThematicBreak\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeThematicBreak(effects, ok, nok) {\n let size = 0\n /** @type {NonNullable<Code>} */\n let marker\n return start\n\n /**\n * Start of thematic break.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('thematicBreak')\n // To do: parse indent like `markdown-rs`.\n return before(code)\n }\n\n /**\n * After optional whitespace, at marker.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n marker = code\n return atBreak(code)\n }\n\n /**\n * After something, before something else.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === marker) {\n effects.enter('thematicBreakSequence')\n return sequence(code)\n }\n if (size >= 3 && (code === null || markdownLineEnding(code))) {\n effects.exit('thematicBreak')\n return ok(code)\n }\n return nok(code)\n }\n\n /**\n * In sequence.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function sequence(code) {\n if (code === marker) {\n effects.consume(code)\n size++\n return sequence\n }\n effects.exit('thematicBreakSequence')\n return markdownSpace(code)\n ? factorySpace(effects, atBreak, 'whitespace')(code)\n : atBreak(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ContainerState} ContainerState\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {asciiDigit, markdownSpace} from 'micromark-util-character'\nimport {blankLine} from './blank-line.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/** @type {Construct} */\nexport const list = {\n name: 'list',\n tokenize: tokenizeListStart,\n continuation: {\n tokenize: tokenizeListContinuation\n },\n exit: tokenizeListEnd\n}\n\n/** @type {Construct} */\nconst listItemPrefixWhitespaceConstruct = {\n tokenize: tokenizeListItemPrefixWhitespace,\n partial: true\n}\n\n/** @type {Construct} */\nconst indentConstruct = {\n tokenize: tokenizeIndent,\n partial: true\n}\n\n// To do: `markdown-rs` parses list items on their own and later stitches them\n// together.\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListStart(effects, ok, nok) {\n const self = this\n const tail = self.events[self.events.length - 1]\n let initialSize =\n tail && tail[1].type === 'linePrefix'\n ? tail[2].sliceSerialize(tail[1], true).length\n : 0\n let size = 0\n return start\n\n /** @type {State} */\n function start(code) {\n const kind =\n self.containerState.type ||\n (code === 42 || code === 43 || code === 45\n ? 'listUnordered'\n : 'listOrdered')\n if (\n kind === 'listUnordered'\n ? !self.containerState.marker || code === self.containerState.marker\n : asciiDigit(code)\n ) {\n if (!self.containerState.type) {\n self.containerState.type = kind\n effects.enter(kind, {\n _container: true\n })\n }\n if (kind === 'listUnordered') {\n effects.enter('listItemPrefix')\n return code === 42 || code === 45\n ? effects.check(thematicBreak, nok, atMarker)(code)\n : atMarker(code)\n }\n if (!self.interrupt || code === 49) {\n effects.enter('listItemPrefix')\n effects.enter('listItemValue')\n return inside(code)\n }\n }\n return nok(code)\n }\n\n /** @type {State} */\n function inside(code) {\n if (asciiDigit(code) && ++size < 10) {\n effects.consume(code)\n return inside\n }\n if (\n (!self.interrupt || size < 2) &&\n (self.containerState.marker\n ? code === self.containerState.marker\n : code === 41 || code === 46)\n ) {\n effects.exit('listItemValue')\n return atMarker(code)\n }\n return nok(code)\n }\n\n /**\n * @type {State}\n **/\n function atMarker(code) {\n effects.enter('listItemMarker')\n effects.consume(code)\n effects.exit('listItemMarker')\n self.containerState.marker = self.containerState.marker || code\n return effects.check(\n blankLine,\n // Can’t be empty when interrupting.\n self.interrupt ? nok : onBlank,\n effects.attempt(\n listItemPrefixWhitespaceConstruct,\n endOfPrefix,\n otherPrefix\n )\n )\n }\n\n /** @type {State} */\n function onBlank(code) {\n self.containerState.initialBlankLine = true\n initialSize++\n return endOfPrefix(code)\n }\n\n /** @type {State} */\n function otherPrefix(code) {\n if (markdownSpace(code)) {\n effects.enter('listItemPrefixWhitespace')\n effects.consume(code)\n effects.exit('listItemPrefixWhitespace')\n return endOfPrefix\n }\n return nok(code)\n }\n\n /** @type {State} */\n function endOfPrefix(code) {\n self.containerState.size =\n initialSize +\n self.sliceSerialize(effects.exit('listItemPrefix'), true).length\n return ok(code)\n }\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListContinuation(effects, ok, nok) {\n const self = this\n self.containerState._closeFlow = undefined\n return effects.check(blankLine, onBlank, notBlank)\n\n /** @type {State} */\n function onBlank(code) {\n self.containerState.furtherBlankLines =\n self.containerState.furtherBlankLines ||\n self.containerState.initialBlankLine\n\n // We have a blank line.\n // Still, try to consume at most the items size.\n return factorySpace(\n effects,\n ok,\n 'listItemIndent',\n self.containerState.size + 1\n )(code)\n }\n\n /** @type {State} */\n function notBlank(code) {\n if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n self.containerState.furtherBlankLines = undefined\n self.containerState.initialBlankLine = undefined\n return notInCurrentItem(code)\n }\n self.containerState.furtherBlankLines = undefined\n self.containerState.initialBlankLine = undefined\n return effects.attempt(indentConstruct, ok, notInCurrentItem)(code)\n }\n\n /** @type {State} */\n function notInCurrentItem(code) {\n // While we do continue, we signal that the flow should be closed.\n self.containerState._closeFlow = true\n // As we’re closing flow, we’re no longer interrupting.\n self.interrupt = undefined\n // Always populated by defaults.\n\n return factorySpace(\n effects,\n effects.attempt(list, ok, nok),\n 'linePrefix',\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4\n )(code)\n }\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n const self = this\n return factorySpace(\n effects,\n afterPrefix,\n 'listItemIndent',\n self.containerState.size + 1\n )\n\n /** @type {State} */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1]\n return tail &&\n tail[1].type === 'listItemIndent' &&\n tail[2].sliceSerialize(tail[1], true).length === self.containerState.size\n ? ok(code)\n : nok(code)\n }\n}\n\n/**\n * @type {Exiter}\n * @this {TokenizeContext}\n */\nfunction tokenizeListEnd(effects) {\n effects.exit(this.containerState.type)\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n const self = this\n\n // Always populated by defaults.\n\n return factorySpace(\n effects,\n afterPrefix,\n 'listItemPrefixWhitespace',\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4 + 1\n )\n\n /** @type {State} */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1]\n return !markdownSpace(code) &&\n tail &&\n tail[1].type === 'listItemPrefixWhitespace'\n ? ok(code)\n : nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const setextUnderline = {\n name: 'setextUnderline',\n tokenize: tokenizeSetextUnderline,\n resolveTo: resolveToSetextUnderline\n}\n\n/** @type {Resolver} */\nfunction resolveToSetextUnderline(events, context) {\n // To do: resolve like `markdown-rs`.\n let index = events.length\n /** @type {number | undefined} */\n let content\n /** @type {number | undefined} */\n let text\n /** @type {number | undefined} */\n let definition\n\n // Find the opening of the content.\n // It’ll always exist: we don’t tokenize if it isn’t there.\n while (index--) {\n if (events[index][0] === 'enter') {\n if (events[index][1].type === 'content') {\n content = index\n break\n }\n if (events[index][1].type === 'paragraph') {\n text = index\n }\n }\n // Exit\n else {\n if (events[index][1].type === 'content') {\n // Remove the content end (if needed we’ll add it later)\n events.splice(index, 1)\n }\n if (!definition && events[index][1].type === 'definition') {\n definition = index\n }\n }\n }\n const heading = {\n type: 'setextHeading',\n start: Object.assign({}, events[text][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n }\n\n // Change the paragraph to setext heading text.\n events[text][1].type = 'setextHeadingText'\n\n // If we have definitions in the content, we’ll keep on having content,\n // but we need move it.\n if (definition) {\n events.splice(text, 0, ['enter', heading, context])\n events.splice(definition + 1, 0, ['exit', events[content][1], context])\n events[content][1].end = Object.assign({}, events[definition][1].end)\n } else {\n events[content][1] = heading\n }\n\n // Add the heading exit at the end.\n events.push(['exit', heading, context])\n return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n const self = this\n /** @type {NonNullable<Code>} */\n let marker\n return start\n\n /**\n * At start of heading (setext) underline.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n let index = self.events.length\n /** @type {boolean | undefined} */\n let paragraph\n // Find an opening.\n while (index--) {\n // Skip enter/exit of line ending, line prefix, and content.\n // We can now either have a definition or a paragraph.\n if (\n self.events[index][1].type !== 'lineEnding' &&\n self.events[index][1].type !== 'linePrefix' &&\n self.events[index][1].type !== 'content'\n ) {\n paragraph = self.events[index][1].type === 'paragraph'\n break\n }\n }\n\n // To do: handle lazy/pierce like `markdown-rs`.\n // To do: parse indent like `markdown-rs`.\n if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n effects.enter('setextHeadingLine')\n marker = code\n return before(code)\n }\n return nok(code)\n }\n\n /**\n * After optional whitespace, at `-` or `=`.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n effects.enter('setextHeadingLineSequence')\n return inside(code)\n }\n\n /**\n * In sequence.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n if (code === marker) {\n effects.consume(code)\n return inside\n }\n effects.exit('setextHeadingLineSequence')\n return markdownSpace(code)\n ? factorySpace(effects, after, 'lineSuffix')(code)\n : after(code)\n }\n\n /**\n * After sequence, after optional whitespace.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('setextHeadingLine')\n return ok(code)\n }\n return nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nimport {blankLine, content} from 'micromark-core-commonmark'\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {InitialConstruct} */\nexport const flow = {\n tokenize: initializeFlow\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeFlow(effects) {\n const self = this\n const initial = effects.attempt(\n // Try to parse a blank line.\n blankLine,\n atBlankEnding,\n // Try to parse initial flow (essentially, only code).\n effects.attempt(\n this.parser.constructs.flowInitial,\n afterConstruct,\n factorySpace(\n effects,\n effects.attempt(\n this.parser.constructs.flow,\n afterConstruct,\n effects.attempt(content, afterConstruct)\n ),\n 'linePrefix'\n )\n )\n )\n return initial\n\n /** @type {State} */\n function atBlankEnding(code) {\n if (code === null) {\n effects.consume(code)\n return\n }\n effects.enter('lineEndingBlank')\n effects.consume(code)\n effects.exit('lineEndingBlank')\n self.currentConstruct = undefined\n return initial\n }\n\n /** @type {State} */\n function afterConstruct(code) {\n if (code === null) {\n effects.consume(code)\n return\n }\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n self.currentConstruct = undefined\n return initial\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nexport const resolver = {\n resolveAll: createResolver()\n}\nexport const string = initializeFactory('string')\nexport const text = initializeFactory('text')\n\n/**\n * @param {'string' | 'text'} field\n * @returns {InitialConstruct}\n */\nfunction initializeFactory(field) {\n return {\n tokenize: initializeText,\n resolveAll: createResolver(\n field === 'text' ? resolveAllLineSuffixes : undefined\n )\n }\n\n /**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\n function initializeText(effects) {\n const self = this\n const constructs = this.parser.constructs[field]\n const text = effects.attempt(constructs, start, notText)\n return start\n\n /** @type {State} */\n function start(code) {\n return atBreak(code) ? text(code) : notText(code)\n }\n\n /** @type {State} */\n function notText(code) {\n if (code === null) {\n effects.consume(code)\n return\n }\n effects.enter('data')\n effects.consume(code)\n return data\n }\n\n /** @type {State} */\n function data(code) {\n if (atBreak(code)) {\n effects.exit('data')\n return text(code)\n }\n\n // Data.\n effects.consume(code)\n return data\n }\n\n /**\n * @param {Code} code\n * @returns {boolean}\n */\n function atBreak(code) {\n if (code === null) {\n return true\n }\n const list = constructs[code]\n let index = -1\n if (list) {\n // Always populated by defaults.\n\n while (++index < list.length) {\n const item = list[index]\n if (!item.previous || item.previous.call(self, self.previous)) {\n return true\n }\n }\n }\n return false\n }\n }\n}\n\n/**\n * @param {Resolver | undefined} [extraResolver]\n * @returns {Resolver}\n */\nfunction createResolver(extraResolver) {\n return resolveAllText\n\n /** @type {Resolver} */\n function resolveAllText(events, context) {\n let index = -1\n /** @type {number | undefined} */\n let enter\n\n // A rather boring computation (to merge adjacent `data` events) which\n // improves mm performance by 29%.\n while (++index <= events.length) {\n if (enter === undefined) {\n if (events[index] && events[index][1].type === 'data') {\n enter = index\n index++\n }\n } else if (!events[index] || events[index][1].type !== 'data') {\n // Don’t do anything if there is one data token.\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end\n events.splice(enter + 2, index - enter - 2)\n index = enter + 2\n }\n enter = undefined\n }\n }\n return extraResolver ? extraResolver(events, context) : events\n }\n}\n\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can’t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\nfunction resolveAllLineSuffixes(events, context) {\n let eventIndex = 0 // Skip first.\n\n while (++eventIndex <= events.length) {\n if (\n (eventIndex === events.length ||\n events[eventIndex][1].type === 'lineEnding') &&\n events[eventIndex - 1][1].type === 'data'\n ) {\n const data = events[eventIndex - 1][1]\n const chunks = context.sliceStream(data)\n let index = chunks.length\n let bufferIndex = -1\n let size = 0\n /** @type {boolean | undefined} */\n let tabs\n while (index--) {\n const chunk = chunks[index]\n if (typeof chunk === 'string') {\n bufferIndex = chunk.length\n while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n size++\n bufferIndex--\n }\n if (bufferIndex) break\n bufferIndex = -1\n }\n // Number\n else if (chunk === -2) {\n tabs = true\n size++\n } else if (chunk === -1) {\n // Empty\n } else {\n // Replacement character, exit.\n index++\n break\n }\n }\n if (size) {\n const token = {\n type:\n eventIndex === events.length || tabs || size < 2\n ? 'lineSuffix'\n : 'hardBreakTrailing',\n start: {\n line: data.end.line,\n column: data.end.column - size,\n offset: data.end.offset - size,\n _index: data.start._index + index,\n _bufferIndex: index\n ? bufferIndex\n : data.start._bufferIndex + bufferIndex\n },\n end: Object.assign({}, data.end)\n }\n data.end = Object.assign({}, token.start)\n if (data.start.offset === data.end.offset) {\n Object.assign(data, token)\n } else {\n events.splice(\n eventIndex,\n 0,\n ['enter', token, context],\n ['exit', token, context]\n )\n eventIndex += 2\n }\n }\n eventIndex++\n }\n }\n return events\n}\n","/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenType} TokenType\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n/**\n * @callback Restore\n * @returns {undefined}\n *\n * @typedef Info\n * @property {Restore} restore\n * @property {number} from\n *\n * @callback ReturnHandle\n * Handle a successful run.\n * @param {Construct} construct\n * @param {Info} info\n * @returns {undefined}\n */\n\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {push, splice} from 'micromark-util-chunked'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn’t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n * @param {InitialConstruct} initialize\n * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from]\n * @returns {TokenizeContext}\n */\nexport function createTokenizer(parser, initialize, from) {\n /** @type {Point} */\n let point = Object.assign(\n from\n ? Object.assign({}, from)\n : {\n line: 1,\n column: 1,\n offset: 0\n },\n {\n _index: 0,\n _bufferIndex: -1\n }\n )\n /** @type {Record<string, number>} */\n const columnStart = {}\n /** @type {Array<Construct>} */\n const resolveAllConstructs = []\n /** @type {Array<Chunk>} */\n let chunks = []\n /** @type {Array<Token>} */\n let stack = []\n /** @type {boolean | undefined} */\n let consumed = true\n\n /**\n * Tools used for tokenizing.\n *\n * @type {Effects}\n */\n const effects = {\n consume,\n enter,\n exit,\n attempt: constructFactory(onsuccessfulconstruct),\n check: constructFactory(onsuccessfulcheck),\n interrupt: constructFactory(onsuccessfulcheck, {\n interrupt: true\n })\n }\n\n /**\n * State and tools for resolving and serializing.\n *\n * @type {TokenizeContext}\n */\n const context = {\n previous: null,\n code: null,\n containerState: {},\n events: [],\n parser,\n sliceStream,\n sliceSerialize,\n now,\n defineSkip,\n write\n }\n\n /**\n * The state function.\n *\n * @type {State | undefined}\n */\n let state = initialize.tokenize.call(context, effects)\n\n /**\n * Track which character we expect to be consumed, to catch bugs.\n *\n * @type {Code}\n */\n let expectedCode\n if (initialize.resolveAll) {\n resolveAllConstructs.push(initialize)\n }\n return context\n\n /** @type {TokenizeContext['write']} */\n function write(slice) {\n chunks = push(chunks, slice)\n main()\n\n // Exit if we’re not done, resolve might change stuff.\n if (chunks[chunks.length - 1] !== null) {\n return []\n }\n addResult(initialize, 0)\n\n // Otherwise, resolve, and exit.\n context.events = resolveAll(resolveAllConstructs, context.events, context)\n return context.events\n }\n\n //\n // Tools.\n //\n\n /** @type {TokenizeContext['sliceSerialize']} */\n function sliceSerialize(token, expandTabs) {\n return serializeChunks(sliceStream(token), expandTabs)\n }\n\n /** @type {TokenizeContext['sliceStream']} */\n function sliceStream(token) {\n return sliceChunks(chunks, token)\n }\n\n /** @type {TokenizeContext['now']} */\n function now() {\n // This is a hot path, so we clone manually instead of `Object.assign({}, point)`\n const {line, column, offset, _index, _bufferIndex} = point\n return {\n line,\n column,\n offset,\n _index,\n _bufferIndex\n }\n }\n\n /** @type {TokenizeContext['defineSkip']} */\n function defineSkip(value) {\n columnStart[value.line] = value.column\n accountForPotentialSkip()\n }\n\n //\n // State management.\n //\n\n /**\n * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n * `consume`).\n * Here is where we walk through the chunks, which either include strings of\n * several characters, or numerical character codes.\n * The reason to do this in a loop instead of a call is so the stack can\n * drain.\n *\n * @returns {undefined}\n */\n function main() {\n /** @type {number} */\n let chunkIndex\n while (point._index < chunks.length) {\n const chunk = chunks[point._index]\n\n // If we’re in a buffer chunk, loop through it.\n if (typeof chunk === 'string') {\n chunkIndex = point._index\n if (point._bufferIndex < 0) {\n point._bufferIndex = 0\n }\n while (\n point._index === chunkIndex &&\n point._bufferIndex < chunk.length\n ) {\n go(chunk.charCodeAt(point._bufferIndex))\n }\n } else {\n go(chunk)\n }\n }\n }\n\n /**\n * Deal with one code.\n *\n * @param {Code} code\n * @returns {undefined}\n */\n function go(code) {\n consumed = undefined\n expectedCode = code\n state = state(code)\n }\n\n /** @type {Effects['consume']} */\n function consume(code) {\n if (markdownLineEnding(code)) {\n point.line++\n point.column = 1\n point.offset += code === -3 ? 2 : 1\n accountForPotentialSkip()\n } else if (code !== -1) {\n point.column++\n point.offset++\n }\n\n // Not in a string chunk.\n if (point._bufferIndex < 0) {\n point._index++\n } else {\n point._bufferIndex++\n\n // At end of string chunk.\n // @ts-expect-error Points w/ non-negative `_bufferIndex` reference\n // strings.\n if (point._bufferIndex === chunks[point._index].length) {\n point._bufferIndex = -1\n point._index++\n }\n }\n\n // Expose the previous character.\n context.previous = code\n\n // Mark as consumed.\n consumed = true\n }\n\n /** @type {Effects['enter']} */\n function enter(type, fields) {\n /** @type {Token} */\n // @ts-expect-error Patch instead of assign required fields to help GC.\n const token = fields || {}\n token.type = type\n token.start = now()\n context.events.push(['enter', token, context])\n stack.push(token)\n return token\n }\n\n /** @type {Effects['exit']} */\n function exit(type) {\n const token = stack.pop()\n token.end = now()\n context.events.push(['exit', token, context])\n return token\n }\n\n /**\n * Use results.\n *\n * @type {ReturnHandle}\n */\n function onsuccessfulconstruct(construct, info) {\n addResult(construct, info.from)\n }\n\n /**\n * Discard results.\n *\n * @type {ReturnHandle}\n */\n function onsuccessfulcheck(_, info) {\n info.restore()\n }\n\n /**\n * Factory to attempt/check/interrupt.\n *\n * @param {ReturnHandle} onreturn\n * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n */\n function constructFactory(onreturn, fields) {\n return hook\n\n /**\n * Handle either an object mapping codes to constructs, a list of\n * constructs, or a single construct.\n *\n * @param {Array<Construct> | Construct | ConstructRecord} constructs\n * @param {State} returnState\n * @param {State | undefined} [bogusState]\n * @returns {State}\n */\n function hook(constructs, returnState, bogusState) {\n /** @type {Array<Construct>} */\n let listOfConstructs\n /** @type {number} */\n let constructIndex\n /** @type {Construct} */\n let currentConstruct\n /** @type {Info} */\n let info\n return Array.isArray(constructs) /* c8 ignore next 1 */\n ? handleListOfConstructs(constructs)\n : 'tokenize' in constructs\n ? // @ts-expect-error Looks like a construct.\n handleListOfConstructs([constructs])\n : handleMapOfConstructs(constructs)\n\n /**\n * Handle a list of construct.\n *\n * @param {ConstructRecord} map\n * @returns {State}\n */\n function handleMapOfConstructs(map) {\n return start\n\n /** @type {State} */\n function start(code) {\n const def = code !== null && map[code]\n const all = code !== null && map.null\n const list = [\n // To do: add more extension tests.\n /* c8 ignore next 2 */\n ...(Array.isArray(def) ? def : def ? [def] : []),\n ...(Array.isArray(all) ? all : all ? [all] : [])\n ]\n return handleListOfConstructs(list)(code)\n }\n }\n\n /**\n * Handle a list of construct.\n *\n * @param {Array<Construct>} list\n * @returns {State}\n */\n function handleListOfConstructs(list) {\n listOfConstructs = list\n constructIndex = 0\n if (list.length === 0) {\n return bogusState\n }\n return handleConstruct(list[constructIndex])\n }\n\n /**\n * Handle a single construct.\n *\n * @param {Construct} construct\n * @returns {State}\n */\n function handleConstruct(construct) {\n return start\n\n /** @type {State} */\n function start(code) {\n // To do: not needed to store if there is no bogus state, probably?\n // Currently doesn’t work because `inspect` in document does a check\n // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n // by not storing.\n info = store()\n currentConstruct = construct\n if (!construct.partial) {\n context.currentConstruct = construct\n }\n\n // Always populated by defaults.\n\n if (\n construct.name &&\n context.parser.constructs.disable.null.includes(construct.name)\n ) {\n return nok(code)\n }\n return construct.tokenize.call(\n // If we do have fields, create an object w/ `context` as its\n // prototype.\n // This allows a “live binding”, which is needed for `interrupt`.\n fields ? Object.assign(Object.create(context), fields) : context,\n effects,\n ok,\n nok\n )(code)\n }\n }\n\n /** @type {State} */\n function ok(code) {\n consumed = true\n onreturn(currentConstruct, info)\n return returnState\n }\n\n /** @type {State} */\n function nok(code) {\n consumed = true\n info.restore()\n if (++constructIndex < listOfConstructs.length) {\n return handleConstruct(listOfConstructs[constructIndex])\n }\n return bogusState\n }\n }\n }\n\n /**\n * @param {Construct} construct\n * @param {number} from\n * @returns {undefined}\n */\n function addResult(construct, from) {\n if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n resolveAllConstructs.push(construct)\n }\n if (construct.resolve) {\n splice(\n context.events,\n from,\n context.events.length - from,\n construct.resolve(context.events.slice(from), context)\n )\n }\n if (construct.resolveTo) {\n context.events = construct.resolveTo(context.events, context)\n }\n }\n\n /**\n * Store state.\n *\n * @returns {Info}\n */\n function store() {\n const startPoint = now()\n const startPrevious = context.previous\n const startCurrentConstruct = context.currentConstruct\n const startEventsIndex = context.events.length\n const startStack = Array.from(stack)\n return {\n restore,\n from: startEventsIndex\n }\n\n /**\n * Restore state.\n *\n * @returns {undefined}\n */\n function restore() {\n point = startPoint\n context.previous = startPrevious\n context.currentConstruct = startCurrentConstruct\n context.events.length = startEventsIndex\n stack = startStack\n accountForPotentialSkip()\n }\n }\n\n /**\n * Move the current point a bit forward in the line when it’s on a column\n * skip.\n *\n * @returns {undefined}\n */\n function accountForPotentialSkip() {\n if (point.line in columnStart && point.column < 2) {\n point.column = columnStart[point.line]\n point.offset += columnStart[point.line] - 1\n }\n }\n}\n\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {Array<Chunk>} chunks\n * @param {Pick<Token, 'end' | 'start'>} token\n * @returns {Array<Chunk>}\n */\nfunction sliceChunks(chunks, token) {\n const startIndex = token.start._index\n const startBufferIndex = token.start._bufferIndex\n const endIndex = token.end._index\n const endBufferIndex = token.end._bufferIndex\n /** @type {Array<Chunk>} */\n let view\n if (startIndex === endIndex) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)]\n } else {\n view = chunks.slice(startIndex, endIndex)\n if (startBufferIndex > -1) {\n const head = view[0]\n if (typeof head === 'string') {\n view[0] = head.slice(startBufferIndex)\n } else {\n view.shift()\n }\n }\n if (endBufferIndex > 0) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view.push(chunks[endIndex].slice(0, endBufferIndex))\n }\n }\n return view\n}\n\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {Array<Chunk>} chunks\n * @param {boolean | undefined} [expandTabs=false]\n * @returns {string}\n */\nfunction serializeChunks(chunks, expandTabs) {\n let index = -1\n /** @type {Array<string>} */\n const result = []\n /** @type {boolean | undefined} */\n let atTab\n while (++index < chunks.length) {\n const chunk = chunks[index]\n /** @type {string} */\n let value\n if (typeof chunk === 'string') {\n value = chunk\n } else\n switch (chunk) {\n case -5: {\n value = '\\r'\n break\n }\n case -4: {\n value = '\\n'\n break\n }\n case -3: {\n value = '\\r' + '\\n'\n break\n }\n case -2: {\n value = expandTabs ? ' ' : '\\t'\n break\n }\n case -1: {\n if (!expandTabs && atTab) continue\n value = ' '\n break\n }\n default: {\n // Currently only replacement character.\n value = String.fromCharCode(chunk)\n }\n }\n atTab = chunk === -2\n result.push(value)\n }\n return result.join('')\n}\n","/**\n * @typedef {import('micromark-util-types').Extension} Extension\n */\n\nimport {\n attention,\n autolink,\n blockQuote,\n characterEscape,\n characterReference,\n codeFenced,\n codeIndented,\n codeText,\n definition,\n hardBreakEscape,\n headingAtx,\n htmlFlow,\n htmlText,\n labelEnd,\n labelStartImage,\n labelStartLink,\n lineEnding,\n list,\n setextUnderline,\n thematicBreak\n} from 'micromark-core-commonmark'\nimport {resolver as resolveText} from './initialize/text.js'\n\n/** @satisfies {Extension['document']} */\nexport const document = {\n [42]: list,\n [43]: list,\n [45]: list,\n [48]: list,\n [49]: list,\n [50]: list,\n [51]: list,\n [52]: list,\n [53]: list,\n [54]: list,\n [55]: list,\n [56]: list,\n [57]: list,\n [62]: blockQuote\n}\n\n/** @satisfies {Extension['contentInitial']} */\nexport const contentInitial = {\n [91]: definition\n}\n\n/** @satisfies {Extension['flowInitial']} */\nexport const flowInitial = {\n [-2]: codeIndented,\n [-1]: codeIndented,\n [32]: codeIndented\n}\n\n/** @satisfies {Extension['flow']} */\nexport const flow = {\n [35]: headingAtx,\n [42]: thematicBreak,\n [45]: [setextUnderline, thematicBreak],\n [60]: htmlFlow,\n [61]: setextUnderline,\n [95]: thematicBreak,\n [96]: codeFenced,\n [126]: codeFenced\n}\n\n/** @satisfies {Extension['string']} */\nexport const string = {\n [38]: characterReference,\n [92]: characterEscape\n}\n\n/** @satisfies {Extension['text']} */\nexport const text = {\n [-5]: lineEnding,\n [-4]: lineEnding,\n [-3]: lineEnding,\n [33]: labelStartImage,\n [38]: characterReference,\n [42]: attention,\n [60]: [autolink, htmlText],\n [91]: labelStartLink,\n [92]: [hardBreakEscape, characterEscape],\n [93]: labelEnd,\n [95]: attention,\n [96]: codeText\n}\n\n/** @satisfies {Extension['insideSpan']} */\nexport const insideSpan = {\n null: [attention, resolveText]\n}\n\n/** @satisfies {Extension['attentionMarkers']} */\nexport const attentionMarkers = {\n null: [42, 95]\n}\n\n/** @satisfies {Extension['disable']} */\nexport const disable = {\n null: []\n}\n","/**\n * @typedef {import('micromark-util-types').Create} Create\n * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n */\n\nimport {combineExtensions} from 'micromark-util-combine-extensions'\nimport {content} from './initialize/content.js'\nimport {document} from './initialize/document.js'\nimport {flow} from './initialize/flow.js'\nimport {string, text} from './initialize/text.js'\nimport {createTokenizer} from './create-tokenizer.js'\nimport * as defaultConstructs from './constructs.js'\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n * @returns {ParseContext}\n */\nexport function parse(options) {\n const settings = options || {}\n const constructs =\n /** @type {FullNormalizedExtension} */\n combineExtensions([defaultConstructs, ...(settings.extensions || [])])\n\n /** @type {ParseContext} */\n const parser = {\n defined: [],\n lazy: {},\n constructs,\n content: create(content),\n document: create(document),\n flow: create(flow),\n string: create(string),\n text: create(text)\n }\n return parser\n\n /**\n * @param {InitialConstruct} initial\n */\n function create(initial) {\n return creator\n /** @type {Create} */\n function creator(from) {\n return createTokenizer(parser, initial, from)\n }\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n */\n\nimport {subtokenize} from 'micromark-util-subtokenize'\n\n/**\n * @param {Array<Event>} events\n * @returns {Array<Event>}\n */\nexport function postprocess(events) {\n while (!subtokenize(events)) {\n // Empty\n }\n return events\n}\n","/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Value} Value\n */\n\n/**\n * @callback Preprocessor\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {boolean | null | undefined} [end=false]\n * @returns {Array<Chunk>}\n */\n\nconst search = /[\\0\\t\\n\\r]/g\n\n/**\n * @returns {Preprocessor}\n */\nexport function preprocess() {\n let column = 1\n let buffer = ''\n /** @type {boolean | undefined} */\n let start = true\n /** @type {boolean | undefined} */\n let atCarriageReturn\n return preprocessor\n\n /** @type {Preprocessor} */\n // eslint-disable-next-line complexity\n function preprocessor(value, encoding, end) {\n /** @type {Array<Chunk>} */\n const chunks = []\n /** @type {RegExpMatchArray | null} */\n let match\n /** @type {number} */\n let next\n /** @type {number} */\n let startPosition\n /** @type {number} */\n let endPosition\n /** @type {Code} */\n let code\n value =\n buffer +\n (typeof value === 'string'\n ? value.toString()\n : new TextDecoder(encoding || undefined).decode(value))\n startPosition = 0\n buffer = ''\n if (start) {\n // To do: `markdown-rs` actually parses BOMs (byte order mark).\n if (value.charCodeAt(0) === 65279) {\n startPosition++\n }\n start = undefined\n }\n while (startPosition < value.length) {\n search.lastIndex = startPosition\n match = search.exec(value)\n endPosition =\n match && match.index !== undefined ? match.index : value.length\n code = value.charCodeAt(endPosition)\n if (!match) {\n buffer = value.slice(startPosition)\n break\n }\n if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n chunks.push(-3)\n atCarriageReturn = undefined\n } else {\n if (atCarriageReturn) {\n chunks.push(-5)\n atCarriageReturn = undefined\n }\n if (startPosition < endPosition) {\n chunks.push(value.slice(startPosition, endPosition))\n column += endPosition - startPosition\n }\n switch (code) {\n case 0: {\n chunks.push(65533)\n column++\n break\n }\n case 9: {\n next = Math.ceil(column / 4) * 4\n chunks.push(-2)\n while (column++ < next) chunks.push(-1)\n break\n }\n case 10: {\n chunks.push(-4)\n column = 1\n break\n }\n default: {\n atCarriageReturn = true\n column = 1\n }\n }\n }\n startPosition = endPosition + 1\n }\n if (end) {\n if (atCarriageReturn) chunks.push(-5)\n if (buffer) chunks.push(buffer)\n chunks.push(null)\n }\n return chunks\n }\n}\n","import {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nconst characterEscapeOrReference =\n /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n * Value to decode.\n * @returns {string}\n * Decoded value.\n */\nexport function decodeString(value) {\n return value.replace(characterEscapeOrReference, decode)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @param {string} $2\n * @returns {string}\n */\nfunction decode($0, $1, $2) {\n if ($1) {\n // Escape.\n return $1\n }\n\n // Reference.\n const head = $2.charCodeAt(0)\n if (head === 35) {\n const head = $2.charCodeAt(1)\n const hex = head === 120 || head === 88\n return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10)\n }\n return decodeNamedCharacterReference($2) || $0\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Point | PointLike | Position | PositionLike | null | undefined} [value]\n * Node, position, or point.\n * @returns {string}\n * Pretty printed positional info of a node (`string`).\n *\n * In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n * or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n * column, `s` for `start`, and `e` for end.\n * An empty string (`''`) is returned if the given value is neither `node`,\n * `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n // Nothing.\n if (!value || typeof value !== 'object') {\n return ''\n }\n\n // Node.\n if ('position' in value || 'type' in value) {\n return position(value.position)\n }\n\n // Position.\n if ('start' in value || 'end' in value) {\n return position(value)\n }\n\n // Point.\n if ('line' in value || 'column' in value) {\n return point(value)\n }\n\n // ?\n return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n return value && typeof value === 'number' ? value : 1\n}\n","/**\n * @typedef {import('mdast').Break} Break\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('mdast').Code} Code\n * @typedef {import('mdast').Definition} Definition\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('mdast').Html} Html\n * @typedef {import('mdast').Image} Image\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').List} List\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Nodes} Nodes\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast').Parent} Parent\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n * @typedef {import('mdast').ReferenceType} ReferenceType\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('mdast').Text} Text\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n *\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Value} Value\n *\n * @typedef {import('unist').Point} Point\n *\n * @typedef {import('../index.js').CompileData} CompileData\n */\n\n/**\n * @typedef {Omit<Parent, 'children' | 'type'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment\n */\n\n/**\n * @callback Transform\n * Extra transform, to change the AST afterwards.\n * @param {Root} tree\n * Tree to transform.\n * @returns {Root | null | undefined | void}\n * New tree or nothing (in which case the current tree is used).\n *\n * @callback Handle\n * Handle a token.\n * @param {CompileContext} this\n * Context.\n * @param {Token} token\n * Current token.\n * @returns {undefined | void}\n * Nothing.\n *\n * @typedef {Record<string, Handle>} Handles\n * Token types mapping to handles\n *\n * @callback OnEnterError\n * Handle the case where the `right` token is open, but it is closed (by the\n * `left` token) or because we reached the end of the document.\n * @param {Omit<CompileContext, 'sliceSerialize'>} this\n * Context.\n * @param {Token | undefined} left\n * Left token.\n * @param {Token} right\n * Right token.\n * @returns {undefined}\n * Nothing.\n *\n * @callback OnExitError\n * Handle the case where the `right` token is open but it is closed by\n * exiting the `left` token.\n * @param {Omit<CompileContext, 'sliceSerialize'>} this\n * Context.\n * @param {Token} left\n * Left token.\n * @param {Token} right\n * Right token.\n * @returns {undefined}\n * Nothing.\n *\n * @typedef {[Token, OnEnterError | undefined]} TokenTuple\n * Open token on the stack, with an optional error handler for when\n * that token isn’t closed properly.\n */\n\n/**\n * @typedef Config\n * Configuration.\n *\n * We have our defaults, but extensions will add more.\n * @property {Array<string>} canContainEols\n * Token types where line endings are used.\n * @property {Handles} enter\n * Opening handles.\n * @property {Handles} exit\n * Closing handles.\n * @property {Array<Transform>} transforms\n * Tree transforms.\n *\n * @typedef {Partial<Config>} Extension\n * Change how markdown tokens from micromark are turned into mdast.\n *\n * @typedef CompileContext\n * mdast compiler context.\n * @property {Array<Fragment | Nodes>} stack\n * Stack of nodes.\n * @property {Array<TokenTuple>} tokenStack\n * Stack of tokens.\n * @property {(this: CompileContext) => undefined} buffer\n * Capture some of the output data.\n * @property {(this: CompileContext) => string} resume\n * Stop capturing and access the output data.\n * @property {(this: CompileContext, node: Nodes, token: Token, onError?: OnEnterError) => undefined} enter\n * Enter a node.\n * @property {(this: CompileContext, token: Token, onError?: OnExitError) => undefined} exit\n * Exit a node.\n * @property {TokenizeContext['sliceSerialize']} sliceSerialize\n * Get the string value of a token.\n * @property {Config} config\n * Configuration.\n * @property {CompileData} data\n * Info passed around; key/value store.\n *\n * @typedef FromMarkdownOptions\n * Configuration for how to build mdast.\n * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions]\n * Extensions for this utility to change how tokens are turned into a tree.\n *\n * @typedef {ParseOptions & FromMarkdownOptions} Options\n * Configuration.\n */\n\nimport {toString} from 'mdast-util-to-string'\nimport {parse, postprocess, preprocess} from 'micromark'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nimport {decodeString} from 'micromark-util-decode-string'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {stringifyPosition} from 'unist-util-stringify-position'\nconst own = {}.hasOwnProperty\n\n/**\n * Turn markdown into a syntax tree.\n *\n * @overload\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @overload\n * @param {Value} value\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @param {Value} value\n * Markdown to parse.\n * @param {Encoding | Options | null | undefined} [encoding]\n * Character encoding for when `value` is `Buffer`.\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {Root}\n * mdast tree.\n */\nexport function fromMarkdown(value, encoding, options) {\n if (typeof encoding !== 'string') {\n options = encoding\n encoding = undefined\n }\n return compiler(options)(\n postprocess(\n parse(options).document().write(preprocess()(value, encoding, true))\n )\n )\n}\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n /** @type {Config} */\n const config = {\n transforms: [],\n canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n enter: {\n autolink: opener(link),\n autolinkProtocol: onenterdata,\n autolinkEmail: onenterdata,\n atxHeading: opener(heading),\n blockQuote: opener(blockQuote),\n characterEscape: onenterdata,\n characterReference: onenterdata,\n codeFenced: opener(codeFlow),\n codeFencedFenceInfo: buffer,\n codeFencedFenceMeta: buffer,\n codeIndented: opener(codeFlow, buffer),\n codeText: opener(codeText, buffer),\n codeTextData: onenterdata,\n data: onenterdata,\n codeFlowValue: onenterdata,\n definition: opener(definition),\n definitionDestinationString: buffer,\n definitionLabelString: buffer,\n definitionTitleString: buffer,\n emphasis: opener(emphasis),\n hardBreakEscape: opener(hardBreak),\n hardBreakTrailing: opener(hardBreak),\n htmlFlow: opener(html, buffer),\n htmlFlowData: onenterdata,\n htmlText: opener(html, buffer),\n htmlTextData: onenterdata,\n image: opener(image),\n label: buffer,\n link: opener(link),\n listItem: opener(listItem),\n listItemValue: onenterlistitemvalue,\n listOrdered: opener(list, onenterlistordered),\n listUnordered: opener(list),\n paragraph: opener(paragraph),\n reference: onenterreference,\n referenceString: buffer,\n resourceDestinationString: buffer,\n resourceTitleString: buffer,\n setextHeading: opener(heading),\n strong: opener(strong),\n thematicBreak: opener(thematicBreak)\n },\n exit: {\n atxHeading: closer(),\n atxHeadingSequence: onexitatxheadingsequence,\n autolink: closer(),\n autolinkEmail: onexitautolinkemail,\n autolinkProtocol: onexitautolinkprotocol,\n blockQuote: closer(),\n characterEscapeValue: onexitdata,\n characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n characterReferenceValue: onexitcharacterreferencevalue,\n codeFenced: closer(onexitcodefenced),\n codeFencedFence: onexitcodefencedfence,\n codeFencedFenceInfo: onexitcodefencedfenceinfo,\n codeFencedFenceMeta: onexitcodefencedfencemeta,\n codeFlowValue: onexitdata,\n codeIndented: closer(onexitcodeindented),\n codeText: closer(onexitcodetext),\n codeTextData: onexitdata,\n data: onexitdata,\n definition: closer(),\n definitionDestinationString: onexitdefinitiondestinationstring,\n definitionLabelString: onexitdefinitionlabelstring,\n definitionTitleString: onexitdefinitiontitlestring,\n emphasis: closer(),\n hardBreakEscape: closer(onexithardbreak),\n hardBreakTrailing: closer(onexithardbreak),\n htmlFlow: closer(onexithtmlflow),\n htmlFlowData: onexitdata,\n htmlText: closer(onexithtmltext),\n htmlTextData: onexitdata,\n image: closer(onexitimage),\n label: onexitlabel,\n labelText: onexitlabeltext,\n lineEnding: onexitlineending,\n link: closer(onexitlink),\n listItem: closer(),\n listOrdered: closer(),\n listUnordered: closer(),\n paragraph: closer(),\n referenceString: onexitreferencestring,\n resourceDestinationString: onexitresourcedestinationstring,\n resourceTitleString: onexitresourcetitlestring,\n resource: onexitresource,\n setextHeading: closer(onexitsetextheading),\n setextHeadingLineSequence: onexitsetextheadinglinesequence,\n setextHeadingText: onexitsetextheadingtext,\n strong: closer(),\n thematicBreak: closer()\n }\n }\n configure(config, (options || {}).mdastExtensions || [])\n\n /** @type {CompileData} */\n const data = {}\n return compile\n\n /**\n * Turn micromark events into an mdast tree.\n *\n * @param {Array<Event>} events\n * Events.\n * @returns {Root}\n * mdast tree.\n */\n function compile(events) {\n /** @type {Root} */\n let tree = {\n type: 'root',\n children: []\n }\n /** @type {Omit<CompileContext, 'sliceSerialize'>} */\n const context = {\n stack: [tree],\n tokenStack: [],\n config,\n enter,\n exit,\n buffer,\n resume,\n data\n }\n /** @type {Array<number>} */\n const listStack = []\n let index = -1\n while (++index < events.length) {\n // We preprocess lists to add `listItem` tokens, and to infer whether\n // items the list itself are spread out.\n if (\n events[index][1].type === 'listOrdered' ||\n events[index][1].type === 'listUnordered'\n ) {\n if (events[index][0] === 'enter') {\n listStack.push(index)\n } else {\n const tail = listStack.pop()\n index = prepareList(events, tail, index)\n }\n }\n }\n index = -1\n while (++index < events.length) {\n const handler = config[events[index][0]]\n if (own.call(handler, events[index][1].type)) {\n handler[events[index][1].type].call(\n Object.assign(\n {\n sliceSerialize: events[index][2].sliceSerialize\n },\n context\n ),\n events[index][1]\n )\n }\n }\n\n // Handle tokens still being open.\n if (context.tokenStack.length > 0) {\n const tail = context.tokenStack[context.tokenStack.length - 1]\n const handler = tail[1] || defaultOnError\n handler.call(context, undefined, tail[0])\n }\n\n // Figure out `root` position.\n tree.position = {\n start: point(\n events.length > 0\n ? events[0][1].start\n : {\n line: 1,\n column: 1,\n offset: 0\n }\n ),\n end: point(\n events.length > 0\n ? events[events.length - 2][1].end\n : {\n line: 1,\n column: 1,\n offset: 0\n }\n )\n }\n\n // Call transforms.\n index = -1\n while (++index < config.transforms.length) {\n tree = config.transforms[index](tree) || tree\n }\n return tree\n }\n\n /**\n * @param {Array<Event>} events\n * @param {number} start\n * @param {number} length\n * @returns {number}\n */\n function prepareList(events, start, length) {\n let index = start - 1\n let containerBalance = -1\n let listSpread = false\n /** @type {Token | undefined} */\n let listItem\n /** @type {number | undefined} */\n let lineIndex\n /** @type {number | undefined} */\n let firstBlankLineIndex\n /** @type {boolean | undefined} */\n let atMarker\n while (++index <= length) {\n const event = events[index]\n switch (event[1].type) {\n case 'listUnordered':\n case 'listOrdered':\n case 'blockQuote': {\n if (event[0] === 'enter') {\n containerBalance++\n } else {\n containerBalance--\n }\n atMarker = undefined\n break\n }\n case 'lineEndingBlank': {\n if (event[0] === 'enter') {\n if (\n listItem &&\n !atMarker &&\n !containerBalance &&\n !firstBlankLineIndex\n ) {\n firstBlankLineIndex = index\n }\n atMarker = undefined\n }\n break\n }\n case 'linePrefix':\n case 'listItemValue':\n case 'listItemMarker':\n case 'listItemPrefix':\n case 'listItemPrefixWhitespace': {\n // Empty.\n\n break\n }\n default: {\n atMarker = undefined\n }\n }\n if (\n (!containerBalance &&\n event[0] === 'enter' &&\n event[1].type === 'listItemPrefix') ||\n (containerBalance === -1 &&\n event[0] === 'exit' &&\n (event[1].type === 'listUnordered' ||\n event[1].type === 'listOrdered'))\n ) {\n if (listItem) {\n let tailIndex = index\n lineIndex = undefined\n while (tailIndex--) {\n const tailEvent = events[tailIndex]\n if (\n tailEvent[1].type === 'lineEnding' ||\n tailEvent[1].type === 'lineEndingBlank'\n ) {\n if (tailEvent[0] === 'exit') continue\n if (lineIndex) {\n events[lineIndex][1].type = 'lineEndingBlank'\n listSpread = true\n }\n tailEvent[1].type = 'lineEnding'\n lineIndex = tailIndex\n } else if (\n tailEvent[1].type === 'linePrefix' ||\n tailEvent[1].type === 'blockQuotePrefix' ||\n tailEvent[1].type === 'blockQuotePrefixWhitespace' ||\n tailEvent[1].type === 'blockQuoteMarker' ||\n tailEvent[1].type === 'listItemIndent'\n ) {\n // Empty\n } else {\n break\n }\n }\n if (\n firstBlankLineIndex &&\n (!lineIndex || firstBlankLineIndex < lineIndex)\n ) {\n listItem._spread = true\n }\n\n // Fix position.\n listItem.end = Object.assign(\n {},\n lineIndex ? events[lineIndex][1].start : event[1].end\n )\n events.splice(lineIndex || index, 0, ['exit', listItem, event[2]])\n index++\n length++\n }\n\n // Create a new list item.\n if (event[1].type === 'listItemPrefix') {\n /** @type {Token} */\n const item = {\n type: 'listItem',\n _spread: false,\n start: Object.assign({}, event[1].start),\n // @ts-expect-error: we’ll add `end` in a second.\n end: undefined\n }\n listItem = item\n events.splice(index, 0, ['enter', item, event[2]])\n index++\n length++\n firstBlankLineIndex = undefined\n atMarker = true\n }\n }\n }\n events[start][1]._spread = listSpread\n return length\n }\n\n /**\n * Create an opener handle.\n *\n * @param {(token: Token) => Nodes} create\n * Create a node.\n * @param {Handle | undefined} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function opener(create, and) {\n return open\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {undefined}\n */\n function open(token) {\n enter.call(this, create(token), token)\n if (and) and.call(this, token)\n }\n }\n\n /**\n * @this {CompileContext}\n * @returns {undefined}\n */\n function buffer() {\n this.stack.push({\n type: 'fragment',\n children: []\n })\n }\n\n /**\n * @this {CompileContext}\n * Context.\n * @param {Nodes} node\n * Node to enter.\n * @param {Token} token\n * Corresponding token.\n * @param {OnEnterError | undefined} [errorHandler]\n * Handle the case where this token is open, but it is closed by something else.\n * @returns {undefined}\n * Nothing.\n */\n function enter(node, token, errorHandler) {\n const parent = this.stack[this.stack.length - 1]\n /** @type {Array<Nodes>} */\n const siblings = parent.children\n siblings.push(node)\n this.stack.push(node)\n this.tokenStack.push([token, errorHandler])\n node.position = {\n start: point(token.start),\n // @ts-expect-error: `end` will be patched later.\n end: undefined\n }\n }\n\n /**\n * Create a closer handle.\n *\n * @param {Handle | undefined} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function closer(and) {\n return close\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {undefined}\n */\n function close(token) {\n if (and) and.call(this, token)\n exit.call(this, token)\n }\n }\n\n /**\n * @this {CompileContext}\n * Context.\n * @param {Token} token\n * Corresponding token.\n * @param {OnExitError | undefined} [onExitError]\n * Handle the case where another token is open.\n * @returns {undefined}\n * Nothing.\n */\n function exit(token, onExitError) {\n const node = this.stack.pop()\n const open = this.tokenStack.pop()\n if (!open) {\n throw new Error(\n 'Cannot close `' +\n token.type +\n '` (' +\n stringifyPosition({\n start: token.start,\n end: token.end\n }) +\n '): it’s not open'\n )\n } else if (open[0].type !== token.type) {\n if (onExitError) {\n onExitError.call(this, token, open[0])\n } else {\n const handler = open[1] || defaultOnError\n handler.call(this, token, open[0])\n }\n }\n node.position.end = point(token.end)\n }\n\n /**\n * @this {CompileContext}\n * @returns {string}\n */\n function resume() {\n return toString(this.stack.pop())\n }\n\n //\n // Handlers.\n //\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistordered() {\n this.data.expectingFirstListItemValue = true\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistitemvalue(token) {\n if (this.data.expectingFirstListItemValue) {\n const ancestor = this.stack[this.stack.length - 2]\n ancestor.start = Number.parseInt(this.sliceSerialize(token), 10)\n this.data.expectingFirstListItemValue = undefined\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfenceinfo() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.lang = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfencemeta() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.meta = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfence() {\n // Exit if this is the closing fence.\n if (this.data.flowCodeInside) return\n this.buffer()\n this.data.flowCodeInside = true\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefenced() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '')\n this.data.flowCodeInside = undefined\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodeindented() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data.replace(/(\\r?\\n|\\r)$/g, '')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitionlabelstring(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.label = label\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiontitlestring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.title = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiondestinationstring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.url = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitatxheadingsequence(token) {\n const node = this.stack[this.stack.length - 1]\n if (!node.depth) {\n const depth = this.sliceSerialize(token).length\n node.depth = depth\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadingtext() {\n this.data.setextHeadingSlurpLineEnding = true\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadinglinesequence(token) {\n const node = this.stack[this.stack.length - 1]\n node.depth = this.sliceSerialize(token).codePointAt(0) === 61 ? 1 : 2\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheading() {\n this.data.setextHeadingSlurpLineEnding = undefined\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterdata(token) {\n const node = this.stack[this.stack.length - 1]\n /** @type {Array<Nodes>} */\n const siblings = node.children\n let tail = siblings[siblings.length - 1]\n if (!tail || tail.type !== 'text') {\n // Add a new text node.\n tail = text()\n tail.position = {\n start: point(token.start),\n // @ts-expect-error: we’ll add `end` later.\n end: undefined\n }\n siblings.push(tail)\n }\n this.stack.push(tail)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitdata(token) {\n const tail = this.stack.pop()\n tail.value += this.sliceSerialize(token)\n tail.position.end = point(token.end)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlineending(token) {\n const context = this.stack[this.stack.length - 1]\n // If we’re at a hard break, include the line ending in there.\n if (this.data.atHardBreak) {\n const tail = context.children[context.children.length - 1]\n tail.position.end = point(token.end)\n this.data.atHardBreak = undefined\n return\n }\n if (\n !this.data.setextHeadingSlurpLineEnding &&\n config.canContainEols.includes(context.type)\n ) {\n onenterdata.call(this, token)\n onexitdata.call(this, token)\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithardbreak() {\n this.data.atHardBreak = true\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmlflow() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmltext() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcodetext() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlink() {\n const node = this.stack[this.stack.length - 1]\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n // To do: clean.\n if (this.data.inReference) {\n /** @type {ReferenceType} */\n const referenceType = this.data.referenceType || 'shortcut'\n node.type += 'Reference'\n // @ts-expect-error: mutate.\n node.referenceType = referenceType\n // @ts-expect-error: mutate.\n delete node.url\n delete node.title\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier\n // @ts-expect-error: mutate.\n delete node.label\n }\n this.data.referenceType = undefined\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitimage() {\n const node = this.stack[this.stack.length - 1]\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n // To do: clean.\n if (this.data.inReference) {\n /** @type {ReferenceType} */\n const referenceType = this.data.referenceType || 'shortcut'\n node.type += 'Reference'\n // @ts-expect-error: mutate.\n node.referenceType = referenceType\n // @ts-expect-error: mutate.\n delete node.url\n delete node.title\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier\n // @ts-expect-error: mutate.\n delete node.label\n }\n this.data.referenceType = undefined\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabeltext(token) {\n const string = this.sliceSerialize(token)\n const ancestor = this.stack[this.stack.length - 2]\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n ancestor.label = decodeString(string)\n // @ts-expect-error: same as above.\n ancestor.identifier = normalizeIdentifier(string).toLowerCase()\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabel() {\n const fragment = this.stack[this.stack.length - 1]\n const value = this.resume()\n const node = this.stack[this.stack.length - 1]\n // Assume a reference.\n this.data.inReference = true\n if (node.type === 'link') {\n /** @type {Array<PhrasingContent>} */\n const children = fragment.children\n node.children = children\n } else {\n node.alt = value\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcedestinationstring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.url = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcetitlestring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.title = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresource() {\n this.data.inReference = undefined\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterreference() {\n this.data.referenceType = 'collapsed'\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitreferencestring(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n node.label = label\n // @ts-expect-error: same as above.\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n this.data.referenceType = 'full'\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcharacterreferencemarker(token) {\n this.data.characterReferenceType = token.type\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcharacterreferencevalue(token) {\n const data = this.sliceSerialize(token)\n const type = this.data.characterReferenceType\n /** @type {string} */\n let value\n if (type) {\n value = decodeNumericCharacterReference(\n data,\n type === 'characterReferenceMarkerNumeric' ? 10 : 16\n )\n this.data.characterReferenceType = undefined\n } else {\n const result = decodeNamedCharacterReference(data)\n value = result\n }\n const tail = this.stack.pop()\n tail.value += value\n tail.position.end = point(token.end)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkprotocol(token) {\n onexitdata.call(this, token)\n const node = this.stack[this.stack.length - 1]\n node.url = this.sliceSerialize(token)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkemail(token) {\n onexitdata.call(this, token)\n const node = this.stack[this.stack.length - 1]\n node.url = 'mailto:' + this.sliceSerialize(token)\n }\n\n //\n // Creaters.\n //\n\n /** @returns {Blockquote} */\n function blockQuote() {\n return {\n type: 'blockquote',\n children: []\n }\n }\n\n /** @returns {Code} */\n function codeFlow() {\n return {\n type: 'code',\n lang: null,\n meta: null,\n value: ''\n }\n }\n\n /** @returns {InlineCode} */\n function codeText() {\n return {\n type: 'inlineCode',\n value: ''\n }\n }\n\n /** @returns {Definition} */\n function definition() {\n return {\n type: 'definition',\n identifier: '',\n label: null,\n title: null,\n url: ''\n }\n }\n\n /** @returns {Emphasis} */\n function emphasis() {\n return {\n type: 'emphasis',\n children: []\n }\n }\n\n /** @returns {Heading} */\n function heading() {\n return {\n type: 'heading',\n // @ts-expect-error `depth` will be set later.\n depth: 0,\n children: []\n }\n }\n\n /** @returns {Break} */\n function hardBreak() {\n return {\n type: 'break'\n }\n }\n\n /** @returns {Html} */\n function html() {\n return {\n type: 'html',\n value: ''\n }\n }\n\n /** @returns {Image} */\n function image() {\n return {\n type: 'image',\n title: null,\n url: '',\n alt: null\n }\n }\n\n /** @returns {Link} */\n function link() {\n return {\n type: 'link',\n title: null,\n url: '',\n children: []\n }\n }\n\n /**\n * @param {Token} token\n * @returns {List}\n */\n function list(token) {\n return {\n type: 'list',\n ordered: token.type === 'listOrdered',\n start: null,\n spread: token._spread,\n children: []\n }\n }\n\n /**\n * @param {Token} token\n * @returns {ListItem}\n */\n function listItem(token) {\n return {\n type: 'listItem',\n spread: token._spread,\n checked: null,\n children: []\n }\n }\n\n /** @returns {Paragraph} */\n function paragraph() {\n return {\n type: 'paragraph',\n children: []\n }\n }\n\n /** @returns {Strong} */\n function strong() {\n return {\n type: 'strong',\n children: []\n }\n }\n\n /** @returns {Text} */\n function text() {\n return {\n type: 'text',\n value: ''\n }\n }\n\n /** @returns {ThematicBreak} */\n function thematicBreak() {\n return {\n type: 'thematicBreak'\n }\n }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n * Point-like value.\n * @returns {Point}\n * unist point.\n */\nfunction point(d) {\n return {\n line: d.line,\n column: d.column,\n offset: d.offset\n }\n}\n\n/**\n * @param {Config} combined\n * @param {Array<Array<Extension> | Extension>} extensions\n * @returns {undefined}\n */\nfunction configure(combined, extensions) {\n let index = -1\n while (++index < extensions.length) {\n const value = extensions[index]\n if (Array.isArray(value)) {\n configure(combined, value)\n } else {\n extension(combined, value)\n }\n }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {undefined}\n */\nfunction extension(combined, extension) {\n /** @type {keyof Extension} */\n let key\n for (key in extension) {\n if (own.call(extension, key)) {\n switch (key) {\n case 'canContainEols': {\n const right = extension[key]\n if (right) {\n combined[key].push(...right)\n }\n break\n }\n case 'transforms': {\n const right = extension[key]\n if (right) {\n combined[key].push(...right)\n }\n break\n }\n case 'enter':\n case 'exit': {\n const right = extension[key]\n if (right) {\n Object.assign(combined[key], right)\n }\n break\n }\n // No default\n }\n }\n }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n if (left) {\n throw new Error(\n 'Cannot close `' +\n left.type +\n '` (' +\n stringifyPosition({\n start: left.start,\n end: left.end\n }) +\n '): a different token (`' +\n right.type +\n '`, ' +\n stringifyPosition({\n start: right.start,\n end: right.end\n }) +\n ') is open'\n )\n } else {\n throw new Error(\n 'Cannot close document, a token (`' +\n right.type +\n '`, ' +\n stringifyPosition({\n start: right.start,\n end: right.end\n }) +\n ') is still open'\n )\n }\n}\n","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').Options} FromMarkdownOptions\n * @typedef {import('unified').Parser<Root>} Parser\n * @typedef {import('unified').Processor<Root>} Processor\n */\n\n/**\n * @typedef {Omit<FromMarkdownOptions, 'extensions' | 'mdastExtensions'>} Options\n */\n\nimport {fromMarkdown} from 'mdast-util-from-markdown'\n\n/**\n * Aadd support for parsing from markdown.\n *\n * @param {Readonly<Options> | null | undefined} [options]\n * Configuration (optional).\n * @returns {undefined}\n * Nothing.\n */\nexport default function remarkParse(options) {\n /** @type {Processor} */\n // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n const self = this\n\n self.parser = parser\n\n /**\n * @type {Parser}\n */\n function parser(doc) {\n return fromMarkdown(doc, {\n ...self.data('settings'),\n ...options,\n // Note: these options are not in the readme.\n // The goal is for them to be set by plugins on `data` instead of being\n // passed by users.\n extensions: self.data('micromarkExtensions') || [],\n mdastExtensions: self.data('fromMarkdownExtensions') || []\n })\n }\n}\n","'use strict'\n\nmodule.exports = u\n\nfunction u(type, props, value) {\n var node\n\n if (\n (value === null || value === undefined) &&\n (typeof props !== 'object' || Array.isArray(props))\n ) {\n value = props\n props = {}\n }\n\n node = Object.assign({type: String(type)}, props)\n\n if (Array.isArray(value)) {\n node.children = value\n } else if (value !== null && value !== undefined) {\n node.value = String(value)\n }\n\n return node\n}\n","'use strict'\n\nmodule.exports = convert\n\nfunction convert(test) {\n if (test == null) {\n return ok\n }\n\n if (typeof test === 'string') {\n return typeFactory(test)\n }\n\n if (typeof test === 'object') {\n return 'length' in test ? anyFactory(test) : allFactory(test)\n }\n\n if (typeof test === 'function') {\n return test\n }\n\n throw new Error('Expected function, string, or object as test')\n}\n\n// Utility assert each property in `test` is represented in `node`, and each\n// values are strictly equal.\nfunction allFactory(test) {\n return all\n\n function all(node) {\n var key\n\n for (key in test) {\n if (node[key] !== test[key]) return false\n }\n\n return true\n }\n}\n\nfunction anyFactory(tests) {\n var checks = []\n var index = -1\n\n while (++index < tests.length) {\n checks[index] = convert(tests[index])\n }\n\n return any\n\n function any() {\n var index = -1\n\n while (++index < checks.length) {\n if (checks[index].apply(this, arguments)) {\n return true\n }\n }\n\n return false\n }\n}\n\n// Utility to convert a string into a function which checks a given node’s type\n// for said string.\nfunction typeFactory(test) {\n return type\n\n function type(node) {\n return Boolean(node && node.type === test)\n }\n}\n\n// Utility to return true.\nfunction ok() {\n return true\n}\n","module.exports = identity\nfunction identity(d) {\n return d\n}\n","'use strict'\n\nmodule.exports = visitParents\n\nvar convert = require('unist-util-is/convert')\nvar color = require('./color')\n\nvar CONTINUE = true\nvar SKIP = 'skip'\nvar EXIT = false\n\nvisitParents.CONTINUE = CONTINUE\nvisitParents.SKIP = SKIP\nvisitParents.EXIT = EXIT\n\nfunction visitParents(tree, test, visitor, reverse) {\n var step\n var is\n\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor\n visitor = test\n test = null\n }\n\n is = convert(test)\n step = reverse ? -1 : 1\n\n factory(tree, null, [])()\n\n function factory(node, index, parents) {\n var value = typeof node === 'object' && node !== null ? node : {}\n var name\n\n if (typeof value.type === 'string') {\n name =\n typeof value.tagName === 'string'\n ? value.tagName\n : typeof value.name === 'string'\n ? value.name\n : undefined\n\n visit.displayName =\n 'node (' + color(value.type + (name ? '<' + name + '>' : '')) + ')'\n }\n\n return visit\n\n function visit() {\n var grandparents = parents.concat(node)\n var result = []\n var subresult\n var offset\n\n if (!test || is(node, index, parents[parents.length - 1] || null)) {\n result = toResult(visitor(node, parents))\n\n if (result[0] === EXIT) {\n return result\n }\n }\n\n if (node.children && result[0] !== SKIP) {\n offset = (reverse ? node.children.length : -1) + step\n\n while (offset > -1 && offset < node.children.length) {\n subresult = factory(node.children[offset], offset, grandparents)()\n\n if (subresult[0] === EXIT) {\n return subresult\n }\n\n offset =\n typeof subresult[1] === 'number' ? subresult[1] : offset + step\n }\n }\n\n return result\n }\n }\n}\n\nfunction toResult(value) {\n if (value !== null && typeof value === 'object' && 'length' in value) {\n return value\n }\n\n if (typeof value === 'number') {\n return [CONTINUE, value]\n }\n\n return [value]\n}\n","'use strict'\n\nmodule.exports = visit\n\nvar visitParents = require('unist-util-visit-parents')\n\nvar CONTINUE = visitParents.CONTINUE\nvar SKIP = visitParents.SKIP\nvar EXIT = visitParents.EXIT\n\nvisit.CONTINUE = CONTINUE\nvisit.SKIP = SKIP\nvisit.EXIT = EXIT\n\nfunction visit(tree, test, visitor, reverse) {\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor\n visitor = test\n test = null\n }\n\n visitParents(tree, test, overload, reverse)\n\n function overload(node, parents) {\n var parent = parents[parents.length - 1]\n var index = parent ? parent.children.indexOf(node) : null\n return visitor(node, index, parent)\n }\n}\n","'use strict'\n\nvar start = factory('start')\nvar end = factory('end')\n\nmodule.exports = position\n\nposition.start = start\nposition.end = end\n\nfunction position(node) {\n return {start: start(node), end: end(node)}\n}\n\nfunction factory(type) {\n point.displayName = type\n\n return point\n\n function point(node) {\n var point = (node && node.position && node.position[type]) || {}\n\n return {\n line: point.line || null,\n column: point.column || null,\n offset: isNaN(point.offset) ? null : point.offset\n }\n }\n}\n","'use strict'\n\nmodule.exports = generated\n\nfunction generated(node) {\n return (\n !node ||\n !node.position ||\n !node.position.start ||\n !node.position.start.line ||\n !node.position.start.column ||\n !node.position.end ||\n !node.position.end.line ||\n !node.position.end.column\n )\n}\n","'use strict'\n\nvar visit = require('unist-util-visit')\n\nmodule.exports = getDefinitionFactory\n\nvar own = {}.hasOwnProperty\n\n// Get a definition in `node` by `identifier`.\nfunction getDefinitionFactory(node, options) {\n return getterFactory(gather(node, options))\n}\n\n// Gather all definitions in `node`\nfunction gather(node) {\n var cache = {}\n\n if (!node || !node.type) {\n throw new Error('mdast-util-definitions expected node')\n }\n\n visit(node, 'definition', ondefinition)\n\n return cache\n\n function ondefinition(definition) {\n var id = normalise(definition.identifier)\n if (!own.call(cache, id)) {\n cache[id] = definition\n }\n }\n}\n\n// Factory to get a node from the given definition-cache.\nfunction getterFactory(cache) {\n return getter\n\n // Get a node from the bound definition-cache.\n function getter(identifier) {\n var id = identifier && normalise(identifier)\n return id && own.call(cache, id) ? cache[id] : null\n }\n}\n\nfunction normalise(identifier) {\n return identifier.toUpperCase()\n}\n","'use strict'\n\nmodule.exports = all\n\nvar one = require('./one')\n\nfunction all(h, parent) {\n var nodes = parent.children || []\n var length = nodes.length\n var values = []\n var index = -1\n var result\n var head\n\n while (++index < length) {\n result = one(h, nodes[index], parent)\n\n if (result) {\n if (index && nodes[index - 1].type === 'break') {\n if (result.value) {\n result.value = result.value.replace(/^\\s+/, '')\n }\n\n head = result.children && result.children[0]\n\n if (head && head.value) {\n head.value = head.value.replace(/^\\s+/, '')\n }\n }\n\n values = values.concat(result)\n }\n }\n\n return values\n}\n","'use strict'\n\nmodule.exports = one\n\nvar u = require('unist-builder')\nvar all = require('./all')\n\nvar own = {}.hasOwnProperty\n\n// Transform an unknown node.\nfunction unknown(h, node) {\n if (text(node)) {\n return h.augment(node, u('text', node.value))\n }\n\n return h(node, 'div', all(h, node))\n}\n\n// Visit a node.\nfunction one(h, node, parent) {\n var type = node && node.type\n var fn\n\n // Fail on non-nodes.\n if (!type) {\n throw new Error('Expected node, got `' + node + '`')\n }\n\n if (own.call(h.handlers, type)) {\n fn = h.handlers[type]\n } else if (h.passThrough && h.passThrough.indexOf(type) > -1) {\n fn = returnNode\n } else {\n fn = h.unknownHandler\n }\n\n return (typeof fn === 'function' ? fn : unknown)(h, node, parent)\n}\n\n// Check if the node should be renderered as a text node.\nfunction text(node) {\n var data = node.data || {}\n\n if (\n own.call(data, 'hName') ||\n own.call(data, 'hProperties') ||\n own.call(data, 'hChildren')\n ) {\n return false\n }\n\n return 'value' in node\n}\n\nfunction returnNode(h, node) {\n var clone\n\n if (node.children) {\n clone = Object.assign({}, node)\n clone.children = all(h, node)\n return clone\n }\n\n return node\n}\n","'use strict'\n\nmodule.exports = thematicBreak\n\nfunction thematicBreak(h, node) {\n return h(node, 'hr')\n}\n","'use strict'\n\nmodule.exports = wrap\n\nvar u = require('unist-builder')\n\n// Wrap `nodes` with line feeds between each entry.\n// Optionally adds line feeds at the start and end.\nfunction wrap(nodes, loose) {\n var result = []\n var index = -1\n var length = nodes.length\n\n if (loose) {\n result.push(u('text', '\\n'))\n }\n\n while (++index < length) {\n if (index) {\n result.push(u('text', '\\n'))\n }\n\n result.push(nodes[index])\n }\n\n if (loose && nodes.length > 0) {\n result.push(u('text', '\\n'))\n }\n\n return result\n}\n","'use strict'\n\nmodule.exports = list\n\nvar wrap = require('../wrap')\nvar all = require('../all')\n\nfunction list(h, node) {\n var props = {}\n var name = node.ordered ? 'ol' : 'ul'\n var items\n var index = -1\n var length\n\n if (typeof node.start === 'number' && node.start !== 1) {\n props.start = node.start\n }\n\n items = all(h, node)\n length = items.length\n\n // Like GitHub, add a class for custom styling.\n while (++index < length) {\n if (\n items[index].properties.className &&\n items[index].properties.className.indexOf('task-list-item') !== -1\n ) {\n props.className = ['contains-task-list']\n break\n }\n }\n\n return h(node, name, props, wrap(items, true))\n}\n","'use strict'\n\nmodule.exports = generateFootnotes\n\nvar thematicBreak = require('./handlers/thematic-break')\nvar list = require('./handlers/list')\nvar wrap = require('./wrap')\n\nfunction generateFootnotes(h) {\n var footnoteById = h.footnoteById\n var footnoteOrder = h.footnoteOrder\n var length = footnoteOrder.length\n var index = -1\n var listItems = []\n var def\n var backReference\n var content\n var tail\n\n while (++index < length) {\n def = footnoteById[footnoteOrder[index].toUpperCase()]\n\n if (!def) {\n continue\n }\n\n content = def.children.concat()\n tail = content[content.length - 1]\n backReference = {\n type: 'link',\n url: '#fnref-' + def.identifier,\n data: {hProperties: {className: ['footnote-backref']}},\n children: [{type: 'text', value: '↩'}]\n }\n\n if (!tail || tail.type !== 'paragraph') {\n tail = {type: 'paragraph', children: []}\n content.push(tail)\n }\n\n tail.children.push(backReference)\n\n listItems.push({\n type: 'listItem',\n data: {hProperties: {id: 'fn-' + def.identifier}},\n children: content,\n position: def.position\n })\n }\n\n if (listItems.length === 0) {\n return null\n }\n\n return h(\n null,\n 'div',\n {className: ['footnotes']},\n wrap(\n [\n thematicBreak(h),\n list(h, {type: 'list', ordered: true, children: listItems})\n ],\n true\n )\n )\n}\n","'use strict'\n\nmodule.exports = blockquote\n\nvar wrap = require('../wrap')\nvar all = require('../all')\n\nfunction blockquote(h, node) {\n return h(node, 'blockquote', wrap(all(h, node), true))\n}\n","'use strict'\n\nmodule.exports = hardBreak\n\nvar u = require('unist-builder')\n\nfunction hardBreak(h, node) {\n return [h(node, 'br'), u('text', '\\n')]\n}\n","'use strict'\n\nmodule.exports = code\n\nvar u = require('unist-builder')\n\nfunction code(h, node) {\n var value = node.value ? node.value + '\\n' : ''\n // To do: next major, use `node.lang` w/o regex, the splitting’s been going\n // on for years in remark now.\n var lang = node.lang && node.lang.match(/^[^ \\t]+(?=[ \\t]|$)/)\n var props = {}\n var code\n\n if (lang) {\n props.className = ['language-' + lang]\n }\n\n code = h(node, 'code', props, [u('text', value)])\n\n if (node.meta) {\n code.data = {meta: node.meta}\n }\n\n return h(node.position, 'pre', [code])\n}\n","'use strict'\n\nmodule.exports = strikethrough\n\nvar all = require('../all')\n\nfunction strikethrough(h, node) {\n return h(node, 'del', all(h, node))\n}\n","'use strict'\n\nmodule.exports = emphasis\n\nvar all = require('../all')\n\nfunction emphasis(h, node) {\n return h(node, 'em', all(h, node))\n}\n","'use strict'\n\nmodule.exports = footnoteReference\n\nvar u = require('unist-builder')\n\nfunction footnoteReference(h, node) {\n var footnoteOrder = h.footnoteOrder\n var identifier = String(node.identifier)\n\n if (footnoteOrder.indexOf(identifier) === -1) {\n footnoteOrder.push(identifier)\n }\n\n return h(node.position, 'sup', {id: 'fnref-' + identifier}, [\n h(node, 'a', {href: '#fn-' + identifier, className: ['footnote-ref']}, [\n u('text', node.label || identifier)\n ])\n ])\n}\n","'use strict'\n\nmodule.exports = footnote\n\nvar footnoteReference = require('./footnote-reference')\n\nfunction footnote(h, node) {\n var footnoteById = h.footnoteById\n var footnoteOrder = h.footnoteOrder\n var identifier = 1\n\n while (identifier in footnoteById) {\n identifier++\n }\n\n identifier = String(identifier)\n\n // No need to check if `identifier` exists in `footnoteOrder`, it’s guaranteed\n // to not exist because we just generated it.\n footnoteOrder.push(identifier)\n\n footnoteById[identifier] = {\n type: 'footnoteDefinition',\n identifier: identifier,\n children: [{type: 'paragraph', children: node.children}],\n position: node.position\n }\n\n return footnoteReference(h, {\n type: 'footnoteReference',\n identifier: identifier,\n position: node.position\n })\n}\n","'use strict'\n\nmodule.exports = heading\n\nvar all = require('../all')\n\nfunction heading(h, node) {\n return h(node, 'h' + node.depth, all(h, node))\n}\n","'use strict'\n\nmodule.exports = html\n\nvar u = require('unist-builder')\n\n// Return either a `raw` node in dangerous mode, otherwise nothing.\nfunction html(h, node) {\n return h.dangerous ? h.augment(node, u('raw', node.value)) : null\n}\n","\n'use strict';\n\n\nvar encodeCache = {};\n\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache(exclude) {\n var i, ch, cache = encodeCache[exclude];\n if (cache) { return cache; }\n\n cache = encodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n\n if (/^[0-9a-z]$/i.test(ch)) {\n // always allow unencoded alphanumeric characters\n cache.push(ch);\n } else {\n cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));\n }\n }\n\n for (i = 0; i < exclude.length; i++) {\n cache[exclude.charCodeAt(i)] = exclude[i];\n }\n\n return cache;\n}\n\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n// - string - string to encode\n// - exclude - list of characters to ignore (in addition to a-zA-Z0-9)\n// - keepEscaped - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode(string, exclude, keepEscaped) {\n var i, l, code, nextCode, cache,\n result = '';\n\n if (typeof exclude !== 'string') {\n // encode(string, keepEscaped)\n keepEscaped = exclude;\n exclude = encode.defaultChars;\n }\n\n if (typeof keepEscaped === 'undefined') {\n keepEscaped = true;\n }\n\n cache = getEncodeCache(exclude);\n\n for (i = 0, l = string.length; i < l; i++) {\n code = string.charCodeAt(i);\n\n if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n result += string.slice(i, i + 3);\n i += 2;\n continue;\n }\n }\n\n if (code < 128) {\n result += cache[code];\n continue;\n }\n\n if (code >= 0xD800 && code <= 0xDFFF) {\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n nextCode = string.charCodeAt(i + 1);\n if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n result += encodeURIComponent(string[i] + string[i + 1]);\n i++;\n continue;\n }\n }\n result += '%EF%BF%BD';\n continue;\n }\n\n result += encodeURIComponent(string[i]);\n }\n\n return result;\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\";\nencode.componentChars = \"-_.!~*'()\";\n\n\nmodule.exports = encode;\n","'use strict'\n\nmodule.exports = revert\n\nvar u = require('unist-builder')\nvar all = require('./all')\n\n// Return the content of a reference without definition as Markdown.\nfunction revert(h, node) {\n var subtype = node.referenceType\n var suffix = ']'\n var contents\n var head\n var tail\n\n if (subtype === 'collapsed') {\n suffix += '[]'\n } else if (subtype === 'full') {\n suffix += '[' + (node.label || node.identifier) + ']'\n }\n\n if (node.type === 'imageReference') {\n return u('text', '![' + node.alt + suffix)\n }\n\n contents = all(h, node)\n head = contents[0]\n\n if (head && head.type === 'text') {\n head.value = '[' + head.value\n } else {\n contents.unshift(u('text', '['))\n }\n\n tail = contents[contents.length - 1]\n\n if (tail && tail.type === 'text') {\n tail.value += suffix\n } else {\n contents.push(u('text', suffix))\n }\n\n return contents\n}\n","'use strict'\n\nmodule.exports = imageReference\n\nvar normalize = require('mdurl/encode')\nvar revert = require('../revert')\n\nfunction imageReference(h, node) {\n var def = h.definition(node.identifier)\n var props\n\n if (!def) {\n return revert(h, node)\n }\n\n props = {src: normalize(def.url || ''), alt: node.alt}\n\n if (def.title !== null && def.title !== undefined) {\n props.title = def.title\n }\n\n return h(node, 'img', props)\n}\n","'use strict'\n\nvar normalize = require('mdurl/encode')\n\nmodule.exports = image\n\nfunction image(h, node) {\n var props = {src: normalize(node.url), alt: node.alt}\n\n if (node.title !== null && node.title !== undefined) {\n props.title = node.title\n }\n\n return h(node, 'img', props)\n}\n","'use strict'\n\nmodule.exports = inlineCode\n\nvar u = require('unist-builder')\n\nfunction inlineCode(h, node) {\n var value = node.value.replace(/\\r?\\n|\\r/g, ' ')\n return h(node, 'code', [u('text', value)])\n}\n","'use strict'\n\nmodule.exports = linkReference\n\nvar normalize = require('mdurl/encode')\nvar revert = require('../revert')\nvar all = require('../all')\n\nfunction linkReference(h, node) {\n var def = h.definition(node.identifier)\n var props\n\n if (!def) {\n return revert(h, node)\n }\n\n props = {href: normalize(def.url || '')}\n\n if (def.title !== null && def.title !== undefined) {\n props.title = def.title\n }\n\n return h(node, 'a', props, all(h, node))\n}\n","'use strict'\n\nvar normalize = require('mdurl/encode')\nvar all = require('../all')\n\nmodule.exports = link\n\nfunction link(h, node) {\n var props = {href: normalize(node.url)}\n\n if (node.title !== null && node.title !== undefined) {\n props.title = node.title\n }\n\n return h(node, 'a', props, all(h, node))\n}\n","'use strict'\n\nmodule.exports = listItem\n\nvar u = require('unist-builder')\nvar all = require('../all')\n\nfunction listItem(h, node, parent) {\n var result = all(h, node)\n var head = result[0]\n var loose = parent ? listLoose(parent) : listItemLoose(node)\n var props = {}\n var wrapped = []\n var length\n var index\n var child\n\n if (typeof node.checked === 'boolean') {\n if (!head || head.tagName !== 'p') {\n head = h(null, 'p', [])\n result.unshift(head)\n }\n\n if (head.children.length > 0) {\n head.children.unshift(u('text', ' '))\n }\n\n head.children.unshift(\n h(null, 'input', {\n type: 'checkbox',\n checked: node.checked,\n disabled: true\n })\n )\n\n // According to github-markdown-css, this class hides bullet.\n // See: <https://github.com/sindresorhus/github-markdown-css>.\n props.className = ['task-list-item']\n }\n\n length = result.length\n index = -1\n\n while (++index < length) {\n child = result[index]\n\n // Add eols before nodes, except if this is a loose, first paragraph.\n if (loose || index !== 0 || child.tagName !== 'p') {\n wrapped.push(u('text', '\\n'))\n }\n\n if (child.tagName === 'p' && !loose) {\n wrapped = wrapped.concat(child.children)\n } else {\n wrapped.push(child)\n }\n }\n\n // Add a final eol.\n if (length && (loose || child.tagName !== 'p')) {\n wrapped.push(u('text', '\\n'))\n }\n\n return h(node, 'li', props, wrapped)\n}\n\nfunction listLoose(node) {\n var loose = node.spread\n var children = node.children\n var length = children.length\n var index = -1\n\n while (!loose && ++index < length) {\n loose = listItemLoose(children[index])\n }\n\n return loose\n}\n\nfunction listItemLoose(node) {\n var spread = node.spread\n\n return spread === undefined || spread === null\n ? node.children.length > 1\n : spread\n}\n","'use strict'\n\nmodule.exports = paragraph\n\nvar all = require('../all')\n\nfunction paragraph(h, node) {\n return h(node, 'p', all(h, node))\n}\n","'use strict'\n\nmodule.exports = root\n\nvar u = require('unist-builder')\nvar wrap = require('../wrap')\nvar all = require('../all')\n\nfunction root(h, node) {\n return h.augment(node, u('root', wrap(all(h, node))))\n}\n","'use strict'\n\nmodule.exports = strong\n\nvar all = require('../all')\n\nfunction strong(h, node) {\n return h(node, 'strong', all(h, node))\n}\n","'use strict'\n\nmodule.exports = table\n\nvar position = require('unist-util-position')\nvar wrap = require('../wrap')\nvar all = require('../all')\n\nfunction table(h, node) {\n var rows = node.children\n var index = rows.length\n var align = node.align || []\n var alignLength = align.length\n var result = []\n var pos\n var row\n var out\n var name\n var cell\n\n while (index--) {\n row = rows[index].children\n name = index === 0 ? 'th' : 'td'\n pos = alignLength || row.length\n out = []\n\n while (pos--) {\n cell = row[pos]\n out[pos] = h(cell, name, {align: align[pos]}, cell ? all(h, cell) : [])\n }\n\n result[index] = h(rows[index], 'tr', wrap(out, true))\n }\n\n return h(\n node,\n 'table',\n wrap(\n [h(result[0].position, 'thead', wrap([result[0]], true))].concat(\n result[1]\n ? h(\n {\n start: position.start(result[1]),\n end: position.end(result[result.length - 1])\n },\n 'tbody',\n wrap(result.slice(1), true)\n )\n : []\n ),\n true\n )\n )\n}\n","'use strict'\n\nmodule.exports = text\n\nvar u = require('unist-builder')\n\nfunction text(h, node) {\n return h.augment(\n node,\n u('text', String(node.value).replace(/[ \\t]*(\\r?\\n|\\r)[ \\t]*/g, '$1'))\n )\n}\n","'use strict'\n\nmodule.exports = {\n blockquote: require('./blockquote'),\n break: require('./break'),\n code: require('./code'),\n delete: require('./delete'),\n emphasis: require('./emphasis'),\n footnoteReference: require('./footnote-reference'),\n footnote: require('./footnote'),\n heading: require('./heading'),\n html: require('./html'),\n imageReference: require('./image-reference'),\n image: require('./image'),\n inlineCode: require('./inline-code'),\n linkReference: require('./link-reference'),\n link: require('./link'),\n listItem: require('./list-item'),\n list: require('./list'),\n paragraph: require('./paragraph'),\n root: require('./root'),\n strong: require('./strong'),\n table: require('./table'),\n text: require('./text'),\n thematicBreak: require('./thematic-break'),\n toml: ignore,\n yaml: ignore,\n definition: ignore,\n footnoteDefinition: ignore\n}\n\n// Return nothing for nodes that are ignored.\nfunction ignore() {\n return null\n}\n","'use strict'\n\nmodule.exports = toHast\n\nvar u = require('unist-builder')\nvar visit = require('unist-util-visit')\nvar position = require('unist-util-position')\nvar generated = require('unist-util-generated')\nvar definitions = require('mdast-util-definitions')\nvar one = require('./one')\nvar footer = require('./footer')\nvar handlers = require('./handlers')\n\nvar own = {}.hasOwnProperty\n\nvar deprecationWarningIssued = false\n\n// Factory to transform.\nfunction factory(tree, options) {\n var settings = options || {}\n\n // Issue a warning if the deprecated tag 'allowDangerousHTML' is used\n if (settings.allowDangerousHTML !== undefined && !deprecationWarningIssued) {\n deprecationWarningIssued = true\n console.warn(\n 'mdast-util-to-hast: deprecation: `allowDangerousHTML` is nonstandard, use `allowDangerousHtml` instead'\n )\n }\n\n var dangerous = settings.allowDangerousHtml || settings.allowDangerousHTML\n var footnoteById = {}\n\n h.dangerous = dangerous\n h.definition = definitions(tree)\n h.footnoteById = footnoteById\n h.footnoteOrder = []\n h.augment = augment\n h.handlers = Object.assign({}, handlers, settings.handlers)\n h.unknownHandler = settings.unknownHandler\n h.passThrough = settings.passThrough\n\n visit(tree, 'footnoteDefinition', onfootnotedefinition)\n\n return h\n\n // Finalise the created `right`, a hast node, from `left`, an mdast node.\n function augment(left, right) {\n var data\n var ctx\n\n // Handle `data.hName`, `data.hProperties, `data.hChildren`.\n if (left && left.data) {\n data = left.data\n\n if (data.hName) {\n if (right.type !== 'element') {\n right = {\n type: 'element',\n tagName: '',\n properties: {},\n children: []\n }\n }\n\n right.tagName = data.hName\n }\n\n if (right.type === 'element' && data.hProperties) {\n right.properties = Object.assign({}, right.properties, data.hProperties)\n }\n\n if (right.children && data.hChildren) {\n right.children = data.hChildren\n }\n }\n\n ctx = left && left.position ? left : {position: left}\n\n if (!generated(ctx)) {\n right.position = {\n start: position.start(ctx),\n end: position.end(ctx)\n }\n }\n\n return right\n }\n\n // Create an element for `node`.\n function h(node, tagName, props, children) {\n if (\n (children === undefined || children === null) &&\n typeof props === 'object' &&\n 'length' in props\n ) {\n children = props\n props = {}\n }\n\n return augment(node, {\n type: 'element',\n tagName: tagName,\n properties: props || {},\n children: children || []\n })\n }\n\n function onfootnotedefinition(definition) {\n var id = String(definition.identifier).toUpperCase()\n\n // Mimick CM behavior of link definitions.\n // See: <https://github.com/syntax-tree/mdast-util-definitions/blob/8290999/index.js#L26>.\n if (!own.call(footnoteById, id)) {\n footnoteById[id] = definition\n }\n }\n}\n\n// Transform `tree`, which is an mdast node, to a hast node.\nfunction toHast(tree, options) {\n var h = factory(tree, options)\n var node = one(h, tree)\n var foot = footer(h)\n\n if (foot) {\n node.children = node.children.concat(u('text', '\\n'), foot)\n }\n\n return node\n}\n","'use strict'\nmodule.exports = require('./lib')\n","'use strict'\n\nvar mdast2hast = require('mdast-util-to-hast')\n\nmodule.exports = remark2rehype\n\n// Attacher.\n// If a destination is given, runs the destination with the new hast tree\n// (bridge mode).\n// Without destination, returns the tree: further plugins run on that tree\n// (mutate mode).\nfunction remark2rehype(destination, options) {\n if (destination && !destination.process) {\n options = destination\n destination = null\n }\n\n return destination ? bridge(destination, options) : mutate(options)\n}\n\n// Bridge mode.\n// Runs the destination with the new hast tree.\nfunction bridge(destination, options) {\n return transformer\n\n function transformer(node, file, next) {\n destination.run(mdast2hast(node, options), file, done)\n\n function done(error) {\n next(error)\n }\n }\n}\n\n// Mutate-mode.\n// Further transformers run on the hast tree.\nfunction mutate(options) {\n return transformer\n\n function transformer(node) {\n return mdast2hast(node, options)\n }\n}\n","/**\n * Count how often a character (or substring) is used in a string.\n *\n * @param {string} value\n * Value to search in.\n * @param {string} character\n * Character (or substring) to look for.\n * @return {number}\n * Number of times `character` occurred in `value`.\n */\nexport function ccount(value, character) {\n const source = String(value)\n\n if (typeof character !== 'string') {\n throw new TypeError('Expected character')\n }\n\n let count = 0\n let index = source.indexOf(character)\n\n while (index !== -1) {\n count++\n index = source.indexOf(character, index + character.length)\n }\n\n return count\n}\n","export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n * Check that an arbitrary value is a node.\n * @param {unknown} this\n * The given context.\n * @param {unknown} [node]\n * Anything (typically a node).\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {boolean}\n * Whether this is a node and passes a test.\n *\n * @typedef {Record<string, unknown> | Node} Props\n * Object to check for equivalence.\n *\n * Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array<Props | TestFunction | string> | Props | TestFunction | string | null | undefined} Test\n * Check for an arbitrary node.\n *\n * @callback TestFunction\n * Check if a node passes a test.\n * @param {unknown} this\n * The given context.\n * @param {Node} node\n * A node.\n * @param {number | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | undefined} [parent]\n * The node’s parent.\n * @returns {boolean | undefined | void}\n * Whether this node passes the test.\n *\n * Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n * Thing to check, typically `Node`.\n * @param {Test} test\n * A check for a specific node.\n * @param {number | null | undefined} index\n * The node’s position in its parent.\n * @param {Parent | null | undefined} parent\n * The node’s parent.\n * @param {unknown} context\n * Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n * Whether `node` is a node and passes a test.\n */\nexport const is =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * (<Condition extends string>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * (<Condition extends Props>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * (<Condition extends TestFunction>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n * ((node?: null | undefined) => false) &\n * ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n * )}\n */\n (\n /**\n * @param {unknown} [node]\n * @param {Test} [test]\n * @param {number | null | undefined} [index]\n * @param {Parent | null | undefined} [parent]\n * @param {unknown} [context]\n * @returns {boolean}\n */\n // eslint-disable-next-line max-params\n function (node, test, index, parent, context) {\n const check = convert(test)\n\n if (\n index !== undefined &&\n index !== null &&\n (typeof index !== 'number' ||\n index < 0 ||\n index === Number.POSITIVE_INFINITY)\n ) {\n throw new Error('Expected positive finite index')\n }\n\n if (\n parent !== undefined &&\n parent !== null &&\n (!is(parent) || !parent.children)\n ) {\n throw new Error('Expected parent node')\n }\n\n if (\n (parent === undefined || parent === null) !==\n (index === undefined || index === null)\n ) {\n throw new Error('Expected both parent and index')\n }\n\n return looksLikeANode(node)\n ? check.call(context, node, index, parent)\n : false\n }\n )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n * * when nullish, checks if `node` is a `Node`.\n * * when `string`, works like passing `(node) => node.type === test`.\n * * when `function` checks if function passed the node is true.\n * * when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n * * when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n * An assertion.\n */\nexport const convert =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n * ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((test?: Test) => Check)\n * )}\n */\n (\n /**\n * @param {Test} [test]\n * @returns {Check}\n */\n function (test) {\n if (test === null || test === undefined) {\n return ok\n }\n\n if (typeof test === 'function') {\n return castFactory(test)\n }\n\n if (typeof test === 'object') {\n return Array.isArray(test) ? anyFactory(test) : propsFactory(test)\n }\n\n if (typeof test === 'string') {\n return typeFactory(test)\n }\n\n throw new Error('Expected function, string, or object as test')\n }\n )\n\n/**\n * @param {Array<Props | TestFunction | string>} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n /** @type {Array<Check>} */\n const checks = []\n let index = -1\n\n while (++index < tests.length) {\n checks[index] = convert(tests[index])\n }\n\n return castFactory(any)\n\n /**\n * @this {unknown}\n * @type {TestFunction}\n */\n function any(...parameters) {\n let index = -1\n\n while (++index < checks.length) {\n if (checks[index].apply(this, parameters)) return true\n }\n\n return false\n }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propsFactory(check) {\n const checkAsRecord = /** @type {Record<string, unknown>} */ (check)\n\n return castFactory(all)\n\n /**\n * @param {Node} node\n * @returns {boolean}\n */\n function all(node) {\n const nodeAsRecord = /** @type {Record<string, unknown>} */ (\n /** @type {unknown} */ (node)\n )\n\n /** @type {string} */\n let key\n\n for (key in check) {\n if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n }\n\n return true\n }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n return castFactory(type)\n\n /**\n * @param {Node} node\n */\n function type(node) {\n return node && node.type === check\n }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n return check\n\n /**\n * @this {unknown}\n * @type {Check}\n */\n function check(value, index, parent) {\n return Boolean(\n looksLikeANode(value) &&\n testFunction.call(\n this,\n value,\n typeof index === 'number' ? index : undefined,\n parent || undefined\n )\n )\n }\n}\n\nfunction ok() {\n return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n return value !== null && typeof value === 'object' && 'type' in value\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate<Check, Value> extends Value\n * ? Predicate<Check, Value>\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends Array<any>\n * ? MatchesOne<Value, Check[keyof Check]>\n * : MatchesOne<Value, Check>\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array<infer Children>}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent<Node, Child>\n * | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {InternalAncestor<InclusiveDescendant<Tree>, Child>} Ancestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} Action\n * Union of the action types.\n *\n * @typedef {number} Index\n * Move to the sibling at `index` next (after node itself is completely\n * traversed).\n *\n * Useful if mutating the tree, such as removing the node the visitor is\n * currently on, or any of its previous siblings.\n * Results less than 0 or greater than or equal to `children.length` stop\n * traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n * List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n * Any value that can be returned from a visitor.\n */\n\n/**\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform the parent of node (the last of `ancestors`).\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of an ancestor still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Array<VisitedParents>} ancestors\n * Ancestors of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Matches<InclusiveDescendant<Tree>, Check>, Ancestor<Tree, Matches<InclusiveDescendant<Tree>, Check>>>} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parents`.\n * @template {UnistNode} [Tree=UnistNode]\n * Tree type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly<ActionTuple>} */\nconst empty = []\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} test\n * `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n * Handle each node.\n * @param {boolean | null | undefined} [reverse]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n /** @type {Test} */\n let check\n\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor\n // @ts-expect-error no visitor given, so `visitor` is test.\n visitor = test\n } else {\n // @ts-expect-error visitor given, so `test` isn’t a visitor.\n check = test\n }\n\n const is = convert(check)\n const step = reverse ? -1 : 1\n\n factory(tree, undefined, [])()\n\n /**\n * @param {UnistNode} node\n * @param {number | undefined} index\n * @param {Array<UnistParent>} parents\n */\n function factory(node, index, parents) {\n const value = /** @type {Record<string, unknown>} */ (\n node && typeof node === 'object' ? node : {}\n )\n\n if (typeof value.type === 'string') {\n const name =\n // `hast`\n typeof value.tagName === 'string'\n ? value.tagName\n : // `xast`\n typeof value.name === 'string'\n ? value.name\n : undefined\n\n Object.defineProperty(visit, 'name', {\n value:\n 'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n })\n }\n\n return visit\n\n function visit() {\n /** @type {Readonly<ActionTuple>} */\n let result = empty\n /** @type {Readonly<ActionTuple>} */\n let subresult\n /** @type {number} */\n let offset\n /** @type {Array<UnistParent>} */\n let grandparents\n\n if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n // @ts-expect-error: `visitor` is now a visitor.\n result = toResult(visitor(node, parents))\n\n if (result[0] === EXIT) {\n return result\n }\n }\n\n if ('children' in node && node.children) {\n const nodeAsParent = /** @type {UnistParent} */ (node)\n\n if (nodeAsParent.children && result[0] !== SKIP) {\n offset = (reverse ? nodeAsParent.children.length : -1) + step\n grandparents = parents.concat(nodeAsParent)\n\n while (offset > -1 && offset < nodeAsParent.children.length) {\n const child = nodeAsParent.children[offset]\n\n subresult = factory(child, offset, grandparents)()\n\n if (subresult[0] === EXIT) {\n return subresult\n }\n\n offset =\n typeof subresult[1] === 'number' ? subresult[1] : offset + step\n }\n }\n }\n\n return result\n }\n }\n}\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n * Valid return values from visitors.\n * @returns {Readonly<ActionTuple>}\n * Clean result.\n */\nfunction toResult(value) {\n if (Array.isArray(value)) {\n return value\n }\n\n if (typeof value === 'number') {\n return [CONTINUE, value]\n }\n\n return value === null || value === undefined ? empty : [value]\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').Text} Text\n * @typedef {import('unist-util-visit-parents').Test} Test\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef RegExpMatchObject\n * Info on the match.\n * @property {number} index\n * The index of the search at which the result was found.\n * @property {string} input\n * A copy of the search string in the text node.\n * @property {[...Array<Parents>, Text]} stack\n * All ancestors of the text node, where the last node is the text itself.\n *\n * @typedef {RegExp | string} Find\n * Pattern to find.\n *\n * Strings are escaped and then turned into global expressions.\n *\n * @typedef {Array<FindAndReplaceTuple>} FindAndReplaceList\n * Several find and replaces, in array form.\n *\n * @typedef {[Find, Replace?]} FindAndReplaceTuple\n * Find and replace in tuple form.\n *\n * @typedef {ReplaceFunction | string | null | undefined} Replace\n * Thing to replace with.\n *\n * @callback ReplaceFunction\n * Callback called when a search matches.\n * @param {...any} parameters\n * The parameters are the result of corresponding search expression:\n *\n * * `value` (`string`) — whole match\n * * `...capture` (`Array<string>`) — matches from regex capture groups\n * * `match` (`RegExpMatchObject`) — info on the match\n * @returns {Array<PhrasingContent> | PhrasingContent | string | false | null | undefined}\n * Thing to replace with.\n *\n * * when `null`, `undefined`, `''`, remove the match\n * * …or when `false`, do not replace at all\n * * …or when `string`, replace with a text node of that value\n * * …or when `Node` or `Array<Node>`, replace with those nodes\n *\n * @typedef {[RegExp, ReplaceFunction]} Pair\n * Normalized find and replace.\n *\n * @typedef {Array<Pair>} Pairs\n * All find and replaced.\n *\n * @typedef Options\n * Configuration.\n * @property {Test | null | undefined} [ignore]\n * Test for which nodes to ignore (optional).\n */\n\nimport escape from 'escape-string-regexp'\nimport {visitParents} from 'unist-util-visit-parents'\nimport {convert} from 'unist-util-is'\n\n/**\n * Find patterns in a tree and replace them.\n *\n * The algorithm searches the tree in *preorder* for complete values in `Text`\n * nodes.\n * Partial matches are not supported.\n *\n * @param {Nodes} tree\n * Tree to change.\n * @param {FindAndReplaceList | FindAndReplaceTuple} list\n * Patterns to find.\n * @param {Options | null | undefined} [options]\n * Configuration (when `find` is not `Find`).\n * @returns {undefined}\n * Nothing.\n */\nexport function findAndReplace(tree, list, options) {\n const settings = options || {}\n const ignored = convert(settings.ignore || [])\n const pairs = toPairs(list)\n let pairIndex = -1\n\n while (++pairIndex < pairs.length) {\n visitParents(tree, 'text', visitor)\n }\n\n /** @type {import('unist-util-visit-parents').BuildVisitor<Root, 'text'>} */\n function visitor(node, parents) {\n let index = -1\n /** @type {Parents | undefined} */\n let grandparent\n\n while (++index < parents.length) {\n const parent = parents[index]\n /** @type {Array<Nodes> | undefined} */\n const siblings = grandparent ? grandparent.children : undefined\n\n if (\n ignored(\n parent,\n siblings ? siblings.indexOf(parent) : undefined,\n grandparent\n )\n ) {\n return\n }\n\n grandparent = parent\n }\n\n if (grandparent) {\n return handler(node, parents)\n }\n }\n\n /**\n * Handle a text node which is not in an ignored parent.\n *\n * @param {Text} node\n * Text node.\n * @param {Array<Parents>} parents\n * Parents.\n * @returns {VisitorResult}\n * Result.\n */\n function handler(node, parents) {\n const parent = parents[parents.length - 1]\n const find = pairs[pairIndex][0]\n const replace = pairs[pairIndex][1]\n let start = 0\n /** @type {Array<Nodes>} */\n const siblings = parent.children\n const index = siblings.indexOf(node)\n let change = false\n /** @type {Array<PhrasingContent>} */\n let nodes = []\n\n find.lastIndex = 0\n\n let match = find.exec(node.value)\n\n while (match) {\n const position = match.index\n /** @type {RegExpMatchObject} */\n const matchObject = {\n index: match.index,\n input: match.input,\n stack: [...parents, node]\n }\n let value = replace(...match, matchObject)\n\n if (typeof value === 'string') {\n value = value.length > 0 ? {type: 'text', value} : undefined\n }\n\n // It wasn’t a match after all.\n if (value === false) {\n // False acts as if there was no match.\n // So we need to reset `lastIndex`, which currently being at the end of\n // the current match, to the beginning.\n find.lastIndex = position + 1\n } else {\n if (start !== position) {\n nodes.push({\n type: 'text',\n value: node.value.slice(start, position)\n })\n }\n\n if (Array.isArray(value)) {\n nodes.push(...value)\n } else if (value) {\n nodes.push(value)\n }\n\n start = position + match[0].length\n change = true\n }\n\n if (!find.global) {\n break\n }\n\n match = find.exec(node.value)\n }\n\n if (change) {\n if (start < node.value.length) {\n nodes.push({type: 'text', value: node.value.slice(start)})\n }\n\n parent.children.splice(index, 1, ...nodes)\n } else {\n nodes = [node]\n }\n\n return index + nodes.length\n }\n}\n\n/**\n * Turn a tuple or a list of tuples into pairs.\n *\n * @param {FindAndReplaceList | FindAndReplaceTuple} tupleOrList\n * Schema.\n * @returns {Pairs}\n * Clean pairs.\n */\nfunction toPairs(tupleOrList) {\n /** @type {Pairs} */\n const result = []\n\n if (!Array.isArray(tupleOrList)) {\n throw new TypeError('Expected find and replace tuple or list of tuples')\n }\n\n /** @type {FindAndReplaceList} */\n // @ts-expect-error: correct.\n const list =\n !tupleOrList[0] || Array.isArray(tupleOrList[0])\n ? tupleOrList\n : [tupleOrList]\n\n let index = -1\n\n while (++index < list.length) {\n const tuple = list[index]\n result.push([toExpression(tuple[0]), toFunction(tuple[1])])\n }\n\n return result\n}\n\n/**\n * Turn a find into an expression.\n *\n * @param {Find} find\n * Find.\n * @returns {RegExp}\n * Expression.\n */\nfunction toExpression(find) {\n return typeof find === 'string' ? new RegExp(escape(find), 'g') : find\n}\n\n/**\n * Turn a replace into a function.\n *\n * @param {Replace} replace\n * Replace.\n * @returns {ReplaceFunction}\n * Function.\n */\nfunction toFunction(replace) {\n return typeof replace === 'function'\n ? replace\n : function () {\n return replace\n }\n}\n","/**\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-from-markdown').Transform} FromMarkdownTransform\n *\n * @typedef {import('mdast-util-to-markdown').ConstructName} ConstructName\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n *\n * @typedef {import('mdast-util-find-and-replace').RegExpMatchObject} RegExpMatchObject\n * @typedef {import('mdast-util-find-and-replace').ReplaceFunction} ReplaceFunction\n */\n\nimport {ccount} from 'ccount'\nimport {ok as assert} from 'devlop'\nimport {unicodePunctuation, unicodeWhitespace} from 'micromark-util-character'\nimport {findAndReplace} from 'mdast-util-find-and-replace'\n\n/** @type {ConstructName} */\nconst inConstruct = 'phrasing'\n/** @type {Array<ConstructName>} */\nconst notInConstruct = ['autolink', 'link', 'image', 'label']\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralFromMarkdown() {\n return {\n transforms: [transformGfmAutolinkLiterals],\n enter: {\n literalAutolink: enterLiteralAutolink,\n literalAutolinkEmail: enterLiteralAutolinkValue,\n literalAutolinkHttp: enterLiteralAutolinkValue,\n literalAutolinkWww: enterLiteralAutolinkValue\n },\n exit: {\n literalAutolink: exitLiteralAutolink,\n literalAutolinkEmail: exitLiteralAutolinkEmail,\n literalAutolinkHttp: exitLiteralAutolinkHttp,\n literalAutolinkWww: exitLiteralAutolinkWww\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralToMarkdown() {\n return {\n unsafe: [\n {\n character: '@',\n before: '[+\\\\-.\\\\w]',\n after: '[\\\\-.\\\\w]',\n inConstruct,\n notInConstruct\n },\n {\n character: '.',\n before: '[Ww]',\n after: '[\\\\-.\\\\w]',\n inConstruct,\n notInConstruct\n },\n {\n character: ':',\n before: '[ps]',\n after: '\\\\/',\n inConstruct,\n notInConstruct\n }\n ]\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolink(token) {\n this.enter({type: 'link', title: null, url: '', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolinkValue(token) {\n this.config.enter.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkHttp(token) {\n this.config.exit.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkWww(token) {\n this.config.exit.data.call(this, token)\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'link')\n node.url = 'http://' + this.sliceSerialize(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkEmail(token) {\n this.config.exit.autolinkEmail.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolink(token) {\n this.exit(token)\n}\n\n/** @type {FromMarkdownTransform} */\nfunction transformGfmAutolinkLiterals(tree) {\n findAndReplace(\n tree,\n [\n [/(https?:\\/\\/|www(?=\\.))([-.\\w]+)([^ \\t\\r\\n]*)/gi, findUrl],\n [/([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)/g, findEmail]\n ],\n {ignore: ['link', 'linkReference']}\n )\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} protocol\n * @param {string} domain\n * @param {string} path\n * @param {RegExpMatchObject} match\n * @returns {Array<PhrasingContent> | Link | false}\n */\n// eslint-disable-next-line max-params\nfunction findUrl(_, protocol, domain, path, match) {\n let prefix = ''\n\n // Not an expected previous character.\n if (!previous(match)) {\n return false\n }\n\n // Treat `www` as part of the domain.\n if (/^w/i.test(protocol)) {\n domain = protocol + domain\n protocol = ''\n prefix = 'http://'\n }\n\n if (!isCorrectDomain(domain)) {\n return false\n }\n\n const parts = splitUrl(domain + path)\n\n if (!parts[0]) return false\n\n /** @type {Link} */\n const result = {\n type: 'link',\n title: null,\n url: prefix + protocol + parts[0],\n children: [{type: 'text', value: protocol + parts[0]}]\n }\n\n if (parts[1]) {\n return [result, {type: 'text', value: parts[1]}]\n }\n\n return result\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} atext\n * @param {string} label\n * @param {RegExpMatchObject} match\n * @returns {Link | false}\n */\nfunction findEmail(_, atext, label, match) {\n if (\n // Not an expected previous character.\n !previous(match, true) ||\n // Label ends in not allowed character.\n /[-\\d_]$/.test(label)\n ) {\n return false\n }\n\n return {\n type: 'link',\n title: null,\n url: 'mailto:' + atext + '@' + label,\n children: [{type: 'text', value: atext + '@' + label}]\n }\n}\n\n/**\n * @param {string} domain\n * @returns {boolean}\n */\nfunction isCorrectDomain(domain) {\n const parts = domain.split('.')\n\n if (\n parts.length < 2 ||\n (parts[parts.length - 1] &&\n (/_/.test(parts[parts.length - 1]) ||\n !/[a-zA-Z\\d]/.test(parts[parts.length - 1]))) ||\n (parts[parts.length - 2] &&\n (/_/.test(parts[parts.length - 2]) ||\n !/[a-zA-Z\\d]/.test(parts[parts.length - 2])))\n ) {\n return false\n }\n\n return true\n}\n\n/**\n * @param {string} url\n * @returns {[string, string | undefined]}\n */\nfunction splitUrl(url) {\n const trailExec = /[!\"&'),.:;<>?\\]}]+$/.exec(url)\n\n if (!trailExec) {\n return [url, undefined]\n }\n\n url = url.slice(0, trailExec.index)\n\n let trail = trailExec[0]\n let closingParenIndex = trail.indexOf(')')\n const openingParens = ccount(url, '(')\n let closingParens = ccount(url, ')')\n\n while (closingParenIndex !== -1 && openingParens > closingParens) {\n url += trail.slice(0, closingParenIndex + 1)\n trail = trail.slice(closingParenIndex + 1)\n closingParenIndex = trail.indexOf(')')\n closingParens++\n }\n\n return [url, trail]\n}\n\n/**\n * @param {RegExpMatchObject} match\n * @param {boolean | null | undefined} [email=false]\n * @returns {boolean}\n */\nfunction previous(match, email) {\n const code = match.input.charCodeAt(match.index - 1)\n\n return (\n (match.index === 0 ||\n unicodeWhitespace(code) ||\n unicodePunctuation(code)) &&\n (!email || code !== 47)\n )\n}\n","/**\n * @typedef {import('mdast').FootnoteDefinition} FootnoteDefinition\n * @typedef {import('mdast').FootnoteReference} FootnoteReference\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Map} Map\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\nimport {ok as assert} from 'devlop'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\n\nfootnoteReference.peek = footnoteReferencePeek\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown`.\n */\nexport function gfmFootnoteFromMarkdown() {\n return {\n enter: {\n gfmFootnoteDefinition: enterFootnoteDefinition,\n gfmFootnoteDefinitionLabelString: enterFootnoteDefinitionLabelString,\n gfmFootnoteCall: enterFootnoteCall,\n gfmFootnoteCallString: enterFootnoteCallString\n },\n exit: {\n gfmFootnoteDefinition: exitFootnoteDefinition,\n gfmFootnoteDefinitionLabelString: exitFootnoteDefinitionLabelString,\n gfmFootnoteCall: exitFootnoteCall,\n gfmFootnoteCallString: exitFootnoteCallString\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown`.\n */\nexport function gfmFootnoteToMarkdown() {\n return {\n // This is on by default already.\n unsafe: [{character: '[', inConstruct: ['phrasing', 'label', 'reference']}],\n handlers: {footnoteDefinition, footnoteReference}\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinition(token) {\n this.enter(\n {type: 'footnoteDefinition', identifier: '', label: '', children: []},\n token\n )\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinitionLabelString() {\n this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinitionLabelString(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'footnoteDefinition')\n node.label = label\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinition(token) {\n this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCall(token) {\n this.enter({type: 'footnoteReference', identifier: '', label: ''}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCallString() {\n this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCallString(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'footnoteReference')\n node.label = label\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCall(token) {\n this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {FootnoteReference} node\n */\nfunction footnoteReference(node, _, state, info) {\n const tracker = state.createTracker(info)\n let value = tracker.move('[^')\n const exit = state.enter('footnoteReference')\n const subexit = state.enter('reference')\n value += tracker.move(\n state.safe(state.associationId(node), {\n ...tracker.current(),\n before: value,\n after: ']'\n })\n )\n subexit()\n exit()\n value += tracker.move(']')\n return value\n}\n\n/** @type {ToMarkdownHandle} */\nfunction footnoteReferencePeek() {\n return '['\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {FootnoteDefinition} node\n */\nfunction footnoteDefinition(node, _, state, info) {\n const tracker = state.createTracker(info)\n let value = tracker.move('[^')\n const exit = state.enter('footnoteDefinition')\n const subexit = state.enter('label')\n value += tracker.move(\n state.safe(state.associationId(node), {\n ...tracker.current(),\n before: value,\n after: ']'\n })\n )\n subexit()\n value += tracker.move(\n ']:' + (node.children && node.children.length > 0 ? ' ' : '')\n )\n tracker.shift(4)\n value += tracker.move(\n state.indentLines(state.containerFlow(node, tracker.current()), map)\n )\n exit()\n\n return value\n}\n\n/** @type {Map} */\nfunction map(line, index, blank) {\n if (index === 0) {\n return line\n }\n\n return (blank ? '' : ' ') + line\n}\n","/**\n * @typedef {import('mdast').Delete} Delete\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').ConstructName} ConstructName\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\n/**\n * List of constructs that occur in phrasing (paragraphs, headings), but cannot\n * contain strikethrough.\n * So they sort of cancel each other out.\n * Note: could use a better name.\n *\n * Note: keep in sync with: <https://github.com/syntax-tree/mdast-util-to-markdown/blob/8ce8dbf/lib/unsafe.js#L14>\n *\n * @type {Array<ConstructName>}\n */\nconst constructsWithoutStrikethrough = [\n 'autolink',\n 'destinationLiteral',\n 'destinationRaw',\n 'reference',\n 'titleQuote',\n 'titleApostrophe'\n]\n\nhandleDelete.peek = peekDelete\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughFromMarkdown() {\n return {\n canContainEols: ['delete'],\n enter: {strikethrough: enterStrikethrough},\n exit: {strikethrough: exitStrikethrough}\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughToMarkdown() {\n return {\n unsafe: [\n {\n character: '~',\n inConstruct: 'phrasing',\n notInConstruct: constructsWithoutStrikethrough\n }\n ],\n handlers: {delete: handleDelete}\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterStrikethrough(token) {\n this.enter({type: 'delete', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitStrikethrough(token) {\n this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {Delete} node\n */\nfunction handleDelete(node, _, state, info) {\n const tracker = state.createTracker(info)\n const exit = state.enter('strikethrough')\n let value = tracker.move('~~')\n value += state.containerPhrasing(node, {\n ...tracker.current(),\n before: value,\n after: '~'\n })\n value += tracker.move('~~')\n exit()\n return value\n}\n\n/** @type {ToMarkdownHandle} */\nfunction peekDelete() {\n return '~'\n}\n","/**\n * @typedef Options\n * Configuration (optional).\n * @property {string|null|ReadonlyArray<string|null|undefined>} [align]\n * One style for all columns, or styles for their respective columns.\n * Each style is either `'l'` (left), `'r'` (right), or `'c'` (center).\n * Other values are treated as `''`, which doesn’t place the colon in the\n * alignment row but does align left.\n * *Only the lowercased first character is used, so `Right` is fine.*\n * @property {boolean} [padding=true]\n * Whether to add a space of padding between delimiters and cells.\n *\n * When `true`, there is padding:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there is no padding:\n *\n * ```markdown\n * |Alpha|B |\n * |-----|-----|\n * |C |Delta|\n * ```\n * @property {boolean} [delimiterStart=true]\n * Whether to begin each row with the delimiter.\n *\n * > 👉 **Note**: please don’t use this: it could create fragile structures\n * > that aren’t understandable to some markdown parsers.\n *\n * When `true`, there are starting delimiters:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there are no starting delimiters:\n *\n * ```markdown\n * Alpha | B |\n * ----- | ----- |\n * C | Delta |\n * ```\n * @property {boolean} [delimiterEnd=true]\n * Whether to end each row with the delimiter.\n *\n * > 👉 **Note**: please don’t use this: it could create fragile structures\n * > that aren’t understandable to some markdown parsers.\n *\n * When `true`, there are ending delimiters:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there are no ending delimiters:\n *\n * ```markdown\n * | Alpha | B\n * | ----- | -----\n * | C | Delta\n * ```\n * @property {boolean} [alignDelimiters=true]\n * Whether to align the delimiters.\n * By default, they are aligned:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * Pass `false` to make them staggered:\n *\n * ```markdown\n * | Alpha | B |\n * | - | - |\n * | C | Delta |\n * ```\n * @property {(value: string) => number} [stringLength]\n * Function to detect the length of table cell content.\n * This is used when aligning the delimiters (`|`) between table cells.\n * Full-width characters and emoji mess up delimiter alignment when viewing\n * the markdown source.\n * To fix this, you can pass this function, which receives the cell content\n * and returns its “visible” size.\n * Note that what is and isn’t visible depends on where the text is displayed.\n *\n * Without such a function, the following:\n *\n * ```js\n * markdownTable([\n * ['Alpha', 'Bravo'],\n * ['中文', 'Charlie'],\n * ['👩❤️👩', 'Delta']\n * ])\n * ```\n *\n * Yields:\n *\n * ```markdown\n * | Alpha | Bravo |\n * | - | - |\n * | 中文 | Charlie |\n * | 👩❤️👩 | Delta |\n * ```\n *\n * With [`string-width`](https://github.com/sindresorhus/string-width):\n *\n * ```js\n * import stringWidth from 'string-width'\n *\n * markdownTable(\n * [\n * ['Alpha', 'Bravo'],\n * ['中文', 'Charlie'],\n * ['👩❤️👩', 'Delta']\n * ],\n * {stringLength: stringWidth}\n * )\n * ```\n *\n * Yields:\n *\n * ```markdown\n * | Alpha | Bravo |\n * | ----- | ------- |\n * | 中文 | Charlie |\n * | 👩❤️👩 | Delta |\n * ```\n */\n\n/**\n * @typedef {Options} MarkdownTableOptions\n * @todo\n * Remove next major.\n */\n\n/**\n * Generate a markdown ([GFM](https://docs.github.com/en/github/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables)) table..\n *\n * @param {ReadonlyArray<ReadonlyArray<string|null|undefined>>} table\n * Table data (matrix of strings).\n * @param {Options} [options]\n * Configuration (optional).\n * @returns {string}\n */\nexport function markdownTable(table, options = {}) {\n const align = (options.align || []).concat()\n const stringLength = options.stringLength || defaultStringLength\n /** @type {Array<number>} Character codes as symbols for alignment per column. */\n const alignments = []\n /** @type {Array<Array<string>>} Cells per row. */\n const cellMatrix = []\n /** @type {Array<Array<number>>} Sizes of each cell per row. */\n const sizeMatrix = []\n /** @type {Array<number>} */\n const longestCellByColumn = []\n let mostCellsPerRow = 0\n let rowIndex = -1\n\n // This is a superfluous loop if we don’t align delimiters, but otherwise we’d\n // do superfluous work when aligning, so optimize for aligning.\n while (++rowIndex < table.length) {\n /** @type {Array<string>} */\n const row = []\n /** @type {Array<number>} */\n const sizes = []\n let columnIndex = -1\n\n if (table[rowIndex].length > mostCellsPerRow) {\n mostCellsPerRow = table[rowIndex].length\n }\n\n while (++columnIndex < table[rowIndex].length) {\n const cell = serialize(table[rowIndex][columnIndex])\n\n if (options.alignDelimiters !== false) {\n const size = stringLength(cell)\n sizes[columnIndex] = size\n\n if (\n longestCellByColumn[columnIndex] === undefined ||\n size > longestCellByColumn[columnIndex]\n ) {\n longestCellByColumn[columnIndex] = size\n }\n }\n\n row.push(cell)\n }\n\n cellMatrix[rowIndex] = row\n sizeMatrix[rowIndex] = sizes\n }\n\n // Figure out which alignments to use.\n let columnIndex = -1\n\n if (typeof align === 'object' && 'length' in align) {\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = toAlignment(align[columnIndex])\n }\n } else {\n const code = toAlignment(align)\n\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = code\n }\n }\n\n // Inject the alignment row.\n columnIndex = -1\n /** @type {Array<string>} */\n const row = []\n /** @type {Array<number>} */\n const sizes = []\n\n while (++columnIndex < mostCellsPerRow) {\n const code = alignments[columnIndex]\n let before = ''\n let after = ''\n\n if (code === 99 /* `c` */) {\n before = ':'\n after = ':'\n } else if (code === 108 /* `l` */) {\n before = ':'\n } else if (code === 114 /* `r` */) {\n after = ':'\n }\n\n // There *must* be at least one hyphen-minus in each alignment cell.\n let size =\n options.alignDelimiters === false\n ? 1\n : Math.max(\n 1,\n longestCellByColumn[columnIndex] - before.length - after.length\n )\n\n const cell = before + '-'.repeat(size) + after\n\n if (options.alignDelimiters !== false) {\n size = before.length + size + after.length\n\n if (size > longestCellByColumn[columnIndex]) {\n longestCellByColumn[columnIndex] = size\n }\n\n sizes[columnIndex] = size\n }\n\n row[columnIndex] = cell\n }\n\n // Inject the alignment row.\n cellMatrix.splice(1, 0, row)\n sizeMatrix.splice(1, 0, sizes)\n\n rowIndex = -1\n /** @type {Array<string>} */\n const lines = []\n\n while (++rowIndex < cellMatrix.length) {\n const row = cellMatrix[rowIndex]\n const sizes = sizeMatrix[rowIndex]\n columnIndex = -1\n /** @type {Array<string>} */\n const line = []\n\n while (++columnIndex < mostCellsPerRow) {\n const cell = row[columnIndex] || ''\n let before = ''\n let after = ''\n\n if (options.alignDelimiters !== false) {\n const size =\n longestCellByColumn[columnIndex] - (sizes[columnIndex] || 0)\n const code = alignments[columnIndex]\n\n if (code === 114 /* `r` */) {\n before = ' '.repeat(size)\n } else if (code === 99 /* `c` */) {\n if (size % 2) {\n before = ' '.repeat(size / 2 + 0.5)\n after = ' '.repeat(size / 2 - 0.5)\n } else {\n before = ' '.repeat(size / 2)\n after = before\n }\n } else {\n after = ' '.repeat(size)\n }\n }\n\n if (options.delimiterStart !== false && !columnIndex) {\n line.push('|')\n }\n\n if (\n options.padding !== false &&\n // Don’t add the opening space if we’re not aligning and the cell is\n // empty: there will be a closing space.\n !(options.alignDelimiters === false && cell === '') &&\n (options.delimiterStart !== false || columnIndex)\n ) {\n line.push(' ')\n }\n\n if (options.alignDelimiters !== false) {\n line.push(before)\n }\n\n line.push(cell)\n\n if (options.alignDelimiters !== false) {\n line.push(after)\n }\n\n if (options.padding !== false) {\n line.push(' ')\n }\n\n if (\n options.delimiterEnd !== false ||\n columnIndex !== mostCellsPerRow - 1\n ) {\n line.push('|')\n }\n }\n\n lines.push(\n options.delimiterEnd === false\n ? line.join('').replace(/ +$/, '')\n : line.join('')\n )\n }\n\n return lines.join('\\n')\n}\n\n/**\n * @param {string|null|undefined} [value]\n * @returns {string}\n */\nfunction serialize(value) {\n return value === null || value === undefined ? '' : String(value)\n}\n\n/**\n * @param {string} value\n * @returns {number}\n */\nfunction defaultStringLength(value) {\n return value.length\n}\n\n/**\n * @param {string|null|undefined} value\n * @returns {number}\n */\nfunction toAlignment(value) {\n const code = typeof value === 'string' ? value.codePointAt(0) : 0\n\n return code === 67 /* `C` */ || code === 99 /* `c` */\n ? 99 /* `c` */\n : code === 76 /* `L` */ || code === 108 /* `l` */\n ? 108 /* `l` */\n : code === 82 /* `R` */ || code === 114 /* `r` */\n ? 114 /* `r` */\n : 0\n}\n","/**\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').Map} Map\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {Blockquote} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function blockquote(node, _, state, info) {\n const exit = state.enter('blockquote')\n const tracker = state.createTracker(info)\n tracker.move('> ')\n tracker.shift(2)\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map\n )\n exit()\n return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n return '>' + (blank ? '' : ' ') + line\n}\n","/**\n * @typedef {import('../types.js').ConstructName} ConstructName\n * @typedef {import('../types.js').Unsafe} Unsafe\n */\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe} pattern\n * @returns {boolean}\n */\nexport function patternInScope(stack, pattern) {\n return (\n listInScope(stack, pattern.inConstruct, true) &&\n !listInScope(stack, pattern.notInConstruct, false)\n )\n}\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe['inConstruct']} list\n * @param {boolean} none\n * @returns {boolean}\n */\nfunction listInScope(stack, list, none) {\n if (typeof list === 'string') {\n list = [list]\n }\n\n if (!list || list.length === 0) {\n return none\n }\n\n let index = -1\n\n while (++index < list.length) {\n if (stack.includes(list[index])) {\n return true\n }\n }\n\n return false\n}\n","/**\n * @typedef {import('mdast').Break} Break\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {patternInScope} from '../util/pattern-in-scope.js'\n\n/**\n * @param {Break} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function hardBreak(_, _1, state, info) {\n let index = -1\n\n while (++index < state.unsafe.length) {\n // If we can’t put eols in this construct (setext headings, tables), use a\n // space instead.\n if (\n state.unsafe[index].character === '\\n' &&\n patternInScope(state.stack, state.unsafe[index])\n ) {\n return /[ \\t]/.test(info.before) ? '' : ' '\n }\n }\n\n return '\\\\\\n'\n}\n","/**\n * Get the count of the longest repeating streak of `substring` in `value`.\n *\n * @param {string} value\n * Content to search in.\n * @param {string} substring\n * Substring to look for, typically one character.\n * @returns {number}\n * Count of most frequent adjacent `substring`s in `value`.\n */\nexport function longestStreak(value, substring) {\n const source = String(value)\n let index = source.indexOf(substring)\n let expected = index\n let count = 0\n let max = 0\n\n if (typeof substring !== 'string') {\n throw new TypeError('Expected substring')\n }\n\n while (index !== -1) {\n if (index === expected) {\n if (++count > max) {\n max = count\n }\n } else {\n count = 1\n }\n\n expected = index + substring.length\n index = source.indexOf(substring, expected)\n }\n\n return max\n}\n","/**\n * @typedef {import('mdast').Code} Code\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {Code} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatCodeAsIndented(node, state) {\n return Boolean(\n state.options.fences === false &&\n node.value &&\n // If there’s no info…\n !node.lang &&\n // And there’s a non-whitespace character…\n /[^ \\r\\n]/.test(node.value) &&\n // And the value doesn’t start or end in a blank…\n !/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(node.value)\n )\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['fence'], null | undefined>}\n */\nexport function checkFence(state) {\n const marker = state.options.fence || '`'\n\n if (marker !== '`' && marker !== '~') {\n throw new Error(\n 'Cannot serialize code with `' +\n marker +\n '` for `options.fence`, expected `` ` `` or `~`'\n )\n }\n\n return marker\n}\n","/**\n * @typedef {import('mdast').Code} Code\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').Map} Map\n * @typedef {import('../types.js').State} State\n */\n\nimport {longestStreak} from 'longest-streak'\nimport {formatCodeAsIndented} from '../util/format-code-as-indented.js'\nimport {checkFence} from '../util/check-fence.js'\n\n/**\n * @param {Code} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function code(node, _, state, info) {\n const marker = checkFence(state)\n const raw = node.value || ''\n const suffix = marker === '`' ? 'GraveAccent' : 'Tilde'\n\n if (formatCodeAsIndented(node, state)) {\n const exit = state.enter('codeIndented')\n const value = state.indentLines(raw, map)\n exit()\n return value\n }\n\n const tracker = state.createTracker(info)\n const sequence = marker.repeat(Math.max(longestStreak(raw, marker) + 1, 3))\n const exit = state.enter('codeFenced')\n let value = tracker.move(sequence)\n\n if (node.lang) {\n const subexit = state.enter(`codeFencedLang${suffix}`)\n value += tracker.move(\n state.safe(node.lang, {\n before: value,\n after: ' ',\n encode: ['`'],\n ...tracker.current()\n })\n )\n subexit()\n }\n\n if (node.lang && node.meta) {\n const subexit = state.enter(`codeFencedMeta${suffix}`)\n value += tracker.move(' ')\n value += tracker.move(\n state.safe(node.meta, {\n before: value,\n after: '\\n',\n encode: ['`'],\n ...tracker.current()\n })\n )\n subexit()\n }\n\n value += tracker.move('\\n')\n\n if (raw) {\n value += tracker.move(raw + '\\n')\n }\n\n value += tracker.move(sequence)\n exit()\n return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n return (blank ? '' : ' ') + line\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['quote'], null | undefined>}\n */\nexport function checkQuote(state) {\n const marker = state.options.quote || '\"'\n\n if (marker !== '\"' && marker !== \"'\") {\n throw new Error(\n 'Cannot serialize title with `' +\n marker +\n '` for `options.quote`, expected `\"`, or `\\'`'\n )\n }\n\n return marker\n}\n","/**\n * @typedef {import('mdast').Definition} Definition\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\n/**\n * @param {Definition} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function definition(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const exit = state.enter('definition')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('[')\n value += tracker.move(\n state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n )\n value += tracker.move(']: ')\n\n subexit()\n\n if (\n // If there’s no url, or…\n !node.url ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : '\\n',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n exit()\n\n return value\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['emphasis'], null | undefined>}\n */\nexport function checkEmphasis(state) {\n const marker = state.options.emphasis || '*'\n\n if (marker !== '*' && marker !== '_') {\n throw new Error(\n 'Cannot serialize emphasis with `' +\n marker +\n '` for `options.emphasis`, expected `*`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkEmphasis} from '../util/check-emphasis.js'\n\nemphasis.peek = emphasisPeek\n\n// To do: there are cases where emphasis cannot “form” depending on the\n// previous or next character of sequences.\n// There’s no way around that though, except for injecting zero-width stuff.\n// Do we need to safeguard against that?\n/**\n * @param {Emphasis} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function emphasis(node, _, state, info) {\n const marker = checkEmphasis(state)\n const exit = state.enter('emphasis')\n const tracker = state.createTracker(info)\n let value = tracker.move(marker)\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: marker,\n ...tracker.current()\n })\n )\n value += tracker.move(marker)\n exit()\n return value\n}\n\n/**\n * @param {Emphasis} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction emphasisPeek(_, _1, state) {\n return state.options.emphasis || '*'\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n * Check that an arbitrary value is a node.\n * @param {unknown} this\n * The given context.\n * @param {unknown} [node]\n * Anything (typically a node).\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {boolean}\n * Whether this is a node and passes a test.\n *\n * @typedef {Record<string, unknown> | Node} Props\n * Object to check for equivalence.\n *\n * Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array<Props | TestFunction | string> | Props | TestFunction | string | null | undefined} Test\n * Check for an arbitrary node.\n *\n * @callback TestFunction\n * Check if a node passes a test.\n * @param {unknown} this\n * The given context.\n * @param {Node} node\n * A node.\n * @param {number | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | undefined} [parent]\n * The node’s parent.\n * @returns {boolean | undefined | void}\n * Whether this node passes the test.\n *\n * Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n * Thing to check, typically `Node`.\n * @param {Test} test\n * A check for a specific node.\n * @param {number | null | undefined} index\n * The node’s position in its parent.\n * @param {Parent | null | undefined} parent\n * The node’s parent.\n * @param {unknown} context\n * Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n * Whether `node` is a node and passes a test.\n */\nexport const is =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * (<Condition extends string>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * (<Condition extends Props>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * (<Condition extends TestFunction>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n * ((node?: null | undefined) => false) &\n * ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n * )}\n */\n (\n /**\n * @param {unknown} [node]\n * @param {Test} [test]\n * @param {number | null | undefined} [index]\n * @param {Parent | null | undefined} [parent]\n * @param {unknown} [context]\n * @returns {boolean}\n */\n // eslint-disable-next-line max-params\n function (node, test, index, parent, context) {\n const check = convert(test)\n\n if (\n index !== undefined &&\n index !== null &&\n (typeof index !== 'number' ||\n index < 0 ||\n index === Number.POSITIVE_INFINITY)\n ) {\n throw new Error('Expected positive finite index')\n }\n\n if (\n parent !== undefined &&\n parent !== null &&\n (!is(parent) || !parent.children)\n ) {\n throw new Error('Expected parent node')\n }\n\n if (\n (parent === undefined || parent === null) !==\n (index === undefined || index === null)\n ) {\n throw new Error('Expected both parent and index')\n }\n\n return looksLikeANode(node)\n ? check.call(context, node, index, parent)\n : false\n }\n )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n * * when nullish, checks if `node` is a `Node`.\n * * when `string`, works like passing `(node) => node.type === test`.\n * * when `function` checks if function passed the node is true.\n * * when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n * * when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n * An assertion.\n */\nexport const convert =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n * ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((test?: Test) => Check)\n * )}\n */\n (\n /**\n * @param {Test} [test]\n * @returns {Check}\n */\n function (test) {\n if (test === null || test === undefined) {\n return ok\n }\n\n if (typeof test === 'function') {\n return castFactory(test)\n }\n\n if (typeof test === 'object') {\n return Array.isArray(test) ? anyFactory(test) : propsFactory(test)\n }\n\n if (typeof test === 'string') {\n return typeFactory(test)\n }\n\n throw new Error('Expected function, string, or object as test')\n }\n )\n\n/**\n * @param {Array<Props | TestFunction | string>} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n /** @type {Array<Check>} */\n const checks = []\n let index = -1\n\n while (++index < tests.length) {\n checks[index] = convert(tests[index])\n }\n\n return castFactory(any)\n\n /**\n * @this {unknown}\n * @type {TestFunction}\n */\n function any(...parameters) {\n let index = -1\n\n while (++index < checks.length) {\n if (checks[index].apply(this, parameters)) return true\n }\n\n return false\n }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propsFactory(check) {\n const checkAsRecord = /** @type {Record<string, unknown>} */ (check)\n\n return castFactory(all)\n\n /**\n * @param {Node} node\n * @returns {boolean}\n */\n function all(node) {\n const nodeAsRecord = /** @type {Record<string, unknown>} */ (\n /** @type {unknown} */ (node)\n )\n\n /** @type {string} */\n let key\n\n for (key in check) {\n if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n }\n\n return true\n }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n return castFactory(type)\n\n /**\n * @param {Node} node\n */\n function type(node) {\n return node && node.type === check\n }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n return check\n\n /**\n * @this {unknown}\n * @type {Check}\n */\n function check(value, index, parent) {\n return Boolean(\n looksLikeANode(value) &&\n testFunction.call(\n this,\n value,\n typeof index === 'number' ? index : undefined,\n parent || undefined\n )\n )\n }\n}\n\nfunction ok() {\n return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n return value !== null && typeof value === 'object' && 'type' in value\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate<Check, Value> extends Value\n * ? Predicate<Check, Value>\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends Array<any>\n * ? MatchesOne<Value, Check[keyof Check]>\n * : MatchesOne<Value, Check>\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array<infer Children>}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent<Node, Child>\n * | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {InternalAncestor<InclusiveDescendant<Tree>, Child>} Ancestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} Action\n * Union of the action types.\n *\n * @typedef {number} Index\n * Move to the sibling at `index` next (after node itself is completely\n * traversed).\n *\n * Useful if mutating the tree, such as removing the node the visitor is\n * currently on, or any of its previous siblings.\n * Results less than 0 or greater than or equal to `children.length` stop\n * traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n * List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n * Any value that can be returned from a visitor.\n */\n\n/**\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform the parent of node (the last of `ancestors`).\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of an ancestor still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Array<VisitedParents>} ancestors\n * Ancestors of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Matches<InclusiveDescendant<Tree>, Check>, Ancestor<Tree, Matches<InclusiveDescendant<Tree>, Check>>>} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parents`.\n * @template {UnistNode} [Tree=UnistNode]\n * Tree type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly<ActionTuple>} */\nconst empty = []\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} test\n * `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n * Handle each node.\n * @param {boolean | null | undefined} [reverse]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n /** @type {Test} */\n let check\n\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor\n // @ts-expect-error no visitor given, so `visitor` is test.\n visitor = test\n } else {\n // @ts-expect-error visitor given, so `test` isn’t a visitor.\n check = test\n }\n\n const is = convert(check)\n const step = reverse ? -1 : 1\n\n factory(tree, undefined, [])()\n\n /**\n * @param {UnistNode} node\n * @param {number | undefined} index\n * @param {Array<UnistParent>} parents\n */\n function factory(node, index, parents) {\n const value = /** @type {Record<string, unknown>} */ (\n node && typeof node === 'object' ? node : {}\n )\n\n if (typeof value.type === 'string') {\n const name =\n // `hast`\n typeof value.tagName === 'string'\n ? value.tagName\n : // `xast`\n typeof value.name === 'string'\n ? value.name\n : undefined\n\n Object.defineProperty(visit, 'name', {\n value:\n 'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n })\n }\n\n return visit\n\n function visit() {\n /** @type {Readonly<ActionTuple>} */\n let result = empty\n /** @type {Readonly<ActionTuple>} */\n let subresult\n /** @type {number} */\n let offset\n /** @type {Array<UnistParent>} */\n let grandparents\n\n if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n // @ts-expect-error: `visitor` is now a visitor.\n result = toResult(visitor(node, parents))\n\n if (result[0] === EXIT) {\n return result\n }\n }\n\n if ('children' in node && node.children) {\n const nodeAsParent = /** @type {UnistParent} */ (node)\n\n if (nodeAsParent.children && result[0] !== SKIP) {\n offset = (reverse ? nodeAsParent.children.length : -1) + step\n grandparents = parents.concat(nodeAsParent)\n\n while (offset > -1 && offset < nodeAsParent.children.length) {\n const child = nodeAsParent.children[offset]\n\n subresult = factory(child, offset, grandparents)()\n\n if (subresult[0] === EXIT) {\n return subresult\n }\n\n offset =\n typeof subresult[1] === 'number' ? subresult[1] : offset + step\n }\n }\n }\n\n return result\n }\n }\n}\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n * Valid return values from visitors.\n * @returns {Readonly<ActionTuple>}\n * Clean result.\n */\nfunction toResult(value) {\n if (Array.isArray(value)) {\n return value\n }\n\n if (typeof value === 'number') {\n return [CONTINUE, value]\n }\n\n return value === null || value === undefined ? empty : [value]\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n// To do: use types from `unist-util-visit-parents` when it’s released.\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate<Check, Value> extends Value\n * ? Predicate<Check, Value>\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends Array<any>\n * ? MatchesOne<Value, Check[keyof Check]>\n * : MatchesOne<Value, Check>\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array<infer Children>}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent<Node, Child>\n * | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform `parent`.\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of `parent` still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Visited extends UnistNode ? number | undefined : never} index\n * Index of `node` in `parent`.\n * @param {Ancestor extends UnistParent ? Ancestor | undefined : never} parent\n * Parent of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [Ancestor=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Visited, Parent<Ancestor, Visited>>} BuildVisitorFromMatch\n * Build a typed `Visitor` function from a node and all possible parents.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Visited\n * Node type.\n * @template {UnistParent} Ancestor\n * Parent type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromMatch<\n * Matches<Descendant, Check>,\n * Extract<Descendant, UnistParent>\n * >\n * )} BuildVisitorFromDescendants\n * Build a typed `Visitor` function from a list of descendants and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Descendant\n * Node type.\n * @template {Test} Check\n * Test type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromDescendants<\n * InclusiveDescendant<Tree>,\n * Check\n * >\n * )} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} [Tree=UnistNode]\n * Node type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} testOrVisitor\n * `unist-util-is`-compatible test (optional, omit to pass a visitor).\n * @param {Visitor | boolean | null | undefined} [visitorOrReverse]\n * Handle each node (when test is omitted, pass `reverse`).\n * @param {boolean | null | undefined} [maybeReverse=false]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n /** @type {boolean | null | undefined} */\n let reverse\n /** @type {Test} */\n let test\n /** @type {Visitor} */\n let visitor\n\n if (\n typeof testOrVisitor === 'function' &&\n typeof visitorOrReverse !== 'function'\n ) {\n test = undefined\n visitor = testOrVisitor\n reverse = visitorOrReverse\n } else {\n // @ts-expect-error: assume the overload with test was given.\n test = testOrVisitor\n // @ts-expect-error: assume the overload with test was given.\n visitor = visitorOrReverse\n reverse = maybeReverse\n }\n\n visitParents(tree, test, overload, reverse)\n\n /**\n * @param {UnistNode} node\n * @param {Array<UnistParent>} parents\n */\n function overload(node, parents) {\n const parent = parents[parents.length - 1]\n const index = parent ? parent.children.indexOf(node) : undefined\n return visitor(node, index, parent)\n }\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n *\n * @typedef Options\n * Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n * Whether to use `alt` for `image`s (default: `true`).\n * @property {boolean | null | undefined} [includeHtml=true]\n * Whether to use `value` of HTML (default: `true`).\n */\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node’s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} [value]\n * Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Serialized `value`.\n */\nexport function toString(value, options) {\n const settings = options || emptyOptions\n const includeImageAlt =\n typeof settings.includeImageAlt === 'boolean'\n ? settings.includeImageAlt\n : true\n const includeHtml =\n typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true\n\n return one(value, includeImageAlt, includeHtml)\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n * Thing to serialize.\n * @param {boolean} includeImageAlt\n * Include image `alt`s.\n * @param {boolean} includeHtml\n * Include HTML.\n * @returns {string}\n * Serialized node.\n */\nfunction one(value, includeImageAlt, includeHtml) {\n if (node(value)) {\n if ('value' in value) {\n return value.type === 'html' && !includeHtml ? '' : value.value\n }\n\n if (includeImageAlt && 'alt' in value && value.alt) {\n return value.alt\n }\n\n if ('children' in value) {\n return all(value.children, includeImageAlt, includeHtml)\n }\n }\n\n if (Array.isArray(value)) {\n return all(value, includeImageAlt, includeHtml)\n }\n\n return ''\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array<unknown>} values\n * Thing to serialize.\n * @param {boolean} includeImageAlt\n * Include image `alt`s.\n * @param {boolean} includeHtml\n * Include HTML.\n * @returns {string}\n * Serialized nodes.\n */\nfunction all(values, includeImageAlt, includeHtml) {\n /** @type {Array<string>} */\n const result = []\n let index = -1\n\n while (++index < values.length) {\n result[index] = one(values[index], includeImageAlt, includeHtml)\n }\n\n return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n * Thing.\n * @returns {value is Nodes}\n * Whether `value` is a node.\n */\nfunction node(value) {\n return Boolean(value && typeof value === 'object')\n}\n","/**\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('../types.js').State} State\n */\n\nimport {EXIT, visit} from 'unist-util-visit'\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Heading} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatHeadingAsSetext(node, state) {\n let literalWithBreak = false\n\n // Look for literals with a line break.\n // Note that this also\n visit(node, function (node) {\n if (\n ('value' in node && /\\r?\\n|\\r/.test(node.value)) ||\n node.type === 'break'\n ) {\n literalWithBreak = true\n return EXIT\n }\n })\n\n return Boolean(\n (!node.depth || node.depth < 3) &&\n toString(node) &&\n (state.options.setext || literalWithBreak)\n )\n}\n","/**\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {formatHeadingAsSetext} from '../util/format-heading-as-setext.js'\n\n/**\n * @param {Heading} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function heading(node, _, state, info) {\n const rank = Math.max(Math.min(6, node.depth || 1), 1)\n const tracker = state.createTracker(info)\n\n if (formatHeadingAsSetext(node, state)) {\n const exit = state.enter('headingSetext')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, {\n ...tracker.current(),\n before: '\\n',\n after: '\\n'\n })\n subexit()\n exit()\n\n return (\n value +\n '\\n' +\n (rank === 1 ? '=' : '-').repeat(\n // The whole size…\n value.length -\n // Minus the position of the character after the last EOL (or\n // 0 if there is none)…\n (Math.max(value.lastIndexOf('\\r'), value.lastIndexOf('\\n')) + 1)\n )\n )\n }\n\n const sequence = '#'.repeat(rank)\n const exit = state.enter('headingAtx')\n const subexit = state.enter('phrasing')\n\n // Note: for proper tracking, we should reset the output positions when there\n // is no content returned, because then the space is not output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n tracker.move(sequence + ' ')\n\n let value = state.containerPhrasing(node, {\n before: '# ',\n after: '\\n',\n ...tracker.current()\n })\n\n if (/^[\\t ]/.test(value)) {\n // To do: what effect has the character reference on tracking?\n value =\n '&#x' +\n value.charCodeAt(0).toString(16).toUpperCase() +\n ';' +\n value.slice(1)\n }\n\n value = value ? sequence + ' ' + value : sequence\n\n if (state.options.closeAtx) {\n value += ' ' + sequence\n }\n\n subexit()\n exit()\n\n return value\n}\n","/**\n * @typedef {import('mdast').Html} Html\n */\n\nhtml.peek = htmlPeek\n\n/**\n * @param {Html} node\n * @returns {string}\n */\nexport function html(node) {\n return node.value || ''\n}\n\n/**\n * @returns {string}\n */\nfunction htmlPeek() {\n return '<'\n}\n","/**\n * @typedef {import('mdast').Image} Image\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\nimage.peek = imagePeek\n\n/**\n * @param {Image} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function image(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const exit = state.enter('image')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('![')\n value += tracker.move(\n state.safe(node.alt, {before: value, after: ']', ...tracker.current()})\n )\n value += tracker.move('](')\n\n subexit()\n\n if (\n // If there’s no url but there is a title…\n (!node.url && node.title) ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : ')',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n value += tracker.move(')')\n exit()\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction imagePeek() {\n return '!'\n}\n","/**\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimageReference.peek = imageReferencePeek\n\n/**\n * @param {ImageReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function imageReference(node, _, state, info) {\n const type = node.referenceType\n const exit = state.enter('imageReference')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('![')\n const alt = state.safe(node.alt, {\n before: value,\n after: ']',\n ...tracker.current()\n })\n value += tracker.move(alt + '][')\n\n subexit()\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n subexit = state.enter('reference')\n // Note: for proper tracking, we should reset the output positions when we end\n // up making a `shortcut` reference, because then there is no brace output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n subexit()\n state.stack = stack\n exit()\n\n if (type === 'full' || !alt || alt !== reference) {\n value += tracker.move(reference + ']')\n } else if (type === 'shortcut') {\n // Remove the unwanted `[`.\n value = value.slice(0, -1)\n } else {\n value += tracker.move(']')\n }\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction imageReferencePeek() {\n return '!'\n}\n","/**\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').State} State\n */\n\ninlineCode.peek = inlineCodePeek\n\n/**\n * @param {InlineCode} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nexport function inlineCode(node, _, state) {\n let value = node.value || ''\n let sequence = '`'\n let index = -1\n\n // If there is a single grave accent on its own in the code, use a fence of\n // two.\n // If there are two in a row, use one.\n while (new RegExp('(^|[^`])' + sequence + '([^`]|$)').test(value)) {\n sequence += '`'\n }\n\n // If this is not just spaces or eols (tabs don’t count), and either the\n // first or last character are a space, eol, or tick, then pad with spaces.\n if (\n /[^ \\r\\n]/.test(value) &&\n ((/^[ \\r\\n]/.test(value) && /[ \\r\\n]$/.test(value)) || /^`|`$/.test(value))\n ) {\n value = ' ' + value + ' '\n }\n\n // We have a potential problem: certain characters after eols could result in\n // blocks being seen.\n // For example, if someone injected the string `'\\n# b'`, then that would\n // result in an ATX heading.\n // We can’t escape characters in `inlineCode`, but because eols are\n // transformed to spaces when going from markdown to HTML anyway, we can swap\n // them out.\n while (++index < state.unsafe.length) {\n const pattern = state.unsafe[index]\n const expression = state.compilePattern(pattern)\n /** @type {RegExpExecArray | null} */\n let match\n\n // Only look for `atBreak`s.\n // Btw: note that `atBreak` patterns will always start the regex at LF or\n // CR.\n if (!pattern.atBreak) continue\n\n while ((match = expression.exec(value))) {\n let position = match.index\n\n // Support CRLF (patterns only look for one of the characters).\n if (\n value.charCodeAt(position) === 10 /* `\\n` */ &&\n value.charCodeAt(position - 1) === 13 /* `\\r` */\n ) {\n position--\n }\n\n value = value.slice(0, position) + ' ' + value.slice(match.index + 1)\n }\n }\n\n return sequence + value + sequence\n}\n\n/**\n * @returns {string}\n */\nfunction inlineCodePeek() {\n return '`'\n}\n","/**\n * @typedef {import('mdast').Link} Link\n * @typedef {import('../types.js').State} State\n */\n\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Link} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatLinkAsAutolink(node, state) {\n const raw = toString(node)\n\n return Boolean(\n !state.options.resourceLink &&\n // If there’s a url…\n node.url &&\n // And there’s a no title…\n !node.title &&\n // And the content of `node` is a single text node…\n node.children &&\n node.children.length === 1 &&\n node.children[0].type === 'text' &&\n // And if the url is the same as the content…\n (raw === node.url || 'mailto:' + raw === node.url) &&\n // And that starts w/ a protocol…\n /^[a-z][a-z+.-]+:/i.test(node.url) &&\n // And that doesn’t contain ASCII control codes (character escapes and\n // references don’t work), space, or angle brackets…\n !/[\\0- <>\\u007F]/.test(node.url)\n )\n}\n","/**\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Exit} Exit\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkQuote} from '../util/check-quote.js'\nimport {formatLinkAsAutolink} from '../util/format-link-as-autolink.js'\n\nlink.peek = linkPeek\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function link(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const tracker = state.createTracker(info)\n /** @type {Exit} */\n let exit\n /** @type {Exit} */\n let subexit\n\n if (formatLinkAsAutolink(node, state)) {\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n exit = state.enter('autolink')\n let value = tracker.move('<')\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: '>',\n ...tracker.current()\n })\n )\n value += tracker.move('>')\n exit()\n state.stack = stack\n return value\n }\n\n exit = state.enter('link')\n subexit = state.enter('label')\n let value = tracker.move('[')\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: '](',\n ...tracker.current()\n })\n )\n value += tracker.move('](')\n subexit()\n\n if (\n // If there’s no url but there is a title…\n (!node.url && node.title) ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : ')',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n value += tracker.move(')')\n\n exit()\n return value\n}\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nfunction linkPeek(node, _, state) {\n return formatLinkAsAutolink(node, state) ? '<' : '['\n}\n","/**\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nlinkReference.peek = linkReferencePeek\n\n/**\n * @param {LinkReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function linkReference(node, _, state, info) {\n const type = node.referenceType\n const exit = state.enter('linkReference')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('[')\n const text = state.containerPhrasing(node, {\n before: value,\n after: ']',\n ...tracker.current()\n })\n value += tracker.move(text + '][')\n\n subexit()\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n subexit = state.enter('reference')\n // Note: for proper tracking, we should reset the output positions when we end\n // up making a `shortcut` reference, because then there is no brace output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n subexit()\n state.stack = stack\n exit()\n\n if (type === 'full' || !text || text !== reference) {\n value += tracker.move(reference + ']')\n } else if (type === 'shortcut') {\n // Remove the unwanted `[`.\n value = value.slice(0, -1)\n } else {\n value += tracker.move(']')\n }\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction linkReferencePeek() {\n return '['\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bullet'], null | undefined>}\n */\nexport function checkBullet(state) {\n const marker = state.options.bullet || '*'\n\n if (marker !== '*' && marker !== '+' && marker !== '-') {\n throw new Error(\n 'Cannot serialize items with `' +\n marker +\n '` for `options.bullet`, expected `*`, `+`, or `-`'\n )\n }\n\n return marker\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkBullet} from './check-bullet.js'\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bullet'], null | undefined>}\n */\nexport function checkBulletOther(state) {\n const bullet = checkBullet(state)\n const bulletOther = state.options.bulletOther\n\n if (!bulletOther) {\n return bullet === '*' ? '-' : '*'\n }\n\n if (bulletOther !== '*' && bulletOther !== '+' && bulletOther !== '-') {\n throw new Error(\n 'Cannot serialize items with `' +\n bulletOther +\n '` for `options.bulletOther`, expected `*`, `+`, or `-`'\n )\n }\n\n if (bulletOther === bullet) {\n throw new Error(\n 'Expected `bullet` (`' +\n bullet +\n '`) and `bulletOther` (`' +\n bulletOther +\n '`) to be different'\n )\n }\n\n return bulletOther\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bulletOrdered'], null | undefined>}\n */\nexport function checkBulletOrdered(state) {\n const marker = state.options.bulletOrdered || '.'\n\n if (marker !== '.' && marker !== ')') {\n throw new Error(\n 'Cannot serialize items with `' +\n marker +\n '` for `options.bulletOrdered`, expected `.` or `)`'\n )\n }\n\n return marker\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['rule'], null | undefined>}\n */\nexport function checkRule(state) {\n const marker = state.options.rule || '*'\n\n if (marker !== '*' && marker !== '-' && marker !== '_') {\n throw new Error(\n 'Cannot serialize rules with `' +\n marker +\n '` for `options.rule`, expected `*`, `-`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * @typedef {import('mdast').List} List\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkBulletOther} from '../util/check-bullet-other.js'\nimport {checkBulletOrdered} from '../util/check-bullet-ordered.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {List} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function list(node, parent, state, info) {\n const exit = state.enter('list')\n const bulletCurrent = state.bulletCurrent\n /** @type {string} */\n let bullet = node.ordered ? checkBulletOrdered(state) : checkBullet(state)\n /** @type {string} */\n const bulletOther = node.ordered\n ? bullet === '.'\n ? ')'\n : '.'\n : checkBulletOther(state)\n let useDifferentMarker =\n parent && state.bulletLastUsed ? bullet === state.bulletLastUsed : false\n\n if (!node.ordered) {\n const firstListItem = node.children ? node.children[0] : undefined\n\n // If there’s an empty first list item directly in two list items,\n // we have to use a different bullet:\n //\n // ```markdown\n // * - *\n // ```\n //\n // …because otherwise it would become one big thematic break.\n if (\n // Bullet could be used as a thematic break marker:\n (bullet === '*' || bullet === '-') &&\n // Empty first list item:\n firstListItem &&\n (!firstListItem.children || !firstListItem.children[0]) &&\n // Directly in two other list items:\n state.stack[state.stack.length - 1] === 'list' &&\n state.stack[state.stack.length - 2] === 'listItem' &&\n state.stack[state.stack.length - 3] === 'list' &&\n state.stack[state.stack.length - 4] === 'listItem' &&\n // That are each the first child.\n state.indexStack[state.indexStack.length - 1] === 0 &&\n state.indexStack[state.indexStack.length - 2] === 0 &&\n state.indexStack[state.indexStack.length - 3] === 0\n ) {\n useDifferentMarker = true\n }\n\n // If there’s a thematic break at the start of the first list item,\n // we have to use a different bullet:\n //\n // ```markdown\n // * ---\n // ```\n //\n // …because otherwise it would become one big thematic break.\n if (checkRule(state) === bullet && firstListItem) {\n let index = -1\n\n while (++index < node.children.length) {\n const item = node.children[index]\n\n if (\n item &&\n item.type === 'listItem' &&\n item.children &&\n item.children[0] &&\n item.children[0].type === 'thematicBreak'\n ) {\n useDifferentMarker = true\n break\n }\n }\n }\n }\n\n if (useDifferentMarker) {\n bullet = bulletOther\n }\n\n state.bulletCurrent = bullet\n const value = state.containerFlow(node, info)\n state.bulletLastUsed = bullet\n state.bulletCurrent = bulletCurrent\n exit()\n return value\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['listItemIndent'], null | undefined>}\n */\nexport function checkListItemIndent(state) {\n const style = state.options.listItemIndent || 'one'\n\n if (style !== 'tab' && style !== 'one' && style !== 'mixed') {\n throw new Error(\n 'Cannot serialize items with `' +\n style +\n '` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`'\n )\n }\n\n return style\n}\n","/**\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').Map} Map\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkListItemIndent} from '../util/check-list-item-indent.js'\n\n/**\n * @param {ListItem} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function listItem(node, parent, state, info) {\n const listItemIndent = checkListItemIndent(state)\n let bullet = state.bulletCurrent || checkBullet(state)\n\n // Add the marker value for ordered lists.\n if (parent && parent.type === 'list' && parent.ordered) {\n bullet =\n (typeof parent.start === 'number' && parent.start > -1\n ? parent.start\n : 1) +\n (state.options.incrementListMarker === false\n ? 0\n : parent.children.indexOf(node)) +\n bullet\n }\n\n let size = bullet.length + 1\n\n if (\n listItemIndent === 'tab' ||\n (listItemIndent === 'mixed' &&\n ((parent && parent.type === 'list' && parent.spread) || node.spread))\n ) {\n size = Math.ceil(size / 4) * 4\n }\n\n const tracker = state.createTracker(info)\n tracker.move(bullet + ' '.repeat(size - bullet.length))\n tracker.shift(size)\n const exit = state.enter('listItem')\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map\n )\n exit()\n\n return value\n\n /** @type {Map} */\n function map(line, index, blank) {\n if (index) {\n return (blank ? '' : ' '.repeat(size)) + line\n }\n\n return (blank ? bullet : bullet + ' '.repeat(size - bullet.length)) + line\n }\n}\n","/**\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {Paragraph} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function paragraph(node, _, state, info) {\n const exit = state.enter('paragraph')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, info)\n subexit()\n exit()\n return value\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n * Check that an arbitrary value is a node.\n * @param {unknown} this\n * The given context.\n * @param {unknown} [node]\n * Anything (typically a node).\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {boolean}\n * Whether this is a node and passes a test.\n *\n * @typedef {Record<string, unknown> | Node} Props\n * Object to check for equivalence.\n *\n * Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array<Props | TestFunction | string> | Props | TestFunction | string | null | undefined} Test\n * Check for an arbitrary node.\n *\n * @callback TestFunction\n * Check if a node passes a test.\n * @param {unknown} this\n * The given context.\n * @param {Node} node\n * A node.\n * @param {number | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | undefined} [parent]\n * The node’s parent.\n * @returns {boolean | undefined | void}\n * Whether this node passes the test.\n *\n * Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n * Thing to check, typically `Node`.\n * @param {Test} test\n * A check for a specific node.\n * @param {number | null | undefined} index\n * The node’s position in its parent.\n * @param {Parent | null | undefined} parent\n * The node’s parent.\n * @param {unknown} context\n * Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n * Whether `node` is a node and passes a test.\n */\nexport const is =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * (<Condition extends string>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * (<Condition extends Props>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * (<Condition extends TestFunction>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n * ((node?: null | undefined) => false) &\n * ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n * )}\n */\n (\n /**\n * @param {unknown} [node]\n * @param {Test} [test]\n * @param {number | null | undefined} [index]\n * @param {Parent | null | undefined} [parent]\n * @param {unknown} [context]\n * @returns {boolean}\n */\n // eslint-disable-next-line max-params\n function (node, test, index, parent, context) {\n const check = convert(test)\n\n if (\n index !== undefined &&\n index !== null &&\n (typeof index !== 'number' ||\n index < 0 ||\n index === Number.POSITIVE_INFINITY)\n ) {\n throw new Error('Expected positive finite index')\n }\n\n if (\n parent !== undefined &&\n parent !== null &&\n (!is(parent) || !parent.children)\n ) {\n throw new Error('Expected parent node')\n }\n\n if (\n (parent === undefined || parent === null) !==\n (index === undefined || index === null)\n ) {\n throw new Error('Expected both parent and index')\n }\n\n return looksLikeANode(node)\n ? check.call(context, node, index, parent)\n : false\n }\n )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n * * when nullish, checks if `node` is a `Node`.\n * * when `string`, works like passing `(node) => node.type === test`.\n * * when `function` checks if function passed the node is true.\n * * when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n * * when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n * An assertion.\n */\nexport const convert =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n * ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((test?: Test) => Check)\n * )}\n */\n (\n /**\n * @param {Test} [test]\n * @returns {Check}\n */\n function (test) {\n if (test === null || test === undefined) {\n return ok\n }\n\n if (typeof test === 'function') {\n return castFactory(test)\n }\n\n if (typeof test === 'object') {\n return Array.isArray(test) ? anyFactory(test) : propsFactory(test)\n }\n\n if (typeof test === 'string') {\n return typeFactory(test)\n }\n\n throw new Error('Expected function, string, or object as test')\n }\n )\n\n/**\n * @param {Array<Props | TestFunction | string>} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n /** @type {Array<Check>} */\n const checks = []\n let index = -1\n\n while (++index < tests.length) {\n checks[index] = convert(tests[index])\n }\n\n return castFactory(any)\n\n /**\n * @this {unknown}\n * @type {TestFunction}\n */\n function any(...parameters) {\n let index = -1\n\n while (++index < checks.length) {\n if (checks[index].apply(this, parameters)) return true\n }\n\n return false\n }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propsFactory(check) {\n const checkAsRecord = /** @type {Record<string, unknown>} */ (check)\n\n return castFactory(all)\n\n /**\n * @param {Node} node\n * @returns {boolean}\n */\n function all(node) {\n const nodeAsRecord = /** @type {Record<string, unknown>} */ (\n /** @type {unknown} */ (node)\n )\n\n /** @type {string} */\n let key\n\n for (key in check) {\n if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n }\n\n return true\n }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n return castFactory(type)\n\n /**\n * @param {Node} node\n */\n function type(node) {\n return node && node.type === check\n }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n return check\n\n /**\n * @this {unknown}\n * @type {Check}\n */\n function check(value, index, parent) {\n return Boolean(\n looksLikeANode(value) &&\n testFunction.call(\n this,\n value,\n typeof index === 'number' ? index : undefined,\n parent || undefined\n )\n )\n }\n}\n\nfunction ok() {\n return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n return value !== null && typeof value === 'object' && 'type' in value\n}\n","/**\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n */\n\nimport {convert} from 'unist-util-is'\n\n/**\n * Check if the given value is *phrasing content*.\n *\n * > 👉 **Note**: Excludes `html`, which can be both phrasing or flow.\n *\n * @param node\n * Thing to check, typically `Node`.\n * @returns\n * Whether `value` is phrasing content.\n */\n\nexport const phrasing =\n /** @type {(node?: unknown) => node is PhrasingContent} */\n (\n convert([\n 'break',\n 'delete',\n 'emphasis',\n 'footnote',\n 'footnoteReference',\n 'image',\n 'imageReference',\n 'inlineCode',\n 'link',\n 'linkReference',\n 'strong',\n 'text'\n ])\n )\n","/**\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').Root} Root\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {phrasing} from 'mdast-util-phrasing'\n\n/**\n * @param {Root} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function root(node, _, state, info) {\n // Note: `html` nodes are ambiguous.\n const hasPhrasing = node.children.some(function (d) {\n return phrasing(d)\n })\n const fn = hasPhrasing ? state.containerPhrasing : state.containerFlow\n return fn.call(state, node, info)\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['strong'], null | undefined>}\n */\nexport function checkStrong(state) {\n const marker = state.options.strong || '*'\n\n if (marker !== '*' && marker !== '_') {\n throw new Error(\n 'Cannot serialize strong with `' +\n marker +\n '` for `options.strong`, expected `*`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkStrong} from '../util/check-strong.js'\n\nstrong.peek = strongPeek\n\n// To do: there are cases where emphasis cannot “form” depending on the\n// previous or next character of sequences.\n// There’s no way around that though, except for injecting zero-width stuff.\n// Do we need to safeguard against that?\n/**\n * @param {Strong} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function strong(node, _, state, info) {\n const marker = checkStrong(state)\n const exit = state.enter('strong')\n const tracker = state.createTracker(info)\n let value = tracker.move(marker + marker)\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: marker,\n ...tracker.current()\n })\n )\n value += tracker.move(marker + marker)\n exit()\n return value\n}\n\n/**\n * @param {Strong} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction strongPeek(_, _1, state) {\n return state.options.strong || '*'\n}\n","/**\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').Text} Text\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {Text} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function text(node, _, state, info) {\n return state.safe(node.value, info)\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['ruleRepetition'], null | undefined>}\n */\nexport function checkRuleRepetition(state) {\n const repetition = state.options.ruleRepetition || 3\n\n if (repetition < 3) {\n throw new Error(\n 'Cannot serialize rules with repetition `' +\n repetition +\n '` for `options.ruleRepetition`, expected `3` or more'\n )\n }\n\n return repetition\n}\n","/**\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkRuleRepetition} from '../util/check-rule-repetition.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {ThematicBreak} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nexport function thematicBreak(_, _1, state) {\n const value = (\n checkRule(state) + (state.options.ruleSpaces ? ' ' : '')\n ).repeat(checkRuleRepetition(state))\n\n return state.options.ruleSpaces ? value.slice(0, -1) : value\n}\n","import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {definition} from './definition.js'\nimport {emphasis} from './emphasis.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {image} from './image.js'\nimport {imageReference} from './image-reference.js'\nimport {inlineCode} from './inline-code.js'\nimport {link} from './link.js'\nimport {linkReference} from './link-reference.js'\nimport {list} from './list.js'\nimport {listItem} from './list-item.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default (CommonMark) handlers.\n */\nexport const handle = {\n blockquote,\n break: hardBreak,\n code,\n definition,\n emphasis,\n hardBreak,\n heading,\n html,\n image,\n imageReference,\n inlineCode,\n link,\n linkReference,\n list,\n listItem,\n paragraph,\n root,\n strong,\n text,\n thematicBreak\n}\n","/**\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Table} Table\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('mdast').TableRow} TableRow\n *\n * @typedef {import('markdown-table').Options} MarkdownTableOptions\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').State} State\n * @typedef {import('mdast-util-to-markdown').Info} Info\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [tableCellPadding=true]\n * Whether to add a space of padding between delimiters and cells (default:\n * `true`).\n * @property {boolean | null | undefined} [tablePipeAlign=true]\n * Whether to align the delimiters (default: `true`).\n * @property {MarkdownTableOptions['stringLength'] | null | undefined} [stringLength]\n * Function to detect the length of table cell content, used when aligning\n * the delimiters between cells (optional).\n */\n\nimport {ok as assert} from 'devlop'\nimport {markdownTable} from 'markdown-table'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM tables in\n * markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM tables.\n */\nexport function gfmTableFromMarkdown() {\n return {\n enter: {\n table: enterTable,\n tableData: enterCell,\n tableHeader: enterCell,\n tableRow: enterRow\n },\n exit: {\n codeText: exitCodeText,\n table: exitTable,\n tableData: exit,\n tableHeader: exit,\n tableRow: exit\n }\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterTable(token) {\n const align = token._align\n assert(align, 'expected `_align` on table')\n this.enter(\n {\n type: 'table',\n align: align.map(function (d) {\n return d === 'none' ? null : d\n }),\n children: []\n },\n token\n )\n this.data.inTable = true\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitTable(token) {\n this.exit(token)\n this.data.inTable = undefined\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterRow(token) {\n this.enter({type: 'tableRow', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exit(token) {\n this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterCell(token) {\n this.enter({type: 'tableCell', children: []}, token)\n}\n\n// Overwrite the default code text data handler to unescape escaped pipes when\n// they are in tables.\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCodeText(token) {\n let value = this.resume()\n\n if (this.data.inTable) {\n value = value.replace(/\\\\([\\\\|])/g, replace)\n }\n\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'inlineCode')\n node.value = value\n this.exit(token)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @returns {string}\n */\nfunction replace($0, $1) {\n // Pipes work, backslashes don’t (but can’t escape pipes).\n return $1 === '|' ? $1 : $0\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM tables in\n * markdown.\n *\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM tables.\n */\nexport function gfmTableToMarkdown(options) {\n const settings = options || {}\n const padding = settings.tableCellPadding\n const alignDelimiters = settings.tablePipeAlign\n const stringLength = settings.stringLength\n const around = padding ? ' ' : '|'\n\n return {\n unsafe: [\n {character: '\\r', inConstruct: 'tableCell'},\n {character: '\\n', inConstruct: 'tableCell'},\n // A pipe, when followed by a tab or space (padding), or a dash or colon\n // (unpadded delimiter row), could result in a table.\n {atBreak: true, character: '|', after: '[\\t :-]'},\n // A pipe in a cell must be encoded.\n {character: '|', inConstruct: 'tableCell'},\n // A colon must be followed by a dash, in which case it could start a\n // delimiter row.\n {atBreak: true, character: ':', after: '-'},\n // A delimiter row can also start with a dash, when followed by more\n // dashes, a colon, or a pipe.\n // This is a stricter version than the built in check for lists, thematic\n // breaks, and setex heading underlines though:\n // <https://github.com/syntax-tree/mdast-util-to-markdown/blob/51a2038/lib/unsafe.js#L57>\n {atBreak: true, character: '-', after: '[:|-]'}\n ],\n handlers: {\n inlineCode: inlineCodeWithTable,\n table: handleTable,\n tableCell: handleTableCell,\n tableRow: handleTableRow\n }\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {Table} node\n */\n function handleTable(node, _, state, info) {\n return serializeData(handleTableAsData(node, state, info), node.align)\n }\n\n /**\n * This function isn’t really used normally, because we handle rows at the\n * table level.\n * But, if someone passes in a table row, this ensures we make somewhat sense.\n *\n * @type {ToMarkdownHandle}\n * @param {TableRow} node\n */\n function handleTableRow(node, _, state, info) {\n const row = handleTableRowAsData(node, state, info)\n const value = serializeData([row])\n // `markdown-table` will always add an align row\n return value.slice(0, value.indexOf('\\n'))\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {TableCell} node\n */\n function handleTableCell(node, _, state, info) {\n const exit = state.enter('tableCell')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, {\n ...info,\n before: around,\n after: around\n })\n subexit()\n exit()\n return value\n }\n\n /**\n * @param {Array<Array<string>>} matrix\n * @param {Array<string | null | undefined> | null | undefined} [align]\n */\n function serializeData(matrix, align) {\n return markdownTable(matrix, {\n align,\n // @ts-expect-error: `markdown-table` types should support `null`.\n alignDelimiters,\n // @ts-expect-error: `markdown-table` types should support `null`.\n padding,\n // @ts-expect-error: `markdown-table` types should support `null`.\n stringLength\n })\n }\n\n /**\n * @param {Table} node\n * @param {State} state\n * @param {Info} info\n */\n function handleTableAsData(node, state, info) {\n const children = node.children\n let index = -1\n /** @type {Array<Array<string>>} */\n const result = []\n const subexit = state.enter('table')\n\n while (++index < children.length) {\n result[index] = handleTableRowAsData(children[index], state, info)\n }\n\n subexit()\n\n return result\n }\n\n /**\n * @param {TableRow} node\n * @param {State} state\n * @param {Info} info\n */\n function handleTableRowAsData(node, state, info) {\n const children = node.children\n let index = -1\n /** @type {Array<string>} */\n const result = []\n const subexit = state.enter('tableRow')\n\n while (++index < children.length) {\n // Note: the positional info as used here is incorrect.\n // Making it correct would be impossible due to aligning cells?\n // And it would need copy/pasting `markdown-table` into this project.\n result[index] = handleTableCell(children[index], node, state, info)\n }\n\n subexit()\n\n return result\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {InlineCode} node\n */\n function inlineCodeWithTable(node, parent, state) {\n let value = defaultHandlers.inlineCode(node, parent, state)\n\n if (state.stack.includes('tableCell')) {\n value = value.replace(/\\|/g, '\\\\$&')\n }\n\n return value\n }\n}\n","/**\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').Map} Map\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {Blockquote} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function blockquote(node, _, state, info) {\n const exit = state.enter('blockquote')\n const tracker = state.createTracker(info)\n tracker.move('> ')\n tracker.shift(2)\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map\n )\n exit()\n return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n return '>' + (blank ? '' : ' ') + line\n}\n","/**\n * @typedef {import('../types.js').ConstructName} ConstructName\n * @typedef {import('../types.js').Unsafe} Unsafe\n */\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe} pattern\n * @returns {boolean}\n */\nexport function patternInScope(stack, pattern) {\n return (\n listInScope(stack, pattern.inConstruct, true) &&\n !listInScope(stack, pattern.notInConstruct, false)\n )\n}\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe['inConstruct']} list\n * @param {boolean} none\n * @returns {boolean}\n */\nfunction listInScope(stack, list, none) {\n if (typeof list === 'string') {\n list = [list]\n }\n\n if (!list || list.length === 0) {\n return none\n }\n\n let index = -1\n\n while (++index < list.length) {\n if (stack.includes(list[index])) {\n return true\n }\n }\n\n return false\n}\n","/**\n * @typedef {import('mdast').Break} Break\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {patternInScope} from '../util/pattern-in-scope.js'\n\n/**\n * @param {Break} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function hardBreak(_, _1, state, info) {\n let index = -1\n\n while (++index < state.unsafe.length) {\n // If we can’t put eols in this construct (setext headings, tables), use a\n // space instead.\n if (\n state.unsafe[index].character === '\\n' &&\n patternInScope(state.stack, state.unsafe[index])\n ) {\n return /[ \\t]/.test(info.before) ? '' : ' '\n }\n }\n\n return '\\\\\\n'\n}\n","/**\n * Get the count of the longest repeating streak of `substring` in `value`.\n *\n * @param {string} value\n * Content to search in.\n * @param {string} substring\n * Substring to look for, typically one character.\n * @returns {number}\n * Count of most frequent adjacent `substring`s in `value`.\n */\nexport function longestStreak(value, substring) {\n const source = String(value)\n let index = source.indexOf(substring)\n let expected = index\n let count = 0\n let max = 0\n\n if (typeof substring !== 'string') {\n throw new TypeError('Expected substring')\n }\n\n while (index !== -1) {\n if (index === expected) {\n if (++count > max) {\n max = count\n }\n } else {\n count = 1\n }\n\n expected = index + substring.length\n index = source.indexOf(substring, expected)\n }\n\n return max\n}\n","/**\n * @typedef {import('mdast').Code} Code\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {Code} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatCodeAsIndented(node, state) {\n return Boolean(\n state.options.fences === false &&\n node.value &&\n // If there’s no info…\n !node.lang &&\n // And there’s a non-whitespace character…\n /[^ \\r\\n]/.test(node.value) &&\n // And the value doesn’t start or end in a blank…\n !/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(node.value)\n )\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['fence'], null | undefined>}\n */\nexport function checkFence(state) {\n const marker = state.options.fence || '`'\n\n if (marker !== '`' && marker !== '~') {\n throw new Error(\n 'Cannot serialize code with `' +\n marker +\n '` for `options.fence`, expected `` ` `` or `~`'\n )\n }\n\n return marker\n}\n","/**\n * @typedef {import('mdast').Code} Code\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').Map} Map\n * @typedef {import('../types.js').State} State\n */\n\nimport {longestStreak} from 'longest-streak'\nimport {formatCodeAsIndented} from '../util/format-code-as-indented.js'\nimport {checkFence} from '../util/check-fence.js'\n\n/**\n * @param {Code} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function code(node, _, state, info) {\n const marker = checkFence(state)\n const raw = node.value || ''\n const suffix = marker === '`' ? 'GraveAccent' : 'Tilde'\n\n if (formatCodeAsIndented(node, state)) {\n const exit = state.enter('codeIndented')\n const value = state.indentLines(raw, map)\n exit()\n return value\n }\n\n const tracker = state.createTracker(info)\n const sequence = marker.repeat(Math.max(longestStreak(raw, marker) + 1, 3))\n const exit = state.enter('codeFenced')\n let value = tracker.move(sequence)\n\n if (node.lang) {\n const subexit = state.enter(`codeFencedLang${suffix}`)\n value += tracker.move(\n state.safe(node.lang, {\n before: value,\n after: ' ',\n encode: ['`'],\n ...tracker.current()\n })\n )\n subexit()\n }\n\n if (node.lang && node.meta) {\n const subexit = state.enter(`codeFencedMeta${suffix}`)\n value += tracker.move(' ')\n value += tracker.move(\n state.safe(node.meta, {\n before: value,\n after: '\\n',\n encode: ['`'],\n ...tracker.current()\n })\n )\n subexit()\n }\n\n value += tracker.move('\\n')\n\n if (raw) {\n value += tracker.move(raw + '\\n')\n }\n\n value += tracker.move(sequence)\n exit()\n return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n return (blank ? '' : ' ') + line\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['quote'], null | undefined>}\n */\nexport function checkQuote(state) {\n const marker = state.options.quote || '\"'\n\n if (marker !== '\"' && marker !== \"'\") {\n throw new Error(\n 'Cannot serialize title with `' +\n marker +\n '` for `options.quote`, expected `\"`, or `\\'`'\n )\n }\n\n return marker\n}\n","/**\n * @typedef {import('mdast').Definition} Definition\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\n/**\n * @param {Definition} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function definition(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const exit = state.enter('definition')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('[')\n value += tracker.move(\n state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n )\n value += tracker.move(']: ')\n\n subexit()\n\n if (\n // If there’s no url, or…\n !node.url ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : '\\n',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n exit()\n\n return value\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['emphasis'], null | undefined>}\n */\nexport function checkEmphasis(state) {\n const marker = state.options.emphasis || '*'\n\n if (marker !== '*' && marker !== '_') {\n throw new Error(\n 'Cannot serialize emphasis with `' +\n marker +\n '` for `options.emphasis`, expected `*`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkEmphasis} from '../util/check-emphasis.js'\n\nemphasis.peek = emphasisPeek\n\n// To do: there are cases where emphasis cannot “form” depending on the\n// previous or next character of sequences.\n// There’s no way around that though, except for injecting zero-width stuff.\n// Do we need to safeguard against that?\n/**\n * @param {Emphasis} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function emphasis(node, _, state, info) {\n const marker = checkEmphasis(state)\n const exit = state.enter('emphasis')\n const tracker = state.createTracker(info)\n let value = tracker.move(marker)\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: marker,\n ...tracker.current()\n })\n )\n value += tracker.move(marker)\n exit()\n return value\n}\n\n/**\n * @param {Emphasis} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction emphasisPeek(_, _1, state) {\n return state.options.emphasis || '*'\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n * Check that an arbitrary value is a node.\n * @param {unknown} this\n * The given context.\n * @param {unknown} [node]\n * Anything (typically a node).\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {boolean}\n * Whether this is a node and passes a test.\n *\n * @typedef {Record<string, unknown> | Node} Props\n * Object to check for equivalence.\n *\n * Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array<Props | TestFunction | string> | Props | TestFunction | string | null | undefined} Test\n * Check for an arbitrary node.\n *\n * @callback TestFunction\n * Check if a node passes a test.\n * @param {unknown} this\n * The given context.\n * @param {Node} node\n * A node.\n * @param {number | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | undefined} [parent]\n * The node’s parent.\n * @returns {boolean | undefined | void}\n * Whether this node passes the test.\n *\n * Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n * Thing to check, typically `Node`.\n * @param {Test} test\n * A check for a specific node.\n * @param {number | null | undefined} index\n * The node’s position in its parent.\n * @param {Parent | null | undefined} parent\n * The node’s parent.\n * @param {unknown} context\n * Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n * Whether `node` is a node and passes a test.\n */\nexport const is =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * (<Condition extends string>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * (<Condition extends Props>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * (<Condition extends TestFunction>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n * ((node?: null | undefined) => false) &\n * ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n * )}\n */\n (\n /**\n * @param {unknown} [node]\n * @param {Test} [test]\n * @param {number | null | undefined} [index]\n * @param {Parent | null | undefined} [parent]\n * @param {unknown} [context]\n * @returns {boolean}\n */\n // eslint-disable-next-line max-params\n function (node, test, index, parent, context) {\n const check = convert(test)\n\n if (\n index !== undefined &&\n index !== null &&\n (typeof index !== 'number' ||\n index < 0 ||\n index === Number.POSITIVE_INFINITY)\n ) {\n throw new Error('Expected positive finite index')\n }\n\n if (\n parent !== undefined &&\n parent !== null &&\n (!is(parent) || !parent.children)\n ) {\n throw new Error('Expected parent node')\n }\n\n if (\n (parent === undefined || parent === null) !==\n (index === undefined || index === null)\n ) {\n throw new Error('Expected both parent and index')\n }\n\n return looksLikeANode(node)\n ? check.call(context, node, index, parent)\n : false\n }\n )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n * * when nullish, checks if `node` is a `Node`.\n * * when `string`, works like passing `(node) => node.type === test`.\n * * when `function` checks if function passed the node is true.\n * * when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n * * when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n * An assertion.\n */\nexport const convert =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n * ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((test?: Test) => Check)\n * )}\n */\n (\n /**\n * @param {Test} [test]\n * @returns {Check}\n */\n function (test) {\n if (test === null || test === undefined) {\n return ok\n }\n\n if (typeof test === 'function') {\n return castFactory(test)\n }\n\n if (typeof test === 'object') {\n return Array.isArray(test) ? anyFactory(test) : propsFactory(test)\n }\n\n if (typeof test === 'string') {\n return typeFactory(test)\n }\n\n throw new Error('Expected function, string, or object as test')\n }\n )\n\n/**\n * @param {Array<Props | TestFunction | string>} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n /** @type {Array<Check>} */\n const checks = []\n let index = -1\n\n while (++index < tests.length) {\n checks[index] = convert(tests[index])\n }\n\n return castFactory(any)\n\n /**\n * @this {unknown}\n * @type {TestFunction}\n */\n function any(...parameters) {\n let index = -1\n\n while (++index < checks.length) {\n if (checks[index].apply(this, parameters)) return true\n }\n\n return false\n }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propsFactory(check) {\n const checkAsRecord = /** @type {Record<string, unknown>} */ (check)\n\n return castFactory(all)\n\n /**\n * @param {Node} node\n * @returns {boolean}\n */\n function all(node) {\n const nodeAsRecord = /** @type {Record<string, unknown>} */ (\n /** @type {unknown} */ (node)\n )\n\n /** @type {string} */\n let key\n\n for (key in check) {\n if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n }\n\n return true\n }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n return castFactory(type)\n\n /**\n * @param {Node} node\n */\n function type(node) {\n return node && node.type === check\n }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n return check\n\n /**\n * @this {unknown}\n * @type {Check}\n */\n function check(value, index, parent) {\n return Boolean(\n looksLikeANode(value) &&\n testFunction.call(\n this,\n value,\n typeof index === 'number' ? index : undefined,\n parent || undefined\n )\n )\n }\n}\n\nfunction ok() {\n return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n return value !== null && typeof value === 'object' && 'type' in value\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate<Check, Value> extends Value\n * ? Predicate<Check, Value>\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends Array<any>\n * ? MatchesOne<Value, Check[keyof Check]>\n * : MatchesOne<Value, Check>\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array<infer Children>}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent<Node, Child>\n * | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {InternalAncestor<InclusiveDescendant<Tree>, Child>} Ancestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} Action\n * Union of the action types.\n *\n * @typedef {number} Index\n * Move to the sibling at `index` next (after node itself is completely\n * traversed).\n *\n * Useful if mutating the tree, such as removing the node the visitor is\n * currently on, or any of its previous siblings.\n * Results less than 0 or greater than or equal to `children.length` stop\n * traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n * List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n * Any value that can be returned from a visitor.\n */\n\n/**\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform the parent of node (the last of `ancestors`).\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of an ancestor still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Array<VisitedParents>} ancestors\n * Ancestors of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Matches<InclusiveDescendant<Tree>, Check>, Ancestor<Tree, Matches<InclusiveDescendant<Tree>, Check>>>} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parents`.\n * @template {UnistNode} [Tree=UnistNode]\n * Tree type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly<ActionTuple>} */\nconst empty = []\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} test\n * `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n * Handle each node.\n * @param {boolean | null | undefined} [reverse]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n /** @type {Test} */\n let check\n\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor\n // @ts-expect-error no visitor given, so `visitor` is test.\n visitor = test\n } else {\n // @ts-expect-error visitor given, so `test` isn’t a visitor.\n check = test\n }\n\n const is = convert(check)\n const step = reverse ? -1 : 1\n\n factory(tree, undefined, [])()\n\n /**\n * @param {UnistNode} node\n * @param {number | undefined} index\n * @param {Array<UnistParent>} parents\n */\n function factory(node, index, parents) {\n const value = /** @type {Record<string, unknown>} */ (\n node && typeof node === 'object' ? node : {}\n )\n\n if (typeof value.type === 'string') {\n const name =\n // `hast`\n typeof value.tagName === 'string'\n ? value.tagName\n : // `xast`\n typeof value.name === 'string'\n ? value.name\n : undefined\n\n Object.defineProperty(visit, 'name', {\n value:\n 'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n })\n }\n\n return visit\n\n function visit() {\n /** @type {Readonly<ActionTuple>} */\n let result = empty\n /** @type {Readonly<ActionTuple>} */\n let subresult\n /** @type {number} */\n let offset\n /** @type {Array<UnistParent>} */\n let grandparents\n\n if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n // @ts-expect-error: `visitor` is now a visitor.\n result = toResult(visitor(node, parents))\n\n if (result[0] === EXIT) {\n return result\n }\n }\n\n if ('children' in node && node.children) {\n const nodeAsParent = /** @type {UnistParent} */ (node)\n\n if (nodeAsParent.children && result[0] !== SKIP) {\n offset = (reverse ? nodeAsParent.children.length : -1) + step\n grandparents = parents.concat(nodeAsParent)\n\n while (offset > -1 && offset < nodeAsParent.children.length) {\n const child = nodeAsParent.children[offset]\n\n subresult = factory(child, offset, grandparents)()\n\n if (subresult[0] === EXIT) {\n return subresult\n }\n\n offset =\n typeof subresult[1] === 'number' ? subresult[1] : offset + step\n }\n }\n }\n\n return result\n }\n }\n}\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n * Valid return values from visitors.\n * @returns {Readonly<ActionTuple>}\n * Clean result.\n */\nfunction toResult(value) {\n if (Array.isArray(value)) {\n return value\n }\n\n if (typeof value === 'number') {\n return [CONTINUE, value]\n }\n\n return value === null || value === undefined ? empty : [value]\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n// To do: use types from `unist-util-visit-parents` when it’s released.\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate<Check, Value> extends Value\n * ? Predicate<Check, Value>\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends Array<any>\n * ? MatchesOne<Value, Check[keyof Check]>\n * : MatchesOne<Value, Check>\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array<infer Children>}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent<Node, Child>\n * | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform `parent`.\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of `parent` still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Visited extends UnistNode ? number | undefined : never} index\n * Index of `node` in `parent`.\n * @param {Ancestor extends UnistParent ? Ancestor | undefined : never} parent\n * Parent of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [Ancestor=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Visited, Parent<Ancestor, Visited>>} BuildVisitorFromMatch\n * Build a typed `Visitor` function from a node and all possible parents.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Visited\n * Node type.\n * @template {UnistParent} Ancestor\n * Parent type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromMatch<\n * Matches<Descendant, Check>,\n * Extract<Descendant, UnistParent>\n * >\n * )} BuildVisitorFromDescendants\n * Build a typed `Visitor` function from a list of descendants and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Descendant\n * Node type.\n * @template {Test} Check\n * Test type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromDescendants<\n * InclusiveDescendant<Tree>,\n * Check\n * >\n * )} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} [Tree=UnistNode]\n * Node type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} testOrVisitor\n * `unist-util-is`-compatible test (optional, omit to pass a visitor).\n * @param {Visitor | boolean | null | undefined} [visitorOrReverse]\n * Handle each node (when test is omitted, pass `reverse`).\n * @param {boolean | null | undefined} [maybeReverse=false]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n /** @type {boolean | null | undefined} */\n let reverse\n /** @type {Test} */\n let test\n /** @type {Visitor} */\n let visitor\n\n if (\n typeof testOrVisitor === 'function' &&\n typeof visitorOrReverse !== 'function'\n ) {\n test = undefined\n visitor = testOrVisitor\n reverse = visitorOrReverse\n } else {\n // @ts-expect-error: assume the overload with test was given.\n test = testOrVisitor\n // @ts-expect-error: assume the overload with test was given.\n visitor = visitorOrReverse\n reverse = maybeReverse\n }\n\n visitParents(tree, test, overload, reverse)\n\n /**\n * @param {UnistNode} node\n * @param {Array<UnistParent>} parents\n */\n function overload(node, parents) {\n const parent = parents[parents.length - 1]\n const index = parent ? parent.children.indexOf(node) : undefined\n return visitor(node, index, parent)\n }\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n *\n * @typedef Options\n * Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n * Whether to use `alt` for `image`s (default: `true`).\n * @property {boolean | null | undefined} [includeHtml=true]\n * Whether to use `value` of HTML (default: `true`).\n */\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node’s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} [value]\n * Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Serialized `value`.\n */\nexport function toString(value, options) {\n const settings = options || emptyOptions\n const includeImageAlt =\n typeof settings.includeImageAlt === 'boolean'\n ? settings.includeImageAlt\n : true\n const includeHtml =\n typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true\n\n return one(value, includeImageAlt, includeHtml)\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n * Thing to serialize.\n * @param {boolean} includeImageAlt\n * Include image `alt`s.\n * @param {boolean} includeHtml\n * Include HTML.\n * @returns {string}\n * Serialized node.\n */\nfunction one(value, includeImageAlt, includeHtml) {\n if (node(value)) {\n if ('value' in value) {\n return value.type === 'html' && !includeHtml ? '' : value.value\n }\n\n if (includeImageAlt && 'alt' in value && value.alt) {\n return value.alt\n }\n\n if ('children' in value) {\n return all(value.children, includeImageAlt, includeHtml)\n }\n }\n\n if (Array.isArray(value)) {\n return all(value, includeImageAlt, includeHtml)\n }\n\n return ''\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array<unknown>} values\n * Thing to serialize.\n * @param {boolean} includeImageAlt\n * Include image `alt`s.\n * @param {boolean} includeHtml\n * Include HTML.\n * @returns {string}\n * Serialized nodes.\n */\nfunction all(values, includeImageAlt, includeHtml) {\n /** @type {Array<string>} */\n const result = []\n let index = -1\n\n while (++index < values.length) {\n result[index] = one(values[index], includeImageAlt, includeHtml)\n }\n\n return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n * Thing.\n * @returns {value is Nodes}\n * Whether `value` is a node.\n */\nfunction node(value) {\n return Boolean(value && typeof value === 'object')\n}\n","/**\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('../types.js').State} State\n */\n\nimport {EXIT, visit} from 'unist-util-visit'\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Heading} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatHeadingAsSetext(node, state) {\n let literalWithBreak = false\n\n // Look for literals with a line break.\n // Note that this also\n visit(node, function (node) {\n if (\n ('value' in node && /\\r?\\n|\\r/.test(node.value)) ||\n node.type === 'break'\n ) {\n literalWithBreak = true\n return EXIT\n }\n })\n\n return Boolean(\n (!node.depth || node.depth < 3) &&\n toString(node) &&\n (state.options.setext || literalWithBreak)\n )\n}\n","/**\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {formatHeadingAsSetext} from '../util/format-heading-as-setext.js'\n\n/**\n * @param {Heading} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function heading(node, _, state, info) {\n const rank = Math.max(Math.min(6, node.depth || 1), 1)\n const tracker = state.createTracker(info)\n\n if (formatHeadingAsSetext(node, state)) {\n const exit = state.enter('headingSetext')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, {\n ...tracker.current(),\n before: '\\n',\n after: '\\n'\n })\n subexit()\n exit()\n\n return (\n value +\n '\\n' +\n (rank === 1 ? '=' : '-').repeat(\n // The whole size…\n value.length -\n // Minus the position of the character after the last EOL (or\n // 0 if there is none)…\n (Math.max(value.lastIndexOf('\\r'), value.lastIndexOf('\\n')) + 1)\n )\n )\n }\n\n const sequence = '#'.repeat(rank)\n const exit = state.enter('headingAtx')\n const subexit = state.enter('phrasing')\n\n // Note: for proper tracking, we should reset the output positions when there\n // is no content returned, because then the space is not output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n tracker.move(sequence + ' ')\n\n let value = state.containerPhrasing(node, {\n before: '# ',\n after: '\\n',\n ...tracker.current()\n })\n\n if (/^[\\t ]/.test(value)) {\n // To do: what effect has the character reference on tracking?\n value =\n '&#x' +\n value.charCodeAt(0).toString(16).toUpperCase() +\n ';' +\n value.slice(1)\n }\n\n value = value ? sequence + ' ' + value : sequence\n\n if (state.options.closeAtx) {\n value += ' ' + sequence\n }\n\n subexit()\n exit()\n\n return value\n}\n","/**\n * @typedef {import('mdast').Html} Html\n */\n\nhtml.peek = htmlPeek\n\n/**\n * @param {Html} node\n * @returns {string}\n */\nexport function html(node) {\n return node.value || ''\n}\n\n/**\n * @returns {string}\n */\nfunction htmlPeek() {\n return '<'\n}\n","/**\n * @typedef {import('mdast').Image} Image\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\nimage.peek = imagePeek\n\n/**\n * @param {Image} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function image(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const exit = state.enter('image')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('![')\n value += tracker.move(\n state.safe(node.alt, {before: value, after: ']', ...tracker.current()})\n )\n value += tracker.move('](')\n\n subexit()\n\n if (\n // If there’s no url but there is a title…\n (!node.url && node.title) ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : ')',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n value += tracker.move(')')\n exit()\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction imagePeek() {\n return '!'\n}\n","/**\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimageReference.peek = imageReferencePeek\n\n/**\n * @param {ImageReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function imageReference(node, _, state, info) {\n const type = node.referenceType\n const exit = state.enter('imageReference')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('![')\n const alt = state.safe(node.alt, {\n before: value,\n after: ']',\n ...tracker.current()\n })\n value += tracker.move(alt + '][')\n\n subexit()\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n subexit = state.enter('reference')\n // Note: for proper tracking, we should reset the output positions when we end\n // up making a `shortcut` reference, because then there is no brace output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n subexit()\n state.stack = stack\n exit()\n\n if (type === 'full' || !alt || alt !== reference) {\n value += tracker.move(reference + ']')\n } else if (type === 'shortcut') {\n // Remove the unwanted `[`.\n value = value.slice(0, -1)\n } else {\n value += tracker.move(']')\n }\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction imageReferencePeek() {\n return '!'\n}\n","/**\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').State} State\n */\n\ninlineCode.peek = inlineCodePeek\n\n/**\n * @param {InlineCode} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nexport function inlineCode(node, _, state) {\n let value = node.value || ''\n let sequence = '`'\n let index = -1\n\n // If there is a single grave accent on its own in the code, use a fence of\n // two.\n // If there are two in a row, use one.\n while (new RegExp('(^|[^`])' + sequence + '([^`]|$)').test(value)) {\n sequence += '`'\n }\n\n // If this is not just spaces or eols (tabs don’t count), and either the\n // first or last character are a space, eol, or tick, then pad with spaces.\n if (\n /[^ \\r\\n]/.test(value) &&\n ((/^[ \\r\\n]/.test(value) && /[ \\r\\n]$/.test(value)) || /^`|`$/.test(value))\n ) {\n value = ' ' + value + ' '\n }\n\n // We have a potential problem: certain characters after eols could result in\n // blocks being seen.\n // For example, if someone injected the string `'\\n# b'`, then that would\n // result in an ATX heading.\n // We can’t escape characters in `inlineCode`, but because eols are\n // transformed to spaces when going from markdown to HTML anyway, we can swap\n // them out.\n while (++index < state.unsafe.length) {\n const pattern = state.unsafe[index]\n const expression = state.compilePattern(pattern)\n /** @type {RegExpExecArray | null} */\n let match\n\n // Only look for `atBreak`s.\n // Btw: note that `atBreak` patterns will always start the regex at LF or\n // CR.\n if (!pattern.atBreak) continue\n\n while ((match = expression.exec(value))) {\n let position = match.index\n\n // Support CRLF (patterns only look for one of the characters).\n if (\n value.charCodeAt(position) === 10 /* `\\n` */ &&\n value.charCodeAt(position - 1) === 13 /* `\\r` */\n ) {\n position--\n }\n\n value = value.slice(0, position) + ' ' + value.slice(match.index + 1)\n }\n }\n\n return sequence + value + sequence\n}\n\n/**\n * @returns {string}\n */\nfunction inlineCodePeek() {\n return '`'\n}\n","/**\n * @typedef {import('mdast').Link} Link\n * @typedef {import('../types.js').State} State\n */\n\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Link} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatLinkAsAutolink(node, state) {\n const raw = toString(node)\n\n return Boolean(\n !state.options.resourceLink &&\n // If there’s a url…\n node.url &&\n // And there’s a no title…\n !node.title &&\n // And the content of `node` is a single text node…\n node.children &&\n node.children.length === 1 &&\n node.children[0].type === 'text' &&\n // And if the url is the same as the content…\n (raw === node.url || 'mailto:' + raw === node.url) &&\n // And that starts w/ a protocol…\n /^[a-z][a-z+.-]+:/i.test(node.url) &&\n // And that doesn’t contain ASCII control codes (character escapes and\n // references don’t work), space, or angle brackets…\n !/[\\0- <>\\u007F]/.test(node.url)\n )\n}\n","/**\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Exit} Exit\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkQuote} from '../util/check-quote.js'\nimport {formatLinkAsAutolink} from '../util/format-link-as-autolink.js'\n\nlink.peek = linkPeek\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function link(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const tracker = state.createTracker(info)\n /** @type {Exit} */\n let exit\n /** @type {Exit} */\n let subexit\n\n if (formatLinkAsAutolink(node, state)) {\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n exit = state.enter('autolink')\n let value = tracker.move('<')\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: '>',\n ...tracker.current()\n })\n )\n value += tracker.move('>')\n exit()\n state.stack = stack\n return value\n }\n\n exit = state.enter('link')\n subexit = state.enter('label')\n let value = tracker.move('[')\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: '](',\n ...tracker.current()\n })\n )\n value += tracker.move('](')\n subexit()\n\n if (\n // If there’s no url but there is a title…\n (!node.url && node.title) ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : ')',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n value += tracker.move(')')\n\n exit()\n return value\n}\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nfunction linkPeek(node, _, state) {\n return formatLinkAsAutolink(node, state) ? '<' : '['\n}\n","/**\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nlinkReference.peek = linkReferencePeek\n\n/**\n * @param {LinkReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function linkReference(node, _, state, info) {\n const type = node.referenceType\n const exit = state.enter('linkReference')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('[')\n const text = state.containerPhrasing(node, {\n before: value,\n after: ']',\n ...tracker.current()\n })\n value += tracker.move(text + '][')\n\n subexit()\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n subexit = state.enter('reference')\n // Note: for proper tracking, we should reset the output positions when we end\n // up making a `shortcut` reference, because then there is no brace output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n subexit()\n state.stack = stack\n exit()\n\n if (type === 'full' || !text || text !== reference) {\n value += tracker.move(reference + ']')\n } else if (type === 'shortcut') {\n // Remove the unwanted `[`.\n value = value.slice(0, -1)\n } else {\n value += tracker.move(']')\n }\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction linkReferencePeek() {\n return '['\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bullet'], null | undefined>}\n */\nexport function checkBullet(state) {\n const marker = state.options.bullet || '*'\n\n if (marker !== '*' && marker !== '+' && marker !== '-') {\n throw new Error(\n 'Cannot serialize items with `' +\n marker +\n '` for `options.bullet`, expected `*`, `+`, or `-`'\n )\n }\n\n return marker\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkBullet} from './check-bullet.js'\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bullet'], null | undefined>}\n */\nexport function checkBulletOther(state) {\n const bullet = checkBullet(state)\n const bulletOther = state.options.bulletOther\n\n if (!bulletOther) {\n return bullet === '*' ? '-' : '*'\n }\n\n if (bulletOther !== '*' && bulletOther !== '+' && bulletOther !== '-') {\n throw new Error(\n 'Cannot serialize items with `' +\n bulletOther +\n '` for `options.bulletOther`, expected `*`, `+`, or `-`'\n )\n }\n\n if (bulletOther === bullet) {\n throw new Error(\n 'Expected `bullet` (`' +\n bullet +\n '`) and `bulletOther` (`' +\n bulletOther +\n '`) to be different'\n )\n }\n\n return bulletOther\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bulletOrdered'], null | undefined>}\n */\nexport function checkBulletOrdered(state) {\n const marker = state.options.bulletOrdered || '.'\n\n if (marker !== '.' && marker !== ')') {\n throw new Error(\n 'Cannot serialize items with `' +\n marker +\n '` for `options.bulletOrdered`, expected `.` or `)`'\n )\n }\n\n return marker\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['rule'], null | undefined>}\n */\nexport function checkRule(state) {\n const marker = state.options.rule || '*'\n\n if (marker !== '*' && marker !== '-' && marker !== '_') {\n throw new Error(\n 'Cannot serialize rules with `' +\n marker +\n '` for `options.rule`, expected `*`, `-`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * @typedef {import('mdast').List} List\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkBulletOther} from '../util/check-bullet-other.js'\nimport {checkBulletOrdered} from '../util/check-bullet-ordered.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {List} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function list(node, parent, state, info) {\n const exit = state.enter('list')\n const bulletCurrent = state.bulletCurrent\n /** @type {string} */\n let bullet = node.ordered ? checkBulletOrdered(state) : checkBullet(state)\n /** @type {string} */\n const bulletOther = node.ordered\n ? bullet === '.'\n ? ')'\n : '.'\n : checkBulletOther(state)\n let useDifferentMarker =\n parent && state.bulletLastUsed ? bullet === state.bulletLastUsed : false\n\n if (!node.ordered) {\n const firstListItem = node.children ? node.children[0] : undefined\n\n // If there’s an empty first list item directly in two list items,\n // we have to use a different bullet:\n //\n // ```markdown\n // * - *\n // ```\n //\n // …because otherwise it would become one big thematic break.\n if (\n // Bullet could be used as a thematic break marker:\n (bullet === '*' || bullet === '-') &&\n // Empty first list item:\n firstListItem &&\n (!firstListItem.children || !firstListItem.children[0]) &&\n // Directly in two other list items:\n state.stack[state.stack.length - 1] === 'list' &&\n state.stack[state.stack.length - 2] === 'listItem' &&\n state.stack[state.stack.length - 3] === 'list' &&\n state.stack[state.stack.length - 4] === 'listItem' &&\n // That are each the first child.\n state.indexStack[state.indexStack.length - 1] === 0 &&\n state.indexStack[state.indexStack.length - 2] === 0 &&\n state.indexStack[state.indexStack.length - 3] === 0\n ) {\n useDifferentMarker = true\n }\n\n // If there’s a thematic break at the start of the first list item,\n // we have to use a different bullet:\n //\n // ```markdown\n // * ---\n // ```\n //\n // …because otherwise it would become one big thematic break.\n if (checkRule(state) === bullet && firstListItem) {\n let index = -1\n\n while (++index < node.children.length) {\n const item = node.children[index]\n\n if (\n item &&\n item.type === 'listItem' &&\n item.children &&\n item.children[0] &&\n item.children[0].type === 'thematicBreak'\n ) {\n useDifferentMarker = true\n break\n }\n }\n }\n }\n\n if (useDifferentMarker) {\n bullet = bulletOther\n }\n\n state.bulletCurrent = bullet\n const value = state.containerFlow(node, info)\n state.bulletLastUsed = bullet\n state.bulletCurrent = bulletCurrent\n exit()\n return value\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['listItemIndent'], null | undefined>}\n */\nexport function checkListItemIndent(state) {\n const style = state.options.listItemIndent || 'one'\n\n if (style !== 'tab' && style !== 'one' && style !== 'mixed') {\n throw new Error(\n 'Cannot serialize items with `' +\n style +\n '` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`'\n )\n }\n\n return style\n}\n","/**\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').Map} Map\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkListItemIndent} from '../util/check-list-item-indent.js'\n\n/**\n * @param {ListItem} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function listItem(node, parent, state, info) {\n const listItemIndent = checkListItemIndent(state)\n let bullet = state.bulletCurrent || checkBullet(state)\n\n // Add the marker value for ordered lists.\n if (parent && parent.type === 'list' && parent.ordered) {\n bullet =\n (typeof parent.start === 'number' && parent.start > -1\n ? parent.start\n : 1) +\n (state.options.incrementListMarker === false\n ? 0\n : parent.children.indexOf(node)) +\n bullet\n }\n\n let size = bullet.length + 1\n\n if (\n listItemIndent === 'tab' ||\n (listItemIndent === 'mixed' &&\n ((parent && parent.type === 'list' && parent.spread) || node.spread))\n ) {\n size = Math.ceil(size / 4) * 4\n }\n\n const tracker = state.createTracker(info)\n tracker.move(bullet + ' '.repeat(size - bullet.length))\n tracker.shift(size)\n const exit = state.enter('listItem')\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map\n )\n exit()\n\n return value\n\n /** @type {Map} */\n function map(line, index, blank) {\n if (index) {\n return (blank ? '' : ' '.repeat(size)) + line\n }\n\n return (blank ? bullet : bullet + ' '.repeat(size - bullet.length)) + line\n }\n}\n","/**\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {Paragraph} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function paragraph(node, _, state, info) {\n const exit = state.enter('paragraph')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, info)\n subexit()\n exit()\n return value\n}\n","/**\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').Root} Root\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {phrasing} from 'mdast-util-phrasing'\n\n/**\n * @param {Root} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function root(node, _, state, info) {\n // Note: `html` nodes are ambiguous.\n const hasPhrasing = node.children.some(function (d) {\n return phrasing(d)\n })\n const fn = hasPhrasing ? state.containerPhrasing : state.containerFlow\n return fn.call(state, node, info)\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['strong'], null | undefined>}\n */\nexport function checkStrong(state) {\n const marker = state.options.strong || '*'\n\n if (marker !== '*' && marker !== '_') {\n throw new Error(\n 'Cannot serialize strong with `' +\n marker +\n '` for `options.strong`, expected `*`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkStrong} from '../util/check-strong.js'\n\nstrong.peek = strongPeek\n\n// To do: there are cases where emphasis cannot “form” depending on the\n// previous or next character of sequences.\n// There’s no way around that though, except for injecting zero-width stuff.\n// Do we need to safeguard against that?\n/**\n * @param {Strong} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function strong(node, _, state, info) {\n const marker = checkStrong(state)\n const exit = state.enter('strong')\n const tracker = state.createTracker(info)\n let value = tracker.move(marker + marker)\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: marker,\n ...tracker.current()\n })\n )\n value += tracker.move(marker + marker)\n exit()\n return value\n}\n\n/**\n * @param {Strong} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction strongPeek(_, _1, state) {\n return state.options.strong || '*'\n}\n","/**\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').Text} Text\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {Text} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function text(node, _, state, info) {\n return state.safe(node.value, info)\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['ruleRepetition'], null | undefined>}\n */\nexport function checkRuleRepetition(state) {\n const repetition = state.options.ruleRepetition || 3\n\n if (repetition < 3) {\n throw new Error(\n 'Cannot serialize rules with repetition `' +\n repetition +\n '` for `options.ruleRepetition`, expected `3` or more'\n )\n }\n\n return repetition\n}\n","/**\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkRuleRepetition} from '../util/check-rule-repetition.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {ThematicBreak} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nexport function thematicBreak(_, _1, state) {\n const value = (\n checkRule(state) + (state.options.ruleSpaces ? ' ' : '')\n ).repeat(checkRuleRepetition(state))\n\n return state.options.ruleSpaces ? value.slice(0, -1) : value\n}\n","import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {definition} from './definition.js'\nimport {emphasis} from './emphasis.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {image} from './image.js'\nimport {imageReference} from './image-reference.js'\nimport {inlineCode} from './inline-code.js'\nimport {link} from './link.js'\nimport {linkReference} from './link-reference.js'\nimport {list} from './list.js'\nimport {listItem} from './list-item.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default (CommonMark) handlers.\n */\nexport const handle = {\n blockquote,\n break: hardBreak,\n code,\n definition,\n emphasis,\n hardBreak,\n heading,\n html,\n image,\n imageReference,\n inlineCode,\n link,\n linkReference,\n list,\n listItem,\n paragraph,\n root,\n strong,\n text,\n thematicBreak\n}\n","/**\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n */\n\nimport {ok as assert} from 'devlop'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM task\n * list items in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemFromMarkdown() {\n return {\n exit: {\n taskListCheckValueChecked: exitCheck,\n taskListCheckValueUnchecked: exitCheck,\n paragraph: exitParagraphWithTaskListItem\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM task list\n * items in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemToMarkdown() {\n return {\n unsafe: [{atBreak: true, character: '-', after: '[:|-]'}],\n handlers: {listItem: listItemWithTaskListItem}\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCheck(token) {\n // We’re always in a paragraph, in a list item.\n const node = this.stack[this.stack.length - 2]\n assert(node.type === 'listItem')\n node.checked = token.type === 'taskListCheckValueChecked'\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitParagraphWithTaskListItem(token) {\n const parent = this.stack[this.stack.length - 2]\n\n if (\n parent &&\n parent.type === 'listItem' &&\n typeof parent.checked === 'boolean'\n ) {\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'paragraph')\n const head = node.children[0]\n\n if (head && head.type === 'text') {\n const siblings = parent.children\n let index = -1\n /** @type {Paragraph | undefined} */\n let firstParaghraph\n\n while (++index < siblings.length) {\n const sibling = siblings[index]\n if (sibling.type === 'paragraph') {\n firstParaghraph = sibling\n break\n }\n }\n\n if (firstParaghraph === node) {\n // Must start with a space or a tab.\n head.value = head.value.slice(1)\n\n if (head.value.length === 0) {\n node.children.shift()\n } else if (\n node.position &&\n head.position &&\n typeof head.position.start.offset === 'number'\n ) {\n head.position.start.column++\n head.position.start.offset++\n node.position.start = Object.assign({}, head.position.start)\n }\n }\n }\n }\n\n this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {ListItem} node\n */\nfunction listItemWithTaskListItem(node, parent, state, info) {\n const head = node.children[0]\n const checkable =\n typeof node.checked === 'boolean' && head && head.type === 'paragraph'\n const checkbox = '[' + (node.checked ? 'x' : ' ') + '] '\n const tracker = state.createTracker(info)\n\n if (checkable) {\n tracker.move(checkbox)\n }\n\n let value = defaultHandlers.listItem(node, parent, state, {\n ...info,\n ...tracker.current()\n })\n\n if (checkable) {\n value = value.replace(/^(?:[*+-]|\\d+\\.)([\\r\\n]| {1,3})/, check)\n }\n\n return value\n\n /**\n * @param {string} $0\n * @returns {string}\n */\n function check($0) {\n return $0 + checkbox\n }\n}\n","/**\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\n/**\n * @typedef {import('mdast-util-gfm-table').Options} Options\n * Configuration.\n */\n\nimport {\n gfmAutolinkLiteralFromMarkdown,\n gfmAutolinkLiteralToMarkdown\n} from 'mdast-util-gfm-autolink-literal'\nimport {\n gfmFootnoteFromMarkdown,\n gfmFootnoteToMarkdown\n} from 'mdast-util-gfm-footnote'\nimport {\n gfmStrikethroughFromMarkdown,\n gfmStrikethroughToMarkdown\n} from 'mdast-util-gfm-strikethrough'\nimport {gfmTableFromMarkdown, gfmTableToMarkdown} from 'mdast-util-gfm-table'\nimport {\n gfmTaskListItemFromMarkdown,\n gfmTaskListItemToMarkdown\n} from 'mdast-util-gfm-task-list-item'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @returns {Array<FromMarkdownExtension>}\n * Extension for `mdast-util-from-markdown` to enable GFM (autolink literals,\n * footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmFromMarkdown() {\n return [\n gfmAutolinkLiteralFromMarkdown(),\n gfmFootnoteFromMarkdown(),\n gfmStrikethroughFromMarkdown(),\n gfmTableFromMarkdown(),\n gfmTaskListItemFromMarkdown()\n ]\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM (autolink literals,\n * footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmToMarkdown(options) {\n return {\n extensions: [\n gfmAutolinkLiteralToMarkdown(),\n gfmFootnoteToMarkdown(),\n gfmStrikethroughToMarkdown(),\n gfmTableToMarkdown(options),\n gfmTaskListItemToMarkdown()\n ]\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Previous} Previous\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {\n asciiAlpha,\n asciiAlphanumeric,\n asciiControl,\n markdownLineEndingOrSpace,\n unicodePunctuation,\n unicodeWhitespace\n} from 'micromark-util-character'\nconst wwwPrefix = {\n tokenize: tokenizeWwwPrefix,\n partial: true\n}\nconst domain = {\n tokenize: tokenizeDomain,\n partial: true\n}\nconst path = {\n tokenize: tokenizePath,\n partial: true\n}\nconst trail = {\n tokenize: tokenizeTrail,\n partial: true\n}\nconst emailDomainDotTrail = {\n tokenize: tokenizeEmailDomainDotTrail,\n partial: true\n}\nconst wwwAutolink = {\n tokenize: tokenizeWwwAutolink,\n previous: previousWww\n}\nconst protocolAutolink = {\n tokenize: tokenizeProtocolAutolink,\n previous: previousProtocol\n}\nconst emailAutolink = {\n tokenize: tokenizeEmailAutolink,\n previous: previousEmail\n}\n\n/** @type {ConstructRecord} */\nconst text = {}\n\n/**\n * Create an extension for `micromark` to support GitHub autolink literal\n * syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * autolink literal syntax.\n */\nexport function gfmAutolinkLiteral() {\n return {\n text\n }\n}\n\n/** @type {Code} */\nlet code = 48\n\n// Add alphanumerics.\nwhile (code < 123) {\n text[code] = emailAutolink\n code++\n if (code === 58) code = 65\n else if (code === 91) code = 97\n}\ntext[43] = emailAutolink\ntext[45] = emailAutolink\ntext[46] = emailAutolink\ntext[95] = emailAutolink\ntext[72] = [emailAutolink, protocolAutolink]\ntext[104] = [emailAutolink, protocolAutolink]\ntext[87] = [emailAutolink, wwwAutolink]\ntext[119] = [emailAutolink, wwwAutolink]\n\n// To do: perform email autolink literals on events, afterwards.\n// That’s where `markdown-rs` and `cmark-gfm` perform it.\n// It should look for `@`, then for atext backwards, and then for a label\n// forwards.\n// To do: `mailto:`, `xmpp:` protocol as prefix.\n\n/**\n * Email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailAutolink(effects, ok, nok) {\n const self = this\n /** @type {boolean | undefined} */\n let dot\n /** @type {boolean} */\n let data\n return start\n\n /**\n * Start of email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (\n !gfmAtext(code) ||\n !previousEmail.call(self, self.previous) ||\n previousUnbalanced(self.events)\n ) {\n return nok(code)\n }\n effects.enter('literalAutolink')\n effects.enter('literalAutolinkEmail')\n return atext(code)\n }\n\n /**\n * In email atext.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function atext(code) {\n if (gfmAtext(code)) {\n effects.consume(code)\n return atext\n }\n if (code === 64) {\n effects.consume(code)\n return emailDomain\n }\n return nok(code)\n }\n\n /**\n * In email domain.\n *\n * The reference code is a bit overly complex as it handles the `@`, of which\n * there may be just one.\n * Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L318>\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomain(code) {\n // Dot followed by alphanumerical (not `-` or `_`).\n if (code === 46) {\n return effects.check(\n emailDomainDotTrail,\n emailDomainAfter,\n emailDomainDot\n )(code)\n }\n\n // Alphanumerical, `-`, and `_`.\n if (code === 45 || code === 95 || asciiAlphanumeric(code)) {\n data = true\n effects.consume(code)\n return emailDomain\n }\n\n // To do: `/` if xmpp.\n\n // Note: normally we’d truncate trailing punctuation from the link.\n // However, email autolink literals cannot contain any of those markers,\n // except for `.`, but that can only occur if it isn’t trailing.\n // So we can ignore truncating!\n return emailDomainAfter(code)\n }\n\n /**\n * In email domain, on dot that is not a trail.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomainDot(code) {\n effects.consume(code)\n dot = true\n return emailDomain\n }\n\n /**\n * After email domain.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomainAfter(code) {\n // Domain must not be empty, must include a dot, and must end in alphabetical.\n // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L332>.\n if (data && dot && asciiAlpha(self.previous)) {\n effects.exit('literalAutolinkEmail')\n effects.exit('literalAutolink')\n return ok(code)\n }\n return nok(code)\n }\n}\n\n/**\n * `www` autolink literal.\n *\n * ```markdown\n * > | a www.example.org b\n * ^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwAutolink(effects, ok, nok) {\n const self = this\n return wwwStart\n\n /**\n * Start of www autolink literal.\n *\n * ```markdown\n * > | www.example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwStart(code) {\n if (\n (code !== 87 && code !== 119) ||\n !previousWww.call(self, self.previous) ||\n previousUnbalanced(self.events)\n ) {\n return nok(code)\n }\n effects.enter('literalAutolink')\n effects.enter('literalAutolinkWww')\n // Note: we *check*, so we can discard the `www.` we parsed.\n // If it worked, we consider it as a part of the domain.\n return effects.check(\n wwwPrefix,\n effects.attempt(domain, effects.attempt(path, wwwAfter), nok),\n nok\n )(code)\n }\n\n /**\n * After a www autolink literal.\n *\n * ```markdown\n * > | www.example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwAfter(code) {\n effects.exit('literalAutolinkWww')\n effects.exit('literalAutolink')\n return ok(code)\n }\n}\n\n/**\n * Protocol autolink literal.\n *\n * ```markdown\n * > | a https://example.org b\n * ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeProtocolAutolink(effects, ok, nok) {\n const self = this\n let buffer = ''\n let seen = false\n return protocolStart\n\n /**\n * Start of protocol autolink literal.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function protocolStart(code) {\n if (\n (code === 72 || code === 104) &&\n previousProtocol.call(self, self.previous) &&\n !previousUnbalanced(self.events)\n ) {\n effects.enter('literalAutolink')\n effects.enter('literalAutolinkHttp')\n buffer += String.fromCodePoint(code)\n effects.consume(code)\n return protocolPrefixInside\n }\n return nok(code)\n }\n\n /**\n * In protocol.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^^^^^\n * ```\n *\n * @type {State}\n */\n function protocolPrefixInside(code) {\n // `5` is size of `https`\n if (asciiAlpha(code) && buffer.length < 5) {\n // @ts-expect-error: definitely number.\n buffer += String.fromCodePoint(code)\n effects.consume(code)\n return protocolPrefixInside\n }\n if (code === 58) {\n const protocol = buffer.toLowerCase()\n if (protocol === 'http' || protocol === 'https') {\n effects.consume(code)\n return protocolSlashesInside\n }\n }\n return nok(code)\n }\n\n /**\n * In slashes.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^^\n * ```\n *\n * @type {State}\n */\n function protocolSlashesInside(code) {\n if (code === 47) {\n effects.consume(code)\n if (seen) {\n return afterProtocol\n }\n seen = true\n return protocolSlashesInside\n }\n return nok(code)\n }\n\n /**\n * After protocol, before domain.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function afterProtocol(code) {\n // To do: this is different from `markdown-rs`:\n // https://github.com/wooorm/markdown-rs/blob/b3a921c761309ae00a51fe348d8a43adbc54b518/src/construct/gfm_autolink_literal.rs#L172-L182\n return code === null ||\n asciiControl(code) ||\n markdownLineEndingOrSpace(code) ||\n unicodeWhitespace(code) ||\n unicodePunctuation(code)\n ? nok(code)\n : effects.attempt(domain, effects.attempt(path, protocolAfter), nok)(code)\n }\n\n /**\n * After a protocol autolink literal.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function protocolAfter(code) {\n effects.exit('literalAutolinkHttp')\n effects.exit('literalAutolink')\n return ok(code)\n }\n}\n\n/**\n * `www` prefix.\n *\n * ```markdown\n * > | a www.example.org b\n * ^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwPrefix(effects, ok, nok) {\n let size = 0\n return wwwPrefixInside\n\n /**\n * In www prefix.\n *\n * ```markdown\n * > | www.example.com\n * ^^^^\n * ```\n *\n * @type {State}\n */\n function wwwPrefixInside(code) {\n if ((code === 87 || code === 119) && size < 3) {\n size++\n effects.consume(code)\n return wwwPrefixInside\n }\n if (code === 46 && size === 3) {\n effects.consume(code)\n return wwwPrefixAfter\n }\n return nok(code)\n }\n\n /**\n * After www prefix.\n *\n * ```markdown\n * > | www.example.com\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwPrefixAfter(code) {\n // If there is *anything*, we can link.\n return code === null ? nok(code) : ok(code)\n }\n}\n\n/**\n * Domain.\n *\n * ```markdown\n * > | a https://example.org b\n * ^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDomain(effects, ok, nok) {\n /** @type {boolean | undefined} */\n let underscoreInLastSegment\n /** @type {boolean | undefined} */\n let underscoreInLastLastSegment\n /** @type {boolean | undefined} */\n let seen\n return domainInside\n\n /**\n * In domain.\n *\n * ```markdown\n * > | https://example.com/a\n * ^^^^^^^^^^^\n * ```\n *\n * @type {State}\n */\n function domainInside(code) {\n // Check whether this marker, which is a trailing punctuation\n // marker, optionally followed by more trailing markers, and then\n // followed by an end.\n if (code === 46 || code === 95) {\n return effects.check(trail, domainAfter, domainAtPunctuation)(code)\n }\n\n // GH documents that only alphanumerics (other than `-`, `.`, and `_`) can\n // occur, which sounds like ASCII only, but they also support `www.點看.com`,\n // so that’s Unicode.\n // Instead of some new production for Unicode alphanumerics, markdown\n // already has that for Unicode punctuation and whitespace, so use those.\n // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L12>.\n if (\n code === null ||\n markdownLineEndingOrSpace(code) ||\n unicodeWhitespace(code) ||\n (code !== 45 && unicodePunctuation(code))\n ) {\n return domainAfter(code)\n }\n seen = true\n effects.consume(code)\n return domainInside\n }\n\n /**\n * In domain, at potential trailing punctuation, that was not trailing.\n *\n * ```markdown\n * > | https://example.com\n * ^\n * ```\n *\n * @type {State}\n */\n function domainAtPunctuation(code) {\n // There is an underscore in the last segment of the domain\n if (code === 95) {\n underscoreInLastSegment = true\n }\n // Otherwise, it’s a `.`: save the last segment underscore in the\n // penultimate segment slot.\n else {\n underscoreInLastLastSegment = underscoreInLastSegment\n underscoreInLastSegment = undefined\n }\n effects.consume(code)\n return domainInside\n }\n\n /**\n * After domain.\n *\n * ```markdown\n * > | https://example.com/a\n * ^\n * ```\n *\n * @type {State} */\n function domainAfter(code) {\n // Note: that’s GH says a dot is needed, but it’s not true:\n // <https://github.com/github/cmark-gfm/issues/279>\n if (underscoreInLastLastSegment || underscoreInLastSegment || !seen) {\n return nok(code)\n }\n return ok(code)\n }\n}\n\n/**\n * Path.\n *\n * ```markdown\n * > | a https://example.org/stuff b\n * ^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePath(effects, ok) {\n let sizeOpen = 0\n let sizeClose = 0\n return pathInside\n\n /**\n * In path.\n *\n * ```markdown\n * > | https://example.com/a\n * ^^\n * ```\n *\n * @type {State}\n */\n function pathInside(code) {\n if (code === 40) {\n sizeOpen++\n effects.consume(code)\n return pathInside\n }\n\n // To do: `markdown-rs` also needs this.\n // If this is a paren, and there are less closings than openings,\n // we don’t check for a trail.\n if (code === 41 && sizeClose < sizeOpen) {\n return pathAtPunctuation(code)\n }\n\n // Check whether this trailing punctuation marker is optionally\n // followed by more trailing markers, and then followed\n // by an end.\n if (\n code === 33 ||\n code === 34 ||\n code === 38 ||\n code === 39 ||\n code === 41 ||\n code === 42 ||\n code === 44 ||\n code === 46 ||\n code === 58 ||\n code === 59 ||\n code === 60 ||\n code === 63 ||\n code === 93 ||\n code === 95 ||\n code === 126\n ) {\n return effects.check(trail, ok, pathAtPunctuation)(code)\n }\n if (\n code === null ||\n markdownLineEndingOrSpace(code) ||\n unicodeWhitespace(code)\n ) {\n return ok(code)\n }\n effects.consume(code)\n return pathInside\n }\n\n /**\n * In path, at potential trailing punctuation, that was not trailing.\n *\n * ```markdown\n * > | https://example.com/a\"b\n * ^\n * ```\n *\n * @type {State}\n */\n function pathAtPunctuation(code) {\n // Count closing parens.\n if (code === 41) {\n sizeClose++\n }\n effects.consume(code)\n return pathInside\n }\n}\n\n/**\n * Trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the entire trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | https://example.com\").\n * ^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTrail(effects, ok, nok) {\n return trail\n\n /**\n * In trail of domain or path.\n *\n * ```markdown\n * > | https://example.com\").\n * ^\n * ```\n *\n * @type {State}\n */\n function trail(code) {\n // Regular trailing punctuation.\n if (\n code === 33 ||\n code === 34 ||\n code === 39 ||\n code === 41 ||\n code === 42 ||\n code === 44 ||\n code === 46 ||\n code === 58 ||\n code === 59 ||\n code === 63 ||\n code === 95 ||\n code === 126\n ) {\n effects.consume(code)\n return trail\n }\n\n // `&` followed by one or more alphabeticals and then a `;`, is\n // as a whole considered as trailing punctuation.\n // In all other cases, it is considered as continuation of the URL.\n if (code === 38) {\n effects.consume(code)\n return trailCharRefStart\n }\n\n // Needed because we allow literals after `[`, as we fix:\n // <https://github.com/github/cmark-gfm/issues/278>.\n // Check that it is not followed by `(` or `[`.\n if (code === 93) {\n effects.consume(code)\n return trailBracketAfter\n }\n if (\n // `<` is an end.\n code === 60 ||\n // So is whitespace.\n code === null ||\n markdownLineEndingOrSpace(code) ||\n unicodeWhitespace(code)\n ) {\n return ok(code)\n }\n return nok(code)\n }\n\n /**\n * In trail, after `]`.\n *\n * > 👉 **Note**: this deviates from `cmark-gfm` to fix a bug.\n * > See end of <https://github.com/github/cmark-gfm/issues/278> for more.\n *\n * ```markdown\n * > | https://example.com](\n * ^\n * ```\n *\n * @type {State}\n */\n function trailBracketAfter(code) {\n // Whitespace or something that could start a resource or reference is the end.\n // Switch back to trail otherwise.\n if (\n code === null ||\n code === 40 ||\n code === 91 ||\n markdownLineEndingOrSpace(code) ||\n unicodeWhitespace(code)\n ) {\n return ok(code)\n }\n return trail(code)\n }\n\n /**\n * In character-reference like trail, after `&`.\n *\n * ```markdown\n * > | https://example.com&).\n * ^\n * ```\n *\n * @type {State}\n */\n function trailCharRefStart(code) {\n // When non-alpha, it’s not a trail.\n return asciiAlpha(code) ? trailCharRefInside(code) : nok(code)\n }\n\n /**\n * In character-reference like trail.\n *\n * ```markdown\n * > | https://example.com&).\n * ^\n * ```\n *\n * @type {State}\n */\n function trailCharRefInside(code) {\n // Switch back to trail if this is well-formed.\n if (code === 59) {\n effects.consume(code)\n return trail\n }\n if (asciiAlpha(code)) {\n effects.consume(code)\n return trailCharRefInside\n }\n\n // It’s not a trail.\n return nok(code)\n }\n}\n\n/**\n * Dot in email domain trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | contact@example.org.\n * ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailDomainDotTrail(effects, ok, nok) {\n return start\n\n /**\n * Dot.\n *\n * ```markdown\n * > | contact@example.org.\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Must be dot.\n effects.consume(code)\n return after\n }\n\n /**\n * After dot.\n *\n * ```markdown\n * > | contact@example.org.\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // Not a trail if alphanumeric.\n return asciiAlphanumeric(code) ? nok(code) : ok(code)\n }\n}\n\n/**\n * See:\n * <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L156>.\n *\n * @type {Previous}\n */\nfunction previousWww(code) {\n return (\n code === null ||\n code === 40 ||\n code === 42 ||\n code === 95 ||\n code === 91 ||\n code === 93 ||\n code === 126 ||\n markdownLineEndingOrSpace(code)\n )\n}\n\n/**\n * See:\n * <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L214>.\n *\n * @type {Previous}\n */\nfunction previousProtocol(code) {\n return !asciiAlpha(code)\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previousEmail(code) {\n // Do not allow a slash “inside” atext.\n // The reference code is a bit weird, but that’s what it results in.\n // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L307>.\n // Other than slash, every preceding character is allowed.\n return !(code === 47 || gfmAtext(code))\n}\n\n/**\n * @param {Code} code\n * @returns {boolean}\n */\nfunction gfmAtext(code) {\n return (\n code === 43 ||\n code === 45 ||\n code === 46 ||\n code === 95 ||\n asciiAlphanumeric(code)\n )\n}\n\n/**\n * @param {Array<Event>} events\n * @returns {boolean}\n */\nfunction previousUnbalanced(events) {\n let index = events.length\n let result = false\n while (index--) {\n const token = events[index][1]\n if (\n (token.type === 'labelLink' || token.type === 'labelImage') &&\n !token._balanced\n ) {\n result = true\n break\n }\n\n // If we’ve seen this token, and it was marked as not having any unbalanced\n // bracket before it, we can exit.\n if (token._gfmAutolinkLiteralWalkedInto) {\n result = false\n break\n }\n }\n if (events.length > 0 && !result) {\n // Mark the last token as “walked into” w/o finding\n // anything.\n events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true\n }\n return result\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {blankLine} from 'micromark-core-commonmark'\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEndingOrSpace} from 'micromark-util-character'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nconst indent = {\n tokenize: tokenizeIndent,\n partial: true\n}\n\n// To do: micromark should support a `_hiddenGfmFootnoteSupport`, which only\n// affects label start (image).\n// That will let us drop `tokenizePotentialGfmFootnote*`.\n// It currently has a `_hiddenFootnoteSupport`, which affects that and more.\n// That can be removed when `micromark-extension-footnote` is archived.\n\n/**\n * Create an extension for `micromark` to enable GFM footnote syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to\n * enable GFM footnote syntax.\n */\nexport function gfmFootnote() {\n /** @type {Extension} */\n return {\n document: {\n [91]: {\n tokenize: tokenizeDefinitionStart,\n continuation: {\n tokenize: tokenizeDefinitionContinuation\n },\n exit: gfmFootnoteDefinitionEnd\n }\n },\n text: {\n [91]: {\n tokenize: tokenizeGfmFootnoteCall\n },\n [93]: {\n add: 'after',\n tokenize: tokenizePotentialGfmFootnoteCall,\n resolveTo: resolveToPotentialGfmFootnoteCall\n }\n }\n }\n}\n\n// To do: remove after micromark update.\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePotentialGfmFootnoteCall(effects, ok, nok) {\n const self = this\n let index = self.events.length\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = [])\n /** @type {Token} */\n let labelStart\n\n // Find an opening.\n while (index--) {\n const token = self.events[index][1]\n if (token.type === 'labelImage') {\n labelStart = token\n break\n }\n\n // Exit if we’ve walked far enough.\n if (\n token.type === 'gfmFootnoteCall' ||\n token.type === 'labelLink' ||\n token.type === 'label' ||\n token.type === 'image' ||\n token.type === 'link'\n ) {\n break\n }\n }\n return start\n\n /**\n * @type {State}\n */\n function start(code) {\n if (!labelStart || !labelStart._balanced) {\n return nok(code)\n }\n const id = normalizeIdentifier(\n self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n })\n )\n if (id.codePointAt(0) !== 94 || !defined.includes(id.slice(1))) {\n return nok(code)\n }\n effects.enter('gfmFootnoteCallLabelMarker')\n effects.consume(code)\n effects.exit('gfmFootnoteCallLabelMarker')\n return ok(code)\n }\n}\n\n// To do: remove after micromark update.\n/** @type {Resolver} */\nfunction resolveToPotentialGfmFootnoteCall(events, context) {\n let index = events.length\n /** @type {Token | undefined} */\n let labelStart\n\n // Find an opening.\n while (index--) {\n if (\n events[index][1].type === 'labelImage' &&\n events[index][0] === 'enter'\n ) {\n labelStart = events[index][1]\n break\n }\n }\n // Change the `labelImageMarker` to a `data`.\n events[index + 1][1].type = 'data'\n events[index + 3][1].type = 'gfmFootnoteCallLabelMarker'\n\n // The whole (without `!`):\n /** @type {Token} */\n const call = {\n type: 'gfmFootnoteCall',\n start: Object.assign({}, events[index + 3][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n }\n // The `^` marker\n /** @type {Token} */\n const marker = {\n type: 'gfmFootnoteCallMarker',\n start: Object.assign({}, events[index + 3][1].end),\n end: Object.assign({}, events[index + 3][1].end)\n }\n // Increment the end 1 character.\n marker.end.column++\n marker.end.offset++\n marker.end._bufferIndex++\n /** @type {Token} */\n const string = {\n type: 'gfmFootnoteCallString',\n start: Object.assign({}, marker.end),\n end: Object.assign({}, events[events.length - 1][1].start)\n }\n /** @type {Token} */\n const chunk = {\n type: 'chunkString',\n contentType: 'string',\n start: Object.assign({}, string.start),\n end: Object.assign({}, string.end)\n }\n\n /** @type {Array<Event>} */\n const replacement = [\n // Take the `labelImageMarker` (now `data`, the `!`)\n events[index + 1],\n events[index + 2],\n ['enter', call, context],\n // The `[`\n events[index + 3],\n events[index + 4],\n // The `^`.\n ['enter', marker, context],\n ['exit', marker, context],\n // Everything in between.\n ['enter', string, context],\n ['enter', chunk, context],\n ['exit', chunk, context],\n ['exit', string, context],\n // The ending (`]`, properly parsed and labelled).\n events[events.length - 2],\n events[events.length - 1],\n ['exit', call, context]\n ]\n events.splice(index, events.length - index + 1, ...replacement)\n return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeGfmFootnoteCall(effects, ok, nok) {\n const self = this\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = [])\n let size = 0\n /** @type {boolean} */\n let data\n\n // Note: the implementation of `markdown-rs` is different, because it houses\n // core *and* extensions in one project.\n // Therefore, it can include footnote logic inside `label-end`.\n // We can’t do that, but luckily, we can parse footnotes in a simpler way than\n // needed for labels.\n return start\n\n /**\n * Start of footnote label.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('gfmFootnoteCall')\n effects.enter('gfmFootnoteCallLabelMarker')\n effects.consume(code)\n effects.exit('gfmFootnoteCallLabelMarker')\n return callStart\n }\n\n /**\n * After `[`, at `^`.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function callStart(code) {\n if (code !== 94) return nok(code)\n effects.enter('gfmFootnoteCallMarker')\n effects.consume(code)\n effects.exit('gfmFootnoteCallMarker')\n effects.enter('gfmFootnoteCallString')\n effects.enter('chunkString').contentType = 'string'\n return callData\n }\n\n /**\n * In label.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function callData(code) {\n if (\n // Too long.\n size > 999 ||\n // Closing brace with nothing.\n (code === 93 && !data) ||\n // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code === null ||\n code === 91 ||\n markdownLineEndingOrSpace(code)\n ) {\n return nok(code)\n }\n if (code === 93) {\n effects.exit('chunkString')\n const token = effects.exit('gfmFootnoteCallString')\n if (!defined.includes(normalizeIdentifier(self.sliceSerialize(token)))) {\n return nok(code)\n }\n effects.enter('gfmFootnoteCallLabelMarker')\n effects.consume(code)\n effects.exit('gfmFootnoteCallLabelMarker')\n effects.exit('gfmFootnoteCall')\n return ok\n }\n if (!markdownLineEndingOrSpace(code)) {\n data = true\n }\n size++\n effects.consume(code)\n return code === 92 ? callEscape : callData\n }\n\n /**\n * On character after escape.\n *\n * ```markdown\n * > | a [^b\\c] d\n * ^\n * ```\n *\n * @type {State}\n */\n function callEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code)\n size++\n return callData\n }\n return callData(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionStart(effects, ok, nok) {\n const self = this\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = [])\n /** @type {string} */\n let identifier\n let size = 0\n /** @type {boolean | undefined} */\n let data\n return start\n\n /**\n * Start of GFM footnote definition.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('gfmFootnoteDefinition')._container = true\n effects.enter('gfmFootnoteDefinitionLabel')\n effects.enter('gfmFootnoteDefinitionLabelMarker')\n effects.consume(code)\n effects.exit('gfmFootnoteDefinitionLabelMarker')\n return labelAtMarker\n }\n\n /**\n * In label, at caret.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelAtMarker(code) {\n if (code === 94) {\n effects.enter('gfmFootnoteDefinitionMarker')\n effects.consume(code)\n effects.exit('gfmFootnoteDefinitionMarker')\n effects.enter('gfmFootnoteDefinitionLabelString')\n effects.enter('chunkString').contentType = 'string'\n return labelInside\n }\n return nok(code)\n }\n\n /**\n * In label.\n *\n * > 👉 **Note**: `cmark-gfm` prevents whitespace from occurring in footnote\n * > definition labels.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelInside(code) {\n if (\n // Too long.\n size > 999 ||\n // Closing brace with nothing.\n (code === 93 && !data) ||\n // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code === null ||\n code === 91 ||\n markdownLineEndingOrSpace(code)\n ) {\n return nok(code)\n }\n if (code === 93) {\n effects.exit('chunkString')\n const token = effects.exit('gfmFootnoteDefinitionLabelString')\n identifier = normalizeIdentifier(self.sliceSerialize(token))\n effects.enter('gfmFootnoteDefinitionLabelMarker')\n effects.consume(code)\n effects.exit('gfmFootnoteDefinitionLabelMarker')\n effects.exit('gfmFootnoteDefinitionLabel')\n return labelAfter\n }\n if (!markdownLineEndingOrSpace(code)) {\n data = true\n }\n size++\n effects.consume(code)\n return code === 92 ? labelEscape : labelInside\n }\n\n /**\n * After `\\`, at a special character.\n *\n * > 👉 **Note**: `cmark-gfm` currently does not support escaped brackets:\n * > <https://github.com/github/cmark-gfm/issues/240>\n *\n * ```markdown\n * > | [^a\\*b]: c\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code)\n size++\n return labelInside\n }\n return labelInside(code)\n }\n\n /**\n * After definition label.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelAfter(code) {\n if (code === 58) {\n effects.enter('definitionMarker')\n effects.consume(code)\n effects.exit('definitionMarker')\n if (!defined.includes(identifier)) {\n defined.push(identifier)\n }\n\n // Any whitespace after the marker is eaten, forming indented code\n // is not possible.\n // No space is also fine, just like a block quote marker.\n return factorySpace(\n effects,\n whitespaceAfter,\n 'gfmFootnoteDefinitionWhitespace'\n )\n }\n return nok(code)\n }\n\n /**\n * After definition prefix.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function whitespaceAfter(code) {\n // `markdown-rs` has a wrapping token for the prefix that is closed here.\n return ok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionContinuation(effects, ok, nok) {\n /// Start of footnote definition continuation.\n ///\n /// ```markdown\n /// | [^a]: b\n /// > | c\n /// ^\n /// ```\n //\n // Either a blank line, which is okay, or an indented thing.\n return effects.check(blankLine, ok, effects.attempt(indent, ok, nok))\n}\n\n/** @type {Exiter} */\nfunction gfmFootnoteDefinitionEnd(effects) {\n effects.exit('gfmFootnoteDefinition')\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n const self = this\n return factorySpace(\n effects,\n afterPrefix,\n 'gfmFootnoteDefinitionIndent',\n 4 + 1\n )\n\n /**\n * @type {State}\n */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1]\n return tail &&\n tail[1].type === 'gfmFootnoteDefinitionIndent' &&\n tail[2].sliceSerialize(tail[1], true).length === 4\n ? ok(code)\n : nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n *\n * @typedef Options\n * Configuration (optional).\n * @property {boolean | null | undefined} [singleTilde=true]\n * Whether to support strikethrough with a single tilde (default: `true`).\n *\n * Single tildes work on github.com, but are technically prohibited by the\n * GFM spec.\n */\n\nimport {splice} from 'micromark-util-chunked'\nimport {classifyCharacter} from 'micromark-util-classify-character'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/**\n * Create an extension for `micromark` to enable GFM strikethrough syntax.\n *\n * @param {Options | null | undefined} [options={}]\n * Configuration.\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions`, to\n * enable GFM strikethrough syntax.\n */\nexport function gfmStrikethrough(options) {\n const options_ = options || {}\n let single = options_.singleTilde\n const tokenizer = {\n tokenize: tokenizeStrikethrough,\n resolveAll: resolveAllStrikethrough\n }\n if (single === null || single === undefined) {\n single = true\n }\n return {\n text: {\n [126]: tokenizer\n },\n insideSpan: {\n null: [tokenizer]\n },\n attentionMarkers: {\n null: [126]\n }\n }\n\n /**\n * Take events and resolve strikethrough.\n *\n * @type {Resolver}\n */\n function resolveAllStrikethrough(events, context) {\n let index = -1\n\n // Walk through all events.\n while (++index < events.length) {\n // Find a token that can close.\n if (\n events[index][0] === 'enter' &&\n events[index][1].type === 'strikethroughSequenceTemporary' &&\n events[index][1]._close\n ) {\n let open = index\n\n // Now walk back to find an opener.\n while (open--) {\n // Find a token that can open the closer.\n if (\n events[open][0] === 'exit' &&\n events[open][1].type === 'strikethroughSequenceTemporary' &&\n events[open][1]._open &&\n // If the sizes are the same:\n events[index][1].end.offset - events[index][1].start.offset ===\n events[open][1].end.offset - events[open][1].start.offset\n ) {\n events[index][1].type = 'strikethroughSequence'\n events[open][1].type = 'strikethroughSequence'\n\n /** @type {Token} */\n const strikethrough = {\n type: 'strikethrough',\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[index][1].end)\n }\n\n /** @type {Token} */\n const text = {\n type: 'strikethroughText',\n start: Object.assign({}, events[open][1].end),\n end: Object.assign({}, events[index][1].start)\n }\n\n // Opening.\n /** @type {Array<Event>} */\n const nextEvents = [\n ['enter', strikethrough, context],\n ['enter', events[open][1], context],\n ['exit', events[open][1], context],\n ['enter', text, context]\n ]\n const insideSpan = context.parser.constructs.insideSpan.null\n if (insideSpan) {\n // Between.\n splice(\n nextEvents,\n nextEvents.length,\n 0,\n resolveAll(insideSpan, events.slice(open + 1, index), context)\n )\n }\n\n // Closing.\n splice(nextEvents, nextEvents.length, 0, [\n ['exit', text, context],\n ['enter', events[index][1], context],\n ['exit', events[index][1], context],\n ['exit', strikethrough, context]\n ])\n splice(events, open - 1, index - open + 3, nextEvents)\n index = open + nextEvents.length - 2\n break\n }\n }\n }\n }\n index = -1\n while (++index < events.length) {\n if (events[index][1].type === 'strikethroughSequenceTemporary') {\n events[index][1].type = 'data'\n }\n }\n return events\n }\n\n /**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n function tokenizeStrikethrough(effects, ok, nok) {\n const previous = this.previous\n const events = this.events\n let size = 0\n return start\n\n /** @type {State} */\n function start(code) {\n if (\n previous === 126 &&\n events[events.length - 1][1].type !== 'characterEscape'\n ) {\n return nok(code)\n }\n effects.enter('strikethroughSequenceTemporary')\n return more(code)\n }\n\n /** @type {State} */\n function more(code) {\n const before = classifyCharacter(previous)\n if (code === 126) {\n // If this is the third marker, exit.\n if (size > 1) return nok(code)\n effects.consume(code)\n size++\n return more\n }\n if (size < 2 && !single) return nok(code)\n const token = effects.exit('strikethroughSequenceTemporary')\n const after = classifyCharacter(code)\n token._open = !after || (after === 2 && Boolean(before))\n token._close = !before || (before === 2 && Boolean(after))\n return ok(code)\n }\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n */\n\n// Port of `edit_map.rs` from `markdown-rs`.\n// This should move to `markdown-js` later.\n\n// Deal with several changes in events, batching them together.\n//\n// Preferably, changes should be kept to a minimum.\n// Sometimes, it’s needed to change the list of events, because parsing can be\n// messy, and it helps to expose a cleaner interface of events to the compiler\n// and other users.\n// It can also help to merge many adjacent similar events.\n// And, in other cases, it’s needed to parse subcontent: pass some events\n// through another tokenizer and inject the result.\n\n/**\n * @typedef {[number, number, Array<Event>]} Change\n * @typedef {[number, number, number]} Jump\n */\n\n/**\n * Tracks a bunch of edits.\n */\nexport class EditMap {\n /**\n * Create a new edit map.\n */\n constructor() {\n /**\n * Record of changes.\n *\n * @type {Array<Change>}\n */\n this.map = []\n }\n\n /**\n * Create an edit: a remove and/or add at a certain place.\n *\n * @param {number} index\n * @param {number} remove\n * @param {Array<Event>} add\n * @returns {undefined}\n */\n add(index, remove, add) {\n addImpl(this, index, remove, add)\n }\n\n // To do: add this when moving to `micromark`.\n // /**\n // * Create an edit: but insert `add` before existing additions.\n // *\n // * @param {number} index\n // * @param {number} remove\n // * @param {Array<Event>} add\n // * @returns {undefined}\n // */\n // addBefore(index, remove, add) {\n // addImpl(this, index, remove, add, true)\n // }\n\n /**\n * Done, change the events.\n *\n * @param {Array<Event>} events\n * @returns {undefined}\n */\n consume(events) {\n this.map.sort(function (a, b) {\n return a[0] - b[0]\n })\n\n /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n if (this.map.length === 0) {\n return\n }\n\n // To do: if links are added in events, like they are in `markdown-rs`,\n // this is needed.\n // // Calculate jumps: where items in the current list move to.\n // /** @type {Array<Jump>} */\n // const jumps = []\n // let index = 0\n // let addAcc = 0\n // let removeAcc = 0\n // while (index < this.map.length) {\n // const [at, remove, add] = this.map[index]\n // removeAcc += remove\n // addAcc += add.length\n // jumps.push([at, removeAcc, addAcc])\n // index += 1\n // }\n //\n // . shiftLinks(events, jumps)\n\n let index = this.map.length\n /** @type {Array<Array<Event>>} */\n const vecs = []\n while (index > 0) {\n index -= 1\n vecs.push(\n events.slice(this.map[index][0] + this.map[index][1]),\n this.map[index][2]\n )\n\n // Truncate rest.\n events.length = this.map[index][0]\n }\n vecs.push([...events])\n events.length = 0\n let slice = vecs.pop()\n while (slice) {\n events.push(...slice)\n slice = vecs.pop()\n }\n\n // Truncate everything.\n this.map.length = 0\n }\n}\n\n/**\n * Create an edit.\n *\n * @param {EditMap} editMap\n * @param {number} at\n * @param {number} remove\n * @param {Array<Event>} add\n * @returns {undefined}\n */\nfunction addImpl(editMap, at, remove, add) {\n let index = 0\n\n /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n if (remove === 0 && add.length === 0) {\n return\n }\n while (index < editMap.map.length) {\n if (editMap.map[index][0] === at) {\n editMap.map[index][1] += remove\n\n // To do: before not used by tables, use when moving to micromark.\n // if (before) {\n // add.push(...editMap.map[index][2])\n // editMap.map[index][2] = add\n // } else {\n editMap.map[index][2].push(...add)\n // }\n\n return\n }\n index += 1\n }\n editMap.map.push([at, remove, add])\n}\n\n// /**\n// * Shift `previous` and `next` links according to `jumps`.\n// *\n// * This fixes links in case there are events removed or added between them.\n// *\n// * @param {Array<Event>} events\n// * @param {Array<Jump>} jumps\n// */\n// function shiftLinks(events, jumps) {\n// let jumpIndex = 0\n// let index = 0\n// let add = 0\n// let rm = 0\n\n// while (index < events.length) {\n// const rmCurr = rm\n\n// while (jumpIndex < jumps.length && jumps[jumpIndex][0] <= index) {\n// add = jumps[jumpIndex][2]\n// rm = jumps[jumpIndex][1]\n// jumpIndex += 1\n// }\n\n// // Ignore items that will be removed.\n// if (rm > rmCurr) {\n// index += rm - rmCurr\n// } else {\n// // ?\n// // if let Some(link) = &events[index].link {\n// // if let Some(next) = link.next {\n// // events[next].link.as_mut().unwrap().previous = Some(index + add - rm);\n// // while jumpIndex < jumps.len() && jumps[jumpIndex].0 <= next {\n// // add = jumps[jumpIndex].2;\n// // rm = jumps[jumpIndex].1;\n// // jumpIndex += 1;\n// // }\n// // events[index].link.as_mut().unwrap().next = Some(next + add - rm);\n// // index = next;\n// // continue;\n// // }\n// // }\n// index += 1\n// }\n// }\n// }\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n */\n\n/**\n * @typedef {'center' | 'left' | 'none' | 'right'} Align\n */\n\n/**\n * Figure out the alignment of a GFM table.\n *\n * @param {Readonly<Array<Event>>} events\n * List of events.\n * @param {number} index\n * Table enter event.\n * @returns {Array<Align>}\n * List of aligns.\n */\nexport function gfmTableAlign(events, index) {\n let inDelimiterRow = false\n /** @type {Array<Align>} */\n const align = []\n while (index < events.length) {\n const event = events[index]\n if (inDelimiterRow) {\n if (event[0] === 'enter') {\n // Start of alignment value: set a new column.\n // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n if (event[1].type === 'tableContent') {\n align.push(\n events[index + 1][1].type === 'tableDelimiterMarker'\n ? 'left'\n : 'none'\n )\n }\n }\n // Exits:\n // End of alignment value: change the column.\n // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n else if (event[1].type === 'tableContent') {\n if (events[index - 1][1].type === 'tableDelimiterMarker') {\n const alignIndex = align.length - 1\n align[alignIndex] = align[alignIndex] === 'left' ? 'center' : 'right'\n }\n }\n // Done!\n else if (event[1].type === 'tableDelimiterRow') {\n break\n }\n } else if (event[0] === 'enter' && event[1].type === 'tableDelimiterRow') {\n inDelimiterRow = true\n }\n index += 1\n }\n return align\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n/**\n * @typedef {[number, number, number, number]} Range\n * Cell info.\n *\n * @typedef {0 | 1 | 2 | 3} RowKind\n * Where we are: `1` for head row, `2` for delimiter row, `3` for body row.\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n markdownLineEnding,\n markdownLineEndingOrSpace,\n markdownSpace\n} from 'micromark-util-character'\nimport {EditMap} from './edit-map.js'\nimport {gfmTableAlign} from './infer.js'\n\n/**\n * Create an HTML extension for `micromark` to support GitHub tables syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * table syntax.\n */\nexport function gfmTable() {\n return {\n flow: {\n null: {\n tokenize: tokenizeTable,\n resolveAll: resolveTable\n }\n }\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTable(effects, ok, nok) {\n const self = this\n let size = 0\n let sizeB = 0\n /** @type {boolean | undefined} */\n let seen\n return start\n\n /**\n * Start of a GFM table.\n *\n * If there is a valid table row or table head before, then we try to parse\n * another row.\n * Otherwise, we try to parse a head.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * > | | b |\n * ^\n * ```\n * @type {State}\n */\n function start(code) {\n let index = self.events.length - 1\n while (index > -1) {\n const type = self.events[index][1].type\n if (\n type === 'lineEnding' ||\n // Note: markdown-rs uses `whitespace` instead of `linePrefix`\n type === 'linePrefix'\n )\n index--\n else break\n }\n const tail = index > -1 ? self.events[index][1].type : null\n const next =\n tail === 'tableHead' || tail === 'tableRow' ? bodyRowStart : headRowBefore\n\n // Don’t allow lazy body rows.\n if (next === bodyRowStart && self.parser.lazy[self.now().line]) {\n return nok(code)\n }\n return next(code)\n }\n\n /**\n * Before table head row.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowBefore(code) {\n effects.enter('tableHead')\n effects.enter('tableRow')\n return headRowStart(code)\n }\n\n /**\n * Before table head row, after whitespace.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowStart(code) {\n if (code === 124) {\n return headRowBreak(code)\n }\n\n // To do: micromark-js should let us parse our own whitespace in extensions,\n // like `markdown-rs`:\n //\n // ```js\n // // 4+ spaces.\n // if (markdownSpace(code)) {\n // return nok(code)\n // }\n // ```\n\n seen = true\n // Count the first character, that isn’t a pipe, double.\n sizeB += 1\n return headRowBreak(code)\n }\n\n /**\n * At break in table head row.\n *\n * ```markdown\n * > | | a |\n * ^\n * ^\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowBreak(code) {\n if (code === null) {\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code)\n }\n if (markdownLineEnding(code)) {\n // If anything other than one pipe (ignoring whitespace) was used, it’s fine.\n if (sizeB > 1) {\n sizeB = 0\n // To do: check if this works.\n // Feel free to interrupt:\n self.interrupt = true\n effects.exit('tableRow')\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return headDelimiterStart\n }\n\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code)\n }\n if (markdownSpace(code)) {\n // To do: check if this is fine.\n // effects.attempt(State::Next(StateName::GfmTableHeadRowBreak), State::Nok)\n // State::Retry(space_or_tab(tokenizer))\n return factorySpace(effects, headRowBreak, 'whitespace')(code)\n }\n sizeB += 1\n if (seen) {\n seen = false\n // Header cell count.\n size += 1\n }\n if (code === 124) {\n effects.enter('tableCellDivider')\n effects.consume(code)\n effects.exit('tableCellDivider')\n // Whether a delimiter was seen.\n seen = true\n return headRowBreak\n }\n\n // Anything else is cell data.\n effects.enter('data')\n return headRowData(code)\n }\n\n /**\n * In table head row data.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowData(code) {\n if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n effects.exit('data')\n return headRowBreak(code)\n }\n effects.consume(code)\n return code === 92 ? headRowEscape : headRowData\n }\n\n /**\n * In table head row escape.\n *\n * ```markdown\n * > | | a\\-b |\n * ^\n * | | ---- |\n * | | c |\n * ```\n *\n * @type {State}\n */\n function headRowEscape(code) {\n if (code === 92 || code === 124) {\n effects.consume(code)\n return headRowData\n }\n return headRowData(code)\n }\n\n /**\n * Before delimiter row.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headDelimiterStart(code) {\n // Reset `interrupt`.\n self.interrupt = false\n\n // Note: in `markdown-rs`, we need to handle piercing here too.\n if (self.parser.lazy[self.now().line]) {\n return nok(code)\n }\n effects.enter('tableDelimiterRow')\n // Track if we’ve seen a `:` or `|`.\n seen = false\n if (markdownSpace(code)) {\n return factorySpace(\n effects,\n headDelimiterBefore,\n 'linePrefix',\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4\n )(code)\n }\n return headDelimiterBefore(code)\n }\n\n /**\n * Before delimiter row, after optional whitespace.\n *\n * Reused when a `|` is found later, to parse another cell.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headDelimiterBefore(code) {\n if (code === 45 || code === 58) {\n return headDelimiterValueBefore(code)\n }\n if (code === 124) {\n seen = true\n // If we start with a pipe, we open a cell marker.\n effects.enter('tableCellDivider')\n effects.consume(code)\n effects.exit('tableCellDivider')\n return headDelimiterCellBefore\n }\n\n // More whitespace / empty row not allowed at start.\n return headDelimiterNok(code)\n }\n\n /**\n * After `|`, before delimiter cell.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterCellBefore(code) {\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterValueBefore, 'whitespace')(code)\n }\n return headDelimiterValueBefore(code)\n }\n\n /**\n * Before delimiter cell value.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterValueBefore(code) {\n // Align: left.\n if (code === 58) {\n sizeB += 1\n seen = true\n effects.enter('tableDelimiterMarker')\n effects.consume(code)\n effects.exit('tableDelimiterMarker')\n return headDelimiterLeftAlignmentAfter\n }\n\n // Align: none.\n if (code === 45) {\n sizeB += 1\n // To do: seems weird that this *isn’t* left aligned, but that state is used?\n return headDelimiterLeftAlignmentAfter(code)\n }\n if (code === null || markdownLineEnding(code)) {\n return headDelimiterCellAfter(code)\n }\n return headDelimiterNok(code)\n }\n\n /**\n * After delimiter cell left alignment marker.\n *\n * ```markdown\n * | | a |\n * > | | :- |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterLeftAlignmentAfter(code) {\n if (code === 45) {\n effects.enter('tableDelimiterFiller')\n return headDelimiterFiller(code)\n }\n\n // Anything else is not ok after the left-align colon.\n return headDelimiterNok(code)\n }\n\n /**\n * In delimiter cell filler.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterFiller(code) {\n if (code === 45) {\n effects.consume(code)\n return headDelimiterFiller\n }\n\n // Align is `center` if it was `left`, `right` otherwise.\n if (code === 58) {\n seen = true\n effects.exit('tableDelimiterFiller')\n effects.enter('tableDelimiterMarker')\n effects.consume(code)\n effects.exit('tableDelimiterMarker')\n return headDelimiterRightAlignmentAfter\n }\n effects.exit('tableDelimiterFiller')\n return headDelimiterRightAlignmentAfter(code)\n }\n\n /**\n * After delimiter cell right alignment marker.\n *\n * ```markdown\n * | | a |\n * > | | -: |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterRightAlignmentAfter(code) {\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterCellAfter, 'whitespace')(code)\n }\n return headDelimiterCellAfter(code)\n }\n\n /**\n * After delimiter cell.\n *\n * ```markdown\n * | | a |\n * > | | -: |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterCellAfter(code) {\n if (code === 124) {\n return headDelimiterBefore(code)\n }\n if (code === null || markdownLineEnding(code)) {\n // Exit when:\n // * there was no `:` or `|` at all (it’s a thematic break or setext\n // underline instead)\n // * the header cell count is not the delimiter cell count\n if (!seen || size !== sizeB) {\n return headDelimiterNok(code)\n }\n\n // Note: in markdown-rs`, a reset is needed here.\n effects.exit('tableDelimiterRow')\n effects.exit('tableHead')\n // To do: in `markdown-rs`, resolvers need to be registered manually.\n // effects.register_resolver(ResolveName::GfmTable)\n return ok(code)\n }\n return headDelimiterNok(code)\n }\n\n /**\n * In delimiter row, at a disallowed byte.\n *\n * ```markdown\n * | | a |\n * > | | x |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterNok(code) {\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code)\n }\n\n /**\n * Before table body row.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowStart(code) {\n // Note: in `markdown-rs` we need to manually take care of a prefix,\n // but in `micromark-js` that is done for us, so if we’re here, we’re\n // never at whitespace.\n effects.enter('tableRow')\n return bodyRowBreak(code)\n }\n\n /**\n * At break in table body row.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ^\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowBreak(code) {\n if (code === 124) {\n effects.enter('tableCellDivider')\n effects.consume(code)\n effects.exit('tableCellDivider')\n return bodyRowBreak\n }\n if (code === null || markdownLineEnding(code)) {\n effects.exit('tableRow')\n return ok(code)\n }\n if (markdownSpace(code)) {\n return factorySpace(effects, bodyRowBreak, 'whitespace')(code)\n }\n\n // Anything else is cell content.\n effects.enter('data')\n return bodyRowData(code)\n }\n\n /**\n * In table body row data.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowData(code) {\n if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n effects.exit('data')\n return bodyRowBreak(code)\n }\n effects.consume(code)\n return code === 92 ? bodyRowEscape : bodyRowData\n }\n\n /**\n * In table body row escape.\n *\n * ```markdown\n * | | a |\n * | | ---- |\n * > | | b\\-c |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowEscape(code) {\n if (code === 92 || code === 124) {\n effects.consume(code)\n return bodyRowData\n }\n return bodyRowData(code)\n }\n}\n\n/** @type {Resolver} */\n\nfunction resolveTable(events, context) {\n let index = -1\n let inFirstCellAwaitingPipe = true\n /** @type {RowKind} */\n let rowKind = 0\n /** @type {Range} */\n let lastCell = [0, 0, 0, 0]\n /** @type {Range} */\n let cell = [0, 0, 0, 0]\n let afterHeadAwaitingFirstBodyRow = false\n let lastTableEnd = 0\n /** @type {Token | undefined} */\n let currentTable\n /** @type {Token | undefined} */\n let currentBody\n /** @type {Token | undefined} */\n let currentCell\n const map = new EditMap()\n while (++index < events.length) {\n const event = events[index]\n const token = event[1]\n if (event[0] === 'enter') {\n // Start of head.\n if (token.type === 'tableHead') {\n afterHeadAwaitingFirstBodyRow = false\n\n // Inject previous (body end and) table end.\n if (lastTableEnd !== 0) {\n flushTableEnd(map, context, lastTableEnd, currentTable, currentBody)\n currentBody = undefined\n lastTableEnd = 0\n }\n\n // Inject table start.\n currentTable = {\n type: 'table',\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n }\n map.add(index, 0, [['enter', currentTable, context]])\n } else if (\n token.type === 'tableRow' ||\n token.type === 'tableDelimiterRow'\n ) {\n inFirstCellAwaitingPipe = true\n currentCell = undefined\n lastCell = [0, 0, 0, 0]\n cell = [0, index + 1, 0, 0]\n\n // Inject table body start.\n if (afterHeadAwaitingFirstBodyRow) {\n afterHeadAwaitingFirstBodyRow = false\n currentBody = {\n type: 'tableBody',\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n }\n map.add(index, 0, [['enter', currentBody, context]])\n }\n rowKind = token.type === 'tableDelimiterRow' ? 2 : currentBody ? 3 : 1\n }\n // Cell data.\n else if (\n rowKind &&\n (token.type === 'data' ||\n token.type === 'tableDelimiterMarker' ||\n token.type === 'tableDelimiterFiller')\n ) {\n inFirstCellAwaitingPipe = false\n\n // First value in cell.\n if (cell[2] === 0) {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1]\n currentCell = flushCell(\n map,\n context,\n lastCell,\n rowKind,\n undefined,\n currentCell\n )\n lastCell = [0, 0, 0, 0]\n }\n cell[2] = index\n }\n } else if (token.type === 'tableCellDivider') {\n if (inFirstCellAwaitingPipe) {\n inFirstCellAwaitingPipe = false\n } else {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1]\n currentCell = flushCell(\n map,\n context,\n lastCell,\n rowKind,\n undefined,\n currentCell\n )\n }\n lastCell = cell\n cell = [lastCell[1], index, 0, 0]\n }\n }\n }\n // Exit events.\n else if (token.type === 'tableHead') {\n afterHeadAwaitingFirstBodyRow = true\n lastTableEnd = index\n } else if (\n token.type === 'tableRow' ||\n token.type === 'tableDelimiterRow'\n ) {\n lastTableEnd = index\n if (lastCell[1] !== 0) {\n cell[0] = cell[1]\n currentCell = flushCell(\n map,\n context,\n lastCell,\n rowKind,\n index,\n currentCell\n )\n } else if (cell[1] !== 0) {\n currentCell = flushCell(map, context, cell, rowKind, index, currentCell)\n }\n rowKind = 0\n } else if (\n rowKind &&\n (token.type === 'data' ||\n token.type === 'tableDelimiterMarker' ||\n token.type === 'tableDelimiterFiller')\n ) {\n cell[3] = index\n }\n }\n if (lastTableEnd !== 0) {\n flushTableEnd(map, context, lastTableEnd, currentTable, currentBody)\n }\n map.consume(context.events)\n\n // To do: move this into `html`, when events are exposed there.\n // That’s what `markdown-rs` does.\n // That needs updates to `mdast-util-gfm-table`.\n index = -1\n while (++index < context.events.length) {\n const event = context.events[index]\n if (event[0] === 'enter' && event[1].type === 'table') {\n event[1]._align = gfmTableAlign(context.events, index)\n }\n }\n return events\n}\n\n/**\n * Generate a cell.\n *\n * @param {EditMap} map\n * @param {Readonly<TokenizeContext>} context\n * @param {Readonly<Range>} range\n * @param {RowKind} rowKind\n * @param {number | undefined} rowEnd\n * @param {Token | undefined} previousCell\n * @returns {Token | undefined}\n */\n// eslint-disable-next-line max-params\nfunction flushCell(map, context, range, rowKind, rowEnd, previousCell) {\n // `markdown-rs` uses:\n // rowKind === 2 ? 'tableDelimiterCell' : 'tableCell'\n const groupName =\n rowKind === 1\n ? 'tableHeader'\n : rowKind === 2\n ? 'tableDelimiter'\n : 'tableData'\n // `markdown-rs` uses:\n // rowKind === 2 ? 'tableDelimiterCellValue' : 'tableCellText'\n const valueName = 'tableContent'\n\n // Insert an exit for the previous cell, if there is one.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- exit\n // ^^^^-- this cell\n // ```\n if (range[0] !== 0) {\n previousCell.end = Object.assign({}, getPoint(context.events, range[0]))\n map.add(range[0], 0, [['exit', previousCell, context]])\n }\n\n // Insert enter of this cell.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- enter\n // ^^^^-- this cell\n // ```\n const now = getPoint(context.events, range[1])\n previousCell = {\n type: groupName,\n start: Object.assign({}, now),\n // Note: correct end is set later.\n end: Object.assign({}, now)\n }\n map.add(range[1], 0, [['enter', previousCell, context]])\n\n // Insert text start at first data start and end at last data end, and\n // remove events between.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- enter\n // ^-- exit\n // ^^^^-- this cell\n // ```\n if (range[2] !== 0) {\n const relatedStart = getPoint(context.events, range[2])\n const relatedEnd = getPoint(context.events, range[3])\n /** @type {Token} */\n const valueToken = {\n type: valueName,\n start: Object.assign({}, relatedStart),\n end: Object.assign({}, relatedEnd)\n }\n map.add(range[2], 0, [['enter', valueToken, context]])\n if (rowKind !== 2) {\n // Fix positional info on remaining events\n const start = context.events[range[2]]\n const end = context.events[range[3]]\n start[1].end = Object.assign({}, end[1].end)\n start[1].type = 'chunkText'\n start[1].contentType = 'text'\n\n // Remove if needed.\n if (range[3] > range[2] + 1) {\n const a = range[2] + 1\n const b = range[3] - range[2] - 1\n map.add(a, b, [])\n }\n }\n map.add(range[3] + 1, 0, [['exit', valueToken, context]])\n }\n\n // Insert an exit for the last cell, if at the row end.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- exit\n // ^^^^^^-- this cell (the last one contains two “between” parts)\n // ```\n if (rowEnd !== undefined) {\n previousCell.end = Object.assign({}, getPoint(context.events, rowEnd))\n map.add(rowEnd, 0, [['exit', previousCell, context]])\n previousCell = undefined\n }\n return previousCell\n}\n\n/**\n * Generate table end (and table body end).\n *\n * @param {Readonly<EditMap>} map\n * @param {Readonly<TokenizeContext>} context\n * @param {number} index\n * @param {Token} table\n * @param {Token | undefined} tableBody\n */\n// eslint-disable-next-line max-params\nfunction flushTableEnd(map, context, index, table, tableBody) {\n /** @type {Array<Event>} */\n const exits = []\n const related = getPoint(context.events, index)\n if (tableBody) {\n tableBody.end = Object.assign({}, related)\n exits.push(['exit', tableBody, context])\n }\n table.end = Object.assign({}, related)\n exits.push(['exit', table, context])\n map.add(index + 1, 0, exits)\n}\n\n/**\n * @param {Readonly<Array<Event>>} events\n * @param {number} index\n * @returns {Readonly<Point>}\n */\nfunction getPoint(events, index) {\n const event = events[index]\n const side = event[0] === 'enter' ? 'start' : 'end'\n return event[1][side]\n}\n","/**\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n markdownLineEnding,\n markdownLineEndingOrSpace,\n markdownSpace\n} from 'micromark-util-character'\nconst tasklistCheck = {\n tokenize: tokenizeTasklistCheck\n}\n\n/**\n * Create an HTML extension for `micromark` to support GFM task list items\n * syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `htmlExtensions` to\n * support GFM task list items when serializing to HTML.\n */\nexport function gfmTaskListItem() {\n return {\n text: {\n [91]: tasklistCheck\n }\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTasklistCheck(effects, ok, nok) {\n const self = this\n return open\n\n /**\n * At start of task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (\n // Exit if there’s stuff before.\n self.previous !== null ||\n // Exit if not in the first content that is the first child of a list\n // item.\n !self._gfmTasklistFirstContentOfListItem\n ) {\n return nok(code)\n }\n effects.enter('taskListCheck')\n effects.enter('taskListCheckMarker')\n effects.consume(code)\n effects.exit('taskListCheckMarker')\n return inside\n }\n\n /**\n * In task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n // Currently we match how GH works in files.\n // To match how GH works in comments, use `markdownSpace` (`[\\t ]`) instead\n // of `markdownLineEndingOrSpace` (`[\\t\\n\\r ]`).\n if (markdownLineEndingOrSpace(code)) {\n effects.enter('taskListCheckValueUnchecked')\n effects.consume(code)\n effects.exit('taskListCheckValueUnchecked')\n return close\n }\n if (code === 88 || code === 120) {\n effects.enter('taskListCheckValueChecked')\n effects.consume(code)\n effects.exit('taskListCheckValueChecked')\n return close\n }\n return nok(code)\n }\n\n /**\n * At close of task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function close(code) {\n if (code === 93) {\n effects.enter('taskListCheckMarker')\n effects.consume(code)\n effects.exit('taskListCheckMarker')\n effects.exit('taskListCheck')\n return after\n }\n return nok(code)\n }\n\n /**\n * @type {State}\n */\n function after(code) {\n // EOL in paragraph means there must be something else after it.\n if (markdownLineEnding(code)) {\n return ok(code)\n }\n\n // Space or tab?\n // Check what comes after.\n if (markdownSpace(code)) {\n return effects.check(\n {\n tokenize: spaceThenNonSpace\n },\n ok,\n nok\n )(code)\n }\n\n // EOF, or non-whitespace, both wrong.\n return nok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction spaceThenNonSpace(effects, ok, nok) {\n return factorySpace(effects, after, 'whitespace')\n\n /**\n * After whitespace, after task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // EOF means there was nothing, so bad.\n // EOL means there’s content after it, so good.\n // Impossible to have more spaces.\n // Anything else is good.\n return code === null ? nok(code) : ok(code)\n }\n}\n","/**\n * @typedef {import('micromark-extension-gfm-footnote').HtmlOptions} HtmlOptions\n * @typedef {import('micromark-extension-gfm-strikethrough').Options} Options\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n */\n\nimport {\n combineExtensions,\n combineHtmlExtensions\n} from 'micromark-util-combine-extensions'\nimport {\n gfmAutolinkLiteral,\n gfmAutolinkLiteralHtml\n} from 'micromark-extension-gfm-autolink-literal'\nimport {gfmFootnote, gfmFootnoteHtml} from 'micromark-extension-gfm-footnote'\nimport {\n gfmStrikethrough,\n gfmStrikethroughHtml\n} from 'micromark-extension-gfm-strikethrough'\nimport {gfmTable, gfmTableHtml} from 'micromark-extension-gfm-table'\nimport {gfmTagfilterHtml} from 'micromark-extension-gfm-tagfilter'\nimport {\n gfmTaskListItem,\n gfmTaskListItemHtml\n} from 'micromark-extension-gfm-task-list-item'\n\n/**\n * Create an extension for `micromark` to enable GFM syntax.\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n *\n * Passed to `micromark-extens-gfm-strikethrough`.\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * syntax.\n */\nexport function gfm(options) {\n return combineExtensions([\n gfmAutolinkLiteral(),\n gfmFootnote(),\n gfmStrikethrough(options),\n gfmTable(),\n gfmTaskListItem()\n ])\n}\n\n/**\n * Create an extension for `micromark` to support GFM when serializing to HTML.\n *\n * @param {HtmlOptions | null | undefined} [options]\n * Configuration (optional).\n *\n * Passed to `micromark-extens-gfm-footnote`.\n * @returns {HtmlExtension}\n * Extension for `micromark` that can be passed in `htmlExtensions` to\n * support GFM when serializing to HTML.\n */\nexport function gfmHtml(options) {\n return combineHtmlExtensions([\n gfmAutolinkLiteralHtml(),\n gfmFootnoteHtml(options),\n gfmStrikethroughHtml(),\n gfmTableHtml(),\n gfmTagfilterHtml(),\n gfmTaskListItemHtml()\n ])\n}\n","/// <reference types=\"remark-parse\" />\n/// <reference types=\"remark-stringify\" />\n\n/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-gfm').Options} MdastOptions\n * @typedef {import('micromark-extension-gfm').Options} MicromarkOptions\n * @typedef {import('unified').Processor<Root>} Processor\n */\n\n/**\n * @typedef {MicromarkOptions & MdastOptions} Options\n * Configuration.\n */\n\nimport {gfmFromMarkdown, gfmToMarkdown} from 'mdast-util-gfm'\nimport {gfm} from 'micromark-extension-gfm'\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Add support GFM (autolink literals, footnotes, strikethrough, tables,\n * tasklists).\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {undefined}\n * Nothing.\n */\nexport default function remarkGfm(options) {\n // @ts-expect-error: TS is wrong about `this`.\n // eslint-disable-next-line unicorn/no-this-assignment\n const self = /** @type {Processor} */ (this)\n const settings = options || emptyOptions\n const data = self.data()\n\n const micromarkExtensions =\n data.micromarkExtensions || (data.micromarkExtensions = [])\n const fromMarkdownExtensions =\n data.fromMarkdownExtensions || (data.fromMarkdownExtensions = [])\n const toMarkdownExtensions =\n data.toMarkdownExtensions || (data.toMarkdownExtensions = [])\n\n micromarkExtensions.push(gfm(settings))\n fromMarkdownExtensions.push(gfmFromMarkdown())\n toMarkdownExtensions.push(gfmToMarkdown(settings))\n}\n","'use strict'\n\nfunction normalizeIdentifier(value) {\n return (\n value // Collapse Markdown whitespace.\n .replace(/[\\t\\n\\r ]+/g, ' ') // Trim.\n .replace(/^ | $/g, '') // Some characters are considered “uppercase”, but if their lowercase\n // counterpart is uppercased will result in a different uppercase\n // character.\n // Hence, to get that form, we perform both lower- and uppercase.\n // Upper case makes sure keys will not interact with default prototypal\n // methods: no object method is uppercase.\n .toLowerCase()\n .toUpperCase()\n )\n}\n\nmodule.exports = normalizeIdentifier\n","'use strict'\n\nfunction markdownLineEnding(code) {\n return code < -2\n}\n\nmodule.exports = markdownLineEnding\n","'use strict'\n\nfunction markdownSpace(code) {\n return code === -2 || code === -1 || code === 32\n}\n\nmodule.exports = markdownSpace\n","'use strict'\n\nvar markdownSpace = require('../character/markdown-space.js')\n\nfunction spaceFactory(effects, ok, type, max) {\n var limit = max ? max - 1 : Infinity\n var size = 0\n return start\n\n function start(code) {\n if (markdownSpace(code)) {\n effects.enter(type)\n return prefix(code)\n }\n\n return ok(code)\n }\n\n function prefix(code) {\n if (markdownSpace(code) && size++ < limit) {\n effects.consume(code)\n return prefix\n }\n\n effects.exit(type)\n return ok(code)\n }\n}\n\nmodule.exports = spaceFactory\n","'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar factorySpace = require('./factory-space.js')\n\nvar partialBlankLine = {\n tokenize: tokenizePartialBlankLine,\n partial: true\n}\n\nfunction tokenizePartialBlankLine(effects, ok, nok) {\n return factorySpace(effects, afterWhitespace, 'linePrefix')\n\n function afterWhitespace(code) {\n return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n }\n}\n\nmodule.exports = partialBlankLine\n","'use strict'\n\nvar splice = [].splice\n\nmodule.exports = splice\n","'use strict'\n\nvar splice = require('../constant/splice.js')\n\n// causes a stack overflow in V8 when trying to insert 100k items for instance.\n\nfunction chunkedSplice(list, start, remove, items) {\n var end = list.length\n var chunkStart = 0\n var parameters // Make start between zero and `end` (included).\n\n if (start < 0) {\n start = -start > end ? 0 : end + start\n } else {\n start = start > end ? end : start\n }\n\n remove = remove > 0 ? remove : 0 // No need to chunk the items if there’s only a couple (10k) items.\n\n if (items.length < 10000) {\n parameters = Array.from(items)\n parameters.unshift(start, remove)\n splice.apply(list, parameters)\n } else {\n // Delete `remove` items starting from `start`\n if (remove) splice.apply(list, [start, remove]) // Insert the items in chunks to not cause stack overflows.\n\n while (chunkStart < items.length) {\n parameters = items.slice(chunkStart, chunkStart + 10000)\n parameters.unshift(start, 0)\n splice.apply(list, parameters)\n chunkStart += 10000\n start += 10000\n }\n }\n}\n\nmodule.exports = chunkedSplice\n","'use strict'\n\n// Counts tabs based on their expanded size, and CR+LF as one character.\n\nfunction sizeChunks(chunks) {\n var index = -1\n var size = 0\n\n while (++index < chunks.length) {\n size += typeof chunks[index] === 'string' ? chunks[index].length : 1\n }\n\n return size\n}\n\nmodule.exports = sizeChunks\n","'use strict'\n\nvar sizeChunks = require('./size-chunks.js')\n\nfunction prefixSize(events, type) {\n var tail = events[events.length - 1]\n if (!tail || tail[1].type !== type) return 0\n return sizeChunks(tail[2].sliceStream(tail[1]))\n}\n\nmodule.exports = prefixSize\n","'use strict'\n\nvar assign = Object.assign\n\nmodule.exports = assign\n","'use strict'\n\nvar assign = require('../constant/assign.js')\n\nfunction shallow(object) {\n return assign({}, object)\n}\n\nmodule.exports = shallow\n","'use strict'\n\nfunction resolveAll(constructs, events, context) {\n var called = []\n var index = -1\n var resolve\n\n while (++index < constructs.length) {\n resolve = constructs[index].resolveAll\n\n if (resolve && called.indexOf(resolve) < 0) {\n events = resolve(events, context)\n called.push(resolve)\n }\n }\n\n return events\n}\n\nmodule.exports = resolveAll\n","module.exports = footnote\n\nvar normalizeIdentifier = require('micromark/dist/util/normalize-identifier')\nvar blank = require('micromark/dist/tokenize/partial-blank-line')\nvar createSpace = require('micromark/dist/tokenize/factory-space')\nvar chunkedSplice = require('micromark/dist/util/chunked-splice')\nvar prefixSize = require('micromark/dist/util/prefix-size')\nvar shallow = require('micromark/dist/util/shallow')\nvar resolveAll = require('micromark/dist/util/resolve-all')\n\nvar indent = {tokenize: tokenizeIndent, partial: true}\n\nfunction footnote(options) {\n var settings = options || {}\n var call = {tokenize: tokenizeFootnoteCall}\n var noteStart = {tokenize: tokenizeNoteStart, resolveAll: resolveAllNote}\n var noteEnd = {\n add: 'after',\n tokenize: tokenizeNoteEnd,\n resolveAll: resolveAllNote,\n resolveTo: resolveToNoteEnd\n }\n var definition = {\n tokenize: tokenizeDefinitionStart,\n continuation: {tokenize: tokenizeDefinitionContinuation},\n exit: footnoteDefinitionEnd\n }\n var text = {91: call}\n\n if (settings.inlineNotes) {\n text[93] = noteEnd\n text[94] = noteStart\n }\n\n return {\n _hiddenFootnoteSupport: {},\n document: {91: definition},\n text: text\n }\n}\n\n// Remove remaining note starts.\nfunction resolveAllNote(events) {\n var length = events.length\n var index = -1\n var token\n\n while (++index < length) {\n token = events[index][1]\n\n if (events[index][0] === 'enter' && token.type === 'inlineNoteStart') {\n token.type = 'data'\n // Remove the two marker (`^[`).\n events.splice(index + 1, 4)\n length -= 4\n }\n }\n\n return events\n}\n\nfunction resolveToNoteEnd(events, context) {\n var index = events.length - 4\n var group\n var text\n var token\n var type\n var openIndex\n\n // Find an opening.\n while (index--) {\n token = events[index][1]\n\n // Find where the note starts.\n if (events[index][0] === 'enter' && token.type === 'inlineNoteStart') {\n openIndex = index\n type = 'inlineNote'\n break\n }\n }\n\n group = {\n type: type,\n start: shallow(events[openIndex][1].start),\n end: shallow(events[events.length - 1][1].end)\n }\n\n text = {\n type: 'inlineNoteText',\n start: shallow(events[openIndex + 4][1].end),\n end: shallow(events[events.length - 3][1].start)\n }\n\n var note = [\n ['enter', group, context],\n events[openIndex + 1],\n events[openIndex + 2],\n events[openIndex + 3],\n events[openIndex + 4],\n ['enter', text, context]\n ]\n\n chunkedSplice(\n note,\n note.length,\n 0,\n resolveAll(\n context.parser.constructs.insideSpan.null,\n events.slice(openIndex + 6, -4),\n context\n )\n )\n\n note.push(\n ['exit', text, context],\n events[events.length - 2],\n events[events.length - 3],\n ['exit', group, context]\n )\n\n chunkedSplice(events, index, events.length - index, note)\n\n return events\n}\n\nfunction tokenizeFootnoteCall(effects, ok, nok) {\n var self = this\n var defined = self.parser.footnotes || (self.parser.footnotes = [])\n var size = 0\n var data\n\n return start\n\n function start(code) {\n // istanbul ignore next - Hooks.\n if (code !== 91) return nok(code)\n\n effects.enter('footnoteCall')\n effects.enter('footnoteCallLabelMarker')\n effects.consume(code)\n effects.exit('footnoteCallLabelMarker')\n return callStart\n }\n\n function callStart(code) {\n if (code !== 94) return nok(code)\n\n effects.enter('footnoteCallMarker')\n effects.consume(code)\n effects.exit('footnoteCallMarker')\n effects.enter('footnoteCallString')\n effects.enter('chunkString').contentType = 'string'\n return callData\n }\n\n function callData(code) {\n var token\n\n if (code === null || code === 91 || size++ > 999) {\n return nok(code)\n }\n\n if (code === 93) {\n if (!data) {\n return nok(code)\n }\n\n effects.exit('chunkString')\n token = effects.exit('footnoteCallString')\n return defined.indexOf(normalizeIdentifier(self.sliceSerialize(token))) <\n 0\n ? nok(code)\n : end(code)\n }\n\n effects.consume(code)\n\n if (!(code < 0 || code === 32)) {\n data = true\n }\n\n return code === 92 ? callEscape : callData\n }\n\n function callEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code)\n size++\n return callData\n }\n\n return callData(code)\n }\n\n function end(code) {\n // Always a `]`.\n effects.enter('footnoteCallLabelMarker')\n effects.consume(code)\n effects.exit('footnoteCallLabelMarker')\n effects.exit('footnoteCall')\n return ok\n }\n}\n\nfunction tokenizeNoteStart(effects, ok, nok) {\n return start\n\n function start(code) {\n // istanbul ignore next - Hooks.\n if (code !== 94) return nok(code)\n\n effects.enter('inlineNoteStart')\n effects.enter('inlineNoteMarker')\n effects.consume(code)\n effects.exit('inlineNoteMarker')\n return noteStart\n }\n\n function noteStart(code) {\n if (code !== 91) return nok(code)\n\n effects.enter('inlineNoteStartMarker')\n effects.consume(code)\n effects.exit('inlineNoteStartMarker')\n effects.exit('inlineNoteStart')\n return ok\n }\n}\n\nfunction tokenizeNoteEnd(effects, ok, nok) {\n var self = this\n\n return start\n\n function start(code) {\n var index = self.events.length\n var hasStart\n\n // Find an opening.\n while (index--) {\n if (self.events[index][1].type === 'inlineNoteStart') {\n hasStart = true\n break\n }\n }\n\n // istanbul ignore next - Hooks.\n if (code !== 93 || !hasStart) {\n return nok(code)\n }\n\n effects.enter('inlineNoteEnd')\n effects.enter('inlineNoteEndMarker')\n effects.consume(code)\n effects.exit('inlineNoteEndMarker')\n effects.exit('inlineNoteEnd')\n return ok\n }\n}\n\nfunction tokenizeDefinitionStart(effects, ok, nok) {\n var self = this\n var defined = self.parser.footnotes || (self.parser.footnotes = [])\n var identifier\n var size = 0\n var data\n\n return start\n\n function start(code) {\n /* istanbul ignore if - hooks. */\n if (code !== 91) {\n return nok(code)\n }\n\n effects.enter('footnoteDefinition')._container = true\n effects.enter('footnoteDefinitionLabel')\n effects.enter('footnoteDefinitionLabelMarker')\n effects.consume(code)\n effects.exit('footnoteDefinitionLabelMarker')\n return labelStart\n }\n\n function labelStart(code) {\n // `^`\n if (code !== 94) return nok(code)\n\n effects.enter('footnoteDefinitionMarker')\n effects.consume(code)\n effects.exit('footnoteDefinitionMarker')\n effects.enter('footnoteDefinitionLabelString')\n return atBreak\n }\n\n function atBreak(code) {\n var token\n\n if (code === null || code === 91 || size > 999) {\n return nok(code)\n }\n\n if (code === 93) {\n if (!data) {\n return nok(code)\n }\n\n token = effects.exit('footnoteDefinitionLabelString')\n identifier = normalizeIdentifier(self.sliceSerialize(token))\n effects.enter('footnoteDefinitionLabelMarker')\n effects.consume(code)\n effects.exit('footnoteDefinitionLabelMarker')\n effects.exit('footnoteDefinitionLabel')\n return labelAfter\n }\n\n if (code === -5 || code === -4 || code === -3) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n size++\n return atBreak\n }\n\n effects.enter('chunkString').contentType = 'string'\n return label(code)\n }\n\n function label(code) {\n if (\n code === null ||\n code === -5 ||\n code === -4 ||\n code === -3 ||\n code === 91 ||\n code === 93 ||\n size > 999\n ) {\n effects.exit('chunkString')\n return atBreak(code)\n }\n\n if (!(code < 0 || code === 32)) {\n data = true\n }\n\n size++\n effects.consume(code)\n return code === 92 ? labelEscape : label\n }\n\n function labelEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code)\n size++\n return label\n }\n\n return label(code)\n }\n\n function labelAfter(code) {\n if (code !== 58) {\n return nok(code)\n }\n\n effects.enter('definitionMarker')\n effects.consume(code)\n effects.exit('definitionMarker')\n return effects.check(blank, onBlank, nonBlank)\n }\n\n function onBlank(code) {\n self.containerState.initialBlankLine = true\n return done(code)\n }\n\n function nonBlank(code) {\n // A space or tab.\n if (code === -2 || code === -1 || code === 32) {\n effects.enter('footnoteDefinitionWhitespace')\n effects.consume(code)\n effects.exit('footnoteDefinitionWhitespace')\n return done(code)\n }\n\n // No space is also fine, just like a block quote marker.\n return done(code)\n }\n\n function done(code) {\n if (defined.indexOf(identifier) < 0) {\n defined.push(identifier)\n }\n\n return ok(code)\n }\n}\n\nfunction tokenizeDefinitionContinuation(effects, ok, nok) {\n var self = this\n\n return effects.check(blank, onBlank, notBlank)\n\n // Continued blank lines are fine.\n function onBlank(code) {\n if (self.containerState.initialBlankLine) {\n self.containerState.furtherBlankLines = true\n }\n\n return ok(code)\n }\n\n // If there were continued blank lines, or this isn’t indented at all.\n function notBlank(code) {\n if (\n self.containerState.furtherBlankLines ||\n !(code === -2 || code === -1 || code === 32)\n ) {\n return nok(code)\n }\n\n self.containerState.initialBlankLine = undefined\n self.containerState.furtherBlankLines = undefined\n return effects.attempt(indent, ok, nok)(code)\n }\n}\n\nfunction footnoteDefinitionEnd(effects) {\n effects.exit('footnoteDefinition')\n}\n\nfunction tokenizeIndent(effects, ok, nok) {\n var self = this\n\n return createSpace(effects, afterPrefix, 'footnoteDefinitionIndent', 5)\n\n function afterPrefix(code) {\n return prefixSize(self.events, 'footnoteDefinitionIndent') === 4\n ? ok(code)\n : nok(code)\n }\n}\n","var normalizeIdentifier = require('micromark/dist/util/normalize-identifier')\n\nexports.canContainEols = ['footnote']\n\nexports.enter = {\n footnoteDefinition: enterFootnoteDefinition,\n footnoteDefinitionLabelString: enterFootnoteDefinitionLabelString,\n footnoteCall: enterFootnoteCall,\n footnoteCallString: enterFootnoteCallString,\n inlineNote: enterNote\n}\nexports.exit = {\n footnoteDefinition: exitFootnoteDefinition,\n footnoteDefinitionLabelString: exitFootnoteDefinitionLabelString,\n footnoteCall: exitFootnoteCall,\n footnoteCallString: exitFootnoteCallString,\n inlineNote: exitNote\n}\n\nfunction enterFootnoteDefinition(token) {\n this.enter(\n {type: 'footnoteDefinition', identifier: '', label: '', children: []},\n token\n )\n}\n\nfunction enterFootnoteDefinitionLabelString() {\n this.buffer()\n}\n\nfunction exitFootnoteDefinitionLabelString(token) {\n var label = this.resume()\n this.stack[this.stack.length - 1].label = label\n this.stack[this.stack.length - 1].identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n}\n\nfunction exitFootnoteDefinition(token) {\n this.exit(token)\n}\n\nfunction enterFootnoteCall(token) {\n this.enter({type: 'footnoteReference', identifier: '', label: ''}, token)\n}\n\nfunction enterFootnoteCallString() {\n this.buffer()\n}\n\nfunction exitFootnoteCallString(token) {\n var label = this.resume()\n this.stack[this.stack.length - 1].label = label\n this.stack[this.stack.length - 1].identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n}\n\nfunction exitFootnoteCall(token) {\n this.exit(token)\n}\n\nfunction enterNote(token) {\n this.enter({type: 'footnote', children: []}, token)\n}\n\nfunction exitNote(token) {\n this.exit(token)\n}\n","'use strict'\n\n/* eslint-env browser */\n\nvar el\n\nvar semicolon = 59 // ';'\n\nmodule.exports = decodeEntity\n\nfunction decodeEntity(characters) {\n var entity = '&' + characters + ';'\n var char\n\n el = el || document.createElement('i')\n el.innerHTML = entity\n char = el.textContent\n\n // Some entities do not require the closing semicolon (`¬` - for instance),\n // which leads to situations where parsing the assumed entity of ¬it; will\n // result in the string `¬it;`. When we encounter a trailing semicolon after\n // parsing and the entity to decode was not a semicolon (`;`), we can\n // assume that the matching was incomplete\n if (char.charCodeAt(char.length - 1) === semicolon && characters !== 'semi') {\n return false\n }\n\n // If the decoded string is equal to the input, the entity was not valid\n return char === entity ? false : char\n}\n","module.exports = association\n\nvar decode = require('parse-entities/decode-entity')\n\nvar characterEscape = /\\\\([!-/:-@[-`{-~])/g\nvar characterReference = /&(#(\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi\n\n// The `label` of an association is the string value: character escapes and\n// references work, and casing is intact.\n// The `identifier` is used to match one association to another: controversially,\n// character escapes and references don’t work in this matching: `©` does\n// not match `©`, and `\\+` does not match `+`.\n// But casing is ignored (and whitespace) is trimmed and collapsed: ` A\\nb`\n// matches `a b`.\n// So, we do prefer the label when figuring out how we’re going to serialize:\n// it has whitespace, casing, and we can ignore most useless character escapes\n// and all character references.\nfunction association(node) {\n if (node.label || !node.identifier) {\n return node.label || ''\n }\n\n return node.identifier\n .replace(characterEscape, '$1')\n .replace(characterReference, decodeIfPossible)\n}\n\nfunction decodeIfPossible($0, $1) {\n return decode($1) || $0\n}\n","module.exports = phrasing\n\nfunction phrasing(parent, context, safeOptions) {\n var children = parent.children || []\n var results = []\n var index = -1\n var before = safeOptions.before\n var after\n var handle\n var child\n\n while (++index < children.length) {\n child = children[index]\n\n if (index + 1 < children.length) {\n handle = context.handle.handlers[children[index + 1].type]\n if (handle && handle.peek) handle = handle.peek\n after = handle\n ? handle(children[index + 1], parent, context, {\n before: '',\n after: ''\n }).charAt(0)\n : ''\n } else {\n after = safeOptions.after\n }\n\n // In some cases, html (text) can be found in phrasing right after an eol.\n // When we’d serialize that, in most cases that would be seen as html\n // (flow).\n // As we can’t escape or so to prevent it from happening, we take a somewhat\n // reasonable approach: replace that eol with a space.\n // See: <https://github.com/syntax-tree/mdast-util-to-markdown/issues/15>\n if (\n results.length > 0 &&\n (before === '\\r' || before === '\\n') &&\n child.type === 'html'\n ) {\n results[results.length - 1] = results[results.length - 1].replace(\n /(\\r?\\n|\\r)$/,\n ' '\n )\n before = ' '\n }\n\n results.push(\n context.handle(child, parent, context, {\n before: before,\n after: after\n })\n )\n\n before = results[results.length - 1].slice(-1)\n }\n\n return results.join('')\n}\n","/*!\n * repeat-string <https://github.com/jonschlinkert/repeat-string>\n *\n * Copyright (c) 2014-2015, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\n/**\n * Results cache\n */\n\nvar res = '';\nvar cache;\n\n/**\n * Expose `repeat`\n */\n\nmodule.exports = repeat;\n\n/**\n * Repeat the given `string` the specified `number`\n * of times.\n *\n * **Example:**\n *\n * ```js\n * var repeat = require('repeat-string');\n * repeat('A', 5);\n * //=> AAAAA\n * ```\n *\n * @param {String} `string` The string to repeat\n * @param {Number} `number` The number of times to repeat the string\n * @return {String} Repeated string\n * @api public\n */\n\nfunction repeat(str, num) {\n if (typeof str !== 'string') {\n throw new TypeError('expected a string');\n }\n\n // cover common, quick use cases\n if (num === 1) return str;\n if (num === 2) return str + str;\n\n var max = str.length * num;\n if (cache !== str || typeof cache === 'undefined') {\n cache = str;\n res = '';\n } else if (res.length >= max) {\n return res.substr(0, max);\n }\n\n while (max > res.length && num > 1) {\n if (num & 1) {\n res += str;\n }\n\n num >>= 1;\n str += str;\n }\n\n res += str;\n res = res.substr(0, max);\n return res;\n}\n","module.exports = flow\n\nvar repeat = require('repeat-string')\n\nfunction flow(parent, context) {\n var children = parent.children || []\n var results = []\n var index = -1\n var child\n\n while (++index < children.length) {\n child = children[index]\n\n results.push(\n context.handle(child, parent, context, {before: '\\n', after: '\\n'})\n )\n\n if (index + 1 < children.length) {\n results.push(between(child, children[index + 1]))\n }\n }\n\n return results.join('')\n\n function between(left, right) {\n var index = -1\n var result\n\n while (++index < context.join.length) {\n result = context.join[index](left, right, parent, context)\n\n if (result === true || result === 1) {\n break\n }\n\n if (typeof result === 'number') {\n return repeat('\\n', 1 + Number(result))\n }\n\n if (result === false) {\n return '\\n\\n<!---->\\n\\n'\n }\n }\n\n return '\\n\\n'\n }\n}\n","module.exports = indentLines\n\nvar eol = /\\r?\\n|\\r/g\n\nfunction indentLines(value, map) {\n var result = []\n var start = 0\n var line = 0\n var match\n\n while ((match = eol.exec(value))) {\n one(value.slice(start, match.index))\n result.push(match[0])\n start = match.index + match[0].length\n line++\n }\n\n one(value.slice(start))\n\n return result.join('')\n\n function one(value) {\n result.push(map(value, line, !value))\n }\n}\n","module.exports = patternCompile\n\nfunction patternCompile(pattern) {\n var before\n var after\n\n if (!pattern._compiled) {\n before = pattern.before ? '(?:' + pattern.before + ')' : ''\n after = pattern.after ? '(?:' + pattern.after + ')' : ''\n\n if (pattern.atBreak) {\n before = '[\\\\r\\\\n][\\\\t ]*' + before\n }\n\n pattern._compiled = new RegExp(\n (before ? '(' + before + ')' : '') +\n (/[|\\\\{}()[\\]^$+*?.-]/.test(pattern.character) ? '\\\\' : '') +\n pattern.character +\n (after || ''),\n 'g'\n )\n }\n\n return pattern._compiled\n}\n","module.exports = patternInScope\n\nfunction patternInScope(stack, pattern) {\n return (\n listInScope(stack, pattern.inConstruct, true) &&\n !listInScope(stack, pattern.notInConstruct)\n )\n}\n\nfunction listInScope(stack, list, none) {\n var index\n\n if (!list) {\n return none\n }\n\n if (typeof list === 'string') {\n list = [list]\n }\n\n index = -1\n\n while (++index < list.length) {\n if (stack.indexOf(list[index]) !== -1) {\n return true\n }\n }\n\n return false\n}\n","module.exports = safe\n\nvar patternCompile = require('./pattern-compile')\nvar patternInScope = require('./pattern-in-scope')\n\nfunction safe(context, input, config) {\n var value = (config.before || '') + (input || '') + (config.after || '')\n var positions = []\n var result = []\n var infos = {}\n var index = -1\n var before\n var after\n var position\n var pattern\n var expression\n var match\n var start\n var end\n\n while (++index < context.unsafe.length) {\n pattern = context.unsafe[index]\n\n if (!patternInScope(context.stack, pattern)) {\n continue\n }\n\n expression = patternCompile(pattern)\n\n while ((match = expression.exec(value))) {\n before = 'before' in pattern || pattern.atBreak\n after = 'after' in pattern\n\n position = match.index + (before ? match[1].length : 0)\n\n if (positions.indexOf(position) === -1) {\n positions.push(position)\n infos[position] = {before: before, after: after}\n } else {\n if (infos[position].before && !before) {\n infos[position].before = false\n }\n\n if (infos[position].after && !after) {\n infos[position].after = false\n }\n }\n }\n }\n\n positions.sort(numerical)\n\n start = config.before ? config.before.length : 0\n end = value.length - (config.after ? config.after.length : 0)\n index = -1\n\n while (++index < positions.length) {\n position = positions[index]\n\n if (\n // Character before or after matched:\n position < start ||\n position >= end\n ) {\n continue\n }\n\n // If this character is supposed to be escaped because it has a condition on\n // the next character, and the next character is definitly being escaped,\n // then skip this escape.\n if (\n position + 1 < end &&\n positions[index + 1] === position + 1 &&\n infos[position].after &&\n !infos[position + 1].before &&\n !infos[position + 1].after\n ) {\n continue\n }\n\n if (start !== position) {\n // If we have to use a character reference, an ampersand would be more\n // correct, but as backslashes only care about punctuation, either will\n // do the trick\n result.push(escapeBackslashes(value.slice(start, position), '\\\\'))\n }\n\n start = position\n\n if (\n /[!-/:-@[-`{-~]/.test(value.charAt(position)) &&\n (!config.encode || config.encode.indexOf(value.charAt(position)) === -1)\n ) {\n // Character escape.\n result.push('\\\\')\n } else {\n // Character reference.\n result.push(\n '&#x' + value.charCodeAt(position).toString(16).toUpperCase() + ';'\n )\n start++\n }\n }\n\n result.push(escapeBackslashes(value.slice(start, end), config.after))\n\n return result.join('')\n}\n\nfunction numerical(a, b) {\n return a - b\n}\n\nfunction escapeBackslashes(value, after) {\n var expression = /\\\\(?=[!-/:-@[-`{-~])/g\n var positions = []\n var results = []\n var index = -1\n var start = 0\n var whole = value + after\n var match\n\n while ((match = expression.exec(whole))) {\n positions.push(match.index)\n }\n\n while (++index < positions.length) {\n if (start !== positions[index]) {\n results.push(value.slice(start, positions[index]))\n }\n\n results.push('\\\\')\n start = positions[index]\n }\n\n results.push(value.slice(start))\n\n return results.join('')\n}\n","exports.unsafe = [\n // This is on by default already.\n {character: '[', inConstruct: ['phrasing', 'label', 'reference']}\n]\nexports.handlers = {\n footnote: footnote,\n footnoteDefinition: footnoteDefinition,\n footnoteReference: footnoteReference\n}\n\nvar association = require('mdast-util-to-markdown/lib/util/association')\nvar phrasing = require('mdast-util-to-markdown/lib/util/container-phrasing')\nvar flow = require('mdast-util-to-markdown/lib/util/container-flow')\nvar indentLines = require('mdast-util-to-markdown/lib/util/indent-lines')\nvar safe = require('mdast-util-to-markdown/lib/util/safe')\n\nfootnoteReference.peek = footnoteReferencePeek\nfootnote.peek = footnotePeek\n\nfunction footnoteReference(node, _, context) {\n var exit = context.enter('footnoteReference')\n var subexit = context.enter('reference')\n var reference = safe(context, association(node), {before: '^', after: ']'})\n subexit()\n exit()\n return '[^' + reference + ']'\n}\n\nfunction footnoteReferencePeek() {\n return '['\n}\n\nfunction footnote(node, _, context) {\n var exit = context.enter('footnote')\n var subexit = context.enter('label')\n var value = '^[' + phrasing(node, context, {before: '[', after: ']'}) + ']'\n subexit()\n exit()\n return value\n}\n\nfunction footnotePeek() {\n return '^'\n}\n\nfunction footnoteDefinition(node, _, context) {\n var exit = context.enter('footnoteDefinition')\n var subexit = context.enter('label')\n var label =\n '[^' + safe(context, association(node), {before: '^', after: ']'}) + ']:'\n var value\n subexit()\n\n value = indentLines(flow(node, context), map)\n exit()\n\n return value\n\n function map(line, index, blank) {\n if (index) {\n return (blank ? '' : ' ') + line\n }\n\n return (blank ? label : label + ' ') + line\n }\n}\n","'use strict'\n\nvar syntax = require('micromark-extension-footnote')\nvar fromMarkdown = require('mdast-util-footnote/from-markdown')\nvar toMarkdown = require('mdast-util-footnote/to-markdown')\nvar warningIssued\n\nmodule.exports = footnotes\n\nfunction footnotes(options) {\n var data = this.data()\n\n /* istanbul ignore next - old remark. */\n if (\n !warningIssued &&\n ((this.Parser &&\n this.Parser.prototype &&\n this.Parser.prototype.blockTokenizers) ||\n (this.Compiler &&\n this.Compiler.prototype &&\n this.Compiler.prototype.visitors))\n ) {\n warningIssued = true\n console.warn(\n '[remark-footnotes] Warning: please upgrade to remark 13 to use this plugin'\n )\n }\n\n add('micromarkExtensions', syntax(options))\n add('fromMarkdownExtensions', fromMarkdown)\n add('toMarkdownExtensions', toMarkdown)\n\n function add(field, value) {\n /* istanbul ignore if - other extensions. */\n if (data[field]) data[field].push(value)\n else data[field] = [value]\n }\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n */\n\n/**\n * @typedef {Record<string, unknown>} Props\n * @typedef {null | undefined | string | Props | TestFunctionAnything | Array<string | Props | TestFunctionAnything>} Test\n * Check for an arbitrary node, unaware of TypeScript inferral.\n *\n * @callback TestFunctionAnything\n * Check if a node passes a test, unaware of TypeScript inferral.\n * @param {unknown} this\n * The given context.\n * @param {Node} node\n * A node.\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {boolean | void}\n * Whether this node passes the test.\n */\n\n/**\n * @template {Node} Kind\n * Node type.\n * @typedef {Kind['type'] | Partial<Kind> | TestFunctionPredicate<Kind> | Array<Kind['type'] | Partial<Kind> | TestFunctionPredicate<Kind>>} PredicateTest\n * Check for a node that can be inferred by TypeScript.\n */\n\n/**\n * Check if a node passes a certain test.\n *\n * @template {Node} Kind\n * Node type.\n * @callback TestFunctionPredicate\n * Complex test function for a node that can be inferred by TypeScript.\n * @param {Node} node\n * A node.\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {node is Kind}\n * Whether this node passes the test.\n */\n\n/**\n * @callback AssertAnything\n * Check that an arbitrary value is a node, unaware of TypeScript inferral.\n * @param {unknown} [node]\n * Anything (typically a node).\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {boolean}\n * Whether this is a node and passes a test.\n */\n\n/**\n * Check if a node is a node and passes a certain node test.\n *\n * @template {Node} Kind\n * Node type.\n * @callback AssertPredicate\n * Check that an arbitrary value is a specific node, aware of TypeScript.\n * @param {unknown} [node]\n * Anything (typically a node).\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {node is Kind}\n * Whether this is a node and passes a test.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param node\n * Thing to check, typically `Node`.\n * @param test\n * A check for a specific node.\n * @param index\n * The node’s position in its parent.\n * @param parent\n * The node’s parent.\n * @returns\n * Whether `node` is a node and passes a test.\n */\nexport const is =\n /**\n * @type {(\n * (() => false) &\n * (<Kind extends Node = Node>(node: unknown, test: PredicateTest<Kind>, index: number, parent: Parent, context?: unknown) => node is Kind) &\n * (<Kind extends Node = Node>(node: unknown, test: PredicateTest<Kind>, index?: null | undefined, parent?: null | undefined, context?: unknown) => node is Kind) &\n * ((node: unknown, test: Test, index: number, parent: Parent, context?: unknown) => boolean) &\n * ((node: unknown, test?: Test, index?: null | undefined, parent?: null | undefined, context?: unknown) => boolean)\n * )}\n */\n (\n /**\n * @param {unknown} [node]\n * @param {Test} [test]\n * @param {number | null | undefined} [index]\n * @param {Parent | null | undefined} [parent]\n * @param {unknown} [context]\n * @returns {boolean}\n */\n // eslint-disable-next-line max-params\n function is(node, test, index, parent, context) {\n const check = convert(test)\n\n if (\n index !== undefined &&\n index !== null &&\n (typeof index !== 'number' ||\n index < 0 ||\n index === Number.POSITIVE_INFINITY)\n ) {\n throw new Error('Expected positive finite index')\n }\n\n if (\n parent !== undefined &&\n parent !== null &&\n (!is(parent) || !parent.children)\n ) {\n throw new Error('Expected parent node')\n }\n\n if (\n (parent === undefined || parent === null) !==\n (index === undefined || index === null)\n ) {\n throw new Error('Expected both parent and index')\n }\n\n // @ts-expect-error Looks like a node.\n return node && node.type && typeof node.type === 'string'\n ? Boolean(check.call(context, node, index, parent))\n : false\n }\n )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param test\n * * when nullish, checks if `node` is a `Node`.\n * * when `string`, works like passing `(node) => node.type === test`.\n * * when `function` checks if function passed the node is true.\n * * when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n * * when `array`, checks if any one of the subtests pass.\n * @returns\n * An assertion.\n */\nexport const convert =\n /**\n * @type {(\n * (<Kind extends Node>(test: PredicateTest<Kind>) => AssertPredicate<Kind>) &\n * ((test?: Test) => AssertAnything)\n * )}\n */\n (\n /**\n * @param {Test} [test]\n * @returns {AssertAnything}\n */\n function (test) {\n if (test === undefined || test === null) {\n return ok\n }\n\n if (typeof test === 'string') {\n return typeFactory(test)\n }\n\n if (typeof test === 'object') {\n return Array.isArray(test) ? anyFactory(test) : propsFactory(test)\n }\n\n if (typeof test === 'function') {\n return castFactory(test)\n }\n\n throw new Error('Expected function, string, or object as test')\n }\n )\n\n/**\n * @param {Array<string | Props | TestFunctionAnything>} tests\n * @returns {AssertAnything}\n */\nfunction anyFactory(tests) {\n /** @type {Array<AssertAnything>} */\n const checks = []\n let index = -1\n\n while (++index < tests.length) {\n checks[index] = convert(tests[index])\n }\n\n return castFactory(any)\n\n /**\n * @this {unknown}\n * @param {Array<unknown>} parameters\n * @returns {boolean}\n */\n function any(...parameters) {\n let index = -1\n\n while (++index < checks.length) {\n if (checks[index].call(this, ...parameters)) return true\n }\n\n return false\n }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {AssertAnything}\n */\nfunction propsFactory(check) {\n return castFactory(all)\n\n /**\n * @param {Node} node\n * @returns {boolean}\n */\n function all(node) {\n /** @type {string} */\n let key\n\n for (key in check) {\n // @ts-expect-error: hush, it sure works as an index.\n if (node[key] !== check[key]) return false\n }\n\n return true\n }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {AssertAnything}\n */\nfunction typeFactory(check) {\n return castFactory(type)\n\n /**\n * @param {Node} node\n */\n function type(node) {\n return node && node.type === check\n }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunctionAnything} check\n * @returns {AssertAnything}\n */\nfunction castFactory(check) {\n return assertion\n\n /**\n * @this {unknown}\n * @param {unknown} node\n * @param {Array<unknown>} parameters\n * @returns {boolean}\n */\n function assertion(node, ...parameters) {\n return Boolean(\n node &&\n typeof node === 'object' &&\n 'type' in node &&\n // @ts-expect-error: fine.\n Boolean(check.call(this, node, ...parameters))\n )\n }\n}\n\nfunction ok() {\n return true\n}\n","/**\n * @param {string} d\n * @returns {string}\n */\nexport function color(d) {\n return d\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n * @typedef {import('unist-util-is').Test} Test\n */\n\n/**\n * @typedef {boolean | 'skip'} Action\n * Union of the action types.\n *\n * @typedef {number} Index\n * Move to the sibling at `index` next (after node itself is completely\n * traversed).\n *\n * Useful if mutating the tree, such as removing the node the visitor is\n * currently on, or any of its previous siblings.\n * Results less than 0 or greater than or equal to `children.length` stop\n * traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n * List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n * Any value that can be returned from a visitor.\n */\n\n/**\n * @template {Node} [Visited=Node]\n * Visited node type.\n * @template {Parent} [Ancestor=Parent]\n * Ancestor type.\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform the parent of node (the last of `ancestors`).\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of an ancestor still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Array<Ancestor>} ancestors\n * Ancestors of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n */\n\n/**\n * @template {Node} [Tree=Node]\n * Tree type.\n * @template {Test} [Check=string]\n * Test type.\n * @typedef {Visitor<import('./complex-types.js').Matches<import('./complex-types.js').InclusiveDescendant<Tree>, Check>, Extract<import('./complex-types.js').InclusiveDescendant<Tree>, Parent>>} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parents`.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from './color.js'\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @param tree\n * Tree to traverse.\n * @param test\n * `unist-util-is`-compatible test\n * @param visitor\n * Handle each node.\n * @param reverse\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns\n * Nothing.\n */\nexport const visitParents =\n /**\n * @type {(\n * (<Tree extends Node, Check extends Test>(tree: Tree, test: Check, visitor: BuildVisitor<Tree, Check>, reverse?: boolean | null | undefined) => void) &\n * (<Tree extends Node>(tree: Tree, visitor: BuildVisitor<Tree>, reverse?: boolean | null | undefined) => void)\n * )}\n */\n (\n /**\n * @param {Node} tree\n * @param {Test} test\n * @param {Visitor<Node>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {void}\n */\n function (tree, test, visitor, reverse) {\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor\n // @ts-expect-error no visitor given, so `visitor` is test.\n visitor = test\n test = null\n }\n\n const is = convert(test)\n const step = reverse ? -1 : 1\n\n factory(tree, undefined, [])()\n\n /**\n * @param {Node} node\n * @param {number | undefined} index\n * @param {Array<Parent>} parents\n */\n function factory(node, index, parents) {\n /** @type {Record<string, unknown>} */\n // @ts-expect-error: hush\n const value = node && typeof node === 'object' ? node : {}\n\n if (typeof value.type === 'string') {\n const name =\n // `hast`\n typeof value.tagName === 'string'\n ? value.tagName\n : // `xast`\n typeof value.name === 'string'\n ? value.name\n : undefined\n\n Object.defineProperty(visit, 'name', {\n value:\n 'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n })\n }\n\n return visit\n\n function visit() {\n /** @type {ActionTuple} */\n let result = []\n /** @type {ActionTuple} */\n let subresult\n /** @type {number} */\n let offset\n /** @type {Array<Parent>} */\n let grandparents\n\n if (!test || is(node, index, parents[parents.length - 1] || null)) {\n result = toResult(visitor(node, parents))\n\n if (result[0] === EXIT) {\n return result\n }\n }\n\n // @ts-expect-error looks like a parent.\n if (node.children && result[0] !== SKIP) {\n // @ts-expect-error looks like a parent.\n offset = (reverse ? node.children.length : -1) + step\n // @ts-expect-error looks like a parent.\n grandparents = parents.concat(node)\n\n // @ts-expect-error looks like a parent.\n while (offset > -1 && offset < node.children.length) {\n // @ts-expect-error looks like a parent.\n subresult = factory(node.children[offset], offset, grandparents)()\n\n if (subresult[0] === EXIT) {\n return subresult\n }\n\n offset =\n typeof subresult[1] === 'number' ? subresult[1] : offset + step\n }\n }\n\n return result\n }\n }\n }\n )\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n * Valid return values from visitors.\n * @returns {ActionTuple}\n * Clean result.\n */\nfunction toResult(value) {\n if (Array.isArray(value)) {\n return value\n }\n\n if (typeof value === 'number') {\n return [CONTINUE, value]\n }\n\n return [value]\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n * @typedef {import('unist-util-is').Test} Test\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * Check if `Child` can be a child of `Ancestor`.\n *\n * Returns the ancestor when `Child` can be a child of `Ancestor`, or returns\n * `never`.\n *\n * @template {Node} Ancestor\n * Node type.\n * @template {Node} Child\n * Node type.\n * @typedef {(\n * Ancestor extends Parent\n * ? Child extends Ancestor['children'][number]\n * ? Ancestor\n * : never\n * : never\n * )} ParentsOf\n */\n\n/**\n * @template {Node} [Visited=Node]\n * Visited node type.\n * @template {Parent} [Ancestor=Parent]\n * Ancestor type.\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform `parent`.\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of `parent` still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Visited extends Node ? number | null : never} index\n * Index of `node` in `parent`.\n * @param {Ancestor extends Node ? Ancestor | null : never} parent\n * Parent of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n */\n\n/**\n * Build a typed `Visitor` function from a node and all possible parents.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n *\n * @template {Node} Visited\n * Node type.\n * @template {Parent} Ancestor\n * Parent type.\n * @typedef {Visitor<Visited, ParentsOf<Ancestor, Visited>>} BuildVisitorFromMatch\n */\n\n/**\n * Build a typed `Visitor` function from a list of descendants and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n *\n * @template {Node} Descendant\n * Node type.\n * @template {Test} Check\n * Test type.\n * @typedef {(\n * BuildVisitorFromMatch<\n * import('unist-util-visit-parents/complex-types.js').Matches<Descendant, Check>,\n * Extract<Descendant, Parent>\n * >\n * )} BuildVisitorFromDescendants\n */\n\n/**\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n *\n * @template {Node} [Tree=Node]\n * Node type.\n * @template {Test} [Check=string]\n * Test type.\n * @typedef {(\n * BuildVisitorFromDescendants<\n * import('unist-util-visit-parents/complex-types.js').InclusiveDescendant<Tree>,\n * Check\n * >\n * )} BuildVisitor\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @param tree\n * Tree to traverse.\n * @param test\n * `unist-util-is`-compatible test\n * @param visitor\n * Handle each node.\n * @param reverse\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns\n * Nothing.\n */\nexport const visit =\n /**\n * @type {(\n * (<Tree extends Node, Check extends Test>(tree: Tree, test: Check, visitor: BuildVisitor<Tree, Check>, reverse?: boolean | null | undefined) => void) &\n * (<Tree extends Node>(tree: Tree, visitor: BuildVisitor<Tree>, reverse?: boolean | null | undefined) => void)\n * )}\n */\n (\n /**\n * @param {Node} tree\n * @param {Test} test\n * @param {Visitor} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {void}\n */\n function (tree, test, visitor, reverse) {\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor\n visitor = test\n test = null\n }\n\n visitParents(tree, test, overload, reverse)\n\n /**\n * @param {Node} node\n * @param {Array<Parent>} parents\n */\n function overload(node, parents) {\n const parent = parents[parents.length - 1]\n return visitor(\n node,\n parent ? parent.children.indexOf(node) : null,\n parent\n )\n }\n }\n )\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n","/**\n * Parse space-separated tokens to an array of strings.\n *\n * @param {string} value\n * Space-separated tokens.\n * @returns {Array<string>}\n * List of tokens.\n */\nexport function parse(value) {\n const input = String(value || '').trim()\n return input ? input.split(/[ \\t\\n\\r\\f]+/g) : []\n}\n\n/**\n * Serialize an array of strings as space separated-tokens.\n *\n * @param {Array<string|number>} values\n * List of tokens.\n * @returns {string}\n * Space-separated tokens.\n */\nexport function stringify(values) {\n return values.join(' ').trim()\n}\n","/**\n * @typedef {import('unist').Parent} Parent\n * @typedef {import('hast').Element} Element\n */\n\n/**\n * @typedef {null | undefined | string | TestFunctionAnything | Array<string | TestFunctionAnything>} Test\n * Check for an arbitrary element, unaware of TypeScript inferral.\n *\n * @callback TestFunctionAnything\n * Check if an element passes a test, unaware of TypeScript inferral.\n * @param {Element} element\n * An element.\n * @param {number | null | undefined} [index]\n * The element’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The element’s parent.\n * @returns {boolean | void}\n * Whether this element passes the test.\n */\n\n/**\n * @template {Element} T\n * Element type.\n * @typedef {T['tagName'] | TestFunctionPredicate<T> | Array<T['tagName'] | TestFunctionPredicate<T>>} PredicateTest\n * Check for an element that can be inferred by TypeScript.\n */\n\n/**\n * Check if an element passes a certain node test.\n *\n * @template {Element} T\n * Element type.\n * @callback TestFunctionPredicate\n * Complex test function for an element that can be inferred by TypeScript.\n * @param {Element} element\n * An element.\n * @param {number | null | undefined} [index]\n * The element’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The element’s parent.\n * @returns {element is T}\n * Whether this element passes the test.\n */\n\n/**\n * @callback AssertAnything\n * Check that an arbitrary value is an element, unaware of TypeScript inferral.\n * @param {unknown} [node]\n * Anything (typically a node).\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {boolean}\n * Whether this is an element and passes a test.\n */\n\n/**\n * Check if a node is an element and passes a certain node test\n *\n * @template {Element} T\n * Element type.\n * @callback AssertPredicate\n * Check that an arbitrary value is a specific element, aware of TypeScript.\n * @param {unknown} [node]\n * Anything (typically a node).\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {node is T}\n * Whether this is an element and passes a test.\n */\n\n/**\n * Check if `node` is an `Element` and whether it passes the given test.\n *\n * @param node\n * Thing to check, typically `Node`.\n * @param test\n * A check for a specific element.\n * @param index\n * The node’s position in its parent.\n * @param parent\n * The node’s parent.\n * @returns\n * Whether `node` is an element and passes a test.\n */\nexport const isElement =\n /**\n * @type {(\n * (() => false) &\n * (<T extends Element = Element>(node: unknown, test?: PredicateTest<T>, index?: number, parent?: Parent, context?: unknown) => node is T) &\n * ((node: unknown, test: Test, index?: number, parent?: Parent, context?: unknown) => boolean)\n * )}\n */\n (\n /**\n * @param {unknown} [node]\n * @param {Test | undefined} [test]\n * @param {number | null | undefined} [index]\n * @param {Parent | null | undefined} [parent]\n * @param {unknown} [context]\n * @returns {boolean}\n */\n // eslint-disable-next-line max-params\n function (node, test, index, parent, context) {\n const check = convertElement(test)\n\n if (\n index !== undefined &&\n index !== null &&\n (typeof index !== 'number' ||\n index < 0 ||\n index === Number.POSITIVE_INFINITY)\n ) {\n throw new Error('Expected positive finite index for child node')\n }\n\n if (\n parent !== undefined &&\n parent !== null &&\n (!parent.type || !parent.children)\n ) {\n throw new Error('Expected parent node')\n }\n\n // @ts-expect-error Looks like a node.\n if (!node || !node.type || typeof node.type !== 'string') {\n return false\n }\n\n if (\n (parent === undefined || parent === null) !==\n (index === undefined || index === null)\n ) {\n throw new Error('Expected both parent and index')\n }\n\n return check.call(context, node, index, parent)\n }\n )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param test\n * * When nullish, checks if `node` is an `Element`.\n * * When `string`, works like passing `(element) => element.tagName === test`.\n * * When `function` checks if function passed the element is true.\n * * When `array`, checks any one of the subtests pass.\n * @returns\n * An assertion.\n */\nexport const convertElement =\n /**\n * @type {(\n * (<T extends Element>(test: T['tagName'] | TestFunctionPredicate<T>) => AssertPredicate<T>) &\n * ((test?: Test) => AssertAnything)\n * )}\n */\n (\n /**\n * @param {Test | null | undefined} [test]\n * @returns {AssertAnything}\n */\n function (test) {\n if (test === undefined || test === null) {\n return element\n }\n\n if (typeof test === 'string') {\n return tagNameFactory(test)\n }\n\n if (typeof test === 'object') {\n return anyFactory(test)\n }\n\n if (typeof test === 'function') {\n return castFactory(test)\n }\n\n throw new Error('Expected function, string, or array as test')\n }\n )\n\n/**\n * Handle multiple tests.\n *\n * @param {Array<string | TestFunctionAnything>} tests\n * @returns {AssertAnything}\n */\nfunction anyFactory(tests) {\n /** @type {Array<AssertAnything>} */\n const checks = []\n let index = -1\n\n while (++index < tests.length) {\n checks[index] = convertElement(tests[index])\n }\n\n return castFactory(any)\n\n /**\n * @this {unknown}\n * @param {Array<unknown>} parameters\n * @returns {boolean}\n */\n function any(...parameters) {\n let index = -1\n\n while (++index < checks.length) {\n if (checks[index].call(this, ...parameters)) {\n return true\n }\n }\n\n return false\n }\n}\n\n/**\n * Turn a string into a test for an element with a certain tag name.\n *\n * @param {string} check\n * @returns {AssertAnything}\n */\nfunction tagNameFactory(check) {\n return tagName\n\n /**\n * @param {unknown} node\n * @returns {boolean}\n */\n function tagName(node) {\n return element(node) && node.tagName === check\n }\n}\n\n/**\n * Turn a custom test into a test for an element that passes that test.\n *\n * @param {TestFunctionAnything} check\n * @returns {AssertAnything}\n */\nfunction castFactory(check) {\n return assertion\n\n /**\n * @this {unknown}\n * @param {unknown} node\n * @param {Array<unknown>} parameters\n * @returns {boolean}\n */\n function assertion(node, ...parameters) {\n // @ts-expect-error: fine.\n return element(node) && Boolean(check.call(this, node, ...parameters))\n }\n}\n\n/**\n * Make sure something is an element.\n *\n * @param {unknown} node\n * @returns {node is Element}\n */\nfunction element(node) {\n return Boolean(\n node &&\n typeof node === 'object' &&\n // @ts-expect-error Looks like a node.\n node.type === 'element' &&\n // @ts-expect-error Looks like an element.\n typeof node.tagName === 'string'\n )\n}\n","// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1\n// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\nconst ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/;\n\n// Windows paths like `c:\\`\nconst WINDOWS_PATH_REGEX = /^[a-zA-Z]:\\\\/;\n\nexport default function isAbsoluteUrl(url) {\n\tif (typeof url !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof url}\\``);\n\t}\n\n\tif (WINDOWS_PATH_REGEX.test(url)) {\n\t\treturn false;\n\t}\n\n\treturn ABSOLUTE_URL_REGEX.test(url);\n}\n","/**\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast-util-is-element').Test} Test\n *\n * @typedef {Element['children'][number]} ElementChild\n *\n * @typedef {'_self'|'_blank'|'_parent'|'_top'} Target\n * @typedef {Array<string>|string} Rel\n * @typedef {Array<string>} Protocols\n * @typedef {ElementChild|Array<ElementChild>} Content\n * @typedef {Properties} ContentProperties\n *\n * @callback TargetCallback\n * @param {Element} node\n * @returns {Target|null|undefined}\n *\n * @callback RelCallback\n * @param {Element} node\n * @returns {Rel|null|undefined}\n *\n * @callback ProtocolsCallback\n * @param {Element} node\n * @returns {Protocols|null|undefined}\n *\n * @callback ContentCallback\n * @param {Element} node\n * @returns {Content|null|undefined}\n *\n * @callback ContentPropertiesCallback\n * @param {Element} node\n * @returns {Properties|null|undefined}\n *\n * @typedef Options\n * Configuration.\n * @property {Target|TargetCallback} [target]\n * How to display referenced documents (`string?`: `_self`, `_blank`,\n * `_parent`, or `_top`, default: `_blank`).\n * The default (nothing) is to not set `target`s on links.\n * @property {Rel|RelCallback} [rel=['nofollow', 'noopener', 'noreferrer']]\n * Link types to hint about the referenced documents.\n * Pass an empty array (`[]`) to not set `rel`s on links.\n *\n * **Note**: when using a `target`, add `noopener` and `noreferrer` to avoid\n * exploitation of the `window.opener` API.\n * @property {Protocols|ProtocolsCallback} [protocols=['http', 'https']]\n * Protocols to check, such as `mailto` or `tel`.\n * @property {Content|ContentCallback} [content]\n * hast content to insert at the end of external links.\n * Will be inserted in a `<span>` element.\n *\n * Useful for improving accessibility by giving users advanced warning when\n * opening a new window.\n * @property {ContentProperties|ContentPropertiesCallback} [contentProperties]\n * hast properties to add to the `span` wrapping `content`, when given.\n * @property {Test} [test]\n * Additional test to define which external link elements are modified.\n * Any test that can be given to `hast-util-is-element` is supported.\n * The default (no test) is to modify all external links.\n */\n\nimport {visit} from 'unist-util-visit'\nimport {parse} from 'space-separated-tokens'\nimport {convertElement} from 'hast-util-is-element'\nimport isAbsoluteUrl from 'is-absolute-url'\nimport extend from 'extend'\n\nconst defaultRel = ['nofollow']\nconst defaultProtocols = ['http', 'https']\n\n/**\n * If this is a value, return that.\n * If this is a function instead, call it to get the result.\n *\n * @template T\n * @param {T} value\n * @param {Element} node\n * @returns {T extends Function ? ReturnType<T> : T}\n */\nfunction callIfNeeded(value, node) {\n return typeof value === 'function' ? value(node) : value\n}\n\n/**\n * Plugin to automatically add `target` and `rel` attributes to external links.\n *\n * @type {import('unified').Plugin<[Options?] | Array<void>, Root>}\n */\nexport default function rehypeExternalLinks(options = {}) {\n const is = convertElement(options.test)\n\n return (tree) => {\n visit(tree, 'element', (node, index, parent) => {\n if (\n node.tagName === 'a' &&\n node.properties &&\n typeof node.properties.href === 'string' &&\n is(node, index, parent)\n ) {\n const url = node.properties.href\n const protocol = url.slice(0, url.indexOf(':'))\n\n const target = callIfNeeded(options.target, node)\n\n const relRaw = callIfNeeded(options.rel, node) || defaultRel\n const rel = typeof relRaw === 'string' ? parse(relRaw) : relRaw\n\n const protocols =\n callIfNeeded(options.protocols, node) || defaultProtocols\n\n const contentRaw = callIfNeeded(options.content, node)\n const content =\n contentRaw && !Array.isArray(contentRaw) ? [contentRaw] : contentRaw\n\n const contentProperties =\n callIfNeeded(options.contentProperties, node) || {}\n\n if (\n isAbsoluteUrl(url)\n ? protocols.includes(protocol)\n : url.startsWith('//')\n ) {\n if (target) {\n node.properties.target = target\n }\n\n if (rel.length > 0) {\n node.properties.rel = rel.concat()\n }\n\n if (content) {\n node.children.push({\n type: 'element',\n tagName: 'span',\n properties: extend(true, contentProperties),\n children: extend(true, content)\n })\n }\n }\n }\n })\n }\n}\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n var target = {}\n\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n\n return target\n}\n","'use strict'\n\nvar xtend = require('xtend')\nvar defaults = require('./github.json')\n\nmodule.exports = wrapper\n\nvar own = {}.hasOwnProperty\nvar push = [].push\n\nvar nodeSchema = {\n root: {children: all},\n doctype: handleDoctype,\n comment: handleComment,\n element: {\n tagName: handleTagName,\n properties: handleProperties,\n children: all\n },\n text: {value: handleValue},\n '*': {data: allow, position: allow}\n}\n\n// Sanitize `node`, according to `schema`.\nfunction wrapper(node, schema) {\n var ctx = {type: 'root', children: []}\n var replace\n\n if (node && typeof node === 'object' && node.type) {\n replace = one(xtend(defaults, schema || {}), node, [])\n\n if (replace) {\n if ('length' in replace) {\n if (replace.length === 1) {\n ctx = replace[0]\n } else {\n ctx.children = replace\n }\n } else {\n ctx = replace\n }\n }\n }\n\n return ctx\n}\n\n// Sanitize `node`.\nfunction one(schema, node, stack) {\n var type = node && node.type\n var replacement = {type: node.type}\n var replace\n var definition\n var allowed\n var result\n var key\n\n if (own.call(nodeSchema, type)) {\n definition = nodeSchema[type]\n\n if (typeof definition === 'function') {\n definition = definition(schema, node)\n }\n\n if (definition) {\n replace = true\n allowed = xtend(definition, nodeSchema['*'])\n\n for (key in allowed) {\n result = allowed[key](schema, node[key], node, stack)\n\n if (result === false) {\n replace = null\n // Set the non-safe value.\n replacement[key] = node[key]\n } else if (result != null) {\n replacement[key] = result\n }\n }\n }\n }\n\n if (replace) {\n return replacement\n }\n\n return replacement.children &&\n replacement.children.length &&\n schema.strip.indexOf(replacement.tagName) < 0\n ? replacement.children\n : null\n}\n\n// Sanitize `children`.\nfunction all(schema, children, node, stack) {\n var results = []\n var index = -1\n var value\n\n if (children) {\n stack.push(node.tagName)\n\n while (++index < children.length) {\n value = one(schema, children[index], stack)\n\n if (value) {\n if ('length' in value) {\n push.apply(results, value)\n } else {\n results.push(value)\n }\n }\n }\n\n stack.pop()\n }\n\n return results\n}\n\n// Sanitize `properties`.\nfunction handleProperties(schema, properties, node, stack) {\n var name = handleTagName(schema, node.tagName, node, stack)\n var reqs = schema.required || /* istanbul ignore next */ {}\n var props = properties || {}\n var allowed = xtend(\n toPropertyValueMap(schema.attributes['*']),\n toPropertyValueMap(\n own.call(schema.attributes, name) ? schema.attributes[name] : []\n )\n )\n var result = {}\n var definition\n var key\n var value\n\n for (key in props) {\n if (own.call(allowed, key)) {\n definition = allowed[key]\n } else if (data(key) && own.call(allowed, 'data*')) {\n definition = allowed['data*']\n } else {\n continue\n }\n\n value = props[key]\n value =\n value && typeof value === 'object' && 'length' in value\n ? handlePropertyValues(schema, value, key, definition)\n : handlePropertyValue(schema, value, key, definition)\n\n if (value != null) {\n result[key] = value\n }\n }\n\n if (own.call(reqs, name)) {\n for (key in reqs[name]) {\n if (!own.call(result, key)) {\n result[key] = reqs[name][key]\n }\n }\n }\n\n return result\n}\n\n// Sanitize a property value which is a list.\nfunction handlePropertyValues(schema, values, prop, definition) {\n var result = []\n var index = -1\n var value\n\n while (++index < values.length) {\n value = handlePropertyValue(schema, values[index], prop, definition)\n\n if (value != null) {\n result.push(value)\n }\n }\n\n return result\n}\n\n// Sanitize a property value.\nfunction handlePropertyValue(schema, value, prop, definition) {\n if (\n (typeof value === 'boolean' ||\n typeof value === 'number' ||\n typeof value === 'string') &&\n handleProtocol(schema, value, prop) &&\n (!definition.length || definition.indexOf(value) > -1)\n ) {\n return schema.clobber.indexOf(prop) < 0\n ? value\n : schema.clobberPrefix + value\n }\n}\n\n// Check whether `value` is a safe URL.\nfunction handleProtocol(schema, value, prop) {\n var url = String(value)\n var colon = url.indexOf(':')\n var questionMark = url.indexOf('?')\n var numberSign = url.indexOf('#')\n var slash = url.indexOf('/')\n var protocols = own.call(schema.protocols, prop)\n ? schema.protocols[prop].concat()\n : []\n var index = -1\n\n if (\n !protocols.length ||\n colon < 0 ||\n // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n (slash > -1 && colon > slash) ||\n (questionMark > -1 && colon > questionMark) ||\n (numberSign > -1 && colon > numberSign)\n ) {\n return true\n }\n\n while (++index < protocols.length) {\n if (\n colon === protocols[index].length &&\n url.slice(0, protocols[index].length) === protocols[index]\n ) {\n return true\n }\n }\n\n return false\n}\n\n// Always return a valid HTML5 doctype.\nfunction handleDoctypeName() {\n return 'html'\n}\n\n// Sanitize `tagName`.\nfunction handleTagName(schema, tagName, node, stack) {\n var name = typeof tagName === 'string' && tagName\n var index = -1\n\n if (!name || name === '*' || schema.tagNames.indexOf(name) < 0) {\n return false\n }\n\n // Some nodes can break out of their context if they don’t have a certain\n // ancestor.\n if (own.call(schema.ancestors, name)) {\n while (++index < schema.ancestors[name].length) {\n if (stack.indexOf(schema.ancestors[name][index]) > -1) {\n return name\n }\n }\n\n return false\n }\n\n return name\n}\n\nfunction handleDoctype(schema) {\n return schema.allowDoctypes ? {name: handleDoctypeName} : null\n}\n\nfunction handleComment(schema) {\n return schema.allowComments ? {value: handleCommentValue} : null\n}\n\n// See <https://html.spec.whatwg.org/multipage/parsing.html#serialising-html-fragments>\nfunction handleCommentValue(schema, value) {\n var result = typeof value === 'string' ? value : ''\n var index = result.indexOf('-->')\n\n return index < 0 ? result : result.slice(0, index)\n}\n\n// Sanitize `value`.\nfunction handleValue(schema, value) {\n return typeof value === 'string' ? value : ''\n}\n\n// Create a map from a list of props or a list of properties and values.\nfunction toPropertyValueMap(values) {\n var result = {}\n var index = -1\n var value\n\n while (++index < values.length) {\n value = values[index]\n\n if (value && typeof value === 'object' && 'length' in value) {\n result[value[0]] = value.slice(1)\n } else {\n result[value] = []\n }\n }\n\n return result\n}\n\n// Allow `value`.\nfunction allow(schema, value) {\n return value\n}\n\n// Check if `prop` is a data property.\nfunction data(prop) {\n return prop.length > 4 && prop.slice(0, 4).toLowerCase() === 'data'\n}\n","'use strict'\nmodule.exports = require('./lib')\n","'use strict'\n\nvar clean = require('hast-util-sanitize')\n\nmodule.exports = sanitize\n\nfunction sanitize(options) {\n return transformer\n function transformer(tree) {\n return clean(tree, options)\n }\n}\n","'use strict'\n\nmodule.exports = Schema\n\nvar proto = Schema.prototype\n\nproto.space = null\nproto.normal = {}\nproto.property = {}\n\nfunction Schema(property, normal, space) {\n this.property = property\n this.normal = normal\n\n if (space) {\n this.space = space\n }\n}\n","'use strict'\n\nvar xtend = require('xtend')\nvar Schema = require('./schema')\n\nmodule.exports = merge\n\nfunction merge(definitions) {\n var length = definitions.length\n var property = []\n var normal = []\n var index = -1\n var info\n var space\n\n while (++index < length) {\n info = definitions[index]\n property.push(info.property)\n normal.push(info.normal)\n space = info.space\n }\n\n return new Schema(\n xtend.apply(null, property),\n xtend.apply(null, normal),\n space\n )\n}\n","'use strict'\n\nmodule.exports = normalize\n\nfunction normalize(value) {\n return value.toLowerCase()\n}\n","'use strict'\n\nmodule.exports = Info\n\nvar proto = Info.prototype\n\nproto.space = null\nproto.attribute = null\nproto.property = null\nproto.boolean = false\nproto.booleanish = false\nproto.overloadedBoolean = false\nproto.number = false\nproto.commaSeparated = false\nproto.spaceSeparated = false\nproto.commaOrSpaceSeparated = false\nproto.mustUseProperty = false\nproto.defined = false\n\nfunction Info(property, attribute) {\n this.property = property\n this.attribute = attribute\n}\n","'use strict'\n\nvar powers = 0\n\nexports.boolean = increment()\nexports.booleanish = increment()\nexports.overloadedBoolean = increment()\nexports.number = increment()\nexports.spaceSeparated = increment()\nexports.commaSeparated = increment()\nexports.commaOrSpaceSeparated = increment()\n\nfunction increment() {\n return Math.pow(2, ++powers)\n}\n","'use strict'\n\nvar Info = require('./info')\nvar types = require('./types')\n\nmodule.exports = DefinedInfo\n\nDefinedInfo.prototype = new Info()\nDefinedInfo.prototype.defined = true\n\nvar checks = [\n 'boolean',\n 'booleanish',\n 'overloadedBoolean',\n 'number',\n 'commaSeparated',\n 'spaceSeparated',\n 'commaOrSpaceSeparated'\n]\nvar checksLength = checks.length\n\nfunction DefinedInfo(property, attribute, mask, space) {\n var index = -1\n var check\n\n mark(this, 'space', space)\n\n Info.call(this, property, attribute)\n\n while (++index < checksLength) {\n check = checks[index]\n mark(this, check, (mask & types[check]) === types[check])\n }\n}\n\nfunction mark(values, key, value) {\n if (value) {\n values[key] = value\n }\n}\n","'use strict'\n\nvar normalize = require('../../normalize')\nvar Schema = require('./schema')\nvar DefinedInfo = require('./defined-info')\n\nmodule.exports = create\n\nfunction create(definition) {\n var space = definition.space\n var mustUseProperty = definition.mustUseProperty || []\n var attributes = definition.attributes || {}\n var props = definition.properties\n var transform = definition.transform\n var property = {}\n var normal = {}\n var prop\n var info\n\n for (prop in props) {\n info = new DefinedInfo(\n prop,\n transform(attributes, prop),\n props[prop],\n space\n )\n\n if (mustUseProperty.indexOf(prop) !== -1) {\n info.mustUseProperty = true\n }\n\n property[prop] = info\n\n normal[normalize(prop)] = prop\n normal[normalize(info.attribute)] = prop\n }\n\n return new Schema(property, normal, space)\n}\n","'use strict'\n\nvar create = require('./util/create')\n\nmodule.exports = create({\n space: 'xlink',\n transform: xlinkTransform,\n properties: {\n xLinkActuate: null,\n xLinkArcRole: null,\n xLinkHref: null,\n xLinkRole: null,\n xLinkShow: null,\n xLinkTitle: null,\n xLinkType: null\n }\n})\n\nfunction xlinkTransform(_, prop) {\n return 'xlink:' + prop.slice(5).toLowerCase()\n}\n","'use strict'\n\nvar create = require('./util/create')\n\nmodule.exports = create({\n space: 'xml',\n transform: xmlTransform,\n properties: {\n xmlLang: null,\n xmlBase: null,\n xmlSpace: null\n }\n})\n\nfunction xmlTransform(_, prop) {\n return 'xml:' + prop.slice(3).toLowerCase()\n}\n","'use strict'\n\nmodule.exports = caseSensitiveTransform\n\nfunction caseSensitiveTransform(attributes, attribute) {\n return attribute in attributes ? attributes[attribute] : attribute\n}\n","'use strict'\n\nvar caseSensitiveTransform = require('./case-sensitive-transform')\n\nmodule.exports = caseInsensitiveTransform\n\nfunction caseInsensitiveTransform(attributes, property) {\n return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n","'use strict'\n\nvar create = require('./util/create')\nvar caseInsensitiveTransform = require('./util/case-insensitive-transform')\n\nmodule.exports = create({\n space: 'xmlns',\n attributes: {\n xmlnsxlink: 'xmlns:xlink'\n },\n transform: caseInsensitiveTransform,\n properties: {\n xmlns: null,\n xmlnsXLink: null\n }\n})\n","'use strict'\n\nvar types = require('./util/types')\nvar create = require('./util/create')\n\nvar booleanish = types.booleanish\nvar number = types.number\nvar spaceSeparated = types.spaceSeparated\n\nmodule.exports = create({\n transform: ariaTransform,\n properties: {\n ariaActiveDescendant: null,\n ariaAtomic: booleanish,\n ariaAutoComplete: null,\n ariaBusy: booleanish,\n ariaChecked: booleanish,\n ariaColCount: number,\n ariaColIndex: number,\n ariaColSpan: number,\n ariaControls: spaceSeparated,\n ariaCurrent: null,\n ariaDescribedBy: spaceSeparated,\n ariaDetails: null,\n ariaDisabled: booleanish,\n ariaDropEffect: spaceSeparated,\n ariaErrorMessage: null,\n ariaExpanded: booleanish,\n ariaFlowTo: spaceSeparated,\n ariaGrabbed: booleanish,\n ariaHasPopup: null,\n ariaHidden: booleanish,\n ariaInvalid: null,\n ariaKeyShortcuts: null,\n ariaLabel: null,\n ariaLabelledBy: spaceSeparated,\n ariaLevel: number,\n ariaLive: null,\n ariaModal: booleanish,\n ariaMultiLine: booleanish,\n ariaMultiSelectable: booleanish,\n ariaOrientation: null,\n ariaOwns: spaceSeparated,\n ariaPlaceholder: null,\n ariaPosInSet: number,\n ariaPressed: booleanish,\n ariaReadOnly: booleanish,\n ariaRelevant: null,\n ariaRequired: booleanish,\n ariaRoleDescription: spaceSeparated,\n ariaRowCount: number,\n ariaRowIndex: number,\n ariaRowSpan: number,\n ariaSelected: booleanish,\n ariaSetSize: number,\n ariaSort: null,\n ariaValueMax: number,\n ariaValueMin: number,\n ariaValueNow: number,\n ariaValueText: null,\n role: null\n }\n})\n\nfunction ariaTransform(_, prop) {\n return prop === 'role' ? prop : 'aria-' + prop.slice(4).toLowerCase()\n}\n","'use strict'\n\nvar types = require('./util/types')\nvar create = require('./util/create')\nvar caseInsensitiveTransform = require('./util/case-insensitive-transform')\n\nvar boolean = types.boolean\nvar overloadedBoolean = types.overloadedBoolean\nvar booleanish = types.booleanish\nvar number = types.number\nvar spaceSeparated = types.spaceSeparated\nvar commaSeparated = types.commaSeparated\n\nmodule.exports = create({\n space: 'html',\n attributes: {\n acceptcharset: 'accept-charset',\n classname: 'class',\n htmlfor: 'for',\n httpequiv: 'http-equiv'\n },\n transform: caseInsensitiveTransform,\n mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n properties: {\n // Standard Properties.\n abbr: null,\n accept: commaSeparated,\n acceptCharset: spaceSeparated,\n accessKey: spaceSeparated,\n action: null,\n allow: null,\n allowFullScreen: boolean,\n allowPaymentRequest: boolean,\n allowUserMedia: boolean,\n alt: null,\n as: null,\n async: boolean,\n autoCapitalize: null,\n autoComplete: spaceSeparated,\n autoFocus: boolean,\n autoPlay: boolean,\n capture: boolean,\n charSet: null,\n checked: boolean,\n cite: null,\n className: spaceSeparated,\n cols: number,\n colSpan: null,\n content: null,\n contentEditable: booleanish,\n controls: boolean,\n controlsList: spaceSeparated,\n coords: number | commaSeparated,\n crossOrigin: null,\n data: null,\n dateTime: null,\n decoding: null,\n default: boolean,\n defer: boolean,\n dir: null,\n dirName: null,\n disabled: boolean,\n download: overloadedBoolean,\n draggable: booleanish,\n encType: null,\n enterKeyHint: null,\n form: null,\n formAction: null,\n formEncType: null,\n formMethod: null,\n formNoValidate: boolean,\n formTarget: null,\n headers: spaceSeparated,\n height: number,\n hidden: boolean,\n high: number,\n href: null,\n hrefLang: null,\n htmlFor: spaceSeparated,\n httpEquiv: spaceSeparated,\n id: null,\n imageSizes: null,\n imageSrcSet: commaSeparated,\n inputMode: null,\n integrity: null,\n is: null,\n isMap: boolean,\n itemId: null,\n itemProp: spaceSeparated,\n itemRef: spaceSeparated,\n itemScope: boolean,\n itemType: spaceSeparated,\n kind: null,\n label: null,\n lang: null,\n language: null,\n list: null,\n loading: null,\n loop: boolean,\n low: number,\n manifest: null,\n max: null,\n maxLength: number,\n media: null,\n method: null,\n min: null,\n minLength: number,\n multiple: boolean,\n muted: boolean,\n name: null,\n nonce: null,\n noModule: boolean,\n noValidate: boolean,\n onAbort: null,\n onAfterPrint: null,\n onAuxClick: null,\n onBeforePrint: null,\n onBeforeUnload: null,\n onBlur: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onContextMenu: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFormData: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLanguageChange: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadEnd: null,\n onLoadStart: null,\n onMessage: null,\n onMessageError: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRejectionHandled: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onSecurityPolicyViolation: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onSlotChange: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnhandledRejection: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onWheel: null,\n open: boolean,\n optimum: number,\n pattern: null,\n ping: spaceSeparated,\n placeholder: null,\n playsInline: boolean,\n poster: null,\n preload: null,\n readOnly: boolean,\n referrerPolicy: null,\n rel: spaceSeparated,\n required: boolean,\n reversed: boolean,\n rows: number,\n rowSpan: number,\n sandbox: spaceSeparated,\n scope: null,\n scoped: boolean,\n seamless: boolean,\n selected: boolean,\n shape: null,\n size: number,\n sizes: null,\n slot: null,\n span: number,\n spellCheck: booleanish,\n src: null,\n srcDoc: null,\n srcLang: null,\n srcSet: commaSeparated,\n start: number,\n step: null,\n style: null,\n tabIndex: number,\n target: null,\n title: null,\n translate: null,\n type: null,\n typeMustMatch: boolean,\n useMap: null,\n value: booleanish,\n width: number,\n wrap: null,\n\n // Legacy.\n // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n align: null, // Several. Use CSS `text-align` instead,\n aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n archive: spaceSeparated, // `<object>`. List of URIs to archives\n axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n background: null, // `<body>`. Use CSS `background-image` instead\n bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n border: number, // `<table>`. Use CSS `border-width` instead,\n borderColor: null, // `<table>`. Use CSS `border-color` instead,\n bottomMargin: number, // `<body>`\n cellPadding: null, // `<table>`\n cellSpacing: null, // `<table>`\n char: null, // Several table elements. When `align=char`, sets the character to align on\n charOff: null, // Several table elements. When `char`, offsets the alignment\n classId: null, // `<object>`\n clear: null, // `<br>`. Use CSS `clear` instead\n code: null, // `<object>`\n codeBase: null, // `<object>`\n codeType: null, // `<object>`\n color: null, // `<font>` and `<hr>`. Use CSS instead\n compact: boolean, // Lists. Use CSS to reduce space between items instead\n declare: boolean, // `<object>`\n event: null, // `<script>`\n face: null, // `<font>`. Use CSS instead\n frame: null, // `<table>`\n frameBorder: null, // `<iframe>`. Use CSS `border` instead\n hSpace: number, // `<img>` and `<object>`\n leftMargin: number, // `<body>`\n link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n lowSrc: null, // `<img>`. Use a `<picture>`\n marginHeight: number, // `<body>`\n marginWidth: number, // `<body>`\n noResize: boolean, // `<frame>`\n noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n noWrap: boolean, // `<td>` and `<th>`\n object: null, // `<applet>`\n profile: null, // `<head>`\n prompt: null, // `<isindex>`\n rev: null, // `<link>`\n rightMargin: number, // `<body>`\n rules: null, // `<table>`\n scheme: null, // `<meta>`\n scrolling: booleanish, // `<frame>`. Use overflow in the child context\n standby: null, // `<object>`\n summary: null, // `<table>`\n text: null, // `<body>`. Use CSS `color` instead\n topMargin: number, // `<body>`\n valueType: null, // `<param>`\n version: null, // `<html>`. Use a doctype.\n vAlign: null, // Several. Use CSS `vertical-align` instead\n vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n vSpace: number, // `<img>` and `<object>`\n\n // Non-standard Properties.\n allowTransparency: null,\n autoCorrect: null,\n autoSave: null,\n disablePictureInPicture: boolean,\n disableRemotePlayback: boolean,\n prefix: null,\n property: null,\n results: number,\n security: null,\n unselectable: null\n }\n})\n","'use strict'\n\nvar merge = require('./lib/util/merge')\nvar xlink = require('./lib/xlink')\nvar xml = require('./lib/xml')\nvar xmlns = require('./lib/xmlns')\nvar aria = require('./lib/aria')\nvar html = require('./lib/html')\n\nmodule.exports = merge([xml, xlink, xmlns, aria, html])\n","'use strict'\n\nvar types = require('./util/types')\nvar create = require('./util/create')\nvar caseSensitiveTransform = require('./util/case-sensitive-transform')\n\nvar boolean = types.boolean\nvar number = types.number\nvar spaceSeparated = types.spaceSeparated\nvar commaSeparated = types.commaSeparated\nvar commaOrSpaceSeparated = types.commaOrSpaceSeparated\n\nmodule.exports = create({\n space: 'svg',\n attributes: {\n accentHeight: 'accent-height',\n alignmentBaseline: 'alignment-baseline',\n arabicForm: 'arabic-form',\n baselineShift: 'baseline-shift',\n capHeight: 'cap-height',\n className: 'class',\n clipPath: 'clip-path',\n clipRule: 'clip-rule',\n colorInterpolation: 'color-interpolation',\n colorInterpolationFilters: 'color-interpolation-filters',\n colorProfile: 'color-profile',\n colorRendering: 'color-rendering',\n crossOrigin: 'crossorigin',\n dataType: 'datatype',\n dominantBaseline: 'dominant-baseline',\n enableBackground: 'enable-background',\n fillOpacity: 'fill-opacity',\n fillRule: 'fill-rule',\n floodColor: 'flood-color',\n floodOpacity: 'flood-opacity',\n fontFamily: 'font-family',\n fontSize: 'font-size',\n fontSizeAdjust: 'font-size-adjust',\n fontStretch: 'font-stretch',\n fontStyle: 'font-style',\n fontVariant: 'font-variant',\n fontWeight: 'font-weight',\n glyphName: 'glyph-name',\n glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n glyphOrientationVertical: 'glyph-orientation-vertical',\n hrefLang: 'hreflang',\n horizAdvX: 'horiz-adv-x',\n horizOriginX: 'horiz-origin-x',\n horizOriginY: 'horiz-origin-y',\n imageRendering: 'image-rendering',\n letterSpacing: 'letter-spacing',\n lightingColor: 'lighting-color',\n markerEnd: 'marker-end',\n markerMid: 'marker-mid',\n markerStart: 'marker-start',\n navDown: 'nav-down',\n navDownLeft: 'nav-down-left',\n navDownRight: 'nav-down-right',\n navLeft: 'nav-left',\n navNext: 'nav-next',\n navPrev: 'nav-prev',\n navRight: 'nav-right',\n navUp: 'nav-up',\n navUpLeft: 'nav-up-left',\n navUpRight: 'nav-up-right',\n onAbort: 'onabort',\n onActivate: 'onactivate',\n onAfterPrint: 'onafterprint',\n onBeforePrint: 'onbeforeprint',\n onBegin: 'onbegin',\n onCancel: 'oncancel',\n onCanPlay: 'oncanplay',\n onCanPlayThrough: 'oncanplaythrough',\n onChange: 'onchange',\n onClick: 'onclick',\n onClose: 'onclose',\n onCopy: 'oncopy',\n onCueChange: 'oncuechange',\n onCut: 'oncut',\n onDblClick: 'ondblclick',\n onDrag: 'ondrag',\n onDragEnd: 'ondragend',\n onDragEnter: 'ondragenter',\n onDragExit: 'ondragexit',\n onDragLeave: 'ondragleave',\n onDragOver: 'ondragover',\n onDragStart: 'ondragstart',\n onDrop: 'ondrop',\n onDurationChange: 'ondurationchange',\n onEmptied: 'onemptied',\n onEnd: 'onend',\n onEnded: 'onended',\n onError: 'onerror',\n onFocus: 'onfocus',\n onFocusIn: 'onfocusin',\n onFocusOut: 'onfocusout',\n onHashChange: 'onhashchange',\n onInput: 'oninput',\n onInvalid: 'oninvalid',\n onKeyDown: 'onkeydown',\n onKeyPress: 'onkeypress',\n onKeyUp: 'onkeyup',\n onLoad: 'onload',\n onLoadedData: 'onloadeddata',\n onLoadedMetadata: 'onloadedmetadata',\n onLoadStart: 'onloadstart',\n onMessage: 'onmessage',\n onMouseDown: 'onmousedown',\n onMouseEnter: 'onmouseenter',\n onMouseLeave: 'onmouseleave',\n onMouseMove: 'onmousemove',\n onMouseOut: 'onmouseout',\n onMouseOver: 'onmouseover',\n onMouseUp: 'onmouseup',\n onMouseWheel: 'onmousewheel',\n onOffline: 'onoffline',\n onOnline: 'ononline',\n onPageHide: 'onpagehide',\n onPageShow: 'onpageshow',\n onPaste: 'onpaste',\n onPause: 'onpause',\n onPlay: 'onplay',\n onPlaying: 'onplaying',\n onPopState: 'onpopstate',\n onProgress: 'onprogress',\n onRateChange: 'onratechange',\n onRepeat: 'onrepeat',\n onReset: 'onreset',\n onResize: 'onresize',\n onScroll: 'onscroll',\n onSeeked: 'onseeked',\n onSeeking: 'onseeking',\n onSelect: 'onselect',\n onShow: 'onshow',\n onStalled: 'onstalled',\n onStorage: 'onstorage',\n onSubmit: 'onsubmit',\n onSuspend: 'onsuspend',\n onTimeUpdate: 'ontimeupdate',\n onToggle: 'ontoggle',\n onUnload: 'onunload',\n onVolumeChange: 'onvolumechange',\n onWaiting: 'onwaiting',\n onZoom: 'onzoom',\n overlinePosition: 'overline-position',\n overlineThickness: 'overline-thickness',\n paintOrder: 'paint-order',\n panose1: 'panose-1',\n pointerEvents: 'pointer-events',\n referrerPolicy: 'referrerpolicy',\n renderingIntent: 'rendering-intent',\n shapeRendering: 'shape-rendering',\n stopColor: 'stop-color',\n stopOpacity: 'stop-opacity',\n strikethroughPosition: 'strikethrough-position',\n strikethroughThickness: 'strikethrough-thickness',\n strokeDashArray: 'stroke-dasharray',\n strokeDashOffset: 'stroke-dashoffset',\n strokeLineCap: 'stroke-linecap',\n strokeLineJoin: 'stroke-linejoin',\n strokeMiterLimit: 'stroke-miterlimit',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n tabIndex: 'tabindex',\n textAnchor: 'text-anchor',\n textDecoration: 'text-decoration',\n textRendering: 'text-rendering',\n typeOf: 'typeof',\n underlinePosition: 'underline-position',\n underlineThickness: 'underline-thickness',\n unicodeBidi: 'unicode-bidi',\n unicodeRange: 'unicode-range',\n unitsPerEm: 'units-per-em',\n vAlphabetic: 'v-alphabetic',\n vHanging: 'v-hanging',\n vIdeographic: 'v-ideographic',\n vMathematical: 'v-mathematical',\n vectorEffect: 'vector-effect',\n vertAdvY: 'vert-adv-y',\n vertOriginX: 'vert-origin-x',\n vertOriginY: 'vert-origin-y',\n wordSpacing: 'word-spacing',\n writingMode: 'writing-mode',\n xHeight: 'x-height',\n // These were camelcased in Tiny. Now lowercased in SVG 2\n playbackOrder: 'playbackorder',\n timelineBegin: 'timelinebegin'\n },\n transform: caseSensitiveTransform,\n properties: {\n about: commaOrSpaceSeparated,\n accentHeight: number,\n accumulate: null,\n additive: null,\n alignmentBaseline: null,\n alphabetic: number,\n amplitude: number,\n arabicForm: null,\n ascent: number,\n attributeName: null,\n attributeType: null,\n azimuth: number,\n bandwidth: null,\n baselineShift: null,\n baseFrequency: null,\n baseProfile: null,\n bbox: null,\n begin: null,\n bias: number,\n by: null,\n calcMode: null,\n capHeight: number,\n className: spaceSeparated,\n clip: null,\n clipPath: null,\n clipPathUnits: null,\n clipRule: null,\n color: null,\n colorInterpolation: null,\n colorInterpolationFilters: null,\n colorProfile: null,\n colorRendering: null,\n content: null,\n contentScriptType: null,\n contentStyleType: null,\n crossOrigin: null,\n cursor: null,\n cx: null,\n cy: null,\n d: null,\n dataType: null,\n defaultAction: null,\n descent: number,\n diffuseConstant: number,\n direction: null,\n display: null,\n dur: null,\n divisor: number,\n dominantBaseline: null,\n download: boolean,\n dx: null,\n dy: null,\n edgeMode: null,\n editable: null,\n elevation: number,\n enableBackground: null,\n end: null,\n event: null,\n exponent: number,\n externalResourcesRequired: null,\n fill: null,\n fillOpacity: number,\n fillRule: null,\n filter: null,\n filterRes: null,\n filterUnits: null,\n floodColor: null,\n floodOpacity: null,\n focusable: null,\n focusHighlight: null,\n fontFamily: null,\n fontSize: null,\n fontSizeAdjust: null,\n fontStretch: null,\n fontStyle: null,\n fontVariant: null,\n fontWeight: null,\n format: null,\n fr: null,\n from: null,\n fx: null,\n fy: null,\n g1: commaSeparated,\n g2: commaSeparated,\n glyphName: commaSeparated,\n glyphOrientationHorizontal: null,\n glyphOrientationVertical: null,\n glyphRef: null,\n gradientTransform: null,\n gradientUnits: null,\n handler: null,\n hanging: number,\n hatchContentUnits: null,\n hatchUnits: null,\n height: null,\n href: null,\n hrefLang: null,\n horizAdvX: number,\n horizOriginX: number,\n horizOriginY: number,\n id: null,\n ideographic: number,\n imageRendering: null,\n initialVisibility: null,\n in: null,\n in2: null,\n intercept: number,\n k: number,\n k1: number,\n k2: number,\n k3: number,\n k4: number,\n kernelMatrix: commaOrSpaceSeparated,\n kernelUnitLength: null,\n keyPoints: null, // SEMI_COLON_SEPARATED\n keySplines: null, // SEMI_COLON_SEPARATED\n keyTimes: null, // SEMI_COLON_SEPARATED\n kerning: null,\n lang: null,\n lengthAdjust: null,\n letterSpacing: null,\n lightingColor: null,\n limitingConeAngle: number,\n local: null,\n markerEnd: null,\n markerMid: null,\n markerStart: null,\n markerHeight: null,\n markerUnits: null,\n markerWidth: null,\n mask: null,\n maskContentUnits: null,\n maskUnits: null,\n mathematical: null,\n max: null,\n media: null,\n mediaCharacterEncoding: null,\n mediaContentEncodings: null,\n mediaSize: number,\n mediaTime: null,\n method: null,\n min: null,\n mode: null,\n name: null,\n navDown: null,\n navDownLeft: null,\n navDownRight: null,\n navLeft: null,\n navNext: null,\n navPrev: null,\n navRight: null,\n navUp: null,\n navUpLeft: null,\n navUpRight: null,\n numOctaves: null,\n observer: null,\n offset: null,\n onAbort: null,\n onActivate: null,\n onAfterPrint: null,\n onBeforePrint: null,\n onBegin: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnd: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFocusIn: null,\n onFocusOut: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadStart: null,\n onMessage: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onMouseWheel: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRepeat: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onShow: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onZoom: null,\n opacity: null,\n operator: null,\n order: null,\n orient: null,\n orientation: null,\n origin: null,\n overflow: null,\n overlay: null,\n overlinePosition: number,\n overlineThickness: number,\n paintOrder: null,\n panose1: null,\n path: null,\n pathLength: number,\n patternContentUnits: null,\n patternTransform: null,\n patternUnits: null,\n phase: null,\n ping: spaceSeparated,\n pitch: null,\n playbackOrder: null,\n pointerEvents: null,\n points: null,\n pointsAtX: number,\n pointsAtY: number,\n pointsAtZ: number,\n preserveAlpha: null,\n preserveAspectRatio: null,\n primitiveUnits: null,\n propagate: null,\n property: commaOrSpaceSeparated,\n r: null,\n radius: null,\n referrerPolicy: null,\n refX: null,\n refY: null,\n rel: commaOrSpaceSeparated,\n rev: commaOrSpaceSeparated,\n renderingIntent: null,\n repeatCount: null,\n repeatDur: null,\n requiredExtensions: commaOrSpaceSeparated,\n requiredFeatures: commaOrSpaceSeparated,\n requiredFonts: commaOrSpaceSeparated,\n requiredFormats: commaOrSpaceSeparated,\n resource: null,\n restart: null,\n result: null,\n rotate: null,\n rx: null,\n ry: null,\n scale: null,\n seed: null,\n shapeRendering: null,\n side: null,\n slope: null,\n snapshotTime: null,\n specularConstant: number,\n specularExponent: number,\n spreadMethod: null,\n spacing: null,\n startOffset: null,\n stdDeviation: null,\n stemh: null,\n stemv: null,\n stitchTiles: null,\n stopColor: null,\n stopOpacity: null,\n strikethroughPosition: number,\n strikethroughThickness: number,\n string: null,\n stroke: null,\n strokeDashArray: commaOrSpaceSeparated,\n strokeDashOffset: null,\n strokeLineCap: null,\n strokeLineJoin: null,\n strokeMiterLimit: number,\n strokeOpacity: number,\n strokeWidth: null,\n style: null,\n surfaceScale: number,\n syncBehavior: null,\n syncBehaviorDefault: null,\n syncMaster: null,\n syncTolerance: null,\n syncToleranceDefault: null,\n systemLanguage: commaOrSpaceSeparated,\n tabIndex: number,\n tableValues: null,\n target: null,\n targetX: number,\n targetY: number,\n textAnchor: null,\n textDecoration: null,\n textRendering: null,\n textLength: null,\n timelineBegin: null,\n title: null,\n transformBehavior: null,\n type: null,\n typeOf: commaOrSpaceSeparated,\n to: null,\n transform: null,\n u1: null,\n u2: null,\n underlinePosition: number,\n underlineThickness: number,\n unicode: null,\n unicodeBidi: null,\n unicodeRange: null,\n unitsPerEm: number,\n values: null,\n vAlphabetic: number,\n vMathematical: number,\n vectorEffect: null,\n vHanging: number,\n vIdeographic: number,\n version: null,\n vertAdvY: number,\n vertOriginX: number,\n vertOriginY: number,\n viewBox: null,\n viewTarget: null,\n visibility: null,\n width: null,\n widths: null,\n wordSpacing: null,\n writingMode: null,\n x: null,\n x1: null,\n x2: null,\n xChannelSelector: null,\n xHeight: number,\n y: null,\n y1: null,\n y2: null,\n yChannelSelector: null,\n z: null,\n zoomAndPan: null\n }\n})\n","'use strict'\n\nvar merge = require('./lib/util/merge')\nvar xlink = require('./lib/xlink')\nvar xml = require('./lib/xml')\nvar xmlns = require('./lib/xmlns')\nvar aria = require('./lib/aria')\nvar svg = require('./lib/svg')\n\nmodule.exports = merge([xml, xlink, xmlns, aria, svg])\n","'use strict'\n\nmodule.exports = convert\n\nfunction convert(test) {\n if (typeof test === 'string') {\n return tagNameFactory(test)\n }\n\n if (test === null || test === undefined) {\n return element\n }\n\n if (typeof test === 'object') {\n return any(test)\n }\n\n if (typeof test === 'function') {\n return callFactory(test)\n }\n\n throw new Error('Expected function, string, or array as test')\n}\n\nfunction convertAll(tests) {\n var length = tests.length\n var index = -1\n var results = []\n\n while (++index < length) {\n results[index] = convert(tests[index])\n }\n\n return results\n}\n\nfunction any(tests) {\n var checks = convertAll(tests)\n var length = checks.length\n\n return matches\n\n function matches() {\n var index = -1\n\n while (++index < length) {\n if (checks[index].apply(this, arguments)) {\n return true\n }\n }\n\n return false\n }\n}\n\n// Utility to convert a string a tag name check.\nfunction tagNameFactory(test) {\n return tagName\n\n function tagName(node) {\n return element(node) && node.tagName === test\n }\n}\n\n// Utility to convert a function check.\nfunction callFactory(test) {\n return call\n\n function call(node) {\n return element(node) && Boolean(test.apply(this, arguments))\n }\n}\n\n// Utility to return true if this is an element.\nfunction element(node) {\n return (\n node &&\n typeof node === 'object' &&\n node.type === 'element' &&\n typeof node.tagName === 'string'\n )\n}\n","'use strict'\n\nvar convert = require('./convert')\n\nmodule.exports = isElement\n\nisElement.convert = convert\n\n// Check if if `node` is an `element` and whether it passes the given test.\nfunction isElement(node, test, index, parent, context) {\n var hasParent = parent !== null && parent !== undefined\n var hasIndex = index !== null && index !== undefined\n var check = convert(test)\n\n if (\n hasIndex &&\n (typeof index !== 'number' || index < 0 || index === Infinity)\n ) {\n throw new Error('Expected positive finite index for child node')\n }\n\n if (hasParent && (!parent.type || !parent.children)) {\n throw new Error('Expected parent node')\n }\n\n if (!node || !node.type || typeof node.type !== 'string') {\n return false\n }\n\n if (hasParent !== hasIndex) {\n throw new Error('Expected both parent and index')\n }\n\n return check.call(context, node, index, parent)\n}\n","'use strict'\n\nmodule.exports = interElementWhiteSpace\n\n// HTML white-space expression.\n// See <https://html.spec.whatwg.org/#space-character>.\nvar re = /[ \\t\\n\\f\\r]/g\n\nfunction interElementWhiteSpace(node) {\n var value\n\n if (node && typeof node === 'object' && node.type === 'text') {\n value = node.value || ''\n } else if (typeof node === 'string') {\n value = node\n } else {\n return false\n }\n\n return value.replace(re, '') === ''\n}\n","'use strict'\n\nvar whiteSpace = require('hast-util-whitespace')\n\nexports.before = siblings(-1)\nexports.after = siblings(1)\n\n// Factory to check siblings in a direction.\nfunction siblings(increment) {\n return sibling\n\n // Find applicable siblings in a direction.\n function sibling(parent, index, includeWhiteSpace) {\n var siblings = parent && parent.children\n var offset = index + increment\n var next = siblings && siblings[offset]\n\n if (!includeWhiteSpace) {\n while (next && whiteSpace(next)) {\n offset += increment\n next = siblings[offset]\n }\n }\n\n return next\n }\n}\n","'use strict'\n\nvar convert = require('unist-util-is/convert')\nvar whiteSpace = require('hast-util-whitespace')\n\nmodule.exports = whiteSpaceStart\n\nvar isText = convert('text')\n\n// Check if `node` starts with white-space.\nfunction whiteSpaceStart(node) {\n return isText(node) && whiteSpace(node.value.charAt(0))\n}\n","'use strict'\n\nvar convert = require('unist-util-is/convert')\n\nmodule.exports = convert('comment')\n","'use strict'\n\nmodule.exports = omission\n\nvar own = {}.hasOwnProperty\n\n// Factory to check if a given node can have a tag omitted.\nfunction omission(handlers) {\n return omit\n\n // Check if a given node can have a tag omitted.\n function omit(node, index, parent) {\n return (\n own.call(handlers, node.tagName) &&\n handlers[node.tagName](node, index, parent)\n )\n }\n}\n","'use strict'\n\nvar element = require('hast-util-is-element')\nvar whiteSpaceStart = require('./util/white-space-start')\nvar comment = require('./util/comment')\nvar siblings = require('./util/siblings')\nvar omission = require('./omission')\n\nmodule.exports = omission({\n html: html,\n head: headOrColgroupOrCaption,\n body: body,\n p: p,\n li: li,\n dt: dt,\n dd: dd,\n rt: rubyElement,\n rp: rubyElement,\n optgroup: optgroup,\n option: option,\n menuitem: menuitem,\n colgroup: headOrColgroupOrCaption,\n caption: headOrColgroupOrCaption,\n thead: thead,\n tbody: tbody,\n tfoot: tfoot,\n tr: tr,\n td: cells,\n th: cells\n})\n\n// Macro for `</head>`, `</colgroup>`, and `</caption>`.\nfunction headOrColgroupOrCaption(node, index, parent) {\n var next = siblings.after(parent, index, true)\n return !next || (!comment(next) && !whiteSpaceStart(next))\n}\n\n// Whether to omit `</html>`.\nfunction html(node, index, parent) {\n var next = siblings.after(parent, index)\n return !next || !comment(next)\n}\n\n// Whether to omit `</body>`.\nfunction body(node, index, parent) {\n var next = siblings.after(parent, index)\n return !next || !comment(next)\n}\n\n// Whether to omit `</p>`.\nfunction p(node, index, parent) {\n var next = siblings.after(parent, index)\n return next\n ? element(next, [\n 'address',\n 'article',\n 'aside',\n 'blockquote',\n 'details',\n 'div',\n 'dl',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'main',\n 'menu',\n 'nav',\n 'ol',\n 'p',\n 'pre',\n 'section',\n 'table',\n 'ul'\n ])\n : !parent ||\n // Confusing parent.\n !element(parent, [\n 'a',\n 'audio',\n 'del',\n 'ins',\n 'map',\n 'noscript',\n 'video'\n ])\n}\n\n// Whether to omit `</li>`.\nfunction li(node, index, parent) {\n var next = siblings.after(parent, index)\n return !next || element(next, 'li')\n}\n\n// Whether to omit `</dt>`.\nfunction dt(node, index, parent) {\n var next = siblings.after(parent, index)\n return next && element(next, ['dt', 'dd'])\n}\n\n// Whether to omit `</dd>`.\nfunction dd(node, index, parent) {\n var next = siblings.after(parent, index)\n return !next || element(next, ['dt', 'dd'])\n}\n\n// Whether to omit `</rt>` or `</rp>`.\nfunction rubyElement(node, index, parent) {\n var next = siblings.after(parent, index)\n return !next || element(next, ['rp', 'rt'])\n}\n\n// Whether to omit `</optgroup>`.\nfunction optgroup(node, index, parent) {\n var next = siblings.after(parent, index)\n return !next || element(next, 'optgroup')\n}\n\n// Whether to omit `</option>`.\nfunction option(node, index, parent) {\n var next = siblings.after(parent, index)\n return !next || element(next, ['option', 'optgroup'])\n}\n\n// Whether to omit `</menuitem>`.\nfunction menuitem(node, index, parent) {\n var next = siblings.after(parent, index)\n return !next || element(next, ['menuitem', 'hr', 'menu'])\n}\n\n// Whether to omit `</thead>`.\nfunction thead(node, index, parent) {\n var next = siblings.after(parent, index)\n return next && element(next, ['tbody', 'tfoot'])\n}\n\n// Whether to omit `</tbody>`.\nfunction tbody(node, index, parent) {\n var next = siblings.after(parent, index)\n return !next || element(next, ['tbody', 'tfoot'])\n}\n\n// Whether to omit `</tfoot>`.\nfunction tfoot(node, index, parent) {\n return !siblings.after(parent, index)\n}\n\n// Whether to omit `</tr>`.\nfunction tr(node, index, parent) {\n var next = siblings.after(parent, index)\n return !next || element(next, 'tr')\n}\n\n// Whether to omit `</td>` or `</th>`.\nfunction cells(node, index, parent) {\n var next = siblings.after(parent, index)\n return !next || element(next, ['td', 'th'])\n}\n","'use strict'\n\nvar element = require('hast-util-is-element')\nvar siblings = require('./util/siblings')\nvar whiteSpaceStart = require('./util/white-space-start')\nvar comment = require('./util/comment')\nvar closing = require('./closing')\nvar omission = require('./omission')\n\nmodule.exports = omission({\n html: html,\n head: head,\n body: body,\n colgroup: colgroup,\n tbody: tbody\n})\n\n// Whether to omit `<html>`.\nfunction html(node) {\n var head = siblings.after(node, -1)\n return !head || !comment(head)\n}\n\n// Whether to omit `<head>`.\nfunction head(node) {\n var children = node.children\n var seen = []\n var index = -1\n\n while (++index < children.length) {\n if (element(children[index], ['title', 'base'])) {\n if (seen.indexOf(children[index].tagName) > -1) return false\n seen.push(children[index].tagName)\n }\n }\n\n return children.length\n}\n\n// Whether to omit `<body>`.\nfunction body(node) {\n var head = siblings.after(node, -1, true)\n\n return (\n !head ||\n (!comment(head) &&\n !whiteSpaceStart(head) &&\n !element(head, ['meta', 'link', 'script', 'style', 'template']))\n )\n}\n\n// Whether to omit `<colgroup>`.\n// The spec describes some logic for the opening tag, but it’s easier to\n// implement in the closing tag, to the same effect, so we handle it there\n// instead.\nfunction colgroup(node, index, parent) {\n var previous = siblings.before(parent, index)\n var head = siblings.after(node, -1, true)\n\n // Previous colgroup was already omitted.\n if (\n element(previous, 'colgroup') &&\n closing(previous, parent.children.indexOf(previous), parent)\n ) {\n return false\n }\n\n return head && element(head, 'col')\n}\n\n// Whether to omit `<tbody>`.\nfunction tbody(node, index, parent) {\n var previous = siblings.before(parent, index)\n var head = siblings.after(node, -1)\n\n // Previous table section was already omitted.\n if (\n element(previous, ['thead', 'tbody']) &&\n closing(previous, parent.children.indexOf(previous), parent)\n ) {\n return false\n }\n\n return head && element(head, 'tr')\n}\n","'use strict'\nexports.opening = require('./opening')\nexports.closing = require('./closing')\n","'use strict'\n\nmodule.exports = encode\n\n// Encode special characters in `value`.\nfunction encode(value, options) {\n value = value.replace(\n options.subset ? charactersToExpression(options.subset) : /[\"&'<>`]/g,\n basic\n )\n\n if (options.subset || options.escapeOnly) {\n return value\n }\n\n return (\n value\n // Surrogate pairs.\n .replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, surrogate)\n // BMP control characters (C0 except for LF, CR, SP; DEL; and some more\n // non-ASCII ones).\n .replace(\n // eslint-disable-next-line no-control-regex, unicorn/no-hex-escape\n /[\\x01-\\t\\v\\f\\x0E-\\x1F\\x7F\\x81\\x8D\\x8F\\x90\\x9D\\xA0-\\uFFFF]/g,\n basic\n )\n )\n\n function surrogate(pair, index, all) {\n return options.format(\n (pair.charCodeAt(0) - 0xd800) * 0x400 +\n pair.charCodeAt(1) -\n 0xdc00 +\n 0x10000,\n all.charCodeAt(index + 2),\n options\n )\n }\n\n function basic(character, index, all) {\n return options.format(\n character.charCodeAt(0),\n all.charCodeAt(index + 1),\n options\n )\n }\n}\n\nfunction charactersToExpression(subset) {\n var groups = []\n var index = -1\n\n while (++index < subset.length) {\n groups.push(subset[index].replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&'))\n }\n\n return new RegExp('(?:' + groups.join('|') + ')', 'g')\n}\n","module.exports = String.fromCharCode\n","module.exports = toHexReference\n\nvar fromCharCode = require('../constant/from-char-code')\n\n// Transform `code` into a hexadecimal character reference.\nfunction toHexReference(code, next, omit) {\n var value = '&#x' + code.toString(16).toUpperCase()\n return omit && next && !/[\\dA-Fa-f]/.test(fromCharCode(next))\n ? value\n : value + ';'\n}\n","module.exports = toDecimalReference\n\nvar fromCharCode = require('../constant/from-char-code')\n\n// Transform `code` into a decimal character reference.\nfunction toDecimalReference(code, next, omit) {\n var value = '&#' + String(code)\n return omit && next && !/\\d/.test(fromCharCode(next)) ? value : value + ';'\n}\n","var entities = require('character-entities-html4')\n\nvar characters = {}\nvar name\n\nmodule.exports = characters\n\nfor (name in entities) {\n characters[entities[name]] = name\n}\n","module.exports = {}.hasOwnProperty\n","module.exports = toNamed\n\nvar legacy = require('character-entities-legacy')\nvar characters = require('../constant/characters')\nvar fromCharCode = require('../constant/from-char-code')\nvar own = require('../constant/has-own-property')\nvar dangerous = require('../constant/dangerous.json')\n\n// Transform `code` into a named character reference.\nfunction toNamed(code, next, omit, attribute) {\n var character = fromCharCode(code)\n var name\n var value\n\n if (own.call(characters, character)) {\n name = characters[character]\n value = '&' + name\n\n if (\n omit &&\n own.call(legacy, name) &&\n dangerous.indexOf(name) === -1 &&\n (!attribute ||\n (next && next !== 61 /* `=` */ && /[^\\da-z]/i.test(fromCharCode(next))))\n ) {\n return value\n }\n\n return value + ';'\n }\n\n return ''\n}\n","module.exports = formatPretty\n\nvar toHexadecimal = require('./to-hexadecimal')\nvar toDecimal = require('./to-decimal')\nvar toNamed = require('./to-named')\n\n// Encode `character` according to `options`.\nfunction formatPretty(code, next, options) {\n var named\n var numeric\n var decimal\n\n if (options.useNamedReferences || options.useShortestReferences) {\n named = toNamed(\n code,\n next,\n options.omitOptionalSemicolons,\n options.attribute\n )\n }\n\n if (options.useShortestReferences || !named) {\n numeric = toHexadecimal(code, next, options.omitOptionalSemicolons)\n\n // Use the shortest numeric reference when requested.\n // A simple algorithm would use decimal for all code points under 100, as\n // those are shorter than hexadecimal:\n //\n // * `c` vs `c` (decimal shorter)\n // * `d` vs `d` (equal)\n //\n // However, because we take `next` into consideration when `omit` is used,\n // And it would be possible that decimals are shorter on bigger values as\n // well if `next` is hexadecimal but not decimal, we instead compare both.\n if (options.useShortestReferences) {\n decimal = toDecimal(code, next, options.omitOptionalSemicolons)\n\n if (decimal.length < numeric.length) {\n numeric = decimal\n }\n }\n }\n\n return named &&\n (!options.useShortestReferences || named.length < numeric.length)\n ? named\n : numeric\n}\n","'use strict'\n\nvar xtend = require('xtend')\nvar core = require('./core')\nvar smart = require('./util/format-smart')\n\nmodule.exports = encode\n\n// Encode special characters in `value`.\nfunction encode(value, options) {\n // Note: Switch to `Object.assign` next major.\n return core(value, xtend(options, {format: smart}))\n}\n","'use strict'\n\nvar core = require('./core')\nvar smart = require('./util/format-smart')\n\nmodule.exports = escape\n\n// Shortcut to escape special characters in HTML.\nfunction escape(value) {\n return core(value, {\n escapeOnly: true,\n useNamedReferences: true,\n format: smart\n })\n}\n","'use strict'\n\nvar encode = require('./encode')\nvar escape = require('./escape')\n\nmodule.exports = encode\nencode.escape = escape\n","'use strict'\n\nmodule.exports = require('./lib')\n","'use strict'\n\nvar xtend = require('xtend')\nvar entities = require('stringify-entities')\n\nmodule.exports = serializeComment\n\nfunction serializeComment(ctx, node) {\n // See: <https://html.spec.whatwg.org/multipage/syntax.html#comments>\n return ctx.bogusComments\n ? '<?' + entities(node.value, xtend(ctx.entities, {subset: ['>']})) + '>'\n : '<!--' + node.value.replace(/^>|^->|<!--|-->|--!>|<!-$/g, encode) + '-->'\n\n function encode($0) {\n return entities($0, xtend(ctx.entities, {subset: ['<', '>']}))\n }\n}\n","'use strict'\n\nmodule.exports = ccount\n\nfunction ccount(source, character) {\n var value = String(source)\n var count = 0\n var index\n\n if (typeof character !== 'string') {\n throw new Error('Expected character')\n }\n\n index = value.indexOf(character)\n\n while (index !== -1) {\n count++\n index = value.indexOf(character, index + character.length)\n }\n\n return count\n}\n","'use strict'\n\nvar xtend = require('xtend')\nvar ccount = require('ccount')\nvar entities = require('stringify-entities')\n\nmodule.exports = serializeDoctype\n\nfunction serializeDoctype(ctx, node) {\n var sep = ctx.tightDoctype ? '' : ' '\n var parts = ['<!' + (ctx.upperDoctype ? 'DOCTYPE' : 'doctype')]\n\n if (node.name) {\n parts.push(sep, node.name)\n\n if (node.public != null) {\n parts.push(' public', sep, quote(ctx, node.public))\n } else if (node.system != null) {\n parts.push(' system')\n }\n\n if (node.system != null) {\n parts.push(sep, quote(ctx, node.system))\n }\n }\n\n return parts.join('') + '>'\n}\n\nfunction quote(ctx, value) {\n var string = String(value)\n var quote =\n ccount(string, ctx.quote) > ccount(string, ctx.alternative)\n ? ctx.alternative\n : ctx.quote\n\n return (\n quote +\n entities(string, xtend(ctx.entities, {subset: ['<', '&', quote]})) +\n quote\n )\n}\n","'use strict'\n\nvar normalize = require('./normalize')\nvar DefinedInfo = require('./lib/util/defined-info')\nvar Info = require('./lib/util/info')\n\nvar data = 'data'\n\nmodule.exports = find\n\nvar valid = /^data[-\\w.:]+$/i\nvar dash = /-[a-z]/g\nvar cap = /[A-Z]/g\n\nfunction find(schema, value) {\n var normal = normalize(value)\n var prop = value\n var Type = Info\n\n if (normal in schema.normal) {\n return schema.property[schema.normal[normal]]\n }\n\n if (normal.length > 4 && normal.slice(0, 4) === data && valid.test(value)) {\n // Attribute or property.\n if (value.charAt(4) === '-') {\n prop = datasetToProperty(value)\n } else {\n value = datasetToAttribute(value)\n }\n\n Type = DefinedInfo\n }\n\n return new Type(prop, value)\n}\n\nfunction datasetToProperty(attribute) {\n var value = attribute.slice(5).replace(dash, camelcase)\n return data + value.charAt(0).toUpperCase() + value.slice(1)\n}\n\nfunction datasetToAttribute(property) {\n var value = property.slice(4)\n\n if (dash.test(value)) {\n return property\n }\n\n value = value.replace(cap, kebab)\n\n if (value.charAt(0) !== '-') {\n value = '-' + value\n }\n\n return data + value\n}\n\nfunction kebab($0) {\n return '-' + $0.toLowerCase()\n}\n\nfunction camelcase($0) {\n return $0.charAt(1).toUpperCase()\n}\n","'use strict'\n\nexports.parse = parse\nexports.stringify = stringify\n\nvar empty = ''\nvar space = ' '\nvar whiteSpace = /[ \\t\\n\\r\\f]+/g\n\nfunction parse(value) {\n var input = String(value || empty).trim()\n return input === empty ? [] : input.split(whiteSpace)\n}\n\nfunction stringify(values) {\n return values.join(space).trim()\n}\n","'use strict'\n\nexports.parse = parse\nexports.stringify = stringify\n\nvar comma = ','\nvar space = ' '\nvar empty = ''\n\n// Parse comma-separated tokens to an array.\nfunction parse(value) {\n var values = []\n var input = String(value || empty)\n var index = input.indexOf(comma)\n var lastIndex = 0\n var end = false\n var val\n\n while (!end) {\n if (index === -1) {\n index = input.length\n end = true\n }\n\n val = input.slice(lastIndex, index).trim()\n\n if (val || !end) {\n values.push(val)\n }\n\n lastIndex = index + 1\n index = input.indexOf(comma, lastIndex)\n }\n\n return values\n}\n\n// Compile an array to comma-separated tokens.\n// `options.padLeft` (default: `true`) pads a space left of each token, and\n// `options.padRight` (default: `false`) pads a space to the right of each token.\nfunction stringify(values, options) {\n var settings = options || {}\n var left = settings.padLeft === false ? empty : space\n var right = settings.padRight ? space : empty\n\n // Ensure the last empty entry is seen.\n if (values[values.length - 1] === empty) {\n values = values.concat(empty)\n }\n\n return values.join(right + comma + left).trim()\n}\n","'use strict'\n\nvar one = require('./one')\n\nmodule.exports = all\n\n// Serialize all children of `parent`.\nfunction all(ctx, parent) {\n var results = []\n var children = (parent && parent.children) || []\n var index = -1\n\n while (++index < children.length) {\n results[index] = one(ctx, children[index], index, parent)\n }\n\n return results.join('')\n}\n","'use strict'\n\n// Maps of subsets.\n// Each value is a matrix of tuples.\n// The first value causes parse errors, the second is valid.\n// Of both values, the first value is unsafe, and the second is safe.\nmodule.exports = {\n // See: <https://html.spec.whatwg.org/#attribute-name-state>.\n name: [\n ['\\t\\n\\f\\r &/=>'.split(''), '\\t\\n\\f\\r \"&\\'/=>`'.split('')],\n ['\\0\\t\\n\\f\\r \"&\\'/<=>'.split(''), '\\0\\t\\n\\f\\r \"&\\'/<=>`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(unquoted)-state>.\n unquoted: [\n ['\\t\\n\\f\\r &>'.split(''), '\\0\\t\\n\\f\\r \"&\\'<=>`'.split('')],\n ['\\0\\t\\n\\f\\r \"&\\'<=>`'.split(''), '\\0\\t\\n\\f\\r \"&\\'<=>`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(single-quoted)-state>.\n single: [\n [\"&'\".split(''), '\"&\\'`'.split('')],\n [\"\\0&'\".split(''), '\\0\"&\\'`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(double-quoted)-state>.\n double: [\n ['\"&'.split(''), '\"&\\'`'.split('')],\n ['\\0\"&'.split(''), '\\0\"&\\'`'.split('')]\n ]\n}\n","'use strict'\n\nvar xtend = require('xtend')\nvar svg = require('property-information/svg')\nvar find = require('property-information/find')\nvar spaces = require('space-separated-tokens')\nvar commas = require('comma-separated-tokens')\nvar entities = require('stringify-entities')\nvar ccount = require('ccount')\nvar all = require('./all')\nvar constants = require('./constants')\n\nmodule.exports = serializeElement\n\nfunction serializeElement(ctx, node, index, parent) {\n var schema = ctx.schema\n var omit = schema.space === 'svg' ? false : ctx.omit\n var parts = []\n var selfClosing =\n schema.space === 'svg'\n ? ctx.closeEmpty\n : ctx.voids.indexOf(node.tagName.toLowerCase()) > -1\n var attrs = serializeAttributes(ctx, node.properties)\n var content\n var last\n\n if (schema.space === 'html' && node.tagName === 'svg') {\n ctx.schema = svg\n }\n\n content = all(\n ctx,\n schema.space === 'html' && node.tagName === 'template' ? node.content : node\n )\n\n ctx.schema = schema\n\n // If the node is categorised as void, but it has children, remove the\n // categorisation.\n // This enables for example `menuitem`s, which are void in W3C HTML but not\n // void in WHATWG HTML, to be stringified properly.\n if (content) selfClosing = false\n\n if (attrs || !omit || !omit.opening(node, index, parent)) {\n parts.push('<', node.tagName, attrs ? ' ' + attrs : '')\n\n if (selfClosing && (schema.space === 'svg' || ctx.close)) {\n last = attrs.charAt(attrs.length - 1)\n if (\n !ctx.tightClose ||\n last === '/' ||\n (schema.space === 'svg' && last && last !== '\"' && last !== \"'\")\n ) {\n parts.push(' ')\n }\n\n parts.push('/')\n }\n\n parts.push('>')\n }\n\n parts.push(content)\n\n if (!selfClosing && (!omit || !omit.closing(node, index, parent))) {\n parts.push('</' + node.tagName + '>')\n }\n\n return parts.join('')\n}\n\nfunction serializeAttributes(ctx, props) {\n var values = []\n var index = -1\n var key\n var value\n var last\n\n for (key in props) {\n if (props[key] != null) {\n value = serializeAttribute(ctx, key, props[key])\n if (value) values.push(value)\n }\n }\n\n while (++index < values.length) {\n last = ctx.tight ? values[index].charAt(values[index].length - 1) : null\n\n // In tight mode, don’t add a space after quoted attributes.\n if (index !== values.length - 1 && last !== '\"' && last !== \"'\") {\n values[index] += ' '\n }\n }\n\n return values.join('')\n}\n\nfunction serializeAttribute(ctx, key, value) {\n var info = find(ctx.schema, key)\n var quote = ctx.quote\n var result\n var name\n\n if (info.overloadedBoolean && (value === info.attribute || value === '')) {\n value = true\n } else if (\n info.boolean ||\n (info.overloadedBoolean && typeof value !== 'string')\n ) {\n value = Boolean(value)\n }\n\n if (\n value == null ||\n value === false ||\n (typeof value === 'number' && value !== value)\n ) {\n return ''\n }\n\n name = entities(\n info.attribute,\n xtend(ctx.entities, {\n // Always encode without parse errors in non-HTML.\n subset:\n constants.name[ctx.schema.space === 'html' ? ctx.valid : 1][ctx.safe]\n })\n )\n\n // No value.\n // There is currently only one boolean property in SVG: `[download]` on\n // `<a>`.\n // This property does not seem to work in browsers (FF, Sa, Ch), so I can’t\n // test if dropping the value works.\n // But I assume that it should:\n //\n // ```html\n // <!doctype html>\n // <svg viewBox=\"0 0 100 100\">\n // <a href=https://example.com download>\n // <circle cx=50 cy=40 r=35 />\n // </a>\n // </svg>\n // ```\n //\n // See: <https://github.com/wooorm/property-information/blob/main/lib/svg.js>\n if (value === true) return name\n\n value =\n typeof value === 'object' && 'length' in value\n ? // `spaces` doesn’t accept a second argument, but it’s given here just to\n // keep the code cleaner.\n (info.commaSeparated ? commas.stringify : spaces.stringify)(value, {\n padLeft: !ctx.tightLists\n })\n : String(value)\n\n if (ctx.collapseEmpty && !value) return name\n\n // Check unquoted value.\n if (ctx.unquoted) {\n result = entities(\n value,\n xtend(ctx.entities, {\n subset: constants.unquoted[ctx.valid][ctx.safe],\n attribute: true\n })\n )\n }\n\n // If we don’t want unquoted, or if `value` contains character references when\n // unquoted…\n if (result !== value) {\n // If the alternative is less common than `quote`, switch.\n if (ctx.smart && ccount(value, quote) > ccount(value, ctx.alternative)) {\n quote = ctx.alternative\n }\n\n result =\n quote +\n entities(\n value,\n xtend(ctx.entities, {\n // Always encode without parse errors in non-HTML.\n subset: (quote === \"'\" ? constants.single : constants.double)[\n ctx.schema.space === 'html' ? ctx.valid : 1\n ][ctx.safe],\n attribute: true\n })\n ) +\n quote\n }\n\n // Don’t add a `=` for unquoted empties.\n return name + (result ? '=' + result : result)\n}\n","'use strict'\n\nvar xtend = require('xtend')\nvar entities = require('stringify-entities')\n\nmodule.exports = serializeText\n\nfunction serializeText(ctx, node, index, parent) {\n // Check if content of `node` should be escaped.\n return parent && (parent.tagName === 'script' || parent.tagName === 'style')\n ? node.value\n : entities(node.value, xtend(ctx.entities, {subset: ['<', '&']}))\n}\n","'use strict'\n\nvar text = require('./text')\n\nmodule.exports = serializeRaw\n\nfunction serializeRaw(ctx, node) {\n return ctx.dangerous ? node.value : text(ctx, node)\n}\n","'use strict'\n\nmodule.exports = serialize\n\nvar handlers = {\n comment: require('./comment'),\n doctype: require('./doctype'),\n element: require('./element'),\n raw: require('./raw'),\n root: require('./all'),\n text: require('./text')\n}\n\nvar own = {}.hasOwnProperty\n\nfunction serialize(ctx, node, index, parent) {\n if (!node || !node.type) {\n throw new Error('Expected node, not `' + node + '`')\n }\n\n if (!own.call(handlers, node.type)) {\n throw new Error('Cannot compile unknown node `' + node.type + '`')\n }\n\n return handlers[node.type](ctx, node, index, parent)\n}\n","'use strict'\n\nvar html = require('property-information/html')\nvar svg = require('property-information/svg')\nvar voids = require('html-void-elements')\nvar omission = require('./omission')\nvar one = require('./one')\n\nmodule.exports = toHtml\n\nvar deprecationWarningIssued\n\nfunction toHtml(node, options) {\n var settings = options || {}\n var quote = settings.quote || '\"'\n var alternative = quote === '\"' ? \"'\" : '\"'\n\n if (quote !== '\"' && quote !== \"'\") {\n throw new Error('Invalid quote `' + quote + '`, expected `\\'` or `\"`')\n }\n\n if ('allowDangerousHTML' in settings && !deprecationWarningIssued) {\n deprecationWarningIssued = true\n console.warn(\n 'Deprecation warning: `allowDangerousHTML` is a nonstandard option, use `allowDangerousHtml` instead'\n )\n }\n\n return one(\n {\n valid: settings.allowParseErrors ? 0 : 1,\n safe: settings.allowDangerousCharacters ? 0 : 1,\n schema: settings.space === 'svg' ? svg : html,\n omit: settings.omitOptionalTags && omission,\n quote: quote,\n alternative: alternative,\n smart: settings.quoteSmart,\n unquoted: settings.preferUnquoted,\n tight: settings.tightAttributes,\n upperDoctype: settings.upperDoctype,\n tightDoctype: settings.tightDoctype,\n bogusComments: settings.bogusComments,\n tightLists: settings.tightCommaSeparatedLists,\n tightClose: settings.tightSelfClosing,\n collapseEmpty: settings.collapseEmptyAttributes,\n dangerous: settings.allowDangerousHtml || settings.allowDangerousHTML,\n voids: settings.voids || voids.concat(),\n entities: settings.entities || {},\n close: settings.closeSelfClosing,\n closeEmpty: settings.closeEmptyElements\n },\n node && typeof node === 'object' && 'length' in node\n ? {type: 'root', children: node}\n : node\n )\n}\n","'use strict'\nmodule.exports = require('./lib')\n","'use strict'\n\nvar toHTML = require('hast-util-to-html')\n\nmodule.exports = stringify\n\nfunction stringify(config) {\n var settings = Object.assign({}, config, this.data('settings'))\n\n this.Compiler = compiler\n\n function compiler(tree) {\n return toHTML(tree, settings)\n }\n}\n","'use strict';\n\nconst UNDEFINED_CODE_POINTS = [\n 0xfffe,\n 0xffff,\n 0x1fffe,\n 0x1ffff,\n 0x2fffe,\n 0x2ffff,\n 0x3fffe,\n 0x3ffff,\n 0x4fffe,\n 0x4ffff,\n 0x5fffe,\n 0x5ffff,\n 0x6fffe,\n 0x6ffff,\n 0x7fffe,\n 0x7ffff,\n 0x8fffe,\n 0x8ffff,\n 0x9fffe,\n 0x9ffff,\n 0xafffe,\n 0xaffff,\n 0xbfffe,\n 0xbffff,\n 0xcfffe,\n 0xcffff,\n 0xdfffe,\n 0xdffff,\n 0xefffe,\n 0xeffff,\n 0xffffe,\n 0xfffff,\n 0x10fffe,\n 0x10ffff\n];\n\nexports.REPLACEMENT_CHARACTER = '\\uFFFD';\n\nexports.CODE_POINTS = {\n EOF: -1,\n NULL: 0x00,\n TABULATION: 0x09,\n CARRIAGE_RETURN: 0x0d,\n LINE_FEED: 0x0a,\n FORM_FEED: 0x0c,\n SPACE: 0x20,\n EXCLAMATION_MARK: 0x21,\n QUOTATION_MARK: 0x22,\n NUMBER_SIGN: 0x23,\n AMPERSAND: 0x26,\n APOSTROPHE: 0x27,\n HYPHEN_MINUS: 0x2d,\n SOLIDUS: 0x2f,\n DIGIT_0: 0x30,\n DIGIT_9: 0x39,\n SEMICOLON: 0x3b,\n LESS_THAN_SIGN: 0x3c,\n EQUALS_SIGN: 0x3d,\n GREATER_THAN_SIGN: 0x3e,\n QUESTION_MARK: 0x3f,\n LATIN_CAPITAL_A: 0x41,\n LATIN_CAPITAL_F: 0x46,\n LATIN_CAPITAL_X: 0x58,\n LATIN_CAPITAL_Z: 0x5a,\n RIGHT_SQUARE_BRACKET: 0x5d,\n GRAVE_ACCENT: 0x60,\n LATIN_SMALL_A: 0x61,\n LATIN_SMALL_F: 0x66,\n LATIN_SMALL_X: 0x78,\n LATIN_SMALL_Z: 0x7a,\n REPLACEMENT_CHARACTER: 0xfffd\n};\n\nexports.CODE_POINT_SEQUENCES = {\n DASH_DASH_STRING: [0x2d, 0x2d], //--\n DOCTYPE_STRING: [0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45], //DOCTYPE\n CDATA_START_STRING: [0x5b, 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b], //[CDATA[\n SCRIPT_STRING: [0x73, 0x63, 0x72, 0x69, 0x70, 0x74], //script\n PUBLIC_STRING: [0x50, 0x55, 0x42, 0x4c, 0x49, 0x43], //PUBLIC\n SYSTEM_STRING: [0x53, 0x59, 0x53, 0x54, 0x45, 0x4d] //SYSTEM\n};\n\n//Surrogates\nexports.isSurrogate = function(cp) {\n return cp >= 0xd800 && cp <= 0xdfff;\n};\n\nexports.isSurrogatePair = function(cp) {\n return cp >= 0xdc00 && cp <= 0xdfff;\n};\n\nexports.getSurrogatePairCodePoint = function(cp1, cp2) {\n return (cp1 - 0xd800) * 0x400 + 0x2400 + cp2;\n};\n\n//NOTE: excluding NULL and ASCII whitespace\nexports.isControlCodePoint = function(cp) {\n return (\n (cp !== 0x20 && cp !== 0x0a && cp !== 0x0d && cp !== 0x09 && cp !== 0x0c && cp >= 0x01 && cp <= 0x1f) ||\n (cp >= 0x7f && cp <= 0x9f)\n );\n};\n\nexports.isUndefinedCodePoint = function(cp) {\n return (cp >= 0xfdd0 && cp <= 0xfdef) || UNDEFINED_CODE_POINTS.indexOf(cp) > -1;\n};\n","'use strict';\n\nmodule.exports = {\n controlCharacterInInputStream: 'control-character-in-input-stream',\n noncharacterInInputStream: 'noncharacter-in-input-stream',\n surrogateInInputStream: 'surrogate-in-input-stream',\n nonVoidHtmlElementStartTagWithTrailingSolidus: 'non-void-html-element-start-tag-with-trailing-solidus',\n endTagWithAttributes: 'end-tag-with-attributes',\n endTagWithTrailingSolidus: 'end-tag-with-trailing-solidus',\n unexpectedSolidusInTag: 'unexpected-solidus-in-tag',\n unexpectedNullCharacter: 'unexpected-null-character',\n unexpectedQuestionMarkInsteadOfTagName: 'unexpected-question-mark-instead-of-tag-name',\n invalidFirstCharacterOfTagName: 'invalid-first-character-of-tag-name',\n unexpectedEqualsSignBeforeAttributeName: 'unexpected-equals-sign-before-attribute-name',\n missingEndTagName: 'missing-end-tag-name',\n unexpectedCharacterInAttributeName: 'unexpected-character-in-attribute-name',\n unknownNamedCharacterReference: 'unknown-named-character-reference',\n missingSemicolonAfterCharacterReference: 'missing-semicolon-after-character-reference',\n unexpectedCharacterAfterDoctypeSystemIdentifier: 'unexpected-character-after-doctype-system-identifier',\n unexpectedCharacterInUnquotedAttributeValue: 'unexpected-character-in-unquoted-attribute-value',\n eofBeforeTagName: 'eof-before-tag-name',\n eofInTag: 'eof-in-tag',\n missingAttributeValue: 'missing-attribute-value',\n missingWhitespaceBetweenAttributes: 'missing-whitespace-between-attributes',\n missingWhitespaceAfterDoctypePublicKeyword: 'missing-whitespace-after-doctype-public-keyword',\n missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers:\n 'missing-whitespace-between-doctype-public-and-system-identifiers',\n missingWhitespaceAfterDoctypeSystemKeyword: 'missing-whitespace-after-doctype-system-keyword',\n missingQuoteBeforeDoctypePublicIdentifier: 'missing-quote-before-doctype-public-identifier',\n missingQuoteBeforeDoctypeSystemIdentifier: 'missing-quote-before-doctype-system-identifier',\n missingDoctypePublicIdentifier: 'missing-doctype-public-identifier',\n missingDoctypeSystemIdentifier: 'missing-doctype-system-identifier',\n abruptDoctypePublicIdentifier: 'abrupt-doctype-public-identifier',\n abruptDoctypeSystemIdentifier: 'abrupt-doctype-system-identifier',\n cdataInHtmlContent: 'cdata-in-html-content',\n incorrectlyOpenedComment: 'incorrectly-opened-comment',\n eofInScriptHtmlCommentLikeText: 'eof-in-script-html-comment-like-text',\n eofInDoctype: 'eof-in-doctype',\n nestedComment: 'nested-comment',\n abruptClosingOfEmptyComment: 'abrupt-closing-of-empty-comment',\n eofInComment: 'eof-in-comment',\n incorrectlyClosedComment: 'incorrectly-closed-comment',\n eofInCdata: 'eof-in-cdata',\n absenceOfDigitsInNumericCharacterReference: 'absence-of-digits-in-numeric-character-reference',\n nullCharacterReference: 'null-character-reference',\n surrogateCharacterReference: 'surrogate-character-reference',\n characterReferenceOutsideUnicodeRange: 'character-reference-outside-unicode-range',\n controlCharacterReference: 'control-character-reference',\n noncharacterCharacterReference: 'noncharacter-character-reference',\n missingWhitespaceBeforeDoctypeName: 'missing-whitespace-before-doctype-name',\n missingDoctypeName: 'missing-doctype-name',\n invalidCharacterSequenceAfterDoctypeName: 'invalid-character-sequence-after-doctype-name',\n duplicateAttribute: 'duplicate-attribute',\n nonConformingDoctype: 'non-conforming-doctype',\n missingDoctype: 'missing-doctype',\n misplacedDoctype: 'misplaced-doctype',\n endTagWithoutMatchingOpenElement: 'end-tag-without-matching-open-element',\n closingOfElementWithOpenChildElements: 'closing-of-element-with-open-child-elements',\n disallowedContentInNoscriptInHead: 'disallowed-content-in-noscript-in-head',\n openElementsLeftAfterEof: 'open-elements-left-after-eof',\n abandonedHeadElementChild: 'abandoned-head-element-child',\n misplacedStartTagForHeadElement: 'misplaced-start-tag-for-head-element',\n nestedNoscriptInHead: 'nested-noscript-in-head',\n eofInElementThatCanContainOnlyText: 'eof-in-element-that-can-contain-only-text'\n};\n","'use strict';\n\nconst unicode = require('../common/unicode');\nconst ERR = require('../common/error-codes');\n\n//Aliases\nconst $ = unicode.CODE_POINTS;\n\n//Const\nconst DEFAULT_BUFFER_WATERLINE = 1 << 16;\n\n//Preprocessor\n//NOTE: HTML input preprocessing\n//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#preprocessing-the-input-stream)\nclass Preprocessor {\n constructor() {\n this.html = null;\n\n this.pos = -1;\n this.lastGapPos = -1;\n this.lastCharPos = -1;\n\n this.gapStack = [];\n\n this.skipNextNewLine = false;\n\n this.lastChunkWritten = false;\n this.endOfChunkHit = false;\n this.bufferWaterline = DEFAULT_BUFFER_WATERLINE;\n }\n\n _err() {\n // NOTE: err reporting is noop by default. Enabled by mixin.\n }\n\n _addGap() {\n this.gapStack.push(this.lastGapPos);\n this.lastGapPos = this.pos;\n }\n\n _processSurrogate(cp) {\n //NOTE: try to peek a surrogate pair\n if (this.pos !== this.lastCharPos) {\n const nextCp = this.html.charCodeAt(this.pos + 1);\n\n if (unicode.isSurrogatePair(nextCp)) {\n //NOTE: we have a surrogate pair. Peek pair character and recalculate code point.\n this.pos++;\n\n //NOTE: add gap that should be avoided during retreat\n this._addGap();\n\n return unicode.getSurrogatePairCodePoint(cp, nextCp);\n }\n }\n\n //NOTE: we are at the end of a chunk, therefore we can't infer surrogate pair yet.\n else if (!this.lastChunkWritten) {\n this.endOfChunkHit = true;\n return $.EOF;\n }\n\n //NOTE: isolated surrogate\n this._err(ERR.surrogateInInputStream);\n\n return cp;\n }\n\n dropParsedChunk() {\n if (this.pos > this.bufferWaterline) {\n this.lastCharPos -= this.pos;\n this.html = this.html.substring(this.pos);\n this.pos = 0;\n this.lastGapPos = -1;\n this.gapStack = [];\n }\n }\n\n write(chunk, isLastChunk) {\n if (this.html) {\n this.html += chunk;\n } else {\n this.html = chunk;\n }\n\n this.lastCharPos = this.html.length - 1;\n this.endOfChunkHit = false;\n this.lastChunkWritten = isLastChunk;\n }\n\n insertHtmlAtCurrentPos(chunk) {\n this.html = this.html.substring(0, this.pos + 1) + chunk + this.html.substring(this.pos + 1, this.html.length);\n\n this.lastCharPos = this.html.length - 1;\n this.endOfChunkHit = false;\n }\n\n advance() {\n this.pos++;\n\n if (this.pos > this.lastCharPos) {\n this.endOfChunkHit = !this.lastChunkWritten;\n return $.EOF;\n }\n\n let cp = this.html.charCodeAt(this.pos);\n\n //NOTE: any U+000A LINE FEED (LF) characters that immediately follow a U+000D CARRIAGE RETURN (CR) character\n //must be ignored.\n if (this.skipNextNewLine && cp === $.LINE_FEED) {\n this.skipNextNewLine = false;\n this._addGap();\n return this.advance();\n }\n\n //NOTE: all U+000D CARRIAGE RETURN (CR) characters must be converted to U+000A LINE FEED (LF) characters\n if (cp === $.CARRIAGE_RETURN) {\n this.skipNextNewLine = true;\n return $.LINE_FEED;\n }\n\n this.skipNextNewLine = false;\n\n if (unicode.isSurrogate(cp)) {\n cp = this._processSurrogate(cp);\n }\n\n //OPTIMIZATION: first check if code point is in the common allowed\n //range (ASCII alphanumeric, whitespaces, big chunk of BMP)\n //before going into detailed performance cost validation.\n const isCommonValidRange =\n (cp > 0x1f && cp < 0x7f) || cp === $.LINE_FEED || cp === $.CARRIAGE_RETURN || (cp > 0x9f && cp < 0xfdd0);\n\n if (!isCommonValidRange) {\n this._checkForProblematicCharacters(cp);\n }\n\n return cp;\n }\n\n _checkForProblematicCharacters(cp) {\n if (unicode.isControlCodePoint(cp)) {\n this._err(ERR.controlCharacterInInputStream);\n } else if (unicode.isUndefinedCodePoint(cp)) {\n this._err(ERR.noncharacterInInputStream);\n }\n }\n\n retreat() {\n if (this.pos === this.lastGapPos) {\n this.lastGapPos = this.gapStack.pop();\n this.pos--;\n }\n\n this.pos--;\n }\n}\n\nmodule.exports = Preprocessor;\n","'use strict';\n\n//NOTE: this file contains auto-generated array mapped radix tree that is used for the named entity references consumption\n//(details: https://github.com/inikulin/parse5/tree/master/scripts/generate-named-entity-data/README.md)\nmodule.exports = new Uint16Array([4,52,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,106,303,412,810,1432,1701,1796,1987,2114,2360,2420,2484,3170,3251,4140,4393,4575,4610,5106,5512,5728,6117,6274,6315,6345,6427,6516,7002,7910,8733,9323,9870,10170,10631,10893,11318,11386,11467,12773,13092,14474,14922,15448,15542,16419,17666,18166,18611,19004,19095,19298,19397,4,16,69,77,97,98,99,102,103,108,109,110,111,112,114,115,116,117,140,150,158,169,176,194,199,210,216,222,226,242,256,266,283,294,108,105,103,5,198,1,59,148,1,198,80,5,38,1,59,156,1,38,99,117,116,101,5,193,1,59,167,1,193,114,101,118,101,59,1,258,4,2,105,121,182,191,114,99,5,194,1,59,189,1,194,59,1,1040,114,59,3,55349,56580,114,97,118,101,5,192,1,59,208,1,192,112,104,97,59,1,913,97,99,114,59,1,256,100,59,1,10835,4,2,103,112,232,237,111,110,59,1,260,102,59,3,55349,56632,112,108,121,70,117,110,99,116,105,111,110,59,1,8289,105,110,103,5,197,1,59,264,1,197,4,2,99,115,272,277,114,59,3,55349,56476,105,103,110,59,1,8788,105,108,100,101,5,195,1,59,292,1,195,109,108,5,196,1,59,301,1,196,4,8,97,99,101,102,111,114,115,117,321,350,354,383,388,394,400,405,4,2,99,114,327,336,107,115,108,97,115,104,59,1,8726,4,2,118,119,342,345,59,1,10983,101,100,59,1,8966,121,59,1,1041,4,3,99,114,116,362,369,379,97,117,115,101,59,1,8757,110,111,117,108,108,105,115,59,1,8492,97,59,1,914,114,59,3,55349,56581,112,102,59,3,55349,56633,101,118,101,59,1,728,99,114,59,1,8492,109,112,101,113,59,1,8782,4,14,72,79,97,99,100,101,102,104,105,108,111,114,115,117,442,447,456,504,542,547,569,573,577,616,678,784,790,796,99,121,59,1,1063,80,89,5,169,1,59,454,1,169,4,3,99,112,121,464,470,497,117,116,101,59,1,262,4,2,59,105,476,478,1,8914,116,97,108,68,105,102,102,101,114,101,110,116,105,97,108,68,59,1,8517,108,101,121,115,59,1,8493,4,4,97,101,105,111,514,520,530,535,114,111,110,59,1,268,100,105,108,5,199,1,59,528,1,199,114,99,59,1,264,110,105,110,116,59,1,8752,111,116,59,1,266,4,2,100,110,553,560,105,108,108,97,59,1,184,116,101,114,68,111,116,59,1,183,114,59,1,8493,105,59,1,935,114,99,108,101,4,4,68,77,80,84,591,596,603,609,111,116,59,1,8857,105,110,117,115,59,1,8854,108,117,115,59,1,8853,105,109,101,115,59,1,8855,111,4,2,99,115,623,646,107,119,105,115,101,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8754,101,67,117,114,108,121,4,2,68,81,658,671,111,117,98,108,101,81,117,111,116,101,59,1,8221,117,111,116,101,59,1,8217,4,4,108,110,112,117,688,701,736,753,111,110,4,2,59,101,696,698,1,8759,59,1,10868,4,3,103,105,116,709,717,722,114,117,101,110,116,59,1,8801,110,116,59,1,8751,111,117,114,73,110,116,101,103,114,97,108,59,1,8750,4,2,102,114,742,745,59,1,8450,111,100,117,99,116,59,1,8720,110,116,101,114,67,108,111,99,107,119,105,115,101,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8755,111,115,115,59,1,10799,99,114,59,3,55349,56478,112,4,2,59,67,803,805,1,8915,97,112,59,1,8781,4,11,68,74,83,90,97,99,101,102,105,111,115,834,850,855,860,865,888,903,916,921,1011,1415,4,2,59,111,840,842,1,8517,116,114,97,104,100,59,1,10513,99,121,59,1,1026,99,121,59,1,1029,99,121,59,1,1039,4,3,103,114,115,873,879,883,103,101,114,59,1,8225,114,59,1,8609,104,118,59,1,10980,4,2,97,121,894,900,114,111,110,59,1,270,59,1,1044,108,4,2,59,116,910,912,1,8711,97,59,1,916,114,59,3,55349,56583,4,2,97,102,927,998,4,2,99,109,933,992,114,105,116,105,99,97,108,4,4,65,68,71,84,950,957,978,985,99,117,116,101,59,1,180,111,4,2,116,117,964,967,59,1,729,98,108,101,65,99,117,116,101,59,1,733,114,97,118,101,59,1,96,105,108,100,101,59,1,732,111,110,100,59,1,8900,102,101,114,101,110,116,105,97,108,68,59,1,8518,4,4,112,116,117,119,1021,1026,1048,1249,102,59,3,55349,56635,4,3,59,68,69,1034,1036,1041,1,168,111,116,59,1,8412,113,117,97,108,59,1,8784,98,108,101,4,6,67,68,76,82,85,86,1065,1082,1101,1189,1211,1236,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8751,111,4,2,116,119,1089,1092,59,1,168,110,65,114,114,111,119,59,1,8659,4,2,101,111,1107,1141,102,116,4,3,65,82,84,1117,1124,1136,114,114,111,119,59,1,8656,105,103,104,116,65,114,114,111,119,59,1,8660,101,101,59,1,10980,110,103,4,2,76,82,1149,1177,101,102,116,4,2,65,82,1158,1165,114,114,111,119,59,1,10232,105,103,104,116,65,114,114,111,119,59,1,10234,105,103,104,116,65,114,114,111,119,59,1,10233,105,103,104,116,4,2,65,84,1199,1206,114,114,111,119,59,1,8658,101,101,59,1,8872,112,4,2,65,68,1218,1225,114,114,111,119,59,1,8657,111,119,110,65,114,114,111,119,59,1,8661,101,114,116,105,99,97,108,66,97,114,59,1,8741,110,4,6,65,66,76,82,84,97,1264,1292,1299,1352,1391,1408,114,114,111,119,4,3,59,66,85,1276,1278,1283,1,8595,97,114,59,1,10515,112,65,114,114,111,119,59,1,8693,114,101,118,101,59,1,785,101,102,116,4,3,82,84,86,1310,1323,1334,105,103,104,116,86,101,99,116,111,114,59,1,10576,101,101,86,101,99,116,111,114,59,1,10590,101,99,116,111,114,4,2,59,66,1345,1347,1,8637,97,114,59,1,10582,105,103,104,116,4,2,84,86,1362,1373,101,101,86,101,99,116,111,114,59,1,10591,101,99,116,111,114,4,2,59,66,1384,1386,1,8641,97,114,59,1,10583,101,101,4,2,59,65,1399,1401,1,8868,114,114,111,119,59,1,8615,114,114,111,119,59,1,8659,4,2,99,116,1421,1426,114,59,3,55349,56479,114,111,107,59,1,272,4,16,78,84,97,99,100,102,103,108,109,111,112,113,115,116,117,120,1466,1470,1478,1489,1515,1520,1525,1536,1544,1593,1609,1617,1650,1664,1668,1677,71,59,1,330,72,5,208,1,59,1476,1,208,99,117,116,101,5,201,1,59,1487,1,201,4,3,97,105,121,1497,1503,1512,114,111,110,59,1,282,114,99,5,202,1,59,1510,1,202,59,1,1069,111,116,59,1,278,114,59,3,55349,56584,114,97,118,101,5,200,1,59,1534,1,200,101,109,101,110,116,59,1,8712,4,2,97,112,1550,1555,99,114,59,1,274,116,121,4,2,83,86,1563,1576,109,97,108,108,83,113,117,97,114,101,59,1,9723,101,114,121,83,109,97,108,108,83,113,117,97,114,101,59,1,9643,4,2,103,112,1599,1604,111,110,59,1,280,102,59,3,55349,56636,115,105,108,111,110,59,1,917,117,4,2,97,105,1624,1640,108,4,2,59,84,1631,1633,1,10869,105,108,100,101,59,1,8770,108,105,98,114,105,117,109,59,1,8652,4,2,99,105,1656,1660,114,59,1,8496,109,59,1,10867,97,59,1,919,109,108,5,203,1,59,1675,1,203,4,2,105,112,1683,1689,115,116,115,59,1,8707,111,110,101,110,116,105,97,108,69,59,1,8519,4,5,99,102,105,111,115,1713,1717,1722,1762,1791,121,59,1,1060,114,59,3,55349,56585,108,108,101,100,4,2,83,86,1732,1745,109,97,108,108,83,113,117,97,114,101,59,1,9724,101,114,121,83,109,97,108,108,83,113,117,97,114,101,59,1,9642,4,3,112,114,117,1770,1775,1781,102,59,3,55349,56637,65,108,108,59,1,8704,114,105,101,114,116,114,102,59,1,8497,99,114,59,1,8497,4,12,74,84,97,98,99,100,102,103,111,114,115,116,1822,1827,1834,1848,1855,1877,1882,1887,1890,1896,1978,1984,99,121,59,1,1027,5,62,1,59,1832,1,62,109,109,97,4,2,59,100,1843,1845,1,915,59,1,988,114,101,118,101,59,1,286,4,3,101,105,121,1863,1869,1874,100,105,108,59,1,290,114,99,59,1,284,59,1,1043,111,116,59,1,288,114,59,3,55349,56586,59,1,8921,112,102,59,3,55349,56638,101,97,116,101,114,4,6,69,70,71,76,83,84,1915,1933,1944,1953,1959,1971,113,117,97,108,4,2,59,76,1925,1927,1,8805,101,115,115,59,1,8923,117,108,108,69,113,117,97,108,59,1,8807,114,101,97,116,101,114,59,1,10914,101,115,115,59,1,8823,108,97,110,116,69,113,117,97,108,59,1,10878,105,108,100,101,59,1,8819,99,114,59,3,55349,56482,59,1,8811,4,8,65,97,99,102,105,111,115,117,2005,2012,2026,2032,2036,2049,2073,2089,82,68,99,121,59,1,1066,4,2,99,116,2018,2023,101,107,59,1,711,59,1,94,105,114,99,59,1,292,114,59,1,8460,108,98,101,114,116,83,112,97,99,101,59,1,8459,4,2,112,114,2055,2059,102,59,1,8461,105,122,111,110,116,97,108,76,105,110,101,59,1,9472,4,2,99,116,2079,2083,114,59,1,8459,114,111,107,59,1,294,109,112,4,2,68,69,2097,2107,111,119,110,72,117,109,112,59,1,8782,113,117,97,108,59,1,8783,4,14,69,74,79,97,99,100,102,103,109,110,111,115,116,117,2144,2149,2155,2160,2171,2189,2194,2198,2209,2245,2307,2329,2334,2341,99,121,59,1,1045,108,105,103,59,1,306,99,121,59,1,1025,99,117,116,101,5,205,1,59,2169,1,205,4,2,105,121,2177,2186,114,99,5,206,1,59,2184,1,206,59,1,1048,111,116,59,1,304,114,59,1,8465,114,97,118,101,5,204,1,59,2207,1,204,4,3,59,97,112,2217,2219,2238,1,8465,4,2,99,103,2225,2229,114,59,1,298,105,110,97,114,121,73,59,1,8520,108,105,101,115,59,1,8658,4,2,116,118,2251,2281,4,2,59,101,2257,2259,1,8748,4,2,103,114,2265,2271,114,97,108,59,1,8747,115,101,99,116,105,111,110,59,1,8898,105,115,105,98,108,101,4,2,67,84,2293,2300,111,109,109,97,59,1,8291,105,109,101,115,59,1,8290,4,3,103,112,116,2315,2320,2325,111,110,59,1,302,102,59,3,55349,56640,97,59,1,921,99,114,59,1,8464,105,108,100,101,59,1,296,4,2,107,109,2347,2352,99,121,59,1,1030,108,5,207,1,59,2358,1,207,4,5,99,102,111,115,117,2372,2386,2391,2397,2414,4,2,105,121,2378,2383,114,99,59,1,308,59,1,1049,114,59,3,55349,56589,112,102,59,3,55349,56641,4,2,99,101,2403,2408,114,59,3,55349,56485,114,99,121,59,1,1032,107,99,121,59,1,1028,4,7,72,74,97,99,102,111,115,2436,2441,2446,2452,2467,2472,2478,99,121,59,1,1061,99,121,59,1,1036,112,112,97,59,1,922,4,2,101,121,2458,2464,100,105,108,59,1,310,59,1,1050,114,59,3,55349,56590,112,102,59,3,55349,56642,99,114,59,3,55349,56486,4,11,74,84,97,99,101,102,108,109,111,115,116,2508,2513,2520,2562,2585,2981,2986,3004,3011,3146,3167,99,121,59,1,1033,5,60,1,59,2518,1,60,4,5,99,109,110,112,114,2532,2538,2544,2548,2558,117,116,101,59,1,313,98,100,97,59,1,923,103,59,1,10218,108,97,99,101,116,114,102,59,1,8466,114,59,1,8606,4,3,97,101,121,2570,2576,2582,114,111,110,59,1,317,100,105,108,59,1,315,59,1,1051,4,2,102,115,2591,2907,116,4,10,65,67,68,70,82,84,85,86,97,114,2614,2663,2672,2728,2735,2760,2820,2870,2888,2895,4,2,110,114,2620,2633,103,108,101,66,114,97,99,107,101,116,59,1,10216,114,111,119,4,3,59,66,82,2644,2646,2651,1,8592,97,114,59,1,8676,105,103,104,116,65,114,114,111,119,59,1,8646,101,105,108,105,110,103,59,1,8968,111,4,2,117,119,2679,2692,98,108,101,66,114,97,99,107,101,116,59,1,10214,110,4,2,84,86,2699,2710,101,101,86,101,99,116,111,114,59,1,10593,101,99,116,111,114,4,2,59,66,2721,2723,1,8643,97,114,59,1,10585,108,111,111,114,59,1,8970,105,103,104,116,4,2,65,86,2745,2752,114,114,111,119,59,1,8596,101,99,116,111,114,59,1,10574,4,2,101,114,2766,2792,101,4,3,59,65,86,2775,2777,2784,1,8867,114,114,111,119,59,1,8612,101,99,116,111,114,59,1,10586,105,97,110,103,108,101,4,3,59,66,69,2806,2808,2813,1,8882,97,114,59,1,10703,113,117,97,108,59,1,8884,112,4,3,68,84,86,2829,2841,2852,111,119,110,86,101,99,116,111,114,59,1,10577,101,101,86,101,99,116,111,114,59,1,10592,101,99,116,111,114,4,2,59,66,2863,2865,1,8639,97,114,59,1,10584,101,99,116,111,114,4,2,59,66,2881,2883,1,8636,97,114,59,1,10578,114,114,111,119,59,1,8656,105,103,104,116,97,114,114,111,119,59,1,8660,115,4,6,69,70,71,76,83,84,2922,2936,2947,2956,2962,2974,113,117,97,108,71,114,101,97,116,101,114,59,1,8922,117,108,108,69,113,117,97,108,59,1,8806,114,101,97,116,101,114,59,1,8822,101,115,115,59,1,10913,108,97,110,116,69,113,117,97,108,59,1,10877,105,108,100,101,59,1,8818,114,59,3,55349,56591,4,2,59,101,2992,2994,1,8920,102,116,97,114,114,111,119,59,1,8666,105,100,111,116,59,1,319,4,3,110,112,119,3019,3110,3115,103,4,4,76,82,108,114,3030,3058,3070,3098,101,102,116,4,2,65,82,3039,3046,114,114,111,119,59,1,10229,105,103,104,116,65,114,114,111,119,59,1,10231,105,103,104,116,65,114,114,111,119,59,1,10230,101,102,116,4,2,97,114,3079,3086,114,114,111,119,59,1,10232,105,103,104,116,97,114,114,111,119,59,1,10234,105,103,104,116,97,114,114,111,119,59,1,10233,102,59,3,55349,56643,101,114,4,2,76,82,3123,3134,101,102,116,65,114,114,111,119,59,1,8601,105,103,104,116,65,114,114,111,119,59,1,8600,4,3,99,104,116,3154,3158,3161,114,59,1,8466,59,1,8624,114,111,107,59,1,321,59,1,8810,4,8,97,99,101,102,105,111,115,117,3188,3192,3196,3222,3227,3237,3243,3248,112,59,1,10501,121,59,1,1052,4,2,100,108,3202,3213,105,117,109,83,112,97,99,101,59,1,8287,108,105,110,116,114,102,59,1,8499,114,59,3,55349,56592,110,117,115,80,108,117,115,59,1,8723,112,102,59,3,55349,56644,99,114,59,1,8499,59,1,924,4,9,74,97,99,101,102,111,115,116,117,3271,3276,3283,3306,3422,3427,4120,4126,4137,99,121,59,1,1034,99,117,116,101,59,1,323,4,3,97,101,121,3291,3297,3303,114,111,110,59,1,327,100,105,108,59,1,325,59,1,1053,4,3,103,115,119,3314,3380,3415,97,116,105,118,101,4,3,77,84,86,3327,3340,3365,101,100,105,117,109,83,112,97,99,101,59,1,8203,104,105,4,2,99,110,3348,3357,107,83,112,97,99,101,59,1,8203,83,112,97,99,101,59,1,8203,101,114,121,84,104,105,110,83,112,97,99,101,59,1,8203,116,101,100,4,2,71,76,3389,3405,114,101,97,116,101,114,71,114,101,97,116,101,114,59,1,8811,101,115,115,76,101,115,115,59,1,8810,76,105,110,101,59,1,10,114,59,3,55349,56593,4,4,66,110,112,116,3437,3444,3460,3464,114,101,97,107,59,1,8288,66,114,101,97,107,105,110,103,83,112,97,99,101,59,1,160,102,59,1,8469,4,13,59,67,68,69,71,72,76,78,80,82,83,84,86,3492,3494,3517,3536,3578,3657,3685,3784,3823,3860,3915,4066,4107,1,10988,4,2,111,117,3500,3510,110,103,114,117,101,110,116,59,1,8802,112,67,97,112,59,1,8813,111,117,98,108,101,86,101,114,116,105,99,97,108,66,97,114,59,1,8742,4,3,108,113,120,3544,3552,3571,101,109,101,110,116,59,1,8713,117,97,108,4,2,59,84,3561,3563,1,8800,105,108,100,101,59,3,8770,824,105,115,116,115,59,1,8708,114,101,97,116,101,114,4,7,59,69,70,71,76,83,84,3600,3602,3609,3621,3631,3637,3650,1,8815,113,117,97,108,59,1,8817,117,108,108,69,113,117,97,108,59,3,8807,824,114,101,97,116,101,114,59,3,8811,824,101,115,115,59,1,8825,108,97,110,116,69,113,117,97,108,59,3,10878,824,105,108,100,101,59,1,8821,117,109,112,4,2,68,69,3666,3677,111,119,110,72,117,109,112,59,3,8782,824,113,117,97,108,59,3,8783,824,101,4,2,102,115,3692,3724,116,84,114,105,97,110,103,108,101,4,3,59,66,69,3709,3711,3717,1,8938,97,114,59,3,10703,824,113,117,97,108,59,1,8940,115,4,6,59,69,71,76,83,84,3739,3741,3748,3757,3764,3777,1,8814,113,117,97,108,59,1,8816,114,101,97,116,101,114,59,1,8824,101,115,115,59,3,8810,824,108,97,110,116,69,113,117,97,108,59,3,10877,824,105,108,100,101,59,1,8820,101,115,116,101,100,4,2,71,76,3795,3812,114,101,97,116,101,114,71,114,101,97,116,101,114,59,3,10914,824,101,115,115,76,101,115,115,59,3,10913,824,114,101,99,101,100,101,115,4,3,59,69,83,3838,3840,3848,1,8832,113,117,97,108,59,3,10927,824,108,97,110,116,69,113,117,97,108,59,1,8928,4,2,101,105,3866,3881,118,101,114,115,101,69,108,101,109,101,110,116,59,1,8716,103,104,116,84,114,105,97,110,103,108,101,4,3,59,66,69,3900,3902,3908,1,8939,97,114,59,3,10704,824,113,117,97,108,59,1,8941,4,2,113,117,3921,3973,117,97,114,101,83,117,4,2,98,112,3933,3952,115,101,116,4,2,59,69,3942,3945,3,8847,824,113,117,97,108,59,1,8930,101,114,115,101,116,4,2,59,69,3963,3966,3,8848,824,113,117,97,108,59,1,8931,4,3,98,99,112,3981,4000,4045,115,101,116,4,2,59,69,3990,3993,3,8834,8402,113,117,97,108,59,1,8840,99,101,101,100,115,4,4,59,69,83,84,4015,4017,4025,4037,1,8833,113,117,97,108,59,3,10928,824,108,97,110,116,69,113,117,97,108,59,1,8929,105,108,100,101,59,3,8831,824,101,114,115,101,116,4,2,59,69,4056,4059,3,8835,8402,113,117,97,108,59,1,8841,105,108,100,101,4,4,59,69,70,84,4080,4082,4089,4100,1,8769,113,117,97,108,59,1,8772,117,108,108,69,113,117,97,108,59,1,8775,105,108,100,101,59,1,8777,101,114,116,105,99,97,108,66,97,114,59,1,8740,99,114,59,3,55349,56489,105,108,100,101,5,209,1,59,4135,1,209,59,1,925,4,14,69,97,99,100,102,103,109,111,112,114,115,116,117,118,4170,4176,4187,4205,4212,4217,4228,4253,4259,4292,4295,4316,4337,4346,108,105,103,59,1,338,99,117,116,101,5,211,1,59,4185,1,211,4,2,105,121,4193,4202,114,99,5,212,1,59,4200,1,212,59,1,1054,98,108,97,99,59,1,336,114,59,3,55349,56594,114,97,118,101,5,210,1,59,4226,1,210,4,3,97,101,105,4236,4241,4246,99,114,59,1,332,103,97,59,1,937,99,114,111,110,59,1,927,112,102,59,3,55349,56646,101,110,67,117,114,108,121,4,2,68,81,4272,4285,111,117,98,108,101,81,117,111,116,101,59,1,8220,117,111,116,101,59,1,8216,59,1,10836,4,2,99,108,4301,4306,114,59,3,55349,56490,97,115,104,5,216,1,59,4314,1,216,105,4,2,108,109,4323,4332,100,101,5,213,1,59,4330,1,213,101,115,59,1,10807,109,108,5,214,1,59,4344,1,214,101,114,4,2,66,80,4354,4380,4,2,97,114,4360,4364,114,59,1,8254,97,99,4,2,101,107,4372,4375,59,1,9182,101,116,59,1,9140,97,114,101,110,116,104,101,115,105,115,59,1,9180,4,9,97,99,102,104,105,108,111,114,115,4413,4422,4426,4431,4435,4438,4448,4471,4561,114,116,105,97,108,68,59,1,8706,121,59,1,1055,114,59,3,55349,56595,105,59,1,934,59,1,928,117,115,77,105,110,117,115,59,1,177,4,2,105,112,4454,4467,110,99,97,114,101,112,108,97,110,101,59,1,8460,102,59,1,8473,4,4,59,101,105,111,4481,4483,4526,4531,1,10939,99,101,100,101,115,4,4,59,69,83,84,4498,4500,4507,4519,1,8826,113,117,97,108,59,1,10927,108,97,110,116,69,113,117,97,108,59,1,8828,105,108,100,101,59,1,8830,109,101,59,1,8243,4,2,100,112,4537,4543,117,99,116,59,1,8719,111,114,116,105,111,110,4,2,59,97,4555,4557,1,8759,108,59,1,8733,4,2,99,105,4567,4572,114,59,3,55349,56491,59,1,936,4,4,85,102,111,115,4585,4594,4599,4604,79,84,5,34,1,59,4592,1,34,114,59,3,55349,56596,112,102,59,1,8474,99,114,59,3,55349,56492,4,12,66,69,97,99,101,102,104,105,111,114,115,117,4636,4642,4650,4681,4704,4763,4767,4771,5047,5069,5081,5094,97,114,114,59,1,10512,71,5,174,1,59,4648,1,174,4,3,99,110,114,4658,4664,4668,117,116,101,59,1,340,103,59,1,10219,114,4,2,59,116,4675,4677,1,8608,108,59,1,10518,4,3,97,101,121,4689,4695,4701,114,111,110,59,1,344,100,105,108,59,1,342,59,1,1056,4,2,59,118,4710,4712,1,8476,101,114,115,101,4,2,69,85,4722,4748,4,2,108,113,4728,4736,101,109,101,110,116,59,1,8715,117,105,108,105,98,114,105,117,109,59,1,8651,112,69,113,117,105,108,105,98,114,105,117,109,59,1,10607,114,59,1,8476,111,59,1,929,103,104,116,4,8,65,67,68,70,84,85,86,97,4792,4840,4849,4905,4912,4972,5022,5040,4,2,110,114,4798,4811,103,108,101,66,114,97,99,107,101,116,59,1,10217,114,111,119,4,3,59,66,76,4822,4824,4829,1,8594,97,114,59,1,8677,101,102,116,65,114,114,111,119,59,1,8644,101,105,108,105,110,103,59,1,8969,111,4,2,117,119,4856,4869,98,108,101,66,114,97,99,107,101,116,59,1,10215,110,4,2,84,86,4876,4887,101,101,86,101,99,116,111,114,59,1,10589,101,99,116,111,114,4,2,59,66,4898,4900,1,8642,97,114,59,1,10581,108,111,111,114,59,1,8971,4,2,101,114,4918,4944,101,4,3,59,65,86,4927,4929,4936,1,8866,114,114,111,119,59,1,8614,101,99,116,111,114,59,1,10587,105,97,110,103,108,101,4,3,59,66,69,4958,4960,4965,1,8883,97,114,59,1,10704,113,117,97,108,59,1,8885,112,4,3,68,84,86,4981,4993,5004,111,119,110,86,101,99,116,111,114,59,1,10575,101,101,86,101,99,116,111,114,59,1,10588,101,99,116,111,114,4,2,59,66,5015,5017,1,8638,97,114,59,1,10580,101,99,116,111,114,4,2,59,66,5033,5035,1,8640,97,114,59,1,10579,114,114,111,119,59,1,8658,4,2,112,117,5053,5057,102,59,1,8477,110,100,73,109,112,108,105,101,115,59,1,10608,105,103,104,116,97,114,114,111,119,59,1,8667,4,2,99,104,5087,5091,114,59,1,8475,59,1,8625,108,101,68,101,108,97,121,101,100,59,1,10740,4,13,72,79,97,99,102,104,105,109,111,113,115,116,117,5134,5150,5157,5164,5198,5203,5259,5265,5277,5283,5374,5380,5385,4,2,67,99,5140,5146,72,99,121,59,1,1065,121,59,1,1064,70,84,99,121,59,1,1068,99,117,116,101,59,1,346,4,5,59,97,101,105,121,5176,5178,5184,5190,5195,1,10940,114,111,110,59,1,352,100,105,108,59,1,350,114,99,59,1,348,59,1,1057,114,59,3,55349,56598,111,114,116,4,4,68,76,82,85,5216,5227,5238,5250,111,119,110,65,114,114,111,119,59,1,8595,101,102,116,65,114,114,111,119,59,1,8592,105,103,104,116,65,114,114,111,119,59,1,8594,112,65,114,114,111,119,59,1,8593,103,109,97,59,1,931,97,108,108,67,105,114,99,108,101,59,1,8728,112,102,59,3,55349,56650,4,2,114,117,5289,5293,116,59,1,8730,97,114,101,4,4,59,73,83,85,5306,5308,5322,5367,1,9633,110,116,101,114,115,101,99,116,105,111,110,59,1,8851,117,4,2,98,112,5329,5347,115,101,116,4,2,59,69,5338,5340,1,8847,113,117,97,108,59,1,8849,101,114,115,101,116,4,2,59,69,5358,5360,1,8848,113,117,97,108,59,1,8850,110,105,111,110,59,1,8852,99,114,59,3,55349,56494,97,114,59,1,8902,4,4,98,99,109,112,5395,5420,5475,5478,4,2,59,115,5401,5403,1,8912,101,116,4,2,59,69,5411,5413,1,8912,113,117,97,108,59,1,8838,4,2,99,104,5426,5468,101,101,100,115,4,4,59,69,83,84,5440,5442,5449,5461,1,8827,113,117,97,108,59,1,10928,108,97,110,116,69,113,117,97,108,59,1,8829,105,108,100,101,59,1,8831,84,104,97,116,59,1,8715,59,1,8721,4,3,59,101,115,5486,5488,5507,1,8913,114,115,101,116,4,2,59,69,5498,5500,1,8835,113,117,97,108,59,1,8839,101,116,59,1,8913,4,11,72,82,83,97,99,102,104,105,111,114,115,5536,5546,5552,5567,5579,5602,5607,5655,5695,5701,5711,79,82,78,5,222,1,59,5544,1,222,65,68,69,59,1,8482,4,2,72,99,5558,5563,99,121,59,1,1035,121,59,1,1062,4,2,98,117,5573,5576,59,1,9,59,1,932,4,3,97,101,121,5587,5593,5599,114,111,110,59,1,356,100,105,108,59,1,354,59,1,1058,114,59,3,55349,56599,4,2,101,105,5613,5631,4,2,114,116,5619,5627,101,102,111,114,101,59,1,8756,97,59,1,920,4,2,99,110,5637,5647,107,83,112,97,99,101,59,3,8287,8202,83,112,97,99,101,59,1,8201,108,100,101,4,4,59,69,70,84,5668,5670,5677,5688,1,8764,113,117,97,108,59,1,8771,117,108,108,69,113,117,97,108,59,1,8773,105,108,100,101,59,1,8776,112,102,59,3,55349,56651,105,112,108,101,68,111,116,59,1,8411,4,2,99,116,5717,5722,114,59,3,55349,56495,114,111,107,59,1,358,4,14,97,98,99,100,102,103,109,110,111,112,114,115,116,117,5758,5789,5805,5823,5830,5835,5846,5852,5921,5937,6089,6095,6101,6108,4,2,99,114,5764,5774,117,116,101,5,218,1,59,5772,1,218,114,4,2,59,111,5781,5783,1,8607,99,105,114,59,1,10569,114,4,2,99,101,5796,5800,121,59,1,1038,118,101,59,1,364,4,2,105,121,5811,5820,114,99,5,219,1,59,5818,1,219,59,1,1059,98,108,97,99,59,1,368,114,59,3,55349,56600,114,97,118,101,5,217,1,59,5844,1,217,97,99,114,59,1,362,4,2,100,105,5858,5905,101,114,4,2,66,80,5866,5892,4,2,97,114,5872,5876,114,59,1,95,97,99,4,2,101,107,5884,5887,59,1,9183,101,116,59,1,9141,97,114,101,110,116,104,101,115,105,115,59,1,9181,111,110,4,2,59,80,5913,5915,1,8899,108,117,115,59,1,8846,4,2,103,112,5927,5932,111,110,59,1,370,102,59,3,55349,56652,4,8,65,68,69,84,97,100,112,115,5955,5985,5996,6009,6026,6033,6044,6075,114,114,111,119,4,3,59,66,68,5967,5969,5974,1,8593,97,114,59,1,10514,111,119,110,65,114,114,111,119,59,1,8645,111,119,110,65,114,114,111,119,59,1,8597,113,117,105,108,105,98,114,105,117,109,59,1,10606,101,101,4,2,59,65,6017,6019,1,8869,114,114,111,119,59,1,8613,114,114,111,119,59,1,8657,111,119,110,97,114,114,111,119,59,1,8661,101,114,4,2,76,82,6052,6063,101,102,116,65,114,114,111,119,59,1,8598,105,103,104,116,65,114,114,111,119,59,1,8599,105,4,2,59,108,6082,6084,1,978,111,110,59,1,933,105,110,103,59,1,366,99,114,59,3,55349,56496,105,108,100,101,59,1,360,109,108,5,220,1,59,6115,1,220,4,9,68,98,99,100,101,102,111,115,118,6137,6143,6148,6152,6166,6250,6255,6261,6267,97,115,104,59,1,8875,97,114,59,1,10987,121,59,1,1042,97,115,104,4,2,59,108,6161,6163,1,8873,59,1,10982,4,2,101,114,6172,6175,59,1,8897,4,3,98,116,121,6183,6188,6238,97,114,59,1,8214,4,2,59,105,6194,6196,1,8214,99,97,108,4,4,66,76,83,84,6209,6214,6220,6231,97,114,59,1,8739,105,110,101,59,1,124,101,112,97,114,97,116,111,114,59,1,10072,105,108,100,101,59,1,8768,84,104,105,110,83,112,97,99,101,59,1,8202,114,59,3,55349,56601,112,102,59,3,55349,56653,99,114,59,3,55349,56497,100,97,115,104,59,1,8874,4,5,99,101,102,111,115,6286,6292,6298,6303,6309,105,114,99,59,1,372,100,103,101,59,1,8896,114,59,3,55349,56602,112,102,59,3,55349,56654,99,114,59,3,55349,56498,4,4,102,105,111,115,6325,6330,6333,6339,114,59,3,55349,56603,59,1,926,112,102,59,3,55349,56655,99,114,59,3,55349,56499,4,9,65,73,85,97,99,102,111,115,117,6365,6370,6375,6380,6391,6405,6410,6416,6422,99,121,59,1,1071,99,121,59,1,1031,99,121,59,1,1070,99,117,116,101,5,221,1,59,6389,1,221,4,2,105,121,6397,6402,114,99,59,1,374,59,1,1067,114,59,3,55349,56604,112,102,59,3,55349,56656,99,114,59,3,55349,56500,109,108,59,1,376,4,8,72,97,99,100,101,102,111,115,6445,6450,6457,6472,6477,6501,6505,6510,99,121,59,1,1046,99,117,116,101,59,1,377,4,2,97,121,6463,6469,114,111,110,59,1,381,59,1,1047,111,116,59,1,379,4,2,114,116,6483,6497,111,87,105,100,116,104,83,112,97,99,101,59,1,8203,97,59,1,918,114,59,1,8488,112,102,59,1,8484,99,114,59,3,55349,56501,4,16,97,98,99,101,102,103,108,109,110,111,112,114,115,116,117,119,6550,6561,6568,6612,6622,6634,6645,6672,6699,6854,6870,6923,6933,6963,6974,6983,99,117,116,101,5,225,1,59,6559,1,225,114,101,118,101,59,1,259,4,6,59,69,100,105,117,121,6582,6584,6588,6591,6600,6609,1,8766,59,3,8766,819,59,1,8767,114,99,5,226,1,59,6598,1,226,116,101,5,180,1,59,6607,1,180,59,1,1072,108,105,103,5,230,1,59,6620,1,230,4,2,59,114,6628,6630,1,8289,59,3,55349,56606,114,97,118,101,5,224,1,59,6643,1,224,4,2,101,112,6651,6667,4,2,102,112,6657,6663,115,121,109,59,1,8501,104,59,1,8501,104,97,59,1,945,4,2,97,112,6678,6692,4,2,99,108,6684,6688,114,59,1,257,103,59,1,10815,5,38,1,59,6697,1,38,4,2,100,103,6705,6737,4,5,59,97,100,115,118,6717,6719,6724,6727,6734,1,8743,110,100,59,1,10837,59,1,10844,108,111,112,101,59,1,10840,59,1,10842,4,7,59,101,108,109,114,115,122,6753,6755,6758,6762,6814,6835,6848,1,8736,59,1,10660,101,59,1,8736,115,100,4,2,59,97,6770,6772,1,8737,4,8,97,98,99,100,101,102,103,104,6790,6793,6796,6799,6802,6805,6808,6811,59,1,10664,59,1,10665,59,1,10666,59,1,10667,59,1,10668,59,1,10669,59,1,10670,59,1,10671,116,4,2,59,118,6821,6823,1,8735,98,4,2,59,100,6830,6832,1,8894,59,1,10653,4,2,112,116,6841,6845,104,59,1,8738,59,1,197,97,114,114,59,1,9084,4,2,103,112,6860,6865,111,110,59,1,261,102,59,3,55349,56658,4,7,59,69,97,101,105,111,112,6886,6888,6891,6897,6900,6904,6908,1,8776,59,1,10864,99,105,114,59,1,10863,59,1,8778,100,59,1,8779,115,59,1,39,114,111,120,4,2,59,101,6917,6919,1,8776,113,59,1,8778,105,110,103,5,229,1,59,6931,1,229,4,3,99,116,121,6941,6946,6949,114,59,3,55349,56502,59,1,42,109,112,4,2,59,101,6957,6959,1,8776,113,59,1,8781,105,108,100,101,5,227,1,59,6972,1,227,109,108,5,228,1,59,6981,1,228,4,2,99,105,6989,6997,111,110,105,110,116,59,1,8755,110,116,59,1,10769,4,16,78,97,98,99,100,101,102,105,107,108,110,111,112,114,115,117,7036,7041,7119,7135,7149,7155,7219,7224,7347,7354,7463,7489,7786,7793,7814,7866,111,116,59,1,10989,4,2,99,114,7047,7094,107,4,4,99,101,112,115,7058,7064,7073,7080,111,110,103,59,1,8780,112,115,105,108,111,110,59,1,1014,114,105,109,101,59,1,8245,105,109,4,2,59,101,7088,7090,1,8765,113,59,1,8909,4,2,118,119,7100,7105,101,101,59,1,8893,101,100,4,2,59,103,7113,7115,1,8965,101,59,1,8965,114,107,4,2,59,116,7127,7129,1,9141,98,114,107,59,1,9142,4,2,111,121,7141,7146,110,103,59,1,8780,59,1,1073,113,117,111,59,1,8222,4,5,99,109,112,114,116,7167,7181,7188,7193,7199,97,117,115,4,2,59,101,7176,7178,1,8757,59,1,8757,112,116,121,118,59,1,10672,115,105,59,1,1014,110,111,117,59,1,8492,4,3,97,104,119,7207,7210,7213,59,1,946,59,1,8502,101,101,110,59,1,8812,114,59,3,55349,56607,103,4,7,99,111,115,116,117,118,119,7241,7262,7288,7305,7328,7335,7340,4,3,97,105,117,7249,7253,7258,112,59,1,8898,114,99,59,1,9711,112,59,1,8899,4,3,100,112,116,7270,7275,7281,111,116,59,1,10752,108,117,115,59,1,10753,105,109,101,115,59,1,10754,4,2,113,116,7294,7300,99,117,112,59,1,10758,97,114,59,1,9733,114,105,97,110,103,108,101,4,2,100,117,7318,7324,111,119,110,59,1,9661,112,59,1,9651,112,108,117,115,59,1,10756,101,101,59,1,8897,101,100,103,101,59,1,8896,97,114,111,119,59,1,10509,4,3,97,107,111,7362,7436,7458,4,2,99,110,7368,7432,107,4,3,108,115,116,7377,7386,7394,111,122,101,110,103,101,59,1,10731,113,117,97,114,101,59,1,9642,114,105,97,110,103,108,101,4,4,59,100,108,114,7411,7413,7419,7425,1,9652,111,119,110,59,1,9662,101,102,116,59,1,9666,105,103,104,116,59,1,9656,107,59,1,9251,4,2,49,51,7442,7454,4,2,50,52,7448,7451,59,1,9618,59,1,9617,52,59,1,9619,99,107,59,1,9608,4,2,101,111,7469,7485,4,2,59,113,7475,7478,3,61,8421,117,105,118,59,3,8801,8421,116,59,1,8976,4,4,112,116,119,120,7499,7504,7517,7523,102,59,3,55349,56659,4,2,59,116,7510,7512,1,8869,111,109,59,1,8869,116,105,101,59,1,8904,4,12,68,72,85,86,98,100,104,109,112,116,117,118,7549,7571,7597,7619,7655,7660,7682,7708,7715,7721,7728,7750,4,4,76,82,108,114,7559,7562,7565,7568,59,1,9559,59,1,9556,59,1,9558,59,1,9555,4,5,59,68,85,100,117,7583,7585,7588,7591,7594,1,9552,59,1,9574,59,1,9577,59,1,9572,59,1,9575,4,4,76,82,108,114,7607,7610,7613,7616,59,1,9565,59,1,9562,59,1,9564,59,1,9561,4,7,59,72,76,82,104,108,114,7635,7637,7640,7643,7646,7649,7652,1,9553,59,1,9580,59,1,9571,59,1,9568,59,1,9579,59,1,9570,59,1,9567,111,120,59,1,10697,4,4,76,82,108,114,7670,7673,7676,7679,59,1,9557,59,1,9554,59,1,9488,59,1,9484,4,5,59,68,85,100,117,7694,7696,7699,7702,7705,1,9472,59,1,9573,59,1,9576,59,1,9516,59,1,9524,105,110,117,115,59,1,8863,108,117,115,59,1,8862,105,109,101,115,59,1,8864,4,4,76,82,108,114,7738,7741,7744,7747,59,1,9563,59,1,9560,59,1,9496,59,1,9492,4,7,59,72,76,82,104,108,114,7766,7768,7771,7774,7777,7780,7783,1,9474,59,1,9578,59,1,9569,59,1,9566,59,1,9532,59,1,9508,59,1,9500,114,105,109,101,59,1,8245,4,2,101,118,7799,7804,118,101,59,1,728,98,97,114,5,166,1,59,7812,1,166,4,4,99,101,105,111,7824,7829,7834,7846,114,59,3,55349,56503,109,105,59,1,8271,109,4,2,59,101,7841,7843,1,8765,59,1,8909,108,4,3,59,98,104,7855,7857,7860,1,92,59,1,10693,115,117,98,59,1,10184,4,2,108,109,7872,7885,108,4,2,59,101,7879,7881,1,8226,116,59,1,8226,112,4,3,59,69,101,7894,7896,7899,1,8782,59,1,10926,4,2,59,113,7905,7907,1,8783,59,1,8783,4,15,97,99,100,101,102,104,105,108,111,114,115,116,117,119,121,7942,8021,8075,8080,8121,8126,8157,8279,8295,8430,8446,8485,8491,8707,8726,4,3,99,112,114,7950,7956,8007,117,116,101,59,1,263,4,6,59,97,98,99,100,115,7970,7972,7977,7984,7998,8003,1,8745,110,100,59,1,10820,114,99,117,112,59,1,10825,4,2,97,117,7990,7994,112,59,1,10827,112,59,1,10823,111,116,59,1,10816,59,3,8745,65024,4,2,101,111,8013,8017,116,59,1,8257,110,59,1,711,4,4,97,101,105,117,8031,8046,8056,8061,4,2,112,114,8037,8041,115,59,1,10829,111,110,59,1,269,100,105,108,5,231,1,59,8054,1,231,114,99,59,1,265,112,115,4,2,59,115,8069,8071,1,10828,109,59,1,10832,111,116,59,1,267,4,3,100,109,110,8088,8097,8104,105,108,5,184,1,59,8095,1,184,112,116,121,118,59,1,10674,116,5,162,2,59,101,8112,8114,1,162,114,100,111,116,59,1,183,114,59,3,55349,56608,4,3,99,101,105,8134,8138,8154,121,59,1,1095,99,107,4,2,59,109,8146,8148,1,10003,97,114,107,59,1,10003,59,1,967,114,4,7,59,69,99,101,102,109,115,8174,8176,8179,8258,8261,8268,8273,1,9675,59,1,10691,4,3,59,101,108,8187,8189,8193,1,710,113,59,1,8791,101,4,2,97,100,8200,8223,114,114,111,119,4,2,108,114,8210,8216,101,102,116,59,1,8634,105,103,104,116,59,1,8635,4,5,82,83,97,99,100,8235,8238,8241,8246,8252,59,1,174,59,1,9416,115,116,59,1,8859,105,114,99,59,1,8858,97,115,104,59,1,8861,59,1,8791,110,105,110,116,59,1,10768,105,100,59,1,10991,99,105,114,59,1,10690,117,98,115,4,2,59,117,8288,8290,1,9827,105,116,59,1,9827,4,4,108,109,110,112,8305,8326,8376,8400,111,110,4,2,59,101,8313,8315,1,58,4,2,59,113,8321,8323,1,8788,59,1,8788,4,2,109,112,8332,8344,97,4,2,59,116,8339,8341,1,44,59,1,64,4,3,59,102,108,8352,8354,8358,1,8705,110,59,1,8728,101,4,2,109,120,8365,8371,101,110,116,59,1,8705,101,115,59,1,8450,4,2,103,105,8382,8395,4,2,59,100,8388,8390,1,8773,111,116,59,1,10861,110,116,59,1,8750,4,3,102,114,121,8408,8412,8417,59,3,55349,56660,111,100,59,1,8720,5,169,2,59,115,8424,8426,1,169,114,59,1,8471,4,2,97,111,8436,8441,114,114,59,1,8629,115,115,59,1,10007,4,2,99,117,8452,8457,114,59,3,55349,56504,4,2,98,112,8463,8474,4,2,59,101,8469,8471,1,10959,59,1,10961,4,2,59,101,8480,8482,1,10960,59,1,10962,100,111,116,59,1,8943,4,7,100,101,108,112,114,118,119,8507,8522,8536,8550,8600,8697,8702,97,114,114,4,2,108,114,8516,8519,59,1,10552,59,1,10549,4,2,112,115,8528,8532,114,59,1,8926,99,59,1,8927,97,114,114,4,2,59,112,8545,8547,1,8630,59,1,10557,4,6,59,98,99,100,111,115,8564,8566,8573,8587,8592,8596,1,8746,114,99,97,112,59,1,10824,4,2,97,117,8579,8583,112,59,1,10822,112,59,1,10826,111,116,59,1,8845,114,59,1,10821,59,3,8746,65024,4,4,97,108,114,118,8610,8623,8663,8672,114,114,4,2,59,109,8618,8620,1,8631,59,1,10556,121,4,3,101,118,119,8632,8651,8656,113,4,2,112,115,8639,8645,114,101,99,59,1,8926,117,99,99,59,1,8927,101,101,59,1,8910,101,100,103,101,59,1,8911,101,110,5,164,1,59,8670,1,164,101,97,114,114,111,119,4,2,108,114,8684,8690,101,102,116,59,1,8630,105,103,104,116,59,1,8631,101,101,59,1,8910,101,100,59,1,8911,4,2,99,105,8713,8721,111,110,105,110,116,59,1,8754,110,116,59,1,8753,108,99,116,121,59,1,9005,4,19,65,72,97,98,99,100,101,102,104,105,106,108,111,114,115,116,117,119,122,8773,8778,8783,8821,8839,8854,8887,8914,8930,8944,9036,9041,9058,9197,9227,9258,9281,9297,9305,114,114,59,1,8659,97,114,59,1,10597,4,4,103,108,114,115,8793,8799,8805,8809,103,101,114,59,1,8224,101,116,104,59,1,8504,114,59,1,8595,104,4,2,59,118,8816,8818,1,8208,59,1,8867,4,2,107,108,8827,8834,97,114,111,119,59,1,10511,97,99,59,1,733,4,2,97,121,8845,8851,114,111,110,59,1,271,59,1,1076,4,3,59,97,111,8862,8864,8880,1,8518,4,2,103,114,8870,8876,103,101,114,59,1,8225,114,59,1,8650,116,115,101,113,59,1,10871,4,3,103,108,109,8895,8902,8907,5,176,1,59,8900,1,176,116,97,59,1,948,112,116,121,118,59,1,10673,4,2,105,114,8920,8926,115,104,116,59,1,10623,59,3,55349,56609,97,114,4,2,108,114,8938,8941,59,1,8643,59,1,8642,4,5,97,101,103,115,118,8956,8986,8989,8996,9001,109,4,3,59,111,115,8965,8967,8983,1,8900,110,100,4,2,59,115,8975,8977,1,8900,117,105,116,59,1,9830,59,1,9830,59,1,168,97,109,109,97,59,1,989,105,110,59,1,8946,4,3,59,105,111,9009,9011,9031,1,247,100,101,5,247,2,59,111,9020,9022,1,247,110,116,105,109,101,115,59,1,8903,110,120,59,1,8903,99,121,59,1,1106,99,4,2,111,114,9048,9053,114,110,59,1,8990,111,112,59,1,8973,4,5,108,112,116,117,119,9070,9076,9081,9130,9144,108,97,114,59,1,36,102,59,3,55349,56661,4,5,59,101,109,112,115,9093,9095,9109,9116,9122,1,729,113,4,2,59,100,9102,9104,1,8784,111,116,59,1,8785,105,110,117,115,59,1,8760,108,117,115,59,1,8724,113,117,97,114,101,59,1,8865,98,108,101,98,97,114,119,101,100,103,101,59,1,8966,110,4,3,97,100,104,9153,9160,9172,114,114,111,119,59,1,8595,111,119,110,97,114,114,111,119,115,59,1,8650,97,114,112,111,111,110,4,2,108,114,9184,9190,101,102,116,59,1,8643,105,103,104,116,59,1,8642,4,2,98,99,9203,9211,107,97,114,111,119,59,1,10512,4,2,111,114,9217,9222,114,110,59,1,8991,111,112,59,1,8972,4,3,99,111,116,9235,9248,9252,4,2,114,121,9241,9245,59,3,55349,56505,59,1,1109,108,59,1,10742,114,111,107,59,1,273,4,2,100,114,9264,9269,111,116,59,1,8945,105,4,2,59,102,9276,9278,1,9663,59,1,9662,4,2,97,104,9287,9292,114,114,59,1,8693,97,114,59,1,10607,97,110,103,108,101,59,1,10662,4,2,99,105,9311,9315,121,59,1,1119,103,114,97,114,114,59,1,10239,4,18,68,97,99,100,101,102,103,108,109,110,111,112,113,114,115,116,117,120,9361,9376,9398,9439,9444,9447,9462,9495,9531,9585,9598,9614,9659,9755,9771,9792,9808,9826,4,2,68,111,9367,9372,111,116,59,1,10871,116,59,1,8785,4,2,99,115,9382,9392,117,116,101,5,233,1,59,9390,1,233,116,101,114,59,1,10862,4,4,97,105,111,121,9408,9414,9430,9436,114,111,110,59,1,283,114,4,2,59,99,9421,9423,1,8790,5,234,1,59,9428,1,234,108,111,110,59,1,8789,59,1,1101,111,116,59,1,279,59,1,8519,4,2,68,114,9453,9458,111,116,59,1,8786,59,3,55349,56610,4,3,59,114,115,9470,9472,9482,1,10906,97,118,101,5,232,1,59,9480,1,232,4,2,59,100,9488,9490,1,10902,111,116,59,1,10904,4,4,59,105,108,115,9505,9507,9515,9518,1,10905,110,116,101,114,115,59,1,9191,59,1,8467,4,2,59,100,9524,9526,1,10901,111,116,59,1,10903,4,3,97,112,115,9539,9544,9564,99,114,59,1,275,116,121,4,3,59,115,118,9554,9556,9561,1,8709,101,116,59,1,8709,59,1,8709,112,4,2,49,59,9571,9583,4,2,51,52,9577,9580,59,1,8196,59,1,8197,1,8195,4,2,103,115,9591,9594,59,1,331,112,59,1,8194,4,2,103,112,9604,9609,111,110,59,1,281,102,59,3,55349,56662,4,3,97,108,115,9622,9635,9640,114,4,2,59,115,9629,9631,1,8917,108,59,1,10723,117,115,59,1,10865,105,4,3,59,108,118,9649,9651,9656,1,949,111,110,59,1,949,59,1,1013,4,4,99,115,117,118,9669,9686,9716,9747,4,2,105,111,9675,9680,114,99,59,1,8790,108,111,110,59,1,8789,4,2,105,108,9692,9696,109,59,1,8770,97,110,116,4,2,103,108,9705,9710,116,114,59,1,10902,101,115,115,59,1,10901,4,3,97,101,105,9724,9729,9734,108,115,59,1,61,115,116,59,1,8799,118,4,2,59,68,9741,9743,1,8801,68,59,1,10872,112,97,114,115,108,59,1,10725,4,2,68,97,9761,9766,111,116,59,1,8787,114,114,59,1,10609,4,3,99,100,105,9779,9783,9788,114,59,1,8495,111,116,59,1,8784,109,59,1,8770,4,2,97,104,9798,9801,59,1,951,5,240,1,59,9806,1,240,4,2,109,114,9814,9822,108,5,235,1,59,9820,1,235,111,59,1,8364,4,3,99,105,112,9834,9838,9843,108,59,1,33,115,116,59,1,8707,4,2,101,111,9849,9859,99,116,97,116,105,111,110,59,1,8496,110,101,110,116,105,97,108,101,59,1,8519,4,12,97,99,101,102,105,106,108,110,111,112,114,115,9896,9910,9914,9921,9954,9960,9967,9989,9994,10027,10036,10164,108,108,105,110,103,100,111,116,115,101,113,59,1,8786,121,59,1,1092,109,97,108,101,59,1,9792,4,3,105,108,114,9929,9935,9950,108,105,103,59,1,64259,4,2,105,108,9941,9945,103,59,1,64256,105,103,59,1,64260,59,3,55349,56611,108,105,103,59,1,64257,108,105,103,59,3,102,106,4,3,97,108,116,9975,9979,9984,116,59,1,9837,105,103,59,1,64258,110,115,59,1,9649,111,102,59,1,402,4,2,112,114,10000,10005,102,59,3,55349,56663,4,2,97,107,10011,10016,108,108,59,1,8704,4,2,59,118,10022,10024,1,8916,59,1,10969,97,114,116,105,110,116,59,1,10765,4,2,97,111,10042,10159,4,2,99,115,10048,10155,4,6,49,50,51,52,53,55,10062,10102,10114,10135,10139,10151,4,6,50,51,52,53,54,56,10076,10083,10086,10093,10096,10099,5,189,1,59,10081,1,189,59,1,8531,5,188,1,59,10091,1,188,59,1,8533,59,1,8537,59,1,8539,4,2,51,53,10108,10111,59,1,8532,59,1,8534,4,3,52,53,56,10122,10129,10132,5,190,1,59,10127,1,190,59,1,8535,59,1,8540,53,59,1,8536,4,2,54,56,10145,10148,59,1,8538,59,1,8541,56,59,1,8542,108,59,1,8260,119,110,59,1,8994,99,114,59,3,55349,56507,4,17,69,97,98,99,100,101,102,103,105,106,108,110,111,114,115,116,118,10206,10217,10247,10254,10268,10273,10358,10363,10374,10380,10385,10406,10458,10464,10470,10497,10610,4,2,59,108,10212,10214,1,8807,59,1,10892,4,3,99,109,112,10225,10231,10244,117,116,101,59,1,501,109,97,4,2,59,100,10239,10241,1,947,59,1,989,59,1,10886,114,101,118,101,59,1,287,4,2,105,121,10260,10265,114,99,59,1,285,59,1,1075,111,116,59,1,289,4,4,59,108,113,115,10283,10285,10288,10308,1,8805,59,1,8923,4,3,59,113,115,10296,10298,10301,1,8805,59,1,8807,108,97,110,116,59,1,10878,4,4,59,99,100,108,10318,10320,10324,10345,1,10878,99,59,1,10921,111,116,4,2,59,111,10332,10334,1,10880,4,2,59,108,10340,10342,1,10882,59,1,10884,4,2,59,101,10351,10354,3,8923,65024,115,59,1,10900,114,59,3,55349,56612,4,2,59,103,10369,10371,1,8811,59,1,8921,109,101,108,59,1,8503,99,121,59,1,1107,4,4,59,69,97,106,10395,10397,10400,10403,1,8823,59,1,10898,59,1,10917,59,1,10916,4,4,69,97,101,115,10416,10419,10434,10453,59,1,8809,112,4,2,59,112,10426,10428,1,10890,114,111,120,59,1,10890,4,2,59,113,10440,10442,1,10888,4,2,59,113,10448,10450,1,10888,59,1,8809,105,109,59,1,8935,112,102,59,3,55349,56664,97,118,101,59,1,96,4,2,99,105,10476,10480,114,59,1,8458,109,4,3,59,101,108,10489,10491,10494,1,8819,59,1,10894,59,1,10896,5,62,6,59,99,100,108,113,114,10512,10514,10527,10532,10538,10545,1,62,4,2,99,105,10520,10523,59,1,10919,114,59,1,10874,111,116,59,1,8919,80,97,114,59,1,10645,117,101,115,116,59,1,10876,4,5,97,100,101,108,115,10557,10574,10579,10599,10605,4,2,112,114,10563,10570,112,114,111,120,59,1,10886,114,59,1,10616,111,116,59,1,8919,113,4,2,108,113,10586,10592,101,115,115,59,1,8923,108,101,115,115,59,1,10892,101,115,115,59,1,8823,105,109,59,1,8819,4,2,101,110,10616,10626,114,116,110,101,113,113,59,3,8809,65024,69,59,3,8809,65024,4,10,65,97,98,99,101,102,107,111,115,121,10653,10658,10713,10718,10724,10760,10765,10786,10850,10875,114,114,59,1,8660,4,4,105,108,109,114,10668,10674,10678,10684,114,115,112,59,1,8202,102,59,1,189,105,108,116,59,1,8459,4,2,100,114,10690,10695,99,121,59,1,1098,4,3,59,99,119,10703,10705,10710,1,8596,105,114,59,1,10568,59,1,8621,97,114,59,1,8463,105,114,99,59,1,293,4,3,97,108,114,10732,10748,10754,114,116,115,4,2,59,117,10741,10743,1,9829,105,116,59,1,9829,108,105,112,59,1,8230,99,111,110,59,1,8889,114,59,3,55349,56613,115,4,2,101,119,10772,10779,97,114,111,119,59,1,10533,97,114,111,119,59,1,10534,4,5,97,109,111,112,114,10798,10803,10809,10839,10844,114,114,59,1,8703,116,104,116,59,1,8763,107,4,2,108,114,10816,10827,101,102,116,97,114,114,111,119,59,1,8617,105,103,104,116,97,114,114,111,119,59,1,8618,102,59,3,55349,56665,98,97,114,59,1,8213,4,3,99,108,116,10858,10863,10869,114,59,3,55349,56509,97,115,104,59,1,8463,114,111,107,59,1,295,4,2,98,112,10881,10887,117,108,108,59,1,8259,104,101,110,59,1,8208,4,15,97,99,101,102,103,105,106,109,110,111,112,113,115,116,117,10925,10936,10958,10977,10990,11001,11039,11045,11101,11192,11220,11226,11237,11285,11299,99,117,116,101,5,237,1,59,10934,1,237,4,3,59,105,121,10944,10946,10955,1,8291,114,99,5,238,1,59,10953,1,238,59,1,1080,4,2,99,120,10964,10968,121,59,1,1077,99,108,5,161,1,59,10975,1,161,4,2,102,114,10983,10986,59,1,8660,59,3,55349,56614,114,97,118,101,5,236,1,59,10999,1,236,4,4,59,105,110,111,11011,11013,11028,11034,1,8520,4,2,105,110,11019,11024,110,116,59,1,10764,116,59,1,8749,102,105,110,59,1,10716,116,97,59,1,8489,108,105,103,59,1,307,4,3,97,111,112,11053,11092,11096,4,3,99,103,116,11061,11065,11088,114,59,1,299,4,3,101,108,112,11073,11076,11082,59,1,8465,105,110,101,59,1,8464,97,114,116,59,1,8465,104,59,1,305,102,59,1,8887,101,100,59,1,437,4,5,59,99,102,111,116,11113,11115,11121,11136,11142,1,8712,97,114,101,59,1,8453,105,110,4,2,59,116,11129,11131,1,8734,105,101,59,1,10717,100,111,116,59,1,305,4,5,59,99,101,108,112,11154,11156,11161,11179,11186,1,8747,97,108,59,1,8890,4,2,103,114,11167,11173,101,114,115,59,1,8484,99,97,108,59,1,8890,97,114,104,107,59,1,10775,114,111,100,59,1,10812,4,4,99,103,112,116,11202,11206,11211,11216,121,59,1,1105,111,110,59,1,303,102,59,3,55349,56666,97,59,1,953,114,111,100,59,1,10812,117,101,115,116,5,191,1,59,11235,1,191,4,2,99,105,11243,11248,114,59,3,55349,56510,110,4,5,59,69,100,115,118,11261,11263,11266,11271,11282,1,8712,59,1,8953,111,116,59,1,8949,4,2,59,118,11277,11279,1,8948,59,1,8947,59,1,8712,4,2,59,105,11291,11293,1,8290,108,100,101,59,1,297,4,2,107,109,11305,11310,99,121,59,1,1110,108,5,239,1,59,11316,1,239,4,6,99,102,109,111,115,117,11332,11346,11351,11357,11363,11380,4,2,105,121,11338,11343,114,99,59,1,309,59,1,1081,114,59,3,55349,56615,97,116,104,59,1,567,112,102,59,3,55349,56667,4,2,99,101,11369,11374,114,59,3,55349,56511,114,99,121,59,1,1112,107,99,121,59,1,1108,4,8,97,99,102,103,104,106,111,115,11404,11418,11433,11438,11445,11450,11455,11461,112,112,97,4,2,59,118,11413,11415,1,954,59,1,1008,4,2,101,121,11424,11430,100,105,108,59,1,311,59,1,1082,114,59,3,55349,56616,114,101,101,110,59,1,312,99,121,59,1,1093,99,121,59,1,1116,112,102,59,3,55349,56668,99,114,59,3,55349,56512,4,23,65,66,69,72,97,98,99,100,101,102,103,104,106,108,109,110,111,112,114,115,116,117,118,11515,11538,11544,11555,11560,11721,11780,11818,11868,12136,12160,12171,12203,12208,12246,12275,12327,12509,12523,12569,12641,12732,12752,4,3,97,114,116,11523,11528,11532,114,114,59,1,8666,114,59,1,8656,97,105,108,59,1,10523,97,114,114,59,1,10510,4,2,59,103,11550,11552,1,8806,59,1,10891,97,114,59,1,10594,4,9,99,101,103,109,110,112,113,114,116,11580,11586,11594,11600,11606,11624,11627,11636,11694,117,116,101,59,1,314,109,112,116,121,118,59,1,10676,114,97,110,59,1,8466,98,100,97,59,1,955,103,4,3,59,100,108,11615,11617,11620,1,10216,59,1,10641,101,59,1,10216,59,1,10885,117,111,5,171,1,59,11634,1,171,114,4,8,59,98,102,104,108,112,115,116,11655,11657,11669,11673,11677,11681,11685,11690,1,8592,4,2,59,102,11663,11665,1,8676,115,59,1,10527,115,59,1,10525,107,59,1,8617,112,59,1,8619,108,59,1,10553,105,109,59,1,10611,108,59,1,8610,4,3,59,97,101,11702,11704,11709,1,10923,105,108,59,1,10521,4,2,59,115,11715,11717,1,10925,59,3,10925,65024,4,3,97,98,114,11729,11734,11739,114,114,59,1,10508,114,107,59,1,10098,4,2,97,107,11745,11758,99,4,2,101,107,11752,11755,59,1,123,59,1,91,4,2,101,115,11764,11767,59,1,10635,108,4,2,100,117,11774,11777,59,1,10639,59,1,10637,4,4,97,101,117,121,11790,11796,11811,11815,114,111,110,59,1,318,4,2,100,105,11802,11807,105,108,59,1,316,108,59,1,8968,98,59,1,123,59,1,1083,4,4,99,113,114,115,11828,11832,11845,11864,97,59,1,10550,117,111,4,2,59,114,11840,11842,1,8220,59,1,8222,4,2,100,117,11851,11857,104,97,114,59,1,10599,115,104,97,114,59,1,10571,104,59,1,8626,4,5,59,102,103,113,115,11880,11882,12008,12011,12031,1,8804,116,4,5,97,104,108,114,116,11895,11913,11935,11947,11996,114,114,111,119,4,2,59,116,11905,11907,1,8592,97,105,108,59,1,8610,97,114,112,111,111,110,4,2,100,117,11925,11931,111,119,110,59,1,8637,112,59,1,8636,101,102,116,97,114,114,111,119,115,59,1,8647,105,103,104,116,4,3,97,104,115,11959,11974,11984,114,114,111,119,4,2,59,115,11969,11971,1,8596,59,1,8646,97,114,112,111,111,110,115,59,1,8651,113,117,105,103,97,114,114,111,119,59,1,8621,104,114,101,101,116,105,109,101,115,59,1,8907,59,1,8922,4,3,59,113,115,12019,12021,12024,1,8804,59,1,8806,108,97,110,116,59,1,10877,4,5,59,99,100,103,115,12043,12045,12049,12070,12083,1,10877,99,59,1,10920,111,116,4,2,59,111,12057,12059,1,10879,4,2,59,114,12065,12067,1,10881,59,1,10883,4,2,59,101,12076,12079,3,8922,65024,115,59,1,10899,4,5,97,100,101,103,115,12095,12103,12108,12126,12131,112,112,114,111,120,59,1,10885,111,116,59,1,8918,113,4,2,103,113,12115,12120,116,114,59,1,8922,103,116,114,59,1,10891,116,114,59,1,8822,105,109,59,1,8818,4,3,105,108,114,12144,12150,12156,115,104,116,59,1,10620,111,111,114,59,1,8970,59,3,55349,56617,4,2,59,69,12166,12168,1,8822,59,1,10897,4,2,97,98,12177,12198,114,4,2,100,117,12184,12187,59,1,8637,4,2,59,108,12193,12195,1,8636,59,1,10602,108,107,59,1,9604,99,121,59,1,1113,4,5,59,97,99,104,116,12220,12222,12227,12235,12241,1,8810,114,114,59,1,8647,111,114,110,101,114,59,1,8990,97,114,100,59,1,10603,114,105,59,1,9722,4,2,105,111,12252,12258,100,111,116,59,1,320,117,115,116,4,2,59,97,12267,12269,1,9136,99,104,101,59,1,9136,4,4,69,97,101,115,12285,12288,12303,12322,59,1,8808,112,4,2,59,112,12295,12297,1,10889,114,111,120,59,1,10889,4,2,59,113,12309,12311,1,10887,4,2,59,113,12317,12319,1,10887,59,1,8808,105,109,59,1,8934,4,8,97,98,110,111,112,116,119,122,12345,12359,12364,12421,12446,12467,12474,12490,4,2,110,114,12351,12355,103,59,1,10220,114,59,1,8701,114,107,59,1,10214,103,4,3,108,109,114,12373,12401,12409,101,102,116,4,2,97,114,12382,12389,114,114,111,119,59,1,10229,105,103,104,116,97,114,114,111,119,59,1,10231,97,112,115,116,111,59,1,10236,105,103,104,116,97,114,114,111,119,59,1,10230,112,97,114,114,111,119,4,2,108,114,12433,12439,101,102,116,59,1,8619,105,103,104,116,59,1,8620,4,3,97,102,108,12454,12458,12462,114,59,1,10629,59,3,55349,56669,117,115,59,1,10797,105,109,101,115,59,1,10804,4,2,97,98,12480,12485,115,116,59,1,8727,97,114,59,1,95,4,3,59,101,102,12498,12500,12506,1,9674,110,103,101,59,1,9674,59,1,10731,97,114,4,2,59,108,12517,12519,1,40,116,59,1,10643,4,5,97,99,104,109,116,12535,12540,12548,12561,12564,114,114,59,1,8646,111,114,110,101,114,59,1,8991,97,114,4,2,59,100,12556,12558,1,8651,59,1,10605,59,1,8206,114,105,59,1,8895,4,6,97,99,104,105,113,116,12583,12589,12594,12597,12614,12635,113,117,111,59,1,8249,114,59,3,55349,56513,59,1,8624,109,4,3,59,101,103,12606,12608,12611,1,8818,59,1,10893,59,1,10895,4,2,98,117,12620,12623,59,1,91,111,4,2,59,114,12630,12632,1,8216,59,1,8218,114,111,107,59,1,322,5,60,8,59,99,100,104,105,108,113,114,12660,12662,12675,12680,12686,12692,12698,12705,1,60,4,2,99,105,12668,12671,59,1,10918,114,59,1,10873,111,116,59,1,8918,114,101,101,59,1,8907,109,101,115,59,1,8905,97,114,114,59,1,10614,117,101,115,116,59,1,10875,4,2,80,105,12711,12716,97,114,59,1,10646,4,3,59,101,102,12724,12726,12729,1,9667,59,1,8884,59,1,9666,114,4,2,100,117,12739,12746,115,104,97,114,59,1,10570,104,97,114,59,1,10598,4,2,101,110,12758,12768,114,116,110,101,113,113,59,3,8808,65024,69,59,3,8808,65024,4,14,68,97,99,100,101,102,104,105,108,110,111,112,115,117,12803,12809,12893,12908,12914,12928,12933,12937,13011,13025,13032,13049,13052,13069,68,111,116,59,1,8762,4,4,99,108,112,114,12819,12827,12849,12887,114,5,175,1,59,12825,1,175,4,2,101,116,12833,12836,59,1,9794,4,2,59,101,12842,12844,1,10016,115,101,59,1,10016,4,2,59,115,12855,12857,1,8614,116,111,4,4,59,100,108,117,12869,12871,12877,12883,1,8614,111,119,110,59,1,8615,101,102,116,59,1,8612,112,59,1,8613,107,101,114,59,1,9646,4,2,111,121,12899,12905,109,109,97,59,1,10793,59,1,1084,97,115,104,59,1,8212,97,115,117,114,101,100,97,110,103,108,101,59,1,8737,114,59,3,55349,56618,111,59,1,8487,4,3,99,100,110,12945,12954,12985,114,111,5,181,1,59,12952,1,181,4,4,59,97,99,100,12964,12966,12971,12976,1,8739,115,116,59,1,42,105,114,59,1,10992,111,116,5,183,1,59,12983,1,183,117,115,4,3,59,98,100,12995,12997,13000,1,8722,59,1,8863,4,2,59,117,13006,13008,1,8760,59,1,10794,4,2,99,100,13017,13021,112,59,1,10971,114,59,1,8230,112,108,117,115,59,1,8723,4,2,100,112,13038,13044,101,108,115,59,1,8871,102,59,3,55349,56670,59,1,8723,4,2,99,116,13058,13063,114,59,3,55349,56514,112,111,115,59,1,8766,4,3,59,108,109,13077,13079,13087,1,956,116,105,109,97,112,59,1,8888,97,112,59,1,8888,4,24,71,76,82,86,97,98,99,100,101,102,103,104,105,106,108,109,111,112,114,115,116,117,118,119,13142,13165,13217,13229,13247,13330,13359,13414,13420,13508,13513,13579,13602,13626,13631,13762,13767,13855,13936,13995,14214,14285,14312,14432,4,2,103,116,13148,13152,59,3,8921,824,4,2,59,118,13158,13161,3,8811,8402,59,3,8811,824,4,3,101,108,116,13173,13200,13204,102,116,4,2,97,114,13181,13188,114,114,111,119,59,1,8653,105,103,104,116,97,114,114,111,119,59,1,8654,59,3,8920,824,4,2,59,118,13210,13213,3,8810,8402,59,3,8810,824,105,103,104,116,97,114,114,111,119,59,1,8655,4,2,68,100,13235,13241,97,115,104,59,1,8879,97,115,104,59,1,8878,4,5,98,99,110,112,116,13259,13264,13270,13275,13308,108,97,59,1,8711,117,116,101,59,1,324,103,59,3,8736,8402,4,5,59,69,105,111,112,13287,13289,13293,13298,13302,1,8777,59,3,10864,824,100,59,3,8779,824,115,59,1,329,114,111,120,59,1,8777,117,114,4,2,59,97,13316,13318,1,9838,108,4,2,59,115,13325,13327,1,9838,59,1,8469,4,2,115,117,13336,13344,112,5,160,1,59,13342,1,160,109,112,4,2,59,101,13352,13355,3,8782,824,59,3,8783,824,4,5,97,101,111,117,121,13371,13385,13391,13407,13411,4,2,112,114,13377,13380,59,1,10819,111,110,59,1,328,100,105,108,59,1,326,110,103,4,2,59,100,13399,13401,1,8775,111,116,59,3,10861,824,112,59,1,10818,59,1,1085,97,115,104,59,1,8211,4,7,59,65,97,100,113,115,120,13436,13438,13443,13466,13472,13478,13494,1,8800,114,114,59,1,8663,114,4,2,104,114,13450,13454,107,59,1,10532,4,2,59,111,13460,13462,1,8599,119,59,1,8599,111,116,59,3,8784,824,117,105,118,59,1,8802,4,2,101,105,13484,13489,97,114,59,1,10536,109,59,3,8770,824,105,115,116,4,2,59,115,13503,13505,1,8708,59,1,8708,114,59,3,55349,56619,4,4,69,101,115,116,13523,13527,13563,13568,59,3,8807,824,4,3,59,113,115,13535,13537,13559,1,8817,4,3,59,113,115,13545,13547,13551,1,8817,59,3,8807,824,108,97,110,116,59,3,10878,824,59,3,10878,824,105,109,59,1,8821,4,2,59,114,13574,13576,1,8815,59,1,8815,4,3,65,97,112,13587,13592,13597,114,114,59,1,8654,114,114,59,1,8622,97,114,59,1,10994,4,3,59,115,118,13610,13612,13623,1,8715,4,2,59,100,13618,13620,1,8956,59,1,8954,59,1,8715,99,121,59,1,1114,4,7,65,69,97,100,101,115,116,13647,13652,13656,13661,13665,13737,13742,114,114,59,1,8653,59,3,8806,824,114,114,59,1,8602,114,59,1,8229,4,4,59,102,113,115,13675,13677,13703,13725,1,8816,116,4,2,97,114,13684,13691,114,114,111,119,59,1,8602,105,103,104,116,97,114,114,111,119,59,1,8622,4,3,59,113,115,13711,13713,13717,1,8816,59,3,8806,824,108,97,110,116,59,3,10877,824,4,2,59,115,13731,13734,3,10877,824,59,1,8814,105,109,59,1,8820,4,2,59,114,13748,13750,1,8814,105,4,2,59,101,13757,13759,1,8938,59,1,8940,105,100,59,1,8740,4,2,112,116,13773,13778,102,59,3,55349,56671,5,172,3,59,105,110,13787,13789,13829,1,172,110,4,4,59,69,100,118,13800,13802,13806,13812,1,8713,59,3,8953,824,111,116,59,3,8949,824,4,3,97,98,99,13820,13823,13826,59,1,8713,59,1,8951,59,1,8950,105,4,2,59,118,13836,13838,1,8716,4,3,97,98,99,13846,13849,13852,59,1,8716,59,1,8958,59,1,8957,4,3,97,111,114,13863,13892,13899,114,4,4,59,97,115,116,13874,13876,13883,13888,1,8742,108,108,101,108,59,1,8742,108,59,3,11005,8421,59,3,8706,824,108,105,110,116,59,1,10772,4,3,59,99,101,13907,13909,13914,1,8832,117,101,59,1,8928,4,2,59,99,13920,13923,3,10927,824,4,2,59,101,13929,13931,1,8832,113,59,3,10927,824,4,4,65,97,105,116,13946,13951,13971,13982,114,114,59,1,8655,114,114,4,3,59,99,119,13961,13963,13967,1,8603,59,3,10547,824,59,3,8605,824,103,104,116,97,114,114,111,119,59,1,8603,114,105,4,2,59,101,13990,13992,1,8939,59,1,8941,4,7,99,104,105,109,112,113,117,14011,14036,14060,14080,14085,14090,14106,4,4,59,99,101,114,14021,14023,14028,14032,1,8833,117,101,59,1,8929,59,3,10928,824,59,3,55349,56515,111,114,116,4,2,109,112,14045,14050,105,100,59,1,8740,97,114,97,108,108,101,108,59,1,8742,109,4,2,59,101,14067,14069,1,8769,4,2,59,113,14075,14077,1,8772,59,1,8772,105,100,59,1,8740,97,114,59,1,8742,115,117,4,2,98,112,14098,14102,101,59,1,8930,101,59,1,8931,4,3,98,99,112,14114,14157,14171,4,4,59,69,101,115,14124,14126,14130,14133,1,8836,59,3,10949,824,59,1,8840,101,116,4,2,59,101,14141,14144,3,8834,8402,113,4,2,59,113,14151,14153,1,8840,59,3,10949,824,99,4,2,59,101,14164,14166,1,8833,113,59,3,10928,824,4,4,59,69,101,115,14181,14183,14187,14190,1,8837,59,3,10950,824,59,1,8841,101,116,4,2,59,101,14198,14201,3,8835,8402,113,4,2,59,113,14208,14210,1,8841,59,3,10950,824,4,4,103,105,108,114,14224,14228,14238,14242,108,59,1,8825,108,100,101,5,241,1,59,14236,1,241,103,59,1,8824,105,97,110,103,108,101,4,2,108,114,14254,14269,101,102,116,4,2,59,101,14263,14265,1,8938,113,59,1,8940,105,103,104,116,4,2,59,101,14279,14281,1,8939,113,59,1,8941,4,2,59,109,14291,14293,1,957,4,3,59,101,115,14301,14303,14308,1,35,114,111,59,1,8470,112,59,1,8199,4,9,68,72,97,100,103,105,108,114,115,14332,14338,14344,14349,14355,14369,14376,14408,14426,97,115,104,59,1,8877,97,114,114,59,1,10500,112,59,3,8781,8402,97,115,104,59,1,8876,4,2,101,116,14361,14365,59,3,8805,8402,59,3,62,8402,110,102,105,110,59,1,10718,4,3,65,101,116,14384,14389,14393,114,114,59,1,10498,59,3,8804,8402,4,2,59,114,14399,14402,3,60,8402,105,101,59,3,8884,8402,4,2,65,116,14414,14419,114,114,59,1,10499,114,105,101,59,3,8885,8402,105,109,59,3,8764,8402,4,3,65,97,110,14440,14445,14468,114,114,59,1,8662,114,4,2,104,114,14452,14456,107,59,1,10531,4,2,59,111,14462,14464,1,8598,119,59,1,8598,101,97,114,59,1,10535,4,18,83,97,99,100,101,102,103,104,105,108,109,111,112,114,115,116,117,118,14512,14515,14535,14560,14597,14603,14618,14643,14657,14662,14701,14741,14747,14769,14851,14877,14907,14916,59,1,9416,4,2,99,115,14521,14531,117,116,101,5,243,1,59,14529,1,243,116,59,1,8859,4,2,105,121,14541,14557,114,4,2,59,99,14548,14550,1,8858,5,244,1,59,14555,1,244,59,1,1086,4,5,97,98,105,111,115,14572,14577,14583,14587,14591,115,104,59,1,8861,108,97,99,59,1,337,118,59,1,10808,116,59,1,8857,111,108,100,59,1,10684,108,105,103,59,1,339,4,2,99,114,14609,14614,105,114,59,1,10687,59,3,55349,56620,4,3,111,114,116,14626,14630,14640,110,59,1,731,97,118,101,5,242,1,59,14638,1,242,59,1,10689,4,2,98,109,14649,14654,97,114,59,1,10677,59,1,937,110,116,59,1,8750,4,4,97,99,105,116,14672,14677,14693,14698,114,114,59,1,8634,4,2,105,114,14683,14687,114,59,1,10686,111,115,115,59,1,10683,110,101,59,1,8254,59,1,10688,4,3,97,101,105,14709,14714,14719,99,114,59,1,333,103,97,59,1,969,4,3,99,100,110,14727,14733,14736,114,111,110,59,1,959,59,1,10678,117,115,59,1,8854,112,102,59,3,55349,56672,4,3,97,101,108,14755,14759,14764,114,59,1,10679,114,112,59,1,10681,117,115,59,1,8853,4,7,59,97,100,105,111,115,118,14785,14787,14792,14831,14837,14841,14848,1,8744,114,114,59,1,8635,4,4,59,101,102,109,14802,14804,14817,14824,1,10845,114,4,2,59,111,14811,14813,1,8500,102,59,1,8500,5,170,1,59,14822,1,170,5,186,1,59,14829,1,186,103,111,102,59,1,8886,114,59,1,10838,108,111,112,101,59,1,10839,59,1,10843,4,3,99,108,111,14859,14863,14873,114,59,1,8500,97,115,104,5,248,1,59,14871,1,248,108,59,1,8856,105,4,2,108,109,14884,14893,100,101,5,245,1,59,14891,1,245,101,115,4,2,59,97,14901,14903,1,8855,115,59,1,10806,109,108,5,246,1,59,14914,1,246,98,97,114,59,1,9021,4,12,97,99,101,102,104,105,108,109,111,114,115,117,14948,14992,14996,15033,15038,15068,15090,15189,15192,15222,15427,15441,114,4,4,59,97,115,116,14959,14961,14976,14989,1,8741,5,182,2,59,108,14968,14970,1,182,108,101,108,59,1,8741,4,2,105,108,14982,14986,109,59,1,10995,59,1,11005,59,1,8706,121,59,1,1087,114,4,5,99,105,109,112,116,15009,15014,15019,15024,15027,110,116,59,1,37,111,100,59,1,46,105,108,59,1,8240,59,1,8869,101,110,107,59,1,8241,114,59,3,55349,56621,4,3,105,109,111,15046,15057,15063,4,2,59,118,15052,15054,1,966,59,1,981,109,97,116,59,1,8499,110,101,59,1,9742,4,3,59,116,118,15076,15078,15087,1,960,99,104,102,111,114,107,59,1,8916,59,1,982,4,2,97,117,15096,15119,110,4,2,99,107,15103,15115,107,4,2,59,104,15110,15112,1,8463,59,1,8462,118,59,1,8463,115,4,9,59,97,98,99,100,101,109,115,116,15140,15142,15148,15151,15156,15168,15171,15179,15184,1,43,99,105,114,59,1,10787,59,1,8862,105,114,59,1,10786,4,2,111,117,15162,15165,59,1,8724,59,1,10789,59,1,10866,110,5,177,1,59,15177,1,177,105,109,59,1,10790,119,111,59,1,10791,59,1,177,4,3,105,112,117,15200,15208,15213,110,116,105,110,116,59,1,10773,102,59,3,55349,56673,110,100,5,163,1,59,15220,1,163,4,10,59,69,97,99,101,105,110,111,115,117,15244,15246,15249,15253,15258,15334,15347,15367,15416,15421,1,8826,59,1,10931,112,59,1,10935,117,101,59,1,8828,4,2,59,99,15264,15266,1,10927,4,6,59,97,99,101,110,115,15280,15282,15290,15299,15303,15329,1,8826,112,112,114,111,120,59,1,10935,117,114,108,121,101,113,59,1,8828,113,59,1,10927,4,3,97,101,115,15311,15319,15324,112,112,114,111,120,59,1,10937,113,113,59,1,10933,105,109,59,1,8936,105,109,59,1,8830,109,101,4,2,59,115,15342,15344,1,8242,59,1,8473,4,3,69,97,115,15355,15358,15362,59,1,10933,112,59,1,10937,105,109,59,1,8936,4,3,100,102,112,15375,15378,15404,59,1,8719,4,3,97,108,115,15386,15392,15398,108,97,114,59,1,9006,105,110,101,59,1,8978,117,114,102,59,1,8979,4,2,59,116,15410,15412,1,8733,111,59,1,8733,105,109,59,1,8830,114,101,108,59,1,8880,4,2,99,105,15433,15438,114,59,3,55349,56517,59,1,968,110,99,115,112,59,1,8200,4,6,102,105,111,112,115,117,15462,15467,15472,15478,15485,15491,114,59,3,55349,56622,110,116,59,1,10764,112,102,59,3,55349,56674,114,105,109,101,59,1,8279,99,114,59,3,55349,56518,4,3,97,101,111,15499,15520,15534,116,4,2,101,105,15506,15515,114,110,105,111,110,115,59,1,8461,110,116,59,1,10774,115,116,4,2,59,101,15528,15530,1,63,113,59,1,8799,116,5,34,1,59,15540,1,34,4,21,65,66,72,97,98,99,100,101,102,104,105,108,109,110,111,112,114,115,116,117,120,15586,15609,15615,15620,15796,15855,15893,15931,15977,16001,16039,16183,16204,16222,16228,16285,16312,16318,16363,16408,16416,4,3,97,114,116,15594,15599,15603,114,114,59,1,8667,114,59,1,8658,97,105,108,59,1,10524,97,114,114,59,1,10511,97,114,59,1,10596,4,7,99,100,101,110,113,114,116,15636,15651,15656,15664,15687,15696,15770,4,2,101,117,15642,15646,59,3,8765,817,116,101,59,1,341,105,99,59,1,8730,109,112,116,121,118,59,1,10675,103,4,4,59,100,101,108,15675,15677,15680,15683,1,10217,59,1,10642,59,1,10661,101,59,1,10217,117,111,5,187,1,59,15694,1,187,114,4,11,59,97,98,99,102,104,108,112,115,116,119,15721,15723,15727,15739,15742,15746,15750,15754,15758,15763,15767,1,8594,112,59,1,10613,4,2,59,102,15733,15735,1,8677,115,59,1,10528,59,1,10547,115,59,1,10526,107,59,1,8618,112,59,1,8620,108,59,1,10565,105,109,59,1,10612,108,59,1,8611,59,1,8605,4,2,97,105,15776,15781,105,108,59,1,10522,111,4,2,59,110,15788,15790,1,8758,97,108,115,59,1,8474,4,3,97,98,114,15804,15809,15814,114,114,59,1,10509,114,107,59,1,10099,4,2,97,107,15820,15833,99,4,2,101,107,15827,15830,59,1,125,59,1,93,4,2,101,115,15839,15842,59,1,10636,108,4,2,100,117,15849,15852,59,1,10638,59,1,10640,4,4,97,101,117,121,15865,15871,15886,15890,114,111,110,59,1,345,4,2,100,105,15877,15882,105,108,59,1,343,108,59,1,8969,98,59,1,125,59,1,1088,4,4,99,108,113,115,15903,15907,15914,15927,97,59,1,10551,100,104,97,114,59,1,10601,117,111,4,2,59,114,15922,15924,1,8221,59,1,8221,104,59,1,8627,4,3,97,99,103,15939,15966,15970,108,4,4,59,105,112,115,15950,15952,15957,15963,1,8476,110,101,59,1,8475,97,114,116,59,1,8476,59,1,8477,116,59,1,9645,5,174,1,59,15975,1,174,4,3,105,108,114,15985,15991,15997,115,104,116,59,1,10621,111,111,114,59,1,8971,59,3,55349,56623,4,2,97,111,16007,16028,114,4,2,100,117,16014,16017,59,1,8641,4,2,59,108,16023,16025,1,8640,59,1,10604,4,2,59,118,16034,16036,1,961,59,1,1009,4,3,103,110,115,16047,16167,16171,104,116,4,6,97,104,108,114,115,116,16063,16081,16103,16130,16143,16155,114,114,111,119,4,2,59,116,16073,16075,1,8594,97,105,108,59,1,8611,97,114,112,111,111,110,4,2,100,117,16093,16099,111,119,110,59,1,8641,112,59,1,8640,101,102,116,4,2,97,104,16112,16120,114,114,111,119,115,59,1,8644,97,114,112,111,111,110,115,59,1,8652,105,103,104,116,97,114,114,111,119,115,59,1,8649,113,117,105,103,97,114,114,111,119,59,1,8605,104,114,101,101,116,105,109,101,115,59,1,8908,103,59,1,730,105,110,103,100,111,116,115,101,113,59,1,8787,4,3,97,104,109,16191,16196,16201,114,114,59,1,8644,97,114,59,1,8652,59,1,8207,111,117,115,116,4,2,59,97,16214,16216,1,9137,99,104,101,59,1,9137,109,105,100,59,1,10990,4,4,97,98,112,116,16238,16252,16257,16278,4,2,110,114,16244,16248,103,59,1,10221,114,59,1,8702,114,107,59,1,10215,4,3,97,102,108,16265,16269,16273,114,59,1,10630,59,3,55349,56675,117,115,59,1,10798,105,109,101,115,59,1,10805,4,2,97,112,16291,16304,114,4,2,59,103,16298,16300,1,41,116,59,1,10644,111,108,105,110,116,59,1,10770,97,114,114,59,1,8649,4,4,97,99,104,113,16328,16334,16339,16342,113,117,111,59,1,8250,114,59,3,55349,56519,59,1,8625,4,2,98,117,16348,16351,59,1,93,111,4,2,59,114,16358,16360,1,8217,59,1,8217,4,3,104,105,114,16371,16377,16383,114,101,101,59,1,8908,109,101,115,59,1,8906,105,4,4,59,101,102,108,16394,16396,16399,16402,1,9657,59,1,8885,59,1,9656,116,114,105,59,1,10702,108,117,104,97,114,59,1,10600,59,1,8478,4,19,97,98,99,100,101,102,104,105,108,109,111,112,113,114,115,116,117,119,122,16459,16466,16472,16572,16590,16672,16687,16746,16844,16850,16924,16963,16988,17115,17121,17154,17206,17614,17656,99,117,116,101,59,1,347,113,117,111,59,1,8218,4,10,59,69,97,99,101,105,110,112,115,121,16494,16496,16499,16513,16518,16531,16536,16556,16564,16569,1,8827,59,1,10932,4,2,112,114,16505,16508,59,1,10936,111,110,59,1,353,117,101,59,1,8829,4,2,59,100,16524,16526,1,10928,105,108,59,1,351,114,99,59,1,349,4,3,69,97,115,16544,16547,16551,59,1,10934,112,59,1,10938,105,109,59,1,8937,111,108,105,110,116,59,1,10771,105,109,59,1,8831,59,1,1089,111,116,4,3,59,98,101,16582,16584,16587,1,8901,59,1,8865,59,1,10854,4,7,65,97,99,109,115,116,120,16606,16611,16634,16642,16646,16652,16668,114,114,59,1,8664,114,4,2,104,114,16618,16622,107,59,1,10533,4,2,59,111,16628,16630,1,8600,119,59,1,8600,116,5,167,1,59,16640,1,167,105,59,1,59,119,97,114,59,1,10537,109,4,2,105,110,16659,16665,110,117,115,59,1,8726,59,1,8726,116,59,1,10038,114,4,2,59,111,16679,16682,3,55349,56624,119,110,59,1,8994,4,4,97,99,111,121,16697,16702,16716,16739,114,112,59,1,9839,4,2,104,121,16708,16713,99,121,59,1,1097,59,1,1096,114,116,4,2,109,112,16724,16729,105,100,59,1,8739,97,114,97,108,108,101,108,59,1,8741,5,173,1,59,16744,1,173,4,2,103,109,16752,16770,109,97,4,3,59,102,118,16762,16764,16767,1,963,59,1,962,59,1,962,4,8,59,100,101,103,108,110,112,114,16788,16790,16795,16806,16817,16828,16832,16838,1,8764,111,116,59,1,10858,4,2,59,113,16801,16803,1,8771,59,1,8771,4,2,59,69,16812,16814,1,10910,59,1,10912,4,2,59,69,16823,16825,1,10909,59,1,10911,101,59,1,8774,108,117,115,59,1,10788,97,114,114,59,1,10610,97,114,114,59,1,8592,4,4,97,101,105,116,16860,16883,16891,16904,4,2,108,115,16866,16878,108,115,101,116,109,105,110,117,115,59,1,8726,104,112,59,1,10803,112,97,114,115,108,59,1,10724,4,2,100,108,16897,16900,59,1,8739,101,59,1,8995,4,2,59,101,16910,16912,1,10922,4,2,59,115,16918,16920,1,10924,59,3,10924,65024,4,3,102,108,112,16932,16938,16958,116,99,121,59,1,1100,4,2,59,98,16944,16946,1,47,4,2,59,97,16952,16954,1,10692,114,59,1,9023,102,59,3,55349,56676,97,4,2,100,114,16970,16985,101,115,4,2,59,117,16978,16980,1,9824,105,116,59,1,9824,59,1,8741,4,3,99,115,117,16996,17028,17089,4,2,97,117,17002,17015,112,4,2,59,115,17009,17011,1,8851,59,3,8851,65024,112,4,2,59,115,17022,17024,1,8852,59,3,8852,65024,117,4,2,98,112,17035,17062,4,3,59,101,115,17043,17045,17048,1,8847,59,1,8849,101,116,4,2,59,101,17056,17058,1,8847,113,59,1,8849,4,3,59,101,115,17070,17072,17075,1,8848,59,1,8850,101,116,4,2,59,101,17083,17085,1,8848,113,59,1,8850,4,3,59,97,102,17097,17099,17112,1,9633,114,4,2,101,102,17106,17109,59,1,9633,59,1,9642,59,1,9642,97,114,114,59,1,8594,4,4,99,101,109,116,17131,17136,17142,17148,114,59,3,55349,56520,116,109,110,59,1,8726,105,108,101,59,1,8995,97,114,102,59,1,8902,4,2,97,114,17160,17172,114,4,2,59,102,17167,17169,1,9734,59,1,9733,4,2,97,110,17178,17202,105,103,104,116,4,2,101,112,17188,17197,112,115,105,108,111,110,59,1,1013,104,105,59,1,981,115,59,1,175,4,5,98,99,109,110,112,17218,17351,17420,17423,17427,4,9,59,69,100,101,109,110,112,114,115,17238,17240,17243,17248,17261,17267,17279,17285,17291,1,8834,59,1,10949,111,116,59,1,10941,4,2,59,100,17254,17256,1,8838,111,116,59,1,10947,117,108,116,59,1,10945,4,2,69,101,17273,17276,59,1,10955,59,1,8842,108,117,115,59,1,10943,97,114,114,59,1,10617,4,3,101,105,117,17299,17335,17339,116,4,3,59,101,110,17308,17310,17322,1,8834,113,4,2,59,113,17317,17319,1,8838,59,1,10949,101,113,4,2,59,113,17330,17332,1,8842,59,1,10955,109,59,1,10951,4,2,98,112,17345,17348,59,1,10965,59,1,10963,99,4,6,59,97,99,101,110,115,17366,17368,17376,17385,17389,17415,1,8827,112,112,114,111,120,59,1,10936,117,114,108,121,101,113,59,1,8829,113,59,1,10928,4,3,97,101,115,17397,17405,17410,112,112,114,111,120,59,1,10938,113,113,59,1,10934,105,109,59,1,8937,105,109,59,1,8831,59,1,8721,103,59,1,9834,4,13,49,50,51,59,69,100,101,104,108,109,110,112,115,17455,17462,17469,17476,17478,17481,17496,17509,17524,17530,17536,17548,17554,5,185,1,59,17460,1,185,5,178,1,59,17467,1,178,5,179,1,59,17474,1,179,1,8835,59,1,10950,4,2,111,115,17487,17491,116,59,1,10942,117,98,59,1,10968,4,2,59,100,17502,17504,1,8839,111,116,59,1,10948,115,4,2,111,117,17516,17520,108,59,1,10185,98,59,1,10967,97,114,114,59,1,10619,117,108,116,59,1,10946,4,2,69,101,17542,17545,59,1,10956,59,1,8843,108,117,115,59,1,10944,4,3,101,105,117,17562,17598,17602,116,4,3,59,101,110,17571,17573,17585,1,8835,113,4,2,59,113,17580,17582,1,8839,59,1,10950,101,113,4,2,59,113,17593,17595,1,8843,59,1,10956,109,59,1,10952,4,2,98,112,17608,17611,59,1,10964,59,1,10966,4,3,65,97,110,17622,17627,17650,114,114,59,1,8665,114,4,2,104,114,17634,17638,107,59,1,10534,4,2,59,111,17644,17646,1,8601,119,59,1,8601,119,97,114,59,1,10538,108,105,103,5,223,1,59,17664,1,223,4,13,97,98,99,100,101,102,104,105,111,112,114,115,119,17694,17709,17714,17737,17742,17749,17754,17860,17905,17957,17964,18090,18122,4,2,114,117,17700,17706,103,101,116,59,1,8982,59,1,964,114,107,59,1,9140,4,3,97,101,121,17722,17728,17734,114,111,110,59,1,357,100,105,108,59,1,355,59,1,1090,111,116,59,1,8411,108,114,101,99,59,1,8981,114,59,3,55349,56625,4,4,101,105,107,111,17764,17805,17836,17851,4,2,114,116,17770,17786,101,4,2,52,102,17777,17780,59,1,8756,111,114,101,59,1,8756,97,4,3,59,115,118,17795,17797,17802,1,952,121,109,59,1,977,59,1,977,4,2,99,110,17811,17831,107,4,2,97,115,17818,17826,112,112,114,111,120,59,1,8776,105,109,59,1,8764,115,112,59,1,8201,4,2,97,115,17842,17846,112,59,1,8776,105,109,59,1,8764,114,110,5,254,1,59,17858,1,254,4,3,108,109,110,17868,17873,17901,100,101,59,1,732,101,115,5,215,3,59,98,100,17884,17886,17898,1,215,4,2,59,97,17892,17894,1,8864,114,59,1,10801,59,1,10800,116,59,1,8749,4,3,101,112,115,17913,17917,17953,97,59,1,10536,4,4,59,98,99,102,17927,17929,17934,17939,1,8868,111,116,59,1,9014,105,114,59,1,10993,4,2,59,111,17945,17948,3,55349,56677,114,107,59,1,10970,97,59,1,10537,114,105,109,101,59,1,8244,4,3,97,105,112,17972,17977,18082,100,101,59,1,8482,4,7,97,100,101,109,112,115,116,17993,18051,18056,18059,18066,18072,18076,110,103,108,101,4,5,59,100,108,113,114,18009,18011,18017,18032,18035,1,9653,111,119,110,59,1,9663,101,102,116,4,2,59,101,18026,18028,1,9667,113,59,1,8884,59,1,8796,105,103,104,116,4,2,59,101,18045,18047,1,9657,113,59,1,8885,111,116,59,1,9708,59,1,8796,105,110,117,115,59,1,10810,108,117,115,59,1,10809,98,59,1,10701,105,109,101,59,1,10811,101,122,105,117,109,59,1,9186,4,3,99,104,116,18098,18111,18116,4,2,114,121,18104,18108,59,3,55349,56521,59,1,1094,99,121,59,1,1115,114,111,107,59,1,359,4,2,105,111,18128,18133,120,116,59,1,8812,104,101,97,100,4,2,108,114,18143,18154,101,102,116,97,114,114,111,119,59,1,8606,105,103,104,116,97,114,114,111,119,59,1,8608,4,18,65,72,97,98,99,100,102,103,104,108,109,111,112,114,115,116,117,119,18204,18209,18214,18234,18250,18268,18292,18308,18319,18343,18379,18397,18413,18504,18547,18553,18584,18603,114,114,59,1,8657,97,114,59,1,10595,4,2,99,114,18220,18230,117,116,101,5,250,1,59,18228,1,250,114,59,1,8593,114,4,2,99,101,18241,18245,121,59,1,1118,118,101,59,1,365,4,2,105,121,18256,18265,114,99,5,251,1,59,18263,1,251,59,1,1091,4,3,97,98,104,18276,18281,18287,114,114,59,1,8645,108,97,99,59,1,369,97,114,59,1,10606,4,2,105,114,18298,18304,115,104,116,59,1,10622,59,3,55349,56626,114,97,118,101,5,249,1,59,18317,1,249,4,2,97,98,18325,18338,114,4,2,108,114,18332,18335,59,1,8639,59,1,8638,108,107,59,1,9600,4,2,99,116,18349,18374,4,2,111,114,18355,18369,114,110,4,2,59,101,18363,18365,1,8988,114,59,1,8988,111,112,59,1,8975,114,105,59,1,9720,4,2,97,108,18385,18390,99,114,59,1,363,5,168,1,59,18395,1,168,4,2,103,112,18403,18408,111,110,59,1,371,102,59,3,55349,56678,4,6,97,100,104,108,115,117,18427,18434,18445,18470,18475,18494,114,114,111,119,59,1,8593,111,119,110,97,114,114,111,119,59,1,8597,97,114,112,111,111,110,4,2,108,114,18457,18463,101,102,116,59,1,8639,105,103,104,116,59,1,8638,117,115,59,1,8846,105,4,3,59,104,108,18484,18486,18489,1,965,59,1,978,111,110,59,1,965,112,97,114,114,111,119,115,59,1,8648,4,3,99,105,116,18512,18537,18542,4,2,111,114,18518,18532,114,110,4,2,59,101,18526,18528,1,8989,114,59,1,8989,111,112,59,1,8974,110,103,59,1,367,114,105,59,1,9721,99,114,59,3,55349,56522,4,3,100,105,114,18561,18566,18572,111,116,59,1,8944,108,100,101,59,1,361,105,4,2,59,102,18579,18581,1,9653,59,1,9652,4,2,97,109,18590,18595,114,114,59,1,8648,108,5,252,1,59,18601,1,252,97,110,103,108,101,59,1,10663,4,15,65,66,68,97,99,100,101,102,108,110,111,112,114,115,122,18643,18648,18661,18667,18847,18851,18857,18904,18909,18915,18931,18937,18943,18949,18996,114,114,59,1,8661,97,114,4,2,59,118,18656,18658,1,10984,59,1,10985,97,115,104,59,1,8872,4,2,110,114,18673,18679,103,114,116,59,1,10652,4,7,101,107,110,112,114,115,116,18695,18704,18711,18720,18742,18754,18810,112,115,105,108,111,110,59,1,1013,97,112,112,97,59,1,1008,111,116,104,105,110,103,59,1,8709,4,3,104,105,114,18728,18732,18735,105,59,1,981,59,1,982,111,112,116,111,59,1,8733,4,2,59,104,18748,18750,1,8597,111,59,1,1009,4,2,105,117,18760,18766,103,109,97,59,1,962,4,2,98,112,18772,18791,115,101,116,110,101,113,4,2,59,113,18784,18787,3,8842,65024,59,3,10955,65024,115,101,116,110,101,113,4,2,59,113,18803,18806,3,8843,65024,59,3,10956,65024,4,2,104,114,18816,18822,101,116,97,59,1,977,105,97,110,103,108,101,4,2,108,114,18834,18840,101,102,116,59,1,8882,105,103,104,116,59,1,8883,121,59,1,1074,97,115,104,59,1,8866,4,3,101,108,114,18865,18884,18890,4,3,59,98,101,18873,18875,18880,1,8744,97,114,59,1,8891,113,59,1,8794,108,105,112,59,1,8942,4,2,98,116,18896,18901,97,114,59,1,124,59,1,124,114,59,3,55349,56627,116,114,105,59,1,8882,115,117,4,2,98,112,18923,18927,59,3,8834,8402,59,3,8835,8402,112,102,59,3,55349,56679,114,111,112,59,1,8733,116,114,105,59,1,8883,4,2,99,117,18955,18960,114,59,3,55349,56523,4,2,98,112,18966,18981,110,4,2,69,101,18973,18977,59,3,10955,65024,59,3,8842,65024,110,4,2,69,101,18988,18992,59,3,10956,65024,59,3,8843,65024,105,103,122,97,103,59,1,10650,4,7,99,101,102,111,112,114,115,19020,19026,19061,19066,19072,19075,19089,105,114,99,59,1,373,4,2,100,105,19032,19055,4,2,98,103,19038,19043,97,114,59,1,10847,101,4,2,59,113,19050,19052,1,8743,59,1,8793,101,114,112,59,1,8472,114,59,3,55349,56628,112,102,59,3,55349,56680,59,1,8472,4,2,59,101,19081,19083,1,8768,97,116,104,59,1,8768,99,114,59,3,55349,56524,4,14,99,100,102,104,105,108,109,110,111,114,115,117,118,119,19125,19146,19152,19157,19173,19176,19192,19197,19202,19236,19252,19269,19286,19291,4,3,97,105,117,19133,19137,19142,112,59,1,8898,114,99,59,1,9711,112,59,1,8899,116,114,105,59,1,9661,114,59,3,55349,56629,4,2,65,97,19163,19168,114,114,59,1,10234,114,114,59,1,10231,59,1,958,4,2,65,97,19182,19187,114,114,59,1,10232,114,114,59,1,10229,97,112,59,1,10236,105,115,59,1,8955,4,3,100,112,116,19210,19215,19230,111,116,59,1,10752,4,2,102,108,19221,19225,59,3,55349,56681,117,115,59,1,10753,105,109,101,59,1,10754,4,2,65,97,19242,19247,114,114,59,1,10233,114,114,59,1,10230,4,2,99,113,19258,19263,114,59,3,55349,56525,99,117,112,59,1,10758,4,2,112,116,19275,19281,108,117,115,59,1,10756,114,105,59,1,9651,101,101,59,1,8897,101,100,103,101,59,1,8896,4,8,97,99,101,102,105,111,115,117,19316,19335,19349,19357,19362,19367,19373,19379,99,4,2,117,121,19323,19332,116,101,5,253,1,59,19330,1,253,59,1,1103,4,2,105,121,19341,19346,114,99,59,1,375,59,1,1099,110,5,165,1,59,19355,1,165,114,59,3,55349,56630,99,121,59,1,1111,112,102,59,3,55349,56682,99,114,59,3,55349,56526,4,2,99,109,19385,19389,121,59,1,1102,108,5,255,1,59,19395,1,255,4,10,97,99,100,101,102,104,105,111,115,119,19419,19426,19441,19446,19462,19467,19472,19480,19486,19492,99,117,116,101,59,1,378,4,2,97,121,19432,19438,114,111,110,59,1,382,59,1,1079,111,116,59,1,380,4,2,101,116,19452,19458,116,114,102,59,1,8488,97,59,1,950,114,59,3,55349,56631,99,121,59,1,1078,103,114,97,114,114,59,1,8669,112,102,59,3,55349,56683,99,114,59,3,55349,56527,4,2,106,110,19498,19501,59,1,8205,106,59,1,8204]);","'use strict';\n\nconst Preprocessor = require('./preprocessor');\nconst unicode = require('../common/unicode');\nconst neTree = require('./named-entity-data');\nconst ERR = require('../common/error-codes');\n\n//Aliases\nconst $ = unicode.CODE_POINTS;\nconst $$ = unicode.CODE_POINT_SEQUENCES;\n\n//C1 Unicode control character reference replacements\nconst C1_CONTROLS_REFERENCE_REPLACEMENTS = {\n 0x80: 0x20ac,\n 0x82: 0x201a,\n 0x83: 0x0192,\n 0x84: 0x201e,\n 0x85: 0x2026,\n 0x86: 0x2020,\n 0x87: 0x2021,\n 0x88: 0x02c6,\n 0x89: 0x2030,\n 0x8a: 0x0160,\n 0x8b: 0x2039,\n 0x8c: 0x0152,\n 0x8e: 0x017d,\n 0x91: 0x2018,\n 0x92: 0x2019,\n 0x93: 0x201c,\n 0x94: 0x201d,\n 0x95: 0x2022,\n 0x96: 0x2013,\n 0x97: 0x2014,\n 0x98: 0x02dc,\n 0x99: 0x2122,\n 0x9a: 0x0161,\n 0x9b: 0x203a,\n 0x9c: 0x0153,\n 0x9e: 0x017e,\n 0x9f: 0x0178\n};\n\n// Named entity tree flags\nconst HAS_DATA_FLAG = 1 << 0;\nconst DATA_DUPLET_FLAG = 1 << 1;\nconst HAS_BRANCHES_FLAG = 1 << 2;\nconst MAX_BRANCH_MARKER_VALUE = HAS_DATA_FLAG | DATA_DUPLET_FLAG | HAS_BRANCHES_FLAG;\n\n//States\nconst DATA_STATE = 'DATA_STATE';\nconst RCDATA_STATE = 'RCDATA_STATE';\nconst RAWTEXT_STATE = 'RAWTEXT_STATE';\nconst SCRIPT_DATA_STATE = 'SCRIPT_DATA_STATE';\nconst PLAINTEXT_STATE = 'PLAINTEXT_STATE';\nconst TAG_OPEN_STATE = 'TAG_OPEN_STATE';\nconst END_TAG_OPEN_STATE = 'END_TAG_OPEN_STATE';\nconst TAG_NAME_STATE = 'TAG_NAME_STATE';\nconst RCDATA_LESS_THAN_SIGN_STATE = 'RCDATA_LESS_THAN_SIGN_STATE';\nconst RCDATA_END_TAG_OPEN_STATE = 'RCDATA_END_TAG_OPEN_STATE';\nconst RCDATA_END_TAG_NAME_STATE = 'RCDATA_END_TAG_NAME_STATE';\nconst RAWTEXT_LESS_THAN_SIGN_STATE = 'RAWTEXT_LESS_THAN_SIGN_STATE';\nconst RAWTEXT_END_TAG_OPEN_STATE = 'RAWTEXT_END_TAG_OPEN_STATE';\nconst RAWTEXT_END_TAG_NAME_STATE = 'RAWTEXT_END_TAG_NAME_STATE';\nconst SCRIPT_DATA_LESS_THAN_SIGN_STATE = 'SCRIPT_DATA_LESS_THAN_SIGN_STATE';\nconst SCRIPT_DATA_END_TAG_OPEN_STATE = 'SCRIPT_DATA_END_TAG_OPEN_STATE';\nconst SCRIPT_DATA_END_TAG_NAME_STATE = 'SCRIPT_DATA_END_TAG_NAME_STATE';\nconst SCRIPT_DATA_ESCAPE_START_STATE = 'SCRIPT_DATA_ESCAPE_START_STATE';\nconst SCRIPT_DATA_ESCAPE_START_DASH_STATE = 'SCRIPT_DATA_ESCAPE_START_DASH_STATE';\nconst SCRIPT_DATA_ESCAPED_STATE = 'SCRIPT_DATA_ESCAPED_STATE';\nconst SCRIPT_DATA_ESCAPED_DASH_STATE = 'SCRIPT_DATA_ESCAPED_DASH_STATE';\nconst SCRIPT_DATA_ESCAPED_DASH_DASH_STATE = 'SCRIPT_DATA_ESCAPED_DASH_DASH_STATE';\nconst SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE = 'SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE';\nconst SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE = 'SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE';\nconst SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE = 'SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE';\nconst SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE';\nconst SCRIPT_DATA_DOUBLE_ESCAPED_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_STATE';\nconst SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE';\nconst SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE';\nconst SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE';\nconst SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE';\nconst BEFORE_ATTRIBUTE_NAME_STATE = 'BEFORE_ATTRIBUTE_NAME_STATE';\nconst ATTRIBUTE_NAME_STATE = 'ATTRIBUTE_NAME_STATE';\nconst AFTER_ATTRIBUTE_NAME_STATE = 'AFTER_ATTRIBUTE_NAME_STATE';\nconst BEFORE_ATTRIBUTE_VALUE_STATE = 'BEFORE_ATTRIBUTE_VALUE_STATE';\nconst ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE = 'ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE';\nconst ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE = 'ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE';\nconst ATTRIBUTE_VALUE_UNQUOTED_STATE = 'ATTRIBUTE_VALUE_UNQUOTED_STATE';\nconst AFTER_ATTRIBUTE_VALUE_QUOTED_STATE = 'AFTER_ATTRIBUTE_VALUE_QUOTED_STATE';\nconst SELF_CLOSING_START_TAG_STATE = 'SELF_CLOSING_START_TAG_STATE';\nconst BOGUS_COMMENT_STATE = 'BOGUS_COMMENT_STATE';\nconst MARKUP_DECLARATION_OPEN_STATE = 'MARKUP_DECLARATION_OPEN_STATE';\nconst COMMENT_START_STATE = 'COMMENT_START_STATE';\nconst COMMENT_START_DASH_STATE = 'COMMENT_START_DASH_STATE';\nconst COMMENT_STATE = 'COMMENT_STATE';\nconst COMMENT_LESS_THAN_SIGN_STATE = 'COMMENT_LESS_THAN_SIGN_STATE';\nconst COMMENT_LESS_THAN_SIGN_BANG_STATE = 'COMMENT_LESS_THAN_SIGN_BANG_STATE';\nconst COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE = 'COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE';\nconst COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE = 'COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE';\nconst COMMENT_END_DASH_STATE = 'COMMENT_END_DASH_STATE';\nconst COMMENT_END_STATE = 'COMMENT_END_STATE';\nconst COMMENT_END_BANG_STATE = 'COMMENT_END_BANG_STATE';\nconst DOCTYPE_STATE = 'DOCTYPE_STATE';\nconst BEFORE_DOCTYPE_NAME_STATE = 'BEFORE_DOCTYPE_NAME_STATE';\nconst DOCTYPE_NAME_STATE = 'DOCTYPE_NAME_STATE';\nconst AFTER_DOCTYPE_NAME_STATE = 'AFTER_DOCTYPE_NAME_STATE';\nconst AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE = 'AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE';\nconst BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE = 'BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE';\nconst DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE = 'DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE';\nconst DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE = 'DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE';\nconst AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE = 'AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE';\nconst BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE = 'BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE';\nconst AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE = 'AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE';\nconst BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE = 'BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE';\nconst DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE = 'DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE';\nconst DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE = 'DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE';\nconst AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE = 'AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE';\nconst BOGUS_DOCTYPE_STATE = 'BOGUS_DOCTYPE_STATE';\nconst CDATA_SECTION_STATE = 'CDATA_SECTION_STATE';\nconst CDATA_SECTION_BRACKET_STATE = 'CDATA_SECTION_BRACKET_STATE';\nconst CDATA_SECTION_END_STATE = 'CDATA_SECTION_END_STATE';\nconst CHARACTER_REFERENCE_STATE = 'CHARACTER_REFERENCE_STATE';\nconst NAMED_CHARACTER_REFERENCE_STATE = 'NAMED_CHARACTER_REFERENCE_STATE';\nconst AMBIGUOUS_AMPERSAND_STATE = 'AMBIGUOS_AMPERSAND_STATE';\nconst NUMERIC_CHARACTER_REFERENCE_STATE = 'NUMERIC_CHARACTER_REFERENCE_STATE';\nconst HEXADEMICAL_CHARACTER_REFERENCE_START_STATE = 'HEXADEMICAL_CHARACTER_REFERENCE_START_STATE';\nconst DECIMAL_CHARACTER_REFERENCE_START_STATE = 'DECIMAL_CHARACTER_REFERENCE_START_STATE';\nconst HEXADEMICAL_CHARACTER_REFERENCE_STATE = 'HEXADEMICAL_CHARACTER_REFERENCE_STATE';\nconst DECIMAL_CHARACTER_REFERENCE_STATE = 'DECIMAL_CHARACTER_REFERENCE_STATE';\nconst NUMERIC_CHARACTER_REFERENCE_END_STATE = 'NUMERIC_CHARACTER_REFERENCE_END_STATE';\n\n//Utils\n\n//OPTIMIZATION: these utility functions should not be moved out of this module. V8 Crankshaft will not inline\n//this functions if they will be situated in another module due to context switch.\n//Always perform inlining check before modifying this functions ('node --trace-inlining').\nfunction isWhitespace(cp) {\n return cp === $.SPACE || cp === $.LINE_FEED || cp === $.TABULATION || cp === $.FORM_FEED;\n}\n\nfunction isAsciiDigit(cp) {\n return cp >= $.DIGIT_0 && cp <= $.DIGIT_9;\n}\n\nfunction isAsciiUpper(cp) {\n return cp >= $.LATIN_CAPITAL_A && cp <= $.LATIN_CAPITAL_Z;\n}\n\nfunction isAsciiLower(cp) {\n return cp >= $.LATIN_SMALL_A && cp <= $.LATIN_SMALL_Z;\n}\n\nfunction isAsciiLetter(cp) {\n return isAsciiLower(cp) || isAsciiUpper(cp);\n}\n\nfunction isAsciiAlphaNumeric(cp) {\n return isAsciiLetter(cp) || isAsciiDigit(cp);\n}\n\nfunction isAsciiUpperHexDigit(cp) {\n return cp >= $.LATIN_CAPITAL_A && cp <= $.LATIN_CAPITAL_F;\n}\n\nfunction isAsciiLowerHexDigit(cp) {\n return cp >= $.LATIN_SMALL_A && cp <= $.LATIN_SMALL_F;\n}\n\nfunction isAsciiHexDigit(cp) {\n return isAsciiDigit(cp) || isAsciiUpperHexDigit(cp) || isAsciiLowerHexDigit(cp);\n}\n\nfunction toAsciiLowerCodePoint(cp) {\n return cp + 0x0020;\n}\n\n//NOTE: String.fromCharCode() function can handle only characters from BMP subset.\n//So, we need to workaround this manually.\n//(see: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/fromCharCode#Getting_it_to_work_with_higher_values)\nfunction toChar(cp) {\n if (cp <= 0xffff) {\n return String.fromCharCode(cp);\n }\n\n cp -= 0x10000;\n return String.fromCharCode(((cp >>> 10) & 0x3ff) | 0xd800) + String.fromCharCode(0xdc00 | (cp & 0x3ff));\n}\n\nfunction toAsciiLowerChar(cp) {\n return String.fromCharCode(toAsciiLowerCodePoint(cp));\n}\n\nfunction findNamedEntityTreeBranch(nodeIx, cp) {\n const branchCount = neTree[++nodeIx];\n let lo = ++nodeIx;\n let hi = lo + branchCount - 1;\n\n while (lo <= hi) {\n const mid = (lo + hi) >>> 1;\n const midCp = neTree[mid];\n\n if (midCp < cp) {\n lo = mid + 1;\n } else if (midCp > cp) {\n hi = mid - 1;\n } else {\n return neTree[mid + branchCount];\n }\n }\n\n return -1;\n}\n\n//Tokenizer\nclass Tokenizer {\n constructor() {\n this.preprocessor = new Preprocessor();\n\n this.tokenQueue = [];\n\n this.allowCDATA = false;\n\n this.state = DATA_STATE;\n this.returnState = '';\n\n this.charRefCode = -1;\n this.tempBuff = [];\n this.lastStartTagName = '';\n\n this.consumedAfterSnapshot = -1;\n this.active = false;\n\n this.currentCharacterToken = null;\n this.currentToken = null;\n this.currentAttr = null;\n }\n\n //Errors\n _err() {\n // NOTE: err reporting is noop by default. Enabled by mixin.\n }\n\n _errOnNextCodePoint(err) {\n this._consume();\n this._err(err);\n this._unconsume();\n }\n\n //API\n getNextToken() {\n while (!this.tokenQueue.length && this.active) {\n this.consumedAfterSnapshot = 0;\n\n const cp = this._consume();\n\n if (!this._ensureHibernation()) {\n this[this.state](cp);\n }\n }\n\n return this.tokenQueue.shift();\n }\n\n write(chunk, isLastChunk) {\n this.active = true;\n this.preprocessor.write(chunk, isLastChunk);\n }\n\n insertHtmlAtCurrentPos(chunk) {\n this.active = true;\n this.preprocessor.insertHtmlAtCurrentPos(chunk);\n }\n\n //Hibernation\n _ensureHibernation() {\n if (this.preprocessor.endOfChunkHit) {\n for (; this.consumedAfterSnapshot > 0; this.consumedAfterSnapshot--) {\n this.preprocessor.retreat();\n }\n\n this.active = false;\n this.tokenQueue.push({ type: Tokenizer.HIBERNATION_TOKEN });\n\n return true;\n }\n\n return false;\n }\n\n //Consumption\n _consume() {\n this.consumedAfterSnapshot++;\n return this.preprocessor.advance();\n }\n\n _unconsume() {\n this.consumedAfterSnapshot--;\n this.preprocessor.retreat();\n }\n\n _reconsumeInState(state) {\n this.state = state;\n this._unconsume();\n }\n\n _consumeSequenceIfMatch(pattern, startCp, caseSensitive) {\n let consumedCount = 0;\n let isMatch = true;\n const patternLength = pattern.length;\n let patternPos = 0;\n let cp = startCp;\n let patternCp = void 0;\n\n for (; patternPos < patternLength; patternPos++) {\n if (patternPos > 0) {\n cp = this._consume();\n consumedCount++;\n }\n\n if (cp === $.EOF) {\n isMatch = false;\n break;\n }\n\n patternCp = pattern[patternPos];\n\n if (cp !== patternCp && (caseSensitive || cp !== toAsciiLowerCodePoint(patternCp))) {\n isMatch = false;\n break;\n }\n }\n\n if (!isMatch) {\n while (consumedCount--) {\n this._unconsume();\n }\n }\n\n return isMatch;\n }\n\n //Temp buffer\n _isTempBufferEqualToScriptString() {\n if (this.tempBuff.length !== $$.SCRIPT_STRING.length) {\n return false;\n }\n\n for (let i = 0; i < this.tempBuff.length; i++) {\n if (this.tempBuff[i] !== $$.SCRIPT_STRING[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n //Token creation\n _createStartTagToken() {\n this.currentToken = {\n type: Tokenizer.START_TAG_TOKEN,\n tagName: '',\n selfClosing: false,\n ackSelfClosing: false,\n attrs: []\n };\n }\n\n _createEndTagToken() {\n this.currentToken = {\n type: Tokenizer.END_TAG_TOKEN,\n tagName: '',\n selfClosing: false,\n attrs: []\n };\n }\n\n _createCommentToken() {\n this.currentToken = {\n type: Tokenizer.COMMENT_TOKEN,\n data: ''\n };\n }\n\n _createDoctypeToken(initialName) {\n this.currentToken = {\n type: Tokenizer.DOCTYPE_TOKEN,\n name: initialName,\n forceQuirks: false,\n publicId: null,\n systemId: null\n };\n }\n\n _createCharacterToken(type, ch) {\n this.currentCharacterToken = {\n type: type,\n chars: ch\n };\n }\n\n _createEOFToken() {\n this.currentToken = { type: Tokenizer.EOF_TOKEN };\n }\n\n //Tag attributes\n _createAttr(attrNameFirstCh) {\n this.currentAttr = {\n name: attrNameFirstCh,\n value: ''\n };\n }\n\n _leaveAttrName(toState) {\n if (Tokenizer.getTokenAttr(this.currentToken, this.currentAttr.name) === null) {\n this.currentToken.attrs.push(this.currentAttr);\n } else {\n this._err(ERR.duplicateAttribute);\n }\n\n this.state = toState;\n }\n\n _leaveAttrValue(toState) {\n this.state = toState;\n }\n\n //Token emission\n _emitCurrentToken() {\n this._emitCurrentCharacterToken();\n\n const ct = this.currentToken;\n\n this.currentToken = null;\n\n //NOTE: store emited start tag's tagName to determine is the following end tag token is appropriate.\n if (ct.type === Tokenizer.START_TAG_TOKEN) {\n this.lastStartTagName = ct.tagName;\n } else if (ct.type === Tokenizer.END_TAG_TOKEN) {\n if (ct.attrs.length > 0) {\n this._err(ERR.endTagWithAttributes);\n }\n\n if (ct.selfClosing) {\n this._err(ERR.endTagWithTrailingSolidus);\n }\n }\n\n this.tokenQueue.push(ct);\n }\n\n _emitCurrentCharacterToken() {\n if (this.currentCharacterToken) {\n this.tokenQueue.push(this.currentCharacterToken);\n this.currentCharacterToken = null;\n }\n }\n\n _emitEOFToken() {\n this._createEOFToken();\n this._emitCurrentToken();\n }\n\n //Characters emission\n\n //OPTIMIZATION: specification uses only one type of character tokens (one token per character).\n //This causes a huge memory overhead and a lot of unnecessary parser loops. parse5 uses 3 groups of characters.\n //If we have a sequence of characters that belong to the same group, parser can process it\n //as a single solid character token.\n //So, there are 3 types of character tokens in parse5:\n //1)NULL_CHARACTER_TOKEN - \\u0000-character sequences (e.g. '\\u0000\\u0000\\u0000')\n //2)WHITESPACE_CHARACTER_TOKEN - any whitespace/new-line character sequences (e.g. '\\n \\r\\t \\f')\n //3)CHARACTER_TOKEN - any character sequence which don't belong to groups 1 and 2 (e.g. 'abcdef1234@@#$%^')\n _appendCharToCurrentCharacterToken(type, ch) {\n if (this.currentCharacterToken && this.currentCharacterToken.type !== type) {\n this._emitCurrentCharacterToken();\n }\n\n if (this.currentCharacterToken) {\n this.currentCharacterToken.chars += ch;\n } else {\n this._createCharacterToken(type, ch);\n }\n }\n\n _emitCodePoint(cp) {\n let type = Tokenizer.CHARACTER_TOKEN;\n\n if (isWhitespace(cp)) {\n type = Tokenizer.WHITESPACE_CHARACTER_TOKEN;\n } else if (cp === $.NULL) {\n type = Tokenizer.NULL_CHARACTER_TOKEN;\n }\n\n this._appendCharToCurrentCharacterToken(type, toChar(cp));\n }\n\n _emitSeveralCodePoints(codePoints) {\n for (let i = 0; i < codePoints.length; i++) {\n this._emitCodePoint(codePoints[i]);\n }\n }\n\n //NOTE: used then we emit character explicitly. This is always a non-whitespace and a non-null character.\n //So we can avoid additional checks here.\n _emitChars(ch) {\n this._appendCharToCurrentCharacterToken(Tokenizer.CHARACTER_TOKEN, ch);\n }\n\n // Character reference helpers\n _matchNamedCharacterReference(startCp) {\n let result = null;\n let excess = 1;\n let i = findNamedEntityTreeBranch(0, startCp);\n\n this.tempBuff.push(startCp);\n\n while (i > -1) {\n const current = neTree[i];\n const inNode = current < MAX_BRANCH_MARKER_VALUE;\n const nodeWithData = inNode && current & HAS_DATA_FLAG;\n\n if (nodeWithData) {\n //NOTE: we use greedy search, so we continue lookup at this point\n result = current & DATA_DUPLET_FLAG ? [neTree[++i], neTree[++i]] : [neTree[++i]];\n excess = 0;\n }\n\n const cp = this._consume();\n\n this.tempBuff.push(cp);\n excess++;\n\n if (cp === $.EOF) {\n break;\n }\n\n if (inNode) {\n i = current & HAS_BRANCHES_FLAG ? findNamedEntityTreeBranch(i, cp) : -1;\n } else {\n i = cp === current ? ++i : -1;\n }\n }\n\n while (excess--) {\n this.tempBuff.pop();\n this._unconsume();\n }\n\n return result;\n }\n\n _isCharacterReferenceInAttribute() {\n return (\n this.returnState === ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE ||\n this.returnState === ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE ||\n this.returnState === ATTRIBUTE_VALUE_UNQUOTED_STATE\n );\n }\n\n _isCharacterReferenceAttributeQuirk(withSemicolon) {\n if (!withSemicolon && this._isCharacterReferenceInAttribute()) {\n const nextCp = this._consume();\n\n this._unconsume();\n\n return nextCp === $.EQUALS_SIGN || isAsciiAlphaNumeric(nextCp);\n }\n\n return false;\n }\n\n _flushCodePointsConsumedAsCharacterReference() {\n if (this._isCharacterReferenceInAttribute()) {\n for (let i = 0; i < this.tempBuff.length; i++) {\n this.currentAttr.value += toChar(this.tempBuff[i]);\n }\n } else {\n this._emitSeveralCodePoints(this.tempBuff);\n }\n\n this.tempBuff = [];\n }\n\n // State machine\n\n // Data state\n //------------------------------------------------------------------\n [DATA_STATE](cp) {\n this.preprocessor.dropParsedChunk();\n\n if (cp === $.LESS_THAN_SIGN) {\n this.state = TAG_OPEN_STATE;\n } else if (cp === $.AMPERSAND) {\n this.returnState = DATA_STATE;\n this.state = CHARACTER_REFERENCE_STATE;\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this._emitCodePoint(cp);\n } else if (cp === $.EOF) {\n this._emitEOFToken();\n } else {\n this._emitCodePoint(cp);\n }\n }\n\n // RCDATA state\n //------------------------------------------------------------------\n [RCDATA_STATE](cp) {\n this.preprocessor.dropParsedChunk();\n\n if (cp === $.AMPERSAND) {\n this.returnState = RCDATA_STATE;\n this.state = CHARACTER_REFERENCE_STATE;\n } else if (cp === $.LESS_THAN_SIGN) {\n this.state = RCDATA_LESS_THAN_SIGN_STATE;\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(unicode.REPLACEMENT_CHARACTER);\n } else if (cp === $.EOF) {\n this._emitEOFToken();\n } else {\n this._emitCodePoint(cp);\n }\n }\n\n // RAWTEXT state\n //------------------------------------------------------------------\n [RAWTEXT_STATE](cp) {\n this.preprocessor.dropParsedChunk();\n\n if (cp === $.LESS_THAN_SIGN) {\n this.state = RAWTEXT_LESS_THAN_SIGN_STATE;\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(unicode.REPLACEMENT_CHARACTER);\n } else if (cp === $.EOF) {\n this._emitEOFToken();\n } else {\n this._emitCodePoint(cp);\n }\n }\n\n // Script data state\n //------------------------------------------------------------------\n [SCRIPT_DATA_STATE](cp) {\n this.preprocessor.dropParsedChunk();\n\n if (cp === $.LESS_THAN_SIGN) {\n this.state = SCRIPT_DATA_LESS_THAN_SIGN_STATE;\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(unicode.REPLACEMENT_CHARACTER);\n } else if (cp === $.EOF) {\n this._emitEOFToken();\n } else {\n this._emitCodePoint(cp);\n }\n }\n\n // PLAINTEXT state\n //------------------------------------------------------------------\n [PLAINTEXT_STATE](cp) {\n this.preprocessor.dropParsedChunk();\n\n if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(unicode.REPLACEMENT_CHARACTER);\n } else if (cp === $.EOF) {\n this._emitEOFToken();\n } else {\n this._emitCodePoint(cp);\n }\n }\n\n // Tag open state\n //------------------------------------------------------------------\n [TAG_OPEN_STATE](cp) {\n if (cp === $.EXCLAMATION_MARK) {\n this.state = MARKUP_DECLARATION_OPEN_STATE;\n } else if (cp === $.SOLIDUS) {\n this.state = END_TAG_OPEN_STATE;\n } else if (isAsciiLetter(cp)) {\n this._createStartTagToken();\n this._reconsumeInState(TAG_NAME_STATE);\n } else if (cp === $.QUESTION_MARK) {\n this._err(ERR.unexpectedQuestionMarkInsteadOfTagName);\n this._createCommentToken();\n this._reconsumeInState(BOGUS_COMMENT_STATE);\n } else if (cp === $.EOF) {\n this._err(ERR.eofBeforeTagName);\n this._emitChars('<');\n this._emitEOFToken();\n } else {\n this._err(ERR.invalidFirstCharacterOfTagName);\n this._emitChars('<');\n this._reconsumeInState(DATA_STATE);\n }\n }\n\n // End tag open state\n //------------------------------------------------------------------\n [END_TAG_OPEN_STATE](cp) {\n if (isAsciiLetter(cp)) {\n this._createEndTagToken();\n this._reconsumeInState(TAG_NAME_STATE);\n } else if (cp === $.GREATER_THAN_SIGN) {\n this._err(ERR.missingEndTagName);\n this.state = DATA_STATE;\n } else if (cp === $.EOF) {\n this._err(ERR.eofBeforeTagName);\n this._emitChars('</');\n this._emitEOFToken();\n } else {\n this._err(ERR.invalidFirstCharacterOfTagName);\n this._createCommentToken();\n this._reconsumeInState(BOGUS_COMMENT_STATE);\n }\n }\n\n // Tag name state\n //------------------------------------------------------------------\n [TAG_NAME_STATE](cp) {\n if (isWhitespace(cp)) {\n this.state = BEFORE_ATTRIBUTE_NAME_STATE;\n } else if (cp === $.SOLIDUS) {\n this.state = SELF_CLOSING_START_TAG_STATE;\n } else if (cp === $.GREATER_THAN_SIGN) {\n this.state = DATA_STATE;\n this._emitCurrentToken();\n } else if (isAsciiUpper(cp)) {\n this.currentToken.tagName += toAsciiLowerChar(cp);\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this.currentToken.tagName += unicode.REPLACEMENT_CHARACTER;\n } else if (cp === $.EOF) {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n } else {\n this.currentToken.tagName += toChar(cp);\n }\n }\n\n // RCDATA less-than sign state\n //------------------------------------------------------------------\n [RCDATA_LESS_THAN_SIGN_STATE](cp) {\n if (cp === $.SOLIDUS) {\n this.tempBuff = [];\n this.state = RCDATA_END_TAG_OPEN_STATE;\n } else {\n this._emitChars('<');\n this._reconsumeInState(RCDATA_STATE);\n }\n }\n\n // RCDATA end tag open state\n //------------------------------------------------------------------\n [RCDATA_END_TAG_OPEN_STATE](cp) {\n if (isAsciiLetter(cp)) {\n this._createEndTagToken();\n this._reconsumeInState(RCDATA_END_TAG_NAME_STATE);\n } else {\n this._emitChars('</');\n this._reconsumeInState(RCDATA_STATE);\n }\n }\n\n // RCDATA end tag name state\n //------------------------------------------------------------------\n [RCDATA_END_TAG_NAME_STATE](cp) {\n if (isAsciiUpper(cp)) {\n this.currentToken.tagName += toAsciiLowerChar(cp);\n this.tempBuff.push(cp);\n } else if (isAsciiLower(cp)) {\n this.currentToken.tagName += toChar(cp);\n this.tempBuff.push(cp);\n } else {\n if (this.lastStartTagName === this.currentToken.tagName) {\n if (isWhitespace(cp)) {\n this.state = BEFORE_ATTRIBUTE_NAME_STATE;\n return;\n }\n\n if (cp === $.SOLIDUS) {\n this.state = SELF_CLOSING_START_TAG_STATE;\n return;\n }\n\n if (cp === $.GREATER_THAN_SIGN) {\n this.state = DATA_STATE;\n this._emitCurrentToken();\n return;\n }\n }\n\n this._emitChars('</');\n this._emitSeveralCodePoints(this.tempBuff);\n this._reconsumeInState(RCDATA_STATE);\n }\n }\n\n // RAWTEXT less-than sign state\n //------------------------------------------------------------------\n [RAWTEXT_LESS_THAN_SIGN_STATE](cp) {\n if (cp === $.SOLIDUS) {\n this.tempBuff = [];\n this.state = RAWTEXT_END_TAG_OPEN_STATE;\n } else {\n this._emitChars('<');\n this._reconsumeInState(RAWTEXT_STATE);\n }\n }\n\n // RAWTEXT end tag open state\n //------------------------------------------------------------------\n [RAWTEXT_END_TAG_OPEN_STATE](cp) {\n if (isAsciiLetter(cp)) {\n this._createEndTagToken();\n this._reconsumeInState(RAWTEXT_END_TAG_NAME_STATE);\n } else {\n this._emitChars('</');\n this._reconsumeInState(RAWTEXT_STATE);\n }\n }\n\n // RAWTEXT end tag name state\n //------------------------------------------------------------------\n [RAWTEXT_END_TAG_NAME_STATE](cp) {\n if (isAsciiUpper(cp)) {\n this.currentToken.tagName += toAsciiLowerChar(cp);\n this.tempBuff.push(cp);\n } else if (isAsciiLower(cp)) {\n this.currentToken.tagName += toChar(cp);\n this.tempBuff.push(cp);\n } else {\n if (this.lastStartTagName === this.currentToken.tagName) {\n if (isWhitespace(cp)) {\n this.state = BEFORE_ATTRIBUTE_NAME_STATE;\n return;\n }\n\n if (cp === $.SOLIDUS) {\n this.state = SELF_CLOSING_START_TAG_STATE;\n return;\n }\n\n if (cp === $.GREATER_THAN_SIGN) {\n this._emitCurrentToken();\n this.state = DATA_STATE;\n return;\n }\n }\n\n this._emitChars('</');\n this._emitSeveralCodePoints(this.tempBuff);\n this._reconsumeInState(RAWTEXT_STATE);\n }\n }\n\n // Script data less-than sign state\n //------------------------------------------------------------------\n [SCRIPT_DATA_LESS_THAN_SIGN_STATE](cp) {\n if (cp === $.SOLIDUS) {\n this.tempBuff = [];\n this.state = SCRIPT_DATA_END_TAG_OPEN_STATE;\n } else if (cp === $.EXCLAMATION_MARK) {\n this.state = SCRIPT_DATA_ESCAPE_START_STATE;\n this._emitChars('<!');\n } else {\n this._emitChars('<');\n this._reconsumeInState(SCRIPT_DATA_STATE);\n }\n }\n\n // Script data end tag open state\n //------------------------------------------------------------------\n [SCRIPT_DATA_END_TAG_OPEN_STATE](cp) {\n if (isAsciiLetter(cp)) {\n this._createEndTagToken();\n this._reconsumeInState(SCRIPT_DATA_END_TAG_NAME_STATE);\n } else {\n this._emitChars('</');\n this._reconsumeInState(SCRIPT_DATA_STATE);\n }\n }\n\n // Script data end tag name state\n //------------------------------------------------------------------\n [SCRIPT_DATA_END_TAG_NAME_STATE](cp) {\n if (isAsciiUpper(cp)) {\n this.currentToken.tagName += toAsciiLowerChar(cp);\n this.tempBuff.push(cp);\n } else if (isAsciiLower(cp)) {\n this.currentToken.tagName += toChar(cp);\n this.tempBuff.push(cp);\n } else {\n if (this.lastStartTagName === this.currentToken.tagName) {\n if (isWhitespace(cp)) {\n this.state = BEFORE_ATTRIBUTE_NAME_STATE;\n return;\n } else if (cp === $.SOLIDUS) {\n this.state = SELF_CLOSING_START_TAG_STATE;\n return;\n } else if (cp === $.GREATER_THAN_SIGN) {\n this._emitCurrentToken();\n this.state = DATA_STATE;\n return;\n }\n }\n\n this._emitChars('</');\n this._emitSeveralCodePoints(this.tempBuff);\n this._reconsumeInState(SCRIPT_DATA_STATE);\n }\n }\n\n // Script data escape start state\n //------------------------------------------------------------------\n [SCRIPT_DATA_ESCAPE_START_STATE](cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = SCRIPT_DATA_ESCAPE_START_DASH_STATE;\n this._emitChars('-');\n } else {\n this._reconsumeInState(SCRIPT_DATA_STATE);\n }\n }\n\n // Script data escape start dash state\n //------------------------------------------------------------------\n [SCRIPT_DATA_ESCAPE_START_DASH_STATE](cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = SCRIPT_DATA_ESCAPED_DASH_DASH_STATE;\n this._emitChars('-');\n } else {\n this._reconsumeInState(SCRIPT_DATA_STATE);\n }\n }\n\n // Script data escaped state\n //------------------------------------------------------------------\n [SCRIPT_DATA_ESCAPED_STATE](cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = SCRIPT_DATA_ESCAPED_DASH_STATE;\n this._emitChars('-');\n } else if (cp === $.LESS_THAN_SIGN) {\n this.state = SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE;\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(unicode.REPLACEMENT_CHARACTER);\n } else if (cp === $.EOF) {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n } else {\n this._emitCodePoint(cp);\n }\n }\n\n // Script data escaped dash state\n //------------------------------------------------------------------\n [SCRIPT_DATA_ESCAPED_DASH_STATE](cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = SCRIPT_DATA_ESCAPED_DASH_DASH_STATE;\n this._emitChars('-');\n } else if (cp === $.LESS_THAN_SIGN) {\n this.state = SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE;\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this.state = SCRIPT_DATA_ESCAPED_STATE;\n this._emitChars(unicode.REPLACEMENT_CHARACTER);\n } else if (cp === $.EOF) {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n } else {\n this.state = SCRIPT_DATA_ESCAPED_STATE;\n this._emitCodePoint(cp);\n }\n }\n\n // Script data escaped dash dash state\n //------------------------------------------------------------------\n [SCRIPT_DATA_ESCAPED_DASH_DASH_STATE](cp) {\n if (cp === $.HYPHEN_MINUS) {\n this._emitChars('-');\n } else if (cp === $.LESS_THAN_SIGN) {\n this.state = SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE;\n } else if (cp === $.GREATER_THAN_SIGN) {\n this.state = SCRIPT_DATA_STATE;\n this._emitChars('>');\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this.state = SCRIPT_DATA_ESCAPED_STATE;\n this._emitChars(unicode.REPLACEMENT_CHARACTER);\n } else if (cp === $.EOF) {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n } else {\n this.state = SCRIPT_DATA_ESCAPED_STATE;\n this._emitCodePoint(cp);\n }\n }\n\n // Script data escaped less-than sign state\n //------------------------------------------------------------------\n [SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE](cp) {\n if (cp === $.SOLIDUS) {\n this.tempBuff = [];\n this.state = SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE;\n } else if (isAsciiLetter(cp)) {\n this.tempBuff = [];\n this._emitChars('<');\n this._reconsumeInState(SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE);\n } else {\n this._emitChars('<');\n this._reconsumeInState(SCRIPT_DATA_ESCAPED_STATE);\n }\n }\n\n // Script data escaped end tag open state\n //------------------------------------------------------------------\n [SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE](cp) {\n if (isAsciiLetter(cp)) {\n this._createEndTagToken();\n this._reconsumeInState(SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE);\n } else {\n this._emitChars('</');\n this._reconsumeInState(SCRIPT_DATA_ESCAPED_STATE);\n }\n }\n\n // Script data escaped end tag name state\n //------------------------------------------------------------------\n [SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE](cp) {\n if (isAsciiUpper(cp)) {\n this.currentToken.tagName += toAsciiLowerChar(cp);\n this.tempBuff.push(cp);\n } else if (isAsciiLower(cp)) {\n this.currentToken.tagName += toChar(cp);\n this.tempBuff.push(cp);\n } else {\n if (this.lastStartTagName === this.currentToken.tagName) {\n if (isWhitespace(cp)) {\n this.state = BEFORE_ATTRIBUTE_NAME_STATE;\n return;\n }\n\n if (cp === $.SOLIDUS) {\n this.state = SELF_CLOSING_START_TAG_STATE;\n return;\n }\n\n if (cp === $.GREATER_THAN_SIGN) {\n this._emitCurrentToken();\n this.state = DATA_STATE;\n return;\n }\n }\n\n this._emitChars('</');\n this._emitSeveralCodePoints(this.tempBuff);\n this._reconsumeInState(SCRIPT_DATA_ESCAPED_STATE);\n }\n }\n\n // Script data double escape start state\n //------------------------------------------------------------------\n [SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE](cp) {\n if (isWhitespace(cp) || cp === $.SOLIDUS || cp === $.GREATER_THAN_SIGN) {\n this.state = this._isTempBufferEqualToScriptString()\n ? SCRIPT_DATA_DOUBLE_ESCAPED_STATE\n : SCRIPT_DATA_ESCAPED_STATE;\n this._emitCodePoint(cp);\n } else if (isAsciiUpper(cp)) {\n this.tempBuff.push(toAsciiLowerCodePoint(cp));\n this._emitCodePoint(cp);\n } else if (isAsciiLower(cp)) {\n this.tempBuff.push(cp);\n this._emitCodePoint(cp);\n } else {\n this._reconsumeInState(SCRIPT_DATA_ESCAPED_STATE);\n }\n }\n\n // Script data double escaped state\n //------------------------------------------------------------------\n [SCRIPT_DATA_DOUBLE_ESCAPED_STATE](cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE;\n this._emitChars('-');\n } else if (cp === $.LESS_THAN_SIGN) {\n this.state = SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE;\n this._emitChars('<');\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(unicode.REPLACEMENT_CHARACTER);\n } else if (cp === $.EOF) {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n } else {\n this._emitCodePoint(cp);\n }\n }\n\n // Script data double escaped dash state\n //------------------------------------------------------------------\n [SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE](cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE;\n this._emitChars('-');\n } else if (cp === $.LESS_THAN_SIGN) {\n this.state = SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE;\n this._emitChars('<');\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this.state = SCRIPT_DATA_DOUBLE_ESCAPED_STATE;\n this._emitChars(unicode.REPLACEMENT_CHARACTER);\n } else if (cp === $.EOF) {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n } else {\n this.state = SCRIPT_DATA_DOUBLE_ESCAPED_STATE;\n this._emitCodePoint(cp);\n }\n }\n\n // Script data double escaped dash dash state\n //------------------------------------------------------------------\n [SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE](cp) {\n if (cp === $.HYPHEN_MINUS) {\n this._emitChars('-');\n } else if (cp === $.LESS_THAN_SIGN) {\n this.state = SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE;\n this._emitChars('<');\n } else if (cp === $.GREATER_THAN_SIGN) {\n this.state = SCRIPT_DATA_STATE;\n this._emitChars('>');\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this.state = SCRIPT_DATA_DOUBLE_ESCAPED_STATE;\n this._emitChars(unicode.REPLACEMENT_CHARACTER);\n } else if (cp === $.EOF) {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n } else {\n this.state = SCRIPT_DATA_DOUBLE_ESCAPED_STATE;\n this._emitCodePoint(cp);\n }\n }\n\n // Script data double escaped less-than sign state\n //------------------------------------------------------------------\n [SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE](cp) {\n if (cp === $.SOLIDUS) {\n this.tempBuff = [];\n this.state = SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE;\n this._emitChars('/');\n } else {\n this._reconsumeInState(SCRIPT_DATA_DOUBLE_ESCAPED_STATE);\n }\n }\n\n // Script data double escape end state\n //------------------------------------------------------------------\n [SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE](cp) {\n if (isWhitespace(cp) || cp === $.SOLIDUS || cp === $.GREATER_THAN_SIGN) {\n this.state = this._isTempBufferEqualToScriptString()\n ? SCRIPT_DATA_ESCAPED_STATE\n : SCRIPT_DATA_DOUBLE_ESCAPED_STATE;\n\n this._emitCodePoint(cp);\n } else if (isAsciiUpper(cp)) {\n this.tempBuff.push(toAsciiLowerCodePoint(cp));\n this._emitCodePoint(cp);\n } else if (isAsciiLower(cp)) {\n this.tempBuff.push(cp);\n this._emitCodePoint(cp);\n } else {\n this._reconsumeInState(SCRIPT_DATA_DOUBLE_ESCAPED_STATE);\n }\n }\n\n // Before attribute name state\n //------------------------------------------------------------------\n [BEFORE_ATTRIBUTE_NAME_STATE](cp) {\n if (isWhitespace(cp)) {\n return;\n }\n\n if (cp === $.SOLIDUS || cp === $.GREATER_THAN_SIGN || cp === $.EOF) {\n this._reconsumeInState(AFTER_ATTRIBUTE_NAME_STATE);\n } else if (cp === $.EQUALS_SIGN) {\n this._err(ERR.unexpectedEqualsSignBeforeAttributeName);\n this._createAttr('=');\n this.state = ATTRIBUTE_NAME_STATE;\n } else {\n this._createAttr('');\n this._reconsumeInState(ATTRIBUTE_NAME_STATE);\n }\n }\n\n // Attribute name state\n //------------------------------------------------------------------\n [ATTRIBUTE_NAME_STATE](cp) {\n if (isWhitespace(cp) || cp === $.SOLIDUS || cp === $.GREATER_THAN_SIGN || cp === $.EOF) {\n this._leaveAttrName(AFTER_ATTRIBUTE_NAME_STATE);\n this._unconsume();\n } else if (cp === $.EQUALS_SIGN) {\n this._leaveAttrName(BEFORE_ATTRIBUTE_VALUE_STATE);\n } else if (isAsciiUpper(cp)) {\n this.currentAttr.name += toAsciiLowerChar(cp);\n } else if (cp === $.QUOTATION_MARK || cp === $.APOSTROPHE || cp === $.LESS_THAN_SIGN) {\n this._err(ERR.unexpectedCharacterInAttributeName);\n this.currentAttr.name += toChar(cp);\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.name += unicode.REPLACEMENT_CHARACTER;\n } else {\n this.currentAttr.name += toChar(cp);\n }\n }\n\n // After attribute name state\n //------------------------------------------------------------------\n [AFTER_ATTRIBUTE_NAME_STATE](cp) {\n if (isWhitespace(cp)) {\n return;\n }\n\n if (cp === $.SOLIDUS) {\n this.state = SELF_CLOSING_START_TAG_STATE;\n } else if (cp === $.EQUALS_SIGN) {\n this.state = BEFORE_ATTRIBUTE_VALUE_STATE;\n } else if (cp === $.GREATER_THAN_SIGN) {\n this.state = DATA_STATE;\n this._emitCurrentToken();\n } else if (cp === $.EOF) {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n } else {\n this._createAttr('');\n this._reconsumeInState(ATTRIBUTE_NAME_STATE);\n }\n }\n\n // Before attribute value state\n //------------------------------------------------------------------\n [BEFORE_ATTRIBUTE_VALUE_STATE](cp) {\n if (isWhitespace(cp)) {\n return;\n }\n\n if (cp === $.QUOTATION_MARK) {\n this.state = ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE;\n } else if (cp === $.APOSTROPHE) {\n this.state = ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE;\n } else if (cp === $.GREATER_THAN_SIGN) {\n this._err(ERR.missingAttributeValue);\n this.state = DATA_STATE;\n this._emitCurrentToken();\n } else {\n this._reconsumeInState(ATTRIBUTE_VALUE_UNQUOTED_STATE);\n }\n }\n\n // Attribute value (double-quoted) state\n //------------------------------------------------------------------\n [ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE](cp) {\n if (cp === $.QUOTATION_MARK) {\n this.state = AFTER_ATTRIBUTE_VALUE_QUOTED_STATE;\n } else if (cp === $.AMPERSAND) {\n this.returnState = ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE;\n this.state = CHARACTER_REFERENCE_STATE;\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.value += unicode.REPLACEMENT_CHARACTER;\n } else if (cp === $.EOF) {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n } else {\n this.currentAttr.value += toChar(cp);\n }\n }\n\n // Attribute value (single-quoted) state\n //------------------------------------------------------------------\n [ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE](cp) {\n if (cp === $.APOSTROPHE) {\n this.state = AFTER_ATTRIBUTE_VALUE_QUOTED_STATE;\n } else if (cp === $.AMPERSAND) {\n this.returnState = ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE;\n this.state = CHARACTER_REFERENCE_STATE;\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.value += unicode.REPLACEMENT_CHARACTER;\n } else if (cp === $.EOF) {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n } else {\n this.currentAttr.value += toChar(cp);\n }\n }\n\n // Attribute value (unquoted) state\n //------------------------------------------------------------------\n [ATTRIBUTE_VALUE_UNQUOTED_STATE](cp) {\n if (isWhitespace(cp)) {\n this._leaveAttrValue(BEFORE_ATTRIBUTE_NAME_STATE);\n } else if (cp === $.AMPERSAND) {\n this.returnState = ATTRIBUTE_VALUE_UNQUOTED_STATE;\n this.state = CHARACTER_REFERENCE_STATE;\n } else if (cp === $.GREATER_THAN_SIGN) {\n this._leaveAttrValue(DATA_STATE);\n this._emitCurrentToken();\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.value += unicode.REPLACEMENT_CHARACTER;\n } else if (\n cp === $.QUOTATION_MARK ||\n cp === $.APOSTROPHE ||\n cp === $.LESS_THAN_SIGN ||\n cp === $.EQUALS_SIGN ||\n cp === $.GRAVE_ACCENT\n ) {\n this._err(ERR.unexpectedCharacterInUnquotedAttributeValue);\n this.currentAttr.value += toChar(cp);\n } else if (cp === $.EOF) {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n } else {\n this.currentAttr.value += toChar(cp);\n }\n }\n\n // After attribute value (quoted) state\n //------------------------------------------------------------------\n [AFTER_ATTRIBUTE_VALUE_QUOTED_STATE](cp) {\n if (isWhitespace(cp)) {\n this._leaveAttrValue(BEFORE_ATTRIBUTE_NAME_STATE);\n } else if (cp === $.SOLIDUS) {\n this._leaveAttrValue(SELF_CLOSING_START_TAG_STATE);\n } else if (cp === $.GREATER_THAN_SIGN) {\n this._leaveAttrValue(DATA_STATE);\n this._emitCurrentToken();\n } else if (cp === $.EOF) {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n } else {\n this._err(ERR.missingWhitespaceBetweenAttributes);\n this._reconsumeInState(BEFORE_ATTRIBUTE_NAME_STATE);\n }\n }\n\n // Self-closing start tag state\n //------------------------------------------------------------------\n [SELF_CLOSING_START_TAG_STATE](cp) {\n if (cp === $.GREATER_THAN_SIGN) {\n this.currentToken.selfClosing = true;\n this.state = DATA_STATE;\n this._emitCurrentToken();\n } else if (cp === $.EOF) {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n } else {\n this._err(ERR.unexpectedSolidusInTag);\n this._reconsumeInState(BEFORE_ATTRIBUTE_NAME_STATE);\n }\n }\n\n // Bogus comment state\n //------------------------------------------------------------------\n [BOGUS_COMMENT_STATE](cp) {\n if (cp === $.GREATER_THAN_SIGN) {\n this.state = DATA_STATE;\n this._emitCurrentToken();\n } else if (cp === $.EOF) {\n this._emitCurrentToken();\n this._emitEOFToken();\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this.currentToken.data += unicode.REPLACEMENT_CHARACTER;\n } else {\n this.currentToken.data += toChar(cp);\n }\n }\n\n // Markup declaration open state\n //------------------------------------------------------------------\n [MARKUP_DECLARATION_OPEN_STATE](cp) {\n if (this._consumeSequenceIfMatch($$.DASH_DASH_STRING, cp, true)) {\n this._createCommentToken();\n this.state = COMMENT_START_STATE;\n } else if (this._consumeSequenceIfMatch($$.DOCTYPE_STRING, cp, false)) {\n this.state = DOCTYPE_STATE;\n } else if (this._consumeSequenceIfMatch($$.CDATA_START_STRING, cp, true)) {\n if (this.allowCDATA) {\n this.state = CDATA_SECTION_STATE;\n } else {\n this._err(ERR.cdataInHtmlContent);\n this._createCommentToken();\n this.currentToken.data = '[CDATA[';\n this.state = BOGUS_COMMENT_STATE;\n }\n }\n\n //NOTE: sequence lookup can be abrupted by hibernation. In that case lookup\n //results are no longer valid and we will need to start over.\n else if (!this._ensureHibernation()) {\n this._err(ERR.incorrectlyOpenedComment);\n this._createCommentToken();\n this._reconsumeInState(BOGUS_COMMENT_STATE);\n }\n }\n\n // Comment start state\n //------------------------------------------------------------------\n [COMMENT_START_STATE](cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = COMMENT_START_DASH_STATE;\n } else if (cp === $.GREATER_THAN_SIGN) {\n this._err(ERR.abruptClosingOfEmptyComment);\n this.state = DATA_STATE;\n this._emitCurrentToken();\n } else {\n this._reconsumeInState(COMMENT_STATE);\n }\n }\n\n // Comment start dash state\n //------------------------------------------------------------------\n [COMMENT_START_DASH_STATE](cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = COMMENT_END_STATE;\n } else if (cp === $.GREATER_THAN_SIGN) {\n this._err(ERR.abruptClosingOfEmptyComment);\n this.state = DATA_STATE;\n this._emitCurrentToken();\n } else if (cp === $.EOF) {\n this._err(ERR.eofInComment);\n this._emitCurrentToken();\n this._emitEOFToken();\n } else {\n this.currentToken.data += '-';\n this._reconsumeInState(COMMENT_STATE);\n }\n }\n\n // Comment state\n //------------------------------------------------------------------\n [COMMENT_STATE](cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = COMMENT_END_DASH_STATE;\n } else if (cp === $.LESS_THAN_SIGN) {\n this.currentToken.data += '<';\n this.state = COMMENT_LESS_THAN_SIGN_STATE;\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this.currentToken.data += unicode.REPLACEMENT_CHARACTER;\n } else if (cp === $.EOF) {\n this._err(ERR.eofInComment);\n this._emitCurrentToken();\n this._emitEOFToken();\n } else {\n this.currentToken.data += toChar(cp);\n }\n }\n\n // Comment less-than sign state\n //------------------------------------------------------------------\n [COMMENT_LESS_THAN_SIGN_STATE](cp) {\n if (cp === $.EXCLAMATION_MARK) {\n this.currentToken.data += '!';\n this.state = COMMENT_LESS_THAN_SIGN_BANG_STATE;\n } else if (cp === $.LESS_THAN_SIGN) {\n this.currentToken.data += '!';\n } else {\n this._reconsumeInState(COMMENT_STATE);\n }\n }\n\n // Comment less-than sign bang state\n //------------------------------------------------------------------\n [COMMENT_LESS_THAN_SIGN_BANG_STATE](cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE;\n } else {\n this._reconsumeInState(COMMENT_STATE);\n }\n }\n\n // Comment less-than sign bang dash state\n //------------------------------------------------------------------\n [COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE](cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE;\n } else {\n this._reconsumeInState(COMMENT_END_DASH_STATE);\n }\n }\n\n // Comment less-than sign bang dash dash state\n //------------------------------------------------------------------\n [COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE](cp) {\n if (cp !== $.GREATER_THAN_SIGN && cp !== $.EOF) {\n this._err(ERR.nestedComment);\n }\n\n this._reconsumeInState(COMMENT_END_STATE);\n }\n\n // Comment end dash state\n //------------------------------------------------------------------\n [COMMENT_END_DASH_STATE](cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = COMMENT_END_STATE;\n } else if (cp === $.EOF) {\n this._err(ERR.eofInComment);\n this._emitCurrentToken();\n this._emitEOFToken();\n } else {\n this.currentToken.data += '-';\n this._reconsumeInState(COMMENT_STATE);\n }\n }\n\n // Comment end state\n //------------------------------------------------------------------\n [COMMENT_END_STATE](cp) {\n if (cp === $.GREATER_THAN_SIGN) {\n this.state = DATA_STATE;\n this._emitCurrentToken();\n } else if (cp === $.EXCLAMATION_MARK) {\n this.state = COMMENT_END_BANG_STATE;\n } else if (cp === $.HYPHEN_MINUS) {\n this.currentToken.data += '-';\n } else if (cp === $.EOF) {\n this._err(ERR.eofInComment);\n this._emitCurrentToken();\n this._emitEOFToken();\n } else {\n this.currentToken.data += '--';\n this._reconsumeInState(COMMENT_STATE);\n }\n }\n\n // Comment end bang state\n //------------------------------------------------------------------\n [COMMENT_END_BANG_STATE](cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.currentToken.data += '--!';\n this.state = COMMENT_END_DASH_STATE;\n } else if (cp === $.GREATER_THAN_SIGN) {\n this._err(ERR.incorrectlyClosedComment);\n this.state = DATA_STATE;\n this._emitCurrentToken();\n } else if (cp === $.EOF) {\n this._err(ERR.eofInComment);\n this._emitCurrentToken();\n this._emitEOFToken();\n } else {\n this.currentToken.data += '--!';\n this._reconsumeInState(COMMENT_STATE);\n }\n }\n\n // DOCTYPE state\n //------------------------------------------------------------------\n [DOCTYPE_STATE](cp) {\n if (isWhitespace(cp)) {\n this.state = BEFORE_DOCTYPE_NAME_STATE;\n } else if (cp === $.GREATER_THAN_SIGN) {\n this._reconsumeInState(BEFORE_DOCTYPE_NAME_STATE);\n } else if (cp === $.EOF) {\n this._err(ERR.eofInDoctype);\n this._createDoctypeToken(null);\n this.currentToken.forceQuirks = true;\n this._emitCurrentToken();\n this._emitEOFToken();\n } else {\n this._err(ERR.missingWhitespaceBeforeDoctypeName);\n this._reconsumeInState(BEFORE_DOCTYPE_NAME_STATE);\n }\n }\n\n // Before DOCTYPE name state\n //------------------------------------------------------------------\n [BEFORE_DOCTYPE_NAME_STATE](cp) {\n if (isWhitespace(cp)) {\n return;\n }\n\n if (isAsciiUpper(cp)) {\n this._createDoctypeToken(toAsciiLowerChar(cp));\n this.state = DOCTYPE_NAME_STATE;\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this._createDoctypeToken(unicode.REPLACEMENT_CHARACTER);\n this.state = DOCTYPE_NAME_STATE;\n } else if (cp === $.GREATER_THAN_SIGN) {\n this._err(ERR.missingDoctypeName);\n this._createDoctypeToken(null);\n this.currentToken.forceQuirks = true;\n this._emitCurrentToken();\n this.state = DATA_STATE;\n } else if (cp === $.EOF) {\n this._err(ERR.eofInDoctype);\n this._createDoctypeToken(null);\n this.currentToken.forceQuirks = true;\n this._emitCurrentToken();\n this._emitEOFToken();\n } else {\n this._createDoctypeToken(toChar(cp));\n this.state = DOCTYPE_NAME_STATE;\n }\n }\n\n // DOCTYPE name state\n //------------------------------------------------------------------\n [DOCTYPE_NAME_STATE](cp) {\n if (isWhitespace(cp)) {\n this.state = AFTER_DOCTYPE_NAME_STATE;\n } else if (cp === $.GREATER_THAN_SIGN) {\n this.state = DATA_STATE;\n this._emitCurrentToken();\n } else if (isAsciiUpper(cp)) {\n this.currentToken.name += toAsciiLowerChar(cp);\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this.currentToken.name += unicode.REPLACEMENT_CHARACTER;\n } else if (cp === $.EOF) {\n this._err(ERR.eofInDoctype);\n this.currentToken.forceQuirks = true;\n this._emitCurrentToken();\n this._emitEOFToken();\n } else {\n this.currentToken.name += toChar(cp);\n }\n }\n\n // After DOCTYPE name state\n //------------------------------------------------------------------\n [AFTER_DOCTYPE_NAME_STATE](cp) {\n if (isWhitespace(cp)) {\n return;\n }\n\n if (cp === $.GREATER_THAN_SIGN) {\n this.state = DATA_STATE;\n this._emitCurrentToken();\n } else if (cp === $.EOF) {\n this._err(ERR.eofInDoctype);\n this.currentToken.forceQuirks = true;\n this._emitCurrentToken();\n this._emitEOFToken();\n } else if (this._consumeSequenceIfMatch($$.PUBLIC_STRING, cp, false)) {\n this.state = AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE;\n } else if (this._consumeSequenceIfMatch($$.SYSTEM_STRING, cp, false)) {\n this.state = AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE;\n }\n //NOTE: sequence lookup can be abrupted by hibernation. In that case lookup\n //results are no longer valid and we will need to start over.\n else if (!this._ensureHibernation()) {\n this._err(ERR.invalidCharacterSequenceAfterDoctypeName);\n this.currentToken.forceQuirks = true;\n this._reconsumeInState(BOGUS_DOCTYPE_STATE);\n }\n }\n\n // After DOCTYPE public keyword state\n //------------------------------------------------------------------\n [AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE](cp) {\n if (isWhitespace(cp)) {\n this.state = BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE;\n } else if (cp === $.QUOTATION_MARK) {\n this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);\n this.currentToken.publicId = '';\n this.state = DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE;\n } else if (cp === $.APOSTROPHE) {\n this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);\n this.currentToken.publicId = '';\n this.state = DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE;\n } else if (cp === $.GREATER_THAN_SIGN) {\n this._err(ERR.missingDoctypePublicIdentifier);\n this.currentToken.forceQuirks = true;\n this.state = DATA_STATE;\n this._emitCurrentToken();\n } else if (cp === $.EOF) {\n this._err(ERR.eofInDoctype);\n this.currentToken.forceQuirks = true;\n this._emitCurrentToken();\n this._emitEOFToken();\n } else {\n this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);\n this.currentToken.forceQuirks = true;\n this._reconsumeInState(BOGUS_DOCTYPE_STATE);\n }\n }\n\n // Before DOCTYPE public identifier state\n //------------------------------------------------------------------\n [BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE](cp) {\n if (isWhitespace(cp)) {\n return;\n }\n\n if (cp === $.QUOTATION_MARK) {\n this.currentToken.publicId = '';\n this.state = DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE;\n } else if (cp === $.APOSTROPHE) {\n this.currentToken.publicId = '';\n this.state = DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE;\n } else if (cp === $.GREATER_THAN_SIGN) {\n this._err(ERR.missingDoctypePublicIdentifier);\n this.currentToken.forceQuirks = true;\n this.state = DATA_STATE;\n this._emitCurrentToken();\n } else if (cp === $.EOF) {\n this._err(ERR.eofInDoctype);\n this.currentToken.forceQuirks = true;\n this._emitCurrentToken();\n this._emitEOFToken();\n } else {\n this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);\n this.currentToken.forceQuirks = true;\n this._reconsumeInState(BOGUS_DOCTYPE_STATE);\n }\n }\n\n // DOCTYPE public identifier (double-quoted) state\n //------------------------------------------------------------------\n [DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE](cp) {\n if (cp === $.QUOTATION_MARK) {\n this.state = AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE;\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this.currentToken.publicId += unicode.REPLACEMENT_CHARACTER;\n } else if (cp === $.GREATER_THAN_SIGN) {\n this._err(ERR.abruptDoctypePublicIdentifier);\n this.currentToken.forceQuirks = true;\n this._emitCurrentToken();\n this.state = DATA_STATE;\n } else if (cp === $.EOF) {\n this._err(ERR.eofInDoctype);\n this.currentToken.forceQuirks = true;\n this._emitCurrentToken();\n this._emitEOFToken();\n } else {\n this.currentToken.publicId += toChar(cp);\n }\n }\n\n // DOCTYPE public identifier (single-quoted) state\n //------------------------------------------------------------------\n [DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE](cp) {\n if (cp === $.APOSTROPHE) {\n this.state = AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE;\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this.currentToken.publicId += unicode.REPLACEMENT_CHARACTER;\n } else if (cp === $.GREATER_THAN_SIGN) {\n this._err(ERR.abruptDoctypePublicIdentifier);\n this.currentToken.forceQuirks = true;\n this._emitCurrentToken();\n this.state = DATA_STATE;\n } else if (cp === $.EOF) {\n this._err(ERR.eofInDoctype);\n this.currentToken.forceQuirks = true;\n this._emitCurrentToken();\n this._emitEOFToken();\n } else {\n this.currentToken.publicId += toChar(cp);\n }\n }\n\n // After DOCTYPE public identifier state\n //------------------------------------------------------------------\n [AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE](cp) {\n if (isWhitespace(cp)) {\n this.state = BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE;\n } else if (cp === $.GREATER_THAN_SIGN) {\n this.state = DATA_STATE;\n this._emitCurrentToken();\n } else if (cp === $.QUOTATION_MARK) {\n this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);\n this.currentToken.systemId = '';\n this.state = DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE;\n } else if (cp === $.APOSTROPHE) {\n this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);\n this.currentToken.systemId = '';\n this.state = DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE;\n } else if (cp === $.EOF) {\n this._err(ERR.eofInDoctype);\n this.currentToken.forceQuirks = true;\n this._emitCurrentToken();\n this._emitEOFToken();\n } else {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n this.currentToken.forceQuirks = true;\n this._reconsumeInState(BOGUS_DOCTYPE_STATE);\n }\n }\n\n // Between DOCTYPE public and system identifiers state\n //------------------------------------------------------------------\n [BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE](cp) {\n if (isWhitespace(cp)) {\n return;\n }\n\n if (cp === $.GREATER_THAN_SIGN) {\n this._emitCurrentToken();\n this.state = DATA_STATE;\n } else if (cp === $.QUOTATION_MARK) {\n this.currentToken.systemId = '';\n this.state = DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE;\n } else if (cp === $.APOSTROPHE) {\n this.currentToken.systemId = '';\n this.state = DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE;\n } else if (cp === $.EOF) {\n this._err(ERR.eofInDoctype);\n this.currentToken.forceQuirks = true;\n this._emitCurrentToken();\n this._emitEOFToken();\n } else {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n this.currentToken.forceQuirks = true;\n this._reconsumeInState(BOGUS_DOCTYPE_STATE);\n }\n }\n\n // After DOCTYPE system keyword state\n //------------------------------------------------------------------\n [AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE](cp) {\n if (isWhitespace(cp)) {\n this.state = BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE;\n } else if (cp === $.QUOTATION_MARK) {\n this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);\n this.currentToken.systemId = '';\n this.state = DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE;\n } else if (cp === $.APOSTROPHE) {\n this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);\n this.currentToken.systemId = '';\n this.state = DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE;\n } else if (cp === $.GREATER_THAN_SIGN) {\n this._err(ERR.missingDoctypeSystemIdentifier);\n this.currentToken.forceQuirks = true;\n this.state = DATA_STATE;\n this._emitCurrentToken();\n } else if (cp === $.EOF) {\n this._err(ERR.eofInDoctype);\n this.currentToken.forceQuirks = true;\n this._emitCurrentToken();\n this._emitEOFToken();\n } else {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n this.currentToken.forceQuirks = true;\n this._reconsumeInState(BOGUS_DOCTYPE_STATE);\n }\n }\n\n // Before DOCTYPE system identifier state\n //------------------------------------------------------------------\n [BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE](cp) {\n if (isWhitespace(cp)) {\n return;\n }\n\n if (cp === $.QUOTATION_MARK) {\n this.currentToken.systemId = '';\n this.state = DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE;\n } else if (cp === $.APOSTROPHE) {\n this.currentToken.systemId = '';\n this.state = DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE;\n } else if (cp === $.GREATER_THAN_SIGN) {\n this._err(ERR.missingDoctypeSystemIdentifier);\n this.currentToken.forceQuirks = true;\n this.state = DATA_STATE;\n this._emitCurrentToken();\n } else if (cp === $.EOF) {\n this._err(ERR.eofInDoctype);\n this.currentToken.forceQuirks = true;\n this._emitCurrentToken();\n this._emitEOFToken();\n } else {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n this.currentToken.forceQuirks = true;\n this._reconsumeInState(BOGUS_DOCTYPE_STATE);\n }\n }\n\n // DOCTYPE system identifier (double-quoted) state\n //------------------------------------------------------------------\n [DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE](cp) {\n if (cp === $.QUOTATION_MARK) {\n this.state = AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE;\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this.currentToken.systemId += unicode.REPLACEMENT_CHARACTER;\n } else if (cp === $.GREATER_THAN_SIGN) {\n this._err(ERR.abruptDoctypeSystemIdentifier);\n this.currentToken.forceQuirks = true;\n this._emitCurrentToken();\n this.state = DATA_STATE;\n } else if (cp === $.EOF) {\n this._err(ERR.eofInDoctype);\n this.currentToken.forceQuirks = true;\n this._emitCurrentToken();\n this._emitEOFToken();\n } else {\n this.currentToken.systemId += toChar(cp);\n }\n }\n\n // DOCTYPE system identifier (single-quoted) state\n //------------------------------------------------------------------\n [DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE](cp) {\n if (cp === $.APOSTROPHE) {\n this.state = AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE;\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n this.currentToken.systemId += unicode.REPLACEMENT_CHARACTER;\n } else if (cp === $.GREATER_THAN_SIGN) {\n this._err(ERR.abruptDoctypeSystemIdentifier);\n this.currentToken.forceQuirks = true;\n this._emitCurrentToken();\n this.state = DATA_STATE;\n } else if (cp === $.EOF) {\n this._err(ERR.eofInDoctype);\n this.currentToken.forceQuirks = true;\n this._emitCurrentToken();\n this._emitEOFToken();\n } else {\n this.currentToken.systemId += toChar(cp);\n }\n }\n\n // After DOCTYPE system identifier state\n //------------------------------------------------------------------\n [AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE](cp) {\n if (isWhitespace(cp)) {\n return;\n }\n\n if (cp === $.GREATER_THAN_SIGN) {\n this._emitCurrentToken();\n this.state = DATA_STATE;\n } else if (cp === $.EOF) {\n this._err(ERR.eofInDoctype);\n this.currentToken.forceQuirks = true;\n this._emitCurrentToken();\n this._emitEOFToken();\n } else {\n this._err(ERR.unexpectedCharacterAfterDoctypeSystemIdentifier);\n this._reconsumeInState(BOGUS_DOCTYPE_STATE);\n }\n }\n\n // Bogus DOCTYPE state\n //------------------------------------------------------------------\n [BOGUS_DOCTYPE_STATE](cp) {\n if (cp === $.GREATER_THAN_SIGN) {\n this._emitCurrentToken();\n this.state = DATA_STATE;\n } else if (cp === $.NULL) {\n this._err(ERR.unexpectedNullCharacter);\n } else if (cp === $.EOF) {\n this._emitCurrentToken();\n this._emitEOFToken();\n }\n }\n\n // CDATA section state\n //------------------------------------------------------------------\n [CDATA_SECTION_STATE](cp) {\n if (cp === $.RIGHT_SQUARE_BRACKET) {\n this.state = CDATA_SECTION_BRACKET_STATE;\n } else if (cp === $.EOF) {\n this._err(ERR.eofInCdata);\n this._emitEOFToken();\n } else {\n this._emitCodePoint(cp);\n }\n }\n\n // CDATA section bracket state\n //------------------------------------------------------------------\n [CDATA_SECTION_BRACKET_STATE](cp) {\n if (cp === $.RIGHT_SQUARE_BRACKET) {\n this.state = CDATA_SECTION_END_STATE;\n } else {\n this._emitChars(']');\n this._reconsumeInState(CDATA_SECTION_STATE);\n }\n }\n\n // CDATA section end state\n //------------------------------------------------------------------\n [CDATA_SECTION_END_STATE](cp) {\n if (cp === $.GREATER_THAN_SIGN) {\n this.state = DATA_STATE;\n } else if (cp === $.RIGHT_SQUARE_BRACKET) {\n this._emitChars(']');\n } else {\n this._emitChars(']]');\n this._reconsumeInState(CDATA_SECTION_STATE);\n }\n }\n\n // Character reference state\n //------------------------------------------------------------------\n [CHARACTER_REFERENCE_STATE](cp) {\n this.tempBuff = [$.AMPERSAND];\n\n if (cp === $.NUMBER_SIGN) {\n this.tempBuff.push(cp);\n this.state = NUMERIC_CHARACTER_REFERENCE_STATE;\n } else if (isAsciiAlphaNumeric(cp)) {\n this._reconsumeInState(NAMED_CHARACTER_REFERENCE_STATE);\n } else {\n this._flushCodePointsConsumedAsCharacterReference();\n this._reconsumeInState(this.returnState);\n }\n }\n\n // Named character reference state\n //------------------------------------------------------------------\n [NAMED_CHARACTER_REFERENCE_STATE](cp) {\n const matchResult = this._matchNamedCharacterReference(cp);\n\n //NOTE: matching can be abrupted by hibernation. In that case match\n //results are no longer valid and we will need to start over.\n if (this._ensureHibernation()) {\n this.tempBuff = [$.AMPERSAND];\n } else if (matchResult) {\n const withSemicolon = this.tempBuff[this.tempBuff.length - 1] === $.SEMICOLON;\n\n if (!this._isCharacterReferenceAttributeQuirk(withSemicolon)) {\n if (!withSemicolon) {\n this._errOnNextCodePoint(ERR.missingSemicolonAfterCharacterReference);\n }\n\n this.tempBuff = matchResult;\n }\n\n this._flushCodePointsConsumedAsCharacterReference();\n this.state = this.returnState;\n } else {\n this._flushCodePointsConsumedAsCharacterReference();\n this.state = AMBIGUOUS_AMPERSAND_STATE;\n }\n }\n\n // Ambiguos ampersand state\n //------------------------------------------------------------------\n [AMBIGUOUS_AMPERSAND_STATE](cp) {\n if (isAsciiAlphaNumeric(cp)) {\n if (this._isCharacterReferenceInAttribute()) {\n this.currentAttr.value += toChar(cp);\n } else {\n this._emitCodePoint(cp);\n }\n } else {\n if (cp === $.SEMICOLON) {\n this._err(ERR.unknownNamedCharacterReference);\n }\n\n this._reconsumeInState(this.returnState);\n }\n }\n\n // Numeric character reference state\n //------------------------------------------------------------------\n [NUMERIC_CHARACTER_REFERENCE_STATE](cp) {\n this.charRefCode = 0;\n\n if (cp === $.LATIN_SMALL_X || cp === $.LATIN_CAPITAL_X) {\n this.tempBuff.push(cp);\n this.state = HEXADEMICAL_CHARACTER_REFERENCE_START_STATE;\n } else {\n this._reconsumeInState(DECIMAL_CHARACTER_REFERENCE_START_STATE);\n }\n }\n\n // Hexademical character reference start state\n //------------------------------------------------------------------\n [HEXADEMICAL_CHARACTER_REFERENCE_START_STATE](cp) {\n if (isAsciiHexDigit(cp)) {\n this._reconsumeInState(HEXADEMICAL_CHARACTER_REFERENCE_STATE);\n } else {\n this._err(ERR.absenceOfDigitsInNumericCharacterReference);\n this._flushCodePointsConsumedAsCharacterReference();\n this._reconsumeInState(this.returnState);\n }\n }\n\n // Decimal character reference start state\n //------------------------------------------------------------------\n [DECIMAL_CHARACTER_REFERENCE_START_STATE](cp) {\n if (isAsciiDigit(cp)) {\n this._reconsumeInState(DECIMAL_CHARACTER_REFERENCE_STATE);\n } else {\n this._err(ERR.absenceOfDigitsInNumericCharacterReference);\n this._flushCodePointsConsumedAsCharacterReference();\n this._reconsumeInState(this.returnState);\n }\n }\n\n // Hexademical character reference state\n //------------------------------------------------------------------\n [HEXADEMICAL_CHARACTER_REFERENCE_STATE](cp) {\n if (isAsciiUpperHexDigit(cp)) {\n this.charRefCode = this.charRefCode * 16 + cp - 0x37;\n } else if (isAsciiLowerHexDigit(cp)) {\n this.charRefCode = this.charRefCode * 16 + cp - 0x57;\n } else if (isAsciiDigit(cp)) {\n this.charRefCode = this.charRefCode * 16 + cp - 0x30;\n } else if (cp === $.SEMICOLON) {\n this.state = NUMERIC_CHARACTER_REFERENCE_END_STATE;\n } else {\n this._err(ERR.missingSemicolonAfterCharacterReference);\n this._reconsumeInState(NUMERIC_CHARACTER_REFERENCE_END_STATE);\n }\n }\n\n // Decimal character reference state\n //------------------------------------------------------------------\n [DECIMAL_CHARACTER_REFERENCE_STATE](cp) {\n if (isAsciiDigit(cp)) {\n this.charRefCode = this.charRefCode * 10 + cp - 0x30;\n } else if (cp === $.SEMICOLON) {\n this.state = NUMERIC_CHARACTER_REFERENCE_END_STATE;\n } else {\n this._err(ERR.missingSemicolonAfterCharacterReference);\n this._reconsumeInState(NUMERIC_CHARACTER_REFERENCE_END_STATE);\n }\n }\n\n // Numeric character reference end state\n //------------------------------------------------------------------\n [NUMERIC_CHARACTER_REFERENCE_END_STATE]() {\n if (this.charRefCode === $.NULL) {\n this._err(ERR.nullCharacterReference);\n this.charRefCode = $.REPLACEMENT_CHARACTER;\n } else if (this.charRefCode > 0x10ffff) {\n this._err(ERR.characterReferenceOutsideUnicodeRange);\n this.charRefCode = $.REPLACEMENT_CHARACTER;\n } else if (unicode.isSurrogate(this.charRefCode)) {\n this._err(ERR.surrogateCharacterReference);\n this.charRefCode = $.REPLACEMENT_CHARACTER;\n } else if (unicode.isUndefinedCodePoint(this.charRefCode)) {\n this._err(ERR.noncharacterCharacterReference);\n } else if (unicode.isControlCodePoint(this.charRefCode) || this.charRefCode === $.CARRIAGE_RETURN) {\n this._err(ERR.controlCharacterReference);\n\n const replacement = C1_CONTROLS_REFERENCE_REPLACEMENTS[this.charRefCode];\n\n if (replacement) {\n this.charRefCode = replacement;\n }\n }\n\n this.tempBuff = [this.charRefCode];\n\n this._flushCodePointsConsumedAsCharacterReference();\n this._reconsumeInState(this.returnState);\n }\n}\n\n//Token types\nTokenizer.CHARACTER_TOKEN = 'CHARACTER_TOKEN';\nTokenizer.NULL_CHARACTER_TOKEN = 'NULL_CHARACTER_TOKEN';\nTokenizer.WHITESPACE_CHARACTER_TOKEN = 'WHITESPACE_CHARACTER_TOKEN';\nTokenizer.START_TAG_TOKEN = 'START_TAG_TOKEN';\nTokenizer.END_TAG_TOKEN = 'END_TAG_TOKEN';\nTokenizer.COMMENT_TOKEN = 'COMMENT_TOKEN';\nTokenizer.DOCTYPE_TOKEN = 'DOCTYPE_TOKEN';\nTokenizer.EOF_TOKEN = 'EOF_TOKEN';\nTokenizer.HIBERNATION_TOKEN = 'HIBERNATION_TOKEN';\n\n//Tokenizer initial states for different modes\nTokenizer.MODE = {\n DATA: DATA_STATE,\n RCDATA: RCDATA_STATE,\n RAWTEXT: RAWTEXT_STATE,\n SCRIPT_DATA: SCRIPT_DATA_STATE,\n PLAINTEXT: PLAINTEXT_STATE\n};\n\n//Static\nTokenizer.getTokenAttr = function(token, attrName) {\n for (let i = token.attrs.length - 1; i >= 0; i--) {\n if (token.attrs[i].name === attrName) {\n return token.attrs[i].value;\n }\n }\n\n return null;\n};\n\nmodule.exports = Tokenizer;\n","'use strict';\n\nconst NS = (exports.NAMESPACES = {\n HTML: 'http://www.w3.org/1999/xhtml',\n MATHML: 'http://www.w3.org/1998/Math/MathML',\n SVG: 'http://www.w3.org/2000/svg',\n XLINK: 'http://www.w3.org/1999/xlink',\n XML: 'http://www.w3.org/XML/1998/namespace',\n XMLNS: 'http://www.w3.org/2000/xmlns/'\n});\n\nexports.ATTRS = {\n TYPE: 'type',\n ACTION: 'action',\n ENCODING: 'encoding',\n PROMPT: 'prompt',\n NAME: 'name',\n COLOR: 'color',\n FACE: 'face',\n SIZE: 'size'\n};\n\nexports.DOCUMENT_MODE = {\n NO_QUIRKS: 'no-quirks',\n QUIRKS: 'quirks',\n LIMITED_QUIRKS: 'limited-quirks'\n};\n\nconst $ = (exports.TAG_NAMES = {\n A: 'a',\n ADDRESS: 'address',\n ANNOTATION_XML: 'annotation-xml',\n APPLET: 'applet',\n AREA: 'area',\n ARTICLE: 'article',\n ASIDE: 'aside',\n\n B: 'b',\n BASE: 'base',\n BASEFONT: 'basefont',\n BGSOUND: 'bgsound',\n BIG: 'big',\n BLOCKQUOTE: 'blockquote',\n BODY: 'body',\n BR: 'br',\n BUTTON: 'button',\n\n CAPTION: 'caption',\n CENTER: 'center',\n CODE: 'code',\n COL: 'col',\n COLGROUP: 'colgroup',\n\n DD: 'dd',\n DESC: 'desc',\n DETAILS: 'details',\n DIALOG: 'dialog',\n DIR: 'dir',\n DIV: 'div',\n DL: 'dl',\n DT: 'dt',\n\n EM: 'em',\n EMBED: 'embed',\n\n FIELDSET: 'fieldset',\n FIGCAPTION: 'figcaption',\n FIGURE: 'figure',\n FONT: 'font',\n FOOTER: 'footer',\n FOREIGN_OBJECT: 'foreignObject',\n FORM: 'form',\n FRAME: 'frame',\n FRAMESET: 'frameset',\n\n H1: 'h1',\n H2: 'h2',\n H3: 'h3',\n H4: 'h4',\n H5: 'h5',\n H6: 'h6',\n HEAD: 'head',\n HEADER: 'header',\n HGROUP: 'hgroup',\n HR: 'hr',\n HTML: 'html',\n\n I: 'i',\n IMG: 'img',\n IMAGE: 'image',\n INPUT: 'input',\n IFRAME: 'iframe',\n\n KEYGEN: 'keygen',\n\n LABEL: 'label',\n LI: 'li',\n LINK: 'link',\n LISTING: 'listing',\n\n MAIN: 'main',\n MALIGNMARK: 'malignmark',\n MARQUEE: 'marquee',\n MATH: 'math',\n MENU: 'menu',\n META: 'meta',\n MGLYPH: 'mglyph',\n MI: 'mi',\n MO: 'mo',\n MN: 'mn',\n MS: 'ms',\n MTEXT: 'mtext',\n\n NAV: 'nav',\n NOBR: 'nobr',\n NOFRAMES: 'noframes',\n NOEMBED: 'noembed',\n NOSCRIPT: 'noscript',\n\n OBJECT: 'object',\n OL: 'ol',\n OPTGROUP: 'optgroup',\n OPTION: 'option',\n\n P: 'p',\n PARAM: 'param',\n PLAINTEXT: 'plaintext',\n PRE: 'pre',\n\n RB: 'rb',\n RP: 'rp',\n RT: 'rt',\n RTC: 'rtc',\n RUBY: 'ruby',\n\n S: 's',\n SCRIPT: 'script',\n SECTION: 'section',\n SELECT: 'select',\n SOURCE: 'source',\n SMALL: 'small',\n SPAN: 'span',\n STRIKE: 'strike',\n STRONG: 'strong',\n STYLE: 'style',\n SUB: 'sub',\n SUMMARY: 'summary',\n SUP: 'sup',\n\n TABLE: 'table',\n TBODY: 'tbody',\n TEMPLATE: 'template',\n TEXTAREA: 'textarea',\n TFOOT: 'tfoot',\n TD: 'td',\n TH: 'th',\n THEAD: 'thead',\n TITLE: 'title',\n TR: 'tr',\n TRACK: 'track',\n TT: 'tt',\n\n U: 'u',\n UL: 'ul',\n\n SVG: 'svg',\n\n VAR: 'var',\n\n WBR: 'wbr',\n\n XMP: 'xmp'\n});\n\nexports.SPECIAL_ELEMENTS = {\n [NS.HTML]: {\n [$.ADDRESS]: true,\n [$.APPLET]: true,\n [$.AREA]: true,\n [$.ARTICLE]: true,\n [$.ASIDE]: true,\n [$.BASE]: true,\n [$.BASEFONT]: true,\n [$.BGSOUND]: true,\n [$.BLOCKQUOTE]: true,\n [$.BODY]: true,\n [$.BR]: true,\n [$.BUTTON]: true,\n [$.CAPTION]: true,\n [$.CENTER]: true,\n [$.COL]: true,\n [$.COLGROUP]: true,\n [$.DD]: true,\n [$.DETAILS]: true,\n [$.DIR]: true,\n [$.DIV]: true,\n [$.DL]: true,\n [$.DT]: true,\n [$.EMBED]: true,\n [$.FIELDSET]: true,\n [$.FIGCAPTION]: true,\n [$.FIGURE]: true,\n [$.FOOTER]: true,\n [$.FORM]: true,\n [$.FRAME]: true,\n [$.FRAMESET]: true,\n [$.H1]: true,\n [$.H2]: true,\n [$.H3]: true,\n [$.H4]: true,\n [$.H5]: true,\n [$.H6]: true,\n [$.HEAD]: true,\n [$.HEADER]: true,\n [$.HGROUP]: true,\n [$.HR]: true,\n [$.HTML]: true,\n [$.IFRAME]: true,\n [$.IMG]: true,\n [$.INPUT]: true,\n [$.LI]: true,\n [$.LINK]: true,\n [$.LISTING]: true,\n [$.MAIN]: true,\n [$.MARQUEE]: true,\n [$.MENU]: true,\n [$.META]: true,\n [$.NAV]: true,\n [$.NOEMBED]: true,\n [$.NOFRAMES]: true,\n [$.NOSCRIPT]: true,\n [$.OBJECT]: true,\n [$.OL]: true,\n [$.P]: true,\n [$.PARAM]: true,\n [$.PLAINTEXT]: true,\n [$.PRE]: true,\n [$.SCRIPT]: true,\n [$.SECTION]: true,\n [$.SELECT]: true,\n [$.SOURCE]: true,\n [$.STYLE]: true,\n [$.SUMMARY]: true,\n [$.TABLE]: true,\n [$.TBODY]: true,\n [$.TD]: true,\n [$.TEMPLATE]: true,\n [$.TEXTAREA]: true,\n [$.TFOOT]: true,\n [$.TH]: true,\n [$.THEAD]: true,\n [$.TITLE]: true,\n [$.TR]: true,\n [$.TRACK]: true,\n [$.UL]: true,\n [$.WBR]: true,\n [$.XMP]: true\n },\n [NS.MATHML]: {\n [$.MI]: true,\n [$.MO]: true,\n [$.MN]: true,\n [$.MS]: true,\n [$.MTEXT]: true,\n [$.ANNOTATION_XML]: true\n },\n [NS.SVG]: {\n [$.TITLE]: true,\n [$.FOREIGN_OBJECT]: true,\n [$.DESC]: true\n }\n};\n","'use strict';\n\nconst HTML = require('../common/html');\n\n//Aliases\nconst $ = HTML.TAG_NAMES;\nconst NS = HTML.NAMESPACES;\n\n//Element utils\n\n//OPTIMIZATION: Integer comparisons are low-cost, so we can use very fast tag name length filters here.\n//It's faster than using dictionary.\nfunction isImpliedEndTagRequired(tn) {\n switch (tn.length) {\n case 1:\n return tn === $.P;\n\n case 2:\n return tn === $.RB || tn === $.RP || tn === $.RT || tn === $.DD || tn === $.DT || tn === $.LI;\n\n case 3:\n return tn === $.RTC;\n\n case 6:\n return tn === $.OPTION;\n\n case 8:\n return tn === $.OPTGROUP;\n }\n\n return false;\n}\n\nfunction isImpliedEndTagRequiredThoroughly(tn) {\n switch (tn.length) {\n case 1:\n return tn === $.P;\n\n case 2:\n return (\n tn === $.RB ||\n tn === $.RP ||\n tn === $.RT ||\n tn === $.DD ||\n tn === $.DT ||\n tn === $.LI ||\n tn === $.TD ||\n tn === $.TH ||\n tn === $.TR\n );\n\n case 3:\n return tn === $.RTC;\n\n case 5:\n return tn === $.TBODY || tn === $.TFOOT || tn === $.THEAD;\n\n case 6:\n return tn === $.OPTION;\n\n case 7:\n return tn === $.CAPTION;\n\n case 8:\n return tn === $.OPTGROUP || tn === $.COLGROUP;\n }\n\n return false;\n}\n\nfunction isScopingElement(tn, ns) {\n switch (tn.length) {\n case 2:\n if (tn === $.TD || tn === $.TH) {\n return ns === NS.HTML;\n } else if (tn === $.MI || tn === $.MO || tn === $.MN || tn === $.MS) {\n return ns === NS.MATHML;\n }\n\n break;\n\n case 4:\n if (tn === $.HTML) {\n return ns === NS.HTML;\n } else if (tn === $.DESC) {\n return ns === NS.SVG;\n }\n\n break;\n\n case 5:\n if (tn === $.TABLE) {\n return ns === NS.HTML;\n } else if (tn === $.MTEXT) {\n return ns === NS.MATHML;\n } else if (tn === $.TITLE) {\n return ns === NS.SVG;\n }\n\n break;\n\n case 6:\n return (tn === $.APPLET || tn === $.OBJECT) && ns === NS.HTML;\n\n case 7:\n return (tn === $.CAPTION || tn === $.MARQUEE) && ns === NS.HTML;\n\n case 8:\n return tn === $.TEMPLATE && ns === NS.HTML;\n\n case 13:\n return tn === $.FOREIGN_OBJECT && ns === NS.SVG;\n\n case 14:\n return tn === $.ANNOTATION_XML && ns === NS.MATHML;\n }\n\n return false;\n}\n\n//Stack of open elements\nclass OpenElementStack {\n constructor(document, treeAdapter) {\n this.stackTop = -1;\n this.items = [];\n this.current = document;\n this.currentTagName = null;\n this.currentTmplContent = null;\n this.tmplCount = 0;\n this.treeAdapter = treeAdapter;\n }\n\n //Index of element\n _indexOf(element) {\n let idx = -1;\n\n for (let i = this.stackTop; i >= 0; i--) {\n if (this.items[i] === element) {\n idx = i;\n break;\n }\n }\n return idx;\n }\n\n //Update current element\n _isInTemplate() {\n return this.currentTagName === $.TEMPLATE && this.treeAdapter.getNamespaceURI(this.current) === NS.HTML;\n }\n\n _updateCurrentElement() {\n this.current = this.items[this.stackTop];\n this.currentTagName = this.current && this.treeAdapter.getTagName(this.current);\n\n this.currentTmplContent = this._isInTemplate() ? this.treeAdapter.getTemplateContent(this.current) : null;\n }\n\n //Mutations\n push(element) {\n this.items[++this.stackTop] = element;\n this._updateCurrentElement();\n\n if (this._isInTemplate()) {\n this.tmplCount++;\n }\n }\n\n pop() {\n this.stackTop--;\n\n if (this.tmplCount > 0 && this._isInTemplate()) {\n this.tmplCount--;\n }\n\n this._updateCurrentElement();\n }\n\n replace(oldElement, newElement) {\n const idx = this._indexOf(oldElement);\n\n this.items[idx] = newElement;\n\n if (idx === this.stackTop) {\n this._updateCurrentElement();\n }\n }\n\n insertAfter(referenceElement, newElement) {\n const insertionIdx = this._indexOf(referenceElement) + 1;\n\n this.items.splice(insertionIdx, 0, newElement);\n\n if (insertionIdx === ++this.stackTop) {\n this._updateCurrentElement();\n }\n }\n\n popUntilTagNamePopped(tagName) {\n while (this.stackTop > -1) {\n const tn = this.currentTagName;\n const ns = this.treeAdapter.getNamespaceURI(this.current);\n\n this.pop();\n\n if (tn === tagName && ns === NS.HTML) {\n break;\n }\n }\n }\n\n popUntilElementPopped(element) {\n while (this.stackTop > -1) {\n const poppedElement = this.current;\n\n this.pop();\n\n if (poppedElement === element) {\n break;\n }\n }\n }\n\n popUntilNumberedHeaderPopped() {\n while (this.stackTop > -1) {\n const tn = this.currentTagName;\n const ns = this.treeAdapter.getNamespaceURI(this.current);\n\n this.pop();\n\n if (\n tn === $.H1 ||\n tn === $.H2 ||\n tn === $.H3 ||\n tn === $.H4 ||\n tn === $.H5 ||\n (tn === $.H6 && ns === NS.HTML)\n ) {\n break;\n }\n }\n }\n\n popUntilTableCellPopped() {\n while (this.stackTop > -1) {\n const tn = this.currentTagName;\n const ns = this.treeAdapter.getNamespaceURI(this.current);\n\n this.pop();\n\n if (tn === $.TD || (tn === $.TH && ns === NS.HTML)) {\n break;\n }\n }\n }\n\n popAllUpToHtmlElement() {\n //NOTE: here we assume that root <html> element is always first in the open element stack, so\n //we perform this fast stack clean up.\n this.stackTop = 0;\n this._updateCurrentElement();\n }\n\n clearBackToTableContext() {\n while (\n (this.currentTagName !== $.TABLE && this.currentTagName !== $.TEMPLATE && this.currentTagName !== $.HTML) ||\n this.treeAdapter.getNamespaceURI(this.current) !== NS.HTML\n ) {\n this.pop();\n }\n }\n\n clearBackToTableBodyContext() {\n while (\n (this.currentTagName !== $.TBODY &&\n this.currentTagName !== $.TFOOT &&\n this.currentTagName !== $.THEAD &&\n this.currentTagName !== $.TEMPLATE &&\n this.currentTagName !== $.HTML) ||\n this.treeAdapter.getNamespaceURI(this.current) !== NS.HTML\n ) {\n this.pop();\n }\n }\n\n clearBackToTableRowContext() {\n while (\n (this.currentTagName !== $.TR && this.currentTagName !== $.TEMPLATE && this.currentTagName !== $.HTML) ||\n this.treeAdapter.getNamespaceURI(this.current) !== NS.HTML\n ) {\n this.pop();\n }\n }\n\n remove(element) {\n for (let i = this.stackTop; i >= 0; i--) {\n if (this.items[i] === element) {\n this.items.splice(i, 1);\n this.stackTop--;\n this._updateCurrentElement();\n break;\n }\n }\n }\n\n //Search\n tryPeekProperlyNestedBodyElement() {\n //Properly nested <body> element (should be second element in stack).\n const element = this.items[1];\n\n return element && this.treeAdapter.getTagName(element) === $.BODY ? element : null;\n }\n\n contains(element) {\n return this._indexOf(element) > -1;\n }\n\n getCommonAncestor(element) {\n let elementIdx = this._indexOf(element);\n\n return --elementIdx >= 0 ? this.items[elementIdx] : null;\n }\n\n isRootHtmlElementCurrent() {\n return this.stackTop === 0 && this.currentTagName === $.HTML;\n }\n\n //Element in scope\n hasInScope(tagName) {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.treeAdapter.getTagName(this.items[i]);\n const ns = this.treeAdapter.getNamespaceURI(this.items[i]);\n\n if (tn === tagName && ns === NS.HTML) {\n return true;\n }\n\n if (isScopingElement(tn, ns)) {\n return false;\n }\n }\n\n return true;\n }\n\n hasNumberedHeaderInScope() {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.treeAdapter.getTagName(this.items[i]);\n const ns = this.treeAdapter.getNamespaceURI(this.items[i]);\n\n if (\n (tn === $.H1 || tn === $.H2 || tn === $.H3 || tn === $.H4 || tn === $.H5 || tn === $.H6) &&\n ns === NS.HTML\n ) {\n return true;\n }\n\n if (isScopingElement(tn, ns)) {\n return false;\n }\n }\n\n return true;\n }\n\n hasInListItemScope(tagName) {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.treeAdapter.getTagName(this.items[i]);\n const ns = this.treeAdapter.getNamespaceURI(this.items[i]);\n\n if (tn === tagName && ns === NS.HTML) {\n return true;\n }\n\n if (((tn === $.UL || tn === $.OL) && ns === NS.HTML) || isScopingElement(tn, ns)) {\n return false;\n }\n }\n\n return true;\n }\n\n hasInButtonScope(tagName) {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.treeAdapter.getTagName(this.items[i]);\n const ns = this.treeAdapter.getNamespaceURI(this.items[i]);\n\n if (tn === tagName && ns === NS.HTML) {\n return true;\n }\n\n if ((tn === $.BUTTON && ns === NS.HTML) || isScopingElement(tn, ns)) {\n return false;\n }\n }\n\n return true;\n }\n\n hasInTableScope(tagName) {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.treeAdapter.getTagName(this.items[i]);\n const ns = this.treeAdapter.getNamespaceURI(this.items[i]);\n\n if (ns !== NS.HTML) {\n continue;\n }\n\n if (tn === tagName) {\n return true;\n }\n\n if (tn === $.TABLE || tn === $.TEMPLATE || tn === $.HTML) {\n return false;\n }\n }\n\n return true;\n }\n\n hasTableBodyContextInTableScope() {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.treeAdapter.getTagName(this.items[i]);\n const ns = this.treeAdapter.getNamespaceURI(this.items[i]);\n\n if (ns !== NS.HTML) {\n continue;\n }\n\n if (tn === $.TBODY || tn === $.THEAD || tn === $.TFOOT) {\n return true;\n }\n\n if (tn === $.TABLE || tn === $.HTML) {\n return false;\n }\n }\n\n return true;\n }\n\n hasInSelectScope(tagName) {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.treeAdapter.getTagName(this.items[i]);\n const ns = this.treeAdapter.getNamespaceURI(this.items[i]);\n\n if (ns !== NS.HTML) {\n continue;\n }\n\n if (tn === tagName) {\n return true;\n }\n\n if (tn !== $.OPTION && tn !== $.OPTGROUP) {\n return false;\n }\n }\n\n return true;\n }\n\n //Implied end tags\n generateImpliedEndTags() {\n while (isImpliedEndTagRequired(this.currentTagName)) {\n this.pop();\n }\n }\n\n generateImpliedEndTagsThoroughly() {\n while (isImpliedEndTagRequiredThoroughly(this.currentTagName)) {\n this.pop();\n }\n }\n\n generateImpliedEndTagsWithExclusion(exclusionTagName) {\n while (isImpliedEndTagRequired(this.currentTagName) && this.currentTagName !== exclusionTagName) {\n this.pop();\n }\n }\n}\n\nmodule.exports = OpenElementStack;\n","'use strict';\n\n//Const\nconst NOAH_ARK_CAPACITY = 3;\n\n//List of formatting elements\nclass FormattingElementList {\n constructor(treeAdapter) {\n this.length = 0;\n this.entries = [];\n this.treeAdapter = treeAdapter;\n this.bookmark = null;\n }\n\n //Noah Ark's condition\n //OPTIMIZATION: at first we try to find possible candidates for exclusion using\n //lightweight heuristics without thorough attributes check.\n _getNoahArkConditionCandidates(newElement) {\n const candidates = [];\n\n if (this.length >= NOAH_ARK_CAPACITY) {\n const neAttrsLength = this.treeAdapter.getAttrList(newElement).length;\n const neTagName = this.treeAdapter.getTagName(newElement);\n const neNamespaceURI = this.treeAdapter.getNamespaceURI(newElement);\n\n for (let i = this.length - 1; i >= 0; i--) {\n const entry = this.entries[i];\n\n if (entry.type === FormattingElementList.MARKER_ENTRY) {\n break;\n }\n\n const element = entry.element;\n const elementAttrs = this.treeAdapter.getAttrList(element);\n\n const isCandidate =\n this.treeAdapter.getTagName(element) === neTagName &&\n this.treeAdapter.getNamespaceURI(element) === neNamespaceURI &&\n elementAttrs.length === neAttrsLength;\n\n if (isCandidate) {\n candidates.push({ idx: i, attrs: elementAttrs });\n }\n }\n }\n\n return candidates.length < NOAH_ARK_CAPACITY ? [] : candidates;\n }\n\n _ensureNoahArkCondition(newElement) {\n const candidates = this._getNoahArkConditionCandidates(newElement);\n let cLength = candidates.length;\n\n if (cLength) {\n const neAttrs = this.treeAdapter.getAttrList(newElement);\n const neAttrsLength = neAttrs.length;\n const neAttrsMap = Object.create(null);\n\n //NOTE: build attrs map for the new element so we can perform fast lookups\n for (let i = 0; i < neAttrsLength; i++) {\n const neAttr = neAttrs[i];\n\n neAttrsMap[neAttr.name] = neAttr.value;\n }\n\n for (let i = 0; i < neAttrsLength; i++) {\n for (let j = 0; j < cLength; j++) {\n const cAttr = candidates[j].attrs[i];\n\n if (neAttrsMap[cAttr.name] !== cAttr.value) {\n candidates.splice(j, 1);\n cLength--;\n }\n\n if (candidates.length < NOAH_ARK_CAPACITY) {\n return;\n }\n }\n }\n\n //NOTE: remove bottommost candidates until Noah's Ark condition will not be met\n for (let i = cLength - 1; i >= NOAH_ARK_CAPACITY - 1; i--) {\n this.entries.splice(candidates[i].idx, 1);\n this.length--;\n }\n }\n }\n\n //Mutations\n insertMarker() {\n this.entries.push({ type: FormattingElementList.MARKER_ENTRY });\n this.length++;\n }\n\n pushElement(element, token) {\n this._ensureNoahArkCondition(element);\n\n this.entries.push({\n type: FormattingElementList.ELEMENT_ENTRY,\n element: element,\n token: token\n });\n\n this.length++;\n }\n\n insertElementAfterBookmark(element, token) {\n let bookmarkIdx = this.length - 1;\n\n for (; bookmarkIdx >= 0; bookmarkIdx--) {\n if (this.entries[bookmarkIdx] === this.bookmark) {\n break;\n }\n }\n\n this.entries.splice(bookmarkIdx + 1, 0, {\n type: FormattingElementList.ELEMENT_ENTRY,\n element: element,\n token: token\n });\n\n this.length++;\n }\n\n removeEntry(entry) {\n for (let i = this.length - 1; i >= 0; i--) {\n if (this.entries[i] === entry) {\n this.entries.splice(i, 1);\n this.length--;\n break;\n }\n }\n }\n\n clearToLastMarker() {\n while (this.length) {\n const entry = this.entries.pop();\n\n this.length--;\n\n if (entry.type === FormattingElementList.MARKER_ENTRY) {\n break;\n }\n }\n }\n\n //Search\n getElementEntryInScopeWithTagName(tagName) {\n for (let i = this.length - 1; i >= 0; i--) {\n const entry = this.entries[i];\n\n if (entry.type === FormattingElementList.MARKER_ENTRY) {\n return null;\n }\n\n if (this.treeAdapter.getTagName(entry.element) === tagName) {\n return entry;\n }\n }\n\n return null;\n }\n\n getElementEntry(element) {\n for (let i = this.length - 1; i >= 0; i--) {\n const entry = this.entries[i];\n\n if (entry.type === FormattingElementList.ELEMENT_ENTRY && entry.element === element) {\n return entry;\n }\n }\n\n return null;\n }\n}\n\n//Entry types\nFormattingElementList.MARKER_ENTRY = 'MARKER_ENTRY';\nFormattingElementList.ELEMENT_ENTRY = 'ELEMENT_ENTRY';\n\nmodule.exports = FormattingElementList;\n","'use strict';\n\nclass Mixin {\n constructor(host) {\n const originalMethods = {};\n const overriddenMethods = this._getOverriddenMethods(this, originalMethods);\n\n for (const key of Object.keys(overriddenMethods)) {\n if (typeof overriddenMethods[key] === 'function') {\n originalMethods[key] = host[key];\n host[key] = overriddenMethods[key];\n }\n }\n }\n\n _getOverriddenMethods() {\n throw new Error('Not implemented');\n }\n}\n\nMixin.install = function(host, Ctor, opts) {\n if (!host.__mixins) {\n host.__mixins = [];\n }\n\n for (let i = 0; i < host.__mixins.length; i++) {\n if (host.__mixins[i].constructor === Ctor) {\n return host.__mixins[i];\n }\n }\n\n const mixin = new Ctor(host, opts);\n\n host.__mixins.push(mixin);\n\n return mixin;\n};\n\nmodule.exports = Mixin;\n","'use strict';\n\nconst Mixin = require('../../utils/mixin');\n\nclass PositionTrackingPreprocessorMixin extends Mixin {\n constructor(preprocessor) {\n super(preprocessor);\n\n this.preprocessor = preprocessor;\n this.isEol = false;\n this.lineStartPos = 0;\n this.droppedBufferSize = 0;\n\n this.offset = 0;\n this.col = 0;\n this.line = 1;\n }\n\n _getOverriddenMethods(mxn, orig) {\n return {\n advance() {\n const pos = this.pos + 1;\n const ch = this.html[pos];\n\n //NOTE: LF should be in the last column of the line\n if (mxn.isEol) {\n mxn.isEol = false;\n mxn.line++;\n mxn.lineStartPos = pos;\n }\n\n if (ch === '\\n' || (ch === '\\r' && this.html[pos + 1] !== '\\n')) {\n mxn.isEol = true;\n }\n\n mxn.col = pos - mxn.lineStartPos + 1;\n mxn.offset = mxn.droppedBufferSize + pos;\n\n return orig.advance.call(this);\n },\n\n retreat() {\n orig.retreat.call(this);\n\n mxn.isEol = false;\n mxn.col = this.pos - mxn.lineStartPos + 1;\n },\n\n dropParsedChunk() {\n const prevPos = this.pos;\n\n orig.dropParsedChunk.call(this);\n\n const reduction = prevPos - this.pos;\n\n mxn.lineStartPos -= reduction;\n mxn.droppedBufferSize += reduction;\n mxn.offset = mxn.droppedBufferSize + this.pos;\n }\n };\n }\n}\n\nmodule.exports = PositionTrackingPreprocessorMixin;\n","'use strict';\n\nconst Mixin = require('../../utils/mixin');\nconst Tokenizer = require('../../tokenizer');\nconst PositionTrackingPreprocessorMixin = require('../position-tracking/preprocessor-mixin');\n\nclass LocationInfoTokenizerMixin extends Mixin {\n constructor(tokenizer) {\n super(tokenizer);\n\n this.tokenizer = tokenizer;\n this.posTracker = Mixin.install(tokenizer.preprocessor, PositionTrackingPreprocessorMixin);\n this.currentAttrLocation = null;\n this.ctLoc = null;\n }\n\n _getCurrentLocation() {\n return {\n startLine: this.posTracker.line,\n startCol: this.posTracker.col,\n startOffset: this.posTracker.offset,\n endLine: -1,\n endCol: -1,\n endOffset: -1\n };\n }\n\n _attachCurrentAttrLocationInfo() {\n this.currentAttrLocation.endLine = this.posTracker.line;\n this.currentAttrLocation.endCol = this.posTracker.col;\n this.currentAttrLocation.endOffset = this.posTracker.offset;\n\n const currentToken = this.tokenizer.currentToken;\n const currentAttr = this.tokenizer.currentAttr;\n\n if (!currentToken.location.attrs) {\n currentToken.location.attrs = Object.create(null);\n }\n\n currentToken.location.attrs[currentAttr.name] = this.currentAttrLocation;\n }\n\n _getOverriddenMethods(mxn, orig) {\n const methods = {\n _createStartTagToken() {\n orig._createStartTagToken.call(this);\n this.currentToken.location = mxn.ctLoc;\n },\n\n _createEndTagToken() {\n orig._createEndTagToken.call(this);\n this.currentToken.location = mxn.ctLoc;\n },\n\n _createCommentToken() {\n orig._createCommentToken.call(this);\n this.currentToken.location = mxn.ctLoc;\n },\n\n _createDoctypeToken(initialName) {\n orig._createDoctypeToken.call(this, initialName);\n this.currentToken.location = mxn.ctLoc;\n },\n\n _createCharacterToken(type, ch) {\n orig._createCharacterToken.call(this, type, ch);\n this.currentCharacterToken.location = mxn.ctLoc;\n },\n\n _createEOFToken() {\n orig._createEOFToken.call(this);\n this.currentToken.location = mxn._getCurrentLocation();\n },\n\n _createAttr(attrNameFirstCh) {\n orig._createAttr.call(this, attrNameFirstCh);\n mxn.currentAttrLocation = mxn._getCurrentLocation();\n },\n\n _leaveAttrName(toState) {\n orig._leaveAttrName.call(this, toState);\n mxn._attachCurrentAttrLocationInfo();\n },\n\n _leaveAttrValue(toState) {\n orig._leaveAttrValue.call(this, toState);\n mxn._attachCurrentAttrLocationInfo();\n },\n\n _emitCurrentToken() {\n const ctLoc = this.currentToken.location;\n\n //NOTE: if we have pending character token make it's end location equal to the\n //current token's start location.\n if (this.currentCharacterToken) {\n this.currentCharacterToken.location.endLine = ctLoc.startLine;\n this.currentCharacterToken.location.endCol = ctLoc.startCol;\n this.currentCharacterToken.location.endOffset = ctLoc.startOffset;\n }\n\n if (this.currentToken.type === Tokenizer.EOF_TOKEN) {\n ctLoc.endLine = ctLoc.startLine;\n ctLoc.endCol = ctLoc.startCol;\n ctLoc.endOffset = ctLoc.startOffset;\n } else {\n ctLoc.endLine = mxn.posTracker.line;\n ctLoc.endCol = mxn.posTracker.col + 1;\n ctLoc.endOffset = mxn.posTracker.offset + 1;\n }\n\n orig._emitCurrentToken.call(this);\n },\n\n _emitCurrentCharacterToken() {\n const ctLoc = this.currentCharacterToken && this.currentCharacterToken.location;\n\n //NOTE: if we have character token and it's location wasn't set in the _emitCurrentToken(),\n //then set it's location at the current preprocessor position.\n //We don't need to increment preprocessor position, since character token\n //emission is always forced by the start of the next character token here.\n //So, we already have advanced position.\n if (ctLoc && ctLoc.endOffset === -1) {\n ctLoc.endLine = mxn.posTracker.line;\n ctLoc.endCol = mxn.posTracker.col;\n ctLoc.endOffset = mxn.posTracker.offset;\n }\n\n orig._emitCurrentCharacterToken.call(this);\n }\n };\n\n //NOTE: patch initial states for each mode to obtain token start position\n Object.keys(Tokenizer.MODE).forEach(modeName => {\n const state = Tokenizer.MODE[modeName];\n\n methods[state] = function(cp) {\n mxn.ctLoc = mxn._getCurrentLocation();\n orig[state].call(this, cp);\n };\n });\n\n return methods;\n }\n}\n\nmodule.exports = LocationInfoTokenizerMixin;\n","'use strict';\n\nconst Mixin = require('../../utils/mixin');\n\nclass LocationInfoOpenElementStackMixin extends Mixin {\n constructor(stack, opts) {\n super(stack);\n\n this.onItemPop = opts.onItemPop;\n }\n\n _getOverriddenMethods(mxn, orig) {\n return {\n pop() {\n mxn.onItemPop(this.current);\n orig.pop.call(this);\n },\n\n popAllUpToHtmlElement() {\n for (let i = this.stackTop; i > 0; i--) {\n mxn.onItemPop(this.items[i]);\n }\n\n orig.popAllUpToHtmlElement.call(this);\n },\n\n remove(element) {\n mxn.onItemPop(this.current);\n orig.remove.call(this, element);\n }\n };\n }\n}\n\nmodule.exports = LocationInfoOpenElementStackMixin;\n","'use strict';\n\nconst Mixin = require('../../utils/mixin');\nconst Tokenizer = require('../../tokenizer');\nconst LocationInfoTokenizerMixin = require('./tokenizer-mixin');\nconst LocationInfoOpenElementStackMixin = require('./open-element-stack-mixin');\nconst HTML = require('../../common/html');\n\n//Aliases\nconst $ = HTML.TAG_NAMES;\n\nclass LocationInfoParserMixin extends Mixin {\n constructor(parser) {\n super(parser);\n\n this.parser = parser;\n this.treeAdapter = this.parser.treeAdapter;\n this.posTracker = null;\n this.lastStartTagToken = null;\n this.lastFosterParentingLocation = null;\n this.currentToken = null;\n }\n\n _setStartLocation(element) {\n let loc = null;\n\n if (this.lastStartTagToken) {\n loc = Object.assign({}, this.lastStartTagToken.location);\n loc.startTag = this.lastStartTagToken.location;\n }\n\n this.treeAdapter.setNodeSourceCodeLocation(element, loc);\n }\n\n _setEndLocation(element, closingToken) {\n const loc = this.treeAdapter.getNodeSourceCodeLocation(element);\n\n if (loc) {\n if (closingToken.location) {\n const ctLoc = closingToken.location;\n const tn = this.treeAdapter.getTagName(element);\n\n // NOTE: For cases like <p> <p> </p> - First 'p' closes without a closing\n // tag and for cases like <td> <p> </td> - 'p' closes without a closing tag.\n const isClosingEndTag = closingToken.type === Tokenizer.END_TAG_TOKEN && tn === closingToken.tagName;\n const endLoc = {};\n if (isClosingEndTag) {\n endLoc.endTag = Object.assign({}, ctLoc);\n endLoc.endLine = ctLoc.endLine;\n endLoc.endCol = ctLoc.endCol;\n endLoc.endOffset = ctLoc.endOffset;\n } else {\n endLoc.endLine = ctLoc.startLine;\n endLoc.endCol = ctLoc.startCol;\n endLoc.endOffset = ctLoc.startOffset;\n }\n\n this.treeAdapter.updateNodeSourceCodeLocation(element, endLoc);\n }\n }\n }\n\n _getOverriddenMethods(mxn, orig) {\n return {\n _bootstrap(document, fragmentContext) {\n orig._bootstrap.call(this, document, fragmentContext);\n\n mxn.lastStartTagToken = null;\n mxn.lastFosterParentingLocation = null;\n mxn.currentToken = null;\n\n const tokenizerMixin = Mixin.install(this.tokenizer, LocationInfoTokenizerMixin);\n\n mxn.posTracker = tokenizerMixin.posTracker;\n\n Mixin.install(this.openElements, LocationInfoOpenElementStackMixin, {\n onItemPop: function(element) {\n mxn._setEndLocation(element, mxn.currentToken);\n }\n });\n },\n\n _runParsingLoop(scriptHandler) {\n orig._runParsingLoop.call(this, scriptHandler);\n\n // NOTE: generate location info for elements\n // that remains on open element stack\n for (let i = this.openElements.stackTop; i >= 0; i--) {\n mxn._setEndLocation(this.openElements.items[i], mxn.currentToken);\n }\n },\n\n //Token processing\n _processTokenInForeignContent(token) {\n mxn.currentToken = token;\n orig._processTokenInForeignContent.call(this, token);\n },\n\n _processToken(token) {\n mxn.currentToken = token;\n orig._processToken.call(this, token);\n\n //NOTE: <body> and <html> are never popped from the stack, so we need to updated\n //their end location explicitly.\n const requireExplicitUpdate =\n token.type === Tokenizer.END_TAG_TOKEN &&\n (token.tagName === $.HTML || (token.tagName === $.BODY && this.openElements.hasInScope($.BODY)));\n\n if (requireExplicitUpdate) {\n for (let i = this.openElements.stackTop; i >= 0; i--) {\n const element = this.openElements.items[i];\n\n if (this.treeAdapter.getTagName(element) === token.tagName) {\n mxn._setEndLocation(element, token);\n break;\n }\n }\n }\n },\n\n //Doctype\n _setDocumentType(token) {\n orig._setDocumentType.call(this, token);\n\n const documentChildren = this.treeAdapter.getChildNodes(this.document);\n const cnLength = documentChildren.length;\n\n for (let i = 0; i < cnLength; i++) {\n const node = documentChildren[i];\n\n if (this.treeAdapter.isDocumentTypeNode(node)) {\n this.treeAdapter.setNodeSourceCodeLocation(node, token.location);\n break;\n }\n }\n },\n\n //Elements\n _attachElementToTree(element) {\n //NOTE: _attachElementToTree is called from _appendElement, _insertElement and _insertTemplate methods.\n //So we will use token location stored in this methods for the element.\n mxn._setStartLocation(element);\n mxn.lastStartTagToken = null;\n orig._attachElementToTree.call(this, element);\n },\n\n _appendElement(token, namespaceURI) {\n mxn.lastStartTagToken = token;\n orig._appendElement.call(this, token, namespaceURI);\n },\n\n _insertElement(token, namespaceURI) {\n mxn.lastStartTagToken = token;\n orig._insertElement.call(this, token, namespaceURI);\n },\n\n _insertTemplate(token) {\n mxn.lastStartTagToken = token;\n orig._insertTemplate.call(this, token);\n\n const tmplContent = this.treeAdapter.getTemplateContent(this.openElements.current);\n\n this.treeAdapter.setNodeSourceCodeLocation(tmplContent, null);\n },\n\n _insertFakeRootElement() {\n orig._insertFakeRootElement.call(this);\n this.treeAdapter.setNodeSourceCodeLocation(this.openElements.current, null);\n },\n\n //Comments\n _appendCommentNode(token, parent) {\n orig._appendCommentNode.call(this, token, parent);\n\n const children = this.treeAdapter.getChildNodes(parent);\n const commentNode = children[children.length - 1];\n\n this.treeAdapter.setNodeSourceCodeLocation(commentNode, token.location);\n },\n\n //Text\n _findFosterParentingLocation() {\n //NOTE: store last foster parenting location, so we will be able to find inserted text\n //in case of foster parenting\n mxn.lastFosterParentingLocation = orig._findFosterParentingLocation.call(this);\n\n return mxn.lastFosterParentingLocation;\n },\n\n _insertCharacters(token) {\n orig._insertCharacters.call(this, token);\n\n const hasFosterParent = this._shouldFosterParentOnInsertion();\n\n const parent =\n (hasFosterParent && mxn.lastFosterParentingLocation.parent) ||\n this.openElements.currentTmplContent ||\n this.openElements.current;\n\n const siblings = this.treeAdapter.getChildNodes(parent);\n\n const textNodeIdx =\n hasFosterParent && mxn.lastFosterParentingLocation.beforeElement\n ? siblings.indexOf(mxn.lastFosterParentingLocation.beforeElement) - 1\n : siblings.length - 1;\n\n const textNode = siblings[textNodeIdx];\n\n //NOTE: if we have location assigned by another token, then just update end position\n const tnLoc = this.treeAdapter.getNodeSourceCodeLocation(textNode);\n\n if (tnLoc) {\n const { endLine, endCol, endOffset } = token.location;\n this.treeAdapter.updateNodeSourceCodeLocation(textNode, { endLine, endCol, endOffset });\n } else {\n this.treeAdapter.setNodeSourceCodeLocation(textNode, token.location);\n }\n }\n };\n }\n}\n\nmodule.exports = LocationInfoParserMixin;\n","'use strict';\n\nconst Mixin = require('../../utils/mixin');\n\nclass ErrorReportingMixinBase extends Mixin {\n constructor(host, opts) {\n super(host);\n\n this.posTracker = null;\n this.onParseError = opts.onParseError;\n }\n\n _setErrorLocation(err) {\n err.startLine = err.endLine = this.posTracker.line;\n err.startCol = err.endCol = this.posTracker.col;\n err.startOffset = err.endOffset = this.posTracker.offset;\n }\n\n _reportError(code) {\n const err = {\n code: code,\n startLine: -1,\n startCol: -1,\n startOffset: -1,\n endLine: -1,\n endCol: -1,\n endOffset: -1\n };\n\n this._setErrorLocation(err);\n this.onParseError(err);\n }\n\n _getOverriddenMethods(mxn) {\n return {\n _err(code) {\n mxn._reportError(code);\n }\n };\n }\n}\n\nmodule.exports = ErrorReportingMixinBase;\n","'use strict';\n\nconst ErrorReportingMixinBase = require('./mixin-base');\nconst PositionTrackingPreprocessorMixin = require('../position-tracking/preprocessor-mixin');\nconst Mixin = require('../../utils/mixin');\n\nclass ErrorReportingPreprocessorMixin extends ErrorReportingMixinBase {\n constructor(preprocessor, opts) {\n super(preprocessor, opts);\n\n this.posTracker = Mixin.install(preprocessor, PositionTrackingPreprocessorMixin);\n this.lastErrOffset = -1;\n }\n\n _reportError(code) {\n //NOTE: avoid reporting error twice on advance/retreat\n if (this.lastErrOffset !== this.posTracker.offset) {\n this.lastErrOffset = this.posTracker.offset;\n super._reportError(code);\n }\n }\n}\n\nmodule.exports = ErrorReportingPreprocessorMixin;\n","'use strict';\n\nconst ErrorReportingMixinBase = require('./mixin-base');\nconst ErrorReportingPreprocessorMixin = require('./preprocessor-mixin');\nconst Mixin = require('../../utils/mixin');\n\nclass ErrorReportingTokenizerMixin extends ErrorReportingMixinBase {\n constructor(tokenizer, opts) {\n super(tokenizer, opts);\n\n const preprocessorMixin = Mixin.install(tokenizer.preprocessor, ErrorReportingPreprocessorMixin, opts);\n\n this.posTracker = preprocessorMixin.posTracker;\n }\n}\n\nmodule.exports = ErrorReportingTokenizerMixin;\n","'use strict';\n\nconst ErrorReportingMixinBase = require('./mixin-base');\nconst ErrorReportingTokenizerMixin = require('./tokenizer-mixin');\nconst LocationInfoTokenizerMixin = require('../location-info/tokenizer-mixin');\nconst Mixin = require('../../utils/mixin');\n\nclass ErrorReportingParserMixin extends ErrorReportingMixinBase {\n constructor(parser, opts) {\n super(parser, opts);\n\n this.opts = opts;\n this.ctLoc = null;\n this.locBeforeToken = false;\n }\n\n _setErrorLocation(err) {\n if (this.ctLoc) {\n err.startLine = this.ctLoc.startLine;\n err.startCol = this.ctLoc.startCol;\n err.startOffset = this.ctLoc.startOffset;\n\n err.endLine = this.locBeforeToken ? this.ctLoc.startLine : this.ctLoc.endLine;\n err.endCol = this.locBeforeToken ? this.ctLoc.startCol : this.ctLoc.endCol;\n err.endOffset = this.locBeforeToken ? this.ctLoc.startOffset : this.ctLoc.endOffset;\n }\n }\n\n _getOverriddenMethods(mxn, orig) {\n return {\n _bootstrap(document, fragmentContext) {\n orig._bootstrap.call(this, document, fragmentContext);\n\n Mixin.install(this.tokenizer, ErrorReportingTokenizerMixin, mxn.opts);\n Mixin.install(this.tokenizer, LocationInfoTokenizerMixin);\n },\n\n _processInputToken(token) {\n mxn.ctLoc = token.location;\n\n orig._processInputToken.call(this, token);\n },\n\n _err(code, options) {\n mxn.locBeforeToken = options && options.beforeToken;\n mxn._reportError(code);\n }\n };\n }\n}\n\nmodule.exports = ErrorReportingParserMixin;\n","'use strict';\n\nconst { DOCUMENT_MODE } = require('../common/html');\n\n//Node construction\nexports.createDocument = function() {\n return {\n nodeName: '#document',\n mode: DOCUMENT_MODE.NO_QUIRKS,\n childNodes: []\n };\n};\n\nexports.createDocumentFragment = function() {\n return {\n nodeName: '#document-fragment',\n childNodes: []\n };\n};\n\nexports.createElement = function(tagName, namespaceURI, attrs) {\n return {\n nodeName: tagName,\n tagName: tagName,\n attrs: attrs,\n namespaceURI: namespaceURI,\n childNodes: [],\n parentNode: null\n };\n};\n\nexports.createCommentNode = function(data) {\n return {\n nodeName: '#comment',\n data: data,\n parentNode: null\n };\n};\n\nconst createTextNode = function(value) {\n return {\n nodeName: '#text',\n value: value,\n parentNode: null\n };\n};\n\n//Tree mutation\nconst appendChild = (exports.appendChild = function(parentNode, newNode) {\n parentNode.childNodes.push(newNode);\n newNode.parentNode = parentNode;\n});\n\nconst insertBefore = (exports.insertBefore = function(parentNode, newNode, referenceNode) {\n const insertionIdx = parentNode.childNodes.indexOf(referenceNode);\n\n parentNode.childNodes.splice(insertionIdx, 0, newNode);\n newNode.parentNode = parentNode;\n});\n\nexports.setTemplateContent = function(templateElement, contentElement) {\n templateElement.content = contentElement;\n};\n\nexports.getTemplateContent = function(templateElement) {\n return templateElement.content;\n};\n\nexports.setDocumentType = function(document, name, publicId, systemId) {\n let doctypeNode = null;\n\n for (let i = 0; i < document.childNodes.length; i++) {\n if (document.childNodes[i].nodeName === '#documentType') {\n doctypeNode = document.childNodes[i];\n break;\n }\n }\n\n if (doctypeNode) {\n doctypeNode.name = name;\n doctypeNode.publicId = publicId;\n doctypeNode.systemId = systemId;\n } else {\n appendChild(document, {\n nodeName: '#documentType',\n name: name,\n publicId: publicId,\n systemId: systemId\n });\n }\n};\n\nexports.setDocumentMode = function(document, mode) {\n document.mode = mode;\n};\n\nexports.getDocumentMode = function(document) {\n return document.mode;\n};\n\nexports.detachNode = function(node) {\n if (node.parentNode) {\n const idx = node.parentNode.childNodes.indexOf(node);\n\n node.parentNode.childNodes.splice(idx, 1);\n node.parentNode = null;\n }\n};\n\nexports.insertText = function(parentNode, text) {\n if (parentNode.childNodes.length) {\n const prevNode = parentNode.childNodes[parentNode.childNodes.length - 1];\n\n if (prevNode.nodeName === '#text') {\n prevNode.value += text;\n return;\n }\n }\n\n appendChild(parentNode, createTextNode(text));\n};\n\nexports.insertTextBefore = function(parentNode, text, referenceNode) {\n const prevNode = parentNode.childNodes[parentNode.childNodes.indexOf(referenceNode) - 1];\n\n if (prevNode && prevNode.nodeName === '#text') {\n prevNode.value += text;\n } else {\n insertBefore(parentNode, createTextNode(text), referenceNode);\n }\n};\n\nexports.adoptAttributes = function(recipient, attrs) {\n const recipientAttrsMap = [];\n\n for (let i = 0; i < recipient.attrs.length; i++) {\n recipientAttrsMap.push(recipient.attrs[i].name);\n }\n\n for (let j = 0; j < attrs.length; j++) {\n if (recipientAttrsMap.indexOf(attrs[j].name) === -1) {\n recipient.attrs.push(attrs[j]);\n }\n }\n};\n\n//Tree traversing\nexports.getFirstChild = function(node) {\n return node.childNodes[0];\n};\n\nexports.getChildNodes = function(node) {\n return node.childNodes;\n};\n\nexports.getParentNode = function(node) {\n return node.parentNode;\n};\n\nexports.getAttrList = function(element) {\n return element.attrs;\n};\n\n//Node data\nexports.getTagName = function(element) {\n return element.tagName;\n};\n\nexports.getNamespaceURI = function(element) {\n return element.namespaceURI;\n};\n\nexports.getTextNodeContent = function(textNode) {\n return textNode.value;\n};\n\nexports.getCommentNodeContent = function(commentNode) {\n return commentNode.data;\n};\n\nexports.getDocumentTypeNodeName = function(doctypeNode) {\n return doctypeNode.name;\n};\n\nexports.getDocumentTypeNodePublicId = function(doctypeNode) {\n return doctypeNode.publicId;\n};\n\nexports.getDocumentTypeNodeSystemId = function(doctypeNode) {\n return doctypeNode.systemId;\n};\n\n//Node types\nexports.isTextNode = function(node) {\n return node.nodeName === '#text';\n};\n\nexports.isCommentNode = function(node) {\n return node.nodeName === '#comment';\n};\n\nexports.isDocumentTypeNode = function(node) {\n return node.nodeName === '#documentType';\n};\n\nexports.isElementNode = function(node) {\n return !!node.tagName;\n};\n\n// Source code location\nexports.setNodeSourceCodeLocation = function(node, location) {\n node.sourceCodeLocation = location;\n};\n\nexports.getNodeSourceCodeLocation = function(node) {\n return node.sourceCodeLocation;\n};\n\nexports.updateNodeSourceCodeLocation = function(node, endLocation) {\n node.sourceCodeLocation = Object.assign(node.sourceCodeLocation, endLocation);\n};\n","'use strict';\n\nmodule.exports = function mergeOptions(defaults, options) {\n options = options || Object.create(null);\n\n return [defaults, options].reduce((merged, optObj) => {\n Object.keys(optObj).forEach(key => {\n merged[key] = optObj[key];\n });\n\n return merged;\n }, Object.create(null));\n};\n","'use strict';\n\nconst { DOCUMENT_MODE } = require('./html');\n\n//Const\nconst VALID_DOCTYPE_NAME = 'html';\nconst VALID_SYSTEM_ID = 'about:legacy-compat';\nconst QUIRKS_MODE_SYSTEM_ID = 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd';\n\nconst QUIRKS_MODE_PUBLIC_ID_PREFIXES = [\n '+//silmaril//dtd html pro v0r11 19970101//',\n '-//as//dtd html 3.0 aswedit + extensions//',\n '-//advasoft ltd//dtd html 3.0 aswedit + extensions//',\n '-//ietf//dtd html 2.0 level 1//',\n '-//ietf//dtd html 2.0 level 2//',\n '-//ietf//dtd html 2.0 strict level 1//',\n '-//ietf//dtd html 2.0 strict level 2//',\n '-//ietf//dtd html 2.0 strict//',\n '-//ietf//dtd html 2.0//',\n '-//ietf//dtd html 2.1e//',\n '-//ietf//dtd html 3.0//',\n '-//ietf//dtd html 3.2 final//',\n '-//ietf//dtd html 3.2//',\n '-//ietf//dtd html 3//',\n '-//ietf//dtd html level 0//',\n '-//ietf//dtd html level 1//',\n '-//ietf//dtd html level 2//',\n '-//ietf//dtd html level 3//',\n '-//ietf//dtd html strict level 0//',\n '-//ietf//dtd html strict level 1//',\n '-//ietf//dtd html strict level 2//',\n '-//ietf//dtd html strict level 3//',\n '-//ietf//dtd html strict//',\n '-//ietf//dtd html//',\n '-//metrius//dtd metrius presentational//',\n '-//microsoft//dtd internet explorer 2.0 html strict//',\n '-//microsoft//dtd internet explorer 2.0 html//',\n '-//microsoft//dtd internet explorer 2.0 tables//',\n '-//microsoft//dtd internet explorer 3.0 html strict//',\n '-//microsoft//dtd internet explorer 3.0 html//',\n '-//microsoft//dtd internet explorer 3.0 tables//',\n '-//netscape comm. corp.//dtd html//',\n '-//netscape comm. corp.//dtd strict html//',\n \"-//o'reilly and associates//dtd html 2.0//\",\n \"-//o'reilly and associates//dtd html extended 1.0//\",\n \"-//o'reilly and associates//dtd html extended relaxed 1.0//\",\n '-//sq//dtd html 2.0 hotmetal + extensions//',\n '-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//',\n '-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//',\n '-//spyglass//dtd html 2.0 extended//',\n '-//sun microsystems corp.//dtd hotjava html//',\n '-//sun microsystems corp.//dtd hotjava strict html//',\n '-//w3c//dtd html 3 1995-03-24//',\n '-//w3c//dtd html 3.2 draft//',\n '-//w3c//dtd html 3.2 final//',\n '-//w3c//dtd html 3.2//',\n '-//w3c//dtd html 3.2s draft//',\n '-//w3c//dtd html 4.0 frameset//',\n '-//w3c//dtd html 4.0 transitional//',\n '-//w3c//dtd html experimental 19960712//',\n '-//w3c//dtd html experimental 970421//',\n '-//w3c//dtd w3 html//',\n '-//w3o//dtd w3 html 3.0//',\n '-//webtechs//dtd mozilla html 2.0//',\n '-//webtechs//dtd mozilla html//'\n];\n\nconst QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = QUIRKS_MODE_PUBLIC_ID_PREFIXES.concat([\n '-//w3c//dtd html 4.01 frameset//',\n '-//w3c//dtd html 4.01 transitional//'\n]);\n\nconst QUIRKS_MODE_PUBLIC_IDS = ['-//w3o//dtd w3 html strict 3.0//en//', '-/w3c/dtd html 4.0 transitional/en', 'html'];\nconst LIMITED_QUIRKS_PUBLIC_ID_PREFIXES = ['-//w3c//dtd xhtml 1.0 frameset//', '-//w3c//dtd xhtml 1.0 transitional//'];\n\nconst LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES = LIMITED_QUIRKS_PUBLIC_ID_PREFIXES.concat([\n '-//w3c//dtd html 4.01 frameset//',\n '-//w3c//dtd html 4.01 transitional//'\n]);\n\n//Utils\nfunction enquoteDoctypeId(id) {\n const quote = id.indexOf('\"') !== -1 ? \"'\" : '\"';\n\n return quote + id + quote;\n}\n\nfunction hasPrefix(publicId, prefixes) {\n for (let i = 0; i < prefixes.length; i++) {\n if (publicId.indexOf(prefixes[i]) === 0) {\n return true;\n }\n }\n\n return false;\n}\n\n//API\nexports.isConforming = function(token) {\n return (\n token.name === VALID_DOCTYPE_NAME &&\n token.publicId === null &&\n (token.systemId === null || token.systemId === VALID_SYSTEM_ID)\n );\n};\n\nexports.getDocumentMode = function(token) {\n if (token.name !== VALID_DOCTYPE_NAME) {\n return DOCUMENT_MODE.QUIRKS;\n }\n\n const systemId = token.systemId;\n\n if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) {\n return DOCUMENT_MODE.QUIRKS;\n }\n\n let publicId = token.publicId;\n\n if (publicId !== null) {\n publicId = publicId.toLowerCase();\n\n if (QUIRKS_MODE_PUBLIC_IDS.indexOf(publicId) > -1) {\n return DOCUMENT_MODE.QUIRKS;\n }\n\n let prefixes = systemId === null ? QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES : QUIRKS_MODE_PUBLIC_ID_PREFIXES;\n\n if (hasPrefix(publicId, prefixes)) {\n return DOCUMENT_MODE.QUIRKS;\n }\n\n prefixes =\n systemId === null ? LIMITED_QUIRKS_PUBLIC_ID_PREFIXES : LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES;\n\n if (hasPrefix(publicId, prefixes)) {\n return DOCUMENT_MODE.LIMITED_QUIRKS;\n }\n }\n\n return DOCUMENT_MODE.NO_QUIRKS;\n};\n\nexports.serializeContent = function(name, publicId, systemId) {\n let str = '!DOCTYPE ';\n\n if (name) {\n str += name;\n }\n\n if (publicId) {\n str += ' PUBLIC ' + enquoteDoctypeId(publicId);\n } else if (systemId) {\n str += ' SYSTEM';\n }\n\n if (systemId !== null) {\n str += ' ' + enquoteDoctypeId(systemId);\n }\n\n return str;\n};\n","'use strict';\n\nconst Tokenizer = require('../tokenizer');\nconst HTML = require('./html');\n\n//Aliases\nconst $ = HTML.TAG_NAMES;\nconst NS = HTML.NAMESPACES;\nconst ATTRS = HTML.ATTRS;\n\n//MIME types\nconst MIME_TYPES = {\n TEXT_HTML: 'text/html',\n APPLICATION_XML: 'application/xhtml+xml'\n};\n\n//Attributes\nconst DEFINITION_URL_ATTR = 'definitionurl';\nconst ADJUSTED_DEFINITION_URL_ATTR = 'definitionURL';\nconst SVG_ATTRS_ADJUSTMENT_MAP = {\n attributename: 'attributeName',\n attributetype: 'attributeType',\n basefrequency: 'baseFrequency',\n baseprofile: 'baseProfile',\n calcmode: 'calcMode',\n clippathunits: 'clipPathUnits',\n diffuseconstant: 'diffuseConstant',\n edgemode: 'edgeMode',\n filterunits: 'filterUnits',\n glyphref: 'glyphRef',\n gradienttransform: 'gradientTransform',\n gradientunits: 'gradientUnits',\n kernelmatrix: 'kernelMatrix',\n kernelunitlength: 'kernelUnitLength',\n keypoints: 'keyPoints',\n keysplines: 'keySplines',\n keytimes: 'keyTimes',\n lengthadjust: 'lengthAdjust',\n limitingconeangle: 'limitingConeAngle',\n markerheight: 'markerHeight',\n markerunits: 'markerUnits',\n markerwidth: 'markerWidth',\n maskcontentunits: 'maskContentUnits',\n maskunits: 'maskUnits',\n numoctaves: 'numOctaves',\n pathlength: 'pathLength',\n patterncontentunits: 'patternContentUnits',\n patterntransform: 'patternTransform',\n patternunits: 'patternUnits',\n pointsatx: 'pointsAtX',\n pointsaty: 'pointsAtY',\n pointsatz: 'pointsAtZ',\n preservealpha: 'preserveAlpha',\n preserveaspectratio: 'preserveAspectRatio',\n primitiveunits: 'primitiveUnits',\n refx: 'refX',\n refy: 'refY',\n repeatcount: 'repeatCount',\n repeatdur: 'repeatDur',\n requiredextensions: 'requiredExtensions',\n requiredfeatures: 'requiredFeatures',\n specularconstant: 'specularConstant',\n specularexponent: 'specularExponent',\n spreadmethod: 'spreadMethod',\n startoffset: 'startOffset',\n stddeviation: 'stdDeviation',\n stitchtiles: 'stitchTiles',\n surfacescale: 'surfaceScale',\n systemlanguage: 'systemLanguage',\n tablevalues: 'tableValues',\n targetx: 'targetX',\n targety: 'targetY',\n textlength: 'textLength',\n viewbox: 'viewBox',\n viewtarget: 'viewTarget',\n xchannelselector: 'xChannelSelector',\n ychannelselector: 'yChannelSelector',\n zoomandpan: 'zoomAndPan'\n};\n\nconst XML_ATTRS_ADJUSTMENT_MAP = {\n 'xlink:actuate': { prefix: 'xlink', name: 'actuate', namespace: NS.XLINK },\n 'xlink:arcrole': { prefix: 'xlink', name: 'arcrole', namespace: NS.XLINK },\n 'xlink:href': { prefix: 'xlink', name: 'href', namespace: NS.XLINK },\n 'xlink:role': { prefix: 'xlink', name: 'role', namespace: NS.XLINK },\n 'xlink:show': { prefix: 'xlink', name: 'show', namespace: NS.XLINK },\n 'xlink:title': { prefix: 'xlink', name: 'title', namespace: NS.XLINK },\n 'xlink:type': { prefix: 'xlink', name: 'type', namespace: NS.XLINK },\n 'xml:base': { prefix: 'xml', name: 'base', namespace: NS.XML },\n 'xml:lang': { prefix: 'xml', name: 'lang', namespace: NS.XML },\n 'xml:space': { prefix: 'xml', name: 'space', namespace: NS.XML },\n xmlns: { prefix: '', name: 'xmlns', namespace: NS.XMLNS },\n 'xmlns:xlink': { prefix: 'xmlns', name: 'xlink', namespace: NS.XMLNS }\n};\n\n//SVG tag names adjustment map\nconst SVG_TAG_NAMES_ADJUSTMENT_MAP = (exports.SVG_TAG_NAMES_ADJUSTMENT_MAP = {\n altglyph: 'altGlyph',\n altglyphdef: 'altGlyphDef',\n altglyphitem: 'altGlyphItem',\n animatecolor: 'animateColor',\n animatemotion: 'animateMotion',\n animatetransform: 'animateTransform',\n clippath: 'clipPath',\n feblend: 'feBlend',\n fecolormatrix: 'feColorMatrix',\n fecomponenttransfer: 'feComponentTransfer',\n fecomposite: 'feComposite',\n feconvolvematrix: 'feConvolveMatrix',\n fediffuselighting: 'feDiffuseLighting',\n fedisplacementmap: 'feDisplacementMap',\n fedistantlight: 'feDistantLight',\n feflood: 'feFlood',\n fefunca: 'feFuncA',\n fefuncb: 'feFuncB',\n fefuncg: 'feFuncG',\n fefuncr: 'feFuncR',\n fegaussianblur: 'feGaussianBlur',\n feimage: 'feImage',\n femerge: 'feMerge',\n femergenode: 'feMergeNode',\n femorphology: 'feMorphology',\n feoffset: 'feOffset',\n fepointlight: 'fePointLight',\n fespecularlighting: 'feSpecularLighting',\n fespotlight: 'feSpotLight',\n fetile: 'feTile',\n feturbulence: 'feTurbulence',\n foreignobject: 'foreignObject',\n glyphref: 'glyphRef',\n lineargradient: 'linearGradient',\n radialgradient: 'radialGradient',\n textpath: 'textPath'\n});\n\n//Tags that causes exit from foreign content\nconst EXITS_FOREIGN_CONTENT = {\n [$.B]: true,\n [$.BIG]: true,\n [$.BLOCKQUOTE]: true,\n [$.BODY]: true,\n [$.BR]: true,\n [$.CENTER]: true,\n [$.CODE]: true,\n [$.DD]: true,\n [$.DIV]: true,\n [$.DL]: true,\n [$.DT]: true,\n [$.EM]: true,\n [$.EMBED]: true,\n [$.H1]: true,\n [$.H2]: true,\n [$.H3]: true,\n [$.H4]: true,\n [$.H5]: true,\n [$.H6]: true,\n [$.HEAD]: true,\n [$.HR]: true,\n [$.I]: true,\n [$.IMG]: true,\n [$.LI]: true,\n [$.LISTING]: true,\n [$.MENU]: true,\n [$.META]: true,\n [$.NOBR]: true,\n [$.OL]: true,\n [$.P]: true,\n [$.PRE]: true,\n [$.RUBY]: true,\n [$.S]: true,\n [$.SMALL]: true,\n [$.SPAN]: true,\n [$.STRONG]: true,\n [$.STRIKE]: true,\n [$.SUB]: true,\n [$.SUP]: true,\n [$.TABLE]: true,\n [$.TT]: true,\n [$.U]: true,\n [$.UL]: true,\n [$.VAR]: true\n};\n\n//Check exit from foreign content\nexports.causesExit = function(startTagToken) {\n const tn = startTagToken.tagName;\n const isFontWithAttrs =\n tn === $.FONT &&\n (Tokenizer.getTokenAttr(startTagToken, ATTRS.COLOR) !== null ||\n Tokenizer.getTokenAttr(startTagToken, ATTRS.SIZE) !== null ||\n Tokenizer.getTokenAttr(startTagToken, ATTRS.FACE) !== null);\n\n return isFontWithAttrs ? true : EXITS_FOREIGN_CONTENT[tn];\n};\n\n//Token adjustments\nexports.adjustTokenMathMLAttrs = function(token) {\n for (let i = 0; i < token.attrs.length; i++) {\n if (token.attrs[i].name === DEFINITION_URL_ATTR) {\n token.attrs[i].name = ADJUSTED_DEFINITION_URL_ATTR;\n break;\n }\n }\n};\n\nexports.adjustTokenSVGAttrs = function(token) {\n for (let i = 0; i < token.attrs.length; i++) {\n const adjustedAttrName = SVG_ATTRS_ADJUSTMENT_MAP[token.attrs[i].name];\n\n if (adjustedAttrName) {\n token.attrs[i].name = adjustedAttrName;\n }\n }\n};\n\nexports.adjustTokenXMLAttrs = function(token) {\n for (let i = 0; i < token.attrs.length; i++) {\n const adjustedAttrEntry = XML_ATTRS_ADJUSTMENT_MAP[token.attrs[i].name];\n\n if (adjustedAttrEntry) {\n token.attrs[i].prefix = adjustedAttrEntry.prefix;\n token.attrs[i].name = adjustedAttrEntry.name;\n token.attrs[i].namespace = adjustedAttrEntry.namespace;\n }\n }\n};\n\nexports.adjustTokenSVGTagName = function(token) {\n const adjustedTagName = SVG_TAG_NAMES_ADJUSTMENT_MAP[token.tagName];\n\n if (adjustedTagName) {\n token.tagName = adjustedTagName;\n }\n};\n\n//Integration points\nfunction isMathMLTextIntegrationPoint(tn, ns) {\n return ns === NS.MATHML && (tn === $.MI || tn === $.MO || tn === $.MN || tn === $.MS || tn === $.MTEXT);\n}\n\nfunction isHtmlIntegrationPoint(tn, ns, attrs) {\n if (ns === NS.MATHML && tn === $.ANNOTATION_XML) {\n for (let i = 0; i < attrs.length; i++) {\n if (attrs[i].name === ATTRS.ENCODING) {\n const value = attrs[i].value.toLowerCase();\n\n return value === MIME_TYPES.TEXT_HTML || value === MIME_TYPES.APPLICATION_XML;\n }\n }\n }\n\n return ns === NS.SVG && (tn === $.FOREIGN_OBJECT || tn === $.DESC || tn === $.TITLE);\n}\n\nexports.isIntegrationPoint = function(tn, ns, attrs, foreignNS) {\n if ((!foreignNS || foreignNS === NS.HTML) && isHtmlIntegrationPoint(tn, ns, attrs)) {\n return true;\n }\n\n if ((!foreignNS || foreignNS === NS.MATHML) && isMathMLTextIntegrationPoint(tn, ns)) {\n return true;\n }\n\n return false;\n};\n","'use strict';\n\nconst Tokenizer = require('../tokenizer');\nconst OpenElementStack = require('./open-element-stack');\nconst FormattingElementList = require('./formatting-element-list');\nconst LocationInfoParserMixin = require('../extensions/location-info/parser-mixin');\nconst ErrorReportingParserMixin = require('../extensions/error-reporting/parser-mixin');\nconst Mixin = require('../utils/mixin');\nconst defaultTreeAdapter = require('../tree-adapters/default');\nconst mergeOptions = require('../utils/merge-options');\nconst doctype = require('../common/doctype');\nconst foreignContent = require('../common/foreign-content');\nconst ERR = require('../common/error-codes');\nconst unicode = require('../common/unicode');\nconst HTML = require('../common/html');\n\n//Aliases\nconst $ = HTML.TAG_NAMES;\nconst NS = HTML.NAMESPACES;\nconst ATTRS = HTML.ATTRS;\n\nconst DEFAULT_OPTIONS = {\n scriptingEnabled: true,\n sourceCodeLocationInfo: false,\n onParseError: null,\n treeAdapter: defaultTreeAdapter\n};\n\n//Misc constants\nconst HIDDEN_INPUT_TYPE = 'hidden';\n\n//Adoption agency loops iteration count\nconst AA_OUTER_LOOP_ITER = 8;\nconst AA_INNER_LOOP_ITER = 3;\n\n//Insertion modes\nconst INITIAL_MODE = 'INITIAL_MODE';\nconst BEFORE_HTML_MODE = 'BEFORE_HTML_MODE';\nconst BEFORE_HEAD_MODE = 'BEFORE_HEAD_MODE';\nconst IN_HEAD_MODE = 'IN_HEAD_MODE';\nconst IN_HEAD_NO_SCRIPT_MODE = 'IN_HEAD_NO_SCRIPT_MODE';\nconst AFTER_HEAD_MODE = 'AFTER_HEAD_MODE';\nconst IN_BODY_MODE = 'IN_BODY_MODE';\nconst TEXT_MODE = 'TEXT_MODE';\nconst IN_TABLE_MODE = 'IN_TABLE_MODE';\nconst IN_TABLE_TEXT_MODE = 'IN_TABLE_TEXT_MODE';\nconst IN_CAPTION_MODE = 'IN_CAPTION_MODE';\nconst IN_COLUMN_GROUP_MODE = 'IN_COLUMN_GROUP_MODE';\nconst IN_TABLE_BODY_MODE = 'IN_TABLE_BODY_MODE';\nconst IN_ROW_MODE = 'IN_ROW_MODE';\nconst IN_CELL_MODE = 'IN_CELL_MODE';\nconst IN_SELECT_MODE = 'IN_SELECT_MODE';\nconst IN_SELECT_IN_TABLE_MODE = 'IN_SELECT_IN_TABLE_MODE';\nconst IN_TEMPLATE_MODE = 'IN_TEMPLATE_MODE';\nconst AFTER_BODY_MODE = 'AFTER_BODY_MODE';\nconst IN_FRAMESET_MODE = 'IN_FRAMESET_MODE';\nconst AFTER_FRAMESET_MODE = 'AFTER_FRAMESET_MODE';\nconst AFTER_AFTER_BODY_MODE = 'AFTER_AFTER_BODY_MODE';\nconst AFTER_AFTER_FRAMESET_MODE = 'AFTER_AFTER_FRAMESET_MODE';\n\n//Insertion mode reset map\nconst INSERTION_MODE_RESET_MAP = {\n [$.TR]: IN_ROW_MODE,\n [$.TBODY]: IN_TABLE_BODY_MODE,\n [$.THEAD]: IN_TABLE_BODY_MODE,\n [$.TFOOT]: IN_TABLE_BODY_MODE,\n [$.CAPTION]: IN_CAPTION_MODE,\n [$.COLGROUP]: IN_COLUMN_GROUP_MODE,\n [$.TABLE]: IN_TABLE_MODE,\n [$.BODY]: IN_BODY_MODE,\n [$.FRAMESET]: IN_FRAMESET_MODE\n};\n\n//Template insertion mode switch map\nconst TEMPLATE_INSERTION_MODE_SWITCH_MAP = {\n [$.CAPTION]: IN_TABLE_MODE,\n [$.COLGROUP]: IN_TABLE_MODE,\n [$.TBODY]: IN_TABLE_MODE,\n [$.TFOOT]: IN_TABLE_MODE,\n [$.THEAD]: IN_TABLE_MODE,\n [$.COL]: IN_COLUMN_GROUP_MODE,\n [$.TR]: IN_TABLE_BODY_MODE,\n [$.TD]: IN_ROW_MODE,\n [$.TH]: IN_ROW_MODE\n};\n\n//Token handlers map for insertion modes\nconst TOKEN_HANDLERS = {\n [INITIAL_MODE]: {\n [Tokenizer.CHARACTER_TOKEN]: tokenInInitialMode,\n [Tokenizer.NULL_CHARACTER_TOKEN]: tokenInInitialMode,\n [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: ignoreToken,\n [Tokenizer.COMMENT_TOKEN]: appendComment,\n [Tokenizer.DOCTYPE_TOKEN]: doctypeInInitialMode,\n [Tokenizer.START_TAG_TOKEN]: tokenInInitialMode,\n [Tokenizer.END_TAG_TOKEN]: tokenInInitialMode,\n [Tokenizer.EOF_TOKEN]: tokenInInitialMode\n },\n [BEFORE_HTML_MODE]: {\n [Tokenizer.CHARACTER_TOKEN]: tokenBeforeHtml,\n [Tokenizer.NULL_CHARACTER_TOKEN]: tokenBeforeHtml,\n [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: ignoreToken,\n [Tokenizer.COMMENT_TOKEN]: appendComment,\n [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,\n [Tokenizer.START_TAG_TOKEN]: startTagBeforeHtml,\n [Tokenizer.END_TAG_TOKEN]: endTagBeforeHtml,\n [Tokenizer.EOF_TOKEN]: tokenBeforeHtml\n },\n [BEFORE_HEAD_MODE]: {\n [Tokenizer.CHARACTER_TOKEN]: tokenBeforeHead,\n [Tokenizer.NULL_CHARACTER_TOKEN]: tokenBeforeHead,\n [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: ignoreToken,\n [Tokenizer.COMMENT_TOKEN]: appendComment,\n [Tokenizer.DOCTYPE_TOKEN]: misplacedDoctype,\n [Tokenizer.START_TAG_TOKEN]: startTagBeforeHead,\n [Tokenizer.END_TAG_TOKEN]: endTagBeforeHead,\n [Tokenizer.EOF_TOKEN]: tokenBeforeHead\n },\n [IN_HEAD_MODE]: {\n [Tokenizer.CHARACTER_TOKEN]: tokenInHead,\n [Tokenizer.NULL_CHARACTER_TOKEN]: tokenInHead,\n [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,\n [Tokenizer.COMMENT_TOKEN]: appendComment,\n [Tokenizer.DOCTYPE_TOKEN]: misplacedDoctype,\n [Tokenizer.START_TAG_TOKEN]: startTagInHead,\n [Tokenizer.END_TAG_TOKEN]: endTagInHead,\n [Tokenizer.EOF_TOKEN]: tokenInHead\n },\n [IN_HEAD_NO_SCRIPT_MODE]: {\n [Tokenizer.CHARACTER_TOKEN]: tokenInHeadNoScript,\n [Tokenizer.NULL_CHARACTER_TOKEN]: tokenInHeadNoScript,\n [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,\n [Tokenizer.COMMENT_TOKEN]: appendComment,\n [Tokenizer.DOCTYPE_TOKEN]: misplacedDoctype,\n [Tokenizer.START_TAG_TOKEN]: startTagInHeadNoScript,\n [Tokenizer.END_TAG_TOKEN]: endTagInHeadNoScript,\n [Tokenizer.EOF_TOKEN]: tokenInHeadNoScript\n },\n [AFTER_HEAD_MODE]: {\n [Tokenizer.CHARACTER_TOKEN]: tokenAfterHead,\n [Tokenizer.NULL_CHARACTER_TOKEN]: tokenAfterHead,\n [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,\n [Tokenizer.COMMENT_TOKEN]: appendComment,\n [Tokenizer.DOCTYPE_TOKEN]: misplacedDoctype,\n [Tokenizer.START_TAG_TOKEN]: startTagAfterHead,\n [Tokenizer.END_TAG_TOKEN]: endTagAfterHead,\n [Tokenizer.EOF_TOKEN]: tokenAfterHead\n },\n [IN_BODY_MODE]: {\n [Tokenizer.CHARACTER_TOKEN]: characterInBody,\n [Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,\n [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInBody,\n [Tokenizer.COMMENT_TOKEN]: appendComment,\n [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,\n [Tokenizer.START_TAG_TOKEN]: startTagInBody,\n [Tokenizer.END_TAG_TOKEN]: endTagInBody,\n [Tokenizer.EOF_TOKEN]: eofInBody\n },\n [TEXT_MODE]: {\n [Tokenizer.CHARACTER_TOKEN]: insertCharacters,\n [Tokenizer.NULL_CHARACTER_TOKEN]: insertCharacters,\n [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,\n [Tokenizer.COMMENT_TOKEN]: ignoreToken,\n [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,\n [Tokenizer.START_TAG_TOKEN]: ignoreToken,\n [Tokenizer.END_TAG_TOKEN]: endTagInText,\n [Tokenizer.EOF_TOKEN]: eofInText\n },\n [IN_TABLE_MODE]: {\n [Tokenizer.CHARACTER_TOKEN]: characterInTable,\n [Tokenizer.NULL_CHARACTER_TOKEN]: characterInTable,\n [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: characterInTable,\n [Tokenizer.COMMENT_TOKEN]: appendComment,\n [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,\n [Tokenizer.START_TAG_TOKEN]: startTagInTable,\n [Tokenizer.END_TAG_TOKEN]: endTagInTable,\n [Tokenizer.EOF_TOKEN]: eofInBody\n },\n [IN_TABLE_TEXT_MODE]: {\n [Tokenizer.CHARACTER_TOKEN]: characterInTableText,\n [Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,\n [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInTableText,\n [Tokenizer.COMMENT_TOKEN]: tokenInTableText,\n [Tokenizer.DOCTYPE_TOKEN]: tokenInTableText,\n [Tokenizer.START_TAG_TOKEN]: tokenInTableText,\n [Tokenizer.END_TAG_TOKEN]: tokenInTableText,\n [Tokenizer.EOF_TOKEN]: tokenInTableText\n },\n [IN_CAPTION_MODE]: {\n [Tokenizer.CHARACTER_TOKEN]: characterInBody,\n [Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,\n [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInBody,\n [Tokenizer.COMMENT_TOKEN]: appendComment,\n [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,\n [Tokenizer.START_TAG_TOKEN]: startTagInCaption,\n [Tokenizer.END_TAG_TOKEN]: endTagInCaption,\n [Tokenizer.EOF_TOKEN]: eofInBody\n },\n [IN_COLUMN_GROUP_MODE]: {\n [Tokenizer.CHARACTER_TOKEN]: tokenInColumnGroup,\n [Tokenizer.NULL_CHARACTER_TOKEN]: tokenInColumnGroup,\n [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,\n [Tokenizer.COMMENT_TOKEN]: appendComment,\n [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,\n [Tokenizer.START_TAG_TOKEN]: startTagInColumnGroup,\n [Tokenizer.END_TAG_TOKEN]: endTagInColumnGroup,\n [Tokenizer.EOF_TOKEN]: eofInBody\n },\n [IN_TABLE_BODY_MODE]: {\n [Tokenizer.CHARACTER_TOKEN]: characterInTable,\n [Tokenizer.NULL_CHARACTER_TOKEN]: characterInTable,\n [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: characterInTable,\n [Tokenizer.COMMENT_TOKEN]: appendComment,\n [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,\n [Tokenizer.START_TAG_TOKEN]: startTagInTableBody,\n [Tokenizer.END_TAG_TOKEN]: endTagInTableBody,\n [Tokenizer.EOF_TOKEN]: eofInBody\n },\n [IN_ROW_MODE]: {\n [Tokenizer.CHARACTER_TOKEN]: characterInTable,\n [Tokenizer.NULL_CHARACTER_TOKEN]: characterInTable,\n [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: characterInTable,\n [Tokenizer.COMMENT_TOKEN]: appendComment,\n [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,\n [Tokenizer.START_TAG_TOKEN]: startTagInRow,\n [Tokenizer.END_TAG_TOKEN]: endTagInRow,\n [Tokenizer.EOF_TOKEN]: eofInBody\n },\n [IN_CELL_MODE]: {\n [Tokenizer.CHARACTER_TOKEN]: characterInBody,\n [Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,\n [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInBody,\n [Tokenizer.COMMENT_TOKEN]: appendComment,\n [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,\n [Tokenizer.START_TAG_TOKEN]: startTagInCell,\n [Tokenizer.END_TAG_TOKEN]: endTagInCell,\n [Tokenizer.EOF_TOKEN]: eofInBody\n },\n [IN_SELECT_MODE]: {\n [Tokenizer.CHARACTER_TOKEN]: insertCharacters,\n [Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,\n [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,\n [Tokenizer.COMMENT_TOKEN]: appendComment,\n [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,\n [Tokenizer.START_TAG_TOKEN]: startTagInSelect,\n [Tokenizer.END_TAG_TOKEN]: endTagInSelect,\n [Tokenizer.EOF_TOKEN]: eofInBody\n },\n [IN_SELECT_IN_TABLE_MODE]: {\n [Tokenizer.CHARACTER_TOKEN]: insertCharacters,\n [Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,\n [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,\n [Tokenizer.COMMENT_TOKEN]: appendComment,\n [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,\n [Tokenizer.START_TAG_TOKEN]: startTagInSelectInTable,\n [Tokenizer.END_TAG_TOKEN]: endTagInSelectInTable,\n [Tokenizer.EOF_TOKEN]: eofInBody\n },\n [IN_TEMPLATE_MODE]: {\n [Tokenizer.CHARACTER_TOKEN]: characterInBody,\n [Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,\n [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInBody,\n [Tokenizer.COMMENT_TOKEN]: appendComment,\n [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,\n [Tokenizer.START_TAG_TOKEN]: startTagInTemplate,\n [Tokenizer.END_TAG_TOKEN]: endTagInTemplate,\n [Tokenizer.EOF_TOKEN]: eofInTemplate\n },\n [AFTER_BODY_MODE]: {\n [Tokenizer.CHARACTER_TOKEN]: tokenAfterBody,\n [Tokenizer.NULL_CHARACTER_TOKEN]: tokenAfterBody,\n [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInBody,\n [Tokenizer.COMMENT_TOKEN]: appendCommentToRootHtmlElement,\n [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,\n [Tokenizer.START_TAG_TOKEN]: startTagAfterBody,\n [Tokenizer.END_TAG_TOKEN]: endTagAfterBody,\n [Tokenizer.EOF_TOKEN]: stopParsing\n },\n [IN_FRAMESET_MODE]: {\n [Tokenizer.CHARACTER_TOKEN]: ignoreToken,\n [Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,\n [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,\n [Tokenizer.COMMENT_TOKEN]: appendComment,\n [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,\n [Tokenizer.START_TAG_TOKEN]: startTagInFrameset,\n [Tokenizer.END_TAG_TOKEN]: endTagInFrameset,\n [Tokenizer.EOF_TOKEN]: stopParsing\n },\n [AFTER_FRAMESET_MODE]: {\n [Tokenizer.CHARACTER_TOKEN]: ignoreToken,\n [Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,\n [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,\n [Tokenizer.COMMENT_TOKEN]: appendComment,\n [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,\n [Tokenizer.START_TAG_TOKEN]: startTagAfterFrameset,\n [Tokenizer.END_TAG_TOKEN]: endTagAfterFrameset,\n [Tokenizer.EOF_TOKEN]: stopParsing\n },\n [AFTER_AFTER_BODY_MODE]: {\n [Tokenizer.CHARACTER_TOKEN]: tokenAfterAfterBody,\n [Tokenizer.NULL_CHARACTER_TOKEN]: tokenAfterAfterBody,\n [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInBody,\n [Tokenizer.COMMENT_TOKEN]: appendCommentToDocument,\n [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,\n [Tokenizer.START_TAG_TOKEN]: startTagAfterAfterBody,\n [Tokenizer.END_TAG_TOKEN]: tokenAfterAfterBody,\n [Tokenizer.EOF_TOKEN]: stopParsing\n },\n [AFTER_AFTER_FRAMESET_MODE]: {\n [Tokenizer.CHARACTER_TOKEN]: ignoreToken,\n [Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,\n [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInBody,\n [Tokenizer.COMMENT_TOKEN]: appendCommentToDocument,\n [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,\n [Tokenizer.START_TAG_TOKEN]: startTagAfterAfterFrameset,\n [Tokenizer.END_TAG_TOKEN]: ignoreToken,\n [Tokenizer.EOF_TOKEN]: stopParsing\n }\n};\n\n//Parser\nclass Parser {\n constructor(options) {\n this.options = mergeOptions(DEFAULT_OPTIONS, options);\n\n this.treeAdapter = this.options.treeAdapter;\n this.pendingScript = null;\n\n if (this.options.sourceCodeLocationInfo) {\n Mixin.install(this, LocationInfoParserMixin);\n }\n\n if (this.options.onParseError) {\n Mixin.install(this, ErrorReportingParserMixin, { onParseError: this.options.onParseError });\n }\n }\n\n // API\n parse(html) {\n const document = this.treeAdapter.createDocument();\n\n this._bootstrap(document, null);\n this.tokenizer.write(html, true);\n this._runParsingLoop(null);\n\n return document;\n }\n\n parseFragment(html, fragmentContext) {\n //NOTE: use <template> element as a fragment context if context element was not provided,\n //so we will parse in \"forgiving\" manner\n if (!fragmentContext) {\n fragmentContext = this.treeAdapter.createElement($.TEMPLATE, NS.HTML, []);\n }\n\n //NOTE: create fake element which will be used as 'document' for fragment parsing.\n //This is important for jsdom there 'document' can't be recreated, therefore\n //fragment parsing causes messing of the main `document`.\n const documentMock = this.treeAdapter.createElement('documentmock', NS.HTML, []);\n\n this._bootstrap(documentMock, fragmentContext);\n\n if (this.treeAdapter.getTagName(fragmentContext) === $.TEMPLATE) {\n this._pushTmplInsertionMode(IN_TEMPLATE_MODE);\n }\n\n this._initTokenizerForFragmentParsing();\n this._insertFakeRootElement();\n this._resetInsertionMode();\n this._findFormInFragmentContext();\n this.tokenizer.write(html, true);\n this._runParsingLoop(null);\n\n const rootElement = this.treeAdapter.getFirstChild(documentMock);\n const fragment = this.treeAdapter.createDocumentFragment();\n\n this._adoptNodes(rootElement, fragment);\n\n return fragment;\n }\n\n //Bootstrap parser\n _bootstrap(document, fragmentContext) {\n this.tokenizer = new Tokenizer(this.options);\n\n this.stopped = false;\n\n this.insertionMode = INITIAL_MODE;\n this.originalInsertionMode = '';\n\n this.document = document;\n this.fragmentContext = fragmentContext;\n\n this.headElement = null;\n this.formElement = null;\n\n this.openElements = new OpenElementStack(this.document, this.treeAdapter);\n this.activeFormattingElements = new FormattingElementList(this.treeAdapter);\n\n this.tmplInsertionModeStack = [];\n this.tmplInsertionModeStackTop = -1;\n this.currentTmplInsertionMode = null;\n\n this.pendingCharacterTokens = [];\n this.hasNonWhitespacePendingCharacterToken = false;\n\n this.framesetOk = true;\n this.skipNextNewLine = false;\n this.fosterParentingEnabled = false;\n }\n\n //Errors\n _err() {\n // NOTE: err reporting is noop by default. Enabled by mixin.\n }\n\n //Parsing loop\n _runParsingLoop(scriptHandler) {\n while (!this.stopped) {\n this._setupTokenizerCDATAMode();\n\n const token = this.tokenizer.getNextToken();\n\n if (token.type === Tokenizer.HIBERNATION_TOKEN) {\n break;\n }\n\n if (this.skipNextNewLine) {\n this.skipNextNewLine = false;\n\n if (token.type === Tokenizer.WHITESPACE_CHARACTER_TOKEN && token.chars[0] === '\\n') {\n if (token.chars.length === 1) {\n continue;\n }\n\n token.chars = token.chars.substr(1);\n }\n }\n\n this._processInputToken(token);\n\n if (scriptHandler && this.pendingScript) {\n break;\n }\n }\n }\n\n runParsingLoopForCurrentChunk(writeCallback, scriptHandler) {\n this._runParsingLoop(scriptHandler);\n\n if (scriptHandler && this.pendingScript) {\n const script = this.pendingScript;\n\n this.pendingScript = null;\n\n scriptHandler(script);\n\n return;\n }\n\n if (writeCallback) {\n writeCallback();\n }\n }\n\n //Text parsing\n _setupTokenizerCDATAMode() {\n const current = this._getAdjustedCurrentElement();\n\n this.tokenizer.allowCDATA =\n current &&\n current !== this.document &&\n this.treeAdapter.getNamespaceURI(current) !== NS.HTML &&\n !this._isIntegrationPoint(current);\n }\n\n _switchToTextParsing(currentToken, nextTokenizerState) {\n this._insertElement(currentToken, NS.HTML);\n this.tokenizer.state = nextTokenizerState;\n this.originalInsertionMode = this.insertionMode;\n this.insertionMode = TEXT_MODE;\n }\n\n switchToPlaintextParsing() {\n this.insertionMode = TEXT_MODE;\n this.originalInsertionMode = IN_BODY_MODE;\n this.tokenizer.state = Tokenizer.MODE.PLAINTEXT;\n }\n\n //Fragment parsing\n _getAdjustedCurrentElement() {\n return this.openElements.stackTop === 0 && this.fragmentContext\n ? this.fragmentContext\n : this.openElements.current;\n }\n\n _findFormInFragmentContext() {\n let node = this.fragmentContext;\n\n do {\n if (this.treeAdapter.getTagName(node) === $.FORM) {\n this.formElement = node;\n break;\n }\n\n node = this.treeAdapter.getParentNode(node);\n } while (node);\n }\n\n _initTokenizerForFragmentParsing() {\n if (this.treeAdapter.getNamespaceURI(this.fragmentContext) === NS.HTML) {\n const tn = this.treeAdapter.getTagName(this.fragmentContext);\n\n if (tn === $.TITLE || tn === $.TEXTAREA) {\n this.tokenizer.state = Tokenizer.MODE.RCDATA;\n } else if (\n tn === $.STYLE ||\n tn === $.XMP ||\n tn === $.IFRAME ||\n tn === $.NOEMBED ||\n tn === $.NOFRAMES ||\n tn === $.NOSCRIPT\n ) {\n this.tokenizer.state = Tokenizer.MODE.RAWTEXT;\n } else if (tn === $.SCRIPT) {\n this.tokenizer.state = Tokenizer.MODE.SCRIPT_DATA;\n } else if (tn === $.PLAINTEXT) {\n this.tokenizer.state = Tokenizer.MODE.PLAINTEXT;\n }\n }\n }\n\n //Tree mutation\n _setDocumentType(token) {\n const name = token.name || '';\n const publicId = token.publicId || '';\n const systemId = token.systemId || '';\n\n this.treeAdapter.setDocumentType(this.document, name, publicId, systemId);\n }\n\n _attachElementToTree(element) {\n if (this._shouldFosterParentOnInsertion()) {\n this._fosterParentElement(element);\n } else {\n const parent = this.openElements.currentTmplContent || this.openElements.current;\n\n this.treeAdapter.appendChild(parent, element);\n }\n }\n\n _appendElement(token, namespaceURI) {\n const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);\n\n this._attachElementToTree(element);\n }\n\n _insertElement(token, namespaceURI) {\n const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);\n\n this._attachElementToTree(element);\n this.openElements.push(element);\n }\n\n _insertFakeElement(tagName) {\n const element = this.treeAdapter.createElement(tagName, NS.HTML, []);\n\n this._attachElementToTree(element);\n this.openElements.push(element);\n }\n\n _insertTemplate(token) {\n const tmpl = this.treeAdapter.createElement(token.tagName, NS.HTML, token.attrs);\n const content = this.treeAdapter.createDocumentFragment();\n\n this.treeAdapter.setTemplateContent(tmpl, content);\n this._attachElementToTree(tmpl);\n this.openElements.push(tmpl);\n }\n\n _insertFakeRootElement() {\n const element = this.treeAdapter.createElement($.HTML, NS.HTML, []);\n\n this.treeAdapter.appendChild(this.openElements.current, element);\n this.openElements.push(element);\n }\n\n _appendCommentNode(token, parent) {\n const commentNode = this.treeAdapter.createCommentNode(token.data);\n\n this.treeAdapter.appendChild(parent, commentNode);\n }\n\n _insertCharacters(token) {\n if (this._shouldFosterParentOnInsertion()) {\n this._fosterParentText(token.chars);\n } else {\n const parent = this.openElements.currentTmplContent || this.openElements.current;\n\n this.treeAdapter.insertText(parent, token.chars);\n }\n }\n\n _adoptNodes(donor, recipient) {\n for (let child = this.treeAdapter.getFirstChild(donor); child; child = this.treeAdapter.getFirstChild(donor)) {\n this.treeAdapter.detachNode(child);\n this.treeAdapter.appendChild(recipient, child);\n }\n }\n\n //Token processing\n _shouldProcessTokenInForeignContent(token) {\n const current = this._getAdjustedCurrentElement();\n\n if (!current || current === this.document) {\n return false;\n }\n\n const ns = this.treeAdapter.getNamespaceURI(current);\n\n if (ns === NS.HTML) {\n return false;\n }\n\n if (\n this.treeAdapter.getTagName(current) === $.ANNOTATION_XML &&\n ns === NS.MATHML &&\n token.type === Tokenizer.START_TAG_TOKEN &&\n token.tagName === $.SVG\n ) {\n return false;\n }\n\n const isCharacterToken =\n token.type === Tokenizer.CHARACTER_TOKEN ||\n token.type === Tokenizer.NULL_CHARACTER_TOKEN ||\n token.type === Tokenizer.WHITESPACE_CHARACTER_TOKEN;\n\n const isMathMLTextStartTag =\n token.type === Tokenizer.START_TAG_TOKEN && token.tagName !== $.MGLYPH && token.tagName !== $.MALIGNMARK;\n\n if ((isMathMLTextStartTag || isCharacterToken) && this._isIntegrationPoint(current, NS.MATHML)) {\n return false;\n }\n\n if (\n (token.type === Tokenizer.START_TAG_TOKEN || isCharacterToken) &&\n this._isIntegrationPoint(current, NS.HTML)\n ) {\n return false;\n }\n\n return token.type !== Tokenizer.EOF_TOKEN;\n }\n\n _processToken(token) {\n TOKEN_HANDLERS[this.insertionMode][token.type](this, token);\n }\n\n _processTokenInBodyMode(token) {\n TOKEN_HANDLERS[IN_BODY_MODE][token.type](this, token);\n }\n\n _processTokenInForeignContent(token) {\n if (token.type === Tokenizer.CHARACTER_TOKEN) {\n characterInForeignContent(this, token);\n } else if (token.type === Tokenizer.NULL_CHARACTER_TOKEN) {\n nullCharacterInForeignContent(this, token);\n } else if (token.type === Tokenizer.WHITESPACE_CHARACTER_TOKEN) {\n insertCharacters(this, token);\n } else if (token.type === Tokenizer.COMMENT_TOKEN) {\n appendComment(this, token);\n } else if (token.type === Tokenizer.START_TAG_TOKEN) {\n startTagInForeignContent(this, token);\n } else if (token.type === Tokenizer.END_TAG_TOKEN) {\n endTagInForeignContent(this, token);\n }\n }\n\n _processInputToken(token) {\n if (this._shouldProcessTokenInForeignContent(token)) {\n this._processTokenInForeignContent(token);\n } else {\n this._processToken(token);\n }\n\n if (token.type === Tokenizer.START_TAG_TOKEN && token.selfClosing && !token.ackSelfClosing) {\n this._err(ERR.nonVoidHtmlElementStartTagWithTrailingSolidus);\n }\n }\n\n //Integration points\n _isIntegrationPoint(element, foreignNS) {\n const tn = this.treeAdapter.getTagName(element);\n const ns = this.treeAdapter.getNamespaceURI(element);\n const attrs = this.treeAdapter.getAttrList(element);\n\n return foreignContent.isIntegrationPoint(tn, ns, attrs, foreignNS);\n }\n\n //Active formatting elements reconstruction\n _reconstructActiveFormattingElements() {\n const listLength = this.activeFormattingElements.length;\n\n if (listLength) {\n let unopenIdx = listLength;\n let entry = null;\n\n do {\n unopenIdx--;\n entry = this.activeFormattingElements.entries[unopenIdx];\n\n if (entry.type === FormattingElementList.MARKER_ENTRY || this.openElements.contains(entry.element)) {\n unopenIdx++;\n break;\n }\n } while (unopenIdx > 0);\n\n for (let i = unopenIdx; i < listLength; i++) {\n entry = this.activeFormattingElements.entries[i];\n this._insertElement(entry.token, this.treeAdapter.getNamespaceURI(entry.element));\n entry.element = this.openElements.current;\n }\n }\n }\n\n //Close elements\n _closeTableCell() {\n this.openElements.generateImpliedEndTags();\n this.openElements.popUntilTableCellPopped();\n this.activeFormattingElements.clearToLastMarker();\n this.insertionMode = IN_ROW_MODE;\n }\n\n _closePElement() {\n this.openElements.generateImpliedEndTagsWithExclusion($.P);\n this.openElements.popUntilTagNamePopped($.P);\n }\n\n //Insertion modes\n _resetInsertionMode() {\n for (let i = this.openElements.stackTop, last = false; i >= 0; i--) {\n let element = this.openElements.items[i];\n\n if (i === 0) {\n last = true;\n\n if (this.fragmentContext) {\n element = this.fragmentContext;\n }\n }\n\n const tn = this.treeAdapter.getTagName(element);\n const newInsertionMode = INSERTION_MODE_RESET_MAP[tn];\n\n if (newInsertionMode) {\n this.insertionMode = newInsertionMode;\n break;\n } else if (!last && (tn === $.TD || tn === $.TH)) {\n this.insertionMode = IN_CELL_MODE;\n break;\n } else if (!last && tn === $.HEAD) {\n this.insertionMode = IN_HEAD_MODE;\n break;\n } else if (tn === $.SELECT) {\n this._resetInsertionModeForSelect(i);\n break;\n } else if (tn === $.TEMPLATE) {\n this.insertionMode = this.currentTmplInsertionMode;\n break;\n } else if (tn === $.HTML) {\n this.insertionMode = this.headElement ? AFTER_HEAD_MODE : BEFORE_HEAD_MODE;\n break;\n } else if (last) {\n this.insertionMode = IN_BODY_MODE;\n break;\n }\n }\n }\n\n _resetInsertionModeForSelect(selectIdx) {\n if (selectIdx > 0) {\n for (let i = selectIdx - 1; i > 0; i--) {\n const ancestor = this.openElements.items[i];\n const tn = this.treeAdapter.getTagName(ancestor);\n\n if (tn === $.TEMPLATE) {\n break;\n } else if (tn === $.TABLE) {\n this.insertionMode = IN_SELECT_IN_TABLE_MODE;\n return;\n }\n }\n }\n\n this.insertionMode = IN_SELECT_MODE;\n }\n\n _pushTmplInsertionMode(mode) {\n this.tmplInsertionModeStack.push(mode);\n this.tmplInsertionModeStackTop++;\n this.currentTmplInsertionMode = mode;\n }\n\n _popTmplInsertionMode() {\n this.tmplInsertionModeStack.pop();\n this.tmplInsertionModeStackTop--;\n this.currentTmplInsertionMode = this.tmplInsertionModeStack[this.tmplInsertionModeStackTop];\n }\n\n //Foster parenting\n _isElementCausesFosterParenting(element) {\n const tn = this.treeAdapter.getTagName(element);\n\n return tn === $.TABLE || tn === $.TBODY || tn === $.TFOOT || tn === $.THEAD || tn === $.TR;\n }\n\n _shouldFosterParentOnInsertion() {\n return this.fosterParentingEnabled && this._isElementCausesFosterParenting(this.openElements.current);\n }\n\n _findFosterParentingLocation() {\n const location = {\n parent: null,\n beforeElement: null\n };\n\n for (let i = this.openElements.stackTop; i >= 0; i--) {\n const openElement = this.openElements.items[i];\n const tn = this.treeAdapter.getTagName(openElement);\n const ns = this.treeAdapter.getNamespaceURI(openElement);\n\n if (tn === $.TEMPLATE && ns === NS.HTML) {\n location.parent = this.treeAdapter.getTemplateContent(openElement);\n break;\n } else if (tn === $.TABLE) {\n location.parent = this.treeAdapter.getParentNode(openElement);\n\n if (location.parent) {\n location.beforeElement = openElement;\n } else {\n location.parent = this.openElements.items[i - 1];\n }\n\n break;\n }\n }\n\n if (!location.parent) {\n location.parent = this.openElements.items[0];\n }\n\n return location;\n }\n\n _fosterParentElement(element) {\n const location = this._findFosterParentingLocation();\n\n if (location.beforeElement) {\n this.treeAdapter.insertBefore(location.parent, element, location.beforeElement);\n } else {\n this.treeAdapter.appendChild(location.parent, element);\n }\n }\n\n _fosterParentText(chars) {\n const location = this._findFosterParentingLocation();\n\n if (location.beforeElement) {\n this.treeAdapter.insertTextBefore(location.parent, chars, location.beforeElement);\n } else {\n this.treeAdapter.insertText(location.parent, chars);\n }\n }\n\n //Special elements\n _isSpecialElement(element) {\n const tn = this.treeAdapter.getTagName(element);\n const ns = this.treeAdapter.getNamespaceURI(element);\n\n return HTML.SPECIAL_ELEMENTS[ns][tn];\n }\n}\n\nmodule.exports = Parser;\n\n//Adoption agency algorithm\n//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html#adoptionAgency)\n//------------------------------------------------------------------\n\n//Steps 5-8 of the algorithm\nfunction aaObtainFormattingElementEntry(p, token) {\n let formattingElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(token.tagName);\n\n if (formattingElementEntry) {\n if (!p.openElements.contains(formattingElementEntry.element)) {\n p.activeFormattingElements.removeEntry(formattingElementEntry);\n formattingElementEntry = null;\n } else if (!p.openElements.hasInScope(token.tagName)) {\n formattingElementEntry = null;\n }\n } else {\n genericEndTagInBody(p, token);\n }\n\n return formattingElementEntry;\n}\n\n//Steps 9 and 10 of the algorithm\nfunction aaObtainFurthestBlock(p, formattingElementEntry) {\n let furthestBlock = null;\n\n for (let i = p.openElements.stackTop; i >= 0; i--) {\n const element = p.openElements.items[i];\n\n if (element === formattingElementEntry.element) {\n break;\n }\n\n if (p._isSpecialElement(element)) {\n furthestBlock = element;\n }\n }\n\n if (!furthestBlock) {\n p.openElements.popUntilElementPopped(formattingElementEntry.element);\n p.activeFormattingElements.removeEntry(formattingElementEntry);\n }\n\n return furthestBlock;\n}\n\n//Step 13 of the algorithm\nfunction aaInnerLoop(p, furthestBlock, formattingElement) {\n let lastElement = furthestBlock;\n let nextElement = p.openElements.getCommonAncestor(furthestBlock);\n\n for (let i = 0, element = nextElement; element !== formattingElement; i++, element = nextElement) {\n //NOTE: store next element for the next loop iteration (it may be deleted from the stack by step 9.5)\n nextElement = p.openElements.getCommonAncestor(element);\n\n const elementEntry = p.activeFormattingElements.getElementEntry(element);\n const counterOverflow = elementEntry && i >= AA_INNER_LOOP_ITER;\n const shouldRemoveFromOpenElements = !elementEntry || counterOverflow;\n\n if (shouldRemoveFromOpenElements) {\n if (counterOverflow) {\n p.activeFormattingElements.removeEntry(elementEntry);\n }\n\n p.openElements.remove(element);\n } else {\n element = aaRecreateElementFromEntry(p, elementEntry);\n\n if (lastElement === furthestBlock) {\n p.activeFormattingElements.bookmark = elementEntry;\n }\n\n p.treeAdapter.detachNode(lastElement);\n p.treeAdapter.appendChild(element, lastElement);\n lastElement = element;\n }\n }\n\n return lastElement;\n}\n\n//Step 13.7 of the algorithm\nfunction aaRecreateElementFromEntry(p, elementEntry) {\n const ns = p.treeAdapter.getNamespaceURI(elementEntry.element);\n const newElement = p.treeAdapter.createElement(elementEntry.token.tagName, ns, elementEntry.token.attrs);\n\n p.openElements.replace(elementEntry.element, newElement);\n elementEntry.element = newElement;\n\n return newElement;\n}\n\n//Step 14 of the algorithm\nfunction aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement) {\n if (p._isElementCausesFosterParenting(commonAncestor)) {\n p._fosterParentElement(lastElement);\n } else {\n const tn = p.treeAdapter.getTagName(commonAncestor);\n const ns = p.treeAdapter.getNamespaceURI(commonAncestor);\n\n if (tn === $.TEMPLATE && ns === NS.HTML) {\n commonAncestor = p.treeAdapter.getTemplateContent(commonAncestor);\n }\n\n p.treeAdapter.appendChild(commonAncestor, lastElement);\n }\n}\n\n//Steps 15-19 of the algorithm\nfunction aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry) {\n const ns = p.treeAdapter.getNamespaceURI(formattingElementEntry.element);\n const token = formattingElementEntry.token;\n const newElement = p.treeAdapter.createElement(token.tagName, ns, token.attrs);\n\n p._adoptNodes(furthestBlock, newElement);\n p.treeAdapter.appendChild(furthestBlock, newElement);\n\n p.activeFormattingElements.insertElementAfterBookmark(newElement, formattingElementEntry.token);\n p.activeFormattingElements.removeEntry(formattingElementEntry);\n\n p.openElements.remove(formattingElementEntry.element);\n p.openElements.insertAfter(furthestBlock, newElement);\n}\n\n//Algorithm entry point\nfunction callAdoptionAgency(p, token) {\n let formattingElementEntry;\n\n for (let i = 0; i < AA_OUTER_LOOP_ITER; i++) {\n formattingElementEntry = aaObtainFormattingElementEntry(p, token, formattingElementEntry);\n\n if (!formattingElementEntry) {\n break;\n }\n\n const furthestBlock = aaObtainFurthestBlock(p, formattingElementEntry);\n\n if (!furthestBlock) {\n break;\n }\n\n p.activeFormattingElements.bookmark = formattingElementEntry;\n\n const lastElement = aaInnerLoop(p, furthestBlock, formattingElementEntry.element);\n const commonAncestor = p.openElements.getCommonAncestor(formattingElementEntry.element);\n\n p.treeAdapter.detachNode(lastElement);\n aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement);\n aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry);\n }\n}\n\n//Generic token handlers\n//------------------------------------------------------------------\nfunction ignoreToken() {\n //NOTE: do nothing =)\n}\n\nfunction misplacedDoctype(p) {\n p._err(ERR.misplacedDoctype);\n}\n\nfunction appendComment(p, token) {\n p._appendCommentNode(token, p.openElements.currentTmplContent || p.openElements.current);\n}\n\nfunction appendCommentToRootHtmlElement(p, token) {\n p._appendCommentNode(token, p.openElements.items[0]);\n}\n\nfunction appendCommentToDocument(p, token) {\n p._appendCommentNode(token, p.document);\n}\n\nfunction insertCharacters(p, token) {\n p._insertCharacters(token);\n}\n\nfunction stopParsing(p) {\n p.stopped = true;\n}\n\n// The \"initial\" insertion mode\n//------------------------------------------------------------------\nfunction doctypeInInitialMode(p, token) {\n p._setDocumentType(token);\n\n const mode = token.forceQuirks ? HTML.DOCUMENT_MODE.QUIRKS : doctype.getDocumentMode(token);\n\n if (!doctype.isConforming(token)) {\n p._err(ERR.nonConformingDoctype);\n }\n\n p.treeAdapter.setDocumentMode(p.document, mode);\n\n p.insertionMode = BEFORE_HTML_MODE;\n}\n\nfunction tokenInInitialMode(p, token) {\n p._err(ERR.missingDoctype, { beforeToken: true });\n p.treeAdapter.setDocumentMode(p.document, HTML.DOCUMENT_MODE.QUIRKS);\n p.insertionMode = BEFORE_HTML_MODE;\n p._processToken(token);\n}\n\n// The \"before html\" insertion mode\n//------------------------------------------------------------------\nfunction startTagBeforeHtml(p, token) {\n if (token.tagName === $.HTML) {\n p._insertElement(token, NS.HTML);\n p.insertionMode = BEFORE_HEAD_MODE;\n } else {\n tokenBeforeHtml(p, token);\n }\n}\n\nfunction endTagBeforeHtml(p, token) {\n const tn = token.tagName;\n\n if (tn === $.HTML || tn === $.HEAD || tn === $.BODY || tn === $.BR) {\n tokenBeforeHtml(p, token);\n }\n}\n\nfunction tokenBeforeHtml(p, token) {\n p._insertFakeRootElement();\n p.insertionMode = BEFORE_HEAD_MODE;\n p._processToken(token);\n}\n\n// The \"before head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagBeforeHead(p, token) {\n const tn = token.tagName;\n\n if (tn === $.HTML) {\n startTagInBody(p, token);\n } else if (tn === $.HEAD) {\n p._insertElement(token, NS.HTML);\n p.headElement = p.openElements.current;\n p.insertionMode = IN_HEAD_MODE;\n } else {\n tokenBeforeHead(p, token);\n }\n}\n\nfunction endTagBeforeHead(p, token) {\n const tn = token.tagName;\n\n if (tn === $.HEAD || tn === $.BODY || tn === $.HTML || tn === $.BR) {\n tokenBeforeHead(p, token);\n } else {\n p._err(ERR.endTagWithoutMatchingOpenElement);\n }\n}\n\nfunction tokenBeforeHead(p, token) {\n p._insertFakeElement($.HEAD);\n p.headElement = p.openElements.current;\n p.insertionMode = IN_HEAD_MODE;\n p._processToken(token);\n}\n\n// The \"in head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInHead(p, token) {\n const tn = token.tagName;\n\n if (tn === $.HTML) {\n startTagInBody(p, token);\n } else if (tn === $.BASE || tn === $.BASEFONT || tn === $.BGSOUND || tn === $.LINK || tn === $.META) {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n } else if (tn === $.TITLE) {\n p._switchToTextParsing(token, Tokenizer.MODE.RCDATA);\n } else if (tn === $.NOSCRIPT) {\n if (p.options.scriptingEnabled) {\n p._switchToTextParsing(token, Tokenizer.MODE.RAWTEXT);\n } else {\n p._insertElement(token, NS.HTML);\n p.insertionMode = IN_HEAD_NO_SCRIPT_MODE;\n }\n } else if (tn === $.NOFRAMES || tn === $.STYLE) {\n p._switchToTextParsing(token, Tokenizer.MODE.RAWTEXT);\n } else if (tn === $.SCRIPT) {\n p._switchToTextParsing(token, Tokenizer.MODE.SCRIPT_DATA);\n } else if (tn === $.TEMPLATE) {\n p._insertTemplate(token, NS.HTML);\n p.activeFormattingElements.insertMarker();\n p.framesetOk = false;\n p.insertionMode = IN_TEMPLATE_MODE;\n p._pushTmplInsertionMode(IN_TEMPLATE_MODE);\n } else if (tn === $.HEAD) {\n p._err(ERR.misplacedStartTagForHeadElement);\n } else {\n tokenInHead(p, token);\n }\n}\n\nfunction endTagInHead(p, token) {\n const tn = token.tagName;\n\n if (tn === $.HEAD) {\n p.openElements.pop();\n p.insertionMode = AFTER_HEAD_MODE;\n } else if (tn === $.BODY || tn === $.BR || tn === $.HTML) {\n tokenInHead(p, token);\n } else if (tn === $.TEMPLATE) {\n if (p.openElements.tmplCount > 0) {\n p.openElements.generateImpliedEndTagsThoroughly();\n\n if (p.openElements.currentTagName !== $.TEMPLATE) {\n p._err(ERR.closingOfElementWithOpenChildElements);\n }\n\n p.openElements.popUntilTagNamePopped($.TEMPLATE);\n p.activeFormattingElements.clearToLastMarker();\n p._popTmplInsertionMode();\n p._resetInsertionMode();\n } else {\n p._err(ERR.endTagWithoutMatchingOpenElement);\n }\n } else {\n p._err(ERR.endTagWithoutMatchingOpenElement);\n }\n}\n\nfunction tokenInHead(p, token) {\n p.openElements.pop();\n p.insertionMode = AFTER_HEAD_MODE;\n p._processToken(token);\n}\n\n// The \"in head no script\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInHeadNoScript(p, token) {\n const tn = token.tagName;\n\n if (tn === $.HTML) {\n startTagInBody(p, token);\n } else if (\n tn === $.BASEFONT ||\n tn === $.BGSOUND ||\n tn === $.HEAD ||\n tn === $.LINK ||\n tn === $.META ||\n tn === $.NOFRAMES ||\n tn === $.STYLE\n ) {\n startTagInHead(p, token);\n } else if (tn === $.NOSCRIPT) {\n p._err(ERR.nestedNoscriptInHead);\n } else {\n tokenInHeadNoScript(p, token);\n }\n}\n\nfunction endTagInHeadNoScript(p, token) {\n const tn = token.tagName;\n\n if (tn === $.NOSCRIPT) {\n p.openElements.pop();\n p.insertionMode = IN_HEAD_MODE;\n } else if (tn === $.BR) {\n tokenInHeadNoScript(p, token);\n } else {\n p._err(ERR.endTagWithoutMatchingOpenElement);\n }\n}\n\nfunction tokenInHeadNoScript(p, token) {\n const errCode =\n token.type === Tokenizer.EOF_TOKEN ? ERR.openElementsLeftAfterEof : ERR.disallowedContentInNoscriptInHead;\n\n p._err(errCode);\n p.openElements.pop();\n p.insertionMode = IN_HEAD_MODE;\n p._processToken(token);\n}\n\n// The \"after head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterHead(p, token) {\n const tn = token.tagName;\n\n if (tn === $.HTML) {\n startTagInBody(p, token);\n } else if (tn === $.BODY) {\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n p.insertionMode = IN_BODY_MODE;\n } else if (tn === $.FRAMESET) {\n p._insertElement(token, NS.HTML);\n p.insertionMode = IN_FRAMESET_MODE;\n } else if (\n tn === $.BASE ||\n tn === $.BASEFONT ||\n tn === $.BGSOUND ||\n tn === $.LINK ||\n tn === $.META ||\n tn === $.NOFRAMES ||\n tn === $.SCRIPT ||\n tn === $.STYLE ||\n tn === $.TEMPLATE ||\n tn === $.TITLE\n ) {\n p._err(ERR.abandonedHeadElementChild);\n p.openElements.push(p.headElement);\n startTagInHead(p, token);\n p.openElements.remove(p.headElement);\n } else if (tn === $.HEAD) {\n p._err(ERR.misplacedStartTagForHeadElement);\n } else {\n tokenAfterHead(p, token);\n }\n}\n\nfunction endTagAfterHead(p, token) {\n const tn = token.tagName;\n\n if (tn === $.BODY || tn === $.HTML || tn === $.BR) {\n tokenAfterHead(p, token);\n } else if (tn === $.TEMPLATE) {\n endTagInHead(p, token);\n } else {\n p._err(ERR.endTagWithoutMatchingOpenElement);\n }\n}\n\nfunction tokenAfterHead(p, token) {\n p._insertFakeElement($.BODY);\n p.insertionMode = IN_BODY_MODE;\n p._processToken(token);\n}\n\n// The \"in body\" insertion mode\n//------------------------------------------------------------------\nfunction whitespaceCharacterInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertCharacters(token);\n}\n\nfunction characterInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertCharacters(token);\n p.framesetOk = false;\n}\n\nfunction htmlStartTagInBody(p, token) {\n if (p.openElements.tmplCount === 0) {\n p.treeAdapter.adoptAttributes(p.openElements.items[0], token.attrs);\n }\n}\n\nfunction bodyStartTagInBody(p, token) {\n const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n\n if (bodyElement && p.openElements.tmplCount === 0) {\n p.framesetOk = false;\n p.treeAdapter.adoptAttributes(bodyElement, token.attrs);\n }\n}\n\nfunction framesetStartTagInBody(p, token) {\n const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n\n if (p.framesetOk && bodyElement) {\n p.treeAdapter.detachNode(bodyElement);\n p.openElements.popAllUpToHtmlElement();\n p._insertElement(token, NS.HTML);\n p.insertionMode = IN_FRAMESET_MODE;\n }\n}\n\nfunction addressStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n\n p._insertElement(token, NS.HTML);\n}\n\nfunction numberedHeaderStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n\n const tn = p.openElements.currentTagName;\n\n if (tn === $.H1 || tn === $.H2 || tn === $.H3 || tn === $.H4 || tn === $.H5 || tn === $.H6) {\n p.openElements.pop();\n }\n\n p._insertElement(token, NS.HTML);\n}\n\nfunction preStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n\n p._insertElement(token, NS.HTML);\n //NOTE: If the next token is a U+000A LINE FEED (LF) character token, then ignore that token and move\n //on to the next one. (Newlines at the start of pre blocks are ignored as an authoring convenience.)\n p.skipNextNewLine = true;\n p.framesetOk = false;\n}\n\nfunction formStartTagInBody(p, token) {\n const inTemplate = p.openElements.tmplCount > 0;\n\n if (!p.formElement || inTemplate) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n\n p._insertElement(token, NS.HTML);\n\n if (!inTemplate) {\n p.formElement = p.openElements.current;\n }\n }\n}\n\nfunction listItemStartTagInBody(p, token) {\n p.framesetOk = false;\n\n const tn = token.tagName;\n\n for (let i = p.openElements.stackTop; i >= 0; i--) {\n const element = p.openElements.items[i];\n const elementTn = p.treeAdapter.getTagName(element);\n let closeTn = null;\n\n if (tn === $.LI && elementTn === $.LI) {\n closeTn = $.LI;\n } else if ((tn === $.DD || tn === $.DT) && (elementTn === $.DD || elementTn === $.DT)) {\n closeTn = elementTn;\n }\n\n if (closeTn) {\n p.openElements.generateImpliedEndTagsWithExclusion(closeTn);\n p.openElements.popUntilTagNamePopped(closeTn);\n break;\n }\n\n if (elementTn !== $.ADDRESS && elementTn !== $.DIV && elementTn !== $.P && p._isSpecialElement(element)) {\n break;\n }\n }\n\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n\n p._insertElement(token, NS.HTML);\n}\n\nfunction plaintextStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n\n p._insertElement(token, NS.HTML);\n p.tokenizer.state = Tokenizer.MODE.PLAINTEXT;\n}\n\nfunction buttonStartTagInBody(p, token) {\n if (p.openElements.hasInScope($.BUTTON)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped($.BUTTON);\n }\n\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n}\n\nfunction aStartTagInBody(p, token) {\n const activeElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName($.A);\n\n if (activeElementEntry) {\n callAdoptionAgency(p, token);\n p.openElements.remove(activeElementEntry.element);\n p.activeFormattingElements.removeEntry(activeElementEntry);\n }\n\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\n\nfunction bStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\n\nfunction nobrStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n\n if (p.openElements.hasInScope($.NOBR)) {\n callAdoptionAgency(p, token);\n p._reconstructActiveFormattingElements();\n }\n\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\n\nfunction appletStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.insertMarker();\n p.framesetOk = false;\n}\n\nfunction tableStartTagInBody(p, token) {\n if (\n p.treeAdapter.getDocumentMode(p.document) !== HTML.DOCUMENT_MODE.QUIRKS &&\n p.openElements.hasInButtonScope($.P)\n ) {\n p._closePElement();\n }\n\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n p.insertionMode = IN_TABLE_MODE;\n}\n\nfunction areaStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._appendElement(token, NS.HTML);\n p.framesetOk = false;\n token.ackSelfClosing = true;\n}\n\nfunction inputStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._appendElement(token, NS.HTML);\n\n const inputType = Tokenizer.getTokenAttr(token, ATTRS.TYPE);\n\n if (!inputType || inputType.toLowerCase() !== HIDDEN_INPUT_TYPE) {\n p.framesetOk = false;\n }\n\n token.ackSelfClosing = true;\n}\n\nfunction paramStartTagInBody(p, token) {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n}\n\nfunction hrStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n\n p._appendElement(token, NS.HTML);\n p.framesetOk = false;\n token.ackSelfClosing = true;\n}\n\nfunction imageStartTagInBody(p, token) {\n token.tagName = $.IMG;\n areaStartTagInBody(p, token);\n}\n\nfunction textareaStartTagInBody(p, token) {\n p._insertElement(token, NS.HTML);\n //NOTE: If the next token is a U+000A LINE FEED (LF) character token, then ignore that token and move\n //on to the next one. (Newlines at the start of textarea elements are ignored as an authoring convenience.)\n p.skipNextNewLine = true;\n p.tokenizer.state = Tokenizer.MODE.RCDATA;\n p.originalInsertionMode = p.insertionMode;\n p.framesetOk = false;\n p.insertionMode = TEXT_MODE;\n}\n\nfunction xmpStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n\n p._reconstructActiveFormattingElements();\n p.framesetOk = false;\n p._switchToTextParsing(token, Tokenizer.MODE.RAWTEXT);\n}\n\nfunction iframeStartTagInBody(p, token) {\n p.framesetOk = false;\n p._switchToTextParsing(token, Tokenizer.MODE.RAWTEXT);\n}\n\n//NOTE: here we assume that we always act as an user agent with enabled plugins, so we parse\n//<noembed> as a rawtext.\nfunction noembedStartTagInBody(p, token) {\n p._switchToTextParsing(token, Tokenizer.MODE.RAWTEXT);\n}\n\nfunction selectStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n\n if (\n p.insertionMode === IN_TABLE_MODE ||\n p.insertionMode === IN_CAPTION_MODE ||\n p.insertionMode === IN_TABLE_BODY_MODE ||\n p.insertionMode === IN_ROW_MODE ||\n p.insertionMode === IN_CELL_MODE\n ) {\n p.insertionMode = IN_SELECT_IN_TABLE_MODE;\n } else {\n p.insertionMode = IN_SELECT_MODE;\n }\n}\n\nfunction optgroupStartTagInBody(p, token) {\n if (p.openElements.currentTagName === $.OPTION) {\n p.openElements.pop();\n }\n\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n}\n\nfunction rbStartTagInBody(p, token) {\n if (p.openElements.hasInScope($.RUBY)) {\n p.openElements.generateImpliedEndTags();\n }\n\n p._insertElement(token, NS.HTML);\n}\n\nfunction rtStartTagInBody(p, token) {\n if (p.openElements.hasInScope($.RUBY)) {\n p.openElements.generateImpliedEndTagsWithExclusion($.RTC);\n }\n\n p._insertElement(token, NS.HTML);\n}\n\nfunction menuStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n\n p._insertElement(token, NS.HTML);\n}\n\nfunction mathStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n\n foreignContent.adjustTokenMathMLAttrs(token);\n foreignContent.adjustTokenXMLAttrs(token);\n\n if (token.selfClosing) {\n p._appendElement(token, NS.MATHML);\n } else {\n p._insertElement(token, NS.MATHML);\n }\n\n token.ackSelfClosing = true;\n}\n\nfunction svgStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n\n foreignContent.adjustTokenSVGAttrs(token);\n foreignContent.adjustTokenXMLAttrs(token);\n\n if (token.selfClosing) {\n p._appendElement(token, NS.SVG);\n } else {\n p._insertElement(token, NS.SVG);\n }\n\n token.ackSelfClosing = true;\n}\n\nfunction genericStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n}\n\n//OPTIMIZATION: Integer comparisons are low-cost, so we can use very fast tag name length filters here.\n//It's faster than using dictionary.\nfunction startTagInBody(p, token) {\n const tn = token.tagName;\n\n switch (tn.length) {\n case 1:\n if (tn === $.I || tn === $.S || tn === $.B || tn === $.U) {\n bStartTagInBody(p, token);\n } else if (tn === $.P) {\n addressStartTagInBody(p, token);\n } else if (tn === $.A) {\n aStartTagInBody(p, token);\n } else {\n genericStartTagInBody(p, token);\n }\n\n break;\n\n case 2:\n if (tn === $.DL || tn === $.OL || tn === $.UL) {\n addressStartTagInBody(p, token);\n } else if (tn === $.H1 || tn === $.H2 || tn === $.H3 || tn === $.H4 || tn === $.H5 || tn === $.H6) {\n numberedHeaderStartTagInBody(p, token);\n } else if (tn === $.LI || tn === $.DD || tn === $.DT) {\n listItemStartTagInBody(p, token);\n } else if (tn === $.EM || tn === $.TT) {\n bStartTagInBody(p, token);\n } else if (tn === $.BR) {\n areaStartTagInBody(p, token);\n } else if (tn === $.HR) {\n hrStartTagInBody(p, token);\n } else if (tn === $.RB) {\n rbStartTagInBody(p, token);\n } else if (tn === $.RT || tn === $.RP) {\n rtStartTagInBody(p, token);\n } else if (tn !== $.TH && tn !== $.TD && tn !== $.TR) {\n genericStartTagInBody(p, token);\n }\n\n break;\n\n case 3:\n if (tn === $.DIV || tn === $.DIR || tn === $.NAV) {\n addressStartTagInBody(p, token);\n } else if (tn === $.PRE) {\n preStartTagInBody(p, token);\n } else if (tn === $.BIG) {\n bStartTagInBody(p, token);\n } else if (tn === $.IMG || tn === $.WBR) {\n areaStartTagInBody(p, token);\n } else if (tn === $.XMP) {\n xmpStartTagInBody(p, token);\n } else if (tn === $.SVG) {\n svgStartTagInBody(p, token);\n } else if (tn === $.RTC) {\n rbStartTagInBody(p, token);\n } else if (tn !== $.COL) {\n genericStartTagInBody(p, token);\n }\n\n break;\n\n case 4:\n if (tn === $.HTML) {\n htmlStartTagInBody(p, token);\n } else if (tn === $.BASE || tn === $.LINK || tn === $.META) {\n startTagInHead(p, token);\n } else if (tn === $.BODY) {\n bodyStartTagInBody(p, token);\n } else if (tn === $.MAIN || tn === $.MENU) {\n addressStartTagInBody(p, token);\n } else if (tn === $.FORM) {\n formStartTagInBody(p, token);\n } else if (tn === $.CODE || tn === $.FONT) {\n bStartTagInBody(p, token);\n } else if (tn === $.NOBR) {\n nobrStartTagInBody(p, token);\n } else if (tn === $.AREA) {\n areaStartTagInBody(p, token);\n } else if (tn === $.MATH) {\n mathStartTagInBody(p, token);\n } else if (tn === $.MENU) {\n menuStartTagInBody(p, token);\n } else if (tn !== $.HEAD) {\n genericStartTagInBody(p, token);\n }\n\n break;\n\n case 5:\n if (tn === $.STYLE || tn === $.TITLE) {\n startTagInHead(p, token);\n } else if (tn === $.ASIDE) {\n addressStartTagInBody(p, token);\n } else if (tn === $.SMALL) {\n bStartTagInBody(p, token);\n } else if (tn === $.TABLE) {\n tableStartTagInBody(p, token);\n } else if (tn === $.EMBED) {\n areaStartTagInBody(p, token);\n } else if (tn === $.INPUT) {\n inputStartTagInBody(p, token);\n } else if (tn === $.PARAM || tn === $.TRACK) {\n paramStartTagInBody(p, token);\n } else if (tn === $.IMAGE) {\n imageStartTagInBody(p, token);\n } else if (tn !== $.FRAME && tn !== $.TBODY && tn !== $.TFOOT && tn !== $.THEAD) {\n genericStartTagInBody(p, token);\n }\n\n break;\n\n case 6:\n if (tn === $.SCRIPT) {\n startTagInHead(p, token);\n } else if (\n tn === $.CENTER ||\n tn === $.FIGURE ||\n tn === $.FOOTER ||\n tn === $.HEADER ||\n tn === $.HGROUP ||\n tn === $.DIALOG\n ) {\n addressStartTagInBody(p, token);\n } else if (tn === $.BUTTON) {\n buttonStartTagInBody(p, token);\n } else if (tn === $.STRIKE || tn === $.STRONG) {\n bStartTagInBody(p, token);\n } else if (tn === $.APPLET || tn === $.OBJECT) {\n appletStartTagInBody(p, token);\n } else if (tn === $.KEYGEN) {\n areaStartTagInBody(p, token);\n } else if (tn === $.SOURCE) {\n paramStartTagInBody(p, token);\n } else if (tn === $.IFRAME) {\n iframeStartTagInBody(p, token);\n } else if (tn === $.SELECT) {\n selectStartTagInBody(p, token);\n } else if (tn === $.OPTION) {\n optgroupStartTagInBody(p, token);\n } else {\n genericStartTagInBody(p, token);\n }\n\n break;\n\n case 7:\n if (tn === $.BGSOUND) {\n startTagInHead(p, token);\n } else if (\n tn === $.DETAILS ||\n tn === $.ADDRESS ||\n tn === $.ARTICLE ||\n tn === $.SECTION ||\n tn === $.SUMMARY\n ) {\n addressStartTagInBody(p, token);\n } else if (tn === $.LISTING) {\n preStartTagInBody(p, token);\n } else if (tn === $.MARQUEE) {\n appletStartTagInBody(p, token);\n } else if (tn === $.NOEMBED) {\n noembedStartTagInBody(p, token);\n } else if (tn !== $.CAPTION) {\n genericStartTagInBody(p, token);\n }\n\n break;\n\n case 8:\n if (tn === $.BASEFONT) {\n startTagInHead(p, token);\n } else if (tn === $.FRAMESET) {\n framesetStartTagInBody(p, token);\n } else if (tn === $.FIELDSET) {\n addressStartTagInBody(p, token);\n } else if (tn === $.TEXTAREA) {\n textareaStartTagInBody(p, token);\n } else if (tn === $.TEMPLATE) {\n startTagInHead(p, token);\n } else if (tn === $.NOSCRIPT) {\n if (p.options.scriptingEnabled) {\n noembedStartTagInBody(p, token);\n } else {\n genericStartTagInBody(p, token);\n }\n } else if (tn === $.OPTGROUP) {\n optgroupStartTagInBody(p, token);\n } else if (tn !== $.COLGROUP) {\n genericStartTagInBody(p, token);\n }\n\n break;\n\n case 9:\n if (tn === $.PLAINTEXT) {\n plaintextStartTagInBody(p, token);\n } else {\n genericStartTagInBody(p, token);\n }\n\n break;\n\n case 10:\n if (tn === $.BLOCKQUOTE || tn === $.FIGCAPTION) {\n addressStartTagInBody(p, token);\n } else {\n genericStartTagInBody(p, token);\n }\n\n break;\n\n default:\n genericStartTagInBody(p, token);\n }\n}\n\nfunction bodyEndTagInBody(p) {\n if (p.openElements.hasInScope($.BODY)) {\n p.insertionMode = AFTER_BODY_MODE;\n }\n}\n\nfunction htmlEndTagInBody(p, token) {\n if (p.openElements.hasInScope($.BODY)) {\n p.insertionMode = AFTER_BODY_MODE;\n p._processToken(token);\n }\n}\n\nfunction addressEndTagInBody(p, token) {\n const tn = token.tagName;\n\n if (p.openElements.hasInScope(tn)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped(tn);\n }\n}\n\nfunction formEndTagInBody(p) {\n const inTemplate = p.openElements.tmplCount > 0;\n const formElement = p.formElement;\n\n if (!inTemplate) {\n p.formElement = null;\n }\n\n if ((formElement || inTemplate) && p.openElements.hasInScope($.FORM)) {\n p.openElements.generateImpliedEndTags();\n\n if (inTemplate) {\n p.openElements.popUntilTagNamePopped($.FORM);\n } else {\n p.openElements.remove(formElement);\n }\n }\n}\n\nfunction pEndTagInBody(p) {\n if (!p.openElements.hasInButtonScope($.P)) {\n p._insertFakeElement($.P);\n }\n\n p._closePElement();\n}\n\nfunction liEndTagInBody(p) {\n if (p.openElements.hasInListItemScope($.LI)) {\n p.openElements.generateImpliedEndTagsWithExclusion($.LI);\n p.openElements.popUntilTagNamePopped($.LI);\n }\n}\n\nfunction ddEndTagInBody(p, token) {\n const tn = token.tagName;\n\n if (p.openElements.hasInScope(tn)) {\n p.openElements.generateImpliedEndTagsWithExclusion(tn);\n p.openElements.popUntilTagNamePopped(tn);\n }\n}\n\nfunction numberedHeaderEndTagInBody(p) {\n if (p.openElements.hasNumberedHeaderInScope()) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilNumberedHeaderPopped();\n }\n}\n\nfunction appletEndTagInBody(p, token) {\n const tn = token.tagName;\n\n if (p.openElements.hasInScope(tn)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped(tn);\n p.activeFormattingElements.clearToLastMarker();\n }\n}\n\nfunction brEndTagInBody(p) {\n p._reconstructActiveFormattingElements();\n p._insertFakeElement($.BR);\n p.openElements.pop();\n p.framesetOk = false;\n}\n\nfunction genericEndTagInBody(p, token) {\n const tn = token.tagName;\n\n for (let i = p.openElements.stackTop; i > 0; i--) {\n const element = p.openElements.items[i];\n\n if (p.treeAdapter.getTagName(element) === tn) {\n p.openElements.generateImpliedEndTagsWithExclusion(tn);\n p.openElements.popUntilElementPopped(element);\n break;\n }\n\n if (p._isSpecialElement(element)) {\n break;\n }\n }\n}\n\n//OPTIMIZATION: Integer comparisons are low-cost, so we can use very fast tag name length filters here.\n//It's faster than using dictionary.\nfunction endTagInBody(p, token) {\n const tn = token.tagName;\n\n switch (tn.length) {\n case 1:\n if (tn === $.A || tn === $.B || tn === $.I || tn === $.S || tn === $.U) {\n callAdoptionAgency(p, token);\n } else if (tn === $.P) {\n pEndTagInBody(p, token);\n } else {\n genericEndTagInBody(p, token);\n }\n\n break;\n\n case 2:\n if (tn === $.DL || tn === $.UL || tn === $.OL) {\n addressEndTagInBody(p, token);\n } else if (tn === $.LI) {\n liEndTagInBody(p, token);\n } else if (tn === $.DD || tn === $.DT) {\n ddEndTagInBody(p, token);\n } else if (tn === $.H1 || tn === $.H2 || tn === $.H3 || tn === $.H4 || tn === $.H5 || tn === $.H6) {\n numberedHeaderEndTagInBody(p, token);\n } else if (tn === $.BR) {\n brEndTagInBody(p, token);\n } else if (tn === $.EM || tn === $.TT) {\n callAdoptionAgency(p, token);\n } else {\n genericEndTagInBody(p, token);\n }\n\n break;\n\n case 3:\n if (tn === $.BIG) {\n callAdoptionAgency(p, token);\n } else if (tn === $.DIR || tn === $.DIV || tn === $.NAV || tn === $.PRE) {\n addressEndTagInBody(p, token);\n } else {\n genericEndTagInBody(p, token);\n }\n\n break;\n\n case 4:\n if (tn === $.BODY) {\n bodyEndTagInBody(p, token);\n } else if (tn === $.HTML) {\n htmlEndTagInBody(p, token);\n } else if (tn === $.FORM) {\n formEndTagInBody(p, token);\n } else if (tn === $.CODE || tn === $.FONT || tn === $.NOBR) {\n callAdoptionAgency(p, token);\n } else if (tn === $.MAIN || tn === $.MENU) {\n addressEndTagInBody(p, token);\n } else {\n genericEndTagInBody(p, token);\n }\n\n break;\n\n case 5:\n if (tn === $.ASIDE) {\n addressEndTagInBody(p, token);\n } else if (tn === $.SMALL) {\n callAdoptionAgency(p, token);\n } else {\n genericEndTagInBody(p, token);\n }\n\n break;\n\n case 6:\n if (\n tn === $.CENTER ||\n tn === $.FIGURE ||\n tn === $.FOOTER ||\n tn === $.HEADER ||\n tn === $.HGROUP ||\n tn === $.DIALOG\n ) {\n addressEndTagInBody(p, token);\n } else if (tn === $.APPLET || tn === $.OBJECT) {\n appletEndTagInBody(p, token);\n } else if (tn === $.STRIKE || tn === $.STRONG) {\n callAdoptionAgency(p, token);\n } else {\n genericEndTagInBody(p, token);\n }\n\n break;\n\n case 7:\n if (\n tn === $.ADDRESS ||\n tn === $.ARTICLE ||\n tn === $.DETAILS ||\n tn === $.SECTION ||\n tn === $.SUMMARY ||\n tn === $.LISTING\n ) {\n addressEndTagInBody(p, token);\n } else if (tn === $.MARQUEE) {\n appletEndTagInBody(p, token);\n } else {\n genericEndTagInBody(p, token);\n }\n\n break;\n\n case 8:\n if (tn === $.FIELDSET) {\n addressEndTagInBody(p, token);\n } else if (tn === $.TEMPLATE) {\n endTagInHead(p, token);\n } else {\n genericEndTagInBody(p, token);\n }\n\n break;\n\n case 10:\n if (tn === $.BLOCKQUOTE || tn === $.FIGCAPTION) {\n addressEndTagInBody(p, token);\n } else {\n genericEndTagInBody(p, token);\n }\n\n break;\n\n default:\n genericEndTagInBody(p, token);\n }\n}\n\nfunction eofInBody(p, token) {\n if (p.tmplInsertionModeStackTop > -1) {\n eofInTemplate(p, token);\n } else {\n p.stopped = true;\n }\n}\n\n// The \"text\" insertion mode\n//------------------------------------------------------------------\nfunction endTagInText(p, token) {\n if (token.tagName === $.SCRIPT) {\n p.pendingScript = p.openElements.current;\n }\n\n p.openElements.pop();\n p.insertionMode = p.originalInsertionMode;\n}\n\nfunction eofInText(p, token) {\n p._err(ERR.eofInElementThatCanContainOnlyText);\n p.openElements.pop();\n p.insertionMode = p.originalInsertionMode;\n p._processToken(token);\n}\n\n// The \"in table\" insertion mode\n//------------------------------------------------------------------\nfunction characterInTable(p, token) {\n const curTn = p.openElements.currentTagName;\n\n if (curTn === $.TABLE || curTn === $.TBODY || curTn === $.TFOOT || curTn === $.THEAD || curTn === $.TR) {\n p.pendingCharacterTokens = [];\n p.hasNonWhitespacePendingCharacterToken = false;\n p.originalInsertionMode = p.insertionMode;\n p.insertionMode = IN_TABLE_TEXT_MODE;\n p._processToken(token);\n } else {\n tokenInTable(p, token);\n }\n}\n\nfunction captionStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p.activeFormattingElements.insertMarker();\n p._insertElement(token, NS.HTML);\n p.insertionMode = IN_CAPTION_MODE;\n}\n\nfunction colgroupStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = IN_COLUMN_GROUP_MODE;\n}\n\nfunction colStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertFakeElement($.COLGROUP);\n p.insertionMode = IN_COLUMN_GROUP_MODE;\n p._processToken(token);\n}\n\nfunction tbodyStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = IN_TABLE_BODY_MODE;\n}\n\nfunction tdStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertFakeElement($.TBODY);\n p.insertionMode = IN_TABLE_BODY_MODE;\n p._processToken(token);\n}\n\nfunction tableStartTagInTable(p, token) {\n if (p.openElements.hasInTableScope($.TABLE)) {\n p.openElements.popUntilTagNamePopped($.TABLE);\n p._resetInsertionMode();\n p._processToken(token);\n }\n}\n\nfunction inputStartTagInTable(p, token) {\n const inputType = Tokenizer.getTokenAttr(token, ATTRS.TYPE);\n\n if (inputType && inputType.toLowerCase() === HIDDEN_INPUT_TYPE) {\n p._appendElement(token, NS.HTML);\n } else {\n tokenInTable(p, token);\n }\n\n token.ackSelfClosing = true;\n}\n\nfunction formStartTagInTable(p, token) {\n if (!p.formElement && p.openElements.tmplCount === 0) {\n p._insertElement(token, NS.HTML);\n p.formElement = p.openElements.current;\n p.openElements.pop();\n }\n}\n\nfunction startTagInTable(p, token) {\n const tn = token.tagName;\n\n switch (tn.length) {\n case 2:\n if (tn === $.TD || tn === $.TH || tn === $.TR) {\n tdStartTagInTable(p, token);\n } else {\n tokenInTable(p, token);\n }\n\n break;\n\n case 3:\n if (tn === $.COL) {\n colStartTagInTable(p, token);\n } else {\n tokenInTable(p, token);\n }\n\n break;\n\n case 4:\n if (tn === $.FORM) {\n formStartTagInTable(p, token);\n } else {\n tokenInTable(p, token);\n }\n\n break;\n\n case 5:\n if (tn === $.TABLE) {\n tableStartTagInTable(p, token);\n } else if (tn === $.STYLE) {\n startTagInHead(p, token);\n } else if (tn === $.TBODY || tn === $.TFOOT || tn === $.THEAD) {\n tbodyStartTagInTable(p, token);\n } else if (tn === $.INPUT) {\n inputStartTagInTable(p, token);\n } else {\n tokenInTable(p, token);\n }\n\n break;\n\n case 6:\n if (tn === $.SCRIPT) {\n startTagInHead(p, token);\n } else {\n tokenInTable(p, token);\n }\n\n break;\n\n case 7:\n if (tn === $.CAPTION) {\n captionStartTagInTable(p, token);\n } else {\n tokenInTable(p, token);\n }\n\n break;\n\n case 8:\n if (tn === $.COLGROUP) {\n colgroupStartTagInTable(p, token);\n } else if (tn === $.TEMPLATE) {\n startTagInHead(p, token);\n } else {\n tokenInTable(p, token);\n }\n\n break;\n\n default:\n tokenInTable(p, token);\n }\n}\n\nfunction endTagInTable(p, token) {\n const tn = token.tagName;\n\n if (tn === $.TABLE) {\n if (p.openElements.hasInTableScope($.TABLE)) {\n p.openElements.popUntilTagNamePopped($.TABLE);\n p._resetInsertionMode();\n }\n } else if (tn === $.TEMPLATE) {\n endTagInHead(p, token);\n } else if (\n tn !== $.BODY &&\n tn !== $.CAPTION &&\n tn !== $.COL &&\n tn !== $.COLGROUP &&\n tn !== $.HTML &&\n tn !== $.TBODY &&\n tn !== $.TD &&\n tn !== $.TFOOT &&\n tn !== $.TH &&\n tn !== $.THEAD &&\n tn !== $.TR\n ) {\n tokenInTable(p, token);\n }\n}\n\nfunction tokenInTable(p, token) {\n const savedFosterParentingState = p.fosterParentingEnabled;\n\n p.fosterParentingEnabled = true;\n p._processTokenInBodyMode(token);\n p.fosterParentingEnabled = savedFosterParentingState;\n}\n\n// The \"in table text\" insertion mode\n//------------------------------------------------------------------\nfunction whitespaceCharacterInTableText(p, token) {\n p.pendingCharacterTokens.push(token);\n}\n\nfunction characterInTableText(p, token) {\n p.pendingCharacterTokens.push(token);\n p.hasNonWhitespacePendingCharacterToken = true;\n}\n\nfunction tokenInTableText(p, token) {\n let i = 0;\n\n if (p.hasNonWhitespacePendingCharacterToken) {\n for (; i < p.pendingCharacterTokens.length; i++) {\n tokenInTable(p, p.pendingCharacterTokens[i]);\n }\n } else {\n for (; i < p.pendingCharacterTokens.length; i++) {\n p._insertCharacters(p.pendingCharacterTokens[i]);\n }\n }\n\n p.insertionMode = p.originalInsertionMode;\n p._processToken(token);\n}\n\n// The \"in caption\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInCaption(p, token) {\n const tn = token.tagName;\n\n if (\n tn === $.CAPTION ||\n tn === $.COL ||\n tn === $.COLGROUP ||\n tn === $.TBODY ||\n tn === $.TD ||\n tn === $.TFOOT ||\n tn === $.TH ||\n tn === $.THEAD ||\n tn === $.TR\n ) {\n if (p.openElements.hasInTableScope($.CAPTION)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped($.CAPTION);\n p.activeFormattingElements.clearToLastMarker();\n p.insertionMode = IN_TABLE_MODE;\n p._processToken(token);\n }\n } else {\n startTagInBody(p, token);\n }\n}\n\nfunction endTagInCaption(p, token) {\n const tn = token.tagName;\n\n if (tn === $.CAPTION || tn === $.TABLE) {\n if (p.openElements.hasInTableScope($.CAPTION)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped($.CAPTION);\n p.activeFormattingElements.clearToLastMarker();\n p.insertionMode = IN_TABLE_MODE;\n\n if (tn === $.TABLE) {\n p._processToken(token);\n }\n }\n } else if (\n tn !== $.BODY &&\n tn !== $.COL &&\n tn !== $.COLGROUP &&\n tn !== $.HTML &&\n tn !== $.TBODY &&\n tn !== $.TD &&\n tn !== $.TFOOT &&\n tn !== $.TH &&\n tn !== $.THEAD &&\n tn !== $.TR\n ) {\n endTagInBody(p, token);\n }\n}\n\n// The \"in column group\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInColumnGroup(p, token) {\n const tn = token.tagName;\n\n if (tn === $.HTML) {\n startTagInBody(p, token);\n } else if (tn === $.COL) {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n } else if (tn === $.TEMPLATE) {\n startTagInHead(p, token);\n } else {\n tokenInColumnGroup(p, token);\n }\n}\n\nfunction endTagInColumnGroup(p, token) {\n const tn = token.tagName;\n\n if (tn === $.COLGROUP) {\n if (p.openElements.currentTagName === $.COLGROUP) {\n p.openElements.pop();\n p.insertionMode = IN_TABLE_MODE;\n }\n } else if (tn === $.TEMPLATE) {\n endTagInHead(p, token);\n } else if (tn !== $.COL) {\n tokenInColumnGroup(p, token);\n }\n}\n\nfunction tokenInColumnGroup(p, token) {\n if (p.openElements.currentTagName === $.COLGROUP) {\n p.openElements.pop();\n p.insertionMode = IN_TABLE_MODE;\n p._processToken(token);\n }\n}\n\n// The \"in table body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInTableBody(p, token) {\n const tn = token.tagName;\n\n if (tn === $.TR) {\n p.openElements.clearBackToTableBodyContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = IN_ROW_MODE;\n } else if (tn === $.TH || tn === $.TD) {\n p.openElements.clearBackToTableBodyContext();\n p._insertFakeElement($.TR);\n p.insertionMode = IN_ROW_MODE;\n p._processToken(token);\n } else if (\n tn === $.CAPTION ||\n tn === $.COL ||\n tn === $.COLGROUP ||\n tn === $.TBODY ||\n tn === $.TFOOT ||\n tn === $.THEAD\n ) {\n if (p.openElements.hasTableBodyContextInTableScope()) {\n p.openElements.clearBackToTableBodyContext();\n p.openElements.pop();\n p.insertionMode = IN_TABLE_MODE;\n p._processToken(token);\n }\n } else {\n startTagInTable(p, token);\n }\n}\n\nfunction endTagInTableBody(p, token) {\n const tn = token.tagName;\n\n if (tn === $.TBODY || tn === $.TFOOT || tn === $.THEAD) {\n if (p.openElements.hasInTableScope(tn)) {\n p.openElements.clearBackToTableBodyContext();\n p.openElements.pop();\n p.insertionMode = IN_TABLE_MODE;\n }\n } else if (tn === $.TABLE) {\n if (p.openElements.hasTableBodyContextInTableScope()) {\n p.openElements.clearBackToTableBodyContext();\n p.openElements.pop();\n p.insertionMode = IN_TABLE_MODE;\n p._processToken(token);\n }\n } else if (\n (tn !== $.BODY && tn !== $.CAPTION && tn !== $.COL && tn !== $.COLGROUP) ||\n (tn !== $.HTML && tn !== $.TD && tn !== $.TH && tn !== $.TR)\n ) {\n endTagInTable(p, token);\n }\n}\n\n// The \"in row\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInRow(p, token) {\n const tn = token.tagName;\n\n if (tn === $.TH || tn === $.TD) {\n p.openElements.clearBackToTableRowContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = IN_CELL_MODE;\n p.activeFormattingElements.insertMarker();\n } else if (\n tn === $.CAPTION ||\n tn === $.COL ||\n tn === $.COLGROUP ||\n tn === $.TBODY ||\n tn === $.TFOOT ||\n tn === $.THEAD ||\n tn === $.TR\n ) {\n if (p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = IN_TABLE_BODY_MODE;\n p._processToken(token);\n }\n } else {\n startTagInTable(p, token);\n }\n}\n\nfunction endTagInRow(p, token) {\n const tn = token.tagName;\n\n if (tn === $.TR) {\n if (p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = IN_TABLE_BODY_MODE;\n }\n } else if (tn === $.TABLE) {\n if (p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = IN_TABLE_BODY_MODE;\n p._processToken(token);\n }\n } else if (tn === $.TBODY || tn === $.TFOOT || tn === $.THEAD) {\n if (p.openElements.hasInTableScope(tn) || p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = IN_TABLE_BODY_MODE;\n p._processToken(token);\n }\n } else if (\n (tn !== $.BODY && tn !== $.CAPTION && tn !== $.COL && tn !== $.COLGROUP) ||\n (tn !== $.HTML && tn !== $.TD && tn !== $.TH)\n ) {\n endTagInTable(p, token);\n }\n}\n\n// The \"in cell\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInCell(p, token) {\n const tn = token.tagName;\n\n if (\n tn === $.CAPTION ||\n tn === $.COL ||\n tn === $.COLGROUP ||\n tn === $.TBODY ||\n tn === $.TD ||\n tn === $.TFOOT ||\n tn === $.TH ||\n tn === $.THEAD ||\n tn === $.TR\n ) {\n if (p.openElements.hasInTableScope($.TD) || p.openElements.hasInTableScope($.TH)) {\n p._closeTableCell();\n p._processToken(token);\n }\n } else {\n startTagInBody(p, token);\n }\n}\n\nfunction endTagInCell(p, token) {\n const tn = token.tagName;\n\n if (tn === $.TD || tn === $.TH) {\n if (p.openElements.hasInTableScope(tn)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped(tn);\n p.activeFormattingElements.clearToLastMarker();\n p.insertionMode = IN_ROW_MODE;\n }\n } else if (tn === $.TABLE || tn === $.TBODY || tn === $.TFOOT || tn === $.THEAD || tn === $.TR) {\n if (p.openElements.hasInTableScope(tn)) {\n p._closeTableCell();\n p._processToken(token);\n }\n } else if (tn !== $.BODY && tn !== $.CAPTION && tn !== $.COL && tn !== $.COLGROUP && tn !== $.HTML) {\n endTagInBody(p, token);\n }\n}\n\n// The \"in select\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInSelect(p, token) {\n const tn = token.tagName;\n\n if (tn === $.HTML) {\n startTagInBody(p, token);\n } else if (tn === $.OPTION) {\n if (p.openElements.currentTagName === $.OPTION) {\n p.openElements.pop();\n }\n\n p._insertElement(token, NS.HTML);\n } else if (tn === $.OPTGROUP) {\n if (p.openElements.currentTagName === $.OPTION) {\n p.openElements.pop();\n }\n\n if (p.openElements.currentTagName === $.OPTGROUP) {\n p.openElements.pop();\n }\n\n p._insertElement(token, NS.HTML);\n } else if (tn === $.INPUT || tn === $.KEYGEN || tn === $.TEXTAREA || tn === $.SELECT) {\n if (p.openElements.hasInSelectScope($.SELECT)) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n\n if (tn !== $.SELECT) {\n p._processToken(token);\n }\n }\n } else if (tn === $.SCRIPT || tn === $.TEMPLATE) {\n startTagInHead(p, token);\n }\n}\n\nfunction endTagInSelect(p, token) {\n const tn = token.tagName;\n\n if (tn === $.OPTGROUP) {\n const prevOpenElement = p.openElements.items[p.openElements.stackTop - 1];\n const prevOpenElementTn = prevOpenElement && p.treeAdapter.getTagName(prevOpenElement);\n\n if (p.openElements.currentTagName === $.OPTION && prevOpenElementTn === $.OPTGROUP) {\n p.openElements.pop();\n }\n\n if (p.openElements.currentTagName === $.OPTGROUP) {\n p.openElements.pop();\n }\n } else if (tn === $.OPTION) {\n if (p.openElements.currentTagName === $.OPTION) {\n p.openElements.pop();\n }\n } else if (tn === $.SELECT && p.openElements.hasInSelectScope($.SELECT)) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n } else if (tn === $.TEMPLATE) {\n endTagInHead(p, token);\n }\n}\n\n//12.2.5.4.17 The \"in select in table\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInSelectInTable(p, token) {\n const tn = token.tagName;\n\n if (\n tn === $.CAPTION ||\n tn === $.TABLE ||\n tn === $.TBODY ||\n tn === $.TFOOT ||\n tn === $.THEAD ||\n tn === $.TR ||\n tn === $.TD ||\n tn === $.TH\n ) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n p._processToken(token);\n } else {\n startTagInSelect(p, token);\n }\n}\n\nfunction endTagInSelectInTable(p, token) {\n const tn = token.tagName;\n\n if (\n tn === $.CAPTION ||\n tn === $.TABLE ||\n tn === $.TBODY ||\n tn === $.TFOOT ||\n tn === $.THEAD ||\n tn === $.TR ||\n tn === $.TD ||\n tn === $.TH\n ) {\n if (p.openElements.hasInTableScope(tn)) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n p._processToken(token);\n }\n } else {\n endTagInSelect(p, token);\n }\n}\n\n// The \"in template\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInTemplate(p, token) {\n const tn = token.tagName;\n\n if (\n tn === $.BASE ||\n tn === $.BASEFONT ||\n tn === $.BGSOUND ||\n tn === $.LINK ||\n tn === $.META ||\n tn === $.NOFRAMES ||\n tn === $.SCRIPT ||\n tn === $.STYLE ||\n tn === $.TEMPLATE ||\n tn === $.TITLE\n ) {\n startTagInHead(p, token);\n } else {\n const newInsertionMode = TEMPLATE_INSERTION_MODE_SWITCH_MAP[tn] || IN_BODY_MODE;\n\n p._popTmplInsertionMode();\n p._pushTmplInsertionMode(newInsertionMode);\n p.insertionMode = newInsertionMode;\n p._processToken(token);\n }\n}\n\nfunction endTagInTemplate(p, token) {\n if (token.tagName === $.TEMPLATE) {\n endTagInHead(p, token);\n }\n}\n\nfunction eofInTemplate(p, token) {\n if (p.openElements.tmplCount > 0) {\n p.openElements.popUntilTagNamePopped($.TEMPLATE);\n p.activeFormattingElements.clearToLastMarker();\n p._popTmplInsertionMode();\n p._resetInsertionMode();\n p._processToken(token);\n } else {\n p.stopped = true;\n }\n}\n\n// The \"after body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterBody(p, token) {\n if (token.tagName === $.HTML) {\n startTagInBody(p, token);\n } else {\n tokenAfterBody(p, token);\n }\n}\n\nfunction endTagAfterBody(p, token) {\n if (token.tagName === $.HTML) {\n if (!p.fragmentContext) {\n p.insertionMode = AFTER_AFTER_BODY_MODE;\n }\n } else {\n tokenAfterBody(p, token);\n }\n}\n\nfunction tokenAfterBody(p, token) {\n p.insertionMode = IN_BODY_MODE;\n p._processToken(token);\n}\n\n// The \"in frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInFrameset(p, token) {\n const tn = token.tagName;\n\n if (tn === $.HTML) {\n startTagInBody(p, token);\n } else if (tn === $.FRAMESET) {\n p._insertElement(token, NS.HTML);\n } else if (tn === $.FRAME) {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n } else if (tn === $.NOFRAMES) {\n startTagInHead(p, token);\n }\n}\n\nfunction endTagInFrameset(p, token) {\n if (token.tagName === $.FRAMESET && !p.openElements.isRootHtmlElementCurrent()) {\n p.openElements.pop();\n\n if (!p.fragmentContext && p.openElements.currentTagName !== $.FRAMESET) {\n p.insertionMode = AFTER_FRAMESET_MODE;\n }\n }\n}\n\n// The \"after frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterFrameset(p, token) {\n const tn = token.tagName;\n\n if (tn === $.HTML) {\n startTagInBody(p, token);\n } else if (tn === $.NOFRAMES) {\n startTagInHead(p, token);\n }\n}\n\nfunction endTagAfterFrameset(p, token) {\n if (token.tagName === $.HTML) {\n p.insertionMode = AFTER_AFTER_FRAMESET_MODE;\n }\n}\n\n// The \"after after body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterAfterBody(p, token) {\n if (token.tagName === $.HTML) {\n startTagInBody(p, token);\n } else {\n tokenAfterAfterBody(p, token);\n }\n}\n\nfunction tokenAfterAfterBody(p, token) {\n p.insertionMode = IN_BODY_MODE;\n p._processToken(token);\n}\n\n// The \"after after frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterAfterFrameset(p, token) {\n const tn = token.tagName;\n\n if (tn === $.HTML) {\n startTagInBody(p, token);\n } else if (tn === $.NOFRAMES) {\n startTagInHead(p, token);\n }\n}\n\n// The rules for parsing tokens in foreign content\n//------------------------------------------------------------------\nfunction nullCharacterInForeignContent(p, token) {\n token.chars = unicode.REPLACEMENT_CHARACTER;\n p._insertCharacters(token);\n}\n\nfunction characterInForeignContent(p, token) {\n p._insertCharacters(token);\n p.framesetOk = false;\n}\n\nfunction startTagInForeignContent(p, token) {\n if (foreignContent.causesExit(token) && !p.fragmentContext) {\n while (\n p.treeAdapter.getNamespaceURI(p.openElements.current) !== NS.HTML &&\n !p._isIntegrationPoint(p.openElements.current)\n ) {\n p.openElements.pop();\n }\n\n p._processToken(token);\n } else {\n const current = p._getAdjustedCurrentElement();\n const currentNs = p.treeAdapter.getNamespaceURI(current);\n\n if (currentNs === NS.MATHML) {\n foreignContent.adjustTokenMathMLAttrs(token);\n } else if (currentNs === NS.SVG) {\n foreignContent.adjustTokenSVGTagName(token);\n foreignContent.adjustTokenSVGAttrs(token);\n }\n\n foreignContent.adjustTokenXMLAttrs(token);\n\n if (token.selfClosing) {\n p._appendElement(token, currentNs);\n } else {\n p._insertElement(token, currentNs);\n }\n\n token.ackSelfClosing = true;\n }\n}\n\nfunction endTagInForeignContent(p, token) {\n for (let i = p.openElements.stackTop; i > 0; i--) {\n const element = p.openElements.items[i];\n\n if (p.treeAdapter.getNamespaceURI(element) === NS.HTML) {\n p._processToken(token);\n break;\n }\n\n if (p.treeAdapter.getTagName(element).toLowerCase() === token.tagName) {\n p.openElements.popUntilElementPopped(element);\n break;\n }\n }\n}\n","'use strict'\n\nmodule.exports = parse\n\nvar search = /[#.]/g\n\n// Create a hast element from a simple CSS selector.\nfunction parse(selector, defaultTagName) {\n var value = selector || ''\n var name = defaultTagName || 'div'\n var props = {}\n var start = 0\n var subvalue\n var previous\n var match\n\n while (start < value.length) {\n search.lastIndex = start\n match = search.exec(value)\n subvalue = value.slice(start, match ? match.index : value.length)\n\n if (subvalue) {\n if (!previous) {\n name = subvalue\n } else if (previous === '#') {\n props.id = subvalue\n } else if (props.className) {\n props.className.push(subvalue)\n } else {\n props.className = [subvalue]\n }\n\n start += subvalue.length\n }\n\n if (match) {\n previous = match[0]\n start++\n }\n }\n\n return {type: 'element', tagName: name, properties: props, children: []}\n}\n","'use strict'\n\nvar find = require('property-information/find')\nvar normalize = require('property-information/normalize')\nvar parseSelector = require('hast-util-parse-selector')\nvar spaces = require('space-separated-tokens').parse\nvar commas = require('comma-separated-tokens').parse\n\nmodule.exports = factory\n\nvar own = {}.hasOwnProperty\n\nfunction factory(schema, defaultTagName, caseSensitive) {\n var adjust = caseSensitive ? createAdjustMap(caseSensitive) : null\n\n return h\n\n // Hyperscript compatible DSL for creating virtual hast trees.\n function h(selector, properties) {\n var node = parseSelector(selector, defaultTagName)\n var children = Array.prototype.slice.call(arguments, 2)\n var name = node.tagName.toLowerCase()\n var property\n\n node.tagName = adjust && own.call(adjust, name) ? adjust[name] : name\n\n if (properties && isChildren(properties, node)) {\n children.unshift(properties)\n properties = null\n }\n\n if (properties) {\n for (property in properties) {\n addProperty(node.properties, property, properties[property])\n }\n }\n\n addChild(node.children, children)\n\n if (node.tagName === 'template') {\n node.content = {type: 'root', children: node.children}\n node.children = []\n }\n\n return node\n }\n\n function addProperty(properties, key, value) {\n var info\n var property\n var result\n\n // Ignore nullish and NaN values.\n if (value === null || value === undefined || value !== value) {\n return\n }\n\n info = find(schema, key)\n property = info.property\n result = value\n\n // Handle list values.\n if (typeof result === 'string') {\n if (info.spaceSeparated) {\n result = spaces(result)\n } else if (info.commaSeparated) {\n result = commas(result)\n } else if (info.commaOrSpaceSeparated) {\n result = spaces(commas(result).join(' '))\n }\n }\n\n // Accept `object` on style.\n if (property === 'style' && typeof value !== 'string') {\n result = style(result)\n }\n\n // Class-names (which can be added both on the `selector` and here).\n if (property === 'className' && properties.className) {\n result = properties.className.concat(result)\n }\n\n properties[property] = parsePrimitives(info, property, result)\n }\n}\n\nfunction isChildren(value, node) {\n return (\n typeof value === 'string' ||\n 'length' in value ||\n isNode(node.tagName, value)\n )\n}\n\nfunction isNode(tagName, value) {\n var type = value.type\n\n if (tagName === 'input' || !type || typeof type !== 'string') {\n return false\n }\n\n if (typeof value.children === 'object' && 'length' in value.children) {\n return true\n }\n\n type = type.toLowerCase()\n\n if (tagName === 'button') {\n return (\n type !== 'menu' &&\n type !== 'submit' &&\n type !== 'reset' &&\n type !== 'button'\n )\n }\n\n return 'value' in value\n}\n\nfunction addChild(nodes, value) {\n var index\n var length\n\n if (typeof value === 'string' || typeof value === 'number') {\n nodes.push({type: 'text', value: String(value)})\n return\n }\n\n if (typeof value === 'object' && 'length' in value) {\n index = -1\n length = value.length\n\n while (++index < length) {\n addChild(nodes, value[index])\n }\n\n return\n }\n\n if (typeof value !== 'object' || !('type' in value)) {\n throw new Error('Expected node, nodes, or string, got `' + value + '`')\n }\n\n nodes.push(value)\n}\n\n// Parse a (list of) primitives.\nfunction parsePrimitives(info, name, value) {\n var index\n var length\n var result\n\n if (typeof value !== 'object' || !('length' in value)) {\n return parsePrimitive(info, name, value)\n }\n\n length = value.length\n index = -1\n result = []\n\n while (++index < length) {\n result[index] = parsePrimitive(info, name, value[index])\n }\n\n return result\n}\n\n// Parse a single primitives.\nfunction parsePrimitive(info, name, value) {\n var result = value\n\n if (info.number || info.positiveNumber) {\n if (!isNaN(result) && result !== '') {\n result = Number(result)\n }\n } else if (info.boolean || info.overloadedBoolean) {\n // Accept `boolean` and `string`.\n if (\n typeof result === 'string' &&\n (result === '' || normalize(value) === normalize(name))\n ) {\n result = true\n }\n }\n\n return result\n}\n\nfunction style(value) {\n var result = []\n var key\n\n for (key in value) {\n result.push([key, value[key]].join(': '))\n }\n\n return result.join('; ')\n}\n\nfunction createAdjustMap(values) {\n var length = values.length\n var index = -1\n var result = {}\n var value\n\n while (++index < length) {\n value = values[index]\n result[value.toLowerCase()] = value\n }\n\n return result\n}\n","'use strict'\n\nvar schema = require('property-information/svg')\nvar caseSensitive = require('./svg-case-sensitive-tag-names.json')\nvar factory = require('./factory')\n\nvar svg = factory(schema, 'g', caseSensitive)\nsvg.displayName = 'svg'\n\nmodule.exports = svg\n","'use strict'\n\nvar schema = require('property-information/html')\nvar factory = require('./factory')\n\nvar html = factory(schema, 'div')\nhtml.displayName = 'html'\n\nmodule.exports = html\n","'use strict'\n\nmodule.exports = require('./html')\n","'use strict'\n\nmodule.exports = factory\n\nfunction factory(file) {\n var value = String(file)\n var indices = []\n var search = /\\r?\\n|\\r/g\n\n while (search.exec(value)) {\n indices.push(search.lastIndex)\n }\n\n indices.push(value.length + 1)\n\n return {\n toPoint: offsetToPoint,\n toPosition: offsetToPoint,\n toOffset: pointToOffset\n }\n\n // Get the line and column-based `point` for `offset` in the bound indices.\n function offsetToPoint(offset) {\n var index = -1\n\n if (offset > -1 && offset < indices[indices.length - 1]) {\n while (++index < indices.length) {\n if (indices[index] > offset) {\n return {\n line: index + 1,\n column: offset - (indices[index - 1] || 0) + 1,\n offset: offset\n }\n }\n }\n }\n\n return {}\n }\n\n // Get the `offset` for a line and column-based `point` in the bound\n // indices.\n function pointToOffset(point) {\n var line = point && point.line\n var column = point && point.column\n var offset\n\n if (!isNaN(line) && !isNaN(column) && line - 1 in indices) {\n offset = (indices[line - 2] || 0) + column - 1 || 0\n }\n\n return offset > -1 && offset < indices[indices.length - 1] ? offset : -1\n }\n}\n","'use strict'\n\nvar s = require('hastscript/svg')\nvar h = require('hastscript')\nvar find = require('property-information/find')\nvar html = require('property-information/html')\nvar svg = require('property-information/svg')\nvar vfileLocation = require('vfile-location')\nvar ns = require('web-namespaces')\n\nmodule.exports = wrapper\n\nvar own = {}.hasOwnProperty\n\n// Handlers.\nvar map = {\n '#document': root,\n '#document-fragment': root,\n '#text': text,\n '#comment': comment,\n '#documentType': doctype\n}\n\n// Wrapper to normalise options.\nfunction wrapper(ast, options) {\n var settings = options || {}\n var file\n\n if (settings.messages) {\n file = settings\n settings = {}\n } else {\n file = settings.file\n }\n\n return transform(ast, {\n schema: settings.space === 'svg' ? svg : html,\n file: file,\n verbose: settings.verbose\n })\n}\n\n// Transform a node.\nfunction transform(ast, config) {\n var schema = config.schema\n var fn = own.call(map, ast.nodeName) ? map[ast.nodeName] : element\n var children\n var result\n var position\n\n if (fn === element) {\n config.schema = ast.namespaceURI === ns.svg ? svg : html\n }\n\n if (ast.childNodes) {\n children = nodes(ast.childNodes, config)\n }\n\n result = fn(ast, children, config)\n\n if (ast.sourceCodeLocation && config.file) {\n position = location(result, ast.sourceCodeLocation, config)\n\n if (position) {\n config.location = true\n result.position = position\n }\n }\n\n config.schema = schema\n\n return result\n}\n\n// Transform children.\nfunction nodes(children, config) {\n var index = -1\n var result = []\n\n while (++index < children.length) {\n result[index] = transform(children[index], config)\n }\n\n return result\n}\n\n// Transform a document.\n// Stores `ast.quirksMode` in `node.data.quirksMode`.\nfunction root(ast, children, config) {\n var result = {\n type: 'root',\n children: children,\n data: {quirksMode: ast.mode === 'quirks' || ast.mode === 'limited-quirks'}\n }\n var doc\n var location\n\n if (config.file && config.location) {\n doc = String(config.file)\n location = vfileLocation(doc)\n result.position = {\n start: location.toPoint(0),\n end: location.toPoint(doc.length)\n }\n }\n\n return result\n}\n\n// Transform a doctype.\nfunction doctype(ast) {\n return {\n type: 'doctype',\n name: ast.name || '',\n public: ast.publicId || null,\n system: ast.systemId || null\n }\n}\n\n// Transform a text.\nfunction text(ast) {\n return {type: 'text', value: ast.value}\n}\n\n// Transform a comment.\nfunction comment(ast) {\n return {type: 'comment', value: ast.data}\n}\n\n// Transform an element.\nfunction element(ast, children, config) {\n var fn = config.schema.space === 'svg' ? s : h\n var props = {}\n var index = -1\n var result\n var attribute\n var pos\n var start\n var end\n\n while (++index < ast.attrs.length) {\n attribute = ast.attrs[index]\n props[(attribute.prefix ? attribute.prefix + ':' : '') + attribute.name] =\n attribute.value\n }\n\n result = fn(ast.tagName, props, children)\n\n if (result.tagName === 'template' && 'content' in ast) {\n pos = ast.sourceCodeLocation\n start = pos && pos.startTag && position(pos.startTag).end\n end = pos && pos.endTag && position(pos.endTag).start\n\n result.content = transform(ast.content, config)\n\n if ((start || end) && config.file) {\n result.content.position = {start: start, end: end}\n }\n }\n\n return result\n}\n\n// Create clean positional information.\nfunction location(node, location, config) {\n var result = position(location)\n var tail\n var key\n var props\n\n if (node.type === 'element') {\n tail = node.children[node.children.length - 1]\n\n // Bug for unclosed with children.\n // See: <https://github.com/inikulin/parse5/issues/109>.\n if (!location.endTag && tail && tail.position && tail.position.end) {\n result.end = Object.assign({}, tail.position.end)\n }\n\n if (config.verbose) {\n props = {}\n\n for (key in location.attrs) {\n props[find(config.schema, key).property] = position(location.attrs[key])\n }\n\n node.data = {\n position: {\n opening: position(location.startTag),\n closing: location.endTag ? position(location.endTag) : null,\n properties: props\n }\n }\n }\n }\n\n return result\n}\n\nfunction position(loc) {\n var start = point({\n line: loc.startLine,\n column: loc.startCol,\n offset: loc.startOffset\n })\n var end = point({\n line: loc.endLine,\n column: loc.endCol,\n offset: loc.endOffset\n })\n return start || end ? {start: start, end: end} : null\n}\n\nfunction point(point) {\n return point.line && point.column ? point : null\n}\n","// http://www.w3.org/TR/CSS21/grammar.html\n// https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027\nvar COMMENT_REGEX = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\n\nvar NEWLINE_REGEX = /\\n/g;\nvar WHITESPACE_REGEX = /^\\s*/;\n\n// declaration\nvar PROPERTY_REGEX = /^(\\*?[-#/*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/;\nvar COLON_REGEX = /^:\\s*/;\nvar VALUE_REGEX = /^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};])+)/;\nvar SEMICOLON_REGEX = /^[;\\s]*/;\n\n// https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\nvar TRIM_REGEX = /^\\s+|\\s+$/g;\n\n// strings\nvar NEWLINE = '\\n';\nvar FORWARD_SLASH = '/';\nvar ASTERISK = '*';\nvar EMPTY_STRING = '';\n\n// types\nvar TYPE_COMMENT = 'comment';\nvar TYPE_DECLARATION = 'declaration';\n\n/**\n * @param {String} style\n * @param {Object} [options]\n * @return {Object[]}\n * @throws {TypeError}\n * @throws {Error}\n */\nmodule.exports = function(style, options) {\n if (typeof style !== 'string') {\n throw new TypeError('First argument must be a string');\n }\n\n if (!style) return [];\n\n options = options || {};\n\n /**\n * Positional.\n */\n var lineno = 1;\n var column = 1;\n\n /**\n * Update lineno and column based on `str`.\n *\n * @param {String} str\n */\n function updatePosition(str) {\n var lines = str.match(NEWLINE_REGEX);\n if (lines) lineno += lines.length;\n var i = str.lastIndexOf(NEWLINE);\n column = ~i ? str.length - i : column + str.length;\n }\n\n /**\n * Mark position and patch `node.position`.\n *\n * @return {Function}\n */\n function position() {\n var start = { line: lineno, column: column };\n return function(node) {\n node.position = new Position(start);\n whitespace();\n return node;\n };\n }\n\n /**\n * Store position information for a node.\n *\n * @constructor\n * @property {Object} start\n * @property {Object} end\n * @property {undefined|String} source\n */\n function Position(start) {\n this.start = start;\n this.end = { line: lineno, column: column };\n this.source = options.source;\n }\n\n /**\n * Non-enumerable source string.\n */\n Position.prototype.content = style;\n\n var errorsList = [];\n\n /**\n * Error `msg`.\n *\n * @param {String} msg\n * @throws {Error}\n */\n function error(msg) {\n var err = new Error(\n options.source + ':' + lineno + ':' + column + ': ' + msg\n );\n err.reason = msg;\n err.filename = options.source;\n err.line = lineno;\n err.column = column;\n err.source = style;\n\n if (options.silent) {\n errorsList.push(err);\n } else {\n throw err;\n }\n }\n\n /**\n * Match `re` and return captures.\n *\n * @param {RegExp} re\n * @return {undefined|Array}\n */\n function match(re) {\n var m = re.exec(style);\n if (!m) return;\n var str = m[0];\n updatePosition(str);\n style = style.slice(str.length);\n return m;\n }\n\n /**\n * Parse whitespace.\n */\n function whitespace() {\n match(WHITESPACE_REGEX);\n }\n\n /**\n * Parse comments.\n *\n * @param {Object[]} [rules]\n * @return {Object[]}\n */\n function comments(rules) {\n var c;\n rules = rules || [];\n while ((c = comment())) {\n if (c !== false) {\n rules.push(c);\n }\n }\n return rules;\n }\n\n /**\n * Parse comment.\n *\n * @return {Object}\n * @throws {Error}\n */\n function comment() {\n var pos = position();\n if (FORWARD_SLASH != style.charAt(0) || ASTERISK != style.charAt(1)) return;\n\n var i = 2;\n while (\n EMPTY_STRING != style.charAt(i) &&\n (ASTERISK != style.charAt(i) || FORWARD_SLASH != style.charAt(i + 1))\n ) {\n ++i;\n }\n i += 2;\n\n if (EMPTY_STRING === style.charAt(i - 1)) {\n return error('End of comment missing');\n }\n\n var str = style.slice(2, i - 2);\n column += 2;\n updatePosition(str);\n style = style.slice(i);\n column += 2;\n\n return pos({\n type: TYPE_COMMENT,\n comment: str\n });\n }\n\n /**\n * Parse declaration.\n *\n * @return {Object}\n * @throws {Error}\n */\n function declaration() {\n var pos = position();\n\n // prop\n var prop = match(PROPERTY_REGEX);\n if (!prop) return;\n comment();\n\n // :\n if (!match(COLON_REGEX)) return error(\"property missing ':'\");\n\n // val\n var val = match(VALUE_REGEX);\n\n var ret = pos({\n type: TYPE_DECLARATION,\n property: trim(prop[0].replace(COMMENT_REGEX, EMPTY_STRING)),\n value: val\n ? trim(val[0].replace(COMMENT_REGEX, EMPTY_STRING))\n : EMPTY_STRING\n });\n\n // ;\n match(SEMICOLON_REGEX);\n\n return ret;\n }\n\n /**\n * Parse declarations.\n *\n * @return {Object[]}\n */\n function declarations() {\n var decls = [];\n\n comments(decls);\n\n // declarations\n var decl;\n while ((decl = declaration())) {\n if (decl !== false) {\n decls.push(decl);\n comments(decls);\n }\n }\n\n return decls;\n }\n\n whitespace();\n return declarations();\n};\n\n/**\n * Trim `str`.\n *\n * @param {String} str\n * @return {String}\n */\nfunction trim(str) {\n return str ? str.replace(TRIM_REGEX, EMPTY_STRING) : EMPTY_STRING;\n}\n","var parse = require('inline-style-parser');\n\n/**\n * Parses inline style to object.\n *\n * @example\n * // returns { 'line-height': '42' }\n * StyleToObject('line-height: 42;');\n *\n * @param {String} style - The inline style.\n * @param {Function} [iterator] - The iterator function.\n * @return {null|Object}\n */\nfunction StyleToObject(style, iterator) {\n var output = null;\n if (!style || typeof style !== 'string') {\n return output;\n }\n\n var declaration;\n var declarations = parse(style);\n var hasIterator = typeof iterator === 'function';\n var property;\n var value;\n\n for (var i = 0, len = declarations.length; i < len; i++) {\n declaration = declarations[i];\n property = declaration.property;\n value = declaration.value;\n\n if (hasIterator) {\n iterator(property, value, declaration);\n } else if (value) {\n output || (output = {});\n output[property] = value;\n }\n }\n\n return output;\n}\n\nmodule.exports = StyleToObject;\n","'use strict'\n\nvar html = require('property-information/html')\nvar svg = require('property-information/svg')\nvar find = require('property-information/find')\nvar hastToReact = require('property-information/hast-to-react.json')\nvar spaces = require('space-separated-tokens')\nvar commas = require('comma-separated-tokens')\nvar style = require('style-to-object')\nvar ns = require('web-namespaces')\nvar convert = require('unist-util-is/convert')\n\nvar root = convert('root')\nvar element = convert('element')\nvar text = convert('text')\n\nmodule.exports = wrapper\n\nfunction wrapper(h, node, options) {\n var settings = options || {}\n var r = react(h)\n var v = vue(h)\n var vd = vdom(h)\n var prefix\n\n if (typeof h !== 'function') {\n throw new Error('h is not a function')\n }\n\n if (typeof settings === 'string' || typeof settings === 'boolean') {\n prefix = settings\n settings = {}\n } else {\n prefix = settings.prefix\n }\n\n if (root(node)) {\n node =\n node.children.length === 1 && element(node.children[0])\n ? node.children[0]\n : {\n type: 'element',\n tagName: 'div',\n properties: {},\n children: node.children\n }\n } else if (!element(node)) {\n throw new Error(\n 'Expected root or element, not `' + ((node && node.type) || node) + '`'\n )\n }\n\n return toH(h, node, {\n schema: settings.space === 'svg' ? svg : html,\n prefix: prefix == null ? (r || v || vd ? 'h-' : null) : prefix,\n key: 0,\n react: r,\n vue: v,\n vdom: vd,\n hyperscript: hyperscript(h)\n })\n}\n\n// Transform a hast node through a hyperscript interface to *anything*!\nfunction toH(h, node, ctx) {\n var parentSchema = ctx.schema\n var schema = parentSchema\n var name = node.tagName\n var attributes = {}\n var nodes = []\n var index = -1\n var key\n var value\n\n if (parentSchema.space === 'html' && name.toLowerCase() === 'svg') {\n schema = svg\n ctx.schema = schema\n }\n\n for (key in node.properties) {\n addAttribute(attributes, key, node.properties[key], ctx, name)\n }\n\n if (ctx.vdom) {\n if (schema.space === 'html') {\n name = name.toUpperCase()\n } else {\n attributes.namespace = ns[schema.space]\n }\n }\n\n if (ctx.prefix) {\n ctx.key++\n attributes.key = ctx.prefix + ctx.key\n }\n\n if (node.children) {\n while (++index < node.children.length) {\n value = node.children[index]\n\n if (element(value)) {\n nodes.push(toH(h, value, ctx))\n } else if (text(value)) {\n nodes.push(value.value)\n }\n }\n }\n\n // Restore parent schema.\n ctx.schema = parentSchema\n\n // Ensure no React warnings are triggered for void elements having children\n // passed in.\n return nodes.length\n ? h.call(node, name, attributes, nodes)\n : h.call(node, name, attributes)\n}\n\nfunction addAttribute(props, prop, value, ctx, name) {\n var info = find(ctx.schema, prop)\n var subprop\n\n // Ignore nullish and `NaN` values.\n // Ignore `false` and falsey known booleans for hyperlike DSLs.\n if (\n value == null ||\n value !== value ||\n (value === false && (ctx.vue || ctx.vdom || ctx.hyperscript)) ||\n (!value && info.boolean && (ctx.vue || ctx.vdom || ctx.hyperscript))\n ) {\n return\n }\n\n if (value && typeof value === 'object' && 'length' in value) {\n // Accept `array`.\n // Most props are space-separated.\n value = (info.commaSeparated ? commas : spaces).stringify(value)\n }\n\n // Treat `true` and truthy known booleans.\n if (info.boolean && ctx.hyperscript) {\n value = ''\n }\n\n // VDOM, Vue, and React accept `style` as object.\n if (\n info.property === 'style' &&\n typeof value === 'string' &&\n (ctx.react || ctx.vue || ctx.vdom)\n ) {\n value = parseStyle(value, name)\n }\n\n if (ctx.vue) {\n if (info.property !== 'style') subprop = 'attrs'\n } else if (!info.mustUseProperty) {\n if (ctx.vdom) {\n if (info.property !== 'style') subprop = 'attributes'\n } else if (ctx.hyperscript) {\n subprop = 'attrs'\n }\n }\n\n if (subprop) {\n if (!props[subprop]) props[subprop] = {}\n props[subprop][info.attribute] = value\n } else if (info.space && ctx.react) {\n props[hastToReact[info.property] || info.property] = value\n } else {\n props[info.attribute] = value\n }\n}\n\n// Check if `h` is `react.createElement`.\nfunction react(h) {\n var node = h && h('div')\n return Boolean(\n node && ('_owner' in node || '_store' in node) && node.key == null\n )\n}\n\n// Check if `h` is `hyperscript`.\nfunction hyperscript(h) {\n return Boolean(h && h.context && h.cleanup)\n}\n\n// Check if `h` is `virtual-dom/h`.\nfunction vdom(h) {\n return h && h('div').type === 'VirtualNode'\n}\n\nfunction vue(h) {\n var node = h && h('div')\n return Boolean(node && node.context && node.context._isVue)\n}\n\nfunction parseStyle(value, tagName) {\n var result = {}\n\n try {\n style(value, iterator)\n } catch (error) {\n error.message =\n tagName + '[style]' + error.message.slice('undefined'.length)\n throw error\n }\n\n return result\n\n function iterator(name, value) {\n if (name.slice(0, 4) === '-ms-') name = 'ms-' + name.slice(4)\n result[name.replace(/-([a-z])/g, styleReplacer)] = value\n }\n}\n\nfunction styleReplacer($0, $1) {\n return $1.toUpperCase()\n}\n","'use strict'\n\nmodule.exports = factory\n\nvar noop = Function.prototype\nvar own = {}.hasOwnProperty\n\n// Handle values based on a property.\nfunction factory(key, options) {\n var settings = options || {}\n\n function one(value) {\n var fn = one.invalid\n var handlers = one.handlers\n\n if (value && own.call(value, key)) {\n fn = own.call(handlers, value[key]) ? handlers[value[key]] : one.unknown\n }\n\n return (fn || noop).apply(this, arguments)\n }\n\n one.handlers = settings.handlers || {}\n one.invalid = settings.invalid\n one.unknown = settings.unknown\n\n return one\n}\n","'use strict'\n\nvar xtend = require('xtend')\nvar html = require('property-information/html')\nvar svg = require('property-information/svg')\nvar find = require('property-information/find')\nvar toH = require('hast-to-hyperscript')\nvar ns = require('web-namespaces')\nvar zwitch = require('zwitch')\n\nmodule.exports = transform\n\nvar ignoredSpaces = ['svg', 'html']\n\nvar one = zwitch('type')\n\none.handlers.root = root\none.handlers.element = element\none.handlers.text = text\none.handlers.comment = comment\none.handlers.doctype = doctype\n\n// Transform a tree from hast to Parse5’s AST.\nfunction transform(tree, space) {\n return one(tree, space === 'svg' ? svg : html)\n}\n\nfunction root(node, schema) {\n var data = node.data || {}\n var mode = data.quirksMode ? 'quirks' : 'no-quirks'\n\n return patch(node, {nodeName: '#document', mode: mode}, schema)\n}\n\nfunction fragment(node, schema) {\n return patch(node, {nodeName: '#document-fragment'}, schema)\n}\n\nfunction doctype(node, schema) {\n return patch(\n node,\n {\n nodeName: '#documentType',\n name: node.name,\n publicId: node.public || '',\n systemId: node.system || ''\n },\n schema\n )\n}\n\nfunction text(node, schema) {\n return patch(node, {nodeName: '#text', value: node.value}, schema)\n}\n\nfunction comment(node, schema) {\n return patch(node, {nodeName: '#comment', data: node.value}, schema)\n}\n\nfunction element(node, schema) {\n var space = schema.space\n var shallow = xtend(node, {children: []})\n\n return toH(h, shallow, {space: space})\n\n function h(name, attrs) {\n var values = []\n var p5\n var attr\n var value\n var key\n var info\n var pos\n\n for (key in attrs) {\n info = find(schema, key)\n attr = attrs[key]\n\n if (attr === false || (info.boolean && !attr)) {\n continue\n }\n\n value = {name: key, value: attr === true ? '' : String(attr)}\n\n if (info.space && ignoredSpaces.indexOf(info.space) === -1) {\n pos = key.indexOf(':')\n\n if (pos === -1) {\n value.prefix = ''\n } else {\n value.name = key.slice(pos + 1)\n value.prefix = key.slice(0, pos)\n }\n\n value.namespace = ns[info.space]\n }\n\n values.push(value)\n }\n\n p5 = patch(node, {nodeName: name, tagName: name, attrs: values}, schema)\n\n if (name === 'template') {\n p5.content = fragment(shallow.content, schema)\n }\n\n return p5\n }\n}\n\n// Patch specific properties.\nfunction patch(node, p5, parentSchema) {\n var schema = parentSchema\n var position = node.position\n var children = node.children\n var childNodes = []\n var length = children ? children.length : 0\n var index = -1\n var child\n\n if (node.type === 'element') {\n if (schema.space === 'html' && node.tagName === 'svg') {\n schema = svg\n }\n\n p5.namespaceURI = ns[schema.space]\n }\n\n while (++index < length) {\n child = one(children[index], schema)\n child.parentNode = p5\n childNodes[index] = child\n }\n\n if (node.type === 'element' || node.type === 'root') {\n p5.childNodes = childNodes\n }\n\n if (position && position.start && position.end) {\n p5.sourceCodeLocation = {\n startLine: position.start.line,\n startCol: position.start.column,\n startOffset: position.start.offset,\n endLine: position.end.line,\n endCol: position.end.column,\n endOffset: position.end.offset\n }\n }\n\n return p5\n}\n","'use strict'\n\nvar Parser = require('parse5/lib/parser')\nvar pos = require('unist-util-position')\nvar visit = require('unist-util-visit')\nvar fromParse5 = require('hast-util-from-parse5')\nvar toParse5 = require('hast-util-to-parse5')\nvar voids = require('html-void-elements')\nvar ns = require('web-namespaces')\nvar zwitch = require('zwitch')\nvar xtend = require('xtend')\n\nmodule.exports = wrap\n\nvar inTemplateMode = 'IN_TEMPLATE_MODE'\nvar dataState = 'DATA_STATE'\nvar characterToken = 'CHARACTER_TOKEN'\nvar startTagToken = 'START_TAG_TOKEN'\nvar endTagToken = 'END_TAG_TOKEN'\nvar commentToken = 'COMMENT_TOKEN'\nvar doctypeToken = 'DOCTYPE_TOKEN'\n\nvar parseOptions = {sourceCodeLocationInfo: true, scriptingEnabled: false}\n\nfunction wrap(tree, file, options) {\n var parser = new Parser(parseOptions)\n var one = zwitch('type', {\n handlers: {\n root: root,\n element: element,\n text: text,\n comment: comment,\n doctype: doctype,\n raw: raw\n },\n unknown: unknown\n })\n var stitches\n var tokenizer\n var preprocessor\n var posTracker\n var locationTracker\n var result\n var index\n\n if (file && !('contents' in file)) {\n options = file\n file = undefined\n }\n\n if (options && options.passThrough) {\n index = -1\n\n while (++index < options.passThrough.length) {\n one.handlers[options.passThrough[index]] = stitch\n }\n }\n\n result = fromParse5(documentMode(tree) ? document() : fragment(), file)\n\n if (stitches) {\n visit(result, 'comment', mend)\n }\n\n // Unpack if possible and when not given a `root`.\n if (tree.type !== 'root' && result.children.length === 1) {\n return result.children[0]\n }\n\n return result\n\n function mend(node, index, parent) {\n if (node.value.stitch) {\n parent.children[index] = node.value.stitch\n return index\n }\n }\n\n function fragment() {\n var context = {\n nodeName: 'template',\n tagName: 'template',\n attrs: [],\n namespaceURI: ns.html,\n childNodes: []\n }\n var mock = {\n nodeName: 'documentmock',\n tagName: 'documentmock',\n attrs: [],\n namespaceURI: ns.html,\n childNodes: []\n }\n var doc = {nodeName: '#document-fragment', childNodes: []}\n\n parser._bootstrap(mock, context)\n parser._pushTmplInsertionMode(inTemplateMode)\n parser._initTokenizerForFragmentParsing()\n parser._insertFakeRootElement()\n parser._resetInsertionMode()\n parser._findFormInFragmentContext()\n\n tokenizer = parser.tokenizer\n preprocessor = tokenizer.preprocessor\n locationTracker = tokenizer.__mixins[0]\n posTracker = locationTracker.posTracker\n\n one(tree)\n\n parser._adoptNodes(mock.childNodes[0], doc)\n\n return doc\n }\n\n function document() {\n var doc = parser.treeAdapter.createDocument()\n\n parser._bootstrap(doc, null)\n tokenizer = parser.tokenizer\n preprocessor = tokenizer.preprocessor\n locationTracker = tokenizer.__mixins[0]\n posTracker = locationTracker.posTracker\n\n one(tree)\n\n return doc\n }\n\n function all(nodes) {\n var index = -1\n\n /* istanbul ignore else - invalid nodes, see rehypejs/rehype-raw#7. */\n if (nodes) {\n while (++index < nodes.length) {\n one(nodes[index])\n }\n }\n }\n\n function root(node) {\n all(node.children)\n }\n\n function element(node) {\n resetTokenizer()\n parser._processToken(startTag(node), ns.html)\n\n all(node.children)\n\n if (voids.indexOf(node.tagName) < 0) {\n resetTokenizer()\n parser._processToken(endTag(node))\n }\n }\n\n function text(node) {\n resetTokenizer()\n parser._processToken({\n type: characterToken,\n chars: node.value,\n location: createParse5Location(node)\n })\n }\n\n function doctype(node) {\n var p5 = toParse5(node)\n resetTokenizer()\n parser._processToken({\n type: doctypeToken,\n name: p5.name,\n forceQuirks: false,\n publicId: p5.publicId,\n systemId: p5.systemId,\n location: createParse5Location(node)\n })\n }\n\n function comment(node) {\n resetTokenizer()\n parser._processToken({\n type: commentToken,\n data: node.value,\n location: createParse5Location(node)\n })\n }\n\n function raw(node) {\n var start = pos.start(node)\n var line = start.line || 1\n var column = start.column || 1\n var offset = start.offset || 0\n var token\n\n // Reset preprocessor:\n // See: <https://github.com/inikulin/parse5/blob/9c683e1/packages/parse5/lib/tokenizer/preprocessor.js>.\n preprocessor.html = null\n preprocessor.pos = -1\n preprocessor.lastGapPos = -1\n preprocessor.lastCharPos = -1\n preprocessor.gapStack = []\n preprocessor.skipNextNewLine = false\n preprocessor.lastChunkWritten = false\n preprocessor.endOfChunkHit = false\n\n // Reset preprocessor mixin:\n // See: <https://github.com/inikulin/parse5/blob/9c683e1/packages/parse5/lib/extensions/position-tracking/preprocessor-mixin.js>.\n posTracker.isEol = false\n posTracker.lineStartPos = -column + 1 // Looks weird, but ensures we get correct positional info.\n posTracker.droppedBufferSize = offset\n posTracker.offset = 0\n posTracker.col = 1\n posTracker.line = line\n\n // Reset location tracker:\n // See: <https://github.com/inikulin/parse5/blob/9c683e1/packages/parse5/lib/extensions/location-info/tokenizer-mixin.js>.\n locationTracker.currentAttrLocation = null\n locationTracker.ctLoc = createParse5Location(node)\n\n // See the code for `parse` and `parseFragment`:\n // See: <https://github.com/inikulin/parse5/blob/9c683e1/packages/parse5/lib/parser/index.js#L371>.\n tokenizer.write(node.value)\n parser._runParsingLoop(null)\n\n // Process final characters if they’re still there after hibernating.\n // Similar to:\n // See: <https://github.com/inikulin/parse5/blob/9c683e1/packages/parse5/lib/extensions/location-info/tokenizer-mixin.js#L95>.\n token = tokenizer.currentCharacterToken\n\n if (token) {\n token.location.endLine = posTracker.line\n token.location.endCol = posTracker.col + 1\n token.location.endOffset = posTracker.offset + 1\n parser._processToken(token)\n }\n }\n\n function stitch(node) {\n var clone = Object.assign({}, node)\n\n stitches = true\n\n // Recurse, because to somewhat handle `[<x>]</x>` (where `[]` denotes the\n // passed through node).\n if (node.children) {\n clone.children = wrap(\n {type: 'root', children: node.children},\n file,\n options\n ).children\n }\n\n // Hack: `value` is supposed to be a string, but as none of the tools\n // (`parse5` or `hast-util-from-parse5`) looks at it, we can pass nodes\n // through.\n comment({value: {stitch: clone}})\n }\n\n function resetTokenizer() {\n // Reset tokenizer:\n // See: <https://github.com/inikulin/parse5/blob/9c683e1/packages/parse5/lib/tokenizer/index.js#L218-L234>.\n // Especially putting it back in the `data` state is useful: some elements,\n // like textareas and iframes, change the state.\n // See GH-7.\n // But also if broken HTML is in `raw`, and then a correct element is given.\n // See GH-11.\n tokenizer.tokenQueue = []\n tokenizer.state = dataState\n tokenizer.returnState = ''\n tokenizer.charRefCode = -1\n tokenizer.tempBuff = []\n tokenizer.lastStartTagName = ''\n tokenizer.consumedAfterSnapshot = -1\n tokenizer.active = false\n tokenizer.currentCharacterToken = null\n tokenizer.currentToken = null\n tokenizer.currentAttr = null\n }\n}\n\nfunction startTag(node) {\n var location = createParse5Location(node)\n\n location.startTag = xtend(location)\n\n return {\n type: startTagToken,\n tagName: node.tagName,\n selfClosing: false,\n attrs: attributes(node),\n location: location\n }\n}\n\nfunction attributes(node) {\n return toParse5({\n tagName: node.tagName,\n type: 'element',\n properties: node.properties\n }).attrs\n}\n\nfunction endTag(node) {\n var location = createParse5Location(node)\n\n location.endTag = xtend(location)\n\n return {\n type: endTagToken,\n tagName: node.tagName,\n attrs: [],\n location: location\n }\n}\n\nfunction unknown(node) {\n throw new Error('Cannot compile `' + node.type + '` node')\n}\n\nfunction documentMode(node) {\n var head = node.type === 'root' ? node.children[0] : node\n\n return head && (head.type === 'doctype' || head.tagName === 'html')\n}\n\nfunction createParse5Location(node) {\n var start = pos.start(node)\n var end = pos.end(node)\n\n return {\n startLine: start.line,\n startCol: start.column,\n startOffset: start.offset,\n endLine: end.line,\n endCol: end.column,\n endOffset: end.offset\n }\n}\n","'use strict'\n\nvar hastUtilRaw = require('hast-util-raw')\n\nmodule.exports = rehypeRaw\n\nfunction rehypeRaw(options) {\n return transform\n function transform(tree, file) {\n return hastUtilRaw(tree, file, options)\n }\n}\n","import unified from 'unified';\nimport remarkParse from 'remark-parse';\nimport remarkRehype from 'remark-rehype';\nimport remarkGfm from 'remark-gfm';\nimport remarkFootnotes from 'remark-footnotes';\nimport rehypeExternalLinks from 'rehype-external-links';\nimport rehypeSanitize from 'rehype-sanitize';\nimport rehypeStringify from 'rehype-stringify';\nimport rehypeRaw from 'rehype-raw';\nimport { reject } from 'lodash-es';\n/**\n * Takes a string as input and returns a new string\n * where the text has been converted to HTML.\n *\n * If the text is formatted with .md markdown, it will\n * be transformed to HTML.\n *\n * If the text already is in HTML it will be sanitized and\n * \"dangerous\" tags such as <script> will be removed.\n * @param {string} text The string to convert.\n * @param {markdownToHTMLOptions} [options] Options for the conversions.\n * @returns {Promise<string>} The resulting HTML.\n */\nexport function markdownToHTML(\n text: string,\n options?: markdownToHTMLOptions\n): Promise<string> {\n if (options?.forceHardLineBreaks) {\n text = text.replace(/([\\n\\r])/g, ' $1');\n }\n\n return new Promise((resolve) => {\n return unified()\n .use(remarkParse)\n .use(remarkGfm)\n .use(remarkFootnotes)\n .use(remarkRehype, { allowDangerousHtml: true })\n .use(rehypeExternalLinks as any, { target: '_blank' })\n .use(rehypeRaw)\n .use(rehypeSanitize)\n .use(rehypeStringify)\n .process(text, (err, file) => {\n if (err) {\n reject(err);\n } else {\n resolve(file.toString());\n }\n });\n });\n}\n\n/**\n * Options for markdownToHTML.\n */\nexport interface markdownToHTMLOptions {\n /**\n * Set to `true` to convert all soft line breaks to hard line breaks.\n */\n forceHardLineBreaks?: boolean;\n}\n","@import './partial-styles/pre-code.scss';\n@import './partial-styles/headings.scss';\n@import './partial-styles/body-text.scss';\n@import './partial-styles/lists.scss';\n@import './partial-styles/tables.scss';\n@import './partial-styles/blockquotes.scss';\n@import './partial-styles/definition-lists.scss';\n\n// body-text\nhr {\n border-top: 1px solid rgb(var(--contrast-700));\n}\n\nimg {\n max-width: 100%;\n}\n","import { Component, h, Prop, Watch } from '@stencil/core';\nimport { markdownToHTML } from './markdown-parser';\n\n/**\n * The Markdown component receives markdown syntax\n * and renders it as HTML.\n * @exampleComponent limel-example-markdown-headings\n * @exampleComponent limel-example-markdown-emphasis\n * @exampleComponent limel-example-markdown-lists\n * @exampleComponent limel-example-markdown-links\n * @exampleComponent limel-example-markdown-images\n * @exampleComponent limel-example-markdown-code\n * @exampleComponent limel-example-markdown-footnotes\n * @exampleComponent limel-example-markdown-tables\n * @exampleComponent limel-example-markdown-html\n * @exampleComponent limel-example-markdown-blockquotes\n * @exampleComponent limel-example-markdown-horizontal-rule\n */\n@Component({\n tag: 'limel-markdown',\n styleUrl: 'markdown.scss',\n shadow: true,\n})\nexport class Markdown {\n /**\n * The input text. Treated as GitHub Flavored Markdown, with the addition\n * that any included HTML will be parsed and rendered as HTML, rather than\n * as text.\n */\n @Prop()\n public value: string;\n\n @Watch('value')\n public async textChanged() {\n try {\n const html = await markdownToHTML(this.value, {\n forceHardLineBreaks: true,\n });\n this.rootElement.innerHTML = html;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n }\n\n public async componentDidLoad() {\n this.textChanged();\n }\n\n private rootElement: HTMLDivElement;\n\n public render() {\n return [\n <div\n id=\"markdown\"\n ref={(el) => (this.rootElement = el as HTMLDivElement)}\n />,\n ];\n }\n}\n"],"mappings":"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AM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE,KAAK,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE,KAAK,GAAG,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,EAAE,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,GAAG,EAAE,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,GAAG,EAAE,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,GAAG,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,GAAG,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,KAAK,KAAK,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,KAAK,IAAK,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,GAAG,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,GAAG,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,EAAE,MAAM,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,GAAG,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,GAAG,GAAG,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,KAAK,KAAK,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,GAAG,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,GAAG,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,EAAE,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,MAAM,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,EAAE,EAAE,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,GAAG,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,KAAK,KAAK,KAAK,EAAE,GAAG,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,KAAK,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,KAAK,MAAM,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,MAAM,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,GAAG,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,MAAM,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,KAAK,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,KAAK,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,GAAG,EAAE,KAAK,IAAI,GAAG,GAAG,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,KAAK,KAAK,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,MAAM,GAAG,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,GAAG,EAAE,MAAM,MAAM,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE,MAAM,GAAG,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,GAAG,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,GAAG,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,IAAM,MAAM,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,MAAM,MAAM,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,MAAM,MAAM,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,GAAG,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,MAAM,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,MAAM,GAAG,GAAG,EAAE,KAAK,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,GAAG,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,GAAG,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,MAAM,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,MAAM,MAAM,MAAM,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,MAAM,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,GAAG,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,GAAG,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,GAAG,GAAG,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,MAAM,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,MAAM,MAAM,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,MAAM,GAAG,GAAG,EAAE,KAAK,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,GAAG,GAAG,EAAE,MAAM,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,MAAM,MAAM,KAAM,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,KAAK,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,GAAG,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,MAAM,MAAM,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM,MAAM,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM,MAAM,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,IAAI,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,MAAM,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,MAAM,MAAM,MAAM,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,EAAE,KAAK,KAAK,GAAG,EAAE,GAAG,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,KAAK,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,GAAG,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,EAAE,EAAE,GAAG,GAAG,MAAM,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,GAAG,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,GAAG,EAAE,IAAI,GAAG,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,EAAE,KAAK,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,MAAM,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,MAAM,MAAM,MAAM,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,EAAE,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,EAAE,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,GAAG,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,GAAG,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,MAAM,MAAM,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,MAAM,MAAM,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,MAAM,MAAM,MAAM,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,MAAM,MAAM,EAAE,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,MAAM,EAAE,MAAM,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,MAAM,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,MAAM,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,MAAM,MAAM,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,MAAM,MAAM,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,EAAE,MAAM,MAAM,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,GAAG,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,MAAM,MAAM,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,MAAM,GAAG,EAAE,MAAM,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,MAAM,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,MAAM,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,EAAE,GAAG,GAAG,IAAI,MAAM,MAAM,MAAM,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,GAAG,EAAE,KAAK,KAAK,GAAG,EAAE,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,GAAG,EAAE,MAAM,MAAM,GAAG,EAAE,KAAK,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,GAAG,EAAE,MAAM,MAAM,GAAG,EAAE,KAAK,MAAM,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,GAAG,EAAE,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,MAAM,GAAG,IAAI,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IA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"}
|