`,o=`
${n} `,s=window.open("");s.document.write(r+e+o),s.document.title=`${yn[i]} JSON Source`}function On(e){return!(!e||!("load"in e))}function Sn(e){return On(e)?e:hn.loader(e)}async function kn(t,n,i={}){let r,o;e.isString(n)?(o=Sn(i.loader),r=JSON.parse(await o.load(n))):r=n;const s=function(t){const n=t.usermeta?.embedOptions??{};return e.isString(n.defaultStyle)&&(n.defaultStyle=!1),n}(r),a=s.loader;o&&!a||(o=Sn(i.loader??a));const l=await An(s,o),c=await An(i,o),u={...cn(c,l),config:e.mergeConfig(c.config??{},l.config??{})};return await async function(t,n,i={},r){const o=i.theme?e.mergeConfig(Ut[i.theme],i.config??{}):i.config,s=e.isBoolean(i.actions)?i.actions:cn({},gn,i.actions??{}),a={...mn,...i.i18n},l=i.renderer??"canvas",c=i.logLevel??hn.Warn,u=i.downloadFileName??"visualization",f="string"==typeof t?document.querySelector(t):t;if(!f)throw new Error(`${t} does not exist`);if(!1!==i.defaultStyle){const e="vega-embed-style",{root:t,rootContainer:n}=function(e){const t=e.getRootNode?e.getRootNode():document;return t instanceof ShadowRoot?{root:t,rootContainer:t}:{root:document,rootContainer:document.head??document.body}}(f);if(!t.getElementById(e)){const t=document.createElement("style");t.id=e,t.innerHTML=void 0===i.defaultStyle||!0===i.defaultStyle?ln.toString():i.defaultStyle,n.appendChild(t)}}const h=function(e,t){if(e.$schema){const n=Be(e.$schema);t&&t!==n.library&&console.warn(`The given visualization spec is written in ${yn[n.library]}, but mode argument sets ${yn[t]??t}.`);const i=n.library;return Ce(bn[i],`^${n.version.slice(1)}`)||console.warn(`The input spec uses ${yn[i]} ${n.version}, but the current version of ${yn[i]} is v${bn[i]}.`),i}return"mark"in e||"encoding"in e||"layer"in e||"hconcat"in e||"vconcat"in e||"facet"in e||"repeat"in e?"vega-lite":"marks"in e||"signals"in e||"scales"in e||"axes"in e?"vega":t??"vega"}(n,i.mode);let d=vn[h](n,o);if("vega-lite"===h&&d.$schema){const e=Be(d.$schema);Ce(bn.vega,`^${e.version.slice(1)}`)||console.warn(`The compiled spec uses Vega ${e.version}, but current version is v${bn.vega}.`)}f.classList.add("vega-embed"),s&&f.classList.add("has-actions");f.innerHTML="";let p=f;if(s){const e=document.createElement("div");e.classList.add(xn),f.appendChild(e),p=e}const g=i.patch;g&&(d=g instanceof Function?g(d):S(d,g,!0,!1).newDocument);i.formatLocale&&hn.formatLocale(i.formatLocale);i.timeFormatLocale&&hn.timeFormatLocale(i.timeFormatLocale);if(i.expressionFunctions)for(const e in i.expressionFunctions){const t=i.expressionFunctions[e];"fn"in t?hn.expressionFunction(e,t.fn,t.visitor):t instanceof Function&&hn.expressionFunction(e,t)}const{ast:m}=i,y=hn.parse(d,"vega-lite"===h?{}:o,{ast:m}),b=new(i.viewClass||hn.View)(y,{loader:r,logLevel:c,renderer:l,...m?{expr:hn.expressionInterpreter??i.expr??Ie}:{}});if(b.addSignalListener("autosize",((e,t)=>{const{type:n}=t;"fit-x"==n?(p.classList.add("fit-x"),p.classList.remove("fit-y")):"fit-y"==n?(p.classList.remove("fit-x"),p.classList.add("fit-y")):"fit"==n?p.classList.add("fit-x","fit-y"):p.classList.remove("fit-x","fit-y")})),!1!==i.tooltip){const{loader:e,tooltip:t}=i,n=e&&!On(e)?e?.baseURL:void 0,r="function"==typeof t?t:new an({baseURL:n,...!0===t?{}:t}).call;b.tooltip(r)}let v,{hover:w}=i;void 0===w&&(w="vega"===h);if(w){const{hoverSet:e,updateSet:t}="boolean"==typeof w?{}:w;b.hover(e,t)}i&&(null!=i.width&&b.width(i.width),null!=i.height&&b.height(i.height),null!=i.padding&&b.padding(i.padding));if(await b.initialize(p,i.bind).runAsync(),!1!==s){let t=f;if(!1!==i.defaultStyle||i.forceActionsMenu){const e=document.createElement("details");e.title=a.CLICK_TO_VIEW_ACTIONS,f.append(e),t=e;const n=document.createElement("summary");n.innerHTML=wn,e.append(n),v=t=>{e.contains(t.target)||e.removeAttribute("open")},document.addEventListener("click",v)}const r=document.createElement("div");if(t.append(r),r.classList.add("vega-actions"),!0===s||!1!==s.export)for(const t of["svg","png"])if(!0===s||!0===s.export||s.export[t]){const n=a[`${t.toUpperCase()}_ACTION`],o=document.createElement("a"),s=e.isObject(i.scaleFactor)?i.scaleFactor[t]:i.scaleFactor;o.text=n,o.href="#",o.target="_blank",o.download=`${u}.${t}`,o.addEventListener("mousedown",(async function(e){e.preventDefault();const n=await b.toImageURL(t,s);this.href=n})),r.append(o)}if(!0===s||!1!==s.source){const e=document.createElement("a");e.text=a.SOURCE_ACTION,e.href="#",e.addEventListener("click",(function(e){_n(N(n),i.sourceHeader??"",i.sourceFooter??"",h),e.preventDefault()})),r.append(e)}if("vega-lite"===h&&(!0===s||!1!==s.compiled)){const e=document.createElement("a");e.text=a.COMPILED_ACTION,e.href="#",e.addEventListener("click",(function(e){_n(N(d),i.sourceHeader??"",i.sourceFooter??"","vega"),e.preventDefault()})),r.append(e)}if(!0===s||!1!==s.editor){const e=i.editorUrl??"https://vega.github.io/editor/",t=document.createElement("a");t.text=a.EDITOR_ACTION,t.href="#",t.addEventListener("click",(function(t){!function(e,t,n){const i=e.open(t),{origin:r}=new URL(t);let o=40;e.addEventListener("message",(function t(n){n.source===i&&(o=0,e.removeEventListener("message",t,!1))}),!1),setTimeout((function e(){o<=0||(i.postMessage(n,r),setTimeout(e,250),o-=1)}),250)}(window,e,{config:o,mode:g?"vega":h,renderer:l,spec:N(g?d:n)}),t.preventDefault()})),r.append(t)}}function x(){v&&document.removeEventListener("click",v),b.finalize()}return{view:b,spec:n,vgSpec:d,finalize:x,embedOptions:i}}(t,r,u,o)}async function An(t,n){const i=e.isString(t.config)?JSON.parse(await n.load(t.config)):t.config??{},r=e.isString(t.patch)?JSON.parse(await n.load(t.patch)):t.patch;return{...t,...r?{patch:r}:{},...i?{config:i}:{}}}async function Tn(e,t={}){const n=document.createElement("div");n.classList.add("vega-embed-wrapper");const i=document.createElement("div");n.appendChild(i);const r=!0===t.actions||!1===t.actions?t.actions:{export:!0,source:!1,compiled:!0,editor:!0,...t.actions},o=await kn(i,e,{actions:r,...t});return n.value=o.view,n}const En=(...t)=>{return t.length>1&&(e.isString(t[0])&&!((n=t[0]).startsWith("http://")||n.startsWith("https://")||n.startsWith("//"))||t[0]instanceof HTMLElement||3===t.length)?kn(t[0],t[1],t[2]):Tn(t[0],t[1]);var n};return En.vegaLite=dn,En.vl=dn,En.container=Tn,En.embed=kn,En.vega=hn,En.default=kn,En.version=fn,En})),function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).loadPyodide={})}(this,(function(e){"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var t={exports:{}},n={exports:{}};!function(e,t){e.exports=function(){function e(e){return e.charAt(0).toUpperCase()+e.substring(1)}function t(e){return function(){return this[e]}}var n=["isConstructor","isEval","isNative","isToplevel"],i=["columnNumber","lineNumber"],r=["fileName","functionName","source"],o=n.concat(i,r,["args"],["evalOrigin"]);function s(t){if(t)for(var n=0;n-1&&(e=e.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(,.*$)/g,""));var t=e.replace(/^\s+/,"").replace(/\(eval code/g,"(").replace(/^.*?\s+/,""),n=t.match(/ (\(.+\)$)/);t=n?t.replace(n[0],""):t;var r=this.extractLocation(n?n[1]:t),o=n&&t||void 0,s=["eval",""].indexOf(r[0])>-1?void 0:r[0];return new i({functionName:o,fileName:s,lineNumber:r[1],columnNumber:r[2],source:e})}),this)},parseFFOrSafari:function(e){return e.stack.split("\n").filter((function(e){return!e.match(s)}),this).map((function(e){if(e.indexOf(" > eval")>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),-1===e.indexOf("@")&&-1===e.indexOf(":"))return new i({functionName:e});var t=/((.*".+"[^@]*)?[^@]*)(?:@)/,n=e.match(t),r=n&&n[1]?n[1]:void 0,o=this.extractLocation(e.replace(t,""));return new i({functionName:r,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:e})}),this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(e){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,n=e.message.split("\n"),r=[],o=2,s=n.length;o/,"$2").replace(/\([^)]*\)/g,"")||void 0;o.match(/\(([^)]*)\)/)&&(t=o.replace(/^[^(]+\(([^)]*)\)$/,"$1"));var a=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new i({functionName:s,args:a,fileName:r[0],lineNumber:r[1],columnNumber:r[2],source:e})}),this)}})}(t);var i=t.exports;const r="undefined"!=typeof process&&process.release&&"node"===process.release.name&&void 0===process.browser;let o,s,a,l,u,f,h,d,p;if(f=r?function(e,t){return a.resolve(t||".",e)}:function(e,t){return void 0===t&&(t=c),new URL(e,t).toString()},r||(h="/"),d=r?async function(e,t){if(e.startsWith("file://")&&(e=e.slice("file://".length)),e.includes("://")){let t=await s(e);if(!t.ok)throw new Error(`Failed to load '${e}': request failed.`);return new Uint8Array(await t.arrayBuffer())}{const t=await u.readFile(e);return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}}:async function(e,t){const n=new URL(e,c);let i=t?{integrity:t}:{},r=await fetch(n,i);if(!r.ok)throw new Error(`Failed to load '${n}': request failed.`);return new Uint8Array(await r.arrayBuffer())},globalThis.document)p=async e=>await import(e);else if(globalThis.importScripts)p=async e=>{try{globalThis.importScripts(e)}catch(t){if(!(t instanceof TypeError))throw t;await import(e)}};else{if(!r)throw new Error("Cannot determine runtime environment");p=async function(e){e.startsWith("file://")&&(e=e.slice("file://".length)),e.includes("://")?l.runInThisContext(await(await s(e)).text()):await import(o.pathToFileURL(e).href)}}function g(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],i=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&i>=e.length&&(e=void 0),{value:e&&e[i++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}(e),t={},i("next"),i("throw"),i("return"),t[Symbol.asyncIterator]=function(){return this},t);function i(n){t[n]=e[n]&&function(t){return new Promise((function(i,r){!function(e,t,n,i){Promise.resolve(i).then((function(t){e({value:t,done:n})}),t)}(i,r,(t=e[n](t)).done,t.value)}))}}}async function m(e={}){await async function(){if(!r)return;if(o=(await import("url")).default,u=await import("fs/promises"),s=globalThis.fetch?fetch:(await import("node-fetch")).default,l=(await import("vm")).default,a=await import("path"),h=a.sep,"undefined"!=typeof require)return;const e={fs:await import("fs"),crypto:await import("crypto"),ws:await import("ws"),child_process:await import("child_process")};globalThis.require=function(t){return e[t]}}();let t=e.indexURL||function(){if("string"==typeof __dirname)return __dirname;let e;try{throw new Error}catch(t){e=t}let t=i.parse(e)[0].fileName;const n=t.lastIndexOf(h);if(-1===n)throw new Error("Could not extract indexURL path from pyodide module location");return t.slice(0,n)}();t=f(t),t.endsWith("/")||(t+="/"),e.indexURL=t;const n={fullStdLib:!1,jsglobals:globalThis,stdin:globalThis.prompt?globalThis.prompt:void 0,homedir:"/home/pyodide",lockFileURL:t+"repodata.json",args:[],_node_mounts:[]},c=Object.assign(n,e),m=d(c.indexURL+"pyodide_py.tar"),y=function(){let e={noImageDecoding:!0,noAudioDecoding:!0,noWasmDecoding:!1,preRun:[],quit:(t,n)=>{throw e.exited={status:t,toThrow:n},n}};return e}();y.print=c.stdout,y.printErr=c.stderr,y.preRun.push((()=>{for(const e of c._node_mounts)y.FS.mkdirTree(e),y.FS.mount(y.NODEFS,{root:e},e)})),y.arguments=c.args;const b={config:c};y.API=b,function(e,t){e.preRun.push((function(){try{e.FS.mkdirTree(t)}catch(e){console.error(`Error occurred while making a home directory '${t}':`),console.error(e),console.error("Using '/' for a home directory instead"),t="/"}e.ENV.HOME=t,e.FS.chdir(t)}))}(y,c.homedir);const v=new Promise((e=>y.postRun=e));if(y.locateFile=e=>c.indexURL+e,"function"!=typeof _createPyodideModule){const e=`${c.indexURL}pyodide.asm.js`;await p(e)}if(await _createPyodideModule(y),await v,y.exited)throw y.exited.toThrow;if("0.22.0"!==b.version)throw new Error(`Pyodide version does not match: '0.22.0' <==> '${b.version}'. If you updated the Pyodide version, make sure you also updated the 'indexURL' parameter passed to loadPyodide.`);y.locateFile=e=>{throw new Error("Didn't expect to load any more file_packager files!")},function(e){const t=e.FS,n=e.FS.filesystems.MEMFS,i=e.PATH,r={DIR_MODE:16895,FILE_MODE:33279,mount:function(e){if(!e.opts.fileSystemHandle)throw new Error("opts.fileSystemHandle is required");return n.mount.apply(null,arguments)},syncfs:async(e,t,n)=>{try{const i=r.getLocalSet(e),o=await r.getRemoteSet(e),s=t?o:i,a=t?i:o;await r.reconcile(e,s,a),n(null)}catch(e){n(e)}},getLocalSet:e=>{let n=Object.create(null);function r(e){return"."!==e&&".."!==e}function o(e){return t=>i.join2(e,t)}let s=t.readdir(e.mountpoint).filter(r).map(o(e.mountpoint));for(;s.length;){let e=s.pop(),i=t.stat(e);t.isDir(i.mode)&&s.push.apply(s,t.readdir(e).filter(r).map(o(e))),n[e]={timestamp:i.mtime,mode:i.mode}}return{type:"local",entries:n}},getRemoteSet:async e=>{const t=Object.create(null),n=await(async e=>{const t=[];await async function e(n){var i,r;try{for(var o,s=g(n.values());!(o=await s.next()).done;){const n=o.value;t.push(n),"directory"===n.kind&&await e(n)}}catch(e){i={error:e}}finally{try{o&&!o.done&&(r=s.return)&&await r.call(s)}finally{if(i)throw i.error}}}(e);const n=new Map;n.set(".",e);for(const i of t){const t=(await e.resolve(i)).join("/");n.set(t,i)}return n})(e.opts.fileSystemHandle);for(const[o,s]of n)"."!==o&&(t[i.join2(e.mountpoint,o)]={timestamp:"file"===s.kind?(await s.getFile()).lastModifiedDate:new Date,mode:"file"===s.kind?r.FILE_MODE:r.DIR_MODE});return{type:"remote",entries:t,handles:n}},loadLocalEntry:e=>{const i=t.lookupPath(e).node,r=t.stat(e);if(t.isDir(r.mode))return{timestamp:r.mtime,mode:r.mode};if(t.isFile(r.mode))return i.contents=n.getFileDataAsTypedArray(i),{timestamp:r.mtime,mode:r.mode,contents:i.contents};throw new Error("node type not supported")},storeLocalEntry:(e,n)=>{if(t.isDir(n.mode))t.mkdirTree(e,n.mode);else{if(!t.isFile(n.mode))throw new Error("node type not supported");t.writeFile(e,n.contents,{canOwn:!0})}t.chmod(e,n.mode),t.utime(e,n.timestamp,n.timestamp)},removeLocalEntry:e=>{var n=t.stat(e);t.isDir(n.mode)?t.rmdir(e):t.isFile(n.mode)&&t.unlink(e)},loadRemoteEntry:async e=>{if("file"===e.kind){const t=await e.getFile();return{contents:new Uint8Array(await t.arrayBuffer()),mode:r.FILE_MODE,timestamp:t.lastModifiedDate}}if("directory"===e.kind)return{mode:r.DIR_MODE,timestamp:new Date};throw new Error("unknown kind: "+e.kind)},storeRemoteEntry:async(e,n,r)=>{const o=e.get(i.dirname(n)),s=t.isFile(r.mode)?await o.getFileHandle(i.basename(n),{create:!0}):await o.getDirectoryHandle(i.basename(n),{create:!0});if("file"===s.kind){const e=await s.createWritable();await e.write(r.contents),await e.close()}e.set(n,s)},removeRemoteEntry:async(e,t)=>{const n=e.get(i.dirname(t));await n.removeEntry(i.basename(t)),e.delete(t)},reconcile:async(e,n,o)=>{let s=0;const a=[];Object.keys(n.entries).forEach((function(e){const i=n.entries[e],r=o.entries[e];(!r||t.isFile(i.mode)&&i.timestamp.getTime()>r.timestamp.getTime())&&(a.push(e),s++)})),a.sort();const l=[];if(Object.keys(o.entries).forEach((function(e){n.entries[e]||(l.push(e),s++)})),l.sort().reverse(),!s)return;const c="remote"===n.type?n.handles:o.handles;for(const t of a){const n=i.normalize(t.replace(e.mountpoint,"/")).substring(1);if("local"===o.type){const e=c.get(n),i=await r.loadRemoteEntry(e);r.storeLocalEntry(t,i)}else{const e=r.loadLocalEntry(t);await r.storeRemoteEntry(c,n,e)}}for(const t of l)if("local"===o.type)r.removeLocalEntry(t);else{const n=i.normalize(t.replace(e.mountpoint,"/")).substring(1);await r.removeRemoteEntry(c,n)}}};e.FS.filesystems.NATIVEFS_ASYNC=r}(y);const w=await m;!function(e,t){let n=e.FS.open("/pyodide_py.tar","w");e.FS.write(n,t,0,t.byteLength,void 0,!0),e.FS.close(n);let[i,r]=e.API.rawRun('\nfrom sys import version_info\npyversion = f"python{version_info.major}.{version_info.minor}"\nimport shutil\nshutil.unpack_archive("/pyodide_py.tar", f"/lib/{pyversion}/")\ndel shutil\nimport importlib\nimportlib.invalidate_caches()\ndel importlib\n');i&&e.API.fatal_loading_error("Failed to unpack standard library.\n",r),e.FS.unlink("/pyodide_py.tar")}(y,w),b.rawRun("import _pyodide_core");const x=function(e,t){e.runPythonInternal_dict=e._pyodide._base.eval_code("{}"),e.importlib=e.runPythonInternal("import importlib; importlib");let n=e.importlib.import_module;e.sys=n("sys"),e.sys.path.insert(0,t.homedir),e.os=n("os");let i=e.runPythonInternal("import __main__; __main__.__dict__"),r=e.runPythonInternal("import builtins; builtins.__dict__");var o;e.globals=(o=r,new Proxy(i,{get:(e,t)=>"get"===t?t=>{let n=e.get(t);return void 0===n&&(n=o.get(t)),n}:"has"===t?t=>e.has(t)||o.has(t):Reflect.get(e,t)}));let s=e._pyodide._importhook;s.register_js_finder(),s.register_js_module("js",t.jsglobals);let a=e.makePublicAPI();return s.register_js_module("pyodide_js",a),e.pyodide_py=n("pyodide"),e.pyodide_code=n("pyodide.code"),e.pyodide_ffi=n("pyodide.ffi"),e.package_loader=n("pyodide._package_loader"),e.sitepackages=e.package_loader.SITE_PACKAGES.__str__(),e.dsodir=e.package_loader.DSO_DIR.__str__(),e.defaultLdLibraryPath=[e.dsodir,e.sitepackages],e.os.environ.__setitem__("LD_LIBRARY_PATH",e.defaultLdLibraryPath.join(":")),a.pyodide_py=e.pyodide_py,a.globals=e.globals,a}(b,c);if(x.version.includes("dev")||b.setCdnUrl(`https://cdn.jsdelivr.net/pyodide/v${x.version}/full/`),await b.packageIndexReady,b._pyodide._importhook.register_module_not_found_hook(b.repodata_packages),"0.22.0"!==b.repodata_info.version)throw new Error("Lock file version doesn't match Pyodide version");return b.package_loader.init_loaded_packages(),c.fullStdLib&&await x.loadPackage(b._pyodide._importhook.UNVENDORED_STDLIBS),b.initializeStreams(c.stdin,c.stdout,c.stderr),x}globalThis.loadPyodide=m,e.loadPyodide=m,e.version="0.22.0",Object.defineProperty(e,"__esModule",{value:!0})}))}).call(this);