From c632d4dc8946d486465d5f469ab4a094c6b1ffe9 Mon Sep 17 00:00:00 2001
From: IGUCHI Masato <67450288+iguchi-lab@users.noreply.github.com>
Date: Mon, 17 Aug 2026 15:44:59 +0900
Subject: [PATCH 01/10] Add Mollier diagram page
---
web-release/mollier/index.html | 60 ++++++++++++++++++++++++++++++++++
1 file changed, 60 insertions(+)
create mode 100644 web-release/mollier/index.html
diff --git a/web-release/mollier/index.html b/web-release/mollier/index.html
new file mode 100644
index 0000000..9477b66
--- /dev/null
+++ b/web-release/mollier/index.html
@@ -0,0 +1,60 @@
+
+
+
+
+
+ p-h線図(モリエル線図)
+
+
+
+
+
+ p-h線図(モリエル線図)
+ 冷媒と運転条件を指定し、理想的な蒸気圧縮冷凍サイクルを表示します。
+
+
+
+
+
+
冷媒p-h線図
CoolPropを読み込んでいます…
+
+
+
+
+
+
+
+
+ 計算エンジン: CoolProp 8.0.0(MIT License)。
+ 描画ロジック: iguchi-lab/mollier-diagram。
+
+
+
+
+
From 126dd3a9fb719139f226d2e6e7a354758955968d Mon Sep 17 00:00:00 2001
From: IGUCHI Masato <67450288+iguchi-lab@users.noreply.github.com>
Date: Mon, 17 Aug 2026 15:46:29 +0900
Subject: [PATCH 02/10] Add browser Mollier calculations and SVG renderer
---
web-release/mollier/mollier-chart.js | 373 +++++++++++++++++++++++++++
1 file changed, 373 insertions(+)
create mode 100644 web-release/mollier/mollier-chart.js
diff --git a/web-release/mollier/mollier-chart.js b/web-release/mollier/mollier-chart.js
new file mode 100644
index 0000000..adf9f6e
--- /dev/null
+++ b/web-release/mollier/mollier-chart.js
@@ -0,0 +1,373 @@
+const SVG_NS = "http://www.w3.org/2000/svg";
+const KELVIN_OFFSET = 273.15;
+const PA_PER_MPA = 1e6;
+const MAX_PROPERTY = 1e100;
+
+const finiteProperty = (value) => Number.isFinite(value) && Math.abs(value) < MAX_PROPERTY;
+
+function property(coolprop, output, input1, value1, input2, value2, fluid) {
+ const result = coolprop.PropsSI(output, input1, value1, input2, value2, fluid);
+ if (!finiteProperty(result)) throw new Error(`${output}を計算できませんでした。`);
+ return result;
+}
+
+function constantProperty(coolprop, output, fluid) {
+ return property(coolprop, output, "", 0, "", 0, fluid);
+}
+
+function safeProperty(coolprop, output, input1, value1, input2, value2, fluid) {
+ try {
+ const result = coolprop.PropsSI(output, input1, value1, input2, value2, fluid);
+ return finiteProperty(result) ? result : null;
+ } catch {
+ return null;
+ }
+}
+
+function sequence(start, end, count) {
+ if (count < 2) return [start];
+ return Array.from({ length: count }, (_, index) => start + (end - start) * index / (count - 1));
+}
+
+function logSequence(start, end, count) {
+ const startLog = Math.log(start);
+ const endLog = Math.log(end);
+ return sequence(startLog, endLog, count).map(Math.exp);
+}
+
+function propertySeries(coolprop, output, input1, value1, input2, values2, fluid, xScale = 1) {
+ return values2.map((value2) => {
+ const result = safeProperty(coolprop, output, input1, value1, input2, value2, fluid);
+ return result == null ? null : result / xScale;
+ });
+}
+
+function validateOptions(options) {
+ const values = [
+ options.evaporatingTemperature,
+ options.condensingTemperature,
+ options.superheat,
+ options.subcooling,
+ options.pressureMin,
+ options.pressureMax,
+ ];
+ if (!values.every(Number.isFinite)) throw new Error("入力値を確認してください。");
+ if (options.condensingTemperature <= options.evaporatingTemperature) {
+ throw new Error("凝縮温度は蒸発温度より高くしてください。");
+ }
+ if (options.superheat < 0 || options.subcooling < 0) {
+ throw new Error("過熱度と過冷却度は0以上にしてください。");
+ }
+ if (options.pressureMin <= 0 || options.pressureMax <= options.pressureMin) {
+ throw new Error("圧力範囲を確認してください。");
+ }
+}
+
+export function calculateMollierData(coolprop, options) {
+ validateOptions(options);
+ const fluid = options.fluid;
+ const curvePoints = options.curvePoints ?? 140;
+ const pressurePoints = options.pressurePoints ?? 100;
+ const tripleTemperature = constantProperty(coolprop, "Ttriple", fluid);
+ const criticalTemperature = constantProperty(coolprop, "Tcrit", fluid);
+ const evaporatingTemperatureK = options.evaporatingTemperature + KELVIN_OFFSET;
+ const condensingTemperatureK = options.condensingTemperature + KELVIN_OFFSET;
+
+ if (!(tripleTemperature < evaporatingTemperatureK && evaporatingTemperatureK < criticalTemperature)) {
+ throw new Error("蒸発温度は三重点と臨界点の間にしてください。");
+ }
+ if (!(tripleTemperature < condensingTemperatureK && condensingTemperatureK < criticalTemperature)) {
+ throw new Error("凝縮温度は三重点と臨界点の間にしてください。");
+ }
+
+ const saturationStart = Math.max(tripleTemperature + 0.05, -52.15 + KELVIN_OFFSET);
+ const saturationTemperatures = sequence(saturationStart, criticalTemperature - 0.05, curvePoints);
+ const saturatedLiquid = [];
+ const saturatedVapor = [];
+ for (const temperature of saturationTemperatures) {
+ const pressure = property(coolprop, "P", "T", temperature, "Q", 0, fluid) / PA_PER_MPA;
+ saturatedLiquid.push({
+ h: property(coolprop, "H", "T", temperature, "Q", 0, fluid) / 1000,
+ p: pressure,
+ });
+ saturatedVapor.push({
+ h: property(coolprop, "H", "T", temperature, "Q", 1, fluid) / 1000,
+ p: pressure,
+ });
+ }
+
+ const pressuresPa = logSequence(
+ options.pressureMin * PA_PER_MPA,
+ options.pressureMax * PA_PER_MPA,
+ pressurePoints,
+ );
+
+ const entropyLines = [2.0, 2.2, 2.4].map((entropy) => ({
+ value: entropy,
+ points: propertySeries(coolprop, "H", "S", entropy * 1000, "P", pressuresPa, fluid, 1000)
+ .map((h, index) => h == null ? null : { h, p: pressuresPa[index] / PA_PER_MPA }),
+ }));
+
+ const temperatureLines = [-20, 0, 20, 40, 60, 80, 100].map((temperature) => ({
+ value: temperature,
+ points: propertySeries(
+ coolprop,
+ "H",
+ "T",
+ temperature + KELVIN_OFFSET,
+ "P",
+ pressuresPa,
+ fluid,
+ 1000,
+ ).map((h, index) => h == null ? null : { h, p: pressuresPa[index] / PA_PER_MPA }),
+ }));
+
+ const evaporatingPressure = property(
+ coolprop, "P", "T", evaporatingTemperatureK, "Q", 1, fluid,
+ );
+ const condensingPressure = property(
+ coolprop, "P", "T", condensingTemperatureK, "Q", 0, fluid,
+ );
+ if (evaporatingPressure / PA_PER_MPA < options.pressureMin
+ || condensingPressure / PA_PER_MPA > options.pressureMax) {
+ throw new Error("サイクル圧力が表示圧力範囲外です。圧力範囲を広げてください。");
+ }
+
+ const compressorInletTemperature = evaporatingTemperatureK + options.superheat;
+ const condenserExitTemperature = condensingTemperatureK - options.subcooling;
+ const h1 = property(coolprop, "H", "T", compressorInletTemperature, "P", evaporatingPressure, fluid);
+ const s1 = property(coolprop, "S", "T", compressorInletTemperature, "P", evaporatingPressure, fluid);
+ const h2 = property(coolprop, "H", "S", s1, "P", condensingPressure, fluid);
+ const h3 = property(coolprop, "H", "T", condenserExitTemperature, "P", condensingPressure, fluid);
+ const rawStates = [
+ [1, "圧縮機入口", h1, evaporatingPressure],
+ [2, "圧縮機出口", h2, condensingPressure],
+ [3, "凝縮器出口", h3, condensingPressure],
+ [4, "膨張弁出口", h3, evaporatingPressure],
+ ];
+ const states = rawStates.map(([number, name, enthalpy, pressure]) => ({
+ number,
+ name,
+ h: enthalpy / 1000,
+ p: pressure / PA_PER_MPA,
+ t: property(coolprop, "T", "H", enthalpy, "P", pressure, fluid) - KELVIN_OFFSET,
+ s: property(coolprop, "S", "H", enthalpy, "P", pressure, fluid) / 1000,
+ }));
+
+ const compressionPressures = logSequence(evaporatingPressure, condensingPressure, 80);
+ const compression = propertySeries(
+ coolprop, "H", "S", s1, "P", compressionPressures, fluid, 1000,
+ ).map((h, index) => h == null ? null : {
+ h,
+ p: compressionPressures[index] / PA_PER_MPA,
+ });
+
+ return {
+ fluid,
+ pressureMin: options.pressureMin,
+ pressureMax: options.pressureMax,
+ saturatedLiquid,
+ saturatedVapor,
+ entropyLines,
+ temperatureLines,
+ states,
+ compression,
+ };
+}
+
+function svgElement(name, attributes = {}, text = "") {
+ const element = document.createElementNS(SVG_NS, name);
+ for (const [key, value] of Object.entries(attributes)) element.setAttribute(key, value);
+ if (text) element.textContent = text;
+ return element;
+}
+
+function pathData(points, project) {
+ let data = "";
+ let drawing = false;
+ for (const point of points) {
+ if (!point || !Number.isFinite(point.h) || !Number.isFinite(point.p)) {
+ drawing = false;
+ continue;
+ }
+ const [x, y] = project(point);
+ data += `${drawing ? "L" : "M"}${x.toFixed(2)},${y.toFixed(2)}`;
+ drawing = true;
+ }
+ return data;
+}
+
+function appendPath(group, points, project, attributes) {
+ const d = pathData(points, project);
+ if (d) group.append(svgElement("path", { d, fill: "none", ...attributes }));
+}
+
+function lastPoint(points) {
+ for (let index = points.length - 1; index >= 0; index -= 1) {
+ if (points[index]) return points[index];
+ }
+ return null;
+}
+
+export function renderMollierDiagram(svg, data) {
+ const width = 960;
+ const height = 640;
+ const margin = { top: 50, right: 54, bottom: 66, left: 76 };
+ const hMin = 100;
+ const hMax = 700;
+ const plotWidth = width - margin.left - margin.right;
+ const plotHeight = height - margin.top - margin.bottom;
+ const logMin = Math.log(data.pressureMin);
+ const logMax = Math.log(data.pressureMax);
+ const project = ({ h, p }) => [
+ margin.left + (h - hMin) * plotWidth / (hMax - hMin),
+ margin.top + (logMax - Math.log(p)) * plotHeight / (logMax - logMin),
+ ];
+
+ svg.replaceChildren();
+ svg.setAttribute("viewBox", `0 0 ${width} ${height}`);
+ svg.setAttribute("xmlns", SVG_NS);
+ svg.append(svgElement("title", { id: "mollier-title" }, `p-h線図(${data.fluid})`));
+ svg.append(svgElement("desc", { id: "mollier-description" }, "冷媒の飽和線、等温線、等エントロピー線と理想冷凍サイクルを示します。"));
+ svg.append(svgElement("rect", { width, height, fill: "#ffffff" }));
+ svg.append(svgElement("text", {
+ x: width / 2, y: 27, "text-anchor": "middle", fill: "#17212b",
+ "font-size": 19, "font-weight": 700,
+ }, `p-h線図(${data.fluid})`));
+
+ const clipId = "mollier-plot-clip";
+ const defs = svgElement("defs");
+ const clip = svgElement("clipPath", { id: clipId });
+ clip.append(svgElement("rect", {
+ x: margin.left, y: margin.top, width: plotWidth, height: plotHeight,
+ }));
+ defs.append(clip);
+ svg.append(defs);
+
+ const plot = svgElement("g", { "clip-path": `url(#${clipId})` });
+ svg.append(plot);
+ const pressureTicks = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 2, 3, 4, 5, 6, 8, 10]
+ .filter((value) => value >= data.pressureMin && value <= data.pressureMax);
+ for (const pressure of pressureTicks) {
+ const [, y] = project({ h: hMin, p: pressure });
+ plot.append(svgElement("line", {
+ x1: margin.left, y1: y, x2: margin.left + plotWidth, y2: y,
+ stroke: Number.isInteger(pressure) ? "#94a3b8" : "#d7dee5",
+ "stroke-width": Number.isInteger(pressure) ? 0.8 : 0.45,
+ }));
+ }
+ for (let enthalpy = hMin; enthalpy <= hMax; enthalpy += 50) {
+ const [x] = project({ h: enthalpy, p: data.pressureMin });
+ plot.append(svgElement("line", {
+ x1: x, y1: margin.top, x2: x, y2: margin.top + plotHeight,
+ stroke: enthalpy % 100 === 0 ? "#cbd5e1" : "#e8edf1",
+ "stroke-width": enthalpy % 100 === 0 ? 0.7 : 0.4,
+ }));
+ }
+
+ for (const line of data.temperatureLines) {
+ appendPath(plot, line.points, project, {
+ stroke: "#4f8bd6", "stroke-width": 0.85, "stroke-dasharray": "5 3",
+ });
+ const point = lastPoint(line.points);
+ if (point) {
+ const [x, y] = project(point);
+ plot.append(svgElement("text", {
+ x: x - 5, y: y - 5, "text-anchor": "end", fill: "#2563a5", "font-size": 10,
+ }, `${line.value}℃`));
+ }
+ }
+ for (const line of data.entropyLines) {
+ appendPath(plot, line.points, project, { stroke: "#9f3c3c", "stroke-width": 0.9 });
+ const point = lastPoint(line.points);
+ if (point) {
+ const [x, y] = project(point);
+ plot.append(svgElement("text", {
+ x: x - 5, y: y + 12, "text-anchor": "end", fill: "#8b2f2f", "font-size": 10,
+ }, `s=${line.value.toFixed(1)}`));
+ }
+ }
+
+ appendPath(plot, data.saturatedLiquid, project, {
+ stroke: "#111827", "stroke-width": 1.5, "stroke-dasharray": "6 3",
+ });
+ appendPath(plot, data.saturatedVapor, project, {
+ stroke: "#111827", "stroke-width": 1.5, "stroke-dasharray": "6 3",
+ });
+
+ const byNumber = Object.fromEntries(data.states.map((state) => [state.number, state]));
+ appendPath(plot, [byNumber[4], byNumber[1]], project, { stroke: "#dc2626", "stroke-width": 2 });
+ appendPath(plot, data.compression, project, { stroke: "#dc2626", "stroke-width": 2 });
+ appendPath(plot, [byNumber[2], byNumber[3]], project, { stroke: "#dc2626", "stroke-width": 2 });
+ appendPath(plot, [byNumber[3], byNumber[4]], project, { stroke: "#dc2626", "stroke-width": 2 });
+ for (const state of data.states) {
+ const [x, y] = project(state);
+ plot.append(svgElement("circle", {
+ cx: x, cy: y, r: 6, fill: "#dc2626", stroke: "#ffffff", "stroke-width": 2,
+ }));
+ plot.append(svgElement("text", {
+ x: x + 8, y: y - 8, fill: "#b91c1c", "font-size": 12, "font-weight": 700,
+ stroke: "#ffffff", "stroke-width": 3, "paint-order": "stroke",
+ }, String(state.number)));
+ }
+
+ const axes = svgElement("g", { fill: "#334155", "font-size": 11 });
+ svg.append(axes);
+ axes.append(svgElement("rect", {
+ x: margin.left, y: margin.top, width: plotWidth, height: plotHeight,
+ fill: "none", stroke: "#17212b", "stroke-width": 1,
+ }));
+ for (let enthalpy = hMin; enthalpy <= hMax; enthalpy += 100) {
+ const [x, y] = project({ h: enthalpy, p: data.pressureMin });
+ axes.append(svgElement("line", { x1: x, y1: y, x2: x, y2: y + 6, stroke: "#17212b" }));
+ axes.append(svgElement("text", { x, y: y + 22, "text-anchor": "middle" }, String(enthalpy)));
+ }
+ for (const pressure of pressureTicks) {
+ const [x, y] = project({ h: hMin, p: pressure });
+ axes.append(svgElement("line", { x1: x - 6, y1: y, x2: x, y2: y, stroke: "#17212b" }));
+ axes.append(svgElement("text", { x: x - 10, y: y + 4, "text-anchor": "end" }, String(pressure)));
+ }
+ axes.append(svgElement("text", {
+ x: margin.left + plotWidth / 2, y: height - 16, "text-anchor": "middle",
+ "font-size": 14, "font-weight": 650,
+ }, "比エンタルピー h [kJ/kg]"));
+ axes.append(svgElement("text", {
+ x: 18, y: margin.top + plotHeight / 2,
+ transform: `rotate(-90 18 ${margin.top + plotHeight / 2})`,
+ "text-anchor": "middle", "font-size": 14, "font-weight": 650,
+ }, "圧力 P [MPa](対数目盛)"));
+
+ const legend = svgElement("g", { "font-size": 11 });
+ svg.append(legend);
+ const legendItems = [
+ ["#111827", "6 3", "飽和液線・飽和蒸気線"],
+ ["#4f8bd6", "5 3", "等温線"],
+ ["#9f3c3c", "", "等エントロピー線"],
+ ["#dc2626", "", "理想冷凍サイクル"],
+ ];
+ legendItems.forEach(([color, dash, label], index) => {
+ const y = margin.top + 18 + index * 19;
+ legend.append(svgElement("line", {
+ x1: margin.left + 12, y1: y, x2: margin.left + 45, y2: y,
+ stroke: color, "stroke-width": 2, "stroke-dasharray": dash,
+ }));
+ legend.append(svgElement("text", {
+ x: margin.left + 51, y: y + 4, fill: "#334155",
+ stroke: "#ffffff", "stroke-width": 3, "paint-order": "stroke",
+ }, label));
+ });
+}
+
+export function downloadMollierSvg(svg, filename = "mollier-diagram.svg") {
+ const serialized = new XMLSerializer().serializeToString(svg);
+ const blob = new Blob(
+ [`\n${serialized}`],
+ { type: "image/svg+xml;charset=utf-8" },
+ );
+ const url = URL.createObjectURL(blob);
+ const anchor = document.createElement("a");
+ anchor.href = url;
+ anchor.download = filename;
+ anchor.click();
+ setTimeout(() => URL.revokeObjectURL(url), 0);
+}
From d3e5dc33a12c975e9b18f1c7fbdfb54c2a9c5c66 Mon Sep 17 00:00:00 2001
From: IGUCHI Masato <67450288+iguchi-lab@users.noreply.github.com>
Date: Mon, 17 Aug 2026 15:46:51 +0900
Subject: [PATCH 03/10] Connect Mollier controls to CoolProp
---
web-release/mollier/app.js | 87 ++++++++++++++++++++++++++++++++++++++
1 file changed, 87 insertions(+)
create mode 100644 web-release/mollier/app.js
diff --git a/web-release/mollier/app.js b/web-release/mollier/app.js
new file mode 100644
index 0000000..88dc4a5
--- /dev/null
+++ b/web-release/mollier/app.js
@@ -0,0 +1,87 @@
+import CoolPropModule from "./vendor/coolprop-8.0.0/coolprop.js";
+import {
+ calculateMollierData,
+ downloadMollierSvg,
+ renderMollierDiagram,
+} from "./mollier-chart.js";
+
+const form = document.querySelector("#mollier-form");
+const button = document.querySelector("#calculate");
+const status = document.querySelector("#status");
+const svg = document.querySelector("#mollier-chart");
+const stateTable = document.querySelector("#state-table");
+const downloadButton = document.querySelector("#download-chart");
+let latestFluid = "R32";
+
+const coolPropPromise = CoolPropModule({
+ locateFile(file) {
+ return new URL(`./vendor/coolprop-8.0.0/${file}`, import.meta.url).href;
+ },
+});
+
+function formOptions() {
+ return {
+ fluid: form.elements.fluid.value,
+ evaporatingTemperature: Number(form.elements.evaporatingTemperature.value),
+ condensingTemperature: Number(form.elements.condensingTemperature.value),
+ superheat: Number(form.elements.superheat.value),
+ subcooling: Number(form.elements.subcooling.value),
+ pressureMin: Number(form.elements.pressureMin.value),
+ pressureMax: Number(form.elements.pressureMax.value),
+ };
+}
+
+function renderStates(states) {
+ stateTable.replaceChildren();
+ for (const state of states) {
+ const row = document.createElement("tr");
+ const values = [
+ state.number,
+ state.name,
+ state.t.toFixed(2),
+ state.p.toFixed(3),
+ state.h.toFixed(2),
+ state.s.toFixed(4),
+ ];
+ for (const value of values) {
+ const cell = document.createElement("td");
+ cell.textContent = value;
+ row.append(cell);
+ }
+ stateTable.append(row);
+ }
+}
+
+async function calculate() {
+ if (!form.reportValidity()) return;
+ button.disabled = true;
+ downloadButton.disabled = true;
+ status.className = "status";
+ status.textContent = "CoolPropで冷媒物性を計算しています…";
+ await new Promise((resolve) => requestAnimationFrame(resolve));
+ try {
+ const coolprop = await coolPropPromise;
+ const options = formOptions();
+ const data = calculateMollierData(coolprop, options);
+ renderMollierDiagram(svg, data);
+ renderStates(data.states);
+ latestFluid = data.fluid;
+ status.textContent = `${data.fluid}のp-h線図を作成しました。`;
+ downloadButton.disabled = false;
+ } catch (error) {
+ status.className = "status error";
+ status.textContent = error instanceof Error ? error.message : "線図を作成できませんでした。";
+ } finally {
+ button.disabled = false;
+ }
+}
+
+form.addEventListener("submit", (event) => {
+ event.preventDefault();
+ calculate();
+});
+downloadButton.addEventListener("click", () => {
+ downloadMollierSvg(svg, `mollier-diagram-${latestFluid}.svg`);
+});
+
+calculate();
From cacb785764f747bb487223b24441f4b2bf212de9 Mon Sep 17 00:00:00 2001
From: IGUCHI Masato <67450288+iguchi-lab@users.noreply.github.com>
Date: Mon, 17 Aug 2026 15:47:06 +0900
Subject: [PATCH 04/10] Test CoolProp Mollier calculations
---
tests_verified/mollier-diagram.test.js | 35 ++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
create mode 100644 tests_verified/mollier-diagram.test.js
diff --git a/tests_verified/mollier-diagram.test.js b/tests_verified/mollier-diagram.test.js
new file mode 100644
index 0000000..858ec72
--- /dev/null
+++ b/tests_verified/mollier-diagram.test.js
@@ -0,0 +1,35 @@
+import test from "node:test";
+import assert from "node:assert/strict";
+
+import CoolPropModule from "../web-release/mollier/vendor/coolprop-8.0.0/coolprop.js";
+import { calculateMollierData } from "../web-release/mollier/mollier-chart.js";
+
+const coolprop = await CoolPropModule();
+
+test("CoolProp WASM provides the R32 critical temperature", () => {
+ const critical = coolprop.PropsSI("Tcrit", "", 0, "", 0, "R32");
+ assert.ok(Math.abs(critical - 351.255) < 0.05);
+});
+
+test("Mollier data preserves the ideal refrigeration cycle invariants", () => {
+ const data = calculateMollierData(coolprop, {
+ fluid: "R32",
+ evaporatingTemperature: 6.85,
+ condensingTemperature: 51.85,
+ superheat: 5,
+ subcooling: 5,
+ pressureMin: 0.3,
+ pressureMax: 5,
+ curvePoints: 30,
+ pressurePoints: 24,
+ });
+
+ assert.equal(data.states.length, 4);
+ const byNumber = Object.fromEntries(data.states.map((state) => [state.number, state]));
+ assert.ok(Math.abs(byNumber[1].p - byNumber[4].p) < 1e-9);
+ assert.ok(Math.abs(byNumber[2].p - byNumber[3].p) < 1e-9);
+ assert.ok(Math.abs(byNumber[3].h - byNumber[4].h) < 1e-9);
+ assert.ok(Math.abs(byNumber[1].s - byNumber[2].s) < 1e-7);
+ assert.equal(data.saturatedLiquid.length, 30);
+ assert.equal(data.saturatedVapor.length, 30);
+});
From 53bd89513539a7908adbe66b9d161d06f4991349 Mon Sep 17 00:00:00 2001
From: IGUCHI Masato <67450288+iguchi-lab@users.noreply.github.com>
Date: Mon, 17 Aug 2026 15:47:35 +0900
Subject: [PATCH 05/10] Add Mollier tool to the home page
---
web-release/index.html | 1 +
1 file changed, 1 insertion(+)
diff --git a/web-release/index.html b/web-release/index.html
index 3f48a3c..35072fa 100644
--- a/web-release/index.html
+++ b/web-release/index.html
@@ -8,6 +8,7 @@ 環境計算ツール
計算したい項目を選択し
PMV・PPD
温熱環境の予測平均温冷感申告と予測不満足者率を計算します。
PMV計算を開く
湿り空気
乾球温度、相対湿度、露点温度、絶対湿度などを相互に計算します。
湿り空気計算を開く
+
p-h線図(モリエル線図)
冷媒物性と理想的な蒸気圧縮冷凍サイクルを表示します。
モリエル線図を開く
From 10e252dc22e6a89ef7b24d1b3979647eca15090d Mon Sep 17 00:00:00 2001
From: IGUCHI Masato <67450288+iguchi-lab@users.noreply.github.com>
Date: Mon, 17 Aug 2026 15:47:36 +0900
Subject: [PATCH 06/10] Style Mollier controls and state table
---
web-release/assets/style.css | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/web-release/assets/style.css b/web-release/assets/style.css
index d56015c..2d67257 100644
--- a/web-release/assets/style.css
+++ b/web-release/assets/style.css
@@ -34,7 +34,14 @@ button:disabled { opacity:.55; cursor:wait; }
.chart-heading .lead { margin-bottom:0; }
.chart-heading button { flex:0 0 auto; }
.chart-scroll { width:100%; overflow-x:auto; border:1px solid var(--line); border-radius:10px; background:#fff; }
-.psychrometric-chart { display:block; width:100%; min-width:700px; height:auto; }
+.psychrometric-chart,.mollier-chart { display:block; width:100%; min-width:700px; height:auto; }
+.mollier-controls { display:grid; grid-template-columns:repeat(auto-fit,minmax(180px,1fr)); gap:0 18px; }
+.mollier-actions { display:flex; align-items:end; padding-bottom:22px; }
+.table-scroll { width:100%; overflow-x:auto; }
+.state-table { width:100%; border-collapse:collapse; white-space:nowrap; }
+.state-table th,.state-table td { padding:10px 12px; border-bottom:1px solid var(--line); text-align:right; font-variant-numeric:tabular-nums; }
+.state-table th:first-child,.state-table td:first-child,.state-table th:nth-child(2),.state-table td:nth-child(2) { text-align:left; }
+.state-table thead { background:#edf6f6; }
.chart-source { margin:8px 0 0; color:var(--muted); font-size:.9rem; }
footer { border-top:1px solid var(--line); padding:24px 0; color:var(--muted); }
@media (max-width:620px) { main { padding-top:24px; } .card { padding:18px; } .chart-heading { display:block; } .chart-heading button { margin-top:12px; } }
From 8dd3a3d6d25f3bcfaba2ead71611335a0c469a1a Mon Sep 17 00:00:00 2001
From: IGUCHI Masato <67450288+iguchi-lab@users.noreply.github.com>
Date: Mon, 17 Aug 2026 15:47:37 +0900
Subject: [PATCH 07/10] Allow self-hosted WebAssembly in CSP
---
template-deploy.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/template-deploy.yaml b/template-deploy.yaml
index 312575a..2866382 100644
--- a/template-deploy.yaml
+++ b/template-deploy.yaml
@@ -104,7 +104,7 @@ Resources:
Name: !Sub '${AWS::StackName}-security-headers'
SecurityHeadersConfig:
ContentSecurityPolicy:
- ContentSecurityPolicy: "default-src 'self'; style-src 'self'; script-src 'self'; img-src 'self' data:; connect-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'none'"
+ ContentSecurityPolicy: "default-src 'self'; style-src 'self'; script-src 'self' 'wasm-unsafe-eval'; img-src 'self' data:; connect-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'none'"
Override: true
ContentTypeOptions:
Override: true
From 41ae11eb828e31589b75e45d0abeee170a4525f1 Mon Sep 17 00:00:00 2001
From: IGUCHI Masato <67450288+iguchi-lab@users.noreply.github.com>
Date: Mon, 17 Aug 2026 15:47:38 +0900
Subject: [PATCH 08/10] Document the browser Mollier tool
---
README.md | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 0867170..7cf7247 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# Engineering Calculator Platform
-PMV/PPD and moist-air calculators deployed as a secure AWS serverless web application.
+PMV/PPD, moist-air, and refrigerant Mollier-diagram tools deployed as a secure AWS serverless web application.
This repository is intended to grow into a collection of engineering calculation tools with a shared web interface and AWS platform.
@@ -12,6 +12,7 @@ This repository is intended to grow into a collection of engineering calculation
- Separate Python Lambda functions calculate PMV/PPD and moist-air properties.
- API requests are throttled and validated server-side.
- The moist-air page renders an h-x psychrometric chart as browser-native SVG.
+- The Mollier page runs the official CoolProp 8.0.0 WebAssembly build locally in the browser and renders a refrigerant p-h diagram.
The stack deploys independently, so existing calculators can remain available during acceptance testing and migration.
@@ -36,6 +37,10 @@ The PMV tests include representative values captured from the legacy API. The mo
The browser chart ports the equations and oblique-coordinate transform from
[`iguchi-lab/psychrometric-chart`](https://github.com/iguchi-lab/psychrometric-chart).
+The Mollier tool adapts [`iguchi-lab/mollier-diagram`](https://github.com/iguchi-lab/mollier-diagram)
+and vendors the official MIT-licensed CoolProp 8.0.0 JavaScript/WASM binaries. The pinned
+vendor files and license are stored under `web-release/mollier/vendor/coolprop-8.0.0/`.
+
## Deployment
Prerequisites:
From 4ea4647f1da86336f47bb419a30cc486be5b4fb1 Mon Sep 17 00:00:00 2001
From: IGUCHI Masato <67450288+iguchi-lab@users.noreply.github.com>
Date: Mon, 17 Aug 2026 15:47:40 +0900
Subject: [PATCH 09/10] Run all browser chart tests
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 5d393e1..b5145ba 100644
--- a/package.json
+++ b/package.json
@@ -3,6 +3,6 @@
"private": true,
"type": "module",
"scripts": {
- "test:chart": "node --test tests_verified/psychrometric-chart.test.js"
+ "test:chart": "node --test tests_verified/*.test.js"
}
}
From f1310c0bd2dc19a18982bcffe8da92a4bae287d9 Mon Sep 17 00:00:00 2001
From: IGUCHI Masato <67450288+iguchi-lab@users.noreply.github.com>
Date: Mon, 17 Aug 2026 15:48:10 +0900
Subject: [PATCH 10/10] Vendor CoolProp 8.0.0 browser build
---
.../mollier/vendor/coolprop-8.0.0/LICENSE | 21 ++++++++++++++++++
.../mollier/vendor/coolprop-8.0.0/coolprop.js | 2 ++
.../vendor/coolprop-8.0.0/coolprop.wasm | Bin 0 -> 9196512 bytes
3 files changed, 23 insertions(+)
create mode 100644 web-release/mollier/vendor/coolprop-8.0.0/LICENSE
create mode 100644 web-release/mollier/vendor/coolprop-8.0.0/coolprop.js
create mode 100644 web-release/mollier/vendor/coolprop-8.0.0/coolprop.wasm
diff --git a/web-release/mollier/vendor/coolprop-8.0.0/LICENSE b/web-release/mollier/vendor/coolprop-8.0.0/LICENSE
new file mode 100644
index 0000000..2bcd117
--- /dev/null
+++ b/web-release/mollier/vendor/coolprop-8.0.0/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2012-2018 Ian H. Bell and other CoolProp developers
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/web-release/mollier/vendor/coolprop-8.0.0/coolprop.js b/web-release/mollier/vendor/coolprop-8.0.0/coolprop.js
new file mode 100644
index 0000000..018d3a0
--- /dev/null
+++ b/web-release/mollier/vendor/coolprop-8.0.0/coolprop.js
@@ -0,0 +1,2 @@
+async function Module(moduleArg={}){var moduleRtn;var Module=moduleArg;var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof WorkerGlobalScope!="undefined";var ENVIRONMENT_IS_NODE=typeof process=="object"&&process.versions?.node&&process.type!="renderer";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){const{createRequire}=await import("module");var require=createRequire(import.meta.url)}var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=import.meta.url;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){const isNode=typeof process=="object"&&process.versions?.node&&process.type!="renderer";if(!isNode)throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");var nodeVersion=process.versions.node;var numericVersion=nodeVersion.split(".").slice(0,3);numericVersion=numericVersion[0]*1e4+numericVersion[1]*100+numericVersion[2].split("-")[0]*1;if(numericVersion<16e4){throw new Error("This emscripten-generated code requires node v16.0.0 (detected v"+nodeVersion+")")}var fs=require("fs");if(_scriptName.startsWith("file:")){scriptDirectory=require("path").dirname(require("url").fileURLToPath(_scriptName))+"/"}readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);assert(Buffer.isBuffer(ret));return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");assert(binary?Buffer.isBuffer(ret):typeof ret=="string");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_SHELL){const isNode=typeof process=="object"&&process.versions?.node&&process.type!="renderer";if(isNode||typeof window=="object"||typeof WorkerGlobalScope!="undefined")throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)")}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}if(!(typeof window=="object"||typeof WorkerGlobalScope!="undefined"))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{throw new Error("environment detection error")}var out=console.log.bind(console);var err=console.error.bind(console);assert(!ENVIRONMENT_IS_SHELL,"shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.");var wasmBinary;if(typeof WebAssembly!="object"){err("no native wasm support detected")}var ABORT=false;function assert(condition,text){if(!condition){abort("Assertion failed"+(text?": "+text:""))}}var isFileURI=filename=>filename.startsWith("file://");function writeStackCookie(){var max=_emscripten_stack_get_end();assert((max&3)==0);if(max==0){max+=4}HEAPU32[max>>2]=34821223;HEAPU32[max+4>>2]=2310721022;HEAPU32[0>>2]=1668509029}function checkStackCookie(){if(ABORT)return;var max=_emscripten_stack_get_end();if(max==0){max+=4}var cookie1=HEAPU32[max>>2];var cookie2=HEAPU32[max+4>>2];if(cookie1!=34821223||cookie2!=2310721022){abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`)}if(HEAPU32[0>>2]!=1668509029){abort("Runtime error: The application has corrupted its heap memory area (address zero)!")}}class EmscriptenEH extends Error{}class EmscriptenSjLj extends EmscriptenEH{}class CppException extends EmscriptenEH{constructor(excPtr){super(excPtr);this.excPtr=excPtr;const excInfo=getExceptionMessage(excPtr);this.name=excInfo[0];this.message=excInfo[1]}}var runtimeDebug=true;(()=>{var h16=new Int16Array(1);var h8=new Int8Array(h16.buffer);h16[0]=25459;if(h8[0]!==115||h8[1]!==99)throw"Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)"})();function consumedModuleProp(prop){if(!Object.getOwnPropertyDescriptor(Module,prop)){Object.defineProperty(Module,prop,{configurable:true,set(){abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}}function makeInvalidEarlyAccess(name){return()=>assert(false,`call to '${name}' via reference taken before Wasm module initialization`)}function ignoredModuleProp(prop){if(Object.getOwnPropertyDescriptor(Module,prop)){abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`)}}function isExportedByForceFilesystem(name){return name==="FS_createPath"||name==="FS_createDataFile"||name==="FS_createPreloadedFile"||name==="FS_unlink"||name==="addRunDependency"||name==="FS_createLazyFile"||name==="FS_createDevice"||name==="removeRunDependency"}function hookGlobalSymbolAccess(sym,func){if(typeof globalThis!="undefined"&&!Object.getOwnPropertyDescriptor(globalThis,sym)){Object.defineProperty(globalThis,sym,{configurable:true,get(){func();return undefined}})}}function missingGlobal(sym,msg){hookGlobalSymbolAccess(sym,()=>{warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`)})}missingGlobal("buffer","Please use HEAP8.buffer or wasmMemory.buffer");missingGlobal("asm","Please use wasmExports instead");function missingLibrarySymbol(sym){hookGlobalSymbolAccess(sym,()=>{var msg=`\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`;var librarySymbol=sym;if(!librarySymbol.startsWith("_")){librarySymbol="$"+sym}msg+=` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`;if(isExportedByForceFilesystem(sym)){msg+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"}warnOnce(msg)});unexportedRuntimeSymbol(sym)}function unexportedRuntimeSymbol(sym){if(!Object.getOwnPropertyDescriptor(Module,sym)){Object.defineProperty(Module,sym,{configurable:true,get(){var msg=`'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;if(isExportedByForceFilesystem(sym)){msg+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"}abort(msg)}})}}var readyPromiseResolve,readyPromiseReject;var wasmMemory;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var HEAP64,HEAPU64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}assert(typeof Int32Array!="undefined"&&typeof Float64Array!=="undefined"&&Int32Array.prototype.subarray!=undefined&&Int32Array.prototype.set!=undefined,"JS engine does not provide full typed array support");function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}consumedModuleProp("preRun");callRuntimeCallbacks(onPreRuns)}function initRuntime(){assert(!runtimeInitialized);runtimeInitialized=true;checkStackCookie();if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();wasmExports["__wasm_call_ctors"]();FS.ignorePermissions=false}function postRun(){checkStackCookie();if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}consumedModuleProp("postRun");callRuntimeCallbacks(onPostRuns)}var runDependencies=0;var dependenciesFulfilled=null;var runDependencyTracking={};var runDependencyWatcher=null;function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies);if(id){assert(!runDependencyTracking[id]);runDependencyTracking[id]=1;if(runDependencyWatcher===null&&typeof setInterval!="undefined"){runDependencyWatcher=setInterval(()=>{if(ABORT){clearInterval(runDependencyWatcher);runDependencyWatcher=null;return}var shown=false;for(var dep in runDependencyTracking){if(!shown){shown=true;err("still waiting on run dependencies:")}err(`dependency: ${dep}`)}if(shown){err("(end of list)")}},1e4)}}else{err("warning: run dependency added without ID")}}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(id){assert(runDependencyTracking[id]);delete runDependencyTracking[id]}else{err("warning: run dependency removed without ID")}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;var e=new WebAssembly.RuntimeError(what);readyPromiseReject?.(e);throw e}function createExportWrapper(name,nargs){return(...args)=>{assert(runtimeInitialized,`native function \`${name}\` called before runtime initialization`);var f=wasmExports[name];assert(f,`exported native function \`${name}\` not found`);assert(args.length<=nargs,`native function \`${name}\` called with ${args.length} args but expects ${nargs}`);return f(...args)}}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"]){return locateFile("coolprop.wasm")}return new URL("coolprop.wasm",import.meta.url).href}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);if(isFileURI(wasmBinaryFile)){err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`)}abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){return{env:wasmImports,wasi_snapshot_preview1:wasmImports}}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["memory"];assert(wasmMemory,"memory not found in wasm exports");updateMemoryViews();wasmTable=wasmExports["__indirect_function_table"];assert(wasmTable,"table not found in wasm exports");assignWasmExports(wasmExports);removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");var trueModule=Module;function receiveInstantiationResult(result){assert(Module===trueModule,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?");trueModule=null;return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{try{Module["instantiateWasm"](info,(mod,inst)=>{resolve(receiveInstance(mod,inst))})}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);reject(e)}})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var noExitRuntime=true;var ptrToString=ptr=>{assert(typeof ptr==="number");ptr>>>=0;return"0x"+ptr.toString(16).padStart(8,"0")};var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var warnOnce=text=>{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}};var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder:undefined;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>{assert(typeof ptr=="number",`UTF8ToString expects a number (got ${typeof ptr})`);return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):""};var ___assert_fail=(condition,filename,line,func)=>abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"]);var exceptionCaught=[];var uncaughtExceptionCount=0;var ___cxa_begin_catch=ptr=>{var info=new ExceptionInfo(ptr);if(!info.get_caught()){info.set_caught(true);uncaughtExceptionCount--}info.set_rethrown(false);exceptionCaught.push(info);___cxa_increment_exception_refcount(ptr);return ___cxa_get_exception_ptr(ptr)};var exceptionLast=0;var ___cxa_end_catch=()=>{_setThrew(0,0);assert(exceptionCaught.length>0);var info=exceptionCaught.pop();___cxa_decrement_exception_refcount(info.excPtr);exceptionLast=0};class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown}get_rethrown(){return HEAP8[this.ptr+13]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}}var setTempRet0=val=>__emscripten_tempret_set(val);var findMatchingCatch=args=>{var thrown=exceptionLast?.excPtr;if(!thrown){setTempRet0(0);return 0}var info=new ExceptionInfo(thrown);info.set_adjusted_ptr(thrown);var thrownType=info.get_type();if(!thrownType){setTempRet0(0);return thrown}for(var caughtType of args){if(caughtType===0||caughtType===thrownType){break}var adjusted_ptr_addr=info.ptr+16;if(___cxa_can_catch(caughtType,thrownType,adjusted_ptr_addr)){setTempRet0(caughtType);return thrown}}setTempRet0(thrownType);return thrown};var ___cxa_find_matching_catch_2=()=>findMatchingCatch([]);var ___cxa_find_matching_catch_3=arg0=>findMatchingCatch([arg0]);var ___cxa_find_matching_catch_4=(arg0,arg1)=>findMatchingCatch([arg0,arg1]);var ___cxa_rethrow=()=>{var info=exceptionCaught.pop();if(!info){abort("no exception to throw")}var ptr=info.excPtr;if(!info.get_rethrown()){exceptionCaught.push(info);info.set_rethrown(true);info.set_caught(false);uncaughtExceptionCount++}exceptionLast=new CppException(ptr);throw exceptionLast};var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=new CppException(ptr);uncaughtExceptionCount++;throw exceptionLast};var ___cxa_uncaught_exceptions=()=>uncaughtExceptionCount;var ___resumeException=ptr=>{if(!exceptionLast){exceptionLast=new CppException(ptr)}throw exceptionLast};var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.slice(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\/]+|\/)\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("crypto");return view=>nodeCrypto.randomFillSync(view)}return view=>crypto.getRandomValues(view)};var randomFill=view=>{(randomFill=initRandomFill())(view)};var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).slice(1);to=PATH_FS.resolve(to).slice(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{assert(typeof str==="string",`stringToUTF8Array expects a string (got ${typeof str})`);if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;if(u>1114111)warnOnce("Invalid Unicode code point "+ptrToString(u)+" encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).");heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63;i++}}heap[outIdx]=0;return outIdx-startIdx};var intArrayFromString=(stringy,dontAddNull,length)=>{var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array};var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var mmapAlloc=size=>{abort("internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported")};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16895,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw new FS.ErrnoError(44)},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},readdir(node){return[".","..",...Object.keys(node.contents)]},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{var arrayBuffer=await readAsync(url);assert(arrayBuffer,`Loading data file "${url}" failed (no arrayBuffer).`);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var getUniqueRunDependency=id=>{var orig=id;while(1){if(!runDependencyTracking[id])return id;id=orig+Math.random()}};var preloadPlugins=[];var FS_handledByPreloadPlugin=(byteArray,fullname,finish,onerror)=>{if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(plugin=>{if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);function processData(byteArray){function finish(byteArray){preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}onload?.();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{onerror?.();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url).then(processData,onerror)}else{processData(url)}};var FS_modeStringToFlags=str=>{var flagModes={r:0,"r+":2,w:512|64|1,"w+":512|64|2,a:1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var strError=errno=>UTF8ToString(_strerror(errno));var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,filesystems:null,syncFSRequests:0,readFiles:{},ErrnoError:class extends Error{name="ErrnoError";constructor(errno){super(runtimeInitialized?strError(errno):"");this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break}}}},FSStream:class{shared={};get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{node_ops={};stream_ops={};readMode=292|73;writeMode=146;mounted=null;constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.rdev=rdev;this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},lookupPath(path,opts={}){if(!path){throw new FS.ErrnoError(44)}opts.follow_mount??=true;if(!PATH.isAbs(path)){path=FS.cwd()+"/"+path}linkloop:for(var nlinks=0;nlinks<40;nlinks++){var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){assert(typeof parent=="object");var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){if(!FS.isDir(dir.mode)){return 54}try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&(512|64)){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){assert(fd>=-1);stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);setattr(arg,attr)},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount(type,opts,mountpoint){if(typeof type=="string"){throw type}var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type,opts,mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name){throw new FS.ErrnoError(28)}if(name==="."||name===".."){throw new FS.ErrnoError(20)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+="/";d+=dir;try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev(path,mode,dev){if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink(oldpath,newpath){if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name);old_node.parent=new_dir}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return readdir(node)},unlink(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},truncate(path,len){if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var setattr=FS.checkOpExists(node.node_ops.setattr,63);setattr(node,{atime,mtime})},open(path,flags,mode=438){if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS_modeStringToFlags(flags):flags;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path=="object"){node=path}else{isDirPath=path.endsWith("/");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}if(Module["logReadFiles"]&&!(flags&1)){if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed(stream){return stream.fd===null},llseek(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read(stream,buffer,offset,length,position){assert(offset>=0);if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write(stream,buffer,offset,length,position,canOwn){assert(offset>=0);if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},mmap(stream,length,position,prot,flags){if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}if(!length){throw new FS.ErrnoError(28)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync(stream,buffer,offset,length,mmapFlags){assert(offset>=0);if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error(`Invalid encoding type "${opts.encoding}"`)}var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){buf=UTF8ArrayToString(buf)}FS.close(stream);return buf},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){data=new Uint8Array(intArrayFromString(data,true))}if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length,llseek:()=>0});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomFill(randomBuffer);randomLeft=randomBuffer.byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};return node}},{},"/proc/self/fd")},createStandardStreams(input,output,error){if(input){FS.createDevice("/dev","stdin",input)}else{FS.symlink("/dev/tty","/dev/stdin")}if(output){FS.createDevice("/dev","stdout",null,output)}else{FS.symlink("/dev/tty","/dev/stdout")}if(error){FS.createDevice("/dev","stderr",null,error)}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1);assert(stdin.fd===0,`invalid handle for stdin (${stdin.fd})`);assert(stdout.fd===1,`invalid handle for stdout (${stdout.fd})`);assert(stderr.fd===2,`invalid handle for stderr (${stderr.fd})`)},staticInit(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS}},init(input,output,error){assert(!FS.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");FS.initialized=true;input??=Module["stdin"];output??=Module["stdout"];error??=Module["stderr"];FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;_fflush(0);for(var stream of FS.streams){if(stream){FS.close(stream)}}},findObject(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath(parent,path,canRead,canWrite){parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){if(e.errno!=20)throw e}parent=current}return current},createFile(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile(parent,name,data,canRead,canWrite,canOwn){var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS_getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr,allocated:true}};node.stream_ops=stream_ops;return node},absolutePath(){abort("FS.absolutePath has been removed; use PATH_FS.resolve instead")},createFolder(){abort("FS.createFolder has been removed; use FS.mkdir instead")},createLink(){abort("FS.createLink has been removed; use FS.symlink instead")},joinPath(){abort("FS.joinPath has been removed; use PATH.join instead")},mmapAlloc(){abort("FS.mmapAlloc has been replaced by the top level function mmapAlloc")},standardizePath(){abort("FS.standardizePath has been removed; use PATH.normalize instead")}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return dir+"/"+path},writeStat(buf,stat){HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAP32[buf+12>>2]=stat.uid;HEAP32[buf+16>>2]=stat.gid;HEAP32[buf+20>>2]=stat.rdev;HEAP64[buf+24>>3]=BigInt(stat.size);HEAP32[buf+32>>2]=4096;HEAP32[buf+36>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;HEAP64[buf+88>>3]=BigInt(stat.ino);return 0},writeStatFs(buf,stats){HEAP32[buf+4>>2]=stats.bsize;HEAP32[buf+60>>2]=stats.bsize;HEAP64[buf+8>>3]=BigInt(stats.blocks);HEAP64[buf+16>>3]=BigInt(stats.bfree);HEAP64[buf+24>>3]=BigInt(stats.bavail);HEAP64[buf+32>>3]=BigInt(stats.files);HEAP64[buf+40>>3]=BigInt(stats.ffree);HEAP32[buf+48>>2]=stats.fsid;HEAP32[buf+64>>2]=stats.flags;HEAP32[buf+56>>2]=stats.namelen},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_fchmodat2(dirfd,path,mode,flags){try{var nofollow=flags&256;path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);FS.chmod(path,mode,nofollow);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var syscallGetVarargI=()=>{assert(SYSCALLS.varargs!=undefined);var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret};var syscallGetVarargP=syscallGetVarargI;function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=syscallGetVarargI();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.dupStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=syscallGetVarargI();stream.flags|=arg;return 0}case 12:{var arg=syscallGetVarargP();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0}return-28}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_fstat64(fd,buf){try{return SYSCALLS.writeStat(buf,FS.fstat(fd))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var stringToUTF8=(str,outPtr,maxBytesToWrite)=>{assert(typeof maxBytesToWrite=="number","stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)};function ___syscall_getdents64(fd,dirp,count){try{var stream=SYSCALLS.getStreamFromFD(fd);stream.getdents||=FS.readdir(stream.path);var struct_size=280;var pos=0;var off=FS.llseek(stream,0,1);var startIdx=Math.floor(off/struct_size);var endIdx=Math.min(stream.getdents.length,startIdx+Math.floor(count/struct_size));for(var idx=startIdx;idx>3]=BigInt(id);HEAP64[dirp+pos+8>>3]=BigInt((idx+1)*struct_size);HEAP16[dirp+pos+16>>1]=280;HEAP8[dirp+pos+18]=type;stringToUTF8(name,dirp+pos+19,256);pos+=struct_size}FS.llseek(stream,idx*struct_size,0);return pos}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=syscallGetVarargP();HEAP32[argp>>2]=termios.c_iflag||0;HEAP32[argp+4>>2]=termios.c_oflag||0;HEAP32[argp+8>>2]=termios.c_cflag||0;HEAP32[argp+12>>2]=termios.c_lflag||0;for(var i=0;i<32;i++){HEAP8[argp+i+17]=termios.c_cc[i]||0}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=syscallGetVarargP();var c_iflag=HEAP32[argp>>2];var c_oflag=HEAP32[argp+4>>2];var c_cflag=HEAP32[argp+8>>2];var c_lflag=HEAP32[argp+12>>2];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[argp+i+17])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag,c_oflag,c_cflag,c_lflag,c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=syscallGetVarargP();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21537:case 21531:{var argp=syscallGetVarargP();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=syscallGetVarargP();HEAP16[argp>>1]=winsize[0];HEAP16[argp+2>>1]=winsize[1]}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_lstat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.writeStat(buf,FS.lstat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_mkdirat(dirfd,path,mode){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);FS.mkdir(path,mode,0);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_newfstatat(dirfd,path,buf,flags){try{path=SYSCALLS.getStr(path);var nofollow=flags&256;var allowEmpty=flags&4096;flags=flags&~6400;assert(!flags,`unknown flags in __syscall_newfstatat: ${flags}`);path=SYSCALLS.calculateAt(dirfd,path,allowEmpty);return SYSCALLS.writeStat(buf,nofollow?FS.lstat(path):FS.stat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_renameat(olddirfd,oldpath,newdirfd,newpath){try{oldpath=SYSCALLS.getStr(oldpath);newpath=SYSCALLS.getStr(newpath);oldpath=SYSCALLS.calculateAt(olddirfd,oldpath);newpath=SYSCALLS.calculateAt(newdirfd,newpath);FS.rename(oldpath,newpath);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_rmdir(path){try{path=SYSCALLS.getStr(path);FS.rmdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_stat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.writeStat(buf,FS.stat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_unlinkat(dirfd,path,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(!flags){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{return-28}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __abort_js=()=>abort("native code called abort()");var AsciiToString=ptr=>{var str="";while(1){var ch=HEAPU8[ptr++];if(!ch)return str;str+=String.fromCharCode(ch)}};var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var BindingError=class BindingError extends Error{constructor(message){super(message);this.name="BindingError"}};var throwBindingError=message=>{throw new BindingError(message)};function sharedRegisterType(rawType,registeredInstance,options={}){var name=registeredInstance.name;if(!rawType){throwBindingError(`type "${name}" must have a positive integer typeid pointer`)}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError(`Cannot register type '${name}' twice`)}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function registerType(rawType,registeredInstance,options={}){return sharedRegisterType(rawType,registeredInstance,options)}var integerReadValueFromPointer=(name,width,signed)=>{switch(width){case 1:return signed?pointer=>HEAP8[pointer]:pointer=>HEAPU8[pointer];case 2:return signed?pointer=>HEAP16[pointer>>1]:pointer=>HEAPU16[pointer>>1];case 4:return signed?pointer=>HEAP32[pointer>>2]:pointer=>HEAPU32[pointer>>2];case 8:return signed?pointer=>HEAP64[pointer>>3]:pointer=>HEAPU64[pointer>>3];default:throw new TypeError(`invalid integer width (${width}): ${name}`)}};var embindRepr=v=>{if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}};var assertIntegerRange=(typeName,value,minRange,maxRange)=>{if(valuemaxRange){throw new TypeError(`Passing a number "${embindRepr(value)}" from JS side to C/C++ side to an argument of type "${typeName}", which is outside the valid range [${minRange}, ${maxRange}]!`)}};var __embind_register_bigint=(primitiveType,name,size,minRange,maxRange)=>{name=AsciiToString(name);const isUnsignedType=minRange===0n;let fromWireType=value=>value;if(isUnsignedType){const bitSize=size*8;fromWireType=value=>BigInt.asUintN(bitSize,value);maxRange=fromWireType(maxRange)}registerType(primitiveType,{name,fromWireType,toWireType:(destructors,value)=>{if(typeof value=="number"){value=BigInt(value)}else if(typeof value!="bigint"){throw new TypeError(`Cannot convert "${embindRepr(value)}" to ${this.name}`)}assertIntegerRange(name,value,minRange,maxRange);return value},readValueFromPointer:integerReadValueFromPointer(name,size,!isUnsignedType),destructorFunction:null})};var __embind_register_bool=(rawType,name,trueValue,falseValue)=>{name=AsciiToString(name);registerType(rawType,{name,fromWireType:function(wt){return!!wt},toWireType:function(destructors,o){return o?trueValue:falseValue},readValueFromPointer:function(pointer){return this.fromWireType(HEAPU8[pointer])},destructorFunction:null})};var shallowCopyInternalPointer=o=>({count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType});var throwInstanceAlreadyDeleted=obj=>{function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")};var finalizationRegistry=false;var detachFinalizer=handle=>{};var runDestructor=$$=>{if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}};var releaseClassHandle=$$=>{$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}};var downcastPointer=(ptr,ptrClass,desiredClass)=>{if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)};var registeredPointers={};var registeredInstances={};var getBasestPointer=(class_,ptr)=>{if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr};var getInheritedInstance=(class_,ptr)=>{ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]};var InternalError=class InternalError extends Error{constructor(message){super(message);this.name="InternalError"}};var throwInternalError=message=>{throw new InternalError(message)};var makeClassHandle=(prototype,record)=>{if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record,writable:true}}))};function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}var attachFinalizer=handle=>{if("undefined"===typeof FinalizationRegistry){attachFinalizer=handle=>handle;return handle}finalizationRegistry=new FinalizationRegistry(info=>{console.warn(info.leakWarning);releaseClassHandle(info.$$)});attachFinalizer=handle=>{var $$=handle.$$;var hasSmartPtr=!!$$.smartPtr;if(hasSmartPtr){var info={$$};var cls=$$.ptrType.registeredClass;var err=new Error(`Embind found a leaked C++ instance ${cls.name} <${ptrToString($$.ptr)}>.\n`+"We'll free it automatically in this case, but this functionality is not reliable across various environments.\n"+"Make sure to invoke .delete() manually once you're done with the instance instead.\n"+"Originally allocated");if("captureStackTrace"in Error){Error.captureStackTrace(err,RegisteredPointer_fromWireType)}info.leakWarning=err.stack.replace(/^Error: /,"");finalizationRegistry.register(handle,info,handle)}return handle};detachFinalizer=handle=>finalizationRegistry.unregister(handle);return attachFinalizer(handle)};var deletionQueue=[];var flushPendingDeletes=()=>{while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}};var delayFunction;var init_ClassHandle=()=>{let proto=ClassHandle.prototype;Object.assign(proto,{isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;other.$$=other.$$;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right},clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}},delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}},isDeleted(){return!this.$$.ptr},deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}});const symbolDispose=Symbol.dispose;if(symbolDispose){proto[symbolDispose]=proto["delete"]}};function ClassHandle(){}var createNamedFunction=(name,func)=>Object.defineProperty(func,"name",{value:name});var ensureOverloadTable=(proto,methodName,humanName)=>{if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(...args){if(!proto[methodName].overloadTable.hasOwnProperty(args.length)){throwBindingError(`Function '${humanName}' called with an invalid number of arguments (${args.length}) - expects one of (${proto[methodName].overloadTable})!`)}return proto[methodName].overloadTable[args.length].apply(this,args)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}};var exposePublicSymbol=(name,value,numArguments)=>{if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError(`Cannot register public name '${name}' twice`)}ensureOverloadTable(Module,name,name);if(Module[name].overloadTable.hasOwnProperty(numArguments)){throwBindingError(`Cannot register multiple overloads of a function with the same number of arguments (${numArguments})!`)}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}};var char_0=48;var char_9=57;var makeLegalFunctionName=name=>{assert(typeof name==="string");name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return`_${name}`}return name};function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}var upcastPointer=(ptr,ptrClass,desiredClass)=>{while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError(`Expected null or instance of ${desiredClass.name}, got an instance of ${ptrClass.name}`)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr};function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}return 0}if(!handle.$$){throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle||!handle.$$){throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name} to parameter type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name} to parameter type ${this.name}`)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,Emval.toHandle(()=>clonedHandle["delete"]()));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}return 0}if(!handle.$$){throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}if(handle.$$.ptrType.isConst){throwBindingError(`Cannot convert argument of type ${handle.$$.ptrType.name} to parameter type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function readPointer(pointer){return this.fromWireType(HEAPU32[pointer>>2])}var init_RegisteredPointer=()=>{Object.assign(RegisteredPointer.prototype,{getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr},destructor(ptr){this.rawDestructor?.(ptr)},readValueFromPointer:readPointer,fromWireType:RegisteredPointer_fromWireType})};function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this.toWireType=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this.toWireType=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this.toWireType=genericPointerToWireType}}var replacePublicSymbol=(name,value,numArguments)=>{if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistent public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}};var wasmTableMirror=[];var wasmTable;var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}assert(wasmTable.get(funcPtr)==func,"JavaScript-side Wasm function table mirror is out of date!");return func};var embind__requireFunction=(signature,rawFunction,isAsync=false)=>{assert(!isAsync,"Async bindings are only supported with JSPI.");signature=AsciiToString(signature);function makeDynCaller(){var rtn=getWasmTableEntry(rawFunction);return rtn}var fp=makeDynCaller();if(typeof fp!="function"){throwBindingError(`unknown function pointer with signature ${signature}: ${rawFunction}`)}return fp};class UnboundTypeError extends Error{}var getTypeName=type=>{var ptr=___getTypeName(type);var rv=AsciiToString(ptr);_free(ptr);return rv};var throwUnboundTypeError=(message,types)=>{var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(`${message}: `+unboundTypes.map(getTypeName).join([", "]))};var whenDependentTypesAreResolved=(myTypes,dependentTypes,getTypeConverters)=>{myTypes.forEach(type=>typeDependencies[type]=dependentTypes);function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i{if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(()=>{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}});if(0===unregisteredTypes.length){onComplete(typeConverters)}};var __embind_register_class=(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor)=>{name=AsciiToString(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);upcast&&=embind__requireFunction(upcastSignature,upcast);downcast&&=embind__requireFunction(downcastSignature,downcast);rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError(`Cannot construct ${name} due to unbound types`,[baseClassRawType])});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],base=>{base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype}else{basePrototype=ClassHandle.prototype}var constructor=createNamedFunction(name,function(...args){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError(`Use 'new' to construct ${name}`)}if(undefined===registeredClass.constructor_body){throw new BindingError(`${name} has no accessible constructor`)}var body=registeredClass.constructor_body[args.length];if(undefined===body){throw new BindingError(`Tried to invoke ctor of ${name} with invalid number of parameters (${args.length}) - expected (${Object.keys(registeredClass.constructor_body).toString()}) parameters instead!`)}return body.apply(this,args)});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);if(registeredClass.baseClass){registeredClass.baseClass.__derivedClasses??=[];registeredClass.baseClass.__derivedClasses.push(registeredClass)}var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+"*",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+" const*",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter]})};var runDestructors=destructors=>{while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}};function usesDestructorStack(argTypes){for(var i=1;imaxArgs){var argCountMessage=minArgs==maxArgs?minArgs:`${minArgs} to ${maxArgs}`;throwBindingError(`function ${humanName} called with ${numArgs} arguments, expected ${argCountMessage}`)}}function createJsInvoker(argTypes,isClassMethodFunc,returns,isAsync){var needsDestructorStack=usesDestructorStack(argTypes);var argCount=argTypes.length-2;var argsList=[];var argsListWired=["fn"];if(isClassMethodFunc){argsListWired.push("thisWired")}for(var i=0;i=2;--i){if(!argTypes[i].optional){break}requiredArgCount--}return requiredArgCount}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc,isAsync){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}assert(!isAsync,"Async bindings are only supported with JSPI.");var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=usesDestructorStack(argTypes);var returns=!argTypes[0].isVoid;var expectedArgCount=argCount-2;var minArgs=getRequiredArgCount(argTypes);var retType=argTypes[0];var instType=argTypes[1];var closureArgs=[humanName,throwBindingError,cppInvokerFunc,cppTargetFunc,runDestructors,retType.fromWireType.bind(retType),instType?.toWireType.bind(instType)];for(var i=2;i{var array=[];for(var i=0;i>2])}return array};var getFunctionName=signature=>{signature=signature.trim();const argsIndex=signature.indexOf("(");if(argsIndex===-1)return signature;assert(signature.endsWith(")"),"Parentheses for argument names should match.");return signature.slice(0,argsIndex)};var __embind_register_class_function=(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual,isAsync,isNonnullReturn)=>{var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=AsciiToString(methodName);methodName=getFunctionName(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker,isAsync);whenDependentTypesAreResolved([],[rawClassType],classType=>{classType=classType[0];var humanName=`${classType.name}.${methodName}`;if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError(`Cannot call ${humanName} due to unbound types`,rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,argTypes=>{var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context,isAsync);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})};var emval_freelist=[];var emval_handles=[0,1,,1,null,1,true,1,false,1];var __emval_decref=handle=>{if(handle>9&&0===--emval_handles[handle+1]){assert(emval_handles[handle]!==undefined,`Decref for unallocated handle.`);emval_handles[handle]=undefined;emval_freelist.push(handle)}};var Emval={toValue:handle=>{if(!handle){throwBindingError(`Cannot use deleted val. handle = ${handle}`)}assert(handle===2||emval_handles[handle]!==undefined&&handle%2===0,`invalid handle: ${handle}`);return emval_handles[handle]},toHandle:value=>{switch(value){case undefined:return 2;case null:return 4;case true:return 6;case false:return 8;default:{const handle=emval_freelist.pop()||emval_handles.length;emval_handles[handle]=value;emval_handles[handle+1]=1;return handle}}}};var EmValType={name:"emscripten::val",fromWireType:handle=>{var rv=Emval.toValue(handle);__emval_decref(handle);return rv},toWireType:(destructors,value)=>Emval.toHandle(value),readValueFromPointer:readPointer,destructorFunction:null};var __embind_register_emval=rawType=>registerType(rawType,EmValType);var enumReadValueFromPointer=(name,width,signed)=>{switch(width){case 1:return signed?function(pointer){return this.fromWireType(HEAP8[pointer])}:function(pointer){return this.fromWireType(HEAPU8[pointer])};case 2:return signed?function(pointer){return this.fromWireType(HEAP16[pointer>>1])}:function(pointer){return this.fromWireType(HEAPU16[pointer>>1])};case 4:return signed?function(pointer){return this.fromWireType(HEAP32[pointer>>2])}:function(pointer){return this.fromWireType(HEAPU32[pointer>>2])};default:throw new TypeError(`invalid integer width (${width}): ${name}`)}};var __embind_register_enum=(rawType,name,size,isSigned)=>{name=AsciiToString(name);function ctor(){}ctor.values={};registerType(rawType,{name,constructor:ctor,fromWireType:function(c){return this.constructor.values[c]},toWireType:(destructors,c)=>c.value,readValueFromPointer:enumReadValueFromPointer(name,size,isSigned),destructorFunction:null});exposePublicSymbol(name,ctor)};var requireRegisteredType=(rawType,humanName)=>{var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(`${humanName} has unknown type ${getTypeName(rawType)}`)}return impl};var __embind_register_enum_value=(rawEnumType,name,enumValue)=>{var enumType=requireRegisteredType(rawEnumType,"enum");name=AsciiToString(name);var Enum=enumType.constructor;var Value=Object.create(enumType.constructor.prototype,{value:{value:enumValue},constructor:{value:createNamedFunction(`${enumType.name}_${name}`,function(){})}});Enum.values[enumValue]=Value;Enum[name]=Value};var floatReadValueFromPointer=(name,width)=>{switch(width){case 4:return function(pointer){return this.fromWireType(HEAPF32[pointer>>2])};case 8:return function(pointer){return this.fromWireType(HEAPF64[pointer>>3])};default:throw new TypeError(`invalid float width (${width}): ${name}`)}};var __embind_register_float=(rawType,name,size)=>{name=AsciiToString(name);registerType(rawType,{name,fromWireType:value=>value,toWireType:(destructors,value)=>{if(typeof value!="number"&&typeof value!="boolean"){throw new TypeError(`Cannot convert ${embindRepr(value)} to ${this.name}`)}return value},readValueFromPointer:floatReadValueFromPointer(name,size),destructorFunction:null})};var __embind_register_function=(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn,isAsync,isNonnullReturn)=>{var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=AsciiToString(name);name=getFunctionName(name);rawInvoker=embind__requireFunction(signature,rawInvoker,isAsync);exposePublicSymbol(name,function(){throwUnboundTypeError(`Cannot call ${name} due to unbound types`,argTypes)},argCount-1);whenDependentTypesAreResolved([],argTypes,argTypes=>{var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn,isAsync),argCount-1);return[]})};var __embind_register_integer=(primitiveType,name,size,minRange,maxRange)=>{name=AsciiToString(name);const isUnsignedType=minRange===0;let fromWireType=value=>value;if(isUnsignedType){var bitshift=32-8*size;fromWireType=value=>value<>>bitshift;maxRange=fromWireType(maxRange)}registerType(primitiveType,{name,fromWireType,toWireType:(destructors,value)=>{if(typeof value!="number"&&typeof value!="boolean"){throw new TypeError(`Cannot convert "${embindRepr(value)}" to ${name}`)}assertIntegerRange(name,value,minRange,maxRange);return value},readValueFromPointer:integerReadValueFromPointer(name,size,minRange!==0),destructorFunction:null})};var __embind_register_memory_view=(rawType,dataTypeIndex,name)=>{var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){var size=HEAPU32[handle>>2];var data=HEAPU32[handle+4>>2];return new TA(HEAP8.buffer,data,size)}name=AsciiToString(name);registerType(rawType,{name,fromWireType:decodeMemoryView,readValueFromPointer:decodeMemoryView},{ignoreDuplicateRegistrations:true})};var __embind_register_std_string=(rawType,name)=>{name=AsciiToString(name);var stdStringIsUTF8=true;registerType(rawType,{name,fromWireType(value){var length=HEAPU32[value>>2];var payload=value+4;var str;if(stdStringIsUTF8){str=UTF8ToString(payload,length,true)}else{str="";for(var i=0;i>2]=length;if(valueIsOfTypeString){if(stdStringIsUTF8){stringToUTF8(value,ptr,length+1)}else{for(var i=0;i255){_free(base);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+i]=charCode}}}else{HEAPU8.set(value,ptr)}if(destructors!==null){destructors.push(_free,base)}return base},readValueFromPointer:readPointer,destructorFunction(ptr){_free(ptr)}})};var UTF16Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):undefined;var UTF16ToString=(ptr,maxBytesToRead,ignoreNul)=>{assert(ptr%2==0,"Pointer passed to UTF16ToString must be aligned to two bytes!");var idx=ptr>>1;var endIdx=findStringEnd(HEAPU16,idx,maxBytesToRead/2,ignoreNul);if(endIdx-idx>16&&UTF16Decoder)return UTF16Decoder.decode(HEAPU16.subarray(idx,endIdx));var str="";for(var i=idx;i{assert(outPtr%2==0,"Pointer passed to stringToUTF16 must be aligned to two bytes!");assert(typeof maxBytesToWrite=="number","stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");maxBytesToWrite??=2147483647;if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr};var lengthBytesUTF16=str=>str.length*2;var UTF32ToString=(ptr,maxBytesToRead,ignoreNul)=>{assert(ptr%4==0,"Pointer passed to UTF32ToString must be aligned to four bytes!");var str="";var startIdx=ptr>>2;for(var i=0;!(i>=maxBytesToRead/4);i++){var utf32=HEAPU32[startIdx+i];if(!utf32&&!ignoreNul)break;str+=String.fromCodePoint(utf32)}return str};var stringToUTF32=(str,outPtr,maxBytesToWrite)=>{assert(outPtr%4==0,"Pointer passed to stringToUTF32 must be aligned to four bytes!");assert(typeof maxBytesToWrite=="number","stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");maxBytesToWrite??=2147483647;if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i65535){i++}HEAP32[outPtr>>2]=codePoint;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr};var lengthBytesUTF32=str=>{var len=0;for(var i=0;i65535){i++}len+=4}return len};var __embind_register_std_wstring=(rawType,charSize,name)=>{name=AsciiToString(name);var decodeString,encodeString,lengthBytesUTF;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16}else{assert(charSize===4,"only 2-byte and 4-byte strings are currently supported");decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32}registerType(rawType,{name,fromWireType:value=>{var length=HEAPU32[value>>2];var str=decodeString(value+4,length*charSize,true);_free(value);return str},toWireType:(destructors,value)=>{if(!(typeof value=="string")){throwBindingError(`Cannot pass non-string to C++ string type ${name}`)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length/charSize;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},readValueFromPointer:readPointer,destructorFunction(ptr){_free(ptr)}})};var __embind_register_void=(rawType,name)=>{name=AsciiToString(name);registerType(rawType,{isVoid:true,name,fromWireType:()=>undefined,toWireType:(destructors,o)=>undefined})};var emval_methodCallers=[];var emval_addMethodCaller=caller=>{var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id};var emval_lookupTypes=(argCount,argTypes)=>{var a=new Array(argCount);for(var i=0;i>2],`parameter ${i}`)}return a};var emval_returnValue=(toReturnWire,destructorsRef,handle)=>{var destructors=[];var result=toReturnWire(destructors,handle);if(destructors.length){HEAPU32[destructorsRef>>2]=Emval.toHandle(destructors)}return result};var emval_symbols={};var getStringOrSymbol=address=>{var symbol=emval_symbols[address];if(symbol===undefined){return AsciiToString(address)}return symbol};var __emval_create_invoker=(argCount,argTypesPtr,kind)=>{var GenericWireTypeSize=8;var[retType,...argTypes]=emval_lookupTypes(argCount,argTypesPtr);var toReturnWire=retType.toWireType.bind(retType);var argFromPtr=argTypes.map(type=>type.readValueFromPointer.bind(type));argCount--;var captures={toValue:Emval.toValue};var args=argFromPtr.map((argFromPtr,i)=>{var captureName=`argFromPtr${i}`;captures[captureName]=argFromPtr;return`${captureName}(args${i?"+"+i*GenericWireTypeSize:""})`});var functionBody;switch(kind){case 0:functionBody="toValue(handle)";break;case 2:functionBody="new (toValue(handle))";break;case 3:functionBody="";break;case 1:captures["getStringOrSymbol"]=getStringOrSymbol;functionBody="toValue(handle)[getStringOrSymbol(methodName)]";break}functionBody+=`(${args})`;if(!retType.isVoid){captures["toReturnWire"]=toReturnWire;captures["emval_returnValue"]=emval_returnValue;functionBody=`return emval_returnValue(toReturnWire, destructorsRef, ${functionBody})`}functionBody=`return function (handle, methodName, destructorsRef, args) {\n ${functionBody}\n }`;var invokerFunction=new Function(Object.keys(captures),functionBody)(...Object.values(captures));var functionName=`methodCaller<(${argTypes.map(t=>t.name)}) => ${retType.name}>`;return emval_addMethodCaller(createNamedFunction(functionName,invokerFunction))};var __emval_get_property=(handle,key)=>{handle=Emval.toValue(handle);key=Emval.toValue(key);return Emval.toHandle(handle[key])};var __emval_incref=handle=>{if(handle>9){emval_handles[handle+1]+=1}};var __emval_invoke=(caller,handle,methodName,destructorsRef,args)=>emval_methodCallers[caller](handle,methodName,destructorsRef,args);var __emval_new_array=()=>Emval.toHandle([]);var __emval_new_cstring=v=>Emval.toHandle(getStringOrSymbol(v));var __emval_new_object=()=>Emval.toHandle({});var __emval_run_destructors=handle=>{var destructors=Emval.toValue(handle);runDestructors(destructors);__emval_decref(handle)};var __emval_set_property=(handle,key,value)=>{handle=Emval.toValue(handle);key=Emval.toValue(key);value=Emval.toValue(value);handle[key]=value};var __tzset_js=(timezone,daylight,std_name,dst_name)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);assert(winterName);assert(summerName);assert(lengthBytesUTF8(winterName)<=16,`timezone name truncated to fit in TZNAME_MAX (${winterName})`);assert(lengthBytesUTF8(summerName)<=16,`timezone name truncated to fit in TZNAME_MAX (${summerName})`);if(summerOffsetperformance.now();var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[ptime>>3]=BigInt(nsec);return 0}var getHeapMax=()=>2147483648;var _emscripten_get_heap_max=()=>getHeapMax();var alignMemory=(size,alignment)=>{assert(alignment,"alignment argument is required");return Math.ceil(size/alignment)*alignment};var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){err(`growMemory: Attempted to grow heap from ${oldHeapSize} bytes to ${size} bytes, but got error: ${e}`)}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;assert(requestedSize>oldSize);var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){err(`Cannot enlarge memory, requested ${requestedSize} bytes, but the limit is ${maxHeapSize} bytes!`);return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}err(`Failed to grow the heap from ${oldSize} bytes to ${newSize} bytes, not enough memory!`);return false};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.language||"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var _environ_get=(__environ,environ_buf)=>{var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>2]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[penviron_buf_size>>2]=bufSize;return 0};function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var _llvm_eh_typeid_for=type=>type;function _random_get(buffer,size){try{randomFill(HEAPU8.subarray(buffer,buffer+size));return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var incrementExceptionRefcount=ptr=>___cxa_increment_exception_refcount(ptr);var decrementExceptionRefcount=ptr=>___cxa_decrement_exception_refcount(ptr);var stackAlloc=sz=>__emscripten_stack_alloc(sz);var getExceptionMessageCommon=ptr=>{var sp=stackSave();var type_addr_addr=stackAlloc(4);var message_addr_addr=stackAlloc(4);___get_exception_message(ptr,type_addr_addr,message_addr_addr);var type_addr=HEAPU32[type_addr_addr>>2];var message_addr=HEAPU32[message_addr_addr>>2];var type=UTF8ToString(type_addr);_free(type_addr);var message;if(message_addr){message=UTF8ToString(message_addr);_free(message_addr)}stackRestore(sp);return[type,message]};var getExceptionMessage=ptr=>getExceptionMessageCommon(ptr);FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();init_ClassHandle();init_RegisteredPointer();assert(emval_handles.length===5*2);{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["preloadPlugins"])preloadPlugins=Module["preloadPlugins"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];checkIncomingModuleAPI();if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];assert(typeof Module["memoryInitializerPrefixURL"]=="undefined","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["pthreadMainPrefixURL"]=="undefined","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["cdInitializerPrefixURL"]=="undefined","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["filePackagePrefixURL"]=="undefined","Module.filePackagePrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["read"]=="undefined","Module.read option was removed");assert(typeof Module["readAsync"]=="undefined","Module.readAsync option was removed (modify readAsync in JS)");assert(typeof Module["readBinary"]=="undefined","Module.readBinary option was removed (modify readBinary in JS)");assert(typeof Module["setWindowTitle"]=="undefined","Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)");assert(typeof Module["TOTAL_MEMORY"]=="undefined","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY");assert(typeof Module["ENVIRONMENT"]=="undefined","Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)");assert(typeof Module["STACK_SIZE"]=="undefined","STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time");assert(typeof Module["wasmMemory"]=="undefined","Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally");assert(typeof Module["INITIAL_MEMORY"]=="undefined","Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically")}var missingLibrarySymbols=["writeI53ToI64","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","readI53FromI64","readI53FromU64","convertI32PairToI53","convertI32PairToI53Checked","convertU32PairToI53","getTempRet0","zeroMemory","exitJS","withStackSave","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","readEmAsmArgs","jstoi_q","autoResumeAudioContext","getDynCaller","dynCall","handleException","keepRuntimeAlive","runtimeKeepalivePush","runtimeKeepalivePop","callUserCallback","maybeExit","asmjsMangle","HandleAllocator","getNativeTypeSize","addOnInit","addOnPostCtor","addOnPreMain","addOnExit","STACK_SIZE","STACK_ALIGN","POINTER_SIZE","ASSERTIONS","ccall","cwrap","convertJsFunctionToWasm","getEmptyTableSlot","updateTableMap","getFunctionAddress","addFunction","removeFunction","intArrayToString","stringToAscii","stringToNewUTF8","stringToUTF8OnStack","writeArrayToMemory","registerKeyEventCallback","maybeCStringToJsString","findEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","jsStackTrace","getCallstack","convertPCtoSourceLocation","wasiRightsToMuslOFlags","wasiOFlagsToMuslOFlags","safeSetTimeout","setImmediateWrapped","safeRequestAnimationFrame","clearImmediateWrapped","registerPostMainLoop","registerPreMainLoop","getPromise","makePromise","idsToPromises","makePromiseCallback","Browser_asyncPrepareDataCounter","isLeapYear","ydayFromDate","arraySum","addDays","getSocketFromFD","getSocketAddress","FS_mkdirTree","_setNetworkCallback","heapObjectForWebGLType","toTypedArrayIndex","webgl_enable_ANGLE_instanced_arrays","webgl_enable_OES_vertex_array_object","webgl_enable_WEBGL_draw_buffers","webgl_enable_WEBGL_multi_draw","webgl_enable_EXT_polygon_offset_clamp","webgl_enable_EXT_clip_control","webgl_enable_WEBGL_polygon_mode","emscriptenWebGLGet","computeUnpackAlignedImageSize","colorChannelsInGlTextureFormat","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","__glGetActiveAttribOrUniform","writeGLArray","registerWebGlEventCallback","runAndAbortIfError","ALLOC_NORMAL","ALLOC_STACK","allocate","writeStringToMemory","writeAsciiToMemory","demangle","stackTrace","getFunctionArgsName","createJsInvokerSignature","PureVirtualError","registerInheritedInstance","unregisterInheritedInstance","getInheritedInstanceCount","getLiveInheritedInstances","setDelayFunction","validateThis","count_emval_handles","emval_get_global"];missingLibrarySymbols.forEach(missingLibrarySymbol);var unexportedSymbols=["run","addRunDependency","removeRunDependency","out","err","callMain","abort","wasmMemory","wasmExports","HEAPF32","HEAPF64","HEAP8","HEAPU8","HEAP16","HEAPU16","HEAP32","HEAPU32","HEAP64","HEAPU64","writeStackCookie","checkStackCookie","INT53_MAX","INT53_MIN","bigintToI53Checked","stackSave","stackRestore","stackAlloc","setTempRet0","ptrToString","getHeapMax","growMemory","ENV","ERRNO_CODES","strError","DNS","Protocols","Sockets","timers","warnOnce","readEmAsmArgsArray","getExecutableName","asyncLoad","alignMemory","mmapAlloc","wasmTable","getUniqueRunDependency","noExitRuntime","addOnPreRun","addOnPostRun","freeTableIndexes","functionsInTableMap","setValue","getValue","PATH","PATH_FS","UTF8Decoder","UTF8ArrayToString","UTF8ToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","intArrayFromString","AsciiToString","UTF16Decoder","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","JSEvents","specialHTMLTargets","findCanvasEventTarget","currentFullscreenStrategy","restoreOldWindowedStyle","UNWIND_CACHE","ExitStatus","getEnvStrings","checkWasiClock","doReadv","doWritev","initRandomFill","randomFill","emSetImmediate","emClearImmediate_deps","emClearImmediate","promiseMap","uncaughtExceptionCount","exceptionLast","exceptionCaught","ExceptionInfo","findMatchingCatch","getExceptionMessageCommon","Browser","requestFullscreen","requestFullScreen","setCanvasSize","getUserMedia","createContext","getPreloadedImageData__data","wget","MONTH_DAYS_REGULAR","MONTH_DAYS_LEAP","MONTH_DAYS_REGULAR_CUMULATIVE","MONTH_DAYS_LEAP_CUMULATIVE","SYSCALLS","preloadPlugins","FS_createPreloadedFile","FS_modeStringToFlags","FS_getMode","FS_stdin_getChar_buffer","FS_stdin_getChar","FS_unlink","FS_createPath","FS_createDevice","FS_readFile","FS","FS_root","FS_mounts","FS_devices","FS_streams","FS_nextInode","FS_nameTable","FS_currentPath","FS_initialized","FS_ignorePermissions","FS_filesystems","FS_syncFSRequests","FS_readFiles","FS_lookupPath","FS_getPath","FS_hashName","FS_hashAddNode","FS_hashRemoveNode","FS_lookupNode","FS_createNode","FS_destroyNode","FS_isRoot","FS_isMountpoint","FS_isFile","FS_isDir","FS_isLink","FS_isChrdev","FS_isBlkdev","FS_isFIFO","FS_isSocket","FS_flagsToPermissionString","FS_nodePermissions","FS_mayLookup","FS_mayCreate","FS_mayDelete","FS_mayOpen","FS_checkOpExists","FS_nextfd","FS_getStreamChecked","FS_getStream","FS_createStream","FS_closeStream","FS_dupStream","FS_doSetAttr","FS_chrdev_stream_ops","FS_major","FS_minor","FS_makedev","FS_registerDevice","FS_getDevice","FS_getMounts","FS_syncfs","FS_mount","FS_unmount","FS_lookup","FS_mknod","FS_statfs","FS_statfsStream","FS_statfsNode","FS_create","FS_mkdir","FS_mkdev","FS_symlink","FS_rename","FS_rmdir","FS_readdir","FS_readlink","FS_stat","FS_fstat","FS_lstat","FS_doChmod","FS_chmod","FS_lchmod","FS_fchmod","FS_doChown","FS_chown","FS_lchown","FS_fchown","FS_doTruncate","FS_truncate","FS_ftruncate","FS_utime","FS_open","FS_close","FS_isClosed","FS_llseek","FS_read","FS_write","FS_mmap","FS_msync","FS_ioctl","FS_writeFile","FS_cwd","FS_chdir","FS_createDefaultDirectories","FS_createDefaultDevices","FS_createSpecialDirectories","FS_createStandardStreams","FS_staticInit","FS_init","FS_quit","FS_findObject","FS_analyzePath","FS_createFile","FS_createDataFile","FS_forceLoadFile","FS_createLazyFile","FS_absolutePath","FS_createFolder","FS_createLink","FS_joinPath","FS_mmapAlloc","FS_standardizePath","MEMFS","TTY","PIPEFS","SOCKFS","tempFixedLengthArray","miniTempWebGLFloatBuffers","miniTempWebGLIntBuffers","GL","AL","GLUT","EGL","GLEW","IDBStore","SDL","SDL_gfx","allocateUTF8","allocateUTF8OnStack","print","printErr","jstoi_s","InternalError","BindingError","throwInternalError","throwBindingError","registeredTypes","awaitingDependencies","typeDependencies","tupleRegistrations","structRegistrations","sharedRegisterType","whenDependentTypesAreResolved","getTypeName","getFunctionName","heap32VectorToArray","requireRegisteredType","usesDestructorStack","checkArgCount","getRequiredArgCount","createJsInvoker","UnboundTypeError","EmValType","EmValOptionalType","throwUnboundTypeError","ensureOverloadTable","exposePublicSymbol","replacePublicSymbol","createNamedFunction","embindRepr","registeredInstances","getBasestPointer","getInheritedInstance","registeredPointers","registerType","integerReadValueFromPointer","enumReadValueFromPointer","floatReadValueFromPointer","assertIntegerRange","readPointer","runDestructors","craftInvokerFunction","embind__requireFunction","genericPointerToWireType","constNoSmartPtrRawPointerToWireType","nonConstNoSmartPtrRawPointerToWireType","init_RegisteredPointer","RegisteredPointer","RegisteredPointer_fromWireType","runDestructor","releaseClassHandle","finalizationRegistry","detachFinalizer_deps","detachFinalizer","attachFinalizer","makeClassHandle","init_ClassHandle","ClassHandle","throwInstanceAlreadyDeleted","deletionQueue","flushPendingDeletes","delayFunction","RegisteredClass","shallowCopyInternalPointer","downcastPointer","upcastPointer","char_0","char_9","makeLegalFunctionName","emval_freelist","emval_handles","emval_symbols","getStringOrSymbol","Emval","emval_returnValue","emval_lookupTypes","emval_methodCallers","emval_addMethodCaller"];unexportedSymbols.forEach(unexportedRuntimeSymbol);Module["incrementExceptionRefcount"]=incrementExceptionRefcount;Module["decrementExceptionRefcount"]=decrementExceptionRefcount;Module["getExceptionMessage"]=getExceptionMessage;function checkIncomingModuleAPI(){ignoredModuleProp("fetchSettings")}var ___getTypeName=makeInvalidEarlyAccess("___getTypeName");var ___cxa_free_exception=makeInvalidEarlyAccess("___cxa_free_exception");var _free=makeInvalidEarlyAccess("_free");var _malloc=makeInvalidEarlyAccess("_malloc");var _fflush=makeInvalidEarlyAccess("_fflush");var _emscripten_stack_get_end=makeInvalidEarlyAccess("_emscripten_stack_get_end");var _emscripten_stack_get_base=makeInvalidEarlyAccess("_emscripten_stack_get_base");var _strerror=makeInvalidEarlyAccess("_strerror");var _setThrew=makeInvalidEarlyAccess("_setThrew");var __emscripten_tempret_set=makeInvalidEarlyAccess("__emscripten_tempret_set");var _emscripten_stack_init=makeInvalidEarlyAccess("_emscripten_stack_init");var _emscripten_stack_get_free=makeInvalidEarlyAccess("_emscripten_stack_get_free");var __emscripten_stack_restore=makeInvalidEarlyAccess("__emscripten_stack_restore");var __emscripten_stack_alloc=makeInvalidEarlyAccess("__emscripten_stack_alloc");var _emscripten_stack_get_current=makeInvalidEarlyAccess("_emscripten_stack_get_current");var ___cxa_decrement_exception_refcount=makeInvalidEarlyAccess("___cxa_decrement_exception_refcount");var ___cxa_increment_exception_refcount=makeInvalidEarlyAccess("___cxa_increment_exception_refcount");var ___get_exception_message=makeInvalidEarlyAccess("___get_exception_message");var ___cxa_can_catch=makeInvalidEarlyAccess("___cxa_can_catch");var ___cxa_get_exception_ptr=makeInvalidEarlyAccess("___cxa_get_exception_ptr");function assignWasmExports(wasmExports){___getTypeName=createExportWrapper("__getTypeName",1);___cxa_free_exception=createExportWrapper("__cxa_free_exception",1);_free=createExportWrapper("free",1);_malloc=createExportWrapper("malloc",1);_fflush=createExportWrapper("fflush",1);_emscripten_stack_get_end=wasmExports["emscripten_stack_get_end"];_emscripten_stack_get_base=wasmExports["emscripten_stack_get_base"];_strerror=createExportWrapper("strerror",1);_setThrew=createExportWrapper("setThrew",2);__emscripten_tempret_set=createExportWrapper("_emscripten_tempret_set",1);_emscripten_stack_init=wasmExports["emscripten_stack_init"];_emscripten_stack_get_free=wasmExports["emscripten_stack_get_free"];__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"];__emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"];_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"];___cxa_decrement_exception_refcount=createExportWrapper("__cxa_decrement_exception_refcount",1);___cxa_increment_exception_refcount=createExportWrapper("__cxa_increment_exception_refcount",1);___get_exception_message=createExportWrapper("__get_exception_message",3);___cxa_can_catch=createExportWrapper("__cxa_can_catch",3);___cxa_get_exception_ptr=createExportWrapper("__cxa_get_exception_ptr",1)}var wasmImports={__assert_fail:___assert_fail,__cxa_begin_catch:___cxa_begin_catch,__cxa_end_catch:___cxa_end_catch,__cxa_find_matching_catch_2:___cxa_find_matching_catch_2,__cxa_find_matching_catch_3:___cxa_find_matching_catch_3,__cxa_find_matching_catch_4:___cxa_find_matching_catch_4,__cxa_rethrow:___cxa_rethrow,__cxa_throw:___cxa_throw,__cxa_uncaught_exceptions:___cxa_uncaught_exceptions,__resumeException:___resumeException,__syscall_fchmodat2:___syscall_fchmodat2,__syscall_fcntl64:___syscall_fcntl64,__syscall_fstat64:___syscall_fstat64,__syscall_getdents64:___syscall_getdents64,__syscall_ioctl:___syscall_ioctl,__syscall_lstat64:___syscall_lstat64,__syscall_mkdirat:___syscall_mkdirat,__syscall_newfstatat:___syscall_newfstatat,__syscall_openat:___syscall_openat,__syscall_renameat:___syscall_renameat,__syscall_rmdir:___syscall_rmdir,__syscall_stat64:___syscall_stat64,__syscall_unlinkat:___syscall_unlinkat,_abort_js:__abort_js,_embind_register_bigint:__embind_register_bigint,_embind_register_bool:__embind_register_bool,_embind_register_class:__embind_register_class,_embind_register_class_function:__embind_register_class_function,_embind_register_emval:__embind_register_emval,_embind_register_enum:__embind_register_enum,_embind_register_enum_value:__embind_register_enum_value,_embind_register_float:__embind_register_float,_embind_register_function:__embind_register_function,_embind_register_integer:__embind_register_integer,_embind_register_memory_view:__embind_register_memory_view,_embind_register_std_string:__embind_register_std_string,_embind_register_std_wstring:__embind_register_std_wstring,_embind_register_void:__embind_register_void,_emval_create_invoker:__emval_create_invoker,_emval_decref:__emval_decref,_emval_get_property:__emval_get_property,_emval_incref:__emval_incref,_emval_invoke:__emval_invoke,_emval_new_array:__emval_new_array,_emval_new_cstring:__emval_new_cstring,_emval_new_object:__emval_new_object,_emval_run_destructors:__emval_run_destructors,_emval_set_property:__emval_set_property,_tzset_js:__tzset_js,clock_time_get:_clock_time_get,emscripten_get_heap_max:_emscripten_get_heap_max,emscripten_resize_heap:_emscripten_resize_heap,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,fd_close:_fd_close,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write,invoke_dd,invoke_dddd,invoke_ddddd,invoke_dddid,invoke_dddiii,invoke_ddi,invoke_di,invoke_did,invoke_didd,invoke_diddd,invoke_didddd,invoke_didddddi,invoke_diddddi,invoke_diddddii,invoke_didddi,invoke_diddi,invoke_diddid,invoke_diddiid,invoke_diddiii,invoke_didi,invoke_didii,invoke_dii,invoke_diidd,invoke_diididi,invoke_diididid,invoke_diii,invoke_diiid,invoke_diiidd,invoke_diiidi,invoke_diiii,invoke_diiiid,invoke_diiiii,invoke_diiiiid,invoke_diiiiii,invoke_diiiiiii,invoke_diiiiiiii,invoke_fiii,invoke_i,invoke_iddii,invoke_idiiii,invoke_ii,invoke_iid,invoke_iidd,invoke_iiddd,invoke_iidddd,invoke_iiddddd,invoke_iiddddi,invoke_iiddddiid,invoke_iidddi,invoke_iidddii,invoke_iiddi,invoke_iiddii,invoke_iiddiid,invoke_iii,invoke_iiiddii,invoke_iiiddiiddd,invoke_iiidi,invoke_iiididii,invoke_iiii,invoke_iiiid,invoke_iiiidd,invoke_iiiiddi,invoke_iiiii,invoke_iiiiid,invoke_iiiiidddiii,invoke_iiiiidi,invoke_iiiiidiii,invoke_iiiiii,invoke_iiiiiidi,invoke_iiiiiii,invoke_iiiiiiiddii,invoke_iiiiiiii,invoke_iiiiiiiiii,invoke_iiiiiiiiiii,invoke_iiiiiiiiiiii,invoke_iiiiiiiiiiiii,invoke_iiiiij,invoke_iij,invoke_iiji,invoke_iijiii,invoke_iijji,invoke_iijjiii,invoke_ijjiiii,invoke_ji,invoke_jii,invoke_jiiii,invoke_v,invoke_vddddiiii,invoke_vdii,invoke_vdiiii,invoke_vi,invoke_vid,invoke_vidd,invoke_viddd,invoke_vidddddddd,invoke_viddddddddii,invoke_viddddddddiii,invoke_vidddiii,invoke_viddi,invoke_viddiii,invoke_vidi,invoke_vidid,invoke_vii,invoke_viid,invoke_viidd,invoke_viiddd,invoke_viidddddi,invoke_viidddi,invoke_viidddiid,invoke_viiddi,invoke_viiddiii,invoke_viidi,invoke_viidiid,invoke_viii,invoke_viiid,invoke_viiidd,invoke_viiiddidii,invoke_viiiddii,invoke_viiidid,invoke_viiidiid,invoke_viiidiii,invoke_viiidiiii,invoke_viiii,invoke_viiiid,invoke_viiiiddi,invoke_viiiidiii,invoke_viiiidiiii,invoke_viiiii,invoke_viiiiid,invoke_viiiiii,invoke_viiiiiid,invoke_viiiiiidii,invoke_viiiiiii,invoke_viiiiiiid,invoke_viiiiiiidiiii,invoke_viiiiiiii,invoke_viiiiiiiii,invoke_viiiiiiiiii,invoke_viiiiiiiiiidii,invoke_viiiiiiiiiii,invoke_viiiiiiiiiiii,invoke_viiiiiiiiiiiii,invoke_viiiiiiiiiiiiiii,invoke_viijii,invoke_vij,invoke_vjjii,llvm_eh_typeid_for:_llvm_eh_typeid_for,random_get:_random_get};var wasmExports=await createWasm();function invoke_iii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vii(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_i(index){var sp=stackSave();try{return getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_v(index){var sp=stackSave();try{getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vi(index,a1){var sp=stackSave();try{getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_ji(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_di(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iid(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iijiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iijjiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiji(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iijji(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vdii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_idiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vjjii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_ijjiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_dd(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_dddiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_did(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_diddi(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiidi(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiidi(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiidiii(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiidddiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_iij(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiiiid(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiiiiidiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_dii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viidd(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiddi(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_diiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_diii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_diiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_diididi(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_diiiid(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viddi(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_diddiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_diddddi(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_dddd(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_ddddd(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vdiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_diddd(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_didddi(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_dddid(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_didddd(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iidddd(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiddd(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_diiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_diiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiiiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vij(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiiiidii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiidiiii(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiid(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiiiiiiiidii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_didii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiddiiddd(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiddidii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_diiid(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_diddddii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiddiid(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iddii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_diiiiiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiidiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iidddi(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiddi(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iidd(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iidddii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiddd(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vid(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiddddi(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_diiidd(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vidd(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiidd(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiddiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_didddddi(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_ddi(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viddd(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiid(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiidd(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiiidi(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiididii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiiiiddii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_didd(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_diddid(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viidddiid(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viidiid(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viid(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_diddiid(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vidddiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiiiiid(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vidi(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiidiid(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viidddddi(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vidid(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiidid(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiiddi(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viidddi(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiddddiid(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiddii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiddddd(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiddii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viddiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiid(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viddddddddii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_diiiiid(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viddddddddiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vidddddddd(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vddddiiii(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_diiidi(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiddi(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiiid(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_diidd(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viidi(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiddii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiidiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiidiii(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_didi(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_diididid(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viijii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiij(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiid(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiiiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_fiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}var calledRun;function stackCheckInit(){_emscripten_stack_init();writeStackCookie()}function run(){if(runDependencies>0){dependenciesFulfilled=run;return}stackCheckInit();preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){assert(!calledRun);calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve?.(Module);Module["onRuntimeInitialized"]?.();consumedModuleProp("onRuntimeInitialized");assert(!Module["_main"],'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]');postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}checkStackCookie()}function preInit(){if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}consumedModuleProp("preInit")}preInit();run();if(runtimeInitialized){moduleRtn=Module}else{moduleRtn=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject})}for(const prop of Object.keys(Module)){if(!(prop in moduleArg)){Object.defineProperty(moduleArg,prop,{configurable:true,get(){abort(`Access to module property ('${prop}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}})}}
+;return moduleRtn}export default Module;
diff --git a/web-release/mollier/vendor/coolprop-8.0.0/coolprop.wasm b/web-release/mollier/vendor/coolprop-8.0.0/coolprop.wasm
new file mode 100644
index 0000000000000000000000000000000000000000..787c00893b690e976da1614d547a79a119519c90
GIT binary patch
literal 9196512
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