Unverified Commit 4950fede authored by Timothy Jaeryang Baek's avatar Timothy Jaeryang Baek Committed by GitHub
Browse files

Merge pull request #2325 from open-webui/pyscript

feat: python code execution
parents 7db4baef 18a7634f
var oe=Object.create;var k=Object.defineProperty;var ae=Object.getOwnPropertyDescriptor;var se=Object.getOwnPropertyNames;var ce=Object.getPrototypeOf,le=Object.prototype.hasOwnProperty;var f=(t,e)=>k(t,"name",{value:e,configurable:!0}),E=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,c)=>(typeof require<"u"?require:e)[c]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+t+'" is not supported')});var T=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var de=(t,e,c,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of se(e))!le.call(t,a)&&a!==c&&k(t,a,{get:()=>e[a],enumerable:!(o=ae(e,a))||o.enumerable});return t};var fe=(t,e,c)=>(c=t!=null?oe(ce(t)):{},de(e||!t||!t.__esModule?k(c,"default",{value:t,enumerable:!0}):c,t));var $=T((R,U)=>{(function(t,e){"use strict";typeof define=="function"&&define.amd?define("stackframe",[],e):typeof R=="object"?U.exports=e():t.StackFrame=e()})(R,function(){"use strict";function t(d){return!isNaN(parseFloat(d))&&isFinite(d)}f(t,"_isNumber");function e(d){return d.charAt(0).toUpperCase()+d.substring(1)}f(e,"_capitalize");function c(d){return function(){return this[d]}}f(c,"_getter");var o=["isConstructor","isEval","isNative","isToplevel"],a=["columnNumber","lineNumber"],r=["fileName","functionName","source"],n=["args"],u=["evalOrigin"],i=o.concat(a,r,n,u);function s(d){if(d)for(var y=0;y<i.length;y++)d[i[y]]!==void 0&&this["set"+e(i[y])](d[i[y]])}f(s,"StackFrame"),s.prototype={getArgs:function(){return this.args},setArgs:function(d){if(Object.prototype.toString.call(d)!=="[object Array]")throw new TypeError("Args must be an Array");this.args=d},getEvalOrigin:function(){return this.evalOrigin},setEvalOrigin:function(d){if(d instanceof s)this.evalOrigin=d;else if(d instanceof Object)this.evalOrigin=new s(d);else throw new TypeError("Eval Origin must be an Object or StackFrame")},toString:function(){var d=this.getFileName()||"",y=this.getLineNumber()||"",h=this.getColumnNumber()||"",v=this.getFunctionName()||"";return this.getIsEval()?d?"[eval] ("+d+":"+y+":"+h+")":"[eval]:"+y+":"+h:v?v+" ("+d+":"+y+":"+h+")":d+":"+y+":"+h}},s.fromString=f(function(y){var h=y.indexOf("("),v=y.lastIndexOf(")"),ee=y.substring(0,h),te=y.substring(h+1,v).split(","),I=y.substring(v+1);if(I.indexOf("@")===0)var N=/@(.+?)(?::(\d+))?(?::(\d+))?$/.exec(I,""),re=N[1],ne=N[2],ie=N[3];return new s({functionName:ee,args:te||void 0,fileName:re,lineNumber:ne||void 0,columnNumber:ie||void 0})},"StackFrame$$fromString");for(var l=0;l<o.length;l++)s.prototype["get"+e(o[l])]=c(o[l]),s.prototype["set"+e(o[l])]=function(d){return function(y){this[d]=!!y}}(o[l]);for(var m=0;m<a.length;m++)s.prototype["get"+e(a[m])]=c(a[m]),s.prototype["set"+e(a[m])]=function(d){return function(y){if(!t(y))throw new TypeError(d+" must be a Number");this[d]=Number(y)}}(a[m]);for(var p=0;p<r.length;p++)s.prototype["get"+e(r[p])]=c(r[p]),s.prototype["set"+e(r[p])]=function(d){return function(y){this[d]=String(y)}}(r[p]);return s})});var C=T((x,M)=>{(function(t,e){"use strict";typeof define=="function"&&define.amd?define("error-stack-parser",["stackframe"],e):typeof x=="object"?M.exports=e($()):t.ErrorStackParser=e(t.StackFrame)})(x,f(function(e){"use strict";var c=/(^|@)\S+:\d+/,o=/^\s*at .*(\S+:\d+|\(native\))/m,a=/^(eval@)?(\[native code])?$/;return{parse:f(function(n){if(typeof n.stacktrace<"u"||typeof n["opera#sourceloc"]<"u")return this.parseOpera(n);if(n.stack&&n.stack.match(o))return this.parseV8OrIE(n);if(n.stack)return this.parseFFOrSafari(n);throw new Error("Cannot parse given Error object")},"ErrorStackParser$$parse"),extractLocation:f(function(n){if(n.indexOf(":")===-1)return[n];var u=/(.+?)(?::(\d+))?(?::(\d+))?$/,i=u.exec(n.replace(/[()]/g,""));return[i[1],i[2]||void 0,i[3]||void 0]},"ErrorStackParser$$extractLocation"),parseV8OrIE:f(function(n){var u=n.stack.split(`
`).filter(function(i){return!!i.match(o)},this);return u.map(function(i){i.indexOf("(eval ")>-1&&(i=i.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(,.*$)/g,""));var s=i.replace(/^\s+/,"").replace(/\(eval code/g,"(").replace(/^.*?\s+/,""),l=s.match(/ (\(.+\)$)/);s=l?s.replace(l[0],""):s;var m=this.extractLocation(l?l[1]:s),p=l&&s||void 0,d=["eval","<anonymous>"].indexOf(m[0])>-1?void 0:m[0];return new e({functionName:p,fileName:d,lineNumber:m[1],columnNumber:m[2],source:i})},this)},"ErrorStackParser$$parseV8OrIE"),parseFFOrSafari:f(function(n){var u=n.stack.split(`
`).filter(function(i){return!i.match(a)},this);return u.map(function(i){if(i.indexOf(" > eval")>-1&&(i=i.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),i.indexOf("@")===-1&&i.indexOf(":")===-1)return new e({functionName:i});var s=/((.*".+"[^@]*)?[^@]*)(?:@)/,l=i.match(s),m=l&&l[1]?l[1]:void 0,p=this.extractLocation(i.replace(s,""));return new e({functionName:m,fileName:p[0],lineNumber:p[1],columnNumber:p[2],source:i})},this)},"ErrorStackParser$$parseFFOrSafari"),parseOpera:f(function(n){return!n.stacktrace||n.message.indexOf(`
`)>-1&&n.message.split(`
`).length>n.stacktrace.split(`
`).length?this.parseOpera9(n):n.stack?this.parseOpera11(n):this.parseOpera10(n)},"ErrorStackParser$$parseOpera"),parseOpera9:f(function(n){for(var u=/Line (\d+).*script (?:in )?(\S+)/i,i=n.message.split(`
`),s=[],l=2,m=i.length;l<m;l+=2){var p=u.exec(i[l]);p&&s.push(new e({fileName:p[2],lineNumber:p[1],source:i[l]}))}return s},"ErrorStackParser$$parseOpera9"),parseOpera10:f(function(n){for(var u=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,i=n.stacktrace.split(`
`),s=[],l=0,m=i.length;l<m;l+=2){var p=u.exec(i[l]);p&&s.push(new e({functionName:p[3]||void 0,fileName:p[2],lineNumber:p[1],source:i[l]}))}return s},"ErrorStackParser$$parseOpera10"),parseOpera11:f(function(n){var u=n.stack.split(`
`).filter(function(i){return!!i.match(c)&&!i.match(/^Error created at/)},this);return u.map(function(i){var s=i.split("@"),l=this.extractLocation(s.pop()),m=s.shift()||"",p=m.replace(/<anonymous function(: (\w+))?>/,"$2").replace(/\([^)]*\)/g,"")||void 0,d;m.match(/\(([^)]*)\)/)&&(d=m.replace(/^[^(]+\(([^)]*)\)$/,"$1"));var y=d===void 0||d==="[arguments not available]"?void 0:d.split(",");return new e({functionName:p,args:y,fileName:l[0],lineNumber:l[1],columnNumber:l[2],source:i})},this)},"ErrorStackParser$$parseOpera11")}},"ErrorStackParser"))});var z=fe(C());var g=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&typeof process.browser>"u",F=g&&typeof module<"u"&&typeof module.exports<"u"&&typeof E<"u"&&typeof __dirname<"u",j=g&&!F,ue=typeof Deno<"u",B=!g&&!ue,W=B&&typeof window<"u"&&typeof document<"u"&&typeof document.createElement<"u"&&typeof sessionStorage<"u",H=B&&typeof importScripts<"u"&&typeof self<"u";var q,_,P,V,L,pe=`"fetch" is not defined, maybe you're using node < 18? From Pyodide >= 0.25.0, node >= 18 is required. Older versions of Node.js may work, but it is not guaranteed or supported. Falling back to "node-fetch".`;async function D(){if(!g||(q=(await import("url")).default,L=await import("fs/promises"),globalThis.fetch?_=fetch:(console.warn(pe),_=(await import("node-fetch")).default),V=(await import("vm")).default,P=await import("path"),A=P.sep,typeof E<"u"))return;let t=await import("fs"),e=await import("crypto"),c=await import("ws"),o=await import("child_process"),a={fs:t,crypto:e,ws:c,child_process:o};globalThis.require=function(r){return a[r]}}f(D,"initNodeModules");function me(t,e){return P.resolve(e||".",t)}f(me,"node_resolvePath");function ye(t,e){return e===void 0&&(e=location),new URL(t,e).toString()}f(ye,"browser_resolvePath");var S;g?S=me:S=ye;var A;g||(A="/");function ge(t,e){return t.startsWith("file://")&&(t=t.slice(7)),t.includes("://")?{response:_(t)}:{binary:L.readFile(t).then(c=>new Uint8Array(c.buffer,c.byteOffset,c.byteLength))}}f(ge,"node_getBinaryResponse");function he(t,e){let c=new URL(t,location);return{response:fetch(c,e?{integrity:e}:{})}}f(he,"browser_getBinaryResponse");var b;g?b=ge:b=he;async function G(t,e){let{response:c,binary:o}=b(t,e);if(o)return o;let a=await c;if(!a.ok)throw new Error(`Failed to load '${t}': request failed.`);return new Uint8Array(await a.arrayBuffer())}f(G,"loadBinaryFile");var w;if(W)w=f(async t=>await import(t),"loadScript");else if(H)w=f(async t=>{try{globalThis.importScripts(t)}catch(e){if(e instanceof TypeError)await import(t);else throw e}},"loadScript");else if(g)w=ve;else throw new Error("Cannot determine runtime environment");async function ve(t){t.startsWith("file://")&&(t=t.slice(7)),t.includes("://")?V.runInThisContext(await(await _(t)).text()):await import(q.pathToFileURL(t).href)}f(ve,"nodeLoadScript");async function K(t){if(g){await D();let e=await L.readFile(t);return JSON.parse(e)}else return await(await fetch(t)).json()}f(K,"loadLockFile");async function X(){if(F)return __dirname;let t;try{throw new Error}catch(o){t=o}let e=z.default.parse(t)[0].fileName;if(j){let o=await import("path");return(await import("url")).fileURLToPath(o.dirname(e))}let c=e.lastIndexOf(A);if(c===-1)throw new Error("Could not extract indexURL path from pyodide module location");return e.slice(0,c)}f(X,"calculateDirname");function J(t){let e=t.FS,c=t.FS.filesystems.MEMFS,o=t.PATH,a={DIR_MODE:16895,FILE_MODE:33279,mount:function(r){if(!r.opts.fileSystemHandle)throw new Error("opts.fileSystemHandle is required");return c.mount.apply(null,arguments)},syncfs:async(r,n,u)=>{try{let i=a.getLocalSet(r),s=await a.getRemoteSet(r),l=n?s:i,m=n?i:s;await a.reconcile(r,l,m),u(null)}catch(i){u(i)}},getLocalSet:r=>{let n=Object.create(null);function u(l){return l!=="."&&l!==".."}f(u,"isRealDir");function i(l){return m=>o.join2(l,m)}f(i,"toAbsolute");let s=e.readdir(r.mountpoint).filter(u).map(i(r.mountpoint));for(;s.length;){let l=s.pop(),m=e.stat(l);e.isDir(m.mode)&&s.push.apply(s,e.readdir(l).filter(u).map(i(l))),n[l]={timestamp:m.mtime,mode:m.mode}}return{type:"local",entries:n}},getRemoteSet:async r=>{let n=Object.create(null),u=await we(r.opts.fileSystemHandle);for(let[i,s]of u)i!=="."&&(n[o.join2(r.mountpoint,i)]={timestamp:s.kind==="file"?(await s.getFile()).lastModifiedDate:new Date,mode:s.kind==="file"?a.FILE_MODE:a.DIR_MODE});return{type:"remote",entries:n,handles:u}},loadLocalEntry:r=>{let u=e.lookupPath(r).node,i=e.stat(r);if(e.isDir(i.mode))return{timestamp:i.mtime,mode:i.mode};if(e.isFile(i.mode))return u.contents=c.getFileDataAsTypedArray(u),{timestamp:i.mtime,mode:i.mode,contents:u.contents};throw new Error("node type not supported")},storeLocalEntry:(r,n)=>{if(e.isDir(n.mode))e.mkdirTree(r,n.mode);else if(e.isFile(n.mode))e.writeFile(r,n.contents,{canOwn:!0});else throw new Error("node type not supported");e.chmod(r,n.mode),e.utime(r,n.timestamp,n.timestamp)},removeLocalEntry:r=>{var n=e.stat(r);e.isDir(n.mode)?e.rmdir(r):e.isFile(n.mode)&&e.unlink(r)},loadRemoteEntry:async r=>{if(r.kind==="file"){let n=await r.getFile();return{contents:new Uint8Array(await n.arrayBuffer()),mode:a.FILE_MODE,timestamp:n.lastModifiedDate}}else{if(r.kind==="directory")return{mode:a.DIR_MODE,timestamp:new Date};throw new Error("unknown kind: "+r.kind)}},storeRemoteEntry:async(r,n,u)=>{let i=r.get(o.dirname(n)),s=e.isFile(u.mode)?await i.getFileHandle(o.basename(n),{create:!0}):await i.getDirectoryHandle(o.basename(n),{create:!0});if(s.kind==="file"){let l=await s.createWritable();await l.write(u.contents),await l.close()}r.set(n,s)},removeRemoteEntry:async(r,n)=>{await r.get(o.dirname(n)).removeEntry(o.basename(n)),r.delete(n)},reconcile:async(r,n,u)=>{let i=0,s=[];Object.keys(n.entries).forEach(function(p){let d=n.entries[p],y=u.entries[p];(!y||e.isFile(d.mode)&&d.timestamp.getTime()>y.timestamp.getTime())&&(s.push(p),i++)}),s.sort();let l=[];if(Object.keys(u.entries).forEach(function(p){n.entries[p]||(l.push(p),i++)}),l.sort().reverse(),!i)return;let m=n.type==="remote"?n.handles:u.handles;for(let p of s){let d=o.normalize(p.replace(r.mountpoint,"/")).substring(1);if(u.type==="local"){let y=m.get(d),h=await a.loadRemoteEntry(y);a.storeLocalEntry(p,h)}else{let y=a.loadLocalEntry(p);await a.storeRemoteEntry(m,d,y)}}for(let p of l)if(u.type==="local")a.removeLocalEntry(p);else{let d=o.normalize(p.replace(r.mountpoint,"/")).substring(1);await a.removeRemoteEntry(m,d)}}};t.FS.filesystems.NATIVEFS_ASYNC=a}f(J,"initializeNativeFS");var we=f(async t=>{let e=[];async function c(a){for await(let r of a.values())e.push(r),r.kind==="directory"&&await c(r)}f(c,"collect"),await c(t);let o=new Map;o.set(".",t);for(let a of e){let r=(await t.resolve(a)).join("/");o.set(r,a)}return o},"getFsHandles");function Y(){let t={};return t.noImageDecoding=!0,t.noAudioDecoding=!0,t.noWasmDecoding=!1,t.preRun=[],t.quit=(e,c)=>{throw t.exited={status:e,toThrow:c},c},t}f(Y,"createModule");function be(t,e){t.preRun.push(function(){let c="/";try{t.FS.mkdirTree(e)}catch(o){console.error(`Error occurred while making a home directory '${e}':`),console.error(o),console.error(`Using '${c}' for a home directory instead`),e=c}t.FS.chdir(e)})}f(be,"createHomeDirectory");function Ee(t,e){t.preRun.push(function(){Object.assign(t.ENV,e)})}f(Ee,"setEnvironment");function _e(t,e){t.preRun.push(()=>{for(let c of e)t.FS.mkdirTree(c),t.FS.mount(t.FS.filesystems.NODEFS,{root:c},c)})}f(_e,"mountLocalDirectories");function Se(t,e){let c=G(e);t.preRun.push(()=>{let o=t._py_version_major(),a=t._py_version_minor();t.FS.mkdirTree("/lib"),t.FS.mkdirTree(`/lib/python${o}.${a}/site-packages`),t.addRunDependency("install-stdlib"),c.then(r=>{t.FS.writeFile(`/lib/python${o}${a}.zip`,r)}).catch(r=>{console.error("Error occurred while installing the standard library:"),console.error(r)}).finally(()=>{t.removeRunDependency("install-stdlib")})})}f(Se,"installStdlib");function Q(t,e){let c;e.stdLibURL!=null?c=e.stdLibURL:c=e.indexURL+"python_stdlib.zip",Se(t,c),be(t,e.env.HOME),Ee(t,e.env),_e(t,e._node_mounts),t.preRun.push(()=>J(t))}f(Q,"initializeFileSystem");function Z(t,e){let{binary:c,response:o}=b(e+"pyodide.asm.wasm");t.instantiateWasm=function(a,r){return async function(){try{let n;o?n=await WebAssembly.instantiateStreaming(o,a):n=await WebAssembly.instantiate(await c,a);let{instance:u,module:i}=n;typeof WasmOffsetConverter<"u"&&(wasmOffsetConverter=new WasmOffsetConverter(wasmBinary,i)),r(u,i)}catch(n){console.warn("wasm instantiation failed!"),console.warn(n)}}(),{}}}f(Z,"preloadWasm");var O="0.25.1";async function We(t={}){await D();let e=t.indexURL||await X();e=S(e),e.endsWith("/")||(e+="/"),t.indexURL=e;let c={fullStdLib:!1,jsglobals:globalThis,stdin:globalThis.prompt?globalThis.prompt:void 0,lockFileURL:e+"pyodide-lock.json",args:[],_node_mounts:[],env:{},packageCacheDir:e,packages:[]},o=Object.assign(c,t);o.env.HOME||(o.env.HOME="/home/pyodide");let a=Y();a.print=o.stdout,a.printErr=o.stderr,a.arguments=o.args;let r={config:o};a.API=r,r.lockFilePromise=K(o.lockFileURL),Z(a,e),Q(a,o);let n=new Promise(s=>a.postRun=s);if(a.locateFile=s=>o.indexURL+s,typeof _createPyodideModule!="function"){let s=`${o.indexURL}pyodide.asm.js`;await w(s)}if(await _createPyodideModule(a),await n,a.exited)throw a.exited.toThrow;if(t.pyproxyToStringRepr&&r.setPyProxyToStringMethod(!0),r.version!==O)throw new Error(`Pyodide version does not match: '${O}' <==> '${r.version}'. If you updated the Pyodide version, make sure you also updated the 'indexURL' parameter passed to loadPyodide.`);a.locateFile=s=>{throw new Error("Didn't expect to load any more file_packager files!")};let u=r.finalizeBootstrap();if(u.version.includes("dev")||r.setCdnUrl(`https://cdn.jsdelivr.net/pyodide/v${u.version}/full/`),await r.packageIndexReady,r._pyodide._importhook.register_module_not_found_hook(r._import_name_to_package_name,r.lockfile_unvendored_stdlibs_and_test),r.lockfile_info.version!==O)throw new Error("Lock file version doesn't match Pyodide version");return r.package_loader.init_loaded_packages(),o.fullStdLib&&await u.loadPackage(r.lockfile_unvendored_stdlibs),r.initializeStreams(o.stdin,o.stdout,o.stderr),u}f(We,"loadPyodide");export{We as loadPyodide,O as version};
//# sourceMappingURL=pyodide.mjs.map
{
"version": 3,
"sources": ["../src/js/node_modules/stackframe/stackframe.js", "../src/js/node_modules/error-stack-parser/error-stack-parser.js", "../src/js/compat.ts", "../src/js/environments.ts", "../src/js/nativefs.ts", "../src/js/module.ts", "../src/js/version.ts", "../src/js/pyodide.ts"],
"sourcesContent": ["(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function() {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.substring(1);\n }\n\n function _getter(p) {\n return function() {\n return this[p];\n };\n }\n\n var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel'];\n var numericProps = ['columnNumber', 'lineNumber'];\n var stringProps = ['fileName', 'functionName', 'source'];\n var arrayProps = ['args'];\n var objectProps = ['evalOrigin'];\n\n var props = booleanProps.concat(numericProps, stringProps, arrayProps, objectProps);\n\n function StackFrame(obj) {\n if (!obj) return;\n for (var i = 0; i < props.length; i++) {\n if (obj[props[i]] !== undefined) {\n this['set' + _capitalize(props[i])](obj[props[i]]);\n }\n }\n }\n\n StackFrame.prototype = {\n getArgs: function() {\n return this.args;\n },\n setArgs: function(v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n getEvalOrigin: function() {\n return this.evalOrigin;\n },\n setEvalOrigin: function(v) {\n if (v instanceof StackFrame) {\n this.evalOrigin = v;\n } else if (v instanceof Object) {\n this.evalOrigin = new StackFrame(v);\n } else {\n throw new TypeError('Eval Origin must be an Object or StackFrame');\n }\n },\n\n toString: function() {\n var fileName = this.getFileName() || '';\n var lineNumber = this.getLineNumber() || '';\n var columnNumber = this.getColumnNumber() || '';\n var functionName = this.getFunctionName() || '';\n if (this.getIsEval()) {\n if (fileName) {\n return '[eval] (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n }\n return '[eval]:' + lineNumber + ':' + columnNumber;\n }\n if (functionName) {\n return functionName + ' (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n }\n return fileName + ':' + lineNumber + ':' + columnNumber;\n }\n };\n\n StackFrame.fromString = function StackFrame$$fromString(str) {\n var argsStartIndex = str.indexOf('(');\n var argsEndIndex = str.lastIndexOf(')');\n\n var functionName = str.substring(0, argsStartIndex);\n var args = str.substring(argsStartIndex + 1, argsEndIndex).split(',');\n var locationString = str.substring(argsEndIndex + 1);\n\n if (locationString.indexOf('@') === 0) {\n var parts = /@(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(locationString, '');\n var fileName = parts[1];\n var lineNumber = parts[2];\n var columnNumber = parts[3];\n }\n\n return new StackFrame({\n functionName: functionName,\n args: args || undefined,\n fileName: fileName,\n lineNumber: lineNumber || undefined,\n columnNumber: columnNumber || undefined\n });\n };\n\n for (var i = 0; i < booleanProps.length; i++) {\n StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]);\n StackFrame.prototype['set' + _capitalize(booleanProps[i])] = (function(p) {\n return function(v) {\n this[p] = Boolean(v);\n };\n })(booleanProps[i]);\n }\n\n for (var j = 0; j < numericProps.length; j++) {\n StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]);\n StackFrame.prototype['set' + _capitalize(numericProps[j])] = (function(p) {\n return function(v) {\n if (!_isNumber(v)) {\n throw new TypeError(p + ' must be a Number');\n }\n this[p] = Number(v);\n };\n })(numericProps[j]);\n }\n\n for (var k = 0; k < stringProps.length; k++) {\n StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]);\n StackFrame.prototype['set' + _capitalize(stringProps[k])] = (function(p) {\n return function(v) {\n this[p] = String(v);\n };\n })(stringProps[k]);\n }\n\n return StackFrame;\n}));\n", "(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code])?$/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?::(\\d+))?(?::(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[()]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return filtered.map(function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^()]*)|(,.*$)/g, '');\n }\n var sanitizedLine = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').replace(/^.*?\\s+/, '');\n\n // capture and preseve the parenthesized location \"(/foo/my bar.js:12:87)\" in\n // case it has spaces in it, as the string is split on \\s+ later on\n var location = sanitizedLine.match(/ (\\(.+\\)$)/);\n\n // remove the parenthesized location from the line, if it was matched\n sanitizedLine = location ? sanitizedLine.replace(location[0], '') : sanitizedLine;\n\n // if a location was matched, pass it to extractLocation() otherwise pass all sanitizedLine\n // because this line doesn't have function name\n var locationParts = this.extractLocation(location ? location[1] : sanitizedLine);\n var functionName = location && sanitizedLine || undefined;\n var fileName = ['eval', '<anonymous>'].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame({\n functionName: functionName,\n fileName: fileName,\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return filtered.map(function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame({\n functionName: line\n });\n } else {\n var functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n var matches = line.match(functionNameRegex);\n var functionName = matches && matches[1] ? matches[1] : undefined;\n var locationParts = this.extractLocation(line.replace(functionNameRegex, ''));\n\n return new StackFrame({\n functionName: functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame({\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n }));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame({\n functionName: match[3] || undefined,\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n })\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return filtered.map(function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(/<anonymous function(: (\\w+))?>/, '$2')\n .replace(/\\([^)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^(]+\\(([^)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n\n return new StackFrame({\n functionName: functionName,\n args: args,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n }\n };\n}));\n", "import ErrorStackParser from \"error-stack-parser\";\nimport {\n IN_NODE,\n IN_NODE_ESM,\n IN_BROWSER_MAIN_THREAD,\n IN_BROWSER_WEB_WORKER,\n IN_NODE_COMMONJS,\n} from \"./environments\";\n\nlet nodeUrlMod: any;\nlet nodeFetch: any;\nlet nodePath: any;\nlet nodeVmMod: any;\n/** @private */\nexport let nodeFsPromisesMod: any;\n\ndeclare var globalThis: {\n importScripts: (url: string) => void;\n document?: any;\n fetch?: any;\n};\n\nconst FETCH_NOT_FOUND_MSG = `\\\n\"fetch\" is not defined, maybe you're using node < 18? \\\nFrom Pyodide >= 0.25.0, node >= 18 is required. \\\nOlder versions of Node.js may work, but it is not guaranteed or supported. \\\nFalling back to \"node-fetch\".\\\n`;\n\n/**\n * If we're in node, it's most convenient to import various node modules on\n * initialization. Otherwise, this does nothing.\n * @private\n */\nexport async function initNodeModules() {\n if (!IN_NODE) {\n return;\n }\n // @ts-ignore\n nodeUrlMod = (await import(\"url\")).default;\n nodeFsPromisesMod = await import(\"fs/promises\");\n if (globalThis.fetch) {\n nodeFetch = fetch;\n } else {\n // @ts-ignore\n console.warn(FETCH_NOT_FOUND_MSG);\n // @ts-ignore\n nodeFetch = (await import(\"node-fetch\")).default;\n }\n // @ts-ignore\n nodeVmMod = (await import(\"vm\")).default;\n nodePath = await import(\"path\");\n pathSep = nodePath.sep;\n\n // Emscripten uses `require`, so if it's missing (because we were imported as\n // an ES6 module) we need to polyfill `require` with `import`. `import` is\n // async and `require` is synchronous, so we import all packages that might be\n // required up front and define require to look them up in this table.\n\n if (typeof require !== \"undefined\") {\n return;\n }\n // These are all the packages required in pyodide.asm.js. You can get this\n // list with:\n // $ grep -o 'require(\"[a-z]*\")' pyodide.asm.js | sort -u\n const fs = await import(\"fs\");\n const crypto = await import(\"crypto\");\n const ws = await import(\"ws\");\n const child_process = await import(\"child_process\");\n const node_modules: { [mode: string]: any } = {\n fs,\n crypto,\n ws,\n child_process,\n };\n // Since we're in an ES6 module, this is only modifying the module namespace,\n // it's still private to Pyodide.\n (globalThis as any).require = function (mod: string): any {\n return node_modules[mod];\n };\n}\n\nfunction node_resolvePath(path: string, base?: string): string {\n return nodePath.resolve(base || \".\", path);\n}\n\nfunction browser_resolvePath(path: string, base?: string): string {\n if (base === undefined) {\n // @ts-ignore\n base = location;\n }\n return new URL(path, base).toString();\n}\n\nexport let resolvePath: (rest: string, base?: string) => string;\nif (IN_NODE) {\n resolvePath = node_resolvePath;\n} else {\n resolvePath = browser_resolvePath;\n}\n\n/**\n * Get the path separator. If we are on Linux or in the browser, it's /.\n * In Windows, it's \\.\n * @private\n */\nexport let pathSep: string;\n\nif (!IN_NODE) {\n pathSep = \"/\";\n}\n\n/**\n * Load a binary file, only for use in Node. If the path explicitly is a URL,\n * then fetch from a URL, else load from the file system.\n * @param indexURL base path to resolve relative paths\n * @param path the path to load\n * @param checksum sha-256 checksum of the package\n * @returns An ArrayBuffer containing the binary data\n * @private\n */\nfunction node_getBinaryResponse(\n path: string,\n _file_sub_resource_hash?: string | undefined, // Ignoring sub resource hash. See issue-2431.\n):\n | { response: Promise<Response>; binary?: undefined }\n | { binary: Promise<Uint8Array> } {\n if (path.startsWith(\"file://\")) {\n // handle file:// with filesystem operations rather than with fetch.\n path = path.slice(\"file://\".length);\n }\n if (path.includes(\"://\")) {\n // If it has a protocol, make a fetch request\n return { response: nodeFetch(path) };\n } else {\n // Otherwise get it from the file system\n return {\n binary: nodeFsPromisesMod\n .readFile(path)\n .then(\n (data: Buffer) =>\n new Uint8Array(data.buffer, data.byteOffset, data.byteLength),\n ),\n };\n }\n}\n\n/**\n * Load a binary file, only for use in browser. Resolves relative paths against\n * indexURL.\n *\n * @param path the path to load\n * @param subResourceHash the sub resource hash for fetch() integrity check\n * @returns A Uint8Array containing the binary data\n * @private\n */\nfunction browser_getBinaryResponse(\n path: string,\n subResourceHash: string | undefined,\n): { response: Promise<Response>; binary?: undefined } {\n const url = new URL(path, location as unknown as URL);\n let options = subResourceHash ? { integrity: subResourceHash } : {};\n return { response: fetch(url, options) };\n}\n\n/** @private */\nexport let getBinaryResponse: (\n path: string,\n file_sub_resource_hash?: string | undefined,\n) =>\n | { response: Promise<Response>; binary?: undefined }\n | { response?: undefined; binary: Promise<Uint8Array> };\nif (IN_NODE) {\n getBinaryResponse = node_getBinaryResponse;\n} else {\n getBinaryResponse = browser_getBinaryResponse;\n}\n\nexport async function loadBinaryFile(\n path: string,\n file_sub_resource_hash?: string | undefined,\n): Promise<Uint8Array> {\n const { response, binary } = getBinaryResponse(path, file_sub_resource_hash);\n if (binary) {\n return binary;\n }\n const r = await response;\n if (!r.ok) {\n throw new Error(`Failed to load '${path}': request failed.`);\n }\n return new Uint8Array(await r.arrayBuffer());\n}\n\n/**\n * Currently loadScript is only used once to load `pyodide.asm.js`.\n * @param url\n * @async\n * @private\n */\nexport let loadScript: (url: string) => Promise<void>;\n\nif (IN_BROWSER_MAIN_THREAD) {\n // browser\n loadScript = async (url) => await import(/* webpackIgnore: true */ url);\n} else if (IN_BROWSER_WEB_WORKER) {\n // webworker\n loadScript = async (url) => {\n try {\n // use importScripts in classic web worker\n globalThis.importScripts(url);\n } catch (e) {\n // importScripts throws TypeError in a module type web worker, use import instead\n if (e instanceof TypeError) {\n await import(/* webpackIgnore: true */ url);\n } else {\n throw e;\n }\n }\n };\n} else if (IN_NODE) {\n loadScript = nodeLoadScript;\n} else {\n throw new Error(\"Cannot determine runtime environment\");\n}\n\n/**\n * Load a text file and executes it as Javascript\n * @param url The path to load. May be a url or a relative file system path.\n * @private\n */\nasync function nodeLoadScript(url: string) {\n if (url.startsWith(\"file://\")) {\n // handle file:// with filesystem operations rather than with fetch.\n url = url.slice(\"file://\".length);\n }\n if (url.includes(\"://\")) {\n // If it's a url, load it with fetch then eval it.\n nodeVmMod.runInThisContext(await (await nodeFetch(url)).text());\n } else {\n // Otherwise, hopefully it is a relative path we can load from the file\n // system.\n await import(/* webpackIgnore: true */ nodeUrlMod.pathToFileURL(url).href);\n }\n}\n\n// consider dropping this this once we drop support for node 14?\nfunction nodeBase16ToBase64(b16: string): string {\n return Buffer.from(b16, \"hex\").toString(\"base64\");\n}\n\nfunction browserBase16ToBase64(b16: string): string {\n return btoa(\n b16\n .match(/\\w{2}/g)!\n .map(function (a) {\n return String.fromCharCode(parseInt(a, 16));\n })\n .join(\"\"),\n );\n}\n\nexport const base16ToBase64 = IN_NODE\n ? nodeBase16ToBase64\n : browserBase16ToBase64;\n\nexport async function loadLockFile(lockFileURL: string): Promise<any> {\n if (IN_NODE) {\n await initNodeModules();\n const package_string = await nodeFsPromisesMod.readFile(lockFileURL);\n return JSON.parse(package_string);\n } else {\n let response = await fetch(lockFileURL);\n return await response.json();\n }\n}\n\n/**\n * Calculate the directory name of the current module.\n * This is used to guess the indexURL when it is not provided.\n */\nexport async function calculateDirname(): Promise<string> {\n if (IN_NODE_COMMONJS) {\n return __dirname;\n }\n\n let err: Error;\n try {\n throw new Error();\n } catch (e) {\n err = e as Error;\n }\n let fileName = ErrorStackParser.parse(err)[0].fileName!;\n\n if (IN_NODE_ESM) {\n const nodePath = await import(\"path\");\n const nodeUrl = await import(\"url\");\n\n // FIXME: We would like to use import.meta.url here,\n // but mocha seems to mess with compiling typescript files to ES6.\n return nodeUrl.fileURLToPath(nodePath.dirname(fileName));\n }\n\n const indexOfLastSlash = fileName.lastIndexOf(pathSep);\n if (indexOfLastSlash === -1) {\n throw new Error(\n \"Could not extract indexURL path from pyodide module location\",\n );\n }\n return fileName.slice(0, indexOfLastSlash);\n}\n", "// @ts-nocheck\n\n/** @private */\nexport const IN_NODE =\n typeof process === \"object\" &&\n typeof process.versions === \"object\" &&\n typeof process.versions.node === \"string\" &&\n typeof process.browser ===\n \"undefined\"; /* This last condition checks if we run the browser shim of process */\n\n/** @private */\nexport const IN_NODE_COMMONJS =\n IN_NODE &&\n typeof module !== \"undefined\" &&\n typeof module.exports !== \"undefined\" &&\n typeof require !== \"undefined\" &&\n typeof __dirname !== \"undefined\";\n\n/** @private */\nexport const IN_NODE_ESM = IN_NODE && !IN_NODE_COMMONJS;\n\n/** @private */\nexport const IN_DENO = typeof Deno !== \"undefined\"; // just in case...\n\n/** @private */\nexport const IN_BROWSER = !IN_NODE && !IN_DENO;\n\n/** @private */\nexport const IN_BROWSER_MAIN_THREAD =\n IN_BROWSER &&\n typeof window !== \"undefined\" &&\n typeof document !== \"undefined\" &&\n typeof document.createElement !== \"undefined\" &&\n typeof sessionStorage !== \"undefined\";\n\n/** @private */\nexport const IN_BROWSER_WEB_WORKER =\n IN_BROWSER &&\n typeof importScripts !== \"undefined\" &&\n typeof self !== \"undefined\";\n", "import { Module } from \"./types\";\n\n/**\n * @private\n */\nexport function initializeNativeFS(module: Module) {\n const FS = module.FS;\n const MEMFS = module.FS.filesystems.MEMFS;\n const PATH = module.PATH;\n\n const nativeFSAsync = {\n // DIR_MODE: {{{ cDefine('S_IFDIR') }}} | 511 /* 0777 */,\n // FILE_MODE: {{{ cDefine('S_IFREG') }}} | 511 /* 0777 */,\n DIR_MODE: 16384 | 511,\n FILE_MODE: 32768 | 511,\n mount: function (mount: any) {\n if (!mount.opts.fileSystemHandle) {\n throw new Error(\"opts.fileSystemHandle is required\");\n }\n\n // reuse all of the core MEMFS functionality\n return MEMFS.mount.apply(null, arguments);\n },\n syncfs: async (mount: any, populate: Boolean, callback: Function) => {\n try {\n const local = nativeFSAsync.getLocalSet(mount);\n const remote = await nativeFSAsync.getRemoteSet(mount);\n const src = populate ? remote : local;\n const dst = populate ? local : remote;\n await nativeFSAsync.reconcile(mount, src, dst);\n callback(null);\n } catch (e) {\n callback(e);\n }\n },\n // Returns file set of emscripten's filesystem at the mountpoint.\n getLocalSet: (mount: any) => {\n let entries = Object.create(null);\n\n function isRealDir(p: string) {\n return p !== \".\" && p !== \"..\";\n }\n\n function toAbsolute(root: string) {\n return (p: string) => {\n return PATH.join2(root, p);\n };\n }\n\n let check = FS.readdir(mount.mountpoint)\n .filter(isRealDir)\n .map(toAbsolute(mount.mountpoint));\n\n while (check.length) {\n let path = check.pop();\n let stat = FS.stat(path);\n\n if (FS.isDir(stat.mode)) {\n check.push.apply(\n check,\n FS.readdir(path).filter(isRealDir).map(toAbsolute(path)),\n );\n }\n\n entries[path] = { timestamp: stat.mtime, mode: stat.mode };\n }\n\n return { type: \"local\", entries: entries };\n },\n // Returns file set of the real, on-disk filesystem at the mountpoint.\n getRemoteSet: async (mount: any) => {\n // TODO: this should be a map.\n const entries = Object.create(null);\n\n const handles = await getFsHandles(mount.opts.fileSystemHandle);\n for (const [path, handle] of handles) {\n if (path === \".\") continue;\n\n entries[PATH.join2(mount.mountpoint, path)] = {\n timestamp:\n handle.kind === \"file\"\n ? (await handle.getFile()).lastModifiedDate\n : new Date(),\n mode:\n handle.kind === \"file\"\n ? nativeFSAsync.FILE_MODE\n : nativeFSAsync.DIR_MODE,\n };\n }\n\n return { type: \"remote\", entries, handles };\n },\n loadLocalEntry: (path: string) => {\n const lookup = FS.lookupPath(path);\n const node = lookup.node;\n const stat = FS.stat(path);\n\n if (FS.isDir(stat.mode)) {\n return { timestamp: stat.mtime, mode: stat.mode };\n } else if (FS.isFile(stat.mode)) {\n node.contents = MEMFS.getFileDataAsTypedArray(node);\n return {\n timestamp: stat.mtime,\n mode: stat.mode,\n contents: node.contents,\n };\n } else {\n throw new Error(\"node type not supported\");\n }\n },\n storeLocalEntry: (path: string, entry: any) => {\n if (FS.isDir(entry[\"mode\"])) {\n FS.mkdirTree(path, entry[\"mode\"]);\n } else if (FS.isFile(entry[\"mode\"])) {\n FS.writeFile(path, entry[\"contents\"], { canOwn: true });\n } else {\n throw new Error(\"node type not supported\");\n }\n\n FS.chmod(path, entry[\"mode\"]);\n FS.utime(path, entry[\"timestamp\"], entry[\"timestamp\"]);\n },\n removeLocalEntry: (path: string) => {\n var stat = FS.stat(path);\n\n if (FS.isDir(stat.mode)) {\n FS.rmdir(path);\n } else if (FS.isFile(stat.mode)) {\n FS.unlink(path);\n }\n },\n loadRemoteEntry: async (handle: any) => {\n if (handle.kind === \"file\") {\n const file = await handle.getFile();\n return {\n contents: new Uint8Array(await file.arrayBuffer()),\n mode: nativeFSAsync.FILE_MODE,\n timestamp: file.lastModifiedDate,\n };\n } else if (handle.kind === \"directory\") {\n return {\n mode: nativeFSAsync.DIR_MODE,\n timestamp: new Date(),\n };\n } else {\n throw new Error(\"unknown kind: \" + handle.kind);\n }\n },\n storeRemoteEntry: async (handles: any, path: string, entry: any) => {\n const parentDirHandle = handles.get(PATH.dirname(path));\n const handle = FS.isFile(entry.mode)\n ? await parentDirHandle.getFileHandle(PATH.basename(path), {\n create: true,\n })\n : await parentDirHandle.getDirectoryHandle(PATH.basename(path), {\n create: true,\n });\n if (handle.kind === \"file\") {\n const writable = await handle.createWritable();\n await writable.write(entry.contents);\n await writable.close();\n }\n handles.set(path, handle);\n },\n removeRemoteEntry: async (handles: any, path: string) => {\n const parentDirHandle = handles.get(PATH.dirname(path));\n await parentDirHandle.removeEntry(PATH.basename(path));\n handles.delete(path);\n },\n reconcile: async (mount: any, src: any, dst: any) => {\n let total = 0;\n\n const create: Array<string> = [];\n Object.keys(src.entries).forEach(function (key) {\n const e = src.entries[key];\n const e2 = dst.entries[key];\n if (\n !e2 ||\n (FS.isFile(e.mode) &&\n e[\"timestamp\"].getTime() > e2[\"timestamp\"].getTime())\n ) {\n create.push(key);\n total++;\n }\n });\n // sort paths in ascending order so directory entries are created\n // before the files inside them\n create.sort();\n\n const remove: Array<string> = [];\n Object.keys(dst.entries).forEach(function (key) {\n if (!src.entries[key]) {\n remove.push(key);\n total++;\n }\n });\n // sort paths in descending order so files are deleted before their\n // parent directories\n remove.sort().reverse();\n\n if (!total) {\n return;\n }\n\n const handles = src.type === \"remote\" ? src.handles : dst.handles;\n\n for (const path of create) {\n const relPath = PATH.normalize(\n path.replace(mount.mountpoint, \"/\"),\n ).substring(1);\n if (dst.type === \"local\") {\n const handle = handles.get(relPath);\n const entry = await nativeFSAsync.loadRemoteEntry(handle);\n nativeFSAsync.storeLocalEntry(path, entry);\n } else {\n const entry = nativeFSAsync.loadLocalEntry(path);\n await nativeFSAsync.storeRemoteEntry(handles, relPath, entry);\n }\n }\n\n for (const path of remove) {\n if (dst.type === \"local\") {\n nativeFSAsync.removeLocalEntry(path);\n } else {\n const relPath = PATH.normalize(\n path.replace(mount.mountpoint, \"/\"),\n ).substring(1);\n await nativeFSAsync.removeRemoteEntry(handles, relPath);\n }\n }\n },\n };\n\n module.FS.filesystems.NATIVEFS_ASYNC = nativeFSAsync;\n}\n\nconst getFsHandles = async (dirHandle: any) => {\n const handles: any = [];\n\n async function collect(curDirHandle: any) {\n for await (const entry of curDirHandle.values()) {\n handles.push(entry);\n if (entry.kind === \"directory\") {\n await collect(entry);\n }\n }\n }\n\n await collect(dirHandle);\n\n const result = new Map();\n result.set(\".\", dirHandle);\n for (const handle of handles) {\n const relativePath = (await dirHandle.resolve(handle)).join(\"/\");\n result.set(relativePath, handle);\n }\n return result;\n};\n", "/** @private */\n\nimport { ConfigType } from \"./pyodide\";\nimport { initializeNativeFS } from \"./nativefs\";\nimport { loadBinaryFile, getBinaryResponse } from \"./compat\";\nimport { Module } from \"./types\";\n\n/**\n * The Emscripten Module.\n *\n * @private\n */\nexport function createModule(): Module {\n let Module: any = {};\n Module.noImageDecoding = true;\n Module.noAudioDecoding = true;\n Module.noWasmDecoding = false; // we preload wasm using the built in plugin now\n Module.preRun = [];\n Module.quit = (status: number, toThrow: Error) => {\n Module.exited = { status, toThrow };\n throw toThrow;\n };\n return Module as Module;\n}\n\n/**\n * Make the home directory inside the virtual file system,\n * then change the working directory to it.\n *\n * @param Module The Emscripten Module.\n * @param path The path to the home directory.\n * @private\n */\nfunction createHomeDirectory(Module: Module, path: string) {\n Module.preRun.push(function () {\n const fallbackPath = \"/\";\n try {\n Module.FS.mkdirTree(path);\n } catch (e) {\n console.error(`Error occurred while making a home directory '${path}':`);\n console.error(e);\n console.error(`Using '${fallbackPath}' for a home directory instead`);\n path = fallbackPath;\n }\n Module.FS.chdir(path);\n });\n}\n\nfunction setEnvironment(Module: Module, env: { [key: string]: string }) {\n Module.preRun.push(function () {\n Object.assign(Module.ENV, env);\n });\n}\n\n/**\n * Mount local directories to the virtual file system. Only for Node.js.\n * @param module The Emscripten Module.\n * @param mounts The list of paths to mount.\n */\nfunction mountLocalDirectories(Module: Module, mounts: string[]) {\n Module.preRun.push(() => {\n for (const mount of mounts) {\n Module.FS.mkdirTree(mount);\n Module.FS.mount(Module.FS.filesystems.NODEFS, { root: mount }, mount);\n }\n });\n}\n\n/**\n * Install the Python standard library to the virtual file system.\n *\n * Previously, this was handled by Emscripten's file packager (pyodide.asm.data).\n * However, using the file packager means that we have only one version\n * of the standard library available. We want to be able to use different\n * versions of the standard library, for example:\n *\n * - Use compiled(.pyc) or uncompiled(.py) standard library.\n * - Remove unused modules or add additional modules using bundlers like pyodide-pack.\n *\n * @param Module The Emscripten Module.\n * @param stdlibPromise A promise that resolves to the standard library.\n */\nfunction installStdlib(Module: Module, stdlibURL: string) {\n const stdlibPromise: Promise<Uint8Array> = loadBinaryFile(stdlibURL);\n\n Module.preRun.push(() => {\n /* @ts-ignore */\n const pymajor = Module._py_version_major();\n /* @ts-ignore */\n const pyminor = Module._py_version_minor();\n\n Module.FS.mkdirTree(\"/lib\");\n Module.FS.mkdirTree(`/lib/python${pymajor}.${pyminor}/site-packages`);\n\n Module.addRunDependency(\"install-stdlib\");\n\n stdlibPromise\n .then((stdlib: Uint8Array) => {\n Module.FS.writeFile(`/lib/python${pymajor}${pyminor}.zip`, stdlib);\n })\n .catch((e) => {\n console.error(\"Error occurred while installing the standard library:\");\n console.error(e);\n })\n .finally(() => {\n Module.removeRunDependency(\"install-stdlib\");\n });\n });\n}\n\n/**\n * Initialize the virtual file system, before loading Python interpreter.\n * @private\n */\nexport function initializeFileSystem(Module: Module, config: ConfigType) {\n let stdLibURL;\n if (config.stdLibURL != undefined) {\n stdLibURL = config.stdLibURL;\n } else {\n stdLibURL = config.indexURL + \"python_stdlib.zip\";\n }\n\n installStdlib(Module, stdLibURL);\n createHomeDirectory(Module, config.env.HOME);\n setEnvironment(Module, config.env);\n mountLocalDirectories(Module, config._node_mounts);\n Module.preRun.push(() => initializeNativeFS(Module));\n}\n\nexport function preloadWasm(Module: Module, indexURL: string) {\n if (SOURCEMAP) {\n // According to the docs:\n //\n // \"Sanitizers or source map is currently not supported if overriding\n // WebAssembly instantiation with Module.instantiateWasm.\"\n // https://emscripten.org/docs/api_reference/module.html?highlight=instantiatewasm#Module.instantiateWasm\n return;\n }\n const { binary, response } = getBinaryResponse(indexURL + \"pyodide.asm.wasm\");\n Module.instantiateWasm = function (\n imports: { [key: string]: any },\n successCallback: (\n instance: WebAssembly.Instance,\n module: WebAssembly.Module,\n ) => void,\n ) {\n (async function () {\n try {\n let res: WebAssembly.WebAssemblyInstantiatedSource;\n if (response) {\n res = await WebAssembly.instantiateStreaming(response, imports);\n } else {\n res = await WebAssembly.instantiate(await binary, imports);\n }\n const { instance, module } = res;\n // When overriding instantiateWasm, in asan builds, we also need\n // to take care of creating the WasmOffsetConverter\n // @ts-ignore\n if (typeof WasmOffsetConverter != \"undefined\") {\n // @ts-ignore\n wasmOffsetConverter = new WasmOffsetConverter(wasmBinary, module);\n }\n successCallback(instance, module);\n } catch (e) {\n console.warn(\"wasm instantiation failed!\");\n console.warn(e);\n }\n })();\n\n return {}; // Compiling asynchronously, no exports.\n };\n}\n", "/**\n *\n * The Pyodide version.\n *\n * The version here is a Python version, following :pep:`440`. This is different\n * from the version in ``package.json`` which follows the node package manager\n * version convention.\n */\nexport const version: string = \"0.25.1\";\n", "/**\n * The main bootstrap code for loading pyodide.\n */\nimport {\n calculateDirname,\n loadScript,\n initNodeModules,\n resolvePath,\n loadLockFile,\n} from \"./compat\";\n\nimport { createModule, initializeFileSystem, preloadWasm } from \"./module\";\nimport { version } from \"./version\";\n\nimport type { PyodideInterface } from \"./api.js\";\nimport type { TypedArray, API, Module } from \"./types\";\nimport type { PackageData } from \"./load-package\";\nexport type { PyodideInterface, TypedArray };\n\nexport { version, type PackageData };\n\ndeclare function _createPyodideModule(Module: any): Promise<void>;\n\n/**\n * See documentation for loadPyodide.\n * @private\n */\nexport type ConfigType = {\n indexURL: string;\n packageCacheDir: string;\n lockFileURL: string;\n fullStdLib?: boolean;\n stdLibURL?: string;\n stdin?: () => string;\n stdout?: (msg: string) => void;\n stderr?: (msg: string) => void;\n jsglobals?: object;\n args: string[];\n _node_mounts: string[];\n env: { [key: string]: string };\n packages: string[];\n};\n\n/**\n * Load the main Pyodide wasm module and initialize it.\n *\n * @returns The :ref:`js-api-pyodide` module.\n * @memberof globalThis\n * @async\n * @example\n * async function main() {\n * const pyodide = await loadPyodide({\n * fullStdLib: true,\n * stdout: (msg) => console.log(`Pyodide: ${msg}`),\n * });\n * console.log(\"Loaded Pyodide\");\n * }\n * main();\n */\nexport async function loadPyodide(\n options: {\n /**\n * The URL from which Pyodide will load the main Pyodide runtime and\n * packages. It is recommended that you leave this unchanged, providing an\n * incorrect value can cause broken behavior.\n *\n * Default: The url that Pyodide is loaded from with the file name\n * (``pyodide.js`` or ``pyodide.mjs``) removed.\n */\n indexURL?: string;\n\n /**\n * The file path where packages will be cached in node. If a package\n * exists in ``packageCacheDir`` it is loaded from there, otherwise it is\n * downloaded from the JsDelivr CDN and then cached into ``packageCacheDir``.\n * Only applies when running in node; ignored in browsers.\n *\n * Default: same as indexURL\n */\n packageCacheDir?: string;\n\n /**\n * The URL from which Pyodide will load the Pyodide ``pyodide-lock.json`` lock\n * file. You can produce custom lock files with :py:func:`micropip.freeze`.\n * Default: ```${indexURL}/pyodide-lock.json```\n */\n lockFileURL?: string;\n /**\n * Load the full Python standard library. Setting this to false excludes\n * unvendored modules from the standard library.\n * Default: ``false``\n */\n fullStdLib?: boolean;\n /**\n * The URL from which to load the standard library ``python_stdlib.zip``\n * file. This URL includes the most of the Python standard library. Some\n * stdlib modules were unvendored, and can be loaded separately\n * with ``fullStdLib: true`` option or by their package name.\n * Default: ```${indexURL}/python_stdlib.zip```\n */\n stdLibURL?: string;\n /**\n * Override the standard input callback. Should ask the user for one line of\n * input. The :js:func:`pyodide.setStdin` function is more flexible and\n * should be preferred.\n */\n stdin?: () => string;\n /**\n * Override the standard output callback. The :js:func:`pyodide.setStdout`\n * function is more flexible and should be preferred in most cases, but\n * depending on the ``args`` passed to ``loadPyodide``, Pyodide may write to\n * stdout on startup, which can only be controlled by passing a custom\n * ``stdout`` function.\n */\n stdout?: (msg: string) => void;\n /**\n * Override the standard error output callback. The\n * :js:func:`pyodide.setStderr` function is more flexible and should be\n * preferred in most cases, but depending on the ``args`` passed to\n * ``loadPyodide``, Pyodide may write to stdout on startup, which can only\n * be controlled by passing a custom ``stdout`` function.\n */\n stderr?: (msg: string) => void;\n /**\n * The object that Pyodide will use for the ``js`` module.\n * Default: ``globalThis``\n */\n jsglobals?: object;\n /**\n * Command line arguments to pass to Python on startup. See `Python command\n * line interface options\n * <https://docs.python.org/3.10/using/cmdline.html#interface-options>`_ for\n * more details. Default: ``[]``\n */\n args?: string[];\n /**\n * Environment variables to pass to Python. This can be accessed inside of\n * Python at runtime via :py:data:`os.environ`. Certain environment variables change\n * the way that Python loads:\n * https://docs.python.org/3.10/using/cmdline.html#environment-variables\n * Default: ``{}``.\n * If ``env.HOME`` is undefined, it will be set to a default value of\n * ``\"/home/pyodide\"``\n */\n env?: { [key: string]: string };\n /**\n * A list of packages to load as Pyodide is initializing.\n *\n * This is the same as loading the packages with\n * :js:func:`pyodide.loadPackage` after Pyodide is loaded except using the\n * ``packages`` option is more efficient because the packages are downloaded\n * while Pyodide bootstraps itself.\n */\n packages?: string[];\n /**\n * Opt into the old behavior where PyProxy.toString calls `repr` and not\n * `str`.\n * @deprecated\n */\n pyproxyToStringRepr?: boolean;\n /**\n * @ignore\n */\n _node_mounts?: string[];\n } = {},\n): Promise<PyodideInterface> {\n await initNodeModules();\n let indexURL = options.indexURL || (await calculateDirname());\n indexURL = resolvePath(indexURL); // A relative indexURL causes havoc.\n if (!indexURL.endsWith(\"/\")) {\n indexURL += \"/\";\n }\n options.indexURL = indexURL;\n\n const default_config = {\n fullStdLib: false,\n jsglobals: globalThis,\n stdin: globalThis.prompt ? globalThis.prompt : undefined,\n lockFileURL: indexURL + \"pyodide-lock.json\",\n args: [],\n _node_mounts: [],\n env: {},\n packageCacheDir: indexURL,\n packages: [],\n };\n const config = Object.assign(default_config, options) as ConfigType;\n if (!config.env.HOME) {\n config.env.HOME = \"/home/pyodide\";\n }\n\n const Module = createModule();\n Module.print = config.stdout;\n Module.printErr = config.stderr;\n Module.arguments = config.args;\n\n const API = { config } as API;\n Module.API = API;\n API.lockFilePromise = loadLockFile(config.lockFileURL);\n\n preloadWasm(Module, indexURL);\n initializeFileSystem(Module, config);\n\n const moduleLoaded = new Promise((r) => (Module.postRun = r));\n\n // locateFile tells Emscripten where to find the data files that initialize\n // the file system.\n Module.locateFile = (path: string) => config.indexURL + path;\n\n // If the pyodide.asm.js script has been imported, we can skip the dynamic import\n // Users can then do a static import of the script in environments where\n // dynamic importing is not allowed or not desirable, like module-type service workers\n if (typeof _createPyodideModule !== \"function\") {\n const scriptSrc = `${config.indexURL}pyodide.asm.js`;\n await loadScript(scriptSrc);\n }\n\n // _createPyodideModule is specified in the Makefile by the linker flag:\n // `-s EXPORT_NAME=\"'_createPyodideModule'\"`\n await _createPyodideModule(Module);\n\n // There is some work to be done between the module being \"ready\" and postRun\n // being called.\n await moduleLoaded;\n // Handle early exit\n if (Module.exited) {\n throw Module.exited.toThrow;\n }\n if (options.pyproxyToStringRepr) {\n API.setPyProxyToStringMethod(true);\n }\n\n if (API.version !== version) {\n throw new Error(\n `\\\nPyodide version does not match: '${version}' <==> '${API.version}'. \\\nIf you updated the Pyodide version, make sure you also updated the 'indexURL' parameter passed to loadPyodide.\\\n`,\n );\n }\n // Disable further loading of Emscripten file_packager stuff.\n Module.locateFile = (path: string) => {\n throw new Error(\"Didn't expect to load any more file_packager files!\");\n };\n\n const pyodide = API.finalizeBootstrap();\n\n // runPython works starting here.\n if (!pyodide.version.includes(\"dev\")) {\n // Currently only used in Node to download packages the first time they are\n // loaded. But in other cases it's harmless.\n API.setCdnUrl(`https://cdn.jsdelivr.net/pyodide/v${pyodide.version}/full/`);\n }\n await API.packageIndexReady;\n\n let importhook = API._pyodide._importhook;\n importhook.register_module_not_found_hook(\n API._import_name_to_package_name,\n API.lockfile_unvendored_stdlibs_and_test,\n );\n\n if (API.lockfile_info.version !== version) {\n throw new Error(\"Lock file version doesn't match Pyodide version\");\n }\n API.package_loader.init_loaded_packages();\n if (config.fullStdLib) {\n await pyodide.loadPackage(API.lockfile_unvendored_stdlibs);\n }\n API.initializeStreams(config.stdin, config.stdout, config.stderr);\n return pyodide;\n}\n"],
"mappings": "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",
"names": ["require_stackframe", "__commonJSMin", "exports", "module", "root", "factory", "_isNumber", "n", "__name", "_capitalize", "str", "_getter", "p", "booleanProps", "numericProps", "stringProps", "arrayProps", "objectProps", "props", "StackFrame", "obj", "i", "v", "fileName", "lineNumber", "columnNumber", "functionName", "argsStartIndex", "argsEndIndex", "args", "locationString", "parts", "j", "k", "require_error_stack_parser", "__commonJSMin", "exports", "module", "root", "factory", "__name", "StackFrame", "FIREFOX_SAFARI_STACK_REGEXP", "CHROME_IE_STACK_REGEXP", "SAFARI_NATIVE_CODE_REGEXP", "error", "urlLike", "regExp", "parts", "filtered", "line", "sanitizedLine", "location", "locationParts", "functionName", "fileName", "functionNameRegex", "matches", "e", "lineRE", "lines", "result", "i", "len", "match", "tokens", "functionCall", "argsRaw", "args", "import_error_stack_parser", "IN_NODE", "IN_NODE_COMMONJS", "__require", "IN_NODE_ESM", "IN_DENO", "IN_BROWSER", "IN_BROWSER_MAIN_THREAD", "IN_BROWSER_WEB_WORKER", "nodeUrlMod", "nodeFetch", "nodePath", "nodeVmMod", "nodeFsPromisesMod", "FETCH_NOT_FOUND_MSG", "initNodeModules", "IN_NODE", "pathSep", "__require", "fs", "crypto", "ws", "child_process", "node_modules", "mod", "__name", "node_resolvePath", "path", "base", "browser_resolvePath", "resolvePath", "node_getBinaryResponse", "_file_sub_resource_hash", "data", "browser_getBinaryResponse", "subResourceHash", "url", "getBinaryResponse", "loadBinaryFile", "file_sub_resource_hash", "response", "binary", "r", "loadScript", "IN_BROWSER_MAIN_THREAD", "IN_BROWSER_WEB_WORKER", "nodeLoadScript", "loadLockFile", "lockFileURL", "IN_NODE", "initNodeModules", "package_string", "nodeFsPromisesMod", "__name", "calculateDirname", "IN_NODE_COMMONJS", "err", "e", "fileName", "ErrorStackParser", "IN_NODE_ESM", "nodePath", "indexOfLastSlash", "pathSep", "initializeNativeFS", "module", "FS", "MEMFS", "PATH", "nativeFSAsync", "mount", "populate", "callback", "local", "remote", "src", "dst", "e", "entries", "isRealDir", "p", "__name", "toAbsolute", "root", "check", "path", "stat", "handles", "getFsHandles", "handle", "node", "entry", "file", "parentDirHandle", "writable", "total", "create", "key", "e2", "remove", "relPath", "dirHandle", "collect", "curDirHandle", "result", "relativePath", "createModule", "Module", "status", "toThrow", "__name", "createHomeDirectory", "path", "fallbackPath", "e", "setEnvironment", "env", "mountLocalDirectories", "mounts", "mount", "installStdlib", "stdlibURL", "stdlibPromise", "loadBinaryFile", "pymajor", "pyminor", "stdlib", "initializeFileSystem", "config", "stdLibURL", "initializeNativeFS", "preloadWasm", "indexURL", "binary", "response", "getBinaryResponse", "imports", "successCallback", "res", "instance", "module", "version", "loadPyodide", "options", "initNodeModules", "indexURL", "calculateDirname", "resolvePath", "default_config", "config", "Module", "createModule", "API", "loadLockFile", "preloadWasm", "initializeFileSystem", "moduleLoaded", "r", "path", "scriptSrc", "loadScript", "version", "pyodide", "__name"]
}
import{V as e,a as t,E as i,b as s,c as n,r as o,h as r,W as a,d as l,e as c,f as h,i as d,j as u,m as f,n as m,o as p,k as g}from"./codemirror_view-C0PMO2z_.js";import{codePointAt as v,fromCodePoint as x,codePointSize as b,StateEffect as w,Facet as y,combineConfig as k,CharCategory as S,EditorSelection as C,Prec as M,StateField as A,EditorState as L,findClusterBreak as q,RangeSetBuilder as R}from"./codemirror_state-BKbyfKsm.js";import{k as D,l as W,m as F,n as I,o as P,p as E}from"./codemirror_language-_XiX6II0.js";import{history as $,defaultKeymap as T,historyKeymap as O}from"./codemirror_commands-MgxtVkrD.js";import{a as z,b as j,d as B,e as _}from"./index-CTWZX_TW.js";function V(){var e=arguments[0];"string"==typeof e&&(e=document.createElement(e));var t=1,i=arguments[1];if(i&&"object"==typeof i&&null==i.nodeType&&!Array.isArray(i)){for(var s in i)if(Object.prototype.hasOwnProperty.call(i,s)){var n=i[s];"string"==typeof n?e.setAttribute(s,n):null!=n&&(e[s]=n)}t++}for(;t<arguments.length;t++)H(e,arguments[t]);return e}function H(e,t){if("string"==typeof t)e.appendChild(document.createTextNode(t));else if(null==t);else if(null!=t.nodeType)e.appendChild(t);else{if(!Array.isArray(t))throw new RangeError("Unsupported child node: "+t);for(var i=0;i<t.length;i++)H(e,t[i])}}const N="function"==typeof String.prototype.normalize?e=>e.normalize("NFKD"):e=>e;class U{constructor(e,t,i=0,s=e.length,n,o){this.test=o,this.value={from:0,to:0},this.done=!1,this.matches=[],this.buffer="",this.bufferPos=0,this.iter=e.iterRange(i,s),this.bufferStart=i,this.normalize=n?e=>n(N(e)):N,this.query=this.normalize(t)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return v(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let e=this.peek();if(e<0)return this.done=!0,this;let t=x(e),i=this.bufferStart+this.bufferPos;this.bufferPos+=b(e);let s=this.normalize(t);for(let e=0,n=i;;e++){let o=s.charCodeAt(e),r=this.match(o,n,this.bufferPos+this.bufferStart);if(e==s.length-1){if(r)return this.value=r,this;break}n==i&&e<t.length&&t.charCodeAt(e)==o&&n++}}}match(e,t,i){let s=null;for(let t=0;t<this.matches.length;t+=2){let n=this.matches[t],o=!1;this.query.charCodeAt(n)==e&&(n==this.query.length-1?s={from:this.matches[t+1],to:i}:(this.matches[t]++,o=!0)),o||(this.matches.splice(t,2),t-=2)}return this.query.charCodeAt(0)==e&&(1==this.query.length?s={from:t,to:i}:this.matches.push(1,t)),s&&this.test&&!this.test(s.from,s.to,this.buffer,this.bufferStart)&&(s=null),s}}"undefined"!=typeof Symbol&&(U.prototype[Symbol.iterator]=function(){return this});const K={from:-1,to:-1,match:/.*/.exec("")},Q="gm"+(null==/x/.unicode?"":"u");class G{constructor(e,t,i,s=0,n=e.length){if(this.text=e,this.to=n,this.curLine="",this.done=!1,this.value=K,/\\[sWDnr]|\n|\r|\[\^/.test(t))return new J(e,t,i,s,n);this.re=new RegExp(t,Q+((null==i?void 0:i.ignoreCase)?"i":"")),this.test=null==i?void 0:i.test,this.iter=e.iter();let o=e.lineAt(s);this.curLineStart=o.from,this.matchPos=X(e,s),this.getLine(this.curLineStart)}getLine(e){this.iter.next(e),this.iter.lineBreak?this.curLine="":(this.curLine=this.iter.value,this.curLineStart+this.curLine.length>this.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine="":this.getLine(0)}next(){for(let e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;let t=this.matchPos<=this.to&&this.re.exec(this.curLine);if(t){let i=this.curLineStart+t.index,s=i+t[0].length;if(this.matchPos=X(this.text,s+(i==s?1:0)),i==this.curLineStart+this.curLine.length&&this.nextLine(),(i<s||i>this.value.to)&&(!this.test||this.test(i,s,t)))return this.value={from:i,to:s,match:t},this;e=this.matchPos-this.curLineStart}else{if(!(this.curLineStart+this.curLine.length<this.to))return this.done=!0,this;this.nextLine(),e=0}}}}const Y=new WeakMap;class Z{constructor(e,t){this.from=e,this.text=t}get to(){return this.from+this.text.length}static get(e,t,i){let s=Y.get(e);if(!s||s.from>=i||s.to<=t){let s=new Z(t,e.sliceString(t,i));return Y.set(e,s),s}if(s.from==t&&s.to==i)return s;let{text:n,from:o}=s;return o>t&&(n=e.sliceString(t,o)+n,o=t),s.to<i&&(n+=e.sliceString(s.to,i)),Y.set(e,new Z(o,n)),new Z(t,n.slice(t-o,i-o))}}class J{constructor(e,t,i,s,n){this.text=e,this.to=n,this.done=!1,this.value=K,this.matchPos=X(e,s),this.re=new RegExp(t,Q+((null==i?void 0:i.ignoreCase)?"i":"")),this.test=null==i?void 0:i.test,this.flat=Z.get(e,s,this.chunkEnd(s+5e3))}chunkEnd(e){return e>=this.to?this.to:this.text.lineAt(e).to}next(){for(;;){let e=this.re.lastIndex=this.matchPos-this.flat.from,t=this.re.exec(this.flat.text);if(t&&!t[0]&&t.index==e&&(this.re.lastIndex=e+1,t=this.re.exec(this.flat.text)),t){let e=this.flat.from+t.index,i=e+t[0].length;if((this.flat.to>=this.to||t.index+t[0].length<=this.flat.text.length-10)&&(!this.test||this.test(e,i,t)))return this.value={from:e,to:i,match:t},this.matchPos=X(this.text,i+(e==i?1:0)),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=Z.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+2*this.flat.text.length))}}}function X(e,t){if(t>=e.length)return t;let i,s=e.lineAt(t);for(;t<s.to&&(i=s.text.charCodeAt(t-s.from))>=56320&&i<57344;)t++;return t}function ee(e){let t=V("input",{class:"cm-textfield",name:"line",value:String(e.state.doc.lineAt(e.state.selection.main.head).number)});function s(){let s=/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(t.value);if(!s)return;let{state:n}=e,o=n.doc.lineAt(n.selection.main.head),[,r,a,l,c]=s,h=l?+l.slice(1):0,d=a?+a:o.number;if(a&&c){let e=d/100;r&&(e=e*("-"==r?-1:1)+o.number/n.doc.lines),d=Math.round(n.doc.lines*e)}else a&&r&&(d=d*("-"==r?-1:1)+o.number);let u=n.doc.line(Math.max(1,Math.min(n.doc.lines,d))),f=C.cursor(u.from+Math.max(0,Math.min(h,u.length)));e.dispatch({effects:[te.of(!1),i.scrollIntoView(f.from,{y:"center"})],selection:f}),e.focus()}return{dom:V("form",{class:"cm-gotoLine",onkeydown:t=>{27==t.keyCode?(t.preventDefault(),e.dispatch({effects:te.of(!1)}),e.focus()):13==t.keyCode&&(t.preventDefault(),s())},onsubmit:e=>{e.preventDefault(),s()}},V("label",e.state.phrase("Go to line"),": ",t)," ",V("button",{class:"cm-button",type:"submit"},e.state.phrase("go")))}}"undefined"!=typeof Symbol&&(G.prototype[Symbol.iterator]=J.prototype[Symbol.iterator]=function(){return this});const te=w.define(),ie=A.define({create:()=>!0,update(e,t){for(let i of t.effects)i.is(te)&&(e=i.value);return e},provide:e=>n.from(e,(e=>e?ee:null))}),se=i.baseTheme({".cm-panel.cm-gotoLine":{padding:"2px 6px 4px","& label":{fontSize:"80%"}}}),ne={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!1},oe=y.define({combine:e=>k(e,ne,{highlightWordAroundCursor:(e,t)=>e||t,minSelectionLength:Math.min,maxMatches:Math.min})});const re=t.mark({class:"cm-selectionMatch"}),ae=t.mark({class:"cm-selectionMatch cm-selectionMatch-main"});function le(e,t,i,s){return!(0!=i&&e(t.sliceDoc(i-1,i))==S.Word||s!=t.doc.length&&e(t.sliceDoc(s,s+1))==S.Word)}const ce=e.fromClass(class{constructor(e){this.decorations=this.getDeco(e)}update(e){(e.selectionSet||e.docChanged||e.viewportChanged)&&(this.decorations=this.getDeco(e.view))}getDeco(e){let i=e.state.facet(oe),{state:s}=e,n=s.selection;if(n.ranges.length>1)return t.none;let o,r=n.main,a=null;if(r.empty){if(!i.highlightWordAroundCursor)return t.none;let e=s.wordAt(r.head);if(!e)return t.none;a=s.charCategorizer(r.head),o=s.sliceDoc(e.from,e.to)}else{let e=r.to-r.from;if(e<i.minSelectionLength||e>200)return t.none;if(i.wholeWords){if(o=s.sliceDoc(r.from,r.to),a=s.charCategorizer(r.head),!le(a,s,r.from,r.to)||!function(e,t,i,s){return e(t.sliceDoc(i,i+1))==S.Word&&e(t.sliceDoc(s-1,s))==S.Word}(a,s,r.from,r.to))return t.none}else if(o=s.sliceDoc(r.from,r.to),!o)return t.none}let l=[];for(let n of e.visibleRanges){let e=new U(s.doc,o,n.from,n.to);for(;!e.next().done;){let{from:n,to:o}=e.value;if((!a||le(a,s,n,o))&&(r.empty&&n<=r.from&&o>=r.to?l.push(ae.range(n,o)):(n>=r.to||o<=r.from)&&l.push(re.range(n,o)),l.length>i.maxMatches))return t.none}}return t.set(l)}},{decorations:e=>e.decorations}),he=i.baseTheme({".cm-selectionMatch":{backgroundColor:"#99ff7780"},".cm-searchMatch .cm-selectionMatch":{backgroundColor:"transparent"}});const de=y.define({combine:e=>k(e,{top:!1,caseSensitive:!1,literal:!1,regexp:!1,wholeWord:!1,createPanel:e=>new je(e),scrollToMatch:e=>i.scrollIntoView(e)})});class ue{constructor(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.literal=!!e.literal,this.regexp=!!e.regexp,this.replace=e.replace||"",this.valid=!!this.search&&(!this.regexp||function(e){try{return new RegExp(e,Q),!0}catch(e){return!1}}(this.search)),this.unquoted=this.unquote(this.search),this.wholeWord=!!e.wholeWord}unquote(e){return this.literal?e:e.replace(/\\([nrt\\])/g,((e,t)=>"n"==t?"\n":"r"==t?"\r":"t"==t?"\t":"\\"))}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord}create(){return this.regexp?new be(this):new pe(this)}getCursor(e,t=0,i){let s=e.doc?e:L.create({doc:e});return null==i&&(i=s.doc.length),this.regexp?ge(this,s,t,i):me(this,s,t,i)}}class fe{constructor(e){this.spec=e}}function me(e,t,i,s){return new U(t.doc,e.unquoted,i,s,e.caseSensitive?void 0:e=>e.toLowerCase(),e.wholeWord?(n=t.doc,o=t.charCategorizer(t.selection.main.head),(e,t,i,s)=>((s>e||s+i.length<t)&&(s=Math.max(0,e-2),i=n.sliceString(s,Math.min(n.length,t+2))),!(o(ve(i,e-s))==S.Word&&o(xe(i,e-s))==S.Word||o(xe(i,t-s))==S.Word&&o(ve(i,t-s))==S.Word))):void 0);var n,o}class pe extends fe{constructor(e){super(e)}nextMatch(e,t,i){let s=me(this.spec,e,i,e.doc.length).nextOverlapping();return s.done&&(s=me(this.spec,e,0,t).nextOverlapping()),s.done?null:s.value}prevMatchInRange(e,t,i){for(let s=i;;){let i=Math.max(t,s-1e4-this.spec.unquoted.length),n=me(this.spec,e,i,s),o=null;for(;!n.nextOverlapping().done;)o=n.value;if(o)return o;if(i==t)return null;s-=1e4}}prevMatch(e,t,i){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace)}matchAll(e,t){let i=me(this.spec,e,0,e.doc.length),s=[];for(;!i.next().done;){if(s.length>=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let n=me(this.spec,e,Math.max(0,t-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.doc.length));for(;!n.next().done;)s(n.value.from,n.value.to)}}function ge(e,t,i,s){return new G(t.doc,e.search,{ignoreCase:!e.caseSensitive,test:e.wholeWord?(n=t.charCategorizer(t.selection.main.head),(e,t,i)=>!i[0].length||(n(ve(i.input,i.index))!=S.Word||n(xe(i.input,i.index))!=S.Word)&&(n(xe(i.input,i.index+i[0].length))!=S.Word||n(ve(i.input,i.index+i[0].length))!=S.Word)):void 0},i,s);var n}function ve(e,t){return e.slice(q(e,t,!1),t)}function xe(e,t){return e.slice(t,q(e,t))}class be extends fe{nextMatch(e,t,i){let s=ge(this.spec,e,i,e.doc.length).next();return s.done&&(s=ge(this.spec,e,0,t).next()),s.done?null:s.value}prevMatchInRange(e,t,i){for(let s=1;;s++){let n=Math.max(t,i-1e4*s),o=ge(this.spec,e,n,i),r=null;for(;!o.next().done;)r=o.value;if(r&&(n==t||r.from>n+10))return r;if(n==t)return null}}prevMatch(e,t,i){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\$([$&\d+])/g,((t,i)=>"$"==i?"$":"&"==i?e.match[0]:"0"!=i&&+i<e.match.length?e.match[i]:t))}matchAll(e,t){let i=ge(this.spec,e,0,e.doc.length),s=[];for(;!i.next().done;){if(s.length>=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let n=ge(this.spec,e,Math.max(0,t-250),Math.min(i+250,e.doc.length));for(;!n.next().done;)s(n.value.from,n.value.to)}}const we=w.define(),ye=w.define(),ke=A.define({create:e=>new Se(Pe(e).create(),null),update(e,t){for(let i of t.effects)i.is(we)?e=new Se(i.value.create(),e.panel):i.is(ye)&&(e=new Se(e.query,i.value?Ie:null));return e},provide:e=>n.from(e,(e=>e.panel))});class Se{constructor(e,t){this.query=e,this.panel=t}}const Ce=t.mark({class:"cm-searchMatch"}),Me=t.mark({class:"cm-searchMatch cm-searchMatch-selected"}),Ae=e.fromClass(class{constructor(e){this.view=e,this.decorations=this.highlight(e.state.field(ke))}update(e){let t=e.state.field(ke);(t!=e.startState.field(ke)||e.docChanged||e.selectionSet||e.viewportChanged)&&(this.decorations=this.highlight(t))}highlight({query:e,panel:i}){if(!i||!e.spec.valid)return t.none;let{view:s}=this,n=new R;for(let t=0,i=s.visibleRanges,o=i.length;t<o;t++){let{from:r,to:a}=i[t];for(;t<o-1&&a>i[t+1].from-500;)a=i[++t].to;e.highlight(s.state,r,a,((e,t)=>{let i=s.state.selection.ranges.some((i=>i.from==e&&i.to==t));n.add(e,t,i?Me:Ce)}))}return n.finish()}},{decorations:e=>e.decorations});function Le(e){return t=>{let i=t.state.field(ke,!1);return i&&i.query.spec.valid?e(t,i):Te(t)}}const qe=Le(((e,{query:t})=>{let{to:i}=e.state.selection.main,s=t.nextMatch(e.state,i,i);if(!s)return!1;let n=C.single(s.from,s.to),o=e.state.facet(de);return e.dispatch({selection:n,effects:[He(e,s),o.scrollToMatch(n.main,e)],userEvent:"select.search"}),$e(e),!0})),Re=Le(((e,{query:t})=>{let{state:i}=e,{from:s}=i.selection.main,n=t.prevMatch(i,s,s);if(!n)return!1;let o=C.single(n.from,n.to),r=e.state.facet(de);return e.dispatch({selection:o,effects:[He(e,n),r.scrollToMatch(o.main,e)],userEvent:"select.search"}),$e(e),!0})),De=Le(((e,{query:t})=>{let i=t.matchAll(e.state,1e3);return!(!i||!i.length)&&(e.dispatch({selection:C.create(i.map((e=>C.range(e.from,e.to)))),userEvent:"select.search.matches"}),!0)})),We=Le(((e,{query:t})=>{let{state:s}=e,{from:n,to:o}=s.selection.main;if(s.readOnly)return!1;let r=t.nextMatch(s,n,n);if(!r)return!1;let a,l,c=[],h=[];if(r.from==n&&r.to==o&&(l=s.toText(t.getReplacement(r)),c.push({from:r.from,to:r.to,insert:l}),r=t.nextMatch(s,r.from,r.to),h.push(i.announce.of(s.phrase("replaced match on line $",s.doc.lineAt(n).number)+"."))),r){let t=0==c.length||c[0].from>=r.to?0:r.to-r.from-l.length;a=C.single(r.from-t,r.to-t),h.push(He(e,r)),h.push(s.facet(de).scrollToMatch(a.main,e))}return e.dispatch({changes:c,selection:a,effects:h,userEvent:"input.replace"}),!0})),Fe=Le(((e,{query:t})=>{if(e.state.readOnly)return!1;let s=t.matchAll(e.state,1e9).map((e=>{let{from:i,to:s}=e;return{from:i,to:s,insert:t.getReplacement(e)}}));if(!s.length)return!1;let n=e.state.phrase("replaced $ matches",s.length)+".";return e.dispatch({changes:s,effects:i.announce.of(n),userEvent:"input.replace.all"}),!0}));function Ie(e){return e.state.facet(de).createPanel(e)}function Pe(e,t){var i,s,n,o,r;let a=e.selection.main,l=a.empty||a.to>a.from+100?"":e.sliceDoc(a.from,a.to);if(t&&!l)return t;let c=e.facet(de);return new ue({search:(null!==(i=null==t?void 0:t.literal)&&void 0!==i?i:c.literal)?l:l.replace(/\n/g,"\\n"),caseSensitive:null!==(s=null==t?void 0:t.caseSensitive)&&void 0!==s?s:c.caseSensitive,literal:null!==(n=null==t?void 0:t.literal)&&void 0!==n?n:c.literal,regexp:null!==(o=null==t?void 0:t.regexp)&&void 0!==o?o:c.regexp,wholeWord:null!==(r=null==t?void 0:t.wholeWord)&&void 0!==r?r:c.wholeWord})}function Ee(e){let t=s(e,Ie);return t&&t.dom.querySelector("[main-field]")}function $e(e){let t=Ee(e);t&&t==e.root.activeElement&&t.select()}const Te=e=>{let t=e.state.field(ke,!1);if(t&&t.panel){let i=Ee(e);if(i&&i!=e.root.activeElement){let s=Pe(e.state,t.query.spec);s.valid&&e.dispatch({effects:we.of(s)}),i.focus(),i.select()}}else e.dispatch({effects:[ye.of(!0),t?we.of(Pe(e.state,t.query.spec)):w.appendConfig.of(Ue)]});return!0},Oe=e=>{let t=e.state.field(ke,!1);if(!t||!t.panel)return!1;let i=s(e,Ie);return i&&i.dom.contains(e.root.activeElement)&&e.focus(),e.dispatch({effects:ye.of(!1)}),!0},ze=[{key:"Mod-f",run:Te,scope:"editor search-panel"},{key:"F3",run:qe,shift:Re,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:qe,shift:Re,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:Oe,scope:"editor search-panel"},{key:"Mod-Shift-l",run:({state:e,dispatch:t})=>{let i=e.selection;if(i.ranges.length>1||i.main.empty)return!1;let{from:s,to:n}=i.main,o=[],r=0;for(let t=new U(e.doc,e.sliceDoc(s,n));!t.next().done;){if(o.length>1e3)return!1;t.value.from==s&&(r=o.length),o.push(C.range(t.value.from,t.value.to))}return t(e.update({selection:C.create(o,r),userEvent:"select.search.matches"})),!0}},{key:"Mod-Alt-g",run:e=>{let t=s(e,ee);if(!t){let i=[te.of(!0)];null==e.state.field(ie,!1)&&i.push(w.appendConfig.of([ie,se])),e.dispatch({effects:i}),t=s(e,ee)}return t&&t.dom.querySelector("input").select(),!0}},{key:"Mod-d",run:({state:e,dispatch:t})=>{let{ranges:s}=e.selection;if(s.some((e=>e.from===e.to)))return(({state:e,dispatch:t})=>{let{selection:i}=e,s=C.create(i.ranges.map((t=>e.wordAt(t.head)||C.cursor(t.head))),i.mainIndex);return!s.eq(i)&&(t(e.update({selection:s})),!0)})({state:e,dispatch:t});let n=e.sliceDoc(s[0].from,s[0].to);if(e.selection.ranges.some((t=>e.sliceDoc(t.from,t.to)!=n)))return!1;let o=function(e,t){let{main:i,ranges:s}=e.selection,n=e.wordAt(i.head),o=n&&n.from==i.from&&n.to==i.to;for(let i=!1,n=new U(e.doc,t,s[s.length-1].to);;){if(n.next(),!n.done){if(i&&s.some((e=>e.from==n.value.from)))continue;if(o){let t=e.wordAt(n.value.from);if(!t||t.from!=n.value.from||t.to!=n.value.to)continue}return n.value}if(i)return null;n=new U(e.doc,t,0,Math.max(0,s[s.length-1].from-1)),i=!0}}(e,n);return!!o&&(t(e.update({selection:e.selection.addRange(C.range(o.from,o.to),!1),effects:i.scrollIntoView(o.to)})),!0)},preventDefault:!0}];class je{constructor(e){this.view=e;let t=this.query=e.state.field(ke).query.spec;function i(e,t,i){return V("button",{class:"cm-button",name:e,onclick:t,type:"button"},i)}this.commit=this.commit.bind(this),this.searchField=V("input",{value:t.search,placeholder:Be(e,"Find"),"aria-label":Be(e,"Find"),class:"cm-textfield",name:"search",form:"","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=V("input",{value:t.replace,placeholder:Be(e,"Replace"),"aria-label":Be(e,"Replace"),class:"cm-textfield",name:"replace",form:"",onchange:this.commit,onkeyup:this.commit}),this.caseField=V("input",{type:"checkbox",name:"case",form:"",checked:t.caseSensitive,onchange:this.commit}),this.reField=V("input",{type:"checkbox",name:"re",form:"",checked:t.regexp,onchange:this.commit}),this.wordField=V("input",{type:"checkbox",name:"word",form:"",checked:t.wholeWord,onchange:this.commit}),this.dom=V("div",{onkeydown:e=>this.keydown(e),class:"cm-search"},[this.searchField,i("next",(()=>qe(e)),[Be(e,"next")]),i("prev",(()=>Re(e)),[Be(e,"previous")]),i("select",(()=>De(e)),[Be(e,"all")]),V("label",null,[this.caseField,Be(e,"match case")]),V("label",null,[this.reField,Be(e,"regexp")]),V("label",null,[this.wordField,Be(e,"by word")]),...e.state.readOnly?[]:[V("br"),this.replaceField,i("replace",(()=>We(e)),[Be(e,"replace")]),i("replaceAll",(()=>Fe(e)),[Be(e,"replace all")])],V("button",{name:"close",onclick:()=>Oe(e),"aria-label":Be(e,"close"),type:"button"},["×"])])}commit(){let e=new ue({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:we.of(e)}))}keydown(e){o(this.view,e,"search-panel")?e.preventDefault():13==e.keyCode&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?Re:qe)(this.view)):13==e.keyCode&&e.target==this.replaceField&&(e.preventDefault(),We(this.view))}update(e){for(let t of e.transactions)for(let e of t.effects)e.is(we)&&!e.value.eq(this.query)&&this.setQuery(e.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(de).top}}function Be(e,t){return e.state.phrase(t)}const _e=30,Ve=/[\s\.,:;?!]/;function He(e,{from:t,to:s}){let n=e.state.doc.lineAt(t),o=e.state.doc.lineAt(s).to,r=Math.max(n.from,t-_e),a=Math.min(o,s+_e),l=e.state.sliceDoc(r,a);if(r!=n.from)for(let e=0;e<_e;e++)if(!Ve.test(l[e+1])&&Ve.test(l[e])){l=l.slice(e);break}if(a!=o)for(let e=l.length-1;e>l.length-_e;e--)if(!Ve.test(l[e-1])&&Ve.test(l[e])){l=l.slice(0,e);break}return i.announce.of(`${e.state.phrase("current match")}. ${l} ${e.state.phrase("on line")} ${n.number}.`)}const Ne=i.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),Ue=[ke,M.low(Ae),Ne];class Ke{constructor(e,t,i){this.from=e,this.to=t,this.diagnostic=i}}class Qe{constructor(e,t,i){this.diagnostics=e,this.panel=t,this.selected=i}static init(e,i,s){let n=e,o=s.facet(ot).markerFilter;o&&(n=o(n,s));let r=t.set(n.map((e=>e.from==e.to||e.from==e.to-1&&s.doc.lineAt(e.from).to==e.from?t.widget({widget:new lt(e),diagnostic:e}).range(e.from):t.mark({attributes:{class:"cm-lintRange cm-lintRange-"+e.severity+(e.markClass?" "+e.markClass:"")},diagnostic:e,inclusive:!0}).range(e.from,e.to))),!0);return new Qe(r,i,Ge(r))}}function Ge(e,t=null,i=0){let s=null;return e.between(i,1e9,((e,i,{spec:n})=>{if(!t||n.diagnostic==t)return s=new Ke(e,i,n.diagnostic),!1})),s}const Ye=w.define(),Ze=w.define(),Je=w.define(),Xe=A.define({create:()=>new Qe(t.none,null,null),update(e,t){if(t.docChanged){let i=e.diagnostics.map(t.changes),s=null;if(e.selected){let n=t.changes.mapPos(e.selected.from,1);s=Ge(i,e.selected.diagnostic,n)||Ge(i,null,n)}e=new Qe(i,e.panel,s)}for(let i of t.effects)i.is(Ye)?e=Qe.init(i.value,e.panel,t.state):i.is(Ze)?e=new Qe(e.diagnostics,i.value?ht.open:null,e.selected):i.is(Je)&&(e=new Qe(e.diagnostics,e.panel,i.value));return e},provide:e=>[n.from(e,(e=>e.panel)),i.decorations.from(e,(e=>e.diagnostics))]}),et=t.mark({class:"cm-lintRange cm-lintRange-active",inclusive:!0});function tt(e,t,i){let{diagnostics:s}=e.state.field(Xe),n=[],o=2e8,r=0;s.between(t-(i<0?1:0),t+(i>0?1:0),((e,s,{spec:a})=>{t>=e&&t<=s&&(e==s||(t>e||i>0)&&(t<s||i<0))&&(n.push(a.diagnostic),o=Math.min(e,o),r=Math.max(s,r))}));let a=e.state.facet(ot).tooltipFilter;return a&&(n=a(n,e.state)),n.length?{pos:o,end:r,above:e.state.doc.lineAt(o).to<r,create:()=>({dom:it(e,n)})}:null}function it(e,t){return V("ul",{class:"cm-tooltip-lint"},t.map((t=>at(e,t,!1))))}const st=e=>{let t=e.state.field(Xe,!1);return!(!t||!t.panel)&&(e.dispatch({effects:Ze.of(!1)}),!0)},nt=[{key:"Mod-Shift-m",run:e=>{let t=e.state.field(Xe,!1);var i,n;t&&t.panel||e.dispatch({effects:(i=e.state,n=[Ze.of(!0)],i.field(Xe,!1)?n:n.concat(w.appendConfig.of(ft)))});let o=s(e,ht.open);return o&&o.dom.querySelector(".cm-panel-lint ul").focus(),!0},preventDefault:!0},{key:"F8",run:e=>{let t=e.state.field(Xe,!1);if(!t)return!1;let i=e.state.selection.main,s=t.diagnostics.iter(i.to+1);return!(!s.value&&(s=t.diagnostics.iter(0),!s.value||s.from==i.from&&s.to==i.to))&&(e.dispatch({selection:{anchor:s.from,head:s.to},scrollIntoView:!0}),!0)}}],ot=y.define({combine:e=>Object.assign({sources:e.map((e=>e.source)).filter((e=>null!=e))},k(e.map((e=>e.config)),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null},{needsRefresh:(e,t)=>e?t?i=>e(i)||t(i):e:t}))});function rt(e){let t=[];if(e)e:for(let{name:i}of e){for(let e=0;e<i.length;e++){let s=i[e];if(/[a-zA-Z]/.test(s)&&!t.some((e=>e.toLowerCase()==s.toLowerCase()))){t.push(s);continue e}}t.push("")}return t}function at(e,t,i){var s;let n=i?rt(t.actions):[];return V("li",{class:"cm-diagnostic cm-diagnostic-"+t.severity},V("span",{class:"cm-diagnosticText"},t.renderMessage?t.renderMessage():t.message),null===(s=t.actions)||void 0===s?void 0:s.map(((i,s)=>{let o=!1,r=s=>{if(s.preventDefault(),o)return;o=!0;let n=Ge(e.state.field(Xe).diagnostics,t);n&&i.apply(e,n.from,n.to)},{name:a}=i,l=n[s]?a.indexOf(n[s]):-1,c=l<0?a:[a.slice(0,l),V("u",a.slice(l,l+1)),a.slice(l+1)];return V("button",{type:"button",class:"cm-diagnosticAction",onclick:r,onmousedown:r,"aria-label":` Action: ${a}${l<0?"":` (access key "${n[s]})"`}.`},c)})),t.source&&V("div",{class:"cm-diagnosticSource"},t.source))}class lt extends a{constructor(e){super(),this.diagnostic=e}eq(e){return e.diagnostic==this.diagnostic}toDOM(){return V("span",{class:"cm-lintPoint cm-lintPoint-"+this.diagnostic.severity})}}class ct{constructor(e,t){this.diagnostic=t,this.id="item_"+Math.floor(4294967295*Math.random()).toString(16),this.dom=at(e,t,!0),this.dom.id=this.id,this.dom.setAttribute("role","option")}}class ht{constructor(e){this.view=e,this.items=[];this.list=V("ul",{tabIndex:0,role:"listbox","aria-label":this.view.state.phrase("Diagnostics"),onkeydown:t=>{if(27==t.keyCode)st(this.view),this.view.focus();else if(38==t.keyCode||33==t.keyCode)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(40==t.keyCode||34==t.keyCode)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(36==t.keyCode)this.moveSelection(0);else if(35==t.keyCode)this.moveSelection(this.items.length-1);else if(13==t.keyCode)this.view.focus();else{if(!(t.keyCode>=65&&t.keyCode<=90&&this.selectedIndex>=0))return;{let{diagnostic:i}=this.items[this.selectedIndex],s=rt(i.actions);for(let n=0;n<s.length;n++)if(s[n].toUpperCase().charCodeAt(0)==t.keyCode){let t=Ge(this.view.state.field(Xe).diagnostics,i);t&&i.actions[n].apply(e,t.from,t.to)}}}t.preventDefault()},onclick:e=>{for(let t=0;t<this.items.length;t++)this.items[t].dom.contains(e.target)&&this.moveSelection(t)}}),this.dom=V("div",{class:"cm-panel-lint"},this.list,V("button",{type:"button",name:"close","aria-label":this.view.state.phrase("close"),onclick:()=>st(this.view)},"×")),this.update()}get selectedIndex(){let e=this.view.state.field(Xe).selected;if(!e)return-1;for(let t=0;t<this.items.length;t++)if(this.items[t].diagnostic==e.diagnostic)return t;return-1}update(){let{diagnostics:e,selected:t}=this.view.state.field(Xe),i=0,s=!1,n=null;for(e.between(0,this.view.state.doc.length,((e,o,{spec:r})=>{let a,l=-1;for(let e=i;e<this.items.length;e++)if(this.items[e].diagnostic==r.diagnostic){l=e;break}l<0?(a=new ct(this.view,r.diagnostic),this.items.splice(i,0,a),s=!0):(a=this.items[l],l>i&&(this.items.splice(i,l-i),s=!0)),t&&a.diagnostic==t.diagnostic?a.dom.hasAttribute("aria-selected")||(a.dom.setAttribute("aria-selected","true"),n=a):a.dom.hasAttribute("aria-selected")&&a.dom.removeAttribute("aria-selected"),i++}));i<this.items.length&&!(1==this.items.length&&this.items[0].diagnostic.from<0);)s=!0,this.items.pop();0==this.items.length&&(this.items.push(new ct(this.view,{from:-1,to:-1,severity:"info",message:this.view.state.phrase("No diagnostics")})),s=!0),n?(this.list.setAttribute("aria-activedescendant",n.id),this.view.requestMeasure({key:this,read:()=>({sel:n.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:e,panel:t})=>{let i=t.height/this.list.offsetHeight;e.top<t.top?this.list.scrollTop-=(t.top-e.top)/i:e.bottom>t.bottom&&(this.list.scrollTop+=(e.bottom-t.bottom)/i)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),s&&this.sync()}sync(){let e=this.list.firstChild;function t(){let t=e;e=t.nextSibling,t.remove()}for(let i of this.items)if(i.dom.parentNode==this.list){for(;e!=i.dom;)t();e=i.dom.nextSibling}else this.list.insertBefore(i.dom,e);for(;e;)t()}moveSelection(e){if(this.selectedIndex<0)return;let t=Ge(this.view.state.field(Xe).diagnostics,this.items[e].diagnostic);t&&this.view.dispatch({selection:{anchor:t.from,head:t.to},scrollIntoView:!0,effects:Je.of(t)})}static open(e){return new ht(e)}}function dt(e){return function(e,t='viewBox="0 0 40 40"'){return`url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" ${t}>${encodeURIComponent(e)}</svg>')`}(`<path d="m0 2.5 l2 -1.5 l1 0 l2 1.5 l1 0" stroke="${e}" fill="none" stroke-width=".7"/>`,'width="6" height="3"')}const ut=i.baseTheme({".cm-diagnostic":{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block",whiteSpace:"pre-wrap"},".cm-diagnostic-error":{borderLeft:"5px solid #d11"},".cm-diagnostic-warning":{borderLeft:"5px solid orange"},".cm-diagnostic-info":{borderLeft:"5px solid #999"},".cm-diagnostic-hint":{borderLeft:"5px solid #66d"},".cm-diagnosticAction":{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px",cursor:"pointer"},".cm-diagnosticSource":{fontSize:"70%",opacity:.7},".cm-lintRange":{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x",paddingBottom:"0.7px"},".cm-lintRange-error":{backgroundImage:dt("#d11")},".cm-lintRange-warning":{backgroundImage:dt("orange")},".cm-lintRange-info":{backgroundImage:dt("#999")},".cm-lintRange-hint":{backgroundImage:dt("#66d")},".cm-lintRange-active":{backgroundColor:"#ffdd9980"},".cm-tooltip-lint":{padding:0,margin:0},".cm-lintPoint":{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},".cm-lintPoint-warning":{"&:after":{borderBottomColor:"orange"}},".cm-lintPoint-info":{"&:after":{borderBottomColor:"#999"}},".cm-lintPoint-hint":{"&:after":{borderBottomColor:"#66d"}},".cm-panel.cm-panel-lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd","& u":{textDecoration:"underline"}},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},"& u":{textDecoration:"none"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}}}),ft=[Xe,i.decorations.compute([Xe],(e=>{let{selected:i,panel:s}=e.field(Xe);return i&&s&&i.from!=i.to?t.set([et.range(i.from,i.to)]):t.none})),r(tt,{hideOn:function(e,t){let i=e.startState.doc.lineAt(t.pos);return!(!e.effects.some((e=>e.is(Ye)))&&!e.changes.touchesRange(i.from,i.to))}}),ut],mt=(()=>[l(),c(),h(),$(),D(),d(),u(),L.allowMultipleSelections.of(!0),W(),F(I,{fallback:!0}),P(),z(),j(),f(),m(),p(),[he,ce],g.of([...B,...T,...ze,...O,...E,..._,...nt])])(),pt=(()=>[h(),$(),d(),F(I,{fallback:!0}),g.of([...T,...O])])();export{i as EditorView,mt as basicSetup,pt as minimalSetup};
//# sourceMappingURL=codemirror-Dr2Hgejs.js.map
{"version":3,"file":"codemirror-Dr2Hgejs.js","sources":["../node_modules/crelt/index.js","../node_modules/@codemirror/search/dist/index.js","../node_modules/@codemirror/lint/dist/index.js","../node_modules/codemirror/dist/index.js"],"sourcesContent":["export default function crelt() {\n var elt = arguments[0]\n if (typeof elt == \"string\") elt = document.createElement(elt)\n var i = 1, next = arguments[1]\n if (next && typeof next == \"object\" && next.nodeType == null && !Array.isArray(next)) {\n for (var name in next) if (Object.prototype.hasOwnProperty.call(next, name)) {\n var value = next[name]\n if (typeof value == \"string\") elt.setAttribute(name, value)\n else if (value != null) elt[name] = value\n }\n i++\n }\n for (; i < arguments.length; i++) add(elt, arguments[i])\n return elt\n}\n\nfunction add(elt, child) {\n if (typeof child == \"string\") {\n elt.appendChild(document.createTextNode(child))\n } else if (child == null) {\n } else if (child.nodeType != null) {\n elt.appendChild(child)\n } else if (Array.isArray(child)) {\n for (var i = 0; i < child.length; i++) add(elt, child[i])\n } else {\n throw new RangeError(\"Unsupported child node: \" + child)\n }\n}\n","import { showPanel, EditorView, getPanel, Decoration, ViewPlugin, runScopeHandlers } from '@codemirror/view';\nimport { codePointAt, fromCodePoint, codePointSize, StateEffect, StateField, EditorSelection, Facet, combineConfig, CharCategory, RangeSetBuilder, Prec, EditorState, findClusterBreak } from '@codemirror/state';\nimport elt from 'crelt';\n\nconst basicNormalize = typeof String.prototype.normalize == \"function\"\n ? x => x.normalize(\"NFKD\") : x => x;\n/**\nA search cursor provides an iterator over text matches in a\ndocument.\n*/\nclass SearchCursor {\n /**\n Create a text cursor. The query is the search string, `from` to\n `to` provides the region to search.\n \n When `normalize` is given, it will be called, on both the query\n string and the content it is matched against, before comparing.\n You can, for example, create a case-insensitive search by\n passing `s => s.toLowerCase()`.\n \n Text is always normalized with\n [`.normalize(\"NFKD\")`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize)\n (when supported).\n */\n constructor(text, query, from = 0, to = text.length, normalize, test) {\n this.test = test;\n /**\n The current match (only holds a meaningful value after\n [`next`](https://codemirror.net/6/docs/ref/#search.SearchCursor.next) has been called and when\n `done` is false).\n */\n this.value = { from: 0, to: 0 };\n /**\n Whether the end of the iterated region has been reached.\n */\n this.done = false;\n this.matches = [];\n this.buffer = \"\";\n this.bufferPos = 0;\n this.iter = text.iterRange(from, to);\n this.bufferStart = from;\n this.normalize = normalize ? x => normalize(basicNormalize(x)) : basicNormalize;\n this.query = this.normalize(query);\n }\n peek() {\n if (this.bufferPos == this.buffer.length) {\n this.bufferStart += this.buffer.length;\n this.iter.next();\n if (this.iter.done)\n return -1;\n this.bufferPos = 0;\n this.buffer = this.iter.value;\n }\n return codePointAt(this.buffer, this.bufferPos);\n }\n /**\n Look for the next match. Updates the iterator's\n [`value`](https://codemirror.net/6/docs/ref/#search.SearchCursor.value) and\n [`done`](https://codemirror.net/6/docs/ref/#search.SearchCursor.done) properties. Should be called\n at least once before using the cursor.\n */\n next() {\n while (this.matches.length)\n this.matches.pop();\n return this.nextOverlapping();\n }\n /**\n The `next` method will ignore matches that partially overlap a\n previous match. This method behaves like `next`, but includes\n such matches.\n */\n nextOverlapping() {\n for (;;) {\n let next = this.peek();\n if (next < 0) {\n this.done = true;\n return this;\n }\n let str = fromCodePoint(next), start = this.bufferStart + this.bufferPos;\n this.bufferPos += codePointSize(next);\n let norm = this.normalize(str);\n for (let i = 0, pos = start;; i++) {\n let code = norm.charCodeAt(i);\n let match = this.match(code, pos, this.bufferPos + this.bufferStart);\n if (i == norm.length - 1) {\n if (match) {\n this.value = match;\n return this;\n }\n break;\n }\n if (pos == start && i < str.length && str.charCodeAt(i) == code)\n pos++;\n }\n }\n }\n match(code, pos, end) {\n let match = null;\n for (let i = 0; i < this.matches.length; i += 2) {\n let index = this.matches[i], keep = false;\n if (this.query.charCodeAt(index) == code) {\n if (index == this.query.length - 1) {\n match = { from: this.matches[i + 1], to: end };\n }\n else {\n this.matches[i]++;\n keep = true;\n }\n }\n if (!keep) {\n this.matches.splice(i, 2);\n i -= 2;\n }\n }\n if (this.query.charCodeAt(0) == code) {\n if (this.query.length == 1)\n match = { from: pos, to: end };\n else\n this.matches.push(1, pos);\n }\n if (match && this.test && !this.test(match.from, match.to, this.buffer, this.bufferStart))\n match = null;\n return match;\n }\n}\nif (typeof Symbol != \"undefined\")\n SearchCursor.prototype[Symbol.iterator] = function () { return this; };\n\nconst empty = { from: -1, to: -1, match: /*@__PURE__*//.*/.exec(\"\") };\nconst baseFlags = \"gm\" + (/x/.unicode == null ? \"\" : \"u\");\n/**\nThis class is similar to [`SearchCursor`](https://codemirror.net/6/docs/ref/#search.SearchCursor)\nbut searches for a regular expression pattern instead of a plain\nstring.\n*/\nclass RegExpCursor {\n /**\n Create a cursor that will search the given range in the given\n document. `query` should be the raw pattern (as you'd pass it to\n `new RegExp`).\n */\n constructor(text, query, options, from = 0, to = text.length) {\n this.text = text;\n this.to = to;\n this.curLine = \"\";\n /**\n Set to `true` when the cursor has reached the end of the search\n range.\n */\n this.done = false;\n /**\n Will contain an object with the extent of the match and the\n match object when [`next`](https://codemirror.net/6/docs/ref/#search.RegExpCursor.next)\n sucessfully finds a match.\n */\n this.value = empty;\n if (/\\\\[sWDnr]|\\n|\\r|\\[\\^/.test(query))\n return new MultilineRegExpCursor(text, query, options, from, to);\n this.re = new RegExp(query, baseFlags + ((options === null || options === void 0 ? void 0 : options.ignoreCase) ? \"i\" : \"\"));\n this.test = options === null || options === void 0 ? void 0 : options.test;\n this.iter = text.iter();\n let startLine = text.lineAt(from);\n this.curLineStart = startLine.from;\n this.matchPos = toCharEnd(text, from);\n this.getLine(this.curLineStart);\n }\n getLine(skip) {\n this.iter.next(skip);\n if (this.iter.lineBreak) {\n this.curLine = \"\";\n }\n else {\n this.curLine = this.iter.value;\n if (this.curLineStart + this.curLine.length > this.to)\n this.curLine = this.curLine.slice(0, this.to - this.curLineStart);\n this.iter.next();\n }\n }\n nextLine() {\n this.curLineStart = this.curLineStart + this.curLine.length + 1;\n if (this.curLineStart > this.to)\n this.curLine = \"\";\n else\n this.getLine(0);\n }\n /**\n Move to the next match, if there is one.\n */\n next() {\n for (let off = this.matchPos - this.curLineStart;;) {\n this.re.lastIndex = off;\n let match = this.matchPos <= this.to && this.re.exec(this.curLine);\n if (match) {\n let from = this.curLineStart + match.index, to = from + match[0].length;\n this.matchPos = toCharEnd(this.text, to + (from == to ? 1 : 0));\n if (from == this.curLineStart + this.curLine.length)\n this.nextLine();\n if ((from < to || from > this.value.to) && (!this.test || this.test(from, to, match))) {\n this.value = { from, to, match };\n return this;\n }\n off = this.matchPos - this.curLineStart;\n }\n else if (this.curLineStart + this.curLine.length < this.to) {\n this.nextLine();\n off = 0;\n }\n else {\n this.done = true;\n return this;\n }\n }\n }\n}\nconst flattened = /*@__PURE__*/new WeakMap();\n// Reusable (partially) flattened document strings\nclass FlattenedDoc {\n constructor(from, text) {\n this.from = from;\n this.text = text;\n }\n get to() { return this.from + this.text.length; }\n static get(doc, from, to) {\n let cached = flattened.get(doc);\n if (!cached || cached.from >= to || cached.to <= from) {\n let flat = new FlattenedDoc(from, doc.sliceString(from, to));\n flattened.set(doc, flat);\n return flat;\n }\n if (cached.from == from && cached.to == to)\n return cached;\n let { text, from: cachedFrom } = cached;\n if (cachedFrom > from) {\n text = doc.sliceString(from, cachedFrom) + text;\n cachedFrom = from;\n }\n if (cached.to < to)\n text += doc.sliceString(cached.to, to);\n flattened.set(doc, new FlattenedDoc(cachedFrom, text));\n return new FlattenedDoc(from, text.slice(from - cachedFrom, to - cachedFrom));\n }\n}\nclass MultilineRegExpCursor {\n constructor(text, query, options, from, to) {\n this.text = text;\n this.to = to;\n this.done = false;\n this.value = empty;\n this.matchPos = toCharEnd(text, from);\n this.re = new RegExp(query, baseFlags + ((options === null || options === void 0 ? void 0 : options.ignoreCase) ? \"i\" : \"\"));\n this.test = options === null || options === void 0 ? void 0 : options.test;\n this.flat = FlattenedDoc.get(text, from, this.chunkEnd(from + 5000 /* Chunk.Base */));\n }\n chunkEnd(pos) {\n return pos >= this.to ? this.to : this.text.lineAt(pos).to;\n }\n next() {\n for (;;) {\n let off = this.re.lastIndex = this.matchPos - this.flat.from;\n let match = this.re.exec(this.flat.text);\n // Skip empty matches directly after the last match\n if (match && !match[0] && match.index == off) {\n this.re.lastIndex = off + 1;\n match = this.re.exec(this.flat.text);\n }\n if (match) {\n let from = this.flat.from + match.index, to = from + match[0].length;\n // If a match goes almost to the end of a noncomplete chunk, try\n // again, since it'll likely be able to match more\n if ((this.flat.to >= this.to || match.index + match[0].length <= this.flat.text.length - 10) &&\n (!this.test || this.test(from, to, match))) {\n this.value = { from, to, match };\n this.matchPos = toCharEnd(this.text, to + (from == to ? 1 : 0));\n return this;\n }\n }\n if (this.flat.to == this.to) {\n this.done = true;\n return this;\n }\n // Grow the flattened doc\n this.flat = FlattenedDoc.get(this.text, this.flat.from, this.chunkEnd(this.flat.from + this.flat.text.length * 2));\n }\n }\n}\nif (typeof Symbol != \"undefined\") {\n RegExpCursor.prototype[Symbol.iterator] = MultilineRegExpCursor.prototype[Symbol.iterator] =\n function () { return this; };\n}\nfunction validRegExp(source) {\n try {\n new RegExp(source, baseFlags);\n return true;\n }\n catch (_a) {\n return false;\n }\n}\nfunction toCharEnd(text, pos) {\n if (pos >= text.length)\n return pos;\n let line = text.lineAt(pos), next;\n while (pos < line.to && (next = line.text.charCodeAt(pos - line.from)) >= 0xDC00 && next < 0xE000)\n pos++;\n return pos;\n}\n\nfunction createLineDialog(view) {\n let line = String(view.state.doc.lineAt(view.state.selection.main.head).number);\n let input = elt(\"input\", { class: \"cm-textfield\", name: \"line\", value: line });\n let dom = elt(\"form\", {\n class: \"cm-gotoLine\",\n onkeydown: (event) => {\n if (event.keyCode == 27) { // Escape\n event.preventDefault();\n view.dispatch({ effects: dialogEffect.of(false) });\n view.focus();\n }\n else if (event.keyCode == 13) { // Enter\n event.preventDefault();\n go();\n }\n },\n onsubmit: (event) => {\n event.preventDefault();\n go();\n }\n }, elt(\"label\", view.state.phrase(\"Go to line\"), \": \", input), \" \", elt(\"button\", { class: \"cm-button\", type: \"submit\" }, view.state.phrase(\"go\")));\n function go() {\n let match = /^([+-])?(\\d+)?(:\\d+)?(%)?$/.exec(input.value);\n if (!match)\n return;\n let { state } = view, startLine = state.doc.lineAt(state.selection.main.head);\n let [, sign, ln, cl, percent] = match;\n let col = cl ? +cl.slice(1) : 0;\n let line = ln ? +ln : startLine.number;\n if (ln && percent) {\n let pc = line / 100;\n if (sign)\n pc = pc * (sign == \"-\" ? -1 : 1) + (startLine.number / state.doc.lines);\n line = Math.round(state.doc.lines * pc);\n }\n else if (ln && sign) {\n line = line * (sign == \"-\" ? -1 : 1) + startLine.number;\n }\n let docLine = state.doc.line(Math.max(1, Math.min(state.doc.lines, line)));\n let selection = EditorSelection.cursor(docLine.from + Math.max(0, Math.min(col, docLine.length)));\n view.dispatch({\n effects: [dialogEffect.of(false), EditorView.scrollIntoView(selection.from, { y: 'center' })],\n selection,\n });\n view.focus();\n }\n return { dom };\n}\nconst dialogEffect = /*@__PURE__*/StateEffect.define();\nconst dialogField = /*@__PURE__*/StateField.define({\n create() { return true; },\n update(value, tr) {\n for (let e of tr.effects)\n if (e.is(dialogEffect))\n value = e.value;\n return value;\n },\n provide: f => showPanel.from(f, val => val ? createLineDialog : null)\n});\n/**\nCommand that shows a dialog asking the user for a line number, and\nwhen a valid position is provided, moves the cursor to that line.\n\nSupports line numbers, relative line offsets prefixed with `+` or\n`-`, document percentages suffixed with `%`, and an optional\ncolumn position by adding `:` and a second number after the line\nnumber.\n*/\nconst gotoLine = view => {\n let panel = getPanel(view, createLineDialog);\n if (!panel) {\n let effects = [dialogEffect.of(true)];\n if (view.state.field(dialogField, false) == null)\n effects.push(StateEffect.appendConfig.of([dialogField, baseTheme$1]));\n view.dispatch({ effects });\n panel = getPanel(view, createLineDialog);\n }\n if (panel)\n panel.dom.querySelector(\"input\").select();\n return true;\n};\nconst baseTheme$1 = /*@__PURE__*/EditorView.baseTheme({\n \".cm-panel.cm-gotoLine\": {\n padding: \"2px 6px 4px\",\n \"& label\": { fontSize: \"80%\" }\n }\n});\n\nconst defaultHighlightOptions = {\n highlightWordAroundCursor: false,\n minSelectionLength: 1,\n maxMatches: 100,\n wholeWords: false\n};\nconst highlightConfig = /*@__PURE__*/Facet.define({\n combine(options) {\n return combineConfig(options, defaultHighlightOptions, {\n highlightWordAroundCursor: (a, b) => a || b,\n minSelectionLength: Math.min,\n maxMatches: Math.min\n });\n }\n});\n/**\nThis extension highlights text that matches the selection. It uses\nthe `\"cm-selectionMatch\"` class for the highlighting. When\n`highlightWordAroundCursor` is enabled, the word at the cursor\nitself will be highlighted with `\"cm-selectionMatch-main\"`.\n*/\nfunction highlightSelectionMatches(options) {\n let ext = [defaultTheme, matchHighlighter];\n if (options)\n ext.push(highlightConfig.of(options));\n return ext;\n}\nconst matchDeco = /*@__PURE__*/Decoration.mark({ class: \"cm-selectionMatch\" });\nconst mainMatchDeco = /*@__PURE__*/Decoration.mark({ class: \"cm-selectionMatch cm-selectionMatch-main\" });\n// Whether the characters directly outside the given positions are non-word characters\nfunction insideWordBoundaries(check, state, from, to) {\n return (from == 0 || check(state.sliceDoc(from - 1, from)) != CharCategory.Word) &&\n (to == state.doc.length || check(state.sliceDoc(to, to + 1)) != CharCategory.Word);\n}\n// Whether the characters directly at the given positions are word characters\nfunction insideWord(check, state, from, to) {\n return check(state.sliceDoc(from, from + 1)) == CharCategory.Word\n && check(state.sliceDoc(to - 1, to)) == CharCategory.Word;\n}\nconst matchHighlighter = /*@__PURE__*/ViewPlugin.fromClass(class {\n constructor(view) {\n this.decorations = this.getDeco(view);\n }\n update(update) {\n if (update.selectionSet || update.docChanged || update.viewportChanged)\n this.decorations = this.getDeco(update.view);\n }\n getDeco(view) {\n let conf = view.state.facet(highlightConfig);\n let { state } = view, sel = state.selection;\n if (sel.ranges.length > 1)\n return Decoration.none;\n let range = sel.main, query, check = null;\n if (range.empty) {\n if (!conf.highlightWordAroundCursor)\n return Decoration.none;\n let word = state.wordAt(range.head);\n if (!word)\n return Decoration.none;\n check = state.charCategorizer(range.head);\n query = state.sliceDoc(word.from, word.to);\n }\n else {\n let len = range.to - range.from;\n if (len < conf.minSelectionLength || len > 200)\n return Decoration.none;\n if (conf.wholeWords) {\n query = state.sliceDoc(range.from, range.to); // TODO: allow and include leading/trailing space?\n check = state.charCategorizer(range.head);\n if (!(insideWordBoundaries(check, state, range.from, range.to) &&\n insideWord(check, state, range.from, range.to)))\n return Decoration.none;\n }\n else {\n query = state.sliceDoc(range.from, range.to);\n if (!query)\n return Decoration.none;\n }\n }\n let deco = [];\n for (let part of view.visibleRanges) {\n let cursor = new SearchCursor(state.doc, query, part.from, part.to);\n while (!cursor.next().done) {\n let { from, to } = cursor.value;\n if (!check || insideWordBoundaries(check, state, from, to)) {\n if (range.empty && from <= range.from && to >= range.to)\n deco.push(mainMatchDeco.range(from, to));\n else if (from >= range.to || to <= range.from)\n deco.push(matchDeco.range(from, to));\n if (deco.length > conf.maxMatches)\n return Decoration.none;\n }\n }\n }\n return Decoration.set(deco);\n }\n}, {\n decorations: v => v.decorations\n});\nconst defaultTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-selectionMatch\": { backgroundColor: \"#99ff7780\" },\n \".cm-searchMatch .cm-selectionMatch\": { backgroundColor: \"transparent\" }\n});\n// Select the words around the cursors.\nconst selectWord = ({ state, dispatch }) => {\n let { selection } = state;\n let newSel = EditorSelection.create(selection.ranges.map(range => state.wordAt(range.head) || EditorSelection.cursor(range.head)), selection.mainIndex);\n if (newSel.eq(selection))\n return false;\n dispatch(state.update({ selection: newSel }));\n return true;\n};\n// Find next occurrence of query relative to last cursor. Wrap around\n// the document if there are no more matches.\nfunction findNextOccurrence(state, query) {\n let { main, ranges } = state.selection;\n let word = state.wordAt(main.head), fullWord = word && word.from == main.from && word.to == main.to;\n for (let cycled = false, cursor = new SearchCursor(state.doc, query, ranges[ranges.length - 1].to);;) {\n cursor.next();\n if (cursor.done) {\n if (cycled)\n return null;\n cursor = new SearchCursor(state.doc, query, 0, Math.max(0, ranges[ranges.length - 1].from - 1));\n cycled = true;\n }\n else {\n if (cycled && ranges.some(r => r.from == cursor.value.from))\n continue;\n if (fullWord) {\n let word = state.wordAt(cursor.value.from);\n if (!word || word.from != cursor.value.from || word.to != cursor.value.to)\n continue;\n }\n return cursor.value;\n }\n }\n}\n/**\nSelect next occurrence of the current selection. Expand selection\nto the surrounding word when the selection is empty.\n*/\nconst selectNextOccurrence = ({ state, dispatch }) => {\n let { ranges } = state.selection;\n if (ranges.some(sel => sel.from === sel.to))\n return selectWord({ state, dispatch });\n let searchedText = state.sliceDoc(ranges[0].from, ranges[0].to);\n if (state.selection.ranges.some(r => state.sliceDoc(r.from, r.to) != searchedText))\n return false;\n let range = findNextOccurrence(state, searchedText);\n if (!range)\n return false;\n dispatch(state.update({\n selection: state.selection.addRange(EditorSelection.range(range.from, range.to), false),\n effects: EditorView.scrollIntoView(range.to)\n }));\n return true;\n};\n\nconst searchConfigFacet = /*@__PURE__*/Facet.define({\n combine(configs) {\n return combineConfig(configs, {\n top: false,\n caseSensitive: false,\n literal: false,\n regexp: false,\n wholeWord: false,\n createPanel: view => new SearchPanel(view),\n scrollToMatch: range => EditorView.scrollIntoView(range)\n });\n }\n});\n/**\nAdd search state to the editor configuration, and optionally\nconfigure the search extension.\n([`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel) will automatically\nenable this if it isn't already on).\n*/\nfunction search(config) {\n return config ? [searchConfigFacet.of(config), searchExtensions] : searchExtensions;\n}\n/**\nA search query. Part of the editor's search state.\n*/\nclass SearchQuery {\n /**\n Create a query object.\n */\n constructor(config) {\n this.search = config.search;\n this.caseSensitive = !!config.caseSensitive;\n this.literal = !!config.literal;\n this.regexp = !!config.regexp;\n this.replace = config.replace || \"\";\n this.valid = !!this.search && (!this.regexp || validRegExp(this.search));\n this.unquoted = this.unquote(this.search);\n this.wholeWord = !!config.wholeWord;\n }\n /**\n @internal\n */\n unquote(text) {\n return this.literal ? text :\n text.replace(/\\\\([nrt\\\\])/g, (_, ch) => ch == \"n\" ? \"\\n\" : ch == \"r\" ? \"\\r\" : ch == \"t\" ? \"\\t\" : \"\\\\\");\n }\n /**\n Compare this query to another query.\n */\n eq(other) {\n return this.search == other.search && this.replace == other.replace &&\n this.caseSensitive == other.caseSensitive && this.regexp == other.regexp &&\n this.wholeWord == other.wholeWord;\n }\n /**\n @internal\n */\n create() {\n return this.regexp ? new RegExpQuery(this) : new StringQuery(this);\n }\n /**\n Get a search cursor for this query, searching through the given\n range in the given state.\n */\n getCursor(state, from = 0, to) {\n let st = state.doc ? state : EditorState.create({ doc: state });\n if (to == null)\n to = st.doc.length;\n return this.regexp ? regexpCursor(this, st, from, to) : stringCursor(this, st, from, to);\n }\n}\nclass QueryType {\n constructor(spec) {\n this.spec = spec;\n }\n}\nfunction stringCursor(spec, state, from, to) {\n return new SearchCursor(state.doc, spec.unquoted, from, to, spec.caseSensitive ? undefined : x => x.toLowerCase(), spec.wholeWord ? stringWordTest(state.doc, state.charCategorizer(state.selection.main.head)) : undefined);\n}\nfunction stringWordTest(doc, categorizer) {\n return (from, to, buf, bufPos) => {\n if (bufPos > from || bufPos + buf.length < to) {\n bufPos = Math.max(0, from - 2);\n buf = doc.sliceString(bufPos, Math.min(doc.length, to + 2));\n }\n return (categorizer(charBefore(buf, from - bufPos)) != CharCategory.Word ||\n categorizer(charAfter(buf, from - bufPos)) != CharCategory.Word) &&\n (categorizer(charAfter(buf, to - bufPos)) != CharCategory.Word ||\n categorizer(charBefore(buf, to - bufPos)) != CharCategory.Word);\n };\n}\nclass StringQuery extends QueryType {\n constructor(spec) {\n super(spec);\n }\n nextMatch(state, curFrom, curTo) {\n let cursor = stringCursor(this.spec, state, curTo, state.doc.length).nextOverlapping();\n if (cursor.done)\n cursor = stringCursor(this.spec, state, 0, curFrom).nextOverlapping();\n return cursor.done ? null : cursor.value;\n }\n // Searching in reverse is, rather than implementing an inverted search\n // cursor, done by scanning chunk after chunk forward.\n prevMatchInRange(state, from, to) {\n for (let pos = to;;) {\n let start = Math.max(from, pos - 10000 /* FindPrev.ChunkSize */ - this.spec.unquoted.length);\n let cursor = stringCursor(this.spec, state, start, pos), range = null;\n while (!cursor.nextOverlapping().done)\n range = cursor.value;\n if (range)\n return range;\n if (start == from)\n return null;\n pos -= 10000 /* FindPrev.ChunkSize */;\n }\n }\n prevMatch(state, curFrom, curTo) {\n return this.prevMatchInRange(state, 0, curFrom) ||\n this.prevMatchInRange(state, curTo, state.doc.length);\n }\n getReplacement(_result) { return this.spec.unquote(this.spec.replace); }\n matchAll(state, limit) {\n let cursor = stringCursor(this.spec, state, 0, state.doc.length), ranges = [];\n while (!cursor.next().done) {\n if (ranges.length >= limit)\n return null;\n ranges.push(cursor.value);\n }\n return ranges;\n }\n highlight(state, from, to, add) {\n let cursor = stringCursor(this.spec, state, Math.max(0, from - this.spec.unquoted.length), Math.min(to + this.spec.unquoted.length, state.doc.length));\n while (!cursor.next().done)\n add(cursor.value.from, cursor.value.to);\n }\n}\nfunction regexpCursor(spec, state, from, to) {\n return new RegExpCursor(state.doc, spec.search, {\n ignoreCase: !spec.caseSensitive,\n test: spec.wholeWord ? regexpWordTest(state.charCategorizer(state.selection.main.head)) : undefined\n }, from, to);\n}\nfunction charBefore(str, index) {\n return str.slice(findClusterBreak(str, index, false), index);\n}\nfunction charAfter(str, index) {\n return str.slice(index, findClusterBreak(str, index));\n}\nfunction regexpWordTest(categorizer) {\n return (_from, _to, match) => !match[0].length ||\n (categorizer(charBefore(match.input, match.index)) != CharCategory.Word ||\n categorizer(charAfter(match.input, match.index)) != CharCategory.Word) &&\n (categorizer(charAfter(match.input, match.index + match[0].length)) != CharCategory.Word ||\n categorizer(charBefore(match.input, match.index + match[0].length)) != CharCategory.Word);\n}\nclass RegExpQuery extends QueryType {\n nextMatch(state, curFrom, curTo) {\n let cursor = regexpCursor(this.spec, state, curTo, state.doc.length).next();\n if (cursor.done)\n cursor = regexpCursor(this.spec, state, 0, curFrom).next();\n return cursor.done ? null : cursor.value;\n }\n prevMatchInRange(state, from, to) {\n for (let size = 1;; size++) {\n let start = Math.max(from, to - size * 10000 /* FindPrev.ChunkSize */);\n let cursor = regexpCursor(this.spec, state, start, to), range = null;\n while (!cursor.next().done)\n range = cursor.value;\n if (range && (start == from || range.from > start + 10))\n return range;\n if (start == from)\n return null;\n }\n }\n prevMatch(state, curFrom, curTo) {\n return this.prevMatchInRange(state, 0, curFrom) ||\n this.prevMatchInRange(state, curTo, state.doc.length);\n }\n getReplacement(result) {\n return this.spec.unquote(this.spec.replace).replace(/\\$([$&\\d+])/g, (m, i) => i == \"$\" ? \"$\"\n : i == \"&\" ? result.match[0]\n : i != \"0\" && +i < result.match.length ? result.match[i]\n : m);\n }\n matchAll(state, limit) {\n let cursor = regexpCursor(this.spec, state, 0, state.doc.length), ranges = [];\n while (!cursor.next().done) {\n if (ranges.length >= limit)\n return null;\n ranges.push(cursor.value);\n }\n return ranges;\n }\n highlight(state, from, to, add) {\n let cursor = regexpCursor(this.spec, state, Math.max(0, from - 250 /* RegExp.HighlightMargin */), Math.min(to + 250 /* RegExp.HighlightMargin */, state.doc.length));\n while (!cursor.next().done)\n add(cursor.value.from, cursor.value.to);\n }\n}\n/**\nA state effect that updates the current search query. Note that\nthis only has an effect if the search state has been initialized\n(by including [`search`](https://codemirror.net/6/docs/ref/#search.search) in your configuration or\nby running [`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel) at least\nonce).\n*/\nconst setSearchQuery = /*@__PURE__*/StateEffect.define();\nconst togglePanel = /*@__PURE__*/StateEffect.define();\nconst searchState = /*@__PURE__*/StateField.define({\n create(state) {\n return new SearchState(defaultQuery(state).create(), null);\n },\n update(value, tr) {\n for (let effect of tr.effects) {\n if (effect.is(setSearchQuery))\n value = new SearchState(effect.value.create(), value.panel);\n else if (effect.is(togglePanel))\n value = new SearchState(value.query, effect.value ? createSearchPanel : null);\n }\n return value;\n },\n provide: f => showPanel.from(f, val => val.panel)\n});\n/**\nGet the current search query from an editor state.\n*/\nfunction getSearchQuery(state) {\n let curState = state.field(searchState, false);\n return curState ? curState.query.spec : defaultQuery(state);\n}\n/**\nQuery whether the search panel is open in the given editor state.\n*/\nfunction searchPanelOpen(state) {\n var _a;\n return ((_a = state.field(searchState, false)) === null || _a === void 0 ? void 0 : _a.panel) != null;\n}\nclass SearchState {\n constructor(query, panel) {\n this.query = query;\n this.panel = panel;\n }\n}\nconst matchMark = /*@__PURE__*/Decoration.mark({ class: \"cm-searchMatch\" }), selectedMatchMark = /*@__PURE__*/Decoration.mark({ class: \"cm-searchMatch cm-searchMatch-selected\" });\nconst searchHighlighter = /*@__PURE__*/ViewPlugin.fromClass(class {\n constructor(view) {\n this.view = view;\n this.decorations = this.highlight(view.state.field(searchState));\n }\n update(update) {\n let state = update.state.field(searchState);\n if (state != update.startState.field(searchState) || update.docChanged || update.selectionSet || update.viewportChanged)\n this.decorations = this.highlight(state);\n }\n highlight({ query, panel }) {\n if (!panel || !query.spec.valid)\n return Decoration.none;\n let { view } = this;\n let builder = new RangeSetBuilder();\n for (let i = 0, ranges = view.visibleRanges, l = ranges.length; i < l; i++) {\n let { from, to } = ranges[i];\n while (i < l - 1 && to > ranges[i + 1].from - 2 * 250 /* RegExp.HighlightMargin */)\n to = ranges[++i].to;\n query.highlight(view.state, from, to, (from, to) => {\n let selected = view.state.selection.ranges.some(r => r.from == from && r.to == to);\n builder.add(from, to, selected ? selectedMatchMark : matchMark);\n });\n }\n return builder.finish();\n }\n}, {\n decorations: v => v.decorations\n});\nfunction searchCommand(f) {\n return view => {\n let state = view.state.field(searchState, false);\n return state && state.query.spec.valid ? f(view, state) : openSearchPanel(view);\n };\n}\n/**\nOpen the search panel if it isn't already open, and move the\nselection to the first match after the current main selection.\nWill wrap around to the start of the document when it reaches the\nend.\n*/\nconst findNext = /*@__PURE__*/searchCommand((view, { query }) => {\n let { to } = view.state.selection.main;\n let next = query.nextMatch(view.state, to, to);\n if (!next)\n return false;\n let selection = EditorSelection.single(next.from, next.to);\n let config = view.state.facet(searchConfigFacet);\n view.dispatch({\n selection,\n effects: [announceMatch(view, next), config.scrollToMatch(selection.main, view)],\n userEvent: \"select.search\"\n });\n selectSearchInput(view);\n return true;\n});\n/**\nMove the selection to the previous instance of the search query,\nbefore the current main selection. Will wrap past the start\nof the document to start searching at the end again.\n*/\nconst findPrevious = /*@__PURE__*/searchCommand((view, { query }) => {\n let { state } = view, { from } = state.selection.main;\n let prev = query.prevMatch(state, from, from);\n if (!prev)\n return false;\n let selection = EditorSelection.single(prev.from, prev.to);\n let config = view.state.facet(searchConfigFacet);\n view.dispatch({\n selection,\n effects: [announceMatch(view, prev), config.scrollToMatch(selection.main, view)],\n userEvent: \"select.search\"\n });\n selectSearchInput(view);\n return true;\n});\n/**\nSelect all instances of the search query.\n*/\nconst selectMatches = /*@__PURE__*/searchCommand((view, { query }) => {\n let ranges = query.matchAll(view.state, 1000);\n if (!ranges || !ranges.length)\n return false;\n view.dispatch({\n selection: EditorSelection.create(ranges.map(r => EditorSelection.range(r.from, r.to))),\n userEvent: \"select.search.matches\"\n });\n return true;\n});\n/**\nSelect all instances of the currently selected text.\n*/\nconst selectSelectionMatches = ({ state, dispatch }) => {\n let sel = state.selection;\n if (sel.ranges.length > 1 || sel.main.empty)\n return false;\n let { from, to } = sel.main;\n let ranges = [], main = 0;\n for (let cur = new SearchCursor(state.doc, state.sliceDoc(from, to)); !cur.next().done;) {\n if (ranges.length > 1000)\n return false;\n if (cur.value.from == from)\n main = ranges.length;\n ranges.push(EditorSelection.range(cur.value.from, cur.value.to));\n }\n dispatch(state.update({\n selection: EditorSelection.create(ranges, main),\n userEvent: \"select.search.matches\"\n }));\n return true;\n};\n/**\nReplace the current match of the search query.\n*/\nconst replaceNext = /*@__PURE__*/searchCommand((view, { query }) => {\n let { state } = view, { from, to } = state.selection.main;\n if (state.readOnly)\n return false;\n let next = query.nextMatch(state, from, from);\n if (!next)\n return false;\n let changes = [], selection, replacement;\n let effects = [];\n if (next.from == from && next.to == to) {\n replacement = state.toText(query.getReplacement(next));\n changes.push({ from: next.from, to: next.to, insert: replacement });\n next = query.nextMatch(state, next.from, next.to);\n effects.push(EditorView.announce.of(state.phrase(\"replaced match on line $\", state.doc.lineAt(from).number) + \".\"));\n }\n if (next) {\n let off = changes.length == 0 || changes[0].from >= next.to ? 0 : next.to - next.from - replacement.length;\n selection = EditorSelection.single(next.from - off, next.to - off);\n effects.push(announceMatch(view, next));\n effects.push(state.facet(searchConfigFacet).scrollToMatch(selection.main, view));\n }\n view.dispatch({\n changes, selection, effects,\n userEvent: \"input.replace\"\n });\n return true;\n});\n/**\nReplace all instances of the search query with the given\nreplacement.\n*/\nconst replaceAll = /*@__PURE__*/searchCommand((view, { query }) => {\n if (view.state.readOnly)\n return false;\n let changes = query.matchAll(view.state, 1e9).map(match => {\n let { from, to } = match;\n return { from, to, insert: query.getReplacement(match) };\n });\n if (!changes.length)\n return false;\n let announceText = view.state.phrase(\"replaced $ matches\", changes.length) + \".\";\n view.dispatch({\n changes,\n effects: EditorView.announce.of(announceText),\n userEvent: \"input.replace.all\"\n });\n return true;\n});\nfunction createSearchPanel(view) {\n return view.state.facet(searchConfigFacet).createPanel(view);\n}\nfunction defaultQuery(state, fallback) {\n var _a, _b, _c, _d, _e;\n let sel = state.selection.main;\n let selText = sel.empty || sel.to > sel.from + 100 ? \"\" : state.sliceDoc(sel.from, sel.to);\n if (fallback && !selText)\n return fallback;\n let config = state.facet(searchConfigFacet);\n return new SearchQuery({\n search: ((_a = fallback === null || fallback === void 0 ? void 0 : fallback.literal) !== null && _a !== void 0 ? _a : config.literal) ? selText : selText.replace(/\\n/g, \"\\\\n\"),\n caseSensitive: (_b = fallback === null || fallback === void 0 ? void 0 : fallback.caseSensitive) !== null && _b !== void 0 ? _b : config.caseSensitive,\n literal: (_c = fallback === null || fallback === void 0 ? void 0 : fallback.literal) !== null && _c !== void 0 ? _c : config.literal,\n regexp: (_d = fallback === null || fallback === void 0 ? void 0 : fallback.regexp) !== null && _d !== void 0 ? _d : config.regexp,\n wholeWord: (_e = fallback === null || fallback === void 0 ? void 0 : fallback.wholeWord) !== null && _e !== void 0 ? _e : config.wholeWord\n });\n}\nfunction getSearchInput(view) {\n let panel = getPanel(view, createSearchPanel);\n return panel && panel.dom.querySelector(\"[main-field]\");\n}\nfunction selectSearchInput(view) {\n let input = getSearchInput(view);\n if (input && input == view.root.activeElement)\n input.select();\n}\n/**\nMake sure the search panel is open and focused.\n*/\nconst openSearchPanel = view => {\n let state = view.state.field(searchState, false);\n if (state && state.panel) {\n let searchInput = getSearchInput(view);\n if (searchInput && searchInput != view.root.activeElement) {\n let query = defaultQuery(view.state, state.query.spec);\n if (query.valid)\n view.dispatch({ effects: setSearchQuery.of(query) });\n searchInput.focus();\n searchInput.select();\n }\n }\n else {\n view.dispatch({ effects: [\n togglePanel.of(true),\n state ? setSearchQuery.of(defaultQuery(view.state, state.query.spec)) : StateEffect.appendConfig.of(searchExtensions)\n ] });\n }\n return true;\n};\n/**\nClose the search panel.\n*/\nconst closeSearchPanel = view => {\n let state = view.state.field(searchState, false);\n if (!state || !state.panel)\n return false;\n let panel = getPanel(view, createSearchPanel);\n if (panel && panel.dom.contains(view.root.activeElement))\n view.focus();\n view.dispatch({ effects: togglePanel.of(false) });\n return true;\n};\n/**\nDefault search-related key bindings.\n\n - Mod-f: [`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel)\n - F3, Mod-g: [`findNext`](https://codemirror.net/6/docs/ref/#search.findNext)\n - Shift-F3, Shift-Mod-g: [`findPrevious`](https://codemirror.net/6/docs/ref/#search.findPrevious)\n - Mod-Alt-g: [`gotoLine`](https://codemirror.net/6/docs/ref/#search.gotoLine)\n - Mod-d: [`selectNextOccurrence`](https://codemirror.net/6/docs/ref/#search.selectNextOccurrence)\n*/\nconst searchKeymap = [\n { key: \"Mod-f\", run: openSearchPanel, scope: \"editor search-panel\" },\n { key: \"F3\", run: findNext, shift: findPrevious, scope: \"editor search-panel\", preventDefault: true },\n { key: \"Mod-g\", run: findNext, shift: findPrevious, scope: \"editor search-panel\", preventDefault: true },\n { key: \"Escape\", run: closeSearchPanel, scope: \"editor search-panel\" },\n { key: \"Mod-Shift-l\", run: selectSelectionMatches },\n { key: \"Mod-Alt-g\", run: gotoLine },\n { key: \"Mod-d\", run: selectNextOccurrence, preventDefault: true },\n];\nclass SearchPanel {\n constructor(view) {\n this.view = view;\n let query = this.query = view.state.field(searchState).query.spec;\n this.commit = this.commit.bind(this);\n this.searchField = elt(\"input\", {\n value: query.search,\n placeholder: phrase(view, \"Find\"),\n \"aria-label\": phrase(view, \"Find\"),\n class: \"cm-textfield\",\n name: \"search\",\n form: \"\",\n \"main-field\": \"true\",\n onchange: this.commit,\n onkeyup: this.commit\n });\n this.replaceField = elt(\"input\", {\n value: query.replace,\n placeholder: phrase(view, \"Replace\"),\n \"aria-label\": phrase(view, \"Replace\"),\n class: \"cm-textfield\",\n name: \"replace\",\n form: \"\",\n onchange: this.commit,\n onkeyup: this.commit\n });\n this.caseField = elt(\"input\", {\n type: \"checkbox\",\n name: \"case\",\n form: \"\",\n checked: query.caseSensitive,\n onchange: this.commit\n });\n this.reField = elt(\"input\", {\n type: \"checkbox\",\n name: \"re\",\n form: \"\",\n checked: query.regexp,\n onchange: this.commit\n });\n this.wordField = elt(\"input\", {\n type: \"checkbox\",\n name: \"word\",\n form: \"\",\n checked: query.wholeWord,\n onchange: this.commit\n });\n function button(name, onclick, content) {\n return elt(\"button\", { class: \"cm-button\", name, onclick, type: \"button\" }, content);\n }\n this.dom = elt(\"div\", { onkeydown: (e) => this.keydown(e), class: \"cm-search\" }, [\n this.searchField,\n button(\"next\", () => findNext(view), [phrase(view, \"next\")]),\n button(\"prev\", () => findPrevious(view), [phrase(view, \"previous\")]),\n button(\"select\", () => selectMatches(view), [phrase(view, \"all\")]),\n elt(\"label\", null, [this.caseField, phrase(view, \"match case\")]),\n elt(\"label\", null, [this.reField, phrase(view, \"regexp\")]),\n elt(\"label\", null, [this.wordField, phrase(view, \"by word\")]),\n ...view.state.readOnly ? [] : [\n elt(\"br\"),\n this.replaceField,\n button(\"replace\", () => replaceNext(view), [phrase(view, \"replace\")]),\n button(\"replaceAll\", () => replaceAll(view), [phrase(view, \"replace all\")])\n ],\n elt(\"button\", {\n name: \"close\",\n onclick: () => closeSearchPanel(view),\n \"aria-label\": phrase(view, \"close\"),\n type: \"button\"\n }, [\"×\"])\n ]);\n }\n commit() {\n let query = new SearchQuery({\n search: this.searchField.value,\n caseSensitive: this.caseField.checked,\n regexp: this.reField.checked,\n wholeWord: this.wordField.checked,\n replace: this.replaceField.value,\n });\n if (!query.eq(this.query)) {\n this.query = query;\n this.view.dispatch({ effects: setSearchQuery.of(query) });\n }\n }\n keydown(e) {\n if (runScopeHandlers(this.view, e, \"search-panel\")) {\n e.preventDefault();\n }\n else if (e.keyCode == 13 && e.target == this.searchField) {\n e.preventDefault();\n (e.shiftKey ? findPrevious : findNext)(this.view);\n }\n else if (e.keyCode == 13 && e.target == this.replaceField) {\n e.preventDefault();\n replaceNext(this.view);\n }\n }\n update(update) {\n for (let tr of update.transactions)\n for (let effect of tr.effects) {\n if (effect.is(setSearchQuery) && !effect.value.eq(this.query))\n this.setQuery(effect.value);\n }\n }\n setQuery(query) {\n this.query = query;\n this.searchField.value = query.search;\n this.replaceField.value = query.replace;\n this.caseField.checked = query.caseSensitive;\n this.reField.checked = query.regexp;\n this.wordField.checked = query.wholeWord;\n }\n mount() {\n this.searchField.select();\n }\n get pos() { return 80; }\n get top() { return this.view.state.facet(searchConfigFacet).top; }\n}\nfunction phrase(view, phrase) { return view.state.phrase(phrase); }\nconst AnnounceMargin = 30;\nconst Break = /[\\s\\.,:;?!]/;\nfunction announceMatch(view, { from, to }) {\n let line = view.state.doc.lineAt(from), lineEnd = view.state.doc.lineAt(to).to;\n let start = Math.max(line.from, from - AnnounceMargin), end = Math.min(lineEnd, to + AnnounceMargin);\n let text = view.state.sliceDoc(start, end);\n if (start != line.from) {\n for (let i = 0; i < AnnounceMargin; i++)\n if (!Break.test(text[i + 1]) && Break.test(text[i])) {\n text = text.slice(i);\n break;\n }\n }\n if (end != lineEnd) {\n for (let i = text.length - 1; i > text.length - AnnounceMargin; i--)\n if (!Break.test(text[i - 1]) && Break.test(text[i])) {\n text = text.slice(0, i);\n break;\n }\n }\n return EditorView.announce.of(`${view.state.phrase(\"current match\")}. ${text} ${view.state.phrase(\"on line\")} ${line.number}.`);\n}\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-panel.cm-search\": {\n padding: \"2px 6px 4px\",\n position: \"relative\",\n \"& [name=close]\": {\n position: \"absolute\",\n top: \"0\",\n right: \"4px\",\n backgroundColor: \"inherit\",\n border: \"none\",\n font: \"inherit\",\n padding: 0,\n margin: 0\n },\n \"& input, & button, & label\": {\n margin: \".2em .6em .2em 0\"\n },\n \"& input[type=checkbox]\": {\n marginRight: \".2em\"\n },\n \"& label\": {\n fontSize: \"80%\",\n whiteSpace: \"pre\"\n }\n },\n \"&light .cm-searchMatch\": { backgroundColor: \"#ffff0054\" },\n \"&dark .cm-searchMatch\": { backgroundColor: \"#00ffff8a\" },\n \"&light .cm-searchMatch-selected\": { backgroundColor: \"#ff6a0054\" },\n \"&dark .cm-searchMatch-selected\": { backgroundColor: \"#ff00ff8a\" }\n});\nconst searchExtensions = [\n searchState,\n /*@__PURE__*/Prec.low(searchHighlighter),\n baseTheme\n];\n\nexport { RegExpCursor, SearchCursor, SearchQuery, closeSearchPanel, findNext, findPrevious, getSearchQuery, gotoLine, highlightSelectionMatches, openSearchPanel, replaceAll, replaceNext, search, searchKeymap, searchPanelOpen, selectMatches, selectNextOccurrence, selectSelectionMatches, setSearchQuery };\n","import { Decoration, showPanel, EditorView, ViewPlugin, logException, gutter, showTooltip, hoverTooltip, getPanel, WidgetType, GutterMarker } from '@codemirror/view';\nimport { StateEffect, StateField, Facet, combineConfig, RangeSet } from '@codemirror/state';\nimport elt from 'crelt';\n\nclass SelectedDiagnostic {\n constructor(from, to, diagnostic) {\n this.from = from;\n this.to = to;\n this.diagnostic = diagnostic;\n }\n}\nclass LintState {\n constructor(diagnostics, panel, selected) {\n this.diagnostics = diagnostics;\n this.panel = panel;\n this.selected = selected;\n }\n static init(diagnostics, panel, state) {\n // Filter the list of diagnostics for which to create markers\n let markedDiagnostics = diagnostics;\n let diagnosticFilter = state.facet(lintConfig).markerFilter;\n if (diagnosticFilter)\n markedDiagnostics = diagnosticFilter(markedDiagnostics, state);\n let ranges = Decoration.set(markedDiagnostics.map((d) => {\n // For zero-length ranges or ranges covering only a line break, create a widget\n return d.from == d.to || (d.from == d.to - 1 && state.doc.lineAt(d.from).to == d.from)\n ? Decoration.widget({\n widget: new DiagnosticWidget(d),\n diagnostic: d\n }).range(d.from)\n : Decoration.mark({\n attributes: { class: \"cm-lintRange cm-lintRange-\" + d.severity + (d.markClass ? \" \" + d.markClass : \"\") },\n diagnostic: d,\n inclusive: true\n }).range(d.from, d.to);\n }), true);\n return new LintState(ranges, panel, findDiagnostic(ranges));\n }\n}\nfunction findDiagnostic(diagnostics, diagnostic = null, after = 0) {\n let found = null;\n diagnostics.between(after, 1e9, (from, to, { spec }) => {\n if (diagnostic && spec.diagnostic != diagnostic)\n return;\n found = new SelectedDiagnostic(from, to, spec.diagnostic);\n return false;\n });\n return found;\n}\nfunction hideTooltip(tr, tooltip) {\n let line = tr.startState.doc.lineAt(tooltip.pos);\n return !!(tr.effects.some(e => e.is(setDiagnosticsEffect)) || tr.changes.touchesRange(line.from, line.to));\n}\nfunction maybeEnableLint(state, effects) {\n return state.field(lintState, false) ? effects : effects.concat(StateEffect.appendConfig.of(lintExtensions));\n}\n/**\nReturns a transaction spec which updates the current set of\ndiagnostics, and enables the lint extension if if wasn't already\nactive.\n*/\nfunction setDiagnostics(state, diagnostics) {\n return {\n effects: maybeEnableLint(state, [setDiagnosticsEffect.of(diagnostics)])\n };\n}\n/**\nThe state effect that updates the set of active diagnostics. Can\nbe useful when writing an extension that needs to track these.\n*/\nconst setDiagnosticsEffect = /*@__PURE__*/StateEffect.define();\nconst togglePanel = /*@__PURE__*/StateEffect.define();\nconst movePanelSelection = /*@__PURE__*/StateEffect.define();\nconst lintState = /*@__PURE__*/StateField.define({\n create() {\n return new LintState(Decoration.none, null, null);\n },\n update(value, tr) {\n if (tr.docChanged) {\n let mapped = value.diagnostics.map(tr.changes), selected = null;\n if (value.selected) {\n let selPos = tr.changes.mapPos(value.selected.from, 1);\n selected = findDiagnostic(mapped, value.selected.diagnostic, selPos) || findDiagnostic(mapped, null, selPos);\n }\n value = new LintState(mapped, value.panel, selected);\n }\n for (let effect of tr.effects) {\n if (effect.is(setDiagnosticsEffect)) {\n value = LintState.init(effect.value, value.panel, tr.state);\n }\n else if (effect.is(togglePanel)) {\n value = new LintState(value.diagnostics, effect.value ? LintPanel.open : null, value.selected);\n }\n else if (effect.is(movePanelSelection)) {\n value = new LintState(value.diagnostics, value.panel, effect.value);\n }\n }\n return value;\n },\n provide: f => [showPanel.from(f, val => val.panel),\n EditorView.decorations.from(f, s => s.diagnostics)]\n});\n/**\nReturns the number of active lint diagnostics in the given state.\n*/\nfunction diagnosticCount(state) {\n let lint = state.field(lintState, false);\n return lint ? lint.diagnostics.size : 0;\n}\nconst activeMark = /*@__PURE__*/Decoration.mark({ class: \"cm-lintRange cm-lintRange-active\", inclusive: true });\nfunction lintTooltip(view, pos, side) {\n let { diagnostics } = view.state.field(lintState);\n let found = [], stackStart = 2e8, stackEnd = 0;\n diagnostics.between(pos - (side < 0 ? 1 : 0), pos + (side > 0 ? 1 : 0), (from, to, { spec }) => {\n if (pos >= from && pos <= to &&\n (from == to || ((pos > from || side > 0) && (pos < to || side < 0)))) {\n found.push(spec.diagnostic);\n stackStart = Math.min(from, stackStart);\n stackEnd = Math.max(to, stackEnd);\n }\n });\n let diagnosticFilter = view.state.facet(lintConfig).tooltipFilter;\n if (diagnosticFilter)\n found = diagnosticFilter(found, view.state);\n if (!found.length)\n return null;\n return {\n pos: stackStart,\n end: stackEnd,\n above: view.state.doc.lineAt(stackStart).to < stackEnd,\n create() {\n return { dom: diagnosticsTooltip(view, found) };\n }\n };\n}\nfunction diagnosticsTooltip(view, diagnostics) {\n return elt(\"ul\", { class: \"cm-tooltip-lint\" }, diagnostics.map(d => renderDiagnostic(view, d, false)));\n}\n/**\nCommand to open and focus the lint panel.\n*/\nconst openLintPanel = (view) => {\n let field = view.state.field(lintState, false);\n if (!field || !field.panel)\n view.dispatch({ effects: maybeEnableLint(view.state, [togglePanel.of(true)]) });\n let panel = getPanel(view, LintPanel.open);\n if (panel)\n panel.dom.querySelector(\".cm-panel-lint ul\").focus();\n return true;\n};\n/**\nCommand to close the lint panel, when open.\n*/\nconst closeLintPanel = (view) => {\n let field = view.state.field(lintState, false);\n if (!field || !field.panel)\n return false;\n view.dispatch({ effects: togglePanel.of(false) });\n return true;\n};\n/**\nMove the selection to the next diagnostic.\n*/\nconst nextDiagnostic = (view) => {\n let field = view.state.field(lintState, false);\n if (!field)\n return false;\n let sel = view.state.selection.main, next = field.diagnostics.iter(sel.to + 1);\n if (!next.value) {\n next = field.diagnostics.iter(0);\n if (!next.value || next.from == sel.from && next.to == sel.to)\n return false;\n }\n view.dispatch({ selection: { anchor: next.from, head: next.to }, scrollIntoView: true });\n return true;\n};\n/**\nMove the selection to the previous diagnostic.\n*/\nconst previousDiagnostic = (view) => {\n let { state } = view, field = state.field(lintState, false);\n if (!field)\n return false;\n let sel = state.selection.main;\n let prevFrom, prevTo, lastFrom, lastTo;\n field.diagnostics.between(0, state.doc.length, (from, to) => {\n if (to < sel.to && (prevFrom == null || prevFrom < from)) {\n prevFrom = from;\n prevTo = to;\n }\n if (lastFrom == null || from > lastFrom) {\n lastFrom = from;\n lastTo = to;\n }\n });\n if (lastFrom == null || prevFrom == null && lastFrom == sel.from)\n return false;\n view.dispatch({ selection: { anchor: prevFrom !== null && prevFrom !== void 0 ? prevFrom : lastFrom, head: prevTo !== null && prevTo !== void 0 ? prevTo : lastTo }, scrollIntoView: true });\n return true;\n};\n/**\nA set of default key bindings for the lint functionality.\n\n- Ctrl-Shift-m (Cmd-Shift-m on macOS): [`openLintPanel`](https://codemirror.net/6/docs/ref/#lint.openLintPanel)\n- F8: [`nextDiagnostic`](https://codemirror.net/6/docs/ref/#lint.nextDiagnostic)\n*/\nconst lintKeymap = [\n { key: \"Mod-Shift-m\", run: openLintPanel, preventDefault: true },\n { key: \"F8\", run: nextDiagnostic }\n];\nconst lintPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n constructor(view) {\n this.view = view;\n this.timeout = -1;\n this.set = true;\n let { delay } = view.state.facet(lintConfig);\n this.lintTime = Date.now() + delay;\n this.run = this.run.bind(this);\n this.timeout = setTimeout(this.run, delay);\n }\n run() {\n let now = Date.now();\n if (now < this.lintTime - 10) {\n this.timeout = setTimeout(this.run, this.lintTime - now);\n }\n else {\n this.set = false;\n let { state } = this.view, { sources } = state.facet(lintConfig);\n if (sources.length)\n Promise.all(sources.map(source => Promise.resolve(source(this.view)))).then(annotations => {\n let all = annotations.reduce((a, b) => a.concat(b));\n if (this.view.state.doc == state.doc)\n this.view.dispatch(setDiagnostics(this.view.state, all));\n }, error => { logException(this.view.state, error); });\n }\n }\n update(update) {\n let config = update.state.facet(lintConfig);\n if (update.docChanged || config != update.startState.facet(lintConfig) ||\n config.needsRefresh && config.needsRefresh(update)) {\n this.lintTime = Date.now() + config.delay;\n if (!this.set) {\n this.set = true;\n this.timeout = setTimeout(this.run, config.delay);\n }\n }\n }\n force() {\n if (this.set) {\n this.lintTime = Date.now();\n this.run();\n }\n }\n destroy() {\n clearTimeout(this.timeout);\n }\n});\nconst lintConfig = /*@__PURE__*/Facet.define({\n combine(input) {\n return Object.assign({ sources: input.map(i => i.source).filter(x => x != null) }, combineConfig(input.map(i => i.config), {\n delay: 750,\n markerFilter: null,\n tooltipFilter: null,\n needsRefresh: null\n }, {\n needsRefresh: (a, b) => !a ? b : !b ? a : u => a(u) || b(u)\n }));\n }\n});\n/**\nGiven a diagnostic source, this function returns an extension that\nenables linting with that source. It will be called whenever the\neditor is idle (after its content changed). If `null` is given as\nsource, this only configures the lint extension.\n*/\nfunction linter(source, config = {}) {\n return [\n lintConfig.of({ source, config }),\n lintPlugin,\n lintExtensions\n ];\n}\n/**\nForces any linters [configured](https://codemirror.net/6/docs/ref/#lint.linter) to run when the\neditor is idle to run right away.\n*/\nfunction forceLinting(view) {\n let plugin = view.plugin(lintPlugin);\n if (plugin)\n plugin.force();\n}\nfunction assignKeys(actions) {\n let assigned = [];\n if (actions)\n actions: for (let { name } of actions) {\n for (let i = 0; i < name.length; i++) {\n let ch = name[i];\n if (/[a-zA-Z]/.test(ch) && !assigned.some(c => c.toLowerCase() == ch.toLowerCase())) {\n assigned.push(ch);\n continue actions;\n }\n }\n assigned.push(\"\");\n }\n return assigned;\n}\nfunction renderDiagnostic(view, diagnostic, inPanel) {\n var _a;\n let keys = inPanel ? assignKeys(diagnostic.actions) : [];\n return elt(\"li\", { class: \"cm-diagnostic cm-diagnostic-\" + diagnostic.severity }, elt(\"span\", { class: \"cm-diagnosticText\" }, diagnostic.renderMessage ? diagnostic.renderMessage() : diagnostic.message), (_a = diagnostic.actions) === null || _a === void 0 ? void 0 : _a.map((action, i) => {\n let fired = false, click = (e) => {\n e.preventDefault();\n if (fired)\n return;\n fired = true;\n let found = findDiagnostic(view.state.field(lintState).diagnostics, diagnostic);\n if (found)\n action.apply(view, found.from, found.to);\n };\n let { name } = action, keyIndex = keys[i] ? name.indexOf(keys[i]) : -1;\n let nameElt = keyIndex < 0 ? name : [name.slice(0, keyIndex),\n elt(\"u\", name.slice(keyIndex, keyIndex + 1)),\n name.slice(keyIndex + 1)];\n return elt(\"button\", {\n type: \"button\",\n class: \"cm-diagnosticAction\",\n onclick: click,\n onmousedown: click,\n \"aria-label\": ` Action: ${name}${keyIndex < 0 ? \"\" : ` (access key \"${keys[i]})\"`}.`\n }, nameElt);\n }), diagnostic.source && elt(\"div\", { class: \"cm-diagnosticSource\" }, diagnostic.source));\n}\nclass DiagnosticWidget extends WidgetType {\n constructor(diagnostic) {\n super();\n this.diagnostic = diagnostic;\n }\n eq(other) { return other.diagnostic == this.diagnostic; }\n toDOM() {\n return elt(\"span\", { class: \"cm-lintPoint cm-lintPoint-\" + this.diagnostic.severity });\n }\n}\nclass PanelItem {\n constructor(view, diagnostic) {\n this.diagnostic = diagnostic;\n this.id = \"item_\" + Math.floor(Math.random() * 0xffffffff).toString(16);\n this.dom = renderDiagnostic(view, diagnostic, true);\n this.dom.id = this.id;\n this.dom.setAttribute(\"role\", \"option\");\n }\n}\nclass LintPanel {\n constructor(view) {\n this.view = view;\n this.items = [];\n let onkeydown = (event) => {\n if (event.keyCode == 27) { // Escape\n closeLintPanel(this.view);\n this.view.focus();\n }\n else if (event.keyCode == 38 || event.keyCode == 33) { // ArrowUp, PageUp\n this.moveSelection((this.selectedIndex - 1 + this.items.length) % this.items.length);\n }\n else if (event.keyCode == 40 || event.keyCode == 34) { // ArrowDown, PageDown\n this.moveSelection((this.selectedIndex + 1) % this.items.length);\n }\n else if (event.keyCode == 36) { // Home\n this.moveSelection(0);\n }\n else if (event.keyCode == 35) { // End\n this.moveSelection(this.items.length - 1);\n }\n else if (event.keyCode == 13) { // Enter\n this.view.focus();\n }\n else if (event.keyCode >= 65 && event.keyCode <= 90 && this.selectedIndex >= 0) { // A-Z\n let { diagnostic } = this.items[this.selectedIndex], keys = assignKeys(diagnostic.actions);\n for (let i = 0; i < keys.length; i++)\n if (keys[i].toUpperCase().charCodeAt(0) == event.keyCode) {\n let found = findDiagnostic(this.view.state.field(lintState).diagnostics, diagnostic);\n if (found)\n diagnostic.actions[i].apply(view, found.from, found.to);\n }\n }\n else {\n return;\n }\n event.preventDefault();\n };\n let onclick = (event) => {\n for (let i = 0; i < this.items.length; i++) {\n if (this.items[i].dom.contains(event.target))\n this.moveSelection(i);\n }\n };\n this.list = elt(\"ul\", {\n tabIndex: 0,\n role: \"listbox\",\n \"aria-label\": this.view.state.phrase(\"Diagnostics\"),\n onkeydown,\n onclick\n });\n this.dom = elt(\"div\", { class: \"cm-panel-lint\" }, this.list, elt(\"button\", {\n type: \"button\",\n name: \"close\",\n \"aria-label\": this.view.state.phrase(\"close\"),\n onclick: () => closeLintPanel(this.view)\n }, \"×\"));\n this.update();\n }\n get selectedIndex() {\n let selected = this.view.state.field(lintState).selected;\n if (!selected)\n return -1;\n for (let i = 0; i < this.items.length; i++)\n if (this.items[i].diagnostic == selected.diagnostic)\n return i;\n return -1;\n }\n update() {\n let { diagnostics, selected } = this.view.state.field(lintState);\n let i = 0, needsSync = false, newSelectedItem = null;\n diagnostics.between(0, this.view.state.doc.length, (_start, _end, { spec }) => {\n let found = -1, item;\n for (let j = i; j < this.items.length; j++)\n if (this.items[j].diagnostic == spec.diagnostic) {\n found = j;\n break;\n }\n if (found < 0) {\n item = new PanelItem(this.view, spec.diagnostic);\n this.items.splice(i, 0, item);\n needsSync = true;\n }\n else {\n item = this.items[found];\n if (found > i) {\n this.items.splice(i, found - i);\n needsSync = true;\n }\n }\n if (selected && item.diagnostic == selected.diagnostic) {\n if (!item.dom.hasAttribute(\"aria-selected\")) {\n item.dom.setAttribute(\"aria-selected\", \"true\");\n newSelectedItem = item;\n }\n }\n else if (item.dom.hasAttribute(\"aria-selected\")) {\n item.dom.removeAttribute(\"aria-selected\");\n }\n i++;\n });\n while (i < this.items.length && !(this.items.length == 1 && this.items[0].diagnostic.from < 0)) {\n needsSync = true;\n this.items.pop();\n }\n if (this.items.length == 0) {\n this.items.push(new PanelItem(this.view, {\n from: -1, to: -1,\n severity: \"info\",\n message: this.view.state.phrase(\"No diagnostics\")\n }));\n needsSync = true;\n }\n if (newSelectedItem) {\n this.list.setAttribute(\"aria-activedescendant\", newSelectedItem.id);\n this.view.requestMeasure({\n key: this,\n read: () => ({ sel: newSelectedItem.dom.getBoundingClientRect(), panel: this.list.getBoundingClientRect() }),\n write: ({ sel, panel }) => {\n let scaleY = panel.height / this.list.offsetHeight;\n if (sel.top < panel.top)\n this.list.scrollTop -= (panel.top - sel.top) / scaleY;\n else if (sel.bottom > panel.bottom)\n this.list.scrollTop += (sel.bottom - panel.bottom) / scaleY;\n }\n });\n }\n else if (this.selectedIndex < 0) {\n this.list.removeAttribute(\"aria-activedescendant\");\n }\n if (needsSync)\n this.sync();\n }\n sync() {\n let domPos = this.list.firstChild;\n function rm() {\n let prev = domPos;\n domPos = prev.nextSibling;\n prev.remove();\n }\n for (let item of this.items) {\n if (item.dom.parentNode == this.list) {\n while (domPos != item.dom)\n rm();\n domPos = item.dom.nextSibling;\n }\n else {\n this.list.insertBefore(item.dom, domPos);\n }\n }\n while (domPos)\n rm();\n }\n moveSelection(selectedIndex) {\n if (this.selectedIndex < 0)\n return;\n let field = this.view.state.field(lintState);\n let selection = findDiagnostic(field.diagnostics, this.items[selectedIndex].diagnostic);\n if (!selection)\n return;\n this.view.dispatch({\n selection: { anchor: selection.from, head: selection.to },\n scrollIntoView: true,\n effects: movePanelSelection.of(selection)\n });\n }\n static open(view) { return new LintPanel(view); }\n}\nfunction svg(content, attrs = `viewBox=\"0 0 40 40\"`) {\n return `url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" ${attrs}>${encodeURIComponent(content)}</svg>')`;\n}\nfunction underline(color) {\n return svg(`<path d=\"m0 2.5 l2 -1.5 l1 0 l2 1.5 l1 0\" stroke=\"${color}\" fill=\"none\" stroke-width=\".7\"/>`, `width=\"6\" height=\"3\"`);\n}\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-diagnostic\": {\n padding: \"3px 6px 3px 8px\",\n marginLeft: \"-1px\",\n display: \"block\",\n whiteSpace: \"pre-wrap\"\n },\n \".cm-diagnostic-error\": { borderLeft: \"5px solid #d11\" },\n \".cm-diagnostic-warning\": { borderLeft: \"5px solid orange\" },\n \".cm-diagnostic-info\": { borderLeft: \"5px solid #999\" },\n \".cm-diagnostic-hint\": { borderLeft: \"5px solid #66d\" },\n \".cm-diagnosticAction\": {\n font: \"inherit\",\n border: \"none\",\n padding: \"2px 4px\",\n backgroundColor: \"#444\",\n color: \"white\",\n borderRadius: \"3px\",\n marginLeft: \"8px\",\n cursor: \"pointer\"\n },\n \".cm-diagnosticSource\": {\n fontSize: \"70%\",\n opacity: .7\n },\n \".cm-lintRange\": {\n backgroundPosition: \"left bottom\",\n backgroundRepeat: \"repeat-x\",\n paddingBottom: \"0.7px\",\n },\n \".cm-lintRange-error\": { backgroundImage: /*@__PURE__*/underline(\"#d11\") },\n \".cm-lintRange-warning\": { backgroundImage: /*@__PURE__*/underline(\"orange\") },\n \".cm-lintRange-info\": { backgroundImage: /*@__PURE__*/underline(\"#999\") },\n \".cm-lintRange-hint\": { backgroundImage: /*@__PURE__*/underline(\"#66d\") },\n \".cm-lintRange-active\": { backgroundColor: \"#ffdd9980\" },\n \".cm-tooltip-lint\": {\n padding: 0,\n margin: 0\n },\n \".cm-lintPoint\": {\n position: \"relative\",\n \"&:after\": {\n content: '\"\"',\n position: \"absolute\",\n bottom: 0,\n left: \"-2px\",\n borderLeft: \"3px solid transparent\",\n borderRight: \"3px solid transparent\",\n borderBottom: \"4px solid #d11\"\n }\n },\n \".cm-lintPoint-warning\": {\n \"&:after\": { borderBottomColor: \"orange\" }\n },\n \".cm-lintPoint-info\": {\n \"&:after\": { borderBottomColor: \"#999\" }\n },\n \".cm-lintPoint-hint\": {\n \"&:after\": { borderBottomColor: \"#66d\" }\n },\n \".cm-panel.cm-panel-lint\": {\n position: \"relative\",\n \"& ul\": {\n maxHeight: \"100px\",\n overflowY: \"auto\",\n \"& [aria-selected]\": {\n backgroundColor: \"#ddd\",\n \"& u\": { textDecoration: \"underline\" }\n },\n \"&:focus [aria-selected]\": {\n background_fallback: \"#bdf\",\n backgroundColor: \"Highlight\",\n color_fallback: \"white\",\n color: \"HighlightText\"\n },\n \"& u\": { textDecoration: \"none\" },\n padding: 0,\n margin: 0\n },\n \"& [name=close]\": {\n position: \"absolute\",\n top: \"0\",\n right: \"2px\",\n background: \"inherit\",\n border: \"none\",\n font: \"inherit\",\n padding: 0,\n margin: 0\n }\n }\n});\nfunction severityWeight(sev) {\n return sev == \"error\" ? 4 : sev == \"warning\" ? 3 : sev == \"info\" ? 2 : 1;\n}\nclass LintGutterMarker extends GutterMarker {\n constructor(diagnostics) {\n super();\n this.diagnostics = diagnostics;\n this.severity = diagnostics.reduce((max, d) => severityWeight(max) < severityWeight(d.severity) ? d.severity : max, \"hint\");\n }\n toDOM(view) {\n let elt = document.createElement(\"div\");\n elt.className = \"cm-lint-marker cm-lint-marker-\" + this.severity;\n let diagnostics = this.diagnostics;\n let diagnosticsFilter = view.state.facet(lintGutterConfig).tooltipFilter;\n if (diagnosticsFilter)\n diagnostics = diagnosticsFilter(diagnostics, view.state);\n if (diagnostics.length)\n elt.onmouseover = () => gutterMarkerMouseOver(view, elt, diagnostics);\n return elt;\n }\n}\nfunction trackHoverOn(view, marker) {\n let mousemove = (event) => {\n let rect = marker.getBoundingClientRect();\n if (event.clientX > rect.left - 10 /* Hover.Margin */ && event.clientX < rect.right + 10 /* Hover.Margin */ &&\n event.clientY > rect.top - 10 /* Hover.Margin */ && event.clientY < rect.bottom + 10 /* Hover.Margin */)\n return;\n for (let target = event.target; target; target = target.parentNode) {\n if (target.nodeType == 1 && target.classList.contains(\"cm-tooltip-lint\"))\n return;\n }\n window.removeEventListener(\"mousemove\", mousemove);\n if (view.state.field(lintGutterTooltip))\n view.dispatch({ effects: setLintGutterTooltip.of(null) });\n };\n window.addEventListener(\"mousemove\", mousemove);\n}\nfunction gutterMarkerMouseOver(view, marker, diagnostics) {\n function hovered() {\n let line = view.elementAtHeight(marker.getBoundingClientRect().top + 5 - view.documentTop);\n const linePos = view.coordsAtPos(line.from);\n if (linePos) {\n view.dispatch({ effects: setLintGutterTooltip.of({\n pos: line.from,\n above: false,\n create() {\n return {\n dom: diagnosticsTooltip(view, diagnostics),\n getCoords: () => marker.getBoundingClientRect()\n };\n }\n }) });\n }\n marker.onmouseout = marker.onmousemove = null;\n trackHoverOn(view, marker);\n }\n let { hoverTime } = view.state.facet(lintGutterConfig);\n let hoverTimeout = setTimeout(hovered, hoverTime);\n marker.onmouseout = () => {\n clearTimeout(hoverTimeout);\n marker.onmouseout = marker.onmousemove = null;\n };\n marker.onmousemove = () => {\n clearTimeout(hoverTimeout);\n hoverTimeout = setTimeout(hovered, hoverTime);\n };\n}\nfunction markersForDiagnostics(doc, diagnostics) {\n let byLine = Object.create(null);\n for (let diagnostic of diagnostics) {\n let line = doc.lineAt(diagnostic.from);\n (byLine[line.from] || (byLine[line.from] = [])).push(diagnostic);\n }\n let markers = [];\n for (let line in byLine) {\n markers.push(new LintGutterMarker(byLine[line]).range(+line));\n }\n return RangeSet.of(markers, true);\n}\nconst lintGutterExtension = /*@__PURE__*/gutter({\n class: \"cm-gutter-lint\",\n markers: view => view.state.field(lintGutterMarkers),\n});\nconst lintGutterMarkers = /*@__PURE__*/StateField.define({\n create() {\n return RangeSet.empty;\n },\n update(markers, tr) {\n markers = markers.map(tr.changes);\n let diagnosticFilter = tr.state.facet(lintGutterConfig).markerFilter;\n for (let effect of tr.effects) {\n if (effect.is(setDiagnosticsEffect)) {\n let diagnostics = effect.value;\n if (diagnosticFilter)\n diagnostics = diagnosticFilter(diagnostics || [], tr.state);\n markers = markersForDiagnostics(tr.state.doc, diagnostics.slice(0));\n }\n }\n return markers;\n }\n});\nconst setLintGutterTooltip = /*@__PURE__*/StateEffect.define();\nconst lintGutterTooltip = /*@__PURE__*/StateField.define({\n create() { return null; },\n update(tooltip, tr) {\n if (tooltip && tr.docChanged)\n tooltip = hideTooltip(tr, tooltip) ? null : Object.assign(Object.assign({}, tooltip), { pos: tr.changes.mapPos(tooltip.pos) });\n return tr.effects.reduce((t, e) => e.is(setLintGutterTooltip) ? e.value : t, tooltip);\n },\n provide: field => showTooltip.from(field)\n});\nconst lintGutterTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-gutter-lint\": {\n width: \"1.4em\",\n \"& .cm-gutterElement\": {\n padding: \".2em\"\n }\n },\n \".cm-lint-marker\": {\n width: \"1em\",\n height: \"1em\"\n },\n \".cm-lint-marker-info\": {\n content: /*@__PURE__*/svg(`<path fill=\"#aaf\" stroke=\"#77e\" stroke-width=\"6\" stroke-linejoin=\"round\" d=\"M5 5L35 5L35 35L5 35Z\"/>`)\n },\n \".cm-lint-marker-warning\": {\n content: /*@__PURE__*/svg(`<path fill=\"#fe8\" stroke=\"#fd7\" stroke-width=\"6\" stroke-linejoin=\"round\" d=\"M20 6L37 35L3 35Z\"/>`),\n },\n \".cm-lint-marker-error\": {\n content: /*@__PURE__*/svg(`<circle cx=\"20\" cy=\"20\" r=\"15\" fill=\"#f87\" stroke=\"#f43\" stroke-width=\"6\"/>`)\n },\n});\nconst lintExtensions = [\n lintState,\n /*@__PURE__*/EditorView.decorations.compute([lintState], state => {\n let { selected, panel } = state.field(lintState);\n return !selected || !panel || selected.from == selected.to ? Decoration.none : Decoration.set([\n activeMark.range(selected.from, selected.to)\n ]);\n }),\n /*@__PURE__*/hoverTooltip(lintTooltip, { hideOn: hideTooltip }),\n baseTheme\n];\nconst lintGutterConfig = /*@__PURE__*/Facet.define({\n combine(configs) {\n return combineConfig(configs, {\n hoverTime: 300 /* Hover.Time */,\n markerFilter: null,\n tooltipFilter: null\n });\n }\n});\n/**\nReturns an extension that installs a gutter showing markers for\neach line that has diagnostics, which can be hovered over to see\nthe diagnostics.\n*/\nfunction lintGutter(config = {}) {\n return [lintGutterConfig.of(config), lintGutterMarkers, lintGutterExtension, lintGutterTheme, lintGutterTooltip];\n}\n/**\nIterate over the marked diagnostics for the given editor state,\ncalling `f` for each of them. Note that, if the document changed\nsince the diagnostics were created, the `Diagnostic` object will\nhold the original outdated position, whereas the `to` and `from`\narguments hold the diagnostic's current position.\n*/\nfunction forEachDiagnostic(state, f) {\n let lState = state.field(lintState, false);\n if (lState && lState.diagnostics.size)\n for (let iter = RangeSet.iter([lState.diagnostics]); iter.value; iter.next())\n f(iter.value.spec.diagnostic, iter.from, iter.to);\n}\n\nexport { closeLintPanel, diagnosticCount, forEachDiagnostic, forceLinting, lintGutter, lintKeymap, linter, nextDiagnostic, openLintPanel, previousDiagnostic, setDiagnostics, setDiagnosticsEffect };\n","import { lineNumbers, highlightActiveLineGutter, highlightSpecialChars, drawSelection, dropCursor, rectangularSelection, crosshairCursor, highlightActiveLine, keymap } from '@codemirror/view';\nexport { EditorView } from '@codemirror/view';\nimport { EditorState } from '@codemirror/state';\nimport { foldGutter, indentOnInput, syntaxHighlighting, defaultHighlightStyle, bracketMatching, foldKeymap } from '@codemirror/language';\nimport { history, defaultKeymap, historyKeymap } from '@codemirror/commands';\nimport { highlightSelectionMatches, searchKeymap } from '@codemirror/search';\nimport { closeBrackets, autocompletion, closeBracketsKeymap, completionKeymap } from '@codemirror/autocomplete';\nimport { lintKeymap } from '@codemirror/lint';\n\n// (The superfluous function calls around the list of extensions work\n// around current limitations in tree-shaking software.)\n/**\nThis is an extension value that just pulls together a number of\nextensions that you might want in a basic editor. It is meant as a\nconvenient helper to quickly set up CodeMirror without installing\nand importing a lot of separate packages.\n\nSpecifically, it includes...\n\n - [the default command bindings](https://codemirror.net/6/docs/ref/#commands.defaultKeymap)\n - [line numbers](https://codemirror.net/6/docs/ref/#view.lineNumbers)\n - [special character highlighting](https://codemirror.net/6/docs/ref/#view.highlightSpecialChars)\n - [the undo history](https://codemirror.net/6/docs/ref/#commands.history)\n - [a fold gutter](https://codemirror.net/6/docs/ref/#language.foldGutter)\n - [custom selection drawing](https://codemirror.net/6/docs/ref/#view.drawSelection)\n - [drop cursor](https://codemirror.net/6/docs/ref/#view.dropCursor)\n - [multiple selections](https://codemirror.net/6/docs/ref/#state.EditorState^allowMultipleSelections)\n - [reindentation on input](https://codemirror.net/6/docs/ref/#language.indentOnInput)\n - [the default highlight style](https://codemirror.net/6/docs/ref/#language.defaultHighlightStyle) (as fallback)\n - [bracket matching](https://codemirror.net/6/docs/ref/#language.bracketMatching)\n - [bracket closing](https://codemirror.net/6/docs/ref/#autocomplete.closeBrackets)\n - [autocompletion](https://codemirror.net/6/docs/ref/#autocomplete.autocompletion)\n - [rectangular selection](https://codemirror.net/6/docs/ref/#view.rectangularSelection) and [crosshair cursor](https://codemirror.net/6/docs/ref/#view.crosshairCursor)\n - [active line highlighting](https://codemirror.net/6/docs/ref/#view.highlightActiveLine)\n - [active line gutter highlighting](https://codemirror.net/6/docs/ref/#view.highlightActiveLineGutter)\n - [selection match highlighting](https://codemirror.net/6/docs/ref/#search.highlightSelectionMatches)\n - [search](https://codemirror.net/6/docs/ref/#search.searchKeymap)\n - [linting](https://codemirror.net/6/docs/ref/#lint.lintKeymap)\n\n(You'll probably want to add some language package to your setup\ntoo.)\n\nThis extension does not allow customization. The idea is that,\nonce you decide you want to configure your editor more precisely,\nyou take this package's source (which is just a bunch of imports\nand an array literal), copy it into your own code, and adjust it\nas desired.\n*/\nconst basicSetup = /*@__PURE__*/(() => [\n lineNumbers(),\n highlightActiveLineGutter(),\n highlightSpecialChars(),\n history(),\n foldGutter(),\n drawSelection(),\n dropCursor(),\n EditorState.allowMultipleSelections.of(true),\n indentOnInput(),\n syntaxHighlighting(defaultHighlightStyle, { fallback: true }),\n bracketMatching(),\n closeBrackets(),\n autocompletion(),\n rectangularSelection(),\n crosshairCursor(),\n highlightActiveLine(),\n highlightSelectionMatches(),\n keymap.of([\n ...closeBracketsKeymap,\n ...defaultKeymap,\n ...searchKeymap,\n ...historyKeymap,\n ...foldKeymap,\n ...completionKeymap,\n ...lintKeymap\n ])\n])();\n/**\nA minimal set of extensions to create a functional editor. Only\nincludes [the default keymap](https://codemirror.net/6/docs/ref/#commands.defaultKeymap), [undo\nhistory](https://codemirror.net/6/docs/ref/#commands.history), [special character\nhighlighting](https://codemirror.net/6/docs/ref/#view.highlightSpecialChars), [custom selection\ndrawing](https://codemirror.net/6/docs/ref/#view.drawSelection), and [default highlight\nstyle](https://codemirror.net/6/docs/ref/#language.defaultHighlightStyle).\n*/\nconst minimalSetup = /*@__PURE__*/(() => [\n highlightSpecialChars(),\n history(),\n drawSelection(),\n syntaxHighlighting(defaultHighlightStyle, { fallback: true }),\n keymap.of([\n ...defaultKeymap,\n ...historyKeymap,\n ])\n])();\n\nexport { basicSetup, minimalSetup };\n"],"names":["crelt","elt","arguments","document","createElement","i","next","nodeType","Array","isArray","name","Object","prototype","hasOwnProperty","call","value","setAttribute","length","add","child","appendChild","createTextNode","RangeError","basicNormalize","String","normalize","x","SearchCursor","constructor","text","query","from","to","test","this","done","matches","buffer","bufferPos","iter","iterRange","bufferStart","peek","codePointAt","pop","nextOverlapping","str","fromCodePoint","start","codePointSize","norm","pos","code","charCodeAt","match","end","index","keep","splice","push","Symbol","iterator","empty","exec","baseFlags","unicode","RegExpCursor","options","curLine","MultilineRegExpCursor","re","RegExp","ignoreCase","startLine","lineAt","curLineStart","matchPos","toCharEnd","getLine","skip","lineBreak","slice","nextLine","off","lastIndex","flattened","WeakMap","FlattenedDoc","get","doc","cached","flat","sliceString","set","cachedFrom","chunkEnd","line","createLineDialog","view","input","class","state","selection","main","head","number","go","sign","ln","cl","percent","col","pc","lines","Math","round","docLine","max","min","EditorSelection","cursor","dispatch","effects","dialogEffect","of","EditorView","scrollIntoView","y","focus","dom","onkeydown","event","keyCode","preventDefault","onsubmit","phrase","type","StateEffect","define","dialogField","StateField","create","update","tr","e","is","provide","f","showPanel","val","baseTheme$1","baseTheme","padding","fontSize","defaultHighlightOptions","highlightWordAroundCursor","minSelectionLength","maxMatches","wholeWords","highlightConfig","Facet","combine","combineConfig","a","b","matchDeco","Decoration","mark","mainMatchDeco","insideWordBoundaries","check","sliceDoc","CharCategory","Word","matchHighlighter","ViewPlugin","fromClass","decorations","getDeco","selectionSet","docChanged","viewportChanged","conf","facet","sel","ranges","none","range","word","wordAt","charCategorizer","len","insideWord","deco","part","visibleRanges","v","defaultTheme","backgroundColor","searchConfigFacet","configs","top","caseSensitive","literal","regexp","wholeWord","createPanel","SearchPanel","scrollToMatch","SearchQuery","config","search","replace","valid","source","_a","validRegExp","unquoted","unquote","_","ch","eq","other","RegExpQuery","StringQuery","getCursor","st","EditorState","regexpCursor","stringCursor","QueryType","spec","undefined","toLowerCase","categorizer","buf","bufPos","charBefore","charAfter","super","nextMatch","curFrom","curTo","prevMatchInRange","prevMatch","getReplacement","_result","matchAll","limit","highlight","_from","_to","findClusterBreak","size","result","m","setSearchQuery","togglePanel","searchState","SearchState","defaultQuery","effect","panel","createSearchPanel","matchMark","selectedMatchMark","searchHighlighter","field","startState","builder","RangeSetBuilder","l","selected","some","r","finish","searchCommand","openSearchPanel","findNext","single","announceMatch","userEvent","selectSearchInput","findPrevious","prev","selectMatches","map","replaceNext","readOnly","replacement","changes","toText","insert","announce","replaceAll","announceText","fallback","_b","_c","_d","_e","selText","getSearchInput","getPanel","querySelector","root","activeElement","select","searchInput","appendConfig","searchExtensions","closeSearchPanel","contains","searchKeymap","key","run","scope","shift","cur","newSel","mainIndex","selectWord","searchedText","fullWord","cycled","findNextOccurrence","addRange","button","onclick","content","commit","bind","searchField","placeholder","form","onchange","onkeyup","replaceField","caseField","checked","reField","wordField","keydown","runScopeHandlers","target","shiftKey","transactions","setQuery","mount","AnnounceMargin","Break","lineEnd","position","right","border","font","margin","marginRight","whiteSpace","Prec","low","SelectedDiagnostic","diagnostic","LintState","diagnostics","init","markedDiagnostics","diagnosticFilter","lintConfig","markerFilter","d","widget","DiagnosticWidget","attributes","severity","markClass","inclusive","findDiagnostic","after","found","between","setDiagnosticsEffect","movePanelSelection","lintState","mapped","selPos","mapPos","LintPanel","open","s","activeMark","lintTooltip","side","stackStart","stackEnd","tooltipFilter","above","diagnosticsTooltip","renderDiagnostic","closeLintPanel","lintKeymap","concat","lintExtensions","anchor","assign","sources","filter","delay","needsRefresh","u","assignKeys","actions","assigned","c","inPanel","keys","renderMessage","message","action","fired","click","apply","keyIndex","indexOf","nameElt","onmousedown","WidgetType","toDOM","PanelItem","id","floor","random","toString","items","list","tabIndex","role","moveSelection","selectedIndex","toUpperCase","needsSync","newSelectedItem","_start","_end","item","j","hasAttribute","removeAttribute","requestMeasure","read","getBoundingClientRect","write","scaleY","height","offsetHeight","scrollTop","bottom","sync","domPos","firstChild","rm","nextSibling","remove","parentNode","insertBefore","underline","color","attrs","encodeURIComponent","svg","marginLeft","display","borderLeft","borderRadius","opacity","backgroundPosition","backgroundRepeat","paddingBottom","backgroundImage","left","borderRight","borderBottom","borderBottomColor","maxHeight","overflowY","textDecoration","background_fallback","color_fallback","background","compute","hoverTooltip","hideOn","tooltip","touchesRange","basicSetup","lineNumbers","highlightActiveLineGutter","highlightSpecialChars","history","foldGutter","drawSelection","dropCursor","allowMultipleSelections","indentOnInput","syntaxHighlighting","defaultHighlightStyle","bracketMatching","closeBrackets","autocompletion","rectangularSelection","crosshairCursor","highlightActiveLine","keymap","closeBracketsKeymap","defaultKeymap","historyKeymap","foldKeymap","completionKeymap","minimalSetup"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
\ No newline at end of file
import{Annotation as e,Facet as t,EditorSelection as n,Text as r,findClusterBreak as o,countColumn as l,combineConfig as s,StateField as i,Transaction as a,ChangeSet as c,ChangeDesc as f,StateEffect as u,CharCategory as h}from"./codemirror_state-BKbyfKsm.js";import{E as m,D as d}from"./codemirror_view-C0PMO2z_.js";import{q as p,r as g,u as y,v,s as A,w as k,b as w,i as D}from"./codemirror_language-_XiX6II0.js";const S=e=>{let{state:t}=e,n=t.doc.lineAt(t.selection.main.from),r=I(e.state,n.from);return r.line?M(e):!!r.block&&T(e)};function x(e,t){return({state:n,dispatch:r})=>{if(n.readOnly)return!1;let o=e(t,n);return!!o&&(r(n.update(o)),!0)}}const M=x(L,0),B=x(L,1),C=x(L,2),E=x(R,0),O=x(R,1),b=x(R,2),T=x(((e,t)=>R(e,t,function(e){let t=[];for(let n of e.selection.ranges){let r=e.doc.lineAt(n.from),o=n.to<=r.to?r:e.doc.lineAt(n.to),l=t.length-1;l>=0&&t[l].to>r.from?t[l].to=o.to:t.push({from:r.from+/^\s*/.exec(r.text)[0].length,to:o.to})}return t}(t))),0);function I(e,t){let n=e.languageDataAt("commentTokens",t);return n.length?n[0]:{}}const V=50;function R(e,t,n=t.selection.ranges){let r=n.map((e=>I(t,e.from).block));if(!r.every((e=>e)))return null;let o=n.map(((e,n)=>function(e,{open:t,close:n},r,o){let l,s,i=e.sliceDoc(r-V,r),a=e.sliceDoc(o,o+V),c=/\s*$/.exec(i)[0].length,f=/^\s*/.exec(a)[0].length,u=i.length-c;if(i.slice(u-t.length,u)==t&&a.slice(f,f+n.length)==n)return{open:{pos:r-c,margin:c&&1},close:{pos:o+f,margin:f&&1}};o-r<=2*V?l=s=e.sliceDoc(r,o):(l=e.sliceDoc(r,r+V),s=e.sliceDoc(o-V,o));let h=/^\s*/.exec(l)[0].length,m=/\s*$/.exec(s)[0].length,d=s.length-m-n.length;return l.slice(h,h+t.length)==t&&s.slice(d,d+n.length)==n?{open:{pos:r+h+t.length,margin:/\s/.test(l.charAt(h+t.length))?1:0},close:{pos:o-m-n.length,margin:/\s/.test(s.charAt(d-1))?1:0}}:null}(t,r[n],e.from,e.to)));if(2!=e&&!o.every((e=>e)))return{changes:t.changes(n.map(((e,t)=>o[t]?[]:[{from:e.from,insert:r[t].open+" "},{from:e.to,insert:" "+r[t].close}])))};if(1!=e&&o.some((e=>e))){let e=[];for(let t,n=0;n<o.length;n++)if(t=o[n]){let o=r[n],{open:l,close:s}=t;e.push({from:l.pos-o.open.length,to:l.pos+l.margin},{from:s.pos-s.margin,to:s.pos+o.close.length})}return{changes:e}}return null}function L(e,t,n=t.selection.ranges){let r=[],o=-1;for(let{from:e,to:l}of n){let n=r.length,s=1e9,i=I(t,e).line;if(i){for(let n=e;n<=l;){let a=t.doc.lineAt(n);if(a.from>o&&(e==l||l>a.from)){o=a.from;let e=/^\s*/.exec(a.text)[0].length,t=e==a.length,n=a.text.slice(e,e+i.length)==i?e:-1;e<a.text.length&&e<s&&(s=e),r.push({line:a,comment:n,token:i,indent:e,empty:t,single:!1})}n=a.to+1}if(s<1e9)for(let e=n;e<r.length;e++)r[e].indent<r[e].line.text.length&&(r[e].indent=s);r.length==n+1&&(r[n].single=!0)}}if(2!=e&&r.some((e=>e.comment<0&&(!e.empty||e.single)))){let e=[];for(let{line:t,token:n,indent:o,empty:l,single:s}of r)!s&&l||e.push({from:t.from+o,insert:n+" "});let n=t.changes(e);return{changes:n,selection:t.selection.map(n,1)}}if(1!=e&&r.some((e=>e.comment>=0))){let e=[];for(let{line:t,comment:n,token:o}of r)if(n>=0){let r=t.from+n,l=r+o.length;" "==t.text[l-t.from]&&l++,e.push({from:r,to:l})}return{changes:e}}return null}const J=e.define(),N=e.define(),H=t.define(),U=t.define({combine:e=>s(e,{minDepth:100,newGroupDelay:500,joinToEvent:(e,t)=>t},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,t)=>(n,r)=>e(n,r)||t(n,r)})}),z=i.define({create:()=>ie.empty,update(e,t){let n=t.state.facet(U),r=t.annotation(J);if(r){let o=X.fromTransaction(t,r.selection),l=r.side,s=0==l?e.undone:e.done;return s=o?Y(s,s.length,n.minDepth,o):ne(s,t.startState.selection),new ie(0==l?r.rest:s,0==l?s:r.rest)}let o=t.annotation(N);if("full"!=o&&"before"!=o||(e=e.isolate()),!1===t.annotation(a.addToHistory))return t.changes.empty?e:e.addMapping(t.changes.desc);let l=X.fromTransaction(t),s=t.annotation(a.time),i=t.annotation(a.userEvent);return l?e=e.addChanges(l,s,i,n,t):t.selection&&(e=e.addSelection(t.startState.selection,s,i,n.newGroupDelay)),"full"!=o&&"after"!=o||(e=e.isolate()),e},toJSON:e=>({done:e.done.map((e=>e.toJSON())),undone:e.undone.map((e=>e.toJSON()))}),fromJSON:e=>new ie(e.done.map(X.fromJSON),e.undone.map(X.fromJSON))});function j(e={}){return[z,U.of(e),m.domEventHandlers({beforeinput(e,t){let n="historyUndo"==e.inputType?W:"historyRedo"==e.inputType?q:null;return!!n&&(e.preventDefault(),n(t))}})]}const G=z;function P(e,t){return function({state:n,dispatch:r}){if(!t&&n.readOnly)return!1;let o=n.field(z,!1);if(!o)return!1;let l=o.pop(e,n,t);return!!l&&(r(l),!0)}}const W=P(0,!1),q=P(1,!1),$=P(0,!0),_=P(1,!0);function F(e){return function(t){let n=t.field(z,!1);if(!n)return 0;let r=0==e?n.done:n.undone;return r.length-(r.length&&!r[0].changes?1:0)}}const K=F(0),Q=F(1);class X{constructor(e,t,n,r,o){this.changes=e,this.effects=t,this.mapped=n,this.startSelection=r,this.selectionsAfter=o}setSelAfter(e){return new X(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,t,n;return{changes:null===(e=this.changes)||void 0===e?void 0:e.toJSON(),mapped:null===(t=this.mapped)||void 0===t?void 0:t.toJSON(),startSelection:null===(n=this.startSelection)||void 0===n?void 0:n.toJSON(),selectionsAfter:this.selectionsAfter.map((e=>e.toJSON()))}}static fromJSON(e){return new X(e.changes&&c.fromJSON(e.changes),[],e.mapped&&f.fromJSON(e.mapped),e.startSelection&&n.fromJSON(e.startSelection),e.selectionsAfter.map(n.fromJSON))}static fromTransaction(e,t){let n=ee;for(let t of e.startState.facet(H)){let r=t(e);r.length&&(n=n.concat(r))}return!n.length&&e.changes.empty?null:new X(e.changes.invert(e.startState.doc),n,void 0,t||e.startState.selection,ee)}static selection(e){return new X(void 0,ee,void 0,void 0,e)}}function Y(e,t,n,r){let o=t+1>n+20?t-n-1:0,l=e.slice(o,t);return l.push(r),l}function Z(e,t){return e.length?t.length?e.concat(t):e:t}const ee=[],te=200;function ne(e,t){if(e.length){let n=e[e.length-1],r=n.selectionsAfter.slice(Math.max(0,n.selectionsAfter.length-te));return r.length&&r[r.length-1].eq(t)?e:(r.push(t),Y(e,e.length-1,1e9,n.setSelAfter(r)))}return[X.selection([t])]}function re(e){let t=e[e.length-1],n=e.slice();return n[e.length-1]=t.setSelAfter(t.selectionsAfter.slice(0,t.selectionsAfter.length-1)),n}function oe(e,t){if(!e.length)return e;let n=e.length,r=ee;for(;n;){let o=le(e[n-1],t,r);if(o.changes&&!o.changes.empty||o.effects.length){let t=e.slice(0,n);return t[n-1]=o,t}t=o.mapped,n--,r=o.selectionsAfter}return r.length?[X.selection(r)]:ee}function le(e,t,n){let r=Z(e.selectionsAfter.length?e.selectionsAfter.map((e=>e.map(t))):ee,n);if(!e.changes)return X.selection(r);let o=e.changes.map(t),l=t.mapDesc(e.changes,!0),s=e.mapped?e.mapped.composeDesc(l):l;return new X(o,u.mapEffects(e.effects,t),s,e.startSelection.map(l),r)}const se=/^(input\.type|delete)($|\.)/;class ie{constructor(e,t,n=0,r=void 0){this.done=e,this.undone=t,this.prevTime=n,this.prevUserEvent=r}isolate(){return this.prevTime?new ie(this.done,this.undone):this}addChanges(e,t,n,r,o){let l=this.done,s=l[l.length-1];return l=s&&s.changes&&!s.changes.empty&&e.changes&&(!n||se.test(n))&&(!s.selectionsAfter.length&&t-this.prevTime<r.newGroupDelay&&r.joinToEvent(o,function(e,t){let n=[],r=!1;return e.iterChangedRanges(((e,t)=>n.push(e,t))),t.iterChangedRanges(((e,t,o,l)=>{for(let e=0;e<n.length;){let t=n[e++],s=n[e++];l>=t&&o<=s&&(r=!0)}})),r}(s.changes,e.changes))||"input.type.compose"==n)?Y(l,l.length-1,r.minDepth,new X(e.changes.compose(s.changes),Z(e.effects,s.effects),s.mapped,s.startSelection,ee)):Y(l,l.length,r.minDepth,e),new ie(l,ee,t,n)}addSelection(e,t,n,r){let o=this.done.length?this.done[this.done.length-1].selectionsAfter:ee;return o.length>0&&t-this.prevTime<r&&n==this.prevUserEvent&&n&&/^select($|\.)/.test(n)&&(l=o[o.length-1],s=e,l.ranges.length==s.ranges.length&&0===l.ranges.filter(((e,t)=>e.empty!=s.ranges[t].empty)).length)?this:new ie(ne(this.done,e),this.undone,t,n);var l,s}addMapping(e){return new ie(oe(this.done,e),oe(this.undone,e),this.prevTime,this.prevUserEvent)}pop(e,t,n){let r=0==e?this.done:this.undone;if(0==r.length)return null;let o=r[r.length-1],l=o.selectionsAfter[0]||t.selection;if(n&&o.selectionsAfter.length)return t.update({selection:o.selectionsAfter[o.selectionsAfter.length-1],annotations:J.of({side:e,rest:re(r),selection:l}),userEvent:0==e?"select.undo":"select.redo",scrollIntoView:!0});if(o.changes){let n=1==r.length?ee:r.slice(0,r.length-1);return o.mapped&&(n=oe(n,o.mapped)),t.update({changes:o.changes,selection:o.startSelection,effects:o.effects,annotations:J.of({side:e,rest:n,selection:l}),filter:!1,userEvent:0==e?"undo":"redo",scrollIntoView:!0})}return null}}ie.empty=new ie(ee,ee);const ae=[{key:"Mod-z",run:W,preventDefault:!0},{key:"Mod-y",mac:"Mod-Shift-z",run:q,preventDefault:!0},{linux:"Ctrl-Shift-z",run:q,preventDefault:!0},{key:"Mod-u",run:$,preventDefault:!0},{key:"Alt-u",mac:"Mod-Shift-u",run:_,preventDefault:!0}];function ce(e,t){return n.create(e.ranges.map(t),e.mainIndex)}function fe(e,t){return e.update({selection:t,scrollIntoView:!0,userEvent:"select"})}function ue({state:e,dispatch:t},n){let r=ce(e.selection,n);return!r.eq(e.selection,!0)&&(t(fe(e,r)),!0)}function he(e,t){return n.cursor(t?e.to:e.from)}function me(e,t){return ue(e,(n=>n.empty?e.moveByChar(n,t):he(n,t)))}function de(e){return e.textDirectionAt(e.state.selection.main.head)==d.LTR}const pe=e=>me(e,!de(e)),ge=e=>me(e,de(e)),ye=e=>me(e,!0),ve=e=>me(e,!1);function Ae(e,t){return ue(e,(n=>n.empty?e.moveByGroup(n,t):he(n,t)))}const ke=e=>Ae(e,!de(e)),we=e=>Ae(e,de(e)),De=e=>Ae(e,!0),Se=e=>Ae(e,!1),xe="undefined"!=typeof Intl&&Intl.Segmenter?new Intl.Segmenter(void 0,{granularity:"word"}):null;function Me(e,t,r){let o=e.state.charCategorizer(t.from),l=h.Space,s=t.from,i=0,a=!1,c=!1,f=!1,u=t=>{if(a)return!1;s+=r?t.length:-t.length;let n,u=o(t);if(u==h.Word&&t.charCodeAt(0)<128&&/[\W_]/.test(t)&&(u=-1),l==h.Space&&(l=u),l!=u)return!1;if(l==h.Word)if(t.toLowerCase()==t){if(!r&&c)return!1;f=!0}else if(f){if(r)return!1;a=!0}else{if(c&&r&&o(n=e.state.sliceDoc(s,s+1))==h.Word&&n.toLowerCase()==n)return!1;c=!0}return i++,!0},m=e.moveByChar(t,r,(e=>(u(e),u)));if(xe&&l==h.Word&&m.from==t.from+i*(r?1:-1)){let o=Math.min(t.head,m.head),l=Math.max(t.head,m.head),s=e.state.sliceDoc(o,l);if(s.length>1&&/[\u4E00-\uffff]/.test(s)){let e=Array.from(xe.segment(s));if(e.length>1)return r?n.cursor(t.head+e[1].index,-1):n.cursor(m.head+e[e.length-1].index,1)}}return m}function Be(e,t){return ue(e,(n=>n.empty?Me(e,n,t):he(n,t)))}const Ce=e=>Be(e,!0),Ee=e=>Be(e,!1);function Oe(e,t,n){if(t.type.prop(n))return!0;let r=t.to-t.from;return r&&(r>2||/[^\s,.;:]/.test(e.sliceDoc(t.from,t.to)))||t.firstChild}function be(e,t,r){let o,l,s=A(e).resolveInner(t.head),i=r?w.closedBy:w.openedBy;for(let n=t.head;;){let t=r?s.childAfter(n):s.childBefore(n);if(!t)break;Oe(e,t,i)?s=t:n=r?t.to:t.from}return l=s.type.prop(i)&&(o=r?v(e,s.from,1):v(e,s.to,-1))&&o.matched?r?o.end.to:o.end.from:r?s.to:s.from,n.cursor(l,r?-1:1)}const Te=e=>ue(e,(t=>be(e.state,t,!de(e)))),Ie=e=>ue(e,(t=>be(e.state,t,de(e))));function Ve(e,t){return ue(e,(n=>{if(!n.empty)return he(n,t);let r=e.moveVertically(n,t);return r.head!=n.head?r:e.moveToLineBoundary(n,t)}))}const Re=e=>Ve(e,!1),Le=e=>Ve(e,!0);function Je(e){let t,n=e.scrollDOM.clientHeight<e.scrollDOM.scrollHeight-2,r=0,o=0;if(n){for(let t of e.state.facet(m.scrollMargins)){let n=t(e);(null==n?void 0:n.top)&&(r=Math.max(null==n?void 0:n.top,r)),(null==n?void 0:n.bottom)&&(o=Math.max(null==n?void 0:n.bottom,o))}t=e.scrollDOM.clientHeight-r-o}else t=(e.dom.ownerDocument.defaultView||window).innerHeight;return{marginTop:r,marginBottom:o,selfScroll:n,height:Math.max(e.defaultLineHeight,t-5)}}function Ne(e,t){let n,r=Je(e),{state:o}=e,l=ce(o.selection,(n=>n.empty?e.moveVertically(n,t,r.height):he(n,t)));if(l.eq(o.selection))return!1;if(r.selfScroll){let t=e.coordsAtPos(o.selection.main.head),s=e.scrollDOM.getBoundingClientRect(),i=s.top+r.marginTop,a=s.bottom-r.marginBottom;t&&t.top>i&&t.bottom<a&&(n=m.scrollIntoView(l.main.head,{y:"start",yMargin:t.top-i}))}return e.dispatch(fe(o,l),{effects:n}),!0}const He=e=>Ne(e,!1),Ue=e=>Ne(e,!0);function ze(e,t,r){let o=e.lineBlockAt(t.head),l=e.moveToLineBoundary(t,r);if(l.head==t.head&&l.head!=(r?o.to:o.from)&&(l=e.moveToLineBoundary(t,r,!1)),!r&&l.head==o.from&&o.length){let r=/^\s*/.exec(e.state.sliceDoc(o.from,Math.min(o.from+100,o.to)))[0].length;r&&t.head!=o.from+r&&(l=n.cursor(o.from+r))}return l}const je=e=>ue(e,(t=>ze(e,t,!0))),Ge=e=>ue(e,(t=>ze(e,t,!1))),Pe=e=>ue(e,(t=>ze(e,t,!de(e)))),We=e=>ue(e,(t=>ze(e,t,de(e)))),qe=e=>ue(e,(t=>n.cursor(e.lineBlockAt(t.head).from,1))),$e=e=>ue(e,(t=>n.cursor(e.lineBlockAt(t.head).to,-1)));function _e(e,t,r){let o=!1,l=ce(e.selection,(t=>{let l=v(e,t.head,-1)||v(e,t.head,1)||t.head>0&&v(e,t.head-1,1)||t.head<e.doc.length&&v(e,t.head+1,-1);if(!l||!l.end)return t;o=!0;let s=l.start.from==t.head?l.end.to:l.end.from;return r?n.range(t.anchor,s):n.cursor(s)}));return!!o&&(t(fe(e,l)),!0)}const Fe=({state:e,dispatch:t})=>_e(e,t,!1),Ke=({state:e,dispatch:t})=>_e(e,t,!0);function Qe(e,t){let r=ce(e.state.selection,(e=>{let r=t(e);return n.range(e.anchor,r.head,r.goalColumn,r.bidiLevel||void 0)}));return!r.eq(e.state.selection)&&(e.dispatch(fe(e.state,r)),!0)}function Xe(e,t){return Qe(e,(n=>e.moveByChar(n,t)))}const Ye=e=>Xe(e,!de(e)),Ze=e=>Xe(e,de(e)),et=e=>Xe(e,!0),tt=e=>Xe(e,!1);function nt(e,t){return Qe(e,(n=>e.moveByGroup(n,t)))}const rt=e=>nt(e,!de(e)),ot=e=>nt(e,de(e)),lt=e=>nt(e,!0),st=e=>nt(e,!1);function it(e,t){return Qe(e,(n=>Me(e,n,t)))}const at=e=>it(e,!0),ct=e=>it(e,!1),ft=e=>Qe(e,(t=>be(e.state,t,!de(e)))),ut=e=>Qe(e,(t=>be(e.state,t,de(e))));function ht(e,t){return Qe(e,(n=>e.moveVertically(n,t)))}const mt=e=>ht(e,!1),dt=e=>ht(e,!0);function pt(e,t){return Qe(e,(n=>e.moveVertically(n,t,Je(e).height)))}const gt=e=>pt(e,!1),yt=e=>pt(e,!0),vt=e=>Qe(e,(t=>ze(e,t,!0))),At=e=>Qe(e,(t=>ze(e,t,!1))),kt=e=>Qe(e,(t=>ze(e,t,!de(e)))),wt=e=>Qe(e,(t=>ze(e,t,de(e)))),Dt=e=>Qe(e,(t=>n.cursor(e.lineBlockAt(t.head).from))),St=e=>Qe(e,(t=>n.cursor(e.lineBlockAt(t.head).to))),xt=({state:e,dispatch:t})=>(t(fe(e,{anchor:0})),!0),Mt=({state:e,dispatch:t})=>(t(fe(e,{anchor:e.doc.length})),!0),Bt=({state:e,dispatch:t})=>(t(fe(e,{anchor:e.selection.main.anchor,head:0})),!0),Ct=({state:e,dispatch:t})=>(t(fe(e,{anchor:e.selection.main.anchor,head:e.doc.length})),!0),Et=({state:e,dispatch:t})=>(t(e.update({selection:{anchor:0,head:e.doc.length},userEvent:"select"})),!0),Ot=({state:e,dispatch:t})=>{let r=Ft(e).map((({from:t,to:r})=>n.range(t,Math.min(r+1,e.doc.length))));return t(e.update({selection:n.create(r),userEvent:"select"})),!0},bt=({state:e,dispatch:t})=>{let r=ce(e.selection,(t=>{var r;for(let o=A(e).resolveStack(t.from,1);o;o=o.next){let{node:e}=o;if((e.from<t.from&&e.to>=t.to||e.to>t.to&&e.from<=t.from)&&(null===(r=e.parent)||void 0===r?void 0:r.parent))return n.range(e.to,e.from)}return t}));return t(fe(e,r)),!0},Tt=({state:e,dispatch:t})=>{let r=e.selection,o=null;return r.ranges.length>1?o=n.create([r.main]):r.main.empty||(o=n.create([n.cursor(r.main.head)])),!!o&&(t(fe(e,o)),!0)};function It(e,t){if(e.state.readOnly)return!1;let r="delete.selection",{state:o}=e,l=o.changeByRange((o=>{let{from:l,to:s}=o;if(l==s){let n=t(o);n<l?(r="delete.backward",n=Vt(e,n,!1)):n>l&&(r="delete.forward",n=Vt(e,n,!0)),l=Math.min(l,n),s=Math.max(s,n)}else l=Vt(e,l,!1),s=Vt(e,s,!0);return l==s?{range:o}:{changes:{from:l,to:s},range:n.cursor(l,l<o.head?-1:1)}}));return!l.changes.empty&&(e.dispatch(o.update(l,{scrollIntoView:!0,userEvent:r,effects:"delete.selection"==r?m.announce.of(o.phrase("Selection deleted")):void 0})),!0)}function Vt(e,t,n){if(e instanceof m)for(let r of e.state.facet(m.atomicRanges).map((t=>t(e))))r.between(t,t,((e,r)=>{e<t&&r>t&&(t=n?r:e)}));return t}const Rt=(e,t,n)=>It(e,(r=>{let s,i,a=r.from,{state:c}=e,f=c.doc.lineAt(a);if(n&&!t&&a>f.from&&a<f.from+200&&!/[^ \t]/.test(s=f.text.slice(0,a-f.from))){if("\t"==s[s.length-1])return a-1;let e=l(s,c.tabSize)%k(c)||k(c);for(let t=0;t<e&&" "==s[s.length-1-t];t++)a--;i=a}else i=o(f.text,a-f.from,t,t)+f.from,i==a&&f.number!=(t?c.doc.lines:1)?i+=t?1:-1:!t&&/[\ufe00-\ufe0f]/.test(f.text.slice(i-f.from,a-f.from))&&(i=o(f.text,i-f.from,!1,!1)+f.from);return i})),Lt=e=>Rt(e,!1,!0),Jt=e=>Rt(e,!1,!1),Nt=e=>Rt(e,!0,!1),Ht=(e,t)=>It(e,(n=>{let r=n.head,{state:l}=e,s=l.doc.lineAt(r),i=l.charCategorizer(r);for(let e=null;;){if(r==(t?s.to:s.from)){r==n.head&&s.number!=(t?l.doc.lines:1)&&(r+=t?1:-1);break}let a=o(s.text,r-s.from,t)+s.from,c=s.text.slice(Math.min(r,a)-s.from,Math.max(r,a)-s.from),f=i(c);if(null!=e&&f!=e)break;" "==c&&r==n.head||(e=f),r=a}return r})),Ut=e=>Ht(e,!1),zt=e=>Ht(e,!0),jt=e=>It(e,(t=>{let n=e.lineBlockAt(t.head).to;return t.head<n?n:Math.min(e.state.doc.length,t.head+1)})),Gt=e=>It(e,(t=>{let n=e.lineBlockAt(t.head).from;return t.head>n?n:Math.max(0,t.head-1)})),Pt=e=>It(e,(t=>{let n=e.moveToLineBoundary(t,!1).head;return t.head>n?n:Math.max(0,t.head-1)})),Wt=e=>It(e,(t=>{let n=e.moveToLineBoundary(t,!0).head;return t.head<n?n:Math.min(e.state.doc.length,t.head+1)})),qt=({state:e,dispatch:t})=>{if(e.readOnly)return!1;let n=[];for(let t=0,r="",o=e.doc.iter();;){if(o.next(),o.lineBreak||o.done){let e=r.search(/\s+$/);if(e>-1&&n.push({from:t-(r.length-e),to:t}),o.done)break;r=""}else r=o.value;t+=o.value.length}return!!n.length&&(t(e.update({changes:n,userEvent:"delete"})),!0)},$t=({state:e,dispatch:t})=>{if(e.readOnly)return!1;let o=e.changeByRange((e=>({changes:{from:e.from,to:e.to,insert:r.of(["",""])},range:n.cursor(e.from)})));return t(e.update(o,{scrollIntoView:!0,userEvent:"input"})),!0},_t=({state:e,dispatch:t})=>{if(e.readOnly)return!1;let r=e.changeByRange((t=>{if(!t.empty||0==t.from||t.from==e.doc.length)return{range:t};let r=t.from,l=e.doc.lineAt(r),s=r==l.from?r-1:o(l.text,r-l.from,!1)+l.from,i=r==l.to?r+1:o(l.text,r-l.from,!0)+l.from;return{changes:{from:s,to:i,insert:e.doc.slice(r,i).append(e.doc.slice(s,r))},range:n.cursor(i)}}));return!r.changes.empty&&(t(e.update(r,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function Ft(e){let t=[],n=-1;for(let r of e.selection.ranges){let o=e.doc.lineAt(r.from),l=e.doc.lineAt(r.to);if(r.empty||r.to!=l.from||(l=e.doc.lineAt(r.to-1)),n>=o.number){let e=t[t.length-1];e.to=l.to,e.ranges.push(r)}else t.push({from:o.from,to:l.to,ranges:[r]});n=l.number+1}return t}function Kt(e,t,r){if(e.readOnly)return!1;let o=[],l=[];for(let t of Ft(e)){if(r?t.to==e.doc.length:0==t.from)continue;let s=e.doc.lineAt(r?t.to+1:t.from-1),i=s.length+1;if(r){o.push({from:t.to,to:s.to},{from:t.from,insert:s.text+e.lineBreak});for(let r of t.ranges)l.push(n.range(Math.min(e.doc.length,r.anchor+i),Math.min(e.doc.length,r.head+i)))}else{o.push({from:s.from,to:t.from},{from:t.to,insert:e.lineBreak+s.text});for(let e of t.ranges)l.push(n.range(e.anchor-i,e.head-i))}}return!!o.length&&(t(e.update({changes:o,scrollIntoView:!0,selection:n.create(l,e.selection.mainIndex),userEvent:"move.line"})),!0)}const Qt=({state:e,dispatch:t})=>Kt(e,t,!1),Xt=({state:e,dispatch:t})=>Kt(e,t,!0);function Yt(e,t,n){if(e.readOnly)return!1;let r=[];for(let t of Ft(e))n?r.push({from:t.from,insert:e.doc.slice(t.from,t.to)+e.lineBreak}):r.push({from:t.to,insert:e.lineBreak+e.doc.slice(t.from,t.to)});return t(e.update({changes:r,scrollIntoView:!0,userEvent:"input.copyline"})),!0}const Zt=({state:e,dispatch:t})=>Yt(e,t,!1),en=({state:e,dispatch:t})=>Yt(e,t,!0),tn=e=>{if(e.state.readOnly)return!1;let{state:t}=e,n=t.changes(Ft(t).map((({from:e,to:n})=>(e>0?e--:n<t.doc.length&&n++,{from:e,to:n})))),r=ce(t.selection,(t=>{let n;if(e.lineWrapping){let r=e.lineBlockAt(t.head),o=e.coordsAtPos(t.head,t.assoc||1);o&&(n=r.bottom+e.documentTop-o.bottom+e.defaultLineHeight/2)}return e.moveVertically(t,!0,n)})).map(n);return e.dispatch({changes:n,selection:r,scrollIntoView:!0,userEvent:"delete.line"}),!0},nn=({state:e,dispatch:t})=>(t(e.update(e.replaceSelection(e.lineBreak),{scrollIntoView:!0,userEvent:"input"})),!0),rn=({state:e,dispatch:t})=>(t(e.update(e.changeByRange((t=>{let r=/^\s*/.exec(e.doc.lineAt(t.from).text)[0];return{changes:{from:t.from,to:t.to,insert:e.lineBreak+r},range:n.cursor(t.from+r.length+1)}})),{scrollIntoView:!0,userEvent:"input"})),!0);const on=sn(!1),ln=sn(!0);function sn(e){return({state:t,dispatch:o})=>{if(t.readOnly)return!1;let s=t.changeByRange((o=>{let{from:s,to:i}=o,a=t.doc.lineAt(s),c=!e&&s==i&&function(e,t){if(/\(\)|\[\]|\{\}/.test(e.sliceDoc(t-1,t+1)))return{from:t,to:t};let n,r=A(e).resolveInner(t),o=r.childBefore(t),l=r.childAfter(t);return o&&l&&o.to<=t&&l.from>=t&&(n=o.type.prop(w.closedBy))&&n.indexOf(l.name)>-1&&e.doc.lineAt(o.to).from==e.doc.lineAt(l.from).from&&!/\S/.test(e.sliceDoc(o.to,l.from))?{from:o.to,to:l.from}:null}(t,s);e&&(s=i=(i<=a.to?a:t.doc.lineAt(i)).to);let f=new p(t,{simulateBreak:s,simulateDoubleBreak:!!c}),u=g(f,s);for(null==u&&(u=l(/^\s*/.exec(t.doc.lineAt(s).text)[0],t.tabSize));i<a.to&&/\s/.test(a.text[i-a.from]);)i++;c?({from:s,to:i}=c):s>a.from&&s<a.from+100&&!/\S/.test(a.text.slice(0,s))&&(s=a.from);let h=["",y(t,u)];return c&&h.push(y(t,f.lineIndent(a.from,-1))),{changes:{from:s,to:i,insert:r.of(h)},range:n.cursor(s+1+h[1].length)}}));return o(t.update(s,{scrollIntoView:!0,userEvent:"input"})),!0}}function an(e,t){let r=-1;return e.changeByRange((o=>{let l=[];for(let n=o.from;n<=o.to;){let s=e.doc.lineAt(n);s.number>r&&(o.empty||o.to>s.from)&&(t(s,l,o),r=s.number),n=s.to+1}let s=e.changes(l);return{changes:l,range:n.range(s.mapPos(o.anchor,1),s.mapPos(o.head,1))}}))}const cn=({state:e,dispatch:t})=>{if(e.readOnly)return!1;let n=Object.create(null),r=new p(e,{overrideIndentation:e=>{let t=n[e];return null==t?-1:t}}),o=an(e,((t,o,l)=>{let s=g(r,t.from);if(null==s)return;/\S/.test(t.text)||(s=0);let i=/^\s*/.exec(t.text)[0],a=y(e,s);(i!=a||l.from<t.from+i.length)&&(n[t.from]=s,o.push({from:t.from,to:t.from+i.length,insert:a}))}));return o.changes.empty||t(e.update(o,{userEvent:"indent"})),!0},fn=({state:e,dispatch:t})=>!e.readOnly&&(t(e.update(an(e,((t,n)=>{n.push({from:t.from,insert:e.facet(D)})})),{userEvent:"input.indent"})),!0),un=({state:e,dispatch:t})=>!e.readOnly&&(t(e.update(an(e,((t,n)=>{let r=/^\s*/.exec(t.text)[0];if(!r)return;let o=l(r,e.tabSize),s=0,i=y(e,Math.max(0,o-k(e)));for(;s<r.length&&s<i.length&&r.charCodeAt(s)==i.charCodeAt(s);)s++;n.push({from:t.from+s,to:t.from+r.length,insert:i.slice(s)})})),{userEvent:"delete.dedent"})),!0),hn=({state:e,dispatch:t})=>e.selection.ranges.some((e=>!e.empty))?fn({state:e,dispatch:t}):(t(e.update(e.replaceSelection("\t"),{scrollIntoView:!0,userEvent:"input"})),!0),mn=[{key:"Ctrl-b",run:pe,shift:Ye,preventDefault:!0},{key:"Ctrl-f",run:ge,shift:Ze},{key:"Ctrl-p",run:Re,shift:mt},{key:"Ctrl-n",run:Le,shift:dt},{key:"Ctrl-a",run:qe,shift:Dt},{key:"Ctrl-e",run:$e,shift:St},{key:"Ctrl-d",run:Nt},{key:"Ctrl-h",run:Lt},{key:"Ctrl-k",run:jt},{key:"Ctrl-Alt-h",run:Ut},{key:"Ctrl-o",run:$t},{key:"Ctrl-t",run:_t},{key:"Ctrl-v",run:Ue}],dn=[{key:"ArrowLeft",run:pe,shift:Ye,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:ke,shift:rt,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:Pe,shift:kt,preventDefault:!0},{key:"ArrowRight",run:ge,shift:Ze,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:we,shift:ot,preventDefault:!0},{mac:"Cmd-ArrowRight",run:We,shift:wt,preventDefault:!0},{key:"ArrowUp",run:Re,shift:mt,preventDefault:!0},{mac:"Cmd-ArrowUp",run:xt,shift:Bt},{mac:"Ctrl-ArrowUp",run:He,shift:gt},{key:"ArrowDown",run:Le,shift:dt,preventDefault:!0},{mac:"Cmd-ArrowDown",run:Mt,shift:Ct},{mac:"Ctrl-ArrowDown",run:Ue,shift:yt},{key:"PageUp",run:He,shift:gt},{key:"PageDown",run:Ue,shift:yt},{key:"Home",run:Ge,shift:At,preventDefault:!0},{key:"Mod-Home",run:xt,shift:Bt},{key:"End",run:je,shift:vt,preventDefault:!0},{key:"Mod-End",run:Mt,shift:Ct},{key:"Enter",run:on},{key:"Mod-a",run:Et},{key:"Backspace",run:Lt,shift:Lt},{key:"Delete",run:Nt},{key:"Mod-Backspace",mac:"Alt-Backspace",run:Ut},{key:"Mod-Delete",mac:"Alt-Delete",run:zt},{mac:"Mod-Backspace",run:Pt},{mac:"Mod-Delete",run:Wt}].concat(mn.map((e=>({mac:e.key,run:e.run,shift:e.shift})))),pn=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:Te,shift:ft},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:Ie,shift:ut},{key:"Alt-ArrowUp",run:Qt},{key:"Shift-Alt-ArrowUp",run:Zt},{key:"Alt-ArrowDown",run:Xt},{key:"Shift-Alt-ArrowDown",run:en},{key:"Escape",run:Tt},{key:"Mod-Enter",run:ln},{key:"Alt-l",mac:"Ctrl-l",run:Ot},{key:"Mod-i",run:bt,preventDefault:!0},{key:"Mod-[",run:un},{key:"Mod-]",run:fn},{key:"Mod-Alt-\\",run:cn},{key:"Shift-Mod-k",run:tn},{key:"Shift-Mod-\\",run:Fe},{key:"Mod-/",run:S},{key:"Alt-A",run:E}].concat(dn),gn={key:"Tab",run:fn,shift:un};export{O as blockComment,b as blockUncomment,en as copyLineDown,Zt as copyLineUp,ve as cursorCharBackward,ye as cursorCharForward,pe as cursorCharLeft,ge as cursorCharRight,Mt as cursorDocEnd,xt as cursorDocStart,Se as cursorGroupBackward,De as cursorGroupForward,ke as cursorGroupLeft,we as cursorGroupRight,Ge as cursorLineBoundaryBackward,je as cursorLineBoundaryForward,Pe as cursorLineBoundaryLeft,We as cursorLineBoundaryRight,Le as cursorLineDown,$e as cursorLineEnd,qe as cursorLineStart,Re as cursorLineUp,Fe as cursorMatchingBracket,Ue as cursorPageDown,He as cursorPageUp,Ee as cursorSubwordBackward,Ce as cursorSubwordForward,Te as cursorSyntaxLeft,Ie as cursorSyntaxRight,pn as defaultKeymap,Lt as deleteCharBackward,Jt as deleteCharBackwardStrict,Nt as deleteCharForward,Ut as deleteGroupBackward,zt as deleteGroupForward,tn as deleteLine,Pt as deleteLineBoundaryBackward,Wt as deleteLineBoundaryForward,jt as deleteToLineEnd,Gt as deleteToLineStart,qt as deleteTrailingWhitespace,mn as emacsStyleKeymap,j as history,G as historyField,ae as historyKeymap,un as indentLess,fn as indentMore,cn as indentSelection,gn as indentWithTab,ln as insertBlankLine,nn as insertNewline,on as insertNewlineAndIndent,rn as insertNewlineKeepIndent,hn as insertTab,H as invertedEffects,N as isolateHistory,B as lineComment,C as lineUncomment,Xt as moveLineDown,Qt as moveLineUp,q as redo,Q as redoDepth,_ as redoSelection,Et as selectAll,tt as selectCharBackward,et as selectCharForward,Ye as selectCharLeft,Ze as selectCharRight,Ct as selectDocEnd,Bt as selectDocStart,st as selectGroupBackward,lt as selectGroupForward,rt as selectGroupLeft,ot as selectGroupRight,Ot as selectLine,At as selectLineBoundaryBackward,vt as selectLineBoundaryForward,kt as selectLineBoundaryLeft,wt as selectLineBoundaryRight,dt as selectLineDown,St as selectLineEnd,Dt as selectLineStart,mt as selectLineUp,Ke as selectMatchingBracket,yt as selectPageDown,gt as selectPageUp,bt as selectParentSyntax,ct as selectSubwordBackward,at as selectSubwordForward,ft as selectSyntaxLeft,ut as selectSyntaxRight,Tt as simplifySelection,$t as splitLine,dn as standardKeymap,E as toggleBlockComment,T as toggleBlockCommentByLine,S as toggleComment,M as toggleLineComment,_t as transposeChars,W as undo,K as undoDepth,$ as undoSelection};
//# sourceMappingURL=codemirror_commands-MgxtVkrD.js.map
{"version":3,"file":"codemirror_commands-MgxtVkrD.js","sources":["../node_modules/@codemirror/commands/dist/index.js"],"sourcesContent":["import { Annotation, Facet, combineConfig, StateField, Transaction, ChangeSet, ChangeDesc, EditorSelection, StateEffect, Text, findClusterBreak, countColumn, CharCategory } from '@codemirror/state';\nimport { EditorView, Direction } from '@codemirror/view';\nimport { IndentContext, getIndentation, indentString, matchBrackets, syntaxTree, getIndentUnit, indentUnit } from '@codemirror/language';\nimport { NodeProp } from '@lezer/common';\n\n/**\nComment or uncomment the current selection. Will use line comments\nif available, otherwise falling back to block comments.\n*/\nconst toggleComment = target => {\n let { state } = target, line = state.doc.lineAt(state.selection.main.from), config = getConfig(target.state, line.from);\n return config.line ? toggleLineComment(target) : config.block ? toggleBlockCommentByLine(target) : false;\n};\nfunction command(f, option) {\n return ({ state, dispatch }) => {\n if (state.readOnly)\n return false;\n let tr = f(option, state);\n if (!tr)\n return false;\n dispatch(state.update(tr));\n return true;\n };\n}\n/**\nComment or uncomment the current selection using line comments.\nThe line comment syntax is taken from the\n[`commentTokens`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt).\n*/\nconst toggleLineComment = /*@__PURE__*/command(changeLineComment, 0 /* CommentOption.Toggle */);\n/**\nComment the current selection using line comments.\n*/\nconst lineComment = /*@__PURE__*/command(changeLineComment, 1 /* CommentOption.Comment */);\n/**\nUncomment the current selection using line comments.\n*/\nconst lineUncomment = /*@__PURE__*/command(changeLineComment, 2 /* CommentOption.Uncomment */);\n/**\nComment or uncomment the current selection using block comments.\nThe block comment syntax is taken from the\n[`commentTokens`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt).\n*/\nconst toggleBlockComment = /*@__PURE__*/command(changeBlockComment, 0 /* CommentOption.Toggle */);\n/**\nComment the current selection using block comments.\n*/\nconst blockComment = /*@__PURE__*/command(changeBlockComment, 1 /* CommentOption.Comment */);\n/**\nUncomment the current selection using block comments.\n*/\nconst blockUncomment = /*@__PURE__*/command(changeBlockComment, 2 /* CommentOption.Uncomment */);\n/**\nComment or uncomment the lines around the current selection using\nblock comments.\n*/\nconst toggleBlockCommentByLine = /*@__PURE__*/command((o, s) => changeBlockComment(o, s, selectedLineRanges(s)), 0 /* CommentOption.Toggle */);\nfunction getConfig(state, pos) {\n let data = state.languageDataAt(\"commentTokens\", pos);\n return data.length ? data[0] : {};\n}\nconst SearchMargin = 50;\n/**\nDetermines if the given range is block-commented in the given\nstate.\n*/\nfunction findBlockComment(state, { open, close }, from, to) {\n let textBefore = state.sliceDoc(from - SearchMargin, from);\n let textAfter = state.sliceDoc(to, to + SearchMargin);\n let spaceBefore = /\\s*$/.exec(textBefore)[0].length, spaceAfter = /^\\s*/.exec(textAfter)[0].length;\n let beforeOff = textBefore.length - spaceBefore;\n if (textBefore.slice(beforeOff - open.length, beforeOff) == open &&\n textAfter.slice(spaceAfter, spaceAfter + close.length) == close) {\n return { open: { pos: from - spaceBefore, margin: spaceBefore && 1 },\n close: { pos: to + spaceAfter, margin: spaceAfter && 1 } };\n }\n let startText, endText;\n if (to - from <= 2 * SearchMargin) {\n startText = endText = state.sliceDoc(from, to);\n }\n else {\n startText = state.sliceDoc(from, from + SearchMargin);\n endText = state.sliceDoc(to - SearchMargin, to);\n }\n let startSpace = /^\\s*/.exec(startText)[0].length, endSpace = /\\s*$/.exec(endText)[0].length;\n let endOff = endText.length - endSpace - close.length;\n if (startText.slice(startSpace, startSpace + open.length) == open &&\n endText.slice(endOff, endOff + close.length) == close) {\n return { open: { pos: from + startSpace + open.length,\n margin: /\\s/.test(startText.charAt(startSpace + open.length)) ? 1 : 0 },\n close: { pos: to - endSpace - close.length,\n margin: /\\s/.test(endText.charAt(endOff - 1)) ? 1 : 0 } };\n }\n return null;\n}\nfunction selectedLineRanges(state) {\n let ranges = [];\n for (let r of state.selection.ranges) {\n let fromLine = state.doc.lineAt(r.from);\n let toLine = r.to <= fromLine.to ? fromLine : state.doc.lineAt(r.to);\n let last = ranges.length - 1;\n if (last >= 0 && ranges[last].to > fromLine.from)\n ranges[last].to = toLine.to;\n else\n ranges.push({ from: fromLine.from + /^\\s*/.exec(fromLine.text)[0].length, to: toLine.to });\n }\n return ranges;\n}\n// Performs toggle, comment and uncomment of block comments in\n// languages that support them.\nfunction changeBlockComment(option, state, ranges = state.selection.ranges) {\n let tokens = ranges.map(r => getConfig(state, r.from).block);\n if (!tokens.every(c => c))\n return null;\n let comments = ranges.map((r, i) => findBlockComment(state, tokens[i], r.from, r.to));\n if (option != 2 /* CommentOption.Uncomment */ && !comments.every(c => c)) {\n return { changes: state.changes(ranges.map((range, i) => {\n if (comments[i])\n return [];\n return [{ from: range.from, insert: tokens[i].open + \" \" }, { from: range.to, insert: \" \" + tokens[i].close }];\n })) };\n }\n else if (option != 1 /* CommentOption.Comment */ && comments.some(c => c)) {\n let changes = [];\n for (let i = 0, comment; i < comments.length; i++)\n if (comment = comments[i]) {\n let token = tokens[i], { open, close } = comment;\n changes.push({ from: open.pos - token.open.length, to: open.pos + open.margin }, { from: close.pos - close.margin, to: close.pos + token.close.length });\n }\n return { changes };\n }\n return null;\n}\n// Performs toggle, comment and uncomment of line comments.\nfunction changeLineComment(option, state, ranges = state.selection.ranges) {\n let lines = [];\n let prevLine = -1;\n for (let { from, to } of ranges) {\n let startI = lines.length, minIndent = 1e9;\n let token = getConfig(state, from).line;\n if (!token)\n continue;\n for (let pos = from; pos <= to;) {\n let line = state.doc.lineAt(pos);\n if (line.from > prevLine && (from == to || to > line.from)) {\n prevLine = line.from;\n let indent = /^\\s*/.exec(line.text)[0].length;\n let empty = indent == line.length;\n let comment = line.text.slice(indent, indent + token.length) == token ? indent : -1;\n if (indent < line.text.length && indent < minIndent)\n minIndent = indent;\n lines.push({ line, comment, token, indent, empty, single: false });\n }\n pos = line.to + 1;\n }\n if (minIndent < 1e9)\n for (let i = startI; i < lines.length; i++)\n if (lines[i].indent < lines[i].line.text.length)\n lines[i].indent = minIndent;\n if (lines.length == startI + 1)\n lines[startI].single = true;\n }\n if (option != 2 /* CommentOption.Uncomment */ && lines.some(l => l.comment < 0 && (!l.empty || l.single))) {\n let changes = [];\n for (let { line, token, indent, empty, single } of lines)\n if (single || !empty)\n changes.push({ from: line.from + indent, insert: token + \" \" });\n let changeSet = state.changes(changes);\n return { changes: changeSet, selection: state.selection.map(changeSet, 1) };\n }\n else if (option != 1 /* CommentOption.Comment */ && lines.some(l => l.comment >= 0)) {\n let changes = [];\n for (let { line, comment, token } of lines)\n if (comment >= 0) {\n let from = line.from + comment, to = from + token.length;\n if (line.text[to - line.from] == \" \")\n to++;\n changes.push({ from, to });\n }\n return { changes };\n }\n return null;\n}\n\nconst fromHistory = /*@__PURE__*/Annotation.define();\n/**\nTransaction annotation that will prevent that transaction from\nbeing combined with other transactions in the undo history. Given\n`\"before\"`, it'll prevent merging with previous transactions. With\n`\"after\"`, subsequent transactions won't be combined with this\none. With `\"full\"`, the transaction is isolated on both sides.\n*/\nconst isolateHistory = /*@__PURE__*/Annotation.define();\n/**\nThis facet provides a way to register functions that, given a\ntransaction, provide a set of effects that the history should\nstore when inverting the transaction. This can be used to\nintegrate some kinds of effects in the history, so that they can\nbe undone (and redone again).\n*/\nconst invertedEffects = /*@__PURE__*/Facet.define();\nconst historyConfig = /*@__PURE__*/Facet.define({\n combine(configs) {\n return combineConfig(configs, {\n minDepth: 100,\n newGroupDelay: 500,\n joinToEvent: (_t, isAdjacent) => isAdjacent,\n }, {\n minDepth: Math.max,\n newGroupDelay: Math.min,\n joinToEvent: (a, b) => (tr, adj) => a(tr, adj) || b(tr, adj)\n });\n }\n});\nconst historyField_ = /*@__PURE__*/StateField.define({\n create() {\n return HistoryState.empty;\n },\n update(state, tr) {\n let config = tr.state.facet(historyConfig);\n let fromHist = tr.annotation(fromHistory);\n if (fromHist) {\n let item = HistEvent.fromTransaction(tr, fromHist.selection), from = fromHist.side;\n let other = from == 0 /* BranchName.Done */ ? state.undone : state.done;\n if (item)\n other = updateBranch(other, other.length, config.minDepth, item);\n else\n other = addSelection(other, tr.startState.selection);\n return new HistoryState(from == 0 /* BranchName.Done */ ? fromHist.rest : other, from == 0 /* BranchName.Done */ ? other : fromHist.rest);\n }\n let isolate = tr.annotation(isolateHistory);\n if (isolate == \"full\" || isolate == \"before\")\n state = state.isolate();\n if (tr.annotation(Transaction.addToHistory) === false)\n return !tr.changes.empty ? state.addMapping(tr.changes.desc) : state;\n let event = HistEvent.fromTransaction(tr);\n let time = tr.annotation(Transaction.time), userEvent = tr.annotation(Transaction.userEvent);\n if (event)\n state = state.addChanges(event, time, userEvent, config, tr);\n else if (tr.selection)\n state = state.addSelection(tr.startState.selection, time, userEvent, config.newGroupDelay);\n if (isolate == \"full\" || isolate == \"after\")\n state = state.isolate();\n return state;\n },\n toJSON(value) {\n return { done: value.done.map(e => e.toJSON()), undone: value.undone.map(e => e.toJSON()) };\n },\n fromJSON(json) {\n return new HistoryState(json.done.map(HistEvent.fromJSON), json.undone.map(HistEvent.fromJSON));\n }\n});\n/**\nCreate a history extension with the given configuration.\n*/\nfunction history(config = {}) {\n return [\n historyField_,\n historyConfig.of(config),\n EditorView.domEventHandlers({\n beforeinput(e, view) {\n let command = e.inputType == \"historyUndo\" ? undo : e.inputType == \"historyRedo\" ? redo : null;\n if (!command)\n return false;\n e.preventDefault();\n return command(view);\n }\n })\n ];\n}\n/**\nThe state field used to store the history data. Should probably\nonly be used when you want to\n[serialize](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) or\n[deserialize](https://codemirror.net/6/docs/ref/#state.EditorState^fromJSON) state objects in a way\nthat preserves history.\n*/\nconst historyField = historyField_;\nfunction cmd(side, selection) {\n return function ({ state, dispatch }) {\n if (!selection && state.readOnly)\n return false;\n let historyState = state.field(historyField_, false);\n if (!historyState)\n return false;\n let tr = historyState.pop(side, state, selection);\n if (!tr)\n return false;\n dispatch(tr);\n return true;\n };\n}\n/**\nUndo a single group of history events. Returns false if no group\nwas available.\n*/\nconst undo = /*@__PURE__*/cmd(0 /* BranchName.Done */, false);\n/**\nRedo a group of history events. Returns false if no group was\navailable.\n*/\nconst redo = /*@__PURE__*/cmd(1 /* BranchName.Undone */, false);\n/**\nUndo a change or selection change.\n*/\nconst undoSelection = /*@__PURE__*/cmd(0 /* BranchName.Done */, true);\n/**\nRedo a change or selection change.\n*/\nconst redoSelection = /*@__PURE__*/cmd(1 /* BranchName.Undone */, true);\nfunction depth(side) {\n return function (state) {\n let histState = state.field(historyField_, false);\n if (!histState)\n return 0;\n let branch = side == 0 /* BranchName.Done */ ? histState.done : histState.undone;\n return branch.length - (branch.length && !branch[0].changes ? 1 : 0);\n };\n}\n/**\nThe amount of undoable change events available in a given state.\n*/\nconst undoDepth = /*@__PURE__*/depth(0 /* BranchName.Done */);\n/**\nThe amount of redoable change events available in a given state.\n*/\nconst redoDepth = /*@__PURE__*/depth(1 /* BranchName.Undone */);\n// History events store groups of changes or effects that need to be\n// undone/redone together.\nclass HistEvent {\n constructor(\n // The changes in this event. Normal events hold at least one\n // change or effect. But it may be necessary to store selection\n // events before the first change, in which case a special type of\n // instance is created which doesn't hold any changes, with\n // changes == startSelection == undefined\n changes, \n // The effects associated with this event\n effects, \n // Accumulated mapping (from addToHistory==false) that should be\n // applied to events below this one.\n mapped, \n // The selection before this event\n startSelection, \n // Stores selection changes after this event, to be used for\n // selection undo/redo.\n selectionsAfter) {\n this.changes = changes;\n this.effects = effects;\n this.mapped = mapped;\n this.startSelection = startSelection;\n this.selectionsAfter = selectionsAfter;\n }\n setSelAfter(after) {\n return new HistEvent(this.changes, this.effects, this.mapped, this.startSelection, after);\n }\n toJSON() {\n var _a, _b, _c;\n return {\n changes: (_a = this.changes) === null || _a === void 0 ? void 0 : _a.toJSON(),\n mapped: (_b = this.mapped) === null || _b === void 0 ? void 0 : _b.toJSON(),\n startSelection: (_c = this.startSelection) === null || _c === void 0 ? void 0 : _c.toJSON(),\n selectionsAfter: this.selectionsAfter.map(s => s.toJSON())\n };\n }\n static fromJSON(json) {\n return new HistEvent(json.changes && ChangeSet.fromJSON(json.changes), [], json.mapped && ChangeDesc.fromJSON(json.mapped), json.startSelection && EditorSelection.fromJSON(json.startSelection), json.selectionsAfter.map(EditorSelection.fromJSON));\n }\n // This does not check `addToHistory` and such, it assumes the\n // transaction needs to be converted to an item. Returns null when\n // there are no changes or effects in the transaction.\n static fromTransaction(tr, selection) {\n let effects = none;\n for (let invert of tr.startState.facet(invertedEffects)) {\n let result = invert(tr);\n if (result.length)\n effects = effects.concat(result);\n }\n if (!effects.length && tr.changes.empty)\n return null;\n return new HistEvent(tr.changes.invert(tr.startState.doc), effects, undefined, selection || tr.startState.selection, none);\n }\n static selection(selections) {\n return new HistEvent(undefined, none, undefined, undefined, selections);\n }\n}\nfunction updateBranch(branch, to, maxLen, newEvent) {\n let start = to + 1 > maxLen + 20 ? to - maxLen - 1 : 0;\n let newBranch = branch.slice(start, to);\n newBranch.push(newEvent);\n return newBranch;\n}\nfunction isAdjacent(a, b) {\n let ranges = [], isAdjacent = false;\n a.iterChangedRanges((f, t) => ranges.push(f, t));\n b.iterChangedRanges((_f, _t, f, t) => {\n for (let i = 0; i < ranges.length;) {\n let from = ranges[i++], to = ranges[i++];\n if (t >= from && f <= to)\n isAdjacent = true;\n }\n });\n return isAdjacent;\n}\nfunction eqSelectionShape(a, b) {\n return a.ranges.length == b.ranges.length &&\n a.ranges.filter((r, i) => r.empty != b.ranges[i].empty).length === 0;\n}\nfunction conc(a, b) {\n return !a.length ? b : !b.length ? a : a.concat(b);\n}\nconst none = [];\nconst MaxSelectionsPerEvent = 200;\nfunction addSelection(branch, selection) {\n if (!branch.length) {\n return [HistEvent.selection([selection])];\n }\n else {\n let lastEvent = branch[branch.length - 1];\n let sels = lastEvent.selectionsAfter.slice(Math.max(0, lastEvent.selectionsAfter.length - MaxSelectionsPerEvent));\n if (sels.length && sels[sels.length - 1].eq(selection))\n return branch;\n sels.push(selection);\n return updateBranch(branch, branch.length - 1, 1e9, lastEvent.setSelAfter(sels));\n }\n}\n// Assumes the top item has one or more selectionAfter values\nfunction popSelection(branch) {\n let last = branch[branch.length - 1];\n let newBranch = branch.slice();\n newBranch[branch.length - 1] = last.setSelAfter(last.selectionsAfter.slice(0, last.selectionsAfter.length - 1));\n return newBranch;\n}\n// Add a mapping to the top event in the given branch. If this maps\n// away all the changes and effects in that item, drop it and\n// propagate the mapping to the next item.\nfunction addMappingToBranch(branch, mapping) {\n if (!branch.length)\n return branch;\n let length = branch.length, selections = none;\n while (length) {\n let event = mapEvent(branch[length - 1], mapping, selections);\n if (event.changes && !event.changes.empty || event.effects.length) { // Event survived mapping\n let result = branch.slice(0, length);\n result[length - 1] = event;\n return result;\n }\n else { // Drop this event, since there's no changes or effects left\n mapping = event.mapped;\n length--;\n selections = event.selectionsAfter;\n }\n }\n return selections.length ? [HistEvent.selection(selections)] : none;\n}\nfunction mapEvent(event, mapping, extraSelections) {\n let selections = conc(event.selectionsAfter.length ? event.selectionsAfter.map(s => s.map(mapping)) : none, extraSelections);\n // Change-less events don't store mappings (they are always the last event in a branch)\n if (!event.changes)\n return HistEvent.selection(selections);\n let mappedChanges = event.changes.map(mapping), before = mapping.mapDesc(event.changes, true);\n let fullMapping = event.mapped ? event.mapped.composeDesc(before) : before;\n return new HistEvent(mappedChanges, StateEffect.mapEffects(event.effects, mapping), fullMapping, event.startSelection.map(before), selections);\n}\nconst joinableUserEvent = /^(input\\.type|delete)($|\\.)/;\nclass HistoryState {\n constructor(done, undone, prevTime = 0, prevUserEvent = undefined) {\n this.done = done;\n this.undone = undone;\n this.prevTime = prevTime;\n this.prevUserEvent = prevUserEvent;\n }\n isolate() {\n return this.prevTime ? new HistoryState(this.done, this.undone) : this;\n }\n addChanges(event, time, userEvent, config, tr) {\n let done = this.done, lastEvent = done[done.length - 1];\n if (lastEvent && lastEvent.changes && !lastEvent.changes.empty && event.changes &&\n (!userEvent || joinableUserEvent.test(userEvent)) &&\n ((!lastEvent.selectionsAfter.length &&\n time - this.prevTime < config.newGroupDelay &&\n config.joinToEvent(tr, isAdjacent(lastEvent.changes, event.changes))) ||\n // For compose (but not compose.start) events, always join with previous event\n userEvent == \"input.type.compose\")) {\n done = updateBranch(done, done.length - 1, config.minDepth, new HistEvent(event.changes.compose(lastEvent.changes), conc(event.effects, lastEvent.effects), lastEvent.mapped, lastEvent.startSelection, none));\n }\n else {\n done = updateBranch(done, done.length, config.minDepth, event);\n }\n return new HistoryState(done, none, time, userEvent);\n }\n addSelection(selection, time, userEvent, newGroupDelay) {\n let last = this.done.length ? this.done[this.done.length - 1].selectionsAfter : none;\n if (last.length > 0 &&\n time - this.prevTime < newGroupDelay &&\n userEvent == this.prevUserEvent && userEvent && /^select($|\\.)/.test(userEvent) &&\n eqSelectionShape(last[last.length - 1], selection))\n return this;\n return new HistoryState(addSelection(this.done, selection), this.undone, time, userEvent);\n }\n addMapping(mapping) {\n return new HistoryState(addMappingToBranch(this.done, mapping), addMappingToBranch(this.undone, mapping), this.prevTime, this.prevUserEvent);\n }\n pop(side, state, onlySelection) {\n let branch = side == 0 /* BranchName.Done */ ? this.done : this.undone;\n if (branch.length == 0)\n return null;\n let event = branch[branch.length - 1], selection = event.selectionsAfter[0] || state.selection;\n if (onlySelection && event.selectionsAfter.length) {\n return state.update({\n selection: event.selectionsAfter[event.selectionsAfter.length - 1],\n annotations: fromHistory.of({ side, rest: popSelection(branch), selection }),\n userEvent: side == 0 /* BranchName.Done */ ? \"select.undo\" : \"select.redo\",\n scrollIntoView: true\n });\n }\n else if (!event.changes) {\n return null;\n }\n else {\n let rest = branch.length == 1 ? none : branch.slice(0, branch.length - 1);\n if (event.mapped)\n rest = addMappingToBranch(rest, event.mapped);\n return state.update({\n changes: event.changes,\n selection: event.startSelection,\n effects: event.effects,\n annotations: fromHistory.of({ side, rest, selection }),\n filter: false,\n userEvent: side == 0 /* BranchName.Done */ ? \"undo\" : \"redo\",\n scrollIntoView: true\n });\n }\n }\n}\nHistoryState.empty = /*@__PURE__*/new HistoryState(none, none);\n/**\nDefault key bindings for the undo history.\n\n- Mod-z: [`undo`](https://codemirror.net/6/docs/ref/#commands.undo).\n- Mod-y (Mod-Shift-z on macOS) + Ctrl-Shift-z on Linux: [`redo`](https://codemirror.net/6/docs/ref/#commands.redo).\n- Mod-u: [`undoSelection`](https://codemirror.net/6/docs/ref/#commands.undoSelection).\n- Alt-u (Mod-Shift-u on macOS): [`redoSelection`](https://codemirror.net/6/docs/ref/#commands.redoSelection).\n*/\nconst historyKeymap = [\n { key: \"Mod-z\", run: undo, preventDefault: true },\n { key: \"Mod-y\", mac: \"Mod-Shift-z\", run: redo, preventDefault: true },\n { linux: \"Ctrl-Shift-z\", run: redo, preventDefault: true },\n { key: \"Mod-u\", run: undoSelection, preventDefault: true },\n { key: \"Alt-u\", mac: \"Mod-Shift-u\", run: redoSelection, preventDefault: true }\n];\n\nfunction updateSel(sel, by) {\n return EditorSelection.create(sel.ranges.map(by), sel.mainIndex);\n}\nfunction setSel(state, selection) {\n return state.update({ selection, scrollIntoView: true, userEvent: \"select\" });\n}\nfunction moveSel({ state, dispatch }, how) {\n let selection = updateSel(state.selection, how);\n if (selection.eq(state.selection, true))\n return false;\n dispatch(setSel(state, selection));\n return true;\n}\nfunction rangeEnd(range, forward) {\n return EditorSelection.cursor(forward ? range.to : range.from);\n}\nfunction cursorByChar(view, forward) {\n return moveSel(view, range => range.empty ? view.moveByChar(range, forward) : rangeEnd(range, forward));\n}\nfunction ltrAtCursor(view) {\n return view.textDirectionAt(view.state.selection.main.head) == Direction.LTR;\n}\n/**\nMove the selection one character to the left (which is backward in\nleft-to-right text, forward in right-to-left text).\n*/\nconst cursorCharLeft = view => cursorByChar(view, !ltrAtCursor(view));\n/**\nMove the selection one character to the right.\n*/\nconst cursorCharRight = view => cursorByChar(view, ltrAtCursor(view));\n/**\nMove the selection one character forward.\n*/\nconst cursorCharForward = view => cursorByChar(view, true);\n/**\nMove the selection one character backward.\n*/\nconst cursorCharBackward = view => cursorByChar(view, false);\nfunction cursorByGroup(view, forward) {\n return moveSel(view, range => range.empty ? view.moveByGroup(range, forward) : rangeEnd(range, forward));\n}\n/**\nMove the selection to the left across one group of word or\nnon-word (but also non-space) characters.\n*/\nconst cursorGroupLeft = view => cursorByGroup(view, !ltrAtCursor(view));\n/**\nMove the selection one group to the right.\n*/\nconst cursorGroupRight = view => cursorByGroup(view, ltrAtCursor(view));\n/**\nMove the selection one group forward.\n*/\nconst cursorGroupForward = view => cursorByGroup(view, true);\n/**\nMove the selection one group backward.\n*/\nconst cursorGroupBackward = view => cursorByGroup(view, false);\nconst segmenter = typeof Intl != \"undefined\" && Intl.Segmenter ?\n /*@__PURE__*/new (Intl.Segmenter)(undefined, { granularity: \"word\" }) : null;\nfunction moveBySubword(view, range, forward) {\n let categorize = view.state.charCategorizer(range.from);\n let cat = CharCategory.Space, pos = range.from, steps = 0;\n let done = false, sawUpper = false, sawLower = false;\n let step = (next) => {\n if (done)\n return false;\n pos += forward ? next.length : -next.length;\n let nextCat = categorize(next), ahead;\n if (nextCat == CharCategory.Word && next.charCodeAt(0) < 128 && /[\\W_]/.test(next))\n nextCat = -1; // Treat word punctuation specially\n if (cat == CharCategory.Space)\n cat = nextCat;\n if (cat != nextCat)\n return false;\n if (cat == CharCategory.Word) {\n if (next.toLowerCase() == next) {\n if (!forward && sawUpper)\n return false;\n sawLower = true;\n }\n else if (sawLower) {\n if (forward)\n return false;\n done = true;\n }\n else {\n if (sawUpper && forward && categorize(ahead = view.state.sliceDoc(pos, pos + 1)) == CharCategory.Word &&\n ahead.toLowerCase() == ahead)\n return false;\n sawUpper = true;\n }\n }\n steps++;\n return true;\n };\n let end = view.moveByChar(range, forward, start => {\n step(start);\n return step;\n });\n if (segmenter && cat == CharCategory.Word && end.from == range.from + steps * (forward ? 1 : -1)) {\n let from = Math.min(range.head, end.head), to = Math.max(range.head, end.head);\n let skipped = view.state.sliceDoc(from, to);\n if (skipped.length > 1 && /[\\u4E00-\\uffff]/.test(skipped)) {\n let segments = Array.from(segmenter.segment(skipped));\n if (segments.length > 1) {\n if (forward)\n return EditorSelection.cursor(range.head + segments[1].index, -1);\n return EditorSelection.cursor(end.head + segments[segments.length - 1].index, 1);\n }\n }\n }\n return end;\n}\nfunction cursorBySubword(view, forward) {\n return moveSel(view, range => range.empty ? moveBySubword(view, range, forward) : rangeEnd(range, forward));\n}\n/**\nMove the selection one group or camel-case subword forward.\n*/\nconst cursorSubwordForward = view => cursorBySubword(view, true);\n/**\nMove the selection one group or camel-case subword backward.\n*/\nconst cursorSubwordBackward = view => cursorBySubword(view, false);\nfunction interestingNode(state, node, bracketProp) {\n if (node.type.prop(bracketProp))\n return true;\n let len = node.to - node.from;\n return len && (len > 2 || /[^\\s,.;:]/.test(state.sliceDoc(node.from, node.to))) || node.firstChild;\n}\nfunction moveBySyntax(state, start, forward) {\n let pos = syntaxTree(state).resolveInner(start.head);\n let bracketProp = forward ? NodeProp.closedBy : NodeProp.openedBy;\n // Scan forward through child nodes to see if there's an interesting\n // node ahead.\n for (let at = start.head;;) {\n let next = forward ? pos.childAfter(at) : pos.childBefore(at);\n if (!next)\n break;\n if (interestingNode(state, next, bracketProp))\n pos = next;\n else\n at = forward ? next.to : next.from;\n }\n let bracket = pos.type.prop(bracketProp), match, newPos;\n if (bracket && (match = forward ? matchBrackets(state, pos.from, 1) : matchBrackets(state, pos.to, -1)) && match.matched)\n newPos = forward ? match.end.to : match.end.from;\n else\n newPos = forward ? pos.to : pos.from;\n return EditorSelection.cursor(newPos, forward ? -1 : 1);\n}\n/**\nMove the cursor over the next syntactic element to the left.\n*/\nconst cursorSyntaxLeft = view => moveSel(view, range => moveBySyntax(view.state, range, !ltrAtCursor(view)));\n/**\nMove the cursor over the next syntactic element to the right.\n*/\nconst cursorSyntaxRight = view => moveSel(view, range => moveBySyntax(view.state, range, ltrAtCursor(view)));\nfunction cursorByLine(view, forward) {\n return moveSel(view, range => {\n if (!range.empty)\n return rangeEnd(range, forward);\n let moved = view.moveVertically(range, forward);\n return moved.head != range.head ? moved : view.moveToLineBoundary(range, forward);\n });\n}\n/**\nMove the selection one line up.\n*/\nconst cursorLineUp = view => cursorByLine(view, false);\n/**\nMove the selection one line down.\n*/\nconst cursorLineDown = view => cursorByLine(view, true);\nfunction pageInfo(view) {\n let selfScroll = view.scrollDOM.clientHeight < view.scrollDOM.scrollHeight - 2;\n let marginTop = 0, marginBottom = 0, height;\n if (selfScroll) {\n for (let source of view.state.facet(EditorView.scrollMargins)) {\n let margins = source(view);\n if (margins === null || margins === void 0 ? void 0 : margins.top)\n marginTop = Math.max(margins === null || margins === void 0 ? void 0 : margins.top, marginTop);\n if (margins === null || margins === void 0 ? void 0 : margins.bottom)\n marginBottom = Math.max(margins === null || margins === void 0 ? void 0 : margins.bottom, marginBottom);\n }\n height = view.scrollDOM.clientHeight - marginTop - marginBottom;\n }\n else {\n height = (view.dom.ownerDocument.defaultView || window).innerHeight;\n }\n return { marginTop, marginBottom, selfScroll,\n height: Math.max(view.defaultLineHeight, height - 5) };\n}\nfunction cursorByPage(view, forward) {\n let page = pageInfo(view);\n let { state } = view, selection = updateSel(state.selection, range => {\n return range.empty ? view.moveVertically(range, forward, page.height)\n : rangeEnd(range, forward);\n });\n if (selection.eq(state.selection))\n return false;\n let effect;\n if (page.selfScroll) {\n let startPos = view.coordsAtPos(state.selection.main.head);\n let scrollRect = view.scrollDOM.getBoundingClientRect();\n let scrollTop = scrollRect.top + page.marginTop, scrollBottom = scrollRect.bottom - page.marginBottom;\n if (startPos && startPos.top > scrollTop && startPos.bottom < scrollBottom)\n effect = EditorView.scrollIntoView(selection.main.head, { y: \"start\", yMargin: startPos.top - scrollTop });\n }\n view.dispatch(setSel(state, selection), { effects: effect });\n return true;\n}\n/**\nMove the selection one page up.\n*/\nconst cursorPageUp = view => cursorByPage(view, false);\n/**\nMove the selection one page down.\n*/\nconst cursorPageDown = view => cursorByPage(view, true);\nfunction moveByLineBoundary(view, start, forward) {\n let line = view.lineBlockAt(start.head), moved = view.moveToLineBoundary(start, forward);\n if (moved.head == start.head && moved.head != (forward ? line.to : line.from))\n moved = view.moveToLineBoundary(start, forward, false);\n if (!forward && moved.head == line.from && line.length) {\n let space = /^\\s*/.exec(view.state.sliceDoc(line.from, Math.min(line.from + 100, line.to)))[0].length;\n if (space && start.head != line.from + space)\n moved = EditorSelection.cursor(line.from + space);\n }\n return moved;\n}\n/**\nMove the selection to the next line wrap point, or to the end of\nthe line if there isn't one left on this line.\n*/\nconst cursorLineBoundaryForward = view => moveSel(view, range => moveByLineBoundary(view, range, true));\n/**\nMove the selection to previous line wrap point, or failing that to\nthe start of the line. If the line is indented, and the cursor\nisn't already at the end of the indentation, this will move to the\nend of the indentation instead of the start of the line.\n*/\nconst cursorLineBoundaryBackward = view => moveSel(view, range => moveByLineBoundary(view, range, false));\n/**\nMove the selection one line wrap point to the left.\n*/\nconst cursorLineBoundaryLeft = view => moveSel(view, range => moveByLineBoundary(view, range, !ltrAtCursor(view)));\n/**\nMove the selection one line wrap point to the right.\n*/\nconst cursorLineBoundaryRight = view => moveSel(view, range => moveByLineBoundary(view, range, ltrAtCursor(view)));\n/**\nMove the selection to the start of the line.\n*/\nconst cursorLineStart = view => moveSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).from, 1));\n/**\nMove the selection to the end of the line.\n*/\nconst cursorLineEnd = view => moveSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).to, -1));\nfunction toMatchingBracket(state, dispatch, extend) {\n let found = false, selection = updateSel(state.selection, range => {\n let matching = matchBrackets(state, range.head, -1)\n || matchBrackets(state, range.head, 1)\n || (range.head > 0 && matchBrackets(state, range.head - 1, 1))\n || (range.head < state.doc.length && matchBrackets(state, range.head + 1, -1));\n if (!matching || !matching.end)\n return range;\n found = true;\n let head = matching.start.from == range.head ? matching.end.to : matching.end.from;\n return extend ? EditorSelection.range(range.anchor, head) : EditorSelection.cursor(head);\n });\n if (!found)\n return false;\n dispatch(setSel(state, selection));\n return true;\n}\n/**\nMove the selection to the bracket matching the one it is currently\non, if any.\n*/\nconst cursorMatchingBracket = ({ state, dispatch }) => toMatchingBracket(state, dispatch, false);\n/**\nExtend the selection to the bracket matching the one the selection\nhead is currently on, if any.\n*/\nconst selectMatchingBracket = ({ state, dispatch }) => toMatchingBracket(state, dispatch, true);\nfunction extendSel(view, how) {\n let selection = updateSel(view.state.selection, range => {\n let head = how(range);\n return EditorSelection.range(range.anchor, head.head, head.goalColumn, head.bidiLevel || undefined);\n });\n if (selection.eq(view.state.selection))\n return false;\n view.dispatch(setSel(view.state, selection));\n return true;\n}\nfunction selectByChar(view, forward) {\n return extendSel(view, range => view.moveByChar(range, forward));\n}\n/**\nMove the selection head one character to the left, while leaving\nthe anchor in place.\n*/\nconst selectCharLeft = view => selectByChar(view, !ltrAtCursor(view));\n/**\nMove the selection head one character to the right.\n*/\nconst selectCharRight = view => selectByChar(view, ltrAtCursor(view));\n/**\nMove the selection head one character forward.\n*/\nconst selectCharForward = view => selectByChar(view, true);\n/**\nMove the selection head one character backward.\n*/\nconst selectCharBackward = view => selectByChar(view, false);\nfunction selectByGroup(view, forward) {\n return extendSel(view, range => view.moveByGroup(range, forward));\n}\n/**\nMove the selection head one [group](https://codemirror.net/6/docs/ref/#commands.cursorGroupLeft) to\nthe left.\n*/\nconst selectGroupLeft = view => selectByGroup(view, !ltrAtCursor(view));\n/**\nMove the selection head one group to the right.\n*/\nconst selectGroupRight = view => selectByGroup(view, ltrAtCursor(view));\n/**\nMove the selection head one group forward.\n*/\nconst selectGroupForward = view => selectByGroup(view, true);\n/**\nMove the selection head one group backward.\n*/\nconst selectGroupBackward = view => selectByGroup(view, false);\nfunction selectBySubword(view, forward) {\n return extendSel(view, range => moveBySubword(view, range, forward));\n}\n/**\nMove the selection head one group or camel-case subword forward.\n*/\nconst selectSubwordForward = view => selectBySubword(view, true);\n/**\nMove the selection head one group or subword backward.\n*/\nconst selectSubwordBackward = view => selectBySubword(view, false);\n/**\nMove the selection head over the next syntactic element to the left.\n*/\nconst selectSyntaxLeft = view => extendSel(view, range => moveBySyntax(view.state, range, !ltrAtCursor(view)));\n/**\nMove the selection head over the next syntactic element to the right.\n*/\nconst selectSyntaxRight = view => extendSel(view, range => moveBySyntax(view.state, range, ltrAtCursor(view)));\nfunction selectByLine(view, forward) {\n return extendSel(view, range => view.moveVertically(range, forward));\n}\n/**\nMove the selection head one line up.\n*/\nconst selectLineUp = view => selectByLine(view, false);\n/**\nMove the selection head one line down.\n*/\nconst selectLineDown = view => selectByLine(view, true);\nfunction selectByPage(view, forward) {\n return extendSel(view, range => view.moveVertically(range, forward, pageInfo(view).height));\n}\n/**\nMove the selection head one page up.\n*/\nconst selectPageUp = view => selectByPage(view, false);\n/**\nMove the selection head one page down.\n*/\nconst selectPageDown = view => selectByPage(view, true);\n/**\nMove the selection head to the next line boundary.\n*/\nconst selectLineBoundaryForward = view => extendSel(view, range => moveByLineBoundary(view, range, true));\n/**\nMove the selection head to the previous line boundary.\n*/\nconst selectLineBoundaryBackward = view => extendSel(view, range => moveByLineBoundary(view, range, false));\n/**\nMove the selection head one line boundary to the left.\n*/\nconst selectLineBoundaryLeft = view => extendSel(view, range => moveByLineBoundary(view, range, !ltrAtCursor(view)));\n/**\nMove the selection head one line boundary to the right.\n*/\nconst selectLineBoundaryRight = view => extendSel(view, range => moveByLineBoundary(view, range, ltrAtCursor(view)));\n/**\nMove the selection head to the start of the line.\n*/\nconst selectLineStart = view => extendSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).from));\n/**\nMove the selection head to the end of the line.\n*/\nconst selectLineEnd = view => extendSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).to));\n/**\nMove the selection to the start of the document.\n*/\nconst cursorDocStart = ({ state, dispatch }) => {\n dispatch(setSel(state, { anchor: 0 }));\n return true;\n};\n/**\nMove the selection to the end of the document.\n*/\nconst cursorDocEnd = ({ state, dispatch }) => {\n dispatch(setSel(state, { anchor: state.doc.length }));\n return true;\n};\n/**\nMove the selection head to the start of the document.\n*/\nconst selectDocStart = ({ state, dispatch }) => {\n dispatch(setSel(state, { anchor: state.selection.main.anchor, head: 0 }));\n return true;\n};\n/**\nMove the selection head to the end of the document.\n*/\nconst selectDocEnd = ({ state, dispatch }) => {\n dispatch(setSel(state, { anchor: state.selection.main.anchor, head: state.doc.length }));\n return true;\n};\n/**\nSelect the entire document.\n*/\nconst selectAll = ({ state, dispatch }) => {\n dispatch(state.update({ selection: { anchor: 0, head: state.doc.length }, userEvent: \"select\" }));\n return true;\n};\n/**\nExpand the selection to cover entire lines.\n*/\nconst selectLine = ({ state, dispatch }) => {\n let ranges = selectedLineBlocks(state).map(({ from, to }) => EditorSelection.range(from, Math.min(to + 1, state.doc.length)));\n dispatch(state.update({ selection: EditorSelection.create(ranges), userEvent: \"select\" }));\n return true;\n};\n/**\nSelect the next syntactic construct that is larger than the\nselection. Note that this will only work insofar as the language\n[provider](https://codemirror.net/6/docs/ref/#language.language) you use builds up a full\nsyntax tree.\n*/\nconst selectParentSyntax = ({ state, dispatch }) => {\n let selection = updateSel(state.selection, range => {\n var _a;\n let stack = syntaxTree(state).resolveStack(range.from, 1);\n for (let cur = stack; cur; cur = cur.next) {\n let { node } = cur;\n if (((node.from < range.from && node.to >= range.to) ||\n (node.to > range.to && node.from <= range.from)) &&\n ((_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent))\n return EditorSelection.range(node.to, node.from);\n }\n return range;\n });\n dispatch(setSel(state, selection));\n return true;\n};\n/**\nSimplify the current selection. When multiple ranges are selected,\nreduce it to its main range. Otherwise, if the selection is\nnon-empty, convert it to a cursor selection.\n*/\nconst simplifySelection = ({ state, dispatch }) => {\n let cur = state.selection, selection = null;\n if (cur.ranges.length > 1)\n selection = EditorSelection.create([cur.main]);\n else if (!cur.main.empty)\n selection = EditorSelection.create([EditorSelection.cursor(cur.main.head)]);\n if (!selection)\n return false;\n dispatch(setSel(state, selection));\n return true;\n};\nfunction deleteBy(target, by) {\n if (target.state.readOnly)\n return false;\n let event = \"delete.selection\", { state } = target;\n let changes = state.changeByRange(range => {\n let { from, to } = range;\n if (from == to) {\n let towards = by(range);\n if (towards < from) {\n event = \"delete.backward\";\n towards = skipAtomic(target, towards, false);\n }\n else if (towards > from) {\n event = \"delete.forward\";\n towards = skipAtomic(target, towards, true);\n }\n from = Math.min(from, towards);\n to = Math.max(to, towards);\n }\n else {\n from = skipAtomic(target, from, false);\n to = skipAtomic(target, to, true);\n }\n return from == to ? { range } : { changes: { from, to }, range: EditorSelection.cursor(from, from < range.head ? -1 : 1) };\n });\n if (changes.changes.empty)\n return false;\n target.dispatch(state.update(changes, {\n scrollIntoView: true,\n userEvent: event,\n effects: event == \"delete.selection\" ? EditorView.announce.of(state.phrase(\"Selection deleted\")) : undefined\n }));\n return true;\n}\nfunction skipAtomic(target, pos, forward) {\n if (target instanceof EditorView)\n for (let ranges of target.state.facet(EditorView.atomicRanges).map(f => f(target)))\n ranges.between(pos, pos, (from, to) => {\n if (from < pos && to > pos)\n pos = forward ? to : from;\n });\n return pos;\n}\nconst deleteByChar = (target, forward, byIndentUnit) => deleteBy(target, range => {\n let pos = range.from, { state } = target, line = state.doc.lineAt(pos), before, targetPos;\n if (byIndentUnit && !forward && pos > line.from && pos < line.from + 200 &&\n !/[^ \\t]/.test(before = line.text.slice(0, pos - line.from))) {\n if (before[before.length - 1] == \"\\t\")\n return pos - 1;\n let col = countColumn(before, state.tabSize), drop = col % getIndentUnit(state) || getIndentUnit(state);\n for (let i = 0; i < drop && before[before.length - 1 - i] == \" \"; i++)\n pos--;\n targetPos = pos;\n }\n else {\n targetPos = findClusterBreak(line.text, pos - line.from, forward, forward) + line.from;\n if (targetPos == pos && line.number != (forward ? state.doc.lines : 1))\n targetPos += forward ? 1 : -1;\n else if (!forward && /[\\ufe00-\\ufe0f]/.test(line.text.slice(targetPos - line.from, pos - line.from)))\n targetPos = findClusterBreak(line.text, targetPos - line.from, false, false) + line.from;\n }\n return targetPos;\n});\n/**\nDelete the selection, or, for cursor selections, the character or\nindentation unit before the cursor.\n*/\nconst deleteCharBackward = view => deleteByChar(view, false, true);\n/**\nDelete the selection or the character before the cursor. Does not\nimplement any extended behavior like deleting whole indentation\nunits in one go.\n*/\nconst deleteCharBackwardStrict = view => deleteByChar(view, false, false);\n/**\nDelete the selection or the character after the cursor.\n*/\nconst deleteCharForward = view => deleteByChar(view, true, false);\nconst deleteByGroup = (target, forward) => deleteBy(target, range => {\n let pos = range.head, { state } = target, line = state.doc.lineAt(pos);\n let categorize = state.charCategorizer(pos);\n for (let cat = null;;) {\n if (pos == (forward ? line.to : line.from)) {\n if (pos == range.head && line.number != (forward ? state.doc.lines : 1))\n pos += forward ? 1 : -1;\n break;\n }\n let next = findClusterBreak(line.text, pos - line.from, forward) + line.from;\n let nextChar = line.text.slice(Math.min(pos, next) - line.from, Math.max(pos, next) - line.from);\n let nextCat = categorize(nextChar);\n if (cat != null && nextCat != cat)\n break;\n if (nextChar != \" \" || pos != range.head)\n cat = nextCat;\n pos = next;\n }\n return pos;\n});\n/**\nDelete the selection or backward until the end of the next\n[group](https://codemirror.net/6/docs/ref/#view.EditorView.moveByGroup), only skipping groups of\nwhitespace when they consist of a single space.\n*/\nconst deleteGroupBackward = target => deleteByGroup(target, false);\n/**\nDelete the selection or forward until the end of the next group.\n*/\nconst deleteGroupForward = target => deleteByGroup(target, true);\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe end of the line. If the cursor is directly at the end of the\nline, delete the line break after it.\n*/\nconst deleteToLineEnd = view => deleteBy(view, range => {\n let lineEnd = view.lineBlockAt(range.head).to;\n return range.head < lineEnd ? lineEnd : Math.min(view.state.doc.length, range.head + 1);\n});\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe start of the line. If the cursor is directly at the start of the\nline, delete the line break before it.\n*/\nconst deleteToLineStart = view => deleteBy(view, range => {\n let lineStart = view.lineBlockAt(range.head).from;\n return range.head > lineStart ? lineStart : Math.max(0, range.head - 1);\n});\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe start of the line or the next line wrap before the cursor.\n*/\nconst deleteLineBoundaryBackward = view => deleteBy(view, range => {\n let lineStart = view.moveToLineBoundary(range, false).head;\n return range.head > lineStart ? lineStart : Math.max(0, range.head - 1);\n});\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe end of the line or the next line wrap after the cursor.\n*/\nconst deleteLineBoundaryForward = view => deleteBy(view, range => {\n let lineStart = view.moveToLineBoundary(range, true).head;\n return range.head < lineStart ? lineStart : Math.min(view.state.doc.length, range.head + 1);\n});\n/**\nDelete all whitespace directly before a line end from the\ndocument.\n*/\nconst deleteTrailingWhitespace = ({ state, dispatch }) => {\n if (state.readOnly)\n return false;\n let changes = [];\n for (let pos = 0, prev = \"\", iter = state.doc.iter();;) {\n iter.next();\n if (iter.lineBreak || iter.done) {\n let trailing = prev.search(/\\s+$/);\n if (trailing > -1)\n changes.push({ from: pos - (prev.length - trailing), to: pos });\n if (iter.done)\n break;\n prev = \"\";\n }\n else {\n prev = iter.value;\n }\n pos += iter.value.length;\n }\n if (!changes.length)\n return false;\n dispatch(state.update({ changes, userEvent: \"delete\" }));\n return true;\n};\n/**\nReplace each selection range with a line break, leaving the cursor\non the line before the break.\n*/\nconst splitLine = ({ state, dispatch }) => {\n if (state.readOnly)\n return false;\n let changes = state.changeByRange(range => {\n return { changes: { from: range.from, to: range.to, insert: Text.of([\"\", \"\"]) },\n range: EditorSelection.cursor(range.from) };\n });\n dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"input\" }));\n return true;\n};\n/**\nFlip the characters before and after the cursor(s).\n*/\nconst transposeChars = ({ state, dispatch }) => {\n if (state.readOnly)\n return false;\n let changes = state.changeByRange(range => {\n if (!range.empty || range.from == 0 || range.from == state.doc.length)\n return { range };\n let pos = range.from, line = state.doc.lineAt(pos);\n let from = pos == line.from ? pos - 1 : findClusterBreak(line.text, pos - line.from, false) + line.from;\n let to = pos == line.to ? pos + 1 : findClusterBreak(line.text, pos - line.from, true) + line.from;\n return { changes: { from, to, insert: state.doc.slice(pos, to).append(state.doc.slice(from, pos)) },\n range: EditorSelection.cursor(to) };\n });\n if (changes.changes.empty)\n return false;\n dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"move.character\" }));\n return true;\n};\nfunction selectedLineBlocks(state) {\n let blocks = [], upto = -1;\n for (let range of state.selection.ranges) {\n let startLine = state.doc.lineAt(range.from), endLine = state.doc.lineAt(range.to);\n if (!range.empty && range.to == endLine.from)\n endLine = state.doc.lineAt(range.to - 1);\n if (upto >= startLine.number) {\n let prev = blocks[blocks.length - 1];\n prev.to = endLine.to;\n prev.ranges.push(range);\n }\n else {\n blocks.push({ from: startLine.from, to: endLine.to, ranges: [range] });\n }\n upto = endLine.number + 1;\n }\n return blocks;\n}\nfunction moveLine(state, dispatch, forward) {\n if (state.readOnly)\n return false;\n let changes = [], ranges = [];\n for (let block of selectedLineBlocks(state)) {\n if (forward ? block.to == state.doc.length : block.from == 0)\n continue;\n let nextLine = state.doc.lineAt(forward ? block.to + 1 : block.from - 1);\n let size = nextLine.length + 1;\n if (forward) {\n changes.push({ from: block.to, to: nextLine.to }, { from: block.from, insert: nextLine.text + state.lineBreak });\n for (let r of block.ranges)\n ranges.push(EditorSelection.range(Math.min(state.doc.length, r.anchor + size), Math.min(state.doc.length, r.head + size)));\n }\n else {\n changes.push({ from: nextLine.from, to: block.from }, { from: block.to, insert: state.lineBreak + nextLine.text });\n for (let r of block.ranges)\n ranges.push(EditorSelection.range(r.anchor - size, r.head - size));\n }\n }\n if (!changes.length)\n return false;\n dispatch(state.update({\n changes,\n scrollIntoView: true,\n selection: EditorSelection.create(ranges, state.selection.mainIndex),\n userEvent: \"move.line\"\n }));\n return true;\n}\n/**\nMove the selected lines up one line.\n*/\nconst moveLineUp = ({ state, dispatch }) => moveLine(state, dispatch, false);\n/**\nMove the selected lines down one line.\n*/\nconst moveLineDown = ({ state, dispatch }) => moveLine(state, dispatch, true);\nfunction copyLine(state, dispatch, forward) {\n if (state.readOnly)\n return false;\n let changes = [];\n for (let block of selectedLineBlocks(state)) {\n if (forward)\n changes.push({ from: block.from, insert: state.doc.slice(block.from, block.to) + state.lineBreak });\n else\n changes.push({ from: block.to, insert: state.lineBreak + state.doc.slice(block.from, block.to) });\n }\n dispatch(state.update({ changes, scrollIntoView: true, userEvent: \"input.copyline\" }));\n return true;\n}\n/**\nCreate a copy of the selected lines. Keep the selection in the top copy.\n*/\nconst copyLineUp = ({ state, dispatch }) => copyLine(state, dispatch, false);\n/**\nCreate a copy of the selected lines. Keep the selection in the bottom copy.\n*/\nconst copyLineDown = ({ state, dispatch }) => copyLine(state, dispatch, true);\n/**\nDelete selected lines.\n*/\nconst deleteLine = view => {\n if (view.state.readOnly)\n return false;\n let { state } = view, changes = state.changes(selectedLineBlocks(state).map(({ from, to }) => {\n if (from > 0)\n from--;\n else if (to < state.doc.length)\n to++;\n return { from, to };\n }));\n let selection = updateSel(state.selection, range => {\n let dist = undefined;\n if (view.lineWrapping) {\n let block = view.lineBlockAt(range.head), pos = view.coordsAtPos(range.head, range.assoc || 1);\n if (pos)\n dist = (block.bottom + view.documentTop) - pos.bottom + view.defaultLineHeight / 2;\n }\n return view.moveVertically(range, true, dist);\n }).map(changes);\n view.dispatch({ changes, selection, scrollIntoView: true, userEvent: \"delete.line\" });\n return true;\n};\n/**\nReplace the selection with a newline.\n*/\nconst insertNewline = ({ state, dispatch }) => {\n dispatch(state.update(state.replaceSelection(state.lineBreak), { scrollIntoView: true, userEvent: \"input\" }));\n return true;\n};\n/**\nReplace the selection with a newline and the same amount of\nindentation as the line above.\n*/\nconst insertNewlineKeepIndent = ({ state, dispatch }) => {\n dispatch(state.update(state.changeByRange(range => {\n let indent = /^\\s*/.exec(state.doc.lineAt(range.from).text)[0];\n return {\n changes: { from: range.from, to: range.to, insert: state.lineBreak + indent },\n range: EditorSelection.cursor(range.from + indent.length + 1)\n };\n }), { scrollIntoView: true, userEvent: \"input\" }));\n return true;\n};\nfunction isBetweenBrackets(state, pos) {\n if (/\\(\\)|\\[\\]|\\{\\}/.test(state.sliceDoc(pos - 1, pos + 1)))\n return { from: pos, to: pos };\n let context = syntaxTree(state).resolveInner(pos);\n let before = context.childBefore(pos), after = context.childAfter(pos), closedBy;\n if (before && after && before.to <= pos && after.from >= pos &&\n (closedBy = before.type.prop(NodeProp.closedBy)) && closedBy.indexOf(after.name) > -1 &&\n state.doc.lineAt(before.to).from == state.doc.lineAt(after.from).from &&\n !/\\S/.test(state.sliceDoc(before.to, after.from)))\n return { from: before.to, to: after.from };\n return null;\n}\n/**\nReplace the selection with a newline and indent the newly created\nline(s). If the current line consists only of whitespace, this\nwill also delete that whitespace. When the cursor is between\nmatching brackets, an additional newline will be inserted after\nthe cursor.\n*/\nconst insertNewlineAndIndent = /*@__PURE__*/newlineAndIndent(false);\n/**\nCreate a blank, indented line below the current line.\n*/\nconst insertBlankLine = /*@__PURE__*/newlineAndIndent(true);\nfunction newlineAndIndent(atEof) {\n return ({ state, dispatch }) => {\n if (state.readOnly)\n return false;\n let changes = state.changeByRange(range => {\n let { from, to } = range, line = state.doc.lineAt(from);\n let explode = !atEof && from == to && isBetweenBrackets(state, from);\n if (atEof)\n from = to = (to <= line.to ? line : state.doc.lineAt(to)).to;\n let cx = new IndentContext(state, { simulateBreak: from, simulateDoubleBreak: !!explode });\n let indent = getIndentation(cx, from);\n if (indent == null)\n indent = countColumn(/^\\s*/.exec(state.doc.lineAt(from).text)[0], state.tabSize);\n while (to < line.to && /\\s/.test(line.text[to - line.from]))\n to++;\n if (explode)\n ({ from, to } = explode);\n else if (from > line.from && from < line.from + 100 && !/\\S/.test(line.text.slice(0, from)))\n from = line.from;\n let insert = [\"\", indentString(state, indent)];\n if (explode)\n insert.push(indentString(state, cx.lineIndent(line.from, -1)));\n return { changes: { from, to, insert: Text.of(insert) },\n range: EditorSelection.cursor(from + 1 + insert[1].length) };\n });\n dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"input\" }));\n return true;\n };\n}\nfunction changeBySelectedLine(state, f) {\n let atLine = -1;\n return state.changeByRange(range => {\n let changes = [];\n for (let pos = range.from; pos <= range.to;) {\n let line = state.doc.lineAt(pos);\n if (line.number > atLine && (range.empty || range.to > line.from)) {\n f(line, changes, range);\n atLine = line.number;\n }\n pos = line.to + 1;\n }\n let changeSet = state.changes(changes);\n return { changes,\n range: EditorSelection.range(changeSet.mapPos(range.anchor, 1), changeSet.mapPos(range.head, 1)) };\n });\n}\n/**\nAuto-indent the selected lines. This uses the [indentation service\nfacet](https://codemirror.net/6/docs/ref/#language.indentService) as source for auto-indent\ninformation.\n*/\nconst indentSelection = ({ state, dispatch }) => {\n if (state.readOnly)\n return false;\n let updated = Object.create(null);\n let context = new IndentContext(state, { overrideIndentation: start => {\n let found = updated[start];\n return found == null ? -1 : found;\n } });\n let changes = changeBySelectedLine(state, (line, changes, range) => {\n let indent = getIndentation(context, line.from);\n if (indent == null)\n return;\n if (!/\\S/.test(line.text))\n indent = 0;\n let cur = /^\\s*/.exec(line.text)[0];\n let norm = indentString(state, indent);\n if (cur != norm || range.from < line.from + cur.length) {\n updated[line.from] = indent;\n changes.push({ from: line.from, to: line.from + cur.length, insert: norm });\n }\n });\n if (!changes.changes.empty)\n dispatch(state.update(changes, { userEvent: \"indent\" }));\n return true;\n};\n/**\nAdd a [unit](https://codemirror.net/6/docs/ref/#language.indentUnit) of indentation to all selected\nlines.\n*/\nconst indentMore = ({ state, dispatch }) => {\n if (state.readOnly)\n return false;\n dispatch(state.update(changeBySelectedLine(state, (line, changes) => {\n changes.push({ from: line.from, insert: state.facet(indentUnit) });\n }), { userEvent: \"input.indent\" }));\n return true;\n};\n/**\nRemove a [unit](https://codemirror.net/6/docs/ref/#language.indentUnit) of indentation from all\nselected lines.\n*/\nconst indentLess = ({ state, dispatch }) => {\n if (state.readOnly)\n return false;\n dispatch(state.update(changeBySelectedLine(state, (line, changes) => {\n let space = /^\\s*/.exec(line.text)[0];\n if (!space)\n return;\n let col = countColumn(space, state.tabSize), keep = 0;\n let insert = indentString(state, Math.max(0, col - getIndentUnit(state)));\n while (keep < space.length && keep < insert.length && space.charCodeAt(keep) == insert.charCodeAt(keep))\n keep++;\n changes.push({ from: line.from + keep, to: line.from + space.length, insert: insert.slice(keep) });\n }), { userEvent: \"delete.dedent\" }));\n return true;\n};\n/**\nInsert a tab character at the cursor or, if something is selected,\nuse [`indentMore`](https://codemirror.net/6/docs/ref/#commands.indentMore) to indent the entire\nselection.\n*/\nconst insertTab = ({ state, dispatch }) => {\n if (state.selection.ranges.some(r => !r.empty))\n return indentMore({ state, dispatch });\n dispatch(state.update(state.replaceSelection(\"\\t\"), { scrollIntoView: true, userEvent: \"input\" }));\n return true;\n};\n/**\nArray of key bindings containing the Emacs-style bindings that are\navailable on macOS by default.\n\n - Ctrl-b: [`cursorCharLeft`](https://codemirror.net/6/docs/ref/#commands.cursorCharLeft) ([`selectCharLeft`](https://codemirror.net/6/docs/ref/#commands.selectCharLeft) with Shift)\n - Ctrl-f: [`cursorCharRight`](https://codemirror.net/6/docs/ref/#commands.cursorCharRight) ([`selectCharRight`](https://codemirror.net/6/docs/ref/#commands.selectCharRight) with Shift)\n - Ctrl-p: [`cursorLineUp`](https://codemirror.net/6/docs/ref/#commands.cursorLineUp) ([`selectLineUp`](https://codemirror.net/6/docs/ref/#commands.selectLineUp) with Shift)\n - Ctrl-n: [`cursorLineDown`](https://codemirror.net/6/docs/ref/#commands.cursorLineDown) ([`selectLineDown`](https://codemirror.net/6/docs/ref/#commands.selectLineDown) with Shift)\n - Ctrl-a: [`cursorLineStart`](https://codemirror.net/6/docs/ref/#commands.cursorLineStart) ([`selectLineStart`](https://codemirror.net/6/docs/ref/#commands.selectLineStart) with Shift)\n - Ctrl-e: [`cursorLineEnd`](https://codemirror.net/6/docs/ref/#commands.cursorLineEnd) ([`selectLineEnd`](https://codemirror.net/6/docs/ref/#commands.selectLineEnd) with Shift)\n - Ctrl-d: [`deleteCharForward`](https://codemirror.net/6/docs/ref/#commands.deleteCharForward)\n - Ctrl-h: [`deleteCharBackward`](https://codemirror.net/6/docs/ref/#commands.deleteCharBackward)\n - Ctrl-k: [`deleteToLineEnd`](https://codemirror.net/6/docs/ref/#commands.deleteToLineEnd)\n - Ctrl-Alt-h: [`deleteGroupBackward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupBackward)\n - Ctrl-o: [`splitLine`](https://codemirror.net/6/docs/ref/#commands.splitLine)\n - Ctrl-t: [`transposeChars`](https://codemirror.net/6/docs/ref/#commands.transposeChars)\n - Ctrl-v: [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown)\n - Alt-v: [`cursorPageUp`](https://codemirror.net/6/docs/ref/#commands.cursorPageUp)\n*/\nconst emacsStyleKeymap = [\n { key: \"Ctrl-b\", run: cursorCharLeft, shift: selectCharLeft, preventDefault: true },\n { key: \"Ctrl-f\", run: cursorCharRight, shift: selectCharRight },\n { key: \"Ctrl-p\", run: cursorLineUp, shift: selectLineUp },\n { key: \"Ctrl-n\", run: cursorLineDown, shift: selectLineDown },\n { key: \"Ctrl-a\", run: cursorLineStart, shift: selectLineStart },\n { key: \"Ctrl-e\", run: cursorLineEnd, shift: selectLineEnd },\n { key: \"Ctrl-d\", run: deleteCharForward },\n { key: \"Ctrl-h\", run: deleteCharBackward },\n { key: \"Ctrl-k\", run: deleteToLineEnd },\n { key: \"Ctrl-Alt-h\", run: deleteGroupBackward },\n { key: \"Ctrl-o\", run: splitLine },\n { key: \"Ctrl-t\", run: transposeChars },\n { key: \"Ctrl-v\", run: cursorPageDown },\n];\n/**\nAn array of key bindings closely sticking to platform-standard or\nwidely used bindings. (This includes the bindings from\n[`emacsStyleKeymap`](https://codemirror.net/6/docs/ref/#commands.emacsStyleKeymap), with their `key`\nproperty changed to `mac`.)\n\n - ArrowLeft: [`cursorCharLeft`](https://codemirror.net/6/docs/ref/#commands.cursorCharLeft) ([`selectCharLeft`](https://codemirror.net/6/docs/ref/#commands.selectCharLeft) with Shift)\n - ArrowRight: [`cursorCharRight`](https://codemirror.net/6/docs/ref/#commands.cursorCharRight) ([`selectCharRight`](https://codemirror.net/6/docs/ref/#commands.selectCharRight) with Shift)\n - Ctrl-ArrowLeft (Alt-ArrowLeft on macOS): [`cursorGroupLeft`](https://codemirror.net/6/docs/ref/#commands.cursorGroupLeft) ([`selectGroupLeft`](https://codemirror.net/6/docs/ref/#commands.selectGroupLeft) with Shift)\n - Ctrl-ArrowRight (Alt-ArrowRight on macOS): [`cursorGroupRight`](https://codemirror.net/6/docs/ref/#commands.cursorGroupRight) ([`selectGroupRight`](https://codemirror.net/6/docs/ref/#commands.selectGroupRight) with Shift)\n - Cmd-ArrowLeft (on macOS): [`cursorLineStart`](https://codemirror.net/6/docs/ref/#commands.cursorLineStart) ([`selectLineStart`](https://codemirror.net/6/docs/ref/#commands.selectLineStart) with Shift)\n - Cmd-ArrowRight (on macOS): [`cursorLineEnd`](https://codemirror.net/6/docs/ref/#commands.cursorLineEnd) ([`selectLineEnd`](https://codemirror.net/6/docs/ref/#commands.selectLineEnd) with Shift)\n - ArrowUp: [`cursorLineUp`](https://codemirror.net/6/docs/ref/#commands.cursorLineUp) ([`selectLineUp`](https://codemirror.net/6/docs/ref/#commands.selectLineUp) with Shift)\n - ArrowDown: [`cursorLineDown`](https://codemirror.net/6/docs/ref/#commands.cursorLineDown) ([`selectLineDown`](https://codemirror.net/6/docs/ref/#commands.selectLineDown) with Shift)\n - Cmd-ArrowUp (on macOS): [`cursorDocStart`](https://codemirror.net/6/docs/ref/#commands.cursorDocStart) ([`selectDocStart`](https://codemirror.net/6/docs/ref/#commands.selectDocStart) with Shift)\n - Cmd-ArrowDown (on macOS): [`cursorDocEnd`](https://codemirror.net/6/docs/ref/#commands.cursorDocEnd) ([`selectDocEnd`](https://codemirror.net/6/docs/ref/#commands.selectDocEnd) with Shift)\n - Ctrl-ArrowUp (on macOS): [`cursorPageUp`](https://codemirror.net/6/docs/ref/#commands.cursorPageUp) ([`selectPageUp`](https://codemirror.net/6/docs/ref/#commands.selectPageUp) with Shift)\n - Ctrl-ArrowDown (on macOS): [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown) ([`selectPageDown`](https://codemirror.net/6/docs/ref/#commands.selectPageDown) with Shift)\n - PageUp: [`cursorPageUp`](https://codemirror.net/6/docs/ref/#commands.cursorPageUp) ([`selectPageUp`](https://codemirror.net/6/docs/ref/#commands.selectPageUp) with Shift)\n - PageDown: [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown) ([`selectPageDown`](https://codemirror.net/6/docs/ref/#commands.selectPageDown) with Shift)\n - Home: [`cursorLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.cursorLineBoundaryBackward) ([`selectLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.selectLineBoundaryBackward) with Shift)\n - End: [`cursorLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.cursorLineBoundaryForward) ([`selectLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.selectLineBoundaryForward) with Shift)\n - Ctrl-Home (Cmd-Home on macOS): [`cursorDocStart`](https://codemirror.net/6/docs/ref/#commands.cursorDocStart) ([`selectDocStart`](https://codemirror.net/6/docs/ref/#commands.selectDocStart) with Shift)\n - Ctrl-End (Cmd-Home on macOS): [`cursorDocEnd`](https://codemirror.net/6/docs/ref/#commands.cursorDocEnd) ([`selectDocEnd`](https://codemirror.net/6/docs/ref/#commands.selectDocEnd) with Shift)\n - Enter: [`insertNewlineAndIndent`](https://codemirror.net/6/docs/ref/#commands.insertNewlineAndIndent)\n - Ctrl-a (Cmd-a on macOS): [`selectAll`](https://codemirror.net/6/docs/ref/#commands.selectAll)\n - Backspace: [`deleteCharBackward`](https://codemirror.net/6/docs/ref/#commands.deleteCharBackward)\n - Delete: [`deleteCharForward`](https://codemirror.net/6/docs/ref/#commands.deleteCharForward)\n - Ctrl-Backspace (Alt-Backspace on macOS): [`deleteGroupBackward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupBackward)\n - Ctrl-Delete (Alt-Delete on macOS): [`deleteGroupForward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupForward)\n - Cmd-Backspace (macOS): [`deleteLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.deleteLineBoundaryBackward).\n - Cmd-Delete (macOS): [`deleteLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.deleteLineBoundaryForward).\n*/\nconst standardKeymap = /*@__PURE__*/[\n { key: \"ArrowLeft\", run: cursorCharLeft, shift: selectCharLeft, preventDefault: true },\n { key: \"Mod-ArrowLeft\", mac: \"Alt-ArrowLeft\", run: cursorGroupLeft, shift: selectGroupLeft, preventDefault: true },\n { mac: \"Cmd-ArrowLeft\", run: cursorLineBoundaryLeft, shift: selectLineBoundaryLeft, preventDefault: true },\n { key: \"ArrowRight\", run: cursorCharRight, shift: selectCharRight, preventDefault: true },\n { key: \"Mod-ArrowRight\", mac: \"Alt-ArrowRight\", run: cursorGroupRight, shift: selectGroupRight, preventDefault: true },\n { mac: \"Cmd-ArrowRight\", run: cursorLineBoundaryRight, shift: selectLineBoundaryRight, preventDefault: true },\n { key: \"ArrowUp\", run: cursorLineUp, shift: selectLineUp, preventDefault: true },\n { mac: \"Cmd-ArrowUp\", run: cursorDocStart, shift: selectDocStart },\n { mac: \"Ctrl-ArrowUp\", run: cursorPageUp, shift: selectPageUp },\n { key: \"ArrowDown\", run: cursorLineDown, shift: selectLineDown, preventDefault: true },\n { mac: \"Cmd-ArrowDown\", run: cursorDocEnd, shift: selectDocEnd },\n { mac: \"Ctrl-ArrowDown\", run: cursorPageDown, shift: selectPageDown },\n { key: \"PageUp\", run: cursorPageUp, shift: selectPageUp },\n { key: \"PageDown\", run: cursorPageDown, shift: selectPageDown },\n { key: \"Home\", run: cursorLineBoundaryBackward, shift: selectLineBoundaryBackward, preventDefault: true },\n { key: \"Mod-Home\", run: cursorDocStart, shift: selectDocStart },\n { key: \"End\", run: cursorLineBoundaryForward, shift: selectLineBoundaryForward, preventDefault: true },\n { key: \"Mod-End\", run: cursorDocEnd, shift: selectDocEnd },\n { key: \"Enter\", run: insertNewlineAndIndent },\n { key: \"Mod-a\", run: selectAll },\n { key: \"Backspace\", run: deleteCharBackward, shift: deleteCharBackward },\n { key: \"Delete\", run: deleteCharForward },\n { key: \"Mod-Backspace\", mac: \"Alt-Backspace\", run: deleteGroupBackward },\n { key: \"Mod-Delete\", mac: \"Alt-Delete\", run: deleteGroupForward },\n { mac: \"Mod-Backspace\", run: deleteLineBoundaryBackward },\n { mac: \"Mod-Delete\", run: deleteLineBoundaryForward }\n].concat(/*@__PURE__*/emacsStyleKeymap.map(b => ({ mac: b.key, run: b.run, shift: b.shift })));\n/**\nThe default keymap. Includes all bindings from\n[`standardKeymap`](https://codemirror.net/6/docs/ref/#commands.standardKeymap) plus the following:\n\n- Alt-ArrowLeft (Ctrl-ArrowLeft on macOS): [`cursorSyntaxLeft`](https://codemirror.net/6/docs/ref/#commands.cursorSyntaxLeft) ([`selectSyntaxLeft`](https://codemirror.net/6/docs/ref/#commands.selectSyntaxLeft) with Shift)\n- Alt-ArrowRight (Ctrl-ArrowRight on macOS): [`cursorSyntaxRight`](https://codemirror.net/6/docs/ref/#commands.cursorSyntaxRight) ([`selectSyntaxRight`](https://codemirror.net/6/docs/ref/#commands.selectSyntaxRight) with Shift)\n- Alt-ArrowUp: [`moveLineUp`](https://codemirror.net/6/docs/ref/#commands.moveLineUp)\n- Alt-ArrowDown: [`moveLineDown`](https://codemirror.net/6/docs/ref/#commands.moveLineDown)\n- Shift-Alt-ArrowUp: [`copyLineUp`](https://codemirror.net/6/docs/ref/#commands.copyLineUp)\n- Shift-Alt-ArrowDown: [`copyLineDown`](https://codemirror.net/6/docs/ref/#commands.copyLineDown)\n- Escape: [`simplifySelection`](https://codemirror.net/6/docs/ref/#commands.simplifySelection)\n- Ctrl-Enter (Cmd-Enter on macOS): [`insertBlankLine`](https://codemirror.net/6/docs/ref/#commands.insertBlankLine)\n- Alt-l (Ctrl-l on macOS): [`selectLine`](https://codemirror.net/6/docs/ref/#commands.selectLine)\n- Ctrl-i (Cmd-i on macOS): [`selectParentSyntax`](https://codemirror.net/6/docs/ref/#commands.selectParentSyntax)\n- Ctrl-[ (Cmd-[ on macOS): [`indentLess`](https://codemirror.net/6/docs/ref/#commands.indentLess)\n- Ctrl-] (Cmd-] on macOS): [`indentMore`](https://codemirror.net/6/docs/ref/#commands.indentMore)\n- Ctrl-Alt-\\\\ (Cmd-Alt-\\\\ on macOS): [`indentSelection`](https://codemirror.net/6/docs/ref/#commands.indentSelection)\n- Shift-Ctrl-k (Shift-Cmd-k on macOS): [`deleteLine`](https://codemirror.net/6/docs/ref/#commands.deleteLine)\n- Shift-Ctrl-\\\\ (Shift-Cmd-\\\\ on macOS): [`cursorMatchingBracket`](https://codemirror.net/6/docs/ref/#commands.cursorMatchingBracket)\n- Ctrl-/ (Cmd-/ on macOS): [`toggleComment`](https://codemirror.net/6/docs/ref/#commands.toggleComment).\n- Shift-Alt-a: [`toggleBlockComment`](https://codemirror.net/6/docs/ref/#commands.toggleBlockComment).\n*/\nconst defaultKeymap = /*@__PURE__*/[\n { key: \"Alt-ArrowLeft\", mac: \"Ctrl-ArrowLeft\", run: cursorSyntaxLeft, shift: selectSyntaxLeft },\n { key: \"Alt-ArrowRight\", mac: \"Ctrl-ArrowRight\", run: cursorSyntaxRight, shift: selectSyntaxRight },\n { key: \"Alt-ArrowUp\", run: moveLineUp },\n { key: \"Shift-Alt-ArrowUp\", run: copyLineUp },\n { key: \"Alt-ArrowDown\", run: moveLineDown },\n { key: \"Shift-Alt-ArrowDown\", run: copyLineDown },\n { key: \"Escape\", run: simplifySelection },\n { key: \"Mod-Enter\", run: insertBlankLine },\n { key: \"Alt-l\", mac: \"Ctrl-l\", run: selectLine },\n { key: \"Mod-i\", run: selectParentSyntax, preventDefault: true },\n { key: \"Mod-[\", run: indentLess },\n { key: \"Mod-]\", run: indentMore },\n { key: \"Mod-Alt-\\\\\", run: indentSelection },\n { key: \"Shift-Mod-k\", run: deleteLine },\n { key: \"Shift-Mod-\\\\\", run: cursorMatchingBracket },\n { key: \"Mod-/\", run: toggleComment },\n { key: \"Alt-A\", run: toggleBlockComment }\n].concat(standardKeymap);\n/**\nA binding that binds Tab to [`indentMore`](https://codemirror.net/6/docs/ref/#commands.indentMore) and\nShift-Tab to [`indentLess`](https://codemirror.net/6/docs/ref/#commands.indentLess).\nPlease see the [Tab example](../../examples/tab/) before using\nthis.\n*/\nconst indentWithTab = { key: \"Tab\", run: indentMore, shift: indentLess };\n\nexport { blockComment, blockUncomment, copyLineDown, copyLineUp, cursorCharBackward, cursorCharForward, cursorCharLeft, cursorCharRight, cursorDocEnd, cursorDocStart, cursorGroupBackward, cursorGroupForward, cursorGroupLeft, cursorGroupRight, cursorLineBoundaryBackward, cursorLineBoundaryForward, cursorLineBoundaryLeft, cursorLineBoundaryRight, cursorLineDown, cursorLineEnd, cursorLineStart, cursorLineUp, cursorMatchingBracket, cursorPageDown, cursorPageUp, cursorSubwordBackward, cursorSubwordForward, cursorSyntaxLeft, cursorSyntaxRight, defaultKeymap, deleteCharBackward, deleteCharBackwardStrict, deleteCharForward, deleteGroupBackward, deleteGroupForward, deleteLine, deleteLineBoundaryBackward, deleteLineBoundaryForward, deleteToLineEnd, deleteToLineStart, deleteTrailingWhitespace, emacsStyleKeymap, history, historyField, historyKeymap, indentLess, indentMore, indentSelection, indentWithTab, insertBlankLine, insertNewline, insertNewlineAndIndent, insertNewlineKeepIndent, insertTab, invertedEffects, isolateHistory, lineComment, lineUncomment, moveLineDown, moveLineUp, redo, redoDepth, redoSelection, selectAll, selectCharBackward, selectCharForward, selectCharLeft, selectCharRight, selectDocEnd, selectDocStart, selectGroupBackward, selectGroupForward, selectGroupLeft, selectGroupRight, selectLine, selectLineBoundaryBackward, selectLineBoundaryForward, selectLineBoundaryLeft, selectLineBoundaryRight, selectLineDown, selectLineEnd, selectLineStart, selectLineUp, selectMatchingBracket, selectPageDown, selectPageUp, selectParentSyntax, selectSubwordBackward, selectSubwordForward, selectSyntaxLeft, selectSyntaxRight, simplifySelection, splitLine, standardKeymap, toggleBlockComment, toggleBlockCommentByLine, toggleComment, toggleLineComment, transposeChars, undo, undoDepth, undoSelection };\n"],"names":["toggleComment","target","state","line","doc","lineAt","selection","main","from","config","getConfig","toggleLineComment","block","toggleBlockCommentByLine","command","f","option","dispatch","readOnly","tr","update","changeLineComment","lineComment","lineUncomment","toggleBlockComment","changeBlockComment","blockComment","blockUncomment","o","s","ranges","r","fromLine","toLine","to","last","length","push","exec","text","selectedLineRanges","pos","data","languageDataAt","SearchMargin","tokens","map","every","c","comments","i","open","close","startText","endText","textBefore","sliceDoc","textAfter","spaceBefore","spaceAfter","beforeOff","slice","margin","startSpace","endSpace","endOff","test","charAt","findBlockComment","changes","range","insert","some","comment","token","lines","prevLine","startI","minIndent","indent","empty","single","l","changeSet","fromHistory","Annotation","define","isolateHistory","invertedEffects","Facet","historyConfig","combine","configs","combineConfig","minDepth","newGroupDelay","joinToEvent","_t","isAdjacent","Math","max","min","a","b","adj","historyField_","StateField","create","HistoryState","facet","fromHist","annotation","item","HistEvent","fromTransaction","side","other","undone","done","updateBranch","addSelection","startState","rest","isolate","Transaction","addToHistory","addMapping","desc","event","time","userEvent","addChanges","toJSON","value","e","fromJSON","json","history","of","EditorView","domEventHandlers","beforeinput","view","inputType","undo","redo","preventDefault","historyField","cmd","historyState","field","pop","undoSelection","redoSelection","depth","histState","branch","undoDepth","redoDepth","constructor","effects","mapped","startSelection","selectionsAfter","this","setSelAfter","after","_a","_b","_c","ChangeSet","ChangeDesc","EditorSelection","none","invert","result","concat","undefined","selections","maxLen","newEvent","start","newBranch","conc","MaxSelectionsPerEvent","lastEvent","sels","eq","popSelection","addMappingToBranch","mapping","mapEvent","extraSelections","mappedChanges","before","mapDesc","fullMapping","composeDesc","StateEffect","mapEffects","joinableUserEvent","prevTime","prevUserEvent","iterChangedRanges","t","_f","compose","filter","onlySelection","annotations","scrollIntoView","historyKeymap","key","run","mac","linux","updateSel","sel","by","mainIndex","setSel","moveSel","how","rangeEnd","forward","cursor","cursorByChar","moveByChar","ltrAtCursor","textDirectionAt","head","Direction","LTR","cursorCharLeft","cursorCharRight","cursorCharForward","cursorCharBackward","cursorByGroup","moveByGroup","cursorGroupLeft","cursorGroupRight","cursorGroupForward","cursorGroupBackward","segmenter","Intl","Segmenter","granularity","moveBySubword","categorize","charCategorizer","cat","CharCategory","Space","steps","sawUpper","sawLower","step","next","ahead","nextCat","Word","charCodeAt","toLowerCase","end","skipped","segments","Array","segment","index","cursorBySubword","cursorSubwordForward","cursorSubwordBackward","interestingNode","node","bracketProp","type","prop","len","firstChild","moveBySyntax","match","newPos","syntaxTree","resolveInner","NodeProp","closedBy","openedBy","at","childAfter","childBefore","matchBrackets","matched","cursorSyntaxLeft","cursorSyntaxRight","cursorByLine","moved","moveVertically","moveToLineBoundary","cursorLineUp","cursorLineDown","pageInfo","height","selfScroll","scrollDOM","clientHeight","scrollHeight","marginTop","marginBottom","source","scrollMargins","margins","top","bottom","dom","ownerDocument","defaultView","window","innerHeight","defaultLineHeight","cursorByPage","effect","page","startPos","coordsAtPos","scrollRect","getBoundingClientRect","scrollTop","scrollBottom","y","yMargin","cursorPageUp","cursorPageDown","moveByLineBoundary","lineBlockAt","space","cursorLineBoundaryForward","cursorLineBoundaryBackward","cursorLineBoundaryLeft","cursorLineBoundaryRight","cursorLineStart","cursorLineEnd","toMatchingBracket","extend","found","matching","anchor","cursorMatchingBracket","selectMatchingBracket","extendSel","goalColumn","bidiLevel","selectByChar","selectCharLeft","selectCharRight","selectCharForward","selectCharBackward","selectByGroup","selectGroupLeft","selectGroupRight","selectGroupForward","selectGroupBackward","selectBySubword","selectSubwordForward","selectSubwordBackward","selectSyntaxLeft","selectSyntaxRight","selectByLine","selectLineUp","selectLineDown","selectByPage","selectPageUp","selectPageDown","selectLineBoundaryForward","selectLineBoundaryBackward","selectLineBoundaryLeft","selectLineBoundaryRight","selectLineStart","selectLineEnd","cursorDocStart","cursorDocEnd","selectDocStart","selectDocEnd","selectAll","selectLine","selectedLineBlocks","selectParentSyntax","cur","resolveStack","parent","simplifySelection","deleteBy","changeByRange","towards","skipAtomic","announce","phrase","atomicRanges","between","deleteByChar","byIndentUnit","targetPos","drop","countColumn","tabSize","getIndentUnit","findClusterBreak","number","deleteCharBackward","deleteCharBackwardStrict","deleteCharForward","deleteByGroup","nextChar","deleteGroupBackward","deleteGroupForward","deleteToLineEnd","lineEnd","deleteToLineStart","lineStart","deleteLineBoundaryBackward","deleteLineBoundaryForward","deleteTrailingWhitespace","prev","iter","lineBreak","trailing","search","splitLine","Text","transposeChars","append","blocks","upto","startLine","endLine","moveLine","nextLine","size","moveLineUp","moveLineDown","copyLine","copyLineUp","copyLineDown","deleteLine","dist","lineWrapping","assoc","documentTop","insertNewline","replaceSelection","insertNewlineKeepIndent","insertNewlineAndIndent","newlineAndIndent","insertBlankLine","atEof","explode","context","indexOf","name","isBetweenBrackets","cx","IndentContext","simulateBreak","simulateDoubleBreak","getIndentation","indentString","lineIndent","changeBySelectedLine","atLine","mapPos","indentSelection","updated","Object","overrideIndentation","norm","indentMore","indentUnit","indentLess","col","keep","insertTab","emacsStyleKeymap","shift","standardKeymap","defaultKeymap","indentWithTab"],"mappings":"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","x_google_ignoreList":[0]}
\ No newline at end of file
import{P as O,N as t,a as e,D as s,b as r,T as i,I as o,c as a,t as n,s as l,L as h,d as x,e as p,f as Q,g as S,h as c,j as T}from"./codemirror_language-_XiX6II0.js";import{i as u,c as P,s as f}from"./index-CTWZX_TW.js";import"./codemirror_state-BKbyfKsm.js";import"./codemirror_view-C0PMO2z_.js";class d{constructor(O,t,e,s,r,i,o,a,n,l=0,h){this.p=O,this.stack=t,this.state=e,this.reducePos=s,this.pos=r,this.score=i,this.buffer=o,this.bufferBase=a,this.curContext=n,this.lookAhead=l,this.parent=h}toString(){return`[${this.stack.filter(((O,t)=>t%3==0)).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(O,t,e=0){let s=O.parser.context;return new d(O,[],t,e,e,0,[],0,s?new $(s,s.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(O,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=O}reduce(O){var t;let e=O>>19,s=65535&O,{parser:r}=this.p,i=r.dynamicPrecedence(s);if(i&&(this.score+=i),0==e)return this.pushState(r.getGoto(this.state,s,!0),this.reducePos),s<r.minRepeatTerm&&this.storeNode(s,this.reducePos,this.reducePos,4,!0),void this.reduceContext(s,this.reducePos);let o=this.stack.length-3*(e-1)-(262144&O?6:0),a=o?this.stack[o-2]:this.p.ranges[0].from,n=this.reducePos-a;n>=2e3&&!(null===(t=this.p.parser.nodeSet.types[s])||void 0===t?void 0:t.isAnonymous)&&(a==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=n):this.p.lastBigReductionSize<n&&(this.p.bigReductionCount=1,this.p.lastBigReductionStart=a,this.p.lastBigReductionSize=n));let l=o?this.stack[o-1]:0,h=this.bufferBase+this.buffer.length-l;if(s<r.minRepeatTerm||131072&O){let O=r.stateFlag(this.state,1)?this.pos:this.reducePos;this.storeNode(s,a,O,h+4,!0)}if(262144&O)this.state=this.stack[o];else{let O=this.stack[o-3];this.state=r.getGoto(O,s,!0)}for(;this.stack.length>o;)this.stack.pop();this.reduceContext(s,a)}storeNode(O,t,e,s=4,r=!1){if(0==O&&(!this.stack.length||this.stack[this.stack.length-1]<this.buffer.length+this.bufferBase)){let O=this,s=this.buffer.length;if(0==s&&O.parent&&(s=O.bufferBase-O.parent.bufferBase,O=O.parent),s>0&&0==O.buffer[s-4]&&O.buffer[s-1]>-1){if(t==e)return;if(O.buffer[s-2]>=t)return void(O.buffer[s-2]=e)}}if(r&&this.pos!=e){let r=this.buffer.length;if(r>0&&0!=this.buffer[r-4])for(;r>0&&this.buffer[r-2]>e;)this.buffer[r]=this.buffer[r-4],this.buffer[r+1]=this.buffer[r-3],this.buffer[r+2]=this.buffer[r-2],this.buffer[r+3]=this.buffer[r-1],r-=4,s>4&&(s-=4);this.buffer[r]=O,this.buffer[r+1]=t,this.buffer[r+2]=e,this.buffer[r+3]=s}else this.buffer.push(O,t,e,s)}shift(O,t,e,s){if(131072&O)this.pushState(65535&O,this.pos);else if(0==(262144&O)){let r=O,{parser:i}=this.p;(s>this.pos||t<=i.maxNode)&&(this.pos=s,i.stateFlag(r,1)||(this.reducePos=s)),this.pushState(r,e),this.shiftContext(t,e),t<=i.maxNode&&this.buffer.push(t,e,s,4)}else this.pos=s,this.shiftContext(t,e),t<=this.p.parser.maxNode&&this.buffer.push(t,e,s,4)}apply(O,t,e,s){65536&O?this.reduce(O):this.shift(O,t,e,s)}useNode(O,t){let e=this.p.reused.length-1;(e<0||this.p.reused[e]!=O)&&(this.p.reused.push(O),e++);let s=this.pos;this.reducePos=this.pos=s+O.length,this.pushState(t,s),this.buffer.push(e,s,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,O,this,this.p.stream.reset(this.pos-O.length)))}split(){let O=this,t=O.buffer.length;for(;t>0&&O.buffer[t-2]>O.reducePos;)t-=4;let e=O.buffer.slice(t),s=O.bufferBase+t;for(;O&&s==O.bufferBase;)O=O.parent;return new d(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,e,s,this.curContext,this.lookAhead,O)}recoverByDelete(O,t){let e=O<=this.p.parser.maxNode;e&&this.storeNode(O,this.pos,t,4),this.storeNode(0,this.pos,t,e?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(O){for(let t=new w(this);;){let e=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,O);if(0==e)return!1;if(0==(65536&e))return!0;t.reduce(e)}}recoverByInsert(O){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>8||this.stack.length>=120){let e=[];for(let s,r=0;r<t.length;r+=2)(s=t[r+1])!=this.state&&this.p.parser.hasAction(s,O)&&e.push(t[r],s);if(this.stack.length<120)for(let O=0;e.length<8&&O<t.length;O+=2){let s=t[O+1];e.some(((O,t)=>1&t&&O==s))||e.push(t[O],s)}t=e}let e=[];for(let O=0;O<t.length&&e.length<4;O+=2){let s=t[O+1];if(s==this.state)continue;let r=this.split();r.pushState(s,this.pos),r.storeNode(0,r.pos,r.pos,4,!0),r.shiftContext(t[O],this.pos),r.reducePos=this.pos,r.score-=200,e.push(r)}return e}forceReduce(){let{parser:O}=this.p,t=O.stateSlot(this.state,5);if(0==(65536&t))return!1;if(!O.validAction(this.state,t)){let e=t>>19,s=65535&t,r=this.stack.length-3*e;if(r<0||O.getGoto(this.stack[r],s,!1)<0){let O=this.findForcedReduction();if(null==O)return!1;t=O}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(t),!0}findForcedReduction(){let{parser:O}=this.p,t=[],e=(s,r)=>{if(!t.includes(s))return t.push(s),O.allActions(s,(t=>{if(393216&t);else if(65536&t){let e=(t>>19)-r;if(e>1){let s=65535&t,r=this.stack.length-3*e;if(r>=0&&O.getGoto(this.stack[r],s,!1)>=0)return e<<19|65536|s}}else{let O=e(t,r+1);if(null!=O)return O}}))};return e(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(3!=this.stack.length)return!1;let{parser:O}=this.p;return 65535==O.data[O.stateSlot(this.state,1)]&&!O.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(O){if(this.state!=O.state||this.stack.length!=O.stack.length)return!1;for(let t=0;t<this.stack.length;t+=3)if(this.stack[t]!=O.stack[t])return!1;return!0}get parser(){return this.p.parser}dialectEnabled(O){return this.p.parser.dialect.flags[O]}shiftContext(O,t){this.curContext&&this.updateContext(this.curContext.tracker.shift(this.curContext.context,O,this,this.p.stream.reset(t)))}reduceContext(O,t){this.curContext&&this.updateContext(this.curContext.tracker.reduce(this.curContext.context,O,this,this.p.stream.reset(t)))}emitContext(){let O=this.buffer.length-1;(O<0||-3!=this.buffer[O])&&this.buffer.push(this.curContext.hash,this.pos,this.pos,-3)}emitLookAhead(){let O=this.buffer.length-1;(O<0||-4!=this.buffer[O])&&this.buffer.push(this.lookAhead,this.pos,this.pos,-4)}updateContext(O){if(O!=this.curContext.context){let t=new $(this.curContext.tracker,O);t.hash!=this.curContext.hash&&this.emitContext(),this.curContext=t}}setLookAhead(O){O>this.lookAhead&&(this.emitLookAhead(),this.lookAhead=O)}close(){this.curContext&&this.curContext.tracker.strict&&this.emitContext(),this.lookAhead>0&&this.emitLookAhead()}}class ${constructor(O,t){this.tracker=O,this.context=t,this.hash=O.strict?O.hash(t):0}}class w{constructor(O){this.start=O,this.state=O.state,this.stack=O.stack,this.base=this.stack.length}reduce(O){let t=65535&O,e=O>>19;0==e?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=3*(e-1);let s=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=s}}class q{constructor(O,t,e){this.stack=O,this.pos=t,this.index=e,this.buffer=O.buffer,0==this.index&&this.maybeNext()}static create(O,t=O.bufferBase+O.buffer.length){return new q(O,t,t-O.bufferBase)}maybeNext(){let O=this.stack.parent;null!=O&&(this.index=this.stack.bufferBase-O.bufferBase,this.stack=O,this.buffer=O.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,0==this.index&&this.maybeNext()}fork(){return new q(this.stack,this.pos,this.index)}}function X(O,t=Uint16Array){if("string"!=typeof O)return O;let e=null;for(let s=0,r=0;s<O.length;){let i=0;for(;;){let t=O.charCodeAt(s++),e=!1;if(126==t){i=65535;break}t>=92&&t--,t>=34&&t--;let r=t-32;if(r>=46&&(r-=46,e=!0),i+=r,e)break;i*=46}e?e[r++]=i:e=new t(i)}return e}class m{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}}const g=new m;class k{constructor(O,t){this.input=O,this.ranges=t,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=g,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(O,t){let e=this.range,s=this.rangeIndex,r=this.pos+O;for(;r<e.from;){if(!s)return null;let O=this.ranges[--s];r-=e.from-O.to,e=O}for(;t<0?r>e.to:r>=e.to;){if(s==this.ranges.length-1)return null;let O=this.ranges[++s];r+=O.from-e.to,e=O}return r}clipPos(O){if(O>=this.range.from&&O<this.range.to)return O;for(let t of this.ranges)if(t.to>O)return Math.max(O,t.from);return this.end}peek(O){let t,e,s=this.chunkOff+O;if(s>=0&&s<this.chunk.length)t=this.pos+O,e=this.chunk.charCodeAt(s);else{let s=this.resolveOffset(O,1);if(null==s)return-1;if(t=s,t>=this.chunk2Pos&&t<this.chunk2Pos+this.chunk2.length)e=this.chunk2.charCodeAt(t-this.chunk2Pos);else{let O=this.rangeIndex,s=this.range;for(;s.to<=t;)s=this.ranges[++O];this.chunk2=this.input.chunk(this.chunk2Pos=t),t+this.chunk2.length>s.to&&(this.chunk2=this.chunk2.slice(0,s.to-t)),e=this.chunk2.charCodeAt(0)}}return t>=this.token.lookAhead&&(this.token.lookAhead=t+1),e}acceptToken(O,t=0){let e=t?this.resolveOffset(t,-1):this.pos;if(null==e||e<this.token.start)throw new RangeError("Token end out of bounds");this.token.value=O,this.token.end=e}acceptTokenTo(O,t){this.token.value=O,this.token.end=t}getChunk(){if(this.pos>=this.chunk2Pos&&this.pos<this.chunk2Pos+this.chunk2.length){let{chunk:O,chunkPos:t}=this;this.chunk=this.chunk2,this.chunkPos=this.chunk2Pos,this.chunk2=O,this.chunk2Pos=t,this.chunkOff=this.pos-this.chunkPos}else{this.chunk2=this.chunk,this.chunk2Pos=this.chunkPos;let O=this.input.chunk(this.pos),t=this.pos+O.length;this.chunk=t>this.range.to?O.slice(0,this.range.to-this.pos):O,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(O=1){for(this.chunkOff+=O;this.pos+O>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();O-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=O,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(O,t){if(t?(this.token=t,t.start=O,t.lookAhead=O+1,t.value=t.extended=-1):this.token=g,this.pos!=O){if(this.pos=O,O==this.end)return this.setDone(),this;for(;O<this.range.from;)this.range=this.ranges[--this.rangeIndex];for(;O>=this.range.to;)this.range=this.ranges[++this.rangeIndex];O>=this.chunkPos&&O<this.chunkPos+this.chunk.length?this.chunkOff=O-this.chunkPos:(this.chunk="",this.chunkOff=0),this.readNext()}return this}read(O,t){if(O>=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(O-this.chunkPos,t-this.chunkPos);if(O>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(O-this.chunk2Pos,t-this.chunk2Pos);if(O>=this.range.from&&t<=this.range.to)return this.input.read(O,t);let e="";for(let s of this.ranges){if(s.from>=t)break;s.to>O&&(e+=this.input.read(Math.max(s.from,O),Math.min(s.to,t)))}return e}}class b{constructor(O,t){this.data=O,this.id=t}token(O,t){let{parser:e}=t.p;!function(O,t,e,s,r,i){let o=0,a=1<<s,{dialect:n}=e.p.parser;O:for(;0!=(a&O[o]);){let e=O[o+1];for(let s=o+3;s<e;s+=2)if((O[s+1]&a)>0){let e=O[s];if(n.allows(e)&&(-1==t.token.value||t.token.value==e||Z(e,t.token.value,r,i))){t.acceptToken(e);break}}let s=t.next,l=0,h=O[o+2];if(!(t.next<0&&h>l&&65535==O[e+3*h-3])){for(;l<h;){let r=l+h>>1,i=e+r+(r<<1),a=O[i],n=O[i+1]||65536;if(s<a)h=r;else{if(!(s>=n)){o=O[i+2],t.advance();continue O}l=r+1}}break}o=O[e+3*h-1]}}(this.data,O,t,this.id,e.data,e.tokenPrecTable)}}b.prototype.contextual=b.prototype.fallback=b.prototype.extend=!1,b.prototype.fallback=b.prototype.extend=!1;class v{constructor(O,t={}){this.token=O,this.contextual=!!t.contextual,this.fallback=!!t.fallback,this.extend=!!t.extend}}function Y(O,t,e){for(let s,r=t;65535!=(s=O[r]);r++)if(s==e)return r-t;return-1}function Z(O,t,e,s){let r=Y(e,s,t);return r<0||Y(e,s,O)<r}const y="undefined"!=typeof process&&process.env&&/\bparse\b/.test(process.env.LOG);let R=null;function W(O,t,e){let s=O.cursor(o.IncludeAnonymous);for(s.moveTo(t);;)if(!(e<0?s.childBefore(t):s.childAfter(t)))for(;;){if((e<0?s.to<t:s.from>t)&&!s.type.isError)return e<0?Math.max(0,Math.min(s.to-1,t-25)):Math.min(O.length,Math.max(s.from+1,t+25));if(e<0?s.prevSibling():s.nextSibling())break;if(!s.parent())return e<0?0:O.length}}class V{constructor(O,t){this.fragments=O,this.nodeSet=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let O=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(O){for(this.safeFrom=O.openStart?W(O.tree,O.from+O.offset,1)-O.offset:O.from,this.safeTo=O.openEnd?W(O.tree,O.to+O.offset,-1)-O.offset:O.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(O.tree),this.start.push(-O.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(O){if(O<this.nextStart)return null;for(;this.fragment&&this.safeTo<=O;)this.nextFragment();if(!this.fragment)return null;for(;;){let t=this.trees.length-1;if(t<0)return this.nextFragment(),null;let e=this.trees[t],s=this.index[t];if(s==e.children.length){this.trees.pop(),this.start.pop(),this.index.pop();continue}let o=e.children[s],a=this.start[t]+e.positions[s];if(a>O)return this.nextStart=a,null;if(o instanceof i){if(a==O){if(a<this.safeFrom)return null;let O=a+o.length;if(O<=this.safeTo){let t=o.prop(r.lookAhead);if(!t||O+t<this.fragment.to)return o}}this.index[t]++,a+o.length>=Math.max(this.safeFrom,O)&&(this.trees.push(o),this.start.push(a),this.index.push(0))}else this.index[t]++,this.nextStart=a+o.length}}}class G{constructor(O,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=O.tokenizers.map((O=>new m))}getActions(O){let t=0,e=null,{parser:s}=O.p,{tokenizers:r}=s,i=s.stateSlot(O.state,3),o=O.curContext?O.curContext.hash:0,a=0;for(let s=0;s<r.length;s++){if(0==(1<<s&i))continue;let n=r[s],l=this.tokens[s];if((!e||n.fallback)&&((n.contextual||l.start!=O.pos||l.mask!=i||l.context!=o)&&(this.updateCachedToken(l,n,O),l.mask=i,l.context=o),l.lookAhead>l.end+25&&(a=Math.max(l.lookAhead,a)),0!=l.value)){let s=t;if(l.extended>-1&&(t=this.addActions(O,l.extended,l.end,t)),t=this.addActions(O,l.value,l.end,t),!n.extend&&(e=l,t>s))break}}for(;this.actions.length>t;)this.actions.pop();return a&&O.setLookAhead(a),e||O.pos!=this.stream.end||(e=new m,e.value=O.p.parser.eofTerm,e.start=e.end=O.pos,t=this.addActions(O,e.value,e.end,t)),this.mainToken=e,this.actions}getMainToken(O){if(this.mainToken)return this.mainToken;let t=new m,{pos:e,p:s}=O;return t.start=e,t.end=Math.min(e+1,s.stream.end),t.value=e==s.stream.end?s.parser.eofTerm:0,t}updateCachedToken(O,t,e){let s=this.stream.clipPos(e.pos);if(t.token(this.stream.reset(s,O),e),O.value>-1){let{parser:t}=e.p;for(let s=0;s<t.specialized.length;s++)if(t.specialized[s]==O.value){let r=t.specializers[s](this.stream.read(O.start,O.end),e);if(r>=0&&e.p.parser.dialect.allows(r>>1)){0==(1&r)?O.value=r>>1:O.extended=r>>1;break}}}else O.value=0,O.end=this.stream.clipPos(s+1)}putAction(O,t,e,s){for(let t=0;t<s;t+=3)if(this.actions[t]==O)return s;return this.actions[s++]=O,this.actions[s++]=t,this.actions[s++]=e,s}addActions(O,t,e,s){let{state:r}=O,{parser:i}=O.p,{data:o}=i;for(let O=0;O<2;O++)for(let a=i.stateSlot(r,O?2:1);;a+=3){if(65535==o[a]){if(1!=o[a+1]){0==s&&2==o[a+1]&&(s=this.putAction(A(o,a+2),t,e,s));break}a=A(o,a+2)}o[a]==t&&(s=this.putAction(A(o,a+1),t,e,s))}return s}}class E{constructor(O,t,e,s){this.parser=O,this.input=t,this.ranges=s,this.recovering=0,this.nextStackID=9812,this.minStackPos=0,this.reused=[],this.stoppedAt=null,this.lastBigReductionStart=-1,this.lastBigReductionSize=0,this.bigReductionCount=0,this.stream=new k(t,s),this.tokens=new G(O,this.stream),this.topTerm=O.top[1];let{from:r}=s[0];this.stacks=[d.start(this,O.top[0],r)],this.fragments=e.length&&this.stream.end-r>4*O.bufferLength?new V(e,O.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let O,t,e=this.stacks,s=this.minStackPos,r=this.stacks=[];if(this.bigReductionCount>300&&1==e.length){let[O]=e;for(;O.forceReduce()&&O.stack.length&&O.stack[O.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let i=0;i<e.length;i++){let o=e[i];for(;;){if(this.tokens.mainToken=null,o.pos>s)r.push(o);else{if(this.advanceStack(o,r,e))continue;{O||(O=[],t=[]),O.push(o);let e=this.tokens.getMainToken(o);t.push(e.value,e.end)}}break}}if(!r.length){let t=O&&function(O){let t=null;for(let e of O){let O=e.p.stoppedAt;(e.pos==e.p.stream.end||null!=O&&e.pos>O)&&e.p.parser.stateFlag(e.state,2)&&(!t||t.score<e.score)&&(t=e)}return t}(O);if(t)return y&&console.log("Finish with "+this.stackID(t)),this.stackToTree(t);if(this.parser.strict)throw y&&O&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+s);this.recovering||(this.recovering=5)}if(this.recovering&&O){let e=null!=this.stoppedAt&&O[0].pos>this.stoppedAt?O[0]:this.runRecovery(O,t,r);if(e)return y&&console.log("Force-finish "+this.stackID(e)),this.stackToTree(e.forceAll())}if(this.recovering){let O=1==this.recovering?1:3*this.recovering;if(r.length>O)for(r.sort(((O,t)=>t.score-O.score));r.length>O;)r.pop();r.some((O=>O.reducePos>s))&&this.recovering--}else if(r.length>1){O:for(let O=0;O<r.length-1;O++){let t=r[O];for(let e=O+1;e<r.length;e++){let s=r[e];if(t.sameState(s)||t.buffer.length>500&&s.buffer.length>500){if(!((t.score-s.score||t.buffer.length-s.buffer.length)>0)){r.splice(O--,1);continue O}r.splice(e--,1)}}}r.length>12&&r.splice(12,r.length-12)}this.minStackPos=r[0].pos;for(let O=1;O<r.length;O++)r[O].pos<this.minStackPos&&(this.minStackPos=r[O].pos);return null}stopAt(O){if(null!=this.stoppedAt&&this.stoppedAt<O)throw new RangeError("Can't move stoppedAt forward");this.stoppedAt=O}advanceStack(O,t,e){let s=O.pos,{parser:o}=this,a=y?this.stackID(O)+" -> ":"";if(null!=this.stoppedAt&&s>this.stoppedAt)return O.forceReduce()?O:null;if(this.fragments){let t=O.curContext&&O.curContext.tracker.strict,e=t?O.curContext.hash:0;for(let n=this.fragments.nodeAt(s);n;){let s=this.parser.nodeSet.types[n.type.id]==n.type?o.getGoto(O.state,n.type.id):-1;if(s>-1&&n.length&&(!t||(n.prop(r.contextHash)||0)==e))return O.useNode(n,s),y&&console.log(a+this.stackID(O)+` (via reuse of ${o.getName(n.type.id)})`),!0;if(!(n instanceof i)||0==n.children.length||n.positions[0]>0)break;let l=n.children[0];if(!(l instanceof i&&0==n.positions[0]))break;n=l}}let n=o.stateSlot(O.state,4);if(n>0)return O.reduce(n),y&&console.log(a+this.stackID(O)+` (via always-reduce ${o.getName(65535&n)})`),!0;if(O.stack.length>=8400)for(;O.stack.length>6e3&&O.forceReduce(););let l=this.tokens.getActions(O);for(let r=0;r<l.length;){let i=l[r++],n=l[r++],h=l[r++],x=r==l.length||!e,p=x?O:O.split(),Q=this.tokens.mainToken;if(p.apply(i,n,Q?Q.start:p.pos,h),y&&console.log(a+this.stackID(p)+` (via ${0==(65536&i)?"shift":`reduce of ${o.getName(65535&i)}`} for ${o.getName(n)} @ ${s}${p==O?"":", split"})`),x)return!0;p.pos>s?t.push(p):e.push(p)}return!1}advanceFully(O,t){let e=O.pos;for(;;){if(!this.advanceStack(O,null,null))return!1;if(O.pos>e)return _(O,t),!0}}runRecovery(O,t,e){let s=null,r=!1;for(let i=0;i<O.length;i++){let o=O[i],a=t[i<<1],n=t[1+(i<<1)],l=y?this.stackID(o)+" -> ":"";if(o.deadEnd){if(r)continue;if(r=!0,o.restart(),y&&console.log(l+this.stackID(o)+" (restarted)"),this.advanceFully(o,e))continue}let h=o.split(),x=l;for(let O=0;h.forceReduce()&&O<10;O++){if(y&&console.log(x+this.stackID(h)+" (via force-reduce)"),this.advanceFully(h,e))break;y&&(x=this.stackID(h)+" -> ")}for(let O of o.recoverByInsert(a))y&&console.log(l+this.stackID(O)+" (via recover-insert)"),this.advanceFully(O,e);this.stream.end>o.pos?(n==o.pos&&(n++,a=0),o.recoverByDelete(a,n),y&&console.log(l+this.stackID(o)+` (via recover-delete ${this.parser.getName(a)})`),_(o,e)):(!s||s.score<o.score)&&(s=o)}return s}stackToTree(O){return O.close(),i.build({buffer:q.create(O),nodeSet:this.parser.nodeSet,topID:this.topTerm,maxBufferLength:this.parser.bufferLength,reused:this.reused,start:this.ranges[0].from,length:O.pos-this.ranges[0].from,minRepeatType:this.parser.minRepeatTerm})}stackID(O){let t=(R||(R=new WeakMap)).get(O);return t||R.set(O,t=String.fromCodePoint(this.nextStackID++)),t+O}}function _(O,t){for(let e=0;e<t.length;e++){let s=t[e];if(s.pos==O.pos&&s.sameState(O))return void(t[e].score<O.score&&(t[e]=O))}t.push(O)}class z{constructor(O,t,e){this.source=O,this.flags=t,this.disabled=e}allows(O){return!this.disabled||0==this.disabled[O]}}const U=O=>O;class j extends O{constructor(O){if(super(),this.wrappers=[],14!=O.version)throw new RangeError(`Parser version (${O.version}) doesn't match runtime version (14)`);let i=O.nodeNames.split(" ");this.minRepeatTerm=i.length;for(let t=0;t<O.repeatNodeCount;t++)i.push("");let o=Object.keys(O.topRules).map((t=>O.topRules[t][1])),a=[];for(let O=0;O<i.length;O++)a.push([]);function n(O,t,e){a[O].push([t,t.deserialize(String(e))])}if(O.nodeProps)for(let t of O.nodeProps){let O=t[0];"string"==typeof O&&(O=r[O]);for(let e=1;e<t.length;){let s=t[e++];if(s>=0)n(s,O,t[e++]);else{let r=t[e+-s];for(let i=-s;i>0;i--)n(t[e++],O,r);e++}}}this.nodeSet=new t(i.map(((t,s)=>e.define({name:s>=this.minRepeatTerm?void 0:t,id:s,props:a[s],top:o.indexOf(s)>-1,error:0==s,skipped:O.skippedNodes&&O.skippedNodes.indexOf(s)>-1})))),O.propSources&&(this.nodeSet=this.nodeSet.extend(...O.propSources)),this.strict=!1,this.bufferLength=s;let l=X(O.tokenData);this.context=O.context,this.specializerSpecs=O.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let O=0;O<this.specializerSpecs.length;O++)this.specialized[O]=this.specializerSpecs[O].term;this.specializers=this.specializerSpecs.map(C),this.states=X(O.states,Uint32Array),this.data=X(O.stateData),this.goto=X(O.goto),this.maxTerm=O.maxTerm,this.tokenizers=O.tokenizers.map((O=>"number"==typeof O?new b(l,O):O)),this.topRules=O.topRules,this.dialects=O.dialects||{},this.dynamicPrecedences=O.dynamicPrecedences||null,this.tokenPrecTable=O.tokenPrec,this.termNames=O.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(O,t,e){let s=new E(this,O,t,e);for(let r of this.wrappers)s=r(s,O,t,e);return s}getGoto(O,t,e=!1){let s=this.goto;if(t>=s[0])return-1;for(let r=s[t+1];;){let t=s[r++],i=1&t,o=s[r++];if(i&&e)return o;for(let e=r+(t>>1);r<e;r++)if(s[r]==O)return o;if(i)return-1}}hasAction(O,t){let e=this.data;for(let s=0;s<2;s++)for(let r,i=this.stateSlot(O,s?2:1);;i+=3){if(65535==(r=e[i])){if(1!=e[i+1]){if(2==e[i+1])return A(e,i+2);break}r=e[i=A(e,i+2)]}if(r==t||0==r)return A(e,i+1)}return 0}stateSlot(O,t){return this.states[6*O+t]}stateFlag(O,t){return(this.stateSlot(O,0)&t)>0}validAction(O,t){return!!this.allActions(O,(O=>O==t||null))}allActions(O,t){let e=this.stateSlot(O,4),s=e?t(e):void 0;for(let e=this.stateSlot(O,1);null==s;e+=3){if(65535==this.data[e]){if(1!=this.data[e+1])break;e=A(this.data,e+2)}s=t(A(this.data,e+1))}return s}nextStates(O){let t=[];for(let e=this.stateSlot(O,1);;e+=3){if(65535==this.data[e]){if(1!=this.data[e+1])break;e=A(this.data,e+2)}if(0==(1&this.data[e+2])){let O=this.data[e+1];t.some(((t,e)=>1&e&&t==O))||t.push(this.data[e],O)}}return t}configure(O){let t=Object.assign(Object.create(j.prototype),this);if(O.props&&(t.nodeSet=this.nodeSet.extend(...O.props)),O.top){let e=this.topRules[O.top];if(!e)throw new RangeError(`Invalid top rule name ${O.top}`);t.top=e}return O.tokenizers&&(t.tokenizers=this.tokenizers.map((t=>{let e=O.tokenizers.find((O=>O.from==t));return e?e.to:t}))),O.specializers&&(t.specializers=this.specializers.slice(),t.specializerSpecs=this.specializerSpecs.map(((e,s)=>{let r=O.specializers.find((O=>O.from==e.external));if(!r)return e;let i=Object.assign(Object.assign({},e),{external:r.to});return t.specializers[s]=C(i),i}))),O.contextTracker&&(t.context=O.contextTracker),O.dialect&&(t.dialect=this.parseDialect(O.dialect)),null!=O.strict&&(t.strict=O.strict),O.wrap&&(t.wrappers=t.wrappers.concat(O.wrap)),null!=O.bufferLength&&(t.bufferLength=O.bufferLength),t}hasWrappers(){return this.wrappers.length>0}getName(O){return this.termNames?this.termNames[O]:String(O<=this.maxNode&&this.nodeSet.types[O].name||O)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(O){let t=this.dynamicPrecedences;return null==t?0:t[O]||0}parseDialect(O){let t=Object.keys(this.dialects),e=t.map((()=>!1));if(O)for(let s of O.split(" ")){let O=t.indexOf(s);O>=0&&(e[O]=!0)}let s=null;for(let O=0;O<t.length;O++)if(!e[O])for(let e,r=this.dialects[t[O]];65535!=(e=this.data[r++]);)(s||(s=new Uint8Array(this.maxTerm+1)))[e]=1;return new z(O,e,s)}static deserialize(O){return new j(O)}}function A(O,t){return O[t]|O[t+1]<<16}function C(O){if(O.external){let t=O.extend?1:0;return(e,s)=>O.external(e,s)<<1|t}return O.get}const N=new Set([27,51,52,275,67,138,58,59,256,64,65,74,62,63,159,160,163,120]);function F(O){return 10==O||13==O}const I=new v(((O,t)=>{let e;if(O.next<0)O.acceptToken(211);else if(t.context.depth<0)F(O.next)&&O.acceptToken(210,1);else if(((e=O.peek(-1))<0||F(e))&&t.canShift(209)){let t=0;for(;32==O.next||9==O.next;)O.advance(),t++;10!=O.next&&13!=O.next&&35!=O.next||O.acceptToken(209,-t)}else F(O.next)&&O.acceptToken(208,1)}),{contextual:!0}),D=new v(((O,t)=>{let e=t.context.depth;if(e<0)return;let s=O.peek(-1);if(10==s||13==s){let t=0,s=0;for(;;){if(32==O.next)t++;else{if(9!=O.next)break;t+=8-t%8}O.advance(),s++}t!=e&&10!=O.next&&13!=O.next&&35!=O.next&&(t<e?O.acceptToken(207,-s):O.acceptToken(206))}}));function L(O,t){this.parent=O,this.depth=t,this.hash=(O?O.hash+O.hash<<8:0)+t+(t<<4)}const H=new L(null,0);const B=new class{constructor(O){this.start=O.start,this.shift=O.shift||U,this.reduce=O.reduce||U,this.reuse=O.reuse||U,this.hash=O.hash||(()=>0),this.strict=!1!==O.strict}}({start:H,reduce:(O,t)=>O.depth<0&&N.has(t)?O.parent:O,shift:(O,t,e,s)=>206==t?new L(O,function(O){let t=0;for(let e=0;e<O.length;e++)t+=9==O.charCodeAt(e)?8-t%8:1;return t}(s.read(s.pos,e.pos))):207==t?O.parent:26==t||57==t||61==t?new L(O,-1):O,hash:O=>O.hash}),M=new v((O=>{for(let t=0;t<5;t++){if(O.next!="print".charCodeAt(t))return;O.advance()}if(!/\w/.test(String.fromCharCode(O.next)))for(let t=0;;t++){let e=O.peek(t);if(32!=e&&9!=e)return void(40!=e&&46!=e&&10!=e&&13!=e&&35!=e&&O.acceptToken(1))}}));function J(O,t,e,s,r){return new v((i=>{let o=i.pos;for(;!(i.next<0);)if(123==i.next){if(123!=i.peek(1)){if(i.pos==o)return void i.acceptToken(s,1);break}i.advance(2)}else if(92==i.next)i.advance(),i.next>=0&&i.advance();else{if(i.next==O&&(1==t||i.peek(1)==O&&i.peek(2)==O)){if(i.pos==o)return void i.acceptToken(r,t);break}i.advance()}i.pos>o&&i.acceptToken(e)}))}const K=J(39,1,212,2,213),OO=J(34,1,214,3,215),tO=J(39,3,216,4,217),eO=J(34,3,218,5,219),sO=a({'async "*" "**" FormatConversion FormatSpec':n.modifier,"for while if elif else try except finally return raise break continue with pass assert await yield match case":n.controlKeyword,"in not and or is del":n.operatorKeyword,"from def class global nonlocal lambda":n.definitionKeyword,import:n.moduleKeyword,"with as print":n.keyword,Boolean:n.bool,None:n.null,VariableName:n.variableName,"CallExpression/VariableName":n.function(n.variableName),"FunctionDefinition/VariableName":n.function(n.definition(n.variableName)),"ClassDefinition/VariableName":n.definition(n.className),PropertyName:n.propertyName,"CallExpression/MemberExpression/PropertyName":n.function(n.propertyName),Comment:n.lineComment,Number:n.number,String:n.string,FormatString:n.special(n.string),UpdateOp:n.updateOperator,"ArithOp!":n.arithmeticOperator,BitOp:n.bitwiseOperator,CompareOp:n.compareOperator,AssignOp:n.definitionOperator,Ellipsis:n.punctuation,At:n.meta,"( )":n.paren,"[ ]":n.squareBracket,"{ }":n.brace,".":n.derefOperator,", ;":n.separator}),rO={__proto__:null,await:48,or:58,and:60,in:64,not:66,is:68,if:74,else:76,lambda:80,yield:98,from:100,async:106,for:108,None:178,True:180,False:180,del:194,pass:198,break:202,continue:206,return:210,raise:218,import:222,as:224,global:228,nonlocal:230,assert:234,type:239,elif:252,while:256,try:262,except:264,finally:266,with:270,def:274,class:284,match:295,case:301},iO=j.deserialize({version:14,states:"#)WO`Q#yOOP$bOSOOO%kQ&nO'#HhOOQS'#Cq'#CqOOQS'#Cr'#CrO'ZQ#xO'#CpO(|Q&nO'#HgOOQS'#Hh'#HhOOQS'#DW'#DWOOQS'#Hg'#HgO)jQ#xO'#DaO)}Q#xO'#DhO*_Q#xO'#DlOOQS'#Dw'#DwO*rO,UO'#DwO*zO7[O'#DwO+SOWO'#DxO+_O`O'#DxO+jOpO'#DxO+uO!bO'#DxO-wQ&nO'#HXOOQS'#HX'#HXO'ZQ#xO'#HWO/ZQ&nO'#HWOOQS'#Ej'#EjO/rQ#xO'#EkOOQS'#HV'#HVO/|Q#xO'#HUOOQV'#HU'#HUO0XQ#xO'#FbOOQS'#Gj'#GjO0^Q#xO'#FaOOQV'#I_'#I_OOQV'#HT'#HTOOQV'#Fy'#FyQ`Q#yOOO'ZQ#xO'#CsO0lQ#xO'#DPO0sQ#xO'#DTO1RQ#xO'#HlO1cQ&nO'#E_O'ZQ#xO'#E`OOQS'#Eb'#EbOOQS'#Ed'#EdOOQS'#Ef'#EfO1wQ#xO'#EhO2_Q#xO'#ElO0XQ#xO'#EnO2rQ&nO'#EnO0XQ#xO'#EqO/rQ#xO'#EtO0XQ#xO'#EvO/rQ#xO'#E|O/rQ#xO'#FPO2}Q#xO'#FRO3UQ#xO'#FWO3aQ#xO'#FSO/rQ#xO'#FWO0XQ#xO'#FYO0XQ#xO'#F_O3fQ#xO'#FdP3mO#xO'#HSPOOO)CBv)CBvOOQS'#Cg'#CgOOQS'#Ch'#ChOOQS'#Ci'#CiOOQS'#Cj'#CjOOQS'#Ck'#CkOOQS'#Cl'#ClOOQS'#Cn'#CnO'ZQ#xO,59QO'ZQ#xO,59QO'ZQ#xO,59QO'ZQ#xO,59QO'ZQ#xO,59QO'ZQ#xO,59QO3xQ#xO'#DqOOQS,5:[,5:[O4]Q#xO'#HvOOQS,5:_,5:_O4jQMlO,5:_O4oQ&nO,59[O0lQ#xO,59dO0lQ#xO,59dO0lQ#xO,59dO7_Q#xO,59dO7dQ#xO,59dO7kQ#xO,59lO7rQ#xO'#HgO8xQ#xO'#HfOOQS'#Hf'#HfOOQS'#D^'#D^O9aQ#xO,59cO'ZQ#xO,59cO9oQ#xO,59cOOQS,59{,59{O9tQ#xO,5:TO'ZQ#xO,5:TOOQS,5:S,5:SO:SQ#xO,5:SO:XQ#xO,5:ZO'ZQ#xO,5:ZO'ZQ#xO,5:XOOQS,5:W,5:WO:jQ#xO,5:WO:oQ#xO,5:YOOOO'#GR'#GRO:tO,UO,5:cOOQS,5:c,5:cOOOO'#GS'#GSO:|O7[O,5:cO;UQ#xO'#DyOOOW'#GT'#GTO;fOWO,5:dOOQS,5:d,5:dO;UQ#xO'#EPOOO`'#GW'#GWO;qO`O,5:dO;UQ#xO'#EROOOp'#GX'#GXO;|OpO,5:dO;UQ#xO'#ETOOO!b'#GY'#GYO<XO!bO,5:dOOQS'#GZ'#GZO<dQ&nO,5:qO?UQ&nO,5=rO?oQ!LUO,5=rO@`Q&nO,5=rOOQS,5;V,5;VO@wQ#yO'#GdOBZQ#xO,5;fOOQV,5=p,5=pOBfQ&nO'#IYOB}Q#xO,5;|OOQS-E:h-E:hOOQV,5;{,5;{O3[Q#xO'#FYOOQV-E9w-E9wOCVQ&nO,59_OE^Q&nO,59kOEwQ#xO'#HiOFSQ#xO'#HiO0XQ#xO'#HiOF_Q#xO'#DVOFgQ#xO,59oOFlQ#xO'#HmO'ZQ#xO'#HmO/rQ#xO,5>WOOQS,5>W,5>WO/rQ#xO'#EZOOQS'#E['#E[OGZQ#xO'#G]OGkQ#xO,59OOGkQ#xO,59OO)pQ#xO,5:wOGyQ&nO'#HoOOQS,5:z,5:zOOQS,5;S,5;SOH^Q#xO,5;WOHoQ#xO,5;YOOQS'#G`'#G`OH}Q&nO,5;YOI]Q#xO,5;YOIbQ#xO'#I]OOQS,5;],5;]OIpQ#xO'#IXOOQS,5;`,5;`OJRQ#xO,5;bO3aQ#xO,5;hO3aQ#xO,5;kOJZQ&nO'#I`O'ZQ#xO'#I`OJeQ#xO,5;mO2}Q#xO,5;mO/rQ#xO,5;rO0XQ#xO,5;tOJjQ#yO'#E}OKvQ#{O,5;nO! [Q#xO'#IaO3aQ#xO,5;rO! gQ#xO,5;tO! oQ#xO,5;yO! zQ&nO,5<OO'ZQ#xO,5<OPOOO,5=n,5=nP!!ROSO,5=nP!!WO#xO,5=nO!${Q&nO1G.lO!%SQ&nO1G.lO!'sQ&nO1G.lO!'}Q&nO1G.lO!*hQ&nO1G.lO!*{Q&nO1G.lO!+`Q#xO'#HuO!+nQ&nO'#HXO/rQ#xO'#HuO!+xQ#xO'#HtOOQS,5:],5:]O!,QQ#xO,5:]O!,VQ#xO'#HwO!,bQ#xO'#HwO!,uQ#xO,5>bOOQS'#Du'#DuOOQS1G/y1G/yOOQS1G/O1G/OO!-uQ&nO1G/OO!-|Q&nO1G/OO0lQ#xO1G/OO!.iQ#xO1G/WOOQS'#D]'#D]O/rQ#xO,59vOOQS1G.}1G.}O!.pQ#xO1G/gO!/QQ#xO1G/gO!/YQ#xO1G/hO'ZQ#xO'#HnO!/_Q#xO'#HnO!/dQ&nO1G.}O!/tQ#xO,59kO!0zQ#xO,5>^O!1[Q#xO,5>^O!1dQ#xO1G/oO!1iQ&nO1G/oOOQS1G/n1G/nO!1yQ#xO,5>XO!2pQ#xO,5>XO/rQ#xO1G/sO!3_Q#xO1G/uO!3dQ&nO1G/uO!3tQ&nO1G/sOOQS1G/r1G/rOOQS1G/t1G/tOOOO-E:P-E:POOQS1G/}1G/}OOOO-E:Q-E:QO!4UQ#xO'#IRO/rQ#xO'#IRO!4gQ#xO,5:eOOOW-E:R-E:ROOQS1G0O1G0OO!4uQ#xO,5:kOOO`-E:U-E:UO!5TQ#xO,5:mOOOp-E:V-E:VO!5cQ#xO,5:oOOO!b-E:W-E:WOOQS-E:X-E:XO!5qQ!LUO1G3^O!6bQ&nO1G3^O'ZQ#xO,5<vOOQS,5<v,5<vOOQS-E:Y-E:YOOQS,5=O,5=OOOQS-E:b-E:bOOQV1G1Q1G1QO0XQ#xO'#G_O!6yQ&nO,5>tOOQS1G1h1G1hO!7bQ#xO1G1hOOQS'#DX'#DXO/rQ#xO,5>TOOQS,5>T,5>TO!7gQ#xO'#FzO!7rQ#xO,59qO!7zQ#xO1G/ZO!8UQ&nO,5>XOOQS1G3r1G3rOOQS,5:u,5:uO!8uQ#xO'#HWOOQS,5<w,5<wOOQS-E:Z-E:ZO!9WQ#xO1G.jOOQS1G0c1G0cO!9fQ#xO,5>ZO!9vQ#xO,5>ZO/rQ#xO1G0rO/rQ#xO1G0rO0XQ#xO1G0tOOQS-E:^-E:^O!:XQ#xO1G0tO!:dQ#xO1G0tO!:iQ#xO,5>wO!:wQ#xO,5>wO!;VQ#xO,5>sO!;mQ#xO,5>sO!<OQ#xO'#ExO/rQ#xO1G0|O!<ZQ#xO1G0|O!<`Q#{O1G1SO!?qQ#{O1G1VO!CPQ#xO,5>zO!CZQ#xO,5>zO!CcQ&nO,5>zO/rQ#xO1G1XO!CmQ#xO1G1XO3aQ#xO1G1^O! gQ#xO1G1`OOQV,5;i,5;iO!CrQ#zO,5;iO!CwQ#{O1G1YO!G]Q#xO'#GgO3aQ#xO1G1YO3aQ#xO1G1YO!GmQ#xO,5>{O!GzQ#xO,5>{O0XQ#xO,5>{OOQV1G1^1G1^O!HSQ#xO'#F[O!HeQMlO1G1`O!HmQ#xO1G1`OOQV1G1e1G1eO3aQ#xO1G1eO!HrQ#xO1G1eO!HzQ#xO'#FfOOQV1G1j1G1jO! zQ&nO1G1jPOOO1G3Y1G3YP!IPOSO1G3YOOQS,5>a,5>aOOQS'#Dr'#DrO/rQ#xO,5>aO!IUQ#xO,5>`O!IiQ#xO,5>`OOQS1G/w1G/wO!IqQ#xO,5>cO!JRQ#xO,5>cO!JZQ#xO,5>cO!JnQ#xO,5>cO!KOQ#xO,5>cOOQS1G3|1G3|OOQS7+$j7+$jO!7zQ#xO7+$rO!LqQ#xO1G/OO!LxQ#xO1G/OOOQS1G/b1G/bOOQS,5<h,5<hO'ZQ#xO,5<hOOQS7+%R7+%RO!MPQ#xO7+%ROOQS-E9z-E9zOOQS7+%S7+%SO!MaQ#xO,5>YO'ZQ#xO,5>YOOQS7+$i7+$iO!MfQ#xO7+%RO!MnQ#xO7+%SO!MsQ#xO1G3xOOQS7+%Z7+%ZO!NTQ#xO1G3xO!N]Q#xO7+%ZOOQS,5<g,5<gO'ZQ#xO,5<gO!NbQ#xO1G3sOOQS-E9y-E9yO# XQ#xO7+%_OOQS7+%a7+%aO# gQ#xO1G3sO#!UQ#xO7+%aO#!ZQ#xO1G3yO#!kQ#xO1G3yO#!sQ#xO7+%_O#!xQ#xO,5>mO##cQ#xO,5>mO##cQ#xO,5>mOOQS'#Dz'#DzO##tO$ISO'#D|O#$PO#tO'#ISOOOW1G0P1G0PO#$UQ#xO1G0PO#$^Q#xO1G0POOQS'#EQ'#EQOOO`1G0V1G0VO#$iQ#xO1G0VO#$qQ#xO1G0VOOQS'#ES'#ESOOOp1G0X1G0XO#$|Q#xO1G0XO#%UQ#xO1G0XOOQS'#EU'#EUOOO!b1G0Z1G0ZO#%aQ#xO1G0ZO#%iQ#xO1G0ZO#%tQ!LUO7+(xO#&eQ&nO1G2bP#'OQ#xO'#G[OOQS,5<y,5<yOOQS-E:]-E:]OOQS7+'S7+'SOOQS1G3o1G3oOOQS,5<f,5<fOOQS-E9x-E9xOOQS7+$u7+$uO#']Q#xO,5=rO#'vQ#xO,5=rO#(XQ&nO,5<iO#(lQ#xO1G3uOOQS-E9{-E9{OOQS7+&^7+&^O#(|Q#xO7+&^OOQS7+&`7+&`O#)[Q#xO'#I[O0XQ#xO'#IZO#)pQ#xO7+&`OOQS,5<|,5<|O#){Q#xO1G4cOOQS-E:`-E:`OOQS,5<x,5<xO#*ZQ#xO1G4_OOQS-E:[-E:[O0XQ#xO'#EyO#*qQ#xO'#EyO#*|Q#xO'#I^O#+UQ#xO,5;dOOQS7+&h7+&hO/rQ#xO7+&hO#+ZQ#{O7+&nO!G`Q#xO'#GeO3aQ#xO7+&nO3aQ#xO7+&qO#.lQ&nO,5=QO'ZQ#xO,5=QO#.vQ#xO1G4fOOQS-E:d-E:dO#/QQ#xO1G4fO3aQ#xO7+&sO/rQ#xO7+&sOOQV7+&x7+&xO!HeQMlO7+&zO!HmQ#xO7+&zO`Q#yO1G1TOOQV-E:e-E:eO3aQ#xO7+&tO3aQ#xO7+&tOOQV,5=R,5=RO#/YQ#xO,5=RO!G`Q#xO,5=ROOQV7+&t7+&tO#/eQ#{O7+&tO#2sQ#xO,5=SO#3OQ#xO1G4gOOQS-E:f-E:fO#3]Q#xO1G4gO#3eQ#xO'#IcO#3sQ#xO'#IcO0XQ#xO'#IcOOQS'#Ic'#IcO#4OQ#xO'#IbOOQS,5;v,5;vO#4WQ#xO,5;vO/rQ#xO'#F^OOQV7+&z7+&zO3aQ#xO7+&zOOQV7+'P7+'PO3aQ#xO7+'PO#4]Q#zO,5<QOOQV7+'U7+'UPOOO7+(t7+(tO#4bQ#xO1G3{OOQS,5<k,5<kO#4pQ#xO1G3zOOQS-E9}-E9}O#5TQ#xO,5<lO#5`Q#xO,5<lO#5sQ#xO1G3}OOQS-E:O-E:OO#6TQ#xO1G3}O#6]Q#xO1G3}O#6mQ#xO1G3}O#6TQ#xO1G3}OOQS<<H^<<H^O#6xQ&nO1G2SOOQS<<Hm<<HmP#7VQ#xO'#F|O7kQ#xO1G3tO#7dQ#xO1G3tO#7iQ#xO<<HmOOQS<<Hn<<HnO#7yQ#xO7+)dOOQS<<Hu<<HuO#8ZQ&nO1G2RP#8zQ#xO'#F{O#9XQ#xO7+)eO#9iQ#xO7+)eO#9qQ#xO<<HyO#9vQ#xO7+)_OOQS<<H{<<H{O#:mQ#xO,5<jO'ZQ#xO,5<jOOQS-E9|-E9|OOQS<<Hy<<HyOOQS,5<p,5<pO/rQ#xO,5<pO#:rQ#xO1G4XOOQS-E:S-E:SO#;]Q#xO1G4XO;UQ#xO'#D}OOOO'#GV'#GVO#;nO$ISO,5:hOOO#l,5>n,5>nOOOW7+%k7+%kO#;yQ#xO7+%kOOO`7+%q7+%qO#<RQ#xO7+%qOOOp7+%s7+%sO#<ZQ#xO7+%sOOO!b7+%u7+%uO#<cQ#xO7+%uO#<kQ#xO1G3^O#=UQ#xO1G3^P'ZQ#xO'#F}O/rQ#xO<<IxO#=gQ#xO,5>vO#=xQ#xO,5>vO0XQ#xO,5>vO#>ZQ#xO,5>uOOQS<<Iz<<IzP0XQ#xO'#GbP/rQ#xO'#G^OOQS,5;e,5;eO#>`Q#xO,5>xO#>nQ#xO,5>xOOQS1G1O1G1OOOQS<<JS<<JSOOQV-E:c-E:cO3aQ#xO<<JYOOQV,5=P,5=PO3aQ#xO,5=POOQV<<JY<<JYOOQV<<J]<<J]O#>vQ&nO1G2lP#?QQ#xO'#GfO#?XQ#xO7+*QO#?cQ#{O<<J_O3aQ#xO<<J_OOQV<<Jf<<JfO3aQ#xO<<JfO!HeQMlO<<JfO#BqQ#{O7+&oOOQV<<J`<<J`O#B{Q#{O<<J`OOQV1G2m1G2mO0XQ#xO1G2mO#FZQ#xO1G2mO3aQ#xO<<J`O0XQ#xO1G2nP/rQ#xO'#GhO#FfQ#xO7+*RO#FsQ#xO7+*ROOQS'#F]'#F]O/rQ#xO,5>}O#F{Q#xO,5>}OOQS,5>},5>}O#GWQ#xO,5>|O#GiQ#xO,5>|OOQS1G1b1G1bOOQS,5;x,5;xOOQV<<Jk<<JkO#GqQ#xO1G1lOOQS7+)g7+)gP#GvQ#xO'#GPO#HWQ#xO1G2WO#HkQ#xO1G2WO#H{Q#xO1G2WP#IWQ#xO'#GQO#IeQ#xO7+)iO#IuQ#xO7+)iO#IuQ#xO7+)iO#I}Q#xO7+)iO#J_Q#xO7+)`O7kQ#xO7+)`OOQSAN>XAN>XO#JxQ#xO<<MPOOQSAN>eAN>eO/rQ#xO1G2UO#KYQ&nO1G2UP#KdQ#xO'#GOOOQS1G2[1G2[P#KqQ#xO'#GUO#LOQ#xO7+)sO#LiQ#xO,5:iOOOO-E:T-E:TOOOW<<IV<<IVOOO`<<I]<<I]OOOp<<I_<<I_OOO!b<<Ia<<IaO#LwQ#xO7+(xOOQSAN?dAN?dO#MbQ#xO,5<{O#MvQ#xO1G4bOOQS-E:_-E:_O#NXQ#xO1G4bOOQS1G4a1G4aOOQS,5<},5<}O#NjQ#xO1G4dOOQS-E:a-E:aOOQVAN?tAN?tOOQV1G2k1G2kO3aQ#xOAN?yO#NxQ#{OAN?yOOQVAN@QAN@QO3aQ#xOAN@QOOQV<<JZ<<JZO3aQ#xOAN?zO3aQ#xO7+(XOOQV7+(X7+(XO0XQ#xO7+(XOOQVAN?zAN?zOOQS7+(Y7+(YO$$WQ#xO<<MmOOQS1G4i1G4iO/rQ#xO1G4iOOQS,5=T,5=TO$$eQ#xO1G4hOOQS-E:g-E:gOOQU'#Gk'#GkO$$vQ#zO7+'WO$%RQ#xO'#FgO$%yQ#xO7+'rO$&ZQ#xO7+'rOOQS7+'r7+'rO$&fQ#xO<<MTO$&vQ#xO<<MTO$&vQ#xO<<MTO$'OQ#xO'#HpOOQS<<Lz<<LzO$'YQ#xO<<LzOOQS7+'p7+'pOOQS'#EO'#EOOOOO1G0T1G0TO$'sQ#xO1G0TO$'{Q#xO1G0TO0XQ#xO1G2gP0XQ#xO'#GaO$(WQ#xO7+)|O$(iQ#xO7+)|P!<OQ#xO'#GcOOQVG25eG25eO3aQ#xOG25eOOQVG25lG25lOOQVG25fG25fOOQV<<Ks<<KsO3aQ#xO<<KsOOQS7+*T7+*TP$(zQ#xO'#GiOOQU-E:i-E:iOOQV<<Jr<<JrO$)nQ&nO'#FiOOQS'#Fk'#FkO$*OQ#xO'#FjO$*pQ#xO'#FjOOQS'#Fj'#FjO$*uQ#xO'#IeO$%RQ#xO'#FqO$%RQ#xO'#FqO$+^Q#xO'#FrO$%RQ#xO'#FsO$+eQ#xO'#IfOOQS'#If'#IfO$,SQ#xO,5<ROOQS<<K^<<K^O$,[Q#xO<<K^O$,lQ#xOANBoO$,|Q#xOANBoO$-UQ#xO'#HqOOQS'#Hq'#HqO0sQ#xO'#DeO$-oQ#xO,5>[OOQSANBfANBfOOOO7+%o7+%oO$.WQ#xO7+%oOOQS7+(R7+(RO$.`Q#xO<<MhOOQVLD+PLD+POOQVANA_ANA_O4jQMlO'#GmO$.qQ&nO,5<[O$%RQ#xO'#FuOOQS,5<`,5<`OOQS'#Fl'#FlO$/cQ#xO,5<UO$/hQ#xO,5<UOOQS'#Fo'#FoO$%RQ#xO'#GlO$0YQ#xO,5<YO$0tQ#xO,5?PO$1UQ#xO,5?PO0XQ#xO,5<XO$1gQ#xO,5<]O$1lQ#xO,5<]O$%RQ#xO'#IgO$1qQ#xO'#IgO$1vQ#xO,5<^OOQS,5<_,5<_O'ZQ#xO'#FxOOQU1G1m1G1mO3aQ#xO1G1mOOQSAN@xAN@xO$1{Q#xOG28ZO$2]Q#xO,5:POOQS1G3v1G3vOOOO<<IZ<<IZOOQS,5=X,5=XOOQS-E:k-E:kO$2bQ&nO'#FiO$2iQ#xO'#IhO$2wQ#xO'#IhO$3PQ#xO,5<aOOQS1G1p1G1pO$3UQ#xO1G1pO$3ZQ#xO,5=WOOQS-E:j-E:jO$3uQ#xO,5=[O$4^Q#xO1G4kOOQS-E:n-E:nOOQS1G1s1G1sOOQS1G1w1G1wO$4nQ#xO,5?RO$%RQ#xO,5?ROOQS1G1x1G1xO$4|Q&nO,5<dOOQU7+'X7+'XO$'OQ#xO1G/kO$%RQ#xO,5<bO$5TQ#xO,5?SO$5[Q#xO,5?SOOQS1G1{1G1{OOQS7+'[7+'[P$%RQ#xO'#GpO$5dQ#xO1G4mO$5nQ#xO1G4mO$5vQ#xO1G4mOOQS7+%V7+%VO$6UQ#xO1G1|O$6dQ&nO'#FiO$6kQ#xO,5=ZOOQS,5=Z,5=ZO$6yQ#xO1G4nOOQS-E:m-E:mO$%RQ#xO,5=YO$7QQ#xO,5=YO$7VQ#xO7+*XOOQS-E:l-E:lO$7aQ#xO7+*XO$%RQ#xO,5<cP$%RQ#xO'#GoO$7iQ#xO1G2tO$%RQ#xO1G2tP$7wQ#xO'#GnO$8OQ#xO<<MsO$8YQ#xO1G1}O$8hQ#xO7+(`O7kQ#xO'#DPO7kQ#xO,59dO7kQ#xO,59dO7kQ#xO,59dO$8vQ&nO,5=rO7kQ#xO1G/OO/rQ#xO1G/ZO/rQ#xO7+$rP$9ZQ#xO'#G[O'ZQ#xO'#HWO$9hQ#xO,59dO$9mQ#xO,59dO$9tQ#xO,59oO$9yQ#xO1G/WO0sQ#xO'#DTO7kQ#xO,59l",stateData:"$:[~O%uOS%jOSUOS%iPQ~OPiOXfOhtOjYOquOu!UOxvO!RwO!S!QO!V!XO!W!WO!ZZO!_[O!jeO!zeO!{eO!|eO#TyO#VzO#X{O#Z|O#]}O#a!OO#c!PO#f!RO#g!RO#i!SO#k!TO#t!VO#w!YO#{!ZO#}![O$S!]O$VmO$X!^O&RRO&SRO&WSO&XWO&m]O&n^O&q_O&t`O&xaO&ybO&zcO~O%i!_O~OX!fOa!fOc!gOj!nO!Z!pO!h!rO%|!aO%}!bO&O!cO&P!dO&Q!dO&R!eO&S!eO&T!fO&U!fO&V!fO~Om&[Xn&[Xo&[Xp&[Xq&[Xr&[Xu&[X|&[X}&[X#Q&[X#o&[X%h&[X%k&[X&^&[Xi&[X!V&[X!W&[X&_&[X!Y&[X!^&[X!S&[X#d&[Xv&[X!o&[X~P$gOhtOjYO!ZZO!_[O!jeO!zeO!{eO!|eO&RRO&SRO&WSO&XWO&m]O&n^O&q_O&t`O&xaO&ybO&zcO~O|&ZX}&ZX#o&ZX%h&ZX%k&ZX&^&ZX~Om!uOn!vOo!tOp!tOq!wOr!xOu!yO#Q&ZX~P(hOX#POi#ROq1`Ox1nO!RwO~P'ZOX#TOq1`Ox1nO!Y#UO~P'ZOX#XOc#YOq1`Ox1nO!^#ZO~P'ZO&o#^O&p#`O~O&r#aO&s#`O~OQ#cO%l#dO%m#fO~OR#gO%n#hO%o#fO~OS#jO%p#kO%q#fO~OT#mO%r#nO%s#fO~OX%{Xa%{Xc%{Xj%{Xm%{Xn%{Xo%{Xp%{Xq%{Xr%{Xu%{X|%{X!Z%{X!h%{X%|%{X%}%{X&O%{X&P%{X&Q%{X&R%{X&S%{X&T%{X&U%{X&V%{Xi%{X!V%{X!W%{X~O&m]O&n^O&q_O&t`O&xaO&ybO&zcO}%{X#Q%{X#o%{X%h%{X%k%{X&^%{X&_%{X!Y%{X!^%{X!S%{X#d%{Xv%{X!o%{X~P,QO|#sO}%zX#Q%zX#o%zX%h%zX%k%zX&^%zX~Oq1`Ox1nO~P'ZO#o#vO%h#xO%k#xO~O&XWO~O!V#}O#}![O$S!]O$VmO~OquO~P'ZOX$SOc$TO&XWO}yP~OX$XOq1`Ox1nO!S$YO~P'ZO}$[O#Q$aO&^$]O#o#RX%h#RX%k#RX~OX$XOq1`Ox1nO#o#[X%h#[X%k#[X~P'ZOq1`Ox1nO#o#`X%h#`X%k#`X~P'ZO!h$gO!z$gO&XWO~OX$rO~P'ZO!W$tO#{$uO#}$vO~O}$wO~OX%OO~P'ZOU%QO%h%PO%u%RO~OX%[Oc%[Oi%^Oq1`Ox1nO~P'ZOq1`Ox1nO}%aO~P'ZO&l%cO~Oc!gOj!nO!Z!pO!h!rOXdaadamdandaodapdaqdardauda|da}da#Qda#oda%hda%kda%|da%}da&Oda&Pda&Qda&Rda&Sda&Tda&Uda&Vda&^daida!Vda!Wda&_da!Yda!^da!Sda#ddavda!oda~Op%hO~Oq%hO~P'ZOq1`O~P'ZOm1bOn1cOo1aOp1aOq1jOr1kOu1oOi&ZX!V&ZX!W&ZX&_&ZX!Y&ZX!^&ZX!S&ZX#d&ZX!o&ZX~P(hO&_%jOi&YX|&YX!V&YX!W&YX!Y&YX}&YX~Oi%lO|%mO!V%qO!W%pO~Oi%lO~O|%tO!V%qO!W%pO!Y&fX~O!Y%xO~O|%yO}%{O!V%qO!W%pO!^&aX~O!^&PO~O!^&QO~O&o#^O&p&SO~O&r#aO&s&SO~OX&VOq1`Ox1nO!RwO~P'ZOQ#cO%l#dO%m&YO~OR#gO%n#hO%o&YO~OS#jO%p#kO%q&YO~OT#mO%r#nO%s&YO~OX!yaa!yac!yaj!yam!yan!yao!yap!yaq!yar!yau!ya|!ya}!ya!Z!ya!h!ya#Q!ya#o!ya%h!ya%k!ya%|!ya%}!ya&O!ya&P!ya&Q!ya&R!ya&S!ya&T!ya&U!ya&V!ya&^!yai!ya!V!ya!W!ya&_!ya!Y!ya!^!ya!S!ya#d!yav!ya!o!ya~P#yO|&bO}%za#Q%za#o%za%h%za%k%za&^%za~P$gOX&dOquOxvO}%za#Q%za#o%za%h%za%k%za&^%za~P'ZO|&bO}%za#Q%za#o%za%h%za%k%za&^%za~OPiOXfOquOxvO!RwO!S!QO#TyO#VzO#X{O#Z|O#]}O#a!OO#c!PO#f!RO#g!RO#i!SO#k!TO#o%WX%h%WX%k%WX~P'ZO#o#vO%h&iO%k&iO~O!h&jOj&|X%h&|X#d&|X#o&|X%k&|X#c&|X~Oj!nO%h&lO~Omgangaogapgaqgargauga|ga}ga#Qga#oga%hga%kga&^gaiga!Vga!Wga&_ga!Yga!^ga!Sga#dgavga!oga~P$gOusa|sa}sa#osa%hsa%ksa&^sa~Om!uOn!vOo!tOp!tOq!wOr!xO#Qsa~PDuO&^&nO|&]X}&]X~O&XWO|&]X}&]X~O|&qO}yX~O}&sO~O|%yO#o&aX%h&aX%k&aXi&aX}&aX!^&aX!o&aX&^&aX~OX1iOq1`Ox1nO!RwO~P'ZO&^$]O#oWa%hWa%kWa~O|&|O#o&cX%h&cX%k&cXp&cX~P$gO|'PO!S'OO#o#`a%h#`a%k#`a~O#d'QO#o#ba%h#ba%k#ba~O!h$gO!z$gO#c'SO&XWO~O#c'SO~O|'UO#o'PX%h'PX%k'PX~O|'WO#o&{X%h&{X%k&{X}&{X~O!Z'YO&^'ZO~O|'_Op'SX~P$gOp'bO~OPiOXfOquOxvO!RwO!S!QO#TyO#VzO#X{O#Z|O#]}O#a!OO#c!PO#f!RO#g!RO#i!SO#k!TO%h'gO~P'ZOv'kO#x'iO#y'jOP#vaX#vah#vaj#vaq#vau#vax#va!R#va!S#va!V#va!W#va!Z#va!_#va!j#va!z#va!{#va!|#va#T#va#V#va#X#va#Z#va#]#va#a#va#c#va#f#va#g#va#i#va#k#va#t#va#w#va#{#va#}#va$S#va$V#va$X#va%e#va&R#va&S#va&W#va&X#va&m#va&n#va&q#va&t#va&x#va&y#va&z#va%g#va%k#va~O|'lO#d'nO}'TX~Oj'pO!Z'YO~Oj!nO}$wO!Z'YO~O}'vO~P$gO%h'yO~OU'zO%h'yO~OX!fOa!fOc!gOj!nO!Z!pO!h!rO&O!cO&P!dO&Q!dO&R!eO&S!eO&T!fO&U!fO&V!fOmYinYioYipYiqYirYiuYi|Yi}Yi#QYi#oYi%hYi%kYi%|Yi&^YiiYi!VYi!WYi&_Yi!YYi!^Yi!SYi#dYivYi!oYi~O%}!bO~P!!`O%}Yi~P!!`OX!fOa!fOc!gOj!nO!Z!pO!h!rO&R!eO&S!eO&T!fO&U!fO&V!fOmYinYioYipYiqYirYiuYi|Yi}Yi#QYi#oYi%hYi%kYi%|Yi%}Yi&OYi&^YiiYi!VYi!WYi&_Yi!YYi!^Yi!SYi#dYivYi!oYi~O&P!dO&Q!dO~P!%ZO&PYi&QYi~P!%ZOc!gOj!nO!Z!pO!h!rOmYinYioYipYiqYirYiuYi|Yi}Yi#QYi#oYi%hYi%kYi%|Yi%}Yi&OYi&PYi&QYi&RYi&SYi&^YiiYi!VYi!WYi&_Yi!YYi!^Yi!SYi#dYivYi!oYi~OX!fOa!fO&T!fO&U!fO&V!fO~P!(XOXYiaYi&TYi&UYi&VYi~P!(XO!V%qO!W%pOi&iX|&iX~O&^'|O&_'|O~P,QO|(OOi&hX~Oi(QO~O|(RO}(TO!Y&kX~Oq1`Ox1nO|(RO}(UO!Y&kX~P'ZO!Y(WO~Oo!tOp!tOq!wOr!xOmliuli|li}li#Qli#oli%hli%kli&^li~On!vO~P!,zOnli~P!,zOm1bOn1cOo1aOp1aOq1jOr1kO~Ov(YO~P!.TOX(_Oi(`Oq1`Ox1nO~P'ZOi(`O|(aO~Oi(cO~O!W(eO~Oi(fO|(aO!V%qO!W%pO~P$gOm1bOn1cOo1aOp1aOq1jOr1kOisa!Vsa!Wsa&_sa!Ysa!^sa!Ssa#dsavsa!osa~PDuOX(_Oq1`Ox1nO!Y&fa~P'ZO|(iO!Y&fa~O!Y(jO~O|(iO!V%qO!W%pO!Y&fa~P$gOX(nOq1`Ox1nO!^&aa#o&aa%h&aa%k&aai&aa}&aa!o&aa&^&aa~P'ZO|(oO!^&aa#o&aa%h&aa%k&aai&aa}&aa!o&aa&^&aa~O!^(rO~O|(oO!V%qO!W%pO!^&aa~P$gO|(uO!V%qO!W%pO!^&ga~P$gO|(xO}&uX!^&uX!o&uX&^&uX~O}(|O!^)OO!o)PO&^({O~O}(|O!^)SO!o)TO&^)RO~O}(|O!^)WO!o)XO&^)VO~O}(|O!^)[O!o)]O&^)ZO~OX&dOquOxvO}%zi#Q%zi#o%zi%h%zi%k%zi&^%zi~P'ZO|)_O}%zi#Q%zi#o%zi%h%zi%k%zi&^%zi~O!h&jOj&|a%h&|a#d&|a#o&|a%k&|a#c&|a~O%h)dO~OX$SOc$TO&XWO~O|&qO}ya~OquOxvO~P'ZO|(oO#o&aa%h&aa%k&aai&aa}&aa!^&aa!o&aa&^&aa~P$gO|)iO#o%zX%h%zX%k%zX&^%zX~O&^$]O#oWi%hWi%kWi~O#o&ca%h&ca%k&cap&ca~P'ZO|)lO#o&ca%h&ca%k&cap&ca~OX)pOj)rO&XWO~O#c)sO~O&XWO#o'Pa%h'Pa%k'Pa~O|)uO#o'Pa%h'Pa%k'Pa~Oq1`Ox1nO#o&{a%h&{a%k&{a}&{a~P'ZO|)xO#o&{a%h&{a%k&{a}&{a~OX)zOc)zO&XWO~O&^*PO~Ov*SO#r*ROP#piX#pih#pij#piq#piu#pix#pi!R#pi!S#pi!V#pi!W#pi!Z#pi!_#pi!j#pi!z#pi!{#pi!|#pi#T#pi#V#pi#X#pi#Z#pi#]#pi#a#pi#c#pi#f#pi#g#pi#i#pi#k#pi#t#pi#w#pi#{#pi#}#pi$S#pi$V#pi$X#pi%e#pi&R#pi&S#pi&W#pi&X#pi&m#pi&n#pi&q#pi&t#pi&x#pi&y#pi&z#pi%g#pi%k#pi~Ov*TOP#siX#sih#sij#siq#siu#six#si!R#si!S#si!V#si!W#si!Z#si!_#si!j#si!z#si!{#si!|#si#T#si#V#si#X#si#Z#si#]#si#a#si#c#si#f#si#g#si#i#si#k#si#t#si#w#si#{#si#}#si$S#si$V#si$X#si%e#si&R#si&S#si&W#si&X#si&m#si&n#si&q#si&t#si&x#si&y#si&z#si%g#si%k#si~OX*VOp'Sa~P'ZO|*WOp'Sa~O|*WOp'Sa~P$gOp*[O~O%f*`O~Ov*cO#x'iO#y*bOP#viX#vih#vij#viq#viu#vix#vi!R#vi!S#vi!V#vi!W#vi!Z#vi!_#vi!j#vi!z#vi!{#vi!|#vi#T#vi#V#vi#X#vi#Z#vi#]#vi#a#vi#c#vi#f#vi#g#vi#i#vi#k#vi#t#vi#w#vi#{#vi#}#vi$S#vi$V#vi$X#vi%e#vi&R#vi&S#vi&W#vi&X#vi&m#vi&n#vi&q#vi&t#vi&x#vi&y#vi&z#vi%g#vi%k#vi~OX*fOq1`Ox1nO}$wO~P'ZOq1`Ox1nO}'Ta~P'ZO|*jO}'Ta~OX*nOc*oOi*rO&T*pO&XWO~O}$wO'W*tO~Oj'pO~Oj!nO}$wO~O%h*yO~O%h*{O~OX%[Oc%[Oq1`Ox1nOi&ha~P'ZO|+OOi&ha~Oq1`Ox1nO}+RO!Y&ka~P'ZO|+SO!Y&ka~Oq1`Ox1nO|+SO}+VO!Y&ka~P'ZOq1`Ox1nO|+SO!Y&ka~P'ZO|+SO}+VO!Y&ka~Oo1aOp1aOq1jOr1kOilimliuli|li!Vli!Wli&_li!Yli}li!^li#oli%hli%kli!Sli#dlivli!oli&^li~On1cO~P!KZOnli~P!KZOX(_Oi+[Oq1`Ox1nO~P'ZOp+^O~Oi+[O|+`O~Oi+aO~OX(_Oq1`Ox1nO!Y&fi~P'ZO|+bO!Y&fi~O!Y+cO~OX(nOq1`Ox1nO!^&ai#o&ai%h&ai%k&aii&ai}&ai!o&ai&^&ai~P'ZO|+fO!V%qO!W%pO!^&gi~O|+iO!^&ai#o&ai%h&ai%k&aii&ai}&ai!o&ai&^&ai~O!^+jO~Oc+lOq1`Ox1nO!^&gi~P'ZO|+fO!^&gi~O!^+nO~OX+pOq1`Ox1nO}&ua!^&ua!o&ua&^&ua~P'ZO|+qO}&ua!^&ua!o&ua&^&ua~O!_+tO&w+uO!^!pX~O!^+wO~O}(|O!^+xO~O}(|O!^+xO!o+yO~O}(|O!^+zO~O}(|O!^+zO!o+{O~O}(|O!^+|O~O}(|O!^+|O!o+}O~O}(|O!^,OO~O}(|O!^,OO!o,PO~OX&dOquOxvO}%zq#Q%zq#o%zq%h%zq%k%zq&^%zq~P'ZO|%Oi}%Oi#Q%Oi#o%Oi%h%Oi%k%Oi&^%Oi~P$gOX&dOquOxvO~P'ZOX&dOq1`Ox1nO#o%za%h%za%k%za&^%za~P'ZO|,QO#o%za%h%za%k%za&^%za~O|$qa#o$qa%h$qa%k$qap$qa~P$gO#o&ci%h&ci%k&cip&ci~P'ZO|,TO#o#`q%h#`q%k#`q~O|,UO#d,WO#o'OX%h'OX%k'OXi'OX~OX,YOj)rO&XWO~O&XWO#o'Pi%h'Pi%k'Pi~Oq1`Ox1nO#o&{i%h&{i%k&{i}&{i~P'ZO}$[O|#mX!Y#mX~O|,^O!Y'QX~O!Y,`O~Ov,cO#r*ROP#pqX#pqh#pqj#pqq#pqu#pqx#pq!R#pq!S#pq!V#pq!W#pq!Z#pq!_#pq!j#pq!z#pq!{#pq!|#pq#T#pq#V#pq#X#pq#Z#pq#]#pq#a#pq#c#pq#f#pq#g#pq#i#pq#k#pq#t#pq#w#pq#{#pq#}#pq$S#pq$V#pq$X#pq%e#pq&R#pq&S#pq&W#pq&X#pq&m#pq&n#pq&q#pq&t#pq&x#pq&y#pq&z#pq%g#pq%k#pq~Op%Ya|%Ya~P$gOX*VOp'Si~P'ZO|,jOp'Si~O|,tO}$wO#d,tO~O#y,vOP#vqX#vqh#vqj#vqq#vqu#vqx#vq!R#vq!S#vq!V#vq!W#vq!Z#vq!_#vq!j#vq!z#vq!{#vq!|#vq#T#vq#V#vq#X#vq#Z#vq#]#vq#a#vq#c#vq#f#vq#g#vq#i#vq#k#vq#t#vq#w#vq#{#vq#}#vq$S#vq$V#vq$X#vq%e#vq&R#vq&S#vq&W#vq&X#vq&m#vq&n#vq&q#vq&t#vq&x#vq&y#vq&z#vq%g#vq%k#vq~O#d,wO|%[a}%[a~Oq1`Ox1nO}'Ti~P'ZO|,yO}'Ti~O}$[O&^,{Oi'VX|'VX~O&XWOi'VX|'VX~O|-POi'UX~Oi-RO~O%f-UO~O!V%qO!W%pOi&ii|&ii~OX%[Oc%[Oq1`Ox1nOi&hi~P'ZO}-XO|$ta!Y$ta~Oq1`Ox1nO}-YO|$ta!Y$ta~P'ZOq1`Ox1nO}+RO!Y&ki~P'ZO|-]O!Y&ki~Oq1`Ox1nO|-]O!Y&ki~P'ZO|-]O}-`O!Y&ki~Oi$pi|$pi!Y$pi~P$gOX(_Oq1`Ox1nO~P'ZOp-bO~OX(_Oi-cOq1`Ox1nO~P'ZOX(_Oq1`Ox1nO!Y&fq~P'ZO|$oi!^$oi#o$oi%h$oi%k$oii$oi}$oi!o$oi&^$oi~P$gOX(nOq1`Ox1nO~P'ZOc+lOq1`Ox1nO!^&gq~P'ZO|-dO!^&gq~O!^-eO~OX(nOq1`Ox1nO!^&aq#o&aq%h&aq%k&aqi&aq}&aq!o&aq&^&aq~P'ZO}-fO~OX+pOq1`Ox1nO}&ui!^&ui!o&ui&^&ui~P'ZO|-kO}&ui!^&ui!o&ui&^&ui~O!_+tO&w+uO!^!pa~O}(|O!^-nO~O}(|O!^-oO~O}(|O!^-pO~O}(|O!^-qO~OX&dOq1`Ox1nO#o%zi%h%zi%k%zi&^%zi~P'ZO|-rO#o%zi%h%zi%k%zi&^%zi~O&XWO#o'Oa%h'Oa%k'Oai'Oa~O|-uO#o'Oa%h'Oa%k'Oai'Oa~Oi-xO~OX)zOc)zO&XWO!Y'Qa~O|-zO!Y'Qa~Op%Yi|%Yi~P$gOX*VO~P'ZOX*VOp'Sq~P'ZOv.OOP#uyX#uyh#uyj#uyq#uyu#uyx#uy!R#uy!S#uy!V#uy!W#uy!Z#uy!_#uy!j#uy!z#uy!{#uy!|#uy#T#uy#V#uy#X#uy#Z#uy#]#uy#a#uy#c#uy#f#uy#g#uy#i#uy#k#uy#t#uy#w#uy#{#uy#}#uy$S#uy$V#uy$X#uy%e#uy&R#uy&S#uy&W#uy&X#uy&m#uy&n#uy&q#uy&t#uy&x#uy&y#uy&z#uy%g#uy%k#uy~O%g.SO%k.SO~P`O#y.TOP#vyX#vyh#vyj#vyq#vyu#vyx#vy!R#vy!S#vy!V#vy!W#vy!Z#vy!_#vy!j#vy!z#vy!{#vy!|#vy#T#vy#V#vy#X#vy#Z#vy#]#vy#a#vy#c#vy#f#vy#g#vy#i#vy#k#vy#t#vy#w#vy#{#vy#}#vy$S#vy$V#vy$X#vy%e#vy&R#vy&S#vy&W#vy&X#vy&m#vy&n#vy&q#vy&t#vy&x#vy&y#vy&z#vy%g#vy%k#vy~O|.WO}$wO#d.WO~Oq1`Ox1nO}'Tq~P'ZO|.ZO}'Tq~O&^,{Oi'Va|'Va~OX*nOc*oO&T*pO&XWOi'Ua~O|._Oi'Ua~O$[.cO~OX%[Oc%[Oq1`Ox1nO~P'ZOq1`Ox1nO}.dO|$ti!Y$ti~P'ZOq1`Ox1nO|$ti!Y$ti~P'ZO}.dO|$ti!Y$ti~Oq1`Ox1nO}+RO~P'ZOq1`Ox1nO}+RO!Y&kq~P'ZO|.gO!Y&kq~Oq1`Ox1nO|.gO!Y&kq~P'ZOu.jO!V%qO!W%pOi&bq!Y&bq!^&bq|&bq~P!.TOc+lOq1`Ox1nO!^&gy~P'ZO|$ri!^$ri~P$gOc+lOq1`Ox1nO~P'ZOX+pOq1`Ox1nO~P'ZOX+pOq1`Ox1nO}&uq!^&uq!o&uq&^&uq~P'ZO}(|O!^.oO!o.pO&^.nO~OX&dOq1`Ox1nO#o%zq%h%zq%k%zq&^%zq~P'ZO#d.rO|%Ta#o%Ta%h%Ta%k%Tai%Ta~O&XWO#o'Oi%h'Oi%k'Oii'Oi~O|.tO#o'Oi%h'Oi%k'Oii'Oi~OX)zOc)zO&XWO!Y'Qi~Ov.xOP#u!RX#u!Rh#u!Rj#u!Rq#u!Ru#u!Rx#u!R!R#u!R!S#u!R!V#u!R!W#u!R!Z#u!R!_#u!R!j#u!R!z#u!R!{#u!R!|#u!R#T#u!R#V#u!R#X#u!R#Z#u!R#]#u!R#a#u!R#c#u!R#f#u!R#g#u!R#i#u!R#k#u!R#t#u!R#w#u!R#{#u!R#}#u!R$S#u!R$V#u!R$X#u!R%e#u!R&R#u!R&S#u!R&W#u!R&X#u!R&m#u!R&n#u!R&q#u!R&t#u!R&x#u!R&y#u!R&z#u!R%g#u!R%k#u!R~Oq1`Ox1nO}'Ty~P'ZOX*nOc*oO&T*pO&XWOi'Ui~O$[.cO%g/QO%k/QO~OX/[Oj/YO!Z/XO!_/ZO!j/TO!{/VO!|/VO&S/SO&XWO&m]O&n^O&q_O~Oq1`Ox1nO|$tq!Y$tq~P'ZO}/aO|$tq!Y$tq~Oq1`Ox1nO}+RO!Y&ky~P'ZO|/bO!Y&ky~Oq1`Ox/fO~P'ZOu.jO!V%qO!W%pOi&by!Y&by!^&by|&by~P!.TO}(|O!^/iO~O}(|O!^/iO!o/jO~O&XWO#o'Oq%h'Oq%k'Oqi'Oq~O|/lO#o'Oq%h'Oq%k'Oqi'Oq~OX*nOc*oO&T*pO&XWO~Oj/qO!h/oO|$]X#d$]X%|$]Xi$]X~Ou$]X}$]X!Y$]X!^$]X~P$)YO&R/sO&S/sOu$^X|$^X}$^X#d$^X%|$^X!Y$^Xi$^X!^$^X~O!j/uO~O|/yO#d/{O%|/vOu'XX}'XX!Y'XXi'XX~Oc0OO~P$%_Oj/qOu'YX|'YX}'YX#d'YX%|'YX!Y'YXi'YX!^'YX~Ou0SO}$wO~Oq1`Ox1nO|$ty!Y$ty~P'ZOq1`Ox1nO}+RO!Y&k!R~P'ZO|0WO!Y&k!R~Oi&eXu&eX!V&eX!W&eX!Y&eX!^&eX|&eX~P!.TOu.jO!V%qO!W%pOi&da!Y&da!^&da|&da~O}(|O!^0ZO~O&XWO#o'Oy%h'Oy%k'Oyi'Oy~O!h/oOj$dau$da|$da}$da#d$da%|$da!Y$dai$da!^$da~O!j0bO~O&R/sO&S/sOu$^a|$^a}$^a#d$^a%|$^a!Y$^ai$^a!^$^a~O%|/vOu$ba|$ba}$ba#d$ba!Y$bai$ba!^$ba~Ou'Xa}'Xa!Y'Xai'Xa~P$%RO|0gOu'Xa}'Xa!Y'Xai'Xa~O!Y0jO~Oi0jO~O}0lO~O!^0mO~Oq1`Ox1nO}+RO!Y&k!Z~P'ZO}0pO~O&^0qO~P$)YO|0rO#d/{O%|/vOi'[X~O|0rOi'[X~Oi0tO~O!j0uO~O#d/{Ou%`a|%`a}%`a%|%`a!Y%`ai%`a!^%`a~O#d/{O%|/vOu%da|%da}%da!Y%dai%da~Ou'Xi}'Xi!Y'Xii'Xi~P$%RO|0wO#d/{O%|/vO!^'Za~O}$la~P$gOi'[a~P$%RO|1POi'[a~Oc1RO!^'Zi~P$%_O|1TO!^'Zi~O|1TO#d/{O%|/vO!^'Zi~O#d/{O%|/vOi$ji|$ji~O&^1WO~P$)YO#d/{O%|/vOi%ca|%ca~Oi'[i~P$%RO}1ZO~Oc1RO!^'Zq~P$%_O|1]O!^'Zq~O#d/{O%|/vO|%bi!^%bi~Oc1RO~P$%_Oc1RO!^'Zy~P$%_O#d/{O%|/vOi$ki|$ki~O#d/{O%|/vO|%bq!^%bq~O|,QO#o%za%h%za%k%za&^%za~P$gOX&dOq1`Ox1nO~P'ZOp1eO~Oq1eO~P'ZO}1fO~Ov1gO~P!.TO&n&q&y&z&m&t&x&X&m~",goto:"!@f']PPPPPPPP'^P'f+R+k,U,p-]-yP.hP'f/X/X'fPPP'f2tPPPPPP2t5kPP5kP8O8X>kPP>n?`?cPP'f'fPP?{PP'f'fPP'f'f'f'f'f@P@y'fP@|PASE^H}IRPIUIlIpIsIwIzJOJRJV'fPPPJYJc'^P'^'^P'^P'^P'^P'^P'^'^'^P'^PP'^PP'^P'^PJiJuJ}PKUK[PKUPKUKUPPPKUPMjPMsM}NTMjPKUN^PKUPNeNkPNo! T! r!!]NoNo!!c!!pNoNoNoNo!#U!#[!#_!#d!#g!#q!#w!$T!$g!$m!$w!$}!%k!%q!%w!%}!&X!&_!&e!&k!&q!&w!'Z!'e!'k!'q!'w!(R!(X!(_!(e!(k!(u!({!)V!)]!)f!)l!){!*T!*_!*fPPPPPPPPPPPPPPPPP!*l!*o!*u!+O!+Y!+ePPPPPPPPPPPP!0[!1p!5s!9WPP!9`!9r!9{!:t!:k!:}!;T!;W!;Z!;^!;f!<VPPPPPPPPP!<Y!<iPPPP!=m!=y!>V!>]!>f!>i!>l!>r!>x!?O!?RP!?Z!?d!@`!@c]jOs#v$w*`,p(TeOTYZ[fistuwy}!O!S!U!V!W!Z!^!h!i!j!k!l!m!n!p!t!u!v!x!y#P#T#X#Y#c#g#j#m#s#v$X$Y$[$^$a$r$t$u$w%O%[%a%h%k%m%p%t%y%{&V&b&d&o&s&|'O'P'W'Z'_'b'i'l'}(O(R(T(U(Y(_(a(e(i(n(o(u(x)_)a)i)l)x*P*R*V*W*[*`*f*j*t+O+R+S+V+]+^+`+b+e+f+i+l+p+q+t,Q,S,T,[,i,j,p,x,y,|-W-X-Y-[-]-`-b-d-f-h-j-k-r.Z.].d.g.j/a/b0S0W0p1`1a1b1c1e1f1g1h1i1k1o}!hQ#r$P$b$q$}%r%w%}&O&t'a'x)`)k*U+Z+d,h-g0n1d!P!iQ#r$P$b$q$}%S%r%w%}&O&t'a'x)`)k*U+Z+d,h-g0n1d!R!jQ#r$P$b$q$}%S%T%r%w%}&O&t'a'x)`)k*U+Z+d,h-g0n1d!T!kQ#r$P$b$q$}%S%T%U%r%w%}&O&t'a'x)`)k*U+Z+d,h-g0n1d!V!lQ#r$P$b$q$}%S%T%U%V%r%w%}&O&t'a'x)`)k*U+Z+d,h-g0n1d!X!mQ#r$P$b$q$}%S%T%U%V%W%r%w%}&O&t'a'x)`)k*U+Z+d,h-g0n1d!]!mQ!s#r$P$b$q$}%S%T%U%V%W%X%r%w%}&O&t'a'x)`)k*U+Z+d,h-g0n1d(TTOTYZ[fistuwy}!O!S!U!V!W!Z!^!h!i!j!k!l!m!n!p!t!u!v!x!y#P#T#X#Y#c#g#j#m#s#v$X$Y$[$^$a$r$t$u$w%O%[%a%h%k%m%p%t%y%{&V&b&d&o&s&|'O'P'W'Z'_'b'i'l'}(O(R(T(U(Y(_(a(e(i(n(o(u(x)_)a)i)l)x*P*R*V*W*[*`*f*j*t+O+R+S+V+]+^+`+b+e+f+i+l+p+q+t,Q,S,T,[,i,j,p,x,y,|-W-X-Y-[-]-`-b-d-f-h-j-k-r.Z.].d.g.j/a/b0S0W0p1`1a1b1c1e1f1g1h1i1k1o&iVOYZ[isuw}!O!S!U!V!Z!n!p!t!u!v!x!y#c#g#j#m#s#v$Y$[$^$a$u$w%[%a%h%k%m%t%y%{&V&b&o&s'O'P'W'Z'b'i'l'}(O(R(T(U(Y(a(i(o(u(x)_)a)i)x*P*R*[*`*f*j*t+O+R+S+V+]+^+`+b+e+f+i+p+q+t,Q,T,[,p,x,y,|-W-X-Y-[-]-`-b-d-f-h-j-k-r.Z.].d.g.j/a/b0W0p1`1a1b1c1e1f1g1h1k1o%sXOYZ[isw}!O!S!U!V!Z!n!p#c#g#j#m#s#v$Y$[$^$a$u$w%[%a%k%m%t%y%{&V&b&o&s'O'P'W'Z'b'i'l'}(O(R(T(U(Y(a(i(o(u(x)_)a)i)x*P*R*[*`*f*j*t+O+R+S+V+]+`+b+e+f+i+p+q+t,Q,T,[,p,x,y,|-W-X-Y-[-]-`-d-f-h-j-k-r.Z.].d.g/a/b0W1f1g1hQ$VvQ0X/fR1l1n'zeOTYZ[fistuwy}!O!S!U!V!W!Z!^!h!i!j!k!l!m!p!t!u!v!x!y#P#T#X#Y#c#g#j#m#s#v$X$Y$[$^$a$r$t$u$w%O%[%a%h%k%m%p%t%y%{&V&b&d&o&s&|'O'P'W'Z'_'b'i'l'}(R(T(U(Y(_(a(e(i(n(o(u(x)_)a)i)l)x*P*R*V*W*[*`*f*j*t+R+S+V+]+^+`+b+e+f+i+l+p+q+t,Q,S,T,[,i,j,p,x,y,|-X-Y-[-]-`-b-d-f-h-j-k-r.Z.].d.g.j/a/b0S0W0p1`1a1b1c1e1f1g1h1i1k1oW#ym!P!Q$hW$Rv&q/f1nQ$j!RQ$n!TQ${![Q$|!]W%Z!n(O+O-WS&p$S$TQ'e$vQ)b&jQ)p'QU)q'S)r)sU)t'U)u,ZW){'Y,^-z.vQ*l'nW*m'p-P._/OQ,])zS-O*n*oY-t,U-u.s.t/lQ-w,WQ.U,tQ.Y,wQ.|.Wl/R.c/X/Y/[/w/y0O0g0l0q0v1R1W1ZQ/k.rQ0P/ZQ0^/qQ0i/{U0|0r1P1XX1S0w1T1[1]R&o$R!_!|YZ!U!V!p%a%m%t(R(T(U(a(i*R+R+S+V+]+`+b-X-Y-[-]-`.d.g/a/b0WR%k!{Q#QYQ&W#cQ&Z#gQ&]#jQ&_#mQ&x$^Q&{$aR-l+tT/e.j0p![!oQ!s#r$P$b$q$}%S%T%U%V%W%X%r%w%}&O&t'a'x)`)k*U+Z+d,h-g0n1dQ&m#zQ't$|R*x'uR'}%ZQ%d!rR0[/o(SdOTYZ[fistuwy}!O!S!U!V!W!Z!^!h!i!j!k!l!m!n!p!t!u!v!x!y#P#T#X#Y#c#g#j#m#s#v$X$Y$[$^$a$r$t$u$w%O%[%a%h%k%m%p%t%y%{&V&b&d&o&s&|'O'P'W'Z'_'b'i'l'}(O(R(T(U(Y(_(a(e(i(n(o(u(x)_)a)i)l)x*P*R*V*W*[*`*f*j*t+O+R+S+V+]+^+`+b+e+f+i+l+p+q+t,Q,S,T,[,i,j,p,x,y,|-W-X-Y-[-]-`-b-d-f-h-j-k-r.Z.].d.g.j/a/b0S0W0p1`1a1b1c1e1f1g1h1i1k1oS#pd#q!P/V.c/X/Y/Z/[/q/w/y0O0g0l0q0r0v0w1P1R1T1W1X1Z1[1](SdOTYZ[fistuwy}!O!S!U!V!W!Z!^!h!i!j!k!l!m!n!p!t!u!v!x!y#P#T#X#Y#c#g#j#m#s#v$X$Y$[$^$a$r$t$u$w%O%[%a%h%k%m%p%t%y%{&V&b&d&o&s&|'O'P'W'Z'_'b'i'l'}(O(R(T(U(Y(_(a(e(i(n(o(u(x)_)a)i)l)x*P*R*V*W*[*`*f*j*t+O+R+S+V+]+^+`+b+e+f+i+l+p+q+t,Q,S,T,[,i,j,p,x,y,|-W-X-Y-[-]-`-b-d-f-h-j-k-r.Z.].d.g.j/a/b0S0W0p1`1a1b1c1e1f1g1h1i1k1oT#pd#qT#d`#eR)Q&Wy(}&W&Z&]&_)P)Q)T)U)X)Y)])^+y+{+},P-l.p.q/jT+u(|+vR.q-lT#ha#iR)U&ZT#kb#lR)Y&]T#nc#oR)^&_Q$`xQ,]){R,}*mX$^x$_$`&zQ'[$nQ'r${Q'u$|R*_'eQ)|'YV-y,^-z.vZlOs$w*`,pXpOs*`,pQ$x!YQ']$oQ'^$pQ'o$zQ's$|Q*]'dQ*d'iQ*g'jQ*h'kQ*u'qS*w't'uQ,d*RQ,f*SQ,g*TQ,k*ZS,m*^*vQ,q*bQ,r*cS,s*e*fQ-T*xQ-|,cQ-},eQ.P,lS.Q,n,oQ.V,uQ.X,vQ.w.OQ.y.RQ.z.TQ.{.UQ/m.xQ/n.|Q0T/_R0o0UWpOs*`,pR#|oQ'q${S*^'e'rR,o*_Q,|*mR.],}Q*v'qQ,n*^R.R,oZnOos*`,pQ'w$}R*z'xT.a-U.bu/^.c/X/Y/[/q/w/y0O0g0l0q0r0v1P1R1W1X1Zt/^.c/X/Y/[/q/w/y0O0g0l0q0r0v1P1R1W1X1ZQ0P/ZX1S0w1T1[1]!P/U.c/X/Y/Z/[/q/w/y0O0g0l0q0r0v0w1P1R1T1W1X1Z1[1]Q/t/TR0c/ug/w/W/x0_0f0k0y0{0}1Y1^1_u/].c/X/Y/[/q/w/y0O0g0l0q0r0v1P1R1W1X1ZX/r/R/]0^0|R0`/qV1O0r1P1XR0U/_QsOS$Os,pR,p*`Q&r$UR)g&rS%z#W$WS(p%z(sT(s%}&tQ%n#OQ%u#SW(b%n%u(g(kQ(g%rR(k%wQ&}$bR)m&}Q(v&OQ+g(qT+m(v+gQ(P%]R+P(PS(S%`%aY+T(S+U-^.h/cU+U(T(U(VU-^+V+W+XS.h-_-`R/c.iQ#_^R&R#_Q#b_R&T#bQ#e`R&X#eQ(y&US+r(y+sR+s(zQ+v(|R-m+vQ#iaR&[#iQ#lbR&^#lQ#ocR&`#oQ#qdR&a#qQ#tgQ&c#rW&f#t&c)j,RQ)j&wR,R1dQ$_xS&y$_&zR&z$`Q'X$lR)y'XQ&k#yR)c&kQ$h!QR'R$hQ,V)qS-v,V.uR.u-wQ'V$jR)v'VQ,_)|R-{,_Q#wkR&h#wQ*Q']R,b*QQ'`$qS*X'`*YR*Y'aQ'h$xR*a'hQ'm$yS*k'm,zR,z*lQ-Q*qR.`-QWoOs*`,pR#{oQ.b-UR/P.bd/x/W0_0f0k0y0{0}1Y1^1_R0e/xU/p/R0^0|R0]/pQ0x0kS1U0x1VR1V0yS0s0_0`R1Q0sQ/z/WR0h/zR!`PXrOs*`,pWqOs*`,pR'f$wYkOs$w*`,pR&g#v[xOs#v$w*`,pR&x$^&hQOYZ[isuw}!O!S!U!V!Z!n!p!t!u!v!x!y#c#g#j#m#s#v$Y$[$^$a$u$w%[%a%h%k%m%t%y%{&V&b&o&s'O'P'W'Z'b'i'l'}(O(R(T(U(Y(a(i(o(u(x)_)a)i)x*P*R*[*`*f*j*t+O+R+S+V+]+^+`+b+e+f+i+p+q+t,Q,T,[,p,x,y,|-W-X-Y-[-]-`-b-d-f-h-j-k-r.Z.].d.g.j/a/b0W0p1`1a1b1c1e1f1g1h1k1oQ!sTQ#rfQ$PtU$by%p(eS$q!W$tQ$}!^Q%S!hQ%T!iQ%U!jQ%V!kQ%W!lQ%X!mQ%r#PQ%w#TQ%}#XQ&O#YQ&t$XQ'a$rQ'x%OQ)`&dU)k&|)l,SW*U'_*W,i,jQ+Z(_Q+d(nQ,h*VQ-g+lQ0n0SR1d1iQ#OYQ#SZQ$o!UQ$p!VQ%`!pQ(V%a^(^%m%t(a(i+]+`+b^+Q(R+S-[-].g/b0WQ+W(TQ+X(UQ,e*RQ-Z+RQ-_+VQ.e-XQ.f-YQ.i-`Q/`.dR0V/a[gOs#v$w*`,p!^!{YZ!U!V!p%a%m%t(R(T(U(a(i*R+R+S+V+]+`+b-X-Y-[-]-`.d.g/a/b0WQ#W[Q#uiS$Ww}Q$e!OW$l!S$a'b*[S$y!Z$uW%Y!n(O+O-WY&U#c#g#j#m+t`&e#s&b)_)a)i,Q-r1hQ&u$YQ&v$[Q&w$^Q'{%[Q(]%kW(m%y(o+e+iQ(q%{Q(z&VQ)e&oS)h&s1fQ)n'OQ)o'PU)w'W)x,[Q*O'ZQ*e'iY*i'l*j,x,y.ZQ*|'}S+Y(Y1gW+k(u+f-d-hW+o(x+q-j-kQ,a*PQ,u*fQ-S*tQ-i+pQ-s,TQ.[,|Q.m-fR.}.]hUOs#s#v$w&b&s(Y)_)a*`,p%Y!zYZ[iw}!O!S!U!V!Z!n!p#c#g#j#m$Y$[$^$a$u%[%a%k%m%t%y%{&V&o'O'P'W'Z'b'i'l'}(O(R(T(U(a(i(o(u(x)i)x*P*R*[*f*j*t+O+R+S+V+]+`+b+e+f+i+p+q+t,Q,T,[,x,y,|-W-X-Y-[-]-`-d-f-h-j-k-r.Z.].d.g/a/b0W1f1g1hQ$QuW%e!t!x1a1kQ%f!uQ%g!vQ%i!yQ%s1`S(X%h1eQ(Z1bQ([1cQ-a+^Q.l-bS/d.j0pR1m1oU$Uv/f1nR)f&q[hOs#v$w*`,pa!}Y#c#g#j#m$^$a+tQ#][Q$ZwR$d}Q%o#OQ%v#SQ%|#WQ'{%YQ(h%rQ(l%wQ(t%}Q(w&OQ+h(qQ-V*|Q.k-aQ/h.lR0Y/gQ$cyQ(d%pR+_(eQ/g.jR0z0pR#VZR#[[R%_!nQ%]!nV*}(O+O-W!]!qQ!s#r$P$b$q$}%S%T%U%V%W%X%r%w%}&O&t'a'x)`)k*U+Z+d,h-g0n1dR%b!pQ&W#cQ&Z#gQ&]#jQ&_#mR-l+tQ)O&WQ)S&ZQ)W&]Q)[&_S+x)P)QS+z)T)US+|)X)YS,O)])^Q-n+yQ-o+{Q-p+}Q-q,PQ.o-lS/i.p.qR0Z/jQ$m!SQ&{$aQ*Z'bR,l*[Q#zmQ$f!PQ$i!QR'T$hQ)p'SR,Y)sQ)p'SQ,X)rR,Y)sR$k!RR)}'YXqOs*`,pQ$s!WR'c$tQ$z!ZR'd$uR*s'pQ*q'pV.^-P._/OQ/_.cQ/|/XR/}/YU/W.c/X/YQ0R/[Q0_/qQ0d/wU0f/y0g0vQ0k0OQ0y0lQ0{0qU0}0r1P1XQ1Y1RQ1^1WR1_1ZR0Q/ZR0a/q",nodeNames:"⚠ print { { { { Comment Script AssignStatement * BinaryExpression BitOp BitOp BitOp BitOp ArithOp ArithOp @ ArithOp ** UnaryExpression ArithOp BitOp AwaitExpression await ) ( ParenthesizedExpression BinaryExpression or and CompareOp in not is UnaryExpression ConditionalExpression if else LambdaExpression lambda ParamList VariableName AssignOp , : NamedExpression AssignOp YieldExpression yield from TupleExpression ComprehensionExpression async for LambdaExpression ] [ ArrayExpression ArrayComprehensionExpression } { DictionaryExpression DictionaryComprehensionExpression SetExpression SetComprehensionExpression CallExpression ArgList AssignOp MemberExpression . PropertyName Number String FormatString FormatReplacement FormatSelfDoc FormatConversion FormatSpec FormatReplacement FormatSelfDoc FormatReplacement FormatSelfDoc FormatReplacement FormatSelfDoc FormatReplacement FormatSelfDoc ContinuedString Ellipsis None Boolean TypeDef AssignOp UpdateStatement UpdateOp ExpressionStatement DeleteStatement del PassStatement pass BreakStatement break ContinueStatement continue ReturnStatement return YieldStatement PrintStatement RaiseStatement raise ImportStatement import as ScopeStatement global nonlocal AssertStatement assert TypeDefinition type TypeParamList TypeParam StatementGroup ; IfStatement Body elif WhileStatement while ForStatement TryStatement try except finally WithStatement with FunctionDefinition def ParamList AssignOp TypeDef ClassDefinition class DecoratedStatement Decorator At MatchStatement match MatchBody MatchClause case CapturePattern LiteralPattern ArithOp ArithOp AsPattern OrPattern LogicOp AttributePattern SequencePattern MappingPattern StarPattern ClassPattern PatternArgList KeywordPattern KeywordPattern Guard",maxTerm:288,context:B,nodeProps:[["isolate",-8,6,73,74,75,79,81,83,85,""],["group",-15,8,93,95,96,98,100,102,104,106,107,108,110,113,116,118,"Statement Statement",-22,10,20,23,27,42,51,52,58,59,62,63,64,65,66,69,72,73,74,87,88,89,90,"Expression",-10,122,124,127,129,130,134,136,141,143,146,"Statement",-9,151,152,155,156,158,159,160,161,162,"Pattern"],["openedBy",25,"(",56,"[",60,"{"],["closedBy",26,")",57,"]",61,"}"]],propSources:[sO],skippedNodes:[0,6],repeatNodeCount:38,tokenData:"%-W#sR!`OX%TXY=|Y[%T[]=|]p%Tpq=|qr@_rsDOst!+|tu%Tuv!Nnvw#!|wx#$Wxy#:Uyz#;Yz{#<^{|#>x|}#@S}!O#AW!O!P#Ci!P!Q#N_!Q!R$!y!R![$&w![!]$1e!]!^$3s!^!_$4w!_!`$7c!`!a$8m!a!b%T!b!c$;U!c!d$<b!d!e$>W!e!h$<b!h!i$H[!i!t$<b!t!u%#r!u!w$<b!w!x$Fl!x!}$<b!}#O%%z#O#P?d#P#Q%'O#Q#R%(S#R#S$<b#S#T%T#T#U$<b#U#V$>W#V#Y$<b#Y#Z$H[#Z#f$<b#f#g%#r#g#i$<b#i#j$Fl#j#o$<b#o#p%)^#p#q%*S#q#r%+^#r#s%,S#s$g%T$g;'S$<b;'S;=`$>Q<%lO$<b!n%^]&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!n&^]&w!b&oSOr%Trs'Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!n'^]&w!b&oSOr%Trs(Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!f(^Z&w!b&oSOw(Vwx)Px#O(V#O#P+Z#P#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`/R<%lO(V!f)UZ&w!bOw(Vwx)wx#O(V#O#P+Z#P#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`/R<%lO(V!f)|Z&w!bOw(Vwx*ox#O(V#O#P+Z#P#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`/R<%lO(V!b*tT&w!bO#o*o#p#q*o#r;'S*o;'S;=`+T<%lO*o!b+WP;=`<%l*o!f+`W&w!bO#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`.d;=`<%l+x<%lO(VS+}V&oSOw+xwx,dx#O+x#O#P-c#P;'S+x;'S;=`.^<%lO+xS,gVOw+xwx,|x#O+x#O#P-c#P;'S+x;'S;=`.^<%lO+xS-PUOw+xx#O+x#O#P-c#P;'S+x;'S;=`.^<%lO+xS-fRO;'S+x;'S;=`-o;=`O+xS-tW&oSOw+xwx,dx#O+x#O#P-c#P;'S+x;'S;=`.^;=`<%l+x<%lO+xS.aP;=`<%l+x!f.iW&oSOw+xwx,dx#O+x#O#P-c#P;'S+x;'S;=`.^;=`<%l(V<%lO+x!f/UP;=`<%l(V!n/`]&w!b&rWOr%Trs&Vsw%Twx0Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!n0`]&w!b&rWOr%Trs&Vsw%Twx1Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!j1`Z&w!b&rWOr1Xrs2Rs#O1X#O#P3q#P#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`7i<%lO1X!j2WZ&w!bOr1Xrs2ys#O1X#O#P3q#P#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`7i<%lO1X!j3OZ&w!bOr1Xrs*os#O1X#O#P3q#P#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`7i<%lO1X!j3vW&w!bO#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`6z;=`<%l4`<%lO1XW4eV&rWOr4`rs4zs#O4`#O#P5y#P;'S4`;'S;=`6t<%lO4`W4}VOr4`rs5ds#O4`#O#P5y#P;'S4`;'S;=`6t<%lO4`W5gUOr4`s#O4`#O#P5y#P;'S4`;'S;=`6t<%lO4`W5|RO;'S4`;'S;=`6V;=`O4`W6[W&rWOr4`rs4zs#O4`#O#P5y#P;'S4`;'S;=`6t;=`<%l4`<%lO4`W6wP;=`<%l4`!j7PW&rWOr4`rs4zs#O4`#O#P5y#P;'S4`;'S;=`6t;=`<%l1X<%lO4`!j7lP;=`<%l1X!n7tW&w!bO#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=P;=`<%l8^<%lO%T[8eX&oS&rWOr8^rs9Qsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^[9VX&oSOr8^rs9rsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^[9wX&oSOr8^rs+xsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^[:iX&rWOr8^rs9Qsw8^wx;Ux#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^[;ZX&rWOr8^rs9Qsw8^wx4`x#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^[;yRO;'S8^;'S;=`<S;=`O8^[<ZY&oS&rWOr8^rs9Qsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y;=`<%l8^<%lO8^[<|P;=`<%l8^!n=WY&oS&rWOr8^rs9Qsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y;=`<%l%T<%lO8^!n=yP;=`<%l%T#s>Xc&w!b&oS&rW%u!TOX%TXY=|Y[%T[]=|]p%Tpq=|qr%Trs&Vsw%Twx/Xx#O%T#O#P?d#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#s?i[&w!bOY%TYZ=|Z]%T]^=|^#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=P;=`<%l8^<%lO%T!q@hd&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`Av!`#O%T#O#P7o#P#T%T#T#UBz#U#f%T#f#gBz#g#hBz#h#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!qBR]oR&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!qCV]!oR&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#cDXa&w!b&oS&msOYE^YZ%TZ]E^]^%T^rE^rs!)|swE^wxGpx#OE^#O#P!!u#P#oE^#o#p!#d#p#qE^#q#r!#d#r;'SE^;'S;=`!)v<%lOE^#cEia&w!b&oS&rW&msOYE^YZ%TZ]E^]^%T^rE^rsFnswE^wxGpx#OE^#O#P!!u#P#oE^#o#p!#d#p#qE^#q#r!#d#r;'SE^;'S;=`!)v<%lOE^#cFw]&w!b&oS&msOr%Trs'Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#cGya&w!b&rW&msOYE^YZ%TZ]E^]^%T^rE^rsFnswE^wxIOx#OE^#O#P!!u#P#oE^#o#p!#d#p#qE^#q#r!#d#r;'SE^;'S;=`!)v<%lOE^#cIXa&w!b&rW&msOYE^YZ%TZ]E^]^%T^rE^rsFnswE^wxJ^x#OE^#O#P!!u#P#oE^#o#p!#d#p#qE^#q#r!#d#r;'SE^;'S;=`!)v<%lOE^#_Jg_&w!b&rW&msOYJ^YZ1XZ]J^]^1X^rJ^rsKfs#OJ^#O#PL`#P#oJ^#o#pL}#p#qJ^#q#rL}#r;'SJ^;'S;=`!!o<%lOJ^#_KmZ&w!b&msOr1Xrs2ys#O1X#O#P3q#P#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`7i<%lO1X#_LeW&w!bO#oJ^#o#pL}#p#qJ^#q#rL}#r;'SJ^;'S;=`! r;=`<%lL}<%lOJ^{MUZ&rW&msOYL}YZ4`Z]L}]^4`^rL}rsMws#OL}#O#PNc#P;'SL};'S;=`! l<%lOL}{M|V&msOr4`rs5ds#O4`#O#P5y#P;'S4`;'S;=`6t<%lO4`{NfRO;'SL};'S;=`No;=`OL}{Nv[&rW&msOYL}YZ4`Z]L}]^4`^rL}rsMws#OL}#O#PNc#P;'SL};'S;=`! l;=`<%lL}<%lOL}{! oP;=`<%lL}#_! y[&rW&msOYL}YZ4`Z]L}]^4`^rL}rsMws#OL}#O#PNc#P;'SL};'S;=`! l;=`<%lJ^<%lOL}#_!!rP;=`<%lJ^#c!!zW&w!bO#oE^#o#p!#d#p#qE^#q#r!#d#r;'SE^;'S;=`!(q;=`<%l!#d<%lOE^!P!#m]&oS&rW&msOY!#dYZ8^Z]!#d]^8^^r!#drs!$fsw!#dwx!%Yx#O!#d#O#P!'Y#P;'S!#d;'S;=`!(k<%lO!#d!P!$mX&oS&msOr8^rs9rsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^!P!%a]&rW&msOY!#dYZ8^Z]!#d]^8^^r!#drs!$fsw!#dwx!&Yx#O!#d#O#P!'Y#P;'S!#d;'S;=`!(k<%lO!#d!P!&a]&rW&msOY!#dYZ8^Z]!#d]^8^^r!#drs!$fsw!#dwxL}x#O!#d#O#P!'Y#P;'S!#d;'S;=`!(k<%lO!#d!P!']RO;'S!#d;'S;=`!'f;=`O!#d!P!'o^&oS&rW&msOY!#dYZ8^Z]!#d]^8^^r!#drs!$fsw!#dwx!%Yx#O!#d#O#P!'Y#P;'S!#d;'S;=`!(k;=`<%l!#d<%lO!#d!P!(nP;=`<%l!#d#c!(z^&oS&rW&msOY!#dYZ8^Z]!#d]^8^^r!#drs!$fsw!#dwx!%Yx#O!#d#O#P!'Y#P;'S!#d;'S;=`!(k;=`<%lE^<%lO!#d#c!)yP;=`<%lE^#c!*V]&w!b&oS&msOr%Trs!+Osw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c!+ZZ&sW&w!b&oS&qsOw(Vwx)Px#O(V#O#P+Z#P#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`/R<%lO(V#s!,XaU!T&w!b&oS&rWOY!+|YZ%TZ]!+|]^%T^r!+|rs!-^sw!+|wx!:hx#O!+|#O#P!FW#P#o!+|#o#p!GT#p#q!+|#q#r!GT#r;'S!+|;'S;=`!Nh<%lO!+|#s!-gaU!T&w!b&oSOY!+|YZ%TZ]!+|]^%T^r!+|rs!.lsw!+|wx!:hx#O!+|#O#P!FW#P#o!+|#o#p!GT#p#q!+|#q#r!GT#r;'S!+|;'S;=`!Nh<%lO!+|#s!.uaU!T&w!b&oSOY!+|YZ%TZ]!+|]^%T^r!+|rs!/zsw!+|wx!:hx#O!+|#O#P!FW#P#o!+|#o#p!GT#p#q!+|#q#r!GT#r;'S!+|;'S;=`!Nh<%lO!+|#k!0T_U!T&w!b&oSOY!/zYZ(VZ]!/z]^(V^w!/zwx!1Sx#O!/z#O#P!4z#P#o!/z#o#p!5w#p#q!/z#q#r!5w#r;'S!/z;'S;=`!:b<%lO!/z#k!1Z_U!T&w!bOY!/zYZ(VZ]!/z]^(V^w!/zwx!2Yx#O!/z#O#P!4z#P#o!/z#o#p!5w#p#q!/z#q#r!5w#r;'S!/z;'S;=`!:b<%lO!/z#k!2a_U!T&w!bOY!/zYZ(VZ]!/z]^(V^w!/zwx!3`x#O!/z#O#P!4z#P#o!/z#o#p!5w#p#q!/z#q#r!5w#r;'S!/z;'S;=`!:b<%lO!/z#g!3gZU!T&w!bOY!3`YZ*oZ]!3`]^*o^#o!3`#o#p!4Y#p#q!3`#q#r!4Y#r;'S!3`;'S;=`!4t<%lO!3`!T!4_TU!TOY!4YZ]!4Y^;'S!4Y;'S;=`!4n<%lO!4Y!T!4qP;=`<%l!4Y#g!4wP;=`<%l!3`#k!5R[U!T&w!bOY!/zYZ(VZ]!/z]^(V^#o!/z#o#p!5w#p#q!/z#q#r!5w#r;'S!/z;'S;=`!9s;=`<%l+x<%lO!/z!X!6OZU!T&oSOY!5wYZ+xZ]!5w]^+x^w!5wwx!6qx#O!5w#O#P!8a#P;'S!5w;'S;=`!9m<%lO!5w!X!6vZU!TOY!5wYZ+xZ]!5w]^+x^w!5wwx!7ix#O!5w#O#P!8a#P;'S!5w;'S;=`!9m<%lO!5w!X!7nZU!TOY!5wYZ+xZ]!5w]^+x^w!5wwx!4Yx#O!5w#O#P!8a#P;'S!5w;'S;=`!9m<%lO!5w!X!8fWU!TOY!5wYZ+xZ]!5w]^+x^;'S!5w;'S;=`!9O;=`<%l+x<%lO!5w!X!9TW&oSOw+xwx,dx#O+x#O#P-c#P;'S+x;'S;=`.^;=`<%l!5w<%lO+x!X!9pP;=`<%l!5w#k!9xW&oSOw+xwx,dx#O+x#O#P-c#P;'S+x;'S;=`.^;=`<%l!/z<%lO+x#k!:eP;=`<%l!/z#s!:qaU!T&w!b&rWOY!+|YZ%TZ]!+|]^%T^r!+|rs!-^sw!+|wx!;vx#O!+|#O#P!FW#P#o!+|#o#p!GT#p#q!+|#q#r!GT#r;'S!+|;'S;=`!Nh<%lO!+|#s!<PaU!T&w!b&rWOY!+|YZ%TZ]!+|]^%T^r!+|rs!-^sw!+|wx!=Ux#O!+|#O#P!FW#P#o!+|#o#p!GT#p#q!+|#q#r!GT#r;'S!+|;'S;=`!Nh<%lO!+|#o!=__U!T&w!b&rWOY!=UYZ1XZ]!=U]^1X^r!=Urs!>^s#O!=U#O#P!@j#P#o!=U#o#p!Ag#p#q!=U#q#r!Ag#r;'S!=U;'S;=`!FQ<%lO!=U#o!>e_U!T&w!bOY!=UYZ1XZ]!=U]^1X^r!=Urs!?ds#O!=U#O#P!@j#P#o!=U#o#p!Ag#p#q!=U#q#r!Ag#r;'S!=U;'S;=`!FQ<%lO!=U#o!?k_U!T&w!bOY!=UYZ1XZ]!=U]^1X^r!=Urs!3`s#O!=U#O#P!@j#P#o!=U#o#p!Ag#p#q!=U#q#r!Ag#r;'S!=U;'S;=`!FQ<%lO!=U#o!@q[U!T&w!bOY!=UYZ1XZ]!=U]^1X^#o!=U#o#p!Ag#p#q!=U#q#r!Ag#r;'S!=U;'S;=`!Ec;=`<%l4`<%lO!=U!]!AnZU!T&rWOY!AgYZ4`Z]!Ag]^4`^r!Agrs!Bas#O!Ag#O#P!DP#P;'S!Ag;'S;=`!E]<%lO!Ag!]!BfZU!TOY!AgYZ4`Z]!Ag]^4`^r!Agrs!CXs#O!Ag#O#P!DP#P;'S!Ag;'S;=`!E]<%lO!Ag!]!C^ZU!TOY!AgYZ4`Z]!Ag]^4`^r!Agrs!4Ys#O!Ag#O#P!DP#P;'S!Ag;'S;=`!E]<%lO!Ag!]!DUWU!TOY!AgYZ4`Z]!Ag]^4`^;'S!Ag;'S;=`!Dn;=`<%l4`<%lO!Ag!]!DsW&rWOr4`rs4zs#O4`#O#P5y#P;'S4`;'S;=`6t;=`<%l!Ag<%lO4`!]!E`P;=`<%l!Ag#o!EhW&rWOr4`rs4zs#O4`#O#P5y#P;'S4`;'S;=`6t;=`<%l!=U<%lO4`#o!FTP;=`<%l!=U#s!F_[U!T&w!bOY!+|YZ%TZ]!+|]^%T^#o!+|#o#p!GT#p#q!+|#q#r!GT#r;'S!+|;'S;=`!Mq;=`<%l8^<%lO!+|!a!G^]U!T&oS&rWOY!GTYZ8^Z]!GT]^8^^r!GTrs!HVsw!GTwx!JVx#O!GT#O#P!LV#P;'S!GT;'S;=`!Mk<%lO!GT!a!H^]U!T&oSOY!GTYZ8^Z]!GT]^8^^r!GTrs!IVsw!GTwx!JVx#O!GT#O#P!LV#P;'S!GT;'S;=`!Mk<%lO!GT!a!I^]U!T&oSOY!GTYZ8^Z]!GT]^8^^r!GTrs!5wsw!GTwx!JVx#O!GT#O#P!LV#P;'S!GT;'S;=`!Mk<%lO!GT!a!J^]U!T&rWOY!GTYZ8^Z]!GT]^8^^r!GTrs!HVsw!GTwx!KVx#O!GT#O#P!LV#P;'S!GT;'S;=`!Mk<%lO!GT!a!K^]U!T&rWOY!GTYZ8^Z]!GT]^8^^r!GTrs!HVsw!GTwx!Agx#O!GT#O#P!LV#P;'S!GT;'S;=`!Mk<%lO!GT!a!L[WU!TOY!GTYZ8^Z]!GT]^8^^;'S!GT;'S;=`!Lt;=`<%l8^<%lO!GT!a!L{Y&oS&rWOr8^rs9Qsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y;=`<%l!GT<%lO8^!a!MnP;=`<%l!GT#s!MxY&oS&rWOr8^rs9Qsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y;=`<%l!+|<%lO8^#s!NkP;=`<%l!+|#b!Ny_&UQ&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#b#!T]#Qr&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#b##X_&OQ&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#$aa&w!b&rW&msOY#%fYZ%TZ]#%f]^%T^r#%frs#&vsw#%fwx#8Ux#O#%f#O#P#0}#P#o#%f#o#p#1l#p#q#%f#q#r#1l#r;'S#%f;'S;=`#8O<%lO#%f#c#%qa&w!b&oS&rW&msOY#%fYZ%TZ]#%f]^%T^r#%frs#&vsw#%fwx#/{x#O#%f#O#P#0}#P#o#%f#o#p#1l#p#q#%f#q#r#1l#r;'S#%f;'S;=`#8O<%lO#%f#c#'Pa&w!b&oS&msOY#%fYZ%TZ]#%f]^%T^r#%frs#(Usw#%fwx#/{x#O#%f#O#P#0}#P#o#%f#o#p#1l#p#q#%f#q#r#1l#r;'S#%f;'S;=`#8O<%lO#%f#c#(_a&w!b&oS&msOY#%fYZ%TZ]#%f]^%T^r#%frs#)dsw#%fwx#/{x#O#%f#O#P#0}#P#o#%f#o#p#1l#p#q#%f#q#r#1l#r;'S#%f;'S;=`#8O<%lO#%f#Z#)m_&w!b&oS&msOY#)dYZ(VZ]#)d]^(V^w#)dwx#*lx#O#)d#O#P#+f#P#o#)d#o#p#,T#p#q#)d#q#r#,T#r;'S#)d;'S;=`#/u<%lO#)d#Z#*sZ&w!b&msOw(Vwx)wx#O(V#O#P+Z#P#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`/R<%lO(V#Z#+kW&w!bO#o#)d#o#p#,T#p#q#)d#q#r#,T#r;'S#)d;'S;=`#.x;=`<%l#,T<%lO#)dw#,[Z&oS&msOY#,TYZ+xZ]#,T]^+x^w#,Twx#,}x#O#,T#O#P#-i#P;'S#,T;'S;=`#.r<%lO#,Tw#-SV&msOw+xwx,|x#O+x#O#P-c#P;'S+x;'S;=`.^<%lO+xw#-lRO;'S#,T;'S;=`#-u;=`O#,Tw#-|[&oS&msOY#,TYZ+xZ]#,T]^+x^w#,Twx#,}x#O#,T#O#P#-i#P;'S#,T;'S;=`#.r;=`<%l#,T<%lO#,Tw#.uP;=`<%l#,T#Z#/P[&oS&msOY#,TYZ+xZ]#,T]^+x^w#,Twx#,}x#O#,T#O#P#-i#P;'S#,T;'S;=`#.r;=`<%l#)d<%lO#,T#Z#/xP;=`<%l#)d#c#0U]&w!b&rW&msOr%Trs&Vsw%Twx0Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#1SW&w!bO#o#%f#o#p#1l#p#q#%f#q#r#1l#r;'S#%f;'S;=`#6y;=`<%l#1l<%lO#%f!P#1u]&oS&rW&msOY#1lYZ8^Z]#1l]^8^^r#1lrs#2nsw#1lwx#4nx#O#1l#O#P#5b#P;'S#1l;'S;=`#6s<%lO#1l!P#2u]&oS&msOY#1lYZ8^Z]#1l]^8^^r#1lrs#3nsw#1lwx#4nx#O#1l#O#P#5b#P;'S#1l;'S;=`#6s<%lO#1l!P#3u]&oS&msOY#1lYZ8^Z]#1l]^8^^r#1lrs#,Tsw#1lwx#4nx#O#1l#O#P#5b#P;'S#1l;'S;=`#6s<%lO#1l!P#4uX&rW&msOr8^rs9Qsw8^wx;Ux#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^!P#5eRO;'S#1l;'S;=`#5n;=`O#1l!P#5w^&oS&rW&msOY#1lYZ8^Z]#1l]^8^^r#1lrs#2nsw#1lwx#4nx#O#1l#O#P#5b#P;'S#1l;'S;=`#6s;=`<%l#1l<%lO#1l!P#6vP;=`<%l#1l#c#7S^&oS&rW&msOY#1lYZ8^Z]#1l]^8^^r#1lrs#2nsw#1lwx#4nx#O#1l#O#P#5b#P;'S#1l;'S;=`#6s;=`<%l#%f<%lO#1l#c#8RP;=`<%l#%f#c#8_]&w!b&rW&msOr%Trs&Vsw%Twx#9Wx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#9cZ&pS&w!b&rW&nsOr1Xrs2Rs#O1X#O#P3q#P#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`7i<%lO1X#c#:a]js&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!q#;e]iR&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#<iaXs&w!b&oS&rWOr%Trs&Vsw%Twx/Xxz%Tz{#=n{!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#=y_cR&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#?T_&Rs&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!q#@_]|R&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#s#Ac`&Ss&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`!a#Be!a#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#O#Bp]'W`&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#Cta!hQ&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!O%T!O!P#Dy!P!Q%T!Q![#GV![#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#ES_&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!O%T!O!P#FR!P#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#F^]!zs&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a#Gbi!jq&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!Q%T!Q![#GV![!g%T!g!h#IP!h!l%T!l!m#MZ!m#O%T#O#P7o#P#R%T#R#S#GV#S#X%T#X#Y#IP#Y#^%T#^#_#MZ#_#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a#IYc&w!b&oS&rWOr%Trs&Vsw%Twx/Xx{%T{|#Je|}%T}!O#Je!O!Q%T!Q![#Km![#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a#Jn_&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!Q%T!Q![#Km![#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a#Kxe!jq&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!Q%T!Q![#Km![!l%T!l!m#MZ!m#O%T#O#P7o#P#R%T#R#S#Km#S#^%T#^#_#MZ#_#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a#Mf]!jq&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#Nja&TR&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!P%T!P!Q$ o!Q!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#b$ z_&VQ&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$#Uw!jq&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!O%T!O!P$%o!P!Q%T!Q![$&w![!d%T!d!e$(w!e!g%T!g!h#IP!h!l%T!l!m#MZ!m!q%T!q!r$+m!r!z%T!z!{$.]!{#O%T#O#P7o#P#R%T#R#S$&w#S#U%T#U#V$(w#V#X%T#X#Y#IP#Y#^%T#^#_#MZ#_#c%T#c#d$+m#d#l%T#l#m$.]#m#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$%x_&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!Q%T!Q![#GV![#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$'Sk!jq&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!O%T!O!P$%o!P!Q%T!Q![$&w![!g%T!g!h#IP!h!l%T!l!m#MZ!m#O%T#O#P7o#P#R%T#R#S$&w#S#X%T#X#Y#IP#Y#^%T#^#_#MZ#_#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$)Qb&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!Q%T!Q!R$*Y!R!S$*Y!S#O%T#O#P7o#P#R%T#R#S$*Y#S#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$*eb!jq&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!Q%T!Q!R$*Y!R!S$*Y!S#O%T#O#P7o#P#R%T#R#S$*Y#S#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$+va&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!Q%T!Q!Y$,{!Y#O%T#O#P7o#P#R%T#R#S$,{#S#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$-Wa!jq&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!Q%T!Q!Y$,{!Y#O%T#O#P7o#P#R%T#R#S$,{#S#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$.fe&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!Q%T!Q![$/w![!c%T!c!i$/w!i#O%T#O#P7o#P#R%T#R#S$/w#S#T%T#T#Z$/w#Z#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$0Se!jq&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!Q%T!Q![$/w![!c%T!c!i$/w!i#O%T#O#P7o#P#R%T#R#S$/w#S#T%T#T#Z$/w#Z#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#s$1p_}!T&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`$2o!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!q$2z]&_R&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c$4O]#os&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c$5SaoR&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!^%T!^!_$6X!_!`Av!`!aAv!a#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#b$6d_&PQ&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c$7n_&^s&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`Av!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c$8x`oR&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`Av!`!a$9z!a#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#b$:V_&QQ&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c$;c_aQ$VP&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#s$<oe&w!b&oS&rW&l`&XsOr%Trs&Vsw%Twx/Xx!Q%T!Q![$<b![!c%T!c!}$<b!}#O%T#O#P7o#P#R%T#R#S$<b#S#T%T#T#o$<b#o#p8^#p#q%T#q#r8^#r$g%T$g;'S$<b;'S;=`$>Q<%lO$<b#s$>TP;=`<%l$<b#s$>ei&w!b&oS&rW&l`&XsOr%Trs$@Ssw%Twx$C`x!Q%T!Q![$<b![!c%T!c!t$<b!t!u$Fl!u!}$<b!}#O%T#O#P7o#P#R%T#R#S$<b#S#T%T#T#f$<b#f#g$Fl#g#o$<b#o#p8^#p#q%T#q#r8^#r$g%T$g;'S$<b;'S;=`$>Q<%lO$<b#c$@]a&w!b&oS&msOYE^YZ%TZ]E^]^%T^rE^rs$AbswE^wxGpx#OE^#O#P!!u#P#oE^#o#p!#d#p#qE^#q#r!#d#r;'SE^;'S;=`!)v<%lOE^#c$Ak]&w!b&oS&msOr%Trs$Bdsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#Z$BmZ&w!b&oS&qsOw(Vwx)Px#O(V#O#P+Z#P#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`/R<%lO(V#c$Cia&w!b&rW&msOY#%fYZ%TZ]#%f]^%T^r#%frs#&vsw#%fwx$Dnx#O#%f#O#P#0}#P#o#%f#o#p#1l#p#q#%f#q#r#1l#r;'S#%f;'S;=`#8O<%lO#%f#c$Dw]&w!b&rW&msOr%Trs&Vsw%Twx$Epx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#_$EyZ&w!b&rW&nsOr1Xrs2Rs#O1X#O#P3q#P#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`7i<%lO1X#s$Fye&w!b&oS&rW&l`&XsOr%Trs$@Ssw%Twx$C`x!Q%T!Q![$<b![!c%T!c!}$<b!}#O%T#O#P7o#P#R%T#R#S$<b#S#T%T#T#o$<b#o#p8^#p#q%T#q#r8^#r$g%T$g;'S$<b;'S;=`$>Q<%lO$<b#s$Hii&w!b&oS&rW&l`&XsOr%Trs$JWsw%Twx$MUx!Q%T!Q![$<b![!c%T!c!t$<b!t!u%!S!u!}$<b!}#O%T#O#P7o#P#R%T#R#S$<b#S#T%T#T#f$<b#f#g%!S#g#o$<b#o#p8^#p#q%T#q#r8^#r$g%T$g;'S$<b;'S;=`$>Q<%lO$<b#c$Ja]&w!b&oS&xsOr%Trs$KYsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c$Ka]&w!b&oSOr%Trs$LYsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#Z$LcZ&w!b&oS&zsOw(Vwx)Px#O(V#O#P+Z#P#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`/R<%lO(V#c$M_]&w!b&rW&tsOr%Trs&Vsw%Twx$NWx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c$N_]&w!b&rWOr%Trs&Vsw%Twx% Wx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#_% aZ&w!b&rW&ysOr1Xrs2Rs#O1X#O#P3q#P#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`7i<%lO1X#s%!ae&w!b&oS&rW&l`&XsOr%Trs$JWsw%Twx$MUx!Q%T!Q![$<b![!c%T!c!}$<b!}#O%T#O#P7o#P#R%T#R#S$<b#S#T%T#T#o$<b#o#p8^#p#q%T#q#r8^#r$g%T$g;'S$<b;'S;=`$>Q<%lO$<b#s%$Pm&w!b&oS&rW&l`&XsOr%Trs$@Ssw%Twx$C`x!Q%T!Q![$<b![!c%T!c!h$<b!h!i%!S!i!t$<b!t!u$Fl!u!}$<b!}#O%T#O#P7o#P#R%T#R#S$<b#S#T%T#T#U$<b#U#V$Fl#V#Y$<b#Y#Z%!S#Z#o$<b#o#p8^#p#q%T#q#r8^#r$g%T$g;'S$<b;'S;=`$>Q<%lO$<b#c%&V]!Zs&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!q%'Z]!YR&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#b%(__%}Q&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a%)gX!_#T&oS&rWOr8^rs9Qsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^#c%*__%|R&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!q%+gX!^!e&oS&rWOr8^rs9Qsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^#a%,_]&Wq&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T",tokenizers:[M,D,I,K,OO,tO,eO,0,1,2,3,4,5,6],topRules:{Script:[0,7]},specialized:[{term:239,get:O=>rO[O]||-1}],tokenPrec:7500}),oO=new T,aO=new Set(["Script","Body","FunctionDefinition","ClassDefinition","LambdaExpression","ForStatement","MatchClause"]);function nO(O){return(t,e,s)=>{if(s)return!1;let r=t.node.getChild("VariableName");return r&&e(r,O),!0}}const lO={FunctionDefinition:nO("function"),ClassDefinition:nO("class"),ForStatement(O,t,e){if(e)for(let e=O.node.firstChild;e;e=e.nextSibling)if("VariableName"==e.name)t(e,"variable");else if("in"==e.name)break},ImportStatement(O,t){var e,s;let{node:r}=O,i="from"==(null===(e=r.firstChild)||void 0===e?void 0:e.name);for(let O=r.getChild("import");O;O=O.nextSibling)"VariableName"==O.name&&"as"!=(null===(s=O.nextSibling)||void 0===s?void 0:s.name)&&t(O,i?"variable":"namespace")},AssignStatement(O,t){for(let e=O.node.firstChild;e;e=e.nextSibling)if("VariableName"==e.name)t(e,"variable");else if(":"==e.name||"AssignOp"==e.name)break},ParamList(O,t){for(let e=null,s=O.node.firstChild;s;s=s.nextSibling)"VariableName"!=s.name||e&&/\*|AssignOp/.test(e.name)||t(s,"variable"),e=s},CapturePattern:nO("variable"),AsPattern:nO("variable"),__proto__:null};function hO(O,t){let e=oO.get(t);if(e)return e;let s=[],r=!0;function i(t,e){let r=O.sliceString(t.from,t.to);s.push({label:r,type:e})}return t.cursor(o.IncludeAnonymous).iterate((t=>{if(t.name){let O=lO[t.name];if(O&&O(t,i,r)||!r&&aO.has(t.name))return!1;r=!1}else if(t.to-t.from>8192){for(let e of hO(O,t.node))s.push(e);return!1}})),oO.set(t,s),s}const xO=/^[\w\xa1-\uffff][\w\d\xa1-\uffff]*$/,pO=["String","FormatString","Comment","PropertyName"];function QO(O){let t=l(O.state).resolveInner(O.pos,-1);if(pO.indexOf(t.name)>-1)return null;let e="VariableName"==t.name||t.to-t.from<20&&xO.test(O.state.sliceDoc(t.from,t.to));if(!e&&!O.explicit)return null;let s=[];for(let e=t;e;e=e.parent)aO.has(e.name)&&(s=s.concat(hO(O.state.doc,e)));return{options:s,from:e?t.from:O.pos,validFor:xO}}const SO=["__annotations__","__builtins__","__debug__","__doc__","__import__","__name__","__loader__","__package__","__spec__","False","None","True"].map((O=>({label:O,type:"constant"}))).concat(["ArithmeticError","AssertionError","AttributeError","BaseException","BlockingIOError","BrokenPipeError","BufferError","BytesWarning","ChildProcessError","ConnectionAbortedError","ConnectionError","ConnectionRefusedError","ConnectionResetError","DeprecationWarning","EOFError","Ellipsis","EncodingWarning","EnvironmentError","Exception","FileExistsError","FileNotFoundError","FloatingPointError","FutureWarning","GeneratorExit","IOError","ImportError","ImportWarning","IndentationError","IndexError","InterruptedError","IsADirectoryError","KeyError","KeyboardInterrupt","LookupError","MemoryError","ModuleNotFoundError","NameError","NotADirectoryError","NotImplemented","NotImplementedError","OSError","OverflowError","PendingDeprecationWarning","PermissionError","ProcessLookupError","RecursionError","ReferenceError","ResourceWarning","RuntimeError","RuntimeWarning","StopAsyncIteration","StopIteration","SyntaxError","SyntaxWarning","SystemError","SystemExit","TabError","TimeoutError","TypeError","UnboundLocalError","UnicodeDecodeError","UnicodeEncodeError","UnicodeError","UnicodeTranslateError","UnicodeWarning","UserWarning","ValueError","Warning","ZeroDivisionError"].map((O=>({label:O,type:"type"})))).concat(["bool","bytearray","bytes","classmethod","complex","float","frozenset","int","list","map","memoryview","object","range","set","staticmethod","str","super","tuple","type"].map((O=>({label:O,type:"class"})))).concat(["abs","aiter","all","anext","any","ascii","bin","breakpoint","callable","chr","compile","delattr","dict","dir","divmod","enumerate","eval","exec","exit","filter","format","getattr","globals","hasattr","hash","help","hex","id","input","isinstance","issubclass","iter","len","license","locals","max","min","next","oct","open","ord","pow","print","property","quit","repr","reversed","round","setattr","slice","sorted","sum","vars","zip"].map((O=>({label:O,type:"function"})))),cO=[f("def ${name}(${params}):\n\t${}",{label:"def",detail:"function",type:"keyword"}),f("for ${name} in ${collection}:\n\t${}",{label:"for",detail:"loop",type:"keyword"}),f("while ${}:\n\t${}",{label:"while",detail:"loop",type:"keyword"}),f("try:\n\t${}\nexcept ${error}:\n\t${}",{label:"try",detail:"/ except block",type:"keyword"}),f("if ${}:\n\t\n",{label:"if",detail:"block",type:"keyword"}),f("if ${}:\n\t${}\nelse:\n\t${}",{label:"if",detail:"/ else block",type:"keyword"}),f("class ${name}:\n\tdef __init__(self, ${params}):\n\t\t\t${}",{label:"class",detail:"definition",type:"keyword"}),f("import ${module}",{label:"import",detail:"statement",type:"keyword"}),f("from ${module} import ${names}",{label:"from",detail:"import",type:"keyword"})],TO=u(pO,P(SO.concat(cO)));function uO(O){let{node:t,pos:e}=O,s=O.lineIndent(e,-1),r=null;for(;;){let i=t.childBefore(e);if(!i)break;if("Comment"==i.name)e=i.from;else if("Body"==i.name)O.baseIndentFor(i)+O.unit<=s&&(r=i),t=i;else{if(!i.type.is("Statement"))break;t=i}}return r}function PO(O,t){let e=O.baseIndentFor(t),s=O.lineAt(O.pos,-1),r=s.from+s.text.length;return/^\s*($|#)/.test(s.text)&&O.node.to<r+100&&!/\S/.test(O.state.sliceDoc(r,O.node.to))&&O.lineIndent(O.pos,-1)<=e||/^\s*(else:|elif |except |finally:)/.test(O.textAfter)&&O.lineIndent(O.pos,-1)>e?null:e+O.unit}const fO=h.define({name:"python",parser:iO.configure({props:[x.add({Body:O=>{var t;return null!==(t=PO(O,uO(O)||O.node))&&void 0!==t?t:O.continue()},IfStatement:O=>/^\s*(else:|elif )/.test(O.textAfter)?O.baseIndent:O.continue(),"ForStatement WhileStatement":O=>/^\s*else:/.test(O.textAfter)?O.baseIndent:O.continue(),TryStatement:O=>/^\s*(except |finally:|else:)/.test(O.textAfter)?O.baseIndent:O.continue(),"TupleExpression ComprehensionExpression ParamList ArgList ParenthesizedExpression":p({closing:")"}),"DictionaryExpression DictionaryComprehensionExpression SetExpression SetComprehensionExpression":p({closing:"}"}),"ArrayExpression ArrayComprehensionExpression":p({closing:"]"}),"String FormatString":()=>null,Script:O=>{var t;let e=uO(O);return null!==(t=e&&PO(O,e))&&void 0!==t?t:O.continue()}}),Q.add({"ArrayExpression DictionaryExpression SetExpression TupleExpression":S,Body:(O,t)=>({from:O.from+1,to:O.to-(O.to==t.doc.length?0:1)})})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"'''",'"""'],stringPrefixes:["f","fr","rf","r","u","b","br","rb","F","FR","RF","R","U","B","BR","RB"]},commentTokens:{line:"#"},indentOnInput:/^\s*([\}\]\)]|else:|elif |except |finally:)$/}});function dO(){return new c(fO,[fO.data.of({autocomplete:QO}),fO.data.of({autocomplete:TO})])}export{TO as globalCompletion,QO as localCompletionSource,dO as python,fO as pythonLanguage};
//# sourceMappingURL=codemirror_lang-python-Cxoc-ydj.js.map
{"version":3,"file":"codemirror_lang-python-Cxoc-ydj.js","sources":["../node_modules/@lezer/lr/dist/index.js","../node_modules/@lezer/python/dist/index.js","../node_modules/@codemirror/lang-python/dist/index.js"],"sourcesContent":["import { Parser, NodeProp, NodeSet, NodeType, DefaultBufferLength, Tree, IterMode } from '@lezer/common';\n\n/**\nA parse stack. These are used internally by the parser to track\nparsing progress. They also provide some properties and methods\nthat external code such as a tokenizer can use to get information\nabout the parse state.\n*/\nclass Stack {\n /**\n @internal\n */\n constructor(\n /**\n The parse that this stack is part of @internal\n */\n p, \n /**\n Holds state, input pos, buffer index triplets for all but the\n top state @internal\n */\n stack, \n /**\n The current parse state @internal\n */\n state, \n // The position at which the next reduce should take place. This\n // can be less than `this.pos` when skipped expressions have been\n // added to the stack (which should be moved outside of the next\n // reduction)\n /**\n @internal\n */\n reducePos, \n /**\n The input position up to which this stack has parsed.\n */\n pos, \n /**\n The dynamic score of the stack, including dynamic precedence\n and error-recovery penalties\n @internal\n */\n score, \n // The output buffer. Holds (type, start, end, size) quads\n // representing nodes created by the parser, where `size` is\n // amount of buffer array entries covered by this node.\n /**\n @internal\n */\n buffer, \n // The base offset of the buffer. When stacks are split, the split\n // instance shared the buffer history with its parent up to\n // `bufferBase`, which is the absolute offset (including the\n // offset of previous splits) into the buffer at which this stack\n // starts writing.\n /**\n @internal\n */\n bufferBase, \n /**\n @internal\n */\n curContext, \n /**\n @internal\n */\n lookAhead = 0, \n // A parent stack from which this was split off, if any. This is\n // set up so that it always points to a stack that has some\n // additional buffer content, never to a stack with an equal\n // `bufferBase`.\n /**\n @internal\n */\n parent) {\n this.p = p;\n this.stack = stack;\n this.state = state;\n this.reducePos = reducePos;\n this.pos = pos;\n this.score = score;\n this.buffer = buffer;\n this.bufferBase = bufferBase;\n this.curContext = curContext;\n this.lookAhead = lookAhead;\n this.parent = parent;\n }\n /**\n @internal\n */\n toString() {\n return `[${this.stack.filter((_, i) => i % 3 == 0).concat(this.state)}]@${this.pos}${this.score ? \"!\" + this.score : \"\"}`;\n }\n // Start an empty stack\n /**\n @internal\n */\n static start(p, state, pos = 0) {\n let cx = p.parser.context;\n return new Stack(p, [], state, pos, pos, 0, [], 0, cx ? new StackContext(cx, cx.start) : null, 0, null);\n }\n /**\n The stack's current [context](#lr.ContextTracker) value, if\n any. Its type will depend on the context tracker's type\n parameter, or it will be `null` if there is no context\n tracker.\n */\n get context() { return this.curContext ? this.curContext.context : null; }\n // Push a state onto the stack, tracking its start position as well\n // as the buffer base at that point.\n /**\n @internal\n */\n pushState(state, start) {\n this.stack.push(this.state, start, this.bufferBase + this.buffer.length);\n this.state = state;\n }\n // Apply a reduce action\n /**\n @internal\n */\n reduce(action) {\n var _a;\n let depth = action >> 19 /* Action.ReduceDepthShift */, type = action & 65535 /* Action.ValueMask */;\n let { parser } = this.p;\n let dPrec = parser.dynamicPrecedence(type);\n if (dPrec)\n this.score += dPrec;\n if (depth == 0) {\n this.pushState(parser.getGoto(this.state, type, true), this.reducePos);\n // Zero-depth reductions are a special case—they add stuff to\n // the stack without popping anything off.\n if (type < parser.minRepeatTerm)\n this.storeNode(type, this.reducePos, this.reducePos, 4, true);\n this.reduceContext(type, this.reducePos);\n return;\n }\n // Find the base index into `this.stack`, content after which will\n // be dropped. Note that with `StayFlag` reductions we need to\n // consume two extra frames (the dummy parent node for the skipped\n // expression and the state that we'll be staying in, which should\n // be moved to `this.state`).\n let base = this.stack.length - ((depth - 1) * 3) - (action & 262144 /* Action.StayFlag */ ? 6 : 0);\n let start = base ? this.stack[base - 2] : this.p.ranges[0].from, size = this.reducePos - start;\n // This is a kludge to try and detect overly deep left-associative\n // trees, which will not increase the parse stack depth and thus\n // won't be caught by the regular stack-depth limit check.\n if (size >= 2000 /* Recover.MinBigReduction */ && !((_a = this.p.parser.nodeSet.types[type]) === null || _a === void 0 ? void 0 : _a.isAnonymous)) {\n if (start == this.p.lastBigReductionStart) {\n this.p.bigReductionCount++;\n this.p.lastBigReductionSize = size;\n }\n else if (this.p.lastBigReductionSize < size) {\n this.p.bigReductionCount = 1;\n this.p.lastBigReductionStart = start;\n this.p.lastBigReductionSize = size;\n }\n }\n let bufferBase = base ? this.stack[base - 1] : 0, count = this.bufferBase + this.buffer.length - bufferBase;\n // Store normal terms or `R -> R R` repeat reductions\n if (type < parser.minRepeatTerm || (action & 131072 /* Action.RepeatFlag */)) {\n let pos = parser.stateFlag(this.state, 1 /* StateFlag.Skipped */) ? this.pos : this.reducePos;\n this.storeNode(type, start, pos, count + 4, true);\n }\n if (action & 262144 /* Action.StayFlag */) {\n this.state = this.stack[base];\n }\n else {\n let baseStateID = this.stack[base - 3];\n this.state = parser.getGoto(baseStateID, type, true);\n }\n while (this.stack.length > base)\n this.stack.pop();\n this.reduceContext(type, start);\n }\n // Shift a value into the buffer\n /**\n @internal\n */\n storeNode(term, start, end, size = 4, isReduce = false) {\n if (term == 0 /* Term.Err */ &&\n (!this.stack.length || this.stack[this.stack.length - 1] < this.buffer.length + this.bufferBase)) {\n // Try to omit/merge adjacent error nodes\n let cur = this, top = this.buffer.length;\n if (top == 0 && cur.parent) {\n top = cur.bufferBase - cur.parent.bufferBase;\n cur = cur.parent;\n }\n if (top > 0 && cur.buffer[top - 4] == 0 /* Term.Err */ && cur.buffer[top - 1] > -1) {\n if (start == end)\n return;\n if (cur.buffer[top - 2] >= start) {\n cur.buffer[top - 2] = end;\n return;\n }\n }\n }\n if (!isReduce || this.pos == end) { // Simple case, just append\n this.buffer.push(term, start, end, size);\n }\n else { // There may be skipped nodes that have to be moved forward\n let index = this.buffer.length;\n if (index > 0 && this.buffer[index - 4] != 0 /* Term.Err */)\n while (index > 0 && this.buffer[index - 2] > end) {\n // Move this record forward\n this.buffer[index] = this.buffer[index - 4];\n this.buffer[index + 1] = this.buffer[index - 3];\n this.buffer[index + 2] = this.buffer[index - 2];\n this.buffer[index + 3] = this.buffer[index - 1];\n index -= 4;\n if (size > 4)\n size -= 4;\n }\n this.buffer[index] = term;\n this.buffer[index + 1] = start;\n this.buffer[index + 2] = end;\n this.buffer[index + 3] = size;\n }\n }\n // Apply a shift action\n /**\n @internal\n */\n shift(action, type, start, end) {\n if (action & 131072 /* Action.GotoFlag */) {\n this.pushState(action & 65535 /* Action.ValueMask */, this.pos);\n }\n else if ((action & 262144 /* Action.StayFlag */) == 0) { // Regular shift\n let nextState = action, { parser } = this.p;\n if (end > this.pos || type <= parser.maxNode) {\n this.pos = end;\n if (!parser.stateFlag(nextState, 1 /* StateFlag.Skipped */))\n this.reducePos = end;\n }\n this.pushState(nextState, start);\n this.shiftContext(type, start);\n if (type <= parser.maxNode)\n this.buffer.push(type, start, end, 4);\n }\n else { // Shift-and-stay, which means this is a skipped token\n this.pos = end;\n this.shiftContext(type, start);\n if (type <= this.p.parser.maxNode)\n this.buffer.push(type, start, end, 4);\n }\n }\n // Apply an action\n /**\n @internal\n */\n apply(action, next, nextStart, nextEnd) {\n if (action & 65536 /* Action.ReduceFlag */)\n this.reduce(action);\n else\n this.shift(action, next, nextStart, nextEnd);\n }\n // Add a prebuilt (reused) node into the buffer.\n /**\n @internal\n */\n useNode(value, next) {\n let index = this.p.reused.length - 1;\n if (index < 0 || this.p.reused[index] != value) {\n this.p.reused.push(value);\n index++;\n }\n let start = this.pos;\n this.reducePos = this.pos = start + value.length;\n this.pushState(next, start);\n this.buffer.push(index, start, this.reducePos, -1 /* size == -1 means this is a reused value */);\n if (this.curContext)\n this.updateContext(this.curContext.tracker.reuse(this.curContext.context, value, this, this.p.stream.reset(this.pos - value.length)));\n }\n // Split the stack. Due to the buffer sharing and the fact\n // that `this.stack` tends to stay quite shallow, this isn't very\n // expensive.\n /**\n @internal\n */\n split() {\n let parent = this;\n let off = parent.buffer.length;\n // Because the top of the buffer (after this.pos) may be mutated\n // to reorder reductions and skipped tokens, and shared buffers\n // should be immutable, this copies any outstanding skipped tokens\n // to the new buffer, and puts the base pointer before them.\n while (off > 0 && parent.buffer[off - 2] > parent.reducePos)\n off -= 4;\n let buffer = parent.buffer.slice(off), base = parent.bufferBase + off;\n // Make sure parent points to an actual parent with content, if there is such a parent.\n while (parent && base == parent.bufferBase)\n parent = parent.parent;\n return new Stack(this.p, this.stack.slice(), this.state, this.reducePos, this.pos, this.score, buffer, base, this.curContext, this.lookAhead, parent);\n }\n // Try to recover from an error by 'deleting' (ignoring) one token.\n /**\n @internal\n */\n recoverByDelete(next, nextEnd) {\n let isNode = next <= this.p.parser.maxNode;\n if (isNode)\n this.storeNode(next, this.pos, nextEnd, 4);\n this.storeNode(0 /* Term.Err */, this.pos, nextEnd, isNode ? 8 : 4);\n this.pos = this.reducePos = nextEnd;\n this.score -= 190 /* Recover.Delete */;\n }\n /**\n Check if the given term would be able to be shifted (optionally\n after some reductions) on this stack. This can be useful for\n external tokenizers that want to make sure they only provide a\n given token when it applies.\n */\n canShift(term) {\n for (let sim = new SimulatedStack(this);;) {\n let action = this.p.parser.stateSlot(sim.state, 4 /* ParseState.DefaultReduce */) || this.p.parser.hasAction(sim.state, term);\n if (action == 0)\n return false;\n if ((action & 65536 /* Action.ReduceFlag */) == 0)\n return true;\n sim.reduce(action);\n }\n }\n // Apply up to Recover.MaxNext recovery actions that conceptually\n // inserts some missing token or rule.\n /**\n @internal\n */\n recoverByInsert(next) {\n if (this.stack.length >= 300 /* Recover.MaxInsertStackDepth */)\n return [];\n let nextStates = this.p.parser.nextStates(this.state);\n if (nextStates.length > 4 /* Recover.MaxNext */ << 1 || this.stack.length >= 120 /* Recover.DampenInsertStackDepth */) {\n let best = [];\n for (let i = 0, s; i < nextStates.length; i += 2) {\n if ((s = nextStates[i + 1]) != this.state && this.p.parser.hasAction(s, next))\n best.push(nextStates[i], s);\n }\n if (this.stack.length < 120 /* Recover.DampenInsertStackDepth */)\n for (let i = 0; best.length < 4 /* Recover.MaxNext */ << 1 && i < nextStates.length; i += 2) {\n let s = nextStates[i + 1];\n if (!best.some((v, i) => (i & 1) && v == s))\n best.push(nextStates[i], s);\n }\n nextStates = best;\n }\n let result = [];\n for (let i = 0; i < nextStates.length && result.length < 4 /* Recover.MaxNext */; i += 2) {\n let s = nextStates[i + 1];\n if (s == this.state)\n continue;\n let stack = this.split();\n stack.pushState(s, this.pos);\n stack.storeNode(0 /* Term.Err */, stack.pos, stack.pos, 4, true);\n stack.shiftContext(nextStates[i], this.pos);\n stack.reducePos = this.pos;\n stack.score -= 200 /* Recover.Insert */;\n result.push(stack);\n }\n return result;\n }\n // Force a reduce, if possible. Return false if that can't\n // be done.\n /**\n @internal\n */\n forceReduce() {\n let { parser } = this.p;\n let reduce = parser.stateSlot(this.state, 5 /* ParseState.ForcedReduce */);\n if ((reduce & 65536 /* Action.ReduceFlag */) == 0)\n return false;\n if (!parser.validAction(this.state, reduce)) {\n let depth = reduce >> 19 /* Action.ReduceDepthShift */, term = reduce & 65535 /* Action.ValueMask */;\n let target = this.stack.length - depth * 3;\n if (target < 0 || parser.getGoto(this.stack[target], term, false) < 0) {\n let backup = this.findForcedReduction();\n if (backup == null)\n return false;\n reduce = backup;\n }\n this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);\n this.score -= 100 /* Recover.Reduce */;\n }\n this.reducePos = this.pos;\n this.reduce(reduce);\n return true;\n }\n /**\n Try to scan through the automaton to find some kind of reduction\n that can be applied. Used when the regular ForcedReduce field\n isn't a valid action. @internal\n */\n findForcedReduction() {\n let { parser } = this.p, seen = [];\n let explore = (state, depth) => {\n if (seen.includes(state))\n return;\n seen.push(state);\n return parser.allActions(state, (action) => {\n if (action & (262144 /* Action.StayFlag */ | 131072 /* Action.GotoFlag */)) ;\n else if (action & 65536 /* Action.ReduceFlag */) {\n let rDepth = (action >> 19 /* Action.ReduceDepthShift */) - depth;\n if (rDepth > 1) {\n let term = action & 65535 /* Action.ValueMask */, target = this.stack.length - rDepth * 3;\n if (target >= 0 && parser.getGoto(this.stack[target], term, false) >= 0)\n return (rDepth << 19 /* Action.ReduceDepthShift */) | 65536 /* Action.ReduceFlag */ | term;\n }\n }\n else {\n let found = explore(action, depth + 1);\n if (found != null)\n return found;\n }\n });\n };\n return explore(this.state, 0);\n }\n /**\n @internal\n */\n forceAll() {\n while (!this.p.parser.stateFlag(this.state, 2 /* StateFlag.Accepting */)) {\n if (!this.forceReduce()) {\n this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);\n break;\n }\n }\n return this;\n }\n /**\n Check whether this state has no further actions (assumed to be a direct descendant of the\n top state, since any other states must be able to continue\n somehow). @internal\n */\n get deadEnd() {\n if (this.stack.length != 3)\n return false;\n let { parser } = this.p;\n return parser.data[parser.stateSlot(this.state, 1 /* ParseState.Actions */)] == 65535 /* Seq.End */ &&\n !parser.stateSlot(this.state, 4 /* ParseState.DefaultReduce */);\n }\n /**\n Restart the stack (put it back in its start state). Only safe\n when this.stack.length == 3 (state is directly below the top\n state). @internal\n */\n restart() {\n this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);\n this.state = this.stack[0];\n this.stack.length = 0;\n }\n /**\n @internal\n */\n sameState(other) {\n if (this.state != other.state || this.stack.length != other.stack.length)\n return false;\n for (let i = 0; i < this.stack.length; i += 3)\n if (this.stack[i] != other.stack[i])\n return false;\n return true;\n }\n /**\n Get the parser used by this stack.\n */\n get parser() { return this.p.parser; }\n /**\n Test whether a given dialect (by numeric ID, as exported from\n the terms file) is enabled.\n */\n dialectEnabled(dialectID) { return this.p.parser.dialect.flags[dialectID]; }\n shiftContext(term, start) {\n if (this.curContext)\n this.updateContext(this.curContext.tracker.shift(this.curContext.context, term, this, this.p.stream.reset(start)));\n }\n reduceContext(term, start) {\n if (this.curContext)\n this.updateContext(this.curContext.tracker.reduce(this.curContext.context, term, this, this.p.stream.reset(start)));\n }\n /**\n @internal\n */\n emitContext() {\n let last = this.buffer.length - 1;\n if (last < 0 || this.buffer[last] != -3)\n this.buffer.push(this.curContext.hash, this.pos, this.pos, -3);\n }\n /**\n @internal\n */\n emitLookAhead() {\n let last = this.buffer.length - 1;\n if (last < 0 || this.buffer[last] != -4)\n this.buffer.push(this.lookAhead, this.pos, this.pos, -4);\n }\n updateContext(context) {\n if (context != this.curContext.context) {\n let newCx = new StackContext(this.curContext.tracker, context);\n if (newCx.hash != this.curContext.hash)\n this.emitContext();\n this.curContext = newCx;\n }\n }\n /**\n @internal\n */\n setLookAhead(lookAhead) {\n if (lookAhead > this.lookAhead) {\n this.emitLookAhead();\n this.lookAhead = lookAhead;\n }\n }\n /**\n @internal\n */\n close() {\n if (this.curContext && this.curContext.tracker.strict)\n this.emitContext();\n if (this.lookAhead > 0)\n this.emitLookAhead();\n }\n}\nclass StackContext {\n constructor(tracker, context) {\n this.tracker = tracker;\n this.context = context;\n this.hash = tracker.strict ? tracker.hash(context) : 0;\n }\n}\n// Used to cheaply run some reductions to scan ahead without mutating\n// an entire stack\nclass SimulatedStack {\n constructor(start) {\n this.start = start;\n this.state = start.state;\n this.stack = start.stack;\n this.base = this.stack.length;\n }\n reduce(action) {\n let term = action & 65535 /* Action.ValueMask */, depth = action >> 19 /* Action.ReduceDepthShift */;\n if (depth == 0) {\n if (this.stack == this.start.stack)\n this.stack = this.stack.slice();\n this.stack.push(this.state, 0, 0);\n this.base += 3;\n }\n else {\n this.base -= (depth - 1) * 3;\n }\n let goto = this.start.p.parser.getGoto(this.stack[this.base - 3], term, true);\n this.state = goto;\n }\n}\n// This is given to `Tree.build` to build a buffer, and encapsulates\n// the parent-stack-walking necessary to read the nodes.\nclass StackBufferCursor {\n constructor(stack, pos, index) {\n this.stack = stack;\n this.pos = pos;\n this.index = index;\n this.buffer = stack.buffer;\n if (this.index == 0)\n this.maybeNext();\n }\n static create(stack, pos = stack.bufferBase + stack.buffer.length) {\n return new StackBufferCursor(stack, pos, pos - stack.bufferBase);\n }\n maybeNext() {\n let next = this.stack.parent;\n if (next != null) {\n this.index = this.stack.bufferBase - next.bufferBase;\n this.stack = next;\n this.buffer = next.buffer;\n }\n }\n get id() { return this.buffer[this.index - 4]; }\n get start() { return this.buffer[this.index - 3]; }\n get end() { return this.buffer[this.index - 2]; }\n get size() { return this.buffer[this.index - 1]; }\n next() {\n this.index -= 4;\n this.pos -= 4;\n if (this.index == 0)\n this.maybeNext();\n }\n fork() {\n return new StackBufferCursor(this.stack, this.pos, this.index);\n }\n}\n\n// See lezer-generator/src/encode.ts for comments about the encoding\n// used here\nfunction decodeArray(input, Type = Uint16Array) {\n if (typeof input != \"string\")\n return input;\n let array = null;\n for (let pos = 0, out = 0; pos < input.length;) {\n let value = 0;\n for (;;) {\n let next = input.charCodeAt(pos++), stop = false;\n if (next == 126 /* Encode.BigValCode */) {\n value = 65535 /* Encode.BigVal */;\n break;\n }\n if (next >= 92 /* Encode.Gap2 */)\n next--;\n if (next >= 34 /* Encode.Gap1 */)\n next--;\n let digit = next - 32 /* Encode.Start */;\n if (digit >= 46 /* Encode.Base */) {\n digit -= 46 /* Encode.Base */;\n stop = true;\n }\n value += digit;\n if (stop)\n break;\n value *= 46 /* Encode.Base */;\n }\n if (array)\n array[out++] = value;\n else\n array = new Type(value);\n }\n return array;\n}\n\nclass CachedToken {\n constructor() {\n this.start = -1;\n this.value = -1;\n this.end = -1;\n this.extended = -1;\n this.lookAhead = 0;\n this.mask = 0;\n this.context = 0;\n }\n}\nconst nullToken = new CachedToken;\n/**\n[Tokenizers](#lr.ExternalTokenizer) interact with the input\nthrough this interface. It presents the input as a stream of\ncharacters, tracking lookahead and hiding the complexity of\n[ranges](#common.Parser.parse^ranges) from tokenizer code.\n*/\nclass InputStream {\n /**\n @internal\n */\n constructor(\n /**\n @internal\n */\n input, \n /**\n @internal\n */\n ranges) {\n this.input = input;\n this.ranges = ranges;\n /**\n @internal\n */\n this.chunk = \"\";\n /**\n @internal\n */\n this.chunkOff = 0;\n /**\n Backup chunk\n */\n this.chunk2 = \"\";\n this.chunk2Pos = 0;\n /**\n The character code of the next code unit in the input, or -1\n when the stream is at the end of the input.\n */\n this.next = -1;\n /**\n @internal\n */\n this.token = nullToken;\n this.rangeIndex = 0;\n this.pos = this.chunkPos = ranges[0].from;\n this.range = ranges[0];\n this.end = ranges[ranges.length - 1].to;\n this.readNext();\n }\n /**\n @internal\n */\n resolveOffset(offset, assoc) {\n let range = this.range, index = this.rangeIndex;\n let pos = this.pos + offset;\n while (pos < range.from) {\n if (!index)\n return null;\n let next = this.ranges[--index];\n pos -= range.from - next.to;\n range = next;\n }\n while (assoc < 0 ? pos > range.to : pos >= range.to) {\n if (index == this.ranges.length - 1)\n return null;\n let next = this.ranges[++index];\n pos += next.from - range.to;\n range = next;\n }\n return pos;\n }\n /**\n @internal\n */\n clipPos(pos) {\n if (pos >= this.range.from && pos < this.range.to)\n return pos;\n for (let range of this.ranges)\n if (range.to > pos)\n return Math.max(pos, range.from);\n return this.end;\n }\n /**\n Look at a code unit near the stream position. `.peek(0)` equals\n `.next`, `.peek(-1)` gives you the previous character, and so\n on.\n \n Note that looking around during tokenizing creates dependencies\n on potentially far-away content, which may reduce the\n effectiveness incremental parsing—when looking forward—or even\n cause invalid reparses when looking backward more than 25 code\n units, since the library does not track lookbehind.\n */\n peek(offset) {\n let idx = this.chunkOff + offset, pos, result;\n if (idx >= 0 && idx < this.chunk.length) {\n pos = this.pos + offset;\n result = this.chunk.charCodeAt(idx);\n }\n else {\n let resolved = this.resolveOffset(offset, 1);\n if (resolved == null)\n return -1;\n pos = resolved;\n if (pos >= this.chunk2Pos && pos < this.chunk2Pos + this.chunk2.length) {\n result = this.chunk2.charCodeAt(pos - this.chunk2Pos);\n }\n else {\n let i = this.rangeIndex, range = this.range;\n while (range.to <= pos)\n range = this.ranges[++i];\n this.chunk2 = this.input.chunk(this.chunk2Pos = pos);\n if (pos + this.chunk2.length > range.to)\n this.chunk2 = this.chunk2.slice(0, range.to - pos);\n result = this.chunk2.charCodeAt(0);\n }\n }\n if (pos >= this.token.lookAhead)\n this.token.lookAhead = pos + 1;\n return result;\n }\n /**\n Accept a token. By default, the end of the token is set to the\n current stream position, but you can pass an offset (relative to\n the stream position) to change that.\n */\n acceptToken(token, endOffset = 0) {\n let end = endOffset ? this.resolveOffset(endOffset, -1) : this.pos;\n if (end == null || end < this.token.start)\n throw new RangeError(\"Token end out of bounds\");\n this.token.value = token;\n this.token.end = end;\n }\n /**\n Accept a token ending at a specific given position.\n */\n acceptTokenTo(token, endPos) {\n this.token.value = token;\n this.token.end = endPos;\n }\n getChunk() {\n if (this.pos >= this.chunk2Pos && this.pos < this.chunk2Pos + this.chunk2.length) {\n let { chunk, chunkPos } = this;\n this.chunk = this.chunk2;\n this.chunkPos = this.chunk2Pos;\n this.chunk2 = chunk;\n this.chunk2Pos = chunkPos;\n this.chunkOff = this.pos - this.chunkPos;\n }\n else {\n this.chunk2 = this.chunk;\n this.chunk2Pos = this.chunkPos;\n let nextChunk = this.input.chunk(this.pos);\n let end = this.pos + nextChunk.length;\n this.chunk = end > this.range.to ? nextChunk.slice(0, this.range.to - this.pos) : nextChunk;\n this.chunkPos = this.pos;\n this.chunkOff = 0;\n }\n }\n readNext() {\n if (this.chunkOff >= this.chunk.length) {\n this.getChunk();\n if (this.chunkOff == this.chunk.length)\n return this.next = -1;\n }\n return this.next = this.chunk.charCodeAt(this.chunkOff);\n }\n /**\n Move the stream forward N (defaults to 1) code units. Returns\n the new value of [`next`](#lr.InputStream.next).\n */\n advance(n = 1) {\n this.chunkOff += n;\n while (this.pos + n >= this.range.to) {\n if (this.rangeIndex == this.ranges.length - 1)\n return this.setDone();\n n -= this.range.to - this.pos;\n this.range = this.ranges[++this.rangeIndex];\n this.pos = this.range.from;\n }\n this.pos += n;\n if (this.pos >= this.token.lookAhead)\n this.token.lookAhead = this.pos + 1;\n return this.readNext();\n }\n setDone() {\n this.pos = this.chunkPos = this.end;\n this.range = this.ranges[this.rangeIndex = this.ranges.length - 1];\n this.chunk = \"\";\n return this.next = -1;\n }\n /**\n @internal\n */\n reset(pos, token) {\n if (token) {\n this.token = token;\n token.start = pos;\n token.lookAhead = pos + 1;\n token.value = token.extended = -1;\n }\n else {\n this.token = nullToken;\n }\n if (this.pos != pos) {\n this.pos = pos;\n if (pos == this.end) {\n this.setDone();\n return this;\n }\n while (pos < this.range.from)\n this.range = this.ranges[--this.rangeIndex];\n while (pos >= this.range.to)\n this.range = this.ranges[++this.rangeIndex];\n if (pos >= this.chunkPos && pos < this.chunkPos + this.chunk.length) {\n this.chunkOff = pos - this.chunkPos;\n }\n else {\n this.chunk = \"\";\n this.chunkOff = 0;\n }\n this.readNext();\n }\n return this;\n }\n /**\n @internal\n */\n read(from, to) {\n if (from >= this.chunkPos && to <= this.chunkPos + this.chunk.length)\n return this.chunk.slice(from - this.chunkPos, to - this.chunkPos);\n if (from >= this.chunk2Pos && to <= this.chunk2Pos + this.chunk2.length)\n return this.chunk2.slice(from - this.chunk2Pos, to - this.chunk2Pos);\n if (from >= this.range.from && to <= this.range.to)\n return this.input.read(from, to);\n let result = \"\";\n for (let r of this.ranges) {\n if (r.from >= to)\n break;\n if (r.to > from)\n result += this.input.read(Math.max(r.from, from), Math.min(r.to, to));\n }\n return result;\n }\n}\n/**\n@internal\n*/\nclass TokenGroup {\n constructor(data, id) {\n this.data = data;\n this.id = id;\n }\n token(input, stack) {\n let { parser } = stack.p;\n readToken(this.data, input, stack, this.id, parser.data, parser.tokenPrecTable);\n }\n}\nTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;\n/**\n@hide\n*/\nclass LocalTokenGroup {\n constructor(data, precTable, elseToken) {\n this.precTable = precTable;\n this.elseToken = elseToken;\n this.data = typeof data == \"string\" ? decodeArray(data) : data;\n }\n token(input, stack) {\n let start = input.pos, skipped = 0;\n for (;;) {\n let atEof = input.next < 0, nextPos = input.resolveOffset(1, 1);\n readToken(this.data, input, stack, 0, this.data, this.precTable);\n if (input.token.value > -1)\n break;\n if (this.elseToken == null)\n return;\n if (!atEof)\n skipped++;\n if (nextPos == null)\n break;\n input.reset(nextPos, input.token);\n }\n if (skipped) {\n input.reset(start, input.token);\n input.acceptToken(this.elseToken, skipped);\n }\n }\n}\nLocalTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;\n/**\n`@external tokens` declarations in the grammar should resolve to\nan instance of this class.\n*/\nclass ExternalTokenizer {\n /**\n Create a tokenizer. The first argument is the function that,\n given an input stream, scans for the types of tokens it\n recognizes at the stream's position, and calls\n [`acceptToken`](#lr.InputStream.acceptToken) when it finds\n one.\n */\n constructor(\n /**\n @internal\n */\n token, options = {}) {\n this.token = token;\n this.contextual = !!options.contextual;\n this.fallback = !!options.fallback;\n this.extend = !!options.extend;\n }\n}\n// Tokenizer data is stored a big uint16 array containing, for each\n// state:\n//\n// - A group bitmask, indicating what token groups are reachable from\n// this state, so that paths that can only lead to tokens not in\n// any of the current groups can be cut off early.\n//\n// - The position of the end of the state's sequence of accepting\n// tokens\n//\n// - The number of outgoing edges for the state\n//\n// - The accepting tokens, as (token id, group mask) pairs\n//\n// - The outgoing edges, as (start character, end character, state\n// index) triples, with end character being exclusive\n//\n// This function interprets that data, running through a stream as\n// long as new states with the a matching group mask can be reached,\n// and updating `input.token` when it matches a token.\nfunction readToken(data, input, stack, group, precTable, precOffset) {\n let state = 0, groupMask = 1 << group, { dialect } = stack.p.parser;\n scan: for (;;) {\n if ((groupMask & data[state]) == 0)\n break;\n let accEnd = data[state + 1];\n // Check whether this state can lead to a token in the current group\n // Accept tokens in this state, possibly overwriting\n // lower-precedence / shorter tokens\n for (let i = state + 3; i < accEnd; i += 2)\n if ((data[i + 1] & groupMask) > 0) {\n let term = data[i];\n if (dialect.allows(term) &&\n (input.token.value == -1 || input.token.value == term ||\n overrides(term, input.token.value, precTable, precOffset))) {\n input.acceptToken(term);\n break;\n }\n }\n let next = input.next, low = 0, high = data[state + 2];\n // Special case for EOF\n if (input.next < 0 && high > low && data[accEnd + high * 3 - 3] == 65535 /* Seq.End */) {\n state = data[accEnd + high * 3 - 1];\n continue scan;\n }\n // Do a binary search on the state's edges\n for (; low < high;) {\n let mid = (low + high) >> 1;\n let index = accEnd + mid + (mid << 1);\n let from = data[index], to = data[index + 1] || 0x10000;\n if (next < from)\n high = mid;\n else if (next >= to)\n low = mid + 1;\n else {\n state = data[index + 2];\n input.advance();\n continue scan;\n }\n }\n break;\n }\n}\nfunction findOffset(data, start, term) {\n for (let i = start, next; (next = data[i]) != 65535 /* Seq.End */; i++)\n if (next == term)\n return i - start;\n return -1;\n}\nfunction overrides(token, prev, tableData, tableOffset) {\n let iPrev = findOffset(tableData, tableOffset, prev);\n return iPrev < 0 || findOffset(tableData, tableOffset, token) < iPrev;\n}\n\n// Environment variable used to control console output\nconst verbose = typeof process != \"undefined\" && process.env && /\\bparse\\b/.test(process.env.LOG);\nlet stackIDs = null;\nfunction cutAt(tree, pos, side) {\n let cursor = tree.cursor(IterMode.IncludeAnonymous);\n cursor.moveTo(pos);\n for (;;) {\n if (!(side < 0 ? cursor.childBefore(pos) : cursor.childAfter(pos)))\n for (;;) {\n if ((side < 0 ? cursor.to < pos : cursor.from > pos) && !cursor.type.isError)\n return side < 0 ? Math.max(0, Math.min(cursor.to - 1, pos - 25 /* Safety.Margin */))\n : Math.min(tree.length, Math.max(cursor.from + 1, pos + 25 /* Safety.Margin */));\n if (side < 0 ? cursor.prevSibling() : cursor.nextSibling())\n break;\n if (!cursor.parent())\n return side < 0 ? 0 : tree.length;\n }\n }\n}\nclass FragmentCursor {\n constructor(fragments, nodeSet) {\n this.fragments = fragments;\n this.nodeSet = nodeSet;\n this.i = 0;\n this.fragment = null;\n this.safeFrom = -1;\n this.safeTo = -1;\n this.trees = [];\n this.start = [];\n this.index = [];\n this.nextFragment();\n }\n nextFragment() {\n let fr = this.fragment = this.i == this.fragments.length ? null : this.fragments[this.i++];\n if (fr) {\n this.safeFrom = fr.openStart ? cutAt(fr.tree, fr.from + fr.offset, 1) - fr.offset : fr.from;\n this.safeTo = fr.openEnd ? cutAt(fr.tree, fr.to + fr.offset, -1) - fr.offset : fr.to;\n while (this.trees.length) {\n this.trees.pop();\n this.start.pop();\n this.index.pop();\n }\n this.trees.push(fr.tree);\n this.start.push(-fr.offset);\n this.index.push(0);\n this.nextStart = this.safeFrom;\n }\n else {\n this.nextStart = 1e9;\n }\n }\n // `pos` must be >= any previously given `pos` for this cursor\n nodeAt(pos) {\n if (pos < this.nextStart)\n return null;\n while (this.fragment && this.safeTo <= pos)\n this.nextFragment();\n if (!this.fragment)\n return null;\n for (;;) {\n let last = this.trees.length - 1;\n if (last < 0) { // End of tree\n this.nextFragment();\n return null;\n }\n let top = this.trees[last], index = this.index[last];\n if (index == top.children.length) {\n this.trees.pop();\n this.start.pop();\n this.index.pop();\n continue;\n }\n let next = top.children[index];\n let start = this.start[last] + top.positions[index];\n if (start > pos) {\n this.nextStart = start;\n return null;\n }\n if (next instanceof Tree) {\n if (start == pos) {\n if (start < this.safeFrom)\n return null;\n let end = start + next.length;\n if (end <= this.safeTo) {\n let lookAhead = next.prop(NodeProp.lookAhead);\n if (!lookAhead || end + lookAhead < this.fragment.to)\n return next;\n }\n }\n this.index[last]++;\n if (start + next.length >= Math.max(this.safeFrom, pos)) { // Enter this node\n this.trees.push(next);\n this.start.push(start);\n this.index.push(0);\n }\n }\n else {\n this.index[last]++;\n this.nextStart = start + next.length;\n }\n }\n }\n}\nclass TokenCache {\n constructor(parser, stream) {\n this.stream = stream;\n this.tokens = [];\n this.mainToken = null;\n this.actions = [];\n this.tokens = parser.tokenizers.map(_ => new CachedToken);\n }\n getActions(stack) {\n let actionIndex = 0;\n let main = null;\n let { parser } = stack.p, { tokenizers } = parser;\n let mask = parser.stateSlot(stack.state, 3 /* ParseState.TokenizerMask */);\n let context = stack.curContext ? stack.curContext.hash : 0;\n let lookAhead = 0;\n for (let i = 0; i < tokenizers.length; i++) {\n if (((1 << i) & mask) == 0)\n continue;\n let tokenizer = tokenizers[i], token = this.tokens[i];\n if (main && !tokenizer.fallback)\n continue;\n if (tokenizer.contextual || token.start != stack.pos || token.mask != mask || token.context != context) {\n this.updateCachedToken(token, tokenizer, stack);\n token.mask = mask;\n token.context = context;\n }\n if (token.lookAhead > token.end + 25 /* Safety.Margin */)\n lookAhead = Math.max(token.lookAhead, lookAhead);\n if (token.value != 0 /* Term.Err */) {\n let startIndex = actionIndex;\n if (token.extended > -1)\n actionIndex = this.addActions(stack, token.extended, token.end, actionIndex);\n actionIndex = this.addActions(stack, token.value, token.end, actionIndex);\n if (!tokenizer.extend) {\n main = token;\n if (actionIndex > startIndex)\n break;\n }\n }\n }\n while (this.actions.length > actionIndex)\n this.actions.pop();\n if (lookAhead)\n stack.setLookAhead(lookAhead);\n if (!main && stack.pos == this.stream.end) {\n main = new CachedToken;\n main.value = stack.p.parser.eofTerm;\n main.start = main.end = stack.pos;\n actionIndex = this.addActions(stack, main.value, main.end, actionIndex);\n }\n this.mainToken = main;\n return this.actions;\n }\n getMainToken(stack) {\n if (this.mainToken)\n return this.mainToken;\n let main = new CachedToken, { pos, p } = stack;\n main.start = pos;\n main.end = Math.min(pos + 1, p.stream.end);\n main.value = pos == p.stream.end ? p.parser.eofTerm : 0 /* Term.Err */;\n return main;\n }\n updateCachedToken(token, tokenizer, stack) {\n let start = this.stream.clipPos(stack.pos);\n tokenizer.token(this.stream.reset(start, token), stack);\n if (token.value > -1) {\n let { parser } = stack.p;\n for (let i = 0; i < parser.specialized.length; i++)\n if (parser.specialized[i] == token.value) {\n let result = parser.specializers[i](this.stream.read(token.start, token.end), stack);\n if (result >= 0 && stack.p.parser.dialect.allows(result >> 1)) {\n if ((result & 1) == 0 /* Specialize.Specialize */)\n token.value = result >> 1;\n else\n token.extended = result >> 1;\n break;\n }\n }\n }\n else {\n token.value = 0 /* Term.Err */;\n token.end = this.stream.clipPos(start + 1);\n }\n }\n putAction(action, token, end, index) {\n // Don't add duplicate actions\n for (let i = 0; i < index; i += 3)\n if (this.actions[i] == action)\n return index;\n this.actions[index++] = action;\n this.actions[index++] = token;\n this.actions[index++] = end;\n return index;\n }\n addActions(stack, token, end, index) {\n let { state } = stack, { parser } = stack.p, { data } = parser;\n for (let set = 0; set < 2; set++) {\n for (let i = parser.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */);; i += 3) {\n if (data[i] == 65535 /* Seq.End */) {\n if (data[i + 1] == 1 /* Seq.Next */) {\n i = pair(data, i + 2);\n }\n else {\n if (index == 0 && data[i + 1] == 2 /* Seq.Other */)\n index = this.putAction(pair(data, i + 2), token, end, index);\n break;\n }\n }\n if (data[i] == token)\n index = this.putAction(pair(data, i + 1), token, end, index);\n }\n }\n return index;\n }\n}\nclass Parse {\n constructor(parser, input, fragments, ranges) {\n this.parser = parser;\n this.input = input;\n this.ranges = ranges;\n this.recovering = 0;\n this.nextStackID = 0x2654; // ♔, ♕, ♖, ♗, ♘, ♙, ♠, ♡, ♢, ♣, ♤, ♥, ♦, ♧\n this.minStackPos = 0;\n this.reused = [];\n this.stoppedAt = null;\n this.lastBigReductionStart = -1;\n this.lastBigReductionSize = 0;\n this.bigReductionCount = 0;\n this.stream = new InputStream(input, ranges);\n this.tokens = new TokenCache(parser, this.stream);\n this.topTerm = parser.top[1];\n let { from } = ranges[0];\n this.stacks = [Stack.start(this, parser.top[0], from)];\n this.fragments = fragments.length && this.stream.end - from > parser.bufferLength * 4\n ? new FragmentCursor(fragments, parser.nodeSet) : null;\n }\n get parsedPos() {\n return this.minStackPos;\n }\n // Move the parser forward. This will process all parse stacks at\n // `this.pos` and try to advance them to a further position. If no\n // stack for such a position is found, it'll start error-recovery.\n //\n // When the parse is finished, this will return a syntax tree. When\n // not, it returns `null`.\n advance() {\n let stacks = this.stacks, pos = this.minStackPos;\n // This will hold stacks beyond `pos`.\n let newStacks = this.stacks = [];\n let stopped, stoppedTokens;\n // If a large amount of reductions happened with the same start\n // position, force the stack out of that production in order to\n // avoid creating a tree too deep to recurse through.\n // (This is an ugly kludge, because unfortunately there is no\n // straightforward, cheap way to check for this happening, due to\n // the history of reductions only being available in an\n // expensive-to-access format in the stack buffers.)\n if (this.bigReductionCount > 300 /* Rec.MaxLeftAssociativeReductionCount */ && stacks.length == 1) {\n let [s] = stacks;\n while (s.forceReduce() && s.stack.length && s.stack[s.stack.length - 2] >= this.lastBigReductionStart) { }\n this.bigReductionCount = this.lastBigReductionSize = 0;\n }\n // Keep advancing any stacks at `pos` until they either move\n // forward or can't be advanced. Gather stacks that can't be\n // advanced further in `stopped`.\n for (let i = 0; i < stacks.length; i++) {\n let stack = stacks[i];\n for (;;) {\n this.tokens.mainToken = null;\n if (stack.pos > pos) {\n newStacks.push(stack);\n }\n else if (this.advanceStack(stack, newStacks, stacks)) {\n continue;\n }\n else {\n if (!stopped) {\n stopped = [];\n stoppedTokens = [];\n }\n stopped.push(stack);\n let tok = this.tokens.getMainToken(stack);\n stoppedTokens.push(tok.value, tok.end);\n }\n break;\n }\n }\n if (!newStacks.length) {\n let finished = stopped && findFinished(stopped);\n if (finished) {\n if (verbose)\n console.log(\"Finish with \" + this.stackID(finished));\n return this.stackToTree(finished);\n }\n if (this.parser.strict) {\n if (verbose && stopped)\n console.log(\"Stuck with token \" + (this.tokens.mainToken ? this.parser.getName(this.tokens.mainToken.value) : \"none\"));\n throw new SyntaxError(\"No parse at \" + pos);\n }\n if (!this.recovering)\n this.recovering = 5 /* Rec.Distance */;\n }\n if (this.recovering && stopped) {\n let finished = this.stoppedAt != null && stopped[0].pos > this.stoppedAt ? stopped[0]\n : this.runRecovery(stopped, stoppedTokens, newStacks);\n if (finished) {\n if (verbose)\n console.log(\"Force-finish \" + this.stackID(finished));\n return this.stackToTree(finished.forceAll());\n }\n }\n if (this.recovering) {\n let maxRemaining = this.recovering == 1 ? 1 : this.recovering * 3 /* Rec.MaxRemainingPerStep */;\n if (newStacks.length > maxRemaining) {\n newStacks.sort((a, b) => b.score - a.score);\n while (newStacks.length > maxRemaining)\n newStacks.pop();\n }\n if (newStacks.some(s => s.reducePos > pos))\n this.recovering--;\n }\n else if (newStacks.length > 1) {\n // Prune stacks that are in the same state, or that have been\n // running without splitting for a while, to avoid getting stuck\n // with multiple successful stacks running endlessly on.\n outer: for (let i = 0; i < newStacks.length - 1; i++) {\n let stack = newStacks[i];\n for (let j = i + 1; j < newStacks.length; j++) {\n let other = newStacks[j];\n if (stack.sameState(other) ||\n stack.buffer.length > 500 /* Rec.MinBufferLengthPrune */ && other.buffer.length > 500 /* Rec.MinBufferLengthPrune */) {\n if (((stack.score - other.score) || (stack.buffer.length - other.buffer.length)) > 0) {\n newStacks.splice(j--, 1);\n }\n else {\n newStacks.splice(i--, 1);\n continue outer;\n }\n }\n }\n }\n if (newStacks.length > 12 /* Rec.MaxStackCount */)\n newStacks.splice(12 /* Rec.MaxStackCount */, newStacks.length - 12 /* Rec.MaxStackCount */);\n }\n this.minStackPos = newStacks[0].pos;\n for (let i = 1; i < newStacks.length; i++)\n if (newStacks[i].pos < this.minStackPos)\n this.minStackPos = newStacks[i].pos;\n return null;\n }\n stopAt(pos) {\n if (this.stoppedAt != null && this.stoppedAt < pos)\n throw new RangeError(\"Can't move stoppedAt forward\");\n this.stoppedAt = pos;\n }\n // Returns an updated version of the given stack, or null if the\n // stack can't advance normally. When `split` and `stacks` are\n // given, stacks split off by ambiguous operations will be pushed to\n // `split`, or added to `stacks` if they move `pos` forward.\n advanceStack(stack, stacks, split) {\n let start = stack.pos, { parser } = this;\n let base = verbose ? this.stackID(stack) + \" -> \" : \"\";\n if (this.stoppedAt != null && start > this.stoppedAt)\n return stack.forceReduce() ? stack : null;\n if (this.fragments) {\n let strictCx = stack.curContext && stack.curContext.tracker.strict, cxHash = strictCx ? stack.curContext.hash : 0;\n for (let cached = this.fragments.nodeAt(start); cached;) {\n let match = this.parser.nodeSet.types[cached.type.id] == cached.type ? parser.getGoto(stack.state, cached.type.id) : -1;\n if (match > -1 && cached.length && (!strictCx || (cached.prop(NodeProp.contextHash) || 0) == cxHash)) {\n stack.useNode(cached, match);\n if (verbose)\n console.log(base + this.stackID(stack) + ` (via reuse of ${parser.getName(cached.type.id)})`);\n return true;\n }\n if (!(cached instanceof Tree) || cached.children.length == 0 || cached.positions[0] > 0)\n break;\n let inner = cached.children[0];\n if (inner instanceof Tree && cached.positions[0] == 0)\n cached = inner;\n else\n break;\n }\n }\n let defaultReduce = parser.stateSlot(stack.state, 4 /* ParseState.DefaultReduce */);\n if (defaultReduce > 0) {\n stack.reduce(defaultReduce);\n if (verbose)\n console.log(base + this.stackID(stack) + ` (via always-reduce ${parser.getName(defaultReduce & 65535 /* Action.ValueMask */)})`);\n return true;\n }\n if (stack.stack.length >= 8400 /* Rec.CutDepth */) {\n while (stack.stack.length > 6000 /* Rec.CutTo */ && stack.forceReduce()) { }\n }\n let actions = this.tokens.getActions(stack);\n for (let i = 0; i < actions.length;) {\n let action = actions[i++], term = actions[i++], end = actions[i++];\n let last = i == actions.length || !split;\n let localStack = last ? stack : stack.split();\n let main = this.tokens.mainToken;\n localStack.apply(action, term, main ? main.start : localStack.pos, end);\n if (verbose)\n console.log(base + this.stackID(localStack) + ` (via ${(action & 65536 /* Action.ReduceFlag */) == 0 ? \"shift\"\n : `reduce of ${parser.getName(action & 65535 /* Action.ValueMask */)}`} for ${parser.getName(term)} @ ${start}${localStack == stack ? \"\" : \", split\"})`);\n if (last)\n return true;\n else if (localStack.pos > start)\n stacks.push(localStack);\n else\n split.push(localStack);\n }\n return false;\n }\n // Advance a given stack forward as far as it will go. Returns the\n // (possibly updated) stack if it got stuck, or null if it moved\n // forward and was given to `pushStackDedup`.\n advanceFully(stack, newStacks) {\n let pos = stack.pos;\n for (;;) {\n if (!this.advanceStack(stack, null, null))\n return false;\n if (stack.pos > pos) {\n pushStackDedup(stack, newStacks);\n return true;\n }\n }\n }\n runRecovery(stacks, tokens, newStacks) {\n let finished = null, restarted = false;\n for (let i = 0; i < stacks.length; i++) {\n let stack = stacks[i], token = tokens[i << 1], tokenEnd = tokens[(i << 1) + 1];\n let base = verbose ? this.stackID(stack) + \" -> \" : \"\";\n if (stack.deadEnd) {\n if (restarted)\n continue;\n restarted = true;\n stack.restart();\n if (verbose)\n console.log(base + this.stackID(stack) + \" (restarted)\");\n let done = this.advanceFully(stack, newStacks);\n if (done)\n continue;\n }\n let force = stack.split(), forceBase = base;\n for (let j = 0; force.forceReduce() && j < 10 /* Rec.ForceReduceLimit */; j++) {\n if (verbose)\n console.log(forceBase + this.stackID(force) + \" (via force-reduce)\");\n let done = this.advanceFully(force, newStacks);\n if (done)\n break;\n if (verbose)\n forceBase = this.stackID(force) + \" -> \";\n }\n for (let insert of stack.recoverByInsert(token)) {\n if (verbose)\n console.log(base + this.stackID(insert) + \" (via recover-insert)\");\n this.advanceFully(insert, newStacks);\n }\n if (this.stream.end > stack.pos) {\n if (tokenEnd == stack.pos) {\n tokenEnd++;\n token = 0 /* Term.Err */;\n }\n stack.recoverByDelete(token, tokenEnd);\n if (verbose)\n console.log(base + this.stackID(stack) + ` (via recover-delete ${this.parser.getName(token)})`);\n pushStackDedup(stack, newStacks);\n }\n else if (!finished || finished.score < stack.score) {\n finished = stack;\n }\n }\n return finished;\n }\n // Convert the stack's buffer to a syntax tree.\n stackToTree(stack) {\n stack.close();\n return Tree.build({ buffer: StackBufferCursor.create(stack),\n nodeSet: this.parser.nodeSet,\n topID: this.topTerm,\n maxBufferLength: this.parser.bufferLength,\n reused: this.reused,\n start: this.ranges[0].from,\n length: stack.pos - this.ranges[0].from,\n minRepeatType: this.parser.minRepeatTerm });\n }\n stackID(stack) {\n let id = (stackIDs || (stackIDs = new WeakMap)).get(stack);\n if (!id)\n stackIDs.set(stack, id = String.fromCodePoint(this.nextStackID++));\n return id + stack;\n }\n}\nfunction pushStackDedup(stack, newStacks) {\n for (let i = 0; i < newStacks.length; i++) {\n let other = newStacks[i];\n if (other.pos == stack.pos && other.sameState(stack)) {\n if (newStacks[i].score < stack.score)\n newStacks[i] = stack;\n return;\n }\n }\n newStacks.push(stack);\n}\nclass Dialect {\n constructor(source, flags, disabled) {\n this.source = source;\n this.flags = flags;\n this.disabled = disabled;\n }\n allows(term) { return !this.disabled || this.disabled[term] == 0; }\n}\nconst id = x => x;\n/**\nContext trackers are used to track stateful context (such as\nindentation in the Python grammar, or parent elements in the XML\ngrammar) needed by external tokenizers. You declare them in a\ngrammar file as `@context exportName from \"module\"`.\n\nContext values should be immutable, and can be updated (replaced)\non shift or reduce actions.\n\nThe export used in a `@context` declaration should be of this\ntype.\n*/\nclass ContextTracker {\n /**\n Define a context tracker.\n */\n constructor(spec) {\n this.start = spec.start;\n this.shift = spec.shift || id;\n this.reduce = spec.reduce || id;\n this.reuse = spec.reuse || id;\n this.hash = spec.hash || (() => 0);\n this.strict = spec.strict !== false;\n }\n}\n/**\nHolds the parse tables for a given grammar, as generated by\n`lezer-generator`, and provides [methods](#common.Parser) to parse\ncontent with.\n*/\nclass LRParser extends Parser {\n /**\n @internal\n */\n constructor(spec) {\n super();\n /**\n @internal\n */\n this.wrappers = [];\n if (spec.version != 14 /* File.Version */)\n throw new RangeError(`Parser version (${spec.version}) doesn't match runtime version (${14 /* File.Version */})`);\n let nodeNames = spec.nodeNames.split(\" \");\n this.minRepeatTerm = nodeNames.length;\n for (let i = 0; i < spec.repeatNodeCount; i++)\n nodeNames.push(\"\");\n let topTerms = Object.keys(spec.topRules).map(r => spec.topRules[r][1]);\n let nodeProps = [];\n for (let i = 0; i < nodeNames.length; i++)\n nodeProps.push([]);\n function setProp(nodeID, prop, value) {\n nodeProps[nodeID].push([prop, prop.deserialize(String(value))]);\n }\n if (spec.nodeProps)\n for (let propSpec of spec.nodeProps) {\n let prop = propSpec[0];\n if (typeof prop == \"string\")\n prop = NodeProp[prop];\n for (let i = 1; i < propSpec.length;) {\n let next = propSpec[i++];\n if (next >= 0) {\n setProp(next, prop, propSpec[i++]);\n }\n else {\n let value = propSpec[i + -next];\n for (let j = -next; j > 0; j--)\n setProp(propSpec[i++], prop, value);\n i++;\n }\n }\n }\n this.nodeSet = new NodeSet(nodeNames.map((name, i) => NodeType.define({\n name: i >= this.minRepeatTerm ? undefined : name,\n id: i,\n props: nodeProps[i],\n top: topTerms.indexOf(i) > -1,\n error: i == 0,\n skipped: spec.skippedNodes && spec.skippedNodes.indexOf(i) > -1\n })));\n if (spec.propSources)\n this.nodeSet = this.nodeSet.extend(...spec.propSources);\n this.strict = false;\n this.bufferLength = DefaultBufferLength;\n let tokenArray = decodeArray(spec.tokenData);\n this.context = spec.context;\n this.specializerSpecs = spec.specialized || [];\n this.specialized = new Uint16Array(this.specializerSpecs.length);\n for (let i = 0; i < this.specializerSpecs.length; i++)\n this.specialized[i] = this.specializerSpecs[i].term;\n this.specializers = this.specializerSpecs.map(getSpecializer);\n this.states = decodeArray(spec.states, Uint32Array);\n this.data = decodeArray(spec.stateData);\n this.goto = decodeArray(spec.goto);\n this.maxTerm = spec.maxTerm;\n this.tokenizers = spec.tokenizers.map(value => typeof value == \"number\" ? new TokenGroup(tokenArray, value) : value);\n this.topRules = spec.topRules;\n this.dialects = spec.dialects || {};\n this.dynamicPrecedences = spec.dynamicPrecedences || null;\n this.tokenPrecTable = spec.tokenPrec;\n this.termNames = spec.termNames || null;\n this.maxNode = this.nodeSet.types.length - 1;\n this.dialect = this.parseDialect();\n this.top = this.topRules[Object.keys(this.topRules)[0]];\n }\n createParse(input, fragments, ranges) {\n let parse = new Parse(this, input, fragments, ranges);\n for (let w of this.wrappers)\n parse = w(parse, input, fragments, ranges);\n return parse;\n }\n /**\n Get a goto table entry @internal\n */\n getGoto(state, term, loose = false) {\n let table = this.goto;\n if (term >= table[0])\n return -1;\n for (let pos = table[term + 1];;) {\n let groupTag = table[pos++], last = groupTag & 1;\n let target = table[pos++];\n if (last && loose)\n return target;\n for (let end = pos + (groupTag >> 1); pos < end; pos++)\n if (table[pos] == state)\n return target;\n if (last)\n return -1;\n }\n }\n /**\n Check if this state has an action for a given terminal @internal\n */\n hasAction(state, terminal) {\n let data = this.data;\n for (let set = 0; set < 2; set++) {\n for (let i = this.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */), next;; i += 3) {\n if ((next = data[i]) == 65535 /* Seq.End */) {\n if (data[i + 1] == 1 /* Seq.Next */)\n next = data[i = pair(data, i + 2)];\n else if (data[i + 1] == 2 /* Seq.Other */)\n return pair(data, i + 2);\n else\n break;\n }\n if (next == terminal || next == 0 /* Term.Err */)\n return pair(data, i + 1);\n }\n }\n return 0;\n }\n /**\n @internal\n */\n stateSlot(state, slot) {\n return this.states[(state * 6 /* ParseState.Size */) + slot];\n }\n /**\n @internal\n */\n stateFlag(state, flag) {\n return (this.stateSlot(state, 0 /* ParseState.Flags */) & flag) > 0;\n }\n /**\n @internal\n */\n validAction(state, action) {\n return !!this.allActions(state, a => a == action ? true : null);\n }\n /**\n @internal\n */\n allActions(state, action) {\n let deflt = this.stateSlot(state, 4 /* ParseState.DefaultReduce */);\n let result = deflt ? action(deflt) : undefined;\n for (let i = this.stateSlot(state, 1 /* ParseState.Actions */); result == null; i += 3) {\n if (this.data[i] == 65535 /* Seq.End */) {\n if (this.data[i + 1] == 1 /* Seq.Next */)\n i = pair(this.data, i + 2);\n else\n break;\n }\n result = action(pair(this.data, i + 1));\n }\n return result;\n }\n /**\n Get the states that can follow this one through shift actions or\n goto jumps. @internal\n */\n nextStates(state) {\n let result = [];\n for (let i = this.stateSlot(state, 1 /* ParseState.Actions */);; i += 3) {\n if (this.data[i] == 65535 /* Seq.End */) {\n if (this.data[i + 1] == 1 /* Seq.Next */)\n i = pair(this.data, i + 2);\n else\n break;\n }\n if ((this.data[i + 2] & (65536 /* Action.ReduceFlag */ >> 16)) == 0) {\n let value = this.data[i + 1];\n if (!result.some((v, i) => (i & 1) && v == value))\n result.push(this.data[i], value);\n }\n }\n return result;\n }\n /**\n Configure the parser. Returns a new parser instance that has the\n given settings modified. Settings not provided in `config` are\n kept from the original parser.\n */\n configure(config) {\n // Hideous reflection-based kludge to make it easy to create a\n // slightly modified copy of a parser.\n let copy = Object.assign(Object.create(LRParser.prototype), this);\n if (config.props)\n copy.nodeSet = this.nodeSet.extend(...config.props);\n if (config.top) {\n let info = this.topRules[config.top];\n if (!info)\n throw new RangeError(`Invalid top rule name ${config.top}`);\n copy.top = info;\n }\n if (config.tokenizers)\n copy.tokenizers = this.tokenizers.map(t => {\n let found = config.tokenizers.find(r => r.from == t);\n return found ? found.to : t;\n });\n if (config.specializers) {\n copy.specializers = this.specializers.slice();\n copy.specializerSpecs = this.specializerSpecs.map((s, i) => {\n let found = config.specializers.find(r => r.from == s.external);\n if (!found)\n return s;\n let spec = Object.assign(Object.assign({}, s), { external: found.to });\n copy.specializers[i] = getSpecializer(spec);\n return spec;\n });\n }\n if (config.contextTracker)\n copy.context = config.contextTracker;\n if (config.dialect)\n copy.dialect = this.parseDialect(config.dialect);\n if (config.strict != null)\n copy.strict = config.strict;\n if (config.wrap)\n copy.wrappers = copy.wrappers.concat(config.wrap);\n if (config.bufferLength != null)\n copy.bufferLength = config.bufferLength;\n return copy;\n }\n /**\n Tells you whether any [parse wrappers](#lr.ParserConfig.wrap)\n are registered for this parser.\n */\n hasWrappers() {\n return this.wrappers.length > 0;\n }\n /**\n Returns the name associated with a given term. This will only\n work for all terms when the parser was generated with the\n `--names` option. By default, only the names of tagged terms are\n stored.\n */\n getName(term) {\n return this.termNames ? this.termNames[term] : String(term <= this.maxNode && this.nodeSet.types[term].name || term);\n }\n /**\n The eof term id is always allocated directly after the node\n types. @internal\n */\n get eofTerm() { return this.maxNode + 1; }\n /**\n The type of top node produced by the parser.\n */\n get topNode() { return this.nodeSet.types[this.top[1]]; }\n /**\n @internal\n */\n dynamicPrecedence(term) {\n let prec = this.dynamicPrecedences;\n return prec == null ? 0 : prec[term] || 0;\n }\n /**\n @internal\n */\n parseDialect(dialect) {\n let values = Object.keys(this.dialects), flags = values.map(() => false);\n if (dialect)\n for (let part of dialect.split(\" \")) {\n let id = values.indexOf(part);\n if (id >= 0)\n flags[id] = true;\n }\n let disabled = null;\n for (let i = 0; i < values.length; i++)\n if (!flags[i]) {\n for (let j = this.dialects[values[i]], id; (id = this.data[j++]) != 65535 /* Seq.End */;)\n (disabled || (disabled = new Uint8Array(this.maxTerm + 1)))[id] = 1;\n }\n return new Dialect(dialect, flags, disabled);\n }\n /**\n Used by the output of the parser generator. Not available to\n user code. @hide\n */\n static deserialize(spec) {\n return new LRParser(spec);\n }\n}\nfunction pair(data, off) { return data[off] | (data[off + 1] << 16); }\nfunction findFinished(stacks) {\n let best = null;\n for (let stack of stacks) {\n let stopped = stack.p.stoppedAt;\n if ((stack.pos == stack.p.stream.end || stopped != null && stack.pos > stopped) &&\n stack.p.parser.stateFlag(stack.state, 2 /* StateFlag.Accepting */) &&\n (!best || best.score < stack.score))\n best = stack;\n }\n return best;\n}\nfunction getSpecializer(spec) {\n if (spec.external) {\n let mask = spec.extend ? 1 /* Specialize.Extend */ : 0 /* Specialize.Specialize */;\n return (value, stack) => (spec.external(value, stack) << 1) | mask;\n }\n return spec.get;\n}\n\nexport { ContextTracker, ExternalTokenizer, InputStream, LRParser, LocalTokenGroup, Stack };\n","import { ExternalTokenizer, ContextTracker, LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst printKeyword = 1,\n indent = 206,\n dedent = 207,\n newline$1 = 208,\n blankLineStart = 209,\n newlineBracketed = 210,\n eof = 211,\n formatString1Content = 212,\n formatString1Brace = 2,\n formatString1End = 213,\n formatString2Content = 214,\n formatString2Brace = 3,\n formatString2End = 215,\n formatString1lContent = 216,\n formatString1lBrace = 4,\n formatString1lEnd = 217,\n formatString2lContent = 218,\n formatString2lBrace = 5,\n formatString2lEnd = 219,\n ParenL = 26,\n ParenthesizedExpression = 27,\n TupleExpression = 51,\n ComprehensionExpression = 52,\n BracketL = 57,\n ArrayExpression = 58,\n ArrayComprehensionExpression = 59,\n BraceL = 61,\n DictionaryExpression = 62,\n DictionaryComprehensionExpression = 63,\n SetExpression = 64,\n SetComprehensionExpression = 65,\n ArgList = 67,\n subscript = 256,\n FormatString = 74,\n importList = 275,\n TypeParamList = 120,\n ParamList = 138,\n SequencePattern = 159,\n MappingPattern = 160,\n PatternArgList = 163;\n\nconst newline = 10, carriageReturn = 13, space = 32, tab = 9, hash = 35, parenOpen = 40, dot = 46,\n braceOpen = 123, singleQuote = 39, doubleQuote = 34, backslash = 92;\n\nconst bracketed = new Set([\n ParenthesizedExpression, TupleExpression, ComprehensionExpression, importList, ArgList, ParamList,\n ArrayExpression, ArrayComprehensionExpression, subscript,\n SetExpression, SetComprehensionExpression, FormatString,\n DictionaryExpression, DictionaryComprehensionExpression,\n SequencePattern, MappingPattern, PatternArgList, TypeParamList\n]);\n\nfunction isLineBreak(ch) {\n return ch == newline || ch == carriageReturn\n}\n\nconst newlines = new ExternalTokenizer((input, stack) => {\n let prev;\n if (input.next < 0) {\n input.acceptToken(eof);\n } else if (stack.context.depth < 0) {\n if (isLineBreak(input.next)) input.acceptToken(newlineBracketed, 1);\n } else if (((prev = input.peek(-1)) < 0 || isLineBreak(prev)) &&\n stack.canShift(blankLineStart)) {\n let spaces = 0;\n while (input.next == space || input.next == tab) { input.advance(); spaces++; }\n if (input.next == newline || input.next == carriageReturn || input.next == hash)\n input.acceptToken(blankLineStart, -spaces);\n } else if (isLineBreak(input.next)) {\n input.acceptToken(newline$1, 1);\n }\n}, {contextual: true});\n\nconst indentation = new ExternalTokenizer((input, stack) => {\n let cDepth = stack.context.depth;\n if (cDepth < 0) return\n let prev = input.peek(-1);\n if (prev == newline || prev == carriageReturn) {\n let depth = 0, chars = 0;\n for (;;) {\n if (input.next == space) depth++;\n else if (input.next == tab) depth += 8 - (depth % 8);\n else break\n input.advance();\n chars++;\n }\n if (depth != cDepth &&\n input.next != newline && input.next != carriageReturn && input.next != hash) {\n if (depth < cDepth) input.acceptToken(dedent, -chars);\n else input.acceptToken(indent);\n }\n }\n});\n\nfunction IndentLevel(parent, depth) {\n this.parent = parent;\n // -1 means this is not an actual indent level but a set of brackets\n this.depth = depth;\n this.hash = (parent ? parent.hash + parent.hash << 8 : 0) + depth + (depth << 4);\n}\n\nconst topIndent = new IndentLevel(null, 0);\n\nfunction countIndent(space) {\n let depth = 0;\n for (let i = 0; i < space.length; i++)\n depth += space.charCodeAt(i) == tab ? 8 - (depth % 8) : 1;\n return depth\n}\n\nconst trackIndent = new ContextTracker({\n start: topIndent,\n reduce(context, term) {\n return context.depth < 0 && bracketed.has(term) ? context.parent : context\n },\n shift(context, term, stack, input) {\n if (term == indent) return new IndentLevel(context, countIndent(input.read(input.pos, stack.pos)))\n if (term == dedent) return context.parent\n if (term == ParenL || term == BracketL || term == BraceL) return new IndentLevel(context, -1)\n return context\n },\n hash(context) { return context.hash }\n});\n\nconst legacyPrint = new ExternalTokenizer(input => {\n for (let i = 0; i < 5; i++) {\n if (input.next != \"print\".charCodeAt(i)) return\n input.advance();\n }\n if (/\\w/.test(String.fromCharCode(input.next))) return\n for (let off = 0;; off++) {\n let next = input.peek(off);\n if (next == space || next == tab) continue\n if (next != parenOpen && next != dot && next != newline && next != carriageReturn && next != hash)\n input.acceptToken(printKeyword);\n return\n }\n});\n\nfunction formatString(quote, len, content, brace, end) {\n return new ExternalTokenizer(input => {\n let start = input.pos;\n for (;;) {\n if (input.next < 0) {\n break\n } else if (input.next == braceOpen) {\n if (input.peek(1) == braceOpen) {\n input.advance(2);\n } else {\n if (input.pos == start) {\n input.acceptToken(brace, 1);\n return\n }\n break\n }\n } else if (input.next == backslash) {\n input.advance();\n if (input.next >= 0) input.advance();\n } else if (input.next == quote && (len == 1 || input.peek(1) == quote && input.peek(2) == quote)) {\n if (input.pos == start) {\n input.acceptToken(end, len);\n return\n }\n break\n } else {\n input.advance();\n }\n }\n if (input.pos > start) input.acceptToken(content);\n })\n}\n\nconst formatString1 = formatString(singleQuote, 1, formatString1Content, formatString1Brace, formatString1End);\nconst formatString2 = formatString(doubleQuote, 1, formatString2Content, formatString2Brace, formatString2End);\nconst formatString1l = formatString(singleQuote, 3, formatString1lContent, formatString1lBrace, formatString1lEnd);\nconst formatString2l = formatString(doubleQuote, 3, formatString2lContent, formatString2lBrace, formatString2lEnd);\n\nconst pythonHighlighting = styleTags({\n \"async \\\"*\\\" \\\"**\\\" FormatConversion FormatSpec\": tags.modifier,\n \"for while if elif else try except finally return raise break continue with pass assert await yield match case\": tags.controlKeyword,\n \"in not and or is del\": tags.operatorKeyword,\n \"from def class global nonlocal lambda\": tags.definitionKeyword,\n import: tags.moduleKeyword,\n \"with as print\": tags.keyword,\n Boolean: tags.bool,\n None: tags.null,\n VariableName: tags.variableName,\n \"CallExpression/VariableName\": tags.function(tags.variableName),\n \"FunctionDefinition/VariableName\": tags.function(tags.definition(tags.variableName)),\n \"ClassDefinition/VariableName\": tags.definition(tags.className),\n PropertyName: tags.propertyName,\n \"CallExpression/MemberExpression/PropertyName\": tags.function(tags.propertyName),\n Comment: tags.lineComment,\n Number: tags.number,\n String: tags.string,\n FormatString: tags.special(tags.string),\n UpdateOp: tags.updateOperator,\n \"ArithOp!\": tags.arithmeticOperator,\n BitOp: tags.bitwiseOperator,\n CompareOp: tags.compareOperator,\n AssignOp: tags.definitionOperator,\n Ellipsis: tags.punctuation,\n At: tags.meta,\n \"( )\": tags.paren,\n \"[ ]\": tags.squareBracket,\n \"{ }\": tags.brace,\n \".\": tags.derefOperator,\n \", ;\": tags.separator\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_identifier = {__proto__:null,await:48, or:58, and:60, in:64, not:66, is:68, if:74, else:76, lambda:80, yield:98, from:100, async:106, for:108, None:178, True:180, False:180, del:194, pass:198, break:202, continue:206, return:210, raise:218, import:222, as:224, global:228, nonlocal:230, assert:234, type:239, elif:252, while:256, try:262, except:264, finally:266, with:270, def:274, class:284, match:295, case:301};\nconst parser = LRParser.deserialize({\n version: 14,\n states: \"#)WO`Q#yOOP$bOSOOO%kQ&nO'#HhOOQS'#Cq'#CqOOQS'#Cr'#CrO'ZQ#xO'#CpO(|Q&nO'#HgOOQS'#Hh'#HhOOQS'#DW'#DWOOQS'#Hg'#HgO)jQ#xO'#DaO)}Q#xO'#DhO*_Q#xO'#DlOOQS'#Dw'#DwO*rO,UO'#DwO*zO7[O'#DwO+SOWO'#DxO+_O`O'#DxO+jOpO'#DxO+uO!bO'#DxO-wQ&nO'#HXOOQS'#HX'#HXO'ZQ#xO'#HWO/ZQ&nO'#HWOOQS'#Ej'#EjO/rQ#xO'#EkOOQS'#HV'#HVO/|Q#xO'#HUOOQV'#HU'#HUO0XQ#xO'#FbOOQS'#Gj'#GjO0^Q#xO'#FaOOQV'#I_'#I_OOQV'#HT'#HTOOQV'#Fy'#FyQ`Q#yOOO'ZQ#xO'#CsO0lQ#xO'#DPO0sQ#xO'#DTO1RQ#xO'#HlO1cQ&nO'#E_O'ZQ#xO'#E`OOQS'#Eb'#EbOOQS'#Ed'#EdOOQS'#Ef'#EfO1wQ#xO'#EhO2_Q#xO'#ElO0XQ#xO'#EnO2rQ&nO'#EnO0XQ#xO'#EqO/rQ#xO'#EtO0XQ#xO'#EvO/rQ#xO'#E|O/rQ#xO'#FPO2}Q#xO'#FRO3UQ#xO'#FWO3aQ#xO'#FSO/rQ#xO'#FWO0XQ#xO'#FYO0XQ#xO'#F_O3fQ#xO'#FdP3mO#xO'#HSPOOO)CBv)CBvOOQS'#Cg'#CgOOQS'#Ch'#ChOOQS'#Ci'#CiOOQS'#Cj'#CjOOQS'#Ck'#CkOOQS'#Cl'#ClOOQS'#Cn'#CnO'ZQ#xO,59QO'ZQ#xO,59QO'ZQ#xO,59QO'ZQ#xO,59QO'ZQ#xO,59QO'ZQ#xO,59QO3xQ#xO'#DqOOQS,5:[,5:[O4]Q#xO'#HvOOQS,5:_,5:_O4jQMlO,5:_O4oQ&nO,59[O0lQ#xO,59dO0lQ#xO,59dO0lQ#xO,59dO7_Q#xO,59dO7dQ#xO,59dO7kQ#xO,59lO7rQ#xO'#HgO8xQ#xO'#HfOOQS'#Hf'#HfOOQS'#D^'#D^O9aQ#xO,59cO'ZQ#xO,59cO9oQ#xO,59cOOQS,59{,59{O9tQ#xO,5:TO'ZQ#xO,5:TOOQS,5:S,5:SO:SQ#xO,5:SO:XQ#xO,5:ZO'ZQ#xO,5:ZO'ZQ#xO,5:XOOQS,5:W,5:WO:jQ#xO,5:WO:oQ#xO,5:YOOOO'#GR'#GRO:tO,UO,5:cOOQS,5:c,5:cOOOO'#GS'#GSO:|O7[O,5:cO;UQ#xO'#DyOOOW'#GT'#GTO;fOWO,5:dOOQS,5:d,5:dO;UQ#xO'#EPOOO`'#GW'#GWO;qO`O,5:dO;UQ#xO'#EROOOp'#GX'#GXO;|OpO,5:dO;UQ#xO'#ETOOO!b'#GY'#GYO<XO!bO,5:dOOQS'#GZ'#GZO<dQ&nO,5:qO?UQ&nO,5=rO?oQ!LUO,5=rO@`Q&nO,5=rOOQS,5;V,5;VO@wQ#yO'#GdOBZQ#xO,5;fOOQV,5=p,5=pOBfQ&nO'#IYOB}Q#xO,5;|OOQS-E:h-E:hOOQV,5;{,5;{O3[Q#xO'#FYOOQV-E9w-E9wOCVQ&nO,59_OE^Q&nO,59kOEwQ#xO'#HiOFSQ#xO'#HiO0XQ#xO'#HiOF_Q#xO'#DVOFgQ#xO,59oOFlQ#xO'#HmO'ZQ#xO'#HmO/rQ#xO,5>WOOQS,5>W,5>WO/rQ#xO'#EZOOQS'#E['#E[OGZQ#xO'#G]OGkQ#xO,59OOGkQ#xO,59OO)pQ#xO,5:wOGyQ&nO'#HoOOQS,5:z,5:zOOQS,5;S,5;SOH^Q#xO,5;WOHoQ#xO,5;YOOQS'#G`'#G`OH}Q&nO,5;YOI]Q#xO,5;YOIbQ#xO'#I]OOQS,5;],5;]OIpQ#xO'#IXOOQS,5;`,5;`OJRQ#xO,5;bO3aQ#xO,5;hO3aQ#xO,5;kOJZQ&nO'#I`O'ZQ#xO'#I`OJeQ#xO,5;mO2}Q#xO,5;mO/rQ#xO,5;rO0XQ#xO,5;tOJjQ#yO'#E}OKvQ#{O,5;nO! [Q#xO'#IaO3aQ#xO,5;rO! gQ#xO,5;tO! oQ#xO,5;yO! zQ&nO,5<OO'ZQ#xO,5<OPOOO,5=n,5=nP!!ROSO,5=nP!!WO#xO,5=nO!${Q&nO1G.lO!%SQ&nO1G.lO!'sQ&nO1G.lO!'}Q&nO1G.lO!*hQ&nO1G.lO!*{Q&nO1G.lO!+`Q#xO'#HuO!+nQ&nO'#HXO/rQ#xO'#HuO!+xQ#xO'#HtOOQS,5:],5:]O!,QQ#xO,5:]O!,VQ#xO'#HwO!,bQ#xO'#HwO!,uQ#xO,5>bOOQS'#Du'#DuOOQS1G/y1G/yOOQS1G/O1G/OO!-uQ&nO1G/OO!-|Q&nO1G/OO0lQ#xO1G/OO!.iQ#xO1G/WOOQS'#D]'#D]O/rQ#xO,59vOOQS1G.}1G.}O!.pQ#xO1G/gO!/QQ#xO1G/gO!/YQ#xO1G/hO'ZQ#xO'#HnO!/_Q#xO'#HnO!/dQ&nO1G.}O!/tQ#xO,59kO!0zQ#xO,5>^O!1[Q#xO,5>^O!1dQ#xO1G/oO!1iQ&nO1G/oOOQS1G/n1G/nO!1yQ#xO,5>XO!2pQ#xO,5>XO/rQ#xO1G/sO!3_Q#xO1G/uO!3dQ&nO1G/uO!3tQ&nO1G/sOOQS1G/r1G/rOOQS1G/t1G/tOOOO-E:P-E:POOQS1G/}1G/}OOOO-E:Q-E:QO!4UQ#xO'#IRO/rQ#xO'#IRO!4gQ#xO,5:eOOOW-E:R-E:ROOQS1G0O1G0OO!4uQ#xO,5:kOOO`-E:U-E:UO!5TQ#xO,5:mOOOp-E:V-E:VO!5cQ#xO,5:oOOO!b-E:W-E:WOOQS-E:X-E:XO!5qQ!LUO1G3^O!6bQ&nO1G3^O'ZQ#xO,5<vOOQS,5<v,5<vOOQS-E:Y-E:YOOQS,5=O,5=OOOQS-E:b-E:bOOQV1G1Q1G1QO0XQ#xO'#G_O!6yQ&nO,5>tOOQS1G1h1G1hO!7bQ#xO1G1hOOQS'#DX'#DXO/rQ#xO,5>TOOQS,5>T,5>TO!7gQ#xO'#FzO!7rQ#xO,59qO!7zQ#xO1G/ZO!8UQ&nO,5>XOOQS1G3r1G3rOOQS,5:u,5:uO!8uQ#xO'#HWOOQS,5<w,5<wOOQS-E:Z-E:ZO!9WQ#xO1G.jOOQS1G0c1G0cO!9fQ#xO,5>ZO!9vQ#xO,5>ZO/rQ#xO1G0rO/rQ#xO1G0rO0XQ#xO1G0tOOQS-E:^-E:^O!:XQ#xO1G0tO!:dQ#xO1G0tO!:iQ#xO,5>wO!:wQ#xO,5>wO!;VQ#xO,5>sO!;mQ#xO,5>sO!<OQ#xO'#ExO/rQ#xO1G0|O!<ZQ#xO1G0|O!<`Q#{O1G1SO!?qQ#{O1G1VO!CPQ#xO,5>zO!CZQ#xO,5>zO!CcQ&nO,5>zO/rQ#xO1G1XO!CmQ#xO1G1XO3aQ#xO1G1^O! gQ#xO1G1`OOQV,5;i,5;iO!CrQ#zO,5;iO!CwQ#{O1G1YO!G]Q#xO'#GgO3aQ#xO1G1YO3aQ#xO1G1YO!GmQ#xO,5>{O!GzQ#xO,5>{O0XQ#xO,5>{OOQV1G1^1G1^O!HSQ#xO'#F[O!HeQMlO1G1`O!HmQ#xO1G1`OOQV1G1e1G1eO3aQ#xO1G1eO!HrQ#xO1G1eO!HzQ#xO'#FfOOQV1G1j1G1jO! zQ&nO1G1jPOOO1G3Y1G3YP!IPOSO1G3YOOQS,5>a,5>aOOQS'#Dr'#DrO/rQ#xO,5>aO!IUQ#xO,5>`O!IiQ#xO,5>`OOQS1G/w1G/wO!IqQ#xO,5>cO!JRQ#xO,5>cO!JZQ#xO,5>cO!JnQ#xO,5>cO!KOQ#xO,5>cOOQS1G3|1G3|OOQS7+$j7+$jO!7zQ#xO7+$rO!LqQ#xO1G/OO!LxQ#xO1G/OOOQS1G/b1G/bOOQS,5<h,5<hO'ZQ#xO,5<hOOQS7+%R7+%RO!MPQ#xO7+%ROOQS-E9z-E9zOOQS7+%S7+%SO!MaQ#xO,5>YO'ZQ#xO,5>YOOQS7+$i7+$iO!MfQ#xO7+%RO!MnQ#xO7+%SO!MsQ#xO1G3xOOQS7+%Z7+%ZO!NTQ#xO1G3xO!N]Q#xO7+%ZOOQS,5<g,5<gO'ZQ#xO,5<gO!NbQ#xO1G3sOOQS-E9y-E9yO# XQ#xO7+%_OOQS7+%a7+%aO# gQ#xO1G3sO#!UQ#xO7+%aO#!ZQ#xO1G3yO#!kQ#xO1G3yO#!sQ#xO7+%_O#!xQ#xO,5>mO##cQ#xO,5>mO##cQ#xO,5>mOOQS'#Dz'#DzO##tO$ISO'#D|O#$PO#tO'#ISOOOW1G0P1G0PO#$UQ#xO1G0PO#$^Q#xO1G0POOQS'#EQ'#EQOOO`1G0V1G0VO#$iQ#xO1G0VO#$qQ#xO1G0VOOQS'#ES'#ESOOOp1G0X1G0XO#$|Q#xO1G0XO#%UQ#xO1G0XOOQS'#EU'#EUOOO!b1G0Z1G0ZO#%aQ#xO1G0ZO#%iQ#xO1G0ZO#%tQ!LUO7+(xO#&eQ&nO1G2bP#'OQ#xO'#G[OOQS,5<y,5<yOOQS-E:]-E:]OOQS7+'S7+'SOOQS1G3o1G3oOOQS,5<f,5<fOOQS-E9x-E9xOOQS7+$u7+$uO#']Q#xO,5=rO#'vQ#xO,5=rO#(XQ&nO,5<iO#(lQ#xO1G3uOOQS-E9{-E9{OOQS7+&^7+&^O#(|Q#xO7+&^OOQS7+&`7+&`O#)[Q#xO'#I[O0XQ#xO'#IZO#)pQ#xO7+&`OOQS,5<|,5<|O#){Q#xO1G4cOOQS-E:`-E:`OOQS,5<x,5<xO#*ZQ#xO1G4_OOQS-E:[-E:[O0XQ#xO'#EyO#*qQ#xO'#EyO#*|Q#xO'#I^O#+UQ#xO,5;dOOQS7+&h7+&hO/rQ#xO7+&hO#+ZQ#{O7+&nO!G`Q#xO'#GeO3aQ#xO7+&nO3aQ#xO7+&qO#.lQ&nO,5=QO'ZQ#xO,5=QO#.vQ#xO1G4fOOQS-E:d-E:dO#/QQ#xO1G4fO3aQ#xO7+&sO/rQ#xO7+&sOOQV7+&x7+&xO!HeQMlO7+&zO!HmQ#xO7+&zO`Q#yO1G1TOOQV-E:e-E:eO3aQ#xO7+&tO3aQ#xO7+&tOOQV,5=R,5=RO#/YQ#xO,5=RO!G`Q#xO,5=ROOQV7+&t7+&tO#/eQ#{O7+&tO#2sQ#xO,5=SO#3OQ#xO1G4gOOQS-E:f-E:fO#3]Q#xO1G4gO#3eQ#xO'#IcO#3sQ#xO'#IcO0XQ#xO'#IcOOQS'#Ic'#IcO#4OQ#xO'#IbOOQS,5;v,5;vO#4WQ#xO,5;vO/rQ#xO'#F^OOQV7+&z7+&zO3aQ#xO7+&zOOQV7+'P7+'PO3aQ#xO7+'PO#4]Q#zO,5<QOOQV7+'U7+'UPOOO7+(t7+(tO#4bQ#xO1G3{OOQS,5<k,5<kO#4pQ#xO1G3zOOQS-E9}-E9}O#5TQ#xO,5<lO#5`Q#xO,5<lO#5sQ#xO1G3}OOQS-E:O-E:OO#6TQ#xO1G3}O#6]Q#xO1G3}O#6mQ#xO1G3}O#6TQ#xO1G3}OOQS<<H^<<H^O#6xQ&nO1G2SOOQS<<Hm<<HmP#7VQ#xO'#F|O7kQ#xO1G3tO#7dQ#xO1G3tO#7iQ#xO<<HmOOQS<<Hn<<HnO#7yQ#xO7+)dOOQS<<Hu<<HuO#8ZQ&nO1G2RP#8zQ#xO'#F{O#9XQ#xO7+)eO#9iQ#xO7+)eO#9qQ#xO<<HyO#9vQ#xO7+)_OOQS<<H{<<H{O#:mQ#xO,5<jO'ZQ#xO,5<jOOQS-E9|-E9|OOQS<<Hy<<HyOOQS,5<p,5<pO/rQ#xO,5<pO#:rQ#xO1G4XOOQS-E:S-E:SO#;]Q#xO1G4XO;UQ#xO'#D}OOOO'#GV'#GVO#;nO$ISO,5:hOOO#l,5>n,5>nOOOW7+%k7+%kO#;yQ#xO7+%kOOO`7+%q7+%qO#<RQ#xO7+%qOOOp7+%s7+%sO#<ZQ#xO7+%sOOO!b7+%u7+%uO#<cQ#xO7+%uO#<kQ#xO1G3^O#=UQ#xO1G3^P'ZQ#xO'#F}O/rQ#xO<<IxO#=gQ#xO,5>vO#=xQ#xO,5>vO0XQ#xO,5>vO#>ZQ#xO,5>uOOQS<<Iz<<IzP0XQ#xO'#GbP/rQ#xO'#G^OOQS,5;e,5;eO#>`Q#xO,5>xO#>nQ#xO,5>xOOQS1G1O1G1OOOQS<<JS<<JSOOQV-E:c-E:cO3aQ#xO<<JYOOQV,5=P,5=PO3aQ#xO,5=POOQV<<JY<<JYOOQV<<J]<<J]O#>vQ&nO1G2lP#?QQ#xO'#GfO#?XQ#xO7+*QO#?cQ#{O<<J_O3aQ#xO<<J_OOQV<<Jf<<JfO3aQ#xO<<JfO!HeQMlO<<JfO#BqQ#{O7+&oOOQV<<J`<<J`O#B{Q#{O<<J`OOQV1G2m1G2mO0XQ#xO1G2mO#FZQ#xO1G2mO3aQ#xO<<J`O0XQ#xO1G2nP/rQ#xO'#GhO#FfQ#xO7+*RO#FsQ#xO7+*ROOQS'#F]'#F]O/rQ#xO,5>}O#F{Q#xO,5>}OOQS,5>},5>}O#GWQ#xO,5>|O#GiQ#xO,5>|OOQS1G1b1G1bOOQS,5;x,5;xOOQV<<Jk<<JkO#GqQ#xO1G1lOOQS7+)g7+)gP#GvQ#xO'#GPO#HWQ#xO1G2WO#HkQ#xO1G2WO#H{Q#xO1G2WP#IWQ#xO'#GQO#IeQ#xO7+)iO#IuQ#xO7+)iO#IuQ#xO7+)iO#I}Q#xO7+)iO#J_Q#xO7+)`O7kQ#xO7+)`OOQSAN>XAN>XO#JxQ#xO<<MPOOQSAN>eAN>eO/rQ#xO1G2UO#KYQ&nO1G2UP#KdQ#xO'#GOOOQS1G2[1G2[P#KqQ#xO'#GUO#LOQ#xO7+)sO#LiQ#xO,5:iOOOO-E:T-E:TOOOW<<IV<<IVOOO`<<I]<<I]OOOp<<I_<<I_OOO!b<<Ia<<IaO#LwQ#xO7+(xOOQSAN?dAN?dO#MbQ#xO,5<{O#MvQ#xO1G4bOOQS-E:_-E:_O#NXQ#xO1G4bOOQS1G4a1G4aOOQS,5<},5<}O#NjQ#xO1G4dOOQS-E:a-E:aOOQVAN?tAN?tOOQV1G2k1G2kO3aQ#xOAN?yO#NxQ#{OAN?yOOQVAN@QAN@QO3aQ#xOAN@QOOQV<<JZ<<JZO3aQ#xOAN?zO3aQ#xO7+(XOOQV7+(X7+(XO0XQ#xO7+(XOOQVAN?zAN?zOOQS7+(Y7+(YO$$WQ#xO<<MmOOQS1G4i1G4iO/rQ#xO1G4iOOQS,5=T,5=TO$$eQ#xO1G4hOOQS-E:g-E:gOOQU'#Gk'#GkO$$vQ#zO7+'WO$%RQ#xO'#FgO$%yQ#xO7+'rO$&ZQ#xO7+'rOOQS7+'r7+'rO$&fQ#xO<<MTO$&vQ#xO<<MTO$&vQ#xO<<MTO$'OQ#xO'#HpOOQS<<Lz<<LzO$'YQ#xO<<LzOOQS7+'p7+'pOOQS'#EO'#EOOOOO1G0T1G0TO$'sQ#xO1G0TO$'{Q#xO1G0TO0XQ#xO1G2gP0XQ#xO'#GaO$(WQ#xO7+)|O$(iQ#xO7+)|P!<OQ#xO'#GcOOQVG25eG25eO3aQ#xOG25eOOQVG25lG25lOOQVG25fG25fOOQV<<Ks<<KsO3aQ#xO<<KsOOQS7+*T7+*TP$(zQ#xO'#GiOOQU-E:i-E:iOOQV<<Jr<<JrO$)nQ&nO'#FiOOQS'#Fk'#FkO$*OQ#xO'#FjO$*pQ#xO'#FjOOQS'#Fj'#FjO$*uQ#xO'#IeO$%RQ#xO'#FqO$%RQ#xO'#FqO$+^Q#xO'#FrO$%RQ#xO'#FsO$+eQ#xO'#IfOOQS'#If'#IfO$,SQ#xO,5<ROOQS<<K^<<K^O$,[Q#xO<<K^O$,lQ#xOANBoO$,|Q#xOANBoO$-UQ#xO'#HqOOQS'#Hq'#HqO0sQ#xO'#DeO$-oQ#xO,5>[OOQSANBfANBfOOOO7+%o7+%oO$.WQ#xO7+%oOOQS7+(R7+(RO$.`Q#xO<<MhOOQVLD+PLD+POOQVANA_ANA_O4jQMlO'#GmO$.qQ&nO,5<[O$%RQ#xO'#FuOOQS,5<`,5<`OOQS'#Fl'#FlO$/cQ#xO,5<UO$/hQ#xO,5<UOOQS'#Fo'#FoO$%RQ#xO'#GlO$0YQ#xO,5<YO$0tQ#xO,5?PO$1UQ#xO,5?PO0XQ#xO,5<XO$1gQ#xO,5<]O$1lQ#xO,5<]O$%RQ#xO'#IgO$1qQ#xO'#IgO$1vQ#xO,5<^OOQS,5<_,5<_O'ZQ#xO'#FxOOQU1G1m1G1mO3aQ#xO1G1mOOQSAN@xAN@xO$1{Q#xOG28ZO$2]Q#xO,5:POOQS1G3v1G3vOOOO<<IZ<<IZOOQS,5=X,5=XOOQS-E:k-E:kO$2bQ&nO'#FiO$2iQ#xO'#IhO$2wQ#xO'#IhO$3PQ#xO,5<aOOQS1G1p1G1pO$3UQ#xO1G1pO$3ZQ#xO,5=WOOQS-E:j-E:jO$3uQ#xO,5=[O$4^Q#xO1G4kOOQS-E:n-E:nOOQS1G1s1G1sOOQS1G1w1G1wO$4nQ#xO,5?RO$%RQ#xO,5?ROOQS1G1x1G1xO$4|Q&nO,5<dOOQU7+'X7+'XO$'OQ#xO1G/kO$%RQ#xO,5<bO$5TQ#xO,5?SO$5[Q#xO,5?SOOQS1G1{1G1{OOQS7+'[7+'[P$%RQ#xO'#GpO$5dQ#xO1G4mO$5nQ#xO1G4mO$5vQ#xO1G4mOOQS7+%V7+%VO$6UQ#xO1G1|O$6dQ&nO'#FiO$6kQ#xO,5=ZOOQS,5=Z,5=ZO$6yQ#xO1G4nOOQS-E:m-E:mO$%RQ#xO,5=YO$7QQ#xO,5=YO$7VQ#xO7+*XOOQS-E:l-E:lO$7aQ#xO7+*XO$%RQ#xO,5<cP$%RQ#xO'#GoO$7iQ#xO1G2tO$%RQ#xO1G2tP$7wQ#xO'#GnO$8OQ#xO<<MsO$8YQ#xO1G1}O$8hQ#xO7+(`O7kQ#xO'#DPO7kQ#xO,59dO7kQ#xO,59dO7kQ#xO,59dO$8vQ&nO,5=rO7kQ#xO1G/OO/rQ#xO1G/ZO/rQ#xO7+$rP$9ZQ#xO'#G[O'ZQ#xO'#HWO$9hQ#xO,59dO$9mQ#xO,59dO$9tQ#xO,59oO$9yQ#xO1G/WO0sQ#xO'#DTO7kQ#xO,59l\",\n stateData: \"$:[~O%uOS%jOSUOS%iPQ~OPiOXfOhtOjYOquOu!UOxvO!RwO!S!QO!V!XO!W!WO!ZZO!_[O!jeO!zeO!{eO!|eO#TyO#VzO#X{O#Z|O#]}O#a!OO#c!PO#f!RO#g!RO#i!SO#k!TO#t!VO#w!YO#{!ZO#}![O$S!]O$VmO$X!^O&RRO&SRO&WSO&XWO&m]O&n^O&q_O&t`O&xaO&ybO&zcO~O%i!_O~OX!fOa!fOc!gOj!nO!Z!pO!h!rO%|!aO%}!bO&O!cO&P!dO&Q!dO&R!eO&S!eO&T!fO&U!fO&V!fO~Om&[Xn&[Xo&[Xp&[Xq&[Xr&[Xu&[X|&[X}&[X#Q&[X#o&[X%h&[X%k&[X&^&[Xi&[X!V&[X!W&[X&_&[X!Y&[X!^&[X!S&[X#d&[Xv&[X!o&[X~P$gOhtOjYO!ZZO!_[O!jeO!zeO!{eO!|eO&RRO&SRO&WSO&XWO&m]O&n^O&q_O&t`O&xaO&ybO&zcO~O|&ZX}&ZX#o&ZX%h&ZX%k&ZX&^&ZX~Om!uOn!vOo!tOp!tOq!wOr!xOu!yO#Q&ZX~P(hOX#POi#ROq1`Ox1nO!RwO~P'ZOX#TOq1`Ox1nO!Y#UO~P'ZOX#XOc#YOq1`Ox1nO!^#ZO~P'ZO&o#^O&p#`O~O&r#aO&s#`O~OQ#cO%l#dO%m#fO~OR#gO%n#hO%o#fO~OS#jO%p#kO%q#fO~OT#mO%r#nO%s#fO~OX%{Xa%{Xc%{Xj%{Xm%{Xn%{Xo%{Xp%{Xq%{Xr%{Xu%{X|%{X!Z%{X!h%{X%|%{X%}%{X&O%{X&P%{X&Q%{X&R%{X&S%{X&T%{X&U%{X&V%{Xi%{X!V%{X!W%{X~O&m]O&n^O&q_O&t`O&xaO&ybO&zcO}%{X#Q%{X#o%{X%h%{X%k%{X&^%{X&_%{X!Y%{X!^%{X!S%{X#d%{Xv%{X!o%{X~P,QO|#sO}%zX#Q%zX#o%zX%h%zX%k%zX&^%zX~Oq1`Ox1nO~P'ZO#o#vO%h#xO%k#xO~O&XWO~O!V#}O#}![O$S!]O$VmO~OquO~P'ZOX$SOc$TO&XWO}yP~OX$XOq1`Ox1nO!S$YO~P'ZO}$[O#Q$aO&^$]O#o#RX%h#RX%k#RX~OX$XOq1`Ox1nO#o#[X%h#[X%k#[X~P'ZOq1`Ox1nO#o#`X%h#`X%k#`X~P'ZO!h$gO!z$gO&XWO~OX$rO~P'ZO!W$tO#{$uO#}$vO~O}$wO~OX%OO~P'ZOU%QO%h%PO%u%RO~OX%[Oc%[Oi%^Oq1`Ox1nO~P'ZOq1`Ox1nO}%aO~P'ZO&l%cO~Oc!gOj!nO!Z!pO!h!rOXdaadamdandaodapdaqdardauda|da}da#Qda#oda%hda%kda%|da%}da&Oda&Pda&Qda&Rda&Sda&Tda&Uda&Vda&^daida!Vda!Wda&_da!Yda!^da!Sda#ddavda!oda~Op%hO~Oq%hO~P'ZOq1`O~P'ZOm1bOn1cOo1aOp1aOq1jOr1kOu1oOi&ZX!V&ZX!W&ZX&_&ZX!Y&ZX!^&ZX!S&ZX#d&ZX!o&ZX~P(hO&_%jOi&YX|&YX!V&YX!W&YX!Y&YX}&YX~Oi%lO|%mO!V%qO!W%pO~Oi%lO~O|%tO!V%qO!W%pO!Y&fX~O!Y%xO~O|%yO}%{O!V%qO!W%pO!^&aX~O!^&PO~O!^&QO~O&o#^O&p&SO~O&r#aO&s&SO~OX&VOq1`Ox1nO!RwO~P'ZOQ#cO%l#dO%m&YO~OR#gO%n#hO%o&YO~OS#jO%p#kO%q&YO~OT#mO%r#nO%s&YO~OX!yaa!yac!yaj!yam!yan!yao!yap!yaq!yar!yau!ya|!ya}!ya!Z!ya!h!ya#Q!ya#o!ya%h!ya%k!ya%|!ya%}!ya&O!ya&P!ya&Q!ya&R!ya&S!ya&T!ya&U!ya&V!ya&^!yai!ya!V!ya!W!ya&_!ya!Y!ya!^!ya!S!ya#d!yav!ya!o!ya~P#yO|&bO}%za#Q%za#o%za%h%za%k%za&^%za~P$gOX&dOquOxvO}%za#Q%za#o%za%h%za%k%za&^%za~P'ZO|&bO}%za#Q%za#o%za%h%za%k%za&^%za~OPiOXfOquOxvO!RwO!S!QO#TyO#VzO#X{O#Z|O#]}O#a!OO#c!PO#f!RO#g!RO#i!SO#k!TO#o%WX%h%WX%k%WX~P'ZO#o#vO%h&iO%k&iO~O!h&jOj&|X%h&|X#d&|X#o&|X%k&|X#c&|X~Oj!nO%h&lO~Omgangaogapgaqgargauga|ga}ga#Qga#oga%hga%kga&^gaiga!Vga!Wga&_ga!Yga!^ga!Sga#dgavga!oga~P$gOusa|sa}sa#osa%hsa%ksa&^sa~Om!uOn!vOo!tOp!tOq!wOr!xO#Qsa~PDuO&^&nO|&]X}&]X~O&XWO|&]X}&]X~O|&qO}yX~O}&sO~O|%yO#o&aX%h&aX%k&aXi&aX}&aX!^&aX!o&aX&^&aX~OX1iOq1`Ox1nO!RwO~P'ZO&^$]O#oWa%hWa%kWa~O|&|O#o&cX%h&cX%k&cXp&cX~P$gO|'PO!S'OO#o#`a%h#`a%k#`a~O#d'QO#o#ba%h#ba%k#ba~O!h$gO!z$gO#c'SO&XWO~O#c'SO~O|'UO#o'PX%h'PX%k'PX~O|'WO#o&{X%h&{X%k&{X}&{X~O!Z'YO&^'ZO~O|'_Op'SX~P$gOp'bO~OPiOXfOquOxvO!RwO!S!QO#TyO#VzO#X{O#Z|O#]}O#a!OO#c!PO#f!RO#g!RO#i!SO#k!TO%h'gO~P'ZOv'kO#x'iO#y'jOP#vaX#vah#vaj#vaq#vau#vax#va!R#va!S#va!V#va!W#va!Z#va!_#va!j#va!z#va!{#va!|#va#T#va#V#va#X#va#Z#va#]#va#a#va#c#va#f#va#g#va#i#va#k#va#t#va#w#va#{#va#}#va$S#va$V#va$X#va%e#va&R#va&S#va&W#va&X#va&m#va&n#va&q#va&t#va&x#va&y#va&z#va%g#va%k#va~O|'lO#d'nO}'TX~Oj'pO!Z'YO~Oj!nO}$wO!Z'YO~O}'vO~P$gO%h'yO~OU'zO%h'yO~OX!fOa!fOc!gOj!nO!Z!pO!h!rO&O!cO&P!dO&Q!dO&R!eO&S!eO&T!fO&U!fO&V!fOmYinYioYipYiqYirYiuYi|Yi}Yi#QYi#oYi%hYi%kYi%|Yi&^YiiYi!VYi!WYi&_Yi!YYi!^Yi!SYi#dYivYi!oYi~O%}!bO~P!!`O%}Yi~P!!`OX!fOa!fOc!gOj!nO!Z!pO!h!rO&R!eO&S!eO&T!fO&U!fO&V!fOmYinYioYipYiqYirYiuYi|Yi}Yi#QYi#oYi%hYi%kYi%|Yi%}Yi&OYi&^YiiYi!VYi!WYi&_Yi!YYi!^Yi!SYi#dYivYi!oYi~O&P!dO&Q!dO~P!%ZO&PYi&QYi~P!%ZOc!gOj!nO!Z!pO!h!rOmYinYioYipYiqYirYiuYi|Yi}Yi#QYi#oYi%hYi%kYi%|Yi%}Yi&OYi&PYi&QYi&RYi&SYi&^YiiYi!VYi!WYi&_Yi!YYi!^Yi!SYi#dYivYi!oYi~OX!fOa!fO&T!fO&U!fO&V!fO~P!(XOXYiaYi&TYi&UYi&VYi~P!(XO!V%qO!W%pOi&iX|&iX~O&^'|O&_'|O~P,QO|(OOi&hX~Oi(QO~O|(RO}(TO!Y&kX~Oq1`Ox1nO|(RO}(UO!Y&kX~P'ZO!Y(WO~Oo!tOp!tOq!wOr!xOmliuli|li}li#Qli#oli%hli%kli&^li~On!vO~P!,zOnli~P!,zOm1bOn1cOo1aOp1aOq1jOr1kO~Ov(YO~P!.TOX(_Oi(`Oq1`Ox1nO~P'ZOi(`O|(aO~Oi(cO~O!W(eO~Oi(fO|(aO!V%qO!W%pO~P$gOm1bOn1cOo1aOp1aOq1jOr1kOisa!Vsa!Wsa&_sa!Ysa!^sa!Ssa#dsavsa!osa~PDuOX(_Oq1`Ox1nO!Y&fa~P'ZO|(iO!Y&fa~O!Y(jO~O|(iO!V%qO!W%pO!Y&fa~P$gOX(nOq1`Ox1nO!^&aa#o&aa%h&aa%k&aai&aa}&aa!o&aa&^&aa~P'ZO|(oO!^&aa#o&aa%h&aa%k&aai&aa}&aa!o&aa&^&aa~O!^(rO~O|(oO!V%qO!W%pO!^&aa~P$gO|(uO!V%qO!W%pO!^&ga~P$gO|(xO}&uX!^&uX!o&uX&^&uX~O}(|O!^)OO!o)PO&^({O~O}(|O!^)SO!o)TO&^)RO~O}(|O!^)WO!o)XO&^)VO~O}(|O!^)[O!o)]O&^)ZO~OX&dOquOxvO}%zi#Q%zi#o%zi%h%zi%k%zi&^%zi~P'ZO|)_O}%zi#Q%zi#o%zi%h%zi%k%zi&^%zi~O!h&jOj&|a%h&|a#d&|a#o&|a%k&|a#c&|a~O%h)dO~OX$SOc$TO&XWO~O|&qO}ya~OquOxvO~P'ZO|(oO#o&aa%h&aa%k&aai&aa}&aa!^&aa!o&aa&^&aa~P$gO|)iO#o%zX%h%zX%k%zX&^%zX~O&^$]O#oWi%hWi%kWi~O#o&ca%h&ca%k&cap&ca~P'ZO|)lO#o&ca%h&ca%k&cap&ca~OX)pOj)rO&XWO~O#c)sO~O&XWO#o'Pa%h'Pa%k'Pa~O|)uO#o'Pa%h'Pa%k'Pa~Oq1`Ox1nO#o&{a%h&{a%k&{a}&{a~P'ZO|)xO#o&{a%h&{a%k&{a}&{a~OX)zOc)zO&XWO~O&^*PO~Ov*SO#r*ROP#piX#pih#pij#piq#piu#pix#pi!R#pi!S#pi!V#pi!W#pi!Z#pi!_#pi!j#pi!z#pi!{#pi!|#pi#T#pi#V#pi#X#pi#Z#pi#]#pi#a#pi#c#pi#f#pi#g#pi#i#pi#k#pi#t#pi#w#pi#{#pi#}#pi$S#pi$V#pi$X#pi%e#pi&R#pi&S#pi&W#pi&X#pi&m#pi&n#pi&q#pi&t#pi&x#pi&y#pi&z#pi%g#pi%k#pi~Ov*TOP#siX#sih#sij#siq#siu#six#si!R#si!S#si!V#si!W#si!Z#si!_#si!j#si!z#si!{#si!|#si#T#si#V#si#X#si#Z#si#]#si#a#si#c#si#f#si#g#si#i#si#k#si#t#si#w#si#{#si#}#si$S#si$V#si$X#si%e#si&R#si&S#si&W#si&X#si&m#si&n#si&q#si&t#si&x#si&y#si&z#si%g#si%k#si~OX*VOp'Sa~P'ZO|*WOp'Sa~O|*WOp'Sa~P$gOp*[O~O%f*`O~Ov*cO#x'iO#y*bOP#viX#vih#vij#viq#viu#vix#vi!R#vi!S#vi!V#vi!W#vi!Z#vi!_#vi!j#vi!z#vi!{#vi!|#vi#T#vi#V#vi#X#vi#Z#vi#]#vi#a#vi#c#vi#f#vi#g#vi#i#vi#k#vi#t#vi#w#vi#{#vi#}#vi$S#vi$V#vi$X#vi%e#vi&R#vi&S#vi&W#vi&X#vi&m#vi&n#vi&q#vi&t#vi&x#vi&y#vi&z#vi%g#vi%k#vi~OX*fOq1`Ox1nO}$wO~P'ZOq1`Ox1nO}'Ta~P'ZO|*jO}'Ta~OX*nOc*oOi*rO&T*pO&XWO~O}$wO'W*tO~Oj'pO~Oj!nO}$wO~O%h*yO~O%h*{O~OX%[Oc%[Oq1`Ox1nOi&ha~P'ZO|+OOi&ha~Oq1`Ox1nO}+RO!Y&ka~P'ZO|+SO!Y&ka~Oq1`Ox1nO|+SO}+VO!Y&ka~P'ZOq1`Ox1nO|+SO!Y&ka~P'ZO|+SO}+VO!Y&ka~Oo1aOp1aOq1jOr1kOilimliuli|li!Vli!Wli&_li!Yli}li!^li#oli%hli%kli!Sli#dlivli!oli&^li~On1cO~P!KZOnli~P!KZOX(_Oi+[Oq1`Ox1nO~P'ZOp+^O~Oi+[O|+`O~Oi+aO~OX(_Oq1`Ox1nO!Y&fi~P'ZO|+bO!Y&fi~O!Y+cO~OX(nOq1`Ox1nO!^&ai#o&ai%h&ai%k&aii&ai}&ai!o&ai&^&ai~P'ZO|+fO!V%qO!W%pO!^&gi~O|+iO!^&ai#o&ai%h&ai%k&aii&ai}&ai!o&ai&^&ai~O!^+jO~Oc+lOq1`Ox1nO!^&gi~P'ZO|+fO!^&gi~O!^+nO~OX+pOq1`Ox1nO}&ua!^&ua!o&ua&^&ua~P'ZO|+qO}&ua!^&ua!o&ua&^&ua~O!_+tO&w+uO!^!pX~O!^+wO~O}(|O!^+xO~O}(|O!^+xO!o+yO~O}(|O!^+zO~O}(|O!^+zO!o+{O~O}(|O!^+|O~O}(|O!^+|O!o+}O~O}(|O!^,OO~O}(|O!^,OO!o,PO~OX&dOquOxvO}%zq#Q%zq#o%zq%h%zq%k%zq&^%zq~P'ZO|%Oi}%Oi#Q%Oi#o%Oi%h%Oi%k%Oi&^%Oi~P$gOX&dOquOxvO~P'ZOX&dOq1`Ox1nO#o%za%h%za%k%za&^%za~P'ZO|,QO#o%za%h%za%k%za&^%za~O|$qa#o$qa%h$qa%k$qap$qa~P$gO#o&ci%h&ci%k&cip&ci~P'ZO|,TO#o#`q%h#`q%k#`q~O|,UO#d,WO#o'OX%h'OX%k'OXi'OX~OX,YOj)rO&XWO~O&XWO#o'Pi%h'Pi%k'Pi~Oq1`Ox1nO#o&{i%h&{i%k&{i}&{i~P'ZO}$[O|#mX!Y#mX~O|,^O!Y'QX~O!Y,`O~Ov,cO#r*ROP#pqX#pqh#pqj#pqq#pqu#pqx#pq!R#pq!S#pq!V#pq!W#pq!Z#pq!_#pq!j#pq!z#pq!{#pq!|#pq#T#pq#V#pq#X#pq#Z#pq#]#pq#a#pq#c#pq#f#pq#g#pq#i#pq#k#pq#t#pq#w#pq#{#pq#}#pq$S#pq$V#pq$X#pq%e#pq&R#pq&S#pq&W#pq&X#pq&m#pq&n#pq&q#pq&t#pq&x#pq&y#pq&z#pq%g#pq%k#pq~Op%Ya|%Ya~P$gOX*VOp'Si~P'ZO|,jOp'Si~O|,tO}$wO#d,tO~O#y,vOP#vqX#vqh#vqj#vqq#vqu#vqx#vq!R#vq!S#vq!V#vq!W#vq!Z#vq!_#vq!j#vq!z#vq!{#vq!|#vq#T#vq#V#vq#X#vq#Z#vq#]#vq#a#vq#c#vq#f#vq#g#vq#i#vq#k#vq#t#vq#w#vq#{#vq#}#vq$S#vq$V#vq$X#vq%e#vq&R#vq&S#vq&W#vq&X#vq&m#vq&n#vq&q#vq&t#vq&x#vq&y#vq&z#vq%g#vq%k#vq~O#d,wO|%[a}%[a~Oq1`Ox1nO}'Ti~P'ZO|,yO}'Ti~O}$[O&^,{Oi'VX|'VX~O&XWOi'VX|'VX~O|-POi'UX~Oi-RO~O%f-UO~O!V%qO!W%pOi&ii|&ii~OX%[Oc%[Oq1`Ox1nOi&hi~P'ZO}-XO|$ta!Y$ta~Oq1`Ox1nO}-YO|$ta!Y$ta~P'ZOq1`Ox1nO}+RO!Y&ki~P'ZO|-]O!Y&ki~Oq1`Ox1nO|-]O!Y&ki~P'ZO|-]O}-`O!Y&ki~Oi$pi|$pi!Y$pi~P$gOX(_Oq1`Ox1nO~P'ZOp-bO~OX(_Oi-cOq1`Ox1nO~P'ZOX(_Oq1`Ox1nO!Y&fq~P'ZO|$oi!^$oi#o$oi%h$oi%k$oii$oi}$oi!o$oi&^$oi~P$gOX(nOq1`Ox1nO~P'ZOc+lOq1`Ox1nO!^&gq~P'ZO|-dO!^&gq~O!^-eO~OX(nOq1`Ox1nO!^&aq#o&aq%h&aq%k&aqi&aq}&aq!o&aq&^&aq~P'ZO}-fO~OX+pOq1`Ox1nO}&ui!^&ui!o&ui&^&ui~P'ZO|-kO}&ui!^&ui!o&ui&^&ui~O!_+tO&w+uO!^!pa~O}(|O!^-nO~O}(|O!^-oO~O}(|O!^-pO~O}(|O!^-qO~OX&dOq1`Ox1nO#o%zi%h%zi%k%zi&^%zi~P'ZO|-rO#o%zi%h%zi%k%zi&^%zi~O&XWO#o'Oa%h'Oa%k'Oai'Oa~O|-uO#o'Oa%h'Oa%k'Oai'Oa~Oi-xO~OX)zOc)zO&XWO!Y'Qa~O|-zO!Y'Qa~Op%Yi|%Yi~P$gOX*VO~P'ZOX*VOp'Sq~P'ZOv.OOP#uyX#uyh#uyj#uyq#uyu#uyx#uy!R#uy!S#uy!V#uy!W#uy!Z#uy!_#uy!j#uy!z#uy!{#uy!|#uy#T#uy#V#uy#X#uy#Z#uy#]#uy#a#uy#c#uy#f#uy#g#uy#i#uy#k#uy#t#uy#w#uy#{#uy#}#uy$S#uy$V#uy$X#uy%e#uy&R#uy&S#uy&W#uy&X#uy&m#uy&n#uy&q#uy&t#uy&x#uy&y#uy&z#uy%g#uy%k#uy~O%g.SO%k.SO~P`O#y.TOP#vyX#vyh#vyj#vyq#vyu#vyx#vy!R#vy!S#vy!V#vy!W#vy!Z#vy!_#vy!j#vy!z#vy!{#vy!|#vy#T#vy#V#vy#X#vy#Z#vy#]#vy#a#vy#c#vy#f#vy#g#vy#i#vy#k#vy#t#vy#w#vy#{#vy#}#vy$S#vy$V#vy$X#vy%e#vy&R#vy&S#vy&W#vy&X#vy&m#vy&n#vy&q#vy&t#vy&x#vy&y#vy&z#vy%g#vy%k#vy~O|.WO}$wO#d.WO~Oq1`Ox1nO}'Tq~P'ZO|.ZO}'Tq~O&^,{Oi'Va|'Va~OX*nOc*oO&T*pO&XWOi'Ua~O|._Oi'Ua~O$[.cO~OX%[Oc%[Oq1`Ox1nO~P'ZOq1`Ox1nO}.dO|$ti!Y$ti~P'ZOq1`Ox1nO|$ti!Y$ti~P'ZO}.dO|$ti!Y$ti~Oq1`Ox1nO}+RO~P'ZOq1`Ox1nO}+RO!Y&kq~P'ZO|.gO!Y&kq~Oq1`Ox1nO|.gO!Y&kq~P'ZOu.jO!V%qO!W%pOi&bq!Y&bq!^&bq|&bq~P!.TOc+lOq1`Ox1nO!^&gy~P'ZO|$ri!^$ri~P$gOc+lOq1`Ox1nO~P'ZOX+pOq1`Ox1nO~P'ZOX+pOq1`Ox1nO}&uq!^&uq!o&uq&^&uq~P'ZO}(|O!^.oO!o.pO&^.nO~OX&dOq1`Ox1nO#o%zq%h%zq%k%zq&^%zq~P'ZO#d.rO|%Ta#o%Ta%h%Ta%k%Tai%Ta~O&XWO#o'Oi%h'Oi%k'Oii'Oi~O|.tO#o'Oi%h'Oi%k'Oii'Oi~OX)zOc)zO&XWO!Y'Qi~Ov.xOP#u!RX#u!Rh#u!Rj#u!Rq#u!Ru#u!Rx#u!R!R#u!R!S#u!R!V#u!R!W#u!R!Z#u!R!_#u!R!j#u!R!z#u!R!{#u!R!|#u!R#T#u!R#V#u!R#X#u!R#Z#u!R#]#u!R#a#u!R#c#u!R#f#u!R#g#u!R#i#u!R#k#u!R#t#u!R#w#u!R#{#u!R#}#u!R$S#u!R$V#u!R$X#u!R%e#u!R&R#u!R&S#u!R&W#u!R&X#u!R&m#u!R&n#u!R&q#u!R&t#u!R&x#u!R&y#u!R&z#u!R%g#u!R%k#u!R~Oq1`Ox1nO}'Ty~P'ZOX*nOc*oO&T*pO&XWOi'Ui~O$[.cO%g/QO%k/QO~OX/[Oj/YO!Z/XO!_/ZO!j/TO!{/VO!|/VO&S/SO&XWO&m]O&n^O&q_O~Oq1`Ox1nO|$tq!Y$tq~P'ZO}/aO|$tq!Y$tq~Oq1`Ox1nO}+RO!Y&ky~P'ZO|/bO!Y&ky~Oq1`Ox/fO~P'ZOu.jO!V%qO!W%pOi&by!Y&by!^&by|&by~P!.TO}(|O!^/iO~O}(|O!^/iO!o/jO~O&XWO#o'Oq%h'Oq%k'Oqi'Oq~O|/lO#o'Oq%h'Oq%k'Oqi'Oq~OX*nOc*oO&T*pO&XWO~Oj/qO!h/oO|$]X#d$]X%|$]Xi$]X~Ou$]X}$]X!Y$]X!^$]X~P$)YO&R/sO&S/sOu$^X|$^X}$^X#d$^X%|$^X!Y$^Xi$^X!^$^X~O!j/uO~O|/yO#d/{O%|/vOu'XX}'XX!Y'XXi'XX~Oc0OO~P$%_Oj/qOu'YX|'YX}'YX#d'YX%|'YX!Y'YXi'YX!^'YX~Ou0SO}$wO~Oq1`Ox1nO|$ty!Y$ty~P'ZOq1`Ox1nO}+RO!Y&k!R~P'ZO|0WO!Y&k!R~Oi&eXu&eX!V&eX!W&eX!Y&eX!^&eX|&eX~P!.TOu.jO!V%qO!W%pOi&da!Y&da!^&da|&da~O}(|O!^0ZO~O&XWO#o'Oy%h'Oy%k'Oyi'Oy~O!h/oOj$dau$da|$da}$da#d$da%|$da!Y$dai$da!^$da~O!j0bO~O&R/sO&S/sOu$^a|$^a}$^a#d$^a%|$^a!Y$^ai$^a!^$^a~O%|/vOu$ba|$ba}$ba#d$ba!Y$bai$ba!^$ba~Ou'Xa}'Xa!Y'Xai'Xa~P$%RO|0gOu'Xa}'Xa!Y'Xai'Xa~O!Y0jO~Oi0jO~O}0lO~O!^0mO~Oq1`Ox1nO}+RO!Y&k!Z~P'ZO}0pO~O&^0qO~P$)YO|0rO#d/{O%|/vOi'[X~O|0rOi'[X~Oi0tO~O!j0uO~O#d/{Ou%`a|%`a}%`a%|%`a!Y%`ai%`a!^%`a~O#d/{O%|/vOu%da|%da}%da!Y%dai%da~Ou'Xi}'Xi!Y'Xii'Xi~P$%RO|0wO#d/{O%|/vO!^'Za~O}$la~P$gOi'[a~P$%RO|1POi'[a~Oc1RO!^'Zi~P$%_O|1TO!^'Zi~O|1TO#d/{O%|/vO!^'Zi~O#d/{O%|/vOi$ji|$ji~O&^1WO~P$)YO#d/{O%|/vOi%ca|%ca~Oi'[i~P$%RO}1ZO~Oc1RO!^'Zq~P$%_O|1]O!^'Zq~O#d/{O%|/vO|%bi!^%bi~Oc1RO~P$%_Oc1RO!^'Zy~P$%_O#d/{O%|/vOi$ki|$ki~O#d/{O%|/vO|%bq!^%bq~O|,QO#o%za%h%za%k%za&^%za~P$gOX&dOq1`Ox1nO~P'ZOp1eO~Oq1eO~P'ZO}1fO~Ov1gO~P!.TO&n&q&y&z&m&t&x&X&m~\",\n goto: \"!@f']PPPPPPPP'^P'f+R+k,U,p-]-yP.hP'f/X/X'fPPP'f2tPPPPPP2t5kPP5kP8O8X>kPP>n?`?cPP'f'fPP?{PP'f'fPP'f'f'f'f'f@P@y'fP@|PASE^H}IRPIUIlIpIsIwIzJOJRJV'fPPPJYJc'^P'^'^P'^P'^P'^P'^P'^'^'^P'^PP'^PP'^P'^PJiJuJ}PKUK[PKUPKUKUPPPKUPMjPMsM}NTMjPKUN^PKUPNeNkPNo! T! r!!]NoNo!!c!!pNoNoNoNo!#U!#[!#_!#d!#g!#q!#w!$T!$g!$m!$w!$}!%k!%q!%w!%}!&X!&_!&e!&k!&q!&w!'Z!'e!'k!'q!'w!(R!(X!(_!(e!(k!(u!({!)V!)]!)f!)l!){!*T!*_!*fPPPPPPPPPPPPPPPPP!*l!*o!*u!+O!+Y!+ePPPPPPPPPPPP!0[!1p!5s!9WPP!9`!9r!9{!:t!:k!:}!;T!;W!;Z!;^!;f!<VPPPPPPPPP!<Y!<iPPPP!=m!=y!>V!>]!>f!>i!>l!>r!>x!?O!?RP!?Z!?d!@`!@c]jOs#v$w*`,p(TeOTYZ[fistuwy}!O!S!U!V!W!Z!^!h!i!j!k!l!m!n!p!t!u!v!x!y#P#T#X#Y#c#g#j#m#s#v$X$Y$[$^$a$r$t$u$w%O%[%a%h%k%m%p%t%y%{&V&b&d&o&s&|'O'P'W'Z'_'b'i'l'}(O(R(T(U(Y(_(a(e(i(n(o(u(x)_)a)i)l)x*P*R*V*W*[*`*f*j*t+O+R+S+V+]+^+`+b+e+f+i+l+p+q+t,Q,S,T,[,i,j,p,x,y,|-W-X-Y-[-]-`-b-d-f-h-j-k-r.Z.].d.g.j/a/b0S0W0p1`1a1b1c1e1f1g1h1i1k1o}!hQ#r$P$b$q$}%r%w%}&O&t'a'x)`)k*U+Z+d,h-g0n1d!P!iQ#r$P$b$q$}%S%r%w%}&O&t'a'x)`)k*U+Z+d,h-g0n1d!R!jQ#r$P$b$q$}%S%T%r%w%}&O&t'a'x)`)k*U+Z+d,h-g0n1d!T!kQ#r$P$b$q$}%S%T%U%r%w%}&O&t'a'x)`)k*U+Z+d,h-g0n1d!V!lQ#r$P$b$q$}%S%T%U%V%r%w%}&O&t'a'x)`)k*U+Z+d,h-g0n1d!X!mQ#r$P$b$q$}%S%T%U%V%W%r%w%}&O&t'a'x)`)k*U+Z+d,h-g0n1d!]!mQ!s#r$P$b$q$}%S%T%U%V%W%X%r%w%}&O&t'a'x)`)k*U+Z+d,h-g0n1d(TTOTYZ[fistuwy}!O!S!U!V!W!Z!^!h!i!j!k!l!m!n!p!t!u!v!x!y#P#T#X#Y#c#g#j#m#s#v$X$Y$[$^$a$r$t$u$w%O%[%a%h%k%m%p%t%y%{&V&b&d&o&s&|'O'P'W'Z'_'b'i'l'}(O(R(T(U(Y(_(a(e(i(n(o(u(x)_)a)i)l)x*P*R*V*W*[*`*f*j*t+O+R+S+V+]+^+`+b+e+f+i+l+p+q+t,Q,S,T,[,i,j,p,x,y,|-W-X-Y-[-]-`-b-d-f-h-j-k-r.Z.].d.g.j/a/b0S0W0p1`1a1b1c1e1f1g1h1i1k1o&iVOYZ[isuw}!O!S!U!V!Z!n!p!t!u!v!x!y#c#g#j#m#s#v$Y$[$^$a$u$w%[%a%h%k%m%t%y%{&V&b&o&s'O'P'W'Z'b'i'l'}(O(R(T(U(Y(a(i(o(u(x)_)a)i)x*P*R*[*`*f*j*t+O+R+S+V+]+^+`+b+e+f+i+p+q+t,Q,T,[,p,x,y,|-W-X-Y-[-]-`-b-d-f-h-j-k-r.Z.].d.g.j/a/b0W0p1`1a1b1c1e1f1g1h1k1o%sXOYZ[isw}!O!S!U!V!Z!n!p#c#g#j#m#s#v$Y$[$^$a$u$w%[%a%k%m%t%y%{&V&b&o&s'O'P'W'Z'b'i'l'}(O(R(T(U(Y(a(i(o(u(x)_)a)i)x*P*R*[*`*f*j*t+O+R+S+V+]+`+b+e+f+i+p+q+t,Q,T,[,p,x,y,|-W-X-Y-[-]-`-d-f-h-j-k-r.Z.].d.g/a/b0W1f1g1hQ$VvQ0X/fR1l1n'zeOTYZ[fistuwy}!O!S!U!V!W!Z!^!h!i!j!k!l!m!p!t!u!v!x!y#P#T#X#Y#c#g#j#m#s#v$X$Y$[$^$a$r$t$u$w%O%[%a%h%k%m%p%t%y%{&V&b&d&o&s&|'O'P'W'Z'_'b'i'l'}(R(T(U(Y(_(a(e(i(n(o(u(x)_)a)i)l)x*P*R*V*W*[*`*f*j*t+R+S+V+]+^+`+b+e+f+i+l+p+q+t,Q,S,T,[,i,j,p,x,y,|-X-Y-[-]-`-b-d-f-h-j-k-r.Z.].d.g.j/a/b0S0W0p1`1a1b1c1e1f1g1h1i1k1oW#ym!P!Q$hW$Rv&q/f1nQ$j!RQ$n!TQ${![Q$|!]W%Z!n(O+O-WS&p$S$TQ'e$vQ)b&jQ)p'QU)q'S)r)sU)t'U)u,ZW){'Y,^-z.vQ*l'nW*m'p-P._/OQ,])zS-O*n*oY-t,U-u.s.t/lQ-w,WQ.U,tQ.Y,wQ.|.Wl/R.c/X/Y/[/w/y0O0g0l0q0v1R1W1ZQ/k.rQ0P/ZQ0^/qQ0i/{U0|0r1P1XX1S0w1T1[1]R&o$R!_!|YZ!U!V!p%a%m%t(R(T(U(a(i*R+R+S+V+]+`+b-X-Y-[-]-`.d.g/a/b0WR%k!{Q#QYQ&W#cQ&Z#gQ&]#jQ&_#mQ&x$^Q&{$aR-l+tT/e.j0p![!oQ!s#r$P$b$q$}%S%T%U%V%W%X%r%w%}&O&t'a'x)`)k*U+Z+d,h-g0n1dQ&m#zQ't$|R*x'uR'}%ZQ%d!rR0[/o(SdOTYZ[fistuwy}!O!S!U!V!W!Z!^!h!i!j!k!l!m!n!p!t!u!v!x!y#P#T#X#Y#c#g#j#m#s#v$X$Y$[$^$a$r$t$u$w%O%[%a%h%k%m%p%t%y%{&V&b&d&o&s&|'O'P'W'Z'_'b'i'l'}(O(R(T(U(Y(_(a(e(i(n(o(u(x)_)a)i)l)x*P*R*V*W*[*`*f*j*t+O+R+S+V+]+^+`+b+e+f+i+l+p+q+t,Q,S,T,[,i,j,p,x,y,|-W-X-Y-[-]-`-b-d-f-h-j-k-r.Z.].d.g.j/a/b0S0W0p1`1a1b1c1e1f1g1h1i1k1oS#pd#q!P/V.c/X/Y/Z/[/q/w/y0O0g0l0q0r0v0w1P1R1T1W1X1Z1[1](SdOTYZ[fistuwy}!O!S!U!V!W!Z!^!h!i!j!k!l!m!n!p!t!u!v!x!y#P#T#X#Y#c#g#j#m#s#v$X$Y$[$^$a$r$t$u$w%O%[%a%h%k%m%p%t%y%{&V&b&d&o&s&|'O'P'W'Z'_'b'i'l'}(O(R(T(U(Y(_(a(e(i(n(o(u(x)_)a)i)l)x*P*R*V*W*[*`*f*j*t+O+R+S+V+]+^+`+b+e+f+i+l+p+q+t,Q,S,T,[,i,j,p,x,y,|-W-X-Y-[-]-`-b-d-f-h-j-k-r.Z.].d.g.j/a/b0S0W0p1`1a1b1c1e1f1g1h1i1k1oT#pd#qT#d`#eR)Q&Wy(}&W&Z&]&_)P)Q)T)U)X)Y)])^+y+{+},P-l.p.q/jT+u(|+vR.q-lT#ha#iR)U&ZT#kb#lR)Y&]T#nc#oR)^&_Q$`xQ,]){R,}*mX$^x$_$`&zQ'[$nQ'r${Q'u$|R*_'eQ)|'YV-y,^-z.vZlOs$w*`,pXpOs*`,pQ$x!YQ']$oQ'^$pQ'o$zQ's$|Q*]'dQ*d'iQ*g'jQ*h'kQ*u'qS*w't'uQ,d*RQ,f*SQ,g*TQ,k*ZS,m*^*vQ,q*bQ,r*cS,s*e*fQ-T*xQ-|,cQ-},eQ.P,lS.Q,n,oQ.V,uQ.X,vQ.w.OQ.y.RQ.z.TQ.{.UQ/m.xQ/n.|Q0T/_R0o0UWpOs*`,pR#|oQ'q${S*^'e'rR,o*_Q,|*mR.],}Q*v'qQ,n*^R.R,oZnOos*`,pQ'w$}R*z'xT.a-U.bu/^.c/X/Y/[/q/w/y0O0g0l0q0r0v1P1R1W1X1Zt/^.c/X/Y/[/q/w/y0O0g0l0q0r0v1P1R1W1X1ZQ0P/ZX1S0w1T1[1]!P/U.c/X/Y/Z/[/q/w/y0O0g0l0q0r0v0w1P1R1T1W1X1Z1[1]Q/t/TR0c/ug/w/W/x0_0f0k0y0{0}1Y1^1_u/].c/X/Y/[/q/w/y0O0g0l0q0r0v1P1R1W1X1ZX/r/R/]0^0|R0`/qV1O0r1P1XR0U/_QsOS$Os,pR,p*`Q&r$UR)g&rS%z#W$WS(p%z(sT(s%}&tQ%n#OQ%u#SW(b%n%u(g(kQ(g%rR(k%wQ&}$bR)m&}Q(v&OQ+g(qT+m(v+gQ(P%]R+P(PS(S%`%aY+T(S+U-^.h/cU+U(T(U(VU-^+V+W+XS.h-_-`R/c.iQ#_^R&R#_Q#b_R&T#bQ#e`R&X#eQ(y&US+r(y+sR+s(zQ+v(|R-m+vQ#iaR&[#iQ#lbR&^#lQ#ocR&`#oQ#qdR&a#qQ#tgQ&c#rW&f#t&c)j,RQ)j&wR,R1dQ$_xS&y$_&zR&z$`Q'X$lR)y'XQ&k#yR)c&kQ$h!QR'R$hQ,V)qS-v,V.uR.u-wQ'V$jR)v'VQ,_)|R-{,_Q#wkR&h#wQ*Q']R,b*QQ'`$qS*X'`*YR*Y'aQ'h$xR*a'hQ'm$yS*k'm,zR,z*lQ-Q*qR.`-QWoOs*`,pR#{oQ.b-UR/P.bd/x/W0_0f0k0y0{0}1Y1^1_R0e/xU/p/R0^0|R0]/pQ0x0kS1U0x1VR1V0yS0s0_0`R1Q0sQ/z/WR0h/zR!`PXrOs*`,pWqOs*`,pR'f$wYkOs$w*`,pR&g#v[xOs#v$w*`,pR&x$^&hQOYZ[isuw}!O!S!U!V!Z!n!p!t!u!v!x!y#c#g#j#m#s#v$Y$[$^$a$u$w%[%a%h%k%m%t%y%{&V&b&o&s'O'P'W'Z'b'i'l'}(O(R(T(U(Y(a(i(o(u(x)_)a)i)x*P*R*[*`*f*j*t+O+R+S+V+]+^+`+b+e+f+i+p+q+t,Q,T,[,p,x,y,|-W-X-Y-[-]-`-b-d-f-h-j-k-r.Z.].d.g.j/a/b0W0p1`1a1b1c1e1f1g1h1k1oQ!sTQ#rfQ$PtU$by%p(eS$q!W$tQ$}!^Q%S!hQ%T!iQ%U!jQ%V!kQ%W!lQ%X!mQ%r#PQ%w#TQ%}#XQ&O#YQ&t$XQ'a$rQ'x%OQ)`&dU)k&|)l,SW*U'_*W,i,jQ+Z(_Q+d(nQ,h*VQ-g+lQ0n0SR1d1iQ#OYQ#SZQ$o!UQ$p!VQ%`!pQ(V%a^(^%m%t(a(i+]+`+b^+Q(R+S-[-].g/b0WQ+W(TQ+X(UQ,e*RQ-Z+RQ-_+VQ.e-XQ.f-YQ.i-`Q/`.dR0V/a[gOs#v$w*`,p!^!{YZ!U!V!p%a%m%t(R(T(U(a(i*R+R+S+V+]+`+b-X-Y-[-]-`.d.g/a/b0WQ#W[Q#uiS$Ww}Q$e!OW$l!S$a'b*[S$y!Z$uW%Y!n(O+O-WY&U#c#g#j#m+t`&e#s&b)_)a)i,Q-r1hQ&u$YQ&v$[Q&w$^Q'{%[Q(]%kW(m%y(o+e+iQ(q%{Q(z&VQ)e&oS)h&s1fQ)n'OQ)o'PU)w'W)x,[Q*O'ZQ*e'iY*i'l*j,x,y.ZQ*|'}S+Y(Y1gW+k(u+f-d-hW+o(x+q-j-kQ,a*PQ,u*fQ-S*tQ-i+pQ-s,TQ.[,|Q.m-fR.}.]hUOs#s#v$w&b&s(Y)_)a*`,p%Y!zYZ[iw}!O!S!U!V!Z!n!p#c#g#j#m$Y$[$^$a$u%[%a%k%m%t%y%{&V&o'O'P'W'Z'b'i'l'}(O(R(T(U(a(i(o(u(x)i)x*P*R*[*f*j*t+O+R+S+V+]+`+b+e+f+i+p+q+t,Q,T,[,x,y,|-W-X-Y-[-]-`-d-f-h-j-k-r.Z.].d.g/a/b0W1f1g1hQ$QuW%e!t!x1a1kQ%f!uQ%g!vQ%i!yQ%s1`S(X%h1eQ(Z1bQ([1cQ-a+^Q.l-bS/d.j0pR1m1oU$Uv/f1nR)f&q[hOs#v$w*`,pa!}Y#c#g#j#m$^$a+tQ#][Q$ZwR$d}Q%o#OQ%v#SQ%|#WQ'{%YQ(h%rQ(l%wQ(t%}Q(w&OQ+h(qQ-V*|Q.k-aQ/h.lR0Y/gQ$cyQ(d%pR+_(eQ/g.jR0z0pR#VZR#[[R%_!nQ%]!nV*}(O+O-W!]!qQ!s#r$P$b$q$}%S%T%U%V%W%X%r%w%}&O&t'a'x)`)k*U+Z+d,h-g0n1dR%b!pQ&W#cQ&Z#gQ&]#jQ&_#mR-l+tQ)O&WQ)S&ZQ)W&]Q)[&_S+x)P)QS+z)T)US+|)X)YS,O)])^Q-n+yQ-o+{Q-p+}Q-q,PQ.o-lS/i.p.qR0Z/jQ$m!SQ&{$aQ*Z'bR,l*[Q#zmQ$f!PQ$i!QR'T$hQ)p'SR,Y)sQ)p'SQ,X)rR,Y)sR$k!RR)}'YXqOs*`,pQ$s!WR'c$tQ$z!ZR'd$uR*s'pQ*q'pV.^-P._/OQ/_.cQ/|/XR/}/YU/W.c/X/YQ0R/[Q0_/qQ0d/wU0f/y0g0vQ0k0OQ0y0lQ0{0qU0}0r1P1XQ1Y1RQ1^1WR1_1ZR0Q/ZR0a/q\",\n nodeNames: \"⚠ print { { { { Comment Script AssignStatement * BinaryExpression BitOp BitOp BitOp BitOp ArithOp ArithOp @ ArithOp ** UnaryExpression ArithOp BitOp AwaitExpression await ) ( ParenthesizedExpression BinaryExpression or and CompareOp in not is UnaryExpression ConditionalExpression if else LambdaExpression lambda ParamList VariableName AssignOp , : NamedExpression AssignOp YieldExpression yield from TupleExpression ComprehensionExpression async for LambdaExpression ] [ ArrayExpression ArrayComprehensionExpression } { DictionaryExpression DictionaryComprehensionExpression SetExpression SetComprehensionExpression CallExpression ArgList AssignOp MemberExpression . PropertyName Number String FormatString FormatReplacement FormatSelfDoc FormatConversion FormatSpec FormatReplacement FormatSelfDoc FormatReplacement FormatSelfDoc FormatReplacement FormatSelfDoc FormatReplacement FormatSelfDoc ContinuedString Ellipsis None Boolean TypeDef AssignOp UpdateStatement UpdateOp ExpressionStatement DeleteStatement del PassStatement pass BreakStatement break ContinueStatement continue ReturnStatement return YieldStatement PrintStatement RaiseStatement raise ImportStatement import as ScopeStatement global nonlocal AssertStatement assert TypeDefinition type TypeParamList TypeParam StatementGroup ; IfStatement Body elif WhileStatement while ForStatement TryStatement try except finally WithStatement with FunctionDefinition def ParamList AssignOp TypeDef ClassDefinition class DecoratedStatement Decorator At MatchStatement match MatchBody MatchClause case CapturePattern LiteralPattern ArithOp ArithOp AsPattern OrPattern LogicOp AttributePattern SequencePattern MappingPattern StarPattern ClassPattern PatternArgList KeywordPattern KeywordPattern Guard\",\n maxTerm: 288,\n context: trackIndent,\n nodeProps: [\n [\"isolate\", -8,6,73,74,75,79,81,83,85,\"\"],\n [\"group\", -15,8,93,95,96,98,100,102,104,106,107,108,110,113,116,118,\"Statement Statement\",-22,10,20,23,27,42,51,52,58,59,62,63,64,65,66,69,72,73,74,87,88,89,90,\"Expression\",-10,122,124,127,129,130,134,136,141,143,146,\"Statement\",-9,151,152,155,156,158,159,160,161,162,\"Pattern\"],\n [\"openedBy\", 25,\"(\",56,\"[\",60,\"{\"],\n [\"closedBy\", 26,\")\",57,\"]\",61,\"}\"]\n ],\n propSources: [pythonHighlighting],\n skippedNodes: [0,6],\n repeatNodeCount: 38,\n tokenData: \"%-W#sR!`OX%TXY=|Y[%T[]=|]p%Tpq=|qr@_rsDOst!+|tu%Tuv!Nnvw#!|wx#$Wxy#:Uyz#;Yz{#<^{|#>x|}#@S}!O#AW!O!P#Ci!P!Q#N_!Q!R$!y!R![$&w![!]$1e!]!^$3s!^!_$4w!_!`$7c!`!a$8m!a!b%T!b!c$;U!c!d$<b!d!e$>W!e!h$<b!h!i$H[!i!t$<b!t!u%#r!u!w$<b!w!x$Fl!x!}$<b!}#O%%z#O#P?d#P#Q%'O#Q#R%(S#R#S$<b#S#T%T#T#U$<b#U#V$>W#V#Y$<b#Y#Z$H[#Z#f$<b#f#g%#r#g#i$<b#i#j$Fl#j#o$<b#o#p%)^#p#q%*S#q#r%+^#r#s%,S#s$g%T$g;'S$<b;'S;=`$>Q<%lO$<b!n%^]&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!n&^]&w!b&oSOr%Trs'Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!n'^]&w!b&oSOr%Trs(Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!f(^Z&w!b&oSOw(Vwx)Px#O(V#O#P+Z#P#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`/R<%lO(V!f)UZ&w!bOw(Vwx)wx#O(V#O#P+Z#P#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`/R<%lO(V!f)|Z&w!bOw(Vwx*ox#O(V#O#P+Z#P#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`/R<%lO(V!b*tT&w!bO#o*o#p#q*o#r;'S*o;'S;=`+T<%lO*o!b+WP;=`<%l*o!f+`W&w!bO#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`.d;=`<%l+x<%lO(VS+}V&oSOw+xwx,dx#O+x#O#P-c#P;'S+x;'S;=`.^<%lO+xS,gVOw+xwx,|x#O+x#O#P-c#P;'S+x;'S;=`.^<%lO+xS-PUOw+xx#O+x#O#P-c#P;'S+x;'S;=`.^<%lO+xS-fRO;'S+x;'S;=`-o;=`O+xS-tW&oSOw+xwx,dx#O+x#O#P-c#P;'S+x;'S;=`.^;=`<%l+x<%lO+xS.aP;=`<%l+x!f.iW&oSOw+xwx,dx#O+x#O#P-c#P;'S+x;'S;=`.^;=`<%l(V<%lO+x!f/UP;=`<%l(V!n/`]&w!b&rWOr%Trs&Vsw%Twx0Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!n0`]&w!b&rWOr%Trs&Vsw%Twx1Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!j1`Z&w!b&rWOr1Xrs2Rs#O1X#O#P3q#P#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`7i<%lO1X!j2WZ&w!bOr1Xrs2ys#O1X#O#P3q#P#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`7i<%lO1X!j3OZ&w!bOr1Xrs*os#O1X#O#P3q#P#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`7i<%lO1X!j3vW&w!bO#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`6z;=`<%l4`<%lO1XW4eV&rWOr4`rs4zs#O4`#O#P5y#P;'S4`;'S;=`6t<%lO4`W4}VOr4`rs5ds#O4`#O#P5y#P;'S4`;'S;=`6t<%lO4`W5gUOr4`s#O4`#O#P5y#P;'S4`;'S;=`6t<%lO4`W5|RO;'S4`;'S;=`6V;=`O4`W6[W&rWOr4`rs4zs#O4`#O#P5y#P;'S4`;'S;=`6t;=`<%l4`<%lO4`W6wP;=`<%l4`!j7PW&rWOr4`rs4zs#O4`#O#P5y#P;'S4`;'S;=`6t;=`<%l1X<%lO4`!j7lP;=`<%l1X!n7tW&w!bO#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=P;=`<%l8^<%lO%T[8eX&oS&rWOr8^rs9Qsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^[9VX&oSOr8^rs9rsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^[9wX&oSOr8^rs+xsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^[:iX&rWOr8^rs9Qsw8^wx;Ux#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^[;ZX&rWOr8^rs9Qsw8^wx4`x#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^[;yRO;'S8^;'S;=`<S;=`O8^[<ZY&oS&rWOr8^rs9Qsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y;=`<%l8^<%lO8^[<|P;=`<%l8^!n=WY&oS&rWOr8^rs9Qsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y;=`<%l%T<%lO8^!n=yP;=`<%l%T#s>Xc&w!b&oS&rW%u!TOX%TXY=|Y[%T[]=|]p%Tpq=|qr%Trs&Vsw%Twx/Xx#O%T#O#P?d#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#s?i[&w!bOY%TYZ=|Z]%T]^=|^#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=P;=`<%l8^<%lO%T!q@hd&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`Av!`#O%T#O#P7o#P#T%T#T#UBz#U#f%T#f#gBz#g#hBz#h#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!qBR]oR&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!qCV]!oR&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#cDXa&w!b&oS&msOYE^YZ%TZ]E^]^%T^rE^rs!)|swE^wxGpx#OE^#O#P!!u#P#oE^#o#p!#d#p#qE^#q#r!#d#r;'SE^;'S;=`!)v<%lOE^#cEia&w!b&oS&rW&msOYE^YZ%TZ]E^]^%T^rE^rsFnswE^wxGpx#OE^#O#P!!u#P#oE^#o#p!#d#p#qE^#q#r!#d#r;'SE^;'S;=`!)v<%lOE^#cFw]&w!b&oS&msOr%Trs'Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#cGya&w!b&rW&msOYE^YZ%TZ]E^]^%T^rE^rsFnswE^wxIOx#OE^#O#P!!u#P#oE^#o#p!#d#p#qE^#q#r!#d#r;'SE^;'S;=`!)v<%lOE^#cIXa&w!b&rW&msOYE^YZ%TZ]E^]^%T^rE^rsFnswE^wxJ^x#OE^#O#P!!u#P#oE^#o#p!#d#p#qE^#q#r!#d#r;'SE^;'S;=`!)v<%lOE^#_Jg_&w!b&rW&msOYJ^YZ1XZ]J^]^1X^rJ^rsKfs#OJ^#O#PL`#P#oJ^#o#pL}#p#qJ^#q#rL}#r;'SJ^;'S;=`!!o<%lOJ^#_KmZ&w!b&msOr1Xrs2ys#O1X#O#P3q#P#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`7i<%lO1X#_LeW&w!bO#oJ^#o#pL}#p#qJ^#q#rL}#r;'SJ^;'S;=`! r;=`<%lL}<%lOJ^{MUZ&rW&msOYL}YZ4`Z]L}]^4`^rL}rsMws#OL}#O#PNc#P;'SL};'S;=`! l<%lOL}{M|V&msOr4`rs5ds#O4`#O#P5y#P;'S4`;'S;=`6t<%lO4`{NfRO;'SL};'S;=`No;=`OL}{Nv[&rW&msOYL}YZ4`Z]L}]^4`^rL}rsMws#OL}#O#PNc#P;'SL};'S;=`! l;=`<%lL}<%lOL}{! oP;=`<%lL}#_! y[&rW&msOYL}YZ4`Z]L}]^4`^rL}rsMws#OL}#O#PNc#P;'SL};'S;=`! l;=`<%lJ^<%lOL}#_!!rP;=`<%lJ^#c!!zW&w!bO#oE^#o#p!#d#p#qE^#q#r!#d#r;'SE^;'S;=`!(q;=`<%l!#d<%lOE^!P!#m]&oS&rW&msOY!#dYZ8^Z]!#d]^8^^r!#drs!$fsw!#dwx!%Yx#O!#d#O#P!'Y#P;'S!#d;'S;=`!(k<%lO!#d!P!$mX&oS&msOr8^rs9rsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^!P!%a]&rW&msOY!#dYZ8^Z]!#d]^8^^r!#drs!$fsw!#dwx!&Yx#O!#d#O#P!'Y#P;'S!#d;'S;=`!(k<%lO!#d!P!&a]&rW&msOY!#dYZ8^Z]!#d]^8^^r!#drs!$fsw!#dwxL}x#O!#d#O#P!'Y#P;'S!#d;'S;=`!(k<%lO!#d!P!']RO;'S!#d;'S;=`!'f;=`O!#d!P!'o^&oS&rW&msOY!#dYZ8^Z]!#d]^8^^r!#drs!$fsw!#dwx!%Yx#O!#d#O#P!'Y#P;'S!#d;'S;=`!(k;=`<%l!#d<%lO!#d!P!(nP;=`<%l!#d#c!(z^&oS&rW&msOY!#dYZ8^Z]!#d]^8^^r!#drs!$fsw!#dwx!%Yx#O!#d#O#P!'Y#P;'S!#d;'S;=`!(k;=`<%lE^<%lO!#d#c!)yP;=`<%lE^#c!*V]&w!b&oS&msOr%Trs!+Osw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c!+ZZ&sW&w!b&oS&qsOw(Vwx)Px#O(V#O#P+Z#P#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`/R<%lO(V#s!,XaU!T&w!b&oS&rWOY!+|YZ%TZ]!+|]^%T^r!+|rs!-^sw!+|wx!:hx#O!+|#O#P!FW#P#o!+|#o#p!GT#p#q!+|#q#r!GT#r;'S!+|;'S;=`!Nh<%lO!+|#s!-gaU!T&w!b&oSOY!+|YZ%TZ]!+|]^%T^r!+|rs!.lsw!+|wx!:hx#O!+|#O#P!FW#P#o!+|#o#p!GT#p#q!+|#q#r!GT#r;'S!+|;'S;=`!Nh<%lO!+|#s!.uaU!T&w!b&oSOY!+|YZ%TZ]!+|]^%T^r!+|rs!/zsw!+|wx!:hx#O!+|#O#P!FW#P#o!+|#o#p!GT#p#q!+|#q#r!GT#r;'S!+|;'S;=`!Nh<%lO!+|#k!0T_U!T&w!b&oSOY!/zYZ(VZ]!/z]^(V^w!/zwx!1Sx#O!/z#O#P!4z#P#o!/z#o#p!5w#p#q!/z#q#r!5w#r;'S!/z;'S;=`!:b<%lO!/z#k!1Z_U!T&w!bOY!/zYZ(VZ]!/z]^(V^w!/zwx!2Yx#O!/z#O#P!4z#P#o!/z#o#p!5w#p#q!/z#q#r!5w#r;'S!/z;'S;=`!:b<%lO!/z#k!2a_U!T&w!bOY!/zYZ(VZ]!/z]^(V^w!/zwx!3`x#O!/z#O#P!4z#P#o!/z#o#p!5w#p#q!/z#q#r!5w#r;'S!/z;'S;=`!:b<%lO!/z#g!3gZU!T&w!bOY!3`YZ*oZ]!3`]^*o^#o!3`#o#p!4Y#p#q!3`#q#r!4Y#r;'S!3`;'S;=`!4t<%lO!3`!T!4_TU!TOY!4YZ]!4Y^;'S!4Y;'S;=`!4n<%lO!4Y!T!4qP;=`<%l!4Y#g!4wP;=`<%l!3`#k!5R[U!T&w!bOY!/zYZ(VZ]!/z]^(V^#o!/z#o#p!5w#p#q!/z#q#r!5w#r;'S!/z;'S;=`!9s;=`<%l+x<%lO!/z!X!6OZU!T&oSOY!5wYZ+xZ]!5w]^+x^w!5wwx!6qx#O!5w#O#P!8a#P;'S!5w;'S;=`!9m<%lO!5w!X!6vZU!TOY!5wYZ+xZ]!5w]^+x^w!5wwx!7ix#O!5w#O#P!8a#P;'S!5w;'S;=`!9m<%lO!5w!X!7nZU!TOY!5wYZ+xZ]!5w]^+x^w!5wwx!4Yx#O!5w#O#P!8a#P;'S!5w;'S;=`!9m<%lO!5w!X!8fWU!TOY!5wYZ+xZ]!5w]^+x^;'S!5w;'S;=`!9O;=`<%l+x<%lO!5w!X!9TW&oSOw+xwx,dx#O+x#O#P-c#P;'S+x;'S;=`.^;=`<%l!5w<%lO+x!X!9pP;=`<%l!5w#k!9xW&oSOw+xwx,dx#O+x#O#P-c#P;'S+x;'S;=`.^;=`<%l!/z<%lO+x#k!:eP;=`<%l!/z#s!:qaU!T&w!b&rWOY!+|YZ%TZ]!+|]^%T^r!+|rs!-^sw!+|wx!;vx#O!+|#O#P!FW#P#o!+|#o#p!GT#p#q!+|#q#r!GT#r;'S!+|;'S;=`!Nh<%lO!+|#s!<PaU!T&w!b&rWOY!+|YZ%TZ]!+|]^%T^r!+|rs!-^sw!+|wx!=Ux#O!+|#O#P!FW#P#o!+|#o#p!GT#p#q!+|#q#r!GT#r;'S!+|;'S;=`!Nh<%lO!+|#o!=__U!T&w!b&rWOY!=UYZ1XZ]!=U]^1X^r!=Urs!>^s#O!=U#O#P!@j#P#o!=U#o#p!Ag#p#q!=U#q#r!Ag#r;'S!=U;'S;=`!FQ<%lO!=U#o!>e_U!T&w!bOY!=UYZ1XZ]!=U]^1X^r!=Urs!?ds#O!=U#O#P!@j#P#o!=U#o#p!Ag#p#q!=U#q#r!Ag#r;'S!=U;'S;=`!FQ<%lO!=U#o!?k_U!T&w!bOY!=UYZ1XZ]!=U]^1X^r!=Urs!3`s#O!=U#O#P!@j#P#o!=U#o#p!Ag#p#q!=U#q#r!Ag#r;'S!=U;'S;=`!FQ<%lO!=U#o!@q[U!T&w!bOY!=UYZ1XZ]!=U]^1X^#o!=U#o#p!Ag#p#q!=U#q#r!Ag#r;'S!=U;'S;=`!Ec;=`<%l4`<%lO!=U!]!AnZU!T&rWOY!AgYZ4`Z]!Ag]^4`^r!Agrs!Bas#O!Ag#O#P!DP#P;'S!Ag;'S;=`!E]<%lO!Ag!]!BfZU!TOY!AgYZ4`Z]!Ag]^4`^r!Agrs!CXs#O!Ag#O#P!DP#P;'S!Ag;'S;=`!E]<%lO!Ag!]!C^ZU!TOY!AgYZ4`Z]!Ag]^4`^r!Agrs!4Ys#O!Ag#O#P!DP#P;'S!Ag;'S;=`!E]<%lO!Ag!]!DUWU!TOY!AgYZ4`Z]!Ag]^4`^;'S!Ag;'S;=`!Dn;=`<%l4`<%lO!Ag!]!DsW&rWOr4`rs4zs#O4`#O#P5y#P;'S4`;'S;=`6t;=`<%l!Ag<%lO4`!]!E`P;=`<%l!Ag#o!EhW&rWOr4`rs4zs#O4`#O#P5y#P;'S4`;'S;=`6t;=`<%l!=U<%lO4`#o!FTP;=`<%l!=U#s!F_[U!T&w!bOY!+|YZ%TZ]!+|]^%T^#o!+|#o#p!GT#p#q!+|#q#r!GT#r;'S!+|;'S;=`!Mq;=`<%l8^<%lO!+|!a!G^]U!T&oS&rWOY!GTYZ8^Z]!GT]^8^^r!GTrs!HVsw!GTwx!JVx#O!GT#O#P!LV#P;'S!GT;'S;=`!Mk<%lO!GT!a!H^]U!T&oSOY!GTYZ8^Z]!GT]^8^^r!GTrs!IVsw!GTwx!JVx#O!GT#O#P!LV#P;'S!GT;'S;=`!Mk<%lO!GT!a!I^]U!T&oSOY!GTYZ8^Z]!GT]^8^^r!GTrs!5wsw!GTwx!JVx#O!GT#O#P!LV#P;'S!GT;'S;=`!Mk<%lO!GT!a!J^]U!T&rWOY!GTYZ8^Z]!GT]^8^^r!GTrs!HVsw!GTwx!KVx#O!GT#O#P!LV#P;'S!GT;'S;=`!Mk<%lO!GT!a!K^]U!T&rWOY!GTYZ8^Z]!GT]^8^^r!GTrs!HVsw!GTwx!Agx#O!GT#O#P!LV#P;'S!GT;'S;=`!Mk<%lO!GT!a!L[WU!TOY!GTYZ8^Z]!GT]^8^^;'S!GT;'S;=`!Lt;=`<%l8^<%lO!GT!a!L{Y&oS&rWOr8^rs9Qsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y;=`<%l!GT<%lO8^!a!MnP;=`<%l!GT#s!MxY&oS&rWOr8^rs9Qsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y;=`<%l!+|<%lO8^#s!NkP;=`<%l!+|#b!Ny_&UQ&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#b#!T]#Qr&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#b##X_&OQ&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#$aa&w!b&rW&msOY#%fYZ%TZ]#%f]^%T^r#%frs#&vsw#%fwx#8Ux#O#%f#O#P#0}#P#o#%f#o#p#1l#p#q#%f#q#r#1l#r;'S#%f;'S;=`#8O<%lO#%f#c#%qa&w!b&oS&rW&msOY#%fYZ%TZ]#%f]^%T^r#%frs#&vsw#%fwx#/{x#O#%f#O#P#0}#P#o#%f#o#p#1l#p#q#%f#q#r#1l#r;'S#%f;'S;=`#8O<%lO#%f#c#'Pa&w!b&oS&msOY#%fYZ%TZ]#%f]^%T^r#%frs#(Usw#%fwx#/{x#O#%f#O#P#0}#P#o#%f#o#p#1l#p#q#%f#q#r#1l#r;'S#%f;'S;=`#8O<%lO#%f#c#(_a&w!b&oS&msOY#%fYZ%TZ]#%f]^%T^r#%frs#)dsw#%fwx#/{x#O#%f#O#P#0}#P#o#%f#o#p#1l#p#q#%f#q#r#1l#r;'S#%f;'S;=`#8O<%lO#%f#Z#)m_&w!b&oS&msOY#)dYZ(VZ]#)d]^(V^w#)dwx#*lx#O#)d#O#P#+f#P#o#)d#o#p#,T#p#q#)d#q#r#,T#r;'S#)d;'S;=`#/u<%lO#)d#Z#*sZ&w!b&msOw(Vwx)wx#O(V#O#P+Z#P#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`/R<%lO(V#Z#+kW&w!bO#o#)d#o#p#,T#p#q#)d#q#r#,T#r;'S#)d;'S;=`#.x;=`<%l#,T<%lO#)dw#,[Z&oS&msOY#,TYZ+xZ]#,T]^+x^w#,Twx#,}x#O#,T#O#P#-i#P;'S#,T;'S;=`#.r<%lO#,Tw#-SV&msOw+xwx,|x#O+x#O#P-c#P;'S+x;'S;=`.^<%lO+xw#-lRO;'S#,T;'S;=`#-u;=`O#,Tw#-|[&oS&msOY#,TYZ+xZ]#,T]^+x^w#,Twx#,}x#O#,T#O#P#-i#P;'S#,T;'S;=`#.r;=`<%l#,T<%lO#,Tw#.uP;=`<%l#,T#Z#/P[&oS&msOY#,TYZ+xZ]#,T]^+x^w#,Twx#,}x#O#,T#O#P#-i#P;'S#,T;'S;=`#.r;=`<%l#)d<%lO#,T#Z#/xP;=`<%l#)d#c#0U]&w!b&rW&msOr%Trs&Vsw%Twx0Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#1SW&w!bO#o#%f#o#p#1l#p#q#%f#q#r#1l#r;'S#%f;'S;=`#6y;=`<%l#1l<%lO#%f!P#1u]&oS&rW&msOY#1lYZ8^Z]#1l]^8^^r#1lrs#2nsw#1lwx#4nx#O#1l#O#P#5b#P;'S#1l;'S;=`#6s<%lO#1l!P#2u]&oS&msOY#1lYZ8^Z]#1l]^8^^r#1lrs#3nsw#1lwx#4nx#O#1l#O#P#5b#P;'S#1l;'S;=`#6s<%lO#1l!P#3u]&oS&msOY#1lYZ8^Z]#1l]^8^^r#1lrs#,Tsw#1lwx#4nx#O#1l#O#P#5b#P;'S#1l;'S;=`#6s<%lO#1l!P#4uX&rW&msOr8^rs9Qsw8^wx;Ux#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^!P#5eRO;'S#1l;'S;=`#5n;=`O#1l!P#5w^&oS&rW&msOY#1lYZ8^Z]#1l]^8^^r#1lrs#2nsw#1lwx#4nx#O#1l#O#P#5b#P;'S#1l;'S;=`#6s;=`<%l#1l<%lO#1l!P#6vP;=`<%l#1l#c#7S^&oS&rW&msOY#1lYZ8^Z]#1l]^8^^r#1lrs#2nsw#1lwx#4nx#O#1l#O#P#5b#P;'S#1l;'S;=`#6s;=`<%l#%f<%lO#1l#c#8RP;=`<%l#%f#c#8_]&w!b&rW&msOr%Trs&Vsw%Twx#9Wx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#9cZ&pS&w!b&rW&nsOr1Xrs2Rs#O1X#O#P3q#P#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`7i<%lO1X#c#:a]js&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!q#;e]iR&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#<iaXs&w!b&oS&rWOr%Trs&Vsw%Twx/Xxz%Tz{#=n{!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#=y_cR&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#?T_&Rs&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!q#@_]|R&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#s#Ac`&Ss&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`!a#Be!a#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#O#Bp]'W`&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#Cta!hQ&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!O%T!O!P#Dy!P!Q%T!Q![#GV![#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#ES_&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!O%T!O!P#FR!P#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#F^]!zs&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a#Gbi!jq&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!Q%T!Q![#GV![!g%T!g!h#IP!h!l%T!l!m#MZ!m#O%T#O#P7o#P#R%T#R#S#GV#S#X%T#X#Y#IP#Y#^%T#^#_#MZ#_#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a#IYc&w!b&oS&rWOr%Trs&Vsw%Twx/Xx{%T{|#Je|}%T}!O#Je!O!Q%T!Q![#Km![#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a#Jn_&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!Q%T!Q![#Km![#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a#Kxe!jq&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!Q%T!Q![#Km![!l%T!l!m#MZ!m#O%T#O#P7o#P#R%T#R#S#Km#S#^%T#^#_#MZ#_#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a#Mf]!jq&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#Nja&TR&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!P%T!P!Q$ o!Q!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#b$ z_&VQ&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$#Uw!jq&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!O%T!O!P$%o!P!Q%T!Q![$&w![!d%T!d!e$(w!e!g%T!g!h#IP!h!l%T!l!m#MZ!m!q%T!q!r$+m!r!z%T!z!{$.]!{#O%T#O#P7o#P#R%T#R#S$&w#S#U%T#U#V$(w#V#X%T#X#Y#IP#Y#^%T#^#_#MZ#_#c%T#c#d$+m#d#l%T#l#m$.]#m#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$%x_&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!Q%T!Q![#GV![#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$'Sk!jq&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!O%T!O!P$%o!P!Q%T!Q![$&w![!g%T!g!h#IP!h!l%T!l!m#MZ!m#O%T#O#P7o#P#R%T#R#S$&w#S#X%T#X#Y#IP#Y#^%T#^#_#MZ#_#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$)Qb&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!Q%T!Q!R$*Y!R!S$*Y!S#O%T#O#P7o#P#R%T#R#S$*Y#S#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$*eb!jq&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!Q%T!Q!R$*Y!R!S$*Y!S#O%T#O#P7o#P#R%T#R#S$*Y#S#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$+va&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!Q%T!Q!Y$,{!Y#O%T#O#P7o#P#R%T#R#S$,{#S#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$-Wa!jq&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!Q%T!Q!Y$,{!Y#O%T#O#P7o#P#R%T#R#S$,{#S#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$.fe&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!Q%T!Q![$/w![!c%T!c!i$/w!i#O%T#O#P7o#P#R%T#R#S$/w#S#T%T#T#Z$/w#Z#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$0Se!jq&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!Q%T!Q![$/w![!c%T!c!i$/w!i#O%T#O#P7o#P#R%T#R#S$/w#S#T%T#T#Z$/w#Z#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#s$1p_}!T&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`$2o!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!q$2z]&_R&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c$4O]#os&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c$5SaoR&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!^%T!^!_$6X!_!`Av!`!aAv!a#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#b$6d_&PQ&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c$7n_&^s&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`Av!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c$8x`oR&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`Av!`!a$9z!a#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#b$:V_&QQ&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c$;c_aQ$VP&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#s$<oe&w!b&oS&rW&l`&XsOr%Trs&Vsw%Twx/Xx!Q%T!Q![$<b![!c%T!c!}$<b!}#O%T#O#P7o#P#R%T#R#S$<b#S#T%T#T#o$<b#o#p8^#p#q%T#q#r8^#r$g%T$g;'S$<b;'S;=`$>Q<%lO$<b#s$>TP;=`<%l$<b#s$>ei&w!b&oS&rW&l`&XsOr%Trs$@Ssw%Twx$C`x!Q%T!Q![$<b![!c%T!c!t$<b!t!u$Fl!u!}$<b!}#O%T#O#P7o#P#R%T#R#S$<b#S#T%T#T#f$<b#f#g$Fl#g#o$<b#o#p8^#p#q%T#q#r8^#r$g%T$g;'S$<b;'S;=`$>Q<%lO$<b#c$@]a&w!b&oS&msOYE^YZ%TZ]E^]^%T^rE^rs$AbswE^wxGpx#OE^#O#P!!u#P#oE^#o#p!#d#p#qE^#q#r!#d#r;'SE^;'S;=`!)v<%lOE^#c$Ak]&w!b&oS&msOr%Trs$Bdsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#Z$BmZ&w!b&oS&qsOw(Vwx)Px#O(V#O#P+Z#P#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`/R<%lO(V#c$Cia&w!b&rW&msOY#%fYZ%TZ]#%f]^%T^r#%frs#&vsw#%fwx$Dnx#O#%f#O#P#0}#P#o#%f#o#p#1l#p#q#%f#q#r#1l#r;'S#%f;'S;=`#8O<%lO#%f#c$Dw]&w!b&rW&msOr%Trs&Vsw%Twx$Epx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#_$EyZ&w!b&rW&nsOr1Xrs2Rs#O1X#O#P3q#P#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`7i<%lO1X#s$Fye&w!b&oS&rW&l`&XsOr%Trs$@Ssw%Twx$C`x!Q%T!Q![$<b![!c%T!c!}$<b!}#O%T#O#P7o#P#R%T#R#S$<b#S#T%T#T#o$<b#o#p8^#p#q%T#q#r8^#r$g%T$g;'S$<b;'S;=`$>Q<%lO$<b#s$Hii&w!b&oS&rW&l`&XsOr%Trs$JWsw%Twx$MUx!Q%T!Q![$<b![!c%T!c!t$<b!t!u%!S!u!}$<b!}#O%T#O#P7o#P#R%T#R#S$<b#S#T%T#T#f$<b#f#g%!S#g#o$<b#o#p8^#p#q%T#q#r8^#r$g%T$g;'S$<b;'S;=`$>Q<%lO$<b#c$Ja]&w!b&oS&xsOr%Trs$KYsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c$Ka]&w!b&oSOr%Trs$LYsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#Z$LcZ&w!b&oS&zsOw(Vwx)Px#O(V#O#P+Z#P#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`/R<%lO(V#c$M_]&w!b&rW&tsOr%Trs&Vsw%Twx$NWx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c$N_]&w!b&rWOr%Trs&Vsw%Twx% Wx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#_% aZ&w!b&rW&ysOr1Xrs2Rs#O1X#O#P3q#P#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`7i<%lO1X#s%!ae&w!b&oS&rW&l`&XsOr%Trs$JWsw%Twx$MUx!Q%T!Q![$<b![!c%T!c!}$<b!}#O%T#O#P7o#P#R%T#R#S$<b#S#T%T#T#o$<b#o#p8^#p#q%T#q#r8^#r$g%T$g;'S$<b;'S;=`$>Q<%lO$<b#s%$Pm&w!b&oS&rW&l`&XsOr%Trs$@Ssw%Twx$C`x!Q%T!Q![$<b![!c%T!c!h$<b!h!i%!S!i!t$<b!t!u$Fl!u!}$<b!}#O%T#O#P7o#P#R%T#R#S$<b#S#T%T#T#U$<b#U#V$Fl#V#Y$<b#Y#Z%!S#Z#o$<b#o#p8^#p#q%T#q#r8^#r$g%T$g;'S$<b;'S;=`$>Q<%lO$<b#c%&V]!Zs&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!q%'Z]!YR&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#b%(__%}Q&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a%)gX!_#T&oS&rWOr8^rs9Qsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^#c%*__%|R&w!b&oS&rWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!q%+gX!^!e&oS&rWOr8^rs9Qsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^#a%,_]&Wq&w!b&oS&rWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T\",\n tokenizers: [legacyPrint, indentation, newlines, formatString1, formatString2, formatString1l, formatString2l, 0, 1, 2, 3, 4, 5, 6],\n topRules: {\"Script\":[0,7]},\n specialized: [{term: 239, get: (value) => spec_identifier[value] || -1}],\n tokenPrec: 7500\n});\n\nexport { parser };\n","import { parser } from '@lezer/python';\nimport { syntaxTree, LRLanguage, indentNodeProp, delimitedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\nimport { NodeWeakMap, IterMode } from '@lezer/common';\nimport { snippetCompletion, ifNotIn, completeFromList } from '@codemirror/autocomplete';\n\nconst cache = /*@__PURE__*/new NodeWeakMap();\nconst ScopeNodes = /*@__PURE__*/new Set([\n \"Script\", \"Body\",\n \"FunctionDefinition\", \"ClassDefinition\", \"LambdaExpression\",\n \"ForStatement\", \"MatchClause\"\n]);\nfunction defID(type) {\n return (node, def, outer) => {\n if (outer)\n return false;\n let id = node.node.getChild(\"VariableName\");\n if (id)\n def(id, type);\n return true;\n };\n}\nconst gatherCompletions = {\n FunctionDefinition: /*@__PURE__*/defID(\"function\"),\n ClassDefinition: /*@__PURE__*/defID(\"class\"),\n ForStatement(node, def, outer) {\n if (outer)\n for (let child = node.node.firstChild; child; child = child.nextSibling) {\n if (child.name == \"VariableName\")\n def(child, \"variable\");\n else if (child.name == \"in\")\n break;\n }\n },\n ImportStatement(_node, def) {\n var _a, _b;\n let { node } = _node;\n let isFrom = ((_a = node.firstChild) === null || _a === void 0 ? void 0 : _a.name) == \"from\";\n for (let ch = node.getChild(\"import\"); ch; ch = ch.nextSibling) {\n if (ch.name == \"VariableName\" && ((_b = ch.nextSibling) === null || _b === void 0 ? void 0 : _b.name) != \"as\")\n def(ch, isFrom ? \"variable\" : \"namespace\");\n }\n },\n AssignStatement(node, def) {\n for (let child = node.node.firstChild; child; child = child.nextSibling) {\n if (child.name == \"VariableName\")\n def(child, \"variable\");\n else if (child.name == \":\" || child.name == \"AssignOp\")\n break;\n }\n },\n ParamList(node, def) {\n for (let prev = null, child = node.node.firstChild; child; child = child.nextSibling) {\n if (child.name == \"VariableName\" && (!prev || !/\\*|AssignOp/.test(prev.name)))\n def(child, \"variable\");\n prev = child;\n }\n },\n CapturePattern: /*@__PURE__*/defID(\"variable\"),\n AsPattern: /*@__PURE__*/defID(\"variable\"),\n __proto__: null\n};\nfunction getScope(doc, node) {\n let cached = cache.get(node);\n if (cached)\n return cached;\n let completions = [], top = true;\n function def(node, type) {\n let name = doc.sliceString(node.from, node.to);\n completions.push({ label: name, type });\n }\n node.cursor(IterMode.IncludeAnonymous).iterate(node => {\n if (node.name) {\n let gather = gatherCompletions[node.name];\n if (gather && gather(node, def, top) || !top && ScopeNodes.has(node.name))\n return false;\n top = false;\n }\n else if (node.to - node.from > 8192) {\n // Allow caching for bigger internal nodes\n for (let c of getScope(doc, node.node))\n completions.push(c);\n return false;\n }\n });\n cache.set(node, completions);\n return completions;\n}\nconst Identifier = /^[\\w\\xa1-\\uffff][\\w\\d\\xa1-\\uffff]*$/;\nconst dontComplete = [\"String\", \"FormatString\", \"Comment\", \"PropertyName\"];\n/**\nCompletion source that looks up locally defined names in\nPython code.\n*/\nfunction localCompletionSource(context) {\n let inner = syntaxTree(context.state).resolveInner(context.pos, -1);\n if (dontComplete.indexOf(inner.name) > -1)\n return null;\n let isWord = inner.name == \"VariableName\" ||\n inner.to - inner.from < 20 && Identifier.test(context.state.sliceDoc(inner.from, inner.to));\n if (!isWord && !context.explicit)\n return null;\n let options = [];\n for (let pos = inner; pos; pos = pos.parent) {\n if (ScopeNodes.has(pos.name))\n options = options.concat(getScope(context.state.doc, pos));\n }\n return {\n options,\n from: isWord ? inner.from : context.pos,\n validFor: Identifier\n };\n}\nconst globals = /*@__PURE__*/[\n \"__annotations__\", \"__builtins__\", \"__debug__\", \"__doc__\", \"__import__\", \"__name__\",\n \"__loader__\", \"__package__\", \"__spec__\",\n \"False\", \"None\", \"True\"\n].map(n => ({ label: n, type: \"constant\" })).concat(/*@__PURE__*/[\n \"ArithmeticError\", \"AssertionError\", \"AttributeError\", \"BaseException\", \"BlockingIOError\",\n \"BrokenPipeError\", \"BufferError\", \"BytesWarning\", \"ChildProcessError\", \"ConnectionAbortedError\",\n \"ConnectionError\", \"ConnectionRefusedError\", \"ConnectionResetError\", \"DeprecationWarning\",\n \"EOFError\", \"Ellipsis\", \"EncodingWarning\", \"EnvironmentError\", \"Exception\", \"FileExistsError\",\n \"FileNotFoundError\", \"FloatingPointError\", \"FutureWarning\", \"GeneratorExit\", \"IOError\",\n \"ImportError\", \"ImportWarning\", \"IndentationError\", \"IndexError\", \"InterruptedError\",\n \"IsADirectoryError\", \"KeyError\", \"KeyboardInterrupt\", \"LookupError\", \"MemoryError\",\n \"ModuleNotFoundError\", \"NameError\", \"NotADirectoryError\", \"NotImplemented\", \"NotImplementedError\",\n \"OSError\", \"OverflowError\", \"PendingDeprecationWarning\", \"PermissionError\", \"ProcessLookupError\",\n \"RecursionError\", \"ReferenceError\", \"ResourceWarning\", \"RuntimeError\", \"RuntimeWarning\",\n \"StopAsyncIteration\", \"StopIteration\", \"SyntaxError\", \"SyntaxWarning\", \"SystemError\",\n \"SystemExit\", \"TabError\", \"TimeoutError\", \"TypeError\", \"UnboundLocalError\", \"UnicodeDecodeError\",\n \"UnicodeEncodeError\", \"UnicodeError\", \"UnicodeTranslateError\", \"UnicodeWarning\", \"UserWarning\",\n \"ValueError\", \"Warning\", \"ZeroDivisionError\"\n].map(n => ({ label: n, type: \"type\" }))).concat(/*@__PURE__*/[\n \"bool\", \"bytearray\", \"bytes\", \"classmethod\", \"complex\", \"float\", \"frozenset\", \"int\", \"list\",\n \"map\", \"memoryview\", \"object\", \"range\", \"set\", \"staticmethod\", \"str\", \"super\", \"tuple\", \"type\"\n].map(n => ({ label: n, type: \"class\" }))).concat(/*@__PURE__*/[\n \"abs\", \"aiter\", \"all\", \"anext\", \"any\", \"ascii\", \"bin\", \"breakpoint\", \"callable\", \"chr\",\n \"compile\", \"delattr\", \"dict\", \"dir\", \"divmod\", \"enumerate\", \"eval\", \"exec\", \"exit\", \"filter\",\n \"format\", \"getattr\", \"globals\", \"hasattr\", \"hash\", \"help\", \"hex\", \"id\", \"input\", \"isinstance\",\n \"issubclass\", \"iter\", \"len\", \"license\", \"locals\", \"max\", \"min\", \"next\", \"oct\", \"open\",\n \"ord\", \"pow\", \"print\", \"property\", \"quit\", \"repr\", \"reversed\", \"round\", \"setattr\", \"slice\",\n \"sorted\", \"sum\", \"vars\", \"zip\"\n].map(n => ({ label: n, type: \"function\" })));\nconst snippets = [\n /*@__PURE__*/snippetCompletion(\"def ${name}(${params}):\\n\\t${}\", {\n label: \"def\",\n detail: \"function\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"for ${name} in ${collection}:\\n\\t${}\", {\n label: \"for\",\n detail: \"loop\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"while ${}:\\n\\t${}\", {\n label: \"while\",\n detail: \"loop\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"try:\\n\\t${}\\nexcept ${error}:\\n\\t${}\", {\n label: \"try\",\n detail: \"/ except block\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"if ${}:\\n\\t\\n\", {\n label: \"if\",\n detail: \"block\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"if ${}:\\n\\t${}\\nelse:\\n\\t${}\", {\n label: \"if\",\n detail: \"/ else block\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"class ${name}:\\n\\tdef __init__(self, ${params}):\\n\\t\\t\\t${}\", {\n label: \"class\",\n detail: \"definition\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"import ${module}\", {\n label: \"import\",\n detail: \"statement\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"from ${module} import ${names}\", {\n label: \"from\",\n detail: \"import\",\n type: \"keyword\"\n })\n];\n/**\nAutocompletion for built-in Python globals and keywords.\n*/\nconst globalCompletion = /*@__PURE__*/ifNotIn(dontComplete, /*@__PURE__*/completeFromList(/*@__PURE__*/globals.concat(snippets)));\n\nfunction innerBody(context) {\n let { node, pos } = context;\n let lineIndent = context.lineIndent(pos, -1);\n let found = null;\n for (;;) {\n let before = node.childBefore(pos);\n if (!before) {\n break;\n }\n else if (before.name == \"Comment\") {\n pos = before.from;\n }\n else if (before.name == \"Body\") {\n if (context.baseIndentFor(before) + context.unit <= lineIndent)\n found = before;\n node = before;\n }\n else if (before.type.is(\"Statement\")) {\n node = before;\n }\n else {\n break;\n }\n }\n return found;\n}\nfunction indentBody(context, node) {\n let base = context.baseIndentFor(node);\n let line = context.lineAt(context.pos, -1), to = line.from + line.text.length;\n // Don't consider blank, deindented lines at the end of the\n // block part of the block\n if (/^\\s*($|#)/.test(line.text) &&\n context.node.to < to + 100 &&\n !/\\S/.test(context.state.sliceDoc(to, context.node.to)) &&\n context.lineIndent(context.pos, -1) <= base)\n return null;\n // A normally deindenting keyword that appears at a higher\n // indentation than the block should probably be handled by the next\n // level\n if (/^\\s*(else:|elif |except |finally:)/.test(context.textAfter) && context.lineIndent(context.pos, -1) > base)\n return null;\n return base + context.unit;\n}\n/**\nA language provider based on the [Lezer Python\nparser](https://github.com/lezer-parser/python), extended with\nhighlighting and indentation information.\n*/\nconst pythonLanguage = /*@__PURE__*/LRLanguage.define({\n name: \"python\",\n parser: /*@__PURE__*/parser.configure({\n props: [\n /*@__PURE__*/indentNodeProp.add({\n Body: context => {\n var _a;\n let inner = innerBody(context);\n return (_a = indentBody(context, inner || context.node)) !== null && _a !== void 0 ? _a : context.continue();\n },\n IfStatement: cx => /^\\s*(else:|elif )/.test(cx.textAfter) ? cx.baseIndent : cx.continue(),\n \"ForStatement WhileStatement\": cx => /^\\s*else:/.test(cx.textAfter) ? cx.baseIndent : cx.continue(),\n TryStatement: cx => /^\\s*(except |finally:|else:)/.test(cx.textAfter) ? cx.baseIndent : cx.continue(),\n \"TupleExpression ComprehensionExpression ParamList ArgList ParenthesizedExpression\": /*@__PURE__*/delimitedIndent({ closing: \")\" }),\n \"DictionaryExpression DictionaryComprehensionExpression SetExpression SetComprehensionExpression\": /*@__PURE__*/delimitedIndent({ closing: \"}\" }),\n \"ArrayExpression ArrayComprehensionExpression\": /*@__PURE__*/delimitedIndent({ closing: \"]\" }),\n \"String FormatString\": () => null,\n Script: context => {\n var _a;\n let inner = innerBody(context);\n return (_a = (inner && indentBody(context, inner))) !== null && _a !== void 0 ? _a : context.continue();\n }\n }),\n /*@__PURE__*/foldNodeProp.add({\n \"ArrayExpression DictionaryExpression SetExpression TupleExpression\": foldInside,\n Body: (node, state) => ({ from: node.from + 1, to: node.to - (node.to == state.doc.length ? 0 : 1) })\n })\n ],\n }),\n languageData: {\n closeBrackets: {\n brackets: [\"(\", \"[\", \"{\", \"'\", '\"', \"'''\", '\"\"\"'],\n stringPrefixes: [\"f\", \"fr\", \"rf\", \"r\", \"u\", \"b\", \"br\", \"rb\",\n \"F\", \"FR\", \"RF\", \"R\", \"U\", \"B\", \"BR\", \"RB\"]\n },\n commentTokens: { line: \"#\" },\n indentOnInput: /^\\s*([\\}\\]\\)]|else:|elif |except |finally:)$/\n }\n});\n/**\nPython language support.\n*/\nfunction python() {\n return new LanguageSupport(pythonLanguage, [\n pythonLanguage.data.of({ autocomplete: localCompletionSource }),\n pythonLanguage.data.of({ autocomplete: globalCompletion }),\n ]);\n}\n\nexport { globalCompletion, localCompletionSource, python, pythonLanguage };\n"],"names":["Stack","constructor","p","stack","state","reducePos","pos","score","buffer","bufferBase","curContext","lookAhead","parent","this","toString","filter","_","i","concat","start","cx","parser","context","StackContext","pushState","push","length","reduce","action","_a","depth","type","dPrec","dynamicPrecedence","getGoto","minRepeatTerm","storeNode","reduceContext","base","ranges","from","size","nodeSet","types","isAnonymous","lastBigReductionStart","bigReductionCount","lastBigReductionSize","count","stateFlag","baseStateID","pop","term","end","isReduce","cur","top","index","shift","nextState","maxNode","shiftContext","apply","next","nextStart","nextEnd","useNode","value","reused","updateContext","tracker","reuse","stream","reset","split","off","slice","recoverByDelete","isNode","canShift","sim","SimulatedStack","stateSlot","hasAction","recoverByInsert","nextStates","best","s","some","v","result","forceReduce","validAction","target","backup","findForcedReduction","seen","explore","includes","allActions","rDepth","found","forceAll","deadEnd","data","restart","sameState","other","dialectEnabled","dialectID","dialect","flags","emitContext","last","hash","emitLookAhead","newCx","setLookAhead","close","strict","goto","StackBufferCursor","maybeNext","create","id","fork","decodeArray","input","Type","Uint16Array","array","out","charCodeAt","stop","digit","CachedToken","extended","mask","nullToken","InputStream","chunk","chunkOff","chunk2","chunk2Pos","token","rangeIndex","chunkPos","range","to","readNext","resolveOffset","offset","assoc","clipPos","Math","max","peek","idx","resolved","acceptToken","endOffset","RangeError","acceptTokenTo","endPos","getChunk","nextChunk","advance","n","setDone","read","r","min","TokenGroup","group","precTable","precOffset","groupMask","scan","accEnd","allows","overrides","low","high","mid","readToken","tokenPrecTable","prototype","contextual","fallback","extend","ExternalTokenizer","options","findOffset","prev","tableData","tableOffset","iPrev","verbose","process","env","test","LOG","stackIDs","cutAt","tree","side","cursor","IterMode","IncludeAnonymous","moveTo","childBefore","childAfter","isError","prevSibling","nextSibling","FragmentCursor","fragments","fragment","safeFrom","safeTo","trees","nextFragment","fr","openStart","openEnd","nodeAt","children","positions","Tree","prop","NodeProp","TokenCache","tokens","mainToken","actions","tokenizers","map","getActions","actionIndex","main","tokenizer","updateCachedToken","startIndex","addActions","eofTerm","getMainToken","specialized","specializers","putAction","set","pair","Parse","recovering","nextStackID","minStackPos","stoppedAt","topTerm","stacks","bufferLength","parsedPos","stopped","stoppedTokens","newStacks","advanceStack","tok","finished","findFinished","console","log","stackID","stackToTree","getName","SyntaxError","runRecovery","maxRemaining","sort","a","b","outer","j","splice","stopAt","strictCx","cxHash","cached","match","contextHash","inner","defaultReduce","localStack","advanceFully","pushStackDedup","restarted","tokenEnd","force","forceBase","insert","build","topID","maxBufferLength","minRepeatType","WeakMap","get","String","fromCodePoint","Dialect","source","disabled","x","LRParser","Parser","spec","super","wrappers","version","nodeNames","repeatNodeCount","topTerms","Object","keys","topRules","nodeProps","setProp","nodeID","deserialize","propSpec","NodeSet","name","NodeType","define","undefined","props","indexOf","error","skipped","skippedNodes","propSources","DefaultBufferLength","tokenArray","tokenData","specializerSpecs","getSpecializer","states","Uint32Array","stateData","maxTerm","dialects","dynamicPrecedences","tokenPrec","termNames","parseDialect","createParse","parse","w","loose","table","groupTag","terminal","slot","flag","deflt","configure","config","copy","assign","info","t","find","external","contextTracker","wrap","hasWrappers","topNode","prec","values","part","Uint8Array","bracketed","Set","isLineBreak","ch","newlines","spaces","indentation","cDepth","chars","IndentLevel","topIndent","trackIndent","has","space","countIndent","legacyPrint","fromCharCode","formatString","quote","len","content","brace","formatString1","formatString2","formatString1l","formatString2l","pythonHighlighting","styleTags","tags","modifier","controlKeyword","operatorKeyword","definitionKeyword","import","moduleKeyword","keyword","Boolean","bool","None","null","VariableName","variableName","function","definition","className","PropertyName","propertyName","Comment","lineComment","Number","number","string","FormatString","special","UpdateOp","updateOperator","arithmeticOperator","BitOp","bitwiseOperator","CompareOp","compareOperator","AssignOp","definitionOperator","Ellipsis","punctuation","At","meta","paren","squareBracket","derefOperator","separator","spec_identifier","__proto__","await","or","and","in","not","is","if","else","lambda","yield","async","for","True","False","del","pass","break","continue","return","raise","as","global","nonlocal","assert","elif","while","try","except","finally","with","def","class","case","Script","cache","NodeWeakMap","ScopeNodes","defID","node","getChild","gatherCompletions","FunctionDefinition","ClassDefinition","ForStatement","child","firstChild","ImportStatement","_node","_b","isFrom","AssignStatement","ParamList","CapturePattern","AsPattern","getScope","doc","completions","sliceString","label","iterate","gather","c","Identifier","dontComplete","localCompletionSource","syntaxTree","resolveInner","isWord","sliceDoc","explicit","validFor","globals","snippets","snippetCompletion","detail","globalCompletion","ifNotIn","completeFromList","innerBody","lineIndent","before","baseIndentFor","unit","indentBody","line","lineAt","text","textAfter","pythonLanguage","LRLanguage","indentNodeProp","add","Body","IfStatement","baseIndent","TryStatement","delimitedIndent","closing","foldNodeProp","foldInside","languageData","closeBrackets","brackets","stringPrefixes","commentTokens","indentOnInput","python","LanguageSupport","of","autocomplete"],"mappings":"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","x_google_ignoreList":[0,1,2]}
\ No newline at end of file
import{Facet as t,EditorState as e,StateEffect as r,StateField as n,countColumn as i,RangeSet as s,combineConfig as o,Prec as l,RangeSetBuilder as a}from"./codemirror_state-BKbyfKsm.js";import{V as h,l as f,E as u,a as c,W as d,p,D as g,G as m,S as b}from"./codemirror_view-C0PMO2z_.js";const x=1024;let k=0;class y{constructor(t,e){this.from=t,this.to=e}}class w{constructor(t={}){this.id=k++,this.perNode=!!t.perNode,this.deserialize=t.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")})}add(t){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return"function"!=typeof t&&(t=A.match(t)),e=>{let r=t(e);return void 0===r?null:[this,r]}}}w.closedBy=new w({deserialize:t=>t.split(" ")}),w.openedBy=new w({deserialize:t=>t.split(" ")}),w.group=new w({deserialize:t=>t.split(" ")}),w.isolate=new w({deserialize:t=>{if(t&&"rtl"!=t&&"ltr"!=t&&"auto"!=t)throw new RangeError("Invalid value for isolate: "+t);return t||"auto"}}),w.contextHash=new w({perNode:!0}),w.lookAhead=new w({perNode:!0}),w.mounted=new w({perNode:!0});class v{constructor(t,e,r){this.tree=t,this.overlay=e,this.parser=r}static get(t){return t&&t.props&&t.props[w.mounted.id]}}const S=Object.create(null);class A{constructor(t,e,r,n=0){this.name=t,this.props=e,this.id=r,this.flags=n}static define(t){let e=t.props&&t.props.length?Object.create(null):S,r=(t.top?1:0)|(t.skipped?2:0)|(t.error?4:0)|(null==t.name?8:0),n=new A(t.name||"",e,t.id,r);if(t.props)for(let r of t.props)if(Array.isArray(r)||(r=r(n)),r){if(r[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");e[r[0].id]=r[1]}return n}prop(t){return this.props[t.id]}get isTop(){return(1&this.flags)>0}get isSkipped(){return(2&this.flags)>0}get isError(){return(4&this.flags)>0}get isAnonymous(){return(8&this.flags)>0}is(t){if("string"==typeof t){if(this.name==t)return!0;let e=this.prop(w.group);return!!e&&e.indexOf(t)>-1}return this.id==t}static match(t){let e=Object.create(null);for(let r in t)for(let n of r.split(" "))e[n]=t[r];return t=>{for(let r=t.prop(w.group),n=-1;n<(r?r.length:0);n++){let i=e[n<0?t.name:r[n]];if(i)return i}}}}A.none=new A("",Object.create(null),0,8);class C{constructor(t){this.types=t;for(let e=0;e<t.length;e++)if(t[e].id!=e)throw new RangeError("Node type ids should correspond to array positions when creating a node set")}extend(...t){let e=[];for(let r of this.types){let n=null;for(let e of t){let t=e(r);t&&(n||(n=Object.assign({},r.props)),n[t[0].id]=t[1])}e.push(n?new A(r.name,n,r.id,r.flags):r)}return new C(e)}}const N=new WeakMap,P=new WeakMap;var I;!function(t){t[t.ExcludeBuffers=1]="ExcludeBuffers",t[t.IncludeAnonymous=2]="IncludeAnonymous",t[t.IgnoreMounts=4]="IgnoreMounts",t[t.IgnoreOverlays=8]="IgnoreOverlays"}(I||(I={}));class T{constructor(t,e,r,n,i){if(this.type=t,this.children=e,this.positions=r,this.length=n,this.props=null,i&&i.length){this.props=Object.create(null);for(let[t,e]of i)this.props["number"==typeof t?t:t.id]=e}}toString(){let t=v.get(this);if(t&&!t.overlay)return t.tree.toString();let e="";for(let t of this.children){let r=t.toString();r&&(e&&(e+=","),e+=r)}return this.type.name?(/\W/.test(this.type.name)&&!this.type.isError?JSON.stringify(this.type.name):this.type.name)+(e.length?"("+e+")":""):e}cursor(t=0){return new F(this.topNode,t)}cursorAt(t,e=0,r=0){let n=N.get(this)||this.topNode,i=new F(n);return i.moveTo(t,e),N.set(this,i._tree),i}get topNode(){return new L(this,0,0,null)}resolve(t,e=0){let r=M(N.get(this)||this.topNode,t,e,!1);return N.set(this,r),r}resolveInner(t,e=0){let r=M(P.get(this)||this.topNode,t,e,!0);return P.set(this,r),r}resolveStack(t,e=0){return function(t,e,r){let n=t.resolveInner(e,r),i=null;for(let t=n instanceof L?n:n.context.parent;t;t=t.parent)if(t.index<0){let s=t.parent;(i||(i=[n])).push(s.resolve(e,r)),t=s}else{let s=v.get(t.tree);if(s&&s.overlay&&s.overlay[0].from<=e&&s.overlay[s.overlay.length-1].to>=e){let o=new L(s.tree,s.overlay[0].from+t.from,-1,t);(i||(i=[n])).push(M(o,e,r,!1))}}return i?W(i):n}(this,t,e)}iterate(t){let{enter:e,leave:r,from:n=0,to:i=this.length}=t,s=t.mode||0,o=(s&I.IncludeAnonymous)>0;for(let t=this.cursor(s|I.IncludeAnonymous);;){let s=!1;if(t.from<=i&&t.to>=n&&(!o&&t.type.isAnonymous||!1!==e(t))){if(t.firstChild())continue;s=!0}for(;s&&r&&(o||!t.type.isAnonymous)&&r(t),!t.nextSibling();){if(!t.parent())return;s=!0}}}prop(t){return t.perNode?this.props?this.props[t.id]:void 0:this.type.prop(t)}get propValues(){let t=[];if(this.props)for(let e in this.props)t.push([+e,this.props[e]]);return t}balance(t={}){return this.children.length<=8?this:H(A.none,this.children,this.positions,0,this.children.length,0,this.length,((t,e,r)=>new T(this.type,t,e,r,this.propValues)),t.makeTree||((t,e,r)=>new T(A.none,t,e,r)))}static build(t){return function(t){var e;let{buffer:r,nodeSet:n,maxBufferLength:i=x,reused:s=[],minRepeatType:o=n.types.length}=t,l=Array.isArray(r)?new O(r,r.length):r,a=n.types,h=0,f=0;function u(t,e,r,x,k,y){let{id:w,start:v,end:S,size:A}=l,C=f;for(;A<0;){if(l.next(),-1==A){let e=s[w];return r.push(e),void x.push(v-t)}if(-3==A)return void(h=w);if(-4==A)return void(f=w);throw new RangeError(`Unrecognized record size: ${A}`)}let N,P,I=a[w],T=v-t;if(S-v<=i&&(P=m(l.pos-e,k))){let e=new Uint16Array(P.size-P.skip),r=l.pos-P.size,i=e.length;for(;l.pos>r;)i=b(P.start,e,i);N=new B(e,S-P.start,n),T=P.start-t}else{let t=l.pos-A;l.next();let e=[],r=[],n=w>=o?w:-1,s=0,a=S;for(;l.pos>t;)n>=0&&l.id==n&&l.size>=0?(l.end<=a-i&&(p(e,r,v,s,l.end,a,n,C),s=e.length,a=l.end),l.next()):y>2500?c(v,t,e,r):u(v,t,e,r,n,y+1);if(n>=0&&s>0&&s<e.length&&p(e,r,v,s,v,a,n,C),e.reverse(),r.reverse(),n>-1&&s>0){let t=d(I);N=H(I,e,r,0,e.length,0,S-v,t,t)}else N=g(I,e,r,S-v,C-S)}r.push(N),x.push(T)}function c(t,e,r,s){let o=[],a=0,h=-1;for(;l.pos>e;){let{id:t,start:e,end:r,size:n}=l;if(n>4)l.next();else{if(h>-1&&e<h)break;h<0&&(h=r-i),o.push(t,e,r),a++,l.next()}}if(a){let e=new Uint16Array(4*a),i=o[o.length-2];for(let t=o.length-3,r=0;t>=0;t-=3)e[r++]=o[t],e[r++]=o[t+1]-i,e[r++]=o[t+2]-i,e[r++]=r;r.push(new B(e,o[2]-i,n)),s.push(i-t)}}function d(t){return(e,r,n)=>{let i,s,o=0,l=e.length-1;if(l>=0&&(i=e[l])instanceof T){if(!l&&i.type==t&&i.length==n)return i;(s=i.prop(w.lookAhead))&&(o=r[l]+i.length+s)}return g(t,e,r,n,o)}}function p(t,e,r,i,s,o,l,a){let h=[],f=[];for(;t.length>i;)h.push(t.pop()),f.push(e.pop()+r-s);t.push(g(n.types[l],h,f,o-s,a-o)),e.push(s-r)}function g(t,e,r,n,i=0,s){if(h){let t=[w.contextHash,h];s=s?[t].concat(s):[t]}if(i>25){let t=[w.lookAhead,i];s=s?[t].concat(s):[t]}return new T(t,e,r,n,s)}function m(t,e){let r=l.fork(),n=0,s=0,a=0,h=r.end-i,f={size:0,start:0,skip:0};t:for(let i=r.pos-t;r.pos>i;){let t=r.size;if(r.id==e&&t>=0){f.size=n,f.start=s,f.skip=a,a+=4,n+=4,r.next();continue}let l=r.pos-t;if(t<0||l<i||r.start<h)break;let u=r.id>=o?4:0,c=r.start;for(r.next();r.pos>l;){if(r.size<0){if(-3!=r.size)break t;u+=4}else r.id>=o&&(u+=4);r.next()}s=c,n+=t,a+=u}return(e<0||n==t)&&(f.size=n,f.start=s,f.skip=a),f.size>4?f:void 0}function b(t,e,r){let{id:n,start:i,end:s,size:a}=l;if(l.next(),a>=0&&n<o){let o=r;if(a>4){let n=l.pos-(a-4);for(;l.pos>n;)r=b(t,e,r)}e[--r]=o,e[--r]=s-t,e[--r]=i-t,e[--r]=n}else-3==a?h=n:-4==a&&(f=n);return r}let k=[],y=[];for(;l.pos>0;)u(t.start||0,t.bufferStart||0,k,y,-1,0);let v=null!==(e=t.length)&&void 0!==e?e:k.length?y[0]+k[0].length:0;return new T(a[t.topID],k.reverse(),y.reverse(),v)}(t)}}T.empty=new T(A.none,[],[],0);class O{constructor(t,e){this.buffer=t,this.index=e}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new O(this.buffer,this.index)}}class B{constructor(t,e,r){this.buffer=t,this.length=e,this.set=r}get type(){return A.none}toString(){let t=[];for(let e=0;e<this.buffer.length;)t.push(this.childString(e)),e=this.buffer[e+3];return t.join(",")}childString(t){let e=this.buffer[t],r=this.buffer[t+3],n=this.set.types[e],i=n.name;if(/\W/.test(i)&&!n.isError&&(i=JSON.stringify(i)),r==(t+=4))return i;let s=[];for(;t<r;)s.push(this.childString(t)),t=this.buffer[t+3];return i+"("+s.join(",")+")"}findChild(t,e,r,n,i){let{buffer:s}=this,o=-1;for(let l=t;l!=e&&!(_(i,n,s[l+1],s[l+2])&&(o=l,r>0));l=s[l+3]);return o}slice(t,e,r){let n=this.buffer,i=new Uint16Array(e-t),s=0;for(let o=t,l=0;o<e;){i[l++]=n[o++],i[l++]=n[o++]-r;let e=i[l++]=n[o++]-r;i[l++]=n[o++]-t,s=Math.max(s,e)}return new B(i,s,this.set)}}function _(t,e,r,n){switch(t){case-2:return r<e;case-1:return n>=e&&r<e;case 0:return r<e&&n>e;case 1:return r<=e&&n>e;case 2:return n>e;case 4:return!0}}function M(t,e,r,n){for(var i;t.from==t.to||(r<1?t.from>=e:t.from>e)||(r>-1?t.to<=e:t.to<e);){let e=!n&&t instanceof L&&t.index<0?null:t.parent;if(!e)return t;t=e}let s=n?0:I.IgnoreOverlays;if(n)for(let n=t,o=n.parent;o;n=o,o=n.parent)n instanceof L&&n.index<0&&(null===(i=o.enter(e,r,s))||void 0===i?void 0:i.from)!=n.from&&(t=o);for(;;){let n=t.enter(e,r,s);if(!n)return t;t=n}}class D{cursor(t=0){return new F(this,t)}getChild(t,e=null,r=null){let n=E(this,t,e,r);return n.length?n[0]:null}getChildren(t,e=null,r=null){return E(this,t,e,r)}resolve(t,e=0){return M(this,t,e,!1)}resolveInner(t,e=0){return M(this,t,e,!0)}matchContext(t){return R(this,t)}enterUnfinishedNodesBefore(t){let e=this.childBefore(t),r=this;for(;e;){let t=e.lastChild;if(!t||t.to!=e.to)break;t.type.isError&&t.from==t.to?(r=e,e=t.prevSibling):e=t}return r}get node(){return this}get next(){return this.parent}}class L extends D{constructor(t,e,r,n){super(),this._tree=t,this.from=e,this.index=r,this._parent=n}get type(){return this._tree.type}get name(){return this._tree.type.name}get to(){return this.from+this._tree.length}nextChild(t,e,r,n,i=0){for(let s=this;;){for(let{children:o,positions:l}=s._tree,a=e>0?o.length:-1;t!=a;t+=e){let a=o[t],h=l[t]+s.from;if(_(n,r,h,h+a.length))if(a instanceof B){if(i&I.ExcludeBuffers)continue;let o=a.findChild(0,a.buffer.length,e,r-h,n);if(o>-1)return new j(new z(s,a,t,h),null,o)}else if(i&I.IncludeAnonymous||!a.type.isAnonymous||V(a)){let o;if(!(i&I.IgnoreMounts)&&(o=v.get(a))&&!o.overlay)return new L(o.tree,h,t,s);let l=new L(a,h,t,s);return i&I.IncludeAnonymous||!l.type.isAnonymous?l:l.nextChild(e<0?a.children.length-1:0,e,r,n)}}if(i&I.IncludeAnonymous||!s.type.isAnonymous)return null;if(t=s.index>=0?s.index+e:e<0?-1:s._parent._tree.children.length,s=s._parent,!s)return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(t){return this.nextChild(0,1,t,2)}childBefore(t){return this.nextChild(this._tree.children.length-1,-1,t,-2)}enter(t,e,r=0){let n;if(!(r&I.IgnoreOverlays)&&(n=v.get(this._tree))&&n.overlay){let r=t-this.from;for(let{from:t,to:i}of n.overlay)if((e>0?t<=r:t<r)&&(e<0?i>=r:i>r))return new L(n.tree,n.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,t,e,r)}nextSignificantParent(){let t=this;for(;t.type.isAnonymous&&t._parent;)t=t._parent;return t}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}}function E(t,e,r,n){let i=t.cursor(),s=[];if(!i.firstChild())return s;if(null!=r)for(let t=!1;!t;)if(t=i.type.is(r),!i.nextSibling())return s;for(;;){if(null!=n&&i.type.is(n))return s;if(i.type.is(e)&&s.push(i.node),!i.nextSibling())return null==n?s:[]}}function R(t,e,r=e.length-1){for(let n=t.parent;r>=0;n=n.parent){if(!n)return!1;if(!n.type.isAnonymous){if(e[r]&&e[r]!=n.name)return!1;r--}}return!0}class z{constructor(t,e,r,n){this.parent=t,this.buffer=e,this.index=r,this.start=n}}class j extends D{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(t,e,r){super(),this.context=t,this._parent=e,this.index=r,this.type=t.buffer.set.types[t.buffer.buffer[r]]}child(t,e,r){let{buffer:n}=this.context,i=n.findChild(this.index+4,n.buffer[this.index+3],t,e-this.context.start,r);return i<0?null:new j(this.context,this,i)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(t){return this.child(1,t,2)}childBefore(t){return this.child(-1,t,-2)}enter(t,e,r=0){if(r&I.ExcludeBuffers)return null;let{buffer:n}=this.context,i=n.findChild(this.index+4,n.buffer[this.index+3],e>0?1:-1,t-this.context.start,e);return i<0?null:new j(this.context,this,i)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(t){return this._parent?null:this.context.parent.nextChild(this.context.index+t,t,0,4)}get nextSibling(){let{buffer:t}=this.context,e=t.buffer[this.index+3];return e<(this._parent?t.buffer[this._parent.index+3]:t.buffer.length)?new j(this.context,this._parent,e):this.externalSibling(1)}get prevSibling(){let{buffer:t}=this.context,e=this._parent?this._parent.index+4:0;return this.index==e?this.externalSibling(-1):new j(this.context,this._parent,t.findChild(e,this.index,-1,0,4))}get tree(){return null}toTree(){let t=[],e=[],{buffer:r}=this.context,n=this.index+4,i=r.buffer[this.index+3];if(i>n){let s=r.buffer[this.index+1];t.push(r.slice(n,i,s)),e.push(0)}return new T(this.type,t,e,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}}function W(t){if(!t.length)return null;let e=0,r=t[0];for(let n=1;n<t.length;n++){let i=t[n];(i.from>r.from||i.to<r.to)&&(r=i,e=n)}let n=r instanceof L&&r.index<0?null:r.parent,i=t.slice();return n?i[e]=n:i.splice(e,1),new U(i,r)}class U{constructor(t,e){this.heads=t,this.node=e}get next(){return W(this.heads)}}class F{get name(){return this.type.name}constructor(t,e=0){if(this.mode=e,this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,t instanceof L)this.yieldNode(t);else{this._tree=t.context.parent,this.buffer=t.context;for(let e=t._parent;e;e=e._parent)this.stack.unshift(e.index);this.bufferNode=t,this.yieldBuf(t.index)}}yieldNode(t){return!!t&&(this._tree=t,this.type=t.type,this.from=t.from,this.to=t.to,!0)}yieldBuf(t,e){this.index=t;let{start:r,buffer:n}=this.buffer;return this.type=e||n.set.types[n.buffer[t]],this.from=r+n.buffer[t+1],this.to=r+n.buffer[t+2],!0}yield(t){return!!t&&(t instanceof L?(this.buffer=null,this.yieldNode(t)):(this.buffer=t.context,this.yieldBuf(t.index,t.type)))}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(t,e,r){if(!this.buffer)return this.yield(this._tree.nextChild(t<0?this._tree._tree.children.length-1:0,t,e,r,this.mode));let{buffer:n}=this.buffer,i=n.findChild(this.index+4,n.buffer[this.index+3],t,e-this.buffer.start,r);return!(i<0)&&(this.stack.push(this.index),this.yieldBuf(i))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(t){return this.enterChild(1,t,2)}childBefore(t){return this.enterChild(-1,t,-2)}enter(t,e,r=this.mode){return this.buffer?!(r&I.ExcludeBuffers)&&this.enterChild(1,t,e):this.yield(this._tree.enter(t,e,r))}parent(){if(!this.buffer)return this.yieldNode(this.mode&I.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let t=this.mode&I.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(t)}sibling(t){if(!this.buffer)return!!this._tree._parent&&this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+t,t,0,4,this.mode));let{buffer:e}=this.buffer,r=this.stack.length-1;if(t<0){let t=r<0?0:this.stack[r]+4;if(this.index!=t)return this.yieldBuf(e.findChild(t,this.index,-1,0,4))}else{let t=e.buffer[this.index+3];if(t<(r<0?e.buffer.length:e.buffer[this.stack[r]+3]))return this.yieldBuf(t)}return r<0&&this.yield(this.buffer.parent.nextChild(this.buffer.index+t,t,0,4,this.mode))}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(t){let e,r,{buffer:n}=this;if(n){if(t>0){if(this.index<n.buffer.buffer.length)return!1}else for(let t=0;t<this.index;t++)if(n.buffer.buffer[t+3]<this.index)return!1;({index:e,parent:r}=n)}else({index:e,_parent:r}=this._tree);for(;r;({index:e,_parent:r}=r))if(e>-1)for(let n=e+t,i=t<0?-1:r._tree.children.length;n!=i;n+=t){let t=r._tree.children[n];if(this.mode&I.IncludeAnonymous||t instanceof B||!t.type.isAnonymous||V(t))return!1}return!0}move(t,e){if(e&&this.enterChild(t,0,4))return!0;for(;;){if(this.sibling(t))return!0;if(this.atLastNode(t)||!this.parent())return!1}}next(t=!0){return this.move(1,t)}prev(t=!0){return this.move(-1,t)}moveTo(t,e=0){for(;(this.from==this.to||(e<1?this.from>=t:this.from>t)||(e>-1?this.to<=t:this.to<t))&&this.parent(););for(;this.enterChild(1,t,e););return this}get node(){if(!this.buffer)return this._tree;let t=this.bufferNode,e=null,r=0;if(t&&t.context==this.buffer)t:for(let n=this.index,i=this.stack.length;i>=0;){for(let s=t;s;s=s._parent)if(s.index==n){if(n==this.index)return s;e=s,r=i+1;break t}n=this.stack[--i]}for(let t=r;t<this.stack.length;t++)e=new j(this.buffer,e,this.stack[t]);return this.bufferNode=new j(this.buffer,e,this.index)}get tree(){return this.buffer?null:this._tree._tree}iterate(t,e){for(let r=0;;){let n=!1;if(this.type.isAnonymous||!1!==t(this)){if(this.firstChild()){r++;continue}this.type.isAnonymous||(n=!0)}for(;n&&e&&e(this),n=this.type.isAnonymous,!this.nextSibling();){if(!r)return;this.parent(),r--,n=!0}}}matchContext(t){if(!this.buffer)return R(this.node,t);let{buffer:e}=this.buffer,{types:r}=e.set;for(let n=t.length-1,i=this.stack.length-1;n>=0;i--){if(i<0)return R(this.node,t,n);let s=r[e.buffer[this.stack[i]]];if(!s.isAnonymous){if(t[n]&&t[n]!=s.name)return!1;n--}}return!0}}function V(t){return t.children.some((t=>t instanceof B||!t.type.isAnonymous||V(t)))}const q=new WeakMap;function $(t,e){if(!t.isAnonymous||e instanceof B||e.type!=t)return 1;let r=q.get(e);if(null==r){r=1;for(let n of e.children){if(n.type!=t||!(n instanceof T)){r=1;break}r+=$(t,n)}q.set(e,r)}return r}function H(t,e,r,n,i,s,o,l,a){let h=0;for(let r=n;r<i;r++)h+=$(t,e[r]);let f=Math.ceil(1.5*h/8),u=[],c=[];return function e(r,n,i,o,l){for(let h=i;h<o;){let i=h,d=n[h],p=$(t,r[h]);for(h++;h<o;h++){let e=$(t,r[h]);if(p+e>=f)break;p+=e}if(h==i+1){if(p>f){let t=r[i];e(t.children,t.positions,0,t.children.length,n[i]+l);continue}u.push(r[i])}else{let e=n[h-1]+r[h-1].length-d;u.push(H(t,r,n,i,h,d,e,null,a))}c.push(d+l-s)}}(e,r,n,i,0),(l||a)(u,c,o)}class G{constructor(){this.map=new WeakMap}setBuffer(t,e,r){let n=this.map.get(t);n||this.map.set(t,n=new Map),n.set(e,r)}getBuffer(t,e){let r=this.map.get(t);return r&&r.get(e)}set(t,e){t instanceof j?this.setBuffer(t.context.buffer,t.index,e):t instanceof L&&this.map.set(t.tree,e)}get(t){return t instanceof j?this.getBuffer(t.context.buffer,t.index):t instanceof L?this.map.get(t.tree):void 0}cursorSet(t,e){t.buffer?this.setBuffer(t.buffer.buffer,t.index,e):this.map.set(t.tree,e)}cursorGet(t){return t.buffer?this.getBuffer(t.buffer.buffer,t.index):this.map.get(t.tree)}}class J{constructor(t,e,r,n,i=!1,s=!1){this.from=t,this.to=e,this.tree=r,this.offset=n,this.open=(i?1:0)|(s?2:0)}get openStart(){return(1&this.open)>0}get openEnd(){return(2&this.open)>0}static addTree(t,e=[],r=!1){let n=[new J(0,t.length,t,0,!1,r)];for(let r of e)r.to>t.length&&n.push(r);return n}static applyChanges(t,e,r=128){if(!e.length)return t;let n=[],i=1,s=t.length?t[0]:null;for(let o=0,l=0,a=0;;o++){let h=o<e.length?e[o]:null,f=h?h.fromA:1e9;if(f-l>=r)for(;s&&s.from<f;){let e=s;if(l>=e.from||f<=e.to||a){let t=Math.max(e.from,l)-a,r=Math.min(e.to,f)-a;e=t>=r?null:new J(t,r,e.tree,e.offset+a,o>0,!!h)}if(e&&n.push(e),s.to>f)break;s=i<t.length?t[i++]:null}if(!h)break;l=h.toA,a=h.toA-h.toB}return n}}class K{startParse(t,e,r){return"string"==typeof t&&(t=new Q(t)),r=r?r.length?r.map((t=>new y(t.from,t.to))):[new y(0,0)]:[new y(0,t.length)],this.createParse(t,e||[],r)}parse(t,e,r){let n=this.startParse(t,e,r);for(;;){let t=n.advance();if(t)return t}}}class Q{constructor(t){this.string=t}get length(){return this.string.length}chunk(t){return this.string.slice(t)}get lineChunks(){return!1}read(t,e){return this.string.slice(t,e)}}new w({perNode:!0});let X=0;class Y{constructor(t,e,r){this.set=t,this.base=e,this.modified=r,this.id=X++}static define(t){if(null==t?void 0:t.base)throw new Error("Can not derive from a modified tag");let e=new Y([],null,[]);if(e.set.push(e),t)for(let r of t.set)e.set.push(r);return e}static defineModifier(){let t=new tt;return e=>e.modified.indexOf(t)>-1?e:tt.get(e.base||e,e.modified.concat(t).sort(((t,e)=>t.id-e.id)))}}let Z=0;class tt{constructor(){this.instances=[],this.id=Z++}static get(t,e){if(!e.length)return t;let r=e[0].instances.find((r=>{return r.base==t&&(n=e,i=r.modified,n.length==i.length&&n.every(((t,e)=>t==i[e])));var n,i}));if(r)return r;let n=[],i=new Y(n,t,e);for(let t of e)t.instances.push(i);let s=function(t){let e=[[]];for(let r=0;r<t.length;r++)for(let n=0,i=e.length;n<i;n++)e.push(e[n].concat(t[r]));return e.sort(((t,e)=>e.length-t.length))}(e);for(let e of t.set)if(!e.modified.length)for(let t of s)n.push(tt.get(e,t));return i}}function et(t){let e=Object.create(null);for(let r in t){let n=t[r];Array.isArray(n)||(n=[n]);for(let t of r.split(" "))if(t){let r=[],i=2,s=t;for(let e=0;;){if("..."==s&&e>0&&e+3==t.length){i=1;break}let n=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(s);if(!n)throw new RangeError("Invalid path: "+t);if(r.push("*"==n[0]?"":'"'==n[0][0]?JSON.parse(n[0]):n[0]),e+=n[0].length,e==t.length)break;let o=t[e++];if(e==t.length&&"!"==o){i=0;break}if("/"!=o)throw new RangeError("Invalid path: "+t);s=t.slice(e)}let o=r.length-1,l=r[o];if(!l)throw new RangeError("Invalid path: "+t);let a=new nt(n,i,o>0?r.slice(0,o):null);e[l]=a.sort(e[l])}}return rt.add(e)}const rt=new w;class nt{constructor(t,e,r,n){this.tags=t,this.mode=e,this.context=r,this.next=n}get opaque(){return 0==this.mode}get inherit(){return 1==this.mode}sort(t){return!t||t.depth<this.depth?(this.next=t,this):(t.next=this.sort(t.next),t)}get depth(){return this.context?this.context.length:0}}function it(t,e){let r=Object.create(null);for(let e of t)if(Array.isArray(e.tag))for(let t of e.tag)r[t.id]=e.class;else r[e.tag.id]=e.class;let{scope:n,all:i=null}=e||{};return{style:t=>{let e=i;for(let n of t)for(let t of n.set){let n=r[t.id];if(n){e=e?e+" "+n:n;break}}return e},scope:n}}function st(t,e,r,n=0,i=t.length){let s=new ot(n,Array.isArray(e)?e:[e],r);s.highlightRange(t.cursor(),n,i,"",s.highlighters),s.flush(i)}nt.empty=new nt([],2,null);class ot{constructor(t,e,r){this.at=t,this.highlighters=e,this.span=r,this.class=""}startSpan(t,e){e!=this.class&&(this.flush(t),t>this.at&&(this.at=t),this.class=e)}flush(t){t>this.at&&this.class&&this.span(this.at,t,this.class)}highlightRange(t,e,r,n,i){let{type:s,from:o,to:l}=t;if(o>=r||l<=e)return;s.isTop&&(i=this.highlighters.filter((t=>!t.scope||t.scope(s))));let a=n,h=function(t){let e=t.type.prop(rt);for(;e&&e.context&&!t.matchContext(e.context);)e=e.next;return e||null}(t)||nt.empty,f=function(t,e){let r=null;for(let n of t){let t=n.style(e);t&&(r=r?r+" "+t:t)}return r}(i,h.tags);if(f&&(a&&(a+=" "),a+=f,1==h.mode&&(n+=(n?" ":"")+f)),this.startSpan(Math.max(e,o),a),h.opaque)return;let u=t.tree&&t.tree.prop(w.mounted);if(u&&u.overlay){let s=t.node.enter(u.overlay[0].from+o,1),h=this.highlighters.filter((t=>!t.scope||t.scope(u.tree.type))),f=t.firstChild();for(let c=0,d=o;;c++){let p=c<u.overlay.length?u.overlay[c]:null,g=p?p.from+o:l,m=Math.max(e,d),b=Math.min(r,g);if(m<b&&f)for(;t.from<b&&(this.highlightRange(t,m,b,n,i),this.startSpan(Math.min(b,t.to),a),!(t.to>=g)&&t.nextSibling()););if(!p||g>r)break;d=p.to+o,d>e&&(this.highlightRange(s.cursor(),Math.max(e,p.from+o),Math.min(r,d),"",h),this.startSpan(Math.min(r,d),a))}f&&t.parent()}else if(t.firstChild()){u&&(n="");do{if(!(t.to<=e)){if(t.from>=r)break;this.highlightRange(t,e,r,n,i),this.startSpan(Math.min(r,t.to),a)}}while(t.nextSibling());t.parent()}}}const lt=Y.define,at=lt(),ht=lt(),ft=lt(ht),ut=lt(ht),ct=lt(),dt=lt(ct),pt=lt(ct),gt=lt(),mt=lt(gt),bt=lt(),xt=lt(),kt=lt(),yt=lt(kt),wt=lt(),vt={comment:at,lineComment:lt(at),blockComment:lt(at),docComment:lt(at),name:ht,variableName:lt(ht),typeName:ft,tagName:lt(ft),propertyName:ut,attributeName:lt(ut),className:lt(ht),labelName:lt(ht),namespace:lt(ht),macroName:lt(ht),literal:ct,string:dt,docString:lt(dt),character:lt(dt),attributeValue:lt(dt),number:pt,integer:lt(pt),float:lt(pt),bool:lt(ct),regexp:lt(ct),escape:lt(ct),color:lt(ct),url:lt(ct),keyword:bt,self:lt(bt),null:lt(bt),atom:lt(bt),unit:lt(bt),modifier:lt(bt),operatorKeyword:lt(bt),controlKeyword:lt(bt),definitionKeyword:lt(bt),moduleKeyword:lt(bt),operator:xt,derefOperator:lt(xt),arithmeticOperator:lt(xt),logicOperator:lt(xt),bitwiseOperator:lt(xt),compareOperator:lt(xt),updateOperator:lt(xt),definitionOperator:lt(xt),typeOperator:lt(xt),controlOperator:lt(xt),punctuation:kt,separator:lt(kt),bracket:yt,angleBracket:lt(yt),squareBracket:lt(yt),paren:lt(yt),brace:lt(yt),content:gt,heading:mt,heading1:lt(mt),heading2:lt(mt),heading3:lt(mt),heading4:lt(mt),heading5:lt(mt),heading6:lt(mt),contentSeparator:lt(gt),list:lt(gt),quote:lt(gt),emphasis:lt(gt),strong:lt(gt),link:lt(gt),monospace:lt(gt),strikethrough:lt(gt),inserted:lt(),deleted:lt(),changed:lt(),invalid:lt(),meta:wt,documentMeta:lt(wt),annotation:lt(wt),processingInstruction:lt(wt),definition:Y.defineModifier(),constant:Y.defineModifier(),function:Y.defineModifier(),standard:Y.defineModifier(),local:Y.defineModifier(),special:Y.defineModifier()};var St;it([{tag:vt.link,class:"tok-link"},{tag:vt.heading,class:"tok-heading"},{tag:vt.emphasis,class:"tok-emphasis"},{tag:vt.strong,class:"tok-strong"},{tag:vt.keyword,class:"tok-keyword"},{tag:vt.atom,class:"tok-atom"},{tag:vt.bool,class:"tok-bool"},{tag:vt.url,class:"tok-url"},{tag:vt.labelName,class:"tok-labelName"},{tag:vt.inserted,class:"tok-inserted"},{tag:vt.deleted,class:"tok-deleted"},{tag:vt.literal,class:"tok-literal"},{tag:vt.string,class:"tok-string"},{tag:vt.number,class:"tok-number"},{tag:[vt.regexp,vt.escape,vt.special(vt.string)],class:"tok-string2"},{tag:vt.variableName,class:"tok-variableName"},{tag:vt.local(vt.variableName),class:"tok-variableName tok-local"},{tag:vt.definition(vt.variableName),class:"tok-variableName tok-definition"},{tag:vt.special(vt.variableName),class:"tok-variableName2"},{tag:vt.definition(vt.propertyName),class:"tok-propertyName tok-definition"},{tag:vt.typeName,class:"tok-typeName"},{tag:vt.namespace,class:"tok-namespace"},{tag:vt.className,class:"tok-className"},{tag:vt.macroName,class:"tok-macroName"},{tag:vt.propertyName,class:"tok-propertyName"},{tag:vt.operator,class:"tok-operator"},{tag:vt.comment,class:"tok-comment"},{tag:vt.meta,class:"tok-meta"},{tag:vt.invalid,class:"tok-invalid"},{tag:vt.punctuation,class:"tok-punctuation"}]);const At=new w;function Ct(e){return t.define({combine:e?t=>t.concat(e):void 0})}const Nt=new w;class Pt{constructor(t,r,n=[],i=""){this.data=t,this.name=i,e.prototype.hasOwnProperty("tree")||Object.defineProperty(e.prototype,"tree",{get(){return Ot(this)}}),this.parser=r,this.extension=[Wt.of(this),e.languageData.of(((t,e,r)=>{let n=It(t,e,r),i=n.type.prop(At);if(!i)return[];let s=t.facet(i),o=n.type.prop(Nt);if(o){let i=n.resolve(e-n.from,r);for(let e of o)if(e.test(i,t)){let r=t.facet(e.facet);return"replace"==e.type?r:r.concat(s)}}return s}))].concat(n)}isActiveAt(t,e,r=-1){return It(t,e,r).type.prop(At)==this.data}findRegions(t){let e=t.facet(Wt);if((null==e?void 0:e.data)==this.data)return[{from:0,to:t.doc.length}];if(!e||!e.allowsNesting)return[];let r=[],n=(t,e)=>{if(t.prop(At)==this.data)return void r.push({from:e,to:e+t.length});let i=t.prop(w.mounted);if(i){if(i.tree.prop(At)==this.data){if(i.overlay)for(let t of i.overlay)r.push({from:t.from+e,to:t.to+e});else r.push({from:e,to:e+t.length});return}if(i.overlay){let t=r.length;if(n(i.tree,i.overlay[0].from+e),r.length>t)return}}for(let r=0;r<t.children.length;r++){let i=t.children[r];i instanceof T&&n(i,t.positions[r]+e)}};return n(Ot(t),0),r}get allowsNesting(){return!0}}function It(t,e,r){let n=t.facet(Wt),i=Ot(t).topNode;if(!n||n.allowsNesting)for(let t=i;t;t=t.enter(e,r,I.ExcludeBuffers))t.type.isTop&&(i=t);return i}Pt.setState=r.define();class Tt extends Pt{constructor(t,e,r){super(t,e,[],r),this.parser=e}static define(t){let e=Ct(t.languageData);return new Tt(e,t.parser.configure({props:[At.add((t=>t.isTop?e:void 0))]}),t.name)}configure(t,e){return new Tt(this.data,this.parser.configure(t),e||this.name)}get allowsNesting(){return this.parser.hasWrappers()}}function Ot(t){let e=t.field(Pt.state,!1);return e?e.tree:T.empty}function Bt(t,e,r=50){var n;let i=null===(n=t.field(Pt.state,!1))||void 0===n?void 0:n.context;if(!i)return null;let s=i.viewport;i.updateViewport({from:0,to:e});let o=i.isDone(e)||i.work(r,e)?i.tree:null;return i.updateViewport(s),o}class _t{constructor(t){this.doc=t,this.cursorPos=0,this.string="",this.cursor=t.iter()}get length(){return this.doc.length}syncTo(t){return this.string=this.cursor.next(t-this.cursorPos).value,this.cursorPos=t+this.string.length,this.cursorPos-this.string.length}chunk(t){return this.syncTo(t),this.string}get lineChunks(){return!0}read(t,e){let r=this.cursorPos-this.string.length;return t<r||e>=this.cursorPos?this.doc.sliceString(t,e):this.string.slice(t-r,e-r)}}let Mt=null;class Dt{constructor(t,e,r=[],n,i,s,o,l){this.parser=t,this.state=e,this.fragments=r,this.tree=n,this.treeLen=i,this.viewport=s,this.skipped=o,this.scheduleOn=l,this.parse=null,this.tempSkipped=[]}static create(t,e,r){return new Dt(t,e,[],T.empty,0,r,[],null)}startParse(){return this.parser.startParse(new _t(this.state.doc),this.fragments)}work(t,e){return null!=e&&e>=this.state.doc.length&&(e=void 0),this.tree!=T.empty&&this.isDone(null!=e?e:this.state.doc.length)?(this.takeTree(),!0):this.withContext((()=>{var r;if("number"==typeof t){let e=Date.now()+t;t=()=>Date.now()>e}for(this.parse||(this.parse=this.startParse()),null!=e&&(null==this.parse.stoppedAt||this.parse.stoppedAt>e)&&e<this.state.doc.length&&this.parse.stopAt(e);;){let n=this.parse.advance();if(n){if(this.fragments=this.withoutTempSkipped(J.addTree(n,this.fragments,null!=this.parse.stoppedAt)),this.treeLen=null!==(r=this.parse.stoppedAt)&&void 0!==r?r:this.state.doc.length,this.tree=n,this.parse=null,!(this.treeLen<(null!=e?e:this.state.doc.length)))return!0;this.parse=this.startParse()}if(t())return!1}}))}takeTree(){let t,e;this.parse&&(t=this.parse.parsedPos)>=this.treeLen&&((null==this.parse.stoppedAt||this.parse.stoppedAt>t)&&this.parse.stopAt(t),this.withContext((()=>{for(;!(e=this.parse.advance()););})),this.treeLen=t,this.tree=e,this.fragments=this.withoutTempSkipped(J.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(t){let e=Mt;Mt=this;try{return t()}finally{Mt=e}}withoutTempSkipped(t){for(let e;e=this.tempSkipped.pop();)t=Lt(t,e.from,e.to);return t}changes(t,e){let{fragments:r,tree:n,treeLen:i,viewport:s,skipped:o}=this;if(this.takeTree(),!t.empty){let e=[];if(t.iterChangedRanges(((t,r,n,i)=>e.push({fromA:t,toA:r,fromB:n,toB:i}))),r=J.applyChanges(r,e),n=T.empty,i=0,s={from:t.mapPos(s.from,-1),to:t.mapPos(s.to,1)},this.skipped.length){o=[];for(let e of this.skipped){let r=t.mapPos(e.from,1),n=t.mapPos(e.to,-1);r<n&&o.push({from:r,to:n})}}}return new Dt(this.parser,e,r,n,i,s,o,this.scheduleOn)}updateViewport(t){if(this.viewport.from==t.from&&this.viewport.to==t.to)return!1;this.viewport=t;let e=this.skipped.length;for(let e=0;e<this.skipped.length;e++){let{from:r,to:n}=this.skipped[e];r<t.to&&n>t.from&&(this.fragments=Lt(this.fragments,r,n),this.skipped.splice(e--,1))}return!(this.skipped.length>=e)&&(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(t,e){this.skipped.push({from:t,to:e})}static getSkippingParser(t){return new class extends K{createParse(e,r,n){let i=n[0].from,s=n[n.length-1].to;return{parsedPos:i,advance(){let e=Mt;if(e){for(let t of n)e.tempSkipped.push(t);t&&(e.scheduleOn=e.scheduleOn?Promise.all([e.scheduleOn,t]):t)}return this.parsedPos=s,new T(A.none,[],[],s-i)},stoppedAt:null,stopAt(){}}}}}isDone(t){t=Math.min(t,this.state.doc.length);let e=this.fragments;return this.treeLen>=t&&e.length&&0==e[0].from&&e[0].to>=t}static get(){return Mt}}function Lt(t,e,r){return J.applyChanges(t,[{fromA:e,toA:r,fromB:e,toB:r}])}class Et{constructor(t){this.context=t,this.tree=t.tree}apply(t){if(!t.docChanged&&this.tree==this.context.tree)return this;let e=this.context.changes(t.changes,t.state),r=this.context.treeLen==t.startState.doc.length?void 0:Math.max(t.changes.mapPos(this.context.treeLen),e.viewport.to);return e.work(20,r)||e.takeTree(),new Et(e)}static init(t){let e=Math.min(3e3,t.doc.length),r=Dt.create(t.facet(Wt).parser,t,{from:0,to:e});return r.work(20,e)||r.takeTree(),new Et(r)}}Pt.state=n.define({create:Et.init,update(t,e){for(let t of e.effects)if(t.is(Pt.setState))return t.value;return e.startState.facet(Wt)!=e.state.facet(Wt)?Et.init(e.state):t.apply(e)}});let Rt=t=>{let e=setTimeout((()=>t()),500);return()=>clearTimeout(e)};"undefined"!=typeof requestIdleCallback&&(Rt=t=>{let e=-1,r=setTimeout((()=>{e=requestIdleCallback(t,{timeout:400})}),100);return()=>e<0?clearTimeout(r):cancelIdleCallback(e)});const zt="undefined"!=typeof navigator&&(null===(St=navigator.scheduling)||void 0===St?void 0:St.isInputPending)?()=>navigator.scheduling.isInputPending():null,jt=h.fromClass(class{constructor(t){this.view=t,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(t){let e=this.view.state.field(Pt.state).context;(e.updateViewport(t.view.viewport)||this.view.viewport.to>e.treeLen)&&this.scheduleWork(),(t.docChanged||t.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(e)}scheduleWork(){if(this.working)return;let{state:t}=this.view,e=t.field(Pt.state);e.tree==e.context.tree&&e.context.isDone(t.doc.length)||(this.working=Rt(this.work))}work(t){this.working=null;let e=Date.now();if(this.chunkEnd<e&&(this.chunkEnd<0||this.view.hasFocus)&&(this.chunkEnd=e+3e4,this.chunkBudget=3e3),this.chunkBudget<=0)return;let{state:r,viewport:{to:n}}=this.view,i=r.field(Pt.state);if(i.tree==i.context.tree&&i.context.isDone(n+1e5))return;let s=Date.now()+Math.min(this.chunkBudget,100,t&&!zt?Math.max(25,t.timeRemaining()-5):1e9),o=i.context.treeLen<n&&r.doc.length>n+1e3,l=i.context.work((()=>zt&&zt()||Date.now()>s),n+(o?0:1e5));this.chunkBudget-=Date.now()-e,(l||this.chunkBudget<=0)&&(i.context.takeTree(),this.view.dispatch({effects:Pt.setState.of(new Et(i.context))})),this.chunkBudget>0&&(!l||o)&&this.scheduleWork(),this.checkAsyncSchedule(i.context)}checkAsyncSchedule(t){t.scheduleOn&&(this.workScheduled++,t.scheduleOn.then((()=>this.scheduleWork())).catch((t=>f(this.view.state,t))).then((()=>this.workScheduled--)),t.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),Wt=t.define({combine:t=>t.length?t[0]:null,enables:t=>[Pt.state,jt,u.contentAttributes.compute([t],(e=>{let r=e.facet(t);return r&&r.name?{"data-language":r.name}:{}}))]});class Ut{constructor(t,e=[]){this.language=t,this.support=e,this.extension=[t,e]}}class Ft{constructor(t,e,r,n,i,s=void 0){this.name=t,this.alias=e,this.extensions=r,this.filename=n,this.loadFunc=i,this.support=s,this.loading=null}load(){return this.loading||(this.loading=this.loadFunc().then((t=>this.support=t),(t=>{throw this.loading=null,t})))}static of(t){let{load:e,support:r}=t;if(!e){if(!r)throw new RangeError("Must pass either 'load' or 'support' to LanguageDescription.of");e=()=>Promise.resolve(r)}return new Ft(t.name,(t.alias||[]).concat(t.name).map((t=>t.toLowerCase())),t.extensions||[],t.filename,e,r)}static matchFilename(t,e){for(let r of t)if(r.filename&&r.filename.test(e))return r;let r=/\.([^.]+)$/.exec(e);if(r)for(let e of t)if(e.extensions.indexOf(r[1])>-1)return e;return null}static matchLanguageName(t,e,r=!0){e=e.toLowerCase();for(let r of t)if(r.alias.some((t=>t==e)))return r;if(r)for(let r of t)for(let t of r.alias){let n=e.indexOf(t);if(n>-1&&(t.length>2||!/\w/.test(e[n-1])&&!/\w/.test(e[n+t.length])))return r}return null}}const Vt=t.define(),qt=t.define({combine:t=>{if(!t.length)return" ";let e=t[0];if(!e||/\S/.test(e)||Array.from(e).some((t=>t!=e[0])))throw new Error("Invalid indent unit: "+JSON.stringify(t[0]));return e}});function $t(t){let e=t.facet(qt);return 9==e.charCodeAt(0)?t.tabSize*e.length:e.length}function Ht(t,e){let r="",n=t.tabSize,i=t.facet(qt)[0];if("\t"==i){for(;e>=n;)r+="\t",e-=n;i=" "}for(let t=0;t<e;t++)r+=i;return r}function Gt(t,r){t instanceof e&&(t=new Jt(t));for(let e of t.state.facet(Vt)){let n=e(t,r);if(void 0!==n)return n}let n=Ot(t.state);return n.length>=r?function(t,e,r){let n=e.resolveStack(r),i=n.node.enterUnfinishedNodesBefore(r);if(i!=n.node){let t=[];for(let e=i;e!=n.node;e=e.parent)t.push(e);for(let e=t.length-1;e>=0;e--)n={node:t[e],next:n}}return Qt(n,t,r)}(t,n,r):null}class Jt{constructor(t,e={}){this.state=t,this.options=e,this.unit=$t(t)}lineAt(t,e=1){let r=this.state.doc.lineAt(t),{simulateBreak:n,simulateDoubleBreak:i}=this.options;return null!=n&&n>=r.from&&n<=r.to?i&&n==t?{text:"",from:t}:(e<0?n<t:n<=t)?{text:r.text.slice(n-r.from),from:n}:{text:r.text.slice(0,n-r.from),from:r.from}:r}textAfterPos(t,e=1){if(this.options.simulateDoubleBreak&&t==this.options.simulateBreak)return"";let{text:r,from:n}=this.lineAt(t,e);return r.slice(t-n,Math.min(r.length,t+100-n))}column(t,e=1){let{text:r,from:n}=this.lineAt(t,e),i=this.countColumn(r,t-n),s=this.options.overrideIndentation?this.options.overrideIndentation(n):-1;return s>-1&&(i+=s-this.countColumn(r,r.search(/\S|$/))),i}countColumn(t,e=t.length){return i(t,this.state.tabSize,e)}lineIndent(t,e=1){let{text:r,from:n}=this.lineAt(t,e),i=this.options.overrideIndentation;if(i){let t=i(n);if(t>-1)return t}return this.countColumn(r,r.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}}const Kt=new w;function Qt(t,e,r){for(let n=t;n;n=n.next){let t=Xt(n.node);if(t)return t(Zt.create(e,r,n))}return 0}function Xt(t){let e=t.type.prop(Kt);if(e)return e;let r,n=t.firstChild;if(n&&(r=n.type.prop(w.closedBy))){let e=t.lastChild,n=e&&r.indexOf(e.name)>-1;return t=>re(t,!0,1,void 0,n&&!function(t){return t.pos==t.options.simulateBreak&&t.options.simulateDoubleBreak}(t)?e.from:void 0)}return null==t.parent?Yt:null}function Yt(){return 0}class Zt extends Jt{constructor(t,e,r){super(t.state,t.options),this.base=t,this.pos=e,this.context=r}get node(){return this.context.node}static create(t,e,r){return new Zt(t,e,r)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(t){let e=this.state.doc.lineAt(t.from);for(;;){let r=t.resolve(e.from);for(;r.parent&&r.parent.from==r.from;)r=r.parent;if(te(r,t))break;e=this.state.doc.lineAt(r.from)}return this.lineIndent(e.from)}continue(){return Qt(this.context.next,this.base,this.pos)}}function te(t,e){for(let r=e;r;r=r.parent)if(t==r)return!0;return!1}function ee({closing:t,align:e=!0,units:r=1}){return n=>re(n,e,r,t)}function re(t,e,r,n,i){let s=t.textAfter,o=s.match(/^\s*/)[0].length,l=n&&s.slice(o,o+n.length)==n||i==t.pos+o,a=e?function(t){let e=t.node,r=e.childAfter(e.from),n=e.lastChild;if(!r)return null;let i=t.options.simulateBreak,s=t.state.doc.lineAt(r.from),o=null==i||i<=s.from?s.to:Math.min(s.to,i);for(let t=r.to;;){let i=e.childAfter(t);if(!i||i==n)return null;if(!i.type.isSkipped)return i.from<o?r:null;t=i.to}}(t):null;return a?l?t.column(a.from):t.column(a.to):t.baseIndent+(l?0:t.unit*r)}function ne(){return e.transactionFilter.of((t=>{if(!t.docChanged||!t.isUserEvent("input.type")&&!t.isUserEvent("input.complete"))return t;let e=t.startState.languageDataAt("indentOnInput",t.startState.selection.main.head);if(!e.length)return t;let r=t.newDoc,{head:n}=t.newSelection.main,i=r.lineAt(n);if(n>i.from+200)return t;let s=r.sliceString(i.from,n);if(!e.some((t=>t.test(s))))return t;let{state:o}=t,l=-1,a=[];for(let{head:t}of o.selection.ranges){let e=o.doc.lineAt(t);if(e.from==l)continue;l=e.from;let r=Gt(o,e.from);if(null==r)continue;let n=/^\s*/.exec(e.text)[0],i=Ht(o,r);n!=i&&a.push({from:e.from,to:e.from+n.length,insert:i})}return a.length?[t,{changes:a,sequential:!0}]:t}))}const ie=t.define(),se=new w;function oe(t){let e=t.firstChild,r=t.lastChild;return e&&e.to<r.from?{from:e.to,to:r.type.isError?t.to:r.from}:null}function le(t){let e=t.lastChild;return e&&e.to==t.to&&e.type.isError}function ae(t,e,r){for(let n of t.facet(ie)){let i=n(t,e,r);if(i)return i}return function(t,e,r){let n=Ot(t);if(n.length<r)return null;let i=null;for(let s=n.resolveStack(r,1);s;s=s.next){let o=s.node;if(o.to<=r||o.from>r)continue;if(i&&o.from<e)break;let l=o.type.prop(se);if(l&&(o.to<n.length-50||n.length==t.doc.length||!le(o))){let n=l(o,t);n&&n.from<=r&&n.from>=e&&n.to>r&&(i=n)}}return i}(t,e,r)}function he(t,e){let r=e.mapPos(t.from,1),n=e.mapPos(t.to,-1);return r>=n?void 0:{from:r,to:n}}const fe=r.define({map:he}),ue=r.define({map:he});function ce(t){let e=[];for(let{head:r}of t.state.selection.ranges)e.some((t=>t.from<=r&&t.to>=r))||e.push(t.lineBlockAt(r));return e}const de=n.define({create:()=>c.none,update(t,e){t=t.map(e.changes);for(let r of e.effects)if(r.is(fe)&&!ge(t,r.value.from,r.value.to)){let{preparePlaceholder:n}=e.state.facet(Ce),i=n?c.replace({widget:new Te(n(e.state,r.value))}):Ie;t=t.update({add:[i.range(r.value.from,r.value.to)]})}else r.is(ue)&&(t=t.update({filter:(t,e)=>r.value.from!=t||r.value.to!=e,filterFrom:r.value.from,filterTo:r.value.to}));if(e.selection){let r=!1,{head:n}=e.selection.main;t.between(n,n,((t,e)=>{t<n&&e>n&&(r=!0)})),r&&(t=t.update({filterFrom:n,filterTo:n,filter:(t,e)=>e<=n||t>=n}))}return t},provide:t=>u.decorations.from(t),toJSON(t,e){let r=[];return t.between(0,e.doc.length,((t,e)=>{r.push(t,e)})),r},fromJSON(t){if(!Array.isArray(t)||t.length%2)throw new RangeError("Invalid JSON for fold state");let e=[];for(let r=0;r<t.length;){let n=t[r++],i=t[r++];if("number"!=typeof n||"number"!=typeof i)throw new RangeError("Invalid JSON for fold state");e.push(Ie.range(n,i))}return c.set(e,!0)}});function pe(t,e,r){var n;let i=null;return null===(n=t.field(de,!1))||void 0===n||n.between(e,r,((t,e)=>{(!i||i.from>t)&&(i={from:t,to:e})})),i}function ge(t,e,r){let n=!1;return t.between(e,e,((t,i)=>{t==e&&i==r&&(n=!0)})),n}function me(t,e){return t.field(de,!1)?e:e.concat(r.appendConfig.of(Ne()))}const be=t=>{for(let e of ce(t)){let r=ae(t.state,e.from,e.to);if(r)return t.dispatch({effects:me(t.state,[fe.of(r),ke(t,r)])}),!0}return!1},xe=t=>{if(!t.state.field(de,!1))return!1;let e=[];for(let r of ce(t)){let n=pe(t.state,r.from,r.to);n&&e.push(ue.of(n),ke(t,n,!1))}return e.length&&t.dispatch({effects:e}),e.length>0};function ke(t,e,r=!0){let n=t.state.doc.lineAt(e.from).number,i=t.state.doc.lineAt(e.to).number;return u.announce.of(`${t.state.phrase(r?"Folded lines":"Unfolded lines")} ${n} ${t.state.phrase("to")} ${i}.`)}const ye=t=>{let{state:e}=t,r=[];for(let n=0;n<e.doc.length;){let i=t.lineBlockAt(n),s=ae(e,i.from,i.to);s&&r.push(fe.of(s)),n=(s?t.lineBlockAt(s.to):i).to+1}return r.length&&t.dispatch({effects:me(t.state,r)}),!!r.length},we=t=>{let e=t.state.field(de,!1);if(!e||!e.size)return!1;let r=[];return e.between(0,t.state.doc.length,((t,e)=>{r.push(ue.of({from:t,to:e}))})),t.dispatch({effects:r}),!0};function ve(t,e){for(let r=e;;){let n=ae(t.state,r.from,r.to);if(n&&n.to>e.from)return n;if(!r.from)return null;r=t.lineBlockAt(r.from-1)}}const Se=[{key:"Ctrl-Shift-[",mac:"Cmd-Alt-[",run:be},{key:"Ctrl-Shift-]",mac:"Cmd-Alt-]",run:xe},{key:"Ctrl-Alt-[",run:ye},{key:"Ctrl-Alt-]",run:we}],Ae={placeholderDOM:null,preparePlaceholder:null,placeholderText:""},Ce=t.define({combine:t=>o(t,Ae)});function Ne(t){let e=[de,Me];return t&&e.push(Ce.of(t)),e}function Pe(t,e){let{state:r}=t,n=r.facet(Ce),i=e=>{let r=t.lineBlockAt(t.posAtDOM(e.target)),n=pe(t.state,r.from,r.to);n&&t.dispatch({effects:ue.of(n)}),e.preventDefault()};if(n.placeholderDOM)return n.placeholderDOM(t,i,e);let s=document.createElement("span");return s.textContent=n.placeholderText,s.setAttribute("aria-label",r.phrase("folded code")),s.title=r.phrase("unfold"),s.className="cm-foldPlaceholder",s.onclick=i,s}const Ie=c.replace({widget:new class extends d{toDOM(t){return Pe(t,null)}}});class Te extends d{constructor(t){super(),this.value=t}eq(t){return this.value==t.value}toDOM(t){return Pe(t,this.value)}}const Oe={openText:"",closedText:"",markerDOM:null,domEventHandlers:{},foldingChanged:()=>!1};class Be extends m{constructor(t,e){super(),this.config=t,this.open=e}eq(t){return this.config==t.config&&this.open==t.open}toDOM(t){if(this.config.markerDOM)return this.config.markerDOM(this.open);let e=document.createElement("span");return e.textContent=this.open?this.config.openText:this.config.closedText,e.title=t.state.phrase(this.open?"Fold line":"Unfold line"),e}}function _e(t={}){let e=Object.assign(Object.assign({},Oe),t),r=new Be(e,!0),n=new Be(e,!1),i=h.fromClass(class{constructor(t){this.from=t.viewport.from,this.markers=this.buildMarkers(t)}update(t){(t.docChanged||t.viewportChanged||t.startState.facet(Wt)!=t.state.facet(Wt)||t.startState.field(de,!1)!=t.state.field(de,!1)||Ot(t.startState)!=Ot(t.state)||e.foldingChanged(t))&&(this.markers=this.buildMarkers(t.view))}buildMarkers(t){let e=new a;for(let i of t.viewportLineBlocks){let s=pe(t.state,i.from,i.to)?n:ae(t.state,i.from,i.to)?r:null;s&&e.add(i.from,i.from,s)}return e.finish()}}),{domEventHandlers:o}=e;return[i,p({class:"cm-foldGutter",markers(t){var e;return(null===(e=t.plugin(i))||void 0===e?void 0:e.markers)||s.empty},initialSpacer:()=>new Be(e,!1),domEventHandlers:Object.assign(Object.assign({},o),{click:(t,e,r)=>{if(o.click&&o.click(t,e,r))return!0;let n=pe(t.state,e.from,e.to);if(n)return t.dispatch({effects:ue.of(n)}),!0;let i=ae(t.state,e.from,e.to);return!!i&&(t.dispatch({effects:fe.of(i)}),!0)}})}),Ne()]}const Me=u.baseTheme({".cm-foldPlaceholder":{backgroundColor:"#eee",border:"1px solid #ddd",color:"#888",borderRadius:".2em",margin:"0 1px",padding:"0 1px",cursor:"pointer"},".cm-foldGutter span":{padding:"0 1px",cursor:"pointer"}});class De{constructor(t,e){let r;function n(t){let e=b.newName();return(r||(r=Object.create(null)))["."+e]=t,e}this.specs=t;const i="string"==typeof e.all?e.all:e.all?n(e.all):void 0,s=e.scope;this.scope=s instanceof Pt?t=>t.prop(At)==s.data:s?t=>t==s:void 0,this.style=it(t.map((t=>({tag:t.tag,class:t.class||n(Object.assign({},t,{tag:null}))}))),{all:i}).style,this.module=r?new b(r):null,this.themeType=e.themeType}static define(t,e){return new De(t,e||{})}}const Le=t.define(),Ee=t.define({combine:t=>t.length?[t[0]]:null});function Re(t){let e=t.facet(Le);return e.length?e:t.facet(Ee)}function ze(t,e){let r,n=[We];return t instanceof De&&(t.module&&n.push(u.styleModule.of(t.module)),r=t.themeType),(null==e?void 0:e.fallback)?n.push(Ee.of(t)):r?n.push(Le.computeN([u.darkTheme],(e=>e.facet(u.darkTheme)==("dark"==r)?[t]:[]))):n.push(Le.of(t)),n}class je{constructor(t){this.markCache=Object.create(null),this.tree=Ot(t.state),this.decorations=this.buildDeco(t,Re(t.state)),this.decoratedTo=t.viewport.to}update(t){let e=Ot(t.state),r=Re(t.state),n=r!=Re(t.startState),{viewport:i}=t.view,s=t.changes.mapPos(this.decoratedTo,1);e.length<i.to&&!n&&e.type==this.tree.type&&s>=i.to?(this.decorations=this.decorations.map(t.changes),this.decoratedTo=s):(e!=this.tree||t.viewportChanged||n)&&(this.tree=e,this.decorations=this.buildDeco(t.view,r),this.decoratedTo=i.to)}buildDeco(t,e){if(!e||!this.tree.length)return c.none;let r=new a;for(let{from:n,to:i}of t.visibleRanges)st(this.tree,e,((t,e,n)=>{r.add(t,e,this.markCache[n]||(this.markCache[n]=c.mark({class:n})))}),n,i);return r.finish()}}const We=l.high(h.fromClass(je,{decorations:t=>t.decorations})),Ue=De.define([{tag:vt.meta,color:"#404740"},{tag:vt.link,textDecoration:"underline"},{tag:vt.heading,textDecoration:"underline",fontWeight:"bold"},{tag:vt.emphasis,fontStyle:"italic"},{tag:vt.strong,fontWeight:"bold"},{tag:vt.strikethrough,textDecoration:"line-through"},{tag:vt.keyword,color:"#708"},{tag:[vt.atom,vt.bool,vt.url,vt.contentSeparator,vt.labelName],color:"#219"},{tag:[vt.literal,vt.inserted],color:"#164"},{tag:[vt.string,vt.deleted],color:"#a11"},{tag:[vt.regexp,vt.escape,vt.special(vt.string)],color:"#e40"},{tag:vt.definition(vt.variableName),color:"#00f"},{tag:vt.local(vt.variableName),color:"#30a"},{tag:[vt.typeName,vt.namespace],color:"#085"},{tag:vt.className,color:"#167"},{tag:[vt.special(vt.variableName),vt.macroName],color:"#256"},{tag:vt.definition(vt.propertyName),color:"#00c"},{tag:vt.comment,color:"#940"},{tag:vt.invalid,color:"#f00"}]),Fe=u.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),Ve="()[]{}",qe=t.define({combine:t=>o(t,{afterCursor:!0,brackets:Ve,maxScanDistance:1e4,renderMatch:Ge})}),$e=c.mark({class:"cm-matchingBracket"}),He=c.mark({class:"cm-nonmatchingBracket"});function Ge(t){let e=[],r=t.matched?$e:He;return e.push(r.range(t.start.from,t.start.to)),t.end&&e.push(r.range(t.end.from,t.end.to)),e}const Je=[n.define({create:()=>c.none,update(t,e){if(!e.docChanged&&!e.selection)return t;let r=[],n=e.state.facet(qe);for(let t of e.state.selection.ranges){if(!t.empty)continue;let i=Ze(e.state,t.head,-1,n)||t.head>0&&Ze(e.state,t.head-1,1,n)||n.afterCursor&&(Ze(e.state,t.head,1,n)||t.head<e.state.doc.length&&Ze(e.state,t.head+1,-1,n));i&&(r=r.concat(n.renderMatch(i,e.state)))}return c.set(r,!0)},provide:t=>u.decorations.from(t)}),Fe];function Ke(t={}){return[qe.of(t),Je]}const Qe=new w;function Xe(t,e,r){let n=t.prop(e<0?w.openedBy:w.closedBy);if(n)return n;if(1==t.name.length){let n=r.indexOf(t.name);if(n>-1&&n%2==(e<0?1:0))return[r[n+e]]}return null}function Ye(t){let e=t.type.prop(Qe);return e?e(t.node):t}function Ze(t,e,r,n={}){let i=n.maxScanDistance||1e4,s=n.brackets||Ve,o=Ot(t),l=o.resolveInner(e,r);for(let n=l;n;n=n.parent){let i=Xe(n.type,r,s);if(i&&n.from<n.to){let o=Ye(n);if(o&&(r>0?e>=o.from&&e<o.to:e>o.from&&e<=o.to))return tr(t,e,r,n,o,i,s)}}return function(t,e,r,n,i,s,o){let l=r<0?t.sliceDoc(e-1,e):t.sliceDoc(e,e+1),a=o.indexOf(l);if(a<0||a%2==0!=r>0)return null;let h={from:r<0?e-1:e,to:r>0?e+1:e},f=t.doc.iterRange(e,r>0?t.doc.length:0),u=0;for(let t=0;!f.next().done&&t<=s;){let s=f.value;r<0&&(t+=s.length);let l=e+t*r;for(let t=r>0?0:s.length-1,e=r>0?s.length:-1;t!=e;t+=r){let e=o.indexOf(s[t]);if(!(e<0||n.resolveInner(l+t,1).type!=i))if(e%2==0==r>0)u++;else{if(1==u)return{start:h,end:{from:l+t,to:l+t+1},matched:e>>1==a>>1};u--}}r>0&&(t+=s.length)}return f.done?{start:h,matched:!1}:null}(t,e,r,o,l.type,i,s)}function tr(t,e,r,n,i,s,o){let l=n.parent,a={from:i.from,to:i.to},h=0,f=null==l?void 0:l.cursor();if(f&&(r<0?f.childBefore(n.from):f.childAfter(n.to)))do{if(r<0?f.to<=n.from:f.from>=n.to){if(0==h&&s.indexOf(f.type.name)>-1&&f.from<f.to){let t=Ye(f);return{start:a,end:t?{from:t.from,to:t.to}:void 0,matched:!0}}if(Xe(f.type,r,o))h++;else if(Xe(f.type,-r,o)){if(0==h){let t=Ye(f);return{start:a,end:t&&t.from<t.to?{from:t.from,to:t.to}:void 0,matched:!1}}h--}}}while(r<0?f.prevSibling():f.nextSibling());return{start:a,matched:!1}}function er(t,e,r,n=0,i=0){null==e&&-1==(e=t.search(/[^\s\u00a0]/))&&(e=t.length);let s=i;for(let i=n;i<e;i++)9==t.charCodeAt(i)?s+=r-s%r:s++;return s}class rr{constructor(t,e,r,n){this.string=t,this.tabSize=e,this.indentUnit=r,this.overrideIndent=n,this.pos=0,this.start=0,this.lastColumnPos=0,this.lastColumnValue=0}eol(){return this.pos>=this.string.length}sol(){return 0==this.pos}peek(){return this.string.charAt(this.pos)||void 0}next(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)}eat(t){let e,r=this.string.charAt(this.pos);if(e="string"==typeof t?r==t:r&&(t instanceof RegExp?t.test(r):t(r)),e)return++this.pos,r}eatWhile(t){let e=this.pos;for(;this.eat(t););return this.pos>e}eatSpace(){let t=this.pos;for(;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>t}skipToEnd(){this.pos=this.string.length}skipTo(t){let e=this.string.indexOf(t,this.pos);if(e>-1)return this.pos=e,!0}backUp(t){this.pos-=t}column(){return this.lastColumnPos<this.start&&(this.lastColumnValue=er(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue}indentation(){var t;return null!==(t=this.overrideIndent)&&void 0!==t?t:er(this.string,null,this.tabSize)}match(t,e,r){if("string"==typeof t){let n=t=>r?t.toLowerCase():t;return n(this.string.substr(this.pos,t.length))==n(t)?(!1!==e&&(this.pos+=t.length),!0):null}{let r=this.string.slice(this.pos).match(t);return r&&r.index>0?null:(r&&!1!==e&&(this.pos+=r[0].length),r)}}current(){return this.string.slice(this.start,this.pos)}}function nr(t){if("object"!=typeof t)return t;let e={};for(let r in t){let n=t[r];e[r]=n instanceof Array?n.slice():n}return e}const ir=new WeakMap;class sr extends Pt{constructor(t){let e,r=Ct(t.languageData),n={name:(i=t).name||"",token:i.token,blankLine:i.blankLine||(()=>{}),startState:i.startState||(()=>!0),copyState:i.copyState||nr,indent:i.indent||(()=>null),languageData:i.languageData||{},tokenTable:i.tokenTable||fr};var i;super(r,new class extends K{createParse(t,r,n){return new ar(e,t,r,n)}},[Vt.of(((t,e)=>this.getIndent(t,e)))],t.name),this.topNode=function(t){let e=A.define({id:ur.length,name:"Document",props:[At.add((()=>t))],top:!0});return ur.push(e),e}(r),e=this,this.streamParser=n,this.stateAfter=new w({perNode:!0}),this.tokenTable=t.tokenTable?new mr(n.tokenTable):br}static define(t){return new sr(t)}getIndent(t,e){let r,n=Ot(t.state),i=n.resolve(e);for(;i&&i.type!=this.topNode;)i=i.parent;if(!i)return null;let{overrideIndentation:s}=t.options;s&&(r=ir.get(t.state),null!=r&&r<e-1e4&&(r=void 0));let o,l,a=or(this,n,0,i.from,null!=r?r:e);if(a?(l=a.state,o=a.pos+1):(l=this.streamParser.startState(t.unit),o=0),e-o>1e4)return null;for(;o<e;){let r=t.state.doc.lineAt(o),n=Math.min(e,r.to);if(r.length){let e=s?s(r.from):-1,i=new rr(r.text,t.state.tabSize,t.unit,e<0?void 0:e);for(;i.pos<n-r.from;)hr(this.streamParser.token,i,l)}else this.streamParser.blankLine(l,t.unit);if(n==e)break;o=r.to+1}let h=t.lineAt(e);return s&&null==r&&ir.set(t.state,h.from),this.streamParser.indent(l,/^\s*(.*)/.exec(h.text)[1],t)}get allowsNesting(){return!1}}function or(t,e,r,n,i){let s=r>=n&&r+e.length<=i&&e.prop(t.stateAfter);if(s)return{state:t.streamParser.copyState(s),pos:r+e.length};for(let s=e.children.length-1;s>=0;s--){let o=e.children[s],l=r+e.positions[s],a=o instanceof T&&l<i&&or(t,o,l,n,i);if(a)return a}return null}function lr(t,e,r,n,i){if(i&&r<=0&&n>=e.length)return e;i||e.type!=t.topNode||(i=!0);for(let s=e.children.length-1;s>=0;s--){let o,l=e.positions[s],a=e.children[s];if(l<n&&a instanceof T){if(!(o=lr(t,a,r-l,n-l,i)))break;return i?new T(e.type,e.children.slice(0,s).concat(o),e.positions.slice(0,s+1),l+o.length):o}}return null}class ar{constructor(t,e,r,n){this.lang=t,this.input=e,this.fragments=r,this.ranges=n,this.stoppedAt=null,this.chunks=[],this.chunkPos=[],this.chunk=[],this.chunkReused=void 0,this.rangeIndex=0,this.to=n[n.length-1].to;let i=Dt.get(),s=n[0].from,{state:o,tree:l}=function(t,e,r,n){for(let n of e){let e,i=n.from+(n.openStart?25:0),s=n.to-(n.openEnd?25:0),o=i<=r&&s>r&&or(t,n.tree,0-n.offset,r,s);if(o&&(e=lr(t,n.tree,r+n.offset,o.pos+n.offset,!1)))return{state:o.state,tree:e}}return{state:t.streamParser.startState(n?$t(n):4),tree:T.empty}}(t,r,s,null==i?void 0:i.state);this.state=o,this.parsedPos=this.chunkStart=s+l.length;for(let t=0;t<l.children.length;t++)this.chunks.push(l.children[t]),this.chunkPos.push(l.positions[t]);i&&this.parsedPos<i.viewport.from-1e5&&(this.state=this.lang.streamParser.startState($t(i.state)),i.skipUntilInView(this.parsedPos,i.viewport.from),this.parsedPos=i.viewport.from),this.moveRangeIndex()}advance(){let t=Dt.get(),e=null==this.stoppedAt?this.to:Math.min(this.to,this.stoppedAt),r=Math.min(e,this.chunkStart+2048);for(t&&(r=Math.min(r,t.viewport.to));this.parsedPos<r;)this.parseLine(t);return this.chunkStart<this.parsedPos&&this.finishChunk(),this.parsedPos>=e?this.finish():t&&this.parsedPos>=t.viewport.to?(t.skipUntilInView(this.parsedPos,e),this.finish()):null}stopAt(t){this.stoppedAt=t}lineAfter(t){let e=this.input.chunk(t);if(this.input.lineChunks)"\n"==e&&(e="");else{let t=e.indexOf("\n");t>-1&&(e=e.slice(0,t))}return t+e.length<=this.to?e:e.slice(0,this.to-t)}nextLine(){let t=this.parsedPos,e=this.lineAfter(t),r=t+e.length;for(let t=this.rangeIndex;;){let n=this.ranges[t].to;if(n>=r)break;if(e=e.slice(0,n-(r-e.length)),t++,t==this.ranges.length)break;let i=this.ranges[t].from,s=this.lineAfter(i);e+=s,r=i+s.length}return{line:e,end:r}}skipGapsTo(t,e,r){for(;;){let n=this.ranges[this.rangeIndex].to,i=t+e;if(r>0?n>i:n>=i)break;e+=this.ranges[++this.rangeIndex].from-n}return e}moveRangeIndex(){for(;this.ranges[this.rangeIndex].to<this.parsedPos;)this.rangeIndex++}emitToken(t,e,r,n,i){if(this.ranges.length>1){e+=i=this.skipGapsTo(e,i,1);let t=this.chunk.length;r+=i=this.skipGapsTo(r,i,-1),n+=this.chunk.length-t}return this.chunk.push(t,e,r,n),i}parseLine(t){let{line:e,end:r}=this.nextLine(),n=0,{streamParser:i}=this.lang,s=new rr(e,t?t.state.tabSize:4,t?$t(t.state):2);if(s.eol())i.blankLine(this.state,s.indentUnit);else for(;!s.eol();){let t=hr(i.token,s,this.state);if(t&&(n=this.emitToken(this.lang.tokenTable.resolve(t),this.parsedPos+s.start,this.parsedPos+s.pos,4,n)),s.start>1e4)break}this.parsedPos=r,this.moveRangeIndex(),this.parsedPos<this.to&&this.parsedPos++}finishChunk(){let t=T.build({buffer:this.chunk,start:this.chunkStart,length:this.parsedPos-this.chunkStart,nodeSet:cr,topID:0,maxBufferLength:2048,reused:this.chunkReused});t=new T(t.type,t.children,t.positions,t.length,[[this.lang.stateAfter,this.lang.streamParser.copyState(this.state)]]),this.chunks.push(t),this.chunkPos.push(this.chunkStart-this.ranges[0].from),this.chunk=[],this.chunkReused=void 0,this.chunkStart=this.parsedPos}finish(){return new T(this.lang.topNode,this.chunks,this.chunkPos,this.parsedPos-this.ranges[0].from).balance()}}function hr(t,e,r){e.start=e.pos;for(let n=0;n<10;n++){let n=t(e,r);if(e.pos>e.start)return n}throw new Error("Stream parser failed to advance stream.")}const fr=Object.create(null),ur=[A.none],cr=new C(ur),dr=[],pr=Object.create(null),gr=Object.create(null);for(let[t,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])gr[t]=kr(fr,e);class mr{constructor(t){this.extra=t,this.table=Object.assign(Object.create(null),gr)}resolve(t){return t?this.table[t]||(this.table[t]=kr(this.extra,t)):0}}const br=new mr(fr);function xr(t,e){dr.indexOf(t)>-1||(dr.push(t),console.warn(e))}function kr(t,e){let r=[];for(let n of e.split(" ")){let e=[];for(let r of n.split(".")){let n=t[r]||vt[r];n?"function"==typeof n?e.length?e=e.map(n):xr(r,`Modifier ${r} used at start of tag`):e.length?xr(r,`Tag ${r} used as modifier`):e=Array.isArray(n)?n:[n]:xr(r,`Unknown highlighting tag ${r}`)}for(let t of e)r.push(t)}if(!r.length)return 0;let n=e.replace(/ /g,"_"),i=n+" "+r.map((t=>t.id)),s=pr[i];if(s)return s.id;let o=pr[i]=A.define({id:ur.length,name:n,props:[et({[n]:r})]});return ur.push(o),o.id}function yr(t){return t.length<=4096&&/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac\ufb50-\ufdff]/.test(t)}function wr(t){for(let e=t.iter();!e.next().done;)if(yr(e.value))return!0;return!1}const vr=t.define({combine:t=>t.some((t=>t))});const Sr=h.fromClass(class{constructor(t){this.always=t.state.facet(vr)||t.textDirection!=g.LTR||t.state.facet(u.perLineTextDirection),this.hasRTL=!this.always&&wr(t.state.doc),this.tree=Ot(t.state),this.decorations=this.always||this.hasRTL?Ar(t,this.tree,this.always):c.none}update(t){let e=t.state.facet(vr)||t.view.textDirection!=g.LTR||t.state.facet(u.perLineTextDirection);if(e||this.hasRTL||!function(t){let e=!1;return t.iterChanges(((t,r,n,i,s)=>{!e&&wr(s)&&(e=!0)})),e}(t.changes)||(this.hasRTL=!0),!e&&!this.hasRTL)return;let r=Ot(t.state);(e!=this.always||r!=this.tree||t.docChanged||t.viewportChanged)&&(this.tree=r,this.always=e,this.decorations=Ar(t.view,r,e))}},{provide:t=>{function e(e){var r,n;return null!==(n=null===(r=e.plugin(t))||void 0===r?void 0:r.decorations)&&void 0!==n?n:c.none}return[u.outerDecorations.of(e),l.lowest(u.bidiIsolatedRanges.of(e))]}});function Ar(t,e,r){let n=new a,i=t.visibleRanges;r||(i=function(t,e){let r=e.iter(),n=0,i=[],s=null;for(let{from:e,to:o}of t)for(e!=n&&(n<e&&r.next(e-n),n=e);;){let t=n,e=n+r.value.length;if(!r.lineBreak&&yr(r.value)&&(s&&s.to>t-10?s.to=Math.min(o,e):i.push(s={from:t,to:Math.min(o,e)})),n>=o)break;n=e,r.next()}return i}(i,t.state.doc));for(let{from:t,to:r}of i)e.iterate({enter:t=>{let e=t.type.prop(w.isolate);e&&n.add(t.from,t.to,Cr[e])},from:t,to:r});return n.finish()}const Cr={rtl:c.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"rtl"},bidiIsolate:g.RTL}),ltr:c.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"ltr"},bidiIsolate:g.LTR}),auto:c.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"auto"},bidiIsolate:null})};var Nr=Object.freeze({__proto__:null,DocInput:_t,HighlightStyle:De,IndentContext:Jt,LRLanguage:Tt,Language:Pt,LanguageDescription:Ft,LanguageSupport:Ut,ParseContext:Dt,StreamLanguage:sr,StringStream:rr,TreeIndentContext:Zt,bidiIsolates:function(t={}){let e=[Sr];return t.alwaysIsolate&&e.push(vr.of(!0)),e},bracketMatching:Ke,bracketMatchingHandle:Qe,codeFolding:Ne,continuedIndent:function({except:t,units:e=1}={}){return r=>{let n=t&&t.test(r.textAfter);return r.baseIndent+(n?0:e*r.unit)}},defaultHighlightStyle:Ue,defineLanguageFacet:Ct,delimitedIndent:ee,ensureSyntaxTree:Bt,flatIndent:t=>t.baseIndent,foldAll:ye,foldCode:be,foldEffect:fe,foldGutter:_e,foldInside:oe,foldKeymap:Se,foldNodeProp:se,foldService:ie,foldState:de,foldable:ae,foldedRanges:function(t){return t.field(de,!1)||s.empty},forceParsing:function(t,e=t.viewport.to,r=100){let n=Bt(t.state,e,r);return n!=Ot(t.state)&&t.dispatch({}),!!n},getIndentUnit:$t,getIndentation:Gt,highlightingFor:function(t,e,r){let n=Re(t),i=null;if(n)for(let t of n)if(!t.scope||r&&t.scope(r)){let r=t.style(e);r&&(i=i?i+" "+r:r)}return i},indentNodeProp:Kt,indentOnInput:ne,indentRange:function(t,e,r){let n=Object.create(null),i=new Jt(t,{overrideIndentation:t=>{var e;return null!==(e=n[t])&&void 0!==e?e:-1}}),s=[];for(let o=e;o<=r;){let e=t.doc.lineAt(o);o=e.to+1;let r=Gt(i,e.from);if(null==r)continue;/\S/.test(e.text)||(r=0);let l=/^\s*/.exec(e.text)[0],a=Ht(t,r);l!=a&&(n[e.from]=r,s.push({from:e.from,to:e.from+l.length,insert:a}))}return t.changes(s)},indentService:Vt,indentString:Ht,indentUnit:qt,language:Wt,languageDataProp:At,matchBrackets:Ze,sublanguageProp:Nt,syntaxHighlighting:ze,syntaxParserRunning:function(t){var e;return(null===(e=t.plugin(jt))||void 0===e?void 0:e.isWorking())||!1},syntaxTree:Ot,syntaxTreeAvailable:function(t,e=t.doc.length){var r;return(null===(r=t.field(Pt.state,!1))||void 0===r?void 0:r.context.isDone(e))||!1},toggleFold:t=>{let e=[];for(let r of ce(t)){let n=pe(t.state,r.from,r.to);if(n)e.push(ue.of(n),ke(t,n,!1));else{let n=ve(t,r);n&&e.push(fe.of(n),ke(t,n))}}return e.length>0&&t.dispatch({effects:me(t.state,e)}),!!e.length},unfoldAll:we,unfoldCode:xe,unfoldEffect:ue});export{x as D,I,Tt as L,C as N,K as P,T,A as a,w as b,et as c,Kt as d,ee as e,se as f,oe as g,Ut as h,qt as i,G as j,_e as k,ne as l,ze as m,Ue as n,Ke as o,Se as p,Jt as q,Gt as r,Ot as s,vt as t,Ht as u,Ze as v,$t as w,Nr as x};
//# sourceMappingURL=codemirror_language-_XiX6II0.js.map
This source diff could not be displayed because it is too large. You can view the blob instead.
class t{lineAt(t){if(t<0||t>this.length)throw new RangeError(`Invalid position ${t} in document of length ${this.length}`);return this.lineInner(t,!1,1,0)}line(t){if(t<1||t>this.lines)throw new RangeError(`Invalid line number ${t} in ${this.lines}-line document`);return this.lineInner(t,!0,1,0)}replace(t,e,i){[t,e]=a(this,t,e);let s=[];return this.decompose(0,t,s,2),i.length&&i.decompose(0,i.length,s,3),this.decompose(e,this.length,s,1),n.from(s,this.length-(e-t)+i.length)}append(t){return this.replace(this.length,this.length,t)}slice(t,e=this.length){[t,e]=a(this,t,e);let i=[];return this.decompose(t,e,i,0),n.from(i,e-t)}eq(t){if(t==this)return!0;if(t.length!=this.length||t.lines!=this.lines)return!1;let e=this.scanIdentical(t,1),n=this.length-this.scanIdentical(t,-1),i=new r(this),s=new r(t);for(let t=e,r=e;;){if(i.next(t),s.next(t),t=0,i.lineBreak!=s.lineBreak||i.done!=s.done||i.value!=s.value)return!1;if(r+=i.value.length,i.done||r>=n)return!0}}iter(t=1){return new r(this,t)}iterRange(t,e=this.length){return new h(this,t,e)}iterLines(t,e){let n;if(null==t)n=this.iter();else{null==e&&(e=this.lines+1);let i=this.line(t).from;n=this.iterRange(i,Math.max(i,e==this.lines+1?this.length:e<=1?0:this.line(e-1).to))}return new o(n)}toString(){return this.sliceString(0)}toJSON(){let t=[];return this.flatten(t),t}constructor(){}static of(i){if(0==i.length)throw new RangeError("A document must have at least one line");return 1!=i.length||i[0]?i.length<=32?new e(i):n.from(e.split(i,[])):t.empty}}class e extends t{constructor(t,e=function(t){let e=-1;for(let n of t)e+=n.length+1;return e}(t)){super(),this.text=t,this.length=e}get lines(){return this.text.length}get children(){return null}lineInner(t,e,n,i){for(let s=0;;s++){let r=this.text[s],h=i+r.length;if((e?n:h)>=t)return new l(i,h,n,r);i=h+1,n++}}decompose(t,n,r,h){let o=t<=0&&n>=this.length?this:new e(s(this.text,t,n),Math.min(n,this.length)-Math.max(0,t));if(1&h){let t=r.pop(),n=i(o.text,t.text.slice(),0,o.length);if(n.length<=32)r.push(new e(n,t.length+o.length));else{let t=n.length>>1;r.push(new e(n.slice(0,t)),new e(n.slice(t)))}}else r.push(o)}replace(t,r,h){if(!(h instanceof e))return super.replace(t,r,h);[t,r]=a(this,t,r);let o=i(this.text,i(h.text,s(this.text,0,t)),r),l=this.length+h.length-(r-t);return o.length<=32?new e(o,l):n.from(e.split(o,[]),l)}sliceString(t,e=this.length,n="\n"){[t,e]=a(this,t,e);let i="";for(let s=0,r=0;s<=e&&r<this.text.length;r++){let h=this.text[r],o=s+h.length;s>t&&r&&(i+=n),t<o&&e>s&&(i+=h.slice(Math.max(0,t-s),e-s)),s=o+1}return i}flatten(t){for(let e of this.text)t.push(e)}scanIdentical(){return 0}static split(t,n){let i=[],s=-1;for(let r of t)i.push(r),s+=r.length+1,32==i.length&&(n.push(new e(i,s)),i=[],s=-1);return s>-1&&n.push(new e(i,s)),n}}class n extends t{constructor(t,e){super(),this.children=t,this.length=e,this.lines=0;for(let e of t)this.lines+=e.lines}lineInner(t,e,n,i){for(let s=0;;s++){let r=this.children[s],h=i+r.length,o=n+r.lines-1;if((e?o:h)>=t)return r.lineInner(t,e,n,i);i=h+1,n=o+1}}decompose(t,e,n,i){for(let s=0,r=0;r<=e&&s<this.children.length;s++){let h=this.children[s],o=r+h.length;if(t<=o&&e>=r){let s=i&((r<=t?1:0)|(o>=e?2:0));r>=t&&o<=e&&!s?n.push(h):h.decompose(t-r,e-r,n,s)}r=o+1}}replace(t,e,i){if([t,e]=a(this,t,e),i.lines<this.lines)for(let s=0,r=0;s<this.children.length;s++){let h=this.children[s],o=r+h.length;if(t>=r&&e<=o){let l=h.replace(t-r,e-r,i),a=this.lines-h.lines+l.lines;if(l.lines<a>>4&&l.lines>a>>6){let r=this.children.slice();return r[s]=l,new n(r,this.length-(e-t)+i.length)}return super.replace(r,o,l)}r=o+1}return super.replace(t,e,i)}sliceString(t,e=this.length,n="\n"){[t,e]=a(this,t,e);let i="";for(let s=0,r=0;s<this.children.length&&r<=e;s++){let h=this.children[s],o=r+h.length;r>t&&s&&(i+=n),t<o&&e>r&&(i+=h.sliceString(t-r,e-r,n)),r=o+1}return i}flatten(t){for(let e of this.children)e.flatten(t)}scanIdentical(t,e){if(!(t instanceof n))return 0;let i=0,[s,r,h,o]=e>0?[0,0,this.children.length,t.children.length]:[this.children.length-1,t.children.length-1,-1,-1];for(;;s+=e,r+=e){if(s==h||r==o)return i;let n=this.children[s],l=t.children[r];if(n!=l)return i+n.scanIdentical(l,e);i+=n.length+1}}static from(t,i=t.reduce(((t,e)=>t+e.length+1),-1)){let s=0;for(let e of t)s+=e.lines;if(s<32){let n=[];for(let e of t)e.flatten(n);return new e(n,i)}let r=Math.max(32,s>>5),h=r<<1,o=r>>1,l=[],a=0,c=-1,f=[];function u(t){let i;if(t.lines>h&&t instanceof n)for(let e of t.children)u(e);else t.lines>o&&(a>o||!a)?(g(),l.push(t)):t instanceof e&&a&&(i=f[f.length-1])instanceof e&&t.lines+i.lines<=32?(a+=t.lines,c+=t.length+1,f[f.length-1]=new e(i.text.concat(t.text),i.length+1+t.length)):(a+t.lines>r&&g(),a+=t.lines,c+=t.length+1,f.push(t))}function g(){0!=a&&(l.push(1==f.length?f[0]:n.from(f,c)),c=-1,a=f.length=0)}for(let e of t)u(e);return g(),1==l.length?l[0]:new n(l,i)}}function i(t,e,n=0,i=1e9){for(let s=0,r=0,h=!0;r<t.length&&s<=i;r++){let o=t[r],l=s+o.length;l>=n&&(l>i&&(o=o.slice(0,i-s)),s<n&&(o=o.slice(n-s)),h?(e[e.length-1]+=o,h=!1):e.push(o)),s=l+1}return e}function s(t,e,n){return i(t,[""],e,n)}t.empty=new e([""],0);class r{constructor(t,n=1){this.dir=n,this.done=!1,this.lineBreak=!1,this.value="",this.nodes=[t],this.offsets=[n>0?1:(t instanceof e?t.text.length:t.children.length)<<1]}nextInner(t,n){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,s=this.nodes[i],r=this.offsets[i],h=r>>1,o=s instanceof e?s.text.length:s.children.length;if(h==(n>0?o:0)){if(0==i)return this.done=!0,this.value="",this;n>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((1&r)==(n>0?0:1)){if(this.offsets[i]+=n,0==t)return this.lineBreak=!0,this.value="\n",this;t--}else if(s instanceof e){let e=s.text[h+(n<0?-1:0)];if(this.offsets[i]+=n,e.length>Math.max(0,t))return this.value=0==t?e:n>0?e.slice(t):e.slice(0,e.length-t),this;t-=e.length}else{let r=s.children[h+(n<0?-1:0)];t>r.length?(t-=r.length,this.offsets[i]+=n):(n<0&&this.offsets[i]--,this.nodes.push(r),this.offsets.push(n>0?1:(r instanceof e?r.text.length:r.children.length)<<1))}}}next(t=0){return t<0&&(this.nextInner(-t,-this.dir),t=this.value.length),this.nextInner(t,this.dir)}}class h{constructor(t,e,n){this.value="",this.done=!1,this.cursor=new r(t,e>n?-1:1),this.pos=e>n?t.length:0,this.from=Math.min(e,n),this.to=Math.max(e,n)}nextInner(t,e){if(e<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;t+=Math.max(0,e<0?this.pos-this.to:this.from-this.pos);let n=e<0?this.pos-this.from:this.to-this.pos;t>n&&(t=n),n-=t;let{value:i}=this.cursor.next(t);return this.pos+=(i.length+t)*e,this.value=i.length<=n?i:e<0?i.slice(i.length-n):i.slice(0,n),this.done=!this.value,this}next(t=0){return t<0?t=Math.max(t,this.from-this.pos):t>0&&(t=Math.min(t,this.to-this.pos)),this.nextInner(t,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&""!=this.value}}class o{constructor(t){this.inner=t,this.afterBreak=!0,this.value="",this.done=!1}next(t=0){let{done:e,lineBreak:n,value:i}=this.inner.next(t);return e&&this.afterBreak?(this.value="",this.afterBreak=!1):e?(this.done=!0,this.value=""):n?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=i,this.afterBreak=!1),this}get lineBreak(){return!1}}"undefined"!=typeof Symbol&&(t.prototype[Symbol.iterator]=function(){return this.iter()},r.prototype[Symbol.iterator]=h.prototype[Symbol.iterator]=o.prototype[Symbol.iterator]=function(){return this});class l{constructor(t,e,n,i){this.from=t,this.to=e,this.number=n,this.text=i}get length(){return this.to-this.from}}function a(t,e,n){return[e=Math.max(0,Math.min(t.length,e)),Math.max(e,Math.min(t.length,n))]}let c="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map((t=>t?parseInt(t,36):1));for(let t=1;t<c.length;t++)c[t]+=c[t-1];function f(t){for(let e=1;e<c.length;e+=2)if(c[e]>t)return c[e-1]<=t;return!1}function u(t){return t>=127462&&t<=127487}const g=8205;function d(t,e,n=!0,i=!0){return(n?p:m)(t,e,i)}function p(t,e,n){if(e==t.length)return e;e&&v(t.charCodeAt(e))&&x(t.charCodeAt(e-1))&&e--;let i=w(t,e);for(e+=y(i);e<t.length;){let s=w(t,e);if(i==g||s==g||n&&f(s))e+=y(s),i=s;else{if(!u(s))break;{let n=0,i=e-2;for(;i>=0&&u(w(t,i));)n++,i-=2;if(n%2==0)break;e+=2}}}return e}function m(t,e,n){for(;e>0;){let i=p(t,e-2,n);if(i<e)return i;e--}return 0}function v(t){return t>=56320&&t<57344}function x(t){return t>=55296&&t<56320}function w(t,e){let n=t.charCodeAt(e);if(!x(n)||e+1==t.length)return n;let i=t.charCodeAt(e+1);return v(i)?i-56320+(n-55296<<10)+65536:n}function k(t){return t<=65535?String.fromCharCode(t):(t-=65536,String.fromCharCode(55296+(t>>10),56320+(1023&t)))}function y(t){return t<65536?1:2}const S=/\r\n?|\n/;var I=function(t){return t[t.Simple=0]="Simple",t[t.TrackDel=1]="TrackDel",t[t.TrackBefore=2]="TrackBefore",t[t.TrackAfter=3]="TrackAfter",t}(I||(I={}));class b{constructor(t){this.sections=t}get length(){let t=0;for(let e=0;e<this.sections.length;e+=2)t+=this.sections[e];return t}get newLength(){let t=0;for(let e=0;e<this.sections.length;e+=2){let n=this.sections[e+1];t+=n<0?this.sections[e]:n}return t}get empty(){return 0==this.sections.length||2==this.sections.length&&this.sections[1]<0}iterGaps(t){for(let e=0,n=0,i=0;e<this.sections.length;){let s=this.sections[e++],r=this.sections[e++];r<0?(t(n,i,s),i+=s):i+=r,n+=s}}iterChangedRanges(t,e=!1){A(this,t,e)}get invertedDesc(){let t=[];for(let e=0;e<this.sections.length;){let n=this.sections[e++],i=this.sections[e++];i<0?t.push(n,i):t.push(i,n)}return new b(t)}composeDesc(t){return this.empty?t:t.empty?this:R(this,t)}mapDesc(t,e=!1){return t.empty?this:O(this,t,e)}mapPos(t,e=-1,n=I.Simple){let i=0,s=0;for(let r=0;r<this.sections.length;){let h=this.sections[r++],o=this.sections[r++],l=i+h;if(o<0){if(l>t)return s+(t-i);s+=h}else{if(n!=I.Simple&&l>=t&&(n==I.TrackDel&&i<t&&l>t||n==I.TrackBefore&&i<t||n==I.TrackAfter&&l>t))return null;if(l>t||l==t&&e<0&&!h)return t==i||e<0?s:s+o;s+=o}i=l}if(t>i)throw new RangeError(`Position ${t} is out of range for changeset of length ${i}`);return s}touchesRange(t,e=t){for(let n=0,i=0;n<this.sections.length&&i<=e;){let s=i+this.sections[n++];if(this.sections[n++]>=0&&i<=e&&s>=t)return!(i<t&&s>e)||"cover";i=s}return!1}toString(){let t="";for(let e=0;e<this.sections.length;){let n=this.sections[e++],i=this.sections[e++];t+=(t?" ":"")+n+(i>=0?":"+i:"")}return t}toJSON(){return this.sections}static fromJSON(t){if(!Array.isArray(t)||t.length%2||t.some((t=>"number"!=typeof t)))throw new RangeError("Invalid JSON representation of ChangeDesc");return new b(t)}static create(t){return new b(t)}}class P extends b{constructor(t,e){super(t),this.inserted=e}apply(t){if(this.length!=t.length)throw new RangeError("Applying change set to a document with the wrong length");return A(this,((e,n,i,s,r)=>t=t.replace(i,i+(n-e),r)),!1),t}mapDesc(t,e=!1){return O(this,t,e,!0)}invert(e){let n=this.sections.slice(),i=[];for(let s=0,r=0;s<n.length;s+=2){let h=n[s],o=n[s+1];if(o>=0){n[s]=o,n[s+1]=h;let l=s>>1;for(;i.length<l;)i.push(t.empty);i.push(h?e.slice(r,r+h):t.empty)}r+=h}return new P(n,i)}compose(t){return this.empty?t:t.empty?this:R(this,t,!0)}map(t,e=!1){return t.empty?this:O(this,t,e,!0)}iterChanges(t,e=!1){A(this,t,e)}get desc(){return b.create(this.sections)}filter(t){let e=[],n=[],i=[],s=new T(this);t:for(let r=0,h=0;;){let o=r==t.length?1e9:t[r++];for(;h<o||h==o&&0==s.len;){if(s.done)break t;let t=Math.min(s.len,o-h);E(i,t,-1);let r=-1==s.ins?-1:0==s.off?s.ins:0;E(e,t,r),r>0&&M(n,e,s.text),s.forward(t),h+=t}let l=t[r++];for(;h<l;){if(s.done)break t;let t=Math.min(s.len,l-h);E(e,t,-1),E(i,t,-1==s.ins?-1:0==s.off?s.ins:0),s.forward(t),h+=t}}return{changes:new P(e,n),filtered:b.create(i)}}toJSON(){let t=[];for(let e=0;e<this.sections.length;e+=2){let n=this.sections[e],i=this.sections[e+1];i<0?t.push(n):0==i?t.push([n]):t.push([n].concat(this.inserted[e>>1].toJSON()))}return t}static of(e,n,i){let s=[],r=[],h=0,o=null;function l(t=!1){if(!t&&!s.length)return;h<n&&E(s,n-h,-1);let e=new P(s,r);o=o?o.compose(e.map(o)):e,s=[],r=[],h=0}return function e(a){if(Array.isArray(a))for(let t of a)e(t);else if(a instanceof P){if(a.length!=n)throw new RangeError(`Mismatched change set length (got ${a.length}, expected ${n})`);l(),o=o?o.compose(a.map(o)):a}else{let{from:e,to:o=e,insert:c}=a;if(e>o||e<0||o>n)throw new RangeError(`Invalid change range ${e} to ${o} (in doc of length ${n})`);let f=c?"string"==typeof c?t.of(c.split(i||S)):c:t.empty,u=f.length;if(e==o&&0==u)return;e<h&&l(),e>h&&E(s,e-h,-1),E(s,o-e,u),M(r,s,f),h=o}}(e),l(!o),o}static empty(t){return new P(t?[t,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let n=[],i=[];for(let s=0;s<e.length;s++){let r=e[s];if("number"==typeof r)n.push(r,-1);else{if(!Array.isArray(r)||"number"!=typeof r[0]||r.some(((t,e)=>e&&"string"!=typeof t)))throw new RangeError("Invalid JSON representation of ChangeSet");if(1==r.length)n.push(r[0],0);else{for(;i.length<s;)i.push(t.empty);i[s]=t.of(r.slice(1)),n.push(r[0],i[s].length)}}}return new P(n,i)}static createSet(t,e){return new P(t,e)}}function E(t,e,n,i=!1){if(0==e&&n<=0)return;let s=t.length-2;s>=0&&n<=0&&n==t[s+1]?t[s]+=e:0==e&&0==t[s]?t[s+1]+=n:i?(t[s]+=e,t[s+1]+=n):t.push(e,n)}function M(e,n,i){if(0==i.length)return;let s=n.length-2>>1;if(s<e.length)e[e.length-1]=e[e.length-1].append(i);else{for(;e.length<s;)e.push(t.empty);e.push(i)}}function A(e,n,i){let s=e.inserted;for(let r=0,h=0,o=0;o<e.sections.length;){let l=e.sections[o++],a=e.sections[o++];if(a<0)r+=l,h+=l;else{let c=r,f=h,u=t.empty;for(;c+=l,f+=a,a&&s&&(u=u.append(s[o-2>>1])),!(i||o==e.sections.length||e.sections[o+1]<0);)l=e.sections[o++],a=e.sections[o++];n(r,c,h,f,u),r=c,h=f}}}function O(t,e,n,i=!1){let s=[],r=i?[]:null,h=new T(t),o=new T(e);for(let t=-1;;)if(-1==h.ins&&-1==o.ins){let t=Math.min(h.len,o.len);E(s,t,-1),h.forward(t),o.forward(t)}else if(o.ins>=0&&(h.ins<0||t==h.i||0==h.off&&(o.len<h.len||o.len==h.len&&!n))){let e=o.len;for(E(s,o.ins,-1);e;){let n=Math.min(h.len,e);h.ins>=0&&t<h.i&&h.len<=n&&(E(s,0,h.ins),r&&M(r,s,h.text),t=h.i),h.forward(n),e-=n}o.next()}else{if(!(h.ins>=0)){if(h.done&&o.done)return r?P.createSet(s,r):b.create(s);throw new Error("Mismatched change set lengths")}{let e=0,n=h.len;for(;n;)if(-1==o.ins){let t=Math.min(n,o.len);e+=t,n-=t,o.forward(t)}else{if(!(0==o.ins&&o.len<n))break;n-=o.len,o.next()}E(s,e,t<h.i?h.ins:0),r&&t<h.i&&M(r,s,h.text),t=h.i,h.forward(h.len-n)}}}function R(t,e,n=!1){let i=[],s=n?[]:null,r=new T(t),h=new T(e);for(let t=!1;;){if(r.done&&h.done)return s?P.createSet(i,s):b.create(i);if(0==r.ins)E(i,r.len,0,t),r.next();else if(0!=h.len||h.done){if(r.done||h.done)throw new Error("Mismatched change set lengths");{let e=Math.min(r.len2,h.len),n=i.length;if(-1==r.ins){let n=-1==h.ins?-1:h.off?0:h.ins;E(i,e,n,t),s&&n&&M(s,i,h.text)}else-1==h.ins?(E(i,r.off?0:r.len,e,t),s&&M(s,i,r.textBit(e))):(E(i,r.off?0:r.len,h.off?0:h.ins,t),s&&!h.off&&M(s,i,h.text));t=(r.ins>e||h.ins>=0&&h.len>e)&&(t||i.length>n),r.forward2(e),h.forward(e)}}else E(i,0,h.ins,t),s&&M(s,i,h.text),h.next()}}class T{constructor(t){this.set=t,this.i=0,this.next()}next(){let{sections:t}=this.set;this.i<t.length?(this.len=t[this.i++],this.ins=t[this.i++]):(this.len=0,this.ins=-2),this.off=0}get done(){return-2==this.ins}get len2(){return this.ins<0?this.len:this.ins}get text(){let{inserted:e}=this.set,n=this.i-2>>1;return n>=e.length?t.empty:e[n]}textBit(e){let{inserted:n}=this.set,i=this.i-2>>1;return i>=n.length&&!e?t.empty:n[i].slice(this.off,null==e?void 0:this.off+e)}forward(t){t==this.len?this.next():(this.len-=t,this.off+=t)}forward2(t){-1==this.ins?this.forward(t):t==this.ins?this.next():(this.ins-=t,this.off+=t)}}class C{constructor(t,e,n){this.from=t,this.to=e,this.flags=n}get anchor(){return 32&this.flags?this.to:this.from}get head(){return 32&this.flags?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return 8&this.flags?-1:16&this.flags?1:0}get bidiLevel(){let t=7&this.flags;return 7==t?null:t}get goalColumn(){let t=this.flags>>6;return 16777215==t?void 0:t}map(t,e=-1){let n,i;return this.empty?n=i=t.mapPos(this.from,e):(n=t.mapPos(this.from,1),i=t.mapPos(this.to,-1)),n==this.from&&i==this.to?this:new C(n,i,this.flags)}extend(t,e=t){if(t<=this.anchor&&e>=this.anchor)return N.range(t,e);let n=Math.abs(t-this.anchor)>Math.abs(e-this.anchor)?t:e;return N.range(this.anchor,n)}eq(t,e=!1){return!(this.anchor!=t.anchor||this.head!=t.head||e&&this.empty&&this.assoc!=t.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(t){if(!t||"number"!=typeof t.anchor||"number"!=typeof t.head)throw new RangeError("Invalid JSON representation for SelectionRange");return N.range(t.anchor,t.head)}static create(t,e,n){return new C(t,e,n)}}class N{constructor(t,e){this.ranges=t,this.mainIndex=e}map(t,e=-1){return t.empty?this:N.create(this.ranges.map((n=>n.map(t,e))),this.mainIndex)}eq(t,e=!1){if(this.ranges.length!=t.ranges.length||this.mainIndex!=t.mainIndex)return!1;for(let n=0;n<this.ranges.length;n++)if(!this.ranges[n].eq(t.ranges[n],e))return!1;return!0}get main(){return this.ranges[this.mainIndex]}asSingle(){return 1==this.ranges.length?this:new N([this.main],0)}addRange(t,e=!0){return N.create([t].concat(this.ranges),e?0:this.mainIndex+1)}replaceRange(t,e=this.mainIndex){let n=this.ranges.slice();return n[e]=t,N.create(n,this.mainIndex)}toJSON(){return{ranges:this.ranges.map((t=>t.toJSON())),main:this.mainIndex}}static fromJSON(t){if(!t||!Array.isArray(t.ranges)||"number"!=typeof t.main||t.main>=t.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new N(t.ranges.map((t=>C.fromJSON(t))),t.main)}static single(t,e=t){return new N([N.range(t,e)],0)}static create(t,e=0){if(0==t.length)throw new RangeError("A selection needs at least one range");for(let n=0,i=0;i<t.length;i++){let s=t[i];if(s.empty?s.from<=n:s.from<n)return N.normalized(t.slice(),e);n=s.to}return new N(t,e)}static cursor(t,e=0,n,i){return C.create(t,t,(0==e?0:e<0?8:16)|(null==n?7:Math.min(6,n))|(null!=i?i:16777215)<<6)}static range(t,e,n,i){let s=(null!=n?n:16777215)<<6|(null==i?7:Math.min(6,i));return e<t?C.create(e,t,48|s):C.create(t,e,(e>t?8:0)|s)}static normalized(t,e=0){let n=t[e];t.sort(((t,e)=>t.from-e.from)),e=t.indexOf(n);for(let n=1;n<t.length;n++){let i=t[n],s=t[n-1];if(i.empty?i.from<=s.to:i.from<s.to){let r=s.from,h=Math.max(i.to,s.to);n<=e&&e--,t.splice(--n,2,i.anchor>i.head?N.range(h,r):N.range(r,h))}}return new N(t,e)}}function F(t,e){for(let n of t.ranges)if(n.to>e)throw new RangeError("Selection points outside of document")}let B=0;class J{constructor(t,e,n,i,s){this.combine=t,this.compareInput=e,this.compare=n,this.isStatic=i,this.id=B++,this.default=t([]),this.extensions="function"==typeof s?s(this):s}get reader(){return this}static define(t={}){return new J(t.combine||(t=>t),t.compareInput||((t,e)=>t===e),t.compare||(t.combine?(t,e)=>t===e:D),!!t.static,t.enables)}of(t){return new L([],this,0,t)}compute(t,e){if(this.isStatic)throw new Error("Can't compute a static facet");return new L(t,this,1,e)}computeN(t,e){if(this.isStatic)throw new Error("Can't compute a static facet");return new L(t,this,2,e)}from(t,e){return e||(e=t=>t),this.compute([t],(n=>e(n.field(t))))}}function D(t,e){return t==e||t.length==e.length&&t.every(((t,n)=>t===e[n]))}class L{constructor(t,e,n,i){this.dependencies=t,this.facet=e,this.type=n,this.value=i,this.id=B++}dynamicSlot(t){var e;let n=this.value,i=this.facet.compareInput,s=this.id,r=t[s]>>1,h=2==this.type,o=!1,l=!1,a=[];for(let n of this.dependencies)"doc"==n?o=!0:"selection"==n?l=!0:0==(1&(null!==(e=t[n.id])&&void 0!==e?e:1))&&a.push(t[n.id]);return{create:t=>(t.values[r]=n(t),1),update(t,e){if(o&&e.docChanged||l&&(e.docChanged||e.selection)||q(t,a)){let e=n(t);if(h?!j(e,t.values[r],i):!i(e,t.values[r]))return t.values[r]=e,1}return 0},reconfigure:(t,e)=>{let o,l=e.config.address[s];if(null!=l){let s=et(e,l);if(this.dependencies.every((n=>n instanceof J?e.facet(n)===t.facet(n):!(n instanceof V)||e.field(n,!1)==t.field(n,!1)))||(h?j(o=n(t),s,i):i(o=n(t),s)))return t.values[r]=s,0}else o=n(t);return t.values[r]=o,1}}}}function j(t,e,n){if(t.length!=e.length)return!1;for(let i=0;i<t.length;i++)if(!n(t[i],e[i]))return!1;return!0}function q(t,e){let n=!1;for(let i of e)1&tt(t,i)&&(n=!0);return n}function $(t,e,n){let i=n.map((e=>t[e.id])),s=n.map((t=>t.type)),r=i.filter((t=>!(1&t))),h=t[e.id]>>1;function o(t){let n=[];for(let e=0;e<i.length;e++){let r=et(t,i[e]);if(2==s[e])for(let t of r)n.push(t);else n.push(r)}return e.combine(n)}return{create(t){for(let e of i)tt(t,e);return t.values[h]=o(t),1},update(t,n){if(!q(t,r))return 0;let i=o(t);return e.compare(i,t.values[h])?0:(t.values[h]=i,1)},reconfigure(t,s){let r=q(t,i),l=s.config.facets[e.id],a=s.facet(e);if(l&&!r&&D(n,l))return t.values[h]=a,0;let c=o(t);return e.compare(c,a)?(t.values[h]=a,0):(t.values[h]=c,1)}}}const z=J.define({static:!0});class V{constructor(t,e,n,i,s){this.id=t,this.createF=e,this.updateF=n,this.compareF=i,this.spec=s,this.provides=void 0}static define(t){let e=new V(B++,t.create,t.update,t.compare||((t,e)=>t===e),t);return t.provide&&(e.provides=t.provide(e)),e}create(t){let e=t.facet(z).find((t=>t.field==this));return((null==e?void 0:e.create)||this.createF)(t)}slot(t){let e=t[this.id]>>1;return{create:t=>(t.values[e]=this.create(t),1),update:(t,n)=>{let i=t.values[e],s=this.updateF(i,n);return this.compareF(i,s)?0:(t.values[e]=s,1)},reconfigure:(t,n)=>null!=n.config.address[this.id]?(t.values[e]=n.field(this),0):(t.values[e]=this.create(t),1)}}init(t){return[this,z.of({field:this,create:t})]}get extension(){return this}}const _=4,W=3,U=2,G=1;function H(t){return e=>new Q(e,t)}const K={highest:H(0),high:H(G),default:H(U),low:H(W),lowest:H(_)};class Q{constructor(t,e){this.inner=t,this.prec=e}}class X{of(t){return new Y(this,t)}reconfigure(t){return X.reconfigure.of({compartment:this,extension:t})}get(t){return t.config.compartments.get(this)}}class Y{constructor(t,e){this.compartment=t,this.inner=e}}class Z{constructor(t,e,n,i,s,r){for(this.base=t,this.compartments=e,this.dynamicSlots=n,this.address=i,this.staticValues=s,this.facets=r,this.statusTemplate=[];this.statusTemplate.length<n.length;)this.statusTemplate.push(0)}staticFacet(t){let e=this.address[t.id];return null==e?t.default:this.staticValues[e>>1]}static resolve(t,e,n){let i=[],s=Object.create(null),r=new Map;for(let n of function(t,e,n){let i=[[],[],[],[],[]],s=new Map;function r(t,h){let o=s.get(t);if(null!=o){if(o<=h)return;let e=i[o].indexOf(t);e>-1&&i[o].splice(e,1),t instanceof Y&&n.delete(t.compartment)}if(s.set(t,h),Array.isArray(t))for(let e of t)r(e,h);else if(t instanceof Y){if(n.has(t.compartment))throw new RangeError("Duplicate use of compartment in extensions");let i=e.get(t.compartment)||t.inner;n.set(t.compartment,i),r(i,h)}else if(t instanceof Q)r(t.inner,t.prec);else if(t instanceof V)i[h].push(t),t.provides&&r(t.provides,h);else if(t instanceof L)i[h].push(t),t.facet.extensions&&r(t.facet.extensions,U);else{let e=t.extension;if(!e)throw new Error(`Unrecognized extension value in extension set (${t}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);r(e,h)}}return r(t,U),i.reduce(((t,e)=>t.concat(e)))}(t,e,r))n instanceof V?i.push(n):(s[n.facet.id]||(s[n.facet.id]=[])).push(n);let h=Object.create(null),o=[],l=[];for(let t of i)h[t.id]=l.length<<1,l.push((e=>t.slot(e)));let a=null==n?void 0:n.config.facets;for(let t in s){let e=s[t],i=e[0].facet,r=a&&a[t]||[];if(e.every((t=>0==t.type)))if(h[i.id]=o.length<<1|1,D(r,e))o.push(n.facet(i));else{let t=i.combine(e.map((t=>t.value)));o.push(n&&i.compare(t,n.facet(i))?n.facet(i):t)}else{for(let t of e)0==t.type?(h[t.id]=o.length<<1|1,o.push(t.value)):(h[t.id]=l.length<<1,l.push((e=>t.dynamicSlot(e))));h[i.id]=l.length<<1,l.push((t=>$(t,i,e)))}}let c=l.map((t=>t(h)));return new Z(t,r,c,h,o,s)}}function tt(t,e){if(1&e)return 2;let n=e>>1,i=t.status[n];if(4==i)throw new Error("Cyclic dependency between fields and/or facets");if(2&i)return i;t.status[n]=4;let s=t.computeSlot(t,t.config.dynamicSlots[n]);return t.status[n]=2|s}function et(t,e){return 1&e?t.config.staticValues[e>>1]:t.values[e>>1]}const nt=J.define(),it=J.define({combine:t=>t.some((t=>t)),static:!0}),st=J.define({combine:t=>t.length?t[0]:void 0,static:!0}),rt=J.define(),ht=J.define(),ot=J.define(),lt=J.define({combine:t=>!!t.length&&t[0]});class at{constructor(t,e){this.type=t,this.value=e}static define(){return new ct}}class ct{of(t){return new at(this,t)}}class ft{constructor(t){this.map=t}of(t){return new ut(this,t)}}class ut{constructor(t,e){this.type=t,this.value=e}map(t){let e=this.type.map(this.value,t);return void 0===e?void 0:e==this.value?this:new ut(this.type,e)}is(t){return this.type==t}static define(t={}){return new ft(t.map||(t=>t))}static mapEffects(t,e){if(!t.length)return t;let n=[];for(let i of t){let t=i.map(e);t&&n.push(t)}return n}}ut.reconfigure=ut.define(),ut.appendConfig=ut.define();class gt{constructor(t,e,n,i,s,r){this.startState=t,this.changes=e,this.selection=n,this.effects=i,this.annotations=s,this.scrollIntoView=r,this._doc=null,this._state=null,n&&F(n,e.newLength),s.some((t=>t.type==gt.time))||(this.annotations=s.concat(gt.time.of(Date.now())))}static create(t,e,n,i,s,r){return new gt(t,e,n,i,s,r)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(t){for(let e of this.annotations)if(e.type==t)return e.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(t){let e=this.annotation(gt.userEvent);return!(!e||!(e==t||e.length>t.length&&e.slice(0,t.length)==t&&"."==e[t.length]))}}function dt(t,e){let n=[];for(let i=0,s=0;;){let r,h;if(i<t.length&&(s==e.length||e[s]>=t[i]))r=t[i++],h=t[i++];else{if(!(s<e.length))return n;r=e[s++],h=e[s++]}!n.length||n[n.length-1]<r?n.push(r,h):n[n.length-1]<h&&(n[n.length-1]=h)}}function pt(t,e,n){var i;let s,r,h;return n?(s=e.changes,r=P.empty(e.changes.length),h=t.changes.compose(e.changes)):(s=e.changes.map(t.changes),r=t.changes.mapDesc(e.changes,!0),h=t.changes.compose(s)),{changes:h,selection:e.selection?e.selection.map(r):null===(i=t.selection)||void 0===i?void 0:i.map(s),effects:ut.mapEffects(t.effects,s).concat(ut.mapEffects(e.effects,r)),annotations:t.annotations.length?t.annotations.concat(e.annotations):e.annotations,scrollIntoView:t.scrollIntoView||e.scrollIntoView}}function mt(t,e,n){let i=e.selection,s=wt(e.annotations);return e.userEvent&&(s=s.concat(gt.userEvent.of(e.userEvent))),{changes:e.changes instanceof P?e.changes:P.of(e.changes||[],n,t.facet(st)),selection:i&&(i instanceof N?i:N.single(i.anchor,i.head)),effects:wt(e.effects),annotations:s,scrollIntoView:!!e.scrollIntoView}}function vt(t,e,n){let i=mt(t,e.length?e[0]:{},t.doc.length);e.length&&!1===e[0].filter&&(n=!1);for(let s=1;s<e.length;s++){!1===e[s].filter&&(n=!1);let r=!!e[s].sequential;i=pt(i,mt(t,e[s],r?i.changes.newLength:t.doc.length),r)}let s=gt.create(t,i.changes,i.selection,i.effects,i.annotations,i.scrollIntoView);return function(t){let e=t.startState,n=e.facet(ot),i=t;for(let s=n.length-1;s>=0;s--){let r=n[s](t);r&&Object.keys(r).length&&(i=pt(i,mt(e,r,t.changes.newLength),!0))}return i==t?t:gt.create(e,t.changes,t.selection,i.effects,i.annotations,i.scrollIntoView)}(n?function(t){let e=t.startState,n=!0;for(let i of e.facet(rt)){let e=i(t);if(!1===e){n=!1;break}Array.isArray(e)&&(n=!0===n?e:dt(n,e))}if(!0!==n){let i,s;if(!1===n)s=t.changes.invertedDesc,i=P.empty(e.doc.length);else{let e=t.changes.filter(n);i=e.changes,s=e.filtered.mapDesc(e.changes).invertedDesc}t=gt.create(e,i,t.selection&&t.selection.map(s),ut.mapEffects(t.effects,s),t.annotations,t.scrollIntoView)}let i=e.facet(ht);for(let n=i.length-1;n>=0;n--){let s=i[n](t);t=s instanceof gt?s:Array.isArray(s)&&1==s.length&&s[0]instanceof gt?s[0]:vt(e,wt(s),!1)}return t}(s):s)}gt.time=at.define(),gt.userEvent=at.define(),gt.addToHistory=at.define(),gt.remote=at.define();const xt=[];function wt(t){return null==t?xt:Array.isArray(t)?t:[t]}var kt=function(t){return t[t.Word=0]="Word",t[t.Space=1]="Space",t[t.Other=2]="Other",t}(kt||(kt={}));const yt=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;let St;try{St=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch(t){}function It(t){return e=>{if(!/\S/.test(e))return kt.Space;if(function(t){if(St)return St.test(t);for(let e=0;e<t.length;e++){let n=t[e];if(/\w/.test(n)||n>"€"&&(n.toUpperCase()!=n.toLowerCase()||yt.test(n)))return!0}return!1}(e))return kt.Word;for(let n=0;n<t.length;n++)if(e.indexOf(t[n])>-1)return kt.Word;return kt.Other}}class bt{constructor(t,e,n,i,s,r){this.config=t,this.doc=e,this.selection=n,this.values=i,this.status=t.statusTemplate.slice(),this.computeSlot=s,r&&(r._state=this);for(let t=0;t<this.config.dynamicSlots.length;t++)tt(this,t<<1);this.computeSlot=null}field(t,e=!0){let n=this.config.address[t.id];if(null!=n)return tt(this,n),et(this,n);if(e)throw new RangeError("Field is not present in this state")}update(...t){return vt(this,t,!0)}applyTransaction(t){let e,n=this.config,{base:i,compartments:s}=n;for(let e of t.effects)e.is(X.reconfigure)?(n&&(s=new Map,n.compartments.forEach(((t,e)=>s.set(e,t))),n=null),s.set(e.value.compartment,e.value.extension)):e.is(ut.reconfigure)?(n=null,i=e.value):e.is(ut.appendConfig)&&(n=null,i=wt(i).concat(e.value));if(n)e=t.startState.values.slice();else{n=Z.resolve(i,s,this),e=new bt(n,this.doc,this.selection,n.dynamicSlots.map((()=>null)),((t,e)=>e.reconfigure(t,this)),null).values}let r=t.startState.facet(it)?t.newSelection:t.newSelection.asSingle();new bt(n,t.newDoc,r,e,((e,n)=>n.update(e,t)),t)}replaceSelection(t){return"string"==typeof t&&(t=this.toText(t)),this.changeByRange((e=>({changes:{from:e.from,to:e.to,insert:t},range:N.cursor(e.from+t.length)})))}changeByRange(t){let e=this.selection,n=t(e.ranges[0]),i=this.changes(n.changes),s=[n.range],r=wt(n.effects);for(let n=1;n<e.ranges.length;n++){let h=t(e.ranges[n]),o=this.changes(h.changes),l=o.map(i);for(let t=0;t<n;t++)s[t]=s[t].map(l);let a=i.mapDesc(o,!0);s.push(h.range.map(a)),i=i.compose(l),r=ut.mapEffects(r,l).concat(ut.mapEffects(wt(h.effects),a))}return{changes:i,selection:N.create(s,e.mainIndex),effects:r}}changes(t=[]){return t instanceof P?t:P.of(t,this.doc.length,this.facet(bt.lineSeparator))}toText(e){return t.of(e.split(this.facet(bt.lineSeparator)||S))}sliceDoc(t=0,e=this.doc.length){return this.doc.sliceString(t,e,this.lineBreak)}facet(t){let e=this.config.address[t.id];return null==e?t.default:(tt(this,e),et(this,e))}toJSON(t){let e={doc:this.sliceDoc(),selection:this.selection.toJSON()};if(t)for(let n in t){let i=t[n];i instanceof V&&null!=this.config.address[i.id]&&(e[n]=i.spec.toJSON(this.field(t[n]),this))}return e}static fromJSON(t,e={},n){if(!t||"string"!=typeof t.doc)throw new RangeError("Invalid JSON representation for EditorState");let i=[];if(n)for(let e in n)if(Object.prototype.hasOwnProperty.call(t,e)){let s=n[e],r=t[e];i.push(s.init((t=>s.spec.fromJSON(r,t))))}return bt.create({doc:t.doc,selection:N.fromJSON(t.selection),extensions:e.extensions?i.concat([e.extensions]):i})}static create(e={}){let n=Z.resolve(e.extensions||[],new Map),i=e.doc instanceof t?e.doc:t.of((e.doc||"").split(n.staticFacet(bt.lineSeparator)||S)),s=e.selection?e.selection instanceof N?e.selection:N.single(e.selection.anchor,e.selection.head):N.single(0);return F(s,i.length),n.staticFacet(it)||(s=s.asSingle()),new bt(n,i,s,n.dynamicSlots.map((()=>null)),((t,e)=>e.create(t)),null)}get tabSize(){return this.facet(bt.tabSize)}get lineBreak(){return this.facet(bt.lineSeparator)||"\n"}get readOnly(){return this.facet(lt)}phrase(t,...e){for(let e of this.facet(bt.phrases))if(Object.prototype.hasOwnProperty.call(e,t)){t=e[t];break}return e.length&&(t=t.replace(/\$(\$|\d*)/g,((t,n)=>{if("$"==n)return"$";let i=+(n||1);return!i||i>e.length?t:e[i-1]}))),t}languageDataAt(t,e,n=-1){let i=[];for(let s of this.facet(nt))for(let r of s(this,e,n))Object.prototype.hasOwnProperty.call(r,t)&&i.push(r[t]);return i}charCategorizer(t){return It(this.languageDataAt("wordChars",t).join(""))}wordAt(t){let{text:e,from:n,length:i}=this.doc.lineAt(t),s=this.charCategorizer(t),r=t-n,h=t-n;for(;r>0;){let t=d(e,r,!1);if(s(e.slice(t,r))!=kt.Word)break;r=t}for(;h<i;){let t=d(e,h);if(s(e.slice(h,t))!=kt.Word)break;h=t}return r==h?null:N.range(r+n,h+n)}}function Pt(t,e,n={}){let i={};for(let e of t)for(let t of Object.keys(e)){let s=e[t],r=i[t];if(void 0===r)i[t]=s;else if(r===s||void 0===s);else{if(!Object.hasOwnProperty.call(n,t))throw new Error("Config merge conflict for field "+t);i[t]=n[t](r,s)}}for(let t in e)void 0===i[t]&&(i[t]=e[t]);return i}bt.allowMultipleSelections=it,bt.tabSize=J.define({combine:t=>t.length?t[0]:4}),bt.lineSeparator=st,bt.readOnly=lt,bt.phrases=J.define({compare(t,e){let n=Object.keys(t),i=Object.keys(e);return n.length==i.length&&n.every((n=>t[n]==e[n]))}}),bt.languageData=nt,bt.changeFilter=rt,bt.transactionFilter=ht,bt.transactionExtender=ot,X.reconfigure=ut.define();class Et{eq(t){return this==t}range(t,e=t){return Mt.create(t,e,this)}}Et.prototype.startSide=Et.prototype.endSide=0,Et.prototype.point=!1,Et.prototype.mapMode=I.TrackDel;class Mt{constructor(t,e,n){this.from=t,this.to=e,this.value=n}static create(t,e,n){return new Mt(t,e,n)}}function At(t,e){return t.from-e.from||t.value.startSide-e.value.startSide}class Ot{constructor(t,e,n,i){this.from=t,this.to=e,this.value=n,this.maxPoint=i}get length(){return this.to[this.to.length-1]}findIndex(t,e,n,i=0){let s=n?this.to:this.from;for(let r=i,h=s.length;;){if(r==h)return r;let i=r+h>>1,o=s[i]-t||(n?this.value[i].endSide:this.value[i].startSide)-e;if(i==r)return o>=0?r:h;o>=0?h=i:r=i+1}}between(t,e,n,i){for(let s=this.findIndex(e,-1e9,!0),r=this.findIndex(n,1e9,!1,s);s<r;s++)if(!1===i(this.from[s]+t,this.to[s]+t,this.value[s]))return!1}map(t,e){let n=[],i=[],s=[],r=-1,h=-1;for(let o=0;o<this.value.length;o++){let l,a,c=this.value[o],f=this.from[o]+t,u=this.to[o]+t;if(f==u){let t=e.mapPos(f,c.startSide,c.mapMode);if(null==t)continue;if(l=a=t,c.startSide!=c.endSide&&(a=e.mapPos(f,c.endSide),a<l))continue}else if(l=e.mapPos(f,c.startSide),a=e.mapPos(u,c.endSide),l>a||l==a&&c.startSide>0&&c.endSide<=0)continue;(a-l||c.endSide-c.startSide)<0||(r<0&&(r=l),c.point&&(h=Math.max(h,a-l)),n.push(c),i.push(l-r),s.push(a-r))}return{mapped:n.length?new Ot(i,s,n,h):null,pos:r}}}class Rt{constructor(t,e,n,i){this.chunkPos=t,this.chunk=e,this.nextLayer=n,this.maxPoint=i}static create(t,e,n,i){return new Rt(t,e,n,i)}get length(){let t=this.chunk.length-1;return t<0?0:Math.max(this.chunkEnd(t),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let t=this.nextLayer.size;for(let e of this.chunk)t+=e.value.length;return t}chunkEnd(t){return this.chunkPos[t]+this.chunk[t].length}update(t){let{add:e=[],sort:n=!1,filterFrom:i=0,filterTo:s=this.length}=t,r=t.filter;if(0==e.length&&!r)return this;if(n&&(e=e.slice().sort(At)),this.isEmpty)return e.length?Rt.of(e):this;let h=new Nt(this,null,-1).goto(0),o=0,l=[],a=new Tt;for(;h.value||o<e.length;)if(o<e.length&&(h.from-e[o].from||h.startSide-e[o].value.startSide)>=0){let t=e[o++];a.addInner(t.from,t.to,t.value)||l.push(t)}else 1==h.rangeIndex&&h.chunkIndex<this.chunk.length&&(o==e.length||this.chunkEnd(h.chunkIndex)<e[o].from)&&(!r||i>this.chunkEnd(h.chunkIndex)||s<this.chunkPos[h.chunkIndex])&&a.addChunk(this.chunkPos[h.chunkIndex],this.chunk[h.chunkIndex])?h.nextChunk():((!r||i>h.to||s<h.from||r(h.from,h.to,h.value))&&(a.addInner(h.from,h.to,h.value)||l.push(Mt.create(h.from,h.to,h.value))),h.next());return a.finishInner(this.nextLayer.isEmpty&&!l.length?Rt.empty:this.nextLayer.update({add:l,filter:r,filterFrom:i,filterTo:s}))}map(t){if(t.empty||this.isEmpty)return this;let e=[],n=[],i=-1;for(let s=0;s<this.chunk.length;s++){let r=this.chunkPos[s],h=this.chunk[s],o=t.touchesRange(r,r+h.length);if(!1===o)i=Math.max(i,h.maxPoint),e.push(h),n.push(t.mapPos(r));else if(!0===o){let{mapped:s,pos:o}=h.map(r,t);s&&(i=Math.max(i,s.maxPoint),e.push(s),n.push(o))}}let s=this.nextLayer.map(t);return 0==e.length?s:new Rt(n,e,s||Rt.empty,i)}between(t,e,n){if(!this.isEmpty){for(let i=0;i<this.chunk.length;i++){let s=this.chunkPos[i],r=this.chunk[i];if(e>=s&&t<=s+r.length&&!1===r.between(s,t-s,e-s,n))return}this.nextLayer.between(t,e,n)}}iter(t=0){return Ft.from([this]).goto(t)}get isEmpty(){return this.nextLayer==this}static iter(t,e=0){return Ft.from(t).goto(e)}static compare(t,e,n,i,s=-1){let r=t.filter((t=>t.maxPoint>0||!t.isEmpty&&t.maxPoint>=s)),h=e.filter((t=>t.maxPoint>0||!t.isEmpty&&t.maxPoint>=s)),o=Ct(r,h,n),l=new Jt(r,o,s),a=new Jt(h,o,s);n.iterGaps(((t,e,n)=>Dt(l,t,a,e,n,i))),n.empty&&0==n.length&&Dt(l,0,a,0,0,i)}static eq(t,e,n=0,i){null==i&&(i=999999999);let s=t.filter((t=>!t.isEmpty&&e.indexOf(t)<0)),r=e.filter((e=>!e.isEmpty&&t.indexOf(e)<0));if(s.length!=r.length)return!1;if(!s.length)return!0;let h=Ct(s,r),o=new Jt(s,h,0).goto(n),l=new Jt(r,h,0).goto(n);for(;;){if(o.to!=l.to||!Lt(o.active,l.active)||o.point&&(!l.point||!o.point.eq(l.point)))return!1;if(o.to>i)return!0;o.next(),l.next()}}static spans(t,e,n,i,s=-1){let r=new Jt(t,null,s).goto(e),h=e,o=r.openStart;for(;;){let t=Math.min(r.to,n);if(r.point){let n=r.activeForPoint(r.to),s=r.pointFrom<e?n.length+1:r.point.startSide<0?n.length:Math.min(n.length,o);i.point(h,t,r.point,n,s,r.pointRank),o=Math.min(r.openEnd(t),n.length)}else t>h&&(i.span(h,t,r.active,o),o=r.openEnd(t));if(r.to>n)return o+(r.point&&r.to>n?1:0);h=r.to,r.next()}}static of(t,e=!1){let n=new Tt;for(let i of t instanceof Mt?[t]:e?function(t){if(t.length>1)for(let e=t[0],n=1;n<t.length;n++){let i=t[n];if(At(e,i)>0)return t.slice().sort(At);e=i}return t}(t):t)n.add(i.from,i.to,i.value);return n.finish()}static join(t){if(!t.length)return Rt.empty;let e=t[t.length-1];for(let n=t.length-2;n>=0;n--)for(let i=t[n];i!=Rt.empty;i=i.nextLayer)e=new Rt(i.chunkPos,i.chunk,e,Math.max(i.maxPoint,e.maxPoint));return e}}Rt.empty=new Rt([],[],null,-1),Rt.empty.nextLayer=Rt.empty;class Tt{finishChunk(t){this.chunks.push(new Ot(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,t&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(t,e,n){this.addInner(t,e,n)||(this.nextLayer||(this.nextLayer=new Tt)).add(t,e,n)}addInner(t,e,n){let i=t-this.lastTo||n.startSide-this.last.endSide;if(i<=0&&(t-this.lastFrom||n.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return!(i<0)&&(250==this.from.length&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=t),this.from.push(t-this.chunkStart),this.to.push(e-this.chunkStart),this.last=n,this.lastFrom=t,this.lastTo=e,this.value.push(n),n.point&&(this.maxPoint=Math.max(this.maxPoint,e-t)),!0)}addChunk(t,e){if((t-this.lastTo||e.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,e.maxPoint),this.chunks.push(e),this.chunkPos.push(t);let n=e.value.length-1;return this.last=e.value[n],this.lastFrom=e.from[n]+t,this.lastTo=e.to[n]+t,!0}finish(){return this.finishInner(Rt.empty)}finishInner(t){if(this.from.length&&this.finishChunk(!1),0==this.chunks.length)return t;let e=Rt.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(t):t,this.setMaxPoint);return this.from=null,e}}function Ct(t,e,n){let i=new Map;for(let e of t)for(let t=0;t<e.chunk.length;t++)e.chunk[t].maxPoint<=0&&i.set(e.chunk[t],e.chunkPos[t]);let s=new Set;for(let t of e)for(let e=0;e<t.chunk.length;e++){let r=i.get(t.chunk[e]);null==r||(n?n.mapPos(r):r)!=t.chunkPos[e]||(null==n?void 0:n.touchesRange(r,r+t.chunk[e].length))||s.add(t.chunk[e])}return s}class Nt{constructor(t,e,n,i=0){this.layer=t,this.skip=e,this.minPoint=n,this.rank=i}get startSide(){return this.value?this.value.startSide:0}get endSide(){return this.value?this.value.endSide:0}goto(t,e=-1e9){return this.chunkIndex=this.rangeIndex=0,this.gotoInner(t,e,!1),this}gotoInner(t,e,n){for(;this.chunkIndex<this.layer.chunk.length;){let e=this.layer.chunk[this.chunkIndex];if(!(this.skip&&this.skip.has(e)||this.layer.chunkEnd(this.chunkIndex)<t||e.maxPoint<this.minPoint))break;this.chunkIndex++,n=!1}if(this.chunkIndex<this.layer.chunk.length){let i=this.layer.chunk[this.chunkIndex].findIndex(t-this.layer.chunkPos[this.chunkIndex],e,!0);(!n||this.rangeIndex<i)&&this.setRangeIndex(i)}this.next()}forward(t,e){(this.to-t||this.endSide-e)<0&&this.gotoInner(t,e,!0)}next(){for(;;){if(this.chunkIndex==this.layer.chunk.length){this.from=this.to=1e9,this.value=null;break}{let t=this.layer.chunkPos[this.chunkIndex],e=this.layer.chunk[this.chunkIndex],n=t+e.from[this.rangeIndex];if(this.from=n,this.to=t+e.to[this.rangeIndex],this.value=e.value[this.rangeIndex],this.setRangeIndex(this.rangeIndex+1),this.minPoint<0||this.value.point&&this.to-this.from>=this.minPoint)break}}}setRangeIndex(t){if(t==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex<this.layer.chunk.length&&this.skip.has(this.layer.chunk[this.chunkIndex]);)this.chunkIndex++;this.rangeIndex=0}else this.rangeIndex=t}nextChunk(){this.chunkIndex++,this.rangeIndex=0,this.next()}compare(t){return this.from-t.from||this.startSide-t.startSide||this.rank-t.rank||this.to-t.to||this.endSide-t.endSide}}class Ft{constructor(t){this.heap=t}static from(t,e=null,n=-1){let i=[];for(let s=0;s<t.length;s++)for(let r=t[s];!r.isEmpty;r=r.nextLayer)r.maxPoint>=n&&i.push(new Nt(r,e,n,s));return 1==i.length?i[0]:new Ft(i)}get startSide(){return this.value?this.value.startSide:0}goto(t,e=-1e9){for(let n of this.heap)n.goto(t,e);for(let t=this.heap.length>>1;t>=0;t--)Bt(this.heap,t);return this.next(),this}forward(t,e){for(let n of this.heap)n.forward(t,e);for(let t=this.heap.length>>1;t>=0;t--)Bt(this.heap,t);(this.to-t||this.value.endSide-e)<0&&this.next()}next(){if(0==this.heap.length)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let t=this.heap[0];this.from=t.from,this.to=t.to,this.value=t.value,this.rank=t.rank,t.value&&t.next(),Bt(this.heap,0)}}}function Bt(t,e){for(let n=t[e];;){let i=1+(e<<1);if(i>=t.length)break;let s=t[i];if(i+1<t.length&&s.compare(t[i+1])>=0&&(s=t[i+1],i++),n.compare(s)<0)break;t[i]=n,t[e]=s,e=i}}class Jt{constructor(t,e,n){this.minPoint=n,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=Ft.from(t,e,n)}goto(t,e=-1e9){return this.cursor.goto(t,e),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=t,this.endSide=e,this.openStart=-1,this.next(),this}forward(t,e){for(;this.minActive>-1&&(this.activeTo[this.minActive]-t||this.active[this.minActive].endSide-e)<0;)this.removeActive(this.minActive);this.cursor.forward(t,e)}removeActive(t){jt(this.active,t),jt(this.activeTo,t),jt(this.activeRank,t),this.minActive=$t(this.active,this.activeTo)}addActive(t){let e=0,{value:n,to:i,rank:s}=this.cursor;for(;e<this.activeRank.length&&(s-this.activeRank[e]||i-this.activeTo[e])>0;)e++;qt(this.active,e,n),qt(this.activeTo,e,i),qt(this.activeRank,e,s),t&&qt(t,e,this.cursor.from),this.minActive=$t(this.active,this.activeTo)}next(){let t=this.to,e=this.point;this.point=null;let n=this.openStart<0?[]:null;for(;;){let i=this.minActive;if(i>-1&&(this.activeTo[i]-this.cursor.from||this.active[i].endSide-this.cursor.startSide)<0){if(this.activeTo[i]>t){this.to=this.activeTo[i],this.endSide=this.active[i].endSide;break}this.removeActive(i),n&&jt(n,i)}else{if(!this.cursor.value){this.to=this.endSide=1e9;break}if(this.cursor.from>t){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}{let t=this.cursor.value;if(t.point){if(!(e&&this.cursor.to==this.to&&this.cursor.from<this.cursor.to)){this.point=t,this.pointFrom=this.cursor.from,this.pointRank=this.cursor.rank,this.to=this.cursor.to,this.endSide=t.endSide,this.cursor.next(),this.forward(this.to,this.endSide);break}this.cursor.next()}else this.addActive(n),this.cursor.next()}}}if(n){this.openStart=0;for(let e=n.length-1;e>=0&&n[e]<t;e--)this.openStart++}}activeForPoint(t){if(!this.active.length)return this.active;let e=[];for(let n=this.active.length-1;n>=0&&!(this.activeRank[n]<this.pointRank);n--)(this.activeTo[n]>t||this.activeTo[n]==t&&this.active[n].endSide>=this.point.endSide)&&e.push(this.active[n]);return e.reverse()}openEnd(t){let e=0;for(let n=this.activeTo.length-1;n>=0&&this.activeTo[n]>t;n--)e++;return e}}function Dt(t,e,n,i,s,r){t.goto(e),n.goto(i);let h=i+s,o=i,l=i-e;for(;;){let e=t.to+l-n.to||t.endSide-n.endSide,i=e<0?t.to+l:n.to,s=Math.min(i,h);if(t.point||n.point?t.point&&n.point&&(t.point==n.point||t.point.eq(n.point))&&Lt(t.activeForPoint(t.to),n.activeForPoint(n.to))||r.comparePoint(o,s,t.point,n.point):s>o&&!Lt(t.active,n.active)&&r.compareRange(o,s,t.active,n.active),i>h)break;o=i,e<=0&&t.next(),e>=0&&n.next()}}function Lt(t,e){if(t.length!=e.length)return!1;for(let n=0;n<t.length;n++)if(t[n]!=e[n]&&!t[n].eq(e[n]))return!1;return!0}function jt(t,e){for(let n=e,i=t.length-1;n<i;n++)t[n]=t[n+1];t.pop()}function qt(t,e,n){for(let n=t.length-1;n>=e;n--)t[n+1]=t[n];t[e]=n}function $t(t,e){let n=-1,i=1e9;for(let s=0;s<e.length;s++)(e[s]-i||t[s].endSide-t[n].endSide)<0&&(n=s,i=e[s]);return n}function zt(t,e,n=t.length){let i=0;for(let s=0;s<n;)9==t.charCodeAt(s)?(i+=e-i%e,s++):(i++,s=d(t,s));return i}function Vt(t,e,n,i){for(let i=0,s=0;;){if(s>=e)return i;if(i==t.length)break;s+=9==t.charCodeAt(i)?n-s%n:1,i=d(t,i)}return!0===i?-1:t.length}export{at as Annotation,ct as AnnotationType,b as ChangeDesc,P as ChangeSet,kt as CharCategory,X as Compartment,N as EditorSelection,bt as EditorState,J as Facet,l as Line,I as MapMode,K as Prec,Mt as Range,Rt as RangeSet,Tt as RangeSetBuilder,Et as RangeValue,C as SelectionRange,ut as StateEffect,ft as StateEffectType,V as StateField,t as Text,gt as Transaction,w as codePointAt,y as codePointSize,Pt as combineConfig,zt as countColumn,d as findClusterBreak,Vt as findColumn,k as fromCodePoint};
//# sourceMappingURL=codemirror_state-BKbyfKsm.js.map
This source diff could not be displayed because it is too large. You can view the blob instead.
import{RangeValue as t,RangeSet as e,MapMode as i,Facet as s,ChangeSet as o,EditorSelection as n,EditorState as r,Transaction as l,Prec as h,StateEffect as a,codePointAt as c,codePointSize as d,countColumn as u,StateField as f,findClusterBreak as p,findColumn as g,Annotation as m,Text as w,combineConfig as v,RangeSetBuilder as b,CharCategory as y}from"./codemirror_state-BKbyfKsm.js";const S="undefined"==typeof Symbol?"__ͼ":Symbol.for("ͼ"),x="undefined"==typeof Symbol?"__styleSet"+Math.floor(1e8*Math.random()):Symbol("styleSet"),M="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:{};class k{constructor(t,e){this.rules=[];let{finish:i}=e||{};function s(t){return/^@/.test(t)?[t]:t.split(/,\s*/)}function o(t,e,n,r){let l=[],h=/^@(\w+)\b/.exec(t[0]),a=h&&"keyframes"==h[1];if(h&&null==e)return n.push(t[0]+";");for(let i in e){let r=e[i];if(/&/.test(i))o(i.split(/,\s*/).map((e=>t.map((t=>e.replace(/&/,t))))).reduce(((t,e)=>t.concat(e))),r,n);else if(r&&"object"==typeof r){if(!h)throw new RangeError("The value of a property ("+i+") should be a primitive value.");o(s(i),r,l,a)}else null!=r&&l.push(i.replace(/_.*/,"").replace(/[A-Z]/g,(t=>"-"+t.toLowerCase()))+": "+r+";")}(l.length||a)&&n.push((!i||h||r?t:t.map(i)).join(", ")+" {"+l.join(" ")+"}")}for(let e in t)o(s(e),t[e],this.rules)}getRules(){return this.rules.join("\n")}static newName(){let t=M[S]||1;return M[S]=t+1,"ͼ"+t.toString(36)}static mount(t,e,i){let s=t[x],o=i&&i.nonce;s?o&&s.setNonce(o):s=new A(t,o),s.mount(Array.isArray(e)?e:[e])}}let C=new Map;class A{constructor(t,e){let i=t.ownerDocument||t,s=i.defaultView;if(!t.head&&t.adoptedStyleSheets&&s.CSSStyleSheet){let e=C.get(i);if(e)return t.adoptedStyleSheets=[e.sheet,...t.adoptedStyleSheets],t[x]=e;this.sheet=new s.CSSStyleSheet,t.adoptedStyleSheets=[this.sheet,...t.adoptedStyleSheets],C.set(i,this)}else{this.styleTag=i.createElement("style"),e&&this.styleTag.setAttribute("nonce",e);let s=t.head||t;s.insertBefore(this.styleTag,s.firstChild)}this.modules=[],t[x]=this}mount(t){let e=this.sheet,i=0,s=0;for(let o=0;o<t.length;o++){let n=t[o],r=this.modules.indexOf(n);if(r<s&&r>-1&&(this.modules.splice(r,1),s--,r=-1),-1==r){if(this.modules.splice(s++,0,n),e)for(let t=0;t<n.rules.length;t++)e.insertRule(n.rules[t],i++)}else{for(;s<r;)i+=this.modules[s++].rules.length;i+=n.rules.length,s++}}if(!e){let t="";for(let e=0;e<this.modules.length;e++)t+=this.modules[e].getRules()+"\n";this.styleTag.textContent=t}}setNonce(t){this.styleTag&&this.styleTag.getAttribute("nonce")!=t&&this.styleTag.setAttribute("nonce",t)}}for(var D={8:"Backspace",9:"Tab",10:"Enter",12:"NumLock",13:"Enter",16:"Shift",17:"Control",18:"Alt",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",44:"PrintScreen",45:"Insert",46:"Delete",59:";",61:"=",91:"Meta",92:"Meta",106:"*",107:"+",108:",",109:"-",110:".",111:"/",144:"NumLock",145:"ScrollLock",160:"Shift",161:"Shift",162:"Control",163:"Control",164:"Alt",165:"Alt",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},T={48:")",49:"!",50:"@",51:"#",52:"$",53:"%",54:"^",55:"&",56:"*",57:"(",59:":",61:"+",173:"_",186:":",187:"+",188:"<",189:"_",190:">",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},O="undefined"!=typeof navigator&&/Mac/.test(navigator.platform),E="undefined"!=typeof navigator&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent),R=0;R<10;R++)D[48+R]=D[96+R]=String(R);for(R=1;R<=24;R++)D[R+111]="F"+R;for(R=65;R<=90;R++)D[R]=String.fromCharCode(R+32),T[R]=String.fromCharCode(R);for(var L in D)T.hasOwnProperty(L)||(T[L]=D[L]);function B(t){let e;return e=11==t.nodeType?t.getSelection?t:t.ownerDocument:t,e.getSelection()}function H(t,e){return!!e&&(t==e||t.contains(1!=e.nodeType?e.parentNode:e))}function P(t,e){if(!e.anchorNode)return!1;try{return H(t,e.anchorNode)}catch(t){return!1}}function V(t){return 3==t.nodeType?U(t,0,t.nodeValue.length).getClientRects():1==t.nodeType?t.getClientRects():[]}function N(t,e,i,s){return!!i&&(F(t,e,i,s,-1)||F(t,e,i,s,1))}function W(t){for(var e=0;;e++)if(!(t=t.previousSibling))return e}function z(t){return 1==t.nodeType&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(t.nodeName)}function F(t,e,i,s,o){for(;;){if(t==i&&e==s)return!0;if(e==(o<0?0:K(t))){if("DIV"==t.nodeName)return!1;let i=t.parentNode;if(!i||1!=i.nodeType)return!1;e=W(t)+(o<0?0:1),t=i}else{if(1!=t.nodeType)return!1;if(1==(t=t.childNodes[e+(o<0?-1:0)]).nodeType&&"false"==t.contentEditable)return!1;e=o<0?K(t):0}}}function K(t){return 3==t.nodeType?t.nodeValue.length:t.childNodes.length}function I(t,e){let i=e?t.left:t.right;return{left:i,right:i,top:t.top,bottom:t.bottom}}function q(t){let e=t.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:t.innerWidth,top:0,bottom:t.innerHeight}}function Y(t,e){let i=e.width/t.offsetWidth,s=e.height/t.offsetHeight;return(i>.995&&i<1.005||!isFinite(i)||Math.abs(e.width-t.offsetWidth)<1)&&(i=1),(s>.995&&s<1.005||!isFinite(s)||Math.abs(e.height-t.offsetHeight)<1)&&(s=1),{scaleX:i,scaleY:s}}class _{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(t){return this.anchorNode==t.anchorNode&&this.anchorOffset==t.anchorOffset&&this.focusNode==t.focusNode&&this.focusOffset==t.focusOffset}setRange(t){let{anchorNode:e,focusNode:i}=t;this.set(e,Math.min(t.anchorOffset,e?K(e):0),i,Math.min(t.focusOffset,i?K(i):0))}set(t,e,i,s){this.anchorNode=t,this.anchorOffset=e,this.focusNode=i,this.focusOffset=s}}let j,X=null;function G(t){if(t.setActive)return t.setActive();if(X)return t.focus(X);let e=[];for(let i=t;i&&(e.push(i,i.scrollTop,i.scrollLeft),i!=i.ownerDocument);i=i.parentNode);if(t.focus(null==X?{get preventScroll(){return X={preventScroll:!0},!0}}:void 0),!X){X=!1;for(let t=0;t<e.length;){let i=e[t++],s=e[t++],o=e[t++];i.scrollTop!=s&&(i.scrollTop=s),i.scrollLeft!=o&&(i.scrollLeft=o)}}}function U(t,e,i=e){let s=j||(j=document.createRange());return s.setEnd(t,i),s.setStart(t,e),s}function $(t,e,i,s){let o={key:e,code:e,keyCode:i,which:i,cancelable:!0};s&&({altKey:o.altKey,ctrlKey:o.ctrlKey,shiftKey:o.shiftKey,metaKey:o.metaKey}=s);let n=new KeyboardEvent("keydown",o);n.synthetic=!0,t.dispatchEvent(n);let r=new KeyboardEvent("keyup",o);return r.synthetic=!0,t.dispatchEvent(r),n.defaultPrevented||r.defaultPrevented}function Q(t){for(;t.attributes.length;)t.removeAttributeNode(t.attributes[0])}function Z(t){return t.scrollTop>Math.max(1,t.scrollHeight-t.clientHeight-4)}function J(t,e){for(let i=t,s=e;;){if(3==i.nodeType&&s>0)return{node:i,offset:s};if(1==i.nodeType&&s>0){if("false"==i.contentEditable)return null;i=i.childNodes[s-1],s=K(i)}else{if(!i.parentNode||z(i))return null;s=W(i),i=i.parentNode}}}function tt(t,e){for(let i=t,s=e;;){if(3==i.nodeType&&s<i.nodeValue.length)return{node:i,offset:s};if(1==i.nodeType&&s<i.childNodes.length){if("false"==i.contentEditable)return null;i=i.childNodes[s],s=0}else{if(!i.parentNode||z(i))return null;s=W(i)+1,i=i.parentNode}}}class et{constructor(t,e,i=!0){this.node=t,this.offset=e,this.precise=i}static before(t,e){return new et(t.parentNode,W(t),e)}static after(t,e){return new et(t.parentNode,W(t)+1,e)}}const it=[];class st{constructor(){this.parent=null,this.dom=null,this.flags=2}get overrideDOMText(){return null}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(t){let e=this.posAtStart;for(let i of this.children){if(i==t)return e;e+=i.length+i.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(t){return this.posBefore(t)+t.length}sync(t,e){if(2&this.flags){let i,s=this.dom,o=null;for(let n of this.children){if(7&n.flags){if(!n.dom&&(i=o?o.nextSibling:s.firstChild)){let t=st.get(i);(!t||!t.parent&&t.canReuseDOM(n))&&n.reuseDOM(i)}n.sync(t,e),n.flags&=-8}if(i=o?o.nextSibling:s.firstChild,e&&!e.written&&e.node==s&&i!=n.dom&&(e.written=!0),n.dom.parentNode==s)for(;i&&i!=n.dom;)i=ot(i);else s.insertBefore(n.dom,i);o=n.dom}for(i=o?o.nextSibling:s.firstChild,i&&e&&e.node==s&&(e.written=!0);i;)i=ot(i)}else if(1&this.flags)for(let i of this.children)7&i.flags&&(i.sync(t,e),i.flags&=-8)}reuseDOM(t){}localPosFromDOM(t,e){let i;if(t==this.dom)i=this.dom.childNodes[e];else{let s=0==K(t)?0:0==e?-1:1;for(;;){let e=t.parentNode;if(e==this.dom)break;0==s&&e.firstChild!=e.lastChild&&(s=t==e.firstChild?-1:1),t=e}i=s<0?t:t.nextSibling}if(i==this.dom.firstChild)return 0;for(;i&&!st.get(i);)i=i.nextSibling;if(!i)return this.length;for(let t=0,e=0;;t++){let s=this.children[t];if(s.dom==i)return e;e+=s.length+s.breakAfter}}domBoundsAround(t,e,i=0){let s=-1,o=-1,n=-1,r=-1;for(let l=0,h=i,a=i;l<this.children.length;l++){let i=this.children[l],c=h+i.length;if(h<t&&c>e)return i.domBoundsAround(t,e,h);if(c>=t&&-1==s&&(s=l,o=h),h>e&&i.dom.parentNode==this.dom){n=l,r=a;break}a=c,h=c+i.breakAfter}return{from:o,to:r<0?i+this.length:r,startDOM:(s?this.children[s-1].dom.nextSibling:null)||this.dom.firstChild,endDOM:n<this.children.length&&n>=0?this.children[n].dom:null}}markDirty(t=!1){this.flags|=2,this.markParentsDirty(t)}markParentsDirty(t){for(let e=this.parent;e;e=e.parent){if(t&&(e.flags|=2),1&e.flags)return;e.flags|=1,t=!1}}setParent(t){this.parent!=t&&(this.parent=t,7&this.flags&&this.markParentsDirty(!0))}setDOM(t){this.dom!=t&&(this.dom&&(this.dom.cmView=null),this.dom=t,t.cmView=this)}get rootView(){for(let t=this;;){let e=t.parent;if(!e)return t;t=e}}replaceChildren(t,e,i=it){this.markDirty();for(let s=t;s<e;s++){let t=this.children[s];t.parent==this&&i.indexOf(t)<0&&t.destroy()}this.children.splice(t,e-t,...i);for(let t=0;t<i.length;t++)i[t].setParent(this)}ignoreMutation(t){return!1}ignoreEvent(t){return!1}childCursor(t=this.length){return new nt(this.children,t,this.children.length)}childPos(t,e=1){return this.childCursor().findPos(t,e)}toString(){let t=this.constructor.name.replace("View","");return t+(this.children.length?"("+this.children.join()+")":this.length?"["+("Text"==t?this.text:this.length)+"]":"")+(this.breakAfter?"#":"")}static get(t){return t.cmView}get isEditable(){return!0}get isWidget(){return!1}get isHidden(){return!1}merge(t,e,i,s,o,n){return!1}become(t){return!1}canReuseDOM(t){return t.constructor==this.constructor&&!(8&(this.flags|t.flags))}getSide(){return 0}destroy(){for(let t of this.children)t.parent==this&&t.destroy();this.parent=null}}function ot(t){let e=t.nextSibling;return t.parentNode.removeChild(t),e}st.prototype.breakAfter=0;class nt{constructor(t,e,i){this.children=t,this.pos=e,this.i=i,this.off=0}findPos(t,e=1){for(;;){if(t>this.pos||t==this.pos&&(e>0||0==this.i||this.children[this.i-1].breakAfter))return this.off=t-this.pos,this;let i=this.children[--this.i];this.pos-=i.length+i.breakAfter}}}function rt(t,e,i,s,o,n,r,l,h){let{children:a}=t,c=a.length?a[e]:null,d=n.length?n[n.length-1]:null,u=d?d.breakAfter:r;if(!(e==s&&c&&!r&&!u&&n.length<2&&c.merge(i,o,n.length?d:null,0==i,l,h))){if(s<a.length){let t=a[s];t&&(o<t.length||t.breakAfter&&(null==d?void 0:d.breakAfter))?(e==s&&(t=t.split(o),o=0),!u&&d&&t.merge(0,o,d,!0,0,h)?n[n.length-1]=t:((o||t.children.length&&!t.children[0].length)&&t.merge(0,o,null,!1,0,h),n.push(t))):(null==t?void 0:t.breakAfter)&&(d?d.breakAfter=1:r=1),s++}for(c&&(c.breakAfter=r,i>0&&(!r&&n.length&&c.merge(i,c.length,n[0],!1,l,0)?c.breakAfter=n.shift().breakAfter:(i<c.length||c.children.length&&0==c.children[c.children.length-1].length)&&c.merge(i,c.length,null,!1,l,0),e++));e<s&&n.length;)if(a[s-1].become(n[n.length-1]))s--,n.pop(),h=n.length?0:l;else{if(!a[e].become(n[0]))break;e++,n.shift(),l=n.length?0:h}!n.length&&e&&s<a.length&&!a[e-1].breakAfter&&a[s].merge(0,0,a[e-1],!1,l,h)&&e--,(e<s||n.length)&&t.replaceChildren(e,s,n)}}function lt(t,e,i,s,o,n){let r=t.childCursor(),{i:l,off:h}=r.findPos(i,1),{i:a,off:c}=r.findPos(e,-1),d=e-i;for(let t of s)d+=t.length;t.length+=d,rt(t,a,c,l,h,s,0,o,n)}let ht="undefined"!=typeof navigator?navigator:{userAgent:"",vendor:"",platform:""},at="undefined"!=typeof document?document:{documentElement:{style:{}}};const ct=/Edge\/(\d+)/.exec(ht.userAgent),dt=/MSIE \d/.test(ht.userAgent),ut=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(ht.userAgent),ft=!!(dt||ut||ct),pt=!ft&&/gecko\/(\d+)/i.test(ht.userAgent),gt=!ft&&/Chrome\/(\d+)/.exec(ht.userAgent),mt="webkitFontSmoothing"in at.documentElement.style,wt=!ft&&/Apple Computer/.test(ht.vendor),vt=wt&&(/Mobile\/\w+/.test(ht.userAgent)||ht.maxTouchPoints>2);var bt={mac:vt||/Mac/.test(ht.platform),windows:/Win/.test(ht.platform),linux:/Linux|X11/.test(ht.platform),ie:ft,ie_version:dt?at.documentMode||6:ut?+ut[1]:ct?+ct[1]:0,gecko:pt,gecko_version:pt?+(/Firefox\/(\d+)/.exec(ht.userAgent)||[0,0])[1]:0,chrome:!!gt,chrome_version:gt?+gt[1]:0,ios:vt,android:/Android\b/.test(ht.userAgent),webkit:mt,safari:wt,webkit_version:mt?+(/\bAppleWebKit\/(\d+)/.exec(navigator.userAgent)||[0,0])[1]:0,tabSize:null!=at.documentElement.style.tabSize?"tab-size":"-moz-tab-size"};class yt extends st{constructor(t){super(),this.text=t}get length(){return this.text.length}createDOM(t){this.setDOM(t||document.createTextNode(this.text))}sync(t,e){this.dom||this.createDOM(),this.dom.nodeValue!=this.text&&(e&&e.node==this.dom&&(e.written=!0),this.dom.nodeValue=this.text)}reuseDOM(t){3==t.nodeType&&this.createDOM(t)}merge(t,e,i){return!(8&this.flags||i&&(!(i instanceof yt)||this.length-(e-t)+i.length>256||8&i.flags))&&(this.text=this.text.slice(0,t)+(i?i.text:"")+this.text.slice(e),this.markDirty(),!0)}split(t){let e=new yt(this.text.slice(t));return this.text=this.text.slice(0,t),this.markDirty(),e.flags|=8&this.flags,e}localPosFromDOM(t,e){return t==this.dom?e:e?this.text.length:0}domAtPos(t){return new et(this.dom,t)}domBoundsAround(t,e,i){return{from:i,to:i+this.length,startDOM:this.dom,endDOM:this.dom.nextSibling}}coordsAt(t,e){return function(t,e,i){let s=t.nodeValue.length;e>s&&(e=s);let o=e,n=e,r=0;0==e&&i<0||e==s&&i>=0?bt.chrome||bt.gecko||(e?(o--,r=1):n<s&&(n++,r=-1)):i<0?o--:n<s&&n++;let l=U(t,o,n).getClientRects();if(!l.length)return null;let h=l[(r?r<0:i>=0)?0:l.length-1];bt.safari&&!r&&0==h.width&&(h=Array.prototype.find.call(l,(t=>t.width))||h);return r?I(h,r<0):h||null}(this.dom,t,e)}}class St extends st{constructor(t,e=[],i=0){super(),this.mark=t,this.children=e,this.length=i;for(let t of e)t.setParent(this)}setAttrs(t){if(Q(t),this.mark.class&&(t.className=this.mark.class),this.mark.attrs)for(let e in this.mark.attrs)t.setAttribute(e,this.mark.attrs[e]);return t}canReuseDOM(t){return super.canReuseDOM(t)&&!(8&(this.flags|t.flags))}reuseDOM(t){t.nodeName==this.mark.tagName.toUpperCase()&&(this.setDOM(t),this.flags|=6)}sync(t,e){this.dom?4&this.flags&&this.setAttrs(this.dom):this.setDOM(this.setAttrs(document.createElement(this.mark.tagName))),super.sync(t,e)}merge(t,e,i,s,o,n){return(!i||!(!(i instanceof St&&i.mark.eq(this.mark))||t&&o<=0||e<this.length&&n<=0))&&(lt(this,t,e,i?i.children.slice():[],o-1,n-1),this.markDirty(),!0)}split(t){let e=[],i=0,s=-1,o=0;for(let n of this.children){let r=i+n.length;r>t&&e.push(i<t?n.split(t-i):n),s<0&&i>=t&&(s=o),i=r,o++}let n=this.length-t;return this.length=t,s>-1&&(this.children.length=s,this.markDirty()),new St(this.mark,e,n)}domAtPos(t){return kt(this,t)}coordsAt(t,e){return At(this,t,e)}}class xt extends st{static create(t,e,i){return new xt(t,e,i)}constructor(t,e,i){super(),this.widget=t,this.length=e,this.side=i,this.prevWidget=null}split(t){let e=xt.create(this.widget,this.length-t,this.side);return this.length-=t,e}sync(t){this.dom&&this.widget.updateDOM(this.dom,t)||(this.dom&&this.prevWidget&&this.prevWidget.destroy(this.dom),this.prevWidget=null,this.setDOM(this.widget.toDOM(t)),this.widget.editable||(this.dom.contentEditable="false"))}getSide(){return this.side}merge(t,e,i,s,o,n){return!(i&&(!(i instanceof xt&&this.widget.compare(i.widget))||t>0&&o<=0||e<this.length&&n<=0))&&(this.length=t+(i?i.length:0)+(this.length-e),!0)}become(t){return t instanceof xt&&t.side==this.side&&this.widget.constructor==t.widget.constructor&&(this.widget.compare(t.widget)||this.markDirty(!0),this.dom&&!this.prevWidget&&(this.prevWidget=this.widget),this.widget=t.widget,this.length=t.length,!0)}ignoreMutation(){return!0}ignoreEvent(t){return this.widget.ignoreEvent(t)}get overrideDOMText(){if(0==this.length)return w.empty;let t=this;for(;t.parent;)t=t.parent;let{view:e}=t,i=e&&e.state.doc,s=this.posAtStart;return i?i.slice(s,s+this.length):w.empty}domAtPos(t){return(this.length?0==t:this.side>0)?et.before(this.dom):et.after(this.dom,t==this.length)}domBoundsAround(){return null}coordsAt(t,e){let i=this.widget.coordsAt(this.dom,t,e);if(i)return i;let s=this.dom.getClientRects(),o=null;if(!s.length)return null;let n=this.side?this.side<0:t>0;for(let e=n?s.length-1:0;o=s[e],!(t>0?0==e:e==s.length-1||o.top<o.bottom);e+=n?-1:1);return I(o,!n)}get isEditable(){return!1}get isWidget(){return!0}get isHidden(){return this.widget.isHidden}destroy(){super.destroy(),this.dom&&this.widget.destroy(this.dom)}}class Mt extends st{constructor(t){super(),this.side=t}get length(){return 0}merge(){return!1}become(t){return t instanceof Mt&&t.side==this.side}split(){return new Mt(this.side)}sync(){if(!this.dom){let t=document.createElement("img");t.className="cm-widgetBuffer",t.setAttribute("aria-hidden","true"),this.setDOM(t)}}getSide(){return this.side}domAtPos(t){return this.side>0?et.before(this.dom):et.after(this.dom)}localPosFromDOM(){return 0}domBoundsAround(){return null}coordsAt(t){return this.dom.getBoundingClientRect()}get overrideDOMText(){return w.empty}get isHidden(){return!0}}function kt(t,e){let i=t.dom,{children:s}=t,o=0;for(let t=0;o<s.length;o++){let n=s[o],r=t+n.length;if(!(r==t&&n.getSide()<=0)){if(e>t&&e<r&&n.dom.parentNode==i)return n.domAtPos(e-t);if(e<=t)break;t=r}}for(let t=o;t>0;t--){let e=s[t-1];if(e.dom.parentNode==i)return e.domAtPos(e.length)}for(let t=o;t<s.length;t++){let e=s[t];if(e.dom.parentNode==i)return e.domAtPos(0)}return new et(i,0)}function Ct(t,e,i){let s,{children:o}=t;i>0&&e instanceof St&&o.length&&(s=o[o.length-1])instanceof St&&s.mark.eq(e.mark)?Ct(s,e.children[0],i-1):(o.push(e),e.setParent(t)),t.length+=e.length}function At(t,e,i){let s=null,o=-1,n=null,r=-1;!function t(e,l){for(let h=0,a=0;h<e.children.length&&a<=l;h++){let c=e.children[h],d=a+c.length;d>=l&&(c.children.length?t(c,l-a):(!n||n.isHidden&&i>0)&&(d>l||a==d&&c.getSide()>0)?(n=c,r=l-a):(a<l||a==d&&c.getSide()<0&&!c.isHidden)&&(s=c,o=l-a)),a=d}}(t,e);let l=(i<0?s:n)||s||n;return l?l.coordsAt(Math.max(0,l==s?o:r),i):function(t){let e=t.dom.lastChild;if(!e)return t.dom.getBoundingClientRect();let i=V(e);return i[i.length-1]||null}(t)}function Dt(t,e){for(let i in t)"class"==i&&e.class?e.class+=" "+t.class:"style"==i&&e.style?e.style+=";"+t.style:e[i]=t[i];return e}yt.prototype.children=xt.prototype.children=Mt.prototype.children=it;const Tt=Object.create(null);function Ot(t,e,i){if(t==e)return!0;t||(t=Tt),e||(e=Tt);let s=Object.keys(t),o=Object.keys(e);if(s.length-(i&&s.indexOf(i)>-1?1:0)!=o.length-(i&&o.indexOf(i)>-1?1:0))return!1;for(let n of s)if(n!=i&&(-1==o.indexOf(n)||t[n]!==e[n]))return!1;return!0}function Et(t,e,i){let s=!1;if(e)for(let o in e)i&&o in i||(s=!0,"style"==o?t.style.cssText="":t.removeAttribute(o));if(i)for(let o in i)e&&e[o]==i[o]||(s=!0,"style"==o?t.style.cssText=i[o]:t.setAttribute(o,i[o]));return s}function Rt(t){let e=Object.create(null);for(let i=0;i<t.attributes.length;i++){let s=t.attributes[i];e[s.name]=s.value}return e}class Lt extends st{constructor(){super(...arguments),this.children=[],this.length=0,this.prevAttrs=void 0,this.attrs=null,this.breakAfter=0}merge(t,e,i,s,o,n){if(i){if(!(i instanceof Lt))return!1;this.dom||i.transferDOM(this)}return s&&this.setDeco(i?i.attrs:null),lt(this,t,e,i?i.children.slice():[],o,n),!0}split(t){let e=new Lt;if(e.breakAfter=this.breakAfter,0==this.length)return e;let{i:i,off:s}=this.childPos(t);s&&(e.append(this.children[i].split(s),0),this.children[i].merge(s,this.children[i].length,null,!1,0,0),i++);for(let t=i;t<this.children.length;t++)e.append(this.children[t],0);for(;i>0&&0==this.children[i-1].length;)this.children[--i].destroy();return this.children.length=i,this.markDirty(),this.length=t,e}transferDOM(t){this.dom&&(this.markDirty(),t.setDOM(this.dom),t.prevAttrs=void 0===this.prevAttrs?this.attrs:this.prevAttrs,this.prevAttrs=void 0,this.dom=null)}setDeco(t){Ot(this.attrs,t)||(this.dom&&(this.prevAttrs=this.attrs,this.markDirty()),this.attrs=t)}append(t,e){Ct(this,t,e)}addLineDeco(t){let e=t.spec.attributes,i=t.spec.class;e&&(this.attrs=Dt(e,this.attrs||{})),i&&(this.attrs=Dt({class:i},this.attrs||{}))}domAtPos(t){return kt(this,t)}reuseDOM(t){"DIV"==t.nodeName&&(this.setDOM(t),this.flags|=6)}sync(t,e){var i;this.dom?4&this.flags&&(Q(this.dom),this.dom.className="cm-line",this.prevAttrs=this.attrs?null:void 0):(this.setDOM(document.createElement("div")),this.dom.className="cm-line",this.prevAttrs=this.attrs?null:void 0),void 0!==this.prevAttrs&&(Et(this.dom,this.prevAttrs,this.attrs),this.dom.classList.add("cm-line"),this.prevAttrs=void 0),super.sync(t,e);let s=this.dom.lastChild;for(;s&&st.get(s)instanceof St;)s=s.lastChild;if(!(s&&this.length&&("BR"==s.nodeName||0!=(null===(i=st.get(s))||void 0===i?void 0:i.isEditable)||bt.ios&&this.children.some((t=>t instanceof yt))))){let t=document.createElement("BR");t.cmIgnore=!0,this.dom.appendChild(t)}}measureTextSize(){if(0==this.children.length||this.length>20)return null;let t,e=0;for(let i of this.children){if(!(i instanceof yt)||/[^ -~]/.test(i.text))return null;let s=V(i.dom);if(1!=s.length)return null;e+=s[0].width,t=s[0].height}return e?{lineHeight:this.dom.getBoundingClientRect().height,charWidth:e/this.length,textHeight:t}:null}coordsAt(t,e){let i=At(this,t,e);if(!this.children.length&&i&&this.parent){let{heightOracle:t}=this.parent.view.viewState,e=i.bottom-i.top;if(Math.abs(e-t.lineHeight)<2&&t.textHeight<e){let s=(e-t.textHeight)/2;return{top:i.top+s,bottom:i.bottom-s,left:i.left,right:i.left}}}return i}become(t){return!1}covers(){return!0}static find(t,e){for(let i=0,s=0;i<t.children.length;i++){let o=t.children[i],n=s+o.length;if(n>=e){if(o instanceof Lt)return o;if(n>e)break}s=n+o.breakAfter}return null}}class Bt extends st{constructor(t,e,i){super(),this.widget=t,this.length=e,this.deco=i,this.breakAfter=0,this.prevWidget=null}merge(t,e,i,s,o,n){return!(i&&(!(i instanceof Bt&&this.widget.compare(i.widget))||t>0&&o<=0||e<this.length&&n<=0))&&(this.length=t+(i?i.length:0)+(this.length-e),!0)}domAtPos(t){return 0==t?et.before(this.dom):et.after(this.dom,t==this.length)}split(t){let e=this.length-t;this.length=t;let i=new Bt(this.widget,e,this.deco);return i.breakAfter=this.breakAfter,i}get children(){return it}sync(t){this.dom&&this.widget.updateDOM(this.dom,t)||(this.dom&&this.prevWidget&&this.prevWidget.destroy(this.dom),this.prevWidget=null,this.setDOM(this.widget.toDOM(t)),this.widget.editable||(this.dom.contentEditable="false"))}get overrideDOMText(){return this.parent?this.parent.view.state.doc.slice(this.posAtStart,this.posAtEnd):w.empty}domBoundsAround(){return null}become(t){return t instanceof Bt&&t.widget.constructor==this.widget.constructor&&(t.widget.compare(this.widget)||this.markDirty(!0),this.dom&&!this.prevWidget&&(this.prevWidget=this.widget),this.widget=t.widget,this.length=t.length,this.deco=t.deco,this.breakAfter=t.breakAfter,!0)}ignoreMutation(){return!0}ignoreEvent(t){return this.widget.ignoreEvent(t)}get isEditable(){return!1}get isWidget(){return!0}coordsAt(t,e){return this.widget.coordsAt(this.dom,t,e)}destroy(){super.destroy(),this.dom&&this.widget.destroy(this.dom)}covers(t){let{startSide:e,endSide:i}=this.deco;return e!=i&&(t<0?e<0:i>0)}}class Ht{eq(t){return!1}updateDOM(t,e){return!1}compare(t){return this==t||this.constructor==t.constructor&&this.eq(t)}get estimatedHeight(){return-1}get lineBreaks(){return 0}ignoreEvent(t){return!0}coordsAt(t,e,i){return null}get isHidden(){return!1}get editable(){return!1}destroy(t){}}var Pt=function(t){return t[t.Text=0]="Text",t[t.WidgetBefore=1]="WidgetBefore",t[t.WidgetAfter=2]="WidgetAfter",t[t.WidgetRange=3]="WidgetRange",t}(Pt||(Pt={}));class Vt extends t{constructor(t,e,i,s){super(),this.startSide=t,this.endSide=e,this.widget=i,this.spec=s}get heightRelevant(){return!1}static mark(t){return new Nt(t)}static widget(t){let e=Math.max(-1e4,Math.min(1e4,t.side||0)),i=!!t.block;return e+=i&&!t.inlineOrder?e>0?3e8:-4e8:e>0?1e8:-1e8,new zt(t,e,e,i,t.widget||null,!1)}static replace(t){let e,i,s=!!t.block;if(t.isBlockGap)e=-5e8,i=4e8;else{let{start:o,end:n}=Ft(t,s);e=(o?s?-3e8:-1:5e8)-1,i=1+(n?s?2e8:1:-6e8)}return new zt(t,e,i,s,t.widget||null,!0)}static line(t){return new Wt(t)}static set(t,i=!1){return e.of(t,i)}hasHeight(){return!!this.widget&&this.widget.estimatedHeight>-1}}Vt.none=e.empty;class Nt extends Vt{constructor(t){let{start:e,end:i}=Ft(t);super(e?-1:5e8,i?1:-6e8,null,t),this.tagName=t.tagName||"span",this.class=t.class||"",this.attrs=t.attributes||null}eq(t){var e,i;return this==t||t instanceof Nt&&this.tagName==t.tagName&&(this.class||(null===(e=this.attrs)||void 0===e?void 0:e.class))==(t.class||(null===(i=t.attrs)||void 0===i?void 0:i.class))&&Ot(this.attrs,t.attrs,"class")}range(t,e=t){if(t>=e)throw new RangeError("Mark decorations may not be empty");return super.range(t,e)}}Nt.prototype.point=!1;class Wt extends Vt{constructor(t){super(-2e8,-2e8,null,t)}eq(t){return t instanceof Wt&&this.spec.class==t.spec.class&&Ot(this.spec.attributes,t.spec.attributes)}range(t,e=t){if(e!=t)throw new RangeError("Line decoration ranges must be zero-length");return super.range(t,e)}}Wt.prototype.mapMode=i.TrackBefore,Wt.prototype.point=!0;class zt extends Vt{constructor(t,e,s,o,n,r){super(e,s,n,t),this.block=o,this.isReplace=r,this.mapMode=o?e<=0?i.TrackBefore:i.TrackAfter:i.TrackDel}get type(){return this.startSide!=this.endSide?Pt.WidgetRange:this.startSide<=0?Pt.WidgetBefore:Pt.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(t){return t instanceof zt&&(e=this.widget,i=t.widget,e==i||!!(e&&i&&e.compare(i)))&&this.block==t.block&&this.startSide==t.startSide&&this.endSide==t.endSide;var e,i}range(t,e=t){if(this.isReplace&&(t>e||t==e&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&e!=t)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(t,e)}}function Ft(t,e=!1){let{inclusiveStart:i,inclusiveEnd:s}=t;return null==i&&(i=t.inclusive),null==s&&(s=t.inclusive),{start:null!=i?i:e,end:null!=s?s:e}}function Kt(t,e,i,s=0){let o=i.length-1;o>=0&&i[o]+s>=t?i[o]=Math.max(i[o],e):i.push(t,e)}zt.prototype.point=!0;class It{constructor(t,e,i,s){this.doc=t,this.pos=e,this.end=i,this.disallowBlockEffectsFor=s,this.content=[],this.curLine=null,this.breakAtStart=0,this.pendingBuffer=0,this.bufferMarks=[],this.atCursorPos=!0,this.openStart=-1,this.openEnd=-1,this.text="",this.textOff=0,this.cursor=t.iter(),this.skip=e}posCovered(){if(0==this.content.length)return!this.breakAtStart&&this.doc.lineAt(this.pos).from!=this.pos;let t=this.content[this.content.length-1];return!(t.breakAfter||t instanceof Bt&&t.deco.endSide<0)}getLine(){return this.curLine||(this.content.push(this.curLine=new Lt),this.atCursorPos=!0),this.curLine}flushBuffer(t=this.bufferMarks){this.pendingBuffer&&(this.curLine.append(qt(new Mt(-1),t),t.length),this.pendingBuffer=0)}addBlockWidget(t){this.flushBuffer(),this.curLine=null,this.content.push(t)}finish(t){this.pendingBuffer&&t<=this.bufferMarks.length?this.flushBuffer():this.pendingBuffer=0,this.posCovered()||t&&this.content.length&&this.content[this.content.length-1]instanceof Bt||this.getLine()}buildText(t,e,i){for(;t>0;){if(this.textOff==this.text.length){let{value:e,lineBreak:i,done:s}=this.cursor.next(this.skip);if(this.skip=0,s)throw new Error("Ran out of text content when drawing inline views");if(i){this.posCovered()||this.getLine(),this.content.length?this.content[this.content.length-1].breakAfter=1:this.breakAtStart=1,this.flushBuffer(),this.curLine=null,this.atCursorPos=!0,t--;continue}this.text=e,this.textOff=0}let s=Math.min(this.text.length-this.textOff,t,512);this.flushBuffer(e.slice(e.length-i)),this.getLine().append(qt(new yt(this.text.slice(this.textOff,this.textOff+s)),e),i),this.atCursorPos=!0,this.textOff+=s,t-=s,i=0}}span(t,e,i,s){this.buildText(e-t,i,s),this.pos=e,this.openStart<0&&(this.openStart=s)}point(t,e,i,s,o,n){if(this.disallowBlockEffectsFor[n]&&i instanceof zt){if(i.block)throw new RangeError("Block decorations may not be specified via plugins");if(e>this.doc.lineAt(this.pos).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}let r=e-t;if(i instanceof zt)if(i.block)i.startSide>0&&!this.posCovered()&&this.getLine(),this.addBlockWidget(new Bt(i.widget||Yt.block,r,i));else{let n=xt.create(i.widget||Yt.inline,r,r?0:i.startSide),l=this.atCursorPos&&!n.isEditable&&o<=s.length&&(t<e||i.startSide>0),h=!n.isEditable&&(t<e||o>s.length||i.startSide<=0),a=this.getLine();2!=this.pendingBuffer||l||n.isEditable||(this.pendingBuffer=0),this.flushBuffer(s),l&&(a.append(qt(new Mt(1),s),o),o=s.length+Math.max(0,o-s.length)),a.append(qt(n,s),o),this.atCursorPos=h,this.pendingBuffer=h?t<e||o>s.length?1:2:0,this.pendingBuffer&&(this.bufferMarks=s.slice())}else this.doc.lineAt(this.pos).from==this.pos&&this.getLine().addLineDeco(i);r&&(this.textOff+r<=this.text.length?this.textOff+=r:(this.skip+=r-(this.text.length-this.textOff),this.text="",this.textOff=0),this.pos=e),this.openStart<0&&(this.openStart=o)}static build(t,i,s,o,n){let r=new It(t,i,s,n);return r.openEnd=e.spans(o,i,s,r),r.openStart<0&&(r.openStart=r.openEnd),r.finish(r.openEnd),r}}function qt(t,e){for(let i of e)t=new St(i,[t],t.length);return t}class Yt extends Ht{constructor(t){super(),this.tag=t}eq(t){return t.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(t){return t.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}}Yt.inline=new Yt("span"),Yt.block=new Yt("div");var _t=function(t){return t[t.LTR=0]="LTR",t[t.RTL=1]="RTL",t}(_t||(_t={}));const jt=_t.LTR,Xt=_t.RTL;function Gt(t){let e=[];for(let i=0;i<t.length;i++)e.push(1<<+t[i]);return e}const Ut=Gt("88888888888888888888888888888888888666888888787833333333337888888000000000000000000000000008888880000000000000000000000000088888888888888888888888888888888888887866668888088888663380888308888800000000000000000000000800000000000000000000000000000008"),$t=Gt("4444448826627288999999999992222222222222222222222222222222222222222222222229999999999999999999994444444444644222822222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222999999949999999229989999223333333333"),Qt=Object.create(null),Zt=[];for(let t of["()","[]","{}"]){let e=t.charCodeAt(0),i=t.charCodeAt(1);Qt[e]=i,Qt[i]=-e}function Jt(t){return t<=247?Ut[t]:1424<=t&&t<=1524?2:1536<=t&&t<=1785?$t[t-1536]:1774<=t&&t<=2220?4:8192<=t&&t<=8204?256:64336<=t&&t<=65023?4:1}const te=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac\ufb50-\ufdff]/;class ee{get dir(){return this.level%2?Xt:jt}constructor(t,e,i){this.from=t,this.to=e,this.level=i}side(t,e){return this.dir==e==t?this.to:this.from}forward(t,e){return t==(this.dir==e)}static find(t,e,i,s){let o=-1;for(let n=0;n<t.length;n++){let r=t[n];if(r.from<=e&&r.to>=e){if(r.level==i)return n;(o<0||(0!=s?s<0?r.from<e:r.to>e:t[o].level>r.level))&&(o=n)}}if(o<0)throw new RangeError("Index out of range");return o}}function ie(t,e){if(t.length!=e.length)return!1;for(let i=0;i<t.length;i++){let s=t[i],o=e[i];if(s.from!=o.from||s.to!=o.to||s.direction!=o.direction||!ie(s.inner,o.inner))return!1}return!0}const se=[];function oe(t,e,i,s,o,n,r){let l=s%2?2:1;if(s%2==o%2)for(let h=e,a=0;h<i;){let e=!0,c=!1;if(a==n.length||h<n[a].from){let t=se[h];t!=l&&(e=!1,c=16==t)}let d=e||1!=l?null:[],u=e?s:s+1,f=h;t:for(;;)if(a<n.length&&f==n[a].from){if(c)break t;let p=n[a];if(!e)for(let t=p.to,e=a+1;;){if(t==i)break t;if(!(e<n.length&&n[e].from==t)){if(se[t]==l)break t;break}t=n[e++].to}if(a++,d)d.push(p);else{p.from>h&&r.push(new ee(h,p.from,u)),ne(t,p.direction==jt!=!(u%2)?s+1:s,o,p.inner,p.from,p.to,r),h=p.to}f=p.to}else{if(f==i||(e?se[f]!=l:se[f]==l))break;f++}d?oe(t,h,f,s+1,o,d,r):h<f&&r.push(new ee(h,f,u)),h=f}else for(let h=i,a=n.length;h>e;){let i=!0,c=!1;if(!a||h>n[a-1].to){let t=se[h-1];t!=l&&(i=!1,c=16==t)}let d=i||1!=l?null:[],u=i?s:s+1,f=h;t:for(;;)if(a&&f==n[a-1].to){if(c)break t;let p=n[--a];if(!i)for(let t=p.from,i=a;;){if(t==e)break t;if(!i||n[i-1].to!=t){if(se[t-1]==l)break t;break}t=n[--i].from}if(d)d.push(p);else{p.to<h&&r.push(new ee(p.to,h,u)),ne(t,p.direction==jt!=!(u%2)?s+1:s,o,p.inner,p.from,p.to,r),h=p.from}f=p.from}else{if(f==e||(i?se[f-1]!=l:se[f-1]==l))break;f--}d?oe(t,f,h,s+1,o,d,r):f<h&&r.push(new ee(f,h,u)),h=f}}function ne(t,e,i,s,o,n,r){let l=e%2?2:1;!function(t,e,i,s,o){for(let n=0;n<=s.length;n++){let r=n?s[n-1].to:e,l=n<s.length?s[n].from:i,h=n?256:o;for(let e=r,i=h,s=h;e<l;e++){let o=Jt(t.charCodeAt(e));512==o?o=i:8==o&&4==s&&(o=16),se[e]=4==o?2:o,7&o&&(s=o),i=o}for(let t=r,e=h,s=h;t<l;t++){let o=se[t];if(128==o)t<l-1&&e==se[t+1]&&24&e?o=se[t]=e:se[t]=256;else if(64==o){let o=t+1;for(;o<l&&64==se[o];)o++;let n=t&&8==e||o<i&&8==se[o]?1==s?1:8:256;for(let e=t;e<o;e++)se[e]=n;t=o-1}else 8==o&&1==s&&(se[t]=1);e=o,7&o&&(s=o)}}}(t,o,n,s,l),function(t,e,i,s,o){let n=1==o?2:1;for(let r=0,l=0,h=0;r<=s.length;r++){let a=r?s[r-1].to:e,c=r<s.length?s[r].from:i;for(let e,i,s,r=a;r<c;r++)if(i=Qt[e=t.charCodeAt(r)])if(i<0){for(let t=l-3;t>=0;t-=3)if(Zt[t+1]==-i){let e=Zt[t+2],i=2&e?o:4&e?1&e?n:o:0;i&&(se[r]=se[Zt[t]]=i),l=t;break}}else{if(189==Zt.length)break;Zt[l++]=r,Zt[l++]=e,Zt[l++]=h}else if(2==(s=se[r])||1==s){let t=s==o;h=t?0:1;for(let e=l-3;e>=0;e-=3){let i=Zt[e+2];if(2&i)break;if(t)Zt[e+2]|=2;else{if(4&i)break;Zt[e+2]|=4}}}}}(t,o,n,s,l),function(t,e,i,s){for(let o=0,n=s;o<=i.length;o++){let r=o?i[o-1].to:t,l=o<i.length?i[o].from:e;for(let h=r;h<l;){let r=se[h];if(256==r){let r=h+1;for(;;)if(r==l){if(o==i.length)break;r=i[o++].to,l=o<i.length?i[o].from:e}else{if(256!=se[r])break;r++}let a=1==n,c=a==(1==(r<e?se[r]:s))?a?1:2:s;for(let e=r,s=o,n=s?i[s-1].to:t;e>h;)e==n&&(e=i[--s].from,n=s?i[s-1].to:t),se[--e]=c;h=r}else n=r,h++}}}(o,n,s,l),oe(t,o,n,e,i,s,r)}function re(t,e,i){if(!t)return[new ee(0,0,e==Xt?1:0)];if(e==jt&&!i.length&&!te.test(t))return le(t.length);if(i.length)for(;t.length>se.length;)se[se.length]=256;let s=[],o=e==jt?0:1;return ne(t,o,o,i,0,t.length,s),s}function le(t){return[new ee(0,t,0)]}let he="";function ae(t,e,i,s,o){var r;let l=s.head-t.from,h=ee.find(e,l,null!==(r=s.bidiLevel)&&void 0!==r?r:-1,s.assoc),a=e[h],c=a.side(o,i);if(l==c){let t=h+=o?1:-1;if(t<0||t>=e.length)return null;a=e[h=t],l=a.side(!o,i),c=a.side(o,i)}let d=p(t.text,l,a.forward(o,i));(d<a.from||d>a.to)&&(d=c),he=t.text.slice(Math.min(l,d),Math.max(l,d));let u=h==(o?e.length-1:0)?null:e[h+(o?1:-1)];return u&&d==c&&u.level+(o?0:1)<a.level?n.cursor(u.side(!o,i)+t.from,u.forward(o,i)?1:-1,u.level):n.cursor(d+t.from,a.forward(o,i)?-1:1,a.level)}function ce(t,e,i){for(let s=e;s<i;s++){let e=Jt(t.charCodeAt(s));if(1==e)return jt;if(2==e||4==e)return Xt}return jt}const de=s.define(),ue=s.define(),fe=s.define(),pe=s.define(),ge=s.define(),me=s.define(),we=s.define(),ve=s.define({combine:t=>t.some((t=>t))}),be=s.define({combine:t=>t.some((t=>t))}),ye=s.define();class Se{constructor(t,e="nearest",i="nearest",s=5,o=5,n=!1){this.range=t,this.y=e,this.x=i,this.yMargin=s,this.xMargin=o,this.isSnapshot=n}map(t){return t.empty?this:new Se(this.range.map(t),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(t){return this.range.to<=t.doc.length?this:new Se(n.cursor(t.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}}const xe=a.define({map:(t,e)=>t.map(e)});function Me(t,e,i){let s=t.facet(pe);s.length?s[0](e):window.onerror?window.onerror(String(e),i,void 0,void 0,e):i?console.error(i+":",e):console.error(e)}const ke=s.define({combine:t=>!t.length||t[0]});let Ce=0;const Ae=s.define();class De{constructor(t,e,i,s,o){this.id=t,this.create=e,this.domEventHandlers=i,this.domEventObservers=s,this.extension=o(this)}static define(t,e){const{eventHandlers:i,eventObservers:s,provide:o,decorations:n}=e||{};return new De(Ce++,t,i,s,(t=>{let e=[Ae.of(t)];return n&&e.push(Re.of((e=>{let i=e.plugin(t);return i?n(i):Vt.none}))),o&&e.push(o(t)),e}))}static fromClass(t,e){return De.define((e=>new t(e)),e)}}class Te{constructor(t){this.spec=t,this.mustUpdate=null,this.value=null}update(t){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(e){if(Me(t.state,e,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch(t){}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.create(t)}catch(e){Me(t.state,e,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(t){var e;if(null===(e=this.value)||void 0===e?void 0:e.destroy)try{this.value.destroy()}catch(e){Me(t.state,e,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}}const Oe=s.define(),Ee=s.define(),Re=s.define(),Le=s.define(),Be=s.define(),He=s.define();function Pe(t,i){let s=t.state.facet(He);if(!s.length)return s;let o=s.map((e=>e instanceof Function?e(t):e)),n=[];return e.spans(o,i.from,i.to,{point(){},span(t,e,s,o){let r=t-i.from,l=e-i.from,h=n;for(let t=s.length-1;t>=0;t--,o--){let e,n=s[t].spec.bidiIsolate;if(null==n&&(n=ce(i.text,r,l)),o>0&&h.length&&(e=h[h.length-1]).to==r&&e.direction==n)e.to=l,h=e.inner;else{let t={from:r,to:l,direction:n,inner:[]};h.push(t),h=t.inner}}}}),n}const Ve=s.define();function Ne(t){let e=0,i=0,s=0,o=0;for(let n of t.state.facet(Ve)){let r=n(t);r&&(null!=r.left&&(e=Math.max(e,r.left)),null!=r.right&&(i=Math.max(i,r.right)),null!=r.top&&(s=Math.max(s,r.top)),null!=r.bottom&&(o=Math.max(o,r.bottom)))}return{left:e,right:i,top:s,bottom:o}}const We=s.define();class ze{constructor(t,e,i,s){this.fromA=t,this.toA=e,this.fromB=i,this.toB=s}join(t){return new ze(Math.min(this.fromA,t.fromA),Math.max(this.toA,t.toA),Math.min(this.fromB,t.fromB),Math.max(this.toB,t.toB))}addToSet(t){let e=t.length,i=this;for(;e>0;e--){let s=t[e-1];if(!(s.fromA>i.toA)){if(s.toA<i.fromA)break;i=i.join(s),t.splice(e-1,1)}}return t.splice(e,0,i),t}static extendWithRanges(t,e){if(0==e.length)return t;let i=[];for(let s=0,o=0,n=0,r=0;;s++){let l=s==t.length?null:t[s],h=n-r,a=l?l.fromB:1e9;for(;o<e.length&&e[o]<a;){let t=e[o],s=e[o+1],n=Math.max(r,t),l=Math.min(a,s);if(n<=l&&new ze(n+h,l+h,n,l).addToSet(i),s>a)break;o+=2}if(!l)return i;new ze(l.fromA,l.toA,l.fromB,l.toB).addToSet(i),n=l.toA,r=l.toB}}}class Fe{constructor(t,e,i){this.view=t,this.state=e,this.transactions=i,this.flags=0,this.startState=t.state,this.changes=o.empty(this.startState.doc.length);for(let t of i)this.changes=this.changes.compose(t.changes);let s=[];this.changes.iterChangedRanges(((t,e,i,o)=>s.push(new ze(t,e,i,o)))),this.changedRanges=s}static create(t,e,i){return new Fe(t,e,i)}get viewportChanged(){return(4&this.flags)>0}get heightChanged(){return(2&this.flags)>0}get geometryChanged(){return this.docChanged||(10&this.flags)>0}get focusChanged(){return(1&this.flags)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some((t=>t.selection))}get empty(){return 0==this.flags&&0==this.transactions.length}}class Ke extends st{get length(){return this.view.state.doc.length}constructor(t){super(),this.view=t,this.decorations=[],this.dynamicDecorationMap=[],this.domChanged=null,this.hasComposition=null,this.markedForComposition=new Set,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.setDOM(t.contentDOM),this.children=[new Lt],this.children[0].setParent(this),this.updateDeco(),this.updateInner([new ze(0,0,0,t.state.doc.length)],0,null)}update(t){var i;let s=t.changedRanges;this.minWidth>0&&s.length&&(s.every((({fromA:t,toA:e})=>e<this.minWidthFrom||t>this.minWidthTo))?(this.minWidthFrom=t.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=t.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0);let o=-1;this.view.inputState.composing>=0&&((null===(i=this.domChanged)||void 0===i?void 0:i.newSel)?o=this.domChanged.newSel.head:function(t,e){let i=!1;e&&t.iterChangedRanges(((t,s)=>{t<e.to&&s>e.from&&(i=!0)}));return i}(t.changes,this.hasComposition)||t.selectionSet||(o=t.state.selection.main.head));let n=o>-1?function(t,e,i){let s=qe(t,i);if(!s)return null;let{node:o,from:n,to:r}=s,l=o.nodeValue;if(/[\n\r]/.test(l))return null;if(t.state.doc.sliceString(s.from,s.to)!=l)return null;let h=e.invertedDesc,a=new ze(h.mapPos(n),h.mapPos(r),n,r),c=[];for(let e=o.parentNode;;e=e.parentNode){let i=st.get(e);if(i instanceof St)c.push({node:e,deco:i.mark});else{if(i instanceof Lt||"DIV"==e.nodeName&&e.parentNode==t.contentDOM)return{range:a,text:o,marks:c,line:e};if(e==t.contentDOM)return null;c.push({node:e,deco:new Nt({inclusive:!0,attributes:Rt(e),tagName:e.tagName.toLowerCase()})})}}}(this.view,t.changes,o):null;if(this.domChanged=null,this.hasComposition){this.markedForComposition.clear();let{from:e,to:i}=this.hasComposition;s=new ze(e,i,t.changes.mapPos(e,-1),t.changes.mapPos(i,1)).addToSet(s.slice())}this.hasComposition=n?{from:n.range.fromB,to:n.range.toB}:null,(bt.ie||bt.chrome)&&!n&&t&&t.state.doc.lines!=t.startState.doc.lines&&(this.forceSelection=!0);let r=function(t,i,s){let o=new Ye;return e.compare(t,i,s,o),o.changes}(this.decorations,this.updateDeco(),t.changes);return s=ze.extendWithRanges(s,r),!!(7&this.flags||0!=s.length)&&(this.updateInner(s,t.startState.doc.length,n),t.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(t,e,i){this.view.viewState.mustMeasureContent=!0,this.updateChildren(t,e,i);let{observer:s}=this.view;s.ignore((()=>{this.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let t=bt.chrome||bt.ios?{node:s.selectionRange.focusNode,written:!1}:void 0;this.sync(this.view,t),this.flags&=-8,t&&(t.written||s.selectionRange.focusNode!=t.node)&&(this.forceSelection=!0),this.dom.style.height=""})),this.markedForComposition.forEach((t=>t.flags&=-9));let o=[];if(this.view.viewport.from||this.view.viewport.to<this.view.state.doc.length)for(let t of this.children)t instanceof Bt&&t.widget instanceof Ie&&o.push(t.dom);s.updateGaps(o)}updateChildren(t,e,i){let s=i?i.range.addToSet(t.slice()):t,o=this.childCursor(e);for(let t=s.length-1;;t--){let e=t>=0?s[t]:null;if(!e)break;let n,r,l,h,{fromA:a,toA:c,fromB:d,toB:u}=e;if(i&&i.range.fromB<u&&i.range.toB>d){let t=It.build(this.view.state.doc,d,i.range.fromB,this.decorations,this.dynamicDecorationMap),e=It.build(this.view.state.doc,i.range.toB,u,this.decorations,this.dynamicDecorationMap);r=t.breakAtStart,l=t.openStart,h=e.openEnd;let s=this.compositionView(i);e.breakAtStart?s.breakAfter=1:e.content.length&&s.merge(s.length,s.length,e.content[0],!1,e.openStart,0)&&(s.breakAfter=e.content[0].breakAfter,e.content.shift()),t.content.length&&s.merge(0,0,t.content[t.content.length-1],!0,0,t.openEnd)&&t.content.pop(),n=t.content.concat(s).concat(e.content)}else({content:n,breakAtStart:r,openStart:l,openEnd:h}=It.build(this.view.state.doc,d,u,this.decorations,this.dynamicDecorationMap));let{i:f,off:p}=o.findPos(c,1),{i:g,off:m}=o.findPos(a,-1);rt(this,g,m,f,p,n,r,l,h)}i&&this.fixCompositionDOM(i)}compositionView(t){let e=new yt(t.text.nodeValue);e.flags|=8;for(let{deco:i}of t.marks)e=new St(i,[e],e.length);let i=new Lt;return i.append(e,0),i}fixCompositionDOM(t){let e=(t,e)=>{e.flags|=8|(e.children.some((t=>7&t.flags))?1:0),this.markedForComposition.add(e);let i=st.get(t);i&&i!=e&&(i.dom=null),e.setDOM(t)},i=this.childPos(t.range.fromB,1),s=this.children[i.i];e(t.line,s);for(let o=t.marks.length-1;o>=-1;o--)i=s.childPos(i.off,1),s=s.children[i.i],e(o>=0?t.marks[o].node:t.text,s)}updateSelection(t=!1,e=!1){!t&&this.view.observer.selectionRange.focusNode||this.view.observer.readSelectionRange();let i=this.view.root.activeElement,s=i==this.dom,o=!s&&P(this.dom,this.view.observer.selectionRange)&&!(i&&this.dom.contains(i));if(!(s||e||o))return;let n=this.forceSelection;this.forceSelection=!1;let r=this.view.state.selection.main,l=this.moveToLine(this.domAtPos(r.anchor)),h=r.empty?l:this.moveToLine(this.domAtPos(r.head));if(bt.gecko&&r.empty&&!this.hasComposition&&(1==(a=l).node.nodeType&&a.node.firstChild&&(0==a.offset||"false"==a.node.childNodes[a.offset-1].contentEditable)&&(a.offset==a.node.childNodes.length||"false"==a.node.childNodes[a.offset].contentEditable))){let t=document.createTextNode("");this.view.observer.ignore((()=>l.node.insertBefore(t,l.node.childNodes[l.offset]||null))),l=h=new et(t,0),n=!0}var a;let c=this.view.observer.selectionRange;!n&&c.focusNode&&(N(l.node,l.offset,c.anchorNode,c.anchorOffset)&&N(h.node,h.offset,c.focusNode,c.focusOffset)||this.suppressWidgetCursorChange(c,r))||(this.view.observer.ignore((()=>{bt.android&&bt.chrome&&this.dom.contains(c.focusNode)&&function(t,e){for(let i=t;i&&i!=e;i=i.assignedSlot||i.parentNode)if(1==i.nodeType&&"false"==i.contentEditable)return!0;return!1}(c.focusNode,this.dom)&&(this.dom.blur(),this.dom.focus({preventScroll:!0}));let t=B(this.view.root);if(t)if(r.empty){if(bt.gecko){let t=(e=l.node,s=l.offset,1!=e.nodeType?0:(s&&"false"==e.childNodes[s-1].contentEditable?1:0)|(s<e.childNodes.length&&"false"==e.childNodes[s].contentEditable?2:0));if(t&&3!=t){let e=(1==t?J:tt)(l.node,l.offset);e&&(l=new et(e.node,e.offset))}}t.collapse(l.node,l.offset),null!=r.bidiLevel&&void 0!==t.caretBidiLevel&&(t.caretBidiLevel=r.bidiLevel)}else if(t.extend){t.collapse(l.node,l.offset);try{t.extend(h.node,h.offset)}catch(t){}}else{let e=document.createRange();r.anchor>r.head&&([l,h]=[h,l]),e.setEnd(h.node,h.offset),e.setStart(l.node,l.offset),t.removeAllRanges(),t.addRange(e)}else;var e,s;o&&this.view.root.activeElement==this.dom&&(this.dom.blur(),i&&i.focus())})),this.view.observer.setSelectionRange(l,h)),this.impreciseAnchor=l.precise?null:new et(c.anchorNode,c.anchorOffset),this.impreciseHead=h.precise?null:new et(c.focusNode,c.focusOffset)}suppressWidgetCursorChange(t,e){return this.hasComposition&&e.empty&&N(t.focusNode,t.focusOffset,t.anchorNode,t.anchorOffset)&&this.posFromDOM(t.focusNode,t.focusOffset)==e.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:t}=this,e=t.state.selection.main,i=B(t.root),{anchorNode:s,anchorOffset:o}=t.observer.selectionRange;if(!(i&&e.empty&&e.assoc&&i.modify))return;let n=Lt.find(this,e.head);if(!n)return;let r=n.posAtStart;if(e.head==r||e.head==r+n.length)return;let l=this.coordsAt(e.head,-1),h=this.coordsAt(e.head,1);if(!l||!h||l.bottom>h.top)return;let a=this.domAtPos(e.head+e.assoc);i.collapse(a.node,a.offset),i.modify("move",e.assoc<0?"forward":"backward","lineboundary"),t.observer.readSelectionRange();let c=t.observer.selectionRange;t.docView.posFromDOM(c.anchorNode,c.anchorOffset)!=e.from&&i.collapse(s,o)}moveToLine(t){let e,i=this.dom;if(t.node!=i)return t;for(let s=t.offset;!e&&s<i.childNodes.length;s++){let t=st.get(i.childNodes[s]);t instanceof Lt&&(e=t.domAtPos(0))}for(let s=t.offset-1;!e&&s>=0;s--){let t=st.get(i.childNodes[s]);t instanceof Lt&&(e=t.domAtPos(t.length))}return e?new et(e.node,e.offset,!0):t}nearest(t){for(let e=t;e;){let t=st.get(e);if(t&&t.rootView==this)return t;e=e.parentNode}return null}posFromDOM(t,e){let i=this.nearest(t);if(!i)throw new RangeError("Trying to find position for a DOM position outside of the document");return i.localPosFromDOM(t,e)+i.posAtStart}domAtPos(t){let{i:e,off:i}=this.childCursor().findPos(t,-1);for(;e<this.children.length-1;){let t=this.children[e];if(i<t.length||t instanceof Lt)break;e++,i=0}return this.children[e].domAtPos(i)}coordsAt(t,e){let i=null,s=0;for(let o=this.length,n=this.children.length-1;n>=0;n--){let r=this.children[n],l=o-r.breakAfter,h=l-r.length;if(l<t)break;h<=t&&(h<t||r.covers(-1))&&(l>t||r.covers(1))&&(!i||r instanceof Lt&&!(i instanceof Lt&&e>=0))&&(i=r,s=h),o=h}return i?i.coordsAt(t-s,e):null}coordsForChar(t){let{i:e,off:i}=this.childPos(t,1),s=this.children[e];if(!(s instanceof Lt))return null;for(;s.children.length;){let{i:t,off:e}=s.childPos(i,1);for(;;t++){if(t==s.children.length)return null;if((s=s.children[t]).length)break}i=e}if(!(s instanceof yt))return null;let o=p(s.text,i);if(o==i)return null;let n=U(s.dom,i,o).getClientRects();for(let t=0;t<n.length;t++){let e=n[t];if(t==n.length-1||e.top<e.bottom&&e.left<e.right)return e}return null}measureVisibleLineHeights(t){let e=[],{from:i,to:s}=t,o=this.view.contentDOM.clientWidth,n=o>Math.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,r=-1,l=this.view.textDirection==_t.LTR;for(let t=0,h=0;h<this.children.length;h++){let a=this.children[h],c=t+a.length;if(c>s)break;if(t>=i){let i=a.dom.getBoundingClientRect();if(e.push(i.height),n){let e=a.dom.lastChild,s=e?V(e):[];if(s.length){let e=s[s.length-1],n=l?e.right-i.left:i.right-e.left;n>r&&(r=n,this.minWidth=o,this.minWidthFrom=t,this.minWidthTo=c)}}}t=c+a.breakAfter}return e}textDirectionAt(t){let{i:e}=this.childPos(t,1);return"rtl"==getComputedStyle(this.children[e].dom).direction?_t.RTL:_t.LTR}measureTextSize(){for(let t of this.children)if(t instanceof Lt){let e=t.measureTextSize();if(e)return e}let t,e,i,s=document.createElement("div");return s.className="cm-line",s.style.width="99999px",s.style.position="absolute",s.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore((()=>{this.dom.appendChild(s);let o=V(s.firstChild)[0];t=s.getBoundingClientRect().height,e=o?o.width/27:7,i=o?o.height:t,s.remove()})),{lineHeight:t,charWidth:e,textHeight:i}}childCursor(t=this.length){let e=this.children.length;return e&&(t-=this.children[--e].length),new nt(this.children,t,e)}computeBlockGapDeco(){let t=[],e=this.view.viewState;for(let i=0,s=0;;s++){let o=s==e.viewports.length?null:e.viewports[s],n=o?o.from-1:this.length;if(n>i){let s=(e.lineBlockAt(n).bottom-e.lineBlockAt(i).top)/this.view.scaleY;t.push(Vt.replace({widget:new Ie(s),block:!0,inclusive:!0,isBlockGap:!0}).range(i,n))}if(!o)break;i=o.to+1}return Vt.set(t)}updateDeco(){let t=0,i=this.view.state.facet(Re).map((e=>(this.dynamicDecorationMap[t++]="function"==typeof e)?e(this.view):e)),s=!1,o=this.view.state.facet(Le).map(((t,e)=>{let i="function"==typeof t;return i&&(s=!0),i?t(this.view):t}));for(o.length&&(this.dynamicDecorationMap[t++]=s,i.push(e.join(o))),this.decorations=[...i,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];t<this.decorations.length;)this.dynamicDecorationMap[t++]=!1;return this.decorations}scrollIntoView(t){if(t.isSnapshot){let e=this.view.viewState.lineBlockAt(t.range.head);return this.view.scrollDOM.scrollTop=e.top-t.yMargin,void(this.view.scrollDOM.scrollLeft=t.xMargin)}for(let e of this.view.state.facet(ye))try{if(e(this.view,t.range,t))return!0}catch(t){Me(this.view.state,t,"scroll handler")}let e,{range:i}=t,s=this.coordsAt(i.head,i.empty?i.assoc:i.head>i.anchor?-1:1);if(!s)return;!i.empty&&(e=this.coordsAt(i.anchor,i.anchor>i.head?-1:1))&&(s={left:Math.min(s.left,e.left),top:Math.min(s.top,e.top),right:Math.max(s.right,e.right),bottom:Math.max(s.bottom,e.bottom)});let o=Ne(this.view),n={left:s.left-o.left,top:s.top-o.top,right:s.right+o.right,bottom:s.bottom+o.bottom},{offsetWidth:r,offsetHeight:l}=this.view.scrollDOM;!function(t,e,i,s,o,n,r,l){let h=t.ownerDocument,a=h.defaultView||window;for(let c=t,d=!1;c&&!d;)if(1==c.nodeType){let t,u=c==h.body,f=1,p=1;if(u)t=q(a);else{if(/^(fixed|sticky)$/.test(getComputedStyle(c).position)&&(d=!0),c.scrollHeight<=c.clientHeight&&c.scrollWidth<=c.clientWidth){c=c.assignedSlot||c.parentNode;continue}let e=c.getBoundingClientRect();({scaleX:f,scaleY:p}=Y(c,e)),t={left:e.left,right:e.left+c.clientWidth*f,top:e.top,bottom:e.top+c.clientHeight*p}}let g=0,m=0;if("nearest"==o)e.top<t.top?(m=-(t.top-e.top+r),i>0&&e.bottom>t.bottom+m&&(m=e.bottom-t.bottom+m+r)):e.bottom>t.bottom&&(m=e.bottom-t.bottom+r,i<0&&e.top-m<t.top&&(m=-(t.top+m-e.top+r)));else{let s=e.bottom-e.top,n=t.bottom-t.top;m=("center"==o&&s<=n?e.top+s/2-n/2:"start"==o||"center"==o&&i<0?e.top-r:e.bottom-n+r)-t.top}if("nearest"==s?e.left<t.left?(g=-(t.left-e.left+n),i>0&&e.right>t.right+g&&(g=e.right-t.right+g+n)):e.right>t.right&&(g=e.right-t.right+n,i<0&&e.left<t.left+g&&(g=-(t.left+g-e.left+n))):g=("center"==s?e.left+(e.right-e.left)/2-(t.right-t.left)/2:"start"==s==l?e.left-n:e.right-(t.right-t.left)+n)-t.left,g||m)if(u)a.scrollBy(g,m);else{let t=0,i=0;if(m){let t=c.scrollTop;c.scrollTop+=m/p,i=(c.scrollTop-t)*p}if(g){let e=c.scrollLeft;c.scrollLeft+=g/f,t=(c.scrollLeft-e)*f}e={left:e.left-t,top:e.top-i,right:e.right-t,bottom:e.bottom-i},t&&Math.abs(t-g)<1&&(s="nearest"),i&&Math.abs(i-m)<1&&(o="nearest")}if(u)break;c=c.assignedSlot||c.parentNode}else{if(11!=c.nodeType)break;c=c.host}}(this.view.scrollDOM,n,i.head<i.anchor?-1:1,t.x,t.y,Math.max(Math.min(t.xMargin,r),-r),Math.max(Math.min(t.yMargin,l),-l),this.view.textDirection==_t.LTR)}}class Ie extends Ht{constructor(t){super(),this.height=t}toDOM(){let t=document.createElement("div");return t.className="cm-gap",this.updateDOM(t),t}eq(t){return t.height==this.height}updateDOM(t){return t.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}}function qe(t,e){let i=t.observer.selectionRange;if(!i.focusNode)return null;let s=J(i.focusNode,i.focusOffset),o=tt(i.focusNode,i.focusOffset),n=s||o;if(o&&s&&o.node!=s.node){let e=st.get(o.node);if(!e||e instanceof yt&&e.text!=o.node.nodeValue)n=o;else if(t.docView.lastCompositionAfterCursor){let t=st.get(s.node);!t||t instanceof yt&&t.text!=s.node.nodeValue||(n=o)}}if(t.docView.lastCompositionAfterCursor=n!=s,!n)return null;let r=e-n.offset;return{from:r,to:r+n.node.nodeValue.length,node:n.node}}let Ye=class{constructor(){this.changes=[]}compareRange(t,e){Kt(t,e,this.changes)}comparePoint(t,e){Kt(t,e,this.changes)}};function _e(t,e){return e.left>t?e.left-t:Math.max(0,t-e.right)}function je(t,e){return e.top>t?e.top-t:Math.max(0,t-e.bottom)}function Xe(t,e){return t.top<e.bottom-1&&t.bottom>e.top+1}function Ge(t,e){return e<t.top?{top:e,left:t.left,right:t.right,bottom:t.bottom}:t}function Ue(t,e){return e>t.bottom?{top:t.top,left:t.left,right:t.right,bottom:e}:t}function $e(t,e,i){let s,o,n,r,l,h,a,c,d=!1;for(let u=t.firstChild;u;u=u.nextSibling){let t=V(u);for(let f=0;f<t.length;f++){let p=t[f];o&&Xe(o,p)&&(p=Ge(Ue(p,o.bottom),o.top));let g=_e(e,p),m=je(i,p);if(0==g&&0==m)return 3==u.nodeType?Qe(u,e,i):$e(u,e,i);if(!s||r>m||r==m&&n>g){s=u,o=p,n=g,r=m;let l=m?i<p.top?-1:1:g?e<p.left?-1:1:0;d=!l||(l>0?f<t.length-1:f>0)}0==g?i>p.bottom&&(!a||a.bottom<p.bottom)?(l=u,a=p):i<p.top&&(!c||c.top>p.top)&&(h=u,c=p):a&&Xe(a,p)?a=Ue(a,p.bottom):c&&Xe(c,p)&&(c=Ge(c,p.top))}}if(a&&a.bottom>=i?(s=l,o=a):c&&c.top<=i&&(s=h,o=c),!s)return{node:t,offset:0};let u=Math.max(o.left,Math.min(o.right,e));return 3==s.nodeType?Qe(s,u,i):d&&"false"!=s.contentEditable?$e(s,u,i):{node:t,offset:Array.prototype.indexOf.call(t.childNodes,s)+(e>=(o.left+o.right)/2?1:0)}}function Qe(t,e,i){let s=t.nodeValue.length,o=-1,n=1e9,r=0;for(let l=0;l<s;l++){let s=U(t,l,l+1).getClientRects();for(let h=0;h<s.length;h++){let a=s[h];if(a.top==a.bottom)continue;r||(r=e-a.left);let c=(a.top>i?a.top-i:i-a.bottom)-1;if(a.left-1<=e&&a.right+1>=e&&c<n){let i=e>=(a.left+a.right)/2,s=i;if(bt.chrome||bt.gecko){U(t,l).getBoundingClientRect().left==a.right&&(s=!i)}if(c<=0)return{node:t,offset:l+(s?1:0)};o=l+(s?1:0),n=c}}}return{node:t,offset:o>-1?o:r>0?t.nodeValue.length:0}}function Ze(t,e,i,s=-1){var o,n;let r,l=t.contentDOM.getBoundingClientRect(),h=l.top+t.viewState.paddingTop,{docHeight:a}=t.viewState,{x:c,y:d}=e,u=d-h;if(u<0)return 0;if(u>a)return t.state.doc.length;for(let e=t.viewState.heightOracle.textHeight/2,o=!1;r=t.elementAtHeight(u),r.type!=Pt.Text;)for(;u=s>0?r.bottom+e:r.top-e,!(u>=0&&u<=a);){if(o)return i?null:0;o=!0,s=-s}d=h+u;let f=r.from;if(f<t.viewport.from)return 0==t.viewport.from?0:i?null:Je(t,l,r,c,d);if(f>t.viewport.to)return t.viewport.to==t.state.doc.length?t.state.doc.length:i?null:Je(t,l,r,c,d);let p=t.dom.ownerDocument,g=t.root.elementFromPoint?t.root:p,m=g.elementFromPoint(c,d);m&&!t.contentDOM.contains(m)&&(m=null),m||(c=Math.max(l.left+1,Math.min(l.right-1,c)),m=g.elementFromPoint(c,d),m&&!t.contentDOM.contains(m)&&(m=null));let w,v=-1;if(m&&0!=(null===(o=t.docView.nearest(m))||void 0===o?void 0:o.isEditable))if(p.caretPositionFromPoint){let t=p.caretPositionFromPoint(c,d);t&&({offsetNode:w,offset:v}=t)}else if(p.caretRangeFromPoint){let e=p.caretRangeFromPoint(c,d);e&&(({startContainer:w,startOffset:v}=e),(!t.contentDOM.contains(w)||bt.safari&&function(t,e,i){let s;if(3!=t.nodeType||e!=(s=t.nodeValue.length))return!1;for(let e=t.nextSibling;e;e=e.nextSibling)if(1!=e.nodeType||"BR"!=e.nodeName)return!1;return U(t,s-1,s).getBoundingClientRect().left>i}(w,v,c)||bt.chrome&&function(t,e,i){if(0!=e)return!1;for(let e=t;;){let t=e.parentNode;if(!t||1!=t.nodeType||t.firstChild!=e)return!1;if(t.classList.contains("cm-line"))break;e=t}let s=1==t.nodeType?t.getBoundingClientRect():U(t,0,Math.max(t.nodeValue.length,1)).getBoundingClientRect();return i-s.left>5}(w,v,c))&&(w=void 0))}if(!w||!t.docView.dom.contains(w)){let e=Lt.find(t.docView,f);if(!e)return u>r.top+r.height/2?r.to:r.from;({node:w,offset:v}=$e(e.dom,c,d))}let b=t.docView.nearest(w);if(!b)return null;if(b.isWidget&&1==(null===(n=b.dom)||void 0===n?void 0:n.nodeType)){let t=b.dom.getBoundingClientRect();return e.y<t.top||e.y<=t.bottom&&e.x<=(t.left+t.right)/2?b.posAtStart:b.posAtEnd}return b.localPosFromDOM(w,v)+b.posAtStart}function Je(t,e,i,s,o){let n=Math.round((s-e.left)*t.defaultCharacterWidth);if(t.lineWrapping&&i.height>1.5*t.defaultLineHeight){let e=t.viewState.heightOracle.textHeight;n+=Math.floor((o-i.top-.5*(t.defaultLineHeight-e))/e)*t.viewState.heightOracle.lineLength}let r=t.state.sliceDoc(i.from,i.to);return i.from+g(r,n,t.state.tabSize)}function ti(t,e){let i=t.lineBlockAt(e);if(Array.isArray(i.type))for(let t of i.type)if(t.to>e||t.to==e&&(t.to==i.to||t.type==Pt.Text))return t;return i}function ei(t,e,i,s){let o=t.state.doc.lineAt(e.head),n=t.bidiSpans(o),r=t.textDirectionAt(o.from);for(let l=e,h=null;;){let e=ae(o,n,r,l,i),a=he;if(!e){if(o.number==(i?t.state.doc.lines:1))return l;a="\n",o=t.state.doc.line(o.number+(i?1:-1)),n=t.bidiSpans(o),e=t.visualLineSide(o,!i)}if(h){if(!h(a))return l}else{if(!s)return e;h=s(a)}l=e}}function ii(t,e,i){for(;;){let s=0;for(let o of t)o.between(e-1,e+1,((t,o,n)=>{if(e>t&&e<o){let n=s||i||(e-t<o-e?-1:1);e=n<0?t:o,s=n}}));if(!s)return e}}function si(t,e,i){let s=ii(t.state.facet(Be).map((e=>e(t))),i.from,e.head>i.from?-1:1);return s==i.from?i:n.cursor(s,s<i.from?1:-1)}class oi{setSelectionOrigin(t){this.lastSelectionOrigin=t,this.lastSelectionTime=Date.now()}constructor(t){this.view=t,this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.pendingIOSKey=void 0,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastEscPress=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=t.hasFocus,bt.safari&&t.contentDOM.addEventListener("input",(()=>null)),bt.gecko&&function(t){Ri.has(t)||(Ri.add(t),t.addEventListener("copy",(()=>{})),t.addEventListener("cut",(()=>{})))}(t.contentDOM.ownerDocument)}handleEvent(t){(function(t,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let i,s=e.target;s!=t.contentDOM;s=s.parentNode)if(!s||11==s.nodeType||(i=st.get(s))&&i.ignoreEvent(e))return!1;return!0})(this.view,t)&&!this.ignoreDuringComposition(t)&&("keydown"==t.type&&this.keydown(t)||this.runHandlers(t.type,t))}runHandlers(t,e){let i=this.handlers[t];if(i){for(let t of i.observers)t(this.view,e);for(let t of i.handlers){if(e.defaultPrevented)break;if(t(this.view,e)){e.preventDefault();break}}}}ensureHandlers(t){let e=ri(t),i=this.handlers,s=this.view.contentDOM;for(let t in e)if("scroll"!=t){let o=!e[t].handlers.length,n=i[t];n&&o!=!n.handlers.length&&(s.removeEventListener(t,this.handleEvent),n=null),n||s.addEventListener(t,this.handleEvent,{passive:o})}for(let t in i)"scroll"==t||e[t]||s.removeEventListener(t,this.handleEvent);this.handlers=e}keydown(t){if(this.lastKeyCode=t.keyCode,this.lastKeyTime=Date.now(),9==t.keyCode&&Date.now()<this.lastEscPress+2e3)return!0;if(27!=t.keyCode&&ai.indexOf(t.keyCode)<0&&(this.view.inputState.lastEscPress=0),bt.android&&bt.chrome&&!t.synthetic&&(13==t.keyCode||8==t.keyCode))return this.view.observer.delayAndroidKey(t.key,t.keyCode),!0;let e;return!bt.ios||t.synthetic||t.altKey||t.metaKey||!((e=li.find((e=>e.keyCode==t.keyCode)))&&!t.ctrlKey||hi.indexOf(t.key)>-1&&t.ctrlKey&&!t.shiftKey)?(229!=t.keyCode&&this.view.observer.forceFlush(),!1):(this.pendingIOSKey=e||t,setTimeout((()=>this.flushIOSKey()),250),!0)}flushIOSKey(t){let e=this.pendingIOSKey;return!!e&&(!("Enter"==e.key&&t&&t.from<t.to&&/^\S+$/.test(t.insert.toString()))&&(this.pendingIOSKey=void 0,$(this.view.contentDOM,e.key,e.keyCode,e instanceof KeyboardEvent?e:void 0)))}ignoreDuringComposition(t){return!!/^key/.test(t.type)&&(this.composing>0||!!(bt.safari&&!bt.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100)&&(this.compositionPendingKey=!1,!0))}startMouseSelection(t){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=t}update(t){this.mouseSelection&&this.mouseSelection.update(t),this.draggedContent&&t.docChanged&&(this.draggedContent=this.draggedContent.map(t.changes)),t.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}}function ni(t,e){return(i,s)=>{try{return e.call(t,s,i)}catch(t){Me(i.state,t)}}}function ri(t){let e=Object.create(null);function i(t){return e[t]||(e[t]={observers:[],handlers:[]})}for(let e of t){let t=e.spec;if(t&&t.domEventHandlers)for(let s in t.domEventHandlers){let o=t.domEventHandlers[s];o&&i(s).handlers.push(ni(e.value,o))}if(t&&t.domEventObservers)for(let s in t.domEventObservers){let o=t.domEventObservers[s];o&&i(s).observers.push(ni(e.value,o))}}for(let t in ui)i(t).handlers.push(ui[t]);for(let t in fi)i(t).observers.push(fi[t]);return e}const li=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],hi="dthko",ai=[16,17,18,20,91,92,224,225];function ci(t){return.7*Math.max(0,t)+8}class di{constructor(t,e,i,s){this.view=t,this.startEvent=e,this.style=i,this.mustSelect=s,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=e,this.scrollParent=function(t){let e=t.ownerDocument;for(let i=t.parentNode;i&&i!=e.body;)if(1==i.nodeType){if(i.scrollHeight>i.clientHeight||i.scrollWidth>i.clientWidth)return i;i=i.assignedSlot||i.parentNode}else{if(11!=i.nodeType)break;i=i.host}return null}(t.contentDOM),this.atoms=t.state.facet(Be).map((e=>e(t)));let o=t.contentDOM.ownerDocument;o.addEventListener("mousemove",this.move=this.move.bind(this)),o.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=e.shiftKey,this.multiple=t.state.facet(r.allowMultipleSelections)&&function(t,e){let i=t.state.facet(de);return i.length?i[0](e):bt.mac?e.metaKey:e.ctrlKey}(t,e),this.dragging=!(!function(t,e){let{main:i}=t.state.selection;if(i.empty)return!1;let s=B(t.root);if(!s||0==s.rangeCount)return!0;let o=s.getRangeAt(0).getClientRects();for(let t=0;t<o.length;t++){let i=o[t];if(i.left<=e.clientX&&i.right>=e.clientX&&i.top<=e.clientY&&i.bottom>=e.clientY)return!0}return!1}(t,e)||1!=Ci(e))&&null}start(t){!1===this.dragging&&this.select(t)}move(t){var e,i,s;if(0==t.buttons)return this.destroy();if(this.dragging||null==this.dragging&&(i=this.startEvent,s=t,Math.max(Math.abs(i.clientX-s.clientX),Math.abs(i.clientY-s.clientY))<10))return;this.select(this.lastEvent=t);let o=0,n=0,r=(null===(e=this.scrollParent)||void 0===e?void 0:e.getBoundingClientRect())||{left:0,top:0,right:this.view.win.innerWidth,bottom:this.view.win.innerHeight},l=Ne(this.view);t.clientX-l.left<=r.left+6?o=-ci(r.left-t.clientX):t.clientX+l.right>=r.right-6&&(o=ci(t.clientX-r.right)),t.clientY-l.top<=r.top+6?n=-ci(r.top-t.clientY):t.clientY+l.bottom>=r.bottom-6&&(n=ci(t.clientY-r.bottom)),this.setScrollSpeed(o,n)}up(t){null==this.dragging&&this.select(this.lastEvent),this.dragging||t.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let t=this.view.contentDOM.ownerDocument;t.removeEventListener("mousemove",this.move),t.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(t,e){this.scrollSpeed={x:t,y:e},t||e?this.scrolling<0&&(this.scrolling=setInterval((()=>this.scroll()),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){this.scrollParent?(this.scrollParent.scrollLeft+=this.scrollSpeed.x,this.scrollParent.scrollTop+=this.scrollSpeed.y):this.view.win.scrollBy(this.scrollSpeed.x,this.scrollSpeed.y),!1===this.dragging&&this.select(this.lastEvent)}skipAtoms(t){let e=null;for(let i=0;i<t.ranges.length;i++){let s=t.ranges[i],o=null;if(s.empty){let t=ii(this.atoms,s.from,0);t!=s.from&&(o=n.cursor(t,-1))}else{let t=ii(this.atoms,s.from,-1),e=ii(this.atoms,s.to,1);t==s.from&&e==s.to||(o=n.range(s.from==s.anchor?t:e,s.from==s.head?t:e))}o&&(e||(e=t.ranges.slice()),e[i]=o)}return e?n.create(e,t.mainIndex):t}select(t){let{view:e}=this,i=this.skipAtoms(this.style.get(t,this.extend,this.multiple));!this.mustSelect&&i.eq(e.state.selection,!1===this.dragging)||this.view.dispatch({selection:i,userEvent:"select.pointer"}),this.mustSelect=!1}update(t){this.style.update(t)&&setTimeout((()=>this.select(this.lastEvent)),20)}}const ui=Object.create(null),fi=Object.create(null),pi=bt.ie&&bt.ie_version<15||bt.ios&&bt.webkit_version<604;function gi(t,e){let i,{state:s}=t,o=1,r=s.toText(e),l=r.lines==s.selection.ranges.length;if(null!=Di&&s.selection.ranges.every((t=>t.empty))&&Di==r.toString()){let t=-1;i=s.changeByRange((i=>{let h=s.doc.lineAt(i.from);if(h.from==t)return{range:i};t=h.from;let a=s.toText((l?r.line(o++).text:e)+s.lineBreak);return{changes:{from:h.from,insert:a},range:n.cursor(i.from+a.length)}}))}else i=l?s.changeByRange((t=>{let e=r.line(o++);return{changes:{from:t.from,to:t.to,insert:e.text},range:n.cursor(t.from+e.length)}})):s.replaceSelection(r);t.dispatch(i,{userEvent:"input.paste",scrollIntoView:!0})}function mi(t,e,i,s){if(1==s)return n.cursor(e,i);if(2==s)return function(t,e,i=1){let s=t.charCategorizer(e),o=t.doc.lineAt(e),r=e-o.from;if(0==o.length)return n.cursor(e);0==r?i=1:r==o.length&&(i=-1);let l=r,h=r;i<0?l=p(o.text,r,!1):h=p(o.text,r);let a=s(o.text.slice(l,h));for(;l>0;){let t=p(o.text,l,!1);if(s(o.text.slice(t,l))!=a)break;l=t}for(;h<o.length;){let t=p(o.text,h);if(s(o.text.slice(h,t))!=a)break;h=t}return n.range(l+o.from,h+o.from)}(t.state,e,i);{let i=Lt.find(t.docView,e),s=t.state.doc.lineAt(i?i.posAtEnd:e),o=i?i.posAtStart:s.from,r=i?i.posAtEnd:s.to;return r<t.state.doc.length&&r==s.to&&r++,n.range(o,r)}}fi.scroll=t=>{t.inputState.lastScrollTop=t.scrollDOM.scrollTop,t.inputState.lastScrollLeft=t.scrollDOM.scrollLeft},ui.keydown=(t,e)=>(t.inputState.setSelectionOrigin("select"),27==e.keyCode&&(t.inputState.lastEscPress=Date.now()),!1),fi.touchstart=(t,e)=>{t.inputState.lastTouchTime=Date.now(),t.inputState.setSelectionOrigin("select.pointer")},fi.touchmove=t=>{t.inputState.setSelectionOrigin("select.pointer")},ui.mousedown=(t,e)=>{if(t.observer.flush(),t.inputState.lastTouchTime>Date.now()-2e3)return!1;let i=null;for(let s of t.state.facet(fe))if(i=s(t,e),i)break;if(i||0!=e.button||(i=function(t,e){let i=yi(t,e),s=Ci(e),o=t.state.selection;return{update(t){t.docChanged&&(i.pos=t.changes.mapPos(i.pos),o=o.map(t.changes))},get(e,r,l){let h,a=yi(t,e),c=mi(t,a.pos,a.bias,s);if(i.pos!=a.pos&&!r){let e=mi(t,i.pos,i.bias,s),o=Math.min(e.from,c.from),r=Math.max(e.to,c.to);c=o<c.from?n.range(o,r):n.range(r,o)}return r?o.replaceRange(o.main.extend(c.from,c.to)):l&&1==s&&o.ranges.length>1&&(h=function(t,e){for(let i=0;i<t.ranges.length;i++){let{from:s,to:o}=t.ranges[i];if(s<=e&&o>=e)return n.create(t.ranges.slice(0,i).concat(t.ranges.slice(i+1)),t.mainIndex==i?0:t.mainIndex-(t.mainIndex>i?1:0))}return null}(o,a.pos))?h:l?o.addRange(c):n.create([c])}}}(t,e)),i){let s=!t.hasFocus;t.inputState.startMouseSelection(new di(t,e,i,s)),s&&t.observer.ignore((()=>G(t.contentDOM)));let o=t.inputState.mouseSelection;if(o)return o.start(e),!1===o.dragging}return!1};let wi=(t,e)=>t>=e.top&&t<=e.bottom,vi=(t,e,i)=>wi(e,i)&&t>=i.left&&t<=i.right;function bi(t,e,i,s){let o=Lt.find(t.docView,e);if(!o)return 1;let n=e-o.posAtStart;if(0==n)return 1;if(n==o.length)return-1;let r=o.coordsAt(n,-1);if(r&&vi(i,s,r))return-1;let l=o.coordsAt(n,1);return l&&vi(i,s,l)?1:r&&wi(s,r)?-1:1}function yi(t,e){let i=t.posAtCoords({x:e.clientX,y:e.clientY},!1);return{pos:i,bias:bi(t,i,e.clientX,e.clientY)}}const Si=bt.ie&&bt.ie_version<=11;let xi=null,Mi=0,ki=0;function Ci(t){if(!Si)return t.detail;let e=xi,i=ki;return xi=t,ki=Date.now(),Mi=!e||i>Date.now()-400&&Math.abs(e.clientX-t.clientX)<2&&Math.abs(e.clientY-t.clientY)<2?(Mi+1)%3:1}function Ai(t,e,i,s){if(!i)return;let o=t.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:n}=t.inputState,r=s&&n&&function(t,e){let i=t.state.facet(ue);return i.length?i[0](e):bt.mac?!e.altKey:!e.ctrlKey}(t,e)?{from:n.from,to:n.to}:null,l={from:o,insert:i},h=t.state.changes(r?[r,l]:l);t.focus(),t.dispatch({changes:h,selection:{anchor:h.mapPos(o,-1),head:h.mapPos(o,1)},userEvent:r?"move.drop":"input.drop"}),t.inputState.draggedContent=null}ui.dragstart=(t,e)=>{let{selection:{main:i}}=t.state;if(e.target.draggable){let s=t.docView.nearest(e.target);if(s&&s.isWidget){let t=s.posAtStart,e=t+s.length;(t>=i.to||e<=i.from)&&(i=n.range(t,e))}}let{inputState:s}=t;return s.mouseSelection&&(s.mouseSelection.dragging=!0),s.draggedContent=i,e.dataTransfer&&(e.dataTransfer.setData("Text",t.state.sliceDoc(i.from,i.to)),e.dataTransfer.effectAllowed="copyMove"),!1},ui.dragend=t=>(t.inputState.draggedContent=null,!1),ui.drop=(t,e)=>{if(!e.dataTransfer)return!1;if(t.state.readOnly)return!0;let i=e.dataTransfer.files;if(i&&i.length){let s=Array(i.length),o=0,n=()=>{++o==i.length&&Ai(t,e,s.filter((t=>null!=t)).join(t.state.lineBreak),!1)};for(let t=0;t<i.length;t++){let e=new FileReader;e.onerror=n,e.onload=()=>{/[\x00-\x08\x0e-\x1f]{2}/.test(e.result)||(s[t]=e.result),n()},e.readAsText(i[t])}return!0}{let i=e.dataTransfer.getData("Text");if(i)return Ai(t,e,i,!0),!0}return!1},ui.paste=(t,e)=>{if(t.state.readOnly)return!0;t.observer.flush();let i=pi?null:e.clipboardData;return i?(gi(t,i.getData("text/plain")||i.getData("text/uri-list")),!0):(function(t){let e=t.dom.parentNode;if(!e)return;let i=e.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.focus(),setTimeout((()=>{t.focus(),i.remove(),gi(t,i.value)}),50)}(t),!1)};let Di=null;ui.copy=ui.cut=(t,e)=>{let{text:i,ranges:s,linewise:o}=function(t){let e=[],i=[],s=!1;for(let s of t.selection.ranges)s.empty||(e.push(t.sliceDoc(s.from,s.to)),i.push(s));if(!e.length){let o=-1;for(let{from:s}of t.selection.ranges){let n=t.doc.lineAt(s);n.number>o&&(e.push(n.text),i.push({from:n.from,to:Math.min(t.doc.length,n.to+1)})),o=n.number}s=!0}return{text:e.join(t.lineBreak),ranges:i,linewise:s}}(t.state);if(!i&&!o)return!1;Di=o?i:null,"cut"!=e.type||t.state.readOnly||t.dispatch({changes:s,scrollIntoView:!0,userEvent:"delete.cut"});let n=pi?null:e.clipboardData;return n?(n.clearData(),n.setData("text/plain",i),!0):(function(t,e){let i=t.dom.parentNode;if(!i)return;let s=i.appendChild(document.createElement("textarea"));s.style.cssText="position: fixed; left: -10000px; top: 10px",s.value=e,s.focus(),s.selectionEnd=e.length,s.selectionStart=0,setTimeout((()=>{s.remove(),t.focus()}),50)}(t,i),!1)};const Ti=m.define();function Oi(t,e){let i=[];for(let s of t.facet(we)){let o=s(t,e);o&&i.push(o)}return i?t.update({effects:i,annotations:Ti.of(!0)}):null}function Ei(t){setTimeout((()=>{let e=t.hasFocus;if(e!=t.inputState.notifiedFocused){let i=Oi(t.state,e);i?t.dispatch(i):t.update([])}}),10)}fi.focus=t=>{t.inputState.lastFocusTime=Date.now(),t.scrollDOM.scrollTop||!t.inputState.lastScrollTop&&!t.inputState.lastScrollLeft||(t.scrollDOM.scrollTop=t.inputState.lastScrollTop,t.scrollDOM.scrollLeft=t.inputState.lastScrollLeft),Ei(t)},fi.blur=t=>{t.observer.clearSelectionRange(),Ei(t)},fi.compositionstart=fi.compositionupdate=t=>{null==t.inputState.compositionFirstChange&&(t.inputState.compositionFirstChange=!0),t.inputState.composing<0&&(t.inputState.composing=0)},fi.compositionend=t=>{t.inputState.composing=-1,t.inputState.compositionEndedAt=Date.now(),t.inputState.compositionPendingKey=!0,t.inputState.compositionPendingChange=t.observer.pendingRecords().length>0,t.inputState.compositionFirstChange=null,bt.chrome&&bt.android?t.observer.flushSoon():t.inputState.compositionPendingChange?Promise.resolve().then((()=>t.observer.flush())):setTimeout((()=>{t.inputState.composing<0&&t.docView.hasComposition&&t.update([])}),50)},fi.contextmenu=t=>{t.inputState.lastContextMenu=Date.now()},ui.beforeinput=(t,e)=>{var i;let s;if(bt.chrome&&bt.android&&(s=li.find((t=>t.inputType==e.inputType)))&&(t.observer.delayAndroidKey(s.key,s.keyCode),"Backspace"==s.key||"Delete"==s.key)){let e=(null===(i=window.visualViewport)||void 0===i?void 0:i.height)||0;setTimeout((()=>{var i;((null===(i=window.visualViewport)||void 0===i?void 0:i.height)||0)>e+10&&t.hasFocus&&(t.contentDOM.blur(),t.focus())}),100)}return bt.ios&&"deleteContentForward"==e.inputType&&t.observer.flushSoon(),bt.safari&&"insertText"==e.inputType&&t.inputState.composing>=0&&setTimeout((()=>fi.compositionend(t,e)),20),!1};const Ri=new Set;const Li=["pre-wrap","normal","pre-line","break-spaces"];class Bi{constructor(t){this.lineWrapping=t,this.doc=w.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30,this.heightChanged=!1}heightForGap(t,e){let i=this.doc.lineAt(e).number-this.doc.lineAt(t).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((e-t-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(t){if(!this.lineWrapping)return this.lineHeight;return(1+Math.max(0,Math.ceil((t-this.lineLength)/(this.lineLength-5))))*this.lineHeight}setDoc(t){return this.doc=t,this}mustRefreshForWrapping(t){return Li.indexOf(t)>-1!=this.lineWrapping}mustRefreshForHeights(t){let e=!1;for(let i=0;i<t.length;i++){let s=t[i];s<0?i++:this.heightSamples[Math.floor(10*s)]||(e=!0,this.heightSamples[Math.floor(10*s)]=!0)}return e}refresh(t,e,i,s,o,n){let r=Li.indexOf(t)>-1,l=Math.round(e)!=Math.round(this.lineHeight)||this.lineWrapping!=r;if(this.lineWrapping=r,this.lineHeight=e,this.charWidth=i,this.textHeight=s,this.lineLength=o,l){this.heightSamples={};for(let t=0;t<n.length;t++){let e=n[t];e<0?t++:this.heightSamples[Math.floor(10*e)]=!0}}return l}}class Hi{constructor(t,e){this.from=t,this.heights=e,this.index=0}get more(){return this.index<this.heights.length}}class Pi{constructor(t,e,i,s,o){this.from=t,this.length=e,this.top=i,this.height=s,this._content=o}get type(){return"number"==typeof this._content?Pt.Text:Array.isArray(this._content)?this._content:this._content.type}get to(){return this.from+this.length}get bottom(){return this.top+this.height}get widget(){return this._content instanceof zt?this._content.widget:null}get widgetLineBreaks(){return"number"==typeof this._content?this._content:0}join(t){let e=(Array.isArray(this._content)?this._content:[this]).concat(Array.isArray(t._content)?t._content:[t]);return new Pi(this.from,this.length+t.length,this.top,this.height+t.height,e)}}var Vi=function(t){return t[t.ByPos=0]="ByPos",t[t.ByHeight=1]="ByHeight",t[t.ByPosNoHeight=2]="ByPosNoHeight",t}(Vi||(Vi={}));const Ni=.001;class Wi{constructor(t,e,i=2){this.length=t,this.height=e,this.flags=i}get outdated(){return(2&this.flags)>0}set outdated(t){this.flags=(t?2:0)|-3&this.flags}setHeight(t,e){this.height!=e&&(Math.abs(this.height-e)>Ni&&(t.heightChanged=!0),this.height=e)}replace(t,e,i){return Wi.of(i)}decomposeLeft(t,e){e.push(this)}decomposeRight(t,e){e.push(this)}applyChanges(t,e,i,s){let o=this,n=i.doc;for(let r=s.length-1;r>=0;r--){let{fromA:l,toA:h,fromB:a,toB:c}=s[r],d=o.lineAt(l,Vi.ByPosNoHeight,i.setDoc(e),0,0),u=d.to>=h?d:o.lineAt(h,Vi.ByPosNoHeight,i,0,0);for(c+=u.to-h,h=u.to;r>0&&d.from<=s[r-1].toA;)l=s[r-1].fromA,a=s[r-1].fromB,r--,l<d.from&&(d=o.lineAt(l,Vi.ByPosNoHeight,i,0,0));a+=d.from-l,l=d.from;let f=Yi.build(i.setDoc(n),t,a,c);o=o.replace(l,h,f)}return o.updateHeight(i,0)}static empty(){return new Fi(0,0)}static of(t){if(1==t.length)return t[0];let e=0,i=t.length,s=0,o=0;for(;;)if(e==i)if(s>2*o){let o=t[e-1];o.break?t.splice(--e,1,o.left,null,o.right):t.splice(--e,1,o.left,o.right),i+=1+o.break,s-=o.size}else{if(!(o>2*s))break;{let e=t[i];e.break?t.splice(i,1,e.left,null,e.right):t.splice(i,1,e.left,e.right),i+=2+e.break,o-=e.size}}else if(s<o){let i=t[e++];i&&(s+=i.size)}else{let e=t[--i];e&&(o+=e.size)}let n=0;return null==t[e-1]?(n=1,e--):null==t[e]&&(n=1,i++),new Ii(Wi.of(t.slice(0,e)),n,Wi.of(t.slice(i)))}}Wi.prototype.size=1;class zi extends Wi{constructor(t,e,i){super(t,e),this.deco=i}blockAt(t,e,i,s){return new Pi(s,this.length,i,this.height,this.deco||0)}lineAt(t,e,i,s,o){return this.blockAt(0,i,s,o)}forEachLine(t,e,i,s,o,n){t<=o+this.length&&e>=o&&n(this.blockAt(0,i,s,o))}updateHeight(t,e=0,i=!1,s){return s&&s.from<=e&&s.more&&this.setHeight(t,s.heights[s.index++]),this.outdated=!1,this}toString(){return`block(${this.length})`}}class Fi extends zi{constructor(t,e){super(t,e,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0}blockAt(t,e,i,s){return new Pi(s,this.length,i,this.height,this.breaks)}replace(t,e,i){let s=i[0];return 1==i.length&&(s instanceof Fi||s instanceof Ki&&4&s.flags)&&Math.abs(this.length-s.length)<10?(s instanceof Ki?s=new Fi(s.length,this.height):s.height=this.height,this.outdated||(s.outdated=!1),s):Wi.of(i)}updateHeight(t,e=0,i=!1,s){return s&&s.from<=e&&s.more?this.setHeight(t,s.heights[s.index++]):(i||this.outdated)&&this.setHeight(t,Math.max(this.widgetHeight,t.heightForLine(this.length-this.collapsed))+this.breaks*t.lineHeight),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}}class Ki extends Wi{constructor(t){super(t,0)}heightMetrics(t,e){let i,s=t.doc.lineAt(e).number,o=t.doc.lineAt(e+this.length).number,n=o-s+1,r=0;if(t.lineWrapping){let e=Math.min(this.height,t.lineHeight*n);i=e/n,this.length>n+1&&(r=(this.height-e)/(this.length-n-1))}else i=this.height/n;return{firstLine:s,lastLine:o,perLine:i,perChar:r}}blockAt(t,e,i,s){let{firstLine:o,lastLine:n,perLine:r,perChar:l}=this.heightMetrics(e,s);if(e.lineWrapping){let o=s+(t<e.lineHeight?0:Math.round(Math.max(0,Math.min(1,(t-i)/this.height))*this.length)),n=e.doc.lineAt(o),h=r+n.length*l,a=Math.max(i,t-h/2);return new Pi(n.from,n.length,a,h,0)}{let s=Math.max(0,Math.min(n-o,Math.floor((t-i)/r))),{from:l,length:h}=e.doc.line(o+s);return new Pi(l,h,i+r*s,r,0)}}lineAt(t,e,i,s,o){if(e==Vi.ByHeight)return this.blockAt(t,i,s,o);if(e==Vi.ByPosNoHeight){let{from:e,to:s}=i.doc.lineAt(t);return new Pi(e,s-e,0,0,0)}let{firstLine:n,perLine:r,perChar:l}=this.heightMetrics(i,o),h=i.doc.lineAt(t),a=r+h.length*l,c=h.number-n,d=s+r*c+l*(h.from-o-c);return new Pi(h.from,h.length,Math.max(s,Math.min(d,s+this.height-a)),a,0)}forEachLine(t,e,i,s,o,n){t=Math.max(t,o),e=Math.min(e,o+this.length);let{firstLine:r,perLine:l,perChar:h}=this.heightMetrics(i,o);for(let a=t,c=s;a<=e;){let e=i.doc.lineAt(a);if(a==t){let i=e.number-r;c+=l*i+h*(t-o-i)}let s=l+h*e.length;n(new Pi(e.from,e.length,c,s,0)),c+=s,a=e.to+1}}replace(t,e,i){let s=this.length-e;if(s>0){let t=i[i.length-1];t instanceof Ki?i[i.length-1]=new Ki(t.length+s):i.push(null,new Ki(s-1))}if(t>0){let e=i[0];e instanceof Ki?i[0]=new Ki(t+e.length):i.unshift(new Ki(t-1),null)}return Wi.of(i)}decomposeLeft(t,e){e.push(new Ki(t-1),null)}decomposeRight(t,e){e.push(null,new Ki(this.length-t-1))}updateHeight(t,e=0,i=!1,s){let o=e+this.length;if(s&&s.from<=e+this.length&&s.more){let i=[],n=Math.max(e,s.from),r=-1;for(s.from>e&&i.push(new Ki(s.from-e-1).updateHeight(t,e));n<=o&&s.more;){let e=t.doc.lineAt(n).length;i.length&&i.push(null);let o=s.heights[s.index++];-1==r?r=o:Math.abs(o-r)>=Ni&&(r=-2);let l=new Fi(e,o);l.outdated=!1,i.push(l),n+=e+1}n<=o&&i.push(null,new Ki(o-n).updateHeight(t,n));let l=Wi.of(i);return(r<0||Math.abs(l.height-this.height)>=Ni||Math.abs(r-this.heightMetrics(t,e).perLine)>=Ni)&&(t.heightChanged=!0),l}return(i||this.outdated)&&(this.setHeight(t,t.heightForGap(e,e+this.length)),this.outdated=!1),this}toString(){return`gap(${this.length})`}}class Ii extends Wi{constructor(t,e,i){super(t.length+e+i.length,t.height+i.height,e|(t.outdated||i.outdated?2:0)),this.left=t,this.right=i,this.size=t.size+i.size}get break(){return 1&this.flags}blockAt(t,e,i,s){let o=i+this.left.height;return t<o?this.left.blockAt(t,e,i,s):this.right.blockAt(t,e,o,s+this.left.length+this.break)}lineAt(t,e,i,s,o){let n=s+this.left.height,r=o+this.left.length+this.break,l=e==Vi.ByHeight?t<n:t<r,h=l?this.left.lineAt(t,e,i,s,o):this.right.lineAt(t,e,i,n,r);if(this.break||(l?h.to<r:h.from>r))return h;let a=e==Vi.ByPosNoHeight?Vi.ByPosNoHeight:Vi.ByPos;return l?h.join(this.right.lineAt(r,a,i,n,r)):this.left.lineAt(r,a,i,s,o).join(h)}forEachLine(t,e,i,s,o,n){let r=s+this.left.height,l=o+this.left.length+this.break;if(this.break)t<l&&this.left.forEachLine(t,e,i,s,o,n),e>=l&&this.right.forEachLine(t,e,i,r,l,n);else{let h=this.lineAt(l,Vi.ByPos,i,s,o);t<h.from&&this.left.forEachLine(t,h.from-1,i,s,o,n),h.to>=t&&h.from<=e&&n(h),e>h.to&&this.right.forEachLine(h.to+1,e,i,r,l,n)}}replace(t,e,i){let s=this.left.length+this.break;if(e<s)return this.balanced(this.left.replace(t,e,i),this.right);if(t>this.left.length)return this.balanced(this.left,this.right.replace(t-s,e-s,i));let o=[];t>0&&this.decomposeLeft(t,o);let n=o.length;for(let t of i)o.push(t);if(t>0&&qi(o,n-1),e<this.length){let t=o.length;this.decomposeRight(e,o),qi(o,t)}return Wi.of(o)}decomposeLeft(t,e){let i=this.left.length;if(t<=i)return this.left.decomposeLeft(t,e);e.push(this.left),this.break&&(i++,t>=i&&e.push(null)),t>i&&this.right.decomposeLeft(t-i,e)}decomposeRight(t,e){let i=this.left.length,s=i+this.break;if(t>=s)return this.right.decomposeRight(t-s,e);t<i&&this.left.decomposeRight(t,e),this.break&&t<s&&e.push(null),e.push(this.right)}balanced(t,e){return t.size>2*e.size||e.size>2*t.size?Wi.of(this.break?[t,null,e]:[t,e]):(this.left=t,this.right=e,this.height=t.height+e.height,this.outdated=t.outdated||e.outdated,this.size=t.size+e.size,this.length=t.length+this.break+e.length,this)}updateHeight(t,e=0,i=!1,s){let{left:o,right:n}=this,r=e+o.length+this.break,l=null;return s&&s.from<=e+o.length&&s.more?l=o=o.updateHeight(t,e,i,s):o.updateHeight(t,e,i),s&&s.from<=r+n.length&&s.more?l=n=n.updateHeight(t,r,i,s):n.updateHeight(t,r,i),l?this.balanced(o,n):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}}function qi(t,e){let i,s;null==t[e]&&(i=t[e-1])instanceof Ki&&(s=t[e+1])instanceof Ki&&t.splice(e-1,3,new Ki(i.length+1+s.length))}class Yi{constructor(t,e){this.pos=t,this.oracle=e,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=t}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(t,e){if(this.lineStart>-1){let t=Math.min(e,this.lineEnd),i=this.nodes[this.nodes.length-1];i instanceof Fi?i.length+=t-this.pos:(t>this.pos||!this.isCovered)&&this.nodes.push(new Fi(t-this.pos,-1)),this.writtenTo=t,e>t&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=e}point(t,e,i){if(t<e||i.heightRelevant){let s=i.widget?i.widget.estimatedHeight:0,o=i.widget?i.widget.lineBreaks:0;s<0&&(s=this.oracle.lineHeight);let n=e-t;i.block?this.addBlock(new zi(n,s,i)):(n||o||s>=5)&&this.addLineDeco(s,o,n)}else e>t&&this.span(t,e);this.lineEnd>-1&&this.lineEnd<this.pos&&(this.lineEnd=this.oracle.doc.lineAt(this.pos).to)}enterLine(){if(this.lineStart>-1)return;let{from:t,to:e}=this.oracle.doc.lineAt(this.pos);this.lineStart=t,this.lineEnd=e,this.writtenTo<t&&((this.writtenTo<t-1||null==this.nodes[this.nodes.length-1])&&this.nodes.push(this.blankContent(this.writtenTo,t-1)),this.nodes.push(null)),this.pos>t&&this.nodes.push(new Fi(this.pos-t,-1)),this.writtenTo=this.pos}blankContent(t,e){let i=new Ki(e-t);return this.oracle.doc.lineAt(t).to==e&&(i.flags|=4),i}ensureLine(){this.enterLine();let t=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(t instanceof Fi)return t;let e=new Fi(0,-1);return this.nodes.push(e),e}addBlock(t){this.enterLine();let e=t.deco;e&&e.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(t),this.writtenTo=this.pos=this.pos+t.length,e&&e.endSide>0&&(this.covering=t)}addLineDeco(t,e,i){let s=this.ensureLine();s.length+=i,s.collapsed+=i,s.widgetHeight=Math.max(s.widgetHeight,t),s.breaks+=e,this.writtenTo=this.pos=this.pos+i}finish(t){let e=0==this.nodes.length?null:this.nodes[this.nodes.length-1];!(this.lineStart>-1)||e instanceof Fi||this.isCovered?(this.writtenTo<this.pos||null==e)&&this.nodes.push(this.blankContent(this.writtenTo,this.pos)):this.nodes.push(new Fi(0,-1));let i=t;for(let t of this.nodes)t instanceof Fi&&t.updateHeight(this.oracle,i),i+=t?t.length:1;return this.nodes}static build(t,i,s,o){let n=new Yi(s,t);return e.spans(i,s,o,n,0),n.finish(s)}}class _i{constructor(){this.changes=[]}compareRange(){}comparePoint(t,e,i,s){(t<e||i&&i.heightRelevant||s&&s.heightRelevant)&&Kt(t,e,this.changes,5)}}function ji(t,e){let i=t.getBoundingClientRect(),s=t.ownerDocument,o=s.defaultView||window,n=Math.max(0,i.left),r=Math.min(o.innerWidth,i.right),l=Math.max(0,i.top),h=Math.min(o.innerHeight,i.bottom);for(let e=t.parentNode;e&&e!=s.body;)if(1==e.nodeType){let i=e,s=window.getComputedStyle(i);if((i.scrollHeight>i.clientHeight||i.scrollWidth>i.clientWidth)&&"visible"!=s.overflow){let s=i.getBoundingClientRect();n=Math.max(n,s.left),r=Math.min(r,s.right),l=Math.max(l,s.top),h=e==t.parentNode?s.bottom:Math.min(h,s.bottom)}e="absolute"==s.position||"fixed"==s.position?i.offsetParent:i.parentNode}else{if(11!=e.nodeType)break;e=e.host}return{left:n-i.left,right:Math.max(n,r)-i.left,top:l-(i.top+e),bottom:Math.max(l,h)-(i.top+e)}}function Xi(t,e){let i=t.getBoundingClientRect();return{left:0,right:i.right-i.left,top:e,bottom:i.bottom-(i.top+e)}}class Gi{constructor(t,e,i){this.from=t,this.to=e,this.size=i}static same(t,e){if(t.length!=e.length)return!1;for(let i=0;i<t.length;i++){let s=t[i],o=e[i];if(s.from!=o.from||s.to!=o.to||s.size!=o.size)return!1}return!0}draw(t,e){return Vt.replace({widget:new Ui(this.size*(e?t.scaleY:t.scaleX),e)}).range(this.from,this.to)}}class Ui extends Ht{constructor(t,e){super(),this.size=t,this.vertical=e}eq(t){return t.size==this.size&&t.vertical==this.vertical}toDOM(){let t=document.createElement("div");return this.vertical?t.style.height=this.size+"px":(t.style.width=this.size+"px",t.style.height="2px",t.style.display="inline-block"),t}get estimatedHeight(){return this.vertical?this.size:-1}}class $i{constructor(t){this.state=t,this.pixelViewport={left:0,right:window.innerWidth,top:0,bottom:0},this.inView=!0,this.paddingTop=0,this.paddingBottom=0,this.contentDOMWidth=0,this.contentDOMHeight=0,this.editorHeight=0,this.editorWidth=0,this.scrollTop=0,this.scrolledToBottom=!1,this.scaleX=1,this.scaleY=1,this.scrollAnchorPos=0,this.scrollAnchorHeight=-1,this.scaler=es,this.scrollTarget=null,this.printing=!1,this.mustMeasureContent=!0,this.defaultTextDirection=_t.LTR,this.visibleRanges=[],this.mustEnforceCursorAssoc=!1;let e=t.facet(Ee).some((t=>"function"!=typeof t&&"cm-lineWrapping"==t.class));this.heightOracle=new Bi(e),this.stateDeco=t.facet(Re).filter((t=>"function"!=typeof t)),this.heightMap=Wi.empty().applyChanges(this.stateDeco,w.empty,this.heightOracle.setDoc(t.doc),[new ze(0,0,0,t.doc.length)]),this.viewport=this.getViewport(0,null),this.updateViewportLines(),this.updateForViewport(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=Vt.set(this.lineGaps.map((t=>t.draw(this,!1)))),this.computeVisibleRanges()}updateForViewport(){let t=[this.viewport],{main:e}=this.state.selection;for(let i=0;i<=1;i++){let s=i?e.head:e.anchor;if(!t.some((({from:t,to:e})=>s>=t&&s<=e))){let{from:e,to:i}=this.lineBlockAt(s);t.push(new Qi(e,i))}}this.viewports=t.sort(((t,e)=>t.from-e.from)),this.scaler=this.heightMap.height<=7e6?es:new is(this.heightOracle,this.heightMap,this.viewports)}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,(t=>{this.viewportLines.push(1==this.scaler.scale?t:ss(t,this.scaler))}))}update(t,i=null){this.state=t.state;let s=this.stateDeco;this.stateDeco=this.state.facet(Re).filter((t=>"function"!=typeof t));let n=t.changedRanges,r=ze.extendWithRanges(n,function(t,i,s){let o=new _i;return e.compare(t,i,s,o,0),o.changes}(s,this.stateDeco,t?t.changes:o.empty(this.state.doc.length))),l=this.heightMap.height,h=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollTop);this.heightMap=this.heightMap.applyChanges(this.stateDeco,t.startState.doc,this.heightOracle.setDoc(this.state.doc),r),this.heightMap.height!=l&&(t.flags|=2),h?(this.scrollAnchorPos=t.changes.mapPos(h.from,-1),this.scrollAnchorHeight=h.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=this.heightMap.height);let a=r.length?this.mapViewport(this.viewport,t.changes):this.viewport;(i&&(i.range.head<a.from||i.range.head>a.to)||!this.viewportIsAppropriate(a))&&(a=this.getViewport(0,i));let c=!t.changes.empty||2&t.flags||a.from!=this.viewport.from||a.to!=this.viewport.to;this.viewport=a,this.updateForViewport(),c&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,t.changes))),t.flags|=this.computeVisibleRanges(),i&&(this.scrollTarget=i),!this.mustEnforceCursorAssoc&&t.selectionSet&&t.view.lineWrapping&&t.state.selection.main.empty&&t.state.selection.main.assoc&&!t.state.facet(be)&&(this.mustEnforceCursorAssoc=!0)}measure(t){let e=t.contentDOM,i=window.getComputedStyle(e),s=this.heightOracle,o=i.whiteSpace;this.defaultTextDirection="rtl"==i.direction?_t.RTL:_t.LTR;let n=this.heightOracle.mustRefreshForWrapping(o),r=e.getBoundingClientRect(),l=n||this.mustMeasureContent||this.contentDOMHeight!=r.height;this.contentDOMHeight=r.height,this.mustMeasureContent=!1;let h=0,a=0;if(r.width&&r.height){let{scaleX:t,scaleY:i}=Y(e,r);(t>.005&&Math.abs(this.scaleX-t)>.005||i>.005&&Math.abs(this.scaleY-i)>.005)&&(this.scaleX=t,this.scaleY=i,h|=8,n=l=!0)}let c=(parseInt(i.paddingTop)||0)*this.scaleY,d=(parseInt(i.paddingBottom)||0)*this.scaleY;this.paddingTop==c&&this.paddingBottom==d||(this.paddingTop=c,this.paddingBottom=d,h|=10),this.editorWidth!=t.scrollDOM.clientWidth&&(s.lineWrapping&&(l=!0),this.editorWidth=t.scrollDOM.clientWidth,h|=8);let u=t.scrollDOM.scrollTop*this.scaleY;this.scrollTop!=u&&(this.scrollAnchorHeight=-1,this.scrollTop=u),this.scrolledToBottom=Z(t.scrollDOM);let f=(this.printing?Xi:ji)(e,this.paddingTop),p=f.top-this.pixelViewport.top,g=f.bottom-this.pixelViewport.bottom;this.pixelViewport=f;let m=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(m!=this.inView&&(this.inView=m,m&&(l=!0)),!this.inView&&!this.scrollTarget)return 0;let v=r.width;if(this.contentDOMWidth==v&&this.editorHeight==t.scrollDOM.clientHeight||(this.contentDOMWidth=r.width,this.editorHeight=t.scrollDOM.clientHeight,h|=8),l){let e=t.docView.measureVisibleLineHeights(this.viewport);if(s.mustRefreshForHeights(e)&&(n=!0),n||s.lineWrapping&&Math.abs(v-this.contentDOMWidth)>s.charWidth){let{lineHeight:i,charWidth:r,textHeight:l}=t.docView.measureTextSize();n=i>0&&s.refresh(o,i,r,l,v/r,e),n&&(t.docView.minWidth=0,h|=8)}p>0&&g>0?a=Math.max(p,g):p<0&&g<0&&(a=Math.min(p,g)),s.heightChanged=!1;for(let i of this.viewports){let o=i.from==this.viewport.from?e:t.docView.measureVisibleLineHeights(i);this.heightMap=(n?Wi.empty().applyChanges(this.stateDeco,w.empty,this.heightOracle,[new ze(0,0,0,t.state.doc.length)]):this.heightMap).updateHeight(s,0,n,new Hi(i.from,o))}s.heightChanged&&(h|=2)}let b=!this.viewportIsAppropriate(this.viewport,a)||this.scrollTarget&&(this.scrollTarget.range.head<this.viewport.from||this.scrollTarget.range.head>this.viewport.to);return b&&(this.viewport=this.getViewport(a,this.scrollTarget)),this.updateForViewport(),(2&h||b)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(n?[]:this.lineGaps,t)),h|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,t.docView.enforceCursorAssoc()),h}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(t,e){let i=.5-Math.max(-.5,Math.min(.5,t/1e3/2)),s=this.heightMap,o=this.heightOracle,{visibleTop:n,visibleBottom:r}=this,l=new Qi(s.lineAt(n-1e3*i,Vi.ByHeight,o,0,0).from,s.lineAt(r+1e3*(1-i),Vi.ByHeight,o,0,0).to);if(e){let{head:t}=e.range;if(t<l.from||t>l.to){let i,n=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),r=s.lineAt(t,Vi.ByPos,o,0,0);i="center"==e.y?(r.top+r.bottom)/2-n/2:"start"==e.y||"nearest"==e.y&&t<l.from?r.top:r.bottom-n,l=new Qi(s.lineAt(i-500,Vi.ByHeight,o,0,0).from,s.lineAt(i+n+500,Vi.ByHeight,o,0,0).to)}}return l}mapViewport(t,e){let i=e.mapPos(t.from,-1),s=e.mapPos(t.to,1);return new Qi(this.heightMap.lineAt(i,Vi.ByPos,this.heightOracle,0,0).from,this.heightMap.lineAt(s,Vi.ByPos,this.heightOracle,0,0).to)}viewportIsAppropriate({from:t,to:e},i=0){if(!this.inView)return!0;let{top:s}=this.heightMap.lineAt(t,Vi.ByPos,this.heightOracle,0,0),{bottom:o}=this.heightMap.lineAt(e,Vi.ByPos,this.heightOracle,0,0),{visibleTop:n,visibleBottom:r}=this;return(0==t||s<=n-Math.max(10,Math.min(-i,250)))&&(e==this.state.doc.length||o>=r+Math.max(10,Math.min(i,250)))&&s>n-2e3&&o<r+2e3}mapLineGaps(t,e){if(!t.length||e.empty)return t;let i=[];for(let s of t)e.touchesRange(s.from,s.to)||i.push(new Gi(e.mapPos(s.from),e.mapPos(s.to),s.size));return i}ensureLineGaps(t,e){let i=this.heightOracle.lineWrapping,s=i?1e4:2e3,o=s>>1,r=s<<1;if(this.defaultTextDirection!=_t.LTR&&!i)return[];let l=[],h=(s,r,a,c)=>{if(r-s<o)return;let d=this.state.selection.main,u=[d.from];d.empty||u.push(d.to);for(let t of u)if(t>s&&t<r)return h(s,t-10,a,c),void h(t+10,r,a,c);let f=function(t,e){for(let i of t)if(e(i))return i;return}(t,(t=>t.from>=a.from&&t.to<=a.to&&Math.abs(t.from-s)<o&&Math.abs(t.to-r)<o&&!u.some((e=>t.from<e&&t.to>e))));if(!f){if(r<a.to&&e&&i&&e.visibleRanges.some((t=>t.from<=r&&t.to>=r))){let t=e.moveToLineBoundary(n.cursor(r),!1,!0).head;t>s&&(r=t)}f=new Gi(s,r,this.gapSize(a,s,r,c))}l.push(f)};for(let t of this.viewportLines){if(t.length<r)continue;let e=Zi(t.from,t.to,this.stateDeco);if(e.total<r)continue;let o,n,l=this.scrollTarget?this.scrollTarget.range.head:null;if(i){let i,r,h=s/this.heightOracle.lineLength*this.heightOracle.lineHeight;if(null!=l){let s=ts(e,l),o=((this.visibleBottom-this.visibleTop)/2+h)/t.height;i=s-o,r=s+o}else i=(this.visibleTop-t.top-h)/t.height,r=(this.visibleBottom-t.top+h)/t.height;o=Ji(e,i),n=Ji(e,r)}else{let t,i,r=e.total*this.heightOracle.charWidth,h=s*this.heightOracle.charWidth;if(null!=l){let s=ts(e,l),o=((this.pixelViewport.right-this.pixelViewport.left)/2+h)/r;t=s-o,i=s+o}else t=(this.pixelViewport.left-h)/r,i=(this.pixelViewport.right+h)/r;o=Ji(e,t),n=Ji(e,i)}o>t.from&&h(t.from,o,t,e),n<t.to&&h(n,t.to,t,e)}return l}gapSize(t,e,i,s){let o=ts(s,i)-ts(s,e);return this.heightOracle.lineWrapping?t.height*o:s.total*this.heightOracle.charWidth*o}updateLineGaps(t){Gi.same(t,this.lineGaps)||(this.lineGaps=t,this.lineGapDeco=Vt.set(t.map((t=>t.draw(this,this.heightOracle.lineWrapping)))))}computeVisibleRanges(){let t=this.stateDeco;this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let i=[];e.spans(t,this.viewport.from,this.viewport.to,{span(t,e){i.push({from:t,to:e})},point(){}},20);let s=i.length!=this.visibleRanges.length||this.visibleRanges.some(((t,e)=>t.from!=i[e].from||t.to!=i[e].to));return this.visibleRanges=i,s?4:0}lineBlockAt(t){return t>=this.viewport.from&&t<=this.viewport.to&&this.viewportLines.find((e=>e.from<=t&&e.to>=t))||ss(this.heightMap.lineAt(t,Vi.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(t){return ss(this.heightMap.lineAt(this.scaler.fromDOM(t),Vi.ByHeight,this.heightOracle,0,0),this.scaler)}scrollAnchorAt(t){let e=this.lineBlockAtHeight(t+8);return e.from>=this.viewport.from||this.viewportLines[0].top-t>200?e:this.viewportLines[0]}elementAtHeight(t){return ss(this.heightMap.blockAt(this.scaler.fromDOM(t),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}}class Qi{constructor(t,e){this.from=t,this.to=e}}function Zi(t,i,s){let o=[],n=t,r=0;return e.spans(s,t,i,{span(){},point(t,e){t>n&&(o.push({from:n,to:t}),r+=t-n),n=e}},20),n<i&&(o.push({from:n,to:i}),r+=i-n),{total:r,ranges:o}}function Ji({total:t,ranges:e},i){if(i<=0)return e[0].from;if(i>=1)return e[e.length-1].to;let s=Math.floor(t*i);for(let t=0;;t++){let{from:i,to:o}=e[t],n=o-i;if(s<=n)return i+s;s-=n}}function ts(t,e){let i=0;for(let{from:s,to:o}of t.ranges){if(e<=o){i+=e-s;break}i+=o-s}return i/t.total}const es={toDOM:t=>t,fromDOM:t=>t,scale:1};class is{constructor(t,e,i){let s=0,o=0,n=0;this.viewports=i.map((({from:i,to:o})=>{let n=e.lineAt(i,Vi.ByPos,t,0,0).top,r=e.lineAt(o,Vi.ByPos,t,0,0).bottom;return s+=r-n,{from:i,to:o,top:n,bottom:r,domTop:0,domBottom:0}})),this.scale=(7e6-s)/(e.height-s);for(let t of this.viewports)t.domTop=n+(t.top-o)*this.scale,n=t.domBottom=t.domTop+(t.bottom-t.top),o=t.bottom}toDOM(t){for(let e=0,i=0,s=0;;e++){let o=e<this.viewports.length?this.viewports[e]:null;if(!o||t<o.top)return s+(t-i)*this.scale;if(t<=o.bottom)return o.domTop+(t-o.top);i=o.bottom,s=o.domBottom}}fromDOM(t){for(let e=0,i=0,s=0;;e++){let o=e<this.viewports.length?this.viewports[e]:null;if(!o||t<o.domTop)return i+(t-s)/this.scale;if(t<=o.domBottom)return o.top+(t-o.domTop);i=o.bottom,s=o.domBottom}}}function ss(t,e){if(1==e.scale)return t;let i=e.toDOM(t.top),s=e.toDOM(t.bottom);return new Pi(t.from,t.length,i,s-i,Array.isArray(t._content)?t._content.map((t=>ss(t,e))):t._content)}const os=s.define({combine:t=>t.join(" ")}),ns=s.define({combine:t=>t.indexOf(!0)>-1}),rs=k.newName(),ls=k.newName(),hs=k.newName(),as={"&light":"."+ls,"&dark":"."+hs};function cs(t,e,i){return new k(e,{finish:e=>/&/.test(e)?e.replace(/&\w*/,(e=>{if("&"==e)return t;if(!i||!i[e])throw new RangeError(`Unsupported selector: ${e}`);return i[e]})):t+" "+e})}const ds=cs("."+rs,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#444"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",insetInlineStart:0,zIndex:200},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",borderRight:"1px solid #ddd"},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top"},".cm-highlightSpace:before":{content:"attr(data-display)",position:"absolute",pointerEvents:"none",color:"#888"},".cm-highlightTab":{backgroundImage:'url(\'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="200" height="20"><path stroke="%23888" stroke-width="1" fill="none" d="M1 10H196L190 5M190 15L196 10M197 4L197 16"/></svg>\')',backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},as),us="￿";class fs{constructor(t,e){this.points=t,this.text="",this.lineSeparator=e.facet(r.lineSeparator)}append(t){this.text+=t}lineBreak(){this.text+=us}readRange(t,e){if(!t)return this;let i=t.parentNode;for(let s=t;;){this.findPointBefore(i,s);let t=this.text.length;this.readNode(s);let o=s.nextSibling;if(o==e)break;let n=st.get(s),r=st.get(o);(n&&r?n.breakAfter:(n?n.breakAfter:z(s))||z(o)&&("BR"!=s.nodeName||s.cmIgnore)&&this.text.length>t)&&this.lineBreak(),s=o}return this.findPointBefore(i,e),this}readTextNode(t){let e=t.nodeValue;for(let i of this.points)i.node==t&&(i.pos=this.text.length+Math.min(i.offset,e.length));for(let i=0,s=this.lineSeparator?null:/\r\n?|\n/g;;){let o,n=-1,r=1;if(this.lineSeparator?(n=e.indexOf(this.lineSeparator,i),r=this.lineSeparator.length):(o=s.exec(e))&&(n=o.index,r=o[0].length),this.append(e.slice(i,n<0?e.length:n)),n<0)break;if(this.lineBreak(),r>1)for(let e of this.points)e.node==t&&e.pos>this.text.length&&(e.pos-=r-1);i=n+r}}readNode(t){if(t.cmIgnore)return;let e=st.get(t),i=e&&e.overrideDOMText;if(null!=i){this.findPointInside(t,i.length);for(let t=i.iter();!t.next().done;)t.lineBreak?this.lineBreak():this.append(t.value)}else 3==t.nodeType?this.readTextNode(t):"BR"==t.nodeName?t.nextSibling&&this.lineBreak():1==t.nodeType&&this.readRange(t.firstChild,null)}findPointBefore(t,e){for(let i of this.points)i.node==t&&t.childNodes[i.offset]==e&&(i.pos=this.text.length)}findPointInside(t,e){for(let i of this.points)(3==t.nodeType?i.node==t:t.contains(i.node))&&(i.pos=this.text.length+(ps(t,i.node,i.offset)?e:0))}}function ps(t,e,i){for(;;){if(!e||i<K(e))return!1;if(e==t)return!0;i=W(e)+1,e=e.parentNode}}class gs{constructor(t,e){this.node=t,this.offset=e,this.pos=-1}}class ms{constructor(t,e,i,s){this.typeOver=s,this.bounds=null,this.text="";let{impreciseHead:o,impreciseAnchor:r}=t.docView;if(t.state.readOnly&&e>-1)this.newSel=null;else if(e>-1&&(this.bounds=t.docView.domBoundsAround(e,i,0))){let e=o||r?[]:function(t){let e=[];if(t.root.activeElement!=t.contentDOM)return e;let{anchorNode:i,anchorOffset:s,focusNode:o,focusOffset:n}=t.observer.selectionRange;i&&(e.push(new gs(i,s)),o==i&&n==s||e.push(new gs(o,n)));return e}(t),i=new fs(e,t.state);i.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=i.text,this.newSel=function(t,e){if(0==t.length)return null;let i=t[0].pos,s=2==t.length?t[1].pos:i;return i>-1&&s>-1?n.single(i+e,s+e):null}(e,this.bounds.from)}else{let e=t.observer.selectionRange,i=o&&o.node==e.focusNode&&o.offset==e.focusOffset||!H(t.contentDOM,e.focusNode)?t.state.selection.main.head:t.docView.posFromDOM(e.focusNode,e.focusOffset),s=r&&r.node==e.anchorNode&&r.offset==e.anchorOffset||!H(t.contentDOM,e.anchorNode)?t.state.selection.main.anchor:t.docView.posFromDOM(e.anchorNode,e.anchorOffset),l=t.viewport;if((bt.ios||bt.chrome)&&t.state.selection.main.empty&&i!=s&&(l.from>0||l.to<t.state.doc.length)){let e=Math.min(i,s),o=Math.max(i,s),n=l.from-e,r=l.to-o;0!=n&&1!=n&&0!=e||0!=r&&-1!=r&&o!=t.state.doc.length||(i=0,s=t.state.doc.length)}this.newSel=n.single(s,i)}}}function ws(t,e){let i,{newSel:s}=e,o=t.state.selection.main,r=t.inputState.lastKeyTime>Date.now()-100?t.inputState.lastKeyCode:-1;if(e.bounds){let{from:s,to:n}=e.bounds,l=o.from,h=null;(8===r||bt.android&&e.text.length<n-s)&&(l=o.to,h="end");let a=function(t,e,i,s){let o=Math.min(t.length,e.length),n=0;for(;n<o&&t.charCodeAt(n)==e.charCodeAt(n);)n++;if(n==o&&t.length==e.length)return null;let r=t.length,l=e.length;for(;r>0&&l>0&&t.charCodeAt(r-1)==e.charCodeAt(l-1);)r--,l--;if("end"==s){i-=r+Math.max(0,n-Math.min(r,l))-n}if(r<n&&t.length<e.length){n-=i<=n&&i>=r?n-i:0,l=n+(l-r),r=n}else if(l<n){n-=i<=n&&i>=l?n-i:0,r=n+(r-l),l=n}return{from:n,toA:r,toB:l}}(t.state.doc.sliceString(s,n,us),e.text,l-s,h);a&&(bt.chrome&&13==r&&a.toB==a.from+2&&e.text.slice(a.from,a.toB)==us+us&&a.toB--,i={from:s+a.from,to:s+a.toA,insert:w.of(e.text.slice(a.from,a.toB).split(us))})}else s&&(!t.hasFocus&&t.state.facet(ke)||s.main.eq(o))&&(s=null);if(!i&&!s)return!1;if(!i&&e.typeOver&&!o.empty&&s&&s.main.empty?i={from:o.from,to:o.to,insert:t.state.doc.slice(o.from,o.to)}:i&&i.from>=o.from&&i.to<=o.to&&(i.from!=o.from||i.to!=o.to)&&o.to-o.from-(i.to-i.from)<=4?i={from:o.from,to:o.to,insert:t.state.doc.slice(o.from,i.from).append(i.insert).append(t.state.doc.slice(i.to,o.to))}:(bt.mac||bt.android)&&i&&i.from==i.to&&i.from==o.head-1&&/^\. ?$/.test(i.insert.toString())&&"off"==t.contentDOM.getAttribute("autocorrect")?(s&&2==i.insert.length&&(s=n.single(s.main.anchor-1,s.main.head-1)),i={from:o.from,to:o.to,insert:w.of([" "])}):bt.chrome&&i&&i.from==i.to&&i.from==o.head&&"\n "==i.insert.toString()&&t.lineWrapping&&(s&&(s=n.single(s.main.anchor-1,s.main.head-1)),i={from:o.from,to:o.to,insert:w.of([" "])}),i){if(bt.ios&&t.inputState.flushIOSKey(i))return!0;if(bt.android&&(i.to==o.to&&(i.from==o.from||i.from==o.from-1&&" "==t.state.sliceDoc(i.from,o.from))&&1==i.insert.length&&2==i.insert.lines&&$(t.contentDOM,"Enter",13)||(i.from==o.from-1&&i.to==o.to&&0==i.insert.length||8==r&&i.insert.length<i.to-i.from&&i.to>o.head)&&$(t.contentDOM,"Backspace",8)||i.from==o.from&&i.to==o.to+1&&0==i.insert.length&&$(t.contentDOM,"Delete",46)))return!0;let e,l=i.insert.toString();t.inputState.composing>=0&&t.inputState.composing++;let h=()=>e||(e=function(t,e,i){let s,o=t.state,r=o.selection.main;if(e.from>=r.from&&e.to<=r.to&&e.to-e.from>=(r.to-r.from)/3&&(!i||i.main.empty&&i.main.from==e.from+e.insert.length)&&t.inputState.composing<0){let i=r.from<e.from?o.sliceDoc(r.from,e.from):"",n=r.to>e.to?o.sliceDoc(e.to,r.to):"";s=o.replaceSelection(t.state.toText(i+e.insert.sliceString(0,void 0,t.state.lineBreak)+n))}else{let l=o.changes(e),h=i&&i.main.to<=l.newLength?i.main:void 0;if(o.selection.ranges.length>1&&t.inputState.composing>=0&&e.to<=r.to&&e.to>=r.to-10){let a,c=t.state.sliceDoc(e.from,e.to),d=i&&qe(t,i.main.head);if(d){let t=e.insert.length-(e.to-e.from);a={from:d.from,to:d.to-t}}else a=t.state.doc.lineAt(r.head);let u=r.to-e.to,f=r.to-r.from;s=o.changeByRange((i=>{if(i.from==r.from&&i.to==r.to)return{changes:l,range:h||i.map(l)};let s=i.to-u,d=s-c.length;if(i.to-i.from!=f||t.state.sliceDoc(d,s)!=c||i.to>=a.from&&i.from<=a.to)return{range:i};let p=o.changes({from:d,to:s,insert:e.insert}),g=i.to-r.to;return{changes:p,range:h?n.range(Math.max(0,h.anchor+g),Math.max(0,h.head+g)):i.map(p)}}))}else s={changes:l,selection:h&&o.selection.replaceRange(h)}}let l="input.type";(t.composing||t.inputState.compositionPendingChange&&t.inputState.compositionEndedAt>Date.now()-50)&&(t.inputState.compositionPendingChange=!1,l+=".compose",t.inputState.compositionFirstChange&&(l+=".start",t.inputState.compositionFirstChange=!1));return o.update(s,{userEvent:l,scrollIntoView:!0})}(t,i,s));return t.state.facet(me).some((e=>e(t,i.from,i.to,l,h)))||t.dispatch(h()),!0}if(s&&!s.main.eq(o)){let e=!1,i="select";return t.inputState.lastSelectionTime>Date.now()-50&&("select"==t.inputState.lastSelectionOrigin&&(e=!0),i=t.inputState.lastSelectionOrigin),t.dispatch({selection:s,scrollIntoView:e,userEvent:i}),!0}return!1}const vs={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},bs=bt.ie&&bt.ie_version<=11;class ys{constructor(t){this.view=t,this.active=!1,this.selectionRange=new _,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=t.contentDOM,this.observer=new MutationObserver((e=>{for(let t of e)this.queue.push(t);(bt.ie&&bt.ie_version<=11||bt.ios&&t.composing)&&e.some((t=>"childList"==t.type&&t.removedNodes.length||"characterData"==t.type&&t.oldValue.length>t.target.nodeValue.length))?this.flushSoon():this.flush()})),bs&&(this.onCharData=t=>{this.queue.push({target:t.target,type:"characterData",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),"function"==typeof ResizeObserver&&(this.resizeScroll=new ResizeObserver((()=>{var t;(null===(t=this.view.docView)||void 0===t?void 0:t.lastUpdate)<Date.now()-75&&this.onResize()})),this.resizeScroll.observe(t.scrollDOM)),this.addWindowListeners(this.win=t.win),this.start(),"function"==typeof IntersectionObserver&&(this.intersection=new IntersectionObserver((t=>{this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))}),{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver((t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))}),{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(t){this.view.inputState.runHandlers("scroll",t),this.intersecting&&this.view.measure()}onScroll(t){this.intersecting&&this.flush(!1),this.onScrollChanged(t)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout((()=>{this.resizeTimeout=-1,this.view.requestMeasure()}),50))}onPrint(t){("change"!=t.type||t.matches)&&(this.view.viewState.printing=!0,this.view.measure(),setTimeout((()=>{this.view.viewState.printing=!1,this.view.requestMeasure()}),500))}updateGaps(t){if(this.gapIntersection&&(t.length!=this.gaps.length||this.gaps.some(((e,i)=>e!=t[i])))){this.gapIntersection.disconnect();for(let e of t)this.gapIntersection.observe(e);this.gaps=t}}onSelectionChange(t){let e=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,s=this.selectionRange;if(i.state.facet(ke)?i.root.activeElement!=this.dom:!P(i.dom,s))return;let o=s.anchorNode&&i.docView.nearest(s.anchorNode);o&&o.ignoreEvent(t)?e||(this.selectionChanged=!1):(bt.ie&&bt.ie_version<=11||bt.android&&bt.chrome)&&!i.state.selection.main.empty&&s.focusNode&&N(s.focusNode,s.focusOffset,s.anchorNode,s.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:t}=this,e=B(t.root);if(!e)return!1;let i=bt.safari&&11==t.root.nodeType&&function(t){let e=t.activeElement;for(;e&&e.shadowRoot;)e=e.shadowRoot.activeElement;return e}(this.dom.ownerDocument)==this.dom&&function(t,e){if(e.getComposedRanges){let i=e.getComposedRanges(t.root)[0];if(i)return xs(t,i)}let i=null;function s(t){t.preventDefault(),t.stopImmediatePropagation(),i=t.getTargetRanges()[0]}return t.contentDOM.addEventListener("beforeinput",s,!0),t.dom.ownerDocument.execCommand("indent"),t.contentDOM.removeEventListener("beforeinput",s,!0),i?xs(t,i):null}(this.view,e)||e;if(!i||this.selectionRange.eq(i))return!1;let s=P(this.dom,i);return s&&!this.selectionChanged&&t.inputState.lastFocusTime>Date.now()-200&&t.inputState.lastTouchTime<Date.now()-300&&function(t,e){let i=e.focusNode,s=e.focusOffset;if(!i||e.anchorNode!=i||e.anchorOffset!=s)return!1;for(s=Math.min(s,K(i));;)if(s){if(1!=i.nodeType)return!1;let t=i.childNodes[s-1];"false"==t.contentEditable?s--:(i=t,s=K(i))}else{if(i==t)return!0;s=W(i),i=i.parentNode}}(this.dom,i)?(this.view.inputState.lastFocusTime=0,t.docView.updateSelection(),!1):(this.selectionRange.setRange(i),s&&(this.selectionChanged=!0),!0)}setSelectionRange(t,e){this.selectionRange.set(t.node,t.offset,e.node,e.offset),this.selectionChanged=!1}clearSelectionRange(){this.selectionRange.set(null,0,null,0)}listenForScroll(){this.parentCheck=-1;let t=0,e=null;for(let i=this.dom;i;)if(1==i.nodeType)!e&&t<this.scrollTargets.length&&this.scrollTargets[t]==i?t++:e||(e=this.scrollTargets.slice(0,t)),e&&e.push(i),i=i.assignedSlot||i.parentNode;else{if(11!=i.nodeType)break;i=i.host}if(t<this.scrollTargets.length&&!e&&(e=this.scrollTargets.slice(0,t)),e){for(let t of this.scrollTargets)t.removeEventListener("scroll",this.onScroll);for(let t of this.scrollTargets=e)t.addEventListener("scroll",this.onScroll)}}ignore(t){if(!this.active)return t();try{return this.stop(),t()}finally{this.start(),this.clear()}}start(){this.active||(this.observer.observe(this.dom,vs),bs&&this.dom.addEventListener("DOMCharacterDataModified",this.onCharData),this.active=!0)}stop(){this.active&&(this.active=!1,this.observer.disconnect(),bs&&this.dom.removeEventListener("DOMCharacterDataModified",this.onCharData))}clear(){this.processRecords(),this.queue.length=0,this.selectionChanged=!1}delayAndroidKey(t,e){var i;if(!this.delayedAndroidKey){let t=()=>{let t=this.delayedAndroidKey;if(t){this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=t.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&t.force&&$(this.dom,t.key,t.keyCode)}};this.flushingAndroidKey=this.view.win.requestAnimationFrame(t)}this.delayedAndroidKey&&"Enter"!=t||(this.delayedAndroidKey={key:t,keyCode:e,force:this.lastChange<Date.now()-50||!!(null===(i=this.delayedAndroidKey)||void 0===i?void 0:i.force)})}clearDelayedAndroidKey(){this.win.cancelAnimationFrame(this.flushingAndroidKey),this.delayedAndroidKey=null,this.flushingAndroidKey=-1}flushSoon(){this.delayedFlush<0&&(this.delayedFlush=this.view.win.requestAnimationFrame((()=>{this.delayedFlush=-1,this.flush()})))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let t of this.observer.takeRecords())this.queue.push(t);return this.queue}processRecords(){let t=this.pendingRecords();t.length&&(this.queue=[]);let e=-1,i=-1,s=!1;for(let o of t){let t=this.readMutation(o);t&&(t.typeOver&&(s=!0),-1==e?({from:e,to:i}=t):(e=Math.min(t.from,e),i=Math.max(t.to,i)))}return{from:e,to:i,typeOver:s}}readChange(){let{from:t,to:e,typeOver:i}=this.processRecords(),s=this.selectionChanged&&P(this.dom,this.selectionRange);if(t<0&&!s)return null;t>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let o=new ms(this.view,t,e,i);return this.view.docView.domChanged={newSel:o.newSel?o.newSel.main:null},o}flush(t=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;t&&this.readSelectionRange();let e=this.readChange();if(!e)return this.view.requestMeasure(),!1;let i=this.view.state,s=ws(this.view,e);return this.view.state==i&&this.view.update([]),s}readMutation(t){let e=this.view.docView.nearest(t.target);if(!e||e.ignoreMutation(t))return null;if(e.markDirty("attributes"==t.type),"attributes"==t.type&&(e.flags|=4),"childList"==t.type){let i=Ss(e,t.previousSibling||t.target.previousSibling,-1),s=Ss(e,t.nextSibling||t.target.nextSibling,1);return{from:i?e.posAfter(i):e.posAtStart,to:s?e.posBefore(s):e.posAtEnd,typeOver:!1}}return"characterData"==t.type?{from:e.posAtStart,to:e.posAtEnd,typeOver:t.target.nodeValue==t.oldValue}:null}setWindow(t){t!=this.win&&(this.removeWindowListeners(this.win),this.win=t,this.addWindowListeners(this.win))}addWindowListeners(t){t.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener("change",this.onPrint):t.addEventListener("beforeprint",this.onPrint),t.addEventListener("scroll",this.onScroll),t.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(t){t.removeEventListener("scroll",this.onScroll),t.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener("change",this.onPrint):t.removeEventListener("beforeprint",this.onPrint),t.document.removeEventListener("selectionchange",this.onSelectionChange)}destroy(){var t,e,i;this.stop(),null===(t=this.intersection)||void 0===t||t.disconnect(),null===(e=this.gapIntersection)||void 0===e||e.disconnect(),null===(i=this.resizeScroll)||void 0===i||i.disconnect();for(let t of this.scrollTargets)t.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey)}}function Ss(t,e,i){for(;e;){let s=st.get(e);if(s&&s.parent==t)return s;let o=e.parentNode;e=o!=t.dom?o:i>0?e.nextSibling:e.previousSibling}return null}function xs(t,e){let i=e.startContainer,s=e.startOffset,o=e.endContainer,n=e.endOffset,r=t.docView.domAtPos(t.state.selection.main.anchor);return N(r.node,r.offset,o,n)&&([i,s,o,n]=[o,n,i,s]),{anchorNode:i,anchorOffset:s,focusNode:o,focusOffset:n}}class Ms{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return this.inputState.composing>0}get compositionStarted(){return this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(t={}){this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),t.parent&&t.parent.appendChild(this.dom);let{dispatch:e}=t;this.dispatchTransactions=t.dispatchTransactions||e&&(t=>t.forEach((t=>e(t,this))))||(t=>this.update(t)),this.dispatch=this.dispatch.bind(this),this._root=t.root||function(t){for(;t;){if(t&&(9==t.nodeType||11==t.nodeType&&t.host))return t;t=t.assignedSlot||t.parentNode}return null}(t.parent)||document,this.viewState=new $i(t.state||r.create(t)),t.scrollTo&&t.scrollTo.is(xe)&&(this.viewState.scrollTarget=t.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(Ae).map((t=>new Te(t)));for(let t of this.plugins)t.update(this);this.observer=new ys(this),this.inputState=new oi(this),this.inputState.ensureHandlers(this.plugins),this.docView=new Ke(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure()}dispatch(...t){let e=1==t.length&&t[0]instanceof l?t:1==t.length&&Array.isArray(t[0])?t[0]:[this.state.update(...t)];this.dispatchTransactions(e,this)}update(t){if(0!=this.updateState)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let e,i=!1,s=!1,o=this.state;for(let e of t){if(e.startState!=o)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");o=e.state}if(this.destroyed)return void(this.viewState.state=o);let l=this.hasFocus,h=0,a=null;t.some((t=>t.annotation(Ti)))?(this.inputState.notifiedFocused=l,h=1):l!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=l,a=Oi(o,l),a||(h=1));let c=this.observer.delayedAndroidKey,d=null;if(c?(this.observer.clearDelayedAndroidKey(),d=this.observer.readChange(),(d&&!this.state.doc.eq(o.doc)||!this.state.selection.eq(o.selection))&&(d=null)):this.observer.clear(),o.facet(r.phrases)!=this.state.facet(r.phrases))return this.setState(o);e=Fe.create(this,o,t),e.flags|=h;let u=this.viewState.scrollTarget;try{this.updateState=2;for(let e of t){if(u&&(u=u.map(e.changes)),e.scrollIntoView){let{main:t}=e.state.selection;u=new Se(t.empty?t:n.cursor(t.head,t.head>t.anchor?-1:1))}for(let t of e.effects)t.is(xe)&&(u=t.value.clip(this.state))}this.viewState.update(e,u),this.bidiCache=As.update(this.bidiCache,e.changes),e.empty||(this.updatePlugins(e),this.inputState.update(e)),i=this.docView.update(e),this.state.facet(We)!=this.styleModules&&this.mountStyles(),s=this.updateAttrs(),this.showAnnouncements(t),this.docView.updateSelection(i,t.some((t=>t.isUserEvent("select.pointer"))))}finally{this.updateState=0}if(e.startState.facet(os)!=e.state.facet(os)&&(this.viewState.mustMeasureContent=!0),(i||s||u||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),i&&this.docViewUpdate(),!e.empty)for(let t of this.state.facet(ge))try{t(e)}catch(t){Me(this.state,t,"update listener")}(a||d)&&Promise.resolve().then((()=>{a&&this.state==a.startState&&this.dispatch(a),d&&!ws(this,d)&&c.force&&$(this.contentDOM,c.key,c.keyCode)}))}setState(t){if(0!=this.updateState)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed)return void(this.viewState.state=t);this.updateState=2;let e=this.hasFocus;try{for(let t of this.plugins)t.destroy(this);this.viewState=new $i(t),this.plugins=t.facet(Ae).map((t=>new Te(t))),this.pluginMap.clear();for(let t of this.plugins)t.update(this);this.docView.destroy(),this.docView=new Ke(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}e&&this.focus(),this.requestMeasure()}updatePlugins(t){let e=t.startState.facet(Ae),i=t.state.facet(Ae);if(e!=i){let s=[];for(let o of i){let i=e.indexOf(o);if(i<0)s.push(new Te(o));else{let e=this.plugins[i];e.mustUpdate=t,s.push(e)}}for(let e of this.plugins)e.mustUpdate!=t&&e.destroy(this);this.plugins=s,this.pluginMap.clear()}else for(let e of this.plugins)e.mustUpdate=t;for(let t=0;t<this.plugins.length;t++)this.plugins[t].update(this);e!=i&&this.inputState.ensureHandlers(this.plugins)}docViewUpdate(){for(let t of this.plugins){let e=t.value;if(e&&e.docViewUpdate)try{e.docViewUpdate(this)}catch(t){Me(this.state,t,"doc view update listener")}}}measure(t=!0){if(this.destroyed)return;if(this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey)return this.measureScheduled=-1,void this.requestMeasure();this.measureScheduled=0,t&&this.observer.forceFlush();let e=null,i=this.scrollDOM,s=i.scrollTop*this.scaleY,{scrollAnchorPos:o,scrollAnchorHeight:n}=this.viewState;Math.abs(s-this.viewState.scrollTop)>1&&(n=-1),this.viewState.scrollAnchorHeight=-1;try{for(let t=0;;t++){if(n<0)if(Z(i))o=-1,n=this.viewState.heightMap.height;else{let t=this.viewState.scrollAnchorAt(s);o=t.from,n=t.top}this.updateState=1;let r=this.viewState.measure(this);if(!r&&!this.measureRequests.length&&null==this.viewState.scrollTarget)break;if(t>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let l=[];4&r||([this.measureRequests,l]=[l,this.measureRequests]);let h=l.map((t=>{try{return t.read(this)}catch(t){return Me(this.state,t),Cs}})),a=Fe.create(this,this.state,[]),c=!1;a.flags|=r,e?e.flags|=r:e=a,this.updateState=2,a.empty||(this.updatePlugins(a),this.inputState.update(a),this.updateAttrs(),c=this.docView.update(a),c&&this.docViewUpdate());for(let t=0;t<l.length;t++)if(h[t]!=Cs)try{let e=l[t];e.write&&e.write(h[t],this)}catch(t){Me(this.state,t)}if(c&&this.docView.updateSelection(!0),!a.viewportChanged&&0==this.measureRequests.length){if(this.viewState.editorHeight){if(this.viewState.scrollTarget){this.docView.scrollIntoView(this.viewState.scrollTarget),this.viewState.scrollTarget=null,n=-1;continue}{let t=(o<0?this.viewState.heightMap.height:this.viewState.lineBlockAt(o).top)-n;if(t>1||t<-1){s+=t,i.scrollTop=s/this.scaleY,n=-1;continue}}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(e&&!e.empty)for(let t of this.state.facet(ge))t(e)}get themeClasses(){return rs+" "+(this.state.facet(ns)?hs:ls)+" "+this.state.facet(os)}updateAttrs(){let t=Ds(this,Oe,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),e={spellcheck:"false",autocorrect:"off",autocapitalize:"off",translate:"no",contenteditable:this.state.facet(ke)?"true":"false",class:"cm-content",style:`${bt.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(e["aria-readonly"]="true"),Ds(this,Ee,e);let i=this.observer.ignore((()=>{let i=Et(this.contentDOM,this.contentAttrs,e),s=Et(this.dom,this.editorAttrs,t);return i||s}));return this.editorAttrs=t,this.contentAttrs=e,i}showAnnouncements(t){let e=!0;for(let i of t)for(let t of i.effects)if(t.is(Ms.announce)){e&&(this.announceDOM.textContent=""),e=!1,this.announceDOM.appendChild(document.createElement("div")).textContent=t.value}}mountStyles(){this.styleModules=this.state.facet(We);let t=this.state.facet(Ms.cspNonce);k.mount(this.root,this.styleModules.concat(ds).reverse(),t?{nonce:t}:void 0)}readMeasured(){if(2==this.updateState)throw new Error("Reading the editor layout isn't allowed during an update");0==this.updateState&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(t){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame((()=>this.measure()))),t){if(this.measureRequests.indexOf(t)>-1)return;if(null!=t.key)for(let e=0;e<this.measureRequests.length;e++)if(this.measureRequests[e].key===t.key)return void(this.measureRequests[e]=t);this.measureRequests.push(t)}}plugin(t){let e=this.pluginMap.get(t);return(void 0===e||e&&e.spec!=t)&&this.pluginMap.set(t,e=this.plugins.find((e=>e.spec==t))||null),e&&e.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(t){return this.readMeasured(),this.viewState.elementAtHeight(t)}lineBlockAtHeight(t){return this.readMeasured(),this.viewState.lineBlockAtHeight(t)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(t){return this.viewState.lineBlockAt(t)}get contentHeight(){return this.viewState.contentHeight}moveByChar(t,e,i){return si(this,t,ei(this,t,e,i))}moveByGroup(t,e){return si(this,t,ei(this,t,e,(e=>function(t,e,i){let s=t.state.charCategorizer(e),o=s(i);return t=>{let e=s(t);return o==y.Space&&(o=e),o==e}}(this,t.head,e))))}visualLineSide(t,e){let i=this.bidiSpans(t),s=this.textDirectionAt(t.from),o=i[e?i.length-1:0];return n.cursor(o.side(e,s)+t.from,o.forward(!e,s)?1:-1)}moveToLineBoundary(t,e,i=!0){return function(t,e,i,s){let o=ti(t,e.head),r=s&&o.type==Pt.Text&&(t.lineWrapping||o.widgetLineBreaks)?t.coordsAtPos(e.assoc<0&&e.head>o.from?e.head-1:e.head):null;if(r){let e=t.dom.getBoundingClientRect(),s=t.textDirectionAt(o.from),l=t.posAtCoords({x:i==(s==_t.LTR)?e.right-1:e.left+1,y:(r.top+r.bottom)/2});if(null!=l)return n.cursor(l,i?-1:1)}return n.cursor(i?o.to:o.from,i?-1:1)}(this,t,e,i)}moveVertically(t,e,i){return si(this,t,function(t,e,i,s){let o=e.head,r=i?1:-1;if(o==(i?t.state.doc.length:0))return n.cursor(o,e.assoc);let l,h=e.goalColumn,a=t.contentDOM.getBoundingClientRect(),c=t.coordsAtPos(o,e.assoc||-1),d=t.documentTop;if(c)null==h&&(h=c.left-a.left),l=r<0?c.top:c.bottom;else{let e=t.viewState.lineBlockAt(o);null==h&&(h=Math.min(a.right-a.left,t.defaultCharacterWidth*(o-e.from))),l=(r<0?e.top:e.bottom)+d}let u=a.left+h,f=null!=s?s:t.viewState.heightOracle.textHeight>>1;for(let e=0;;e+=10){let i=l+(f+e)*r,s=Ze(t,{x:u,y:i},!1,r);if(i<a.top||i>a.bottom||(r<0?s<o:s>o)){let e=t.docView.coordsForChar(s),o=!e||i<e.top?-1:1;return n.cursor(s,o,void 0,h)}}}(this,t,e,i))}domAtPos(t){return this.docView.domAtPos(t)}posAtDOM(t,e=0){return this.docView.posFromDOM(t,e)}posAtCoords(t,e=!0){return this.readMeasured(),Ze(this,t,e)}coordsAtPos(t,e=1){this.readMeasured();let i=this.docView.coordsAt(t,e);if(!i||i.left==i.right)return i;let s=this.state.doc.lineAt(t),o=this.bidiSpans(s);return I(i,o[ee.find(o,t-s.from,-1,e)].dir==_t.LTR==e>0)}coordsForChar(t){return this.readMeasured(),this.docView.coordsForChar(t)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(t){return!this.state.facet(ve)||t<this.viewport.from||t>this.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(t))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(t){if(t.length>ks)return le(t.length);let e,i=this.textDirectionAt(t.from);for(let s of this.bidiCache)if(s.from==t.from&&s.dir==i&&(s.fresh||ie(s.isolates,e=Pe(this,t))))return s.order;e||(e=Pe(this,t));let s=re(t.text,i,e);return this.bidiCache.push(new As(t.from,t.to,i,e,!0,s)),s}get hasFocus(){var t;return(this.dom.ownerDocument.hasFocus()||bt.safari&&(null===(t=this.inputState)||void 0===t?void 0:t.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore((()=>{G(this.contentDOM),this.docView.updateSelection()}))}setRoot(t){this._root!=t&&(this._root=t,this.observer.setWindow((9==t.nodeType?t:t.ownerDocument).defaultView||window),this.mountStyles())}destroy(){for(let t of this.plugins)t.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(t,e={}){return xe.of(new Se("number"==typeof t?n.cursor(t):t,e.y,e.x,e.yMargin,e.xMargin))}scrollSnapshot(){let{scrollTop:t,scrollLeft:e}=this.scrollDOM,i=this.viewState.scrollAnchorAt(t);return xe.of(new Se(n.cursor(i.from),"start","start",i.top-t,e,!0))}static domEventHandlers(t){return De.define((()=>({})),{eventHandlers:t})}static domEventObservers(t){return De.define((()=>({})),{eventObservers:t})}static theme(t,e){let i=k.newName(),s=[os.of(i),We.of(cs(`.${i}`,t))];return e&&e.dark&&s.push(ns.of(!0)),s}static baseTheme(t){return h.lowest(We.of(cs("."+rs,t,as)))}static findFromDOM(t){var e;let i=t.querySelector(".cm-content"),s=i&&st.get(i)||st.get(t);return(null===(e=null==s?void 0:s.rootView)||void 0===e?void 0:e.view)||null}}Ms.styleModule=We,Ms.inputHandler=me,Ms.scrollHandler=ye,Ms.focusChangeEffect=we,Ms.perLineTextDirection=ve,Ms.exceptionSink=pe,Ms.updateListener=ge,Ms.editable=ke,Ms.mouseSelectionStyle=fe,Ms.dragMovesSelection=ue,Ms.clickAddsSelectionRange=de,Ms.decorations=Re,Ms.outerDecorations=Le,Ms.atomicRanges=Be,Ms.bidiIsolatedRanges=He,Ms.scrollMargins=Ve,Ms.darkTheme=ns,Ms.cspNonce=s.define({combine:t=>t.length?t[0]:""}),Ms.contentAttributes=Ee,Ms.editorAttributes=Oe,Ms.lineWrapping=Ms.contentAttributes.of({class:"cm-lineWrapping"}),Ms.announce=a.define();const ks=4096,Cs={};class As{constructor(t,e,i,s,o,n){this.from=t,this.to=e,this.dir=i,this.isolates=s,this.fresh=o,this.order=n}static update(t,e){if(e.empty&&!t.some((t=>t.fresh)))return t;let i=[],s=t.length?t[t.length-1].dir:_t.LTR;for(let o=Math.max(0,t.length-10);o<t.length;o++){let n=t[o];n.dir!=s||e.touchesRange(n.from,n.to)||i.push(new As(e.mapPos(n.from,1),e.mapPos(n.to,-1),n.dir,n.isolates,!1,n.order))}return i}}function Ds(t,e,i){for(let s=t.state.facet(e),o=s.length-1;o>=0;o--){let e=s[o],n="function"==typeof e?e(t):e;n&&Dt(n,i)}return i}const Ts=bt.mac?"mac":bt.windows?"win":bt.linux?"linux":"key";function Os(t,e,i){return e.altKey&&(t="Alt-"+t),e.ctrlKey&&(t="Ctrl-"+t),e.metaKey&&(t="Meta-"+t),!1!==i&&e.shiftKey&&(t="Shift-"+t),t}const Es=h.default(Ms.domEventHandlers({keydown:(t,e)=>Ns(Bs(e.state),t,e,"editor")})),Rs=s.define({enables:Es}),Ls=new WeakMap;function Bs(t){let e=t.facet(Rs),i=Ls.get(e);return i||Ls.set(e,i=function(t,e=Ts){let i=Object.create(null),s=Object.create(null),o=(t,e)=>{let i=s[t];if(null==i)s[t]=e;else if(i!=e)throw new Error("Key binding "+t+" is used both as a regular binding and as a multi-stroke prefix")},n=(t,s,n,r,l)=>{var h,a;let c=i[t]||(i[t]=Object.create(null)),d=s.split(/ (?!$)/).map((t=>function(t,e){const i=t.split(/-(?!$)/);let s,o,n,r,l=i[i.length-1];"Space"==l&&(l=" ");for(let t=0;t<i.length-1;++t){const l=i[t];if(/^(cmd|meta|m)$/i.test(l))r=!0;else if(/^a(lt)?$/i.test(l))s=!0;else if(/^(c|ctrl|control)$/i.test(l))o=!0;else if(/^s(hift)?$/i.test(l))n=!0;else{if(!/^mod$/i.test(l))throw new Error("Unrecognized modifier name: "+l);"mac"==e?r=!0:o=!0}}return s&&(l="Alt-"+l),o&&(l="Ctrl-"+l),r&&(l="Meta-"+l),n&&(l="Shift-"+l),l}(t,e)));for(let e=1;e<d.length;e++){let i=d.slice(0,e).join(" ");o(i,!0),c[i]||(c[i]={preventDefault:!0,stopPropagation:!1,run:[e=>{let s=Ps={view:e,prefix:i,scope:t};return setTimeout((()=>{Ps==s&&(Ps=null)}),Vs),!0}]})}let u=d.join(" ");o(u,!1);let f=c[u]||(c[u]={preventDefault:!1,stopPropagation:!1,run:(null===(a=null===(h=c._any)||void 0===h?void 0:h.run)||void 0===a?void 0:a.slice())||[]});n&&f.run.push(n),r&&(f.preventDefault=!0),l&&(f.stopPropagation=!0)};for(let s of t){let t=s.scope?s.scope.split(" "):["editor"];if(s.any)for(let e of t){let t=i[e]||(i[e]=Object.create(null));t._any||(t._any={preventDefault:!1,stopPropagation:!1,run:[]});for(let e in t)t[e].run.push(s.any)}let o=s[e]||s.key;if(o)for(let e of t)n(e,o,s.run,s.preventDefault,s.stopPropagation),s.shift&&n(e,"Shift-"+o,s.shift,s.preventDefault,s.stopPropagation)}return i}(e.reduce(((t,e)=>t.concat(e)),[]))),i}function Hs(t,e,i){return Ns(Bs(t.state),e,t,i)}let Ps=null;const Vs=4e3;function Ns(t,e,i,s){let o=function(t){var e=!(O&&t.metaKey&&t.shiftKey&&!t.ctrlKey&&!t.altKey||E&&t.shiftKey&&t.key&&1==t.key.length||"Unidentified"==t.key)&&t.key||(t.shiftKey?T:D)[t.keyCode]||t.key||"Unidentified";return"Esc"==e&&(e="Escape"),"Del"==e&&(e="Delete"),"Left"==e&&(e="ArrowLeft"),"Up"==e&&(e="ArrowUp"),"Right"==e&&(e="ArrowRight"),"Down"==e&&(e="ArrowDown"),e}(e),n=c(o,0),r=d(n)==o.length&&" "!=o,l="",h=!1,a=!1,u=!1;Ps&&Ps.view==i&&Ps.scope==s&&(l=Ps.prefix+" ",ai.indexOf(e.keyCode)<0&&(a=!0,Ps=null));let f,p,g=new Set,m=t=>{if(t){for(let s of t.run)if(!g.has(s)&&(g.add(s),s(i,e)))return t.stopPropagation&&(u=!0),!0;t.preventDefault&&(t.stopPropagation&&(u=!0),a=!0)}return!1},w=t[s];return w&&(m(w[l+Os(o,e,!r)])?h=!0:r&&(e.altKey||e.metaKey||e.ctrlKey)&&!(bt.windows&&e.ctrlKey&&e.altKey)&&(f=D[e.keyCode])&&f!=o?(m(w[l+Os(f,e,!0)])||e.shiftKey&&(p=T[e.keyCode])!=o&&p!=f&&m(w[l+Os(p,e,!1)]))&&(h=!0):r&&e.shiftKey&&m(w[l+Os(o,e,!0)])&&(h=!0),!h&&m(w._any)&&(h=!0)),a&&(h=!0),h&&u&&e.stopPropagation(),h}class Ws{constructor(t,e,i,s,o){this.className=t,this.left=e,this.top=i,this.width=s,this.height=o}draw(){let t=document.createElement("div");return t.className=this.className,this.adjust(t),t}update(t,e){return e.className==this.className&&(this.adjust(t),!0)}adjust(t){t.style.left=this.left+"px",t.style.top=this.top+"px",null!=this.width&&(t.style.width=this.width+"px"),t.style.height=this.height+"px"}eq(t){return this.left==t.left&&this.top==t.top&&this.width==t.width&&this.height==t.height&&this.className==t.className}static forRange(t,e,i){if(i.empty){let s=t.coordsAtPos(i.head,i.assoc||1);if(!s)return[];let o=zs(t);return[new Ws(e,s.left-o.left,s.top-o.top,null,s.bottom-s.top)]}return function(t,e,i){if(i.to<=t.viewport.from||i.from>=t.viewport.to)return[];let s=Math.max(i.from,t.viewport.from),o=Math.min(i.to,t.viewport.to),n=t.textDirection==_t.LTR,r=t.contentDOM,l=r.getBoundingClientRect(),h=zs(t),a=r.querySelector(".cm-line"),c=a&&window.getComputedStyle(a),d=l.left+(c?parseInt(c.paddingLeft)+Math.min(0,parseInt(c.textIndent)):0),u=l.right-(c?parseInt(c.paddingRight):0),f=ti(t,s),p=ti(t,o),g=f.type==Pt.Text?f:null,m=p.type==Pt.Text?p:null;g&&(t.lineWrapping||f.widgetLineBreaks)&&(g=Fs(t,s,g));m&&(t.lineWrapping||p.widgetLineBreaks)&&(m=Fs(t,o,m));if(g&&m&&g.from==m.from)return v(b(i.from,i.to,g));{let e=g?b(i.from,null,g):y(f,!1),s=m?b(null,i.to,m):y(p,!0),o=[];return(g||f).to<(m||p).from-(g&&m?1:0)||f.widgetLineBreaks>1&&e.bottom+t.defaultLineHeight/2<s.top?o.push(w(d,e.bottom,u,s.top)):e.bottom<s.top&&t.elementAtHeight((e.bottom+s.top)/2).type==Pt.Text&&(e.bottom=s.top=(e.bottom+s.top)/2),v(e).concat(o).concat(v(s))}function w(t,i,s,o){return new Ws(e,t-h.left,i-h.top-.01,s-t,o-i+.01)}function v({top:t,bottom:e,horizontal:i}){let s=[];for(let o=0;o<i.length;o+=2)s.push(w(i[o],t,i[o+1],e));return s}function b(e,i,s){let o=1e9,r=-1e9,l=[];function h(e,i,h,a,c){let f=t.coordsAtPos(e,e==s.to?-2:2),p=t.coordsAtPos(h,h==s.from?2:-2);f&&p&&(o=Math.min(f.top,p.top,o),r=Math.max(f.bottom,p.bottom,r),c==_t.LTR?l.push(n&&i?d:f.left,n&&a?u:p.right):l.push(!n&&a?d:p.left,!n&&i?u:f.right))}let a=null!=e?e:s.from,c=null!=i?i:s.to;for(let s of t.visibleRanges)if(s.to>a&&s.from<c)for(let o=Math.max(s.from,a),n=Math.min(s.to,c);;){let s=t.state.doc.lineAt(o);for(let r of t.bidiSpans(s)){let t=r.from+s.from,l=r.to+s.from;if(t>=n)break;l>o&&h(Math.max(t,o),null==e&&t<=a,Math.min(l,n),null==i&&l>=c,r.dir)}if(o=s.to+1,o>=n)break}return 0==l.length&&h(a,null==e,c,null==i,t.textDirection),{top:o,bottom:r,horizontal:l}}function y(t,e){let i=l.top+(e?t.top:t.bottom);return{top:i,bottom:i,horizontal:[]}}}(t,e,i)}}function zs(t){let e=t.scrollDOM.getBoundingClientRect();return{left:(t.textDirection==_t.LTR?e.left:e.right-t.scrollDOM.clientWidth*t.scaleX)-t.scrollDOM.scrollLeft*t.scaleX,top:e.top-t.scrollDOM.scrollTop*t.scaleY}}function Fs(t,e,i){let s=n.cursor(e);return{from:Math.max(i.from,t.moveToLineBoundary(s,!1,!0).from),to:Math.min(i.to,t.moveToLineBoundary(s,!0,!0).from),type:Pt.Text}}class Ks{constructor(t,e){this.view=t,this.layer=e,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=t.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),e.above&&this.dom.classList.add("cm-layer-above"),e.class&&this.dom.classList.add(e.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(t.state),t.requestMeasure(this.measureReq),e.mount&&e.mount(this.dom,t)}update(t){t.startState.facet(Is)!=t.state.facet(Is)&&this.setOrder(t.state),(this.layer.update(t,this.dom)||t.geometryChanged)&&(this.scale(),t.view.requestMeasure(this.measureReq))}docViewUpdate(t){!1!==this.layer.updateOnDocViewUpdate&&t.requestMeasure(this.measureReq)}setOrder(t){let e=0,i=t.facet(Is);for(;e<i.length&&i[e]!=this.layer;)e++;this.dom.style.zIndex=String((this.layer.above?150:-1)-e)}measure(){return this.layer.markers(this.view)}scale(){let{scaleX:t,scaleY:e}=this.view;t==this.scaleX&&e==this.scaleY||(this.scaleX=t,this.scaleY=e,this.dom.style.transform=`scale(${1/t}, ${1/e})`)}draw(t){if(t.length!=this.drawn.length||t.some(((t,e)=>{return i=t,s=this.drawn[e],!(i.constructor==s.constructor&&i.eq(s));var i,s}))){let e=this.dom.firstChild,i=0;for(let s of t)s.update&&e&&s.constructor&&this.drawn[i].constructor&&s.update(e,this.drawn[i])?(e=e.nextSibling,i++):this.dom.insertBefore(s.draw(),e);for(;e;){let t=e.nextSibling;e.remove(),e=t}this.drawn=t}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}}const Is=s.define();function qs(t){return[De.define((e=>new Ks(e,t))),Is.of(t)]}const Ys=!bt.ios,_s=s.define({combine:t=>v(t,{cursorBlinkRate:1200,drawRangeCursor:!0},{cursorBlinkRate:(t,e)=>Math.min(t,e),drawRangeCursor:(t,e)=>t||e})});function js(t={}){return[_s.of(t),Gs,$s,Zs,be.of(!0)]}function Xs(t){return t.startState.facet(_s)!=t.state.facet(_s)}const Gs=qs({above:!0,markers(t){let{state:e}=t,i=e.facet(_s),s=[];for(let o of e.selection.ranges){let r=o==e.selection.main;if(o.empty?!r||Ys:i.drawRangeCursor){let e=r?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary",i=o.empty?o:n.cursor(o.head,o.head>o.anchor?-1:1);for(let o of Ws.forRange(t,e,i))s.push(o)}}return s},update(t,e){t.transactions.some((t=>t.selection))&&(e.style.animationName="cm-blink"==e.style.animationName?"cm-blink2":"cm-blink");let i=Xs(t);return i&&Us(t.state,e),t.docChanged||t.selectionSet||i},mount(t,e){Us(e.state,t)},class:"cm-cursorLayer"});function Us(t,e){e.style.animationDuration=t.facet(_s).cursorBlinkRate+"ms"}const $s=qs({above:!1,markers:t=>t.state.selection.ranges.map((e=>e.empty?[]:Ws.forRange(t,"cm-selectionBackground",e))).reduce(((t,e)=>t.concat(e))),update:(t,e)=>t.docChanged||t.selectionSet||t.viewportChanged||Xs(t),class:"cm-selectionLayer"}),Qs={".cm-line":{"& ::selection":{backgroundColor:"transparent !important"},"&::selection":{backgroundColor:"transparent !important"}}};Ys&&(Qs[".cm-line"].caretColor="transparent !important",Qs[".cm-content"]={caretColor:"transparent !important"});const Zs=h.highest(Ms.theme(Qs)),Js=a.define({map:(t,e)=>null==t?null:e.mapPos(t)}),to=f.define({create:()=>null,update:(t,e)=>(null!=t&&(t=e.changes.mapPos(t)),e.effects.reduce(((t,e)=>e.is(Js)?e.value:t),t))}),eo=De.fromClass(class{constructor(t){this.view=t,this.cursor=null,this.measureReq={read:this.readPos.bind(this),write:this.drawCursor.bind(this)}}update(t){var e;let i=t.state.field(to);null==i?null!=this.cursor&&(null===(e=this.cursor)||void 0===e||e.remove(),this.cursor=null):(this.cursor||(this.cursor=this.view.scrollDOM.appendChild(document.createElement("div")),this.cursor.className="cm-dropCursor"),(t.startState.field(to)!=i||t.docChanged||t.geometryChanged)&&this.view.requestMeasure(this.measureReq))}readPos(){let{view:t}=this,e=t.state.field(to),i=null!=e&&t.coordsAtPos(e);if(!i)return null;let s=t.scrollDOM.getBoundingClientRect();return{left:i.left-s.left+t.scrollDOM.scrollLeft*t.scaleX,top:i.top-s.top+t.scrollDOM.scrollTop*t.scaleY,height:i.bottom-i.top}}drawCursor(t){if(this.cursor){let{scaleX:e,scaleY:i}=this.view;t?(this.cursor.style.left=t.left/e+"px",this.cursor.style.top=t.top/i+"px",this.cursor.style.height=t.height/i+"px"):this.cursor.style.left="-100000px"}}destroy(){this.cursor&&this.cursor.remove()}setDropPos(t){this.view.state.field(to)!=t&&this.view.dispatch({effects:Js.of(t)})}},{eventObservers:{dragover(t){this.setDropPos(this.view.posAtCoords({x:t.clientX,y:t.clientY}))},dragleave(t){t.target!=this.view.contentDOM&&this.view.contentDOM.contains(t.relatedTarget)||this.setDropPos(null)},dragend(){this.setDropPos(null)},drop(){this.setDropPos(null)}}});function io(){return[to,eo]}function so(t,e,i,s,o){e.lastIndex=0;for(let n,r=t.iterRange(i,s),l=i;!r.next().done;l+=r.value.length)if(!r.lineBreak)for(;n=e.exec(r.value);)o(l+n.index,n)}class oo{constructor(t){const{regexp:e,decoration:i,decorate:s,boundary:o,maxLength:n=1e3}=t;if(!e.global)throw new RangeError("The regular expression given to MatchDecorator should have its 'g' flag set");if(this.regexp=e,s)this.addMatch=(t,e,i,o)=>s(o,i,i+t[0].length,t,e);else if("function"==typeof i)this.addMatch=(t,e,s,o)=>{let n=i(t,e,s);n&&o(s,s+t[0].length,n)};else{if(!i)throw new RangeError("Either 'decorate' or 'decoration' should be provided to MatchDecorator");this.addMatch=(t,e,s,o)=>o(s,s+t[0].length,i)}this.boundary=o,this.maxLength=n}createDeco(t){let e=new b,i=e.add.bind(e);for(let{from:e,to:s}of function(t,e){let i=t.visibleRanges;if(1==i.length&&i[0].from==t.viewport.from&&i[0].to==t.viewport.to)return i;let s=[];for(let{from:o,to:n}of i)o=Math.max(t.state.doc.lineAt(o).from,o-e),n=Math.min(t.state.doc.lineAt(n).to,n+e),s.length&&s[s.length-1].to>=o?s[s.length-1].to=n:s.push({from:o,to:n});return s}(t,this.maxLength))so(t.state.doc,this.regexp,e,s,((e,s)=>this.addMatch(s,t,e,i)));return e.finish()}updateDeco(t,e){let i=1e9,s=-1;return t.docChanged&&t.changes.iterChanges(((e,o,n,r)=>{r>t.view.viewport.from&&n<t.view.viewport.to&&(i=Math.min(n,i),s=Math.max(r,s))})),t.viewportChanged||s-i>1e3?this.createDeco(t.view):s>-1?this.updateRange(t.view,e.map(t.changes),i,s):e}updateRange(t,e,i,s){for(let o of t.visibleRanges){let n=Math.max(o.from,i),r=Math.min(o.to,s);if(r>n){let i=t.state.doc.lineAt(n),s=i.to<r?t.state.doc.lineAt(r):i,l=Math.max(o.from,i.from),h=Math.min(o.to,s.to);if(this.boundary){for(;n>i.from;n--)if(this.boundary.test(i.text[n-1-i.from])){l=n;break}for(;r<s.to;r++)if(this.boundary.test(s.text[r-s.from])){h=r;break}}let a,c=[],d=(t,e,i)=>c.push(i.range(t,e));if(i==s)for(this.regexp.lastIndex=l-i.from;(a=this.regexp.exec(i.text))&&a.index<h-i.from;)this.addMatch(a,t,a.index+i.from,d);else so(t.state.doc,this.regexp,l,h,((e,i)=>this.addMatch(i,t,e,d)));e=e.update({filterFrom:l,filterTo:h,filter:(t,e)=>t<l||e>h,add:c})}}return e}}const no=null!=/x/.unicode?"gu":"g",ro=new RegExp("[\0-\b\n--Ÿ­؜​‎‏\u2028\u2029‭‮⁦⁧⁩\ufeff-]",no),lo={0:"null",7:"bell",8:"backspace",10:"newline",11:"vertical tab",13:"carriage return",27:"escape",8203:"zero width space",8204:"zero width non-joiner",8205:"zero width joiner",8206:"left-to-right mark",8207:"right-to-left mark",8232:"line separator",8237:"left-to-right override",8238:"right-to-left override",8294:"left-to-right isolate",8295:"right-to-left isolate",8297:"pop directional isolate",8233:"paragraph separator",65279:"zero width no-break space",65532:"object replacement"};let ho=null;const ao=s.define({combine(t){let e=v(t,{render:null,specialChars:ro,addSpecialChars:null});return(e.replaceTabs=!function(){var t;if(null==ho&&"undefined"!=typeof document&&document.body){let e=document.body.style;ho=null!=(null!==(t=e.tabSize)&&void 0!==t?t:e.MozTabSize)}return ho||!1}())&&(e.specialChars=new RegExp("\t|"+e.specialChars.source,no)),e.addSpecialChars&&(e.specialChars=new RegExp(e.specialChars.source+"|"+e.addSpecialChars.source,no)),e}});function co(t={}){return[ao.of(t),uo||(uo=De.fromClass(class{constructor(t){this.view=t,this.decorations=Vt.none,this.decorationCache=Object.create(null),this.decorator=this.makeDecorator(t.state.facet(ao)),this.decorations=this.decorator.createDeco(t)}makeDecorator(t){return new oo({regexp:t.specialChars,decoration:(e,i,s)=>{let{doc:o}=i.state,n=c(e[0],0);if(9==n){let t=o.lineAt(s),e=i.state.tabSize,n=u(t.text,e,s-t.from);return Vt.replace({widget:new po((e-n%e)*this.view.defaultCharacterWidth/this.view.scaleX)})}return this.decorationCache[n]||(this.decorationCache[n]=Vt.replace({widget:new fo(t,n)}))},boundary:t.replaceTabs?void 0:/[^]/})}update(t){let e=t.state.facet(ao);t.startState.facet(ao)!=e?(this.decorator=this.makeDecorator(e),this.decorations=this.decorator.createDeco(t.view)):this.decorations=this.decorator.updateDeco(t,this.decorations)}},{decorations:t=>t.decorations}))]}let uo=null;class fo extends Ht{constructor(t,e){super(),this.options=t,this.code=e}eq(t){return t.code==this.code}toDOM(t){let e=function(t){return t>=32?"•":10==t?"␤":String.fromCharCode(9216+t)}(this.code),i=t.state.phrase("Control character")+" "+(lo[this.code]||"0x"+this.code.toString(16)),s=this.options.render&&this.options.render(this.code,i,e);if(s)return s;let o=document.createElement("span");return o.textContent=e,o.title=i,o.setAttribute("aria-label",i),o.className="cm-specialChar",o}ignoreEvent(){return!1}}class po extends Ht{constructor(t){super(),this.width=t}eq(t){return t.width==this.width}toDOM(){let t=document.createElement("span");return t.textContent="\t",t.className="cm-tab",t.style.width=this.width+"px",t}ignoreEvent(){return!1}}const go=De.fromClass(class{constructor(){this.height=1e3,this.attrs={style:"padding-bottom: 1000px"}}update(t){let{view:e}=t,i=e.viewState.editorHeight-e.defaultLineHeight-e.documentPadding.top-.5;i>=0&&i!=this.height&&(this.height=i,this.attrs={style:`padding-bottom: ${i}px`})}});function mo(){return vo}const wo=Vt.line({class:"cm-activeLine"}),vo=De.fromClass(class{constructor(t){this.decorations=this.getDeco(t)}update(t){(t.docChanged||t.selectionSet)&&(this.decorations=this.getDeco(t.view))}getDeco(t){let e=-1,i=[];for(let s of t.state.selection.ranges){let o=t.lineBlockAt(s.head);o.from>e&&(i.push(wo.range(o.from)),e=o.from)}return Vt.set(i)}},{decorations:t=>t.decorations});class bo extends Ht{constructor(t){super(),this.content=t}toDOM(){let t=document.createElement("span");return t.className="cm-placeholder",t.style.pointerEvents="none",t.appendChild("string"==typeof this.content?document.createTextNode(this.content):this.content),"string"==typeof this.content?t.setAttribute("aria-label","placeholder "+this.content):t.setAttribute("aria-hidden","true"),t}coordsAt(t){let e=t.firstChild?V(t.firstChild):[];if(!e.length)return null;let i=window.getComputedStyle(t.parentNode),s=I(e[0],"rtl"!=i.direction),o=parseInt(i.lineHeight);return s.bottom-s.top>1.5*o?{left:s.left,right:s.right,top:s.top,bottom:s.top+o}:s}ignoreEvent(){return!1}}const yo=2e3;function So(t,e){let i=t.posAtCoords({x:e.clientX,y:e.clientY},!1),s=t.state.doc.lineAt(i),o=i-s.from,n=o>yo?-1:o==s.length?function(t,e){let i=t.coordsAtPos(t.viewport.from);return i?Math.round(Math.abs((i.left-e)/t.defaultCharacterWidth)):-1}(t,e.clientX):u(s.text,t.state.tabSize,i-s.from);return{line:s.number,col:n,off:o}}function xo(t,e){let i=So(t,e),s=t.state.selection;return i?{update(t){if(t.docChanged){let e=t.changes.mapPos(t.startState.doc.line(i.line).from),o=t.state.doc.lineAt(e);i={line:o.number,col:i.col,off:Math.min(i.off,o.length)},s=s.map(t.changes)}},get(e,o,r){let l=So(t,e);if(!l)return s;let h=function(t,e,i){let s=Math.min(e.line,i.line),o=Math.max(e.line,i.line),r=[];if(e.off>yo||i.off>yo||e.col<0||i.col<0){let l=Math.min(e.off,i.off),h=Math.max(e.off,i.off);for(let e=s;e<=o;e++){let i=t.doc.line(e);i.length<=h&&r.push(n.range(i.from+l,i.to+h))}}else{let l=Math.min(e.col,i.col),h=Math.max(e.col,i.col);for(let e=s;e<=o;e++){let i=t.doc.line(e),s=g(i.text,l,t.tabSize,!0);if(s<0)r.push(n.cursor(i.to));else{let e=g(i.text,h,t.tabSize);r.push(n.range(i.from+s,i.from+e))}}}return r}(t.state,i,l);return h.length?r?n.create(h.concat(s.ranges)):n.create(h):s}}:null}function Mo(t){let e=(null==t?void 0:t.eventFilter)||(t=>t.altKey&&0==t.button);return Ms.mouseSelectionStyle.of(((t,i)=>e(i)?xo(t,i):null))}const ko={Alt:[18,t=>!!t.altKey],Control:[17,t=>!!t.ctrlKey],Shift:[16,t=>!!t.shiftKey],Meta:[91,t=>!!t.metaKey]},Co={style:"cursor: crosshair"};function Ao(t={}){let[e,i]=ko[t.key||"Alt"],s=De.fromClass(class{constructor(t){this.view=t,this.isDown=!1}set(t){this.isDown!=t&&(this.isDown=t,this.view.update([]))}},{eventObservers:{keydown(t){this.set(t.keyCode==e||i(t))},keyup(t){t.keyCode!=e&&i(t)||this.set(!1)},mousemove(t){this.set(i(t))}}});return[s,Ms.contentAttributes.of((t=>{var e;return(null===(e=t.plugin(s))||void 0===e?void 0:e.isDown)?Co:null}))]}const Do="-10000px";class To{constructor(t,e,i,s){this.facet=e,this.createTooltipView=i,this.removeTooltipView=s,this.input=t.state.facet(e),this.tooltips=this.input.filter((t=>t));let o=null;this.tooltipViews=this.tooltips.map((t=>o=i(t,o)))}update(t,e){var i;let s=t.state.facet(this.facet),o=s.filter((t=>t));if(s===this.input){for(let e of this.tooltipViews)e.update&&e.update(t);return!1}let n=[],r=e?[]:null;for(let i=0;i<o.length;i++){let s=o[i],l=-1;if(s){for(let t=0;t<this.tooltips.length;t++){let e=this.tooltips[t];e&&e.create==s.create&&(l=t)}if(l<0)n[i]=this.createTooltipView(s,i?n[i-1]:null),r&&(r[i]=!!s.above);else{let s=n[i]=this.tooltipViews[l];r&&(r[i]=e[l]),s.update&&s.update(t)}}}for(let t of this.tooltipViews)n.indexOf(t)<0&&(this.removeTooltipView(t),null===(i=t.destroy)||void 0===i||i.call(t));return e&&(r.forEach(((t,i)=>e[i]=t)),e.length=r.length),this.input=s,this.tooltips=o,this.tooltipViews=n,!0}}function Oo(t){let{win:e}=t;return{top:0,left:0,bottom:e.innerHeight,right:e.innerWidth}}const Eo=s.define({combine:t=>{var e,i,s;return{position:bt.ios?"absolute":(null===(e=t.find((t=>t.position)))||void 0===e?void 0:e.position)||"fixed",parent:(null===(i=t.find((t=>t.parent)))||void 0===i?void 0:i.parent)||null,tooltipSpace:(null===(s=t.find((t=>t.tooltipSpace)))||void 0===s?void 0:s.tooltipSpace)||Oo}}}),Ro=new WeakMap,Lo=De.fromClass(class{constructor(t){this.view=t,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let e=t.state.facet(Eo);this.position=e.position,this.parent=e.parent,this.classes=t.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.resizeObserver="function"==typeof ResizeObserver?new ResizeObserver((()=>this.measureSoon())):null,this.manager=new To(t,Po,((t,e)=>this.createTooltip(t,e)),(t=>{this.resizeObserver&&this.resizeObserver.unobserve(t.dom),t.dom.remove()})),this.above=this.manager.tooltips.map((t=>!!t.above)),this.intersectionObserver="function"==typeof IntersectionObserver?new IntersectionObserver((t=>{Date.now()>this.lastTransaction-50&&t.length>0&&t[t.length-1].intersectionRatio<1&&this.measureSoon()}),{threshold:[1]}):null,this.observeIntersection(),t.win.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let t of this.manager.tooltipViews)this.intersectionObserver.observe(t.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout((()=>{this.measureTimeout=-1,this.maybeMeasure()}),50))}update(t){t.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(t,this.above);e&&this.observeIntersection();let i=e||t.geometryChanged,s=t.state.facet(Eo);if(s.position!=this.position&&!this.madeAbsolute){this.position=s.position;for(let t of this.manager.tooltipViews)t.dom.style.position=this.position;i=!0}if(s.parent!=this.parent){this.parent&&this.container.remove(),this.parent=s.parent,this.createContainer();for(let t of this.manager.tooltipViews)this.container.appendChild(t.dom);i=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);i&&this.maybeMeasure()}createTooltip(t,e){let i=t.create(this.view),s=e?e.dom:null;if(i.dom.classList.add("cm-tooltip"),t.arrow&&!i.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")){let t=document.createElement("div");t.className="cm-tooltip-arrow",i.dom.appendChild(t)}return i.dom.style.position=this.position,i.dom.style.top=Do,i.dom.style.left="0px",this.container.insertBefore(i.dom,s),i.mount&&i.mount(this.view),this.resizeObserver&&this.resizeObserver.observe(i.dom),i}destroy(){var t,e,i;this.view.win.removeEventListener("resize",this.measureSoon);for(let e of this.manager.tooltipViews)e.dom.remove(),null===(t=e.destroy)||void 0===t||t.call(e);this.parent&&this.container.remove(),null===(e=this.resizeObserver)||void 0===e||e.disconnect(),null===(i=this.intersectionObserver)||void 0===i||i.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let t=this.view.dom.getBoundingClientRect(),e=1,i=1,s=!1;if("fixed"==this.position&&this.manager.tooltipViews.length){let{dom:t}=this.manager.tooltipViews[0];if(bt.gecko)s=t.offsetParent!=this.container.ownerDocument.body;else if(t.style.top==Do&&"0px"==t.style.left){let e=t.getBoundingClientRect();s=Math.abs(e.top+1e4)>1||Math.abs(e.left)>1}}if(s||"absolute"==this.position)if(this.parent){let t=this.parent.getBoundingClientRect();t.width&&t.height&&(e=t.width/this.parent.offsetWidth,i=t.height/this.parent.offsetHeight)}else({scaleX:e,scaleY:i}=this.view.viewState);return{editor:t,parent:this.parent?this.container.getBoundingClientRect():t,pos:this.manager.tooltips.map(((t,e)=>{let i=this.manager.tooltipViews[e];return i.getCoords?i.getCoords(t.pos):this.view.coordsAtPos(t.pos)})),size:this.manager.tooltipViews.map((({dom:t})=>t.getBoundingClientRect())),space:this.view.state.facet(Eo).tooltipSpace(this.view),scaleX:e,scaleY:i,makeAbsolute:s}}writeMeasure(t){var e;if(t.makeAbsolute){this.madeAbsolute=!0,this.position="absolute";for(let t of this.manager.tooltipViews)t.dom.style.position="absolute"}let{editor:i,space:s,scaleX:o,scaleY:n}=t,r=[];for(let l=0;l<this.manager.tooltips.length;l++){let h=this.manager.tooltips[l],a=this.manager.tooltipViews[l],{dom:c}=a,d=t.pos[l],u=t.size[l];if(!d||d.bottom<=Math.max(i.top,s.top)||d.top>=Math.min(i.bottom,s.bottom)||d.right<Math.max(i.left,s.left)-.1||d.left>Math.min(i.right,s.right)+.1){c.style.top=Do;continue}let f=h.arrow?a.dom.querySelector(".cm-tooltip-arrow"):null,p=f?7:0,g=u.right-u.left,m=null!==(e=Ro.get(a))&&void 0!==e?e:u.bottom-u.top,w=a.offset||Ho,v=this.view.textDirection==_t.LTR,b=u.width>s.right-s.left?v?s.left:s.right-u.width:v?Math.min(d.left-(f?14:0)+w.x,s.right-g):Math.max(s.left,d.left-g+(f?14:0)-w.x),y=this.above[l];!h.strictSide&&(y?d.top-(u.bottom-u.top)-w.y<s.top:d.bottom+(u.bottom-u.top)+w.y>s.bottom)&&y==s.bottom-d.bottom>d.top-s.top&&(y=this.above[l]=!y);let S=(y?d.top-s.top:s.bottom-d.bottom)-p;if(S<m&&!1!==a.resize){if(S<this.view.defaultLineHeight){c.style.top=Do;continue}Ro.set(a,m),c.style.height=(m=S)/n+"px"}else c.style.height&&(c.style.height="");let x=y?d.top-m-p-w.y:d.bottom+p+w.y,M=b+g;if(!0!==a.overlap)for(let t of r)t.left<M&&t.right>b&&t.top<x+m&&t.bottom>x&&(x=y?t.top-m-2-p:t.bottom+p+2);if("absolute"==this.position?(c.style.top=(x-t.parent.top)/n+"px",c.style.left=(b-t.parent.left)/o+"px"):(c.style.top=x/n+"px",c.style.left=b/o+"px"),f){let t=d.left+(v?w.x:-w.x)-(b+14-7);f.style.left=t/o+"px"}!0!==a.overlap&&r.push({left:b,top:x,right:M,bottom:x+m}),c.classList.toggle("cm-tooltip-above",y),c.classList.toggle("cm-tooltip-below",!y),a.positioned&&a.positioned(t.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let t of this.manager.tooltipViews)t.dom.style.top=Do}},{eventObservers:{scroll(){this.maybeMeasure()}}}),Bo=Ms.baseTheme({".cm-tooltip":{zIndex:100,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:"14px",position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}}),Ho={x:0,y:0},Po=s.define({enables:[Lo,Bo]}),Vo=s.define({combine:t=>t.reduce(((t,e)=>t.concat(e)),[])});class No{static create(t){return new No(t)}constructor(t){this.view=t,this.mounted=!1,this.dom=document.createElement("div"),this.dom.classList.add("cm-tooltip-hover"),this.manager=new To(t,Vo,((t,e)=>this.createHostedView(t,e)),(t=>t.dom.remove()))}createHostedView(t,e){let i=t.create(this.view);return i.dom.classList.add("cm-tooltip-section"),this.dom.insertBefore(i.dom,e?e.dom.nextSibling:this.dom.firstChild),this.mounted&&i.mount&&i.mount(this.view),i}mount(t){for(let e of this.manager.tooltipViews)e.mount&&e.mount(t);this.mounted=!0}positioned(t){for(let e of this.manager.tooltipViews)e.positioned&&e.positioned(t)}update(t){this.manager.update(t)}destroy(){var t;for(let e of this.manager.tooltipViews)null===(t=e.destroy)||void 0===t||t.call(e)}passProp(t){let e;for(let i of this.manager.tooltipViews){let s=i[t];if(void 0!==s)if(void 0===e)e=s;else if(e!==s)return}return e}get offset(){return this.passProp("offset")}get getCoords(){return this.passProp("getCoords")}get overlap(){return this.passProp("overlap")}get resize(){return this.passProp("resize")}}const Wo=Po.compute([Vo],(t=>{let e=t.facet(Vo);return 0===e.length?null:{pos:Math.min(...e.map((t=>t.pos))),end:Math.max(...e.map((t=>{var e;return null!==(e=t.end)&&void 0!==e?e:t.pos}))),create:No.create,above:e[0].above,arrow:e.some((t=>t.arrow))}}));class zo{constructor(t,e,i,s,o){this.view=t,this.source=e,this.field=i,this.setHover=s,this.hoverTime=o,this.hoverTimeout=-1,this.restartTimeout=-1,this.pending=null,this.lastMove={x:0,y:0,target:t.dom,time:0},this.checkHover=this.checkHover.bind(this),t.dom.addEventListener("mouseleave",this.mouseleave=this.mouseleave.bind(this)),t.dom.addEventListener("mousemove",this.mousemove=this.mousemove.bind(this))}update(){this.pending&&(this.pending=null,clearTimeout(this.restartTimeout),this.restartTimeout=setTimeout((()=>this.startHover()),20))}get active(){return this.view.state.field(this.field)}checkHover(){if(this.hoverTimeout=-1,this.active.length)return;let t=Date.now()-this.lastMove.time;t<this.hoverTime?this.hoverTimeout=setTimeout(this.checkHover,this.hoverTime-t):this.startHover()}startHover(){clearTimeout(this.restartTimeout);let{view:t,lastMove:e}=this,i=t.docView.nearest(e.target);if(!i)return;let s,o=1;if(i instanceof xt)s=i.posAtStart;else{if(s=t.posAtCoords(e),null==s)return;let i=t.coordsAtPos(s);if(!i||e.y<i.top||e.y>i.bottom||e.x<i.left-t.defaultCharacterWidth||e.x>i.right+t.defaultCharacterWidth)return;let n=t.bidiSpans(t.state.doc.lineAt(s)).find((t=>t.from<=s&&t.to>=s)),r=n&&n.dir==_t.RTL?-1:1;o=e.x<i.left?-r:r}let n=this.source(t,s,o);if(null==n?void 0:n.then){let e=this.pending={pos:s};n.then((i=>{this.pending==e&&(this.pending=null,!i||Array.isArray(i)&&!i.length||t.dispatch({effects:this.setHover.of(Array.isArray(i)?i:[i])}))}),(e=>Me(t.state,e,"hover tooltip")))}else!n||Array.isArray(n)&&!n.length||t.dispatch({effects:this.setHover.of(Array.isArray(n)?n:[n])})}get tooltip(){let t=this.view.plugin(Lo),e=t?t.manager.tooltips.findIndex((t=>t.create==No.create)):-1;return e>-1?t.manager.tooltipViews[e]:null}mousemove(t){var e,i;this.lastMove={x:t.clientX,y:t.clientY,target:t.target,time:Date.now()},this.hoverTimeout<0&&(this.hoverTimeout=setTimeout(this.checkHover,this.hoverTime));let{active:s,tooltip:o}=this;if(s.length&&o&&!function(t,e){let i=t.getBoundingClientRect();return e.clientX>=i.left-Fo&&e.clientX<=i.right+Fo&&e.clientY>=i.top-Fo&&e.clientY<=i.bottom+Fo}(o.dom,t)||this.pending){let{pos:o}=s[0]||this.pending,n=null!==(i=null===(e=s[0])||void 0===e?void 0:e.end)&&void 0!==i?i:o;(o==n?this.view.posAtCoords(this.lastMove)==o:function(t,e,i,s,o,n){let r=t.scrollDOM.getBoundingClientRect(),l=t.documentTop+t.documentPadding.top+t.contentHeight;if(r.left>s||r.right<s||r.top>o||Math.min(r.bottom,l)<o)return!1;let h=t.posAtCoords({x:s,y:o},!1);return h>=e&&h<=i}(this.view,o,n,t.clientX,t.clientY))||(this.view.dispatch({effects:this.setHover.of([])}),this.pending=null)}}mouseleave(t){clearTimeout(this.hoverTimeout),this.hoverTimeout=-1;let{active:e}=this;if(e.length){let{tooltip:e}=this;e&&e.dom.contains(t.relatedTarget)?this.watchTooltipLeave(e.dom):this.view.dispatch({effects:this.setHover.of([])})}}watchTooltipLeave(t){let e=i=>{t.removeEventListener("mouseleave",e),this.active.length&&!this.view.dom.contains(i.relatedTarget)&&this.view.dispatch({effects:this.setHover.of([])})};t.addEventListener("mouseleave",e)}destroy(){clearTimeout(this.hoverTimeout),this.view.dom.removeEventListener("mouseleave",this.mouseleave),this.view.dom.removeEventListener("mousemove",this.mousemove)}}const Fo=4;function Ko(t,e={}){let s=a.define(),o=f.define({create:()=>[],update(t,o){if(t.length&&(e.hideOnChange&&(o.docChanged||o.selection)?t=[]:e.hideOn&&(t=t.filter((t=>!e.hideOn(o,t)))),o.docChanged)){let e=[];for(let s of t){let t=o.changes.mapPos(s.pos,-1,i.TrackDel);if(null!=t){let i=Object.assign(Object.create(null),s);i.pos=t,null!=i.end&&(i.end=o.changes.mapPos(i.end)),e.push(i)}}t=e}for(let e of o.effects)e.is(s)&&(t=e.value),e.is(qo)&&(t=[]);return t},provide:t=>Vo.from(t)});return[o,De.define((i=>new zo(i,t,o,s,e.hoverTime||300))),Wo]}function Io(t,e){let i=t.plugin(Lo);if(!i)return null;let s=i.manager.tooltips.indexOf(e);return s<0?null:i.manager.tooltipViews[s]}const qo=a.define(),Yo=qo.of(null);const _o=s.define({combine(t){let e,i;for(let s of t)e=e||s.topContainer,i=i||s.bottomContainer;return{topContainer:e,bottomContainer:i}}});function jo(t,e){let i=t.plugin(Xo),s=i?i.specs.indexOf(e):-1;return s>-1?i.panels[s]:null}const Xo=De.fromClass(class{constructor(t){this.input=t.state.facet($o),this.specs=this.input.filter((t=>t)),this.panels=this.specs.map((e=>e(t)));let e=t.state.facet(_o);this.top=new Go(t,!0,e.topContainer),this.bottom=new Go(t,!1,e.bottomContainer),this.top.sync(this.panels.filter((t=>t.top))),this.bottom.sync(this.panels.filter((t=>!t.top)));for(let t of this.panels)t.dom.classList.add("cm-panel"),t.mount&&t.mount()}update(t){let e=t.state.facet(_o);this.top.container!=e.topContainer&&(this.top.sync([]),this.top=new Go(t.view,!0,e.topContainer)),this.bottom.container!=e.bottomContainer&&(this.bottom.sync([]),this.bottom=new Go(t.view,!1,e.bottomContainer)),this.top.syncClasses(),this.bottom.syncClasses();let i=t.state.facet($o);if(i!=this.input){let e=i.filter((t=>t)),s=[],o=[],n=[],r=[];for(let i of e){let e,l=this.specs.indexOf(i);l<0?(e=i(t.view),r.push(e)):(e=this.panels[l],e.update&&e.update(t)),s.push(e),(e.top?o:n).push(e)}this.specs=e,this.panels=s,this.top.sync(o),this.bottom.sync(n);for(let t of r)t.dom.classList.add("cm-panel"),t.mount&&t.mount()}else for(let e of this.panels)e.update&&e.update(t)}destroy(){this.top.sync([]),this.bottom.sync([])}},{provide:t=>Ms.scrollMargins.of((e=>{let i=e.plugin(t);return i&&{top:i.top.scrollMargin(),bottom:i.bottom.scrollMargin()}}))});class Go{constructor(t,e,i){this.view=t,this.top=e,this.container=i,this.dom=void 0,this.classes="",this.panels=[],this.syncClasses()}sync(t){for(let e of this.panels)e.destroy&&t.indexOf(e)<0&&e.destroy();this.panels=t,this.syncDOM()}syncDOM(){if(0==this.panels.length)return void(this.dom&&(this.dom.remove(),this.dom=void 0));if(!this.dom){this.dom=document.createElement("div"),this.dom.className=this.top?"cm-panels cm-panels-top":"cm-panels cm-panels-bottom",this.dom.style[this.top?"top":"bottom"]="0";let t=this.container||this.view.dom;t.insertBefore(this.dom,this.top?t.firstChild:null)}let t=this.dom.firstChild;for(let e of this.panels)if(e.dom.parentNode==this.dom){for(;t!=e.dom;)t=Uo(t);t=t.nextSibling}else this.dom.insertBefore(e.dom,t);for(;t;)t=Uo(t)}scrollMargin(){return!this.dom||this.container?0:Math.max(0,this.top?this.dom.getBoundingClientRect().bottom-Math.max(0,this.view.scrollDOM.getBoundingClientRect().top):Math.min(innerHeight,this.view.scrollDOM.getBoundingClientRect().bottom)-this.dom.getBoundingClientRect().top)}syncClasses(){if(this.container&&this.classes!=this.view.themeClasses){for(let t of this.classes.split(" "))t&&this.container.classList.remove(t);for(let t of(this.classes=this.view.themeClasses).split(" "))t&&this.container.classList.add(t)}}}function Uo(t){let e=t.nextSibling;return t.remove(),e}const $o=s.define({enables:Xo});class Qo extends t{compare(t){return this==t||this.constructor==t.constructor&&this.eq(t)}eq(t){return!1}destroy(t){}}Qo.prototype.elementClass="",Qo.prototype.toDOM=void 0,Qo.prototype.mapMode=i.TrackBefore,Qo.prototype.startSide=Qo.prototype.endSide=-1,Qo.prototype.point=!0;const Zo=s.define(),Jo={class:"",renderEmptyElements:!1,elementStyle:"",markers:()=>e.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{}},tn=s.define();function en(t){return[on(),tn.of(Object.assign(Object.assign({},Jo),t))]}const sn=s.define({combine:t=>t.some((t=>t))});function on(t){let e=[nn];return t&&!1===t.fixed&&e.push(sn.of(!0)),e}const nn=De.fromClass(class{constructor(t){this.view=t,this.prevViewport=t.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=t.state.facet(tn).map((e=>new an(t,e)));for(let t of this.gutters)this.dom.appendChild(t.dom);this.fixed=!t.state.facet(sn),this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),t.scrollDOM.insertBefore(this.dom,t.contentDOM)}update(t){if(this.updateGutters(t)){let e=this.prevViewport,i=t.view.viewport,s=Math.min(e.to,i.to)-Math.max(e.from,i.from);this.syncGutters(s<.8*(i.to-i.from))}t.geometryChanged&&(this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px"),this.view.state.facet(sn)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":""),this.prevViewport=t.view.viewport}syncGutters(t){let i=this.dom.nextSibling;t&&this.dom.remove();let s=e.iter(this.view.state.facet(Zo),this.view.viewport.from),o=[],n=this.gutters.map((t=>new hn(t,this.view.viewport,-this.view.documentPadding.top)));for(let t of this.view.viewportLineBlocks)if(o.length&&(o=[]),Array.isArray(t.type)){let e=!0;for(let i of t.type)if(i.type==Pt.Text&&e){ln(s,o,i.from);for(let t of n)t.line(this.view,i,o);e=!1}else if(i.widget)for(let t of n)t.widget(this.view,i)}else if(t.type==Pt.Text){ln(s,o,t.from);for(let e of n)e.line(this.view,t,o)}else if(t.widget)for(let e of n)e.widget(this.view,t);for(let t of n)t.finish();t&&this.view.scrollDOM.insertBefore(this.dom,i)}updateGutters(t){let i=t.startState.facet(tn),s=t.state.facet(tn),o=t.docChanged||t.heightChanged||t.viewportChanged||!e.eq(t.startState.facet(Zo),t.state.facet(Zo),t.view.viewport.from,t.view.viewport.to);if(i==s)for(let e of this.gutters)e.update(t)&&(o=!0);else{o=!0;let e=[];for(let o of s){let s=i.indexOf(o);s<0?e.push(new an(this.view,o)):(this.gutters[s].update(t),e.push(this.gutters[s]))}for(let t of this.gutters)t.dom.remove(),e.indexOf(t)<0&&t.destroy();for(let t of e)this.dom.appendChild(t.dom);this.gutters=e}return o}destroy(){for(let t of this.gutters)t.destroy();this.dom.remove()}},{provide:t=>Ms.scrollMargins.of((e=>{let i=e.plugin(t);return i&&0!=i.gutters.length&&i.fixed?e.textDirection==_t.LTR?{left:i.dom.offsetWidth*e.scaleX}:{right:i.dom.offsetWidth*e.scaleX}:null}))});function rn(t){return Array.isArray(t)?t:[t]}function ln(t,e,i){for(;t.value&&t.from<=i;)t.from==i&&e.push(t.value),t.next()}class hn{constructor(t,i,s){this.gutter=t,this.height=s,this.i=0,this.cursor=e.iter(t.markers,i.from)}addElement(t,e,i){let{gutter:s}=this,o=(e.top-this.height)/t.scaleY,n=e.height/t.scaleY;if(this.i==s.elements.length){let e=new cn(t,n,o,i);s.elements.push(e),s.dom.appendChild(e.dom)}else s.elements[this.i].update(t,n,o,i);this.height=e.bottom,this.i++}line(t,e,i){let s=[];ln(this.cursor,s,e.from),i.length&&(s=s.concat(i));let o=this.gutter.config.lineMarker(t,e,s);o&&s.unshift(o);let n=this.gutter;(0!=s.length||n.config.renderEmptyElements)&&this.addElement(t,e,s)}widget(t,e){let i=this.gutter.config.widgetMarker(t,e.widget,e);i&&this.addElement(t,e,[i])}finish(){let t=this.gutter;for(;t.elements.length>this.i;){let e=t.elements.pop();t.dom.removeChild(e.dom),e.destroy()}}}class an{constructor(t,e){this.view=t,this.config=e,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let i in e.domEventHandlers)this.dom.addEventListener(i,(s=>{let o,n=s.target;if(n!=this.dom&&this.dom.contains(n)){for(;n.parentNode!=this.dom;)n=n.parentNode;let t=n.getBoundingClientRect();o=(t.top+t.bottom)/2}else o=s.clientY;let r=t.lineBlockAtHeight(o-t.documentTop);e.domEventHandlers[i](t,r,s)&&s.preventDefault()}));this.markers=rn(e.markers(t)),e.initialSpacer&&(this.spacer=new cn(t,0,0,[e.initialSpacer(t)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(t){let i=this.markers;if(this.markers=rn(this.config.markers(t.view)),this.spacer&&this.config.updateSpacer){let e=this.config.updateSpacer(this.spacer.markers[0],t);e!=this.spacer.markers[0]&&this.spacer.update(t.view,0,0,[e])}let s=t.view.viewport;return!e.eq(this.markers,i,s.from,s.to)||!!this.config.lineMarkerChange&&this.config.lineMarkerChange(t)}destroy(){for(let t of this.elements)t.destroy()}}class cn{constructor(t,e,i,s){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(t,e,i,s)}update(t,e,i,s){this.height!=e&&(this.height=e,this.dom.style.height=e+"px"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+"px":""),function(t,e){if(t.length!=e.length)return!1;for(let i=0;i<t.length;i++)if(!t[i].compare(e[i]))return!1;return!0}(this.markers,s)||this.setMarkers(t,s)}setMarkers(t,e){let i="cm-gutterElement",s=this.dom.firstChild;for(let o=0,n=0;;){let r=n,l=o<e.length?e[o++]:null,h=!1;if(l){let t=l.elementClass;t&&(i+=" "+t);for(let t=n;t<this.markers.length;t++)if(this.markers[t].compare(l)){r=t,h=!0;break}}else r=this.markers.length;for(;n<r;){let t=this.markers[n++];if(t.toDOM){t.destroy(s);let e=s.nextSibling;s.remove(),s=e}}if(!l)break;l.toDOM&&(h?s=s.nextSibling:this.dom.insertBefore(l.toDOM(t),s)),h&&n++}this.dom.className=i,this.markers=e}destroy(){this.setMarkers(null,[])}}const dn=s.define(),un=s.define({combine:t=>v(t,{formatNumber:String,domEventHandlers:{}},{domEventHandlers(t,e){let i=Object.assign({},t);for(let t in e){let s=i[t],o=e[t];i[t]=s?(t,e,i)=>s(t,e,i)||o(t,e,i):o}return i}})});class fn extends Qo{constructor(t){super(),this.number=t}eq(t){return this.number==t.number}toDOM(){return document.createTextNode(this.number)}}function pn(t,e){return t.state.facet(un).formatNumber(e,t.state)}const gn=tn.compute([un],(t=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers:t=>t.state.facet(dn),lineMarker:(t,e,i)=>i.some((t=>t.toDOM))?null:new fn(pn(t,t.state.doc.lineAt(e.from).number)),widgetMarker:()=>null,lineMarkerChange:t=>t.startState.facet(un)!=t.state.facet(un),initialSpacer:t=>new fn(pn(t,wn(t.state.doc.lines))),updateSpacer(t,e){let i=pn(e.view,wn(e.view.state.doc.lines));return i==t.number?t:new fn(i)},domEventHandlers:t.facet(un).domEventHandlers})));function mn(t={}){return[un.of(t),on(),gn]}function wn(t){let e=9;for(;e<t;)e=10*e+9;return e}const vn=new class extends Qo{constructor(){super(...arguments),this.elementClass="cm-activeLineGutter"}},bn=Zo.compute(["selection"],(t=>{let i=[],s=-1;for(let e of t.selection.ranges){let o=t.doc.lineAt(e.head).from;o>s&&(s=o,i.push(vn.range(o)))}return e.of(i)}));function yn(){return bn}const Sn=new Map;function xn(t){return De.define((e=>({decorations:t.createDeco(e),update(e){this.decorations=t.updateDeco(e,this.decorations)}})),{decorations:t=>t.decorations})}const Mn=xn(new oo({regexp:/\t| +/g,decoration:t=>function(t){let e=Sn.get(t);return e||Sn.set(t,e=Vt.mark({attributes:"\t"===t?{class:"cm-highlightTab"}:{class:"cm-highlightSpace","data-display":t.replace(/ /g,"·")}})),e}(t[0]),boundary:/\S/}));const kn=xn(new oo({regexp:/\s+$/g,decoration:Vt.mark({class:"cm-trailingSpace"}),boundary:/\S/}));const Cn={HeightMap:Wi,HeightOracle:Bi,MeasuredHeights:Hi,QueryType:Vi,ChangedRange:ze,computeOrder:re,moveVisually:ae};var An=Object.freeze({__proto__:null,BidiSpan:ee,BlockInfo:Pi,get BlockType(){return Pt},Decoration:Vt,get Direction(){return _t},EditorView:Ms,GutterMarker:Qo,MatchDecorator:oo,RectangleMarker:Ws,ViewPlugin:De,ViewUpdate:Fe,WidgetType:Ht,__test:Cn,closeHoverTooltips:Yo,crosshairCursor:Ao,drawSelection:js,dropCursor:io,getDrawSelectionConfig:function(t){return t.facet(_s)},getPanel:jo,getTooltip:Io,gutter:en,gutterLineClass:Zo,gutters:on,hasHoverTooltips:function(t){return t.facet(Vo).some((t=>t))},highlightActiveLine:mo,highlightActiveLineGutter:yn,highlightSpecialChars:co,highlightTrailingWhitespace:function(){return kn},highlightWhitespace:function(){return Mn},hoverTooltip:Ko,keymap:Rs,layer:qs,lineNumberMarkers:dn,lineNumbers:mn,logException:Me,panels:function(t){return t?[_o.of(t)]:[]},placeholder:function(t){return De.fromClass(class{constructor(e){this.view=e,this.placeholder=t?Vt.set([Vt.widget({widget:new bo(t),side:1}).range(0)]):Vt.none}get decorations(){return this.view.state.doc.length?Vt.none:this.placeholder}},{decorations:t=>t.decorations})},rectangularSelection:Mo,repositionTooltips:function(t){let e=t.plugin(Lo);e&&e.maybeMeasure()},runScopeHandlers:Hs,scrollPastEnd:function(){return[go,Ee.of((t=>{var e;return(null===(e=t.plugin(go))||void 0===e?void 0:e.attrs)||null}))]},showPanel:$o,showTooltip:Po,tooltips:function(t={}){return Eo.of(t)}});export{_t as D,Ms as E,Qo as G,k as S,De as V,Ht as W,Vt as a,jo as b,$o as c,mn as d,yn as e,co as f,Io as g,Ko as h,js as i,io as j,Rs as k,Me as l,Mo as m,Ao as n,mo as o,en as p,An as q,Hs as r,Po as s};
//# sourceMappingURL=codemirror_view-C0PMO2z_.js.map
This source diff could not be displayed because it is too large. You can view the blob instead.
const e=(e,t,n=globalThis)=>{const r=Symbol.for(e),s=r in n;return[s?n[r]:Object.defineProperty(n,r,{value:t})[r],s]};Promise.withResolvers||(Promise.withResolvers=function(){var e,t,n=new this((function(n,r){e=n,t=r}));return{resolve:e,reject:t,promise:n}});const t=(e,t=document)=>[...t.querySelectorAll(e)],n=(e,t=document)=>{const n=(new XPathEvaluator).createExpression(e).evaluate(t,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE),r=[];for(let e=0,{snapshotLength:t}=n;e<t;e++)r.push(n.snapshotItem(e));return r},r=Object.getOwnPropertyDescriptors(Response.prototype),s=e=>"function"==typeof e,o={get:(e,t)=>r.hasOwnProperty(t)?((e,t,{get:n,value:r})=>n||!s(r)?e.then((e=>e[t])):(...n)=>e.then((e=>e[t](...n))))(e,t,r[t]):((e,t)=>s(t)?t.bind(e):t)(e,e[t])};var a=(e,...t)=>new Proxy(fetch(e,...t),o);const i="object"==typeof self?self:globalThis,l=e=>((e,t)=>{const n=(t,n)=>(e.set(n,t),t),r=s=>{if(e.has(s))return e.get(s);const[o,a]=t[s];switch(o){case 0:case-1:return n(a,s);case 1:{const e=n([],s);for(const t of a)e.push(r(t));return e}case 2:{const e=n({},s);for(const[t,n]of a)e[r(t)]=r(n);return e}case 3:return n(new Date(a),s);case 4:{const{source:e,flags:t}=a;return n(new RegExp(e,t),s)}case 5:{const e=n(new Map,s);for(const[t,n]of a)e.set(r(t),r(n));return e}case 6:{const e=n(new Set,s);for(const t of a)e.add(r(t));return e}case 7:{const{name:e,message:t}=a;return n(new i[e](t),s)}case 8:return n(BigInt(a),s);case"BigInt":return n(Object(BigInt(a)),s)}return n(new i[o](a),s)};return r})(new Map,e)(0),c="",{toString:p}={},{keys:f}=Object,u=e=>{const t=typeof e;if("object"!==t||!e)return[0,t];const n=p.call(e).slice(8,-1);switch(n){case"Array":return[1,c];case"Object":return[2,c];case"Date":return[3,c];case"RegExp":return[4,c];case"Map":return[5,c];case"Set":return[6,c]}return n.includes("Array")?[1,n]:n.includes("Error")?[7,n]:[2,n]},d=([e,t])=>0===e&&("function"===t||"symbol"===t),h=(e,{json:t,lossy:n}={})=>{const r=[];return((e,t,n,r)=>{const s=(e,t)=>{const s=r.push(e)-1;return n.set(t,s),s},o=r=>{if(n.has(r))return n.get(r);let[a,i]=u(r);switch(a){case 0:{let t=r;switch(i){case"bigint":a=8,t=r.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+i);t=null;break;case"undefined":return s([-1],r)}return s([a,t],r)}case 1:{if(i)return s([i,[...r]],r);const e=[],t=s([a,e],r);for(const t of r)e.push(o(t));return t}case 2:{if(i)switch(i){case"BigInt":return s([i,r.toString()],r);case"Boolean":case"Number":case"String":return s([i,r.valueOf()],r)}if(t&&"toJSON"in r)return o(r.toJSON());const n=[],l=s([a,n],r);for(const t of f(r))!e&&d(u(r[t]))||n.push([o(t),o(r[t])]);return l}case 3:return s([a,r.toISOString()],r);case 4:{const{source:e,flags:t}=r;return s([a,{source:e,flags:t}],r)}case 5:{const t=[],n=s([a,t],r);for(const[n,s]of r)(e||!d(u(n))&&!d(u(s)))&&t.push([o(n),o(s)]);return n}case 6:{const t=[],n=s([a,t],r);for(const n of r)!e&&d(u(n))||t.push(o(n));return n}}const{message:l}=r;return s([a,{name:i,message:l}],r)};return o})(!(t||n),!!t,new Map,r)(e),r},{parse:m,stringify:y}=JSON,g={json:!0,lossy:!0};var _=Object.freeze({__proto__:null,parse:e=>l(m(e)),stringify:e=>y(h(e,g))});const w="64e10b34-2bf7-4616-9668-f99de5aa046e",b="M"+w,v="T"+w,E="array",k="function",j="null",x="number",R="object",A="string",T="symbol",S="undefined",N="apply",O="construct",P="defineProperty",I="deleteProperty",$="get",M="getOwnPropertyDescriptor",F="getPrototypeOf",C="has",W="isExtensible",D="ownKeys",L="preventExtensions",H="set",B="setPrototypeOf",U="delete",{isArray:J}=Array;let{SharedArrayBuffer:q,window:G}=globalThis,{notify:z,wait:Y,waitAsync:V}=Atomics,K=null;V||(V=e=>({value:new Promise((t=>{let n=new Worker("data:application/javascript,onmessage%3D(%7Bdata%3Ab%7D)%3D%3E(Atomics.wait(b%2C0)%2CpostMessage(0))");n.onmessage=t,n.postMessage(e)}))}));try{new q(4)}catch(e){q=ArrayBuffer;const t=new WeakMap;if(G){const e=new Map,{prototype:{postMessage:n}}=Worker,r=t=>{const n=t.data?.[w];if(!J(n)){t.stopImmediatePropagation();const{id:r,sb:s}=n;e.get(r)(s)}};K=function(e,...s){const o=e?.[w];if(J(o)){const[e,n]=o;t.set(n,e),this.addEventListener("message",r)}return n.call(this,e,...s)},V=n=>({value:new Promise((r=>{e.set(t.get(n),r)})).then((r=>{e.delete(t.get(n)),t.delete(n);for(let e=0;e<r.length;e++)n[e]=r[e];return"ok"}))})}else{const e=(e,t)=>({[w]:{id:e,sb:t}});z=n=>{postMessage(e(t.get(n),n))},addEventListener("message",(e=>{const n=e.data?.[w];if(J(n)){const[e,r]=n;t.set(r,e)}}))}}
/*! (c) Andrea Giammarchi - ISC */const{Int32Array:X,Map:Z,Uint16Array:Q}=globalThis,{BYTES_PER_ELEMENT:ee}=X,{BYTES_PER_ELEMENT:te}=Q,ne=new WeakSet,re=new WeakMap,se={value:{then:e=>e()}};let oe=0;const ae=(e,{parse:t=JSON.parse,stringify:n=JSON.stringify,transform:r,interrupt:s}=JSON)=>{if(!re.has(e)){const o=K||e.postMessage,a=(t,...n)=>o.call(e,{[w]:n},{transfer:t}),i=typeof s===k?s:s?.handler,l=s?.delay||42,c=new TextDecoder("utf-16"),p=(e,t)=>e?V(t,0):(i?((e,t,n)=>{for(;"timed-out"===Y(e,0,0,t);)n()})(t,l,i):Y(t,0),se);let f=!1;re.set(e,new Proxy(new Z,{[C]:(e,t)=>"string"==typeof t&&!t.startsWith("_"),[$]:(n,s)=>"then"===s?null:(...n)=>{const o=oe++;let i=new X(new q(2*ee)),l=[];ne.has(n.at(-1)||l)&&ne.delete(l=n.pop()),a(l,o,i,s,r?n.map(r):n);const u=e!==globalThis;let d=0;return f&&u&&(d=setTimeout(console.warn,1e3,`💀🔒 - Possible deadlock if proxy.${s}(...args) is awaited`)),p(u,i).value.then((()=>{clearTimeout(d);const e=i[1];if(!e)return;const n=te*e;return i=new X(new q(n+n%ee)),a([],o,i),p(u,i).value.then((()=>t(c.decode(new Q(i.buffer).slice(0,e)))))}))},[H](t,s,o){const a=typeof o;if(a!==k)throw new Error(`Unable to assign ${s} as ${a}`);if(!t.size){const s=new Z;e.addEventListener("message",(async e=>{const o=e.data?.[w];if(J(o)){e.stopImmediatePropagation();const[a,i,...l]=o;let c;if(l.length){const[e,o]=l;if(t.has(e)){f=!0;try{const l=await t.get(e)(...o);if(void 0!==l){const e=n(r?r(l):l);s.set(a,e),i[1]=e.length}}catch(e){c=e}finally{f=!1}}else c=new Error(`Unsupported action: ${e}`);i[0]=1}else{const e=s.get(a);s.delete(a);for(let t=new Q(i.buffer),n=0;n<e.length;n++)t[n]=e.charCodeAt(n)}if(z(i,0),c)throw c}}))}return!!t.set(s,o)}}))}return re.get(e)};ae.transfer=(...e)=>(ne.add(e),e);const{isArray:ie}=Array,le=(e,t)=>t,ce=e=>typeof e===k?(e=>e())(e):e;function pe(){return this}const fe=(e,t)=>e===E?[t]:{t:e,v:t},ue=(e,t=le)=>{let n=typeof e,r=e;return n===R&&(ie(e)?(n=E,r=e.at(0)):({t:n,v:r}=e)),t(n,r)},de=(e,t)=>e===k?t:fe(e,t),he=(e,t=de)=>{const n=null===e?j:typeof e;return t(n===R&&ie(e)?E:n,e)},me=new FinalizationRegistry((([e,t,n])=>{n&&console.debug(`Held value ${String(t)} not relevant anymore`),e(t)})),ye=Object.create(null),ge=(e,t,{debug:n,handler:r,return:s,token:o=e}=ye)=>{const a=s||new Proxy(e,r||ye),i=[a,[t,e,!!n]];return!1!==o&&i.push(o),me.register(...i),a},{defineProperty:_e,deleteProperty:we,getOwnPropertyDescriptor:be,getPrototypeOf:ve,isExtensible:Ee,ownKeys:ke,preventExtensions:je,set:xe,setPrototypeOf:Re}=Reflect,{assign:Ae,create:Te}=Object,Se=ve(Int8Array),Ne=(e,t)=>{const{get:n,set:r,value:s}=e;return n&&(e.get=t(n)),r&&(e.set=t(r)),s&&(e.value=t(s)),e},Oe=e=>t=>he(t,((t,n)=>{switch(t){case j:return fe(j,n);case R:if(n===globalThis)return fe(t,null);case E:case k:return e(t,n);case"boolean":case x:case A:case S:case"bigint":return fe(t,n);case T:{if(Pe.has(n))return fe(t,Pe.get(n));let e=Symbol.keyFor(n);if(e)return fe(t,`.${e}`)}}throw new TypeError(`Unable to handle this ${t}: ${String(n)}`)})),Pe=new Map(ke(Symbol).filter((e=>typeof Symbol[e]===T)).map((e=>[Symbol[e],e]))),Ie=e=>{if(e.startsWith("."))return Symbol.for(e.slice(1));for(const[t,n]of Pe)if(n===e)return t},$e=e=>e;var Me=((e,t)=>{const n=new WeakMap;{const{addEventListener:e}=EventTarget.prototype;_e(EventTarget.prototype,"addEventListener",{value(t,r,...s){return s.at(0)?.invoke&&(n.has(this)||n.set(this,new Map),n.get(this).set(t,[].concat(s[0].invoke)),delete s[0].invoke),e.call(this,t,r,...s)}})}return function(t,r,s,...o){let a=0,i=this?.transform||$e;const l=new Map,c=new Map,{[s]:p}=t,f=o.length?Ae(Te(globalThis),...o):globalThis,u=Oe(((e,t)=>{if(!l.has(t)){let n;for(;c.has(n=a++););l.set(t,n),c.set(n,e===k?t:i(t))}return fe(e,l.get(t))})),d=e=>{p(U,fe(A,e))},h=(e,t)=>{switch(e){case R:if(null==t)return f;case E:if(typeof t===x)return c.get(t);if(!(t instanceof Se))for(const e in t)t[e]=m(t[e]);return t;case k:if(typeof t===A){const e=c.get(t)?.deref();if(e)return e;const r=function(...e){return e.at(0)instanceof Event&&(e=>{const{currentTarget:t,target:r,type:s}=e;for(const o of n.get(t||r)?.get(s)||[])e[o]()})(...e),p(N,fe(k,t),u(this),e.map(u))};return c.set(t,new WeakRef(r)),ge(t,d,{return:r,token:!1})}return c.get(t);case T:return Ie(t)}return t},m=e=>ue(e,h),y={[N]:(e,t,n)=>u(e.apply(t,n)),[O]:(e,t)=>u(new e(...t)),[P]:(e,t,n)=>u(_e(e,t,n)),[I]:(e,t)=>u(we(e,t)),[F]:e=>u(ve(e)),[$]:(e,t)=>u(e[t]),[M]:(e,t)=>{const n=be(e,t);return n?fe(R,Ne(n,u)):fe(S,n)},[C]:(e,t)=>u(t in e),[W]:e=>u(Ee(e)),[D]:e=>fe(E,ke(e).map(u)),[L]:e=>u(je(e)),[H]:(e,t,n)=>u(xe(e,t,n)),[B]:(e,t)=>u(Re(e,t)),[U](e){l.delete(c.get(e)),c.delete(e)}};return t[r]=(e,t,...n)=>{switch(e){case N:n[0]=m(n[0]),n[1]=n[1].map(m);break;case O:n[0]=n[0].map(m);break;case P:{const[e,t]=n;n[0]=m(e);const{get:r,set:s,value:o}=t;r&&(t.get=m(r)),s&&(t.set=m(s)),o&&(t.value=m(o));break}default:n=n.map(m)}return y[e](m(t),...n)},{proxy:t,[e.toLowerCase()]:f,[`is${e}Proxy`]:()=>!1}}})("Window"),Fe=(e=>{let t=0;const n=new Map,r=new Map,s=Symbol();return function(o,a,i){const l=this?.transform||$e,{[a]:c}=o,p=new Map,f=e=>{p.delete(e),c(U,u(e))},u=Oe(((e,o)=>{if(s in o)return ce(o[s]);if(e===k){if(o=l(o),!r.has(o)){let e;for(;r.has(e=String(t++)););n.set(o,e),r.set(e,o)}return fe(e,n.get(o))}if(!(o instanceof Se)){o=l(o);for(const e in o)o[e]=u(o[e])}return fe(e,o)})),d=(e,t,n)=>{const r=p.get(n)?.deref();if(r)return r;const s=t===k?(e=>pe.bind(e))(e):e,o=new Proxy(s,y);return p.set(n,new WeakRef(o)),ge(n,f,{return:o,token:!1})},h=e=>ue(e,((t,n)=>{switch(t){case R:if(null===n)return globalThis;case E:return typeof n===x?d(e,t,n):n;case k:return typeof n===A?r.get(n):d(e,t,n);case T:return Ie(n)}return n})),m=(e,t,...n)=>h(c(e,ce(t),...n)),y={[N]:(e,t,n)=>m(N,e,u(t),n.map(u)),[O]:(e,t)=>m(O,e,t.map(u)),[P]:(e,t,n)=>{const{get:r,set:s,value:o}=n;return typeof r===k&&(n.get=u(r)),typeof s===k&&(n.set=u(s)),typeof o===k&&(n.value=u(o)),m(P,e,u(t),n)},[I]:(e,t)=>m(I,e,u(t)),[F]:e=>m(F,e),[$]:(e,t)=>t===s?e:m($,e,u(t)),[M]:(e,t)=>{const n=m(M,e,u(t));return n&&Ne(n,h)},[C]:(e,t)=>t===s||m(C,e,u(t)),[W]:e=>m(W,e),[D]:e=>m(D,e).map(h),[L]:e=>m(L,e),[H]:(e,t,n)=>m(H,e,u(t),u(n)),[B]:(e,t)=>m(B,e,u(t))};o[i]=(e,t,s,o)=>{switch(e){case N:return h(t).apply(h(s),o.map(h));case U:{const e=h(t);n.delete(r.get(e)),r.delete(e)}}};const g=new Proxy(fe(R,null),y);return{[e.toLowerCase()]:g,[`is${e}Proxy`]:e=>typeof e===R&&!!e&&s in e,proxy:o}}})("Window"),Ce=typeof Worker===k?Worker:class{};const We=new WeakMap,De=(e,...t)=>{const n=ae(e,...t);if(!We.has(n)){const r=e instanceof Ce?Me:Fe;We.set(n,r.call(t.at(0),n,b,v))}return We.get(n)};De.transfer=ae.transfer;const{url:Le}=import.meta,He=/import\((['"])([^)]+?\.js)\1\)/g,Be=(e,t,n)=>`import(${t}${new URL(n,Le).href}${t})`;const Ue={object(...e){return this.string(function(e){for(var t=e[0],n=1,r=arguments.length;n<r;n++)t+=arguments[n]+e[n];return t}(...e))},string(e){for(const t of e.split(/[\r\n]+/))if(t.trim().length){/^(\s+)/.test(t)&&(e=e.replace(new RegExp("^"+RegExp.$1,"gm"),""));break}return e}},{replace:Je}="",qe=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34);/g,Ge={"&amp;":"&","&#38;":"&","&lt;":"<","&#60;":"<","&gt;":">","&#62;":">","&apos;":"'","&#39;":"'","&quot;":'"',"&#34;":'"'},ze=e=>Ge[e],Ye=new WeakMap,Ve=e=>{const t=e||console,n={buffered:Xe,stderr:(t.stderr||console.error).bind(t),stdout:(t.stdout||console.log).bind(t)};return{stderr:(...e)=>n.stderr(...e),stdout:(...e)=>n.stdout(...e),async get(e){const t=await e;return Ye.set(t,n),t}}},Ke=new TextDecoder,Xe=(e,t=10)=>{const n=[];return r=>{if(r instanceof Uint8Array)for(const s of r)s===t?e(Ke.decode(new Uint8Array(n.splice(0)))):n.push(s);else e(r)}},Ze=(e,...t)=>Ue[typeof e](e,...t),Qe=e=>Je.call(e,qe,ze),{isArray:et}=Array,{assign:tt,create:nt,defineProperties:rt,defineProperty:st,entries:ot}=Object,{all:at,resolve:it}=new Proxy(Promise,{get:(e,t)=>e[t].bind(e)}),lt=(e,t=location.href)=>new URL(e,t.replace(/^blob:/,"")).href;let ct=0;const pt=(e,t)=>({id:e.id||(e.id=`${t}-w${ct++}`),tag:e.tagName}),ft=(e,t,n,r=!1,s=CustomEvent)=>{e.dispatchEvent(new s(`${t}:${n}`,{bubbles:!0,detail:{worker:r}}))},ut=(e,t,n,r)=>({type:t,config:n,interpreter:r,io:Ye.get(r),run:(t,...n)=>e.run(r,t,...n),runAsync:(t,...n)=>e.runAsync(r,t,...n),runEvent:(...t)=>e.runEvent(r,...t)}),dt=e=>e.replace(/^(?:\n|\r\n)/,""),ht=(e,t,n,r)=>{const s=e[t].bind(e);e[t]="run"===t?(e,t,...o)=>{n&&s(e,n,...o);const a=s(e,dt(t),...o);return r&&s(e,r,...o),a}:async(e,t,...o)=>{n&&await s(e,n,...o);const a=await s(e,dt(t),...o);return r&&await s(e,r,...o),a}},mt=Symbol.for("polyscript.js_modules"),yt=new Map;st(globalThis,mt,{value:yt});const gt=new Proxy(yt,{get:(e,t)=>e.get(t),has:(e,t)=>e.has(t),ownKeys:e=>[...e.keys()]}),_t=(e,t)=>!t.startsWith("_"),wt=(e,t)=>new Proxy(e,{has:_t,get:(e,n)=>e[t][n]}),bt=(e,t,n,r)=>{if("pyodide"===e)return;const s="polyscript.js_modules";for(const e of Reflect.ownKeys(r))t.registerJSModule(n,`${s}.${e}`,wt(r,e));t.registerJSModule(n,s,r)},vt=(e,t)=>import(e).then((e=>{yt.set(t,{...e})})),Et=e=>new Promise(((t,n)=>{document.querySelector(`link[href="${e}"]`)&&t(),document.head.append(tt(document.createElement("link"),{rel:"stylesheet",href:e,onload:t,onerror:n}))})),kt=e=>/\.css/i.test(new URL(e).pathname),jt=!globalThis.window,xt=({FS:e,PATH:t,PATH_FS:n},r,s)=>{const o=n.resolve(r),a=t.dirname(o);return e.mkdirTree?e.mkdirTree(a):At(e,a),e.writeFile(o,new Uint8Array(s),{canOwn:!0})},Rt=e=>{const t=e.split("/");return t.pop(),t.join("/")},At=(e,t)=>{const n=[];for(const r of t.split("/"))"."!==r&&".."!==r&&(n.push(r),r&&e.mkdir(n.join("/")))},Tt=(e,t)=>{const n=[];for(const e of t.split("/"))switch(e){case"":case".":break;case"..":n.pop();break;default:n.push(e)}return[e.cwd()].concat(n).join("/").replace(/^\/+/,"/")},St=e=>{const t=e.map((e=>e.trim().replace(/(^[/]*|[/]*$)/g,""))).filter((e=>""!==e&&"."!==e)).join("/");return e[0].startsWith("/")?`/${t}`:t},Nt=(e,t)=>a(lt(t,Ot.get(e))).arrayBuffer(),Ot=new WeakMap,Pt=(e,t,n)=>at((e=>{for(const{files:t,to_file:n,from:r=""}of e){if(void 0!==t&&void 0!==n)throw new Error("Cannot use 'to_file' and 'files' parameters together!");if(void 0===t&&void 0===n&&r.endsWith("/"))throw new Error(`Couldn't determine the filename from the path ${r}, please supply 'to_file' parameter.`)}return e.flatMap((({from:e="",to_folder:t=".",to_file:n,files:r})=>{if(et(r))return r.map((n=>({url:St([e,n]),path:St([t,n])})));const s=n||e.slice(1+e.lastIndexOf("/"));return[{url:e,path:St([t,s])}]}))})(n).map((({url:r,path:s})=>Nt(n,r).then((n=>e.writeFile(t,s,n)))))),It=(e,t)=>t.endsWith("/")?`${t}${e.split("/").pop()}`:t,$t=(e,t)=>e.replace(/\{.+?\}/g,(e=>{if(!t.has(e))throw new SyntaxError(`Invalid template: ${e}`);return t.get(e)})),Mt=(e,t,n)=>at((e=>{const t=new Map,n=new Set,r=[];for(const[s,o]of ot(e))if(/^\{.+\}$/.test(s)){if(t.has(s))throw new SyntaxError(`Duplicated template: ${s}`);t.set(s,$t(o,t))}else{const e=$t(s,t),a=It(e,$t(o||"./",t));if(n.has(a))throw new SyntaxError(`Duplicated destination: ${a}`);n.add(a),r.push({url:e,path:a})}return r})(n).map((({url:r,path:s})=>Nt(n,r).then((n=>e.writeFile(t,s,n,r)))))),Ft=({main:e,worker:t})=>{const n=[];if(t&&jt)for(let[e,r]of ot(t))e=lt(e,Ot.get(t)),n.push(vt(e,r));if(e&&!jt)for(let[t,r]of ot(e))t=lt(t,Ot.get(e)),kt(t)?Et(t):n.push(vt(t,r));return at(n)},Ct=new WeakMap,Wt=(e,t,n)=>{"polyscript"===t&&(n.lazy_py_modules=async(...t)=>(await Ct.get(e)(t),t.map((t=>e.pyimport(t))))),e.registerJsModule(t,n)},Dt=(e,t)=>{if(e.endsWith("/*")){if(/\.(zip|tar(?:\.gz)?)$/.test(t))return RegExp.$1;throw new Error(`Unsupported archive ${t}`)}return""},Lt=(e,t,...n)=>{try{return e.runPython(Ze(t),...n)}catch(t){Ye.get(e).stderr(t)}},Ht=async(e,t,...n)=>{try{return await e.runPythonAsync(Ze(t),...n)}catch(t){Ye.get(e).stderr(t)}},Bt=async(e,t,n)=>{const[r,...s]=t.split(".");let o,a=e.globals.get(r);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,n)}catch(t){Ye.get(e).stderr(t)}};var Ut=(new TextEncoder).encode('from uio import StringIO\nimport sys\n\nclass Response:\n def __init__(self, f):\n self.raw = f\n self.encoding = "utf-8"\n self._cached = None\n\n def close(self):\n if self.raw:\n self.raw.close()\n self.raw = None\n self._cached = None\n\n @property\n def content(self):\n if self._cached is None:\n try:\n self._cached = self.raw.read()\n finally:\n self.raw.close()\n self.raw = None\n return self._cached\n\n @property\n def text(self):\n return str(self.content, self.encoding)\n\n def json(self):\n import ujson\n\n return ujson.loads(self.content)\n\n\n# TODO try to support streaming xhr requests, a-la pyodide-http\nHEADERS_TO_IGNORE = ("user-agent",)\n\n\ntry:\n import js\nexcept Exception as err:\n raise OSError("This version of urequests can only be used in the browser")\n\n# TODO try to support streaming xhr requests, a-la pyodide-http\n\nHEADERS_TO_IGNORE = ("user-agent",)\n\n\ndef request(\n method,\n url,\n data=None,\n json=None,\n headers={},\n stream=None,\n auth=None,\n timeout=None,\n parse_headers=True,\n):\n from js import XMLHttpRequest\n\n xhr = XMLHttpRequest.new()\n xhr.withCredentials = False\n\n if auth is not None:\n import ubinascii\n\n username, password = auth\n xhr.open(method, url, False, username, password)\n else:\n xhr.open(method, url, False)\n\n for name, value in headers.items():\n if name.lower() not in HEADERS_TO_IGNORE:\n xhr.setRequestHeader(name, value)\n\n if timeout:\n xhr.timeout = int(timeout * 1000)\n\n if json is not None:\n assert data is None\n import ujson\n\n data = ujson.dumps(json)\n # s.write(b"Content-Type: application/json\\r\\n")\n xhr.setRequestHeader("Content-Type", "application/json")\n\n xhr.send(data)\n\n # Emulates the construction process in the original urequests\n resp = Response(StringIO(xhr.responseText))\n resp.status_code = xhr.status\n resp.reason = xhr.statusText\n resp.headers = xhr.getAllResponseHeaders()\n\n return resp\n\n\n# Other methods - head, post, put, patch, delete - are not used by\n# mip and therefore not included\n\n\ndef get(url, **kw):\n return request("GET", url, **kw)\n\n\n# Content below this line is from the Micropython MIP package and is covered\n# by the applicable MIT license:\n# \n# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, \n# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER \n# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING \n# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER \n# DEALINGS IN THE SOFTWARE.\n\n# MicroPython package installer\n# MIT license; Copyright (c) 2022 Jim Mussared\n\n\n_PACKAGE_INDEX = const("https://micropython.org/pi/v2")\n_CHUNK_SIZE = 128\n\n\n# This implements os.makedirs(os.dirname(path))\ndef _ensure_path_exists(path):\n import os\n\n split = path.split("/")\n\n # Handle paths starting with "/".\n if not split[0]:\n split.pop(0)\n split[0] = "/" + split[0]\n\n prefix = ""\n for i in range(len(split) - 1):\n prefix += split[i]\n try:\n os.stat(prefix)\n except:\n os.mkdir(prefix)\n prefix += "/"\n\n\n# Copy from src (stream) to dest (function-taking-bytes)\ndef _chunk(src, dest):\n buf = memoryview(bytearray(_CHUNK_SIZE))\n while True:\n n = src.readinto(buf)\n if n == 0:\n break\n dest(buf if n == _CHUNK_SIZE else buf[:n])\n\n\n# Check if the specified path exists and matches the hash.\ndef _check_exists(path, short_hash):\n import os\n\n try:\n import binascii\n import hashlib\n\n with open(path, "rb") as f:\n hs256 = hashlib.sha256()\n _chunk(f, hs256.update)\n existing_hash = str(binascii.hexlify(hs256.digest())[: len(short_hash)], "utf-8")\n return existing_hash == short_hash\n except:\n return False\n\n\ndef _rewrite_url(url, branch=None):\n if not branch:\n branch = "HEAD"\n if url.startswith("github:"):\n url = url[7:].split("/")\n url = (\n "https://raw.githubusercontent.com/"\n + url[0]\n + "/"\n + url[1]\n + "/"\n + branch\n + "/"\n + "/".join(url[2:])\n )\n return url\n\n\ndef _download_file(url, dest):\n response = get(url)\n try:\n if response.status_code != 200:\n print("Error", response.status_code, "requesting", url)\n return False\n\n print("Copying:", dest)\n _ensure_path_exists(dest)\n with open(dest, "wb") as f:\n _chunk(response.raw, f.write)\n\n return True\n finally:\n response.close()\n\n\ndef _install_json(package_json_url, index, target, version, mpy):\n response = get(_rewrite_url(package_json_url, version))\n try:\n if response.status_code != 200:\n print("Package not found:", package_json_url)\n return False\n\n package_json = response.json()\n finally:\n response.close()\n for target_path, short_hash in package_json.get("hashes", ()):\n fs_target_path = target + "/" + target_path\n if _check_exists(fs_target_path, short_hash):\n print("Exists:", fs_target_path)\n else:\n file_url = "{}/file/{}/{}".format(index, short_hash[:2], short_hash)\n if not _download_file(file_url, fs_target_path):\n print("File not found: {} {}".format(target_path, short_hash))\n return False\n for target_path, url in package_json.get("urls", ()):\n fs_target_path = target + "/" + target_path\n if not _download_file(_rewrite_url(url, version), fs_target_path):\n print("File not found: {} {}".format(target_path, url))\n return False\n for dep, dep_version in package_json.get("deps", ()):\n if not _install_package(dep, index, target, dep_version, mpy):\n return False\n return True\n\n\ndef _install_package(package, index, target, version, mpy):\n if (\n package.startswith("http://")\n or package.startswith("https://")\n or package.startswith("github:")\n ):\n if package.endswith(".py") or package.endswith(".mpy"):\n print("Downloading {} to {}".format(package, target))\n return _download_file(\n _rewrite_url(package, version), target + "/" + package.rsplit("/")[-1]\n )\n else:\n if not package.endswith(".json"):\n if not package.endswith("/"):\n package += "/"\n package += "package.json"\n print("Installing {} to {}".format(package, target))\n else:\n if not version:\n version = "latest"\n print("Installing {} ({}) from {} to {}".format(package, version, index, target))\n\n mpy_version = (\n sys.implementation._mpy & 0xFF if mpy and hasattr(sys.implementation, "_mpy") else "py"\n )\n\n package = "{}/package/{}/{}/{}.json".format(index, mpy_version, package, version)\n\n return _install_json(package, index, target, version, mpy)\n\n\ndef install(package, index=None, target=None, version=None, mpy=True):\n if not target:\n for p in sys.path:\n if p.endswith("/lib"):\n target = p\n break\n else:\n print("Unable to find lib dir in sys.path")\n return\n\n if not index:\n index = _PACKAGE_INDEX\n\n if _install_package(package, index.rstrip("/"), target, version, mpy):\n print("Done")\n else:\n print("Package may be partially installed")\n');const Jt=(e,t)=>{try{e.mkdir(t)}catch(e){}};var qt={type:"micropython",module:(e="1.22.0-356")=>`https://cdn.jsdelivr.net/npm/@micropython/micropython-webassembly-pyscript@${e}/micropython.mjs`,async engine({loadMicroPython:e},t,n){const{stderr:r,stdout:s,get:o}=Ve({stderr:Xe(console.error),stdout:Xe(console.log)});n=n.replace(/\.m?js$/,".wasm");const a=await o(e({linebuffer:!1,stderr:r,stdout:s,url:n})),i=Gt.bind(a);return Ct.set(a,i),t.files&&await Mt(this,a,t.files),t.fetch&&await Pt(this,a,t.fetch),t.js_modules&&await Ft(t.js_modules),this.writeFile(a,"./mip.py",Ut),t.packages&&await i(t.packages),a},registerJSModule:Wt,run:Lt,runAsync:Ht,runEvent:Bt,transform:(e,t)=>e.PyProxy.toJs(t),writeFile:(e,t,n,r)=>{const{FS:s,_module:{PATH:o,PATH_FS:a}}=e,i={FS:s,PATH:o,PATH_FS:a},l=Dt(t,r);if(l){const r=t.slice(0,-1);switch("./"!==r&&s.mkdir(r),l){case"zip":{const e=new Blob([n],{type:"application/zip"});return import("./zip-D2yvzXKD.js").then((async({BlobReader:t,Uint8ArrayWriter:n,ZipReader:a})=>{const i=new a(new t(e));for(const e of await i.getEntries()){const{directory:t,filename:a}=e,i=r+a;if(t)Jt(s,i);else{Jt(s,o.dirname(i));const t=await e.getData(new n);s.writeFile(i,t,{canOwn:!0})}}i.close()}))}case"tar.gz":{const t="./_.tar.gz";return xt(i,t,n),void e.runPython(`\n import os, gzip, tarfile\n tar = tarfile.TarFile(fileobj=gzip.GzipFile(fileobj=open("${t}", "rb")))\n for f in tar:\n name = f"${r}{f.name}"\n if f.type == tarfile.DIRTYPE:\n if f.name != "./":\n os.mkdir(name.strip("/"))\n else:\n dir = os.path.dirname(name)\n if not os.path.exists(dir):\n os.mkdir(dir)\n source = tar.extractfile(f)\n with open(name, "wb") as dest:\n dest.write(source.read())\n dest.close()\n tar.close()\n os.remove("${t}")\n `)}}}return xt(i,t,n)}};async function Gt(e){const t=this.pyimport("mip");for(const n of e)t.install(n)}const zt={dict_converter:Object.fromEntries};let Yt=!1;const Vt=e=>(...t)=>{try{return Yt=!0,e(...t)}finally{Yt=!1}};let Kt=!1;const Xt=()=>{if(Kt)return;Kt=!0;const e=new WeakMap,t=e=>e.destroy(),n=n=>{for(let r=0;r<n.length;r++){const s=n[r];if("function"==typeof s&&"copy"in s){Yt=!1;let o=e.get(s)?.deref();if(!o)try{o=ge(s.copy(),t),e.set(s,new WeakRef(o))}catch(e){console.error(e)}o&&(n[r]=o),Yt=!0}}},{call:r}=Function,s=r.bind(r,r.apply);Object.defineProperties(Function.prototype,{apply:{value(e,t){return Yt&&n(t),s(this,e,t)}},call:{value(e,...t){return Yt&&n(t),s(this,e,t)}}})};var Zt={type:"pyodide",module:(e="0.25.1")=>`https://cdn.jsdelivr.net/pyodide/v${e}/full/pyodide.mjs`,async engine({loadPyodide:e},t,n){jt||"auto"!==t.experimental_create_proxy||Xt();const{stderr:r,stdout:s,get:o}=Ve(),a=n.slice(0,n.lastIndexOf("/")),i=await o(e({stderr:r,stdout:s,indexURL:a})),l=Qt.bind(i);return Ct.set(i,l),t.files&&await Mt(this,i,t.files),t.fetch&&await Pt(this,i,t.fetch),t.js_modules&&await Ft(t.js_modules),t.packages&&await l(t.packages),i},registerJSModule:Wt,run:Vt(Lt),runAsync:Vt(Ht),runEvent:Vt(Bt),transform:({ffi:{PyProxy:e}},t)=>t instanceof e?t.toJs(zt):t,writeFile:(e,t,n,r)=>{const s=Dt(t,r);if(s)return e.unpackArchive(n,s,{extractDir:t.slice(0,-1)});const{FS:o,PATH:a,_module:{PATH_FS:i}}=e;return xt({FS:o,PATH:a,PATH_FS:i},t,n)}};async function Qt(e){await this.loadPackage("micropip");const t=this.pyimport("micropip");await t.install(e,{keep_going:!0}),t.destroy()}const en="ruby-wasm-wasi",tn=en.replace(/\W+/g,"_");var nn={type:en,experimental:!0,module:(e="2.6.0")=>`https://cdn.jsdelivr.net/npm/@ruby/3.2-wasm-wasi@${e}/dist/browser/+esm`,async engine({DefaultRubyVM:e},t,n){n=n.replace(/\/browser\/\+esm$/,"/ruby.wasm");const r=await a(n).arrayBuffer(),s=await WebAssembly.compile(r),{vm:o}=await e(s);return t.files&&await Mt(this,o,t.files),t.fetch&&await Pt(this,o,t.fetch),t.js_modules&&await Ft(t.js_modules),o},registerJSModule(e,t,n){t=t.replace(/\W+/g,"__");const r=`__module_${tn}_${t}`;globalThis[r]=n,this.run(e,`require "js";$${t}=JS.global[:${r}]`),delete globalThis[r]},run:(e,t,...n)=>e.eval(Ze(t),...n),runAsync:(e,t,...n)=>e.evalAsync(Ze(t),...n),async runEvent(e,t,n){if(/^xworker\.(on\w+)$/.test(t)){const{$1:t}=RegExp,r=`__module_${tn}_event`;globalThis[r]=n,this.run(e,`require "js";$xworker.call("${t}",JS.global[:${r}])`),delete globalThis[r]}else{const r=this.run(e,`method(:${t})`);await r.call(t,e.wrap(n))}},transform:(e,t)=>t,writeFile:()=>{throw new Error(`writeFile is not supported in ${en}`)}};var rn={type:"wasmoon",module:(e="1.16.0")=>`https://cdn.jsdelivr.net/npm/wasmoon@${e}/+esm`,async engine({LuaFactory:e,LuaLibraries:t},n){const{stderr:r,stdout:s,get:o}=Ve(),a=await o((new e).createEngine());return a.global.getTable(t.Base,(e=>{a.global.setField(e,"print",s),a.global.setField(e,"printErr",r)})),n.files&&await Mt(this,a,n.files),n.fetch&&await Pt(this,a,n.fetch),n.js_modules&&await Ft(n.js_modules),a},registerJSModule:(e,t,n)=>{e.global.set(t,n)},run:(e,t,...n)=>{try{return e.doStringSync(Ze(t),...n)}catch(t){Ye.get(e).stderr(t)}},runAsync:async(e,t,...n)=>{try{return await e.doString(Ze(t),...n)}catch(t){Ye.get(e).stderr(t)}},runEvent:async(e,t,n)=>{const[r,...s]=t.split(".");let o,a=e.global.get(r);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,n)}catch(t){Ye.get(e).stderr(t)}},transform:(e,t)=>t,writeFile:({cmodule:{module:{FS:e}}},t,n)=>((e,t,n)=>(At(e,Rt(t)),t=Tt(e,t),e.writeFile(t,new Uint8Array(n),{canOwn:!0})))(e,t,n)};const sn=new WeakMap,on=async(e,t)=>{const{shelter:n,destroy:r,io:s}=sn.get(e),{output:o,result:a}=await n.captureR(Ze(t));for(const{type:e,data:t}of o)s[e](t);return ge(a,r,{token:!1})};var an={type:"webr",experimental:!0,module:(e="0.3.3")=>`https://cdn.jsdelivr.net/npm/webr@${e}/dist/webr.mjs`,async engine(e,t){const{get:n}=Ve(),r=new e.WebR;await n(r.init().then((()=>r)));const s=await new r.Shelter;return sn.set(r,{module:e,shelter:s,destroy:s.destroy.bind(s),io:Ye.get(r)}),t.files&&await Mt(this,r,t.files),t.fetch&&await Pt(this,r,t.fetch),t.js_modules&&await Ft(t.js_modules),r},registerJSModule(e,t){console.warn(`Experimental interpreter: module ${t} is not supported (yet)`)},run:on,runAsync:on,async runEvent(e,t,n){await e.evalRVoid(`${t}(event)`,{env:{event:{type:[n.type]}}})},transform:(e,t)=>(console.log("transforming",t),t),writeFile:()=>{}};const ln=new Map,cn=new Map,pn=[],fn=[],un=new Proxy(new Map,{get(e,t){if(!e.has(t)){const[n,...r]=t.split("@"),s=ln.get(n),o=/^(?:\.?\.?\/|https?:\/\/)/i.test(r)?r.join("@"):s.module(...r);e.set(t,{url:o,module:import(o),engine:s.engine.bind(s)})}const{url:n,module:r,engine:s}=e.get(t);return(e,o)=>r.then((r=>{cn.set(t,e);for(const t of["files","fetch"]){const n=e?.[t];n&&Ot.set(n,o)}for(const t of["main","worker"]){const n=e?.js_modules?.[t];n&&Ot.set(n,o)}return s(r,e,n)}))}}),dn=e=>{for(const t of[].concat(e.type))ln.set(t,e),pn.push(`script[type="${t}"]`),fn.push(`${t}-`)};for(const e of[qt,Zt,nn,rn,an])dn(e);const hn=async e=>(await import("./toml-DiUM0_qs.js")).parse(e),mn=(e,t="./config.txt")=>{let n=typeof e;return"string"===n&&/\.(json|toml|txt)$/.test(e)?n=RegExp.$1:e=t,[lt(e),n]},yn=e=>{try{return JSON.parse(e)}catch(t){return hn(e)}},gn=(e,t,n,r={})=>{if(t){const[e,s]=mn(t,n);"json"===s?r=a(e).json():"toml"===s?r=a(e).text().then(hn):"string"===s?r=yn(t):"object"===s&&t?r=t:"txt"===s&&"string"==typeof r&&(r=yn(r)),t=e}return it(r).then((n=>un[e](n,t)))},_n=(e,t="")=>`${e}@${t}`.replace(/@$/,"");function wn(e=this){return String(e).replace(/^(async\s*)?(\bfunction\b)?(.*?)\(/,((e,t,n,r)=>r&&!n?`${t||""}function ${r}(`:e))}const bn="BeforeRun",vn="AfterRun",En=[`code${bn}`,`code${bn}Async`,`code${vn}`,`code${vn}Async`],kn=["onWorker","onReady",`on${bn}`,`on${bn}Async`,`on${vn}`,`on${vn}Async`];function jn(e,t){const{run:n,runAsync:r}=ln.get(this.type);return{...e,run:n.bind(this,t),runAsync:r.bind(this,t)}}const xn=(e,t,n,r,s,o)=>{if(s||o){const a=jn.bind(e,t),i=r?"runAsync":"run",l=e[i];e[i]=r?async function(e,t,...r){s&&await s.call(this,a(e),n);const i=await l.call(this,e,t,...r);return o&&await o.call(this,a(e),n),i}:function(e,t,...r){s&&s.call(this,a(e),n);const i=l.call(this,e,t,...r);return o&&o.call(this,a(e),n),i}}};let Rn=class{constructor(e,t={}){const{main:n,worker:r}=t;this.interpreter=e,this.onWorker=n?.onWorker;for(const e of kn.slice(1))this[e]=r?.[e];for(const e of En)this[e]=r?.[e]}toJSON(){const e={};for(const t of kn.slice(1))this[t]&&(e[t]=wn(this[t]));for(const t of En)this[t]&&(e[t]=Ze(this[t]()));return e}};var An=(...e)=>function(t,n){const r=new Worker(URL.createObjectURL(new Blob(['const e="object"==typeof self?self:globalThis,t=t=>((t,n)=>{const r=(e,n)=>(t.set(n,e),e),s=o=>{if(t.has(o))return t.get(o);const[a,i]=n[o];switch(a){case 0:case-1:return r(i,o);case 1:{const e=r([],o);for(const t of i)e.push(s(t));return e}case 2:{const e=r({},o);for(const[t,n]of i)e[s(t)]=s(n);return e}case 3:return r(new Date(i),o);case 4:{const{source:e,flags:t}=i;return r(new RegExp(e,t),o)}case 5:{const e=r(new Map,o);for(const[t,n]of i)e.set(s(t),s(n));return e}case 6:{const e=r(new Set,o);for(const t of i)e.add(s(t));return e}case 7:{const{name:t,message:n}=i;return r(new e[t](n),o)}case 8:return r(BigInt(i),o);case"BigInt":return r(Object(BigInt(i)),o)}return r(new e[a](i),o)};return s})(new Map,t)(0),n="",{toString:r}={},{keys:s}=Object,o=e=>{const t=typeof e;if("object"!==t||!e)return[0,t];const s=r.call(e).slice(8,-1);switch(s){case"Array":return[1,n];case"Object":return[2,n];case"Date":return[3,n];case"RegExp":return[4,n];case"Map":return[5,n];case"Set":return[6,n]}return s.includes("Array")?[1,s]:s.includes("Error")?[7,s]:[2,s]},a=([e,t])=>0===e&&("function"===t||"symbol"===t),i=(e,{json:t,lossy:n}={})=>{const r=[];return((e,t,n,r)=>{const i=(e,t)=>{const s=r.push(e)-1;return n.set(t,s),s},c=r=>{if(n.has(r))return n.get(r);let[l,p]=o(r);switch(l){case 0:{let t=r;switch(p){case"bigint":l=8,t=r.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+p);t=null;break;case"undefined":return i([-1],r)}return i([l,t],r)}case 1:{if(p)return i([p,[...r]],r);const e=[],t=i([l,e],r);for(const t of r)e.push(c(t));return t}case 2:{if(p)switch(p){case"BigInt":return i([p,r.toString()],r);case"Boolean":case"Number":case"String":return i([p,r.valueOf()],r)}if(t&&"toJSON"in r)return c(r.toJSON());const n=[],u=i([l,n],r);for(const t of s(r))!e&&a(o(r[t]))||n.push([c(t),c(r[t])]);return u}case 3:return i([l,r.toISOString()],r);case 4:{const{source:e,flags:t}=r;return i([l,{source:e,flags:t}],r)}case 5:{const t=[],n=i([l,t],r);for(const[n,s]of r)(e||!a(o(n))&&!a(o(s)))&&t.push([c(n),c(s)]);return n}case 6:{const t=[],n=i([l,t],r);for(const n of r)!e&&a(o(n))||t.push(c(n));return n}}const{message:u}=r;return i([l,{name:p,message:u}],r)};return c})(!(t||n),!!t,new Map,r)(e),r},{parse:c,stringify:l}=JSON,p={json:!0,lossy:!0};var u=Object.freeze({__proto__:null,parse:e=>t(c(e)),stringify:e=>l(i(e,p))});const f="64e10b34-2bf7-4616-9668-f99de5aa046e",d="M"+f,h="T"+f,g="array",y="function",w="null",m="number",_="object",b="string",E="symbol",v="undefined",k="apply",x="construct",T="defineProperty",S="deleteProperty",A="get",j="getOwnPropertyDescriptor",O="getPrototypeOf",R="has",P="isExtensible",$="ownKeys",M="preventExtensions",N="set",I="setPrototypeOf",F="delete",{isArray:W}=Array;let{SharedArrayBuffer:H,window:D}=globalThis,{notify:C,wait:L,waitAsync:U}=Atomics,B=null;U||(U=e=>({value:new Promise((t=>{let n=new Worker("data:application/javascript,onmessage%3D(%7Bdata%3Ab%7D)%3D%3E(Atomics.wait(b%2C0)%2CpostMessage(0))");n.onmessage=t,n.postMessage(e)}))}));try{new H(4)}catch(e){H=ArrayBuffer;const t=new WeakMap;if(D){const e=new Map,{prototype:{postMessage:n}}=Worker,r=t=>{const n=t.data?.[f];if(!W(n)){t.stopImmediatePropagation();const{id:r,sb:s}=n;e.get(r)(s)}};B=function(e,...s){const o=e?.[f];if(W(o)){const[e,n]=o;t.set(n,e),this.addEventListener("message",r)}return n.call(this,e,...s)},U=n=>({value:new Promise((r=>{e.set(t.get(n),r)})).then((r=>{e.delete(t.get(n)),t.delete(n);for(let e=0;e<r.length;e++)n[e]=r[e];return"ok"}))})}else{const e=(e,t)=>({[f]:{id:e,sb:t}});C=n=>{postMessage(e(t.get(n),n))},addEventListener("message",(e=>{const n=e.data?.[f];if(W(n)){const[e,r]=n;t.set(r,e)}}))}}\n/*! (c) Andrea Giammarchi - ISC */const{Int32Array:J,Map:q,Uint16Array:z}=globalThis,{BYTES_PER_ELEMENT:G}=J,{BYTES_PER_ELEMENT:K}=z,Y=new WeakSet,X=new WeakMap,V={value:{then:e=>e()}};let Z=0;const Q=(e,{parse:t=JSON.parse,stringify:n=JSON.stringify,transform:r,interrupt:s}=JSON)=>{if(!X.has(e)){const o=B||e.postMessage,a=(t,...n)=>o.call(e,{[f]:n},{transfer:t}),i=typeof s===y?s:s?.handler,c=s?.delay||42,l=new TextDecoder("utf-16"),p=(e,t)=>e?U(t,0):(i?((e,t,n)=>{for(;"timed-out"===L(e,0,0,t);)n()})(t,c,i):L(t,0),V);let u=!1;X.set(e,new Proxy(new q,{[R]:(e,t)=>"string"==typeof t&&!t.startsWith("_"),[A]:(n,s)=>"then"===s?null:(...n)=>{const o=Z++;let i=new J(new H(2*G)),c=[];Y.has(n.at(-1)||c)&&Y.delete(c=n.pop()),a(c,o,i,s,r?n.map(r):n);const f=e!==globalThis;let d=0;return u&&f&&(d=setTimeout(console.warn,1e3,`💀🔒 - Possible deadlock if proxy.${s}(...args) is awaited`)),p(f,i).value.then((()=>{clearTimeout(d);const e=i[1];if(!e)return;const n=K*e;return i=new J(new H(n+n%G)),a([],o,i),p(f,i).value.then((()=>t(l.decode(new z(i.buffer).slice(0,e)))))}))},[N](t,s,o){const a=typeof o;if(a!==y)throw new Error(`Unable to assign ${s} as ${a}`);if(!t.size){const s=new q;e.addEventListener("message",(async e=>{const o=e.data?.[f];if(W(o)){e.stopImmediatePropagation();const[a,i,...c]=o;let l;if(c.length){const[e,o]=c;if(t.has(e)){u=!0;try{const c=await t.get(e)(...o);if(void 0!==c){const e=n(r?r(c):c);s.set(a,e),i[1]=e.length}}catch(e){l=e}finally{u=!1}}else l=new Error(`Unsupported action: ${e}`);i[0]=1}else{const e=s.get(a);s.delete(a);for(let t=new z(i.buffer),n=0;n<e.length;n++)t[n]=e.charCodeAt(n)}if(C(i,0),l)throw l}}))}return!!t.set(s,o)}}))}return X.get(e)};Q.transfer=(...e)=>(Y.add(e),e);const{isArray:ee}=Array,te=(e,t)=>t,ne=e=>typeof e===y?(e=>e())(e):e;function re(){return this}const se=(e,t)=>e===g?[t]:{t:e,v:t},oe=(e,t=te)=>{let n=typeof e,r=e;return n===_&&(ee(e)?(n=g,r=e.at(0)):({t:n,v:r}=e)),t(n,r)},ae=(e,t)=>e===y?t:se(e,t),ie=(e,t=ae)=>{const n=null===e?w:typeof e;return t(n===_&&ee(e)?g:n,e)},ce=new FinalizationRegistry((([e,t,n])=>{n&&console.debug(`Held value ${String(t)} not relevant anymore`),e(t)})),le=Object.create(null),pe=(e,t,{debug:n,handler:r,return:s,token:o=e}=le)=>{const a=s||new Proxy(e,r||le),i=[a,[t,e,!!n]];return!1!==o&&i.push(o),ce.register(...i),a},{defineProperty:ue,deleteProperty:fe,getOwnPropertyDescriptor:de,getPrototypeOf:he,isExtensible:ge,ownKeys:ye,preventExtensions:we,set:me,setPrototypeOf:_e}=Reflect,{assign:be,create:Ee}=Object,ve=he(Int8Array),ke=(e,t)=>{const{get:n,set:r,value:s}=e;return n&&(e.get=t(n)),r&&(e.set=t(r)),s&&(e.value=t(s)),e},xe=e=>t=>ie(t,((t,n)=>{switch(t){case w:return se(w,n);case _:if(n===globalThis)return se(t,null);case g:case y:return e(t,n);case"boolean":case m:case b:case v:case"bigint":return se(t,n);case E:{if(Te.has(n))return se(t,Te.get(n));let e=Symbol.keyFor(n);if(e)return se(t,`.${e}`)}}throw new TypeError(`Unable to handle this ${t}: ${String(n)}`)})),Te=new Map(ye(Symbol).filter((e=>typeof Symbol[e]===E)).map((e=>[Symbol[e],e]))),Se=e=>{if(e.startsWith("."))return Symbol.for(e.slice(1));for(const[t,n]of Te)if(n===e)return t},Ae=e=>e;var je=((e,t)=>{const n=new WeakMap;{const{addEventListener:e}=EventTarget.prototype;ue(EventTarget.prototype,"addEventListener",{value(t,r,...s){return s.at(0)?.invoke&&(n.has(this)||n.set(this,new Map),n.get(this).set(t,[].concat(s[0].invoke)),delete s[0].invoke),e.call(this,t,r,...s)}})}return function(t,r,s,...o){let a=0,i=this?.transform||Ae;const c=new Map,l=new Map,{[s]:p}=t,u=o.length?be(Ee(globalThis),...o):globalThis,f=xe(((e,t)=>{if(!c.has(t)){let n;for(;l.has(n=a++););c.set(t,n),l.set(n,e===y?t:i(t))}return se(e,c.get(t))})),d=e=>{p(F,se(b,e))},h=(e,t)=>{switch(e){case _:if(null==t)return u;case g:if(typeof t===m)return l.get(t);if(!(t instanceof ve))for(const e in t)t[e]=w(t[e]);return t;case y:if(typeof t===b){const e=l.get(t)?.deref();if(e)return e;const r=function(...e){return e.at(0)instanceof Event&&(e=>{const{currentTarget:t,target:r,type:s}=e;for(const o of n.get(t||r)?.get(s)||[])e[o]()})(...e),p(k,se(y,t),f(this),e.map(f))};return l.set(t,new WeakRef(r)),pe(t,d,{return:r,token:!1})}return l.get(t);case E:return Se(t)}return t},w=e=>oe(e,h),W={[k]:(e,t,n)=>f(e.apply(t,n)),[x]:(e,t)=>f(new e(...t)),[T]:(e,t,n)=>f(ue(e,t,n)),[S]:(e,t)=>f(fe(e,t)),[O]:e=>f(he(e)),[A]:(e,t)=>f(e[t]),[j]:(e,t)=>{const n=de(e,t);return n?se(_,ke(n,f)):se(v,n)},[R]:(e,t)=>f(t in e),[P]:e=>f(ge(e)),[$]:e=>se(g,ye(e).map(f)),[M]:e=>f(we(e)),[N]:(e,t,n)=>f(me(e,t,n)),[I]:(e,t)=>f(_e(e,t)),[F](e){c.delete(l.get(e)),l.delete(e)}};return t[r]=(e,t,...n)=>{switch(e){case k:n[0]=w(n[0]),n[1]=n[1].map(w);break;case x:n[0]=n[0].map(w);break;case T:{const[e,t]=n;n[0]=w(e);const{get:r,set:s,value:o}=t;r&&(t.get=w(r)),s&&(t.set=w(s)),o&&(t.value=w(o));break}default:n=n.map(w)}return W[e](w(t),...n)},{proxy:t,[e.toLowerCase()]:u,[`is${e}Proxy`]:()=>!1}}})("Window"),Oe=(e=>{let t=0;const n=new Map,r=new Map,s=Symbol();return function(o,a,i){const c=this?.transform||Ae,{[a]:l}=o,p=new Map,u=e=>{p.delete(e),l(F,f(e))},f=xe(((e,o)=>{if(s in o)return ne(o[s]);if(e===y){if(o=c(o),!r.has(o)){let e;for(;r.has(e=String(t++)););n.set(o,e),r.set(e,o)}return se(e,n.get(o))}if(!(o instanceof ve)){o=c(o);for(const e in o)o[e]=f(o[e])}return se(e,o)})),d=(e,t,n)=>{const r=p.get(n)?.deref();if(r)return r;const s=t===y?(e=>re.bind(e))(e):e,o=new Proxy(s,v);return p.set(n,new WeakRef(o)),pe(n,u,{return:o,token:!1})},h=e=>oe(e,((t,n)=>{switch(t){case _:if(null===n)return globalThis;case g:return typeof n===m?d(e,t,n):n;case y:return typeof n===b?r.get(n):d(e,t,n);case E:return Se(n)}return n})),w=(e,t,...n)=>h(l(e,ne(t),...n)),v={[k]:(e,t,n)=>w(k,e,f(t),n.map(f)),[x]:(e,t)=>w(x,e,t.map(f)),[T]:(e,t,n)=>{const{get:r,set:s,value:o}=n;return typeof r===y&&(n.get=f(r)),typeof s===y&&(n.set=f(s)),typeof o===y&&(n.value=f(o)),w(T,e,f(t),n)},[S]:(e,t)=>w(S,e,f(t)),[O]:e=>w(O,e),[A]:(e,t)=>t===s?e:w(A,e,f(t)),[j]:(e,t)=>{const n=w(j,e,f(t));return n&&ke(n,h)},[R]:(e,t)=>t===s||w(R,e,f(t)),[P]:e=>w(P,e),[$]:e=>w($,e).map(h),[M]:e=>w(M,e),[N]:(e,t,n)=>w(N,e,f(t),f(n)),[I]:(e,t)=>w(I,e,f(t))};o[i]=(e,t,s,o)=>{switch(e){case k:return h(t).apply(h(s),o.map(h));case F:{const e=h(t);n.delete(r.get(e)),r.delete(e)}}};const W=new Proxy(se(_,null),v);return{[e.toLowerCase()]:W,[`is${e}Proxy`]:e=>typeof e===_&&!!e&&s in e,proxy:o}}})("Window"),Re=typeof Worker===y?Worker:class{};const Pe=new WeakMap,$e=(e,...t)=>{const n=Q(e,...t);if(!Pe.has(n)){const r=e instanceof Re?je:Oe;Pe.set(n,r.call(t.at(0),n,d,h))}return Pe.get(n)};$e.transfer=Q.transfer;const Me={object(...e){return this.string(function(e){for(var t=e[0],n=1,r=arguments.length;n<r;n++)t+=arguments[n]+e[n];return t}(...e))},string(e){for(const t of e.split(/[\\r\\n]+/))if(t.trim().length){/^(\\s+)/.test(t)&&(e=e.replace(new RegExp("^"+RegExp.$1,"gm"),""));break}return e}},Ne=new WeakMap,Ie=e=>{const t=e||console,n={buffered:We,stderr:(t.stderr||console.error).bind(t),stdout:(t.stdout||console.log).bind(t)};return{stderr:(...e)=>n.stderr(...e),stdout:(...e)=>n.stdout(...e),async get(e){const t=await e;return Ne.set(t,n),t}}},Fe=new TextDecoder,We=(e,t=10)=>{const n=[];return r=>{if(r instanceof Uint8Array)for(const s of r)s===t?e(Fe.decode(new Uint8Array(n.splice(0)))):n.push(s);else e(r)}},He=(e,...t)=>Me[typeof e](e,...t),{isArray:De}=Array,{assign:Ce,create:Le,defineProperties:Ue,defineProperty:Be,entries:Je}=Object,{all:qe,resolve:ze}=new Proxy(Promise,{get:(e,t)=>e[t].bind(e)}),Ge=(e,t=location.href)=>new URL(e,t.replace(/^blob:/,"")).href,Ke=(e,t,n,r=!1,s=CustomEvent)=>{e.dispatchEvent(new s(`${t}:${n}`,{bubbles:!0,detail:{worker:r}}))},Ye=e=>Function(`\'use strict\';return (${e})`)(),Xe=e=>e.replace(/^(?:\\n|\\r\\n)/,""),Ve=Symbol.for("polyscript.js_modules"),Ze=new Map;Be(globalThis,Ve,{value:Ze}),new Proxy(Ze,{get:(e,t)=>e.get(t),has:(e,t)=>e.has(t),ownKeys:e=>[...e.keys()]});const Qe=(e,t)=>!t.startsWith("_"),et=(e,t)=>new Proxy(e,{has:Qe,get:(e,n)=>e[t][n]}),tt=(e,t)=>import(e).then((e=>{Ze.set(t,{...e})})),nt=e=>new Promise(((t,n)=>{document.querySelector(`link[href="${e}"]`)&&t(),document.head.append(Ce(document.createElement("link"),{rel:"stylesheet",href:e,onload:t,onerror:n}))})),rt=e=>/\\.css/i.test(new URL(e).pathname);Promise.withResolvers||(Promise.withResolvers=function(){var e,t,n=new this((function(n,r){e=n,t=r}));return{resolve:e,reject:t,promise:n}});const st=Object.getOwnPropertyDescriptors(Response.prototype),ot=e=>"function"==typeof e,at={get:(e,t)=>st.hasOwnProperty(t)?((e,t,{get:n,value:r})=>n||!ot(r)?e.then((e=>e[t])):(...n)=>e.then((e=>e[t](...n))))(e,t,st[t]):((e,t)=>ot(t)?t.bind(e):t)(e,e[t])};var it=(e,...t)=>new Proxy(fetch(e,...t),at);const ct=!globalThis.window,lt=({FS:e,PATH:t,PATH_FS:n},r,s)=>{const o=n.resolve(r),a=t.dirname(o);return e.mkdirTree?e.mkdirTree(a):ut(e,a),e.writeFile(o,new Uint8Array(s),{canOwn:!0})},pt=e=>{const t=e.split("/");return t.pop(),t.join("/")},ut=(e,t)=>{const n=[];for(const r of t.split("/"))"."!==r&&".."!==r&&(n.push(r),r&&e.mkdir(n.join("/")))},ft=(e,t)=>{const n=[];for(const e of t.split("/"))switch(e){case"":case".":break;case"..":n.pop();break;default:n.push(e)}return[e.cwd()].concat(n).join("/").replace(/^\\/+/,"/")},dt=e=>{const t=e.map((e=>e.trim().replace(/(^[/]*|[/]*$)/g,""))).filter((e=>""!==e&&"."!==e)).join("/");return e[0].startsWith("/")?`/${t}`:t},ht=(e,t)=>it(Ge(t,gt.get(e))).arrayBuffer(),gt=new WeakMap,yt=(e,t,n)=>qe((e=>{for(const{files:t,to_file:n,from:r=""}of e){if(void 0!==t&&void 0!==n)throw new Error("Cannot use \'to_file\' and \'files\' parameters together!");if(void 0===t&&void 0===n&&r.endsWith("/"))throw new Error(`Couldn\'t determine the filename from the path ${r}, please supply \'to_file\' parameter.`)}return e.flatMap((({from:e="",to_folder:t=".",to_file:n,files:r})=>{if(De(r))return r.map((n=>({url:dt([e,n]),path:dt([t,n])})));const s=n||e.slice(1+e.lastIndexOf("/"));return[{url:e,path:dt([t,s])}]}))})(n).map((({url:r,path:s})=>ht(n,r).then((n=>e.writeFile(t,s,n)))))),wt=(e,t)=>t.endsWith("/")?`${t}${e.split("/").pop()}`:t,mt=(e,t)=>e.replace(/\\{.+?\\}/g,(e=>{if(!t.has(e))throw new SyntaxError(`Invalid template: ${e}`);return t.get(e)})),_t=(e,t,n)=>qe((e=>{const t=new Map,n=new Set,r=[];for(const[s,o]of Je(e))if(/^\\{.+\\}$/.test(s)){if(t.has(s))throw new SyntaxError(`Duplicated template: ${s}`);t.set(s,mt(o,t))}else{const e=mt(s,t),a=wt(e,mt(o||"./",t));if(n.has(a))throw new SyntaxError(`Duplicated destination: ${a}`);n.add(a),r.push({url:e,path:a})}return r})(n).map((({url:r,path:s})=>ht(n,r).then((n=>e.writeFile(t,s,n,r)))))),bt=({main:e,worker:t})=>{const n=[];if(t&&ct)for(let[e,r]of Je(t))e=Ge(e,gt.get(t)),n.push(tt(e,r));if(e&&!ct)for(let[t,r]of Je(e))t=Ge(t,gt.get(e)),rt(t)?nt(t):n.push(tt(t,r));return qe(n)},Et=(e,t)=>e.has(t),vt=e=>[...e.keys()];var kt=(e,t,n)=>{let r=globalThis[Ve],s="";if(n){s=gt.get(n);for(let[e,t]of Je(n)){let n=r.get(t);n&&!De(n)||(r.set(t,n||(n=[])),n.push(e))}}return((e,t,n,r)=>new Proxy(e,{has:Et,ownKeys:vt,get:(e,s)=>{let o=e.get(s);if(De(o)){let a=o;o=null;for(let e of a)e=Ge(e,r),rt(e)?n.importCSS(e):(n.importJS(e,s),o=t[Ve].get(s));e.set(s,o)}return o}}))(r,e,t,s)};const xt=new WeakMap,Tt=(e,t,n)=>{"polyscript"===t&&(n.lazy_py_modules=async(...t)=>(await xt.get(e)(t),t.map((t=>e.pyimport(t))))),e.registerJsModule(t,n)},St=(e,t)=>{if(e.endsWith("/*")){if(/\\.(zip|tar(?:\\.gz)?)$/.test(t))return RegExp.$1;throw new Error(`Unsupported archive ${t}`)}return""},At=(e,t,...n)=>{try{return e.runPython(He(t),...n)}catch(t){Ne.get(e).stderr(t)}},jt=async(e,t,...n)=>{try{return await e.runPythonAsync(He(t),...n)}catch(t){Ne.get(e).stderr(t)}},Ot=async(e,t,n)=>{const[r,...s]=t.split(".");let o,a=e.globals.get(r);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,n)}catch(t){Ne.get(e).stderr(t)}};var Rt=(new TextEncoder).encode(\'from uio import StringIO\\nimport sys\\n\\nclass Response:\\n def __init__(self, f):\\n self.raw = f\\n self.encoding = "utf-8"\\n self._cached = None\\n\\n def close(self):\\n if self.raw:\\n self.raw.close()\\n self.raw = None\\n self._cached = None\\n\\n @property\\n def content(self):\\n if self._cached is None:\\n try:\\n self._cached = self.raw.read()\\n finally:\\n self.raw.close()\\n self.raw = None\\n return self._cached\\n\\n @property\\n def text(self):\\n return str(self.content, self.encoding)\\n\\n def json(self):\\n import ujson\\n\\n return ujson.loads(self.content)\\n\\n\\n# TODO try to support streaming xhr requests, a-la pyodide-http\\nHEADERS_TO_IGNORE = ("user-agent",)\\n\\n\\ntry:\\n import js\\nexcept Exception as err:\\n raise OSError("This version of urequests can only be used in the browser")\\n\\n# TODO try to support streaming xhr requests, a-la pyodide-http\\n\\nHEADERS_TO_IGNORE = ("user-agent",)\\n\\n\\ndef request(\\n method,\\n url,\\n data=None,\\n json=None,\\n headers={},\\n stream=None,\\n auth=None,\\n timeout=None,\\n parse_headers=True,\\n):\\n from js import XMLHttpRequest\\n\\n xhr = XMLHttpRequest.new()\\n xhr.withCredentials = False\\n\\n if auth is not None:\\n import ubinascii\\n\\n username, password = auth\\n xhr.open(method, url, False, username, password)\\n else:\\n xhr.open(method, url, False)\\n\\n for name, value in headers.items():\\n if name.lower() not in HEADERS_TO_IGNORE:\\n xhr.setRequestHeader(name, value)\\n\\n if timeout:\\n xhr.timeout = int(timeout * 1000)\\n\\n if json is not None:\\n assert data is None\\n import ujson\\n\\n data = ujson.dumps(json)\\n # s.write(b"Content-Type: application/json\\\\r\\\\n")\\n xhr.setRequestHeader("Content-Type", "application/json")\\n\\n xhr.send(data)\\n\\n # Emulates the construction process in the original urequests\\n resp = Response(StringIO(xhr.responseText))\\n resp.status_code = xhr.status\\n resp.reason = xhr.statusText\\n resp.headers = xhr.getAllResponseHeaders()\\n\\n return resp\\n\\n\\n# Other methods - head, post, put, patch, delete - are not used by\\n# mip and therefore not included\\n\\n\\ndef get(url, **kw):\\n return request("GET", url, **kw)\\n\\n\\n# Content below this line is from the Micropython MIP package and is covered\\n# by the applicable MIT license:\\n# \\n# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, \\n# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\\n# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER \\n# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING \\n# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER \\n# DEALINGS IN THE SOFTWARE.\\n\\n# MicroPython package installer\\n# MIT license; Copyright (c) 2022 Jim Mussared\\n\\n\\n_PACKAGE_INDEX = const("https://micropython.org/pi/v2")\\n_CHUNK_SIZE = 128\\n\\n\\n# This implements os.makedirs(os.dirname(path))\\ndef _ensure_path_exists(path):\\n import os\\n\\n split = path.split("/")\\n\\n # Handle paths starting with "/".\\n if not split[0]:\\n split.pop(0)\\n split[0] = "/" + split[0]\\n\\n prefix = ""\\n for i in range(len(split) - 1):\\n prefix += split[i]\\n try:\\n os.stat(prefix)\\n except:\\n os.mkdir(prefix)\\n prefix += "/"\\n\\n\\n# Copy from src (stream) to dest (function-taking-bytes)\\ndef _chunk(src, dest):\\n buf = memoryview(bytearray(_CHUNK_SIZE))\\n while True:\\n n = src.readinto(buf)\\n if n == 0:\\n break\\n dest(buf if n == _CHUNK_SIZE else buf[:n])\\n\\n\\n# Check if the specified path exists and matches the hash.\\ndef _check_exists(path, short_hash):\\n import os\\n\\n try:\\n import binascii\\n import hashlib\\n\\n with open(path, "rb") as f:\\n hs256 = hashlib.sha256()\\n _chunk(f, hs256.update)\\n existing_hash = str(binascii.hexlify(hs256.digest())[: len(short_hash)], "utf-8")\\n return existing_hash == short_hash\\n except:\\n return False\\n\\n\\ndef _rewrite_url(url, branch=None):\\n if not branch:\\n branch = "HEAD"\\n if url.startswith("github:"):\\n url = url[7:].split("/")\\n url = (\\n "https://raw.githubusercontent.com/"\\n + url[0]\\n + "/"\\n + url[1]\\n + "/"\\n + branch\\n + "/"\\n + "/".join(url[2:])\\n )\\n return url\\n\\n\\ndef _download_file(url, dest):\\n response = get(url)\\n try:\\n if response.status_code != 200:\\n print("Error", response.status_code, "requesting", url)\\n return False\\n\\n print("Copying:", dest)\\n _ensure_path_exists(dest)\\n with open(dest, "wb") as f:\\n _chunk(response.raw, f.write)\\n\\n return True\\n finally:\\n response.close()\\n\\n\\ndef _install_json(package_json_url, index, target, version, mpy):\\n response = get(_rewrite_url(package_json_url, version))\\n try:\\n if response.status_code != 200:\\n print("Package not found:", package_json_url)\\n return False\\n\\n package_json = response.json()\\n finally:\\n response.close()\\n for target_path, short_hash in package_json.get("hashes", ()):\\n fs_target_path = target + "/" + target_path\\n if _check_exists(fs_target_path, short_hash):\\n print("Exists:", fs_target_path)\\n else:\\n file_url = "{}/file/{}/{}".format(index, short_hash[:2], short_hash)\\n if not _download_file(file_url, fs_target_path):\\n print("File not found: {} {}".format(target_path, short_hash))\\n return False\\n for target_path, url in package_json.get("urls", ()):\\n fs_target_path = target + "/" + target_path\\n if not _download_file(_rewrite_url(url, version), fs_target_path):\\n print("File not found: {} {}".format(target_path, url))\\n return False\\n for dep, dep_version in package_json.get("deps", ()):\\n if not _install_package(dep, index, target, dep_version, mpy):\\n return False\\n return True\\n\\n\\ndef _install_package(package, index, target, version, mpy):\\n if (\\n package.startswith("http://")\\n or package.startswith("https://")\\n or package.startswith("github:")\\n ):\\n if package.endswith(".py") or package.endswith(".mpy"):\\n print("Downloading {} to {}".format(package, target))\\n return _download_file(\\n _rewrite_url(package, version), target + "/" + package.rsplit("/")[-1]\\n )\\n else:\\n if not package.endswith(".json"):\\n if not package.endswith("/"):\\n package += "/"\\n package += "package.json"\\n print("Installing {} to {}".format(package, target))\\n else:\\n if not version:\\n version = "latest"\\n print("Installing {} ({}) from {} to {}".format(package, version, index, target))\\n\\n mpy_version = (\\n sys.implementation._mpy & 0xFF if mpy and hasattr(sys.implementation, "_mpy") else "py"\\n )\\n\\n package = "{}/package/{}/{}/{}.json".format(index, mpy_version, package, version)\\n\\n return _install_json(package, index, target, version, mpy)\\n\\n\\ndef install(package, index=None, target=None, version=None, mpy=True):\\n if not target:\\n for p in sys.path:\\n if p.endswith("/lib"):\\n target = p\\n break\\n else:\\n print("Unable to find lib dir in sys.path")\\n return\\n\\n if not index:\\n index = _PACKAGE_INDEX\\n\\n if _install_package(package, index.rstrip("/"), target, version, mpy):\\n print("Done")\\n else:\\n print("Package may be partially installed")\\n\');const Pt=(e,t)=>{try{e.mkdir(t)}catch(e){}};var $t={type:"micropython",module:(e="1.22.0-356")=>`https://cdn.jsdelivr.net/npm/@micropython/micropython-webassembly-pyscript@${e}/micropython.mjs`,async engine({loadMicroPython:e},t,n){const{stderr:r,stdout:s,get:o}=Ie({stderr:We(console.error),stdout:We(console.log)});n=n.replace(/\\.m?js$/,".wasm");const a=await o(e({linebuffer:!1,stderr:r,stdout:s,url:n})),i=Mt.bind(a);return xt.set(a,i),t.files&&await _t(this,a,t.files),t.fetch&&await yt(this,a,t.fetch),t.js_modules&&await bt(t.js_modules),this.writeFile(a,"./mip.py",Rt),t.packages&&await i(t.packages),a},registerJSModule:Tt,run:At,runAsync:jt,runEvent:Ot,transform:(e,t)=>e.PyProxy.toJs(t),writeFile:(e,t,n,r)=>{const{FS:s,_module:{PATH:o,PATH_FS:a}}=e,i={FS:s,PATH:o,PATH_FS:a},c=St(t,r);if(c){const r=t.slice(0,-1);switch("./"!==r&&s.mkdir(r),c){case"zip":{const e=new Blob([n],{type:"application/zip"});return import("./zip-D2yvzXKD.js").then((async({BlobReader:t,Uint8ArrayWriter:n,ZipReader:a})=>{const i=new a(new t(e));for(const e of await i.getEntries()){const{directory:t,filename:a}=e,i=r+a;if(t)Pt(s,i);else{Pt(s,o.dirname(i));const t=await e.getData(new n);s.writeFile(i,t,{canOwn:!0})}}i.close()}))}case"tar.gz":{const t="./_.tar.gz";return lt(i,t,n),void e.runPython(`\\n import os, gzip, tarfile\\n tar = tarfile.TarFile(fileobj=gzip.GzipFile(fileobj=open("${t}", "rb")))\\n for f in tar:\\n name = f"${r}{f.name}"\\n if f.type == tarfile.DIRTYPE:\\n if f.name != "./":\\n os.mkdir(name.strip("/"))\\n else:\\n dir = os.path.dirname(name)\\n if not os.path.exists(dir):\\n os.mkdir(dir)\\n source = tar.extractfile(f)\\n with open(name, "wb") as dest:\\n dest.write(source.read())\\n dest.close()\\n tar.close()\\n os.remove("${t}")\\n `)}}}return lt(i,t,n)}};async function Mt(e){const t=this.pyimport("mip");for(const n of e)t.install(n)}const Nt={dict_converter:Object.fromEntries};let It=!1;const Ft=e=>(...t)=>{try{return It=!0,e(...t)}finally{It=!1}};let Wt=!1;const Ht=()=>{if(Wt)return;Wt=!0;const e=new WeakMap,t=e=>e.destroy(),n=n=>{for(let r=0;r<n.length;r++){const s=n[r];if("function"==typeof s&&"copy"in s){It=!1;let o=e.get(s)?.deref();if(!o)try{o=pe(s.copy(),t),e.set(s,new WeakRef(o))}catch(e){console.error(e)}o&&(n[r]=o),It=!0}}},{call:r}=Function,s=r.bind(r,r.apply);Object.defineProperties(Function.prototype,{apply:{value(e,t){return It&&n(t),s(this,e,t)}},call:{value(e,...t){return It&&n(t),s(this,e,t)}}})};var Dt={type:"pyodide",module:(e="0.25.1")=>`https://cdn.jsdelivr.net/pyodide/v${e}/full/pyodide.mjs`,async engine({loadPyodide:e},t,n){ct||"auto"!==t.experimental_create_proxy||Ht();const{stderr:r,stdout:s,get:o}=Ie(),a=n.slice(0,n.lastIndexOf("/")),i=await o(e({stderr:r,stdout:s,indexURL:a})),c=Ct.bind(i);return xt.set(i,c),t.files&&await _t(this,i,t.files),t.fetch&&await yt(this,i,t.fetch),t.js_modules&&await bt(t.js_modules),t.packages&&await c(t.packages),i},registerJSModule:Tt,run:Ft(At),runAsync:Ft(jt),runEvent:Ft(Ot),transform:({ffi:{PyProxy:e}},t)=>t instanceof e?t.toJs(Nt):t,writeFile:(e,t,n,r)=>{const s=St(t,r);if(s)return e.unpackArchive(n,s,{extractDir:t.slice(0,-1)});const{FS:o,PATH:a,_module:{PATH_FS:i}}=e;return lt({FS:o,PATH:a,PATH_FS:i},t,n)}};async function Ct(e){await this.loadPackage("micropip");const t=this.pyimport("micropip");await t.install(e,{keep_going:!0}),t.destroy()}const Lt="ruby-wasm-wasi",Ut=Lt.replace(/\\W+/g,"_");var Bt={type:Lt,experimental:!0,module:(e="2.6.0")=>`https://cdn.jsdelivr.net/npm/@ruby/3.2-wasm-wasi@${e}/dist/browser/+esm`,async engine({DefaultRubyVM:e},t,n){n=n.replace(/\\/browser\\/\\+esm$/,"/ruby.wasm");const r=await it(n).arrayBuffer(),s=await WebAssembly.compile(r),{vm:o}=await e(s);return t.files&&await _t(this,o,t.files),t.fetch&&await yt(this,o,t.fetch),t.js_modules&&await bt(t.js_modules),o},registerJSModule(e,t,n){t=t.replace(/\\W+/g,"__");const r=`__module_${Ut}_${t}`;globalThis[r]=n,this.run(e,`require "js";$${t}=JS.global[:${r}]`),delete globalThis[r]},run:(e,t,...n)=>e.eval(He(t),...n),runAsync:(e,t,...n)=>e.evalAsync(He(t),...n),async runEvent(e,t,n){if(/^xworker\\.(on\\w+)$/.test(t)){const{$1:t}=RegExp,r=`__module_${Ut}_event`;globalThis[r]=n,this.run(e,`require "js";$xworker.call("${t}",JS.global[:${r}])`),delete globalThis[r]}else{const r=this.run(e,`method(:${t})`);await r.call(t,e.wrap(n))}},transform:(e,t)=>t,writeFile:()=>{throw new Error(`writeFile is not supported in ${Lt}`)}};var Jt={type:"wasmoon",module:(e="1.16.0")=>`https://cdn.jsdelivr.net/npm/wasmoon@${e}/+esm`,async engine({LuaFactory:e,LuaLibraries:t},n){const{stderr:r,stdout:s,get:o}=Ie(),a=await o((new e).createEngine());return a.global.getTable(t.Base,(e=>{a.global.setField(e,"print",s),a.global.setField(e,"printErr",r)})),n.files&&await _t(this,a,n.files),n.fetch&&await yt(this,a,n.fetch),n.js_modules&&await bt(n.js_modules),a},registerJSModule:(e,t,n)=>{e.global.set(t,n)},run:(e,t,...n)=>{try{return e.doStringSync(He(t),...n)}catch(t){Ne.get(e).stderr(t)}},runAsync:async(e,t,...n)=>{try{return await e.doString(He(t),...n)}catch(t){Ne.get(e).stderr(t)}},runEvent:async(e,t,n)=>{const[r,...s]=t.split(".");let o,a=e.global.get(r);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,n)}catch(t){Ne.get(e).stderr(t)}},transform:(e,t)=>t,writeFile:({cmodule:{module:{FS:e}}},t,n)=>((e,t,n)=>(ut(e,pt(t)),t=ft(e,t),e.writeFile(t,new Uint8Array(n),{canOwn:!0})))(e,t,n)};const qt=new WeakMap,zt=async(e,t)=>{const{shelter:n,destroy:r,io:s}=qt.get(e),{output:o,result:a}=await n.captureR(He(t));for(const{type:e,data:t}of o)s[e](t);return pe(a,r,{token:!1})};var Gt={type:"webr",experimental:!0,module:(e="0.3.3")=>`https://cdn.jsdelivr.net/npm/webr@${e}/dist/webr.mjs`,async engine(e,t){const{get:n}=Ie(),r=new e.WebR;await n(r.init().then((()=>r)));const s=await new r.Shelter;return qt.set(r,{module:e,shelter:s,destroy:s.destroy.bind(s),io:Ne.get(r)}),t.files&&await _t(this,r,t.files),t.fetch&&await yt(this,r,t.fetch),t.js_modules&&await bt(t.js_modules),r},registerJSModule(e,t){console.warn(`Experimental interpreter: module ${t} is not supported (yet)`)},run:zt,runAsync:zt,async runEvent(e,t,n){await e.evalRVoid(`${t}(event)`,{env:{event:{type:[n.type]}}})},transform:(e,t)=>(console.log("transforming",t),t),writeFile:()=>{}};const Kt=new Map,Yt=new Map,Xt=new Proxy(new Map,{get(e,t){if(!e.has(t)){const[n,...r]=t.split("@"),s=Kt.get(n),o=/^(?:\\.?\\.?\\/|https?:\\/\\/)/i.test(r)?r.join("@"):s.module(...r);e.set(t,{url:o,module:import(o),engine:s.engine.bind(s)})}const{url:n,module:r,engine:s}=e.get(t);return(e,o)=>r.then((r=>{Yt.set(t,e);for(const t of["files","fetch"]){const n=e?.[t];n&&gt.set(n,o)}for(const t of["main","worker"]){const n=e?.js_modules?.[t];n&&gt.set(n,o)}return s(r,e,n)}))}}),Vt=e=>{for(const t of[].concat(e.type))Kt.set(t,e)};for(const e of[$t,Dt,Bt,Jt,Gt])Vt(e);const Zt=async e=>(await import("./toml-DiUM0_qs.js")).parse(e),Qt=e=>{try{return JSON.parse(e)}catch(t){return Zt(e)}},en=(e,t,n,r={})=>{if(t){const[e,s]=((e,t="./config.txt")=>{let n=typeof e;return"string"===n&&/\\.(json|toml|txt)$/.test(e)?n=RegExp.$1:e=t,[Ge(e),n]})(t,n);"json"===s?r=it(e).json():"toml"===s?r=it(e).text().then(Zt):"string"===s?r=Qt(t):"object"===s&&t?r=t:"txt"===s&&"string"==typeof r&&(r=Qt(r)),t=e}return ze(r).then((n=>Xt[e](n,t)))},tn="BeforeRun",nn="AfterRun",rn=[`code${tn}`,`code${tn}Async`,`code${nn}`,`code${nn}Async`],sn=["onWorker","onReady",`on${tn}`,`on${tn}Async`,`on${nn}`,`on${nn}Async`];function on(e,t){const{run:n,runAsync:r}=Kt.get(this.type);return{...e,run:n.bind(this,t),runAsync:r.bind(this,t)}}const an=(e,t,n,r,s,o)=>{if(s||o){const a=on.bind(e,t),i=r?"runAsync":"run",c=e[i];e[i]=r?async function(e,t,...r){s&&await s.call(this,a(e),n);const i=await c.call(this,e,t,...r);return o&&await o.call(this,a(e),n),i}:function(e,t,...r){s&&s.call(this,a(e),n);const i=c.call(this,e,t,...r);return o&&o.call(this,a(e),n),i}}};let cn,ln,pn;const un=(e,t)=>{addEventListener(e,t||(async t=>{try{await cn,ln(`xworker.on${e}`,t)}catch(e){postMessage(e)}}),!!t&&{once:!0})},{parse:fn,stringify:dn}=u,{proxy:hn,window:gn,isWindowProxy:yn}=$e(self,{parse:fn,stringify:dn,transform:e=>pn?pn(e):e}),wn={sync:hn,window:gn,isWindowProxy:yn,onmessage:console.info,onerror:console.error,onmessageerror:console.warn,postMessage:postMessage.bind(self)};un("message",(({data:{options:e,config:t,configURL:n,code:r,hooks:s}})=>{cn=(async()=>{try{const{id:o,tag:a,type:i,custom:c,version:l,config:p,async:u}=e,f=((e,t="")=>`${e}@${t}`.replace(/@$/,""))(i,l),d=await en(f,t,n,p),{js_modules:h,sync_main_only:g}=Yt.get(f),y=h?.main;let w=!g;try{new SharedArrayBuffer(4),w=!0}catch(e){if(w)throw new Error(["Unable to use SharedArrayBuffer due insecure environment.","Please read requirements in MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer#security_requirements"].join("\\n"))}const m=Le(Kt.get(i)),_=((e,t,n,r)=>({type:t,config:n,interpreter:r,io:Ne.get(r),run:(t,...n)=>e.run(r,t,...n),runAsync:(t,...n)=>e.runAsync(r,t,...n),runEvent:(...t)=>e.runEvent(r,...t)}))(m,c||i,p,d);let b="run";if(u&&(b+="Async"),s){let e,t,n="",r="";for(const e of rn){const t=s[e];if(t){const s=e.endsWith("Async");(s&&u||!s&&!u)&&(e.startsWith("codeBefore")?n=t:r=t)}}(n||r)&&((e,t,n,r)=>{const s=e[t].bind(e);e[t]="run"===t?(e,t,...o)=>{n&&s(e,n,...o);const a=s(e,Xe(t),...o);return r&&s(e,r,...o),a}:async(e,t,...o)=>{n&&await s(e,n,...o);const a=await s(e,Xe(t),...o);return r&&await s(e,r,...o),a}})(m,b,n,r);for(const n of sn.slice(2)){const r=s[n];if(r){const s=n.endsWith("Async");if(s&&u||!s&&!u){const s=Ye(r);n.startsWith("onBefore")?e=s:t=s}}}an(m,_,wn,u,e,t)}let E,v,k,x=null,T="";w&&(({CustomEvent:E,document:v}=gn),x=o&&v.getElementById(o)||null,k=e=>Ke(x,c||i,e,!0,E));const S=kt(gn,hn,y);return((e,t,n,r)=>{if("pyodide"===e)return;const s="polyscript.js_modules";for(const e of Reflect.ownKeys(r))t.registerJSModule(n,`${s}.${e}`,et(r,e));t.registerJSModule(n,s,r)})(i,m,d,S),m.registerJSModule(d,"polyscript",{xworker:wn,currentScript:x,config:_.config,js_modules:S,get target(){return!T&&x&&("SCRIPT"===a?x.after(Ce(v.createElement(`script-${c||i}`),{id:T=`${o}-target`})):(T=o,x.replaceChildren(),x.style.display="block")),T}}),ln=m.runEvent.bind(m,d),pn=m.transform.bind(m,d),x&&k("ready"),s?.onReady&&Ye(s?.onReady).call(m,on.call(m,_,d),wn),await m[b](d,r),x&&k("done"),postMessage("polyscript:done"),d}catch(e){postMessage(e)}})(),un("error"),un("message"),un("messageerror")}));\n'.replace(He,Be)],{type:"application/javascript"})),{type:"module"}),{postMessage:s}=r,o=this instanceof Rn;if(e.length){const[t,r]=e;(n=tt({},n||{type:t,version:r})).type||(n.type=t)}const[i]=mn(n.config,n.configURL),l=a(t).text().then((e=>{const t=o?this.toJSON():void 0;s.call(r,{options:n,config:i,code:e,hooks:t})})),c=tt(De(r,_).proxy,{importJS:vt,importCSS:Et}),p=Promise.withResolvers();return rt(r,{sync:{value:c},ready:{value:p.promise},postMessage:{value:(e,...t)=>l.then((()=>s.call(r,e,...t)))},onerror:{writable:!0,configurable:!0,value:console.error}}),r.addEventListener("message",(e=>{const{data:t}=e,n=t instanceof Error;(n||"polyscript:done"===t)&&(e.stopImmediatePropagation(),n?(p.reject(t),r.onerror(nt(e,{type:{value:"error"},error:{value:t}}))):p.resolve(r))})),o&&this.onWorker?.(this.interpreter,r),r};const Tn="Invalid content";var Sn=e=>{const{src:t,worker:n}=e.attributes;if(n){let{value:r}=n;if(r)throw new SyntaxError("Invalid worker attribute");if(r=t?.value,!r){if(t)throw new SyntaxError("Invalid worker attribute");if(e.childElementCount){const{innerHTML:t,localName:n,type:s}=e,o=s||n.replace(/-script$/,"");r=Qe(t),console.warn(`Deprecated: use <script type="${o}"> for an always safe content parsing:\n`,r)}else r=e.textContent;return URL.createObjectURL(new Blob([Ze(r)],{type:"text/plain"}))}return r}if(t&&e.textContent.replace(/\/\*[\s\S]*?\*\//g,"").replace(/^\s*(?:\/\/|#).*/gm,"").trim())throw new SyntaxError(Tn)};const Nn=(e,t)=>{const n=(e=>{let t=e;for(;t.parentNode;)t=t.parentNode;return t})(e);return n.getElementById(t)||((e,t=document)=>t.querySelector(e))(t,n)},On=new WeakMap,Pn={get(){let e=On.get(this);return e||(e=document.createElement(`${this.type}-script`),On.set(this,e),Cn(this)),e},set(e){"string"==typeof e?On.set(this,Nn(this,e)):(On.set(this,e),Cn(this))}},In=new WeakMap,$n=new Map,Mn=(e,t)=>{const n=e?.value;return n?t+n:""},Fn=(e,t,n,r,s,o,a=e)=>{if(!$n.has(t)){const i={interpreter:gn(n,s,o),queue:it(),XWorker:An(e,r)};$n.set(t,i),$n.has(e)||$n.set(e,i),$n.has(a)||$n.set(a,i)}return $n.get(t)},Cn=async e=>{if(In.has(e)){const{target:t}=e;t&&(e.closest("head")?document.body.append(t):e.after(t))}else{const{attributes:{async:t,config:n,env:r,target:s,version:o},src:i,type:l}=e,c=o?.value,p=_n(l,c);let f=Mn(n,"|");const u=Mn(r,"")||`${p}${f}`;f=f.slice(1);const d=Sn(e);if(d){const n=new(An(l,c))(d,{...pt(e,l),async:!!t,config:f});return void In.set(st(e,"xworker",{value:n}),{xworker:n})}const h=Mn(s,""),m=Fn(l,u,p,c,f);In.set(st(e,"target",Pn),m),h&&On.set(e,Nn(e,h));const y=i?a(i).text():e.textContent;m.queue=m.queue.then((()=>(async(e,t,n,r)=>{const{type:s}=e,o=ln.get(s);o.experimental&&console.warn(`The ${s} interpreter is experimental`);const[a,i]=await at([In.get(e).interpreter,t]);try{st(document,"currentScript",{configurable:!0,get:()=>e}),bt(s,o,a,gt),o.registerJSModule(a,"polyscript",{XWorker:n,currentScript:e,js_modules:gt}),ft(e,s,"ready");const t=o[r?"runAsync":"run"](a,i),l=ft.bind(null,e,s,"done");return r?t.then(l):l(),t}finally{delete document.currentScript}})(e,y,m.XWorker,!!t)))}},Wn=new Proxy(nt(null),{get:(e,t)=>new Promise(queueMicrotask).then((()=>Dn(t)))}),Dn=async e=>{if($n.has(e)){const{interpreter:t,queue:n}=$n.get(e);return(await at([t,n]))[0]}const t=$n.size?`Available interpreters are: ${[...$n.keys()].map((e=>`"${e}"`)).join(", ")}.`:"There are no interpreters in this page.";throw new Error(`The interpreter "${e}" was not found. ${t}`)},Ln=async e=>{const{type:t,currentTarget:r}=e;if(fn.length)for(let{name:s,value:o,ownerElement:a}of n(`./@*[${fn.map((e=>`name()="${e}${t}"`)).join(" or ")}]`,r)){s=s.slice(0,-(t.length+1));const n=await Dn(a.getAttribute(`${s}-env`)||s);ln.get(s).runEvent(n,o,e)}},Hn=e=>{if(fn.length)for(let{name:t,ownerElement:r}of n(`.//@*[${fn.map((e=>`starts-with(name(),"${e}")`)).join(" or ")}]`,e)){const e=t.lastIndexOf("-"),n=t.slice(e+1);"env"!==n&&(r.addEventListener(n,Ln),"disabled"in r&&!r.disabled&&(r.disabled=!0,Wn[t.slice(0,e)].then((()=>{r.disabled=!1}))))}},Bn=An(),Un=[],Jn=new Map,qn=new Map,Gn=new Map,zn=async e=>{for(const t of Un)if(e.matches(t)){const n=qn.get(t),r=Yn.get(n),{resolve:s}=Gn.get(n),{options:o,known:a}=r;if(a.has(e))return;a.add(e);for(const[t,n]of Jn)e.matches(t)&&await n(e);const{interpreter:i,configURL:l,config:c,version:p,env:f,onerror:u,hooks:d}=o;let h;try{const t=Sn(e);if(t){const r=Bn.call(new Rn(null,d),t,{...pt(e,n),version:p,configURL:l,type:i,custom:n,config:e.getAttribute("config")||c||{},async:e.hasAttribute("async")});return st(e,"xworker",{value:r}),void s({type:n,xworker:r})}}catch(e){h=e}const m=_n(i,p),y=f||`${m}${c?`|${c}`:""}`,{interpreter:g,XWorker:_}=Fn(n,y,m,p,c,l,i),w=await g,b=nt(ln.get(i)),v=new Rn(w,d),E=function(...e){return _.apply(v,e)},k={...ut(b,n,structuredClone(cn.get(m)),w),XWorker:E};bt(i,b,w,gt),b.registerJSModule(w,"polyscript",{XWorker:E,config:k.config,currentScript:n.startsWith("_")?null:e,js_modules:gt});for(const t of["Run","RunAsync"]){let n,r,s="",o="";for(const e of En){const n=d?.main?.[e];n&&e.endsWith(t)&&(e.startsWith("codeBefore")?s=Ze(n()):o=Ze(n()))}(s||o)&&ht(b,`r${t.slice(1)}`,s,o);for(let e=2;e<kn.length;e++){const s=kn[e],o=d?.main?.[s];o&&s.endsWith(t)&&(s.startsWith("onBefore")?n=o:r=o)}xn(b,k,e,t.endsWith("Async"),n,r)}r.queue=r.queue.then((()=>(s(k),h&&u?.(h,e),d?.main?.onReady?.(k,e))))}},Yn=new Map;let Vn=0;const Kn=e=>(Gn.has(e)||Gn.set(e,Promise.withResolvers()),Gn.get(e).promise),[{customObserver:Xn,define:Zn,whenDefined:Qn,env:er,Hook:tr,XWorker:nr},rr]=e("polyscript",{customObserver:Jn,define:(e,n)=>{let r=null==e;if(r)e="_ps"+Vn++;else if(ln.has(e)||Yn.has(e))throw new Error(`<script type="${e}"> already registered`);if(!ln.has(n?.interpreter))throw new Error("Unspecified interpreter");ln.set(e,ln.get(n.interpreter));const s=[`script[type="${e}"]`];if(Kn(e),r){const{hooks:t}=n,r=t?.main?.onReady;n={...n,hooks:{...t,main:{...t?.main,onReady(t,n){Un.splice(Un.indexOf(e),1),ln.delete(e),Yn.delete(e),Gn.delete(e),n.remove(),r?.(t)}}}},document.head.append(tt(document.createElement("script"),{type:e}))}else s.push(`${e}-script`),fn.push(`${e}-`);for(const t of s)qn.set(t,e);Un.push(...s),Yn.set(e,{options:tt({env:e},n),known:new WeakSet,queue:Promise.resolve()}),r||Hn(document),t(s.join(",")).forEach(zn)},whenDefined:Kn,env:Wn,Hook:Rn,XWorker:Bn});if(!rr){const e=new MutationObserver((e=>{const t=pn.join(",");for(const{type:r,target:s,attributeName:o,addedNodes:a}of e)if("attributes"!==r)for(const e of a)1===e.nodeType&&(Hn(e),t&&e.matches(t)?Cn(e):n(t,e,!0));else{const e=o.lastIndexOf("-")+1;if(e){const t=o.slice(0,e);for(const n of fn)if(t===n){const t=o.slice(e);if("env"!==t){const e=s.hasAttribute(o)?"add":"remove";s[`${e}EventListener`](t,Ln)}break}}}})),n=(e,n,r)=>{e&&t(e,n).forEach(Cn),(e=Un.join(","))&&(r&&zn(n),t(e,n).forEach(zn))},r=t=>(e.observe(t,{childList:!0,subtree:!0,attributes:!0}),t),{attachShadow:s}=Element.prototype;tt(Element.prototype,{attachShadow(e){return r(s.call(this,e))}}),queueMicrotask((()=>{Hn(r(document)),n(pn.join(","),document,!1)}))}var sr=new Map([["py","pyodide"],["mpy","micropython"]]);const or=[];for(const[e]of sr){const t=[`script[type="${e}"]`,`${e}-script`];for(const n of document.querySelectorAll(t.join(","))){const{promise:t,resolve:r}=Promise.withResolvers();or.push(t),n.addEventListener(`${e}:done`,r,{once:!0})}}Promise.all(or).then((()=>{dispatchEvent(new Event("py:all-done"))}));var ar={"deprecations-manager":()=>import("./deprecations-manager-CQ0oxKrq.js"),error:()=>import("./error-BfnovtqK.js"),"py-editor":()=>import("./py-editor-CmqzUo2Z.js"),"py-terminal":()=>import("./py-terminal-CgcHH2nx.js")};const ir={GENERIC:"PY0000",CONFLICTING_CODE:"PY0409",BAD_CONFIG:"PY1000",MICROPIP_INSTALL_ERROR:"PY1001",BAD_PLUGIN_FILE_EXTENSION:"PY2000",NO_DEFAULT_EXPORT:"PY2001",TOP_LEVEL_AWAIT:"PY9000",FETCH_ERROR:"PY0001",FETCH_NAME_ERROR:"PY0002",FETCH_UNAUTHORIZED_ERROR:"PY0401",FETCH_FORBIDDEN_ERROR:"PY0403",FETCH_NOT_FOUND_ERROR:"PY0404",FETCH_SERVER_ERROR:"PY0500",FETCH_UNAVAILABLE_ERROR:"PY0503"};class lr extends Error{constructor(e,t="",n="text"){super(`(${e}): ${t}`),this.errorCode=e,this.messageType=n,this.name="UserError"}}class cr extends lr{constructor(e,t){super(e,t),this.name="FetchError"}}const pr=e=>e.text();async function fr(e,t){let n;try{n=await fetch(e,t)}catch(t){const n=t;let r;throw r=e.startsWith("http")?`Fetching from URL ${e} failed with error '${n.message}'. Are your filename and path correct?`:'Polyscript: Access to local files\n (using [[fetch]] configurations in &lt;py-config&gt;)\n is not available when directly opening a HTML file;\n you must use a webserver to serve the additional files.\n See <a style="text-decoration: underline;" href="https://github.com/pyscript/pyscript/issues/257#issuecomment-1119595062">this reference</a>\n on starting a simple webserver with Python.\n ',new cr(ir.FETCH_ERROR,r)}if(!n.ok){const t=`Fetching from URL ${e} failed with error ${n.status} (${n.statusText}). Are your filename and path correct?`;switch(n.status){case 404:throw new cr(ir.FETCH_NOT_FOUND_ERROR,t);case 401:throw new cr(ir.FETCH_UNAUTHORIZED_ERROR,t);case 403:throw new cr(ir.FETCH_FORBIDDEN_ERROR,t);case 500:throw new cr(ir.FETCH_SERVER_ERROR,t);case 503:throw new cr(ir.FETCH_UNAVAILABLE_ERROR,t);default:throw new cr(ir.FETCH_ERROR,t)}}return n}const{BAD_CONFIG:ur,CONFLICTING_CODE:dr}=ir,hr=async(e,t)=>{let n=e?.trim(),r="",s=!1,o=/^{/.test(n)&&/}$/.test(n);if(!o&&/\.(\w+)(?:\?\S*)?$/.test(n)){const e=RegExp.$1;"json"===e&&"toml"!==t?o=!0:"toml"===e&&"json"!==t?s=!0:((e,t="")=>{let n=`(${ur}): Invalid URL: ${e}`;throw t&&(n+=`\nexpected ${t} content`),new Error(n)})(n,t),r=n,n=(await fr(r).then(pr)).trim()}return{json:o,toml:s||!o&&!!n,text:n,url:r}},mr=e=>new Error(`(${dr}): ${e}`),yr=(e,t,{message:n})=>{let r=`(${ur}): Invalid ${e}`;return t&&(r+=` @ ${t}`),new SyntaxError(`${r}\n${n}`)},gr=new Map;for(const[e]of sr){let n,r,s,o,a,i,l,c=t(`${e}-config`),p=t([`script[type="${e}"][config]:not([worker])`,`${e}-script[config]:not([worker])`].join(","));if(c.length>1?s=mr(`Too many ${e}-config`):c.length&&p.length?s=mr(`Ambiguous ${e}-config VS config attribute`):c.length?([l]=c,a=l.getAttribute("src")||l.textContent,i=l.getAttribute("type")):p.length&&([l,...p]=p,a=l.getAttribute("config"),p.some((e=>e.getAttribute("config")!==a))&&(s=mr("Unable to use different configs on main"))),!s&&a)try{const{json:e,toml:t,text:n,url:l}=await hr(a,i);if(l&&(o=new URL(l,location.href).href),a=n,e||"json"===i)try{r=JSON.parse(n)}catch(e){s=yr("JSON",l,e)}else if(t||"toml"===i)try{const{parse:e}=await import("./toml-CvAfdf9_.js");r=e(n)}catch(e){s=yr("TOML",l,e)}}catch(e){s=e}const f=[];for(const[e,t]of Object.entries(ar))s?"error"===e&&t().then((({notify:e})=>e(s.message))):r?.plugins?.includes(`!${e}`)||f.push(t().then((({default:e})=>e)));n=Promise.all(f),gr.set(e,{config:r,configURL:o,plugins:n,error:s})}var _r={is_pyterminal:()=>!1,sleep:e=>new Promise((t=>setTimeout(t,1e3*e)))};const wr=e=>{st(document,"currentScript",{configurable:!0,get:()=>e})},br=()=>{delete document.currentScript};var vr=async(e,t,n,r)=>{const s=r.endsWith("Async");(r.startsWith("onBefore")?wr:br)(n);for(const o of e(r))s?await o(t,n):o(t,n)};const Er=()=>!0,kr=e=>{throw new TypeError(e)},jr=(e,t)=>{const n=[];if(e)for(const t of e.split(/\s*\|\s*/))"object"===t?n.push((e=>null!==e&&typeof e===t)):"null"===t?n.push((e=>null===e)):n.push((e=>typeof e===t));if(t)for(const e of[].concat(t))n.push((t=>t instanceof e));switch(n.length){case 0:return Er;case 1:return n[0];default:return e=>n.some((t=>t(e)))}},xr=(e,t,n,r=kr)=>s=>{const o=[`Invalid ${typeof s} ${n}: expected `];e&&(o.push(e),t&&o.push(" or ")),t&&(o.push("an instanceof "),o.push([].concat(t).map((({name:e})=>e)).join(" | "))),r(o.join(""),s)},Rr=(e=>t=>{const[n,r]=((e,t="value")=>{const n=e?.typeof,r=e?.instanceof;return[jr(n,r),xr(n,r,t,e?.onerror)]})(t);return class extends e{add(e){return n(e)?super.add(e):r(e)}}})(Set);const{entries:Ar}=Object,Tr=["import os as _os","from pathlib import Path as _Path","_path = None"],Sr=new class extends Array{#e=!1;#t;#n;constructor(e,...t){super(),this.#n=e,this.#t=t}push(...e){return this.#e&&super.push(...e),this.#n.push(...e)}path(e){for(const t of this.#t)if(this.#e=e.startsWith(t))break}}(Tr,"./pyweb"),Nr=(e,t)=>{for(const[n,r]of Ar(t))if(Sr.path(`${e}/${n}`),Sr.push(`_path = _Path("${e}/${n}")`),"string"==typeof r){const e=JSON.stringify(r);Sr.push(`_path.write_text(${e},encoding="utf-8")`)}else Sr.push(`if not _os.path.exists("${e}/${n}"):`),Sr.push(" _path.mkdir(parents=True, exist_ok=True)"),Nr(`${e}/${n}`,r)};Nr(".",{pyscript:{"__init__.py":'# Some notes about the naming conventions and the relationship between various\n# similar-but-different names.\n#\n# import pyscript\n# this package contains the main user-facing API offered by pyscript. All\n# the names which are supposed be used by end users should be made\n# available in pyscript/__init__.py (i.e., this file)\n#\n# import _pyscript\n# this is an internal module implemented in JS. It is used internally by\n# the pyscript package, end users should not use it directly. For its\n# implementation, grep for `interpreter.registerJsModule("_pyscript",\n# ...)` in core.js\n#\n# import js\n# this is the JS globalThis, as exported by pyodide and/or micropython\'s\n# FFIs. As such, it contains different things in the main thread or in a\n# worker.\n#\n# import pyscript.magic_js\n# this submodule abstracts away some of the differences between the main\n# thread and the worker. In particular, it defines `window` and `document`\n# in such a way that these names work in both cases: in the main thread,\n# they are the "real" objects, in the worker they are proxies which work\n# thanks to coincident.\n#\n# from pyscript import window, document\n# these are just the window and document objects as defined by\n# pyscript.magic_js. This is the blessed way to access them from pyscript,\n# as it works transparently in both the main thread and worker cases.\n\nfrom pyscript.display import HTML, display\nfrom pyscript.fetch import fetch\nfrom pyscript.magic_js import (\n RUNNING_IN_WORKER,\n PyWorker,\n config,\n current_target,\n document,\n js_modules,\n sync,\n window,\n)\nfrom pyscript.websocket import WebSocket\n\ntry:\n from pyscript.event_handling import when\nexcept:\n # TODO: should we remove this? Or at the very least, we should capture\n # the traceback otherwise it\'s very hard to debug\n from pyscript.util import NotSupported\n\n when = NotSupported(\n "pyscript.when", "pyscript.when currently not available with this interpreter"\n )\n',"display.py":'import base64\nimport html\nimport io\nimport re\n\nfrom pyscript.magic_js import current_target, document, window\n\n_MIME_METHODS = {\n "savefig": "image/png",\n "_repr_javascript_": "application/javascript",\n "_repr_json_": "application/json",\n "_repr_latex": "text/latex",\n "_repr_png_": "image/png",\n "_repr_jpeg_": "image/jpeg",\n "_repr_pdf_": "application/pdf",\n "_repr_svg_": "image/svg+xml",\n "_repr_markdown_": "text/markdown",\n "_repr_html_": "text/html",\n "__repr__": "text/plain",\n}\n\n\ndef _render_image(mime, value, meta):\n # If the image value is using bytes we should convert it to base64\n # otherwise it will return raw bytes and the browser will not be able to\n # render it.\n if isinstance(value, bytes):\n value = base64.b64encode(value).decode("utf-8")\n\n # This is the pattern of base64 strings\n base64_pattern = re.compile(\n r"^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$"\n )\n # If value doesn\'t match the base64 pattern we should encode it to base64\n if len(value) > 0 and not base64_pattern.match(value):\n value = base64.b64encode(value.encode("utf-8")).decode("utf-8")\n\n data = f"data:{mime};charset=utf-8;base64,{value}"\n attrs = " ".join([\'{k}="{v}"\' for k, v in meta.items()])\n return f\'<img src="{data}" {attrs}></img>\'\n\n\ndef _identity(value, meta):\n return value\n\n\n_MIME_RENDERERS = {\n "text/plain": html.escape,\n "text/html": _identity,\n "image/png": lambda value, meta: _render_image("image/png", value, meta),\n "image/jpeg": lambda value, meta: _render_image("image/jpeg", value, meta),\n "image/svg+xml": _identity,\n "application/json": _identity,\n "application/javascript": lambda value, meta: f"<script>{value}<\\\\/script>",\n}\n\n\nclass HTML:\n """\n Wrap a string so that display() can render it as plain HTML\n """\n\n def __init__(self, html):\n self._html = html\n\n def _repr_html_(self):\n return self._html\n\n\ndef _eval_formatter(obj, print_method):\n """\n Evaluates a formatter method.\n """\n if print_method == "__repr__":\n return repr(obj)\n elif hasattr(obj, print_method):\n if print_method == "savefig":\n buf = io.BytesIO()\n obj.savefig(buf, format="png")\n buf.seek(0)\n return base64.b64encode(buf.read()).decode("utf-8")\n return getattr(obj, print_method)()\n elif print_method == "_repr_mimebundle_":\n return {}, {}\n return None\n\n\ndef _format_mime(obj):\n """\n Formats object using _repr_x_ methods.\n """\n if isinstance(obj, str):\n return html.escape(obj), "text/plain"\n\n mimebundle = _eval_formatter(obj, "_repr_mimebundle_")\n if isinstance(mimebundle, tuple):\n format_dict, _ = mimebundle\n else:\n format_dict = mimebundle\n\n output, not_available = None, []\n for method, mime_type in _MIME_METHODS.items():\n if mime_type in format_dict:\n output = format_dict[mime_type]\n else:\n output = _eval_formatter(obj, method)\n\n if output is None:\n continue\n elif mime_type not in _MIME_RENDERERS:\n not_available.append(mime_type)\n continue\n break\n if output is None:\n if not_available:\n window.console.warn(\n f"Rendered object requested unavailable MIME renderers: {not_available}"\n )\n output = repr(output)\n mime_type = "text/plain"\n elif isinstance(output, tuple):\n output, meta = output\n else:\n meta = {}\n return _MIME_RENDERERS[mime_type](output, meta), mime_type\n\n\ndef _write(element, value, append=False):\n html, mime_type = _format_mime(value)\n if html == "\\\\n":\n return\n\n if append:\n out_element = document.createElement("div")\n element.append(out_element)\n else:\n out_element = element.lastElementChild\n if out_element is None:\n out_element = element\n\n if mime_type in ("application/javascript", "text/html"):\n script_element = document.createRange().createContextualFragment(html)\n out_element.append(script_element)\n else:\n out_element.innerHTML = html\n\n\ndef display(*values, target=None, append=True):\n if target is None:\n target = current_target()\n elif not isinstance(target, str):\n raise TypeError(f"target must be str or None, not {target.__class__.__name__}")\n elif target == "":\n raise ValueError("Cannot have an empty target")\n elif target.startswith("#"):\n # note: here target is str and not None!\n # align with @when behavior\n target = target[1:]\n\n element = document.getElementById(target)\n\n # If target cannot be found on the page, a ValueError is raised\n if element is None:\n raise ValueError(\n f"Invalid selector with id={target}. Cannot be found in the page."\n )\n\n # if element is a <script type="py">, it has a \'target\' attribute which\n # points to the visual element holding the displayed values. In that case,\n # use that.\n if element.tagName == "SCRIPT" and hasattr(element, "target"):\n element = element.target\n\n for v in values:\n if not append:\n element.replaceChildren()\n _write(element, v, append=append)\n',"event_handling.py":'import inspect\n\ntry:\n from pyodide.ffi.wrappers import add_event_listener\n\nexcept ImportError:\n\n def add_event_listener(el, event_type, func):\n el.addEventListener(event_type, func)\n\n\nfrom pyscript.magic_js import document\n\n\ndef when(event_type=None, selector=None):\n """\n Decorates a function and passes py-* events to the decorated function\n The events might or not be an argument of the decorated function\n """\n\n def decorator(func):\n if isinstance(selector, str):\n elements = document.querySelectorAll(selector)\n else:\n # TODO: This is a hack that will be removed when pyscript becomes a package\n # and we can better manage the imports without circular dependencies\n from pyweb import pydom\n\n if isinstance(selector, pydom.Element):\n elements = [selector._js]\n elif isinstance(selector, pydom.ElementCollection):\n elements = [el._js for el in selector]\n else:\n raise ValueError(\n f"Invalid selector: {selector}. Selector must"\n " be a string, a pydom.Element or a pydom.ElementCollection."\n )\n try:\n sig = inspect.signature(func)\n # Function doesn\'t receive events\n if not sig.parameters:\n\n def wrapper(*args, **kwargs):\n func()\n\n else:\n wrapper = func\n\n except AttributeError:\n # TODO: this is currently an quick hack to get micropython working but we need\n # to actually properly replace inspect.signature with something else\n def wrapper(*args, **kwargs):\n try:\n return func(*args, **kwargs)\n except TypeError as e:\n if "takes 0 positional arguments" in str(e):\n return func()\n\n raise\n\n for el in elements:\n add_event_listener(el, event_type, wrapper)\n\n return func\n\n return decorator\n',"fetch.py":'import json\n\nimport js\nfrom pyscript.util import as_bytearray\n\n\n### wrap the response to grant Pythonic results\nclass _Response:\n def __init__(self, response):\n self._response = response\n\n # grant access to response.ok and other fields\n def __getattr__(self, attr):\n return getattr(self._response, attr)\n\n # exposed methods with Pythonic results\n async def arrayBuffer(self):\n buffer = await self._response.arrayBuffer()\n # works in Pyodide\n if hasattr(buffer, "to_py"):\n return buffer.to_py()\n # shims in MicroPython\n return memoryview(as_bytearray(buffer))\n\n async def blob(self):\n return await self._response.blob()\n\n async def bytearray(self):\n buffer = await self._response.arrayBuffer()\n return as_bytearray(buffer)\n\n async def json(self):\n return json.loads(await self.text())\n\n async def text(self):\n return await self._response.text()\n\n\n### allow direct await to _Response methods\nclass _DirectResponse:\n @staticmethod\n def setup(promise, response):\n promise._response = _Response(response)\n return promise._response\n\n def __init__(self, promise):\n self._promise = promise\n promise._response = None\n promise.arrayBuffer = self.arrayBuffer\n promise.blob = self.blob\n promise.bytearray = self.bytearray\n promise.json = self.json\n promise.text = self.text\n\n async def _response(self):\n if not self._promise._response:\n await self._promise\n return self._promise._response\n\n async def arrayBuffer(self):\n response = await self._response()\n return await response.arrayBuffer()\n\n async def blob(self):\n response = await self._response()\n return await response.blob()\n\n async def bytearray(self):\n response = await self._response()\n return await response.bytearray()\n\n async def json(self):\n response = await self._response()\n return await response.json()\n\n async def text(self):\n response = await self._response()\n return await response.text()\n\n\ndef fetch(url, **kw):\n # workaround Pyodide / MicroPython dict <-> js conversion\n options = js.JSON.parse(json.dumps(kw))\n awaited = lambda response, *args: _DirectResponse.setup(promise, response)\n promise = js.fetch(url, options).then(awaited)\n _DirectResponse(promise)\n return promise\n',"ffi.py":'try:\n import js\n from pyodide.ffi import create_proxy as _cp\n from pyodide.ffi import to_js as _py_tjs\n\n from_entries = js.Object.fromEntries\n\n def _tjs(value, **kw):\n if not hasattr(kw, "dict_converter"):\n kw["dict_converter"] = from_entries\n return _py_tjs(value, **kw)\n\nexcept:\n from jsffi import create_proxy as _cp\n from jsffi import to_js as _tjs\n\ncreate_proxy = _cp\nto_js = _tjs\n',"magic_js.py":'import json\nimport sys\n\nimport js as globalThis\nfrom polyscript import config as _config\nfrom polyscript import js_modules\nfrom pyscript.util import NotSupported\n\nRUNNING_IN_WORKER = not hasattr(globalThis, "document")\n\nconfig = json.loads(globalThis.JSON.stringify(_config))\n\n\n# allow `from pyscript.js_modules.xxx import yyy`\nclass JSModule:\n def __init__(self, name):\n self.name = name\n\n def __getattr__(self, field):\n # avoid pyodide looking for non existent fields\n if not field.startswith("_"):\n return getattr(getattr(js_modules, self.name), field)\n\n\n# generate N modules in the system that will proxy the real value\nfor name in globalThis.Reflect.ownKeys(js_modules):\n sys.modules[f"pyscript.js_modules.{name}"] = JSModule(name)\nsys.modules["pyscript.js_modules"] = js_modules\n\nif RUNNING_IN_WORKER:\n import polyscript\n\n PyWorker = NotSupported(\n "pyscript.PyWorker",\n "pyscript.PyWorker works only when running in the main thread",\n )\n\n try:\n globalThis.SharedArrayBuffer.new(4)\n import js\n\n window = polyscript.xworker.window\n document = window.document\n js.document = document\n except:\n globalThis.console.debug("SharedArrayBuffer is not available")\n # in this scenario none of the utilities would work\n # as expected so we better export these as NotSupported\n window = NotSupported(\n "pyscript.window",\n "pyscript.window in workers works only via SharedArrayBuffer",\n )\n document = NotSupported(\n "pyscript.document",\n "pyscript.document in workers works only via SharedArrayBuffer",\n )\n\n sync = polyscript.xworker.sync\n\n # in workers the display does not have a default ID\n # but there is a sync utility from xworker\n def current_target():\n return polyscript.target\n\nelse:\n import _pyscript\n from _pyscript import PyWorker\n\n window = globalThis\n document = globalThis.document\n sync = NotSupported(\n "pyscript.sync", "pyscript.sync works only when running in a worker"\n )\n\n # in MAIN the current element target exist, just use it\n def current_target():\n return _pyscript.target\n',"util.py":'import js\n\n\ndef as_bytearray(buffer):\n ui8a = js.Uint8Array.new(buffer)\n size = ui8a.length\n ba = bytearray(size)\n for i in range(0, size):\n ba[i] = ui8a[i]\n return ba\n\n\nclass NotSupported:\n """\n Small helper that raises exceptions if you try to get/set any attribute on\n it.\n """\n\n def __init__(self, name, error):\n object.__setattr__(self, "name", name)\n object.__setattr__(self, "error", error)\n\n def __repr__(self):\n return f"<NotSupported {self.name} [{self.error}]>"\n\n def __getattr__(self, attr):\n raise AttributeError(self.error)\n\n def __setattr__(self, attr, value):\n raise AttributeError(self.error)\n\n def __call__(self, *args):\n raise TypeError(self.error)\n',"websocket.py":'import js\nfrom pyscript.util import as_bytearray\n\ncode = "code"\nprotocols = "protocols"\nreason = "reason"\n\n\nclass EventMessage:\n def __init__(self, event):\n self._event = event\n\n def __getattr__(self, attr):\n value = getattr(self._event, attr)\n\n if attr == "data" and not isinstance(value, str):\n if hasattr(value, "to_py"):\n return value.to_py()\n # shims in MicroPython\n return memoryview(as_bytearray(value))\n\n return value\n\n\nclass WebSocket(object):\n CONNECTING = 0\n OPEN = 1\n CLOSING = 2\n CLOSED = 3\n\n def __init__(self, **kw):\n url = kw["url"]\n if protocols in kw:\n socket = js.WebSocket.new(url, kw[protocols])\n else:\n socket = js.WebSocket.new(url)\n object.__setattr__(self, "_ws", socket)\n\n for t in ["onclose", "onerror", "onmessage", "onopen"]:\n if t in kw:\n socket[t] = kw[t]\n\n def __getattr__(self, attr):\n return getattr(self._ws, attr)\n\n def __setattr__(self, attr, value):\n if attr == "onmessage":\n self._ws[attr] = lambda e: value(EventMessage(e))\n else:\n self._ws[attr] = value\n\n def close(self, **kw):\n if code in kw and reason in kw:\n self._ws.close(kw[code], kw[reason])\n elif code in kw:\n self._ws.close(kw[code])\n else:\n self._ws.close()\n\n def send(self, data):\n if isinstance(data, str):\n self._ws.send(data)\n else:\n buffer = js.Uint8Array.new(len(data))\n for pos, b in enumerate(data):\n buffer[pos] = b\n self._ws.send(buffer)\n'},pyweb:{"__init__.py":"from .pydom import dom as pydom\n","media.py":'from pyodide.ffi import to_js\nfrom pyscript import window\n\n\nclass Device:\n """Device represents a media input or output device, such as a microphone,\n camera, or headset.\n """\n\n def __init__(self, device):\n self._js = device\n\n @property\n def id(self):\n return self._js.deviceId\n\n @property\n def group(self):\n return self._js.groupId\n\n @property\n def kind(self):\n return self._js.kind\n\n @property\n def label(self):\n return self._js.label\n\n def __getitem__(self, key):\n return getattr(self, key)\n\n @classmethod\n async def load(cls, audio=False, video=True):\n """Load the device stream."""\n options = window.Object.new()\n options.audio = audio\n if isinstance(video, bool):\n options.video = video\n else:\n # TODO: Think this can be simplified but need to check it on the pyodide side\n\n # TODO: this is pyodide specific. shouldn\'t be!\n options.video = window.Object.new()\n for k in video:\n setattr(\n options.video,\n k,\n to_js(video[k], dict_converter=window.Object.fromEntries),\n )\n\n stream = await window.navigator.mediaDevices.getUserMedia(options)\n return stream\n\n async def get_stream(self):\n key = self.kind.replace("input", "").replace("output", "")\n options = {key: {"deviceId": {"exact": self.id}}}\n\n return await self.load(**options)\n\n\nasync def list_devices() -> list[dict]:\n """\n Return the list of the currently available media input and output devices,\n such as microphones, cameras, headsets, and so forth.\n\n Output:\n\n list(dict) - list of dictionaries representing the available media devices.\n Each dictionary has the following keys:\n * deviceId: a string that is an identifier for the represented device\n that is persisted across sessions. It is un-guessable by other\n applications and unique to the origin of the calling application.\n It is reset when the user clears cookies (for Private Browsing, a\n different identifier is used that is not persisted across sessions).\n\n * groupId: a string that is a group identifier. Two devices have the same\n group identifier if they belong to the same physical device — for\n example a monitor with both a built-in camera and a microphone.\n\n * kind: an enumerated value that is either "videoinput", "audioinput"\n or "audiooutput".\n\n * label: a string describing this device (for example "External USB\n Webcam").\n\n Note: the returned list will omit any devices that are blocked by the document\n Permission Policy: microphone, camera, speaker-selection (for output devices),\n and so on. Access to particular non-default devices is also gated by the\n Permissions API, and the list will omit devices for which the user has not\n granted explicit permission.\n """\n # https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/enumerateDevices\n return [\n Device(obj) for obj in await window.navigator.mediaDevices.enumerateDevices()\n ]\n',"pydom.py":'try:\n from typing import Any\nexcept ImportError:\n Any = "Any"\n\ntry:\n import warnings\nexcept ImportError:\n # TODO: For now it probably means we are in MicroPython. We should figure\n # out the "right" way to handle this. For now we just ignore the warning\n # and logging to console\n class warnings:\n @staticmethod\n def warn(*args, **kwargs):\n print("WARNING: ", *args, **kwargs)\n\n\ntry:\n from functools import cached_property\nexcept ImportError:\n # TODO: same comment about micropython as above\n cached_property = property\n\ntry:\n from pyodide.ffi import JsProxy\nexcept ImportError:\n # TODO: same comment about micropython as above\n def JsProxy(obj):\n return obj\n\n\nfrom pyscript import display, document, window\n\nalert = window.alert\n\n\nclass BaseElement:\n def __init__(self, js_element):\n self._js = js_element\n self._parent = None\n self.style = StyleProxy(self)\n self._proxies = {}\n\n def __eq__(self, obj):\n """Check if the element is the same as the other element by comparing\n the underlying JS element"""\n return isinstance(obj, BaseElement) and obj._js == self._js\n\n @property\n def parent(self):\n if self._parent:\n return self._parent\n\n if self._js.parentElement:\n self._parent = self.__class__(self._js.parentElement)\n\n return self._parent\n\n @property\n def __class(self):\n return self.__class__ if self.__class__ != PyDom else Element\n\n def create(self, type_, is_child=True, classes=None, html=None, label=None):\n js_el = document.createElement(type_)\n element = self.__class(js_el)\n\n if classes:\n for class_ in classes:\n element.add_class(class_)\n\n if html is not None:\n element.html = html\n\n if label is not None:\n element.label = label\n\n if is_child:\n self.append(element)\n\n return element\n\n def find(self, selector):\n """Return an ElementCollection representing all the child elements that\n match the specified selector.\n\n Args:\n selector (str): A string containing a selector expression\n\n Returns:\n ElementCollection: A collection of elements matching the selector\n """\n elements = self._js.querySelectorAll(selector)\n if not elements:\n return None\n return ElementCollection([Element(el) for el in elements])\n\n\nclass Element(BaseElement):\n @property\n def children(self):\n return [self.__class__(el) for el in self._js.children]\n\n def append(self, child):\n # TODO: this is Pyodide specific for now!!!!!!\n # if we get passed a JSProxy Element directly we just map it to the\n # higher level Python element\n if isinstance(child, JsProxy):\n return self.append(Element(child))\n\n elif isinstance(child, Element):\n self._js.appendChild(child._js)\n\n return child\n\n elif isinstance(child, ElementCollection):\n for el in child:\n self.append(el)\n\n # -------- Pythonic Interface to Element -------- #\n @property\n def html(self):\n return self._js.innerHTML\n\n @html.setter\n def html(self, value):\n self._js.innerHTML = value\n\n @property\n def text(self):\n return self._js.textContent\n\n @text.setter\n def text(self, value):\n self._js.textContent = value\n\n @property\n def content(self):\n # TODO: This breaks with with standard template elements. Define how to best\n # handle this specifica use case. Just not support for now?\n if self._js.tagName == "TEMPLATE":\n warnings.warn(\n "Content attribute not supported for template elements.", stacklevel=2\n )\n return None\n return self._js.innerHTML\n\n @content.setter\n def content(self, value):\n # TODO: (same comment as above)\n if self._js.tagName == "TEMPLATE":\n warnings.warn(\n "Content attribute not supported for template elements.", stacklevel=2\n )\n return\n\n display(value, target=self.id)\n\n @property\n def id(self):\n return self._js.id\n\n @id.setter\n def id(self, value):\n self._js.id = value\n\n @property\n def options(self):\n if "options" in self._proxies:\n return self._proxies["options"]\n\n if not self._js.tagName.lower() in {"select", "datalist", "optgroup"}:\n raise AttributeError(\n f"Element {self._js.tagName} has no options attribute."\n )\n self._proxies["options"] = OptionsProxy(self)\n return self._proxies["options"]\n\n @property\n def value(self):\n return self._js.value\n\n @value.setter\n def value(self, value):\n # in order to avoid confusion to the user, we don\'t allow setting the\n # value of elements that don\'t have a value attribute\n if not hasattr(self._js, "value"):\n raise AttributeError(\n f"Element {self._js.tagName} has no value attribute. If you want to "\n "force a value attribute, set it directly using the `_js.value = <value>` "\n "javascript API attribute instead."\n )\n self._js.value = value\n\n @property\n def selected(self):\n return self._js.selected\n\n @selected.setter\n def selected(self, value):\n # in order to avoid confusion to the user, we don\'t allow setting the\n # value of elements that don\'t have a value attribute\n if not hasattr(self._js, "selected"):\n raise AttributeError(\n f"Element {self._js.tagName} has no value attribute. If you want to "\n "force a value attribute, set it directly using the `_js.value = <value>` "\n "javascript API attribute instead."\n )\n self._js.selected = value\n\n def clone(self, new_id=None):\n clone = Element(self._js.cloneNode(True))\n clone.id = new_id\n\n return clone\n\n def remove_class(self, classname):\n classList = self._js.classList\n if isinstance(classname, list):\n classList.remove(*classname)\n else:\n classList.remove(classname)\n return self\n\n def add_class(self, classname):\n classList = self._js.classList\n if isinstance(classname, list):\n classList.add(*classname)\n else:\n self._js.classList.add(classname)\n return self\n\n @property\n def classes(self):\n classes = self._js.classList.values()\n return [x for x in classes]\n\n def show_me(self):\n self._js.scrollIntoView()\n\n def snap(\n self,\n to: BaseElement | str = None,\n width: int | None = None,\n height: int | None = None,\n ):\n """\n Captures a snapshot of a video element. (Only available for video elements)\n\n Inputs:\n\n * to: element where to save the snapshot of the video frame to\n * width: width of the image\n * height: height of the image\n\n Output:\n (Element) canvas element where the video frame snapshot was drawn into\n """\n if self._js.tagName != "VIDEO":\n raise AttributeError("Snap method is only available for video Elements")\n\n if to is None:\n canvas = self.create("canvas")\n if width is None:\n width = self._js.width\n if height is None:\n height = self._js.height\n canvas._js.width = width\n canvas._js.height = height\n\n elif isistance(to, Element):\n if to._js.tagName != "CANVAS":\n raise TypeError("Element to snap to must a canvas.")\n canvas = to\n elif getattr(to, "tagName", "") == "CANVAS":\n canvas = Element(to)\n elif isinstance(to, str):\n canvas = pydom[to][0]\n if canvas._js.tagName != "CANVAS":\n raise TypeError("Element to snap to must a be canvas.")\n\n canvas.draw(self, width, height)\n\n return canvas\n\n def download(self, filename: str = "snapped.png") -> None:\n """Download the current element (only available for canvas elements) with the filename\n provided in input.\n\n Inputs:\n * filename (str): name of the file being downloaded\n\n Output:\n None\n """\n if self._js.tagName != "CANVAS":\n raise AttributeError(\n "The download method is only available for canvas Elements"\n )\n\n link = self.create("a")\n link._js.download = filename\n link._js.href = self._js.toDataURL()\n link._js.click()\n\n def draw(self, what, width, height):\n """Draw `what` on the current element (only available for canvas elements).\n\n Inputs:\n\n * what (canvas image source): An element to draw into the context. The specification permits any canvas\n image source, specifically, an HTMLImageElement, an SVGImageElement, an HTMLVideoElement,\n an HTMLCanvasElement, an ImageBitmap, an OffscreenCanvas, or a VideoFrame.\n """\n if self._js.tagName != "CANVAS":\n raise AttributeError(\n "The draw method is only available for canvas Elements"\n )\n\n if isinstance(what, Element):\n what = what._js\n\n # https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/drawImage\n self._js.getContext("2d").drawImage(what, 0, 0, width, height)\n\n\nclass OptionsProxy:\n """This class represents the options of a select element. It\n allows to access to add and remove options by using the `add` and `remove` methods.\n """\n\n def __init__(self, element: Element) -> None:\n self._element = element\n if self._element._js.tagName.lower() != "select":\n raise AttributeError(\n f"Element {self._element._js.tagName} has no options attribute."\n )\n\n def add(\n self,\n value: Any = None,\n html: str = None,\n text: str = None,\n before: Element | int = None,\n **kws,\n ) -> None:\n """Add a new option to the select element"""\n # create the option element and set the attributes\n option = document.createElement("option")\n if value is not None:\n kws["value"] = value\n if html is not None:\n option.innerHTML = html\n if text is not None:\n kws["text"] = text\n\n for key, value in kws.items():\n option.setAttribute(key, value)\n\n if before:\n if isinstance(before, Element):\n before = before._js\n\n self._element._js.add(option, before)\n\n def remove(self, item: int) -> None:\n """Remove the option at the specified index"""\n self._element._js.remove(item)\n\n def clear(self) -> None:\n """Remove all the options"""\n for i in range(len(self)):\n self.remove(0)\n\n @property\n def options(self):\n """Return the list of options"""\n return [Element(opt) for opt in self._element._js.options]\n\n @property\n def selected(self):\n """Return the selected option"""\n return self.options[self._element._js.selectedIndex]\n\n def __iter__(self):\n yield from self.options\n\n def __len__(self):\n return len(self.options)\n\n def __repr__(self):\n return f"{self.__class__.__name__} (length: {len(self)}) {self.options}"\n\n def __getitem__(self, key):\n return self.options[key]\n\n\nclass StyleProxy: # (dict):\n def __init__(self, element: Element) -> None:\n self._element = element\n\n @cached_property\n def _style(self):\n return self._element._js.style\n\n def __getitem__(self, key):\n return self._style.getPropertyValue(key)\n\n def __setitem__(self, key, value):\n self._style.setProperty(key, value)\n\n def remove(self, key):\n self._style.removeProperty(key)\n\n def set(self, **kws):\n for k, v in kws.items():\n self._element._js.style.setProperty(k, v)\n\n # CSS Properties\n # Reference: https://github.com/microsoft/TypeScript/blob/main/src/lib/dom.generated.d.ts#L3799C1-L5005C2\n # Following prperties automatically generated from the above reference using\n # tools/codegen_css_proxy.py\n @property\n def visible(self):\n return self._element._js.style.visibility\n\n @visible.setter\n def visible(self, value):\n self._element._js.style.visibility = value\n\n\nclass StyleCollection:\n def __init__(self, collection: "ElementCollection") -> None:\n self._collection = collection\n\n def __get__(self, obj, objtype=None):\n return obj._get_attribute("style")\n\n def __getitem__(self, key):\n return self._collection._get_attribute("style")[key]\n\n def __setitem__(self, key, value):\n for element in self._collection._elements:\n element.style[key] = value\n\n def remove(self, key):\n for element in self._collection._elements:\n element.style.remove(key)\n\n\nclass ElementCollection:\n def __init__(self, elements: [Element]) -> None:\n self._elements = elements\n self.style = StyleCollection(self)\n\n def __getitem__(self, key):\n # If it\'s an integer we use it to access the elements in the collection\n if isinstance(key, int):\n return self._elements[key]\n # If it\'s a slice we use it to support slice operations over the elements\n # in the collection\n elif isinstance(key, slice):\n return ElementCollection(self._elements[key])\n\n # If it\'s anything else (basically a string) we use it as a selector\n # TODO: Write tests!\n elements = self._element.querySelectorAll(key)\n return ElementCollection([Element(el) for el in elements])\n\n def __len__(self):\n return len(self._elements)\n\n def __eq__(self, obj):\n """Check if the element is the same as the other element by comparing\n the underlying JS element"""\n return isinstance(obj, ElementCollection) and obj._elements == self._elements\n\n def _get_attribute(self, attr, index=None):\n if index is None:\n return [getattr(el, attr) for el in self._elements]\n\n # As JQuery, when getting an attr, only return it for the first element\n return getattr(self._elements[index], attr)\n\n def _set_attribute(self, attr, value):\n for el in self._elements:\n setattr(el, attr, value)\n\n @property\n def html(self):\n return self._get_attribute("html")\n\n @html.setter\n def html(self, value):\n self._set_attribute("html", value)\n\n @property\n def value(self):\n return self._get_attribute("value")\n\n @value.setter\n def value(self, value):\n self._set_attribute("value", value)\n\n @property\n def children(self):\n return self._elements\n\n def __iter__(self):\n yield from self._elements\n\n def __repr__(self):\n return f"{self.__class__.__name__} (length: {len(self._elements)}) {self._elements}"\n\n\nclass DomScope:\n def __getattr__(self, __name: str):\n element = document[f"#{__name}"]\n if element:\n return element[0]\n\n\nclass PyDom(BaseElement):\n # Add objects we want to expose to the DOM namespace since this class instance is being\n # remapped as "the module" itself\n BaseElement = BaseElement\n Element = Element\n ElementCollection = ElementCollection\n\n def __init__(self):\n # PyDom is a special case of BaseElement where we don\'t want to create a new JS element\n # and it really doesn\'t have a need for styleproxy or parent to to call to __init__\n # (which actually fails in MP for some reason)\n self._js = document\n self._parent = None\n self._proxies = {}\n self.ids = DomScope()\n self.body = Element(document.body)\n self.head = Element(document.head)\n\n def create(self, type_, classes=None, html=None):\n return super().create(type_, is_child=False, classes=classes, html=html)\n\n def __getitem__(self, key):\n elements = self._js.querySelectorAll(key)\n if not elements:\n return None\n return ElementCollection([Element(el) for el in elements])\n\n\ndom = PyDom()\n'}}),Tr.push("import pyscript as _pyscript"),Tr.push(...["_Path","_path","_os","_pyscript"].map((e=>`del ${e}`))),Tr.push("\n");const Or=Tr.join("\n"),Pr=Sr.join("\n"),Ir=e=>Lr.main[e],$r=e=>Lr.worker[e],Mr=(e,t,n,r)=>{e[n]=()=>{const e=r?[r]:[];return e.push(...t(n)),e.map(Ze).join("\n")}},Fr=(e,t)=>{const n="mpy"===t?Or.replace(Pr,""):Or,r={};return Mr(r,e,"codeBeforeRun",n),Mr(r,e,"codeBeforeRunAsync",n),Mr(r,e,"codeAfterRun"),Mr(r,e,"codeAfterRunAsync"),r},Cr=(e,t)=>{const n=[...$r(t)];if(n.length){const r=wn(e[`_${t}`]||(t.endsWith("Async")?async(e,t,...n)=>{for(const r of n)await r(e,t)}:(e,t,...n)=>{for(const r of n)r(e,t)})),s=n.map(wn).join(", ");return Function(`return(w,x)=>(${r})(w,x,...[${s}])`)()}},Wr=Rr({typeof:"function"}),Dr=Rr({typeof:"string"}),Lr={main:{onWorker:new Wr,onReady:new Wr,onBeforeRun:new Wr,onBeforeRunAsync:new Wr,onAfterRun:new Wr,onAfterRunAsync:new Wr,codeBeforeRun:new Dr(['\n import builtins\n def input(prompt=""):\n raise Exception("\\n ".join([\n "input() doesn\'t work when PyScript runs in the main thread.",\n "Consider using the worker attribute: https://pyscript.github.io/docs/2023.11.2/user-guide/workers/"\n ]))\n\n builtins.input = input\n del builtins\n del input\n']),codeBeforeRunAsync:new Dr,codeAfterRun:new Dr,codeAfterRunAsync:new Dr},worker:{onReady:new Wr,onBeforeRun:new Wr,onBeforeRunAsync:new Wr,onAfterRun:new Wr,onAfterRunAsync:new Wr,codeBeforeRun:new Dr,codeBeforeRunAsync:new Dr,codeAfterRun:new Dr,codeAfterRunAsync:new Dr}},Hr=({tagName:e})=>"SCRIPT"===e,[Br,Ur]=[...sr.entries()].map((([e,t])=>async function(n,r){await gr.get(e).plugins;const s=nr.call(new tr(null,Xr.get(e)),n,{...r,type:t});return tt(s.sync,_r),s.ready})),[{PyWorker:Jr,MPWorker:qr,hooks:Gr,config:zr,whenDefined:Yr},Vr]=e("@pyscript/core",{PyWorker:Br,MPWorker:Ur,hooks:Lr,config:{},whenDefined:Qn}),Kr=e=>e?.interpreter&&new URL(e.interpreter,location.href).href,Xr=new Map;for(const[e,t]of sr){if(Vr)break;const n=(t,n,r)=>{n?r.then((()=>ft(t,e,"done"))):ft(t,e,"done")},{config:r,configURL:s,plugins:o,error:a}=gr.get(e);let i=0;const l=(t=e)=>`${t}-${i++}`,c=async(t,n,r)=>{if(t.hasAttribute("src"))try{return await fr(t.getAttribute("src")).then(pr)}catch(e){n.stderr(e)}if(r)return Ze(t.textContent);const s=Ze(Qe(t.innerHTML));return console.warn(`Deprecated: use <script type="${e}"> for an always safe content parsing:\n`,s),s};let p,f=!1;const u=({XWorker:e,interpreter:t,io:n})=>{f||(f=!0,t.registerJsModule("_pyscript",{PyWorker:function(...t){const r=e(...t);return r.onerror=({error:e})=>n.stderr(e),r},get target(){return Hr(p)?p.target.id:p.id}}))};a||o.then((()=>{const o=new Map,a={main:{...Fr(Ir,e),async onReady(t,r){u(t);for(const e of Ir("onReady"))await e(t,r);if(o.has(r)){let{message:e}=o.get(r);o.delete(r);const n=e===Tn;return e=`(${ir.CONFLICTING_CODE}) ${e} for `,e+=r.cloneNode(n).outerHTML,void t.io.stderr(e)}if(Hr(r)){const{attributes:{async:s,target:o}}=r,a=!!o?.value,i=a?Nn(r,o.value):document.createElement("script-py");if(!a){const{head:e,body:t}=document;e.contains(r)?t.append(i):r.after(i)}i.id||(i.id=l()),st(r,"target",{value:i}),ft(r,e,"ready"),n(r,s,t["run"+(s?"Async":"")](await c(r,t.io,!0)))}else r._wrap.resolve(t);console.debug("[pyscript/main] PyScript Ready")},onWorker(e,t){tt(t.sync,_r);for(const n of Ir("onWorker"))n(e,t)},onBeforeRun(e,t){p=t,vr(Ir,e,t,"onBeforeRun")},onBeforeRunAsync:(e,t)=>(p=t,vr(Ir,e,t,"onBeforeRunAsync")),onAfterRun(e,t){vr(Ir,e,t,"onAfterRun")},onAfterRunAsync:(e,t)=>vr(Ir,e,t,"onAfterRunAsync")},worker:{...Fr($r,e),get onReady(){return Cr(this,"onReady")},get onBeforeRun(){return Cr(this,"onBeforeRun")},get onBeforeRunAsync(){return Cr(this,"onBeforeRunAsync")},get onAfterRun(){return Cr(this,"onAfterRun")},get onAfterRunAsync(){return Cr(this,"onAfterRunAsync")}}};Xr.set(e,a),Zn(e,{config:r,configURL:s,interpreter:t,hooks:a,env:`${e}-script`,version:Kr(r),onerror(e,t){o.set(t,e)}}),customElements.define(`${e}-script`,class extends HTMLElement{constructor(){tt(super(),{_wrap:Promise.withResolvers(),srcCode:"",executed:!1})}get id(){return super.id||(super.id=l())}set id(e){super.id=e}async connectedCallback(){if(!this.executed){this.executed=!0;const t=this.hasAttribute("async"),{io:r,run:s,runAsync:o}=await this._wrap.promise;this.srcCode=await c(this,r,!this.childElementCount),this.replaceChildren(),this.style.display="block",ft(this,e,"ready"),n(this,t,(t?o:s)(this.srcCode))}}})})),zr[e]=structuredClone(r)}export{tr as H,sr as T,nr as X,Ze as a,Pr as b,Xn as c,rt as d,Gr as e,Jr as f,qr as g,zr as h,Yr as i,Kr as o,Or as s};
//# sourceMappingURL=core-CPpjJT4b.js.map
This source diff could not be displayed because it is too large. You can view the blob instead.
mpy-config,mpy-script,py-config,py-script{display:none}.mpy-editor-box,.py-editor-box{padding:.5rem}.mpy-editor-input,.py-editor-input{position:relative}.mpy-editor-box:before,.py-editor-box:before{content:attr(data-env);display:block;font-size:x-small;text-align:end}.mpy-editor-output,.py-editor-output{white-space:pre}.mpy-editor-run-button,.py-editor-run-button{bottom:.5rem;opacity:0;position:absolute;right:.5rem;transition:opacity .25s;z-index:1}.mpy-editor-box:hover .mpy-editor-run-button,.mpy-editor-run-button:disabled,.mpy-editor-run-button:focus,.py-editor-box:hover .py-editor-run-button,.py-editor-run-button:disabled,.py-editor-run-button:focus{opacity:1}
\ No newline at end of file
export{g as MPWorker,f as PyWorker,T as TYPES,h as config,e as hooks,o as offline_interpreter,b as optional,s as stdlib,i as whenDefined}from"./core-CPpjJT4b.js";
//# sourceMappingURL=core.js.map
{"version":3,"file":"core.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment