geometryview 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +37 -2
  2. package/bin/geometryview.mjs +65 -0
  3. package/package.json +42 -4
  4. package/src/bridge.mjs +77 -0
  5. package/src/mcp.mjs +73 -0
  6. package/src/native.mjs +183 -0
  7. package/src/page.mjs +147 -0
  8. package/src/tools.mjs +265 -0
  9. package/src/web.mjs +173 -0
  10. package/src/websocket.mjs +104 -0
  11. package/web/LICENSE +21 -0
  12. package/web/NOTICES.md +49 -0
  13. package/web/bridge.js +29 -0
  14. package/web/build/geometryview-web.mjs +2 -0
  15. package/web/build/geometryview-web.wasm +0 -0
  16. package/web/chrome.js +541 -0
  17. package/web/engine.js +453 -0
  18. package/web/fonts/IBMPlexMono-Medium.ttf +0 -0
  19. package/web/fonts/IBMPlexMono-Regular.ttf +0 -0
  20. package/web/fonts/IBMPlexMono-SemiBold.ttf +0 -0
  21. package/web/fonts/LICENSE.txt +93 -0
  22. package/web/icons/icon-180.png +0 -0
  23. package/web/icons/icon-192.png +0 -0
  24. package/web/icons/icon-32.png +0 -0
  25. package/web/icons/icon-512.png +0 -0
  26. package/web/icons.js +50 -0
  27. package/web/import-worker.js +329 -0
  28. package/web/index.html +17 -0
  29. package/web/input.js +255 -0
  30. package/web/isolation-worker.js +21 -0
  31. package/web/library-rows.js +120 -0
  32. package/web/library-store.js +368 -0
  33. package/web/library.js +306 -0
  34. package/web/manifest.webmanifest +14 -0
  35. package/web/occt/geometryview-occt-web.mjs +2 -0
  36. package/web/occt/geometryview-occt-web.wasm +0 -0
  37. package/web/occt/geometryview-step-web.mjs +2 -0
  38. package/web/occt/geometryview-step-web.wasm +0 -0
  39. package/web/occt-threads/geometryview-step-web.mjs +2 -0
  40. package/web/occt-threads/geometryview-step-web.wasm +0 -0
  41. package/web/occt-worker.js +45 -0
  42. package/web/structure.js +435 -0
  43. package/web/toolbar-fold.js +49 -0
  44. package/web/ui.js +134 -0
  45. package/web/viewer.css +558 -0
  46. package/web/viewer.js +1163 -0
