libredwg-web-ts
Version:
A DWG/DXF JavaScript parser based on libredwg
1,361 lines • 242 kB
JavaScript
var qI = Object.defineProperty;
var OI = (g, Q, o) => Q in g ? qI(g, Q, { enumerable: !0, configurable: !0, writable: !0, value: o }) : g[Q] = o;
var m = (g, Q, o) => OI(g, typeof Q != "symbol" ? Q + "" : Q, o);
const vC = "*Model_Space", IB = "*Paper_Space";
var aI = /* @__PURE__ */ ((g) => (g[g.Rotated = 0] = "Rotated", g[g.Aligned = 1] = "Aligned", g[g.Angular = 2] = "Angular", g[g.Diameter = 3] = "Diameter", g[g.Radius = 4] = "Radius", g[g.Angular3Point = 5] = "Angular3Point", g[g.Ordinate = 6] = "Ordinate", g[g.ReferenceIsExclusive = 32] = "ReferenceIsExclusive", g[g.IsOrdinateXTypeFlag = 64] = "IsOrdinateXTypeFlag", g[g.IsCustomTextPositionFlag = 128] = "IsCustomTextPositionFlag", g))(aI || {}), tA = /* @__PURE__ */ ((g) => (g[g.TopLeft = 1] = "TopLeft", g[g.TopCenter = 2] = "TopCenter", g[g.TopRight = 3] = "TopRight", g[g.MiddleLeft = 4] = "MiddleLeft", g[g.MiddleCenter = 5] = "MiddleCenter", g[g.MiddleRight = 6] = "MiddleRight", g[g.BottomLeft = 7] = "BottomLeft", g[g.BottomCenter = 8] = "BottomCenter", g[g.BottomRight = 9] = "BottomRight", g))(tA || {}), vI = /* @__PURE__ */ ((g) => (g[g.AtLeast = 1] = "AtLeast", g[g.Exact = 2] = "Exact", g))(vI || {}), tI = /* @__PURE__ */ ((g) => (g[g.Center = 0] = "Center", g[g.Above = 1] = "Above", g[g.Outside = 2] = "Outside", g[g.JIS = 3] = "JIS", g[g.Below = 4] = "Below", g))(tI || {}), jI = /* @__PURE__ */ ((g) => (g[g.Feet = 0] = "Feet", g[g.None = 1] = "None", g[g.Inch = 2] = "Inch", g[g.FeetAndInch = 3] = "FeetAndInch", g[g.Leading = 4] = "Leading", g[g.Trailing = 8] = "Trailing", g[g.LeadingAndTrailing = 12] = "LeadingAndTrailing", g))(jI || {}), PI = /* @__PURE__ */ ((g) => (g[g.None = 0] = "None", g[g.Leading = 1] = "Leading", g[g.Trailing = 2] = "Trailing", g[g.LeadingAndTrailing = 3] = "LeadingAndTrailing", g))(PI || {}), pI = /* @__PURE__ */ ((g) => (g[g.Center = 0] = "Center", g[g.Left = 1] = "Left", g[g.Right = 2] = "Right", g[g.OverFirst = 3] = "OverFirst", g[g.OverSecond = 4] = "OverSecond", g))(pI || {}), VI = /* @__PURE__ */ ((g) => (g[g.Bottom = 0] = "Bottom", g[g.Center = 1] = "Center", g[g.Top = 2] = "Top", g))(VI || {}), QC = /* @__PURE__ */ ((g) => (g[g.PatternFill = 0] = "PatternFill", g[g.SolidFill = 1] = "SolidFill", g))(QC || {}), IC = /* @__PURE__ */ ((g) => (g[g.NonAssociative = 0] = "NonAssociative", g[g.Associative = 1] = "Associative", g))(IC || {}), dI = /* @__PURE__ */ ((g) => (g[g.Normal = 0] = "Normal", g[g.Outer = 1] = "Outer", g[g.Ignore = 2] = "Ignore", g))(dI || {}), ZI = /* @__PURE__ */ ((g) => (g[g.UserDefined = 0] = "UserDefined", g[g.Predefined = 1] = "Predefined", g[g.Custom = 2] = "Custom", g))(ZI || {}), TI = /* @__PURE__ */ ((g) => (g[g.NotAnnotated = 0] = "NotAnnotated", g[g.Annotated = 1] = "Annotated", g))(TI || {}), lI = /* @__PURE__ */ ((g) => (g[g.Solid = 0] = "Solid", g[g.Gradient = 1] = "Gradient", g))(lI || {}), WI = /* @__PURE__ */ ((g) => (g[g.TwoColor = 0] = "TwoColor", g[g.OneColor = 1] = "OneColor", g))(WI || {}), fI = /* @__PURE__ */ ((g) => (g[g.Default = 0] = "Default", g[g.External = 1] = "External", g[g.Polyline = 2] = "Polyline", g[g.Derived = 4] = "Derived", g[g.Textbox = 8] = "Textbox", g[g.Outermost = 16] = "Outermost", g))(fI || {}), mA = /* @__PURE__ */ ((g) => (g[g.Line = 1] = "Line", g[g.Circular = 2] = "Circular", g[g.Elliptic = 3] = "Elliptic", g[g.Spline = 4] = "Spline", g))(mA || {}), zI = /* @__PURE__ */ ((g) => (g[g.CLOSED_POLYLINE = 1] = "CLOSED_POLYLINE", g[g.CURVE_FIT = 2] = "CURVE_FIT", g[g.SPLINE_FIT = 4] = "SPLINE_FIT", g[g.POLYLINE_3D = 8] = "POLYLINE_3D", g[g.POLYGON_3D = 16] = "POLYGON_3D", g[g.CLOSED_POLYGON = 32] = "CLOSED_POLYGON", g[g.POLYFACE = 64] = "POLYFACE", g[g.CONTINUOUS = 128] = "CONTINUOUS", g))(zI || {}), tC = /* @__PURE__ */ ((g) => (g[g.NONE = 0] = "NONE", g[g.QUADRATIC = 5] = "QUADRATIC", g[g.CUBIC = 6] = "CUBIC", g[g.BEZIER = 8] = "BEZIER", g))(tC || {}), bI = /* @__PURE__ */ ((g) => (g[g.NONE = 0] = "NONE", g[g.MIRRORED_X = 2] = "MIRRORED_X", g[g.MIRRORED_Y = 4] = "MIRRORED_Y", g))(bI || {}), BC = /* @__PURE__ */ ((g) => (g[g.LEFT = 0] = "LEFT", g[g.CENTER = 1] = "CENTER", g[g.RIGHT = 2] = "RIGHT", g[g.ALIGNED = 3] = "ALIGNED", g[g.MIDDLE = 4] = "MIDDLE", g[g.FIT = 5] = "FIT", g))(BC || {}), xI = /* @__PURE__ */ ((g) => (g[g.BASELINE = 0] = "BASELINE", g[g.BOTTOM = 1] = "BOTTOM", g[g.MIDDLE = 2] = "MIDDLE", g[g.TOP = 3] = "TOP", g))(xI || {});
const rI = Object.freeze([
"ACADMAINTVER",
"ACADVER",
"ANGBASE",
"ANGDIR",
"ATTMODE",
"AUNITS",
"AUPREC",
"CECOLOR",
"CELTSCALE",
"CELTYPE",
"CELWEIGHT",
"CEPSNID",
"CEPSNTYPE",
"CHAMFERA",
"CHAMFERB",
"CHAMFERC",
"CHAMFERD",
"CLAYER",
"CMLJUST",
"CMLSCALE",
"CMLSTYLE",
"CSHADOW",
"DIMADEC",
"DIMALT",
"DIMALTD",
"DIMALTF",
"DIMALTRND",
"DIMALTTD",
"DIMALTTZ",
"DIMALTU",
"DIMALTZ",
"DIMAPOST",
"DIMASO",
"DIMASSOC",
"DIMASZ",
"DIMATFIT",
"DIMAUNIT",
"DIMAZIN",
"DIMBLK",
"DIMBLK1",
"DIMBLK2",
"DIMCEN",
"DIMCLRD",
"DIMCLRE",
"DIMCLRT",
"DIMDEC",
"DIMDLE",
"DIMDLI",
"DIMDSEP",
"DIMEXE",
"DIMEXO",
"DIMFAC",
"DIMGAP",
"DIMJUST",
"DIMLDRBLK",
"DIMLFAC",
"DIMLIM",
"DIMLUNIT",
"DIMLWD",
"DIMLWE",
"DIMPOST",
"DIMRND",
"DIMSAH",
"DIMSCALE",
"DIMSD1",
"DIMSD2",
"DIMSE1",
"DIMSE2",
"DIMSHO",
"DIMSOXD",
"DIMSTYLE",
"DIMTAD",
"DIMTDEC",
"DIMTFAC",
"DIMTIH",
"DIMTIX",
"DIMTM",
"DIMTMOVE",
"DIMTOFL",
"DIMTOH",
"DIMTOL",
"DIMTOLJ",
"DIMTP",
"DIMTSZ",
"DIMTVP",
"DIMTXSTY",
"DIMTXT",
"DIMTZIN",
"DIMUPT",
"DIMZIN",
"DISPSILH",
"DRAGVS",
"DWGCODEPAGE",
"ELEVATION",
"ENDCAPS",
"EXTMAX",
"EXTMIN",
"EXTNAMES",
"FILLETRAD",
"FILLMODE",
"FINGERPRINTGUID",
"HALOGAP",
"HANDSEED",
"HIDETEXT",
"HYPERLINKBASE",
"INDEXCTL",
"INSBASE",
"INSUNITS",
"INTERFERECOLOR",
"INTERFEREOBJVS",
"INTERFEREVPVS",
"INTERSECTIONCOLOR",
"INTERSECTIONDISPLAY",
"JOINSTYLE",
"LIMCHECK",
"LIMMAX",
"LIMMIN",
"LTSCALE",
"LUNITS",
"LUPREC",
"LWDISPLAY",
"MAXACTVP",
"MEASUREMENT",
"MENU",
"MIRRTEXT",
"OBSCOLOR",
"OBSLTYPE",
"ORTHOMODE",
"PDMODE",
"PDSIZE",
"PELEVATION",
"PEXTMAX",
"PEXTMIN",
"PINSBASE",
"PLIMCHECK",
"PLIMMAX",
"PLIMMIN",
"PLINEGEN",
"PLINEWID",
"PROJECTNAME",
"PROXYGRAPHICS",
"PSLTSCALE",
"PSTYLEMODE",
"PSVPSCALE",
"PUCSBASE",
"PUCSNAME",
"PUCSORG",
"PUCSORGBACK",
"PUCSORGBOTTOM",
"PUCSORGFRONT",
"PUCSORGLEFT",
"PUCSORGRIGHT",
"PUCSORGTOP",
"PUCSORTHOREF",
"PUCSORTHOVIEW",
"PUCSXDIR",
"PUCSYDIR",
"QTEXTMODE",
"REGENMODE",
"SHADEDGE",
"SHADEDIF",
"SHADOWPLANELOCATION",
"SKETCHINC",
"SKPOLY",
"SORTENTS",
"SPLINESEGS",
"SPLINETYPE",
"SURFTAB1",
"SURFTAB2",
"SURFTYPE",
"SURFU",
"SURFV",
"TDCREATE",
"TDINDWG",
"TDUCREATE",
"TDUPDATE",
"TDUSRTIMER",
"TDUUPDATE",
"TEXTSIZE",
"TEXTSTYLE",
"THICKNESS",
"TILEMODE",
"TRACEWID",
"TREEDEPTH",
"UCSBASE",
"UCSNAME",
"UCSORG",
"UCSORGBACK",
"UCSORGBOTTOM",
"UCSORGFRONT",
"UCSORGLEFT",
"UCSORGRIGHT",
"UCSORGTOP",
"UCSORTHOREF",
"UCSORTHOVIEW",
"UCSXDIR",
"UCSYDIR",
"UNITMODE",
"USERI1",
"USERI2",
"USERI3",
"USERI4",
"USERI5",
"USERR1",
"USERR2",
"USERR3",
"USERR4",
"USERR5",
"USRTIMER",
"VERSIONGUID",
"VISRETAIN",
"WORLDVIEW",
"XCLIPFRAME",
"XEDIT"
]);
var eI = (() => {
var g = import.meta.url;
return async function(Q = {}) {
var o, I = Q, G, N, U = new Promise((A, C) => {
G = A, N = C;
}), F = typeof window == "object", h = typeof WorkerGlobalScope < "u", i = typeof process == "object" && typeof process.versions == "object" && typeof process.versions.node == "string" && process.type != "renderer";
if (i) {
const { createRequire: A } = await Promise.resolve().then(() => CB);
var c = A(import.meta.url);
}
var M = Object.assign({}, I), y = "./this.program", S = "";
function t(A) {
return I.locateFile ? I.locateFile(A, S) : S + A;
}
var s, J;
if (i) {
var P = c("fs"), T = c("path");
import.meta.url.startsWith("data:") || (S = T.dirname(c("url").fileURLToPath(import.meta.url)) + "/"), J = (A) => {
A = YA(A) ? new URL(A) : A;
var C = P.readFileSync(A);
return C;
}, s = async (A, C = !0) => {
A = YA(A) ? new URL(A) : A;
var B = P.readFileSync(A, C ? void 0 : "utf8");
return B;
}, !I.thisProgram && process.argv.length > 1 && (y = process.argv[1].replace(/\\/g, "/")), process.argv.slice(2);
} else (F || h) && (h ? S = self.location.href : typeof document < "u" && document.currentScript && (S = document.currentScript.src), g && (S = g), S.startsWith("blob:") ? S = "" : S = S.slice(0, S.replace(/[?#].*/, "").lastIndexOf("/") + 1), h && (J = (A) => {
var C = new XMLHttpRequest();
return C.open("GET", A, !1), C.responseType = "arraybuffer", C.send(null), new Uint8Array(C.response);
}), s = async (A) => {
if (YA(A))
return new Promise((B, E) => {
var w = new XMLHttpRequest();
w.open("GET", A, !0), w.responseType = "arraybuffer", w.onload = () => {
if (w.status == 200 || w.status == 0 && w.response) {
B(w.response);
return;
}
E(w.status);
}, w.onerror = E, w.send(null);
});
var C = await fetch(A, { credentials: "same-origin" });
if (C.ok)
return C.arrayBuffer();
throw new Error(C.status + " : " + C.url);
});
var d = I.print || console.log.bind(console), Z = I.printErr || console.error.bind(console);
Object.assign(I, M), M = null, I.arguments && I.arguments, I.thisProgram && (y = I.thisProgram);
var f = I.wasmBinary, r, QA = !1, b, X, gA, DA, a, l, LA, IA, jA, yA, YA = (A) => A.startsWith("file://");
function PA() {
var A = r.buffer;
I.HEAP8 = b = new Int8Array(A), I.HEAP16 = gA = new Int16Array(A), I.HEAPU8 = X = new Uint8Array(A), I.HEAPU16 = DA = new Uint16Array(A), I.HEAP32 = a = new Int32Array(A), I.HEAPU32 = l = new Uint32Array(A), I.HEAPF32 = LA = new Float32Array(A), I.HEAPF64 = yA = new Float64Array(A), I.HEAP64 = IA = new BigInt64Array(A), I.HEAPU64 = jA = new BigUint64Array(A);
}
function pA() {
if (I.preRun)
for (typeof I.preRun == "function" && (I.preRun = [I.preRun]); I.preRun.length; )
Og(I.preRun.shift());
XA($A);
}
function TA() {
!I.noFSInit && !D.initialized && D.init(), wA.__wasm_call_ctors(), D.ignorePermissions = !1;
}
function Hg() {
if (I.postRun)
for (typeof I.postRun == "function" && (I.postRun = [I.postRun]); I.postRun.length; )
qg(I.postRun.shift());
XA(_A);
}
var NA = 0, JA = null;
function nA(A) {
var C;
NA++, (C = I.monitorRunDependencies) == null || C.call(I, NA);
}
function lA(A) {
var B;
if (NA--, (B = I.monitorRunDependencies) == null || B.call(I, NA), NA == 0 && JA) {
var C = JA;
JA = null, C();
}
}
function sA(A) {
var B;
(B = I.onAbort) == null || B.call(I, A), A = "Aborted(" + A + ")", Z(A), QA = !0, A += ". Build with -sASSERTIONS for more info.";
var C = new WebAssembly.RuntimeError(A);
throw N(C), C;
}
var WA;
function cg() {
return I.locateFile ? t("libredwg-web.wasm") : "/wasm/libredwg-web.wasm";
}
function Sg(A) {
if (A == WA && f)
return new Uint8Array(f);
if (J)
return J(A);
throw "both async and sync fetching of the wasm failed";
}
async function Lg(A) {
if (!f)
try {
var C = await s(A);
return new Uint8Array(C);
} catch {
}
return Sg(A);
}
async function yg(A, C) {
try {
var B = await Lg(A), E = await WebAssembly.instantiate(B, C);
return E;
} catch (w) {
Z(`failed to asynchronously prepare wasm: ${w}`), sA(w);
}
}
async function Jg(A, C, B) {
if (!A && typeof WebAssembly.instantiateStreaming == "function" && !YA(C) && !i)
try {
var E = fetch(C, { credentials: "same-origin" }), w = await WebAssembly.instantiateStreaming(E, B);
return w;
} catch (K) {
Z(`wasm streaming compile failed: ${K}`), Z("falling back to ArrayBuffer instantiation");
}
return yg(C, B);
}
function sg() {
return { env: MC, wasi_snapshot_preview1: MC };
}
async function Mg() {
function A(K, Y) {
return wA = K.exports, r = wA.memory, PA(), kC = wA.__indirect_function_table, lA(), wA;
}
nA();
function C(K) {
return A(K.instance);
}
var B = sg();
if (I.instantiateWasm)
return new Promise((K, Y) => {
I.instantiateWasm(B, (k, R) => {
A(k), K(k.exports);
});
});
WA ?? (WA = cg());
try {
var E = await Jg(f, WA, B), w = C(E);
return w;
} catch (K) {
return N(K), Promise.reject(K);
}
}
var XA = (A) => {
for (; A.length > 0; )
A.shift()(I);
}, _A = [], qg = (A) => _A.unshift(A), $A = [], Og = (A) => $A.unshift(A);
I.noExitRuntime;
function ag(A, C, B = "i8") {
switch (B.endsWith("*") && (B = "*"), B) {
case "i1":
b[A] = C;
break;
case "i8":
b[A] = C;
break;
case "i16":
gA[A >> 1] = C;
break;
case "i32":
a[A >> 2] = C;
break;
case "i64":
IA[A >> 3] = BigInt(C);
break;
case "float":
LA[A >> 2] = C;
break;
case "double":
yA[A >> 3] = C;
break;
case "*":
l[A >> 2] = C;
break;
default:
sA(`invalid type for setValue: ${B}`);
}
}
var vg = (A) => JI(A), tg = () => MI(), Ag = typeof TextDecoder < "u" ? new TextDecoder() : void 0, iA = (A, C = 0, B = NaN) => {
for (var E = C + B, w = C; A[w] && !(w >= E); ) ++w;
if (w - C > 16 && A.buffer && Ag)
return Ag.decode(A.subarray(C, w));
for (var K = ""; C < w; ) {
var Y = A[C++];
if (!(Y & 128)) {
K += String.fromCharCode(Y);
continue;
}
var k = A[C++] & 63;
if ((Y & 224) == 192) {
K += String.fromCharCode((Y & 31) << 6 | k);
continue;
}
var R = A[C++] & 63;
if ((Y & 240) == 224 ? Y = (Y & 15) << 12 | k << 6 | R : Y = (Y & 7) << 18 | k << 12 | R << 6 | A[C++] & 63, Y < 65536)
K += String.fromCharCode(Y);
else {
var H = Y - 65536;
K += String.fromCharCode(55296 | H >> 10, 56320 | H & 1023);
}
}
return K;
}, kA = (A, C) => A ? iA(X, A, C) : "", jg = (A, C, B, E) => sA(`Assertion failed: ${kA(A)}, at: ` + [C ? kA(C) : "unknown filename", B, E ? kA(E) : "unknown function"]);
class Pg {
constructor(C) {
this.excPtr = C, this.ptr = C - 24;
}
set_type(C) {
l[this.ptr + 4 >> 2] = C;
}
get_type() {
return l[this.ptr + 4 >> 2];
}
set_destructor(C) {
l[this.ptr + 8 >> 2] = C;
}
get_destructor() {
return l[this.ptr + 8 >> 2];
}
set_caught(C) {
C = C ? 1 : 0, b[this.ptr + 12] = C;
}
get_caught() {
return b[this.ptr + 12] != 0;
}
set_rethrown(C) {
C = C ? 1 : 0, b[this.ptr + 13] = C;
}
get_rethrown() {
return b[this.ptr + 13] != 0;
}
init(C, B) {
this.set_adjusted_ptr(0), this.set_type(C), this.set_destructor(B);
}
set_adjusted_ptr(C) {
l[this.ptr + 16 >> 2] = C;
}
get_adjusted_ptr() {
return l[this.ptr + 16 >> 2];
}
}
var gg = 0, pg = (A, C, B) => {
var E = new Pg(A);
throw E.init(C, B), gg = A, gg;
}, VA = () => {
var A = a[+u.varargs >> 2];
return u.varargs += 4, A;
}, HA = VA, x = { isAbs: (A) => A.charAt(0) === "/", splitPath: (A) => {
var C = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
return C.exec(A).slice(1);
}, normalizeArray: (A, C) => {
for (var B = 0, E = A.length - 1; E >= 0; E--) {
var w = A[E];
w === "." ? A.splice(E, 1) : w === ".." ? (A.splice(E, 1), B++) : B && (A.splice(E, 1), B--);
}
if (C)
for (; B; B--)
A.unshift("..");
return A;
}, normalize: (A) => {
var C = x.isAbs(A), B = A.slice(-1) === "/";
return A = x.normalizeArray(A.split("/").filter((E) => !!E), !C).join("/"), !A && !C && (A = "."), A && B && (A += "/"), (C ? "/" : "") + A;
}, dirname: (A) => {
var C = x.splitPath(A), B = C[0], E = C[1];
return !B && !E ? "." : (E && (E = E.slice(0, -1)), B + E);
}, basename: (A) => A && A.match(/([^\/]+|\/)\/*$/)[1], join: (...A) => x.normalize(A.join("/")), join2: (A, C) => x.normalize(A + "/" + C) }, Vg = () => {
if (i) {
var A = c("crypto");
return (C) => A.randomFillSync(C);
}
return (C) => crypto.getRandomValues(C);
}, Cg = (A) => {
(Cg = Vg())(A);
}, cA = { resolve: (...A) => {
for (var C = "", B = !1, E = A.length - 1; E >= -1 && !B; E--) {
var w = E >= 0 ? A[E] : D.cwd();
if (typeof w != "string")
throw new TypeError("Arguments to path.resolve must be strings");
if (!w)
return "";
C = w + "/" + C, B = x.isAbs(w);
}
return C = x.normalizeArray(C.split("/").filter((K) => !!K), !B).join("/"), (B ? "/" : "") + C || ".";
}, relative: (A, C) => {
A = cA.resolve(A).slice(1), C = cA.resolve(C).slice(1);
function B(H) {
for (var L = 0; L < H.length && H[L] === ""; L++)
;
for (var q = H.length - 1; q >= 0 && H[q] === ""; q--)
;
return L > q ? [] : H.slice(L, q - L + 1);
}
for (var E = B(A.split("/")), w = B(C.split("/")), K = Math.min(E.length, w.length), Y = K, k = 0; k < K; k++)
if (E[k] !== w[k]) {
Y = k;
break;
}
for (var R = [], k = Y; k < E.length; k++)
R.push("..");
return R = R.concat(w.slice(Y)), R.join("/");
} }, fA = [], MA = (A) => {
for (var C = 0, B = 0; B < A.length; ++B) {
var E = A.charCodeAt(B);
E <= 127 ? C++ : E <= 2047 ? C += 2 : E >= 55296 && E <= 57343 ? (C += 4, ++B) : C += 3;
}
return C;
}, zA = (A, C, B, E) => {
if (!(E > 0)) return 0;
for (var w = B, K = B + E - 1, Y = 0; Y < A.length; ++Y) {
var k = A.charCodeAt(Y);
if (k >= 55296 && k <= 57343) {
var R = A.charCodeAt(++Y);
k = 65536 + ((k & 1023) << 10) | R & 1023;
}
if (k <= 127) {
if (B >= K) break;
C[B++] = k;
} else if (k <= 2047) {
if (B + 1 >= K) break;
C[B++] = 192 | k >> 6, C[B++] = 128 | k & 63;
} else if (k <= 65535) {
if (B + 2 >= K) break;
C[B++] = 224 | k >> 12, C[B++] = 128 | k >> 6 & 63, C[B++] = 128 | k & 63;
} else {
if (B + 3 >= K) break;
C[B++] = 240 | k >> 18, C[B++] = 128 | k >> 12 & 63, C[B++] = 128 | k >> 6 & 63, C[B++] = 128 | k & 63;
}
}
return C[B] = 0, B - w;
}, Qg = (A, C, B) => {
var E = MA(A) + 1, w = new Array(E), K = zA(A, w, 0, w.length);
return w.length = K, w;
}, dg = () => {
if (!fA.length) {
var A = null;
if (i) {
var C = 256, B = Buffer.alloc(C), E = 0, w = process.stdin.fd;
try {
E = P.readSync(w, B, 0, C);
} catch (K) {
if (K.toString().includes("EOF")) E = 0;
else throw K;
}
E > 0 && (A = B.slice(0, E).toString("utf-8"));
} else typeof window < "u" && typeof window.prompt == "function" && (A = window.prompt("Input: "), A !== null && (A += `
`));
if (!A)
return null;
fA = Qg(A);
}
return fA.shift();
}, RA = { ttys: [], init() {
}, shutdown() {
}, register(A, C) {
RA.ttys[A] = { input: [], output: [], ops: C }, D.registerDevice(A, RA.stream_ops);
}, stream_ops: { open(A) {
var C = RA.ttys[A.node.rdev];
if (!C)
throw new D.ErrnoError(43);
A.tty = C, A.seekable = !1;
}, close(A) {
A.tty.ops.fsync(A.tty);
}, fsync(A) {
A.tty.ops.fsync(A.tty);
}, read(A, C, B, E, w) {
if (!A.tty || !A.tty.ops.get_char)
throw new D.ErrnoError(60);
for (var K = 0, Y = 0; Y < E; Y++) {
var k;
try {
k = A.tty.ops.get_char(A.tty);
} catch {
throw new D.ErrnoError(29);
}
if (k === void 0 && K === 0)
throw new D.ErrnoError(6);
if (k == null) break;
K++, C[B + Y] = k;
}
return K && (A.node.atime = Date.now()), K;
}, write(A, C, B, E, w) {
if (!A.tty || !A.tty.ops.put_char)
throw new D.ErrnoError(60);
try {
for (var K = 0; K < E; K++)
A.tty.ops.put_char(A.tty, C[B + K]);
} catch {
throw new D.ErrnoError(29);
}
return E && (A.node.mtime = A.node.ctime = Date.now()), K;
} }, default_tty_ops: { get_char(A) {
return dg();
}, put_char(A, C) {
C === null || C === 10 ? (d(iA(A.output)), A.output = []) : C != 0 && A.output.push(C);
}, fsync(A) {
var C;
((C = A.output) == null ? void 0 : C.length) > 0 && (d(iA(A.output)), A.output = []);
}, ioctl_tcgets(A) {
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(A, C, B) {
return 0;
}, ioctl_tiocgwinsz(A) {
return [24, 80];
} }, default_tty1_ops: { put_char(A, C) {
C === null || C === 10 ? (Z(iA(A.output)), A.output = []) : C != 0 && A.output.push(C);
}, fsync(A) {
var C;
((C = A.output) == null ? void 0 : C.length) > 0 && (Z(iA(A.output)), A.output = []);
} } }, Zg = (A, C) => Math.ceil(A / C) * C, Ig = (A) => {
sA();
}, V = { ops_table: null, mount(A) {
return V.createNode(null, "/", 16895, 0);
}, createNode(A, C, B, E) {
if (D.isBlkdev(B) || D.isFIFO(B))
throw new D.ErrnoError(63);
V.ops_table || (V.ops_table = { dir: { node: { getattr: V.node_ops.getattr, setattr: V.node_ops.setattr, lookup: V.node_ops.lookup, mknod: V.node_ops.mknod, rename: V.node_ops.rename, unlink: V.node_ops.unlink, rmdir: V.node_ops.rmdir, readdir: V.node_ops.readdir, symlink: V.node_ops.symlink }, stream: { llseek: V.stream_ops.llseek } }, file: { node: { getattr: V.node_ops.getattr, setattr: V.node_ops.setattr }, stream: { llseek: V.stream_ops.llseek, read: V.stream_ops.read, write: V.stream_ops.write, allocate: V.stream_ops.allocate, mmap: V.stream_ops.mmap, msync: V.stream_ops.msync } }, link: { node: { getattr: V.node_ops.getattr, setattr: V.node_ops.setattr, readlink: V.node_ops.readlink }, stream: {} }, chrdev: { node: { getattr: V.node_ops.getattr, setattr: V.node_ops.setattr }, stream: D.chrdev_stream_ops } });
var w = D.createNode(A, C, B, E);
return D.isDir(w.mode) ? (w.node_ops = V.ops_table.dir.node, w.stream_ops = V.ops_table.dir.stream, w.contents = {}) : D.isFile(w.mode) ? (w.node_ops = V.ops_table.file.node, w.stream_ops = V.ops_table.file.stream, w.usedBytes = 0, w.contents = null) : D.isLink(w.mode) ? (w.node_ops = V.ops_table.link.node, w.stream_ops = V.ops_table.link.stream) : D.isChrdev(w.mode) && (w.node_ops = V.ops_table.chrdev.node, w.stream_ops = V.ops_table.chrdev.stream), w.atime = w.mtime = w.ctime = Date.now(), A && (A.contents[C] = w, A.atime = A.mtime = A.ctime = w.atime), w;
}, getFileDataAsTypedArray(A) {
return A.contents ? A.contents.subarray ? A.contents.subarray(0, A.usedBytes) : new Uint8Array(A.contents) : new Uint8Array(0);
}, expandFileStorage(A, C) {
var B = A.contents ? A.contents.length : 0;
if (!(B >= C)) {
var E = 1024 * 1024;
C = Math.max(C, B * (B < E ? 2 : 1.125) >>> 0), B != 0 && (C = Math.max(C, 256));
var w = A.contents;
A.contents = new Uint8Array(C), A.usedBytes > 0 && A.contents.set(w.subarray(0, A.usedBytes), 0);
}
}, resizeFileStorage(A, C) {
if (A.usedBytes != C)
if (C == 0)
A.contents = null, A.usedBytes = 0;
else {
var B = A.contents;
A.contents = new Uint8Array(C), B && A.contents.set(B.subarray(0, Math.min(C, A.usedBytes))), A.usedBytes = C;
}
}, node_ops: { getattr(A) {
var C = {};
return C.dev = D.isChrdev(A.mode) ? A.id : 1, C.ino = A.id, C.mode = A.mode, C.nlink = 1, C.uid = 0, C.gid = 0, C.rdev = A.rdev, D.isDir(A.mode) ? C.size = 4096 : D.isFile(A.mode) ? C.size = A.usedBytes : D.isLink(A.mode) ? C.size = A.link.length : C.size = 0, C.atime = new Date(A.atime), C.mtime = new Date(A.mtime), C.ctime = new Date(A.ctime), C.blksize = 4096, C.blocks = Math.ceil(C.size / C.blksize), C;
}, setattr(A, C) {
for (const B of ["mode", "atime", "mtime", "ctime"])
C[B] != null && (A[B] = C[B]);
C.size !== void 0 && V.resizeFileStorage(A, C.size);
}, lookup(A, C) {
throw V.doesNotExistError;
}, mknod(A, C, B, E) {
return V.createNode(A, C, B, E);
}, rename(A, C, B) {
var E;
try {
E = D.lookupNode(C, B);
} catch {
}
if (E) {
if (D.isDir(A.mode))
for (var w in E.contents)
throw new D.ErrnoError(55);
D.hashRemoveNode(E);
}
delete A.parent.contents[A.name], C.contents[B] = A, A.name = B, C.ctime = C.mtime = A.parent.ctime = A.parent.mtime = Date.now();
}, unlink(A, C) {
delete A.contents[C], A.ctime = A.mtime = Date.now();
}, rmdir(A, C) {
var B = D.lookupNode(A, C);
for (var E in B.contents)
throw new D.ErrnoError(55);
delete A.contents[C], A.ctime = A.mtime = Date.now();
}, readdir(A) {
return [".", "..", ...Object.keys(A.contents)];
}, symlink(A, C, B) {
var E = V.createNode(A, C, 41471, 0);
return E.link = B, E;
}, readlink(A) {
if (!D.isLink(A.mode))
throw new D.ErrnoError(28);
return A.link;
} }, stream_ops: { read(A, C, B, E, w) {
var K = A.node.contents;
if (w >= A.node.usedBytes) return 0;
var Y = Math.min(A.node.usedBytes - w, E);
if (Y > 8 && K.subarray)
C.set(K.subarray(w, w + Y), B);
else
for (var k = 0; k < Y; k++) C[B + k] = K[w + k];
return Y;
}, write(A, C, B, E, w, K) {
if (C.buffer === b.buffer && (K = !1), !E) return 0;
var Y = A.node;
if (Y.mtime = Y.ctime = Date.now(), C.subarray && (!Y.contents || Y.contents.subarray)) {
if (K)
return Y.contents = C.subarray(B, B + E), Y.usedBytes = E, E;
if (Y.usedBytes === 0 && w === 0)
return Y.contents = C.slice(B, B + E), Y.usedBytes = E, E;
if (w + E <= Y.usedBytes)
return Y.contents.set(C.subarray(B, B + E), w), E;
}
if (V.expandFileStorage(Y, w + E), Y.contents.subarray && C.subarray)
Y.contents.set(C.subarray(B, B + E), w);
else
for (var k = 0; k < E; k++)
Y.contents[w + k] = C[B + k];
return Y.usedBytes = Math.max(Y.usedBytes, w + E), E;
}, llseek(A, C, B) {
var E = C;
if (B === 1 ? E += A.position : B === 2 && D.isFile(A.node.mode) && (E += A.node.usedBytes), E < 0)
throw new D.ErrnoError(28);
return E;
}, allocate(A, C, B) {
V.expandFileStorage(A.node, C + B), A.node.usedBytes = Math.max(A.node.usedBytes, C + B);
}, mmap(A, C, B, E, w) {
if (!D.isFile(A.node.mode))
throw new D.ErrnoError(43);
var K, Y, k = A.node.contents;
if (!(w & 2) && k && k.buffer === b.buffer)
Y = !1, K = k.byteOffset;
else {
if (Y = !0, K = Ig(), !K)
throw new D.ErrnoError(48);
k && ((B > 0 || B + C < k.length) && (k.subarray ? k = k.subarray(B, B + C) : k = Array.prototype.slice.call(k, B, B + C)), b.set(k, K));
}
return { ptr: K, allocated: Y };
}, msync(A, C, B, E, w) {
return V.stream_ops.write(A, C, 0, E, B, !1), 0;
} } }, Tg = async (A) => {
var C = await s(A);
return new Uint8Array(C);
}, lg = (A, C, B, E, w, K) => {
D.createDataFile(A, C, B, E, w, K);
}, Wg = I.preloadPlugins || [], fg = (A, C, B, E) => {
typeof Browser < "u" && Browser.init();
var w = !1;
return Wg.forEach((K) => {
w || K.canHandle(C) && (K.handle(A, C, B, E), w = !0);
}), w;
}, zg = (A, C, B, E, w, K, Y, k, R, H) => {
var L = C ? cA.resolve(x.join2(A, C)) : A;
function q(p) {
function O(v) {
H == null || H(), k || lg(A, C, v, E, w, R), K == null || K(), lA();
}
fg(p, L, O, () => {
Y == null || Y(), lA();
}) || O(p);
}
nA(), typeof B == "string" ? Tg(B).then(q, Y) : q(B);
}, PC = (A) => {
var C = { r: 0, "r+": 2, w: 577, "w+": 578, a: 1089, "a+": 1090 }, B = C[A];
if (typeof B > "u")
throw new Error(`Unknown file open mode: ${A}`);
return B;
}, bg = (A, C) => {
var B = 0;
return A && (B |= 365), C && (B |= 146), B;
}, D = { root: null, mounts: [], devices: {}, streams: [], nextInode: 1, nameTable: null, currentPath: "/", initialized: !1, ignorePermissions: !0, ErrnoError: class {
constructor(A) {
m(this, "name", "ErrnoError");
this.errno = A;
}
}, filesystems: null, syncFSRequests: 0, readFiles: {}, FSStream: class {
constructor() {
m(this, "shared", {});
}
get object() {
return this.node;
}
set object(A) {
this.node = A;
}
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(A) {
this.shared.flags = A;
}
get position() {
return this.shared.position;
}
set position(A) {
this.shared.position = A;
}
}, FSNode: class {
constructor(A, C, B, E) {
m(this, "node_ops", {});
m(this, "stream_ops", {});
m(this, "readMode", 365);
m(this, "writeMode", 146);
m(this, "mounted", null);
A || (A = this), this.parent = A, this.mount = A.mount, this.id = D.nextInode++, this.name = C, this.mode = B, this.rdev = E, this.atime = this.mtime = this.ctime = Date.now();
}
get read() {
return (this.mode & this.readMode) === this.readMode;
}
set read(A) {
A ? this.mode |= this.readMode : this.mode &= ~this.readMode;
}
get write() {
return (this.mode & this.writeMode) === this.writeMode;
}
set write(A) {
A ? this.mode |= this.writeMode : this.mode &= ~this.writeMode;
}
get isFolder() {
return D.isDir(this.mode);
}
get isDevice() {
return D.isChrdev(this.mode);
}
}, lookupPath(A, C = {}) {
if (!A)
throw new D.ErrnoError(44);
C.follow_mount ?? (C.follow_mount = !0), x.isAbs(A) || (A = D.cwd() + "/" + A);
A: for (var B = 0; B < 40; B++) {
for (var E = A.split("/").filter((H) => !!H), w = D.root, K = "/", Y = 0; Y < E.length; Y++) {
var k = Y === E.length - 1;
if (k && C.parent)
break;
if (E[Y] !== ".") {
if (E[Y] === "..") {
K = x.dirname(K), w = w.parent;
continue;
}
K = x.join2(K, E[Y]);
try {
w = D.lookupNode(w, E[Y]);
} catch (H) {
if ((H == null ? void 0 : H.errno) === 44 && k && C.noent_okay)
return { path: K };
throw H;
}
if (D.isMountpoint(w) && (!k || C.follow_mount) && (w = w.mounted.root), D.isLink(w.mode) && (!k || C.follow)) {
if (!w.node_ops.readlink)
throw new D.ErrnoError(52);
var R = w.node_ops.readlink(w);
x.isAbs(R) || (R = x.dirname(K) + "/" + R), A = R + "/" + E.slice(Y + 1).join("/");
continue A;
}
}
}
return { path: K, node: w };
}
throw new D.ErrnoError(32);
}, getPath(A) {
for (var C; ; ) {
if (D.isRoot(A)) {
var B = A.mount.mountpoint;
return C ? B[B.length - 1] !== "/" ? `${B}/${C}` : B + C : B;
}
C = C ? `${A.name}/${C}` : A.name, A = A.parent;
}
}, hashName(A, C) {
for (var B = 0, E = 0; E < C.length; E++)
B = (B << 5) - B + C.charCodeAt(E) | 0;
return (A + B >>> 0) % D.nameTable.length;
}, hashAddNode(A) {
var C = D.hashName(A.parent.id, A.name);
A.name_next = D.nameTable[C], D.nameTable[C] = A;
}, hashRemoveNode(A) {
var C = D.hashName(A.parent.id, A.name);
if (D.nameTable[C] === A)
D.nameTable[C] = A.name_next;
else
for (var B = D.nameTable[C]; B; ) {
if (B.name_next === A) {
B.name_next = A.name_next;
break;
}
B = B.name_next;
}
}, lookupNode(A, C) {
var B = D.mayLookup(A);
if (B)
throw new D.ErrnoError(B);
for (var E = D.hashName(A.id, C), w = D.nameTable[E]; w; w = w.name_next) {
var K = w.name;
if (w.parent.id === A.id && K === C)
return w;
}
return D.lookup(A, C);
}, createNode(A, C, B, E) {
var w = new D.FSNode(A, C, B, E);
return D.hashAddNode(w), w;
}, destroyNode(A) {
D.hashRemoveNode(A);
}, isRoot(A) {
return A === A.parent;
}, isMountpoint(A) {
return !!A.mounted;
}, isFile(A) {
return (A & 61440) === 32768;
}, isDir(A) {
return (A & 61440) === 16384;
}, isLink(A) {
return (A & 61440) === 40960;
}, isChrdev(A) {
return (A & 61440) === 8192;
}, isBlkdev(A) {
return (A & 61440) === 24576;
}, isFIFO(A) {
return (A & 61440) === 4096;
}, isSocket(A) {
return (A & 49152) === 49152;
}, flagsToPermissionString(A) {
var C = ["r", "w", "rw"][A & 3];
return A & 512 && (C += "w"), C;
}, nodePermissions(A, C) {
return D.ignorePermissions ? 0 : C.includes("r") && !(A.mode & 292) || C.includes("w") && !(A.mode & 146) || C.includes("x") && !(A.mode & 73) ? 2 : 0;
}, mayLookup(A) {
if (!D.isDir(A.mode)) return 54;
var C = D.nodePermissions(A, "x");
return C || (A.node_ops.lookup ? 0 : 2);
}, mayCreate(A, C) {
if (!D.isDir(A.mode))
return 54;
try {
var B = D.lookupNode(A, C);
return 20;
} catch {
}
return D.nodePermissions(A, "wx");
}, mayDelete(A, C, B) {
var E;
try {
E = D.lookupNode(A, C);
} catch (K) {
return K.errno;
}
var w = D.nodePermissions(A, "wx");
if (w)
return w;
if (B) {
if (!D.isDir(E.mode))
return 54;
if (D.isRoot(E) || D.getPath(E) === D.cwd())
return 10;
} else if (D.isDir(E.mode))
return 31;
return 0;
}, mayOpen(A, C) {
return A ? D.isLink(A.mode) ? 32 : D.isDir(A.mode) && (D.flagsToPermissionString(C) !== "r" || C & 576) ? 31 : D.nodePermissions(A, D.flagsToPermissionString(C)) : 44;
}, checkOpExists(A, C) {
if (!A)
throw new D.ErrnoError(C);
return A;
}, MAX_OPEN_FDS: 4096, nextfd() {
for (var A = 0; A <= D.MAX_OPEN_FDS; A++)
if (!D.streams[A])
return A;
throw new D.ErrnoError(33);
}, getStreamChecked(A) {
var C = D.getStream(A);
if (!C)
throw new D.ErrnoError(8);
return C;
}, getStream: (A) => D.streams[A], createStream(A, C = -1) {
return A = Object.assign(new D.FSStream(), A), C == -1 && (C = D.nextfd()), A.fd = C, D.streams[C] = A, A;
}, closeStream(A) {
D.streams[A] = null;
}, dupStream(A, C = -1) {
var E, w;
var B = D.createStream(A, C);
return (w = (E = B.stream_ops) == null ? void 0 : E.dup) == null || w.call(E, B), B;
}, doSetAttr(A, C, B) {
var E = A == null ? void 0 : A.stream_ops.setattr, w = E ? A : C;
E ?? (E = C.node_ops.setattr), D.checkOpExists(E, 63), E(w, B);
}, chrdev_stream_ops: { open(A) {
var B, E;
var C = D.getDevice(A.node.rdev);
A.stream_ops = C.stream_ops, (E = (B = A.stream_ops).open) == null || E.call(B, A);
}, llseek() {
throw new D.ErrnoError(70);
} }, major: (A) => A >> 8, minor: (A) => A & 255, makedev: (A, C) => A << 8 | C, registerDevice(A, C) {
D.devices[A] = { stream_ops: C };
}, getDevice: (A) => D.devices[A], getMounts(A) {
for (var C = [], B = [A]; B.length; ) {
var E = B.pop();
C.push(E), B.push(...E.mounts);
}
return C;
}, syncfs(A, C) {
typeof A == "function" && (C = A, A = !1), D.syncFSRequests++, D.syncFSRequests > 1 && Z(`warning: ${D.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);
var B = D.getMounts(D.root.mount), E = 0;
function w(Y) {
return D.syncFSRequests--, C(Y);
}
function K(Y) {
if (Y)
return K.errored ? void 0 : (K.errored = !0, w(Y));
++E >= B.length && w(null);
}
B.forEach((Y) => {
if (!Y.type.syncfs)
return K(null);
Y.type.syncfs(Y, A, K);
});
}, mount(A, C, B) {
var E = B === "/", w = !B, K;
if (E && D.root)
throw new D.ErrnoError(10);
if (!E && !w) {
var Y = D.lookupPath(B, { follow_mount: !1 });
if (B = Y.path, K = Y.node, D.isMountpoint(K))
throw new D.ErrnoError(10);
if (!D.isDir(K.mode))
throw new D.ErrnoError(54);
}
var k = { type: A, opts: C, mountpoint: B, mounts: [] }, R = A.mount(k);
return R.mount = k, k.root = R, E ? D.root = R : K && (K.mounted = k, K.mount && K.mount.mounts.push(k)), R;
}, unmount(A) {
var C = D.lookupPath(A, { follow_mount: !1 });
if (!D.isMountpoint(C.node))
throw new D.ErrnoError(28);
var B = C.node, E = B.mounted, w = D.getMounts(E);
Object.keys(D.nameTable).forEach((Y) => {
for (var k = D.nameTable[Y]; k; ) {
var R = k.name_next;
w.includes(k.mount) && D.destroyNode(k), k = R;
}
}), B.mounted = null;
var K = B.mount.mounts.indexOf(E);
B.mount.mounts.splice(K, 1);
}, lookup(A, C) {
return A.node_ops.lookup(A, C);
}, mknod(A, C, B) {
var E = D.lookupPath(A, { parent: !0 }), w = E.node, K = x.basename(A);
if (!K)
throw new D.ErrnoError(28);
if (K === "." || K === "..")
throw new D.ErrnoError(20);
var Y = D.mayCreate(w, K);
if (Y)
throw new D.ErrnoError(Y);
if (!w.node_ops.mknod)
throw new D.ErrnoError(63);
return w.node_ops.mknod(w, K, C, B);
}, statfs(A) {
return D.statfsNode(D.lookupPath(A, { follow: !0 }).node);
}, statfsStream(A) {
return D.statfsNode(A.node);
}, statfsNode(A) {
var C = { bsize: 4096, frsize: 4096, blocks: 1e6, bfree: 5e5, bavail: 5e5, files: D.nextInode, ffree: D.nextInode - 1, fsid: 42, flags: 2, namelen: 255 };
return A.node_ops.statfs && Object.assign(C, A.node_ops.statfs(A.mount.opts.root)), C;
}, create(A, C = 438) {
return C &= 4095, C |= 32768, D.mknod(A, C, 0);
}, mkdir(A, C = 511) {
return C &= 1023, C |= 16384, D.mknod(A, C, 0);
}, mkdirTree(A, C) {
for (var B = A.split("/"), E = "", w = 0; w < B.length; ++w)
if (B[w]) {
E += "/" + B[w];
try {
D.mkdir(E, C);
} catch (K) {
if (K.errno != 20) throw K;
}
}
}, mkdev(A, C, B) {
return typeof B > "u" && (B = C, C = 438), C |= 8192, D.mknod(A, C, B);
}, symlink(A, C) {
if (!cA.resolve(A))
throw new D.ErrnoError(44);
var B = D.lookupPath(C, { parent: !0 }), E = B.node;
if (!E)
throw new D.ErrnoError(44);
var w = x.basename(C), K = D.mayCreate(E, w);
if (K)
throw new D.ErrnoError(K);
if (!E.node_ops.symlink)
throw new D.ErrnoError(63);
return E.node_ops.symlink(E, w, A);
}, rename(A, C) {
var B = x.dirname(A), E = x.dirname(C), w = x.basename(A), K = x.basename(C), Y, k, R;
if (Y = D.lookupPath(A, { parent: !0 }), k = Y.node, Y = D.lookupPath(C, { parent: !0 }), R = Y.node, !k || !R) throw new D.ErrnoError(44);
if (k.mount !== R.mount)
throw new D.ErrnoError(75);
var H = D.lookupNode(k, w), L = cA.relative(A, E);
if (L.charAt(0) !== ".")
throw new D.ErrnoError(28);
if (L = cA.relative(C, B), L.charAt(0) !== ".")
throw new D.ErrnoError(55);
var q;
try {
q = D.lookupNode(R, K);
} catch {
}
if (H !== q) {
var p = D.isDir(H.mode), O = D.mayDelete(k, w, p);
if (O)
throw new D.ErrnoError(O);
if (O = q ? D.mayDelete(R, K, p) : D.mayCreate(R, K), O)
throw new D.ErrnoError(O);
if (!k.node_ops.rename)
throw new D.ErrnoError(63);
if (D.isMountpoint(H) || q && D.isMountpoint(q))
throw new D.ErrnoError(10);
if (R !== k && (O = D.nodePermissions(k, "w"), O))
throw new D.ErrnoError(O);
D.hashRemoveNode(H);
try {
k.node_ops.rename(H, R, K), H.parent = R;
} catch (v) {
throw v;
} finally {
D.hashAddNode(H);
}
}
}, rmdir(A) {
var C = D.lookupPath(A, { parent: !0 }), B = C.node, E = x.basename(A), w = D.lookupNode(B, E), K = D.mayDelete(B, E, !0);
if (K)
throw new D.ErrnoError(K);
if (!B.node_ops.rmdir)
throw new D.ErrnoError(63);
if (D.isMountpoint(w))
throw new D.ErrnoError(10);
B.node_ops.rmdir(B, E), D.destroyNode(w);
}, readdir(A) {
var C = D.lookupPath(A, { follow: !0 }), B = C.node, E = D.checkOpExists(B.node_ops.readdir, 54);
return E(B);
}, unlink(A) {
var C = D.lookupPath(A, { parent: !0 }), B = C.node;
if (!B)
throw new D.ErrnoError(44);
var E = x.basename(A), w = D.lookupNode(B, E), K = D.mayDelete(B, E, !1);
if (K)
throw new D.ErrnoError(K);
if (!B.node_ops.unlink)
throw new D.ErrnoError(63);
if (D.isMountpoint(w))
throw new D.ErrnoError(10);
B.node_ops.unlink(B, E), D.destroyNode(w);
}, readlink(A) {
var C = D.lookupPath(A), B = C.node;
if (!B)
throw new D.ErrnoError(44);
if (!B.node_ops.readlink)
throw new D.ErrnoError(28);
return B.node_ops.readlink(B);
}, stat(A, C) {
var B = D.lookupPath(A, { follow: !C }), E = B.node, w = D.checkOpExists(E.node_ops.getattr, 63);
return w(E);
}, fstat(A) {
var C = D.getStreamChecked(A), B = C.node, E = C.stream_ops.getattr, w = E ? C : B;
return E ?? (E = B.node_ops.getattr), D.checkOpExists(E, 63), E(w);
}, lstat(A) {
return D.stat(A, !0);
}, doChmod(A, C, B, E) {
D.doSetAttr(A, C, { mode: B & 4095 | C.mode & -4096, ctime: Date.now(), dontFollow: E });
}, chmod(A, C, B) {
var E;
if (typeof A == "string") {
var w = D.lookupPath(A, { follow: !B });
E = w.node;
} else
E = A;
D.doChmod(null, E, C, B);
}, lchmod(A, C) {
D.chmod(A, C, !0);
}, fchmod(A, C) {
var B = D.getStreamChecked(A);
D.doChmod(B, B.node, C, !1);
}, doChown(A, C, B) {
D.doSetAttr(A, C, { timestamp: Date.now(), dontFollow: B });
}, chown(A, C, B, E) {
var w;
if (typeof A == "string") {
var K = D.lookupPath(A, { follow: !E });
w = K.node;
} else
w = A;
D.doChown(null, w, E);
}, lchown(A, C, B) {
D.chown(A, C, B, !0);
}, fchown(A, C, B) {
var E = D.getStreamChecked(A);
D.doChown(E, E.node, !1);
}, doTruncate(A, C, B) {
if (D.isDir(C.mode))
throw new D.ErrnoError(31);
if (!D.isFile(C.mode))
throw new D.ErrnoError(28);
var E = D.nodePermissions(C, "w");
if (E)
throw new D.ErrnoError(E);
D.doSetAttr(A, C, { size: B, timestamp: Date.now() });
}, truncate(A, C) {
if (C < 0)
throw new D.ErrnoError(28);
var B;
if (typeof A == "string") {
var E = D.lookupPath(A, { follow: !0 });
B = E.node;
} else
B = A;
D.doTruncate(null, B, C);
}, ftruncate(A, C) {
var B = D.getStreamChecked(A);
if (C < 0 || !(B.flags & 2097155))
throw new D.ErrnoError(28);
D.doTruncate(B, B.node, C);
}, utime(A, C, B) {
var E = D.lookupPath(A, { follow: !0 }), w = E.node, K = D.checkOpExists(w.node_ops.setattr, 63);
K(w, { atime: C, mtime: B });
}, open(A, C, B = 438) {
if (A === "")
throw new D.ErrnoError(44);
C = typeof C == "string" ? PC(C) : C, C & 64 ? B = B & 4095 | 32768 : B = 0;
var E, w;
if (typeof A == "object")
E = A;
else {
w = A.endsWith("/");
var K = D.lookupPath(A, { follow: !(C & 131072), noent_okay: !0 });
E = K.node, A = K.path;
}
var Y = !1;
if (C & 64)
if (E) {
if (C & 128)
throw new D.ErrnoError(20);
} else {
if (w)
throw new D.ErrnoError(31);
E = D.mknod(A, B | 511, 0), Y = !0;
}
if (!E)
throw new D.ErrnoError(44);
if (D.isChrdev(E.mode) && (C &= -513), C & 65536 && !D.isDir(E.mode))
throw new D.ErrnoError(54);
if (!Y) {
var k = D.mayOpen(E, C);
if (k)
throw new D.ErrnoError(k);
}
C & 512 && !Y && D.truncate(E, 0), C &= -131713;
var R = D.createStream({ node: E, path: D.getPath(E), flags: C, seekable: !0, position: 0, stream_ops: E.stream_ops, ungotten: [], error: !1 });
return R.stream_ops.open && R.stream_ops.open(R), Y && D.chmod(E, B & 511), I.logReadFiles && !(C & 1) && (A in D.readFiles || (D.readFiles[A] = 1)), R;
}, close(A) {
if (D.isClosed(A))
throw new D.ErrnoError(8);
A.getdents && (A.getdents = null);
try {
A.stream_ops.close && A.stream_ops.close(A);
} catch (C) {
throw C;
} finally {
D.closeStream(A.fd);
}
A.fd = null;
}, isClosed(A) {
return A.fd === null;
}, llseek(A, C, B) {
if (D.isClosed(A))
throw new D.ErrnoError(8);
if (!A.seekable || !A.stream_ops.llseek)
throw new D.ErrnoError(70);
if (B != 0 && B != 1 && B != 2)
throw new D.ErrnoError(28);
return A.position = A.stream_ops.llseek(A, C, B), A.ungotten = [], A.position;
}, read(A, C, B, E, w) {
if (E < 0 || w < 0)
throw new D.ErrnoError(28);
if (D.isClosed(A))
throw new D.ErrnoError(8);
if ((A.flags & 2097155) === 1)
throw new D.ErrnoError(8);
if (D.isDir(A.node.mode))
throw new D.ErrnoError(31);
if (!A.stream_ops.read)
throw new D.ErrnoError(28);
var K = typeof w < "u";
if (!K)
w = A.position;
else if (!A.seekable)
throw new D.ErrnoError(70);
var Y = A.stream_ops.read(A, C, B, E, w);
return K || (A.position += Y), Y;
}, write(A, C, B, E, w, K) {
if (E < 0 || w < 0)
throw new D.ErrnoError(28);
if (D.isClosed(A))
throw new D.ErrnoError(8);
if (!(A.flags & 2097155))
throw new D.ErrnoError(8);
if (D.isDir(A.node.mode))
throw new D.ErrnoError(31);
if (!A.stream_ops.write)
throw new D.ErrnoError(28);
A.seekable && A.flags & 1024 && D.llseek(A, 0, 2);
var Y = typeof w < "u";
if (!Y)
w = A.position;
else if (!A.seekable)
throw new D.ErrnoError(70);
var k = A.stream_ops.write(A, C, B, E, w, K);
return Y || (A.position += k), k;
}, allocate(A, C, B) {
if (D.isClosed(A))
throw new D.ErrnoError(8);
if (C < 0 || B <= 0)
throw new D.ErrnoError(28);
if (!(A.flags & 2097155))
throw new D.ErrnoError(8);
if (!D.isFile(A.node.mode) && !D.isDir(A.node.mode))
throw new D.ErrnoError(43);
if (!A.stream_ops.allocate)
throw new D.ErrnoError(138);
A.stream_ops.allocate(A, C, B);
}, mmap(A, C, B, E, w) {
if (E & 2 && !(w & 2) && (A.flags & 2097155) !== 2)
throw new D.ErrnoError(2);
if ((A.flags & 2097155) === 1)
throw new D.ErrnoError(2);
if (!A.stream_ops.mmap)
throw new D.ErrnoError(43);
if (!C)
throw new D.ErrnoError(28);
return A.stream_ops.mmap(A, C, B, E, w);
}, msync(A, C, B, E, w) {
return A.stream_ops.msync ? A.stream_ops.msync(A, C, B, E, w) : 0;
}, ioctl(A, C, B) {
if (!A.stream_ops.ioctl)
throw new D.ErrnoError(59);
return A.stream_ops.ioctl(A, C, B);
}, readFile(A, C = {}) {
if (C.flags = C.flags || 0,