@wasm-fmt/clang-format 19.1.7 → 20.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3846 +1,2 @@
1
1
  #!/usr/bin/env node
2
- var Module = typeof Module != 'undefined' ? Module : {};
3
- var ENVIRONMENT_IS_WORKER = false;
4
- var ENVIRONMENT_IS_NODE = true;
5
- if (ENVIRONMENT_IS_NODE) {
6
- }
7
- var moduleOverrides = Object.assign({}, Module);
8
- var arguments_ = [];
9
- var thisProgram = './this.program';
10
- var quit_ = (status, toThrow) => {
11
- throw toThrow
12
- };
13
- var scriptDirectory = '';
14
- function locateFile(path) {
15
- if (Module['locateFile']) {
16
- return Module['locateFile'](path, scriptDirectory)
17
- }
18
- return scriptDirectory + path
19
- }
20
- var readAsync, readBinary;
21
- if (ENVIRONMENT_IS_NODE) {
22
- var fs = require('fs');
23
- var nodePath = require('path');
24
- scriptDirectory = __dirname + '/';
25
- readBinary = filename => {
26
- filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename);
27
- var ret = fs.readFileSync(filename);
28
- return ret
29
- };
30
- readAsync = (filename, binary = true) => {
31
- filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename);
32
- return new Promise((resolve, reject) => {fs.readFile(filename, binary ? undefined : 'utf8', (err, data) => {
33
- if (err)
34
- reject(err);
35
- else
36
- resolve(binary ? data.buffer : data)
37
- })})
38
- };
39
- if (!Module['thisProgram'] && process.argv.length > 1) {
40
- thisProgram = process.argv[1].replace(/\\/g, '/')
41
- }
42
- arguments_ = process.argv.slice(2);
43
- if (typeof module != 'undefined') {
44
- module['exports'] = Module
45
- }
46
- quit_ = (status, toThrow) => {
47
- process.exitCode = status;
48
- throw toThrow
49
- }
50
- } else {
51
- }
52
- var out = Module['print'] || console.log.bind(console);
53
- var err = Module['printErr'] || console.error.bind(console);
54
- Object.assign(Module, moduleOverrides);
55
- moduleOverrides = null;
56
- if (Module['arguments']) arguments_ = Module['arguments'];
57
- if (Module['thisProgram']) thisProgram = Module['thisProgram'];
58
- var wasmBinary = Module['wasmBinary'];
59
- var wasmMemory;
60
- var ABORT = false;
61
- var EXITSTATUS;
62
- var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
63
- function updateMemoryViews() {
64
- var b = wasmMemory.buffer;
65
- Module['HEAP8'] = HEAP8 = new Int8Array(b);
66
- Module['HEAP16'] = HEAP16 = new Int16Array(b);
67
- Module['HEAPU8'] = HEAPU8 = new Uint8Array(b);
68
- Module['HEAPU16'] = HEAPU16 = new Uint16Array(b);
69
- Module['HEAP32'] = HEAP32 = new Int32Array(b);
70
- Module['HEAPU32'] = HEAPU32 = new Uint32Array(b);
71
- Module['HEAPF32'] = HEAPF32 = new Float32Array(b);
72
- Module['HEAPF64'] = HEAPF64 = new Float64Array(b)
73
- }
74
- var __ATPRERUN__ = [];
75
- var __ATINIT__ = [];
76
- var __ATMAIN__ = [];
77
- var __ATPOSTRUN__ = [];
78
- var runtimeInitialized = false;
79
- function preRun() {
80
- if (Module['preRun']) {
81
- if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];
82
- while (Module['preRun'].length) {
83
- addOnPreRun(Module['preRun'].shift())
84
- }
85
- }
86
- callRuntimeCallbacks(__ATPRERUN__)
87
- }
88
- function initRuntime() {
89
- runtimeInitialized = true;
90
- if (!Module['noFSInit'] && !FS.initialized) FS.init();
91
- FS.ignorePermissions = false;
92
- TTY.init();
93
- callRuntimeCallbacks(__ATINIT__)
94
- }
95
- function preMain() {
96
- callRuntimeCallbacks(__ATMAIN__)
97
- }
98
- function postRun() {
99
- if (Module['postRun']) {
100
- if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];
101
- while (Module['postRun'].length) {
102
- addOnPostRun(Module['postRun'].shift())
103
- }
104
- }
105
- callRuntimeCallbacks(__ATPOSTRUN__)
106
- }
107
- function addOnPreRun(cb) {
108
- __ATPRERUN__.unshift(cb)
109
- }
110
- function addOnInit(cb) {
111
- __ATINIT__.unshift(cb)
112
- }
113
- function addOnPostRun(cb) {
114
- __ATPOSTRUN__.unshift(cb)
115
- }
116
- var runDependencies = 0;
117
- var runDependencyWatcher = null;
118
- var dependenciesFulfilled = null;
119
- function getUniqueRunDependency(id) {
120
- return id
121
- }
122
- function addRunDependency(id) {
123
- runDependencies++;
124
- Module['monitorRunDependencies']?.(runDependencies)
125
- }
126
- function removeRunDependency(id) {
127
- runDependencies--;
128
- Module['monitorRunDependencies']?.(runDependencies);
129
- if (runDependencies == 0) {
130
- if (runDependencyWatcher !== null) {
131
- clearInterval(runDependencyWatcher);
132
- runDependencyWatcher = null
133
- }
134
- if (dependenciesFulfilled) {
135
- var callback = dependenciesFulfilled;
136
- dependenciesFulfilled = null;
137
- callback()
138
- }
139
- }
140
- }
141
- function abort(what) {
142
- Module['onAbort']?.(what);
143
- what = 'Aborted(' + what + ')';
144
- err(what);
145
- ABORT = true;
146
- what += '. Build with -sASSERTIONS for more info.';
147
- var e = new WebAssembly.RuntimeError(what);
148
- throw e
149
- }
150
- var dataURIPrefix = 'data:application/octet-stream;base64,';
151
- var isDataURI = filename => filename.startsWith(dataURIPrefix);
152
- var isFileURI = filename => filename.startsWith('file://');
153
- function findWasmBinary() {
154
- var f = 'clang-format-cli.wasm';
155
- if (!isDataURI(f)) {
156
- return locateFile(f)
157
- }
158
- return f
159
- }
160
- var wasmBinaryFile;
161
- function getBinarySync(file) {
162
- if (file == wasmBinaryFile && wasmBinary) {
163
- return new Uint8Array(wasmBinary)
164
- }
165
- if (readBinary) {
166
- return readBinary(file)
167
- }
168
- throw 'both async and sync fetching of the wasm failed'
169
- }
170
- function getBinaryPromise(binaryFile) {
171
- if (!wasmBinary) {
172
- return readAsync(binaryFile).then(response => new Uint8Array(response), () => getBinarySync(binaryFile))
173
- }
174
- return Promise.resolve().then(() => getBinarySync(binaryFile))
175
- }
176
- function instantiateArrayBuffer(binaryFile, imports, receiver) {
177
- return getBinaryPromise(binaryFile)
178
- .then(binary => WebAssembly.instantiate(binary, imports))
179
- .then(receiver, reason => {
180
- err(`failed to asynchronously prepare wasm: ${reason}`);
181
- abort(reason)
182
- })
183
- }
184
- function instantiateAsync(binary, binaryFile, imports, callback) {
185
- if (!binary && typeof WebAssembly.instantiateStreaming == 'function' && !isDataURI(binaryFile) &&
186
- !ENVIRONMENT_IS_NODE && typeof fetch == 'function') {
187
- return fetch(binaryFile, {credentials: 'same-origin'}).then(response => {
188
- var result = WebAssembly.instantiateStreaming(response, imports);
189
- return result.then(callback, function(reason) {
190
- err(`wasm streaming compile failed: ${reason}`);
191
- err('falling back to ArrayBuffer instantiation');
192
- return instantiateArrayBuffer(binaryFile, imports, callback)
193
- })
194
- })
195
- }
196
- return instantiateArrayBuffer(binaryFile, imports, callback)
197
- }
198
- function getWasmImports() {
199
- return {
200
- a: wasmImports
201
- }
202
- }
203
- function createWasm() {
204
- function receiveInstance(instance, module) {
205
- wasmExports = instance.exports;
206
- wasmMemory = wasmExports['Q'];
207
- updateMemoryViews();
208
- wasmTable = wasmExports['S'];
209
- addOnInit(wasmExports['R']);
210
- removeRunDependency('wasm-instantiate');
211
- return wasmExports
212
- }
213
- addRunDependency('wasm-instantiate');
214
- function receiveInstantiationResult(result) {
215
- receiveInstance(result['instance'])
216
- }
217
- var info = getWasmImports();
218
- if (Module['instantiateWasm']) {
219
- try {
220
- return Module['instantiateWasm'](info, receiveInstance)
221
- } catch (e) {
222
- err(`Module.instantiateWasm callback failed with error: ${e}`);
223
- return false
224
- }
225
- }
226
- wasmBinaryFile ??= findWasmBinary();
227
- instantiateAsync(wasmBinary, wasmBinaryFile, info, receiveInstantiationResult);
228
- return {
229
- }
230
- }
231
- var tempDouble;
232
- var tempI64;
233
- class ExitStatus {
234
- name = 'ExitStatus';
235
- constructor(status) {
236
- this.message = `Program terminated with exit(${status})`;
237
- this.status = status
238
- }
239
- }
240
- var callRuntimeCallbacks = callbacks => {
241
- while (callbacks.length > 0) {
242
- callbacks.shift()(Module)
243
- }
244
- };
245
- var noExitRuntime = Module['noExitRuntime'] || true;
246
- var wasmTable;
247
- var getWasmTableEntry = funcPtr => wasmTable.get(funcPtr);
248
- var ___call_sighandler = (fp, sig) => getWasmTableEntry(fp)(sig);
249
- class ExceptionInfo {
250
- constructor(excPtr) {
251
- this.excPtr = excPtr;
252
- this.ptr = excPtr - 24
253
- }
254
- set_type(type) {
255
- HEAPU32[this.ptr + 4 >> 2] = type
256
- }
257
- get_type() {
258
- return HEAPU32[this.ptr + 4 >> 2]
259
- }
260
- set_destructor(destructor) {
261
- HEAPU32[this.ptr + 8 >> 2] = destructor
262
- }
263
- get_destructor() {
264
- return HEAPU32[this.ptr + 8 >> 2]
265
- }
266
- set_caught(caught) {
267
- caught = caught ? 1 : 0;
268
- HEAP8[this.ptr + 12] = caught
269
- }
270
- get_caught() {
271
- return HEAP8[this.ptr + 12] != 0
272
- }
273
- set_rethrown(rethrown) {
274
- rethrown = rethrown ? 1 : 0;
275
- HEAP8[this.ptr + 13] = rethrown
276
- }
277
- get_rethrown() {
278
- return HEAP8[this.ptr + 13] != 0
279
- }
280
- init(type, destructor) {
281
- this.set_adjusted_ptr(0);
282
- this.set_type(type);
283
- this.set_destructor(destructor)
284
- }
285
- set_adjusted_ptr(adjustedPtr) {
286
- HEAPU32[this.ptr + 16 >> 2] = adjustedPtr
287
- }
288
- get_adjusted_ptr() {
289
- return HEAPU32[this.ptr + 16 >> 2]
290
- }
291
- }
292
- var exceptionLast = 0;
293
- var uncaughtExceptionCount = 0;
294
- var ___cxa_throw = (ptr, type, destructor) => {
295
- var info = new ExceptionInfo(ptr);
296
- info.init(type, destructor);
297
- exceptionLast = ptr;
298
- uncaughtExceptionCount++;
299
- throw exceptionLast
300
- };
301
- var PATH = {
302
- isAbs: path => nodePath['isAbsolute'](path),
303
- normalize: path => nodePath['normalize'](path),
304
- dirname: path => nodePath['dirname'](path),
305
- basename: path => nodePath['basename'](path),
306
- join: (...args) => nodePath['join'](...args),
307
- join2: (l, r) => nodePath['join'](l, r)
308
- };
309
- var initRandomFill = () => {
310
- if (typeof crypto == 'object' && typeof crypto['getRandomValues'] == 'function') {
311
- return view => crypto.getRandomValues(view)
312
- } else if (ENVIRONMENT_IS_NODE) {
313
- try {
314
- var crypto_module = require('crypto');
315
- var randomFillSync = crypto_module['randomFillSync'];
316
- if (randomFillSync) {
317
- return view => crypto_module['randomFillSync'](view)
318
- }
319
- var randomBytes = crypto_module['randomBytes'];
320
- return view => (view.set(randomBytes(view.byteLength)), view)
321
- } catch (e) {
322
- }
323
- }
324
- abort('initRandomDevice')
325
- };
326
- var randomFill = view => (randomFill = initRandomFill())(view);
327
- var PATH_FS = {
328
- resolve: (...paths) => {
329
- paths.unshift(FS.cwd());
330
- return nodePath['posix']['resolve'](...paths)
331
- },
332
- relative: (from, to) => nodePath['posix']['relative'](from || FS.cwd(), to || FS.cwd())
333
- };
334
- var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder : undefined;
335
- var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => {
336
- var endIdx = idx + maxBytesToRead;
337
- var endPtr = idx;
338
- while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;
339
- if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {
340
- return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr))
341
- }
342
- var str = '';
343
- while (idx < endPtr) {
344
- var u0 = heapOrArray[idx++];
345
- if (!(u0 & 128)) {
346
- str += String.fromCharCode(u0);
347
- continue
348
- }
349
- var u1 = heapOrArray[idx++] & 63;
350
- if ((u0 & 224) == 192) {
351
- str += String.fromCharCode((u0 & 31) << 6 | u1);
352
- continue
353
- }
354
- var u2 = heapOrArray[idx++] & 63;
355
- if ((u0 & 240) == 224) {
356
- u0 = (u0 & 15) << 12 | u1 << 6 | u2
357
- } else {
358
- u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heapOrArray[idx++] & 63
359
- }
360
- if (u0 < 65536) {
361
- str += String.fromCharCode(u0)
362
- } else {
363
- var ch = u0 - 65536;
364
- str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023)
365
- }
366
- }
367
- return str
368
- };
369
- var FS_stdin_getChar_buffer = [];
370
- var lengthBytesUTF8 = str => {
371
- var len = 0;
372
- for (var i = 0; i < str.length; ++i) {
373
- var c = str.charCodeAt(i);
374
- if (c <= 127) {
375
- len++
376
- } else if (c <= 2047) {
377
- len += 2
378
- } else if (c >= 55296 && c <= 57343) {
379
- len += 4;
380
- ++i
381
- } else {
382
- len += 3
383
- }
384
- }
385
- return len
386
- };
387
- var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
388
- if (!(maxBytesToWrite > 0)) return 0;
389
- var startIdx = outIdx;
390
- var endIdx = outIdx + maxBytesToWrite - 1;
391
- for (var i = 0; i < str.length; ++i) {
392
- var u = str.charCodeAt(i);
393
- if (u >= 55296 && u <= 57343) {
394
- var u1 = str.charCodeAt(++i);
395
- u = 65536 + ((u & 1023) << 10) | u1 & 1023
396
- }
397
- if (u <= 127) {
398
- if (outIdx >= endIdx) break;
399
- heap[outIdx++] = u
400
- } else if (u <= 2047) {
401
- if (outIdx + 1 >= endIdx) break;
402
- heap[outIdx++] = 192 | u >> 6;
403
- heap[outIdx++] = 128 | u & 63
404
- } else if (u <= 65535) {
405
- if (outIdx + 2 >= endIdx) break;
406
- heap[outIdx++] = 224 | u >> 12;
407
- heap[outIdx++] = 128 | u >> 6 & 63;
408
- heap[outIdx++] = 128 | u & 63
409
- } else {
410
- if (outIdx + 3 >= endIdx) break;
411
- heap[outIdx++] = 240 | u >> 18;
412
- heap[outIdx++] = 128 | u >> 12 & 63;
413
- heap[outIdx++] = 128 | u >> 6 & 63;
414
- heap[outIdx++] = 128 | u & 63
415
- }
416
- }
417
- heap[outIdx] = 0;
418
- return outIdx - startIdx
419
- };
420
- function intArrayFromString(stringy, dontAddNull, length) {
421
- var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1;
422
- var u8array = new Array(len);
423
- var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);
424
- if (dontAddNull) u8array.length = numBytesWritten;
425
- return u8array
426
- }
427
- var FS_stdin_getChar = () => {
428
- if (!FS_stdin_getChar_buffer.length) {
429
- var result = null;
430
- if (ENVIRONMENT_IS_NODE) {
431
- var BUFSIZE = 256;
432
- var buf = Buffer.alloc(BUFSIZE);
433
- var bytesRead = 0;
434
- var fd = process.stdin.fd;
435
- try {
436
- bytesRead = fs.readSync(fd, buf, 0, BUFSIZE)
437
- } catch (e) {
438
- if (e.toString().includes('EOF'))
439
- bytesRead = 0;
440
- else
441
- throw e
442
- }
443
- if (bytesRead > 0) {
444
- result = buf.slice(0, bytesRead).toString('utf-8')
445
- }
446
- } else {
447
- }
448
- if (!result) {
449
- return null
450
- }
451
- FS_stdin_getChar_buffer = intArrayFromString(result, true)
452
- }
453
- return FS_stdin_getChar_buffer.shift()
454
- };
455
- var TTY = {
456
- ttys: [],
457
- init() {},
458
- shutdown() {},
459
- register(dev, ops) {
460
- TTY.ttys[dev] = {input: [], output: [], ops};
461
- FS.registerDevice(dev, TTY.stream_ops)
462
- },
463
- stream_ops: {
464
- open(stream) {
465
- var tty = TTY.ttys[stream.node.rdev];
466
- if (!tty) {
467
- throw new FS.ErrnoError(43)
468
- }
469
- stream.tty = tty;
470
- stream.seekable = false
471
- },
472
- close(stream) {
473
- stream.tty.ops.fsync(stream.tty)
474
- },
475
- fsync(stream) {
476
- stream.tty.ops.fsync(stream.tty)
477
- },
478
- read(stream, buffer, offset, length, pos) {
479
- if (!stream.tty || !stream.tty.ops.get_char) {
480
- throw new FS.ErrnoError(60)
481
- }
482
- var bytesRead = 0;
483
- for (var i = 0; i < length; i++) {
484
- var result;
485
- try {
486
- result = stream.tty.ops.get_char(stream.tty)
487
- } catch (e) {
488
- throw new FS.ErrnoError(29)
489
- }
490
- if (result === undefined && bytesRead === 0) {
491
- throw new FS.ErrnoError(6)
492
- }
493
- if (result === null || result === undefined) break;
494
- bytesRead++;
495
- buffer[offset + i] = result
496
- }
497
- if (bytesRead) {
498
- stream.node.timestamp = Date.now()
499
- }
500
- return bytesRead
501
- },
502
- write(stream, buffer, offset, length, pos) {
503
- if (!stream.tty || !stream.tty.ops.put_char) {
504
- throw new FS.ErrnoError(60)
505
- }
506
- try {
507
- for (var i = 0; i < length; i++) {
508
- stream.tty.ops.put_char(stream.tty, buffer[offset + i])
509
- }
510
- } catch (e) {
511
- throw new FS.ErrnoError(29)
512
- }
513
- if (length) {
514
- stream.node.timestamp = Date.now()
515
- }
516
- return i
517
- }
518
- },
519
- default_tty_ops: {
520
- get_char(tty) {
521
- return FS_stdin_getChar()
522
- },
523
- put_char(tty, val) {
524
- if (val === null || val === 10) {
525
- out(UTF8ArrayToString(tty.output));
526
- tty.output = []
527
- } else {
528
- if (val != 0) tty.output.push(val)
529
- }
530
- },
531
- fsync(tty) {
532
- if (tty.output && tty.output.length > 0) {
533
- out(UTF8ArrayToString(tty.output));
534
- tty.output = []
535
- }
536
- },
537
- ioctl_tcgets(tty) {
538
- return {
539
- c_iflag: 25856, c_oflag: 5, c_cflag: 191, c_lflag: 35387, c_cc: [
540
- 3, 28, 127, 21, 4, 0, 1, 0, 17, 19, 26, 0, 18, 15, 23, 22,
541
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
542
- ]
543
- }
544
- },
545
- ioctl_tcsets(tty, optional_actions, data) {
546
- return 0
547
- },
548
- ioctl_tiocgwinsz(tty) {
549
- return [24, 80]
550
- }
551
- },
552
- default_tty1_ops: {
553
- put_char(tty, val) {
554
- if (val === null || val === 10) {
555
- err(UTF8ArrayToString(tty.output));
556
- tty.output = []
557
- } else {
558
- if (val != 0) tty.output.push(val)
559
- }
560
- },
561
- fsync(tty) {
562
- if (tty.output && tty.output.length > 0) {
563
- err(UTF8ArrayToString(tty.output));
564
- tty.output = []
565
- }
566
- }
567
- }
568
- };
569
- var zeroMemory = (address, size) => {
570
- HEAPU8.fill(0, address, address + size)
571
- };
572
- var alignMemory = (size, alignment) => Math.ceil(size / alignment) * alignment;
573
- var mmapAlloc = size => {
574
- size = alignMemory(size, 65536);
575
- var ptr = _emscripten_builtin_memalign(65536, size);
576
- if (ptr) zeroMemory(ptr, size);
577
- return ptr
578
- };
579
- var MEMFS = {
580
- ops_table: null,
581
- mount(mount) {
582
- return MEMFS.createNode(null, '/', 16384 | 511, 0)
583
- },
584
- createNode(parent, name, mode, dev) {
585
- if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {
586
- throw new FS.ErrnoError(63)
587
- }
588
- MEMFS.ops_table ||= {
589
- dir: {
590
- node: {
591
- getattr: MEMFS.node_ops.getattr,
592
- setattr: MEMFS.node_ops.setattr,
593
- lookup: MEMFS.node_ops.lookup,
594
- mknod: MEMFS.node_ops.mknod,
595
- rename: MEMFS.node_ops.rename,
596
- unlink: MEMFS.node_ops.unlink,
597
- rmdir: MEMFS.node_ops.rmdir,
598
- readdir: MEMFS.node_ops.readdir,
599
- symlink: MEMFS.node_ops.symlink
600
- },
601
- stream: {llseek: MEMFS.stream_ops.llseek}
602
- },
603
- file: {
604
- node: {getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr},
605
- stream: {
606
- llseek: MEMFS.stream_ops.llseek,
607
- read: MEMFS.stream_ops.read,
608
- write: MEMFS.stream_ops.write,
609
- allocate: MEMFS.stream_ops.allocate,
610
- mmap: MEMFS.stream_ops.mmap,
611
- msync: MEMFS.stream_ops.msync
612
- }
613
- },
614
- link: {
615
- node: {
616
- getattr: MEMFS.node_ops.getattr,
617
- setattr: MEMFS.node_ops.setattr,
618
- readlink: MEMFS.node_ops.readlink
619
- },
620
- stream: {}
621
- },
622
- chrdev:
623
- {node: {getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr}, stream: FS.chrdev_stream_ops}
624
- };
625
- var node = FS.createNode(parent, name, mode, dev);
626
- if (FS.isDir(node.mode)) {
627
- node.node_ops = MEMFS.ops_table.dir.node;
628
- node.stream_ops = MEMFS.ops_table.dir.stream;
629
- node.contents = {}
630
- } else if (FS.isFile(node.mode)) {
631
- node.node_ops = MEMFS.ops_table.file.node;
632
- node.stream_ops = MEMFS.ops_table.file.stream;
633
- node.usedBytes = 0;
634
- node.contents = null
635
- } else if (FS.isLink(node.mode)) {
636
- node.node_ops = MEMFS.ops_table.link.node;
637
- node.stream_ops = MEMFS.ops_table.link.stream
638
- } else if (FS.isChrdev(node.mode)) {
639
- node.node_ops = MEMFS.ops_table.chrdev.node;
640
- node.stream_ops = MEMFS.ops_table.chrdev.stream
641
- }
642
- node.timestamp = Date.now();
643
- if (parent) {
644
- parent.contents[name] = node;
645
- parent.timestamp = node.timestamp
646
- }
647
- return node
648
- },
649
- getFileDataAsTypedArray(node) {
650
- if (!node.contents) return new Uint8Array(0);
651
- if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes);
652
- return new Uint8Array(node.contents)
653
- },
654
- expandFileStorage(node, newCapacity) {
655
- var prevCapacity = node.contents ? node.contents.length : 0;
656
- if (prevCapacity >= newCapacity) return;
657
- var CAPACITY_DOUBLING_MAX = 1024 * 1024;
658
- newCapacity = Math.max(newCapacity, prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125) >>> 0);
659
- if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256);
660
- var oldContents = node.contents;
661
- node.contents = new Uint8Array(newCapacity);
662
- if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0)
663
- },
664
- resizeFileStorage(node, newSize) {
665
- if (node.usedBytes == newSize) return;
666
- if (newSize == 0) {
667
- node.contents = null;
668
- node.usedBytes = 0
669
- } else {
670
- var oldContents = node.contents;
671
- node.contents = new Uint8Array(newSize);
672
- if (oldContents) {
673
- node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes)))
674
- }
675
- node.usedBytes = newSize
676
- }
677
- },
678
- node_ops: {
679
- getattr(node) {
680
- var attr = {};
681
- attr.dev = FS.isChrdev(node.mode) ? node.id : 1;
682
- attr.ino = node.id;
683
- attr.mode = node.mode;
684
- attr.nlink = 1;
685
- attr.uid = 0;
686
- attr.gid = 0;
687
- attr.rdev = node.rdev;
688
- if (FS.isDir(node.mode)) {
689
- attr.size = 4096
690
- } else if (FS.isFile(node.mode)) {
691
- attr.size = node.usedBytes
692
- } else if (FS.isLink(node.mode)) {
693
- attr.size = node.link.length
694
- } else {
695
- attr.size = 0
696
- }
697
- attr.atime = new Date(node.timestamp);
698
- attr.mtime = new Date(node.timestamp);
699
- attr.ctime = new Date(node.timestamp);
700
- attr.blksize = 4096;
701
- attr.blocks = Math.ceil(attr.size / attr.blksize);
702
- return attr
703
- },
704
- setattr(node, attr) {
705
- if (attr.mode !== undefined) {
706
- node.mode = attr.mode
707
- }
708
- if (attr.timestamp !== undefined) {
709
- node.timestamp = attr.timestamp
710
- }
711
- if (attr.size !== undefined) {
712
- MEMFS.resizeFileStorage(node, attr.size)
713
- }
714
- },
715
- lookup(parent, name) {
716
- throw MEMFS.doesNotExistError
717
- },
718
- mknod(parent, name, mode, dev) {
719
- return MEMFS.createNode(parent, name, mode, dev)
720
- },
721
- rename(old_node, new_dir, new_name) {
722
- if (FS.isDir(old_node.mode)) {
723
- var new_node;
724
- try {
725
- new_node = FS.lookupNode(new_dir, new_name)
726
- } catch (e) {
727
- }
728
- if (new_node) {
729
- for (var i in new_node.contents) {
730
- throw new FS.ErrnoError(55)
731
- }
732
- }
733
- }
734
- delete old_node.parent.contents[old_node.name];
735
- old_node.parent.timestamp = Date.now();
736
- old_node.name = new_name;
737
- new_dir.contents[new_name] = old_node;
738
- new_dir.timestamp = old_node.parent.timestamp
739
- },
740
- unlink(parent, name) {
741
- delete parent.contents[name];
742
- parent.timestamp = Date.now()
743
- },
744
- rmdir(parent, name) {
745
- var node = FS.lookupNode(parent, name);
746
- for (var i in node.contents) {
747
- throw new FS.ErrnoError(55)
748
- }
749
- delete parent.contents[name];
750
- parent.timestamp = Date.now()
751
- },
752
- readdir(node) {
753
- var entries = ['.', '..'];
754
- for (var key of Object.keys(node.contents)) {
755
- entries.push(key)
756
- }
757
- return entries
758
- },
759
- symlink(parent, newname, oldpath) {
760
- var node = MEMFS.createNode(parent, newname, 511 | 40960, 0);
761
- node.link = oldpath;
762
- return node
763
- },
764
- readlink(node) {
765
- if (!FS.isLink(node.mode)) {
766
- throw new FS.ErrnoError(28)
767
- }
768
- return node.link
769
- }
770
- },
771
- stream_ops: {
772
- read(stream, buffer, offset, length, position) {
773
- var contents = stream.node.contents;
774
- if (position >= stream.node.usedBytes) return 0;
775
- var size = Math.min(stream.node.usedBytes - position, length);
776
- if (size > 8 && contents.subarray) {
777
- buffer.set(contents.subarray(position, position + size), offset)
778
- } else {
779
- for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]
780
- }
781
- return size
782
- },
783
- write(stream, buffer, offset, length, position, canOwn) {
784
- if (buffer.buffer === HEAP8.buffer) {
785
- canOwn = false
786
- }
787
- if (!length) return 0;
788
- var node = stream.node;
789
- node.timestamp = Date.now();
790
- if (buffer.subarray && (!node.contents || node.contents.subarray)) {
791
- if (canOwn) {
792
- node.contents = buffer.subarray(offset, offset + length);
793
- node.usedBytes = length;
794
- return length
795
- } else if (node.usedBytes === 0 && position === 0) {
796
- node.contents = buffer.slice(offset, offset + length);
797
- node.usedBytes = length;
798
- return length
799
- } else if (position + length <= node.usedBytes) {
800
- node.contents.set(buffer.subarray(offset, offset + length), position);
801
- return length
802
- }
803
- }
804
- MEMFS.expandFileStorage(node, position + length);
805
- if (node.contents.subarray && buffer.subarray) {
806
- node.contents.set(buffer.subarray(offset, offset + length), position)
807
- } else {
808
- for (var i = 0; i < length; i++) {
809
- node.contents[position + i] = buffer[offset + i]
810
- }
811
- }
812
- node.usedBytes = Math.max(node.usedBytes, position + length);
813
- return length
814
- },
815
- llseek(stream, offset, whence) {
816
- var position = offset;
817
- if (whence === 1) {
818
- position += stream.position
819
- } else if (whence === 2) {
820
- if (FS.isFile(stream.node.mode)) {
821
- position += stream.node.usedBytes
822
- }
823
- }
824
- if (position < 0) {
825
- throw new FS.ErrnoError(28)
826
- }
827
- return position
828
- },
829
- allocate(stream, offset, length) {
830
- MEMFS.expandFileStorage(stream.node, offset + length);
831
- stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length)
832
- },
833
- mmap(stream, length, position, prot, flags) {
834
- if (!FS.isFile(stream.node.mode)) {
835
- throw new FS.ErrnoError(43)
836
- }
837
- var ptr;
838
- var allocated;
839
- var contents = stream.node.contents;
840
- if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) {
841
- allocated = false;
842
- ptr = contents.byteOffset
843
- } else {
844
- allocated = true;
845
- ptr = mmapAlloc(length);
846
- if (!ptr) {
847
- throw new FS.ErrnoError(48)
848
- }
849
- if (contents) {
850
- if (position > 0 || position + length < contents.length) {
851
- if (contents.subarray) {
852
- contents = contents.subarray(position, position + length)
853
- } else {
854
- contents = Array.prototype.slice.call(contents, position, position + length)
855
- }
856
- }
857
- HEAP8.set(contents, ptr)
858
- }
859
- }
860
- return {
861
- ptr, allocated
862
- }
863
- },
864
- msync(stream, buffer, offset, length, mmapFlags) {
865
- MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false);
866
- return 0
867
- }
868
- }
869
- };
870
- var asyncLoad = (url, onload, onerror, noRunDep) => {
871
- var dep = !noRunDep ? getUniqueRunDependency(`al ${url}`) : '';
872
- readAsync(url).then(
873
- arrayBuffer => {
874
- onload(new Uint8Array(arrayBuffer));
875
- if (dep) removeRunDependency(dep)
876
- },
877
- err => {
878
- if (onerror) {
879
- onerror()
880
- } else {
881
- throw `Loading data file "${url}" failed.`
882
- }
883
- });
884
- if (dep) addRunDependency(dep)
885
- };
886
- var FS_createDataFile = (parent, name, fileData, canRead, canWrite, canOwn) => {
887
- FS.createDataFile(parent, name, fileData, canRead, canWrite, canOwn)
888
- };
889
- var preloadPlugins = Module['preloadPlugins'] || [];
890
- var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => {
891
- if (typeof Browser != 'undefined') Browser.init();
892
- var handled = false;
893
- preloadPlugins.forEach(plugin => {
894
- if (handled) return;
895
- if (plugin['canHandle'](fullname)) {
896
- plugin['handle'](byteArray, fullname, finish, onerror);
897
- handled = true
898
- }
899
- });
900
- return handled
901
- };
902
- var FS_createPreloadedFile =
903
- (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => {
904
- var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;
905
- var dep = getUniqueRunDependency(`cp ${fullname}`);
906
- function processData(byteArray) {
907
- function finish(byteArray) {
908
- preFinish?.();
909
- if (!dontCreateFile) {
910
- FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn)
911
- }
912
- onload?.();
913
- removeRunDependency(dep)
914
- }
915
- if (FS_handledByPreloadPlugin(byteArray, fullname, finish, () => {
916
- onerror?.();
917
- removeRunDependency(dep)
918
- })) {
919
- return
920
- }
921
- finish(byteArray)
922
- }
923
- addRunDependency(dep);
924
- if (typeof url == 'string') {
925
- asyncLoad(url, processData, onerror)
926
- } else {
927
- processData(url)
928
- }
929
- };
930
- var FS_modeStringToFlags = str => {
931
- var flagModes = {r: 0, 'r+': 2, w: 512 | 64 | 1, 'w+': 512 | 64 | 2, a: 1024 | 64 | 1, 'a+': 1024 | 64 | 2};
932
- var flags = flagModes[str];
933
- if (typeof flags == 'undefined') {
934
- throw new Error(`Unknown file open mode: ${str}`)
935
- }
936
- return flags
937
- };
938
- var FS_getMode = (canRead, canWrite) => {
939
- var mode = 0;
940
- if (canRead) mode |= 292 | 73;
941
- if (canWrite) mode |= 146;
942
- return mode
943
- };
944
- var ERRNO_CODES = {
945
- EPERM: 63,
946
- ENOENT: 44,
947
- ESRCH: 71,
948
- EINTR: 27,
949
- EIO: 29,
950
- ENXIO: 60,
951
- E2BIG: 1,
952
- ENOEXEC: 45,
953
- EBADF: 8,
954
- ECHILD: 12,
955
- EAGAIN: 6,
956
- EWOULDBLOCK: 6,
957
- ENOMEM: 48,
958
- EACCES: 2,
959
- EFAULT: 21,
960
- ENOTBLK: 105,
961
- EBUSY: 10,
962
- EEXIST: 20,
963
- EXDEV: 75,
964
- ENODEV: 43,
965
- ENOTDIR: 54,
966
- EISDIR: 31,
967
- EINVAL: 28,
968
- ENFILE: 41,
969
- EMFILE: 33,
970
- ENOTTY: 59,
971
- ETXTBSY: 74,
972
- EFBIG: 22,
973
- ENOSPC: 51,
974
- ESPIPE: 70,
975
- EROFS: 69,
976
- EMLINK: 34,
977
- EPIPE: 64,
978
- EDOM: 18,
979
- ERANGE: 68,
980
- ENOMSG: 49,
981
- EIDRM: 24,
982
- ECHRNG: 106,
983
- EL2NSYNC: 156,
984
- EL3HLT: 107,
985
- EL3RST: 108,
986
- ELNRNG: 109,
987
- EUNATCH: 110,
988
- ENOCSI: 111,
989
- EL2HLT: 112,
990
- EDEADLK: 16,
991
- ENOLCK: 46,
992
- EBADE: 113,
993
- EBADR: 114,
994
- EXFULL: 115,
995
- ENOANO: 104,
996
- EBADRQC: 103,
997
- EBADSLT: 102,
998
- EDEADLOCK: 16,
999
- EBFONT: 101,
1000
- ENOSTR: 100,
1001
- ENODATA: 116,
1002
- ETIME: 117,
1003
- ENOSR: 118,
1004
- ENONET: 119,
1005
- ENOPKG: 120,
1006
- EREMOTE: 121,
1007
- ENOLINK: 47,
1008
- EADV: 122,
1009
- ESRMNT: 123,
1010
- ECOMM: 124,
1011
- EPROTO: 65,
1012
- EMULTIHOP: 36,
1013
- EDOTDOT: 125,
1014
- EBADMSG: 9,
1015
- ENOTUNIQ: 126,
1016
- EBADFD: 127,
1017
- EREMCHG: 128,
1018
- ELIBACC: 129,
1019
- ELIBBAD: 130,
1020
- ELIBSCN: 131,
1021
- ELIBMAX: 132,
1022
- ELIBEXEC: 133,
1023
- ENOSYS: 52,
1024
- ENOTEMPTY: 55,
1025
- ENAMETOOLONG: 37,
1026
- ELOOP: 32,
1027
- EOPNOTSUPP: 138,
1028
- EPFNOSUPPORT: 139,
1029
- ECONNRESET: 15,
1030
- ENOBUFS: 42,
1031
- EAFNOSUPPORT: 5,
1032
- EPROTOTYPE: 67,
1033
- ENOTSOCK: 57,
1034
- ENOPROTOOPT: 50,
1035
- ESHUTDOWN: 140,
1036
- ECONNREFUSED: 14,
1037
- EADDRINUSE: 3,
1038
- ECONNABORTED: 13,
1039
- ENETUNREACH: 40,
1040
- ENETDOWN: 38,
1041
- ETIMEDOUT: 73,
1042
- EHOSTDOWN: 142,
1043
- EHOSTUNREACH: 23,
1044
- EINPROGRESS: 26,
1045
- EALREADY: 7,
1046
- EDESTADDRREQ: 17,
1047
- EMSGSIZE: 35,
1048
- EPROTONOSUPPORT: 66,
1049
- ESOCKTNOSUPPORT: 137,
1050
- EADDRNOTAVAIL: 4,
1051
- ENETRESET: 39,
1052
- EISCONN: 30,
1053
- ENOTCONN: 53,
1054
- ETOOMANYREFS: 141,
1055
- EUSERS: 136,
1056
- EDQUOT: 19,
1057
- ESTALE: 72,
1058
- ENOTSUP: 138,
1059
- ENOMEDIUM: 148,
1060
- EILSEQ: 25,
1061
- EOVERFLOW: 61,
1062
- ECANCELED: 11,
1063
- ENOTRECOVERABLE: 56,
1064
- EOWNERDEAD: 62,
1065
- ESTRPIPE: 135
1066
- };
1067
- var NODEFS = {
1068
- isWindows: false,
1069
- staticInit() {
1070
- NODEFS.isWindows = !!process.platform.match(/^win/);
1071
- var flags = process.binding('constants');
1072
- if (flags['fs']) {
1073
- flags = flags['fs']
1074
- }
1075
- NODEFS.flagsForNodeMap = {
1076
- 1024: flags['O_APPEND'],
1077
- 64: flags['O_CREAT'],
1078
- 128: flags['O_EXCL'],
1079
- 256: flags['O_NOCTTY'],
1080
- 0: flags['O_RDONLY'],
1081
- 2: flags['O_RDWR'],
1082
- 4096: flags['O_SYNC'],
1083
- 512: flags['O_TRUNC'],
1084
- 1: flags['O_WRONLY'],
1085
- 131072: flags['O_NOFOLLOW']
1086
- }
1087
- },
1088
- convertNodeCode(e) {
1089
- var code = e.code;
1090
- return ERRNO_CODES[code]
1091
- },
1092
- tryFSOperation(f) {
1093
- try {
1094
- return f()
1095
- } catch (e) {
1096
- if (!e.code) throw e;
1097
- if (e.code === 'UNKNOWN') throw new FS.ErrnoError(28);
1098
- throw new FS.ErrnoError(NODEFS.convertNodeCode(e))
1099
- }
1100
- },
1101
- mount(mount) {
1102
- return NODEFS.createNode(null, '/', NODEFS.getMode(mount.opts.root), 0)
1103
- },
1104
- createNode(parent, name, mode, dev) {
1105
- if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) {
1106
- throw new FS.ErrnoError(28)
1107
- }
1108
- var node = FS.createNode(parent, name, mode);
1109
- node.node_ops = NODEFS.node_ops;
1110
- node.stream_ops = NODEFS.stream_ops;
1111
- return node
1112
- },
1113
- getMode(path) {
1114
- var stat;
1115
- return NODEFS.tryFSOperation(() => {
1116
- stat = fs.lstatSync(path);
1117
- if (NODEFS.isWindows) {
1118
- stat.mode |= (stat.mode & 292) >> 2
1119
- }
1120
- return stat.mode
1121
- })
1122
- },
1123
- realPath(node) {
1124
- var parts = [];
1125
- while (node.parent !== node) {
1126
- parts.push(node.name);
1127
- node = node.parent
1128
- }
1129
- parts.push(node.mount.opts.root);
1130
- parts.reverse();
1131
- return PATH.join(...parts)
1132
- },
1133
- flagsForNode(flags) {
1134
- flags &= ~2097152;
1135
- flags &= ~2048;
1136
- flags &= ~32768;
1137
- flags &= ~524288;
1138
- flags &= ~65536;
1139
- var newFlags = 0;
1140
- for (var k in NODEFS.flagsForNodeMap) {
1141
- if (flags & k) {
1142
- newFlags |= NODEFS.flagsForNodeMap[k];
1143
- flags ^= k
1144
- }
1145
- }
1146
- if (flags) {
1147
- throw new FS.ErrnoError(28)
1148
- }
1149
- return newFlags
1150
- },
1151
- node_ops: {
1152
- getattr(node) {
1153
- var path = NODEFS.realPath(node);
1154
- var stat;
1155
- NODEFS.tryFSOperation(() => stat = fs.lstatSync(path));
1156
- if (NODEFS.isWindows) {
1157
- if (!stat.blksize) {
1158
- stat.blksize = 4096
1159
- }
1160
- if (!stat.blocks) {
1161
- stat.blocks = (stat.size + stat.blksize - 1) / stat.blksize | 0
1162
- }
1163
- stat.mode |= (stat.mode & 292) >> 2
1164
- }
1165
- return {
1166
- dev: stat.dev, ino: stat.ino, mode: stat.mode, nlink: stat.nlink, uid: stat.uid, gid: stat.gid,
1167
- rdev: stat.rdev, size: stat.size, atime: stat.atime, mtime: stat.mtime, ctime: stat.ctime,
1168
- blksize: stat.blksize, blocks: stat.blocks
1169
- }
1170
- },
1171
- setattr(node, attr) {
1172
- var path = NODEFS.realPath(node);
1173
- NODEFS.tryFSOperation(() => {
1174
- if (attr.mode !== undefined) {
1175
- fs.chmodSync(path, attr.mode);
1176
- node.mode = attr.mode
1177
- }
1178
- if (attr.timestamp !== undefined) {
1179
- var date = new Date(attr.timestamp);
1180
- fs.utimesSync(path, date, date)
1181
- }
1182
- if (attr.size !== undefined) {
1183
- fs.truncateSync(path, attr.size)
1184
- }
1185
- })
1186
- },
1187
- lookup(parent, name) {
1188
- var path = PATH.join2(NODEFS.realPath(parent), name);
1189
- var mode = NODEFS.getMode(path);
1190
- return NODEFS.createNode(parent, name, mode)
1191
- },
1192
- mknod(parent, name, mode, dev) {
1193
- var node = NODEFS.createNode(parent, name, mode, dev);
1194
- var path = NODEFS.realPath(node);
1195
- NODEFS.tryFSOperation(() => {
1196
- if (FS.isDir(node.mode)) {
1197
- fs.mkdirSync(path, node.mode)
1198
- } else {
1199
- fs.writeFileSync(path, '', {mode: node.mode})
1200
- }
1201
- });
1202
- return node
1203
- },
1204
- rename(oldNode, newDir, newName) {
1205
- var oldPath = NODEFS.realPath(oldNode);
1206
- var newPath = PATH.join2(NODEFS.realPath(newDir), newName);
1207
- NODEFS.tryFSOperation(() => fs.renameSync(oldPath, newPath));
1208
- oldNode.name = newName
1209
- },
1210
- unlink(parent, name) {
1211
- var path = PATH.join2(NODEFS.realPath(parent), name);
1212
- NODEFS.tryFSOperation(() => fs.unlinkSync(path))
1213
- },
1214
- rmdir(parent, name) {
1215
- var path = PATH.join2(NODEFS.realPath(parent), name);
1216
- NODEFS.tryFSOperation(() => fs.rmdirSync(path))
1217
- },
1218
- readdir(node) {
1219
- var path = NODEFS.realPath(node);
1220
- return NODEFS.tryFSOperation(() => fs.readdirSync(path))
1221
- },
1222
- symlink(parent, newName, oldPath) {
1223
- var newPath = PATH.join2(NODEFS.realPath(parent), newName);
1224
- NODEFS.tryFSOperation(() => fs.symlinkSync(oldPath, newPath))
1225
- },
1226
- readlink(node) {
1227
- var path = NODEFS.realPath(node);
1228
- return NODEFS.tryFSOperation(() => fs.readlinkSync(path))
1229
- }
1230
- },
1231
- stream_ops: {
1232
- open(stream) {
1233
- var path = NODEFS.realPath(stream.node);
1234
- NODEFS.tryFSOperation(() => {
1235
- if (FS.isFile(stream.node.mode)) {
1236
- stream.shared.refcount = 1;
1237
- stream.nfd = fs.openSync(path, NODEFS.flagsForNode(stream.flags))
1238
- }
1239
- })
1240
- },
1241
- close(stream) {
1242
- NODEFS.tryFSOperation(() => {
1243
- if (FS.isFile(stream.node.mode) && stream.nfd && --stream.shared.refcount === 0) {
1244
- fs.closeSync(stream.nfd)
1245
- }
1246
- })
1247
- },
1248
- dup(stream) {
1249
- stream.shared.refcount++
1250
- },
1251
- read(stream, buffer, offset, length, position) {
1252
- if (length === 0) return 0;
1253
- return NODEFS.tryFSOperation(
1254
- () => fs.readSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), 0, length, position))
1255
- },
1256
- write(stream, buffer, offset, length, position) {
1257
- return NODEFS.tryFSOperation(
1258
- () => fs.writeSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), 0, length, position))
1259
- },
1260
- llseek(stream, offset, whence) {
1261
- var position = offset;
1262
- if (whence === 1) {
1263
- position += stream.position
1264
- } else if (whence === 2) {
1265
- if (FS.isFile(stream.node.mode)) {
1266
- NODEFS.tryFSOperation(() => {
1267
- var stat = fs.fstatSync(stream.nfd);
1268
- position += stat.size
1269
- })
1270
- }
1271
- }
1272
- if (position < 0) {
1273
- throw new FS.ErrnoError(28)
1274
- }
1275
- return position
1276
- },
1277
- mmap(stream, length, position, prot, flags) {
1278
- if (!FS.isFile(stream.node.mode)) {
1279
- throw new FS.ErrnoError(43)
1280
- }
1281
- var ptr = mmapAlloc(length);
1282
- NODEFS.stream_ops.read(stream, HEAP8, ptr, length, position);
1283
- return {
1284
- ptr, allocated: true
1285
- }
1286
- },
1287
- msync(stream, buffer, offset, length, mmapFlags) {
1288
- NODEFS.stream_ops.write(stream, buffer, 0, length, offset, false);
1289
- return 0
1290
- }
1291
- }
1292
- };
1293
- var NODERAWFS = {
1294
- lookup(parent, name) {
1295
- return FS.lookupPath(`${parent.path}/${name}`).node
1296
- },
1297
- lookupPath(path, opts = {}) {
1298
- if (opts.parent) {
1299
- path = nodePath.dirname(path)
1300
- }
1301
- var st = fs.lstatSync(path);
1302
- var mode = NODEFS.getMode(path);
1303
- return {
1304
- path, node: {id: st.ino, mode, node_ops: NODERAWFS, path}
1305
- }
1306
- },
1307
- createStandardStreams() {
1308
- FS.createStream({nfd: 0, position: 0, path: '', flags: 0, tty: true, seekable: false}, 0);
1309
- for (var i = 1; i < 3; i++) {
1310
- FS.createStream({nfd: i, position: 0, path: '', flags: 577, tty: true, seekable: false}, i)
1311
- }
1312
- },
1313
- cwd() {
1314
- return process.cwd()
1315
- },
1316
- chdir(...args) {
1317
- process.chdir(...args)
1318
- },
1319
- mknod(path, mode) {
1320
- if (FS.isDir(path)) {
1321
- fs.mkdirSync(path, mode)
1322
- } else {
1323
- fs.writeFileSync(path, '', {mode})
1324
- }
1325
- },
1326
- mkdir(...args) {
1327
- fs.mkdirSync(...args)
1328
- },
1329
- symlink(...args) {
1330
- fs.symlinkSync(...args)
1331
- },
1332
- rename(...args) {
1333
- fs.renameSync(...args)
1334
- },
1335
- rmdir(...args) {
1336
- fs.rmdirSync(...args)
1337
- },
1338
- readdir(...args) {
1339
- return ['.', '..'].concat(fs.readdirSync(...args))
1340
- },
1341
- unlink(...args) {
1342
- fs.unlinkSync(...args)
1343
- },
1344
- readlink(...args) {
1345
- return fs.readlinkSync(...args)
1346
- },
1347
- stat(...args) {
1348
- return fs.statSync(...args)
1349
- },
1350
- lstat(...args) {
1351
- return fs.lstatSync(...args)
1352
- },
1353
- chmod(...args) {
1354
- fs.chmodSync(...args)
1355
- },
1356
- fchmod(fd, mode) {
1357
- var stream = FS.getStreamChecked(fd);
1358
- fs.fchmodSync(stream.nfd, mode)
1359
- },
1360
- chown(...args) {
1361
- fs.chownSync(...args)
1362
- },
1363
- fchown(fd, owner, group) {
1364
- var stream = FS.getStreamChecked(fd);
1365
- fs.fchownSync(stream.nfd, owner, group)
1366
- },
1367
- truncate(...args) {
1368
- fs.truncateSync(...args)
1369
- },
1370
- ftruncate(fd, len) {
1371
- if (len < 0) {
1372
- throw new FS.ErrnoError(28)
1373
- }
1374
- var stream = FS.getStreamChecked(fd);
1375
- fs.ftruncateSync(stream.nfd, len)
1376
- },
1377
- utime(path, atime, mtime) {
1378
- if (atime == -1 || mtime == -1) {
1379
- var st = fs.statSync(path);
1380
- if (atime == -1) atime = st.atimeMs;
1381
- if (mtime == -1) mtime = st.mtimeMs
1382
- }
1383
- fs.utimesSync(path, atime / 1e3, mtime / 1e3)
1384
- },
1385
- open(path, flags, mode) {
1386
- if (typeof flags == 'string') {
1387
- flags = FS_modeStringToFlags(flags)
1388
- }
1389
- var pathTruncated = path.split('/').map(s => s.substr(0, 255)).join('/');
1390
- var nfd = fs.openSync(pathTruncated, NODEFS.flagsForNode(flags), mode);
1391
- var st = fs.fstatSync(nfd);
1392
- if (flags & 65536 && !st.isDirectory()) {
1393
- fs.closeSync(nfd);
1394
- throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)
1395
- }
1396
- var newMode = NODEFS.getMode(pathTruncated);
1397
- var node = {id: st.ino, mode: newMode, node_ops: NODERAWFS, path};
1398
- return FS.createStream({nfd, position: 0, path, flags, node, seekable: true})
1399
- },
1400
- createStream(stream, fd) {
1401
- var rtn = VFS.createStream(stream, fd);
1402
- if (typeof rtn.shared.refcnt == 'undefined') {
1403
- rtn.shared.refcnt = 1
1404
- } else {
1405
- rtn.shared.refcnt++
1406
- }
1407
- return rtn
1408
- },
1409
- close(stream) {
1410
- VFS.closeStream(stream.fd);
1411
- if (!stream.stream_ops && --stream.shared.refcnt === 0) {
1412
- fs.closeSync(stream.nfd)
1413
- }
1414
- },
1415
- llseek(stream, offset, whence) {
1416
- if (stream.stream_ops) {
1417
- return VFS.llseek(stream, offset, whence)
1418
- }
1419
- var position = offset;
1420
- if (whence === 1) {
1421
- position += stream.position
1422
- } else if (whence === 2) {
1423
- position += fs.fstatSync(stream.nfd).size
1424
- } else if (whence !== 0) {
1425
- throw new FS.ErrnoError(28)
1426
- }
1427
- if (position < 0) {
1428
- throw new FS.ErrnoError(28)
1429
- }
1430
- stream.position = position;
1431
- return position
1432
- },
1433
- read(stream, buffer, offset, length, position) {
1434
- if (stream.stream_ops) {
1435
- return VFS.read(stream, buffer, offset, length, position)
1436
- }
1437
- var seeking = typeof position != 'undefined';
1438
- if (!seeking && stream.seekable) position = stream.position;
1439
- var bytesRead = fs.readSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), 0, length, position);
1440
- if (!seeking) stream.position += bytesRead;
1441
- return bytesRead
1442
- },
1443
- write(stream, buffer, offset, length, position) {
1444
- if (stream.stream_ops) {
1445
- return VFS.write(stream, buffer, offset, length, position)
1446
- }
1447
- if (stream.flags & +'1024') {
1448
- FS.llseek(stream, 0, +'2')
1449
- }
1450
- var seeking = typeof position != 'undefined';
1451
- if (!seeking && stream.seekable) position = stream.position;
1452
- var bytesWritten = fs.writeSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), 0, length, position);
1453
- if (!seeking) stream.position += bytesWritten;
1454
- return bytesWritten
1455
- },
1456
- allocate() {
1457
- throw new FS.ErrnoError(138)
1458
- },
1459
- mmap(stream, length, position, prot, flags) {
1460
- if (!length) {
1461
- throw new FS.ErrnoError(28)
1462
- }
1463
- if (stream.stream_ops) {
1464
- return VFS.mmap(stream, length, position, prot, flags)
1465
- }
1466
- var ptr = mmapAlloc(length);
1467
- FS.read(stream, HEAP8, ptr, length, position);
1468
- return {
1469
- ptr, allocated: true
1470
- }
1471
- },
1472
- msync(stream, buffer, offset, length, mmapFlags) {
1473
- if (stream.stream_ops) {
1474
- return VFS.msync(stream, buffer, offset, length, mmapFlags)
1475
- }
1476
- FS.write(stream, buffer, 0, length, offset);
1477
- return 0
1478
- },
1479
- ioctl() {
1480
- throw new FS.ErrnoError(59)
1481
- }
1482
- };
1483
- var FS = {
1484
- root: null,
1485
- mounts: [],
1486
- devices: {},
1487
- streams: [],
1488
- nextInode: 1,
1489
- nameTable: null,
1490
- currentPath: '/',
1491
- initialized: false,
1492
- ignorePermissions: true,
1493
- ErrnoError: class {
1494
- name = 'ErrnoError';
1495
- constructor(errno) {
1496
- this.errno = errno
1497
- }
1498
- },
1499
- filesystems: null,
1500
- syncFSRequests: 0,
1501
- readFiles: {},
1502
- FSStream: class {
1503
- shared = {};
1504
- get object() {
1505
- return this.node
1506
- }
1507
- set object(val) {
1508
- this.node = val
1509
- }
1510
- get isRead() {
1511
- return (this.flags & 2097155) !== 1
1512
- }
1513
- get isWrite() {
1514
- return (this.flags & 2097155) !== 0
1515
- }
1516
- get isAppend() {
1517
- return this.flags & 1024
1518
- }
1519
- get flags() {
1520
- return this.shared.flags
1521
- }
1522
- set flags(val) {
1523
- this.shared.flags = val
1524
- }
1525
- get position() {
1526
- return this.shared.position
1527
- }
1528
- set position(val) {
1529
- this.shared.position = val
1530
- }
1531
- },
1532
- FSNode: class {
1533
- node_ops = {};
1534
- stream_ops = {};
1535
- readMode = 292 | 73;
1536
- writeMode = 146;
1537
- mounted = null;
1538
- constructor(parent, name, mode, rdev) {
1539
- if (!parent) {
1540
- parent = this
1541
- }
1542
- this.parent = parent;
1543
- this.mount = parent.mount;
1544
- this.id = FS.nextInode++;
1545
- this.name = name;
1546
- this.mode = mode;
1547
- this.rdev = rdev
1548
- }
1549
- get read() {
1550
- return (this.mode & this.readMode) === this.readMode
1551
- }
1552
- set read(val) {
1553
- val ? this.mode |= this.readMode : this.mode &= ~this.readMode
1554
- }
1555
- get write() {
1556
- return (this.mode & this.writeMode) === this.writeMode
1557
- }
1558
- set write(val) {
1559
- val ? this.mode |= this.writeMode : this.mode &= ~this.writeMode
1560
- }
1561
- get isFolder() {
1562
- return FS.isDir(this.mode)
1563
- }
1564
- get isDevice() {
1565
- return FS.isChrdev(this.mode)
1566
- }
1567
- },
1568
- lookupPath(path, opts = {}) {
1569
- path = PATH_FS.resolve(path);
1570
- if (!path) return {path: '', node: null};
1571
- var defaults = {follow_mount: true, recurse_count: 0};
1572
- opts = Object.assign(defaults, opts);
1573
- if (opts.recurse_count > 8) {
1574
- throw new FS.ErrnoError(32)
1575
- }
1576
- var parts = path.split('/').filter(p => !!p);
1577
- var current = FS.root;
1578
- var current_path = '/';
1579
- for (var i = 0; i < parts.length; i++) {
1580
- var islast = i === parts.length - 1;
1581
- if (islast && opts.parent) {
1582
- break
1583
- }
1584
- current = FS.lookupNode(current, parts[i]);
1585
- current_path = PATH.join2(current_path, parts[i]);
1586
- if (FS.isMountpoint(current)) {
1587
- if (!islast || islast && opts.follow_mount) {
1588
- current = current.mounted.root
1589
- }
1590
- }
1591
- if (!islast || opts.follow) {
1592
- var count = 0;
1593
- while (FS.isLink(current.mode)) {
1594
- var link = FS.readlink(current_path);
1595
- current_path = PATH_FS.resolve(PATH.dirname(current_path), link);
1596
- var lookup = FS.lookupPath(current_path, {recurse_count: opts.recurse_count + 1});
1597
- current = lookup.node;
1598
- if (count++ > 40) {
1599
- throw new FS.ErrnoError(32)
1600
- }
1601
- }
1602
- }
1603
- }
1604
- return {
1605
- path: current_path, node: current
1606
- }
1607
- },
1608
- getPath(node) {
1609
- var path;
1610
- while (true) {
1611
- if (FS.isRoot(node)) {
1612
- var mount = node.mount.mountpoint;
1613
- if (!path) return mount;
1614
- return mount[mount.length - 1] !== '/' ? `${mount}/${path}` : mount + path
1615
- }
1616
- path = path ? `${node.name}/${path}` : node.name;
1617
- node = node.parent
1618
- }
1619
- },
1620
- hashName(parentid, name) {
1621
- var hash = 0;
1622
- for (var i = 0; i < name.length; i++) {
1623
- hash = (hash << 5) - hash + name.charCodeAt(i) | 0
1624
- }
1625
- return (parentid + hash >>> 0) % FS.nameTable.length
1626
- },
1627
- hashAddNode(node) {
1628
- var hash = FS.hashName(node.parent.id, node.name);
1629
- node.name_next = FS.nameTable[hash];
1630
- FS.nameTable[hash] = node
1631
- },
1632
- hashRemoveNode(node) {
1633
- var hash = FS.hashName(node.parent.id, node.name);
1634
- if (FS.nameTable[hash] === node) {
1635
- FS.nameTable[hash] = node.name_next
1636
- } else {
1637
- var current = FS.nameTable[hash];
1638
- while (current) {
1639
- if (current.name_next === node) {
1640
- current.name_next = node.name_next;
1641
- break
1642
- }
1643
- current = current.name_next
1644
- }
1645
- }
1646
- },
1647
- lookupNode(parent, name) {
1648
- var errCode = FS.mayLookup(parent);
1649
- if (errCode) {
1650
- throw new FS.ErrnoError(errCode)
1651
- }
1652
- var hash = FS.hashName(parent.id, name);
1653
- for (var node = FS.nameTable[hash]; node; node = node.name_next) {
1654
- var nodeName = node.name;
1655
- if (node.parent.id === parent.id && nodeName === name) {
1656
- return node
1657
- }
1658
- }
1659
- return FS.lookup(parent, name)
1660
- },
1661
- createNode(parent, name, mode, rdev) {
1662
- var node = new FS.FSNode(parent, name, mode, rdev);
1663
- FS.hashAddNode(node);
1664
- return node
1665
- },
1666
- destroyNode(node) {
1667
- FS.hashRemoveNode(node)
1668
- },
1669
- isRoot(node) {
1670
- return node === node.parent
1671
- },
1672
- isMountpoint(node) {
1673
- return !!node.mounted
1674
- },
1675
- isFile(mode) {
1676
- return (mode & 61440) === 32768
1677
- },
1678
- isDir(mode) {
1679
- return (mode & 61440) === 16384
1680
- },
1681
- isLink(mode) {
1682
- return (mode & 61440) === 40960
1683
- },
1684
- isChrdev(mode) {
1685
- return (mode & 61440) === 8192
1686
- },
1687
- isBlkdev(mode) {
1688
- return (mode & 61440) === 24576
1689
- },
1690
- isFIFO(mode) {
1691
- return (mode & 61440) === 4096
1692
- },
1693
- isSocket(mode) {
1694
- return (mode & 49152) === 49152
1695
- },
1696
- flagsToPermissionString(flag) {
1697
- var perms = ['r', 'w', 'rw'][flag & 3];
1698
- if (flag & 512) {
1699
- perms += 'w'
1700
- }
1701
- return perms
1702
- },
1703
- nodePermissions(node, perms) {
1704
- if (FS.ignorePermissions) {
1705
- return 0
1706
- }
1707
- if (perms.includes('r') && !(node.mode & 292)) {
1708
- return 2
1709
- } else if (perms.includes('w') && !(node.mode & 146)) {
1710
- return 2
1711
- } else if (perms.includes('x') && !(node.mode & 73)) {
1712
- return 2
1713
- }
1714
- return 0
1715
- },
1716
- mayLookup(dir) {
1717
- if (!FS.isDir(dir.mode)) return 54;
1718
- var errCode = FS.nodePermissions(dir, 'x');
1719
- if (errCode) return errCode;
1720
- if (!dir.node_ops.lookup) return 2;
1721
- return 0
1722
- },
1723
- mayCreate(dir, name) {
1724
- try {
1725
- var node = FS.lookupNode(dir, name);
1726
- return 20
1727
- } catch (e) {
1728
- }
1729
- return FS.nodePermissions(dir, 'wx')
1730
- },
1731
- mayDelete(dir, name, isdir) {
1732
- var node;
1733
- try {
1734
- node = FS.lookupNode(dir, name)
1735
- } catch (e) {
1736
- return e.errno
1737
- }
1738
- var errCode = FS.nodePermissions(dir, 'wx');
1739
- if (errCode) {
1740
- return errCode
1741
- }
1742
- if (isdir) {
1743
- if (!FS.isDir(node.mode)) {
1744
- return 54
1745
- }
1746
- if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {
1747
- return 10
1748
- }
1749
- } else {
1750
- if (FS.isDir(node.mode)) {
1751
- return 31
1752
- }
1753
- }
1754
- return 0
1755
- },
1756
- mayOpen(node, flags) {
1757
- if (!node) {
1758
- return 44
1759
- }
1760
- if (FS.isLink(node.mode)) {
1761
- return 32
1762
- } else if (FS.isDir(node.mode)) {
1763
- if (FS.flagsToPermissionString(flags) !== 'r' || flags & 512) {
1764
- return 31
1765
- }
1766
- }
1767
- return FS.nodePermissions(node, FS.flagsToPermissionString(flags))
1768
- },
1769
- MAX_OPEN_FDS: 4096,
1770
- nextfd() {
1771
- for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) {
1772
- if (!FS.streams[fd]) {
1773
- return fd
1774
- }
1775
- }
1776
- throw new FS.ErrnoError(33)
1777
- },
1778
- getStreamChecked(fd) {
1779
- var stream = FS.getStream(fd);
1780
- if (!stream) {
1781
- throw new FS.ErrnoError(8)
1782
- }
1783
- return stream
1784
- },
1785
- getStream: fd => FS.streams[fd],
1786
- createStream(stream, fd = -1) {
1787
- stream = Object.assign(new FS.FSStream, stream);
1788
- if (fd == -1) {
1789
- fd = FS.nextfd()
1790
- }
1791
- stream.fd = fd;
1792
- FS.streams[fd] = stream;
1793
- return stream
1794
- },
1795
- closeStream(fd) {
1796
- FS.streams[fd] = null
1797
- },
1798
- dupStream(origStream, fd = -1) {
1799
- var stream = FS.createStream(origStream, fd);
1800
- stream.stream_ops?.dup?.(stream);
1801
- return stream
1802
- },
1803
- chrdev_stream_ops: {
1804
- open(stream) {
1805
- var device = FS.getDevice(stream.node.rdev);
1806
- stream.stream_ops = device.stream_ops;
1807
- stream.stream_ops.open?.(stream)
1808
- },
1809
- llseek() {
1810
- throw new FS.ErrnoError(70)
1811
- }
1812
- },
1813
- major: dev => dev >> 8,
1814
- minor: dev => dev & 255,
1815
- makedev: (ma, mi) => ma << 8 | mi,
1816
- registerDevice(dev, ops) {
1817
- FS.devices[dev] = {stream_ops: ops}
1818
- },
1819
- getDevice: dev => FS.devices[dev],
1820
- getMounts(mount) {
1821
- var mounts = [];
1822
- var check = [mount];
1823
- while (check.length) {
1824
- var m = check.pop();
1825
- mounts.push(m);
1826
- check.push(...m.mounts)
1827
- }
1828
- return mounts
1829
- },
1830
- syncfs(populate, callback) {
1831
- if (typeof populate == 'function') {
1832
- callback = populate;
1833
- populate = false
1834
- }
1835
- FS.syncFSRequests++;
1836
- if (FS.syncFSRequests > 1) {
1837
- err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)
1838
- }
1839
- var mounts = FS.getMounts(FS.root.mount);
1840
- var completed = 0;
1841
- function doCallback(errCode) {
1842
- FS.syncFSRequests--;
1843
- return callback(errCode)
1844
- }
1845
- function done(errCode) {
1846
- if (errCode) {
1847
- if (!done.errored) {
1848
- done.errored = true;
1849
- return doCallback(errCode)
1850
- }
1851
- return
1852
- }
1853
- if (++completed >= mounts.length) {
1854
- doCallback(null)
1855
- }
1856
- }
1857
- mounts.forEach(mount => {
1858
- if (!mount.type.syncfs) {
1859
- return done(null)
1860
- }
1861
- mount.type.syncfs(mount, populate, done)
1862
- })
1863
- },
1864
- mount(type, opts, mountpoint) {
1865
- var root = mountpoint === '/';
1866
- var pseudo = !mountpoint;
1867
- var node;
1868
- if (root && FS.root) {
1869
- throw new FS.ErrnoError(10)
1870
- } else if (!root && !pseudo) {
1871
- var lookup = FS.lookupPath(mountpoint, {follow_mount: false});
1872
- mountpoint = lookup.path;
1873
- node = lookup.node;
1874
- if (FS.isMountpoint(node)) {
1875
- throw new FS.ErrnoError(10)
1876
- }
1877
- if (!FS.isDir(node.mode)) {
1878
- throw new FS.ErrnoError(54)
1879
- }
1880
- }
1881
- var mount = {type, opts, mountpoint, mounts: []};
1882
- var mountRoot = type.mount(mount);
1883
- mountRoot.mount = mount;
1884
- mount.root = mountRoot;
1885
- if (root) {
1886
- FS.root = mountRoot
1887
- } else if (node) {
1888
- node.mounted = mount;
1889
- if (node.mount) {
1890
- node.mount.mounts.push(mount)
1891
- }
1892
- }
1893
- return mountRoot
1894
- },
1895
- unmount(mountpoint) {
1896
- var lookup = FS.lookupPath(mountpoint, {follow_mount: false});
1897
- if (!FS.isMountpoint(lookup.node)) {
1898
- throw new FS.ErrnoError(28)
1899
- }
1900
- var node = lookup.node;
1901
- var mount = node.mounted;
1902
- var mounts = FS.getMounts(mount);
1903
- Object.keys(FS.nameTable).forEach(hash => {
1904
- var current = FS.nameTable[hash];
1905
- while (current) {
1906
- var next = current.name_next;
1907
- if (mounts.includes(current.mount)) {
1908
- FS.destroyNode(current)
1909
- }
1910
- current = next
1911
- }
1912
- });
1913
- node.mounted = null;
1914
- var idx = node.mount.mounts.indexOf(mount);
1915
- node.mount.mounts.splice(idx, 1)
1916
- },
1917
- lookup(parent, name) {
1918
- return parent.node_ops.lookup(parent, name)
1919
- },
1920
- mknod(path, mode, dev) {
1921
- var lookup = FS.lookupPath(path, {parent: true});
1922
- var parent = lookup.node;
1923
- var name = PATH.basename(path);
1924
- if (!name || name === '.' || name === '..') {
1925
- throw new FS.ErrnoError(28)
1926
- }
1927
- var errCode = FS.mayCreate(parent, name);
1928
- if (errCode) {
1929
- throw new FS.ErrnoError(errCode)
1930
- }
1931
- if (!parent.node_ops.mknod) {
1932
- throw new FS.ErrnoError(63)
1933
- }
1934
- return parent.node_ops.mknod(parent, name, mode, dev)
1935
- },
1936
- create(path, mode) {
1937
- mode = mode !== undefined ? mode : 438;
1938
- mode &= 4095;
1939
- mode |= 32768;
1940
- return FS.mknod(path, mode, 0)
1941
- },
1942
- mkdir(path, mode) {
1943
- mode = mode !== undefined ? mode : 511;
1944
- mode &= 511 | 512;
1945
- mode |= 16384;
1946
- return FS.mknod(path, mode, 0)
1947
- },
1948
- mkdirTree(path, mode) {
1949
- var dirs = path.split('/');
1950
- var d = '';
1951
- for (var i = 0; i < dirs.length; ++i) {
1952
- if (!dirs[i]) continue;
1953
- d += '/' + dirs[i];
1954
- try {
1955
- FS.mkdir(d, mode)
1956
- } catch (e) {
1957
- if (e.errno != 20) throw e
1958
- }
1959
- }
1960
- },
1961
- mkdev(path, mode, dev) {
1962
- if (typeof dev == 'undefined') {
1963
- dev = mode;
1964
- mode = 438
1965
- }
1966
- mode |= 8192;
1967
- return FS.mknod(path, mode, dev)
1968
- },
1969
- symlink(oldpath, newpath) {
1970
- if (!PATH_FS.resolve(oldpath)) {
1971
- throw new FS.ErrnoError(44)
1972
- }
1973
- var lookup = FS.lookupPath(newpath, {parent: true});
1974
- var parent = lookup.node;
1975
- if (!parent) {
1976
- throw new FS.ErrnoError(44)
1977
- }
1978
- var newname = PATH.basename(newpath);
1979
- var errCode = FS.mayCreate(parent, newname);
1980
- if (errCode) {
1981
- throw new FS.ErrnoError(errCode)
1982
- }
1983
- if (!parent.node_ops.symlink) {
1984
- throw new FS.ErrnoError(63)
1985
- }
1986
- return parent.node_ops.symlink(parent, newname, oldpath)
1987
- },
1988
- rename(old_path, new_path) {
1989
- var old_dirname = PATH.dirname(old_path);
1990
- var new_dirname = PATH.dirname(new_path);
1991
- var old_name = PATH.basename(old_path);
1992
- var new_name = PATH.basename(new_path);
1993
- var lookup, old_dir, new_dir;
1994
- lookup = FS.lookupPath(old_path, {parent: true});
1995
- old_dir = lookup.node;
1996
- lookup = FS.lookupPath(new_path, {parent: true});
1997
- new_dir = lookup.node;
1998
- if (!old_dir || !new_dir) throw new FS.ErrnoError(44);
1999
- if (old_dir.mount !== new_dir.mount) {
2000
- throw new FS.ErrnoError(75)
2001
- }
2002
- var old_node = FS.lookupNode(old_dir, old_name);
2003
- var relative = PATH_FS.relative(old_path, new_dirname);
2004
- if (relative.charAt(0) !== '.') {
2005
- throw new FS.ErrnoError(28)
2006
- }
2007
- relative = PATH_FS.relative(new_path, old_dirname);
2008
- if (relative.charAt(0) !== '.') {
2009
- throw new FS.ErrnoError(55)
2010
- }
2011
- var new_node;
2012
- try {
2013
- new_node = FS.lookupNode(new_dir, new_name)
2014
- } catch (e) {
2015
- }
2016
- if (old_node === new_node) {
2017
- return
2018
- }
2019
- var isdir = FS.isDir(old_node.mode);
2020
- var errCode = FS.mayDelete(old_dir, old_name, isdir);
2021
- if (errCode) {
2022
- throw new FS.ErrnoError(errCode)
2023
- }
2024
- errCode = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name);
2025
- if (errCode) {
2026
- throw new FS.ErrnoError(errCode)
2027
- }
2028
- if (!old_dir.node_ops.rename) {
2029
- throw new FS.ErrnoError(63)
2030
- }
2031
- if (FS.isMountpoint(old_node) || new_node && FS.isMountpoint(new_node)) {
2032
- throw new FS.ErrnoError(10)
2033
- }
2034
- if (new_dir !== old_dir) {
2035
- errCode = FS.nodePermissions(old_dir, 'w');
2036
- if (errCode) {
2037
- throw new FS.ErrnoError(errCode)
2038
- }
2039
- }
2040
- FS.hashRemoveNode(old_node);
2041
- try {
2042
- old_dir.node_ops.rename(old_node, new_dir, new_name);
2043
- old_node.parent = new_dir
2044
- } catch (e) {
2045
- throw e
2046
- } finally {
2047
- FS.hashAddNode(old_node)
2048
- }
2049
- },
2050
- rmdir(path) {
2051
- var lookup = FS.lookupPath(path, {parent: true});
2052
- var parent = lookup.node;
2053
- var name = PATH.basename(path);
2054
- var node = FS.lookupNode(parent, name);
2055
- var errCode = FS.mayDelete(parent, name, true);
2056
- if (errCode) {
2057
- throw new FS.ErrnoError(errCode)
2058
- }
2059
- if (!parent.node_ops.rmdir) {
2060
- throw new FS.ErrnoError(63)
2061
- }
2062
- if (FS.isMountpoint(node)) {
2063
- throw new FS.ErrnoError(10)
2064
- }
2065
- parent.node_ops.rmdir(parent, name);
2066
- FS.destroyNode(node)
2067
- },
2068
- readdir(path) {
2069
- var lookup = FS.lookupPath(path, {follow: true});
2070
- var node = lookup.node;
2071
- if (!node.node_ops.readdir) {
2072
- throw new FS.ErrnoError(54)
2073
- }
2074
- return node.node_ops.readdir(node)
2075
- },
2076
- unlink(path) {
2077
- var lookup = FS.lookupPath(path, {parent: true});
2078
- var parent = lookup.node;
2079
- if (!parent) {
2080
- throw new FS.ErrnoError(44)
2081
- }
2082
- var name = PATH.basename(path);
2083
- var node = FS.lookupNode(parent, name);
2084
- var errCode = FS.mayDelete(parent, name, false);
2085
- if (errCode) {
2086
- throw new FS.ErrnoError(errCode)
2087
- }
2088
- if (!parent.node_ops.unlink) {
2089
- throw new FS.ErrnoError(63)
2090
- }
2091
- if (FS.isMountpoint(node)) {
2092
- throw new FS.ErrnoError(10)
2093
- }
2094
- parent.node_ops.unlink(parent, name);
2095
- FS.destroyNode(node)
2096
- },
2097
- readlink(path) {
2098
- var lookup = FS.lookupPath(path);
2099
- var link = lookup.node;
2100
- if (!link) {
2101
- throw new FS.ErrnoError(44)
2102
- }
2103
- if (!link.node_ops.readlink) {
2104
- throw new FS.ErrnoError(28)
2105
- }
2106
- return PATH_FS.resolve(FS.getPath(link.parent), link.node_ops.readlink(link))
2107
- },
2108
- stat(path, dontFollow) {
2109
- var lookup = FS.lookupPath(path, {follow: !dontFollow});
2110
- var node = lookup.node;
2111
- if (!node) {
2112
- throw new FS.ErrnoError(44)
2113
- }
2114
- if (!node.node_ops.getattr) {
2115
- throw new FS.ErrnoError(63)
2116
- }
2117
- return node.node_ops.getattr(node)
2118
- },
2119
- lstat(path) {
2120
- return FS.stat(path, true)
2121
- },
2122
- chmod(path, mode, dontFollow) {
2123
- var node;
2124
- if (typeof path == 'string') {
2125
- var lookup = FS.lookupPath(path, {follow: !dontFollow});
2126
- node = lookup.node
2127
- } else {
2128
- node = path
2129
- }
2130
- if (!node.node_ops.setattr) {
2131
- throw new FS.ErrnoError(63)
2132
- }
2133
- node.node_ops.setattr(node, {mode: mode & 4095 | node.mode & ~4095, timestamp: Date.now()})
2134
- },
2135
- lchmod(path, mode) {
2136
- FS.chmod(path, mode, true)
2137
- },
2138
- fchmod(fd, mode) {
2139
- var stream = FS.getStreamChecked(fd);
2140
- FS.chmod(stream.node, mode)
2141
- },
2142
- chown(path, uid, gid, dontFollow) {
2143
- var node;
2144
- if (typeof path == 'string') {
2145
- var lookup = FS.lookupPath(path, {follow: !dontFollow});
2146
- node = lookup.node
2147
- } else {
2148
- node = path
2149
- }
2150
- if (!node.node_ops.setattr) {
2151
- throw new FS.ErrnoError(63)
2152
- }
2153
- node.node_ops.setattr(node, {timestamp: Date.now()})
2154
- },
2155
- lchown(path, uid, gid) {
2156
- FS.chown(path, uid, gid, true)
2157
- },
2158
- fchown(fd, uid, gid) {
2159
- var stream = FS.getStreamChecked(fd);
2160
- FS.chown(stream.node, uid, gid)
2161
- },
2162
- truncate(path, len) {
2163
- if (len < 0) {
2164
- throw new FS.ErrnoError(28)
2165
- }
2166
- var node;
2167
- if (typeof path == 'string') {
2168
- var lookup = FS.lookupPath(path, {follow: true});
2169
- node = lookup.node
2170
- } else {
2171
- node = path
2172
- }
2173
- if (!node.node_ops.setattr) {
2174
- throw new FS.ErrnoError(63)
2175
- }
2176
- if (FS.isDir(node.mode)) {
2177
- throw new FS.ErrnoError(31)
2178
- }
2179
- if (!FS.isFile(node.mode)) {
2180
- throw new FS.ErrnoError(28)
2181
- }
2182
- var errCode = FS.nodePermissions(node, 'w');
2183
- if (errCode) {
2184
- throw new FS.ErrnoError(errCode)
2185
- }
2186
- node.node_ops.setattr(node, {size: len, timestamp: Date.now()})
2187
- },
2188
- ftruncate(fd, len) {
2189
- var stream = FS.getStreamChecked(fd);
2190
- if ((stream.flags & 2097155) === 0) {
2191
- throw new FS.ErrnoError(28)
2192
- }
2193
- FS.truncate(stream.node, len)
2194
- },
2195
- utime(path, atime, mtime) {
2196
- var lookup = FS.lookupPath(path, {follow: true});
2197
- var node = lookup.node;
2198
- node.node_ops.setattr(node, {timestamp: Math.max(atime, mtime)})
2199
- },
2200
- open(path, flags, mode) {
2201
- if (path === '') {
2202
- throw new FS.ErrnoError(44)
2203
- }
2204
- flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags;
2205
- if (flags & 64) {
2206
- mode = typeof mode == 'undefined' ? 438 : mode;
2207
- mode = mode & 4095 | 32768
2208
- } else {
2209
- mode = 0
2210
- }
2211
- var node;
2212
- if (typeof path == 'object') {
2213
- node = path
2214
- } else {
2215
- path = PATH.normalize(path);
2216
- try {
2217
- var lookup = FS.lookupPath(path, {follow: !(flags & 131072)});
2218
- node = lookup.node
2219
- } catch (e) {
2220
- }
2221
- }
2222
- var created = false;
2223
- if (flags & 64) {
2224
- if (node) {
2225
- if (flags & 128) {
2226
- throw new FS.ErrnoError(20)
2227
- }
2228
- } else {
2229
- node = FS.mknod(path, mode, 0);
2230
- created = true
2231
- }
2232
- }
2233
- if (!node) {
2234
- throw new FS.ErrnoError(44)
2235
- }
2236
- if (FS.isChrdev(node.mode)) {
2237
- flags &= ~512
2238
- }
2239
- if (flags & 65536 && !FS.isDir(node.mode)) {
2240
- throw new FS.ErrnoError(54)
2241
- }
2242
- if (!created) {
2243
- var errCode = FS.mayOpen(node, flags);
2244
- if (errCode) {
2245
- throw new FS.ErrnoError(errCode)
2246
- }
2247
- }
2248
- if (flags & 512 && !created) {
2249
- FS.truncate(node, 0)
2250
- }
2251
- flags &= ~(128 | 512 | 131072);
2252
- var stream = FS.createStream({
2253
- node,
2254
- path: FS.getPath(node),
2255
- flags,
2256
- seekable: true,
2257
- position: 0,
2258
- stream_ops: node.stream_ops,
2259
- ungotten: [],
2260
- error: false
2261
- });
2262
- if (stream.stream_ops.open) {
2263
- stream.stream_ops.open(stream)
2264
- }
2265
- if (Module['logReadFiles'] && !(flags & 1)) {
2266
- if (!(path in FS.readFiles)) {
2267
- FS.readFiles[path] = 1
2268
- }
2269
- }
2270
- return stream
2271
- },
2272
- close(stream) {
2273
- if (FS.isClosed(stream)) {
2274
- throw new FS.ErrnoError(8)
2275
- }
2276
- if (stream.getdents) stream.getdents = null;
2277
- try {
2278
- if (stream.stream_ops.close) {
2279
- stream.stream_ops.close(stream)
2280
- }
2281
- } catch (e) {
2282
- throw e
2283
- } finally {
2284
- FS.closeStream(stream.fd)
2285
- }
2286
- stream.fd = null
2287
- },
2288
- isClosed(stream) {
2289
- return stream.fd === null
2290
- },
2291
- llseek(stream, offset, whence) {
2292
- if (FS.isClosed(stream)) {
2293
- throw new FS.ErrnoError(8)
2294
- }
2295
- if (!stream.seekable || !stream.stream_ops.llseek) {
2296
- throw new FS.ErrnoError(70)
2297
- }
2298
- if (whence != 0 && whence != 1 && whence != 2) {
2299
- throw new FS.ErrnoError(28)
2300
- }
2301
- stream.position = stream.stream_ops.llseek(stream, offset, whence);
2302
- stream.ungotten = [];
2303
- return stream.position
2304
- },
2305
- read(stream, buffer, offset, length, position) {
2306
- if (length < 0 || position < 0) {
2307
- throw new FS.ErrnoError(28)
2308
- }
2309
- if (FS.isClosed(stream)) {
2310
- throw new FS.ErrnoError(8)
2311
- }
2312
- if ((stream.flags & 2097155) === 1) {
2313
- throw new FS.ErrnoError(8)
2314
- }
2315
- if (FS.isDir(stream.node.mode)) {
2316
- throw new FS.ErrnoError(31)
2317
- }
2318
- if (!stream.stream_ops.read) {
2319
- throw new FS.ErrnoError(28)
2320
- }
2321
- var seeking = typeof position != 'undefined';
2322
- if (!seeking) {
2323
- position = stream.position
2324
- } else if (!stream.seekable) {
2325
- throw new FS.ErrnoError(70)
2326
- }
2327
- var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position);
2328
- if (!seeking) stream.position += bytesRead;
2329
- return bytesRead
2330
- },
2331
- write(stream, buffer, offset, length, position, canOwn) {
2332
- if (length < 0 || position < 0) {
2333
- throw new FS.ErrnoError(28)
2334
- }
2335
- if (FS.isClosed(stream)) {
2336
- throw new FS.ErrnoError(8)
2337
- }
2338
- if ((stream.flags & 2097155) === 0) {
2339
- throw new FS.ErrnoError(8)
2340
- }
2341
- if (FS.isDir(stream.node.mode)) {
2342
- throw new FS.ErrnoError(31)
2343
- }
2344
- if (!stream.stream_ops.write) {
2345
- throw new FS.ErrnoError(28)
2346
- }
2347
- if (stream.seekable && stream.flags & 1024) {
2348
- FS.llseek(stream, 0, 2)
2349
- }
2350
- var seeking = typeof position != 'undefined';
2351
- if (!seeking) {
2352
- position = stream.position
2353
- } else if (!stream.seekable) {
2354
- throw new FS.ErrnoError(70)
2355
- }
2356
- var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn);
2357
- if (!seeking) stream.position += bytesWritten;
2358
- return bytesWritten
2359
- },
2360
- allocate(stream, offset, length) {
2361
- if (FS.isClosed(stream)) {
2362
- throw new FS.ErrnoError(8)
2363
- }
2364
- if (offset < 0 || length <= 0) {
2365
- throw new FS.ErrnoError(28)
2366
- }
2367
- if ((stream.flags & 2097155) === 0) {
2368
- throw new FS.ErrnoError(8)
2369
- }
2370
- if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) {
2371
- throw new FS.ErrnoError(43)
2372
- }
2373
- if (!stream.stream_ops.allocate) {
2374
- throw new FS.ErrnoError(138)
2375
- }
2376
- stream.stream_ops.allocate(stream, offset, length)
2377
- },
2378
- mmap(stream, length, position, prot, flags) {
2379
- if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) {
2380
- throw new FS.ErrnoError(2)
2381
- }
2382
- if ((stream.flags & 2097155) === 1) {
2383
- throw new FS.ErrnoError(2)
2384
- }
2385
- if (!stream.stream_ops.mmap) {
2386
- throw new FS.ErrnoError(43)
2387
- }
2388
- if (!length) {
2389
- throw new FS.ErrnoError(28)
2390
- }
2391
- return stream.stream_ops.mmap(stream, length, position, prot, flags)
2392
- },
2393
- msync(stream, buffer, offset, length, mmapFlags) {
2394
- if (!stream.stream_ops.msync) {
2395
- return 0
2396
- }
2397
- return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags)
2398
- },
2399
- ioctl(stream, cmd, arg) {
2400
- if (!stream.stream_ops.ioctl) {
2401
- throw new FS.ErrnoError(59)
2402
- }
2403
- return stream.stream_ops.ioctl(stream, cmd, arg)
2404
- },
2405
- readFile(path, opts = {}) {
2406
- opts.flags = opts.flags || 0;
2407
- opts.encoding = opts.encoding || 'binary';
2408
- if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {
2409
- throw new Error(`Invalid encoding type "${opts.encoding}"`)
2410
- }
2411
- var ret;
2412
- var stream = FS.open(path, opts.flags);
2413
- var stat = FS.stat(path);
2414
- var length = stat.size;
2415
- var buf = new Uint8Array(length);
2416
- FS.read(stream, buf, 0, length, 0);
2417
- if (opts.encoding === 'utf8') {
2418
- ret = UTF8ArrayToString(buf)
2419
- } else if (opts.encoding === 'binary') {
2420
- ret = buf
2421
- }
2422
- FS.close(stream);
2423
- return ret
2424
- },
2425
- writeFile(path, data, opts = {}) {
2426
- opts.flags = opts.flags || 577;
2427
- var stream = FS.open(path, opts.flags, opts.mode);
2428
- if (typeof data == 'string') {
2429
- var buf = new Uint8Array(lengthBytesUTF8(data) + 1);
2430
- var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length);
2431
- FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn)
2432
- } else if (ArrayBuffer.isView(data)) {
2433
- FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn)
2434
- } else {
2435
- throw new Error('Unsupported data type')
2436
- }
2437
- FS.close(stream)
2438
- },
2439
- cwd: () => FS.currentPath,
2440
- chdir(path) {
2441
- var lookup = FS.lookupPath(path, {follow: true});
2442
- if (lookup.node === null) {
2443
- throw new FS.ErrnoError(44)
2444
- }
2445
- if (!FS.isDir(lookup.node.mode)) {
2446
- throw new FS.ErrnoError(54)
2447
- }
2448
- var errCode = FS.nodePermissions(lookup.node, 'x');
2449
- if (errCode) {
2450
- throw new FS.ErrnoError(errCode)
2451
- }
2452
- FS.currentPath = lookup.path
2453
- },
2454
- createDefaultDirectories() {
2455
- FS.mkdir('/tmp');
2456
- FS.mkdir('/home');
2457
- FS.mkdir('/home/web_user')
2458
- },
2459
- createDefaultDevices() {
2460
- FS.mkdir('/dev');
2461
- FS.registerDevice(FS.makedev(1, 3),
2462
- {read: () => 0, write: (stream, buffer, offset, length, pos) => length, llseek: () => 0});
2463
- FS.mkdev('/dev/null', FS.makedev(1, 3));
2464
- TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);
2465
- TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);
2466
- FS.mkdev('/dev/tty', FS.makedev(5, 0));
2467
- FS.mkdev('/dev/tty1', FS.makedev(6, 0));
2468
- var randomBuffer = new Uint8Array(1024), randomLeft = 0;
2469
- var randomByte = () => {
2470
- if (randomLeft === 0) {
2471
- randomLeft = randomFill(randomBuffer).byteLength
2472
- }
2473
- return randomBuffer[--randomLeft]
2474
- };
2475
- FS.createDevice('/dev', 'random', randomByte);
2476
- FS.createDevice('/dev', 'urandom', randomByte);
2477
- FS.mkdir('/dev/shm');
2478
- FS.mkdir('/dev/shm/tmp')
2479
- },
2480
- createSpecialDirectories() {
2481
- FS.mkdir('/proc');
2482
- var proc_self = FS.mkdir('/proc/self');
2483
- FS.mkdir('/proc/self/fd');
2484
- FS.mount({
2485
- mount() {
2486
- var node = FS.createNode(proc_self, 'fd', 16384 | 511, 73);
2487
- node.node_ops = {
2488
- lookup(parent, name) {
2489
- var fd = +name;
2490
- var stream = FS.getStreamChecked(fd);
2491
- var ret = {parent: null, mount: {mountpoint: 'fake'}, node_ops: {readlink: () => stream.path}};
2492
- ret.parent = ret;
2493
- return ret
2494
- }
2495
- };
2496
- return node
2497
- }
2498
- },
2499
- {},
2500
- '/proc/self/fd')
2501
- },
2502
- createStandardStreams(input, output, error) {
2503
- if (input) {
2504
- FS.createDevice('/dev', 'stdin', input)
2505
- } else {
2506
- FS.symlink('/dev/tty', '/dev/stdin')
2507
- }
2508
- if (output) {
2509
- FS.createDevice('/dev', 'stdout', null, output)
2510
- } else {
2511
- FS.symlink('/dev/tty', '/dev/stdout')
2512
- }
2513
- if (error) {
2514
- FS.createDevice('/dev', 'stderr', null, error)
2515
- } else {
2516
- FS.symlink('/dev/tty1', '/dev/stderr')
2517
- }
2518
- var stdin = FS.open('/dev/stdin', 0);
2519
- var stdout = FS.open('/dev/stdout', 1);
2520
- var stderr = FS.open('/dev/stderr', 1)
2521
- },
2522
- staticInit() {
2523
- FS.nameTable = new Array(4096);
2524
- FS.mount(MEMFS, {}, '/');
2525
- FS.createDefaultDirectories();
2526
- FS.createDefaultDevices();
2527
- FS.createSpecialDirectories();
2528
- FS.filesystems = {MEMFS, NODEFS}
2529
- },
2530
- init(input, output, error) {
2531
- FS.initialized = true;
2532
- input ??= Module['stdin'];
2533
- output ??= Module['stdout'];
2534
- error ??= Module['stderr'];
2535
- FS.createStandardStreams(input, output, error)
2536
- },
2537
- quit() {
2538
- FS.initialized = false;
2539
- for (var i = 0; i < FS.streams.length; i++) {
2540
- var stream = FS.streams[i];
2541
- if (!stream) {
2542
- continue
2543
- }
2544
- FS.close(stream)
2545
- }
2546
- },
2547
- findObject(path, dontResolveLastLink) {
2548
- var ret = FS.analyzePath(path, dontResolveLastLink);
2549
- if (!ret.exists) {
2550
- return null
2551
- }
2552
- return ret.object
2553
- },
2554
- analyzePath(path, dontResolveLastLink) {
2555
- try {
2556
- var lookup = FS.lookupPath(path, {follow: !dontResolveLastLink});
2557
- path = lookup.path
2558
- } catch (e) {
2559
- }
2560
- var ret = {
2561
- isRoot: false,
2562
- exists: false,
2563
- error: 0,
2564
- name: null,
2565
- path: null,
2566
- object: null,
2567
- parentExists: false,
2568
- parentPath: null,
2569
- parentObject: null
2570
- };
2571
- try {
2572
- var lookup = FS.lookupPath(path, {parent: true});
2573
- ret.parentExists = true;
2574
- ret.parentPath = lookup.path;
2575
- ret.parentObject = lookup.node;
2576
- ret.name = PATH.basename(path);
2577
- lookup = FS.lookupPath(path, {follow: !dontResolveLastLink});
2578
- ret.exists = true;
2579
- ret.path = lookup.path;
2580
- ret.object = lookup.node;
2581
- ret.name = lookup.node.name;
2582
- ret.isRoot = lookup.path === '/'
2583
- } catch (e) {
2584
- ret.error = e.errno
2585
- }
2586
- return ret
2587
- },
2588
- createPath(parent, path, canRead, canWrite) {
2589
- parent = typeof parent == 'string' ? parent : FS.getPath(parent);
2590
- var parts = path.split('/').reverse();
2591
- while (parts.length) {
2592
- var part = parts.pop();
2593
- if (!part) continue;
2594
- var current = PATH.join2(parent, part);
2595
- try {
2596
- FS.mkdir(current)
2597
- } catch (e) {
2598
- }
2599
- parent = current
2600
- }
2601
- return current
2602
- },
2603
- createFile(parent, name, properties, canRead, canWrite) {
2604
- var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name);
2605
- var mode = FS_getMode(canRead, canWrite);
2606
- return FS.create(path, mode)
2607
- },
2608
- createDataFile(parent, name, data, canRead, canWrite, canOwn) {
2609
- var path = name;
2610
- if (parent) {
2611
- parent = typeof parent == 'string' ? parent : FS.getPath(parent);
2612
- path = name ? PATH.join2(parent, name) : parent
2613
- }
2614
- var mode = FS_getMode(canRead, canWrite);
2615
- var node = FS.create(path, mode);
2616
- if (data) {
2617
- if (typeof data == 'string') {
2618
- var arr = new Array(data.length);
2619
- for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i);
2620
- data = arr
2621
- }
2622
- FS.chmod(node, mode | 146);
2623
- var stream = FS.open(node, 577);
2624
- FS.write(stream, data, 0, data.length, 0, canOwn);
2625
- FS.close(stream);
2626
- FS.chmod(node, mode)
2627
- }
2628
- },
2629
- createDevice(parent, name, input, output) {
2630
- var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name);
2631
- var mode = FS_getMode(!!input, !!output);
2632
- FS.createDevice.major ??= 64;
2633
- var dev = FS.makedev(FS.createDevice.major++, 0);
2634
- FS.registerDevice(dev, {
2635
- open(stream) {
2636
- stream.seekable = false
2637
- },
2638
- close(stream) {
2639
- if (output?.buffer?.length) {
2640
- output(10)
2641
- }
2642
- },
2643
- read(stream, buffer, offset, length, pos) {
2644
- var bytesRead = 0;
2645
- for (var i = 0; i < length; i++) {
2646
- var result;
2647
- try {
2648
- result = input()
2649
- } catch (e) {
2650
- throw new FS.ErrnoError(29)
2651
- }
2652
- if (result === undefined && bytesRead === 0) {
2653
- throw new FS.ErrnoError(6)
2654
- }
2655
- if (result === null || result === undefined) break;
2656
- bytesRead++;
2657
- buffer[offset + i] = result
2658
- }
2659
- if (bytesRead) {
2660
- stream.node.timestamp = Date.now()
2661
- }
2662
- return bytesRead
2663
- },
2664
- write(stream, buffer, offset, length, pos) {
2665
- for (var i = 0; i < length; i++) {
2666
- try {
2667
- output(buffer[offset + i])
2668
- } catch (e) {
2669
- throw new FS.ErrnoError(29)
2670
- }
2671
- }
2672
- if (length) {
2673
- stream.node.timestamp = Date.now()
2674
- }
2675
- return i
2676
- }
2677
- });
2678
- return FS.mkdev(path, mode, dev)
2679
- },
2680
- forceLoadFile(obj) {
2681
- if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;
2682
- if (typeof XMLHttpRequest != 'undefined') {
2683
- throw new Error(
2684
- '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.')
2685
- } else {
2686
- try {
2687
- obj.contents = readBinary(obj.url);
2688
- obj.usedBytes = obj.contents.length
2689
- } catch (e) {
2690
- throw new FS.ErrnoError(29)
2691
- }
2692
- }
2693
- },
2694
- createLazyFile(parent, name, url, canRead, canWrite) {
2695
- class LazyUint8Array {
2696
- lengthKnown = false;
2697
- chunks = [];
2698
- get(idx) {
2699
- if (idx > this.length - 1 || idx < 0) {
2700
- return undefined
2701
- }
2702
- var chunkOffset = idx % this.chunkSize;
2703
- var chunkNum = idx / this.chunkSize | 0;
2704
- return this.getter(chunkNum)[chunkOffset]
2705
- }
2706
- setDataGetter(getter) {
2707
- this.getter = getter
2708
- }
2709
- cacheLength() {
2710
- var xhr = new XMLHttpRequest;
2711
- xhr.open('HEAD', url, false);
2712
- xhr.send(null);
2713
- if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304))
2714
- throw new Error('Couldn\'t load ' + url + '. Status: ' + xhr.status);
2715
- var datalength = Number(xhr.getResponseHeader('Content-length'));
2716
- var header;
2717
- var hasByteServing = (header = xhr.getResponseHeader('Accept-Ranges')) && header === 'bytes';
2718
- var usesGzip = (header = xhr.getResponseHeader('Content-Encoding')) && header === 'gzip';
2719
- var chunkSize = 1024 * 1024;
2720
- if (!hasByteServing) chunkSize = datalength;
2721
- var doXHR = (from, to) => {
2722
- if (from > to) throw new Error('invalid range (' + from + ', ' + to + ') or no bytes requested!');
2723
- if (to > datalength - 1)
2724
- throw new Error('only ' + datalength + ' bytes available! programmer error!');
2725
- var xhr = new XMLHttpRequest;
2726
- xhr.open('GET', url, false);
2727
- if (datalength !== chunkSize) xhr.setRequestHeader('Range', 'bytes=' + from + '-' + to);
2728
- xhr.responseType = 'arraybuffer';
2729
- if (xhr.overrideMimeType) {
2730
- xhr.overrideMimeType('text/plain; charset=x-user-defined')
2731
- }
2732
- xhr.send(null);
2733
- if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304))
2734
- throw new Error('Couldn\'t load ' + url + '. Status: ' + xhr.status);
2735
- if (xhr.response !== undefined) {
2736
- return new Uint8Array(xhr.response || [])
2737
- }
2738
- return intArrayFromString(xhr.responseText || '', true)
2739
- };
2740
- var lazyArray = this;
2741
- lazyArray.setDataGetter(chunkNum => {
2742
- var start = chunkNum * chunkSize;
2743
- var end = (chunkNum + 1) * chunkSize - 1;
2744
- end = Math.min(end, datalength - 1);
2745
- if (typeof lazyArray.chunks[chunkNum] == 'undefined') {
2746
- lazyArray.chunks[chunkNum] = doXHR(start, end)
2747
- }
2748
- if (typeof lazyArray.chunks[chunkNum] == 'undefined') throw new Error('doXHR failed!');
2749
- return lazyArray.chunks[chunkNum]
2750
- });
2751
- if (usesGzip || !datalength) {
2752
- chunkSize = datalength = 1;
2753
- datalength = this.getter(0).length;
2754
- chunkSize = datalength;
2755
- out('LazyFiles on gzip forces download of the whole file when length is accessed')
2756
- }
2757
- this._length = datalength;
2758
- this._chunkSize = chunkSize;
2759
- this.lengthKnown = true
2760
- }
2761
- get length() {
2762
- if (!this.lengthKnown) {
2763
- this.cacheLength()
2764
- }
2765
- return this._length
2766
- }
2767
- get chunkSize() {
2768
- if (!this.lengthKnown) {
2769
- this.cacheLength()
2770
- }
2771
- return this._chunkSize
2772
- }
2773
- }
2774
- if (typeof XMLHttpRequest != 'undefined') {
2775
- if (!ENVIRONMENT_IS_WORKER)
2776
- throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc';
2777
- var lazyArray = new LazyUint8Array;
2778
- var properties = {isDevice: false, contents: lazyArray}
2779
- } else {
2780
- var properties = {isDevice: false, url}
2781
- }
2782
- var node = FS.createFile(parent, name, properties, canRead, canWrite);
2783
- if (properties.contents) {
2784
- node.contents = properties.contents
2785
- } else if (properties.url) {
2786
- node.contents = null;
2787
- node.url = properties.url
2788
- }
2789
- Object.defineProperties(node, {
2790
- usedBytes: {
2791
- get: function() {
2792
- return this.contents.length
2793
- }
2794
- }
2795
- });
2796
- var stream_ops = {};
2797
- var keys = Object.keys(node.stream_ops);
2798
- keys.forEach(key => {
2799
- var fn = node.stream_ops[key];
2800
- stream_ops[key] = (...args) => {
2801
- FS.forceLoadFile(node);
2802
- return fn(...args)
2803
- }
2804
- });
2805
- function writeChunks(stream, buffer, offset, length, position) {
2806
- var contents = stream.node.contents;
2807
- if (position >= contents.length) return 0;
2808
- var size = Math.min(contents.length - position, length);
2809
- if (contents.slice) {
2810
- for (var i = 0; i < size; i++) {
2811
- buffer[offset + i] = contents[position + i]
2812
- }
2813
- } else {
2814
- for (var i = 0; i < size; i++) {
2815
- buffer[offset + i] = contents.get(position + i)
2816
- }
2817
- }
2818
- return size
2819
- }
2820
- stream_ops.read = (stream, buffer, offset, length, position) => {
2821
- FS.forceLoadFile(node);
2822
- return writeChunks(stream, buffer, offset, length, position)
2823
- };
2824
- stream_ops.mmap = (stream, length, position, prot, flags) => {
2825
- FS.forceLoadFile(node);
2826
- var ptr = mmapAlloc(length);
2827
- if (!ptr) {
2828
- throw new FS.ErrnoError(48)
2829
- }
2830
- writeChunks(stream, HEAP8, ptr, length, position);
2831
- return {
2832
- ptr, allocated: true
2833
- }
2834
- };
2835
- node.stream_ops = stream_ops;
2836
- return node
2837
- }
2838
- };
2839
- var UTF8ToString = (ptr, maxBytesToRead) => ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';
2840
- var SYSCALLS = {
2841
- DEFAULT_POLLMASK: 5,
2842
- calculateAt(dirfd, path, allowEmpty) {
2843
- if (PATH.isAbs(path)) {
2844
- return path
2845
- }
2846
- var dir;
2847
- if (dirfd === -100) {
2848
- dir = FS.cwd()
2849
- } else {
2850
- var dirstream = SYSCALLS.getStreamFromFD(dirfd);
2851
- dir = dirstream.path
2852
- }
2853
- if (path.length == 0) {
2854
- if (!allowEmpty) {
2855
- throw new FS.ErrnoError(44)
2856
- }
2857
- return dir
2858
- }
2859
- return PATH.join2(dir, path)
2860
- },
2861
- doStat(func, path, buf) {
2862
- var stat = func(path);
2863
- HEAP32[buf >> 2] = stat.dev;
2864
- HEAP32[buf + 4 >> 2] = stat.mode;
2865
- HEAPU32[buf + 8 >> 2] = stat.nlink;
2866
- HEAP32[buf + 12 >> 2] = stat.uid;
2867
- HEAP32[buf + 16 >> 2] = stat.gid;
2868
- HEAP32[buf + 20 >> 2] = stat.rdev;
2869
- tempI64 =
2870
- [
2871
- stat.size >>> 0,
2872
- (tempDouble = stat.size,
2873
- +Math.abs(tempDouble) >= 1
2874
- ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0
2875
- : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
2876
- : 0)
2877
- ],
2878
- HEAP32[buf + 24 >> 2] = tempI64[0], HEAP32[buf + 28 >> 2] = tempI64[1];
2879
- HEAP32[buf + 32 >> 2] = 4096;
2880
- HEAP32[buf + 36 >> 2] = stat.blocks;
2881
- var atime = stat.atime.getTime();
2882
- var mtime = stat.mtime.getTime();
2883
- var ctime = stat.ctime.getTime();
2884
- tempI64 =
2885
- [
2886
- Math.floor(atime / 1e3) >>> 0,
2887
- (tempDouble = Math.floor(atime / 1e3),
2888
- +Math.abs(tempDouble) >= 1
2889
- ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0
2890
- : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
2891
- : 0)
2892
- ],
2893
- HEAP32[buf + 40 >> 2] = tempI64[0], HEAP32[buf + 44 >> 2] = tempI64[1];
2894
- HEAPU32[buf + 48 >> 2] = atime % 1e3 * 1e3 * 1e3;
2895
- tempI64 =
2896
- [
2897
- Math.floor(mtime / 1e3) >>> 0,
2898
- (tempDouble = Math.floor(mtime / 1e3),
2899
- +Math.abs(tempDouble) >= 1
2900
- ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0
2901
- : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
2902
- : 0)
2903
- ],
2904
- HEAP32[buf + 56 >> 2] = tempI64[0], HEAP32[buf + 60 >> 2] = tempI64[1];
2905
- HEAPU32[buf + 64 >> 2] = mtime % 1e3 * 1e3 * 1e3;
2906
- tempI64 =
2907
- [
2908
- Math.floor(ctime / 1e3) >>> 0,
2909
- (tempDouble = Math.floor(ctime / 1e3),
2910
- +Math.abs(tempDouble) >= 1
2911
- ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0
2912
- : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
2913
- : 0)
2914
- ],
2915
- HEAP32[buf + 72 >> 2] = tempI64[0], HEAP32[buf + 76 >> 2] = tempI64[1];
2916
- HEAPU32[buf + 80 >> 2] = ctime % 1e3 * 1e3 * 1e3;
2917
- tempI64 =
2918
- [
2919
- stat.ino >>> 0,
2920
- (tempDouble = stat.ino,
2921
- +Math.abs(tempDouble) >= 1
2922
- ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0
2923
- : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
2924
- : 0)
2925
- ],
2926
- HEAP32[buf + 88 >> 2] = tempI64[0], HEAP32[buf + 92 >> 2] = tempI64[1];
2927
- return 0
2928
- },
2929
- doMsync(addr, stream, len, flags, offset) {
2930
- if (!FS.isFile(stream.node.mode)) {
2931
- throw new FS.ErrnoError(43)
2932
- }
2933
- if (flags & 2) {
2934
- return 0
2935
- }
2936
- var buffer = HEAPU8.slice(addr, addr + len);
2937
- FS.msync(stream, buffer, offset, len, flags)
2938
- },
2939
- getStreamFromFD(fd) {
2940
- var stream = FS.getStreamChecked(fd);
2941
- return stream
2942
- },
2943
- varargs: undefined,
2944
- getStr(ptr) {
2945
- var ret = UTF8ToString(ptr);
2946
- return ret
2947
- }
2948
- };
2949
- function ___syscall_chdir(path) {
2950
- try {
2951
- path = SYSCALLS.getStr(path);
2952
- FS.chdir(path);
2953
- return 0
2954
- } catch (e) {
2955
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
2956
- return -e.errno
2957
- }
2958
- }
2959
- function ___syscall_faccessat(dirfd, path, amode, flags) {
2960
- try {
2961
- path = SYSCALLS.getStr(path);
2962
- path = SYSCALLS.calculateAt(dirfd, path);
2963
- if (amode & ~7) {
2964
- return -28
2965
- }
2966
- var lookup = FS.lookupPath(path, {follow: true});
2967
- var node = lookup.node;
2968
- if (!node) {
2969
- return -44
2970
- }
2971
- var perms = '';
2972
- if (amode & 4) perms += 'r';
2973
- if (amode & 2) perms += 'w';
2974
- if (amode & 1) perms += 'x';
2975
- if (perms && FS.nodePermissions(node, perms)) {
2976
- return -2
2977
- }
2978
- return 0
2979
- } catch (e) {
2980
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
2981
- return -e.errno
2982
- }
2983
- }
2984
- var syscallGetVarargI = () => {
2985
- var ret = HEAP32[+SYSCALLS.varargs >> 2];
2986
- SYSCALLS.varargs += 4;
2987
- return ret
2988
- };
2989
- var syscallGetVarargP = syscallGetVarargI;
2990
- function ___syscall_fcntl64(fd, cmd, varargs) {
2991
- SYSCALLS.varargs = varargs;
2992
- try {
2993
- var stream = SYSCALLS.getStreamFromFD(fd);
2994
- switch (cmd) {
2995
- case 0: {
2996
- var arg = syscallGetVarargI();
2997
- if (arg < 0) {
2998
- return -28
2999
- }
3000
- while (FS.streams[arg]) {
3001
- arg++
3002
- }
3003
- var newStream;
3004
- newStream = FS.dupStream(stream, arg);
3005
- return newStream.fd
3006
- }
3007
- case 1:
3008
- case 2: return 0;
3009
- case 3: return stream.flags;
3010
- case 4: {
3011
- var arg = syscallGetVarargI();
3012
- stream.flags |= arg;
3013
- return 0
3014
- }
3015
- case 12: {
3016
- var arg = syscallGetVarargP();
3017
- var offset = 0;
3018
- HEAP16[arg + offset >> 1] = 2;
3019
- return 0
3020
- }
3021
- case 13:
3022
- case 14: return 0
3023
- }
3024
- return -28
3025
- } catch (e) {
3026
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3027
- return -e.errno
3028
- }
3029
- }
3030
- function ___syscall_fstat64(fd, buf) {
3031
- try {
3032
- var stream = SYSCALLS.getStreamFromFD(fd);
3033
- return SYSCALLS.doStat(FS.stat, stream.path, buf)
3034
- } catch (e) {
3035
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3036
- return -e.errno
3037
- }
3038
- }
3039
- var stringToUTF8 = (str, outPtr, maxBytesToWrite) => stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);
3040
- function ___syscall_getcwd(buf, size) {
3041
- try {
3042
- if (size === 0) return -28;
3043
- var cwd = FS.cwd();
3044
- var cwdLengthInBytes = lengthBytesUTF8(cwd) + 1;
3045
- if (size < cwdLengthInBytes) return -68;
3046
- stringToUTF8(cwd, buf, size);
3047
- return cwdLengthInBytes
3048
- } catch (e) {
3049
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3050
- return -e.errno
3051
- }
3052
- }
3053
- function ___syscall_getdents64(fd, dirp, count) {
3054
- try {
3055
- var stream = SYSCALLS.getStreamFromFD(fd);
3056
- stream.getdents ||= FS.readdir(stream.path);
3057
- var struct_size = 280;
3058
- var pos = 0;
3059
- var off = FS.llseek(stream, 0, 1);
3060
- var idx = Math.floor(off / struct_size);
3061
- while (idx < stream.getdents.length && pos + struct_size <= count) {
3062
- var id;
3063
- var type;
3064
- var name = stream.getdents[idx];
3065
- if (name === '.') {
3066
- id = stream.node.id;
3067
- type = 4
3068
- } else if (name === '..') {
3069
- var lookup = FS.lookupPath(stream.path, {parent: true});
3070
- id = lookup.node.id;
3071
- type = 4
3072
- } else {
3073
- var child = FS.lookupNode(stream.node, name);
3074
- id = child.id;
3075
- type = FS.isChrdev(child.mode) ? 2 : FS.isDir(child.mode) ? 4 : FS.isLink(child.mode) ? 10 : 8
3076
- }
3077
- tempI64 =
3078
- [
3079
- id >>> 0,
3080
- (tempDouble = id,
3081
- +Math.abs(tempDouble) >= 1
3082
- ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0
3083
- : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
3084
- : 0)
3085
- ],
3086
- HEAP32[dirp + pos >> 2] = tempI64[0], HEAP32[dirp + pos + 4 >> 2] = tempI64[1];
3087
- tempI64 =
3088
- [
3089
- (idx + 1) * struct_size >>> 0,
3090
- (tempDouble = (idx + 1) * struct_size,
3091
- +Math.abs(tempDouble) >= 1
3092
- ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0
3093
- : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
3094
- : 0)
3095
- ],
3096
- HEAP32[dirp + pos + 8 >> 2] = tempI64[0], HEAP32[dirp + pos + 12 >> 2] = tempI64[1];
3097
- HEAP16[dirp + pos + 16 >> 1] = 280;
3098
- HEAP8[dirp + pos + 18] = type;
3099
- stringToUTF8(name, dirp + pos + 19, 256);
3100
- pos += struct_size;
3101
- idx += 1
3102
- }
3103
- FS.llseek(stream, idx * struct_size, 0);
3104
- return pos
3105
- } catch (e) {
3106
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3107
- return -e.errno
3108
- }
3109
- }
3110
- function ___syscall_ioctl(fd, op, varargs) {
3111
- SYSCALLS.varargs = varargs;
3112
- try {
3113
- var stream = SYSCALLS.getStreamFromFD(fd);
3114
- switch (op) {
3115
- case 21509: {
3116
- if (!stream.tty) return -59;
3117
- return 0
3118
- }
3119
- case 21505: {
3120
- if (!stream.tty) return -59;
3121
- if (stream.tty.ops.ioctl_tcgets) {
3122
- var termios = stream.tty.ops.ioctl_tcgets(stream);
3123
- var argp = syscallGetVarargP();
3124
- HEAP32[argp >> 2] = termios.c_iflag || 0;
3125
- HEAP32[argp + 4 >> 2] = termios.c_oflag || 0;
3126
- HEAP32[argp + 8 >> 2] = termios.c_cflag || 0;
3127
- HEAP32[argp + 12 >> 2] = termios.c_lflag || 0;
3128
- for (var i = 0; i < 32; i++) {
3129
- HEAP8[argp + i + 17] = termios.c_cc[i] || 0
3130
- }
3131
- return 0
3132
- }
3133
- return 0
3134
- }
3135
- case 21510:
3136
- case 21511:
3137
- case 21512: {
3138
- if (!stream.tty) return -59;
3139
- return 0
3140
- }
3141
- case 21506:
3142
- case 21507:
3143
- case 21508: {
3144
- if (!stream.tty) return -59;
3145
- if (stream.tty.ops.ioctl_tcsets) {
3146
- var argp = syscallGetVarargP();
3147
- var c_iflag = HEAP32[argp >> 2];
3148
- var c_oflag = HEAP32[argp + 4 >> 2];
3149
- var c_cflag = HEAP32[argp + 8 >> 2];
3150
- var c_lflag = HEAP32[argp + 12 >> 2];
3151
- var c_cc = [];
3152
- for (var i = 0; i < 32; i++) {
3153
- c_cc.push(HEAP8[argp + i + 17])
3154
- }
3155
- return stream.tty.ops.ioctl_tcsets(stream.tty, op, {c_iflag, c_oflag, c_cflag, c_lflag, c_cc})
3156
- }
3157
- return 0
3158
- }
3159
- case 21519: {
3160
- if (!stream.tty) return -59;
3161
- var argp = syscallGetVarargP();
3162
- HEAP32[argp >> 2] = 0;
3163
- return 0
3164
- }
3165
- case 21520: {
3166
- if (!stream.tty) return -59;
3167
- return -28
3168
- }
3169
- case 21531: {
3170
- var argp = syscallGetVarargP();
3171
- return FS.ioctl(stream, op, argp)
3172
- }
3173
- case 21523: {
3174
- if (!stream.tty) return -59;
3175
- if (stream.tty.ops.ioctl_tiocgwinsz) {
3176
- var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty);
3177
- var argp = syscallGetVarargP();
3178
- HEAP16[argp >> 1] = winsize[0];
3179
- HEAP16[argp + 2 >> 1] = winsize[1]
3180
- }
3181
- return 0
3182
- }
3183
- case 21524: {
3184
- if (!stream.tty) return -59;
3185
- return 0
3186
- }
3187
- case 21515: {
3188
- if (!stream.tty) return -59;
3189
- return 0
3190
- }
3191
- default: return -28
3192
- }
3193
- } catch (e) {
3194
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3195
- return -e.errno
3196
- }
3197
- }
3198
- function ___syscall_lstat64(path, buf) {
3199
- try {
3200
- path = SYSCALLS.getStr(path);
3201
- return SYSCALLS.doStat(FS.lstat, path, buf)
3202
- } catch (e) {
3203
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3204
- return -e.errno
3205
- }
3206
- }
3207
- function ___syscall_newfstatat(dirfd, path, buf, flags) {
3208
- try {
3209
- path = SYSCALLS.getStr(path);
3210
- var nofollow = flags & 256;
3211
- var allowEmpty = flags & 4096;
3212
- flags = flags & ~6400;
3213
- path = SYSCALLS.calculateAt(dirfd, path, allowEmpty);
3214
- return SYSCALLS.doStat(nofollow ? FS.lstat : FS.stat, path, buf)
3215
- } catch (e) {
3216
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3217
- return -e.errno
3218
- }
3219
- }
3220
- function ___syscall_openat(dirfd, path, flags, varargs) {
3221
- SYSCALLS.varargs = varargs;
3222
- try {
3223
- path = SYSCALLS.getStr(path);
3224
- path = SYSCALLS.calculateAt(dirfd, path);
3225
- var mode = varargs ? syscallGetVarargI() : 0;
3226
- return FS.open(path, flags, mode).fd
3227
- } catch (e) {
3228
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3229
- return -e.errno
3230
- }
3231
- }
3232
- function ___syscall_readlinkat(dirfd, path, buf, bufsize) {
3233
- try {
3234
- path = SYSCALLS.getStr(path);
3235
- path = SYSCALLS.calculateAt(dirfd, path);
3236
- if (bufsize <= 0) return -28;
3237
- var ret = FS.readlink(path);
3238
- var len = Math.min(bufsize, lengthBytesUTF8(ret));
3239
- var endChar = HEAP8[buf + len];
3240
- stringToUTF8(ret, buf, bufsize + 1);
3241
- HEAP8[buf + len] = endChar;
3242
- return len
3243
- } catch (e) {
3244
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3245
- return -e.errno
3246
- }
3247
- }
3248
- function ___syscall_renameat(olddirfd, oldpath, newdirfd, newpath) {
3249
- try {
3250
- oldpath = SYSCALLS.getStr(oldpath);
3251
- newpath = SYSCALLS.getStr(newpath);
3252
- oldpath = SYSCALLS.calculateAt(olddirfd, oldpath);
3253
- newpath = SYSCALLS.calculateAt(newdirfd, newpath);
3254
- FS.rename(oldpath, newpath);
3255
- return 0
3256
- } catch (e) {
3257
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3258
- return -e.errno
3259
- }
3260
- }
3261
- function ___syscall_rmdir(path) {
3262
- try {
3263
- path = SYSCALLS.getStr(path);
3264
- FS.rmdir(path);
3265
- return 0
3266
- } catch (e) {
3267
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3268
- return -e.errno
3269
- }
3270
- }
3271
- function ___syscall_stat64(path, buf) {
3272
- try {
3273
- path = SYSCALLS.getStr(path);
3274
- return SYSCALLS.doStat(FS.stat, path, buf)
3275
- } catch (e) {
3276
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3277
- return -e.errno
3278
- }
3279
- }
3280
- function ___syscall_statfs64(path, size, buf) {
3281
- try {
3282
- path = SYSCALLS.getStr(path);
3283
- HEAP32[buf + 4 >> 2] = 4096;
3284
- HEAP32[buf + 40 >> 2] = 4096;
3285
- HEAP32[buf + 8 >> 2] = 1e6;
3286
- HEAP32[buf + 12 >> 2] = 5e5;
3287
- HEAP32[buf + 16 >> 2] = 5e5;
3288
- HEAP32[buf + 20 >> 2] = FS.nextInode;
3289
- HEAP32[buf + 24 >> 2] = 1e6;
3290
- HEAP32[buf + 28 >> 2] = 42;
3291
- HEAP32[buf + 44 >> 2] = 2;
3292
- HEAP32[buf + 36 >> 2] = 255;
3293
- return 0
3294
- } catch (e) {
3295
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3296
- return -e.errno
3297
- }
3298
- }
3299
- function ___syscall_unlinkat(dirfd, path, flags) {
3300
- try {
3301
- path = SYSCALLS.getStr(path);
3302
- path = SYSCALLS.calculateAt(dirfd, path);
3303
- if (flags === 0) {
3304
- FS.unlink(path)
3305
- } else if (flags === 512) {
3306
- FS.rmdir(path)
3307
- } else {
3308
- abort('Invalid flags passed to unlinkat')
3309
- }
3310
- return 0
3311
- } catch (e) {
3312
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3313
- return -e.errno
3314
- }
3315
- }
3316
- var __abort_js = () => {
3317
- abort('')
3318
- };
3319
- var nowIsMonotonic = 1;
3320
- var __emscripten_get_now_is_monotonic = () => nowIsMonotonic;
3321
- var __emscripten_memcpy_js = (dest, src, num) => HEAPU8.copyWithin(dest, src, src + num);
3322
- var runtimeKeepaliveCounter = 0;
3323
- var __emscripten_runtime_keepalive_clear = () => {
3324
- noExitRuntime = false;
3325
- runtimeKeepaliveCounter = 0
3326
- };
3327
- var convertI32PairToI53Checked = (lo, hi) => hi + 2097152 >>> 0 < 4194305 - !!lo ? (lo >>> 0) + hi * 4294967296 : NaN;
3328
- function __gmtime_js(time_low, time_high, tmPtr) {
3329
- var time = convertI32PairToI53Checked(time_low, time_high);
3330
- var date = new Date(time * 1e3);
3331
- HEAP32[tmPtr >> 2] = date.getUTCSeconds();
3332
- HEAP32[tmPtr + 4 >> 2] = date.getUTCMinutes();
3333
- HEAP32[tmPtr + 8 >> 2] = date.getUTCHours();
3334
- HEAP32[tmPtr + 12 >> 2] = date.getUTCDate();
3335
- HEAP32[tmPtr + 16 >> 2] = date.getUTCMonth();
3336
- HEAP32[tmPtr + 20 >> 2] = date.getUTCFullYear() - 1900;
3337
- HEAP32[tmPtr + 24 >> 2] = date.getUTCDay();
3338
- var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0);
3339
- var yday = (date.getTime() - start) / (1e3 * 60 * 60 * 24) | 0;
3340
- HEAP32[tmPtr + 28 >> 2] = yday
3341
- }
3342
- var isLeapYear = year => year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
3343
- var MONTH_DAYS_LEAP_CUMULATIVE = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];
3344
- var MONTH_DAYS_REGULAR_CUMULATIVE = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
3345
- var ydayFromDate = date => {
3346
- var leap = isLeapYear(date.getFullYear());
3347
- var monthDaysCumulative = leap ? MONTH_DAYS_LEAP_CUMULATIVE : MONTH_DAYS_REGULAR_CUMULATIVE;
3348
- var yday = monthDaysCumulative[date.getMonth()] + date.getDate() - 1;
3349
- return yday
3350
- };
3351
- function __localtime_js(time_low, time_high, tmPtr) {
3352
- var time = convertI32PairToI53Checked(time_low, time_high);
3353
- var date = new Date(time * 1e3);
3354
- HEAP32[tmPtr >> 2] = date.getSeconds();
3355
- HEAP32[tmPtr + 4 >> 2] = date.getMinutes();
3356
- HEAP32[tmPtr + 8 >> 2] = date.getHours();
3357
- HEAP32[tmPtr + 12 >> 2] = date.getDate();
3358
- HEAP32[tmPtr + 16 >> 2] = date.getMonth();
3359
- HEAP32[tmPtr + 20 >> 2] = date.getFullYear() - 1900;
3360
- HEAP32[tmPtr + 24 >> 2] = date.getDay();
3361
- var yday = ydayFromDate(date) | 0;
3362
- HEAP32[tmPtr + 28 >> 2] = yday;
3363
- HEAP32[tmPtr + 36 >> 2] = -(date.getTimezoneOffset() * 60);
3364
- var start = new Date(date.getFullYear(), 0, 1);
3365
- var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset();
3366
- var winterOffset = start.getTimezoneOffset();
3367
- var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset)) | 0;
3368
- HEAP32[tmPtr + 32 >> 2] = dst
3369
- }
3370
- function __mmap_js(len, prot, flags, fd, offset_low, offset_high, allocated, addr) {
3371
- var offset = convertI32PairToI53Checked(offset_low, offset_high);
3372
- try {
3373
- if (isNaN(offset)) return 61;
3374
- var stream = SYSCALLS.getStreamFromFD(fd);
3375
- var res = FS.mmap(stream, len, offset, prot, flags);
3376
- var ptr = res.ptr;
3377
- HEAP32[allocated >> 2] = res.allocated;
3378
- HEAPU32[addr >> 2] = ptr;
3379
- return 0
3380
- } catch (e) {
3381
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3382
- return -e.errno
3383
- }
3384
- }
3385
- function __munmap_js(addr, len, prot, flags, fd, offset_low, offset_high) {
3386
- var offset = convertI32PairToI53Checked(offset_low, offset_high);
3387
- try {
3388
- var stream = SYSCALLS.getStreamFromFD(fd);
3389
- if (prot & 2) {
3390
- SYSCALLS.doMsync(addr, stream, len, flags, offset)
3391
- }
3392
- } catch (e) {
3393
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3394
- return -e.errno
3395
- }
3396
- }
3397
- var timers = {};
3398
- var handleException = e => {
3399
- if (e instanceof ExitStatus || e == 'unwind') {
3400
- return EXITSTATUS
3401
- }
3402
- quit_(1, e)
3403
- };
3404
- var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0;
3405
- var _proc_exit = code => {
3406
- EXITSTATUS = code;
3407
- if (!keepRuntimeAlive()) {
3408
- Module['onExit']?.(code);
3409
- ABORT = true
3410
- }
3411
- quit_(code, new ExitStatus(code))
3412
- };
3413
- var exitJS = (status, implicit) => {
3414
- EXITSTATUS = status;
3415
- _proc_exit(status)
3416
- };
3417
- var _exit = exitJS;
3418
- var maybeExit = () => {
3419
- if (!keepRuntimeAlive()) {
3420
- try {
3421
- _exit(EXITSTATUS)
3422
- } catch (e) {
3423
- handleException(e)
3424
- }
3425
- }
3426
- };
3427
- var callUserCallback = func => {
3428
- if (ABORT) {
3429
- return
3430
- }
3431
- try {
3432
- func();
3433
- maybeExit()
3434
- } catch (e) {
3435
- handleException(e)
3436
- }
3437
- };
3438
- var _emscripten_get_now = () => performance.now();
3439
- var __setitimer_js = (which, timeout_ms) => {
3440
- if (timers[which]) {
3441
- clearTimeout(timers[which].id);
3442
- delete timers[which]
3443
- }
3444
- if (!timeout_ms) return 0;
3445
- var id = setTimeout(() => {
3446
- delete timers[which];
3447
- callUserCallback(() => __emscripten_timeout(which, _emscripten_get_now()))
3448
- }, timeout_ms);
3449
- timers[which] = {id, timeout_ms};
3450
- return 0
3451
- };
3452
- var __tzset_js = (timezone, daylight, std_name, dst_name) => {
3453
- var currentYear = (new Date).getFullYear();
3454
- var winter = new Date(currentYear, 0, 1);
3455
- var summer = new Date(currentYear, 6, 1);
3456
- var winterOffset = winter.getTimezoneOffset();
3457
- var summerOffset = summer.getTimezoneOffset();
3458
- var stdTimezoneOffset = Math.max(winterOffset, summerOffset);
3459
- HEAPU32[timezone >> 2] = stdTimezoneOffset * 60;
3460
- HEAP32[daylight >> 2] = Number(winterOffset != summerOffset);
3461
- var extractZone = timezoneOffset => {
3462
- var sign = timezoneOffset >= 0 ? '-' : '+';
3463
- var absOffset = Math.abs(timezoneOffset);
3464
- var hours = String(Math.floor(absOffset / 60)).padStart(2, '0');
3465
- var minutes = String(absOffset % 60).padStart(2, '0');
3466
- return `UTC${sign}${hours}${minutes}`
3467
- };
3468
- var winterName = extractZone(winterOffset);
3469
- var summerName = extractZone(summerOffset);
3470
- if (summerOffset < winterOffset) {
3471
- stringToUTF8(winterName, std_name, 17);
3472
- stringToUTF8(summerName, dst_name, 17)
3473
- } else {
3474
- stringToUTF8(winterName, dst_name, 17);
3475
- stringToUTF8(summerName, std_name, 17)
3476
- }
3477
- };
3478
- var _emscripten_date_now = () => Date.now();
3479
- var getHeapMax = () => 2147483648;
3480
- var _emscripten_get_heap_max = () => getHeapMax();
3481
- var growMemory = size => {
3482
- var b = wasmMemory.buffer;
3483
- var pages = (size - b.byteLength + 65535) / 65536 | 0;
3484
- try {
3485
- wasmMemory.grow(pages);
3486
- updateMemoryViews();
3487
- return 1
3488
- } catch (e) {
3489
- }
3490
- };
3491
- var _emscripten_resize_heap = requestedSize => {
3492
- var oldSize = HEAPU8.length;
3493
- requestedSize >>>= 0;
3494
- var maxHeapSize = getHeapMax();
3495
- if (requestedSize > maxHeapSize) {
3496
- return false
3497
- }
3498
- for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {
3499
- var overGrownHeapSize = oldSize * (1 + .2 / cutDown);
3500
- overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296);
3501
- var newSize = Math.min(maxHeapSize, alignMemory(Math.max(requestedSize, overGrownHeapSize), 65536));
3502
- var replacement = growMemory(newSize);
3503
- if (replacement) {
3504
- return true
3505
- }
3506
- }
3507
- return false
3508
- };
3509
- var ENV = {};
3510
- var getExecutableName = () => thisProgram || './this.program';
3511
- var getEnvStrings = () => {
3512
- if (!getEnvStrings.strings) {
3513
- var lang =
3514
- (typeof navigator == 'object' && navigator.languages && navigator.languages[0] || 'C').replace('-', '_') +
3515
- '.UTF-8';
3516
- var env = {
3517
- USER: 'web_user',
3518
- LOGNAME: 'web_user',
3519
- PATH: '/',
3520
- PWD: '/',
3521
- HOME: '/home/web_user',
3522
- LANG: lang,
3523
- _: getExecutableName()
3524
- };
3525
- for (var x in ENV) {
3526
- if (ENV[x] === undefined)
3527
- delete env[x];
3528
- else
3529
- env[x] = ENV[x]
3530
- }
3531
- var strings = [];
3532
- for (var x in env) {
3533
- strings.push(`${x}=${env[x]}`)
3534
- }
3535
- getEnvStrings.strings = strings
3536
- }
3537
- return getEnvStrings.strings
3538
- };
3539
- var stringToAscii = (str, buffer) => {
3540
- for (var i = 0; i < str.length; ++i) {
3541
- HEAP8[buffer++] = str.charCodeAt(i)
3542
- }
3543
- HEAP8[buffer] = 0
3544
- };
3545
- var _environ_get = (__environ, environ_buf) => {
3546
- var bufSize = 0;
3547
- getEnvStrings().forEach((string, i) => {
3548
- var ptr = environ_buf + bufSize;
3549
- HEAPU32[__environ + i * 4 >> 2] = ptr;
3550
- stringToAscii(string, ptr);
3551
- bufSize += string.length + 1
3552
- });
3553
- return 0
3554
- };
3555
- var _environ_sizes_get = (penviron_count, penviron_buf_size) => {
3556
- var strings = getEnvStrings();
3557
- HEAPU32[penviron_count >> 2] = strings.length;
3558
- var bufSize = 0;
3559
- strings.forEach(string => bufSize += string.length + 1);
3560
- HEAPU32[penviron_buf_size >> 2] = bufSize;
3561
- return 0
3562
- };
3563
- function _fd_close(fd) {
3564
- try {
3565
- var stream = SYSCALLS.getStreamFromFD(fd);
3566
- FS.close(stream);
3567
- return 0
3568
- } catch (e) {
3569
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3570
- return e.errno
3571
- }
3572
- }
3573
- function _fd_fdstat_get(fd, pbuf) {
3574
- try {
3575
- var rightsBase = 0;
3576
- var rightsInheriting = 0;
3577
- var flags = 0;
3578
- {
3579
- var stream = SYSCALLS.getStreamFromFD(fd);
3580
- var type = stream.tty ? 2 : FS.isDir(stream.mode) ? 3 : FS.isLink(stream.mode) ? 7 : 4
3581
- }
3582
- HEAP8[pbuf] = type;
3583
- HEAP16[pbuf + 2 >> 1] = flags;
3584
- tempI64 =
3585
- [
3586
- rightsBase >>> 0,
3587
- (tempDouble = rightsBase,
3588
- +Math.abs(tempDouble) >= 1
3589
- ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0
3590
- : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
3591
- : 0)
3592
- ],
3593
- HEAP32[pbuf + 8 >> 2] = tempI64[0], HEAP32[pbuf + 12 >> 2] = tempI64[1];
3594
- tempI64 =
3595
- [
3596
- rightsInheriting >>> 0,
3597
- (tempDouble = rightsInheriting,
3598
- +Math.abs(tempDouble) >= 1
3599
- ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0
3600
- : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
3601
- : 0)
3602
- ],
3603
- HEAP32[pbuf + 16 >> 2] = tempI64[0], HEAP32[pbuf + 20 >> 2] = tempI64[1];
3604
- return 0
3605
- } catch (e) {
3606
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3607
- return e.errno
3608
- }
3609
- }
3610
- var doReadv = (stream, iov, iovcnt, offset) => {
3611
- var ret = 0;
3612
- for (var i = 0; i < iovcnt; i++) {
3613
- var ptr = HEAPU32[iov >> 2];
3614
- var len = HEAPU32[iov + 4 >> 2];
3615
- iov += 8;
3616
- var curr = FS.read(stream, HEAP8, ptr, len, offset);
3617
- if (curr < 0) return -1;
3618
- ret += curr;
3619
- if (curr < len) break;
3620
- if (typeof offset != 'undefined') {
3621
- offset += curr
3622
- }
3623
- }
3624
- return ret
3625
- };
3626
- function _fd_pread(fd, iov, iovcnt, offset_low, offset_high, pnum) {
3627
- var offset = convertI32PairToI53Checked(offset_low, offset_high);
3628
- try {
3629
- if (isNaN(offset)) return 61;
3630
- var stream = SYSCALLS.getStreamFromFD(fd);
3631
- var num = doReadv(stream, iov, iovcnt, offset);
3632
- HEAPU32[pnum >> 2] = num;
3633
- return 0
3634
- } catch (e) {
3635
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3636
- return e.errno
3637
- }
3638
- }
3639
- function _fd_read(fd, iov, iovcnt, pnum) {
3640
- try {
3641
- var stream = SYSCALLS.getStreamFromFD(fd);
3642
- var num = doReadv(stream, iov, iovcnt);
3643
- HEAPU32[pnum >> 2] = num;
3644
- return 0
3645
- } catch (e) {
3646
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3647
- return e.errno
3648
- }
3649
- }
3650
- function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {
3651
- var offset = convertI32PairToI53Checked(offset_low, offset_high);
3652
- try {
3653
- if (isNaN(offset)) return 61;
3654
- var stream = SYSCALLS.getStreamFromFD(fd);
3655
- FS.llseek(stream, offset, whence);
3656
- tempI64 =
3657
- [
3658
- stream.position >>> 0,
3659
- (tempDouble = stream.position,
3660
- +Math.abs(tempDouble) >= 1
3661
- ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0
3662
- : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
3663
- : 0)
3664
- ],
3665
- HEAP32[newOffset >> 2] = tempI64[0], HEAP32[newOffset + 4 >> 2] = tempI64[1];
3666
- if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null;
3667
- return 0
3668
- } catch (e) {
3669
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3670
- return e.errno
3671
- }
3672
- }
3673
- var doWritev = (stream, iov, iovcnt, offset) => {
3674
- var ret = 0;
3675
- for (var i = 0; i < iovcnt; i++) {
3676
- var ptr = HEAPU32[iov >> 2];
3677
- var len = HEAPU32[iov + 4 >> 2];
3678
- iov += 8;
3679
- var curr = FS.write(stream, HEAP8, ptr, len, offset);
3680
- if (curr < 0) return -1;
3681
- ret += curr;
3682
- if (curr < len) {
3683
- break
3684
- }
3685
- if (typeof offset != 'undefined') {
3686
- offset += curr
3687
- }
3688
- }
3689
- return ret
3690
- };
3691
- function _fd_write(fd, iov, iovcnt, pnum) {
3692
- try {
3693
- var stream = SYSCALLS.getStreamFromFD(fd);
3694
- var num = doWritev(stream, iov, iovcnt);
3695
- HEAPU32[pnum >> 2] = num;
3696
- return 0
3697
- } catch (e) {
3698
- if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3699
- return e.errno
3700
- }
3701
- }
3702
- var stackAlloc = sz => __emscripten_stack_alloc(sz);
3703
- var stringToUTF8OnStack = str => {
3704
- var size = lengthBytesUTF8(str) + 1;
3705
- var ret = stackAlloc(size);
3706
- stringToUTF8(str, ret, size);
3707
- return ret
3708
- };
3709
- FS.createPreloadedFile = FS_createPreloadedFile;
3710
- FS.staticInit();
3711
- MEMFS.doesNotExistError = new FS.ErrnoError(44);
3712
- MEMFS.doesNotExistError.stack = '<generic error, no stack>';
3713
- if (ENVIRONMENT_IS_NODE) {
3714
- NODEFS.staticInit()
3715
- }
3716
- if (!ENVIRONMENT_IS_NODE) {
3717
- throw new Error('NODERAWFS is currently only supported on Node.js environment.')
3718
- }
3719
- var _wrapNodeError = function(func) {
3720
- return function(...args) {
3721
- try {
3722
- return func(...args)
3723
- } catch (e) {
3724
- if (e.code) {
3725
- throw new FS.ErrnoError(ERRNO_CODES[e.code])
3726
- }
3727
- throw e
3728
- }
3729
- }
3730
- };
3731
- var VFS = Object.assign({}, FS);
3732
- for (var _key in NODERAWFS) {
3733
- FS[_key] = _wrapNodeError(NODERAWFS[_key])
3734
- }
3735
- var wasmImports = {
3736
- E: ___call_sighandler,
3737
- d: ___cxa_throw,
3738
- l: ___syscall_chdir,
3739
- m: ___syscall_faccessat,
3740
- i: ___syscall_fcntl64,
3741
- N: ___syscall_fstat64,
3742
- J: ___syscall_getcwd,
3743
- D: ___syscall_getdents64,
3744
- v: ___syscall_ioctl,
3745
- K: ___syscall_lstat64,
3746
- L: ___syscall_newfstatat,
3747
- h: ___syscall_openat,
3748
- C: ___syscall_readlinkat,
3749
- A: ___syscall_renameat,
3750
- B: ___syscall_rmdir,
3751
- M: ___syscall_stat64,
3752
- y: ___syscall_statfs64,
3753
- f: ___syscall_unlinkat,
3754
- n: __abort_js,
3755
- O: __emscripten_get_now_is_monotonic,
3756
- k: __emscripten_memcpy_js,
3757
- F: __emscripten_runtime_keepalive_clear,
3758
- s: __gmtime_js,
3759
- t: __localtime_js,
3760
- p: __mmap_js,
3761
- r: __munmap_js,
3762
- e: __setitimer_js,
3763
- G: __tzset_js,
3764
- P: _emscripten_date_now,
3765
- x: _emscripten_get_heap_max,
3766
- j: _emscripten_get_now,
3767
- w: _emscripten_resize_heap,
3768
- q: _environ_get,
3769
- z: _environ_sizes_get,
3770
- a: _exit,
3771
- b: _fd_close,
3772
- I: _fd_fdstat_get,
3773
- o: _fd_pread,
3774
- g: _fd_read,
3775
- u: _fd_seek,
3776
- c: _fd_write,
3777
- H: _proc_exit
3778
- };
3779
- var wasmExports = createWasm();
3780
- var ___wasm_call_ctors = () => (___wasm_call_ctors = wasmExports['R'])();
3781
- var _main = Module['_main'] = (a0, a1) => (_main = Module['_main'] = wasmExports['T'])(a0, a1);
3782
- var _emscripten_builtin_memalign = (a0, a1) => (_emscripten_builtin_memalign = wasmExports['U'])(a0, a1);
3783
- var __emscripten_timeout = (a0, a1) => (__emscripten_timeout = wasmExports['V'])(a0, a1);
3784
- var __emscripten_stack_alloc = a0 => (__emscripten_stack_alloc = wasmExports['W'])(a0);
3785
- var calledRun;
3786
- dependenciesFulfilled = function runCaller() {
3787
- if (!calledRun) run();
3788
- if (!calledRun) dependenciesFulfilled = runCaller
3789
- };
3790
- function callMain(args = []) {
3791
- var entryFunction = _main;
3792
- args.unshift(thisProgram);
3793
- var argc = args.length;
3794
- var argv = stackAlloc((argc + 1) * 4);
3795
- var argv_ptr = argv;
3796
- args.forEach(arg => {
3797
- HEAPU32[argv_ptr >> 2] = stringToUTF8OnStack(arg);
3798
- argv_ptr += 4
3799
- });
3800
- HEAPU32[argv_ptr >> 2] = 0;
3801
- try {
3802
- var ret = entryFunction(argc, argv);
3803
- exitJS(ret, true);
3804
- return ret
3805
- } catch (e) {
3806
- return handleException(e)
3807
- }
3808
- }
3809
- function run(args = arguments_) {
3810
- if (runDependencies > 0) {
3811
- return
3812
- }
3813
- preRun();
3814
- if (runDependencies > 0) {
3815
- return
3816
- }
3817
- function doRun() {
3818
- if (calledRun) return;
3819
- calledRun = true;
3820
- Module['calledRun'] = true;
3821
- if (ABORT) return;
3822
- initRuntime();
3823
- preMain();
3824
- Module['onRuntimeInitialized']?.();
3825
- if (shouldRunNow) callMain(args);
3826
- postRun()
3827
- }
3828
- if (Module['setStatus']) {
3829
- Module['setStatus']('Running...');
3830
- setTimeout(() => {
3831
- setTimeout(() => Module['setStatus'](''), 1);
3832
- doRun()
3833
- }, 1)
3834
- } else {
3835
- doRun()
3836
- }
3837
- }
3838
- if (Module['preInit']) {
3839
- if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];
3840
- while (Module['preInit'].length > 0) {
3841
- Module['preInit'].pop()()
3842
- }
3843
- }
3844
- var shouldRunNow = true;
3845
- if (Module['noInitialRun']) shouldRunNow = false;
3846
- run();
2
+ var Module=typeof Module!="undefined"?Module:{};var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=true;if(ENVIRONMENT_IS_NODE){}Module.preRun=function customPreRun(){ENV.PWD=process.cwd()};var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");scriptDirectory=__dirname+"/";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);var ret=fs.readFileSync(filename);return ret};readAsync=(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return new Promise((resolve,reject)=>{fs.readFile(filename,binary?undefined:"utf8",(err,data)=>{if(err)reject(err);else resolve(binary?data.buffer:data)})})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];var wasmBinary=Module["wasmBinary"];var wasmMemory;var ABORT=false;var EXITSTATUS;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);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;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var dataURIPrefix="data:application/octet-stream;base64,";var isDataURI=filename=>filename.startsWith(dataURIPrefix);var isFileURI=filename=>filename.startsWith("file://");function findWasmBinary(){var f="clang-format-cli.wasm";if(!isDataURI(f)){return locateFile(f)}return f}var wasmBinaryFile;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"}function getBinaryPromise(binaryFile){if(!wasmBinary){return readAsync(binaryFile).then(response=>new Uint8Array(response),()=>getBinarySync(binaryFile))}return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).then(receiver,reason=>{err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}return instantiateArrayBuffer(binaryFile,imports,callback)}function getWasmImports(){return{a:wasmImports}}function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["R"];updateMemoryViews();wasmTable=wasmExports["T"];addOnInit(wasmExports["S"]);removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);return false}}wasmBinaryFile??=findWasmBinary();instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult);return{}}var tempDouble;var tempI64;var ASM_CONSTS={1151240:()=>process.platform=="win32"?1:0};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 noExitRuntime=Module["noExitRuntime"]||true;var wasmTable;var getWasmTableEntry=funcPtr=>wasmTable.get(funcPtr);var ___call_sighandler=(fp,sig)=>getWasmTableEntry(fp)(sig);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 exceptionLast=0;var uncaughtExceptionCount=0;var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast};var PATH={isAbs:path=>nodePath["isAbsolute"](path),normalize:path=>nodePath["normalize"](path),dirname:path=>nodePath["dirname"](path),basename:path=>nodePath["basename"](path),join:(...args)=>nodePath["join"](...args),join2:(l,r)=>nodePath["join"](l,r)};var initRandomFill=()=>{if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){return view=>crypto.getRandomValues(view)}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");var randomFillSync=crypto_module["randomFillSync"];if(randomFillSync){return view=>crypto_module["randomFillSync"](view)}var randomBytes=crypto_module["randomBytes"];return view=>(view.set(randomBytes(view.byteLength)),view)}catch(e){}}abort("initRandomDevice")};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH_FS={resolve:(...paths)=>{paths.unshift(FS.cwd());return nodePath["posix"]["resolve"](...paths)},relative:(from,to)=>nodePath["posix"]["relative"](from||FS.cwd(),to||FS.cwd())};var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder:undefined;var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead=NaN)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;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 FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i<str.length;++i){var c=str.charCodeAt(i);if(c<=127){len++}else if(c<=2047){len+=2}else if(c>=55296&&c<=57343){len+=4;++i}else{len+=3}}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.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}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}}heap[outIdx]=0;return outIdx-startIdx};function 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(!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;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=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.timestamp=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&&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&&tty.output.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var zeroMemory=(address,size)=>{HEAPU8.fill(0,address,address+size)};var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var mmapAlloc=size=>{size=alignMemory(size,65536);var ptr=_emscripten_builtin_memalign(65536,size);if(ptr)zeroMemory(ptr,size);return ptr};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16384|511,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,allocate:MEMFS.stream_ops.allocate,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.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}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<CAPACITY_DOUBLING_MAX?2:1.125)>>>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.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw MEMFS.doesNotExistError},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp},unlink(parent,name){delete parent.contents[name];parent.timestamp=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.timestamp=Date.now()},readdir(node){var entries=[".",".."];for(var key of Object.keys(node.contents)){entries.push(key)}return entries},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);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}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.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}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},allocate(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},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&&contents.buffer===HEAP8.buffer){allocated=false;ptr=contents.byteOffset}else{allocated=true;ptr=mmapAlloc(length);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=Array.prototype.slice.call(contents,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 asyncLoad=(url,onload,onerror,noRunDep)=>{var dep=!noRunDep?getUniqueRunDependency(`al ${url}`):"";readAsync(url).then(arrayBuffer=>{onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},err=>{if(onerror){onerror()}else{throw`Loading data file "${url}" failed.`}});if(dep)addRunDependency(dep)};var FS_createDataFile=(parent,name,fileData,canRead,canWrite,canOwn)=>{FS.createDataFile(parent,name,fileData,canRead,canWrite,canOwn)};var preloadPlugins=Module["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,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 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 NODEFS={isWindows:false,staticInit(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process.binding("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],256:flags["O_NOCTTY"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"],131072:flags["O_NOFOLLOW"]}},convertNodeCode(e){var code=e.code;return ERRNO_CODES[code]},tryFSOperation(f){try{return f()}catch(e){if(!e.code)throw e;if(e.code==="UNKNOWN")throw new FS.ErrnoError(28);throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},mount(mount){return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(28)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode(path){var stat;return NODEFS.tryFSOperation(()=>{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode|=(stat.mode&292)>>2}return stat.mode})},realPath(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join(...parts)},flagsForNode(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;flags&=~65536;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(flags){throw new FS.ErrnoError(28)}return newFlags},node_ops:{getattr(node){var path=NODEFS.realPath(node);var stat;NODEFS.tryFSOperation(()=>stat=fs.lstatSync(path));if(NODEFS.isWindows){if(!stat.blksize){stat.blksize=4096}if(!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}stat.mode|=(stat.mode&292)>>2}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr(node,attr){var path=NODEFS.realPath(node);NODEFS.tryFSOperation(()=>{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}})},lookup(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);NODEFS.tryFSOperation(()=>{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}});return node},rename(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);NODEFS.tryFSOperation(()=>fs.renameSync(oldPath,newPath));oldNode.name=newName},unlink(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);NODEFS.tryFSOperation(()=>fs.unlinkSync(path))},rmdir(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);NODEFS.tryFSOperation(()=>fs.rmdirSync(path))},readdir(node){var path=NODEFS.realPath(node);return NODEFS.tryFSOperation(()=>fs.readdirSync(path))},symlink(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);NODEFS.tryFSOperation(()=>fs.symlinkSync(oldPath,newPath))},readlink(node){var path=NODEFS.realPath(node);return NODEFS.tryFSOperation(()=>fs.readlinkSync(path))}},stream_ops:{open(stream){var path=NODEFS.realPath(stream.node);NODEFS.tryFSOperation(()=>{if(FS.isFile(stream.node.mode)){stream.shared.refcount=1;stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}})},close(stream){NODEFS.tryFSOperation(()=>{if(FS.isFile(stream.node.mode)&&stream.nfd&&--stream.shared.refcount===0){fs.closeSync(stream.nfd)}})},dup(stream){stream.shared.refcount++},read(stream,buffer,offset,length,position){if(length===0)return 0;return NODEFS.tryFSOperation(()=>fs.readSync(stream.nfd,new Int8Array(buffer.buffer,offset,length),0,length,position))},write(stream,buffer,offset,length,position){return NODEFS.tryFSOperation(()=>fs.writeSync(stream.nfd,new Int8Array(buffer.buffer,offset,length),0,length,position))},llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){NODEFS.tryFSOperation(()=>{var stat=fs.fstatSync(stream.nfd);position+=stat.size})}}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=mmapAlloc(length);NODEFS.stream_ops.read(stream,HEAP8,ptr,length,position);return{ptr,allocated:true}},msync(stream,buffer,offset,length,mmapFlags){NODEFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var NODERAWFS={lookup(parent,name){return FS.lookupPath(`${parent.path}/${name}`).node},lookupPath(path,opts={}){if(opts.parent){path=nodePath.dirname(path)}var st=fs.lstatSync(path);var mode=NODEFS.getMode(path);return{path,node:{id:st.ino,mode,node_ops:NODERAWFS,path}}},createStandardStreams(){FS.createStream({nfd:0,position:0,path:"",flags:0,tty:true,seekable:false},0);for(var i=1;i<3;i++){FS.createStream({nfd:i,position:0,path:"",flags:577,tty:true,seekable:false},i)}},cwd(){return process.cwd()},chdir(...args){process.chdir(...args)},mknod(path,mode){if(FS.isDir(path)){fs.mkdirSync(path,mode)}else{fs.writeFileSync(path,"",{mode})}},mkdir(...args){fs.mkdirSync(...args)},symlink(...args){fs.symlinkSync(...args)},rename(...args){fs.renameSync(...args)},rmdir(...args){fs.rmdirSync(...args)},readdir(...args){return[".",".."].concat(fs.readdirSync(...args))},unlink(...args){fs.unlinkSync(...args)},readlink(...args){return fs.readlinkSync(...args)},stat(...args){return fs.statSync(...args)},lstat(...args){return fs.lstatSync(...args)},chmod(...args){fs.chmodSync(...args)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);fs.fchmodSync(stream.nfd,mode)},chown(...args){fs.chownSync(...args)},fchown(fd,owner,group){var stream=FS.getStreamChecked(fd);fs.fchownSync(stream.nfd,owner,group)},truncate(...args){fs.truncateSync(...args)},ftruncate(fd,len){if(len<0){throw new FS.ErrnoError(28)}var stream=FS.getStreamChecked(fd);fs.ftruncateSync(stream.nfd,len)},utime(path,atime,mtime){if(atime==-1||mtime==-1){var st=fs.statSync(path);if(atime==-1)atime=st.atimeMs;if(mtime==-1)mtime=st.mtimeMs}fs.utimesSync(path,atime/1e3,mtime/1e3)},open(path,flags,mode){if(typeof flags=="string"){flags=FS_modeStringToFlags(flags)}var pathTruncated=path.split("/").map(s=>s.substr(0,255)).join("/");var nfd=fs.openSync(pathTruncated,NODEFS.flagsForNode(flags),mode);var st=fs.fstatSync(nfd);if(flags&65536&&!st.isDirectory()){fs.closeSync(nfd);throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}var newMode=NODEFS.getMode(pathTruncated);var node={id:st.ino,mode:newMode,node_ops:NODERAWFS,path};return FS.createStream({nfd,position:0,path,flags,node,seekable:true})},createStream(stream,fd){var rtn=VFS.createStream(stream,fd);if(typeof rtn.shared.refcnt=="undefined"){rtn.shared.refcnt=1}else{rtn.shared.refcnt++}return rtn},close(stream){VFS.closeStream(stream.fd);if(!stream.stream_ops&&--stream.shared.refcnt===0){fs.closeSync(stream.nfd)}},llseek(stream,offset,whence){if(stream.stream_ops){return VFS.llseek(stream,offset,whence)}var position=offset;if(whence===1){position+=stream.position}else if(whence===2){position+=fs.fstatSync(stream.nfd).size}else if(whence!==0){throw new FS.ErrnoError(28)}if(position<0){throw new FS.ErrnoError(28)}stream.position=position;return position},read(stream,buffer,offset,length,position){if(stream.stream_ops){return VFS.read(stream,buffer,offset,length,position)}var seeking=typeof position!="undefined";if(!seeking&&stream.seekable)position=stream.position;var bytesRead=fs.readSync(stream.nfd,new Int8Array(buffer.buffer,offset,length),0,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write(stream,buffer,offset,length,position){if(stream.stream_ops){return VFS.write(stream,buffer,offset,length,position)}if(stream.flags&+"1024"){FS.llseek(stream,0,+"2")}var seeking=typeof position!="undefined";if(!seeking&&stream.seekable)position=stream.position;var bytesWritten=fs.writeSync(stream.nfd,new Int8Array(buffer.buffer,offset,length),0,length,position);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate(){throw new FS.ErrnoError(138)},mmap(stream,length,position,prot,flags){if(!length){throw new FS.ErrnoError(28)}if(stream.stream_ops){return VFS.mmap(stream,length,position,prot,flags)}var ptr=mmapAlloc(length);FS.read(stream,HEAP8,ptr,length,position);return{ptr,allocated:true}},msync(stream,buffer,offset,length,mmapFlags){if(stream.stream_ops){return VFS.msync(stream,buffer,offset,length,mmapFlags)}FS.write(stream,buffer,0,length,offset);return 0},ioctl(){throw new FS.ErrnoError(59)}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:class{name="ErrnoError";constructor(errno){this.errno=errno}},filesystems:null,syncFSRequests:0,readFiles:{},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}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={}){path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}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}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count+1});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},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}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){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){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},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){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},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)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},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);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);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||name==="."||name===".."){throw new FS.ErrnoError(28)}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)},create(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];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;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.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 PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat(path){return FS.stat(path,true)},chmod(path,mode,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.chmod(stream.node,mode)},chown(path,uid,gid,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.chown(stream.node,uid,gid)},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}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}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)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open(path,flags,mode){if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS_modeStringToFlags(flags):flags;if(flags&64){mode=typeof mode=="undefined"?438:mode;mode=mode&4095|32768}else{mode=0}var node;if(typeof path=="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,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(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){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},allocate(stream,offset,length){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},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){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 ret;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"){ret=UTF8ArrayToString(buf)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else 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){randomLeft=randomFill(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",16384|511,73);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}};ret.parent=ret;return ret}};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)},staticInit(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS,NODEFS}},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 i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}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){}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;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}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===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=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.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!="undefined"){throw new Error("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);obj.usedBytes=obj.contents.length}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 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);if(contents.slice){for(var i=0;i<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var 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,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}};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";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 PATH.join2(dir,path)},doStat(func,path,buf){var stat=func(path);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;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+24>>2]=tempI64[0],HEAP32[buf+28>>2]=tempI64[1];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();tempI64=[Math.floor(atime/1e3)>>>0,(tempDouble=Math.floor(atime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;tempI64=[Math.floor(mtime/1e3)>>>0,(tempDouble=Math.floor(mtime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+56>>2]=tempI64[0],HEAP32[buf+60>>2]=tempI64[1];HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;tempI64=[Math.floor(ctime/1e3)>>>0,(tempDouble=Math.floor(ctime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+72>>2]=tempI64[0],HEAP32[buf+76>>2]=tempI64[1];HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+88>>2]=tempI64[0],HEAP32[buf+92>>2]=tempI64[1];return 0},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_chdir(path){try{path=SYSCALLS.getStr(path);FS.chdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_faccessat(dirfd,path,amode,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(amode&~7){return-28}var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var syscallGetVarargI=()=>{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{var stream=SYSCALLS.getStreamFromFD(fd);return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);function ___syscall_getcwd(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd)+1;if(size<cwdLengthInBytes)return-68;stringToUTF8(cwd,buf,size);return cwdLengthInBytes}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}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 idx=Math.floor(off/struct_size);while(idx<stream.getdents.length&&pos+struct_size<=count){var id;var type;var name=stream.getdents[idx];if(name==="."){id=stream.node.id;type=4}else if(name===".."){var lookup=FS.lookupPath(stream.path,{parent:true});id=lookup.node.id;type=4}else{var child=FS.lookupNode(stream.node,name);id=child.id;type=FS.isChrdev(child.mode)?2:FS.isDir(child.mode)?4:FS.isLink(child.mode)?10:8}tempI64=[id>>>0,(tempDouble=id,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos>>2]=tempI64[0],HEAP32[dirp+pos+4>>2]=tempI64[1];tempI64=[(idx+1)*struct_size>>>0,(tempDouble=(idx+1)*struct_size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos+8>>2]=tempI64[0],HEAP32[dirp+pos+12>>2]=tempI64[1];HEAP16[dirp+pos+16>>1]=280;HEAP8[dirp+pos+18]=type;stringToUTF8(name,dirp+pos+19,256);pos+=struct_size;idx+=1}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 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.doStat(FS.lstat,path,buf)}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;path=SYSCALLS.calculateAt(dirfd,path,allowEmpty);return SYSCALLS.doStat(nofollow?FS.lstat:FS.stat,path,buf)}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_readlinkat(dirfd,path,buf,bufsize){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len}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.doStat(FS.stat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_statfs64(path,size,buf){try{path=SYSCALLS.getStr(path);HEAP32[buf+4>>2]=4096;HEAP32[buf+40>>2]=4096;HEAP32[buf+8>>2]=1e6;HEAP32[buf+12>>2]=5e5;HEAP32[buf+16>>2]=5e5;HEAP32[buf+20>>2]=FS.nextInode;HEAP32[buf+24>>2]=1e6;HEAP32[buf+28>>2]=42;HEAP32[buf+44>>2]=2;HEAP32[buf+36>>2]=255;return 0}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===0){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{abort("Invalid flags passed to unlinkat")}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __abort_js=()=>{abort("")};var nowIsMonotonic=1;var __emscripten_get_now_is_monotonic=()=>nowIsMonotonic;var __emscripten_memcpy_js=(dest,src,num)=>HEAPU8.copyWithin(dest,src,src+num);var runtimeKeepaliveCounter=0;var __emscripten_runtime_keepalive_clear=()=>{noExitRuntime=false;runtimeKeepaliveCounter=0};var convertI32PairToI53Checked=(lo,hi)=>hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN;function __gmtime_js(time_low,time_high,tmPtr){var time=convertI32PairToI53Checked(time_low,time_high);var date=new Date(time*1e3);HEAP32[tmPtr>>2]=date.getUTCSeconds();HEAP32[tmPtr+4>>2]=date.getUTCMinutes();HEAP32[tmPtr+8>>2]=date.getUTCHours();HEAP32[tmPtr+12>>2]=date.getUTCDate();HEAP32[tmPtr+16>>2]=date.getUTCMonth();HEAP32[tmPtr+20>>2]=date.getUTCFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getUTCDay();var start=Date.UTC(date.getUTCFullYear(),0,1,0,0,0,0);var yday=(date.getTime()-start)/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday}var isLeapYear=year=>year%4===0&&(year%100!==0||year%400===0);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 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};function __localtime_js(time_low,time_high,tmPtr){var time=convertI32PairToI53Checked(time_low,time_high);var date=new Date(time*1e3);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}function __mmap_js(len,prot,flags,fd,offset_low,offset_high,allocated,addr){var offset=convertI32PairToI53Checked(offset_low,offset_high);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);var res=FS.mmap(stream,len,offset,prot,flags);var ptr=res.ptr;HEAP32[allocated>>2]=res.allocated;HEAPU32[addr>>2]=ptr;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function __munmap_js(addr,len,prot,flags,fd,offset_low,offset_high){var offset=convertI32PairToI53Checked(offset_low,offset_high);try{var stream=SYSCALLS.getStreamFromFD(fd);if(prot&2){SYSCALLS.doMsync(addr,stream,len,flags,offset)}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var timers={};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;_proc_exit(status)};var _exit=exitJS;var maybeExit=()=>{if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};var _emscripten_get_now=()=>performance.now();var __setitimer_js=(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};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);if(summerOffset<winterOffset){stringToUTF8(winterName,std_name,17);stringToUTF8(summerName,dst_name,17)}else{stringToUTF8(winterName,dst_name,17);stringToUTF8(summerName,std_name,17)}};var readEmAsmArgsArray=[];var readEmAsmArgs=(sigPtr,buf)=>{readEmAsmArgsArray.length=0;var ch;while(ch=HEAPU8[sigPtr++]){var wide=ch!=105;wide&=ch!=112;buf+=wide&&buf%8?4:0;readEmAsmArgsArray.push(ch==112?HEAPU32[buf>>2]:ch==105?HEAP32[buf>>2]:HEAPF64[buf>>3]);buf+=wide?8:4}return readEmAsmArgsArray};var runEmAsmFunction=(code,sigPtr,argbuf)=>{var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code](...args)};var _emscripten_asm_const_int=(code,sigPtr,argbuf)=>runEmAsmFunction(code,sigPtr,argbuf);var _emscripten_date_now=()=>Date.now();var getHeapMax=()=>2147483648;var _emscripten_get_heap_max=()=>getHeapMax();var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=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};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"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 stringToAscii=(str,buffer)=>{for(var i=0;i<str.length;++i){HEAP8[buffer++]=str.charCodeAt(i)}HEAP8[buffer]=0};var _environ_get=(__environ,environ_buf)=>{var bufSize=0;getEnvStrings().forEach((string,i)=>{var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(string=>bufSize+=string.length+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}}function _fd_fdstat_get(fd,pbuf){try{var rightsBase=0;var rightsInheriting=0;var flags=0;{var stream=SYSCALLS.getStreamFromFD(fd);var type=stream.tty?2:FS.isDir(stream.mode)?3:FS.isLink(stream.mode)?7:4}HEAP8[pbuf]=type;HEAP16[pbuf+2>>1]=flags;tempI64=[rightsBase>>>0,(tempDouble=rightsBase,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[pbuf+8>>2]=tempI64[0],HEAP32[pbuf+12>>2]=tempI64[1];tempI64=[rightsInheriting>>>0,(tempDouble=rightsInheriting,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[pbuf+16>>2]=tempI64[0],HEAP32[pbuf+20>>2]=tempI64[1];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<iovcnt;i++){var ptr=HEAPU32[iov>>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<len)break;if(typeof offset!="undefined"){offset+=curr}}return ret};function _fd_pread(fd,iov,iovcnt,offset_low,offset_high,pnum){var offset=convertI32PairToI53Checked(offset_low,offset_high);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt,offset);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_read(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}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){var offset=convertI32PairToI53Checked(offset_low,offset_high);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];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<iovcnt;i++){var ptr=HEAPU32[iov>>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<len){break}if(typeof offset!="undefined"){offset+=curr}}return ret};function _fd_write(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}}var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();MEMFS.doesNotExistError=new FS.ErrnoError(44);MEMFS.doesNotExistError.stack="<generic error, no stack>";if(ENVIRONMENT_IS_NODE){NODEFS.staticInit()}if(!ENVIRONMENT_IS_NODE){throw new Error("NODERAWFS is currently only supported on Node.js environment.")}var _wrapNodeError=function(func){return function(...args){try{return func(...args)}catch(e){if(e.code){throw new FS.ErrnoError(ERRNO_CODES[e.code])}throw e}}};var VFS=Object.assign({},FS);for(var _key in NODERAWFS){FS[_key]=_wrapNodeError(NODERAWFS[_key])}var wasmImports={F:___call_sighandler,e:___cxa_throw,l:___syscall_chdir,m:___syscall_faccessat,j:___syscall_fcntl64,N:___syscall_fstat64,J:___syscall_getcwd,E:___syscall_getdents64,w:___syscall_ioctl,K:___syscall_lstat64,L:___syscall_newfstatat,i:___syscall_openat,D:___syscall_readlinkat,A:___syscall_renameat,C:___syscall_rmdir,M:___syscall_stat64,z:___syscall_statfs64,g:___syscall_unlinkat,n:__abort_js,O:__emscripten_get_now_is_monotonic,Q:__emscripten_memcpy_js,G:__emscripten_runtime_keepalive_clear,t:__gmtime_js,u:__localtime_js,q:__mmap_js,r:__munmap_js,f:__setitimer_js,H:__tzset_js,d:_emscripten_asm_const_int,P:_emscripten_date_now,y:_emscripten_get_heap_max,k:_emscripten_get_now,x:_emscripten_resize_heap,o:_environ_get,s:_environ_sizes_get,a:_exit,b:_fd_close,I:_fd_fdstat_get,p:_fd_pread,h:_fd_read,v:_fd_seek,c:_fd_write,B:_proc_exit};var wasmExports=createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports["S"])();var _main=Module["_main"]=(a0,a1)=>(_main=Module["_main"]=wasmExports["U"])(a0,a1);var _emscripten_builtin_memalign=(a0,a1)=>(_emscripten_builtin_memalign=wasmExports["V"])(a0,a1);var __emscripten_timeout=(a0,a1)=>(__emscripten_timeout=wasmExports["W"])(a0,a1);var __emscripten_stack_alloc=a0=>(__emscripten_stack_alloc=wasmExports["X"])(a0);var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args=[]){var entryFunction=_main;args.unshift(thisProgram);var argc=args.length;var argv=stackAlloc((argc+1)*4);var argv_ptr=argv;args.forEach(arg=>{HEAPU32[argv_ptr>>2]=stringToUTF8OnStack(arg);argv_ptr+=4});HEAPU32[argv_ptr>>2]=0;try{var ret=entryFunction(argc,argv);exitJS(ret,true);return ret}catch(e){return handleException(e)}}function run(args=arguments_){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();Module["onRuntimeInitialized"]?.();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run();