package/web/library.js ADDED
@@ -0,0 +1,306 @@
1
+ // The library: connected folders and recent files, in the Library card; and the imports this
2
+ // browser keeps in its origin-private file system as cache files, so that a file opens again at
3
+ // once without importing. What a folder holds and where files come from is library-store.js's;
4
+ // which rows show, library-rows.js's.
5
+
6
+ import { iconNode, icons } from "./icons.js";
7
+ import { ageText, RowKinds, rowsOf, keyOf, Sections } from "./library-rows.js";
8
+ import { el, pill, segmented, VirtualList } from "./ui.js";
9
+
10
+ const kFolder = "library";
11
+
12
+ async function folder() {
13
+ const root = await navigator.storage.getDirectory();
14
+ return root.getDirectoryHandle(kFolder, { create: true });
15
+ }
16
+
17
+ // Every kept file: { name, size, modified, file() }.
18
+ export async function libraryEntries() {
19
+ const entries = [];
20
+ try {
21
+ for await (const handle of (await folder()).values()) {
22
+ if (handle.kind !== "file" || !handle.name.endsWith(".geoblob")) continue;
23
+ const file = await handle.getFile();
24
+ entries.push({ name: handle.name.replace(/\.geoblob$/, ""), size: file.size,
25
+ modified: file.lastModified, file: () => handle.getFile() });
26
+ }
27
+ } catch {
28
+ // No origin-private file system here: nothing is kept.
29
+ }
30
+ return entries.sort((a, b) => b.modified - a.modified);
31
+ }
32
+
33
+ // The cache file version the engine reads, set once it has started: a kept import written in
34
+ // another is as good as none, and is made again.
35
+ let cacheVersion = null;
36
+ export function setCacheVersion(version) { cacheVersion = version; }
37
+
38
+ // A cache file's version, from its header: 8 bytes of magic, then a little-endian u32.
39
+ async function versionOf(blob) {
40
+ const header = new DataView(await blob.slice(0, 12).arrayBuffer());
41
+ return header.byteLength >= 12 ? header.getUint32(8, true) : -1;
42
+ }
43
+
44
+ // A kept cache file, by the name of the file it came from, or null if there is none or it is in
45
+ // an older format.
46
+ async function current(dir, name) {
47
+ const blob = await (await dir.getFileHandle(`${name}.geoblob`)).getFile();
48
+ return cacheVersion === null || (await versionOf(blob)) === cacheVersion ? blob : null;
49
+ }
50
+
51
+ // The cache file an import of `file` made before, if the file is unchanged since: its size and
52
+ // modification time match the note kept with it, and the engine reads its version.
53
+ export async function cachedImport(file) {
54
+ try {
55
+ const dir = await folder();
56
+ const note = JSON.parse(await (await (await dir.getFileHandle(`${file.name}.json`)).getFile()).text());
57
+ if (note.size !== file.size || note.lastModified !== file.lastModified) return null;
58
+ return await current(dir, file.name);
59
+ } catch {
60
+ return null;
61
+ }
62
+ }
63
+
64
+ // A kept cache file, by the name of the file it came from; null if it is in an older format.
65
+ export async function keptFile(name) {
66
+ return current(await folder(), name);
67
+ }
68
+
69
+ // Deletes what was kept for `name`: its cache file, its note and its source.
70
+ export async function forgetKept(name) {
71
+ try {
72
+ const dir = await folder();
73
+ for (const suffix of [".geoblob", ".json", ".source"]) {
74
+ await dir.removeEntry(`${name}${suffix}`).catch(() => {});
75
+ }
76
+ } catch {
77
+ // Nothing kept here.
78
+ }
79
+ }
80
+
81
+ // A STEP file kept beside its cache, for importing its definitions again, finer, or null if none
82
+ // was kept whole.
83
+ export async function keptSource(name) {
84
+ try {
85
+ const dir = await folder();
86
+ const note = JSON.parse(await (await (await dir.getFileHandle(`${name}.json`)).getFile()).text());
87
+ const source = await (await dir.getFileHandle(`${name}.source`)).getFile();
88
+ return source.size === note.size ? source : null;
89
+ } catch {
90
+ return null;
91
+ }
92
+ }
93
+
94
+ // A row's height, as the structure tree's.
95
+ const rowHeight = () => (document.body.classList.contains("phone") ? 30 : 28);
96
+
97
+ // The Library card: its switcher and the two ways in, opening files and connecting a folder, then
98
+ // Folders and Recent as rows like the structure tree's.
99
+ export class LibraryCard {
100
+ #store;
101
+ #on;
102
+ #list;
103
+ #rows = [];
104
+ #folders = [];
105
+ #listings = new Map();
106
+ #expanded = new Set();
107
+ #collapsed;
108
+ #recent = [];
109
+ #open = new Set();
110
+
111
+ // `on` takes: open({ root, path, name }, add), reopen(entry, add), choose(), connect(), switch(show)
112
+ constructor(store, on) {
113
+ this.#store = store;
114
+ this.#on = on;
115
+ try {
116
+ this.#collapsed = new Set(JSON.parse(localStorage.getItem("library.collapsed") ?? "[]"));
117
+ } catch {
118
+ this.#collapsed = new Set();
119
+ }
120
+ this.switcher = segmented(["Library", "Structure"], { selected: 0, help: "Library or structure",
121
+ onChange: (i) => on.switch(i === 0) });
122
+ const add = pill({ icon: icons.plus, help: "Open files (⌘O)", onPress: () => on.choose() });
123
+ const connect = pill({ icon: icons.folderPlus, help: "Connect a folder (⌥⌘O)", onPress: () => on.connect() });
124
+ connect.hidden = !store.canConnect;
125
+ this.#list = new VirtualList({ role: "tree", rowHeight, count: () => this.#rows.length,
126
+ row: (index) => this.#row(this.#rows[index]) });
127
+ this.element = el("section.card.structure.library", { hidden: true, "aria-label": "Library" }, [
128
+ el("div.header", {}, [this.switcher.element, el("span.grow"), add, connect]),
129
+ this.#list.element,
130
+ ]);
131
+ }
132
+
133
+ // Reads the folders and recent files again; `kept` are the imports this browser kept, which
134
+ // fill Recent on a first visit.
135
+ async refresh(kept) {
136
+ this.#folders = await this.#store.folders.folders();
137
+ this.#recent = await this.#store.recent(kept);
138
+ this.#rebuild();
139
+ }
140
+
141
+ // The keys of the files shown now, marked in the rows.
142
+ setOpen(keys) {
143
+ this.#open = new Set(keys);
144
+ this.#rebuild();
145
+ }
146
+
147
+ // Opens a newly connected folder's row.
148
+ expand(root) {
149
+ const key = keyOf(root, "");
150
+ this.#expanded.add(key);
151
+ this.#readListing(root, "");
152
+ }
153
+
154
+ folderName(id) {
155
+ return this.#folders.find((f) => f.id === id)?.name ?? "";
156
+ }
157
+
158
+ get readyFolders() {
159
+ return new Set(this.#folders.filter((f) => f.state === "ready" || f.state === "visit").map((f) => f.id));
160
+ }
161
+
162
+ #rebuild() {
163
+ this.#rows = rowsOf({ folders: this.#folders, listings: this.#listings, expanded: this.#expanded,
164
+ collapsed: this.#collapsed, recent: this.#recent, open: this.#open });
165
+ if (!this.element.hidden) this.#list.render();
166
+ }
167
+
168
+ render() { this.#rebuild(); this.#list.render(); }
169
+
170
+ // A folder is listed each time it is opened, so opening it again shows what changed; "Reading…"
171
+ // only if that takes a moment.
172
+ async #readListing(root, path) {
173
+ const key = keyOf(root, path);
174
+ const listing = { state: "reading", slow: false };
175
+ this.#listings.set(key, listing);
176
+ const slow = setTimeout(() => { listing.slow = true; this.#rebuild(); }, 150);
177
+ this.#rebuild();
178
+ try {
179
+ const entries = await this.#store.folders.list(root, path);
180
+ this.#listings.set(key, { state: "listed", entries });
181
+ } catch {
182
+ this.#listings.set(key, { state: "failed" });
183
+ }
184
+ clearTimeout(slow);
185
+ this.#rebuild();
186
+ }
187
+
188
+ #toggleSection(key) {
189
+ if (this.#collapsed.has(key)) this.#collapsed.delete(key);
190
+ else this.#collapsed.add(key);
191
+ try {
192
+ localStorage.setItem("library.collapsed", JSON.stringify([...this.#collapsed]));
193
+ } catch {
194
+ // Not remembered: it costs nothing now.
195
+ }
196
+ this.#rebuild();
197
+ }
198
+
199
+ async #toggleFolder(row) {
200
+ if (row.state === "reconnect") {
201
+ if (await this.#store.folders.reconnect(row.root)) {
202
+ await this.refresh();
203
+ this.expand(row.root);
204
+ }
205
+ return;
206
+ }
207
+ if (row.state === "missing") return;
208
+ if (this.#expanded.has(row.key)) {
209
+ this.#expanded.delete(row.key);
210
+ this.#rebuild();
211
+ } else {
212
+ this.#expanded.add(row.key);
213
+ await this.#readListing(row.root, row.path);
214
+ }
215
+ }
216
+
217
+ async #disconnect(row) {
218
+ await this.#store.folders.disconnect(row.root);
219
+ for (const key of [...this.#expanded]) if (key.startsWith(`${row.root}/`)) this.#expanded.delete(key);
220
+ for (const key of [...this.#listings.keys()]) if (key.startsWith(`${row.root}/`)) this.#listings.delete(key);
221
+ await this.refresh();
222
+ }
223
+
224
+ async #forget(row) {
225
+ await this.#on.forget(row.recentKey);
226
+ await this.refresh();
227
+ }
228
+
229
+ #row(row) {
230
+ const element = el("div.row", { role: "treeitem" });
231
+ element.style.paddingLeft = `${8 + row.depth * 14}px`;
232
+ if (row.kind === RowKinds.Message) {
233
+ element.classList.add("message");
234
+ element.style.paddingLeft = `${8 + row.depth * 14 + 35}px`; // under the names at its depth
235
+ element.append(el("span.name", { text: row.text }));
236
+ return element;
237
+ }
238
+ const expandable = row.kind === RowKinds.Section ||
239
+ (row.kind === RowKinds.Folder && row.state !== "missing");
240
+ if (expandable) {
241
+ const chevron = el("button.chevron", { type: "button", "aria-label": row.expanded ? "Collapse" : "Expand" },
242
+ [iconNode("chevron", 12)]);
243
+ chevron.classList.toggle("open", row.expanded);
244
+ element.append(chevron);
245
+ } else {
246
+ element.append(el("span.chevron"));
247
+ }
248
+ const actions = [];
249
+ let end = null;
250
+ switch (row.kind) {
251
+ case RowKinds.Section:
252
+ element.classList.add("heading");
253
+ element.append(el("span.name", { text: row.name }));
254
+ end = el("span.count", { text: String(row.count) });
255
+ element.addEventListener("click", () => this.#toggleSection(row.key));
256
+ break;
257
+ case RowKinds.Folder:
258
+ element.append(el("span.glyph", {}, [iconNode("folder", 14)]), el("span.name", { text: row.name }));
259
+ element.classList.toggle("missing", row.state === "missing");
260
+ if (row.top) {
261
+ element.title = row.name;
262
+ actions.push(this.#rowButton("Disconnect", "close", () => this.#disconnect(row)));
263
+ if (row.state === "reconnect") {
264
+ end = pill({ title: "Reconnect", help: "Let this page read the folder again",
265
+ onPress: () => this.#toggleFolder(row) });
266
+ end.classList.add("small");
267
+ } else if (row.state === "missing") {
268
+ end = el("span.count", { text: "Missing" });
269
+ } else if (row.state === "visit") {
270
+ end = el("span.count", { text: "this visit", title: "This browser keeps the folder only while the page is open" });
271
+ }
272
+ }
273
+ element.addEventListener("click", () => this.#toggleFolder(row));
274
+ break;
275
+ case RowKinds.File:
276
+ element.append(el("span.glyph", {}, [iconNode("cube", 14)]), el("span.name", { text: row.name }));
277
+ element.classList.toggle("selected", Boolean(row.open));
278
+ element.title = "Open; ⌘-click adds it to what is shown";
279
+ element.addEventListener("click", (e) => this.#on.open(row, e.metaKey || e.ctrlKey));
280
+ break;
281
+ case RowKinds.Recent:
282
+ element.append(el("span.glyph", {}, [iconNode("cube", 14)]), el("span.name", { text: row.name }));
283
+ element.classList.toggle("selected", Boolean(row.open));
284
+ element.title = row.where ?? row.name;
285
+ actions.push(this.#rowButton("Remove from Recent", "close", () => this.#forget(row)));
286
+ end = el("span.count", { text: ageText(row.openedAt) });
287
+ element.addEventListener("click", (e) => {
288
+ const entry = this.#recent.find((r) => r.key === row.recentKey);
289
+ if (entry) this.#on.reopen(entry, e.metaKey || e.ctrlKey);
290
+ });
291
+ break;
292
+ }
293
+ if (actions.length) element.append(el("span.actions", {}, actions));
294
+ if (end) element.append(end);
295
+ return element;
296
+ }
297
+
298
+ #rowButton(help, icon, press) {
299
+ const button = el("button.rowbutton", { type: "button", title: help, "aria-label": help }, [iconNode(icon, 13)]);
300
+ button.addEventListener("click", (e) => {
301
+ e.stopPropagation();
302
+ press();
303
+ });
304
+ return button;
305
+ }
306
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "GeometryView",
3
+ "short_name": "GeometryView",
4
+ "description": "View 3D models: STEP and STL files, on this computer.",
5
+ "start_url": "./",
6
+ "scope": "./",
7
+ "display": "standalone",
8
+ "background_color": "#17181b",
9
+ "theme_color": "#17181b",
10
+ "icons": [
11
+ { "src": "icons/icon-192.png", "sizes": "192x192", "type": "image/png" },
12
+ { "src": "icons/icon-512.png", "sizes": "512x512", "type": "image/png" }
13
+ ]
14
+ }
@@ -0,0 +1,2 @@
1
+ async function createOcct(moduleArg={}){var Module=moduleArg;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(false,true){try{scriptDirectory=new URL(".",_scriptName).href}catch{}if(true)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=>{var response=await fetch(url,{credentials:"same-origin"});if(response.ok)return response.arrayBuffer();throw new Error(response.status+" : "+response.url)}}var out=console.log.bind(console);var err=console.error.bind(console);var ABORT=false;var EXITSTATUS;var runtimeInitialized=false;function getMemoryBuffer(){return wasmMemory.buffer}function updateMemoryViews(){if(HEAP8?.buffer?.resizable)return;var b=getMemoryBuffer();HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);Module["HEAPF64"]=new Float64Array(b);HEAP64=new BigInt64Array(b)}function preRun(){var preRun=Module["preRun"];if(preRun){if(typeof preRun==="function")preRun=[preRun];onPreRuns.push(...preRun)}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();wasmExports["E"]();FS.ignorePermissions=false}function postRun(){var postRun=Module["postRun"];if(postRun){if(typeof postRun==="function")postRun=[postRun];onPostRuns.push(...postRun)}callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what=`Aborted(${what})`;err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";if(runtimeInitialized)___trap();throw new WebAssembly.RuntimeError(what)}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"])return locateFile("geometryview-occt-web.wasm");return new URL("geometryview-occt-web.wasm",import.meta.url).href}function getBinarySync(file){if(readBinary)return readBinary(file);throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(true)try{return await readAsync(binaryFile)}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}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary)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(){var imports={a:wasmImports};return imports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var HEAP8;var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0)callbacks.shift()(Module)};var onPostRuns=[];var onPreRuns=[];var noExitRuntime=true;var wasmTableMirror=[];var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func)wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr);return func};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var preloadPlugins=[];var FS_handledByPreloadPlugin=async(byteArray,fullname)=>{if(typeof Browser!=="undefined")Browser.init();for(var plugin of preloadPlugins)if(plugin["canHandle"](fullname))return plugin["handle"](byteArray,fullname);return byteArray};var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.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 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<arr.length;start++)if(arr[start]!=="")break;var end=arr.length-1;for(;end>=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<length;i++)if(fromParts[i]!==toParts[i]){samePartsLength=i;break}var outputParts=[];for(i=samePartsLength;i<fromParts.length;i++)outputParts.push("..");outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var dependenciesPromise=null;var dependenciesPromiseResolve=null;var resolveRunDependencies=async()=>dependenciesPromise;var runDependencies=0;var removeRunDependency=()=>{runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(!runDependencies)dependenciesPromiseResolve()};var addRunDependency=()=>{if(!runDependencies)dependenciesPromise=new Promise(resolve=>dependenciesPromiseResolve=resolve);runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)};var asyncLoad=async url=>{var arrayBuffer=await readAsync(url);return new Uint8Array(arrayBuffer)};var getUniqueRunDependency=id=>id;var FS_preloadFile=async(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;getUniqueRunDependency(`cp ${fullname}`);addRunDependency();try{var byteArray=url;if(typeof url==="string")byteArray=await asyncLoad(url);byteArray=await FS_handledByPreloadPlugin(byteArray,fullname);preFinish?.();if(!dontCreateFile)FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}finally{removeRunDependency()}};var lengthBytesUTF8=str=>{var len=0;for(var i=0;i<str.length;++i){var u=str.codePointAt(i);if(u<=127)len++;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else{len+=4;i++}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.codePointAt(i);if(u<=127){if(outIdx>=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;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_fileDataToTypedArray=data=>{if(typeof data==="string")data=intArrayFromString(data,true);if(!data.subarray)data=new Uint8Array(data);return data};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=365;if(canWrite)mode|=146;return mode};var FS_modeStringToFlags=str=>{if(typeof str!=="string")return str;var flags={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[str];if(typeof flags==="undefined")throw new Error(`Unknown file open mode: ${str}`);return flags};var mmapAlloc=()=>{abort()};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=MEMFS.emptyFileContents??=new Uint8Array(0)}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){return node.contents.subarray(0,node.usedBytes)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents.length;if(prevCapacity>=newCapacity)return;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<1048576?2:1.125)>>>0);if(prevCapacity)newCapacity=Math.max(newCapacity,256);var oldContents=MEMFS.getFileDataAsTypedArray(node);node.contents=new Uint8Array(newCapacity);node.contents.set(oldContents)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;var oldContents=node.contents;node.contents=new Uint8Array(newSize);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!==void 0)MEMFS.resizeFileStorage(node,attr.size)},lookup(parent,name){if(!MEMFS.doesNotExistError){MEMFS.doesNotExistError=new FS.ErrnoError(44);MEMFS.doesNotExistError.stack="<generic error, no stack>"}throw MEMFS.doesNotExistError},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&&FS.isDir(old_node.mode))for(var i in new_node.contents)throw new FS.ErrnoError(55);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,41471,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);buffer.set(contents.subarray(position,position+size),offset);return size},write(stream,buffer,offset,length,position,canOwn){if(buffer.buffer===HEAP8.buffer)canOwn=false;if(!length)return 0;var node=stream.node;node.mtime=node.ctime=Date.now();if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length}else if(!node.usedBytes&&!position){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length}else{MEMFS.expandFileStorage(node,position+length);node.contents.set(buffer.subarray(offset,offset+length),position);node.usedBytes=Math.max(node.usedBytes,position+length)}return length},llseek(stream,offset,whence){var position=offset;if(whence===1)position+=stream.position;else if(whence===2)if(FS.isFile(stream.node.mode))position+=stream.node.usedBytes;if(position<0)throw new FS.ErrnoError(28);return position},mmap(stream,length,position,prot,flags){if(!FS.isFile(stream.node.mode))throw new FS.ErrnoError(43);var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===HEAP8.buffer){allocated=false;ptr=contents.byteOffset}else{allocated=true;ptr=mmapAlloc();if(!ptr)throw new FS.ErrnoError(48);if(contents){if(position>0||position+length<contents.length)if(contents.subarray)contents=contents.subarray(position,position+length);else contents=contents.slice(position,position+length);HEAP8.set(contents,ptr)}}return{ptr,allocated}},msync(stream,buffer,offset,length,mmapFlags){MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS_stdin_getChar_buffer=[];var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){if(true)return null;FS_stdin_getChar_buffer=intArrayFromString(null,true)}return FS_stdin_getChar_buffer.shift()};var UTF8Decoder=globalThis.TextDecoder&&new TextDecoder;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<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224)u0=(u0&15)<<12|u1<<6|u2;else u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63;if(u0<65536)str+=String.fromCharCode(u0);else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str};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;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===void 0&&!bytesRead)throw new FS.ErrnoError(6);if(result===null||result===void 0)break;bytesRead++;buffer[offset+i]=result;if(result===10)break}if(bytesRead)stream.node.atime=Date.now();return bytesRead},write(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char)throw new FS.ErrnoError(60);try{for(var i=0;i<length;i++)stream.tty.ops.put_char(stream.tty,buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}if(length)stream.node.mtime=stream.node.ctime=Date.now();return i}},default_tty_ops:{get_char(tty){return FS_stdin_getChar()},put_char(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output));tty.output=[]}else if(val!=0)tty.output.push(val)},fsync(tty){if(tty.output?.length>0){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 initRandomFill=()=>view=>(crypto.getRandomValues(view),0);var randomFill=view=>(randomFill=initRandomFill())(view);var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:[],currentPath:"/",initialized:false,ignorePermissions:true,syncFSRequests:0,ErrnoError:class{name="ErrnoError";constructor(errno){this.errno=errno}},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=365;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)}addListener(cb,exclusive=false){var entry={cb,exclusive};var listeners=this.listeners??=new Set;listeners.add(entry);return{listeners,entry}}notifyListeners(flags){if(!this.listeners)return;var excl;for(var entry of this.listeners)if(entry.exclusive)(excl||=[]).push(entry);else entry.cb(flags);if(excl){var i=(this.exclTurn||0)%excl.length;this.exclTurn=i+1;excl[i].cb(flags)}}},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<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent)break;if(parts[i]===".")continue;if(parts[i]===".."){current_path=PATH.dirname(current_path);if(FS.isRoot(current)){path=current_path+"/"+parts.slice(i+1).join("/");nlinks--;continue linkloop}else current=current.parent;continue}current_path=PATH.join2(current_path,parts[i]);try{current=FS.lookupNode(current,parts[i])}catch(e){if(e?.errno===44&&islast&&opts.noent_okay)return{path:current_path};throw e}if(FS.isMountpoint(current)&&(!islast||opts.follow_mount))current=current.mounted.root;if(FS.isLink(current.mode)&&(!islast||opts.follow)){if(!current.node_ops.readlink)throw new FS.ErrnoError(52);var link=current.node_ops.readlink(current);if(!PATH.isAbs(link))link=PATH.dirname(current_path)+"/"+link;path=link+"/"+parts.slice(i+1).join("/");continue linkloop}}return{path:current_path,node:current}}throw new FS.ErrnoError(32)},getPath(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName(parentid,name){var hash=0;for(var i=0;i<name.length;i++)hash=(hash<<5)-hash+name.charCodeAt(i)|0;return(parentid+hash>>>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){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;if(perms.includes("w")&&!(node.mode&146))return 2;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{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;var mode=FS.flagsToPermissionString(flags);if(FS.isDir(node.mode))if(mode!=="r"||flags&576)return 31;return FS.nodePermissions(node,mode)},checkOpExists(op,err){if(!op)throw new FS.ErrnoError(err);return op},nextfd(){for(var fd=0;fd<=4096;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){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);try{setattr(arg,attr)}catch(e){if(e instanceof RangeError)throw new FS.ErrnoError(22);throw e}},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){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)}for(var mount of mounts)if(mount.type.syncfs)mount.type.syncfs(mount,populate,done);else done(null)},mount(type,opts,mountpoint){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);for(var[hash,current]of Object.entries(FS.nameTable))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);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&=1023;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode=511){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)},link(oldpath,newpath,flags){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.link)throw new FS.ErrnoError(34);return parent.node_ops.link(parent,newname,oldpath,flags)},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);if(new_node)FS.hashRemoveNode(new_node);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=false){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=false){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&-4096,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow=false){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=false){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow=false){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,dontFollow=false){var lookup=FS.lookupPath(path,{follow:!dontFollow});FS.doSetAttr(null,lookup.node,{atime,mtime,dontFollow})},open(path,flags,mode=438){if(path==="")throw new FS.ErrnoError(44);flags=FS_modeStringToFlags(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&=-513;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&=-131713;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);return stream},close(stream){if(FS.isClosed(stream))throw new FS.ErrnoError(8);if(stream.getdents)stream.getdents=null;stream.node?.notifyListeners(32);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){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){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&&!(flags&2)&&(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){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??=0;opts.encoding??="binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary")abort(`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??=577;var stream=FS.open(path,opts.flags,opts.mode);data=FS_fileDataToTypedArray(data);FS.write(stream,data,0,data.byteLength,void 0,opts.canOwn);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)=>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){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");FS.open("/dev/stdin",0);FS.open("/dev/stdout",1);FS.open("/dev/stderr",1)},staticInit(){FS.nameTable.length=4096;FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories()},init(input,output,error){FS.initialized=true;input??=Module["stdin"];output??=Module["stdout"];error??=Module["stderr"];FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;for(var stream of FS.streams)if(stream)FS.close(stream)},analyzePath(path,dontResolveLastLink=false){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{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){data=FS_fileDataToTypedArray(data);FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}},createDevice(parent,name,input,output){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(!!input,!!output);FS.createDevice.major??=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open(stream){stream.seekable=false},close(stream){if(output?.buffer?.length)output(10)},read(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===void 0&&!bytesRead)throw new FS.ErrnoError(6);if(result===null||result===void 0)break;bytesRead++;buffer[offset+i]=result}if(bytesRead)stream.node.atime=Date.now();return bytesRead},write(stream,buffer,offset,length,pos){for(var i=0;i<length;i++)try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}if(length)stream.node.mtime=stream.node.ctime=Date.now();return i}});return FS.mkdev(path,mode,dev)},forceLoadFile(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(globalThis.XMLHttpRequest)abort("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{obj.contents=readBinary(obj.url)}catch(e){throw new FS.ErrnoError(29)}},createLazyFile(parent,name,url,canRead,canWrite){class LazyUint8Array{lengthKnown=false;chunks=[];get(idx){if(idx>this.length-1||idx<0)return;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))abort(`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=1048576;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)abort(`invalid range (${from}, ${to}) or no bytes requested!`);if(to>datalength-1)abort(`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))abort(`Couldn't load ${url}. Status: ${xhr.status}`);if(xhr.response!==void 0)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")abort("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(globalThis.XMLHttpRequest){if(false)abort("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 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={};for(const[key,fn]of Object.entries(node.stream_ops))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);if(contents.slice)for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i];else for(i=0;i<size;i++)buffer[offset+i]=contents.get(position+i);return size}stream_ops.read=(stream,buffer,offset,length,position)=>{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position)=>{FS.forceLoadFile(node);var ptr=mmapAlloc();if(!ptr)throw new FS.ErrnoError(48);writeChunks(stream,HEAP8,ptr,length,position);return{ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var HEAP32;var HEAP64;var HEAPU32;var HEAPU8;var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):"";var SYSCALLS={currentUmask:18,calculateAt(dirfd,path,allowEmpty=false){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){HEAPU32[buf>>2]=stat.dev;HEAPU32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAPU32[buf+12>>2]=stat.uid;HEAPU32[buf+16>>2]=stat.gid;HEAPU32[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){HEAPU32[buf+4>>2]=stats.bsize;HEAPU32[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);HEAPU32[buf+48>>2]=stats.fsid;HEAPU32[buf+64>>2]=stats.flags;HEAPU32[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.subarray(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:void 0,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};var HEAP16;var syscallGetVarargI=()=>{var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var runtimeKeepaliveCounter=0;var bigintToI53Checked=num=>num<-9007199254740992||num>9007199254740992?NaN:Number(num);var MONTH_DAYS_LEAP_CUMULATIVE=[0,31,60,91,121,152,182,213,244,274,305,335];var MONTH_DAYS_REGULAR_CUMULATIVE=[0,31,59,90,120,151,181,212,243,273,304,334];var isLeapYear=year=>year%4===0&&(year%100!==0||year%400===0);var ydayFromDate=date=>{var leap=isLeapYear(date.getFullYear());var monthDaysCumulative=leap?MONTH_DAYS_LEAP_CUMULATIVE:MONTH_DAYS_REGULAR_CUMULATIVE;var yday=monthDaysCumulative[date.getMonth()]+date.getDate()-1;return yday};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind")return EXITSTATUS;quit_(0,e)};var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(0,new ExitStatus(code))};var maybeExit=()=>{if(!keepRuntimeAlive())try{_exit(EXITSTATUS)}catch(e){handleException(e)}};var callUserCallback=(func,...args)=>{if(ABORT)return;try{return func(...args)}catch(e){handleException(e)}finally{maybeExit()}};var timers={};var _emscripten_get_now=()=>performance.now();var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;var _emscripten_date_now=()=>Date.now();var jsStackTrace=()=>(new Error).stack.toString();var getCallstack=flags=>{var callstack=jsStackTrace();var lines=callstack.split("\n");callstack="";var firefoxRe=new RegExp("\\s*(.*?)@(.*?):([0-9]+):([0-9]+)");var chromeRe=new RegExp("\\s*at (.*?) \\((.*):(.*):(.*)\\)");for(var line of lines){var symbolName="";var file="";var lineno=0;var column=0;var parts=chromeRe.exec(line);if(parts?.length==5){symbolName=parts[1];file=parts[2];lineno=parts[3];column=parts[4]}else{parts=firefoxRe.exec(line);if(parts?.length>=4){symbolName=parts[1];file=parts[2];lineno=parts[3];column=parts[4]|0}else{callstack+=line+"\n";continue}}if(symbolName=="_emscripten_log"||symbolName=="_emscripten_get_callstack"){callstack="";continue}if(flags&24){if(flags&64)file=file.substring(file.replace(/\\/g,"/").lastIndexOf("/")+1);callstack+=` at ${symbolName} (${file}:${lineno}:${column})\n`}}callstack=callstack.replace(/\s+$/,"");return callstack};var getHeapMax=()=>536870912;var alignMemory=(size,alignment)=>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){}};var ENV={};var getExecutableName=()=>thisProgram;var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(globalThis.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]===void 0)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 doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];iov+=8;try{var curr=FS.read(stream,HEAP8,ptr,len,offset)}catch(e){if(ret>0&&e instanceof FS.ErrnoError&&(e.errno==6||e.errno==6))break;throw e}if(curr<0)return-1;ret+=curr;if(curr<len)break;if(typeof offset!=="undefined")offset+=curr}return ret};var doWritev=(stream,iov,iovcnt,offset)=>{if(iovcnt==1)return FS.write(stream,HEAP8,HEAPU32[iov>>2],HEAPU32[iov+4>>2],offset);var total=0;for(var i=0,p=iov;i<iovcnt;i++,p+=8)total+=HEAPU32[p+4>>2];var view=new Uint8Array(total);var voff=0;for(i=0;i<iovcnt;i++,iov+=8){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];view.set(HEAPU8.subarray(ptr,ptr+len),voff);voff+=len}return FS.write(stream,view,0,total,offset)};var inetPton4=str=>{var b=str.split(".");for(var i=0;i<4;i++){var tmp=Number(b[i]);if(isNaN(tmp))return null;b[i]=tmp}return(b[0]|b[1]<<8|b[2]<<16|b[3]<<24)>>>0};var inetPton6=str=>{var words;var w,offset,z;var parts=[];if(!/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i.test(str))return null;if(str==="::")return[0,0,0,0,0,0,0,0];if(str.startsWith("::"))str=str.replace("::","Z:");else str=str.replace("::",":Z:");if(str.indexOf(".")>0){str=str.replace(new RegExp("[.]","g"),":");words=str.split(":");words[words.length-4]=Number(words[words.length-4])+Number(words[words.length-3])*256;words[words.length-3]=Number(words[words.length-2])+Number(words[words.length-1])*256;words=words.slice(0,words.length-2)}else words=str.split(":");offset=0;z=0;for(w=0;w<words.length;w++)if(typeof words[w]==="string")if(words[w]==="Z"){for(z=0;z<8-words.length+1;z++)parts[w+z]=0;offset=z-1}else parts[w+offset]=_htons(parseInt(words[w],16));else parts[w+offset]=words[w];return[parts[1]<<16|parts[0],parts[3]<<16|parts[2],parts[5]<<16|parts[4],parts[7]<<16|parts[6]]};var DNS={address_map:{id:1,addrs:{},names:{}},lookup_name(name){var res=inetPton4(name);if(res!==null)return name;res=inetPton6(name);if(res!==null)return name;var addr;if(DNS.address_map.addrs[name])addr=DNS.address_map.addrs[name];else{var id=DNS.address_map.id++;addr="172.29."+(id&255)+"."+(id&65280);DNS.address_map.names[addr]=name;DNS.address_map.addrs[name]=addr}return addr},lookup_addr(addr){if(DNS.address_map.names[addr])return DNS.address_map.names[addr];return null}};var inetNtop4=addr=>(addr&255)+"."+(addr>>8&255)+"."+(addr>>16&255)+"."+(addr>>24&255);var inetNtop6=ints=>{var str="";var word=0;var longest=0;var lastzero=0;var zstart=0;var len=0;var i=0;var parts=[ints[0]&65535,ints[0]>>16,ints[1]&65535,ints[1]>>16,ints[2]&65535,ints[2]>>16,ints[3]&65535,ints[3]>>16];var hasipv4=true;var v4part="";for(i=0;i<5;i++)if(parts[i]){hasipv4=false;break}if(hasipv4){v4part=inetNtop4(parts[6]|parts[7]<<16);if(parts[5]===-1){str="::ffff:";str+=v4part;return str}if(!parts[5]){str="::";if(v4part==="0.0.0.0")v4part="";if(v4part==="0.0.0.1")v4part="1";str+=v4part;return str}}for(word=0;word<8;word++){if(!parts[word]){if(word-lastzero>1)len=0;lastzero=word;len++}if(len>longest){longest=len;zstart=word-longest+1}}for(word=0;word<8;word++){if(longest>1)if(!parts[word]&&word>=zstart&&word<zstart+longest){if(word===zstart){str+=":";if(!zstart)str+=":"}continue}str+=Number(_ntohs(parts[word]&65535)).toString(16);str+=word<7?":":""}return str};var zeroMemory=(ptr,size)=>HEAPU8.fill(0,ptr,ptr+size);var writeSockaddr=(sa,family,addr,port,addrlen)=>{switch(family){case 2:addr=inetPton4(DNS.lookup_name(addr));zeroMemory(sa,16);if(addrlen)HEAP32[addrlen>>2]=16;HEAP16[sa>>1]=family;HEAP32[sa+4>>2]=addr;HEAP16[sa+2>>1]=_htons(port);break;case 10:addr=inetPton6(DNS.lookup_name(addr));zeroMemory(sa,28);if(addrlen)HEAP32[addrlen>>2]=28;HEAP32[sa>>2]=family;HEAP32[sa+8>>2]=addr[0];HEAP32[sa+12>>2]=addr[1];HEAP32[sa+16>>2]=addr[2];HEAP32[sa+20>>2]=addr[3];HEAP16[sa+2>>1]=_htons(port);break;default:return 5}return 0};var syscallGetVarargP=syscallGetVarargI;var _exit=status=>{EXITSTATUS=status;_proc_exit(status)};FS.createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{FS_preloadFile(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish).then(onload).catch(onerror)};FS.preloadFile=FS_preloadFile;FS.staticInit();if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["arguments"])Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];var preInit=Module["preInit"];if(preInit){if(typeof preInit==="function")Module["preInit"]=preInit=[preInit];while(preInit.length>0)preInit.shift()()}var _malloc,_htonl,_htons,_ntohs,__emscripten_timeout,___trap,wasmMemory,wasmTable;function assignWasmExports(wasmExports){Module["_occt_init"]=wasmExports["F"];Module["_occt_mesh"]=wasmExports["G"];Module["_occt_stats"]=wasmExports["H"];Module["_occt_payload"]=wasmExports["I"];Module["_occt_trap"]=wasmExports["J"];Module["_occt_exhaust"]=wasmExports["K"];Module["_free"]=wasmExports["M"];_malloc=Module["_malloc"]=wasmExports["N"];_htonl=wasmExports["O"];_htons=wasmExports["P"];_ntohs=wasmExports["Q"];__emscripten_timeout=wasmExports["R"];___trap=wasmExports["S"];wasmMemory=wasmExports["D"];wasmTable=wasmExports["L"]}var wasmImports={o:(fp,sig)=>getWasmTableEntry(fp)(sig),f:function(path,mode){try{path=SYSCALLS.getStr(path);FS.chmod(path,mode);return 0}catch(e){if(typeof FS==="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}},b:function(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:arg=syscallGetVarargI();stream.flags=stream.flags&-289793|arg&289792;return 0;case 12:arg=syscallGetVarargP();HEAP16[arg+0>>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}},z:function(fd,buf){try{return SYSCALLS.writeStat(buf,FS.fstat(fd))}catch(e){if(typeof FS==="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}},i:function(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){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(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;argp=syscallGetVarargP();HEAP32[argp>>2]=0;return 0;case 21520:if(!stream.tty)return-59;return-28;case 21537:case 21531: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);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}},x:function(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}},w:function(dirfd,path,buf,flags){try{path=SYSCALLS.getStr(path);var nofollow=flags&256;var allowEmpty=flags&4096;flags&=-6401;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}},d:function(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;if(flags&64)mode&=~SYSCALLS.currentUmask;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS==="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}},y:function(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}},m:buf=>{if(!buf)return-21;var copyString=(offset,value)=>stringToUTF8(value,buf+offset,65);copyString(0,"Emscripten");copyString(65,"emscripten");copyString(130,"7.0.0");copyString(195,"#1");copyString(260,"wasm32");return 0},r:()=>abort(""),q:()=>{noExitRuntime=false;runtimeKeepaliveCounter=0},s:function(time,tmPtr){time=bigintToI53Checked(time);var date=new Date(time*1e3);if(isNaN(date.getTime()))return 1;HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-date.getTimezoneOffset()*60;var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst;return 0},j:(which,timeout_ms)=>{if(timers[which]){clearTimeout(timers[which].id);delete timers[which]}if(!timeout_ms)return 0;var id=setTimeout(()=>{delete timers[which];callUserCallback(__emscripten_timeout,which,_emscripten_get_now())},timeout_ms);timers[which]={id,timeout_ms};return 0},g:(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);if(summerOffset<winterOffset){stringToUTF8(winterName,std_name,17);stringToUTF8(summerName,dst_name,17)}else{stringToUTF8(winterName,dst_name,17);stringToUTF8(summerName,std_name,17)}},e:function(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(1)now=_emscripten_get_now();else return 52;var nsec=Math.round(now*1e6);HEAP64[ptime>>3]=BigInt(nsec);return 0},A:_emscripten_date_now,B:(flags,str,maxbytes)=>{var callstack=getCallstack(flags);if(!str||maxbytes<=0)return lengthBytesUTF8(callstack)+1;var bytesWrittenExcludingNull=stringToUTF8(callstack,str,maxbytes);return bytesWrittenExcludingNull+1},n:()=>getHeapMax(),l:requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize)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}return false},u:(__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,1/0)+1;envp+=4}return 0},v:(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},C:_exit,a:function(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}},h:function(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}},t:function(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 22;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);if(stream.getdents&&!offset&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}},c:function(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}},k:(node,service,hint,out)=>{var addr=0;var port=0;var flags=0;var family=0;var type=0;var proto=0;var ai;function allocaddrinfo(family,type,proto,canon,addr,port){var sa,salen,ai;salen=family===10?28:16;addr=family===10?inetNtop6(addr):inetNtop4(addr);sa=_malloc(salen);writeSockaddr(sa,family,addr,port);ai=_malloc(32);HEAP32[ai+4>>2]=family;HEAP32[ai+8>>2]=type;HEAP32[ai+12>>2]=proto;HEAPU32[ai+24>>2]=canon;HEAPU32[ai+20>>2]=sa;if(family===10)HEAP32[ai+16>>2]=28;else HEAP32[ai+16>>2]=16;HEAP32[ai+28>>2]=0;return ai}if(hint){flags=HEAP32[hint>>2];family=HEAP32[hint+4>>2];type=HEAP32[hint+8>>2];proto=HEAP32[hint+12>>2]}if(type&&!proto)proto=type===2?17:6;if(!type&&proto)type=proto===17?2:1;if(!proto)proto=6;if(!type)type=1;if(!node&&!service)return-2;if(flags&-1088)return-1;if(hint&&HEAP32[hint>>2]&2&&!node)return-1;if(flags&32)return-2;if(type&&type!==1&&type!==2)return-7;if(family!==0&&family!==2&&family!==10)return-6;if(service){service=UTF8ToString(service);port=parseInt(service,10);if(isNaN(port)){if(flags&1024)return-2;return-8}}if(!node){if(family===0)family=2;if(!(flags&1))if(family===2)addr=_htonl(2130706433);else addr=[0,0,0,_htonl(1)];ai=allocaddrinfo(family,type,proto,null,addr,port);HEAPU32[out>>2]=ai;return 0}node=UTF8ToString(node);addr=inetPton4(node);if(addr!==null)if(family===0||family===2)family=2;else if(family===10&&flags&8){addr=[0,0,_htonl(65535),addr];family=10}else return-2;else{addr=inetPton6(node);if(addr!==null)if(family===0||family===10)family=10;else return-2}if(addr!=null){ai=allocaddrinfo(family,type,proto,node,addr,port);HEAPU32[out>>2]=ai;return 0}if(flags&4)return-2;node=DNS.lookup_name(node);addr=inetPton4(node);if(family===0)family=2;else if(family===10)addr=[0,0,_htonl(65535),addr];ai=allocaddrinfo(family,type,proto,null,addr,port);HEAPU32[out>>2]=ai;return 0},p:_proc_exit};var wasmExports;wasmExports=await async function(){function receiveInstance(instance){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}var info=getWasmImports();var instantiateWasm=Module["instantiateWasm"];if(instantiateWasm)return new Promise(resolve=>{instantiateWasm(info,inst=>resolve(receiveInstance(inst)))});wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(void 0,wasmBinaryFile,info);var exports=function(result){return receiveInstance(result["instance"])}(result);return exports}();await async function(){preRun();if(runDependencies)await resolveRunDependencies();var setStatus=Module["setStatus"];if(setStatus){setStatus("Running...");await new Promise(resolve=>setTimeout(resolve,1));setTimeout(setStatus,1,"")}if(ABORT)return;initRuntime();Module["onRuntimeInitialized"]?.();postRun()}();
2
+ ;return Module}export default createOcct;