extwee 2.3.5 → 2.3.6

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.
@@ -1 +1 @@
1
- !function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof exports?exports.Extwee=r():e.Extwee=r()}(this,(()=>(()=>{var e={117:function(e,r){!function(e){"use strict";class r{constructor(e){this._utf8Decoder=new TextDecoder("utf-8"),this._asciiDecoder=new TextDecoder("ascii"),this._buffer=e,this._dataView=new DataView(e.buffer,e.byteOffset,e.byteLength),this._position=0}get length(){return this._buffer.byteLength}get position(){return this._position}byte(){const e=this._position;return this.skip(1),this._dataView.getUint8(e)}bytes(e){const r=this._position;return this.skip(e),this._buffer.subarray(r,this._position)}uint16(){const e=this.position;return this.skip(2),this._dataView.getUint16(e,!0)}int32(){const e=this.position;return this.skip(4),this._dataView.getInt32(e,!0)}uint32(){const e=this.position;return this.skip(4),this._dataView.getUint32(e,!0)}uint64(){const e=this.position;this.skip(8);const r=this._dataView.getUint32(e,!0)+2**32*this._dataView.getUint32(e+4,!0);return Number.isSafeInteger(r)||console.warn(r,"exceeds MAX_SAFE_INTEGER. Precision may be lost"),r}float64(){const e=this.position;return this.skip(8),this._dataView.getFloat64(e,!1)}skip(e){if(this._position+=e,this._position>this._buffer.length)throw new Error("Expected "+(this._position-this._buffer.length)+" more bytes. The file might be corrupted. Unexpected end of file.")}string(e,r){const t=this.bytes(e);return"utf-8"==r?this._utf8Decoder.decode(t):this._asciiDecoder.decode(t)}line(){const e=this._buffer.indexOf(10,this._position);if(-1==e)throw new Error("Could not find end of line.");const r=e-this._position,t=this.string(r,"ascii");return this.skip(1),t}hasNext(){return this.position<this.length}}function t(e){if(e.length>8)throw new Error("Value too large to unpickling");const t=new ArrayBuffer(8),s=new Uint8Array(t);return s.set(e),new r(s).uint64()}function s(e){let r=0,t=0;for(;r<e.length;)r+=4,t+=1;const s=new ArrayBuffer(r);new Uint8Array(s).set(e);const a=new DataView(s,0,r);let o=BigInt(0);for(let e=0;e<t;e++)o|=BigInt(a.getUint32(4*e,!0))<<BigInt(32*e);return o}const a={create:()=>[],createWithItems:e=>Array.from(e),addMethod:function(e,r){e.push(r)}},o={create:()=>new Set,createWithItems:e=>new Set(e),addMethod:function(e,r){e.add(r)}},i={create:()=>({}),setMethod:function(e,r,t){e[r]=t}},n={create:()=>new Map,setMethod:function(e,r,t){e.set(r,t)}};function c(e,r){const t=function(...t){if(!new.target){const s=function(...e){Object.defineProperty(this,"args",{value:e,enumerable:!1,configurable:!1,writable:!1})};return s.prototype.__module__=e,s.prototype.__name__=r,Reflect.construct(s,t)}Object.defineProperty(this,"args",{value:t,enumerable:!1,configurable:!1,writable:!1})};return t.prototype.__module__=e,t.prototype.__name__=r,t.prototype.__setnewargs_ex__=function(...e){Object.defineProperty(this,"kwargs",{value:e,enumerable:!1,configurable:!1,writable:!1})},t}const l={nameResolver:{resolve:(e,r)=>c(e,r)},persistentResolver:{resolve:e=>{throw new Error(`Unregistered persistent id: \`${e}\`.`)}},extensionResolver:{resolve:e=>{throw new Error(`Unregistered extension code: \`${e.toString(16)}\`.`)}},unpicklingTypeOfSet:"array",unpicklingTypeOfDictionary:"object"};class u{constructor(){this._registry=new Map}register(e,r,t){const s=u.getFullyQualifiedName(e,r);if(this._registry.has(s))throw new Error(`'${s}' is already registered.`);return this._registry.set(s,t),this}resolve(e,r){const t=u.getFullyQualifiedName(e,r);return this._registry.get(t)??this.onMissingName(e,r)}onMissingName(e,r){return c(e,r)}static getFullyQualifiedName(e,r){return e+"."+r}}e.BufferReader=r,e.NameRegistry=u,e.Parser=class{constructor(e){this._options={...l,...e},this._nameResolver=this._options.nameResolver,this._persistentResolver=this._options.persistentResolver,this._extensionResolver=this._options.extensionResolver,this._setProvider=(e=>{switch(e){case"Set":return o;case"array":return a;default:throw new Error(`Unknown unpickling type [${e}] of Set.`)}})(this._options.unpicklingTypeOfSet),this._dictionaryProvider=(e=>{switch(e){case"Map":return n;case"object":return i;default:throw new Error(`Unknown unpickling type [${e}] of Dictionary.`)}})(this._options.unpicklingTypeOfDictionary),this._buffers=e?.buffers}parse(e){const t=new r(e);return this.read(t)}read(e){let r=[];const a=[],o=new Map;for(;e.hasNext();){const i=e.byte();switch(i){case 128:{const r=e.byte();if(r>5)throw new Error(`Unsupported protocol version '${r}'.`);break}case 46:return r.pop();case 149:e.skip(8);break;case 40:a.push(r),r=[];break;case 49:r=a.pop();break;case 48:r.pop();break;case 50:r.push(r[r.length-1]);break;case 112:{const t=parseInt(e.line(),10);o.set(t,r[r.length-1]);break}case 113:o.set(e.byte(),r[r.length-1]);break;case 114:o.set(e.uint32(),r[r.length-1]);break;case 148:o.set(o.size,r[r.length-1]);break;case 103:{const t=parseInt(e.line(),10);r.push(o.get(t));break}case 104:r.push(o.get(e.byte()));break;case 106:r.push(o.get(e.uint32()));break;case 78:r.push(null);break;case 136:r.push(!0);break;case 137:r.push(!1);break;case 73:{const t=e.line();"01"==t?r.push(!0):"00"==t?r.push(!1):r.push(parseInt(t,10));break}case 76:r.push(parseInt(e.line(),10));break;case 70:r.push(parseFloat(e.line()));break;case 83:{const t=e.line();if(t.length>=2&&t[0]==t.slice(-1)&&['"',"'"].includes(t[0])){r.push(t.slice(1,-1));break}throw new Error("Insecure string pickle.")}case 86:r.push(e.line());break;case 74:r.push(e.int32());break;case 75:r.push(e.byte());break;case 77:r.push(e.uint16());break;case 138:{const s=e.byte(),a=t(e.bytes(s));r.push(a);break}case 139:{const t=e.uint32(),a=s(e.bytes(t));r.push(a);break}case 71:r.push(e.float64());break;case 66:r.push(e.bytes(e.int32()));break;case 67:r.push(e.bytes(e.byte()));break;case 142:case 150:r.push(e.bytes(e.uint64()));break;case 84:r.push(e.string(e.uint32(),"ascii"));break;case 85:r.push(e.string(e.byte(),"ascii"));break;case 88:r.push(e.string(e.uint32(),"utf-8"));break;case 140:r.push(e.string(e.byte(),"utf-8"));break;case 141:r.push(e.string(e.uint64(),"utf-8"));break;case 41:case 93:r.push([]);break;case 116:{const e=r;r=a.pop(),r.push(e);break}case 133:r.push([r.pop()]);break;case 134:{const e=r.pop(),t=r.pop();r.push([t,e]);break}case 135:{const e=r.pop(),t=r.pop(),s=r.pop();r.push([s,t,e]);break}case 108:{const e=r;r=a.pop(),r.push(e);break}case 97:{const e=r.pop();r[r.length-1].push(e);break}case 101:{const e=r;r=a.pop(),r[r.length-1].push(...e);break}case 125:{const e=this._dictionaryProvider.create();r.push(e);break}case 100:{const e=r;r=a.pop();const t=this._dictionaryProvider.create();for(let r=0;r<e.length;r+=2)t[e[r]]=e[r+1];r.push(t);break}case 115:{const e=r.pop(),t=r.pop(),s=r[r.length-1];this._dictionaryProvider.setMethod(s,t,e);break}case 117:{const e=r;r=a.pop();const t=r[r.length-1];for(let r=0;r<e.length;r+=2)this._dictionaryProvider.setMethod(t,e[r],e[r+1]);break}case 143:{const e=this._setProvider.create();r.push(e);break}case 145:{const e=r;r=a.pop();const t=this._setProvider.createWithItems(e);r.push(t);break}case 144:{const e=r;r=a.pop();const t=r[r.length-1];for(let r=0;r<e.length;r++)this._setProvider.addMethod(t,e[r]);break}case 130:{const t=e.byte(),s=this._extensionResolver.resolve(t);r.push(s);break}case 131:{const t=e.uint16(),s=this._extensionResolver.resolve(t);r.push(s);break}case 132:{const t=e.uint32(),s=this._extensionResolver.resolve(t);r.push(s);break}case 99:{const t=e.line(),s=e.line(),a=this._nameResolver.resolve(t,s);r.push(a);break}case 147:{const e=r.pop(),t=r.pop(),s=this._nameResolver.resolve(t,e);r.push(s);break}case 105:{const t=e.line(),s=e.line(),o=r;r=a.pop();const i=this._nameResolver.resolve(t,s),n=Reflect.construct(i,o);r.push(n);break}case 111:{const e=r,t=e.pop();r=a.pop();const s=Reflect.construct(t,e);r.push(s);break}case 129:{const e=r.pop(),t=r.pop(),s=Reflect.construct(t,e);r.push(s);break}case 146:{const e=r.pop(),t=r.pop(),s=r.pop(),a=Reflect.construct(s,t);a.__setnewargs_ex__&&a.__setnewargs_ex__(e),r.push(a);break}case 80:{const t=e.line(),s=this._persistentResolver.resolve(t);r.push(s);break}case 81:{const e=r.pop(),t=this._persistentResolver.resolve(e);r.push(t);break}case 82:{const e=r.pop(),t=r.pop();r.push(t(...e));break}case 98:{const e=r.pop(),t=r[r.length-1];if(t.__setstate__){t.__setstate__(e);break}if(t instanceof Map){if(e instanceof Map&&e.has("__dict__")){for(const[r,s]of e.get("__dict__"))t.set(r,s);break}if(e.__dict__){for(const r in e.__dict__)t.set(r,e.__dict__[r]);break}}else e instanceof Map?Object.assign(t,Object.fromEntries(e)):Object.assign(t,e);break}case 151:{if(null==this._buffers)throw new Error("pickle stream refers to out-of-band data but no *buffers* argument was given");const e=this._buffers.next();if(e.done)throw new Error("not enough out-of-band buffers");r.push(e.value);break}case 152:r.push(r.pop());break;default:throw new Error(`Unsupported opcode '${i}'.`)}}throw new Error("Unexpected end of file.")}}}(r)}},r={};function t(s){var a=r[s];if(void 0!==a)return a.exports;var o=r[s]={exports:{}};return e[s].call(o.exports,o,o.exports,t),o.exports}t.d=(e,r)=>{for(var s in r)t.o(r,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:r[s]})},t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r);var s={};return(()=>{"use strict";t.d(s,{default:()=>$});var e=function(){return e=Object.assign||function(e){for(var r,t=1,s=arguments.length;t<s;t++)for(var a in r=arguments[t])Object.prototype.hasOwnProperty.call(r,a)&&(e[a]=r[a]);return e},e.apply(this,arguments)};function r(r,t){for(var s={},a={},o=r.split("~~"),i=!1,n=0;o.length>n;n++){for(var c=o[n].split("~"),l=0;l<c.length;l+=2){var u=c[l],p=c[l+1],h="&"+u+";";s[h]=p,i&&(s["&"+u]=p),a[p]=h}i=!0}return t?{entities:e(e({},s),t.entities),characters:e(e({},a),t.characters)}:{entities:s,characters:a}}var a={xml:/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html4:/&notin;|&(?:nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|quot|amp|lt|gt|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html5:/&centerdot;|&copysr;|&divideontimes;|&gtcc;|&gtcir;|&gtdot;|&gtlPar;|&gtquest;|&gtrapprox;|&gtrarr;|&gtrdot;|&gtreqless;|&gtreqqless;|&gtrless;|&gtrsim;|&ltcc;|&ltcir;|&ltdot;|&lthree;|&ltimes;|&ltlarr;|&ltquest;|&ltrPar;|&ltri;|&ltrie;|&ltrif;|&notin;|&notinE;|&notindot;|&notinva;|&notinvb;|&notinvc;|&notni;|&notniva;|&notnivb;|&notnivc;|&parallel;|&timesb;|&timesbar;|&timesd;|&(?:AElig|AMP|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|GT|Iacute|Icirc|Igrave|Iuml|LT|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|QUOT|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|amp|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|gt|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|lt|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|quot|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g},o={};o.xml=r("lt~<~gt~>~quot~\"~apos~'~amp~&"),o.html4=r("apos~'~OElig~Œ~oelig~œ~Scaron~Š~scaron~š~Yuml~Ÿ~circ~ˆ~tilde~˜~ensp~ ~emsp~ ~thinsp~ ~zwnj~‌~zwj~‍~lrm~‎~rlm~‏~ndash~–~mdash~—~lsquo~‘~rsquo~’~sbquo~‚~ldquo~“~rdquo~”~bdquo~„~dagger~†~Dagger~‡~permil~‰~lsaquo~‹~rsaquo~›~euro~€~fnof~ƒ~Alpha~Α~Beta~Β~Gamma~Γ~Delta~Δ~Epsilon~Ε~Zeta~Ζ~Eta~Η~Theta~Θ~Iota~Ι~Kappa~Κ~Lambda~Λ~Mu~Μ~Nu~Ν~Xi~Ξ~Omicron~Ο~Pi~Π~Rho~Ρ~Sigma~Σ~Tau~Τ~Upsilon~Υ~Phi~Φ~Chi~Χ~Psi~Ψ~Omega~Ω~alpha~α~beta~β~gamma~γ~delta~δ~epsilon~ε~zeta~ζ~eta~η~theta~θ~iota~ι~kappa~κ~lambda~λ~mu~μ~nu~ν~xi~ξ~omicron~ο~pi~π~rho~ρ~sigmaf~ς~sigma~σ~tau~τ~upsilon~υ~phi~φ~chi~χ~psi~ψ~omega~ω~thetasym~ϑ~upsih~ϒ~piv~ϖ~bull~•~hellip~…~prime~′~Prime~″~oline~‾~frasl~⁄~weierp~℘~image~ℑ~real~ℜ~trade~™~alefsym~ℵ~larr~←~uarr~↑~rarr~→~darr~↓~harr~↔~crarr~↵~lArr~⇐~uArr~⇑~rArr~⇒~dArr~⇓~hArr~⇔~forall~∀~part~∂~exist~∃~empty~∅~nabla~∇~isin~∈~notin~∉~ni~∋~prod~∏~sum~∑~minus~−~lowast~∗~radic~√~prop~∝~infin~∞~ang~∠~and~∧~or~∨~cap~∩~cup~∪~int~∫~there4~∴~sim~∼~cong~≅~asymp~≈~ne~≠~equiv~≡~le~≤~ge~≥~sub~⊂~sup~⊃~nsub~⊄~sube~⊆~supe~⊇~oplus~⊕~otimes~⊗~perp~⊥~sdot~⋅~lceil~⌈~rceil~⌉~lfloor~⌊~rfloor~⌋~lang~〈~rang~〉~loz~◊~spades~♠~clubs~♣~hearts~♥~diams~♦~~nbsp~ ~iexcl~¡~cent~¢~pound~£~curren~¤~yen~¥~brvbar~¦~sect~§~uml~¨~copy~©~ordf~ª~laquo~«~not~¬~shy~­~reg~®~macr~¯~deg~°~plusmn~±~sup2~²~sup3~³~acute~´~micro~µ~para~¶~middot~·~cedil~¸~sup1~¹~ordm~º~raquo~»~frac14~¼~frac12~½~frac34~¾~iquest~¿~Agrave~À~Aacute~Á~Acirc~Â~Atilde~Ã~Auml~Ä~Aring~Å~AElig~Æ~Ccedil~Ç~Egrave~È~Eacute~É~Ecirc~Ê~Euml~Ë~Igrave~Ì~Iacute~Í~Icirc~Î~Iuml~Ï~ETH~Ð~Ntilde~Ñ~Ograve~Ò~Oacute~Ó~Ocirc~Ô~Otilde~Õ~Ouml~Ö~times~×~Oslash~Ø~Ugrave~Ù~Uacute~Ú~Ucirc~Û~Uuml~Ü~Yacute~Ý~THORN~Þ~szlig~ß~agrave~à~aacute~á~acirc~â~atilde~ã~auml~ä~aring~å~aelig~æ~ccedil~ç~egrave~è~eacute~é~ecirc~ê~euml~ë~igrave~ì~iacute~í~icirc~î~iuml~ï~eth~ð~ntilde~ñ~ograve~ò~oacute~ó~ocirc~ô~otilde~õ~ouml~ö~divide~÷~oslash~ø~ugrave~ù~uacute~ú~ucirc~û~uuml~ü~yacute~ý~thorn~þ~yuml~ÿ~quot~\"~amp~&~lt~<~gt~>"),o.html5=r('Abreve~Ă~Acy~А~Afr~𝔄~Amacr~Ā~And~⩓~Aogon~Ą~Aopf~𝔸~ApplyFunction~⁡~Ascr~𝒜~Assign~≔~Backslash~∖~Barv~⫧~Barwed~⌆~Bcy~Б~Because~∵~Bernoullis~ℬ~Bfr~𝔅~Bopf~𝔹~Breve~˘~Bscr~ℬ~Bumpeq~≎~CHcy~Ч~Cacute~Ć~Cap~⋒~CapitalDifferentialD~ⅅ~Cayleys~ℭ~Ccaron~Č~Ccirc~Ĉ~Cconint~∰~Cdot~Ċ~Cedilla~¸~CenterDot~·~Cfr~ℭ~CircleDot~⊙~CircleMinus~⊖~CirclePlus~⊕~CircleTimes~⊗~ClockwiseContourIntegral~∲~CloseCurlyDoubleQuote~”~CloseCurlyQuote~’~Colon~∷~Colone~⩴~Congruent~≡~Conint~∯~ContourIntegral~∮~Copf~ℂ~Coproduct~∐~CounterClockwiseContourIntegral~∳~Cross~⨯~Cscr~𝒞~Cup~⋓~CupCap~≍~DD~ⅅ~DDotrahd~⤑~DJcy~Ђ~DScy~Ѕ~DZcy~Џ~Darr~↡~Dashv~⫤~Dcaron~Ď~Dcy~Д~Del~∇~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~Ŋ~Ecaron~Ě~Ecy~Э~Edot~Ė~Efr~𝔈~Element~∈~Emacr~Ē~EmptySmallSquare~◻~EmptyVerySmallSquare~▫~Eogon~Ę~Eopf~𝔼~Equal~⩵~EqualTilde~≂~Equilibrium~⇌~Escr~ℰ~Esim~⩳~Exists~∃~ExponentialE~ⅇ~Fcy~Ф~Ffr~𝔉~FilledSmallSquare~◼~FilledVerySmallSquare~▪~Fopf~𝔽~ForAll~∀~Fouriertrf~ℱ~Fscr~ℱ~GJcy~Ѓ~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~IJ~IOcy~Ё~Icy~И~Idot~İ~Ifr~ℑ~Im~ℑ~Imacr~Ī~ImaginaryI~ⅈ~Implies~⇒~Int~∬~Integral~∫~Intersection~⋂~InvisibleComma~⁣~InvisibleTimes~⁢~Iogon~Į~Iopf~𝕀~Iscr~ℐ~Itilde~Ĩ~Iukcy~І~Jcirc~Ĵ~Jcy~Й~Jfr~𝔍~Jopf~𝕁~Jscr~𝒥~Jsercy~Ј~Jukcy~Є~KHcy~Х~KJcy~Ќ~Kcedil~Ķ~Kcy~К~Kfr~𝔎~Kopf~𝕂~Kscr~𝒦~LJcy~Љ~Lacute~Ĺ~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~ℳ~NJcy~Њ~Nacute~Ń~Ncaron~Ň~Ncedil~Ņ~Ncy~Н~NegativeMediumSpace~​~NegativeThickSpace~​~NegativeThinSpace~​~NegativeVeryThinSpace~​~NestedGreaterGreater~≫~NestedLessLess~≪~NewLine~\n~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~𝒩~Ocy~О~Odblac~Ő~Ofr~𝔒~Omacr~Ō~Oopf~𝕆~OpenCurlyDoubleQuote~“~OpenCurlyQuote~‘~Or~⩔~Oscr~𝒪~Otimes~⨷~OverBar~‾~OverBrace~⏞~OverBracket~⎴~OverParenthesis~⏜~PartialD~∂~Pcy~П~Pfr~𝔓~PlusMinus~±~Poincareplane~ℌ~Popf~ℙ~Pr~⪻~Precedes~≺~PrecedesEqual~⪯~PrecedesSlantEqual~≼~PrecedesTilde~≾~Product~∏~Proportion~∷~Proportional~∝~Pscr~𝒫~Qfr~𝔔~Qopf~ℚ~Qscr~𝒬~RBarr~⤐~Racute~Ŕ~Rang~⟫~Rarr~↠~Rarrtl~⤖~Rcaron~Ř~Rcedil~Ŗ~Rcy~Р~Re~ℜ~ReverseElement~∋~ReverseEquilibrium~⇋~ReverseUpEquilibrium~⥯~Rfr~ℜ~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~⪼~Scedil~Ş~Scirc~Ŝ~Scy~С~Sfr~𝔖~ShortDownArrow~↓~ShortLeftArrow~←~ShortRightArrow~→~ShortUpArrow~↑~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~⋑~TRADE~™~TSHcy~Ћ~TScy~Ц~Tab~\t~Tcaron~Ť~Tcedil~Ţ~Tcy~Т~Tfr~𝔗~Therefore~∴~ThickSpace~  ~ThinSpace~ ~Tilde~∼~TildeEqual~≃~TildeFullEqual~≅~TildeTilde~≈~Topf~𝕋~TripleDot~⃛~Tscr~𝒯~Tstrok~Ŧ~Uarr~↟~Uarrocir~⥉~Ubrcy~Ў~Ubreve~Ŭ~Ucy~У~Udblac~Ű~Ufr~𝔘~Umacr~Ū~UnderBar~_~UnderBrace~⏟~UnderBracket~⎵~UnderParenthesis~⏝~Union~⋃~UnionPlus~⊎~Uogon~Ų~Uopf~𝕌~UpArrow~↑~UpArrowBar~⤒~UpArrowDownArrow~⇅~UpDownArrow~↕~UpEquilibrium~⥮~UpTee~⊥~UpTeeArrow~↥~Uparrow~⇑~Updownarrow~⇕~UpperLeftArrow~↖~UpperRightArrow~↗~Upsi~ϒ~Uring~Ů~Uscr~𝒰~Utilde~Ũ~VDash~⊫~Vbar~⫫~Vcy~В~Vdash~⊩~Vdashl~⫦~Vee~⋁~Verbar~‖~Vert~‖~VerticalBar~∣~VerticalLine~|~VerticalSeparator~❘~VerticalTilde~≀~VeryThinSpace~ ~Vfr~𝔙~Vopf~𝕍~Vscr~𝒱~Vvdash~⊪~Wcirc~Ŵ~Wedge~⋀~Wfr~𝔚~Wopf~𝕎~Wscr~𝒲~Xfr~𝔛~Xopf~𝕏~Xscr~𝒳~YAcy~Я~YIcy~Ї~YUcy~Ю~Ycirc~Ŷ~Ycy~Ы~Yfr~𝔜~Yopf~𝕐~Yscr~𝒴~ZHcy~Ж~Zacute~Ź~Zcaron~Ž~Zcy~З~Zdot~Ż~ZeroWidthSpace~​~Zfr~ℨ~Zopf~ℤ~Zscr~𝒵~abreve~ă~ac~∾~acE~∾̳~acd~∿~acy~а~af~⁡~afr~𝔞~aleph~ℵ~amacr~ā~amalg~⨿~andand~⩕~andd~⩜~andslope~⩘~andv~⩚~ange~⦤~angle~∠~angmsd~∡~angmsdaa~⦨~angmsdab~⦩~angmsdac~⦪~angmsdad~⦫~angmsdae~⦬~angmsdaf~⦭~angmsdag~⦮~angmsdah~⦯~angrt~∟~angrtvb~⊾~angrtvbd~⦝~angsph~∢~angst~Å~angzarr~⍼~aogon~ą~aopf~𝕒~ap~≈~apE~⩰~apacir~⩯~ape~≊~apid~≋~approx~≈~approxeq~≊~ascr~𝒶~ast~*~asympeq~≍~awconint~∳~awint~⨑~bNot~⫭~backcong~≌~backepsilon~϶~backprime~‵~backsim~∽~backsimeq~⋍~barvee~⊽~barwed~⌅~barwedge~⌅~bbrk~⎵~bbrktbrk~⎶~bcong~≌~bcy~б~becaus~∵~because~∵~bemptyv~⦰~bepsi~϶~bernou~ℬ~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~˘~bscr~𝒷~bsemi~⁏~bsim~∽~bsime~⋍~bsol~\\~bsolb~⧅~bsolhsub~⟈~bullet~•~bump~≎~bumpE~⪮~bumpe~≏~bumpeq~≏~cacute~ć~capand~⩄~capbrcup~⩉~capcap~⩋~capcup~⩇~capdot~⩀~caps~∩︀~caret~⁁~caron~ˇ~ccaps~⩍~ccaron~č~ccirc~ĉ~ccups~⩌~ccupssm~⩐~cdot~ċ~cemptyv~⦲~centerdot~·~cfr~𝔠~chcy~ч~check~✓~checkmark~✓~cir~○~cirE~⧃~circeq~≗~circlearrowleft~↺~circlearrowright~↻~circledR~®~circledS~Ⓢ~circledast~⊛~circledcirc~⊚~circleddash~⊝~cire~≗~cirfnint~⨐~cirmid~⫯~cirscir~⧂~clubsuit~♣~colon~:~colone~≔~coloneq~≔~comma~,~commat~@~comp~∁~compfn~∘~complement~∁~complexes~ℂ~congdot~⩭~conint~∮~copf~𝕔~coprod~∐~copysr~℗~cross~✗~cscr~𝒸~csub~⫏~csube~⫑~csup~⫐~csupe~⫒~ctdot~⋯~cudarrl~⤸~cudarrr~⤵~cuepr~⋞~cuesc~⋟~cularr~↶~cularrp~⤽~cupbrcap~⩈~cupcap~⩆~cupcup~⩊~cupdot~⊍~cupor~⩅~cups~∪︀~curarr~↷~curarrm~⤼~curlyeqprec~⋞~curlyeqsucc~⋟~curlyvee~⋎~curlywedge~⋏~curvearrowleft~↶~curvearrowright~↷~cuvee~⋎~cuwed~⋏~cwconint~∲~cwint~∱~cylcty~⌭~dHar~⥥~daleth~ℸ~dash~‐~dashv~⊣~dbkarow~⤏~dblac~˝~dcaron~ď~dcy~д~dd~ⅆ~ddagger~‡~ddarr~⇊~ddotseq~⩷~demptyv~⦱~dfisht~⥿~dfr~𝔡~dharl~⇃~dharr~⇂~diam~⋄~diamond~⋄~diamondsuit~♦~die~¨~digamma~ϝ~disin~⋲~div~÷~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~≑~easter~⩮~ecaron~ě~ecir~≖~ecolon~≕~ecy~э~edot~ė~ee~ⅇ~efDot~≒~efr~𝔢~eg~⪚~egs~⪖~egsdot~⪘~el~⪙~elinters~⏧~ell~ℓ~els~⪕~elsdot~⪗~emacr~ē~emptyset~∅~emptyv~∅~emsp13~ ~emsp14~ ~eng~ŋ~eogon~ę~eopf~𝕖~epar~⋕~eparsl~⧣~eplus~⩱~epsi~ε~epsiv~ϵ~eqcirc~≖~eqcolon~≕~eqsim~≂~eqslantgtr~⪖~eqslantless~⪕~equals~=~equest~≟~equivDD~⩸~eqvparsl~⧥~erDot~≓~erarr~⥱~escr~ℯ~esdot~≐~esim~≂~excl~!~expectation~ℰ~exponentiale~ⅇ~fallingdotseq~≒~fcy~ф~female~♀~ffilig~ffi~fflig~ff~ffllig~ffl~ffr~𝔣~filig~fi~fjlig~fj~flat~♭~fllig~fl~fltns~▱~fopf~𝕗~fork~⋔~forkv~⫙~fpartint~⨍~frac13~⅓~frac15~⅕~frac16~⅙~frac18~⅛~frac23~⅔~frac25~⅖~frac35~⅗~frac38~⅜~frac45~⅘~frac56~⅚~frac58~⅝~frac78~⅞~frown~⌢~fscr~𝒻~gE~≧~gEl~⪌~gacute~ǵ~gammad~ϝ~gap~⪆~gbreve~ğ~gcirc~ĝ~gcy~г~gdot~ġ~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~⪐~gtcc~⪧~gtcir~⩺~gtdot~⋗~gtlPar~⦕~gtquest~⩼~gtrapprox~⪆~gtrarr~⥸~gtrdot~⋗~gtreqless~⋛~gtreqqless~⪌~gtrless~≷~gtrsim~≳~gvertneqq~≩︀~gvnE~≩︀~hairsp~ ~half~½~hamilt~ℋ~hardcy~ъ~harrcir~⥈~harrw~↭~hbar~ℏ~hcirc~ĥ~heartsuit~♥~hercon~⊹~hfr~𝔥~hksearow~⤥~hkswarow~⤦~hoarr~⇿~homtht~∻~hookleftarrow~↩~hookrightarrow~↪~hopf~𝕙~horbar~―~hscr~𝒽~hslash~ℏ~hstrok~ħ~hybull~⁃~hyphen~‐~ic~⁣~icy~и~iecy~е~iff~⇔~ifr~𝔦~ii~ⅈ~iiiint~⨌~iiint~∭~iinfin~⧜~iiota~℩~ijlig~ij~imacr~ī~imagline~ℐ~imagpart~ℑ~imath~ı~imof~⊷~imped~Ƶ~in~∈~incare~℅~infintie~⧝~inodot~ı~intcal~⊺~integers~ℤ~intercal~⊺~intlarhk~⨗~intprod~⨼~iocy~ё~iogon~į~iopf~𝕚~iprod~⨼~iscr~𝒾~isinE~⋹~isindot~⋵~isins~⋴~isinsv~⋳~isinv~∈~it~⁢~itilde~ĩ~iukcy~і~jcirc~ĵ~jcy~й~jfr~𝔧~jmath~ȷ~jopf~𝕛~jscr~𝒿~jsercy~ј~jukcy~є~kappav~ϰ~kcedil~ķ~kcy~к~kfr~𝔨~kgreen~ĸ~khcy~х~kjcy~ќ~kopf~𝕜~kscr~𝓀~lAarr~⇚~lAtail~⤛~lBarr~⤎~lE~≦~lEg~⪋~lHar~⥢~lacute~ĺ~laemptyv~⦴~lagran~ℒ~langd~⦑~langle~⟨~lap~⪅~larrb~⇤~larrbfs~⤟~larrfs~⤝~larrhk~↩~larrlp~↫~larrpl~⤹~larrsim~⥳~larrtl~↢~lat~⪫~latail~⤙~late~⪭~lates~⪭︀~lbarr~⤌~lbbrk~❲~lbrace~{~lbrack~[~lbrke~⦋~lbrksld~⦏~lbrkslu~⦍~lcaron~ľ~lcedil~ļ~lcub~{~lcy~л~ldca~⤶~ldquor~„~ldrdhar~⥧~ldrushar~⥋~ldsh~↲~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~⥼~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~⨴~lowbar~_~lozenge~◊~lozf~⧫~lpar~(~lparlt~⦓~lrarr~⇆~lrcorner~⌟~lrhar~⇋~lrhard~⥭~lrtri~⊿~lscr~𝓁~lsh~↰~lsim~≲~lsime~⪍~lsimg~⪏~lsqb~[~lsquor~‚~lstrok~ł~ltcc~⪦~ltcir~⩹~ltdot~⋖~lthree~⋋~ltimes~⋉~ltlarr~⥶~ltquest~⩻~ltrPar~⦖~ltri~◃~ltrie~⊴~ltrif~◂~lurdshar~⥊~luruhar~⥦~lvertneqq~≨︀~lvnE~≨︀~mDDot~∺~male~♂~malt~✠~maltese~✠~map~↦~mapsto~↦~mapstodown~↧~mapstoleft~↤~mapstoup~↥~marker~▮~mcomma~⨩~mcy~м~measuredangle~∡~mfr~𝔪~mho~℧~mid~∣~midast~*~midcir~⫰~minusb~⊟~minusd~∸~minusdu~⨪~mlcp~⫛~mldr~…~mnplus~∓~models~⊧~mopf~𝕞~mp~∓~mscr~𝓂~mstpos~∾~multimap~⊸~mumap~⊸~nGg~⋙̸~nGt~≫⃒~nGtv~≫̸~nLeftarrow~⇍~nLeftrightarrow~⇎~nLl~⋘̸~nLt~≪⃒~nLtv~≪̸~nRightarrow~⇏~nVDash~⊯~nVdash~⊮~nacute~ń~nang~∠⃒~nap~≉~napE~⩰̸~napid~≋̸~napos~ʼn~napprox~≉~natur~♮~natural~♮~naturals~ℕ~nbump~≎̸~nbumpe~≏̸~ncap~⩃~ncaron~ň~ncedil~ņ~ncong~≇~ncongdot~⩭̸~ncup~⩂~ncy~н~neArr~⇗~nearhk~⤤~nearr~↗~nearrow~↗~nedot~≐̸~nequiv~≢~nesear~⤨~nesim~≂̸~nexist~∄~nexists~∄~nfr~𝔫~ngE~≧̸~nge~≱~ngeq~≱~ngeqq~≧̸~ngeqslant~⩾̸~nges~⩾̸~ngsim~≵~ngt~≯~ngtr~≯~nhArr~⇎~nharr~↮~nhpar~⫲~nis~⋼~nisd~⋺~niv~∋~njcy~њ~nlArr~⇍~nlE~≦̸~nlarr~↚~nldr~‥~nle~≰~nleftarrow~↚~nleftrightarrow~↮~nleq~≰~nleqq~≦̸~nleqslant~⩽̸~nles~⩽̸~nless~≮~nlsim~≴~nlt~≮~nltri~⋪~nltrie~⋬~nmid~∤~nopf~𝕟~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~⋣~nsubE~⫅̸~nsube~⊈~nsubset~⊂⃒~nsubseteq~⊈~nsubseteqq~⫅̸~nsucc~⊁~nsucceq~⪰̸~nsup~⊅~nsupE~⫆̸~nsupe~⊉~nsupset~⊃⃒~nsupseteq~⊉~nsupseteqq~⫆̸~ntgl~≹~ntlg~≸~ntriangleleft~⋪~ntrianglelefteq~⋬~ntriangleright~⋫~ntrianglerighteq~⋭~num~#~numero~№~numsp~ ~nvDash~⊭~nvHarr~⤄~nvap~≍⃒~nvdash~⊬~nvge~≥⃒~nvgt~>⃒~nvinfin~⧞~nvlArr~⤂~nvle~≤⃒~nvlt~<⃒~nvltrie~⊴⃒~nvrArr~⤃~nvrtrie~⊵⃒~nvsim~∼⃒~nwArr~⇖~nwarhk~⤣~nwarr~↖~nwarrow~↖~nwnear~⤧~oS~Ⓢ~oast~⊛~ocir~⊚~ocy~о~odash~⊝~odblac~ő~odiv~⨸~odot~⊙~odsold~⦼~ofcir~⦿~ofr~𝔬~ogon~˛~ogt~⧁~ohbar~⦵~ohm~Ω~oint~∮~olarr~↺~olcir~⦾~olcross~⦻~olt~⧀~omacr~ō~omid~⦶~ominus~⊖~oopf~𝕠~opar~⦷~operp~⦹~orarr~↻~ord~⩝~order~ℴ~orderof~ℴ~origof~⊶~oror~⩖~orslope~⩗~orv~⩛~oscr~ℴ~osol~⊘~otimesas~⨶~ovbar~⌽~par~∥~parallel~∥~parsim~⫳~parsl~⫽~pcy~п~percnt~%~period~.~pertenk~‱~pfr~𝔭~phiv~ϕ~phmmat~ℳ~phone~☎~pitchfork~⋔~planck~ℏ~planckh~ℎ~plankv~ℏ~plus~+~plusacir~⨣~plusb~⊞~pluscir~⨢~plusdo~∔~plusdu~⨥~pluse~⩲~plussim~⨦~plustwo~⨧~pm~±~pointint~⨕~popf~𝕡~pr~≺~prE~⪳~prap~⪷~prcue~≼~pre~⪯~prec~≺~precapprox~⪷~preccurlyeq~≼~preceq~⪯~precnapprox~⪹~precneqq~⪵~precnsim~⋨~precsim~≾~primes~ℙ~prnE~⪵~prnap~⪹~prnsim~⋨~profalar~⌮~profline~⌒~profsurf~⌓~propto~∝~prsim~≾~prurel~⊰~pscr~𝓅~puncsp~ ~qfr~𝔮~qint~⨌~qopf~𝕢~qprime~⁗~qscr~𝓆~quaternions~ℍ~quatint~⨖~quest~?~questeq~≟~rAarr~⇛~rAtail~⤜~rBarr~⤏~rHar~⥤~race~∽̱~racute~ŕ~raemptyv~⦳~rangd~⦒~range~⦥~rangle~⟩~rarrap~⥵~rarrb~⇥~rarrbfs~⤠~rarrc~⤳~rarrfs~⤞~rarrhk~↪~rarrlp~↬~rarrpl~⥅~rarrsim~⥴~rarrtl~↣~rarrw~↝~ratail~⤚~ratio~∶~rationals~ℚ~rbarr~⤍~rbbrk~❳~rbrace~}~rbrack~]~rbrke~⦌~rbrksld~⦎~rbrkslu~⦐~rcaron~ř~rcedil~ŗ~rcub~}~rcy~р~rdca~⤷~rdldhar~⥩~rdquor~”~rdsh~↳~realine~ℛ~realpart~ℜ~reals~ℝ~rect~▭~rfisht~⥽~rfr~𝔯~rhard~⇁~rharu~⇀~rharul~⥬~rhov~ϱ~rightarrow~→~rightarrowtail~↣~rightharpoondown~⇁~rightharpoonup~⇀~rightleftarrows~⇄~rightleftharpoons~⇌~rightrightarrows~⇉~rightsquigarrow~↝~rightthreetimes~⋌~ring~˚~risingdotseq~≓~rlarr~⇄~rlhar~⇌~rmoust~⎱~rmoustache~⎱~rnmid~⫮~roang~⟭~roarr~⇾~robrk~⟧~ropar~⦆~ropf~𝕣~roplus~⨮~rotimes~⨵~rpar~)~rpargt~⦔~rppolint~⨒~rrarr~⇉~rscr~𝓇~rsh~↱~rsqb~]~rsquor~’~rthree~⋌~rtimes~⋊~rtri~▹~rtrie~⊵~rtrif~▸~rtriltri~⧎~ruluhar~⥨~rx~℞~sacute~ś~sc~≻~scE~⪴~scap~⪸~sccue~≽~sce~⪰~scedil~ş~scirc~ŝ~scnE~⪶~scnap~⪺~scnsim~⋩~scpolint~⨓~scsim~≿~scy~с~sdotb~⊡~sdote~⩦~seArr~⇘~searhk~⤥~searr~↘~searrow~↘~semi~;~seswar~⤩~setminus~∖~setmn~∖~sext~✶~sfr~𝔰~sfrown~⌢~sharp~♯~shchcy~щ~shcy~ш~shortmid~∣~shortparallel~∥~sigmav~ς~simdot~⩪~sime~≃~simeq~≃~simg~⪞~simgE~⪠~siml~⪝~simlE~⪟~simne~≆~simplus~⨤~simrarr~⥲~slarr~←~smallsetminus~∖~smashp~⨳~smeparsl~⧤~smid~∣~smile~⌣~smt~⪪~smte~⪬~smtes~⪬︀~softcy~ь~sol~/~solb~⧄~solbar~⌿~sopf~𝕤~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~¯~subE~⫅~subdot~⪽~subedot~⫃~submult~⫁~subnE~⫋~subne~⊊~subplus~⪿~subrarr~⥹~subset~⊂~subseteq~⊆~subseteqq~⫅~subsetneq~⊊~subsetneqq~⫋~subsim~⫇~subsub~⫕~subsup~⫓~succ~≻~succapprox~⪸~succcurlyeq~≽~succeq~⪰~succnapprox~⪺~succneqq~⪶~succnsim~⋩~succsim~≿~sung~♪~supE~⫆~supdot~⪾~supdsub~⫘~supedot~⫄~suphsol~⟉~suphsub~⫗~suplarr~⥻~supmult~⫂~supnE~⫌~supne~⊋~supplus~⫀~supset~⊃~supseteq~⊇~supseteqq~⫆~supsetneq~⊋~supsetneqq~⫌~supsim~⫈~supsub~⫔~supsup~⫖~swArr~⇙~swarhk~⤦~swarr~↙~swarrow~↙~swnwar~⤪~target~⌖~tbrk~⎴~tcaron~ť~tcedil~ţ~tcy~т~tdot~⃛~telrec~⌕~tfr~𝔱~therefore~∴~thetav~ϑ~thickapprox~≈~thicksim~∼~thkap~≈~thksim~∼~timesb~⊠~timesbar~⨱~timesd~⨰~tint~∭~toea~⤨~top~⊤~topbot~⌶~topcir~⫱~topf~𝕥~topfork~⫚~tosa~⤩~tprime~‴~triangle~▵~triangledown~▿~triangleleft~◃~trianglelefteq~⊴~triangleq~≜~triangleright~▹~trianglerighteq~⊵~tridot~◬~trie~≜~triminus~⨺~triplus~⨹~trisb~⧍~tritime~⨻~trpezium~⏢~tscr~𝓉~tscy~ц~tshcy~ћ~tstrok~ŧ~twixt~≬~twoheadleftarrow~↞~twoheadrightarrow~↠~uHar~⥣~ubrcy~ў~ubreve~ŭ~ucy~у~udarr~⇅~udblac~ű~udhar~⥮~ufisht~⥾~ufr~𝔲~uharl~↿~uharr~↾~uhblk~▀~ulcorn~⌜~ulcorner~⌜~ulcrop~⌏~ultri~◸~umacr~ū~uogon~ų~uopf~𝕦~uparrow~↑~updownarrow~↕~upharpoonleft~↿~upharpoonright~↾~uplus~⊎~upsi~υ~upuparrows~⇈~urcorn~⌝~urcorner~⌝~urcrop~⌎~uring~ů~urtri~◹~uscr~𝓊~utdot~⋰~utilde~ũ~utri~▵~utrif~▴~uuarr~⇈~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~≙~wfr~𝔴~wopf~𝕨~wp~℘~wr~≀~wreath~≀~wscr~𝓌~xcap~⋂~xcirc~◯~xcup~⋃~xdtri~▽~xfr~𝔵~xhArr~⟺~xharr~⟷~xlArr~⟸~xlarr~⟵~xmap~⟼~xnis~⋻~xodot~⨀~xopf~𝕩~xoplus~⨁~xotime~⨂~xrArr~⟹~xrarr~⟶~xscr~𝓍~xsqcup~⨆~xuplus~⨄~xutri~△~xvee~⋁~xwedge~⋀~yacy~я~ycirc~ŷ~ycy~ы~yfr~𝔶~yicy~ї~yopf~𝕪~yscr~𝓎~yucy~ю~zacute~ź~zcaron~ž~zcy~з~zdot~ż~zeetrf~ℨ~zfr~𝔷~zhcy~ж~zigrarr~⇝~zopf~𝕫~zscr~𝓏~~AMP~&~COPY~©~GT~>~LT~<~QUOT~"~REG~®',o.html4),String.fromCodePoint;var i=String.prototype.codePointAt?function(e,r){return e.codePointAt(r)}:function(e,r){return 1024*(e.charCodeAt(r)-55296)+e.charCodeAt(r+1)-56320+65536},n=function(){return n=Object.assign||function(e){for(var r,t=1,s=arguments.length;t<s;t++)for(var a in r=arguments[t])Object.prototype.hasOwnProperty.call(r,a)&&(e[a]=r[a]);return e},n.apply(this,arguments)},c=n(n({},o),{all:o.html5}),l={specialChars:/[<>'"&]/g,nonAscii:/[<>'"&\u0080-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g,nonAsciiPrintable:/[<>'"&\x01-\x08\x11-\x15\x17-\x1F\x7f-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g,nonAsciiPrintableOnly:/[\x01-\x08\x11-\x15\x17-\x1F\x7f-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g,extensive:/[\x01-\x0c\x0e-\x1f\x21-\x2c\x2e-\x2f\x3a-\x40\x5b-\x60\x7b-\x7d\x7f-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g},u={mode:"specialChars",level:"all",numeric:"decimal"};function p(e,r){var t=void 0===r?u:r,s=t.mode,a=void 0===s?"specialChars":s,o=t.numeric,n=void 0===o?"decimal":o,p=t.level;if(!e)return"";var h=l[a],g=c[void 0===p?"all":p].characters,f="hexadecimal"===n;return String.prototype.replace.call(e,h,(function(e){var r=g[e];if(!r){var t=e.length>1?i(e,0):e.charCodeAt(0);r=(f?"&#x"+t.toString(16):"&#"+t)+";"}return r}))}var h=/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);/g,g=/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+)[;=]?/g,f={xml:{strict:h,attribute:g,body:a.xml},html4:{strict:h,attribute:g,body:a.html4},html5:{strict:h,attribute:g,body:a.html5}};function d(e){return"string"!=typeof e?e:e.replace(/\\/g,"\\\\").replace(/\[/g,"\\[").replace(/\]/g,"\\]").replace(/\{/g,"\\{").replace(/\}/g,"\\}")}(n(n({},f),{all:f.html5}),String.fromCharCode)(65533);class m{#e="";#r=[];#t={};#s="";constructor(e="",r="",t=[],s={}){this.name=e,this.tags=t,this.metadata=s,this.text=r}get name(){return this.#e}set name(e){if("string"!=typeof e)throw new Error("Name must be a String!");this.#e=e}get tags(){return this.#r}set tags(e){if(!Array.isArray(e))throw new Error("Tags must be an array!");this.#r=e}get metadata(){return this.#t}set metadata(e){if("object"!=typeof e)throw new Error("Metadata should be an object literal!");this.#t=e}get text(){return this.#s}set text(e){if("string"!=typeof e)throw new Error("Text should be a String!");this.#s=e}toTwee(){let e="";e+=`:: ${d(this.name)}`,this.tags.length>0&&(e+=` [${this.tags.map((e=>d(e))).join(" ")}]`),Object.keys(this.metadata).length>0&&(e+=` ${JSON.stringify(this.metadata)}`);const r=this.text.split("\n");for(let e=0;e<r.length;e++)r[e].startsWith("::")&&(r[e]=`\\${r[e]}`);return e+=`\n${r.join("\n")}\n\n`,e}toJSON(){const e={name:this.name,tags:this.tags,metadata:this.metadata,text:this.text};return JSON.stringify(e)}toTwine2HTML(e=1){let r="\t<tw-passagedata";return r+=` pid="${e}"`,r+=` name="${p(this.name)}"`,r+=` tags="${p(this.#r.join(" "))}" `,Object.prototype.hasOwnProperty.call(this.#t,"position")&&(r+=` position="${this.#t.position}" `),Object.prototype.hasOwnProperty.call(this.#t,"size")&&(r+=`size="${this.#t.size}" `),r+=`>${p(this.text)}</tw-passagedata>\n`,r}toTwine1HTML(){let e="\t<div";return e+=` tiddler="${p(this.name)}"`,e+=` tags="${p(this.#r.join(" "))}" `,e+=' modifier="extwee"',Object.prototype.hasOwnProperty.call(this.#t,"position")?e+=` twine-position="${this.#t.position}"`:e+=' twine-position="10,10"',e+=`>${p(this.#s)}</div>`,e}}const b=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i,y=function(e){if(!function(e){return"string"==typeof e&&b.test(e)}(e))throw TypeError("Invalid UUID");let r;return Uint8Array.of((r=parseInt(e.slice(0,8),16))>>>24,r>>>16&255,r>>>8&255,255&r,(r=parseInt(e.slice(9,13),16))>>>8,255&r,(r=parseInt(e.slice(14,18),16))>>>8,255&r,(r=parseInt(e.slice(19,23),16))>>>8,255&r,(r=parseInt(e.slice(24,36),16))/1099511627776&255,r/4294967296&255,r>>>24&255,r>>>16&255,r>>>8&255,255&r)},w=[];for(let e=0;e<256;++e)w.push((e+256).toString(16).slice(1));function v(e,r=0){return(w[e[r+0]]+w[e[r+1]]+w[e[r+2]]+w[e[r+3]]+"-"+w[e[r+4]]+w[e[r+5]]+"-"+w[e[r+6]]+w[e[r+7]]+"-"+w[e[r+8]]+w[e[r+9]]+"-"+w[e[r+10]]+w[e[r+11]]+w[e[r+12]]+w[e[r+13]]+w[e[r+14]]+w[e[r+15]]).toLowerCase()}let q;const _=new Uint8Array(16);function x(e){return 14+(e+64>>>9<<4)+1}function k(e,r){const t=(65535&e)+(65535&r);return(e>>16)+(r>>16)+(t>>16)<<16|65535&t}function E(e,r,t,s,a,o){return k((i=k(k(r,e),k(s,o)))<<(n=a)|i>>>32-n,t);var i,n}function D(e,r,t,s,a,o,i){return E(r&t|~r&s,e,r,a,o,i)}function S(e,r,t,s,a,o,i){return E(r&s|t&~s,e,r,a,o,i)}function A(e,r,t,s,a,o,i){return E(r^t^s,e,r,a,o,i)}function T(e,r,t,s,a,o,i){return E(t^(r|~s),e,r,a,o,i)}const L=function(e){return function(e){const r=new Uint8Array(4*e.length);for(let t=0;t<4*e.length;t++)r[t]=e[t>>2]>>>t%4*8&255;return r}(function(e,r){const t=new Uint32Array(x(r)).fill(0);t.set(e),t[r>>5]|=128<<r%32,t[t.length-1]=r,e=t;let s=1732584193,a=-271733879,o=-1732584194,i=271733878;for(let r=0;r<e.length;r+=16){const t=s,n=a,c=o,l=i;s=D(s,a,o,i,e[r],7,-680876936),i=D(i,s,a,o,e[r+1],12,-389564586),o=D(o,i,s,a,e[r+2],17,606105819),a=D(a,o,i,s,e[r+3],22,-1044525330),s=D(s,a,o,i,e[r+4],7,-176418897),i=D(i,s,a,o,e[r+5],12,1200080426),o=D(o,i,s,a,e[r+6],17,-1473231341),a=D(a,o,i,s,e[r+7],22,-45705983),s=D(s,a,o,i,e[r+8],7,1770035416),i=D(i,s,a,o,e[r+9],12,-1958414417),o=D(o,i,s,a,e[r+10],17,-42063),a=D(a,o,i,s,e[r+11],22,-1990404162),s=D(s,a,o,i,e[r+12],7,1804603682),i=D(i,s,a,o,e[r+13],12,-40341101),o=D(o,i,s,a,e[r+14],17,-1502002290),a=D(a,o,i,s,e[r+15],22,1236535329),s=S(s,a,o,i,e[r+1],5,-165796510),i=S(i,s,a,o,e[r+6],9,-1069501632),o=S(o,i,s,a,e[r+11],14,643717713),a=S(a,o,i,s,e[r],20,-373897302),s=S(s,a,o,i,e[r+5],5,-701558691),i=S(i,s,a,o,e[r+10],9,38016083),o=S(o,i,s,a,e[r+15],14,-660478335),a=S(a,o,i,s,e[r+4],20,-405537848),s=S(s,a,o,i,e[r+9],5,568446438),i=S(i,s,a,o,e[r+14],9,-1019803690),o=S(o,i,s,a,e[r+3],14,-187363961),a=S(a,o,i,s,e[r+8],20,1163531501),s=S(s,a,o,i,e[r+13],5,-1444681467),i=S(i,s,a,o,e[r+2],9,-51403784),o=S(o,i,s,a,e[r+7],14,1735328473),a=S(a,o,i,s,e[r+12],20,-1926607734),s=A(s,a,o,i,e[r+5],4,-378558),i=A(i,s,a,o,e[r+8],11,-2022574463),o=A(o,i,s,a,e[r+11],16,1839030562),a=A(a,o,i,s,e[r+14],23,-35309556),s=A(s,a,o,i,e[r+1],4,-1530992060),i=A(i,s,a,o,e[r+4],11,1272893353),o=A(o,i,s,a,e[r+7],16,-155497632),a=A(a,o,i,s,e[r+10],23,-1094730640),s=A(s,a,o,i,e[r+13],4,681279174),i=A(i,s,a,o,e[r],11,-358537222),o=A(o,i,s,a,e[r+3],16,-722521979),a=A(a,o,i,s,e[r+6],23,76029189),s=A(s,a,o,i,e[r+9],4,-640364487),i=A(i,s,a,o,e[r+12],11,-421815835),o=A(o,i,s,a,e[r+15],16,530742520),a=A(a,o,i,s,e[r+2],23,-995338651),s=T(s,a,o,i,e[r],6,-198630844),i=T(i,s,a,o,e[r+7],10,1126891415),o=T(o,i,s,a,e[r+14],15,-1416354905),a=T(a,o,i,s,e[r+5],21,-57434055),s=T(s,a,o,i,e[r+12],6,1700485571),i=T(i,s,a,o,e[r+3],10,-1894986606),o=T(o,i,s,a,e[r+10],15,-1051523),a=T(a,o,i,s,e[r+1],21,-2054922799),s=T(s,a,o,i,e[r+8],6,1873313359),i=T(i,s,a,o,e[r+15],10,-30611744),o=T(o,i,s,a,e[r+6],15,-1560198380),a=T(a,o,i,s,e[r+13],21,1309151649),s=T(s,a,o,i,e[r+4],6,-145523070),i=T(i,s,a,o,e[r+11],10,-1120210379),o=T(o,i,s,a,e[r+2],15,718787259),a=T(a,o,i,s,e[r+9],21,-343485551),s=k(s,t),a=k(a,n),o=k(o,c),i=k(i,l)}return Uint32Array.of(s,a,o,i)}(function(e){if(0===e.length)return new Uint32Array;const r=new Uint32Array(x(8*e.length)).fill(0);for(let t=0;t<e.length;t++)r[t>>2]|=(255&e[t])<<t%4*8;return r}(e),8*e.length))},U="6ba7b810-9dad-11d1-80b4-00c04fd430c8",R="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function F(e,r,t,s,a,o){const i="string"==typeof t?function(e){e=unescape(encodeURIComponent(e));const r=new Uint8Array(e.length);for(let t=0;t<e.length;++t)r[t]=e.charCodeAt(t);return r}(t):t,n="string"==typeof s?y(s):s;if("string"==typeof s&&(s=y(s)),16!==s?.length)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let c=new Uint8Array(16+i.length);if(c.set(n),c.set(i,n.length),c=r(c),c[6]=15&c[6]|e,c[8]=63&c[8]|128,a){o=o||0;for(let e=0;e<16;++e)a[o+e]=c[e];return a}return v(c)}function N(e,r,t,s){return F(48,L,e,r,t,s)}N.DNS=U,N.URL=R;const O={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};const I=function(e,r,t){return!O.randomUUID||r||e?function(e,r,t){const s=(e=e||{}).random??e.rng?.()??function(){if(!q){if("undefined"==typeof crypto||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");q=crypto.getRandomValues.bind(crypto)}return q(_)}();if(s.length<16)throw new Error("Random bytes length must be >= 16");if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,r){if((t=t||0)<0||t+16>r.length)throw new RangeError(`UUID byte range ${t}:${t+15} is out of buffer bounds`);for(let e=0;e<16;++e)r[t+e]=s[e];return r}return v(s)}(e,r,t):O.randomUUID()};function V(e,r,t,s){switch(e){case 0:return r&t^~r&s;case 1:case 3:return r^t^s;case 2:return r&t^r&s^t&s}}function C(e,r){return e<<r|e>>>32-r}const P=function(e){const r=[1518500249,1859775393,2400959708,3395469782],t=[1732584193,4023233417,2562383102,271733878,3285377520],s=new Uint8Array(e.length+1);s.set(e),s[e.length]=128;const a=(e=s).length/4+2,o=Math.ceil(a/16),i=new Array(o);for(let r=0;r<o;++r){const t=new Uint32Array(16);for(let s=0;s<16;++s)t[s]=e[64*r+4*s]<<24|e[64*r+4*s+1]<<16|e[64*r+4*s+2]<<8|e[64*r+4*s+3];i[r]=t}i[o-1][14]=8*(e.length-1)/Math.pow(2,32),i[o-1][14]=Math.floor(i[o-1][14]),i[o-1][15]=8*(e.length-1)&4294967295;for(let e=0;e<o;++e){const s=new Uint32Array(80);for(let r=0;r<16;++r)s[r]=i[e][r];for(let e=16;e<80;++e)s[e]=C(s[e-3]^s[e-8]^s[e-14]^s[e-16],1);let a=t[0],o=t[1],n=t[2],c=t[3],l=t[4];for(let e=0;e<80;++e){const t=Math.floor(e/20),i=C(a,5)+V(t,o,n,c)+l+r[t]+s[e]>>>0;l=c,c=n,n=C(o,30)>>>0,o=a,a=i}t[0]=t[0]+a>>>0,t[1]=t[1]+o>>>0,t[2]=t[2]+n>>>0,t[3]=t[3]+c>>>0,t[4]=t[4]+l>>>0}return Uint8Array.of(t[0]>>24,t[0]>>16,t[0]>>8,t[0],t[1]>>24,t[1]>>16,t[1]>>8,t[1],t[2]>>24,t[2]>>16,t[2]>>8,t[2],t[3]>>24,t[3]>>16,t[3]>>8,t[3],t[4]>>24,t[4]>>16,t[4]>>8,t[4])};function B(e,r,t,s){return F(80,P,e,r,t,s)}function j(){return I().toUpperCase()}B.DNS=U,B.URL=R;class z{#e="Untitled Story";#a="";#o="";#i="";#n="";#c=1;#l=[];#u="";#p="";#t=null;#h={};#g="";#f="";constructor(e="Untitled Story"){this.name=e,this.#u="extwee",this.#p="2.3.5",this.#t={}}get name(){return this.#e}set name(e){if("string"!=typeof e)throw new Error("Story name must be a string");this.#e=e}get tagColors(){return this.#h}set tagColors(e){if(!(e instanceof Object))throw new Error("Tag colors must be an object!");this.#h=e}get IFID(){return this.#o}set IFID(e){if("string"!=typeof e)throw new Error("IFID must be a String!");this.#o=e}get start(){return this.#a}set start(e){if("string"!=typeof e)throw new Error("start (passage name) must be a String!");this.#a=e}get formatVersion(){return this.#n}set formatVersion(e){if("string"!=typeof e)throw new Error("Story format version must be a String!");this.#n=e}get metadata(){return this.#t}set metadata(e){if("object"!=typeof e)throw new Error("Story metadata must be Object!");this.#t=e}get format(){return this.#i}set format(e){if("string"!=typeof e)throw new Error("Story format must be a String!");this.#i=e}get creator(){return this.#u}set creator(e){if("string"!=typeof e)throw new Error("Creator must be String");this.#u=e}get creatorVersion(){return this.#p}set creatorVersion(e){if("string"!=typeof e)throw new Error("Creator version must be a string!");this.#p=e}get zoom(){return this.#c}set zoom(e){if("number"!=typeof e)throw new Error("Zoom level must be a Number!");this.#c=Number(Number.parseFloat(e).toFixed(2))}get passages(){return this.#l}set passages(e){if(!Array.isArray(e))throw new Error("Passages must be an Array!");if(!e.every((e=>e instanceof m)))throw new Error("Passages must be an Array of Passage objects!");this.#l=e}get storyStylesheet(){return this.#f}set storyStylesheet(e){if("string"!=typeof e)throw new Error("Story stylesheet must be a string!");this.#f=e}get storyJavaScript(){return this.#g}set storyJavaScript(e){if("string"!=typeof e)throw new Error("Story JavaScript must be a string!");this.#g=e}addPassage(e){if(!(e instanceof m))throw new Error("Can only add Passages to the story!");if(null!==this.getPassageByName(e.name))return console.warn(`Warning: A passage with the name "${e.name}" already exists!`),this.#l.length;if("StoryData"===e.name){try{const r=JSON.parse(e.text);Object.prototype.hasOwnProperty.call(r,"ifid")&&(this.IFID=r.ifid),Object.prototype.hasOwnProperty.call(r,"format")&&(this.format=r.format),Object.prototype.hasOwnProperty.call(r,"format-version")&&(this.formatVersion=r["format-version"]),Object.prototype.hasOwnProperty.call(r,"zoom")&&(this.zoom=r.zoom),Object.prototype.hasOwnProperty.call(r,"start")&&(this.start=r.start),Object.prototype.hasOwnProperty.call(r,"tag-colors")&&(this.tagColors=r["tag-colors"])}catch(e){}return this.#l.length}return"StoryTitle"===e.name?(this.name=e.text,this.#l.length):("Start"===e.name&&""==this.start&&(this.start=e.name),this.#l.push(e))}removePassageByName(e){return this.#l=this.#l.filter((r=>r.name!==e)),this.#l.length}getPassagesByTag(e){return this.#l.filter((r=>r.tags.some((r=>e===r))))}getPassageByName(e){const r=this.#l.find((r=>r.name===e));return void 0!==r?r:null}size(){return this.#l.length}toJSON(){const e={name:this.name,tagColors:this.tagColors,ifid:this.IFID,start:this.start,formatVersion:this.formatVersion,metadata:this.metadata,format:this.format,creator:this.creator,creatorVersion:this.creatorVersion,zoom:this.zoom,style:this.storyStylesheet,script:this.storyJavaScript,passages:[]};return this.passages.forEach((r=>{e.passages.push({name:r.name,tags:r.tags,metadata:r.metadata,text:r.text})})),JSON.stringify(e,null,4)}toTwee(){let e=":: StoryData\n";const r={};return null===this.IFID.match(/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/)?(r.ifid=j(),console.warn("Warning: IFID is not in UUIDv4 format! A new IFID was generated.")):r.ifid=this.IFID,""!==this.format&&(r.format=this.format),""!==this.formatVersion&&(r["format-version"]=this.formatVersion),0!==this.zoom&&(r.zoom=this.zoom),""!==this.start&&(r.start=this.start),Object.keys(this.tagColors).length>0&&(r["tag-colors"]=this.tagColors),e+=`${JSON.stringify(r,void 0,2)}`,e+="\n\n",e+=":: StoryTitle\n"+this.name,e+="\n\n",this.#f.length>0&&(e+=":: StoryStylesheet [stylesheet]\n"+this.#f+"\n\n"),this.#g.length>0&&(e+=":: StoryJavaScript [script]\n"+this.#g+"\n\n"),this.passages.forEach((r=>{e+=r.toTwee()})),e}toTwine2HTML(){let e=this.passages,r=`<tw-storydata name="${p(this.name)}"`;""!==this.IFID?r+=` ifid="${this.IFID}"`:r+=` ifid="${j()}"`;let t=1,s=1;e.forEach((e=>{e.name===this.start&&(s=t),t++})),0===e.length&&(s=0),r+=` startnode="${s}"`,""!==this.creator&&(r+=` creator="${p(this.creator)}"`),""!==this.creatorVersion&&(r+=` creator-version="${this.creatorVersion}"`),1!==this.zoom&&(r+=` zoom="${this.zoom}"`),""!==this.format&&(r+=` format="${this.format}"`),""!==this.formatVersion&&(r+=` format-version="${this.formatVersion}"`),r+=" options hidden>\n";const a=e.filter((e=>e.tags.includes("stylesheet")));e=e.filter((e=>!e.tags.includes("stylesheet"))),a.length>0&&(r+='\t<style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css">',a.forEach((e=>{r+=e.text})),r+="</style>\n"),this.#f.length>0&&(r+=`\t<style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css">${this.#f}</style>\n`);const o=e.filter((e=>e.tags.includes("script")));return e=e.filter((e=>!e.tags.includes("script"))),o.length>0&&(r+='\t<script role="script" id="twine-user-script" type="text/twine-javascript">',o.forEach((e=>{r+=e.text})),r+="<\/script>\n"),this.#g.length>0&&(r+=`\t<script role="script" id="twine-user-script" type="text/twine-javascript">${this.#g}<\/script>\n`),t=1,this.passages.forEach((e=>{r+=e.toTwine2HTML(t),t++})),Object.keys(this.tagColors).forEach((e=>{r+=`\t<tw-tag name="${e}" color="${this.tagColors[e]}"></tw-tag>\n`})),r+="</tw-storydata>",r}toTwine1HTML(){let e="";return this.passages.forEach((r=>{e+=`\t${r.toTwine1HTML()}`})),e}}var H=t(117);function G(e){if(!Buffer.isBuffer(e))throw new Error("Only parsing of Buffer is allowed!");const r=new H.Parser;let t=null;try{t=r.parse(e)}catch(e){throw new TypeError(`Error: Buffer does not contain Python pickle data! ${e}`)}const s=new z;if(Object.prototype.hasOwnProperty.call(t,"storyPanel")&&(Object.prototype.hasOwnProperty.call(t.storyPanel,"scale")&&(s.zoom=t.storyPanel.scale),Object.prototype.hasOwnProperty.call(t.storyPanel,"widgets")))for(const e of t.storyPanel.widgets){const r=new m;r.name=e.passage.title,r.tags=e.passage.tags,r.text=e.passage.text,"Start"===r.name&&(s.start=r.name),"StoryTitle"===r.name&&(s.name=r.text),s.addPassage(r)}return s}const $={parseTWS:G,parse:G},M="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:null;M&&(M.Extwee=M.Extwee||{},M.Extwee.parseTWS=G)})(),s.default})()));
1
+ !function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof exports?exports.Extwee=r():e.Extwee=r()}(this,(()=>(()=>{var e={117:function(e,r){!function(e){"use strict";class r{constructor(e){this._utf8Decoder=new TextDecoder("utf-8"),this._asciiDecoder=new TextDecoder("ascii"),this._buffer=e,this._dataView=new DataView(e.buffer,e.byteOffset,e.byteLength),this._position=0}get length(){return this._buffer.byteLength}get position(){return this._position}byte(){const e=this._position;return this.skip(1),this._dataView.getUint8(e)}bytes(e){const r=this._position;return this.skip(e),this._buffer.subarray(r,this._position)}uint16(){const e=this.position;return this.skip(2),this._dataView.getUint16(e,!0)}int32(){const e=this.position;return this.skip(4),this._dataView.getInt32(e,!0)}uint32(){const e=this.position;return this.skip(4),this._dataView.getUint32(e,!0)}uint64(){const e=this.position;this.skip(8);const r=this._dataView.getUint32(e,!0)+2**32*this._dataView.getUint32(e+4,!0);return Number.isSafeInteger(r)||console.warn(r,"exceeds MAX_SAFE_INTEGER. Precision may be lost"),r}float64(){const e=this.position;return this.skip(8),this._dataView.getFloat64(e,!1)}skip(e){if(this._position+=e,this._position>this._buffer.length)throw new Error("Expected "+(this._position-this._buffer.length)+" more bytes. The file might be corrupted. Unexpected end of file.")}string(e,r){const t=this.bytes(e);return"utf-8"==r?this._utf8Decoder.decode(t):this._asciiDecoder.decode(t)}line(){const e=this._buffer.indexOf(10,this._position);if(-1==e)throw new Error("Could not find end of line.");const r=e-this._position,t=this.string(r,"ascii");return this.skip(1),t}hasNext(){return this.position<this.length}}function t(e){if(e.length>8)throw new Error("Value too large to unpickling");const t=new ArrayBuffer(8),s=new Uint8Array(t);return s.set(e),new r(s).uint64()}function s(e){let r=0,t=0;for(;r<e.length;)r+=4,t+=1;const s=new ArrayBuffer(r);new Uint8Array(s).set(e);const a=new DataView(s,0,r);let o=BigInt(0);for(let e=0;e<t;e++)o|=BigInt(a.getUint32(4*e,!0))<<BigInt(32*e);return o}const a={create:()=>[],createWithItems:e=>Array.from(e),addMethod:function(e,r){e.push(r)}},o={create:()=>new Set,createWithItems:e=>new Set(e),addMethod:function(e,r){e.add(r)}},i={create:()=>({}),setMethod:function(e,r,t){e[r]=t}},n={create:()=>new Map,setMethod:function(e,r,t){e.set(r,t)}};function c(e,r){const t=function(...t){if(!new.target){const s=function(...e){Object.defineProperty(this,"args",{value:e,enumerable:!1,configurable:!1,writable:!1})};return s.prototype.__module__=e,s.prototype.__name__=r,Reflect.construct(s,t)}Object.defineProperty(this,"args",{value:t,enumerable:!1,configurable:!1,writable:!1})};return t.prototype.__module__=e,t.prototype.__name__=r,t.prototype.__setnewargs_ex__=function(...e){Object.defineProperty(this,"kwargs",{value:e,enumerable:!1,configurable:!1,writable:!1})},t}const l={nameResolver:{resolve:(e,r)=>c(e,r)},persistentResolver:{resolve:e=>{throw new Error(`Unregistered persistent id: \`${e}\`.`)}},extensionResolver:{resolve:e=>{throw new Error(`Unregistered extension code: \`${e.toString(16)}\`.`)}},unpicklingTypeOfSet:"array",unpicklingTypeOfDictionary:"object"};class u{constructor(){this._registry=new Map}register(e,r,t){const s=u.getFullyQualifiedName(e,r);if(this._registry.has(s))throw new Error(`'${s}' is already registered.`);return this._registry.set(s,t),this}resolve(e,r){const t=u.getFullyQualifiedName(e,r);return this._registry.get(t)??this.onMissingName(e,r)}onMissingName(e,r){return c(e,r)}static getFullyQualifiedName(e,r){return e+"."+r}}e.BufferReader=r,e.NameRegistry=u,e.Parser=class{constructor(e){this._options={...l,...e},this._nameResolver=this._options.nameResolver,this._persistentResolver=this._options.persistentResolver,this._extensionResolver=this._options.extensionResolver,this._setProvider=(e=>{switch(e){case"Set":return o;case"array":return a;default:throw new Error(`Unknown unpickling type [${e}] of Set.`)}})(this._options.unpicklingTypeOfSet),this._dictionaryProvider=(e=>{switch(e){case"Map":return n;case"object":return i;default:throw new Error(`Unknown unpickling type [${e}] of Dictionary.`)}})(this._options.unpicklingTypeOfDictionary),this._buffers=e?.buffers}parse(e){const t=new r(e);return this.read(t)}read(e){let r=[];const a=[],o=new Map;for(;e.hasNext();){const i=e.byte();switch(i){case 128:{const r=e.byte();if(r>5)throw new Error(`Unsupported protocol version '${r}'.`);break}case 46:return r.pop();case 149:e.skip(8);break;case 40:a.push(r),r=[];break;case 49:r=a.pop();break;case 48:r.pop();break;case 50:r.push(r[r.length-1]);break;case 112:{const t=parseInt(e.line(),10);o.set(t,r[r.length-1]);break}case 113:o.set(e.byte(),r[r.length-1]);break;case 114:o.set(e.uint32(),r[r.length-1]);break;case 148:o.set(o.size,r[r.length-1]);break;case 103:{const t=parseInt(e.line(),10);r.push(o.get(t));break}case 104:r.push(o.get(e.byte()));break;case 106:r.push(o.get(e.uint32()));break;case 78:r.push(null);break;case 136:r.push(!0);break;case 137:r.push(!1);break;case 73:{const t=e.line();"01"==t?r.push(!0):"00"==t?r.push(!1):r.push(parseInt(t,10));break}case 76:r.push(parseInt(e.line(),10));break;case 70:r.push(parseFloat(e.line()));break;case 83:{const t=e.line();if(t.length>=2&&t[0]==t.slice(-1)&&['"',"'"].includes(t[0])){r.push(t.slice(1,-1));break}throw new Error("Insecure string pickle.")}case 86:r.push(e.line());break;case 74:r.push(e.int32());break;case 75:r.push(e.byte());break;case 77:r.push(e.uint16());break;case 138:{const s=e.byte(),a=t(e.bytes(s));r.push(a);break}case 139:{const t=e.uint32(),a=s(e.bytes(t));r.push(a);break}case 71:r.push(e.float64());break;case 66:r.push(e.bytes(e.int32()));break;case 67:r.push(e.bytes(e.byte()));break;case 142:case 150:r.push(e.bytes(e.uint64()));break;case 84:r.push(e.string(e.uint32(),"ascii"));break;case 85:r.push(e.string(e.byte(),"ascii"));break;case 88:r.push(e.string(e.uint32(),"utf-8"));break;case 140:r.push(e.string(e.byte(),"utf-8"));break;case 141:r.push(e.string(e.uint64(),"utf-8"));break;case 41:case 93:r.push([]);break;case 116:{const e=r;r=a.pop(),r.push(e);break}case 133:r.push([r.pop()]);break;case 134:{const e=r.pop(),t=r.pop();r.push([t,e]);break}case 135:{const e=r.pop(),t=r.pop(),s=r.pop();r.push([s,t,e]);break}case 108:{const e=r;r=a.pop(),r.push(e);break}case 97:{const e=r.pop();r[r.length-1].push(e);break}case 101:{const e=r;r=a.pop(),r[r.length-1].push(...e);break}case 125:{const e=this._dictionaryProvider.create();r.push(e);break}case 100:{const e=r;r=a.pop();const t=this._dictionaryProvider.create();for(let r=0;r<e.length;r+=2)t[e[r]]=e[r+1];r.push(t);break}case 115:{const e=r.pop(),t=r.pop(),s=r[r.length-1];this._dictionaryProvider.setMethod(s,t,e);break}case 117:{const e=r;r=a.pop();const t=r[r.length-1];for(let r=0;r<e.length;r+=2)this._dictionaryProvider.setMethod(t,e[r],e[r+1]);break}case 143:{const e=this._setProvider.create();r.push(e);break}case 145:{const e=r;r=a.pop();const t=this._setProvider.createWithItems(e);r.push(t);break}case 144:{const e=r;r=a.pop();const t=r[r.length-1];for(let r=0;r<e.length;r++)this._setProvider.addMethod(t,e[r]);break}case 130:{const t=e.byte(),s=this._extensionResolver.resolve(t);r.push(s);break}case 131:{const t=e.uint16(),s=this._extensionResolver.resolve(t);r.push(s);break}case 132:{const t=e.uint32(),s=this._extensionResolver.resolve(t);r.push(s);break}case 99:{const t=e.line(),s=e.line(),a=this._nameResolver.resolve(t,s);r.push(a);break}case 147:{const e=r.pop(),t=r.pop(),s=this._nameResolver.resolve(t,e);r.push(s);break}case 105:{const t=e.line(),s=e.line(),o=r;r=a.pop();const i=this._nameResolver.resolve(t,s),n=Reflect.construct(i,o);r.push(n);break}case 111:{const e=r,t=e.pop();r=a.pop();const s=Reflect.construct(t,e);r.push(s);break}case 129:{const e=r.pop(),t=r.pop(),s=Reflect.construct(t,e);r.push(s);break}case 146:{const e=r.pop(),t=r.pop(),s=r.pop(),a=Reflect.construct(s,t);a.__setnewargs_ex__&&a.__setnewargs_ex__(e),r.push(a);break}case 80:{const t=e.line(),s=this._persistentResolver.resolve(t);r.push(s);break}case 81:{const e=r.pop(),t=this._persistentResolver.resolve(e);r.push(t);break}case 82:{const e=r.pop(),t=r.pop();r.push(t(...e));break}case 98:{const e=r.pop(),t=r[r.length-1];if(t.__setstate__){t.__setstate__(e);break}if(t instanceof Map){if(e instanceof Map&&e.has("__dict__")){for(const[r,s]of e.get("__dict__"))t.set(r,s);break}if(e.__dict__){for(const r in e.__dict__)t.set(r,e.__dict__[r]);break}}else e instanceof Map?Object.assign(t,Object.fromEntries(e)):Object.assign(t,e);break}case 151:{if(null==this._buffers)throw new Error("pickle stream refers to out-of-band data but no *buffers* argument was given");const e=this._buffers.next();if(e.done)throw new Error("not enough out-of-band buffers");r.push(e.value);break}case 152:r.push(r.pop());break;default:throw new Error(`Unsupported opcode '${i}'.`)}}throw new Error("Unexpected end of file.")}}}(r)}},r={};function t(s){var a=r[s];if(void 0!==a)return a.exports;var o=r[s]={exports:{}};return e[s].call(o.exports,o,o.exports,t),o.exports}t.d=(e,r)=>{for(var s in r)t.o(r,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:r[s]})},t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r);var s={};return(()=>{"use strict";t.d(s,{default:()=>$});var e=function(){return e=Object.assign||function(e){for(var r,t=1,s=arguments.length;t<s;t++)for(var a in r=arguments[t])Object.prototype.hasOwnProperty.call(r,a)&&(e[a]=r[a]);return e},e.apply(this,arguments)};function r(r,t){for(var s={},a={},o=r.split("~~"),i=!1,n=0;o.length>n;n++){for(var c=o[n].split("~"),l=0;l<c.length;l+=2){var u=c[l],p=c[l+1],h="&"+u+";";s[h]=p,i&&(s["&"+u]=p),a[p]=h}i=!0}return t?{entities:e(e({},s),t.entities),characters:e(e({},a),t.characters)}:{entities:s,characters:a}}var a={xml:/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html4:/&notin;|&(?:nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|quot|amp|lt|gt|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html5:/&centerdot;|&copysr;|&divideontimes;|&gtcc;|&gtcir;|&gtdot;|&gtlPar;|&gtquest;|&gtrapprox;|&gtrarr;|&gtrdot;|&gtreqless;|&gtreqqless;|&gtrless;|&gtrsim;|&ltcc;|&ltcir;|&ltdot;|&lthree;|&ltimes;|&ltlarr;|&ltquest;|&ltrPar;|&ltri;|&ltrie;|&ltrif;|&notin;|&notinE;|&notindot;|&notinva;|&notinvb;|&notinvc;|&notni;|&notniva;|&notnivb;|&notnivc;|&parallel;|&timesb;|&timesbar;|&timesd;|&(?:AElig|AMP|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|GT|Iacute|Icirc|Igrave|Iuml|LT|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|QUOT|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|amp|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|gt|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|lt|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|quot|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g},o={};o.xml=r("lt~<~gt~>~quot~\"~apos~'~amp~&"),o.html4=r("apos~'~OElig~Œ~oelig~œ~Scaron~Š~scaron~š~Yuml~Ÿ~circ~ˆ~tilde~˜~ensp~ ~emsp~ ~thinsp~ ~zwnj~‌~zwj~‍~lrm~‎~rlm~‏~ndash~–~mdash~—~lsquo~‘~rsquo~’~sbquo~‚~ldquo~“~rdquo~”~bdquo~„~dagger~†~Dagger~‡~permil~‰~lsaquo~‹~rsaquo~›~euro~€~fnof~ƒ~Alpha~Α~Beta~Β~Gamma~Γ~Delta~Δ~Epsilon~Ε~Zeta~Ζ~Eta~Η~Theta~Θ~Iota~Ι~Kappa~Κ~Lambda~Λ~Mu~Μ~Nu~Ν~Xi~Ξ~Omicron~Ο~Pi~Π~Rho~Ρ~Sigma~Σ~Tau~Τ~Upsilon~Υ~Phi~Φ~Chi~Χ~Psi~Ψ~Omega~Ω~alpha~α~beta~β~gamma~γ~delta~δ~epsilon~ε~zeta~ζ~eta~η~theta~θ~iota~ι~kappa~κ~lambda~λ~mu~μ~nu~ν~xi~ξ~omicron~ο~pi~π~rho~ρ~sigmaf~ς~sigma~σ~tau~τ~upsilon~υ~phi~φ~chi~χ~psi~ψ~omega~ω~thetasym~ϑ~upsih~ϒ~piv~ϖ~bull~•~hellip~…~prime~′~Prime~″~oline~‾~frasl~⁄~weierp~℘~image~ℑ~real~ℜ~trade~™~alefsym~ℵ~larr~←~uarr~↑~rarr~→~darr~↓~harr~↔~crarr~↵~lArr~⇐~uArr~⇑~rArr~⇒~dArr~⇓~hArr~⇔~forall~∀~part~∂~exist~∃~empty~∅~nabla~∇~isin~∈~notin~∉~ni~∋~prod~∏~sum~∑~minus~−~lowast~∗~radic~√~prop~∝~infin~∞~ang~∠~and~∧~or~∨~cap~∩~cup~∪~int~∫~there4~∴~sim~∼~cong~≅~asymp~≈~ne~≠~equiv~≡~le~≤~ge~≥~sub~⊂~sup~⊃~nsub~⊄~sube~⊆~supe~⊇~oplus~⊕~otimes~⊗~perp~⊥~sdot~⋅~lceil~⌈~rceil~⌉~lfloor~⌊~rfloor~⌋~lang~〈~rang~〉~loz~◊~spades~♠~clubs~♣~hearts~♥~diams~♦~~nbsp~ ~iexcl~¡~cent~¢~pound~£~curren~¤~yen~¥~brvbar~¦~sect~§~uml~¨~copy~©~ordf~ª~laquo~«~not~¬~shy~­~reg~®~macr~¯~deg~°~plusmn~±~sup2~²~sup3~³~acute~´~micro~µ~para~¶~middot~·~cedil~¸~sup1~¹~ordm~º~raquo~»~frac14~¼~frac12~½~frac34~¾~iquest~¿~Agrave~À~Aacute~Á~Acirc~Â~Atilde~Ã~Auml~Ä~Aring~Å~AElig~Æ~Ccedil~Ç~Egrave~È~Eacute~É~Ecirc~Ê~Euml~Ë~Igrave~Ì~Iacute~Í~Icirc~Î~Iuml~Ï~ETH~Ð~Ntilde~Ñ~Ograve~Ò~Oacute~Ó~Ocirc~Ô~Otilde~Õ~Ouml~Ö~times~×~Oslash~Ø~Ugrave~Ù~Uacute~Ú~Ucirc~Û~Uuml~Ü~Yacute~Ý~THORN~Þ~szlig~ß~agrave~à~aacute~á~acirc~â~atilde~ã~auml~ä~aring~å~aelig~æ~ccedil~ç~egrave~è~eacute~é~ecirc~ê~euml~ë~igrave~ì~iacute~í~icirc~î~iuml~ï~eth~ð~ntilde~ñ~ograve~ò~oacute~ó~ocirc~ô~otilde~õ~ouml~ö~divide~÷~oslash~ø~ugrave~ù~uacute~ú~ucirc~û~uuml~ü~yacute~ý~thorn~þ~yuml~ÿ~quot~\"~amp~&~lt~<~gt~>"),o.html5=r('Abreve~Ă~Acy~А~Afr~𝔄~Amacr~Ā~And~⩓~Aogon~Ą~Aopf~𝔸~ApplyFunction~⁡~Ascr~𝒜~Assign~≔~Backslash~∖~Barv~⫧~Barwed~⌆~Bcy~Б~Because~∵~Bernoullis~ℬ~Bfr~𝔅~Bopf~𝔹~Breve~˘~Bscr~ℬ~Bumpeq~≎~CHcy~Ч~Cacute~Ć~Cap~⋒~CapitalDifferentialD~ⅅ~Cayleys~ℭ~Ccaron~Č~Ccirc~Ĉ~Cconint~∰~Cdot~Ċ~Cedilla~¸~CenterDot~·~Cfr~ℭ~CircleDot~⊙~CircleMinus~⊖~CirclePlus~⊕~CircleTimes~⊗~ClockwiseContourIntegral~∲~CloseCurlyDoubleQuote~”~CloseCurlyQuote~’~Colon~∷~Colone~⩴~Congruent~≡~Conint~∯~ContourIntegral~∮~Copf~ℂ~Coproduct~∐~CounterClockwiseContourIntegral~∳~Cross~⨯~Cscr~𝒞~Cup~⋓~CupCap~≍~DD~ⅅ~DDotrahd~⤑~DJcy~Ђ~DScy~Ѕ~DZcy~Џ~Darr~↡~Dashv~⫤~Dcaron~Ď~Dcy~Д~Del~∇~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~Ŋ~Ecaron~Ě~Ecy~Э~Edot~Ė~Efr~𝔈~Element~∈~Emacr~Ē~EmptySmallSquare~◻~EmptyVerySmallSquare~▫~Eogon~Ę~Eopf~𝔼~Equal~⩵~EqualTilde~≂~Equilibrium~⇌~Escr~ℰ~Esim~⩳~Exists~∃~ExponentialE~ⅇ~Fcy~Ф~Ffr~𝔉~FilledSmallSquare~◼~FilledVerySmallSquare~▪~Fopf~𝔽~ForAll~∀~Fouriertrf~ℱ~Fscr~ℱ~GJcy~Ѓ~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~IJ~IOcy~Ё~Icy~И~Idot~İ~Ifr~ℑ~Im~ℑ~Imacr~Ī~ImaginaryI~ⅈ~Implies~⇒~Int~∬~Integral~∫~Intersection~⋂~InvisibleComma~⁣~InvisibleTimes~⁢~Iogon~Į~Iopf~𝕀~Iscr~ℐ~Itilde~Ĩ~Iukcy~І~Jcirc~Ĵ~Jcy~Й~Jfr~𝔍~Jopf~𝕁~Jscr~𝒥~Jsercy~Ј~Jukcy~Є~KHcy~Х~KJcy~Ќ~Kcedil~Ķ~Kcy~К~Kfr~𝔎~Kopf~𝕂~Kscr~𝒦~LJcy~Љ~Lacute~Ĺ~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~ℳ~NJcy~Њ~Nacute~Ń~Ncaron~Ň~Ncedil~Ņ~Ncy~Н~NegativeMediumSpace~​~NegativeThickSpace~​~NegativeThinSpace~​~NegativeVeryThinSpace~​~NestedGreaterGreater~≫~NestedLessLess~≪~NewLine~\n~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~𝒩~Ocy~О~Odblac~Ő~Ofr~𝔒~Omacr~Ō~Oopf~𝕆~OpenCurlyDoubleQuote~“~OpenCurlyQuote~‘~Or~⩔~Oscr~𝒪~Otimes~⨷~OverBar~‾~OverBrace~⏞~OverBracket~⎴~OverParenthesis~⏜~PartialD~∂~Pcy~П~Pfr~𝔓~PlusMinus~±~Poincareplane~ℌ~Popf~ℙ~Pr~⪻~Precedes~≺~PrecedesEqual~⪯~PrecedesSlantEqual~≼~PrecedesTilde~≾~Product~∏~Proportion~∷~Proportional~∝~Pscr~𝒫~Qfr~𝔔~Qopf~ℚ~Qscr~𝒬~RBarr~⤐~Racute~Ŕ~Rang~⟫~Rarr~↠~Rarrtl~⤖~Rcaron~Ř~Rcedil~Ŗ~Rcy~Р~Re~ℜ~ReverseElement~∋~ReverseEquilibrium~⇋~ReverseUpEquilibrium~⥯~Rfr~ℜ~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~⪼~Scedil~Ş~Scirc~Ŝ~Scy~С~Sfr~𝔖~ShortDownArrow~↓~ShortLeftArrow~←~ShortRightArrow~→~ShortUpArrow~↑~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~⋑~TRADE~™~TSHcy~Ћ~TScy~Ц~Tab~\t~Tcaron~Ť~Tcedil~Ţ~Tcy~Т~Tfr~𝔗~Therefore~∴~ThickSpace~  ~ThinSpace~ ~Tilde~∼~TildeEqual~≃~TildeFullEqual~≅~TildeTilde~≈~Topf~𝕋~TripleDot~⃛~Tscr~𝒯~Tstrok~Ŧ~Uarr~↟~Uarrocir~⥉~Ubrcy~Ў~Ubreve~Ŭ~Ucy~У~Udblac~Ű~Ufr~𝔘~Umacr~Ū~UnderBar~_~UnderBrace~⏟~UnderBracket~⎵~UnderParenthesis~⏝~Union~⋃~UnionPlus~⊎~Uogon~Ų~Uopf~𝕌~UpArrow~↑~UpArrowBar~⤒~UpArrowDownArrow~⇅~UpDownArrow~↕~UpEquilibrium~⥮~UpTee~⊥~UpTeeArrow~↥~Uparrow~⇑~Updownarrow~⇕~UpperLeftArrow~↖~UpperRightArrow~↗~Upsi~ϒ~Uring~Ů~Uscr~𝒰~Utilde~Ũ~VDash~⊫~Vbar~⫫~Vcy~В~Vdash~⊩~Vdashl~⫦~Vee~⋁~Verbar~‖~Vert~‖~VerticalBar~∣~VerticalLine~|~VerticalSeparator~❘~VerticalTilde~≀~VeryThinSpace~ ~Vfr~𝔙~Vopf~𝕍~Vscr~𝒱~Vvdash~⊪~Wcirc~Ŵ~Wedge~⋀~Wfr~𝔚~Wopf~𝕎~Wscr~𝒲~Xfr~𝔛~Xopf~𝕏~Xscr~𝒳~YAcy~Я~YIcy~Ї~YUcy~Ю~Ycirc~Ŷ~Ycy~Ы~Yfr~𝔜~Yopf~𝕐~Yscr~𝒴~ZHcy~Ж~Zacute~Ź~Zcaron~Ž~Zcy~З~Zdot~Ż~ZeroWidthSpace~​~Zfr~ℨ~Zopf~ℤ~Zscr~𝒵~abreve~ă~ac~∾~acE~∾̳~acd~∿~acy~а~af~⁡~afr~𝔞~aleph~ℵ~amacr~ā~amalg~⨿~andand~⩕~andd~⩜~andslope~⩘~andv~⩚~ange~⦤~angle~∠~angmsd~∡~angmsdaa~⦨~angmsdab~⦩~angmsdac~⦪~angmsdad~⦫~angmsdae~⦬~angmsdaf~⦭~angmsdag~⦮~angmsdah~⦯~angrt~∟~angrtvb~⊾~angrtvbd~⦝~angsph~∢~angst~Å~angzarr~⍼~aogon~ą~aopf~𝕒~ap~≈~apE~⩰~apacir~⩯~ape~≊~apid~≋~approx~≈~approxeq~≊~ascr~𝒶~ast~*~asympeq~≍~awconint~∳~awint~⨑~bNot~⫭~backcong~≌~backepsilon~϶~backprime~‵~backsim~∽~backsimeq~⋍~barvee~⊽~barwed~⌅~barwedge~⌅~bbrk~⎵~bbrktbrk~⎶~bcong~≌~bcy~б~becaus~∵~because~∵~bemptyv~⦰~bepsi~϶~bernou~ℬ~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~˘~bscr~𝒷~bsemi~⁏~bsim~∽~bsime~⋍~bsol~\\~bsolb~⧅~bsolhsub~⟈~bullet~•~bump~≎~bumpE~⪮~bumpe~≏~bumpeq~≏~cacute~ć~capand~⩄~capbrcup~⩉~capcap~⩋~capcup~⩇~capdot~⩀~caps~∩︀~caret~⁁~caron~ˇ~ccaps~⩍~ccaron~č~ccirc~ĉ~ccups~⩌~ccupssm~⩐~cdot~ċ~cemptyv~⦲~centerdot~·~cfr~𝔠~chcy~ч~check~✓~checkmark~✓~cir~○~cirE~⧃~circeq~≗~circlearrowleft~↺~circlearrowright~↻~circledR~®~circledS~Ⓢ~circledast~⊛~circledcirc~⊚~circleddash~⊝~cire~≗~cirfnint~⨐~cirmid~⫯~cirscir~⧂~clubsuit~♣~colon~:~colone~≔~coloneq~≔~comma~,~commat~@~comp~∁~compfn~∘~complement~∁~complexes~ℂ~congdot~⩭~conint~∮~copf~𝕔~coprod~∐~copysr~℗~cross~✗~cscr~𝒸~csub~⫏~csube~⫑~csup~⫐~csupe~⫒~ctdot~⋯~cudarrl~⤸~cudarrr~⤵~cuepr~⋞~cuesc~⋟~cularr~↶~cularrp~⤽~cupbrcap~⩈~cupcap~⩆~cupcup~⩊~cupdot~⊍~cupor~⩅~cups~∪︀~curarr~↷~curarrm~⤼~curlyeqprec~⋞~curlyeqsucc~⋟~curlyvee~⋎~curlywedge~⋏~curvearrowleft~↶~curvearrowright~↷~cuvee~⋎~cuwed~⋏~cwconint~∲~cwint~∱~cylcty~⌭~dHar~⥥~daleth~ℸ~dash~‐~dashv~⊣~dbkarow~⤏~dblac~˝~dcaron~ď~dcy~д~dd~ⅆ~ddagger~‡~ddarr~⇊~ddotseq~⩷~demptyv~⦱~dfisht~⥿~dfr~𝔡~dharl~⇃~dharr~⇂~diam~⋄~diamond~⋄~diamondsuit~♦~die~¨~digamma~ϝ~disin~⋲~div~÷~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~≑~easter~⩮~ecaron~ě~ecir~≖~ecolon~≕~ecy~э~edot~ė~ee~ⅇ~efDot~≒~efr~𝔢~eg~⪚~egs~⪖~egsdot~⪘~el~⪙~elinters~⏧~ell~ℓ~els~⪕~elsdot~⪗~emacr~ē~emptyset~∅~emptyv~∅~emsp13~ ~emsp14~ ~eng~ŋ~eogon~ę~eopf~𝕖~epar~⋕~eparsl~⧣~eplus~⩱~epsi~ε~epsiv~ϵ~eqcirc~≖~eqcolon~≕~eqsim~≂~eqslantgtr~⪖~eqslantless~⪕~equals~=~equest~≟~equivDD~⩸~eqvparsl~⧥~erDot~≓~erarr~⥱~escr~ℯ~esdot~≐~esim~≂~excl~!~expectation~ℰ~exponentiale~ⅇ~fallingdotseq~≒~fcy~ф~female~♀~ffilig~ffi~fflig~ff~ffllig~ffl~ffr~𝔣~filig~fi~fjlig~fj~flat~♭~fllig~fl~fltns~▱~fopf~𝕗~fork~⋔~forkv~⫙~fpartint~⨍~frac13~⅓~frac15~⅕~frac16~⅙~frac18~⅛~frac23~⅔~frac25~⅖~frac35~⅗~frac38~⅜~frac45~⅘~frac56~⅚~frac58~⅝~frac78~⅞~frown~⌢~fscr~𝒻~gE~≧~gEl~⪌~gacute~ǵ~gammad~ϝ~gap~⪆~gbreve~ğ~gcirc~ĝ~gcy~г~gdot~ġ~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~⪐~gtcc~⪧~gtcir~⩺~gtdot~⋗~gtlPar~⦕~gtquest~⩼~gtrapprox~⪆~gtrarr~⥸~gtrdot~⋗~gtreqless~⋛~gtreqqless~⪌~gtrless~≷~gtrsim~≳~gvertneqq~≩︀~gvnE~≩︀~hairsp~ ~half~½~hamilt~ℋ~hardcy~ъ~harrcir~⥈~harrw~↭~hbar~ℏ~hcirc~ĥ~heartsuit~♥~hercon~⊹~hfr~𝔥~hksearow~⤥~hkswarow~⤦~hoarr~⇿~homtht~∻~hookleftarrow~↩~hookrightarrow~↪~hopf~𝕙~horbar~―~hscr~𝒽~hslash~ℏ~hstrok~ħ~hybull~⁃~hyphen~‐~ic~⁣~icy~и~iecy~е~iff~⇔~ifr~𝔦~ii~ⅈ~iiiint~⨌~iiint~∭~iinfin~⧜~iiota~℩~ijlig~ij~imacr~ī~imagline~ℐ~imagpart~ℑ~imath~ı~imof~⊷~imped~Ƶ~in~∈~incare~℅~infintie~⧝~inodot~ı~intcal~⊺~integers~ℤ~intercal~⊺~intlarhk~⨗~intprod~⨼~iocy~ё~iogon~į~iopf~𝕚~iprod~⨼~iscr~𝒾~isinE~⋹~isindot~⋵~isins~⋴~isinsv~⋳~isinv~∈~it~⁢~itilde~ĩ~iukcy~і~jcirc~ĵ~jcy~й~jfr~𝔧~jmath~ȷ~jopf~𝕛~jscr~𝒿~jsercy~ј~jukcy~є~kappav~ϰ~kcedil~ķ~kcy~к~kfr~𝔨~kgreen~ĸ~khcy~х~kjcy~ќ~kopf~𝕜~kscr~𝓀~lAarr~⇚~lAtail~⤛~lBarr~⤎~lE~≦~lEg~⪋~lHar~⥢~lacute~ĺ~laemptyv~⦴~lagran~ℒ~langd~⦑~langle~⟨~lap~⪅~larrb~⇤~larrbfs~⤟~larrfs~⤝~larrhk~↩~larrlp~↫~larrpl~⤹~larrsim~⥳~larrtl~↢~lat~⪫~latail~⤙~late~⪭~lates~⪭︀~lbarr~⤌~lbbrk~❲~lbrace~{~lbrack~[~lbrke~⦋~lbrksld~⦏~lbrkslu~⦍~lcaron~ľ~lcedil~ļ~lcub~{~lcy~л~ldca~⤶~ldquor~„~ldrdhar~⥧~ldrushar~⥋~ldsh~↲~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~⥼~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~⨴~lowbar~_~lozenge~◊~lozf~⧫~lpar~(~lparlt~⦓~lrarr~⇆~lrcorner~⌟~lrhar~⇋~lrhard~⥭~lrtri~⊿~lscr~𝓁~lsh~↰~lsim~≲~lsime~⪍~lsimg~⪏~lsqb~[~lsquor~‚~lstrok~ł~ltcc~⪦~ltcir~⩹~ltdot~⋖~lthree~⋋~ltimes~⋉~ltlarr~⥶~ltquest~⩻~ltrPar~⦖~ltri~◃~ltrie~⊴~ltrif~◂~lurdshar~⥊~luruhar~⥦~lvertneqq~≨︀~lvnE~≨︀~mDDot~∺~male~♂~malt~✠~maltese~✠~map~↦~mapsto~↦~mapstodown~↧~mapstoleft~↤~mapstoup~↥~marker~▮~mcomma~⨩~mcy~м~measuredangle~∡~mfr~𝔪~mho~℧~mid~∣~midast~*~midcir~⫰~minusb~⊟~minusd~∸~minusdu~⨪~mlcp~⫛~mldr~…~mnplus~∓~models~⊧~mopf~𝕞~mp~∓~mscr~𝓂~mstpos~∾~multimap~⊸~mumap~⊸~nGg~⋙̸~nGt~≫⃒~nGtv~≫̸~nLeftarrow~⇍~nLeftrightarrow~⇎~nLl~⋘̸~nLt~≪⃒~nLtv~≪̸~nRightarrow~⇏~nVDash~⊯~nVdash~⊮~nacute~ń~nang~∠⃒~nap~≉~napE~⩰̸~napid~≋̸~napos~ʼn~napprox~≉~natur~♮~natural~♮~naturals~ℕ~nbump~≎̸~nbumpe~≏̸~ncap~⩃~ncaron~ň~ncedil~ņ~ncong~≇~ncongdot~⩭̸~ncup~⩂~ncy~н~neArr~⇗~nearhk~⤤~nearr~↗~nearrow~↗~nedot~≐̸~nequiv~≢~nesear~⤨~nesim~≂̸~nexist~∄~nexists~∄~nfr~𝔫~ngE~≧̸~nge~≱~ngeq~≱~ngeqq~≧̸~ngeqslant~⩾̸~nges~⩾̸~ngsim~≵~ngt~≯~ngtr~≯~nhArr~⇎~nharr~↮~nhpar~⫲~nis~⋼~nisd~⋺~niv~∋~njcy~њ~nlArr~⇍~nlE~≦̸~nlarr~↚~nldr~‥~nle~≰~nleftarrow~↚~nleftrightarrow~↮~nleq~≰~nleqq~≦̸~nleqslant~⩽̸~nles~⩽̸~nless~≮~nlsim~≴~nlt~≮~nltri~⋪~nltrie~⋬~nmid~∤~nopf~𝕟~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~⋣~nsubE~⫅̸~nsube~⊈~nsubset~⊂⃒~nsubseteq~⊈~nsubseteqq~⫅̸~nsucc~⊁~nsucceq~⪰̸~nsup~⊅~nsupE~⫆̸~nsupe~⊉~nsupset~⊃⃒~nsupseteq~⊉~nsupseteqq~⫆̸~ntgl~≹~ntlg~≸~ntriangleleft~⋪~ntrianglelefteq~⋬~ntriangleright~⋫~ntrianglerighteq~⋭~num~#~numero~№~numsp~ ~nvDash~⊭~nvHarr~⤄~nvap~≍⃒~nvdash~⊬~nvge~≥⃒~nvgt~>⃒~nvinfin~⧞~nvlArr~⤂~nvle~≤⃒~nvlt~<⃒~nvltrie~⊴⃒~nvrArr~⤃~nvrtrie~⊵⃒~nvsim~∼⃒~nwArr~⇖~nwarhk~⤣~nwarr~↖~nwarrow~↖~nwnear~⤧~oS~Ⓢ~oast~⊛~ocir~⊚~ocy~о~odash~⊝~odblac~ő~odiv~⨸~odot~⊙~odsold~⦼~ofcir~⦿~ofr~𝔬~ogon~˛~ogt~⧁~ohbar~⦵~ohm~Ω~oint~∮~olarr~↺~olcir~⦾~olcross~⦻~olt~⧀~omacr~ō~omid~⦶~ominus~⊖~oopf~𝕠~opar~⦷~operp~⦹~orarr~↻~ord~⩝~order~ℴ~orderof~ℴ~origof~⊶~oror~⩖~orslope~⩗~orv~⩛~oscr~ℴ~osol~⊘~otimesas~⨶~ovbar~⌽~par~∥~parallel~∥~parsim~⫳~parsl~⫽~pcy~п~percnt~%~period~.~pertenk~‱~pfr~𝔭~phiv~ϕ~phmmat~ℳ~phone~☎~pitchfork~⋔~planck~ℏ~planckh~ℎ~plankv~ℏ~plus~+~plusacir~⨣~plusb~⊞~pluscir~⨢~plusdo~∔~plusdu~⨥~pluse~⩲~plussim~⨦~plustwo~⨧~pm~±~pointint~⨕~popf~𝕡~pr~≺~prE~⪳~prap~⪷~prcue~≼~pre~⪯~prec~≺~precapprox~⪷~preccurlyeq~≼~preceq~⪯~precnapprox~⪹~precneqq~⪵~precnsim~⋨~precsim~≾~primes~ℙ~prnE~⪵~prnap~⪹~prnsim~⋨~profalar~⌮~profline~⌒~profsurf~⌓~propto~∝~prsim~≾~prurel~⊰~pscr~𝓅~puncsp~ ~qfr~𝔮~qint~⨌~qopf~𝕢~qprime~⁗~qscr~𝓆~quaternions~ℍ~quatint~⨖~quest~?~questeq~≟~rAarr~⇛~rAtail~⤜~rBarr~⤏~rHar~⥤~race~∽̱~racute~ŕ~raemptyv~⦳~rangd~⦒~range~⦥~rangle~⟩~rarrap~⥵~rarrb~⇥~rarrbfs~⤠~rarrc~⤳~rarrfs~⤞~rarrhk~↪~rarrlp~↬~rarrpl~⥅~rarrsim~⥴~rarrtl~↣~rarrw~↝~ratail~⤚~ratio~∶~rationals~ℚ~rbarr~⤍~rbbrk~❳~rbrace~}~rbrack~]~rbrke~⦌~rbrksld~⦎~rbrkslu~⦐~rcaron~ř~rcedil~ŗ~rcub~}~rcy~р~rdca~⤷~rdldhar~⥩~rdquor~”~rdsh~↳~realine~ℛ~realpart~ℜ~reals~ℝ~rect~▭~rfisht~⥽~rfr~𝔯~rhard~⇁~rharu~⇀~rharul~⥬~rhov~ϱ~rightarrow~→~rightarrowtail~↣~rightharpoondown~⇁~rightharpoonup~⇀~rightleftarrows~⇄~rightleftharpoons~⇌~rightrightarrows~⇉~rightsquigarrow~↝~rightthreetimes~⋌~ring~˚~risingdotseq~≓~rlarr~⇄~rlhar~⇌~rmoust~⎱~rmoustache~⎱~rnmid~⫮~roang~⟭~roarr~⇾~robrk~⟧~ropar~⦆~ropf~𝕣~roplus~⨮~rotimes~⨵~rpar~)~rpargt~⦔~rppolint~⨒~rrarr~⇉~rscr~𝓇~rsh~↱~rsqb~]~rsquor~’~rthree~⋌~rtimes~⋊~rtri~▹~rtrie~⊵~rtrif~▸~rtriltri~⧎~ruluhar~⥨~rx~℞~sacute~ś~sc~≻~scE~⪴~scap~⪸~sccue~≽~sce~⪰~scedil~ş~scirc~ŝ~scnE~⪶~scnap~⪺~scnsim~⋩~scpolint~⨓~scsim~≿~scy~с~sdotb~⊡~sdote~⩦~seArr~⇘~searhk~⤥~searr~↘~searrow~↘~semi~;~seswar~⤩~setminus~∖~setmn~∖~sext~✶~sfr~𝔰~sfrown~⌢~sharp~♯~shchcy~щ~shcy~ш~shortmid~∣~shortparallel~∥~sigmav~ς~simdot~⩪~sime~≃~simeq~≃~simg~⪞~simgE~⪠~siml~⪝~simlE~⪟~simne~≆~simplus~⨤~simrarr~⥲~slarr~←~smallsetminus~∖~smashp~⨳~smeparsl~⧤~smid~∣~smile~⌣~smt~⪪~smte~⪬~smtes~⪬︀~softcy~ь~sol~/~solb~⧄~solbar~⌿~sopf~𝕤~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~¯~subE~⫅~subdot~⪽~subedot~⫃~submult~⫁~subnE~⫋~subne~⊊~subplus~⪿~subrarr~⥹~subset~⊂~subseteq~⊆~subseteqq~⫅~subsetneq~⊊~subsetneqq~⫋~subsim~⫇~subsub~⫕~subsup~⫓~succ~≻~succapprox~⪸~succcurlyeq~≽~succeq~⪰~succnapprox~⪺~succneqq~⪶~succnsim~⋩~succsim~≿~sung~♪~supE~⫆~supdot~⪾~supdsub~⫘~supedot~⫄~suphsol~⟉~suphsub~⫗~suplarr~⥻~supmult~⫂~supnE~⫌~supne~⊋~supplus~⫀~supset~⊃~supseteq~⊇~supseteqq~⫆~supsetneq~⊋~supsetneqq~⫌~supsim~⫈~supsub~⫔~supsup~⫖~swArr~⇙~swarhk~⤦~swarr~↙~swarrow~↙~swnwar~⤪~target~⌖~tbrk~⎴~tcaron~ť~tcedil~ţ~tcy~т~tdot~⃛~telrec~⌕~tfr~𝔱~therefore~∴~thetav~ϑ~thickapprox~≈~thicksim~∼~thkap~≈~thksim~∼~timesb~⊠~timesbar~⨱~timesd~⨰~tint~∭~toea~⤨~top~⊤~topbot~⌶~topcir~⫱~topf~𝕥~topfork~⫚~tosa~⤩~tprime~‴~triangle~▵~triangledown~▿~triangleleft~◃~trianglelefteq~⊴~triangleq~≜~triangleright~▹~trianglerighteq~⊵~tridot~◬~trie~≜~triminus~⨺~triplus~⨹~trisb~⧍~tritime~⨻~trpezium~⏢~tscr~𝓉~tscy~ц~tshcy~ћ~tstrok~ŧ~twixt~≬~twoheadleftarrow~↞~twoheadrightarrow~↠~uHar~⥣~ubrcy~ў~ubreve~ŭ~ucy~у~udarr~⇅~udblac~ű~udhar~⥮~ufisht~⥾~ufr~𝔲~uharl~↿~uharr~↾~uhblk~▀~ulcorn~⌜~ulcorner~⌜~ulcrop~⌏~ultri~◸~umacr~ū~uogon~ų~uopf~𝕦~uparrow~↑~updownarrow~↕~upharpoonleft~↿~upharpoonright~↾~uplus~⊎~upsi~υ~upuparrows~⇈~urcorn~⌝~urcorner~⌝~urcrop~⌎~uring~ů~urtri~◹~uscr~𝓊~utdot~⋰~utilde~ũ~utri~▵~utrif~▴~uuarr~⇈~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~≙~wfr~𝔴~wopf~𝕨~wp~℘~wr~≀~wreath~≀~wscr~𝓌~xcap~⋂~xcirc~◯~xcup~⋃~xdtri~▽~xfr~𝔵~xhArr~⟺~xharr~⟷~xlArr~⟸~xlarr~⟵~xmap~⟼~xnis~⋻~xodot~⨀~xopf~𝕩~xoplus~⨁~xotime~⨂~xrArr~⟹~xrarr~⟶~xscr~𝓍~xsqcup~⨆~xuplus~⨄~xutri~△~xvee~⋁~xwedge~⋀~yacy~я~ycirc~ŷ~ycy~ы~yfr~𝔶~yicy~ї~yopf~𝕪~yscr~𝓎~yucy~ю~zacute~ź~zcaron~ž~zcy~з~zdot~ż~zeetrf~ℨ~zfr~𝔷~zhcy~ж~zigrarr~⇝~zopf~𝕫~zscr~𝓏~~AMP~&~COPY~©~GT~>~LT~<~QUOT~"~REG~®',o.html4),String.fromCodePoint;var i=String.prototype.codePointAt?function(e,r){return e.codePointAt(r)}:function(e,r){return 1024*(e.charCodeAt(r)-55296)+e.charCodeAt(r+1)-56320+65536},n=function(){return n=Object.assign||function(e){for(var r,t=1,s=arguments.length;t<s;t++)for(var a in r=arguments[t])Object.prototype.hasOwnProperty.call(r,a)&&(e[a]=r[a]);return e},n.apply(this,arguments)},c=n(n({},o),{all:o.html5}),l={specialChars:/[<>'"&]/g,nonAscii:/[<>'"&\u0080-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g,nonAsciiPrintable:/[<>'"&\x01-\x08\x11-\x15\x17-\x1F\x7f-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g,nonAsciiPrintableOnly:/[\x01-\x08\x11-\x15\x17-\x1F\x7f-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g,extensive:/[\x01-\x0c\x0e-\x1f\x21-\x2c\x2e-\x2f\x3a-\x40\x5b-\x60\x7b-\x7d\x7f-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g},u={mode:"specialChars",level:"all",numeric:"decimal"};function p(e,r){var t=void 0===r?u:r,s=t.mode,a=void 0===s?"specialChars":s,o=t.numeric,n=void 0===o?"decimal":o,p=t.level;if(!e)return"";var h=l[a],g=c[void 0===p?"all":p].characters,f="hexadecimal"===n;return String.prototype.replace.call(e,h,(function(e){var r=g[e];if(!r){var t=e.length>1?i(e,0):e.charCodeAt(0);r=(f?"&#x"+t.toString(16):"&#"+t)+";"}return r}))}var h=/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);/g,g=/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+)[;=]?/g,f={xml:{strict:h,attribute:g,body:a.xml},html4:{strict:h,attribute:g,body:a.html4},html5:{strict:h,attribute:g,body:a.html5}};function d(e){return"string"!=typeof e?e:e.replace(/\\/g,"\\\\").replace(/\[/g,"\\[").replace(/\]/g,"\\]").replace(/\{/g,"\\{").replace(/\}/g,"\\}")}(n(n({},f),{all:f.html5}),String.fromCharCode)(65533);class m{#e="";#r=[];#t={};#s="";constructor(e="",r="",t=[],s={}){this.name=e,this.tags=t,this.metadata=s,this.text=r}get name(){return this.#e}set name(e){if("string"!=typeof e)throw new Error("Name must be a String!");this.#e=e}get tags(){return this.#r}set tags(e){if(!Array.isArray(e))throw new Error("Tags must be an array!");this.#r=e}get metadata(){return this.#t}set metadata(e){if("object"!=typeof e)throw new Error("Metadata should be an object literal!");this.#t=e}get text(){return this.#s}set text(e){if("string"!=typeof e)throw new Error("Text should be a String!");this.#s=e}toTwee(){let e="";e+=`:: ${d(this.name)}`,this.tags.length>0&&(e+=` [${this.tags.map((e=>d(e))).join(" ")}]`),Object.keys(this.metadata).length>0&&(e+=` ${JSON.stringify(this.metadata)}`);const r=this.text.split("\n");for(let e=0;e<r.length;e++)r[e].startsWith("::")&&(r[e]=`\\${r[e]}`);return e+=`\n${r.join("\n")}\n\n`,e}toJSON(){const e={name:this.name,tags:this.tags,metadata:this.metadata,text:this.text};return JSON.stringify(e)}toTwine2HTML(e=1){let r="\t<tw-passagedata";return r+=` pid="${e}"`,r+=` name="${p(this.name)}"`,r+=` tags="${p(this.#r.join(" "))}" `,Object.prototype.hasOwnProperty.call(this.#t,"position")&&(r+=` position="${this.#t.position}" `),Object.prototype.hasOwnProperty.call(this.#t,"size")&&(r+=`size="${this.#t.size}" `),r+=`>${p(this.text)}</tw-passagedata>\n`,r}toTwine1HTML(){let e="\t<div";return e+=` tiddler="${p(this.name)}"`,e+=` tags="${p(this.#r.join(" "))}" `,e+=' modifier="extwee"',Object.prototype.hasOwnProperty.call(this.#t,"position")?e+=` twine-position="${this.#t.position}"`:e+=' twine-position="10,10"',e+=`>${p(this.#s)}</div>`,e}}const b=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i,y=function(e){if(!function(e){return"string"==typeof e&&b.test(e)}(e))throw TypeError("Invalid UUID");let r;return Uint8Array.of((r=parseInt(e.slice(0,8),16))>>>24,r>>>16&255,r>>>8&255,255&r,(r=parseInt(e.slice(9,13),16))>>>8,255&r,(r=parseInt(e.slice(14,18),16))>>>8,255&r,(r=parseInt(e.slice(19,23),16))>>>8,255&r,(r=parseInt(e.slice(24,36),16))/1099511627776&255,r/4294967296&255,r>>>24&255,r>>>16&255,r>>>8&255,255&r)},w=[];for(let e=0;e<256;++e)w.push((e+256).toString(16).slice(1));function v(e,r=0){return(w[e[r+0]]+w[e[r+1]]+w[e[r+2]]+w[e[r+3]]+"-"+w[e[r+4]]+w[e[r+5]]+"-"+w[e[r+6]]+w[e[r+7]]+"-"+w[e[r+8]]+w[e[r+9]]+"-"+w[e[r+10]]+w[e[r+11]]+w[e[r+12]]+w[e[r+13]]+w[e[r+14]]+w[e[r+15]]).toLowerCase()}let q;const _=new Uint8Array(16);function x(e){return 14+(e+64>>>9<<4)+1}function k(e,r){const t=(65535&e)+(65535&r);return(e>>16)+(r>>16)+(t>>16)<<16|65535&t}function E(e,r,t,s,a,o){return k((i=k(k(r,e),k(s,o)))<<(n=a)|i>>>32-n,t);var i,n}function D(e,r,t,s,a,o,i){return E(r&t|~r&s,e,r,a,o,i)}function S(e,r,t,s,a,o,i){return E(r&s|t&~s,e,r,a,o,i)}function A(e,r,t,s,a,o,i){return E(r^t^s,e,r,a,o,i)}function T(e,r,t,s,a,o,i){return E(t^(r|~s),e,r,a,o,i)}const L=function(e){return function(e){const r=new Uint8Array(4*e.length);for(let t=0;t<4*e.length;t++)r[t]=e[t>>2]>>>t%4*8&255;return r}(function(e,r){const t=new Uint32Array(x(r)).fill(0);t.set(e),t[r>>5]|=128<<r%32,t[t.length-1]=r,e=t;let s=1732584193,a=-271733879,o=-1732584194,i=271733878;for(let r=0;r<e.length;r+=16){const t=s,n=a,c=o,l=i;s=D(s,a,o,i,e[r],7,-680876936),i=D(i,s,a,o,e[r+1],12,-389564586),o=D(o,i,s,a,e[r+2],17,606105819),a=D(a,o,i,s,e[r+3],22,-1044525330),s=D(s,a,o,i,e[r+4],7,-176418897),i=D(i,s,a,o,e[r+5],12,1200080426),o=D(o,i,s,a,e[r+6],17,-1473231341),a=D(a,o,i,s,e[r+7],22,-45705983),s=D(s,a,o,i,e[r+8],7,1770035416),i=D(i,s,a,o,e[r+9],12,-1958414417),o=D(o,i,s,a,e[r+10],17,-42063),a=D(a,o,i,s,e[r+11],22,-1990404162),s=D(s,a,o,i,e[r+12],7,1804603682),i=D(i,s,a,o,e[r+13],12,-40341101),o=D(o,i,s,a,e[r+14],17,-1502002290),a=D(a,o,i,s,e[r+15],22,1236535329),s=S(s,a,o,i,e[r+1],5,-165796510),i=S(i,s,a,o,e[r+6],9,-1069501632),o=S(o,i,s,a,e[r+11],14,643717713),a=S(a,o,i,s,e[r],20,-373897302),s=S(s,a,o,i,e[r+5],5,-701558691),i=S(i,s,a,o,e[r+10],9,38016083),o=S(o,i,s,a,e[r+15],14,-660478335),a=S(a,o,i,s,e[r+4],20,-405537848),s=S(s,a,o,i,e[r+9],5,568446438),i=S(i,s,a,o,e[r+14],9,-1019803690),o=S(o,i,s,a,e[r+3],14,-187363961),a=S(a,o,i,s,e[r+8],20,1163531501),s=S(s,a,o,i,e[r+13],5,-1444681467),i=S(i,s,a,o,e[r+2],9,-51403784),o=S(o,i,s,a,e[r+7],14,1735328473),a=S(a,o,i,s,e[r+12],20,-1926607734),s=A(s,a,o,i,e[r+5],4,-378558),i=A(i,s,a,o,e[r+8],11,-2022574463),o=A(o,i,s,a,e[r+11],16,1839030562),a=A(a,o,i,s,e[r+14],23,-35309556),s=A(s,a,o,i,e[r+1],4,-1530992060),i=A(i,s,a,o,e[r+4],11,1272893353),o=A(o,i,s,a,e[r+7],16,-155497632),a=A(a,o,i,s,e[r+10],23,-1094730640),s=A(s,a,o,i,e[r+13],4,681279174),i=A(i,s,a,o,e[r],11,-358537222),o=A(o,i,s,a,e[r+3],16,-722521979),a=A(a,o,i,s,e[r+6],23,76029189),s=A(s,a,o,i,e[r+9],4,-640364487),i=A(i,s,a,o,e[r+12],11,-421815835),o=A(o,i,s,a,e[r+15],16,530742520),a=A(a,o,i,s,e[r+2],23,-995338651),s=T(s,a,o,i,e[r],6,-198630844),i=T(i,s,a,o,e[r+7],10,1126891415),o=T(o,i,s,a,e[r+14],15,-1416354905),a=T(a,o,i,s,e[r+5],21,-57434055),s=T(s,a,o,i,e[r+12],6,1700485571),i=T(i,s,a,o,e[r+3],10,-1894986606),o=T(o,i,s,a,e[r+10],15,-1051523),a=T(a,o,i,s,e[r+1],21,-2054922799),s=T(s,a,o,i,e[r+8],6,1873313359),i=T(i,s,a,o,e[r+15],10,-30611744),o=T(o,i,s,a,e[r+6],15,-1560198380),a=T(a,o,i,s,e[r+13],21,1309151649),s=T(s,a,o,i,e[r+4],6,-145523070),i=T(i,s,a,o,e[r+11],10,-1120210379),o=T(o,i,s,a,e[r+2],15,718787259),a=T(a,o,i,s,e[r+9],21,-343485551),s=k(s,t),a=k(a,n),o=k(o,c),i=k(i,l)}return Uint32Array.of(s,a,o,i)}(function(e){if(0===e.length)return new Uint32Array;const r=new Uint32Array(x(8*e.length)).fill(0);for(let t=0;t<e.length;t++)r[t>>2]|=(255&e[t])<<t%4*8;return r}(e),8*e.length))},U="6ba7b810-9dad-11d1-80b4-00c04fd430c8",R="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function F(e,r,t,s,a,o){const i="string"==typeof t?function(e){e=unescape(encodeURIComponent(e));const r=new Uint8Array(e.length);for(let t=0;t<e.length;++t)r[t]=e.charCodeAt(t);return r}(t):t,n="string"==typeof s?y(s):s;if("string"==typeof s&&(s=y(s)),16!==s?.length)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let c=new Uint8Array(16+i.length);if(c.set(n),c.set(i,n.length),c=r(c),c[6]=15&c[6]|e,c[8]=63&c[8]|128,a){o=o||0;for(let e=0;e<16;++e)a[o+e]=c[e];return a}return v(c)}function N(e,r,t,s){return F(48,L,e,r,t,s)}N.DNS=U,N.URL=R;const O={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};const I=function(e,r,t){return!O.randomUUID||r||e?function(e,r,t){const s=(e=e||{}).random??e.rng?.()??function(){if(!q){if("undefined"==typeof crypto||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");q=crypto.getRandomValues.bind(crypto)}return q(_)}();if(s.length<16)throw new Error("Random bytes length must be >= 16");if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,r){if((t=t||0)<0||t+16>r.length)throw new RangeError(`UUID byte range ${t}:${t+15} is out of buffer bounds`);for(let e=0;e<16;++e)r[t+e]=s[e];return r}return v(s)}(e,r,t):O.randomUUID()};function V(e,r,t,s){switch(e){case 0:return r&t^~r&s;case 1:case 3:return r^t^s;case 2:return r&t^r&s^t&s}}function C(e,r){return e<<r|e>>>32-r}const P=function(e){const r=[1518500249,1859775393,2400959708,3395469782],t=[1732584193,4023233417,2562383102,271733878,3285377520],s=new Uint8Array(e.length+1);s.set(e),s[e.length]=128;const a=(e=s).length/4+2,o=Math.ceil(a/16),i=new Array(o);for(let r=0;r<o;++r){const t=new Uint32Array(16);for(let s=0;s<16;++s)t[s]=e[64*r+4*s]<<24|e[64*r+4*s+1]<<16|e[64*r+4*s+2]<<8|e[64*r+4*s+3];i[r]=t}i[o-1][14]=8*(e.length-1)/Math.pow(2,32),i[o-1][14]=Math.floor(i[o-1][14]),i[o-1][15]=8*(e.length-1)&4294967295;for(let e=0;e<o;++e){const s=new Uint32Array(80);for(let r=0;r<16;++r)s[r]=i[e][r];for(let e=16;e<80;++e)s[e]=C(s[e-3]^s[e-8]^s[e-14]^s[e-16],1);let a=t[0],o=t[1],n=t[2],c=t[3],l=t[4];for(let e=0;e<80;++e){const t=Math.floor(e/20),i=C(a,5)+V(t,o,n,c)+l+r[t]+s[e]>>>0;l=c,c=n,n=C(o,30)>>>0,o=a,a=i}t[0]=t[0]+a>>>0,t[1]=t[1]+o>>>0,t[2]=t[2]+n>>>0,t[3]=t[3]+c>>>0,t[4]=t[4]+l>>>0}return Uint8Array.of(t[0]>>24,t[0]>>16,t[0]>>8,t[0],t[1]>>24,t[1]>>16,t[1]>>8,t[1],t[2]>>24,t[2]>>16,t[2]>>8,t[2],t[3]>>24,t[3]>>16,t[3]>>8,t[3],t[4]>>24,t[4]>>16,t[4]>>8,t[4])};function B(e,r,t,s){return F(80,P,e,r,t,s)}function j(){return I().toUpperCase()}B.DNS=U,B.URL=R;class z{#e="Untitled Story";#a="";#o="";#i="";#n="";#c=1;#l=[];#u="";#p="";#t=null;#h={};#g="";#f="";constructor(e="Untitled Story"){this.name=e,this.#u="extwee",this.#p="2.3.6",this.#t={}}get name(){return this.#e}set name(e){if("string"!=typeof e)throw new Error("Story name must be a string");this.#e=e}get tagColors(){return this.#h}set tagColors(e){if(!(e instanceof Object))throw new Error("Tag colors must be an object!");this.#h=e}get IFID(){return this.#o}set IFID(e){if("string"!=typeof e)throw new Error("IFID must be a String!");this.#o=e}get start(){return this.#a}set start(e){if("string"!=typeof e)throw new Error("start (passage name) must be a String!");this.#a=e}get formatVersion(){return this.#n}set formatVersion(e){if("string"!=typeof e)throw new Error("Story format version must be a String!");this.#n=e}get metadata(){return this.#t}set metadata(e){if("object"!=typeof e)throw new Error("Story metadata must be Object!");this.#t=e}get format(){return this.#i}set format(e){if("string"!=typeof e)throw new Error("Story format must be a String!");this.#i=e}get creator(){return this.#u}set creator(e){if("string"!=typeof e)throw new Error("Creator must be String");this.#u=e}get creatorVersion(){return this.#p}set creatorVersion(e){if("string"!=typeof e)throw new Error("Creator version must be a string!");this.#p=e}get zoom(){return this.#c}set zoom(e){if("number"!=typeof e)throw new Error("Zoom level must be a Number!");this.#c=Number(Number.parseFloat(e).toFixed(2))}get passages(){return this.#l}set passages(e){if(!Array.isArray(e))throw new Error("Passages must be an Array!");if(!e.every((e=>e instanceof m)))throw new Error("Passages must be an Array of Passage objects!");this.#l=e}get storyStylesheet(){return this.#f}set storyStylesheet(e){if("string"!=typeof e)throw new Error("Story stylesheet must be a string!");this.#f=e}get storyJavaScript(){return this.#g}set storyJavaScript(e){if("string"!=typeof e)throw new Error("Story JavaScript must be a string!");this.#g=e}addPassage(e){if(!(e instanceof m))throw new Error("Can only add Passages to the story!");if(null!==this.getPassageByName(e.name))return console.warn(`Warning: A passage with the name "${e.name}" already exists!`),this.#l.length;if("StoryData"===e.name){try{const r=JSON.parse(e.text);Object.prototype.hasOwnProperty.call(r,"ifid")&&(this.IFID=r.ifid),Object.prototype.hasOwnProperty.call(r,"format")&&(this.format=r.format),Object.prototype.hasOwnProperty.call(r,"format-version")&&(this.formatVersion=r["format-version"]),Object.prototype.hasOwnProperty.call(r,"zoom")&&(this.zoom=r.zoom),Object.prototype.hasOwnProperty.call(r,"start")&&(this.start=r.start),Object.prototype.hasOwnProperty.call(r,"tag-colors")&&(this.tagColors=r["tag-colors"])}catch(e){}return this.#l.length}return"StoryTitle"===e.name?(this.name=e.text,this.#l.length):("Start"===e.name&&""==this.start&&(this.start=e.name),this.#l.push(e))}removePassageByName(e){return this.#l=this.#l.filter((r=>r.name!==e)),this.#l.length}getPassagesByTag(e){return this.#l.filter((r=>r.tags.some((r=>e===r))))}getPassageByName(e){const r=this.#l.find((r=>r.name===e));return void 0!==r?r:null}size(){return this.#l.length}toJSON(){const e={name:this.name,tagColors:this.tagColors,ifid:this.IFID,start:this.start,formatVersion:this.formatVersion,metadata:this.metadata,format:this.format,creator:this.creator,creatorVersion:this.creatorVersion,zoom:this.zoom,style:this.storyStylesheet,script:this.storyJavaScript,passages:[]};return this.passages.forEach((r=>{e.passages.push({name:r.name,tags:r.tags,metadata:r.metadata,text:r.text})})),JSON.stringify(e,null,4)}toTwee(){let e=":: StoryData\n";const r={};return null===this.IFID.match(/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/)?(r.ifid=j(),console.warn("Warning: IFID is not in UUIDv4 format! A new IFID was generated.")):r.ifid=this.IFID,""!==this.format&&(r.format=this.format),""!==this.formatVersion&&(r["format-version"]=this.formatVersion),0!==this.zoom&&(r.zoom=this.zoom),""!==this.start&&(r.start=this.start),Object.keys(this.tagColors).length>0&&(r["tag-colors"]=this.tagColors),e+=`${JSON.stringify(r,void 0,2)}`,e+="\n\n",e+=":: StoryTitle\n"+this.name,e+="\n\n",this.#f.length>0&&(e+=":: StoryStylesheet [stylesheet]\n"+this.#f+"\n\n"),this.#g.length>0&&(e+=":: StoryJavaScript [script]\n"+this.#g+"\n\n"),this.passages.forEach((r=>{e+=r.toTwee()})),e}toTwine2HTML(){let e=this.passages,r=`<tw-storydata name="${p(this.name)}"`;""!==this.IFID?r+=` ifid="${this.IFID}"`:r+=` ifid="${j()}"`;let t=1,s=1;e.forEach((e=>{e.name===this.start&&(s=t),t++})),0===e.length&&(s=0),r+=` startnode="${s}"`,""!==this.creator&&(r+=` creator="${p(this.creator)}"`),""!==this.creatorVersion&&(r+=` creator-version="${this.creatorVersion}"`),1!==this.zoom&&(r+=` zoom="${this.zoom}"`),""!==this.format&&(r+=` format="${this.format}"`),""!==this.formatVersion&&(r+=` format-version="${this.formatVersion}"`),r+=" options hidden>\n";const a=e.filter((e=>e.tags.includes("stylesheet")));e=e.filter((e=>!e.tags.includes("stylesheet"))),a.length>0&&(r+='\t<style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css">',a.forEach((e=>{r+=e.text})),r+="</style>\n"),this.#f.length>0&&(r+=`\t<style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css">${this.#f}</style>\n`);const o=e.filter((e=>e.tags.includes("script")));return e=e.filter((e=>!e.tags.includes("script"))),o.length>0&&(r+='\t<script role="script" id="twine-user-script" type="text/twine-javascript">',o.forEach((e=>{r+=e.text})),r+="<\/script>\n"),this.#g.length>0&&(r+=`\t<script role="script" id="twine-user-script" type="text/twine-javascript">${this.#g}<\/script>\n`),t=1,this.passages.forEach((e=>{r+=e.toTwine2HTML(t),t++})),Object.keys(this.tagColors).forEach((e=>{r+=`\t<tw-tag name="${e}" color="${this.tagColors[e]}"></tw-tag>\n`})),r+="</tw-storydata>",r}toTwine1HTML(){let e="";return this.passages.forEach((r=>{e+=`\t${r.toTwine1HTML()}`})),e}}var H=t(117);function G(e){if(!Buffer.isBuffer(e))throw new Error("Only parsing of Buffer is allowed!");const r=new H.Parser;let t=null;try{t=r.parse(e)}catch(e){throw new TypeError(`Error: Buffer does not contain Python pickle data! ${e}`)}const s=new z;if(Object.prototype.hasOwnProperty.call(t,"storyPanel")&&(Object.prototype.hasOwnProperty.call(t.storyPanel,"scale")&&(s.zoom=t.storyPanel.scale),Object.prototype.hasOwnProperty.call(t.storyPanel,"widgets")))for(const e of t.storyPanel.widgets){const r=new m;r.name=e.passage.title,r.tags=e.passage.tags,r.text=e.passage.text,"Start"===r.name&&(s.start=r.name),"StoryTitle"===r.name&&(s.name=r.text),s.addPassage(r)}return s}const $={parseTWS:G,parse:G},M="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:null;M&&(M.Extwee=M.Extwee||{},M.Extwee.parseTWS=G)})(),s.default})()));
package/package.json CHANGED
@@ -1,9 +1,17 @@
1
1
  {
2
2
  "name": "extwee",
3
- "version": "2.3.5",
3
+ "version": "2.3.6",
4
4
  "description": "A story compiler tool using Twine-compatible formats",
5
5
  "author": "Dan Cox",
6
6
  "main": "index.js",
7
+ "exports": {
8
+ ".": "./index.js",
9
+ "./web": "./build/extwee.core.min.js",
10
+ "./web/core": "./build/extwee.core.min.js",
11
+ "./web/twine1html": "./build/extwee.twine1html.min.js",
12
+ "./web/twine2archive": "./build/extwee.twine2archive.min.js",
13
+ "./web/tws": "./build/extwee.tws.min.js"
14
+ },
7
15
  "bin": {
8
16
  "extwee": "src/extwee.js"
9
17
  },
@@ -36,25 +44,25 @@
36
44
  },
37
45
  "devDependencies": {
38
46
  "@babel/cli": "^7.28.3",
39
- "@babel/core": "^7.28.4",
40
- "@babel/preset-env": "^7.28.3",
41
- "@eslint/js": "^9.37.0",
47
+ "@babel/core": "^7.28.5",
48
+ "@babel/preset-env": "^7.28.5",
49
+ "@eslint/js": "^9.38.0",
42
50
  "@inquirer/prompts": "^7.9.0",
43
- "@types/node": "^24.7.2",
51
+ "@types/node": "^24.9.1",
44
52
  "@types/semver": "^7.7.1",
45
53
  "@types/uuid": "^11.0.0",
46
54
  "babel-loader": "^10.0.0",
47
55
  "clean-jsdoc-theme": "^4.3.0",
48
56
  "core-js": "^3.46.0",
49
- "eslint": "^9.37.0",
57
+ "eslint": "^9.38.0",
50
58
  "eslint-plugin-jest": "^29.0.1",
51
- "eslint-plugin-jsdoc": "^61.1.4",
59
+ "eslint-plugin-jsdoc": "^61.1.7",
52
60
  "globals": "^16.4.0",
53
61
  "jest": "^30.2.0",
54
62
  "jest-environment-jsdom": "^30.2.0",
55
63
  "regenerator-runtime": "^0.14.1",
56
64
  "typescript": "^5.9.3",
57
- "typescript-eslint": "^8.46.1",
65
+ "typescript-eslint": "^8.46.2",
58
66
  "webpack": "^5.102.1",
59
67
  "webpack-bundle-analyzer": "^4.10.2",
60
68
  "webpack-cli": "^6.0.1"
package/src/Story.js CHANGED
@@ -7,7 +7,7 @@ import { encode } from 'html-entities';
7
7
  const creatorName = 'extwee';
8
8
 
9
9
  // Set the creator version.
10
- const creatorVersion = '2.3.5';
10
+ const creatorVersion = '2.3.6';
11
11
 
12
12
  /**
13
13
  * Story class.
@@ -0,0 +1,136 @@
1
+ /**
2
+ * @jest-environment node
3
+ */
4
+
5
+ /**
6
+ * Tests for package.json web exports
7
+ * These tests verify that users can import the web builds directly
8
+ */
9
+
10
+ import { describe, expect, it } from '@jest/globals';
11
+ import fs from 'node:fs';
12
+ import path from 'node:path';
13
+
14
+ describe('Web build exports', () => {
15
+ const buildDir = path.resolve(process.cwd(), 'build');
16
+
17
+ describe('Web build files exist', () => {
18
+ it('should have core web build file', () => {
19
+ const corePath = path.join(buildDir, 'extwee.core.min.js');
20
+ expect(fs.existsSync(corePath)).toBe(true);
21
+ });
22
+
23
+ it('should have twine1html web build file', () => {
24
+ const twine1Path = path.join(buildDir, 'extwee.twine1html.min.js');
25
+ expect(fs.existsSync(twine1Path)).toBe(true);
26
+ });
27
+
28
+ it('should have twine2archive web build file', () => {
29
+ const twine2ArchivePath = path.join(buildDir, 'extwee.twine2archive.min.js');
30
+ expect(fs.existsSync(twine2ArchivePath)).toBe(true);
31
+ });
32
+
33
+ it('should have tws web build file', () => {
34
+ const twsPath = path.join(buildDir, 'extwee.tws.min.js');
35
+ expect(fs.existsSync(twsPath)).toBe(true);
36
+ });
37
+ });
38
+
39
+ describe('Web build content validation', () => {
40
+ it('should have UMD wrapper in core build', () => {
41
+ const corePath = path.join(buildDir, 'extwee.core.min.js');
42
+ const content = fs.readFileSync(corePath, 'utf8');
43
+
44
+ // Should contain UMD pattern
45
+ expect(content).toMatch(/function.*webpackUniversalModuleDefinition|define.*function|module\.exports.*function/);
46
+
47
+ // Should be minified (no excessive whitespace)
48
+ expect(content.split('\n').length).toBeLessThan(10);
49
+ });
50
+
51
+ it('should have Extwee functionality in core build', () => {
52
+ const corePath = path.join(buildDir, 'extwee.core.min.js');
53
+ const content = fs.readFileSync(corePath, 'utf8');
54
+
55
+ // Should contain core Extwee functionality
56
+ expect(content).toMatch(/parseTwee|parseJSON|generateIFID|Story/);
57
+ });
58
+
59
+ it('should have appropriate size for minified builds', () => {
60
+ const corePath = path.join(buildDir, 'extwee.core.min.js');
61
+ const stats = fs.statSync(corePath);
62
+
63
+ // Core build should be substantial but not excessive (roughly 50-150KB)
64
+ expect(stats.size).toBeGreaterThan(50000); // > 50KB
65
+ expect(stats.size).toBeLessThan(150000); // < 150KB
66
+ });
67
+
68
+ it('should have smaller specialized builds', () => {
69
+ const corePath = path.join(buildDir, 'extwee.core.min.js');
70
+ const twine1Path = path.join(buildDir, 'extwee.twine1html.min.js');
71
+ const coreStats = fs.statSync(corePath);
72
+ const twine1Stats = fs.statSync(twine1Path);
73
+
74
+ // Specialized builds should be smaller than core
75
+ expect(twine1Stats.size).toBeLessThan(coreStats.size);
76
+ });
77
+ });
78
+
79
+ describe('Package.json exports configuration', () => {
80
+ it('should have exports field in package.json', () => {
81
+ const packagePath = path.resolve(process.cwd(), 'package.json');
82
+ const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8'));
83
+
84
+ expect(packageJson.exports).toBeDefined();
85
+ expect(typeof packageJson.exports).toBe('object');
86
+ });
87
+
88
+ it('should have correct web export paths', () => {
89
+ const packagePath = path.resolve(process.cwd(), 'package.json');
90
+ const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8'));
91
+
92
+ expect(packageJson.exports['.']).toBe('./index.js');
93
+ expect(packageJson.exports['./web']).toBe('./build/extwee.core.min.js');
94
+ expect(packageJson.exports['./web/core']).toBe('./build/extwee.core.min.js');
95
+ expect(packageJson.exports['./web/twine1html']).toBe('./build/extwee.twine1html.min.js');
96
+ expect(packageJson.exports['./web/twine2archive']).toBe('./build/extwee.twine2archive.min.js');
97
+ expect(packageJson.exports['./web/tws']).toBe('./build/extwee.tws.min.js');
98
+ });
99
+
100
+ it('should point to files that actually exist', () => {
101
+ const packagePath = path.resolve(process.cwd(), 'package.json');
102
+ const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8'));
103
+
104
+ // Check each web export path exists
105
+ const webExports = [
106
+ packageJson.exports['./web'],
107
+ packageJson.exports['./web/core'],
108
+ packageJson.exports['./web/twine1html'],
109
+ packageJson.exports['./web/twine2archive'],
110
+ packageJson.exports['./web/tws']
111
+ ];
112
+
113
+ for (const exportPath of webExports) {
114
+ const fullPath = path.resolve(process.cwd(), exportPath);
115
+ expect(fs.existsSync(fullPath)).toBe(true);
116
+ }
117
+ });
118
+ });
119
+
120
+ describe('Documentation for web exports', () => {
121
+ it('should provide clear usage examples', () => {
122
+ // This test documents how users can import the web builds
123
+ const usageExamples = {
124
+ 'import Extwee from "extwee/web"': 'Core web build with most functionality',
125
+ 'import Extwee from "extwee/web/core"': 'Same as above (explicit)',
126
+ 'import Extwee from "extwee/web/twine1html"': 'Twine 1 HTML parsing only',
127
+ 'import Extwee from "extwee/web/twine2archive"': 'Twine 2 Archive HTML parsing only',
128
+ 'import Extwee from "extwee/web/tws"': 'TWS (Twine 1 workspace) parsing only'
129
+ };
130
+
131
+ // Just verify we have documented the usage patterns
132
+ expect(Object.keys(usageExamples)).toHaveLength(5);
133
+ expect(usageExamples['import Extwee from "extwee/web"']).toContain('Core web build');
134
+ });
135
+ });
136
+ });
@@ -251,5 +251,5 @@ export class Story {
251
251
  #private;
252
252
  }
253
253
  export const creatorName: "extwee";
254
- export const creatorVersion: "2.3.5";
254
+ export const creatorVersion: "2.3.6";
255
255
  import Passage from './Passage.js';