@bloopjs/bloop 0.0.58 → 0.0.60
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.
- package/dist/mod.js +24 -14
- package/dist/mod.js.map +5 -5
- package/dist/mount.d.ts +7 -1
- package/dist/mount.d.ts.map +1 -1
- package/dist/sim.d.ts +7 -2
- package/dist/sim.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/mount.ts +31 -14
- package/src/sim.ts +9 -3
package/dist/mod.js
CHANGED
|
@@ -117,6 +117,11 @@ var EventType;
|
|
|
117
117
|
EventType2[EventType2["MouseUp"] = 5] = "MouseUp";
|
|
118
118
|
EventType2[EventType2["MouseWheel"] = 6] = "MouseWheel";
|
|
119
119
|
EventType2[EventType2["FrameStart"] = 7] = "FrameStart";
|
|
120
|
+
EventType2[EventType2["SessionInit"] = 8] = "SessionInit";
|
|
121
|
+
EventType2[EventType2["SessionSetLocalPeer"] = 9] = "SessionSetLocalPeer";
|
|
122
|
+
EventType2[EventType2["SessionConnectPeer"] = 10] = "SessionConnectPeer";
|
|
123
|
+
EventType2[EventType2["SessionDisconnectPeer"] = 11] = "SessionDisconnectPeer";
|
|
124
|
+
EventType2[EventType2["SessionEnd"] = 12] = "SessionEnd";
|
|
120
125
|
})(EventType ||= {});
|
|
121
126
|
var MouseButton;
|
|
122
127
|
((MouseButton2) => {
|
|
@@ -1309,10 +1314,11 @@ class Sim {
|
|
|
1309
1314
|
copy.set(memoryView);
|
|
1310
1315
|
return copy;
|
|
1311
1316
|
}
|
|
1312
|
-
|
|
1317
|
+
static NETWORK_MAX_PACKET_BYTES = 2 * 1024 * 1024;
|
|
1318
|
+
record(maxEvents, maxPacketBytes) {
|
|
1313
1319
|
const serializer = this.#serialize ? this.#serialize() : null;
|
|
1314
1320
|
const size = serializer ? serializer.size : 0;
|
|
1315
|
-
const result = this.wasm.start_recording(size, maxEvents);
|
|
1321
|
+
const result = this.wasm.start_recording(size, maxEvents, maxPacketBytes);
|
|
1316
1322
|
if (result !== 0) {
|
|
1317
1323
|
throw new Error(`failed to start recording, error code=${result}`);
|
|
1318
1324
|
}
|
|
@@ -1412,12 +1418,12 @@ class Sim {
|
|
|
1412
1418
|
async function mount(opts, options) {
|
|
1413
1419
|
const wasmUrl = options?.wasmUrl ?? opts.wasmUrl ?? DEFAULT_WASM_URL;
|
|
1414
1420
|
const startRecording = options?.startRecording ?? opts.startRecording ?? true;
|
|
1415
|
-
const maxEvents =
|
|
1421
|
+
const { maxEvents, maxPacketBytes } = calculateTapeConfig(options?.tape);
|
|
1416
1422
|
const bytes = await fetch(wasmUrl).then((res) => res.arrayBuffer()).catch((e) => {
|
|
1417
1423
|
console.error(`Failed to fetch wasm at ${wasmUrl}`, e);
|
|
1418
1424
|
throw e;
|
|
1419
1425
|
});
|
|
1420
|
-
const memory = new WebAssembly.Memory({ initial:
|
|
1426
|
+
const memory = new WebAssembly.Memory({ initial: 310, maximum: 1000 });
|
|
1421
1427
|
let sim;
|
|
1422
1428
|
const wasmInstantiatedSource = await WebAssembly.instantiate(bytes, {
|
|
1423
1429
|
env: {
|
|
@@ -1478,7 +1484,7 @@ async function mount(opts, options) {
|
|
|
1478
1484
|
serialize: opts.hooks.serialize
|
|
1479
1485
|
});
|
|
1480
1486
|
if (startRecording) {
|
|
1481
|
-
sim.record(maxEvents);
|
|
1487
|
+
sim.record(maxEvents, maxPacketBytes);
|
|
1482
1488
|
}
|
|
1483
1489
|
opts.hooks.setBuffer(memory.buffer);
|
|
1484
1490
|
opts.hooks.setContext(enginePointer);
|
|
@@ -1486,14 +1492,18 @@ async function mount(opts, options) {
|
|
|
1486
1492
|
sim
|
|
1487
1493
|
};
|
|
1488
1494
|
}
|
|
1489
|
-
function
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1495
|
+
function calculateTapeConfig(tape) {
|
|
1496
|
+
let maxEvents;
|
|
1497
|
+
if (!tape) {
|
|
1498
|
+
maxEvents = 1024;
|
|
1499
|
+
} else if ("maxEvents" in tape) {
|
|
1500
|
+
maxEvents = tape.maxEvents;
|
|
1501
|
+
} else {
|
|
1502
|
+
const avgEvents = tape.averageEventsPerFrame ?? 2;
|
|
1503
|
+
maxEvents = Math.ceil(tape.duration * 60 * avgEvents);
|
|
1504
|
+
}
|
|
1505
|
+
const maxPacketBytes = tape?.localOnly ? 0 : Sim.NETWORK_MAX_PACKET_BYTES;
|
|
1506
|
+
return { maxEvents, maxPacketBytes };
|
|
1497
1507
|
}
|
|
1498
1508
|
// src/bloop.ts
|
|
1499
1509
|
class Bloop {
|
|
@@ -1645,5 +1655,5 @@ export {
|
|
|
1645
1655
|
Bloop
|
|
1646
1656
|
};
|
|
1647
1657
|
|
|
1648
|
-
//# debugId=
|
|
1658
|
+
//# debugId=6869EB8BB4207B5564756E2164756E21
|
|
1649
1659
|
//# sourceMappingURL=mod.js.map
|
package/dist/mod.js.map
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
"sources": ["../src/util.ts", "../../engine/dist/engine.js", "../src/net.ts", "../src/sim.ts", "../src/mount.ts", "../src/bloop.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"export function toHexString(dataView: DataView, length?: number): string {\n length ??= dataView.byteLength;\n let hexString = \"\";\n for (let i = 0; i < length; i++) {\n const byte = dataView.getUint8(i);\n hexString += `${byte.toString(16).padStart(2, \"0\")} `;\n }\n return hexString.trim();\n}\n\nexport function assert(condition: any, message?: string): asserts condition {\n if (condition == null || condition === false) {\n throw new Error(message ?? \"Assertion failed\");\n }\n}\n\nconst backpressureLogs = new Map<string, number>();\n\n/**\n * Log message a single time only\n *\n * @example\n *\n * Util.logOnce(\"Frame rendered\", 12345);\n */\nexport function logOnce(...args: any[]) {\n const key = args.map((a) => String(a)).join(\" \");\n if (!backpressureLogs.has(key)) {\n console.log(...args);\n backpressureLogs.set(key, 1);\n }\n}\n\n/**\n * Log messages at most once per second\n *\n * @example\n *\n * Util.logPerSecond(performance.now(), \"Frame rendered\", 12345);\n */\nexport function logPerSecond(now: number, ...args: any[]) {\n logEvery(now, 1000, ...args);\n}\n\n/**\n * Log messages every N milliseconds\n *\n * @example\n *\n * Util.logEvery(20, \"Frame rendered\", 12345);\n */\nexport function logEvery(now: number, interval: number = 10, ...args: any[]) {\n const key = args.map((a) => String(a)).join(\" \");\n const lastLogged = backpressureLogs.get(key) ?? -Infinity;\n if (now - lastLogged >= interval) {\n console.log(...args);\n backpressureLogs.set(key, now);\n }\n}\n\nexport function unwrap<T>(\n value: T | null | undefined,\n message?: string,\n): NonNullable<T> {\n assert(value != null, message ?? `Unwrap failed: value is ${value}`);\n return value;\n}\n",
|
|
6
|
-
"var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, {\n get: all[name],\n enumerable: true,\n configurable: true,\n set: (newValue) => all[name] = () => newValue\n });\n};\n\n// js/codegen/enums.ts\nvar exports_enums = {};\n__export(exports_enums, {\n MouseButton: () => MouseButton,\n Key: () => Key,\n InputSource: () => InputSource,\n EventType: () => EventType\n});\nvar EventType;\n((EventType2) => {\n EventType2[EventType2[\"None\"] = 0] = \"None\";\n EventType2[EventType2[\"KeyDown\"] = 1] = \"KeyDown\";\n EventType2[EventType2[\"KeyUp\"] = 2] = \"KeyUp\";\n EventType2[EventType2[\"MouseMove\"] = 3] = \"MouseMove\";\n EventType2[EventType2[\"MouseDown\"] = 4] = \"MouseDown\";\n EventType2[EventType2[\"MouseUp\"] = 5] = \"MouseUp\";\n EventType2[EventType2[\"MouseWheel\"] = 6] = \"MouseWheel\";\n EventType2[EventType2[\"FrameStart\"] = 7] = \"FrameStart\";\n})(EventType ||= {});\nvar MouseButton;\n((MouseButton2) => {\n MouseButton2[MouseButton2[\"None\"] = 0] = \"None\";\n MouseButton2[MouseButton2[\"Left\"] = 1] = \"Left\";\n MouseButton2[MouseButton2[\"Middle\"] = 2] = \"Middle\";\n MouseButton2[MouseButton2[\"Right\"] = 3] = \"Right\";\n MouseButton2[MouseButton2[\"X1\"] = 4] = \"X1\";\n MouseButton2[MouseButton2[\"X2\"] = 5] = \"X2\";\n MouseButton2[MouseButton2[\"X3\"] = 6] = \"X3\";\n MouseButton2[MouseButton2[\"X4\"] = 7] = \"X4\";\n MouseButton2[MouseButton2[\"X5\"] = 8] = \"X5\";\n})(MouseButton ||= {});\nvar Key;\n((Key2) => {\n Key2[Key2[\"None\"] = 0] = \"None\";\n Key2[Key2[\"Backquote\"] = 1] = \"Backquote\";\n Key2[Key2[\"Backslash\"] = 2] = \"Backslash\";\n Key2[Key2[\"BracketLeft\"] = 3] = \"BracketLeft\";\n Key2[Key2[\"BracketRight\"] = 4] = \"BracketRight\";\n Key2[Key2[\"Comma\"] = 5] = \"Comma\";\n Key2[Key2[\"Digit0\"] = 6] = \"Digit0\";\n Key2[Key2[\"Digit1\"] = 7] = \"Digit1\";\n Key2[Key2[\"Digit2\"] = 8] = \"Digit2\";\n Key2[Key2[\"Digit3\"] = 9] = \"Digit3\";\n Key2[Key2[\"Digit4\"] = 10] = \"Digit4\";\n Key2[Key2[\"Digit5\"] = 11] = \"Digit5\";\n Key2[Key2[\"Digit6\"] = 12] = \"Digit6\";\n Key2[Key2[\"Digit7\"] = 13] = \"Digit7\";\n Key2[Key2[\"Digit8\"] = 14] = \"Digit8\";\n Key2[Key2[\"Digit9\"] = 15] = \"Digit9\";\n Key2[Key2[\"Equal\"] = 16] = \"Equal\";\n Key2[Key2[\"IntlBackslash\"] = 17] = \"IntlBackslash\";\n Key2[Key2[\"IntlRo\"] = 18] = \"IntlRo\";\n Key2[Key2[\"IntlYen\"] = 19] = \"IntlYen\";\n Key2[Key2[\"KeyA\"] = 20] = \"KeyA\";\n Key2[Key2[\"KeyB\"] = 21] = \"KeyB\";\n Key2[Key2[\"KeyC\"] = 22] = \"KeyC\";\n Key2[Key2[\"KeyD\"] = 23] = \"KeyD\";\n Key2[Key2[\"KeyE\"] = 24] = \"KeyE\";\n Key2[Key2[\"KeyF\"] = 25] = \"KeyF\";\n Key2[Key2[\"KeyG\"] = 26] = \"KeyG\";\n Key2[Key2[\"KeyH\"] = 27] = \"KeyH\";\n Key2[Key2[\"KeyI\"] = 28] = \"KeyI\";\n Key2[Key2[\"KeyJ\"] = 29] = \"KeyJ\";\n Key2[Key2[\"KeyK\"] = 30] = \"KeyK\";\n Key2[Key2[\"KeyL\"] = 31] = \"KeyL\";\n Key2[Key2[\"KeyM\"] = 32] = \"KeyM\";\n Key2[Key2[\"KeyN\"] = 33] = \"KeyN\";\n Key2[Key2[\"KeyO\"] = 34] = \"KeyO\";\n Key2[Key2[\"KeyP\"] = 35] = \"KeyP\";\n Key2[Key2[\"KeyQ\"] = 36] = \"KeyQ\";\n Key2[Key2[\"KeyR\"] = 37] = \"KeyR\";\n Key2[Key2[\"KeyS\"] = 38] = \"KeyS\";\n Key2[Key2[\"KeyT\"] = 39] = \"KeyT\";\n Key2[Key2[\"KeyU\"] = 40] = \"KeyU\";\n Key2[Key2[\"KeyV\"] = 41] = \"KeyV\";\n Key2[Key2[\"KeyW\"] = 42] = \"KeyW\";\n Key2[Key2[\"KeyX\"] = 43] = \"KeyX\";\n Key2[Key2[\"KeyY\"] = 44] = \"KeyY\";\n Key2[Key2[\"KeyZ\"] = 45] = \"KeyZ\";\n Key2[Key2[\"Minus\"] = 46] = \"Minus\";\n Key2[Key2[\"Period\"] = 47] = \"Period\";\n Key2[Key2[\"Quote\"] = 48] = \"Quote\";\n Key2[Key2[\"Semicolon\"] = 49] = \"Semicolon\";\n Key2[Key2[\"Slash\"] = 50] = \"Slash\";\n Key2[Key2[\"AltLeft\"] = 51] = \"AltLeft\";\n Key2[Key2[\"AltRight\"] = 52] = \"AltRight\";\n Key2[Key2[\"Backspace\"] = 53] = \"Backspace\";\n Key2[Key2[\"CapsLock\"] = 54] = \"CapsLock\";\n Key2[Key2[\"ContextMenu\"] = 55] = \"ContextMenu\";\n Key2[Key2[\"ControlLeft\"] = 56] = \"ControlLeft\";\n Key2[Key2[\"ControlRight\"] = 57] = \"ControlRight\";\n Key2[Key2[\"Enter\"] = 58] = \"Enter\";\n Key2[Key2[\"MetaLeft\"] = 59] = \"MetaLeft\";\n Key2[Key2[\"MetaRight\"] = 60] = \"MetaRight\";\n Key2[Key2[\"ShiftLeft\"] = 61] = \"ShiftLeft\";\n Key2[Key2[\"ShiftRight\"] = 62] = \"ShiftRight\";\n Key2[Key2[\"Space\"] = 63] = \"Space\";\n Key2[Key2[\"Tab\"] = 64] = \"Tab\";\n Key2[Key2[\"Convert\"] = 65] = \"Convert\";\n Key2[Key2[\"KanaMode\"] = 66] = \"KanaMode\";\n Key2[Key2[\"Lang1\"] = 67] = \"Lang1\";\n Key2[Key2[\"Lang2\"] = 68] = \"Lang2\";\n Key2[Key2[\"Lang3\"] = 69] = \"Lang3\";\n Key2[Key2[\"Lang4\"] = 70] = \"Lang4\";\n Key2[Key2[\"Lang5\"] = 71] = \"Lang5\";\n Key2[Key2[\"NonConvert\"] = 72] = \"NonConvert\";\n Key2[Key2[\"Delete\"] = 73] = \"Delete\";\n Key2[Key2[\"End\"] = 74] = \"End\";\n Key2[Key2[\"Help\"] = 75] = \"Help\";\n Key2[Key2[\"Home\"] = 76] = \"Home\";\n Key2[Key2[\"Insert\"] = 77] = \"Insert\";\n Key2[Key2[\"PageDown\"] = 78] = \"PageDown\";\n Key2[Key2[\"PageUp\"] = 79] = \"PageUp\";\n Key2[Key2[\"ArrowDown\"] = 80] = \"ArrowDown\";\n Key2[Key2[\"ArrowLeft\"] = 81] = \"ArrowLeft\";\n Key2[Key2[\"ArrowRight\"] = 82] = \"ArrowRight\";\n Key2[Key2[\"ArrowUp\"] = 83] = \"ArrowUp\";\n Key2[Key2[\"NumLock\"] = 84] = \"NumLock\";\n Key2[Key2[\"Numpad0\"] = 85] = \"Numpad0\";\n Key2[Key2[\"Numpad1\"] = 86] = \"Numpad1\";\n Key2[Key2[\"Numpad2\"] = 87] = \"Numpad2\";\n Key2[Key2[\"Numpad3\"] = 88] = \"Numpad3\";\n Key2[Key2[\"Numpad4\"] = 89] = \"Numpad4\";\n Key2[Key2[\"Numpad5\"] = 90] = \"Numpad5\";\n Key2[Key2[\"Numpad6\"] = 91] = \"Numpad6\";\n Key2[Key2[\"Numpad7\"] = 92] = \"Numpad7\";\n Key2[Key2[\"Numpad8\"] = 93] = \"Numpad8\";\n Key2[Key2[\"Numpad9\"] = 94] = \"Numpad9\";\n Key2[Key2[\"NumpadAdd\"] = 95] = \"NumpadAdd\";\n Key2[Key2[\"NumpadBackspace\"] = 96] = \"NumpadBackspace\";\n Key2[Key2[\"NumpadClear\"] = 97] = \"NumpadClear\";\n Key2[Key2[\"NumpadClearEntry\"] = 98] = \"NumpadClearEntry\";\n Key2[Key2[\"NumpadComma\"] = 99] = \"NumpadComma\";\n Key2[Key2[\"NumpadDecimal\"] = 100] = \"NumpadDecimal\";\n Key2[Key2[\"NumpadDivide\"] = 101] = \"NumpadDivide\";\n Key2[Key2[\"NumpadEnter\"] = 102] = \"NumpadEnter\";\n Key2[Key2[\"NumpadEqual\"] = 103] = \"NumpadEqual\";\n Key2[Key2[\"NumpadHash\"] = 104] = \"NumpadHash\";\n Key2[Key2[\"NumpadMemoryAdd\"] = 105] = \"NumpadMemoryAdd\";\n Key2[Key2[\"NumpadMemoryClear\"] = 106] = \"NumpadMemoryClear\";\n Key2[Key2[\"NumpadMemoryRecall\"] = 107] = \"NumpadMemoryRecall\";\n Key2[Key2[\"NumpadMemoryStore\"] = 108] = \"NumpadMemoryStore\";\n Key2[Key2[\"NumpadMemorySubtract\"] = 109] = \"NumpadMemorySubtract\";\n Key2[Key2[\"NumpadMultiply\"] = 110] = \"NumpadMultiply\";\n Key2[Key2[\"NumpadParenLeft\"] = 111] = \"NumpadParenLeft\";\n Key2[Key2[\"NumpadParenRight\"] = 112] = \"NumpadParenRight\";\n Key2[Key2[\"NumpadStar\"] = 113] = \"NumpadStar\";\n Key2[Key2[\"NumpadSubtract\"] = 114] = \"NumpadSubtract\";\n Key2[Key2[\"Escape\"] = 115] = \"Escape\";\n Key2[Key2[\"Fn\"] = 116] = \"Fn\";\n Key2[Key2[\"FnLock\"] = 117] = \"FnLock\";\n Key2[Key2[\"PrintScreen\"] = 118] = \"PrintScreen\";\n Key2[Key2[\"ScrollLock\"] = 119] = \"ScrollLock\";\n Key2[Key2[\"Pause\"] = 120] = \"Pause\";\n Key2[Key2[\"BrowserBack\"] = 121] = \"BrowserBack\";\n Key2[Key2[\"BrowserFavorites\"] = 122] = \"BrowserFavorites\";\n Key2[Key2[\"BrowserForward\"] = 123] = \"BrowserForward\";\n Key2[Key2[\"BrowserHome\"] = 124] = \"BrowserHome\";\n Key2[Key2[\"BrowserRefresh\"] = 125] = \"BrowserRefresh\";\n Key2[Key2[\"BrowserSearch\"] = 126] = \"BrowserSearch\";\n Key2[Key2[\"BrowserStop\"] = 127] = \"BrowserStop\";\n Key2[Key2[\"Eject\"] = 128] = \"Eject\";\n Key2[Key2[\"LaunchApp1\"] = 129] = \"LaunchApp1\";\n Key2[Key2[\"LaunchApp2\"] = 130] = \"LaunchApp2\";\n Key2[Key2[\"LaunchMail\"] = 131] = \"LaunchMail\";\n Key2[Key2[\"MediaPlayPause\"] = 132] = \"MediaPlayPause\";\n Key2[Key2[\"MediaSelect\"] = 133] = \"MediaSelect\";\n Key2[Key2[\"MediaStop\"] = 134] = \"MediaStop\";\n Key2[Key2[\"MediaTrackNext\"] = 135] = \"MediaTrackNext\";\n Key2[Key2[\"MediaTrackPrevious\"] = 136] = \"MediaTrackPrevious\";\n Key2[Key2[\"Power\"] = 137] = \"Power\";\n Key2[Key2[\"Sleep\"] = 138] = \"Sleep\";\n Key2[Key2[\"AudioVolumeDown\"] = 139] = \"AudioVolumeDown\";\n Key2[Key2[\"AudioVolumeMute\"] = 140] = \"AudioVolumeMute\";\n Key2[Key2[\"AudioVolumeUp\"] = 141] = \"AudioVolumeUp\";\n Key2[Key2[\"WakeUp\"] = 142] = \"WakeUp\";\n Key2[Key2[\"Hyper\"] = 143] = \"Hyper\";\n Key2[Key2[\"Super\"] = 144] = \"Super\";\n Key2[Key2[\"Turbo\"] = 145] = \"Turbo\";\n Key2[Key2[\"Abort\"] = 146] = \"Abort\";\n Key2[Key2[\"Resume\"] = 147] = \"Resume\";\n Key2[Key2[\"Suspend\"] = 148] = \"Suspend\";\n Key2[Key2[\"Again\"] = 149] = \"Again\";\n Key2[Key2[\"Copy\"] = 150] = \"Copy\";\n Key2[Key2[\"Cut\"] = 151] = \"Cut\";\n Key2[Key2[\"Find\"] = 152] = \"Find\";\n Key2[Key2[\"Open\"] = 153] = \"Open\";\n Key2[Key2[\"Paste\"] = 154] = \"Paste\";\n Key2[Key2[\"Props\"] = 155] = \"Props\";\n Key2[Key2[\"Select\"] = 156] = \"Select\";\n Key2[Key2[\"Undo\"] = 157] = \"Undo\";\n Key2[Key2[\"Hiragana\"] = 158] = \"Hiragana\";\n Key2[Key2[\"Katakana\"] = 159] = \"Katakana\";\n Key2[Key2[\"F1\"] = 160] = \"F1\";\n Key2[Key2[\"F2\"] = 161] = \"F2\";\n Key2[Key2[\"F3\"] = 162] = \"F3\";\n Key2[Key2[\"F4\"] = 163] = \"F4\";\n Key2[Key2[\"F5\"] = 164] = \"F5\";\n Key2[Key2[\"F6\"] = 165] = \"F6\";\n Key2[Key2[\"F7\"] = 166] = \"F7\";\n Key2[Key2[\"F8\"] = 167] = \"F8\";\n Key2[Key2[\"F9\"] = 168] = \"F9\";\n Key2[Key2[\"F10\"] = 169] = \"F10\";\n Key2[Key2[\"F11\"] = 170] = \"F11\";\n Key2[Key2[\"F12\"] = 171] = \"F12\";\n Key2[Key2[\"F13\"] = 172] = \"F13\";\n Key2[Key2[\"F14\"] = 173] = \"F14\";\n Key2[Key2[\"F15\"] = 174] = \"F15\";\n Key2[Key2[\"F16\"] = 175] = \"F16\";\n Key2[Key2[\"F17\"] = 176] = \"F17\";\n Key2[Key2[\"F18\"] = 177] = \"F18\";\n Key2[Key2[\"F19\"] = 178] = \"F19\";\n Key2[Key2[\"F20\"] = 179] = \"F20\";\n Key2[Key2[\"F21\"] = 180] = \"F21\";\n Key2[Key2[\"F22\"] = 181] = \"F22\";\n Key2[Key2[\"F23\"] = 182] = \"F23\";\n Key2[Key2[\"F24\"] = 183] = \"F24\";\n Key2[Key2[\"F25\"] = 184] = \"F25\";\n Key2[Key2[\"F26\"] = 185] = \"F26\";\n Key2[Key2[\"F27\"] = 186] = \"F27\";\n Key2[Key2[\"F28\"] = 187] = \"F28\";\n Key2[Key2[\"F29\"] = 188] = \"F29\";\n Key2[Key2[\"F30\"] = 189] = \"F30\";\n Key2[Key2[\"F31\"] = 190] = \"F31\";\n Key2[Key2[\"F32\"] = 191] = \"F32\";\n Key2[Key2[\"F33\"] = 192] = \"F33\";\n Key2[Key2[\"F34\"] = 193] = \"F34\";\n Key2[Key2[\"F35\"] = 194] = \"F35\";\n})(Key ||= {});\nvar InputSource;\n((InputSource2) => {\n InputSource2[InputSource2[\"None\"] = 0] = \"None\";\n InputSource2[InputSource2[\"LocalKeyboard\"] = 1] = \"LocalKeyboard\";\n InputSource2[InputSource2[\"LocalMouse\"] = 2] = \"LocalMouse\";\n InputSource2[InputSource2[\"LocalTouch\"] = 3] = \"LocalTouch\";\n InputSource2[InputSource2[\"LocalGamepad0\"] = 4] = \"LocalGamepad0\";\n InputSource2[InputSource2[\"LocalGamepad1\"] = 5] = \"LocalGamepad1\";\n InputSource2[InputSource2[\"LocalGamepad2\"] = 6] = \"LocalGamepad2\";\n InputSource2[InputSource2[\"LocalGamepad3\"] = 7] = \"LocalGamepad3\";\n InputSource2[InputSource2[\"LocalGamepad4\"] = 8] = \"LocalGamepad4\";\n InputSource2[InputSource2[\"LocalGamepad5\"] = 9] = \"LocalGamepad5\";\n InputSource2[InputSource2[\"LocalGamepad6\"] = 10] = \"LocalGamepad6\";\n InputSource2[InputSource2[\"LocalGamepad7\"] = 11] = \"LocalGamepad7\";\n InputSource2[InputSource2[\"LocalGamepad8\"] = 12] = \"LocalGamepad8\";\n InputSource2[InputSource2[\"LocalGamepad9\"] = 13] = \"LocalGamepad9\";\n InputSource2[InputSource2[\"LocalGamepad10\"] = 14] = \"LocalGamepad10\";\n InputSource2[InputSource2[\"LocalGamepad11\"] = 15] = \"LocalGamepad11\";\n InputSource2[InputSource2[\"RemotePeer0\"] = 128] = \"RemotePeer0\";\n InputSource2[InputSource2[\"RemotePeer1\"] = 129] = \"RemotePeer1\";\n InputSource2[InputSource2[\"RemotePeer2\"] = 130] = \"RemotePeer2\";\n InputSource2[InputSource2[\"RemotePeer3\"] = 131] = \"RemotePeer3\";\n InputSource2[InputSource2[\"RemotePeer4\"] = 132] = \"RemotePeer4\";\n InputSource2[InputSource2[\"RemotePeer5\"] = 133] = \"RemotePeer5\";\n InputSource2[InputSource2[\"RemotePeer6\"] = 134] = \"RemotePeer6\";\n InputSource2[InputSource2[\"RemotePeer7\"] = 135] = \"RemotePeer7\";\n InputSource2[InputSource2[\"RemotePeer8\"] = 136] = \"RemotePeer8\";\n InputSource2[InputSource2[\"RemotePeer9\"] = 137] = \"RemotePeer9\";\n InputSource2[InputSource2[\"RemotePeer10\"] = 138] = \"RemotePeer10\";\n InputSource2[InputSource2[\"RemotePeer11\"] = 139] = \"RemotePeer11\";\n InputSource2[InputSource2[\"Unmapped\"] = 255] = \"Unmapped\";\n})(InputSource ||= {});\n// js/inputs.ts\nvar MAX_PLAYERS = 12;\nvar KEYBOARD_OFFSET = 0;\nvar KEYBOARD_SIZE = 256;\nvar MOUSE_OFFSET = 256;\nvar MOUSE_BUTTONS_OFFSET = 16;\nvar PLAYER_INPUTS_SIZE = 280;\nvar INPUT_CTX_SIZE = MAX_PLAYERS * PLAYER_INPUTS_SIZE;\nvar EVENT_PAYLOAD_SIZE = 8;\nvar EVENT_PAYLOAD_ALIGN = 4;\nfunction keyToKeyCode(key) {\n return Key[key];\n}\nfunction keyCodeToKey(code) {\n return Key[code];\n}\nfunction mouseButtonToMouseButtonCode(button) {\n return MouseButton[button];\n}\nfunction mouseButtonCodeToMouseButton(code) {\n return MouseButton[code];\n}\nfunction inputSourceToInputSourceCode(source) {\n return InputSource[source];\n}\nfunction inputSourceCodeToInputSource(code) {\n return InputSource[code];\n}\n\n// js/contexts/inputContext.ts\nclass PlayerInputContext {\n #dataView;\n #keys;\n #mouse;\n constructor(dataView) {\n this.#dataView = dataView;\n }\n get keys() {\n if (!this.#keys) {\n this.#keys = new KeyboardContext(new DataView(this.#dataView.buffer, this.#dataView.byteOffset + KEYBOARD_OFFSET));\n }\n return this.#keys;\n }\n get mouse() {\n if (!this.#mouse) {\n this.#mouse = new MouseContext(new DataView(this.#dataView.buffer, this.#dataView.byteOffset + MOUSE_OFFSET));\n }\n return this.#mouse;\n }\n}\n\nclass InputContext {\n #dataView;\n #players = [];\n constructor(dataView) {\n if (dataView) {\n this.#dataView = dataView;\n this.#buildPlayers();\n }\n }\n get dataView() {\n if (!this.#dataView) {\n throw new Error(\"DataView is not initialized on InputContext\");\n }\n return this.#dataView;\n }\n set dataView(dataView) {\n this.#dataView = dataView;\n this.#buildPlayers();\n }\n #buildPlayers() {\n this.#players = [];\n for (let i = 0;i < MAX_PLAYERS; i++) {\n const playerOffset = i * PLAYER_INPUTS_SIZE;\n const playerDataView = new DataView(this.dataView.buffer, this.dataView.byteOffset + playerOffset, PLAYER_INPUTS_SIZE);\n this.#players.push(new PlayerInputContext(playerDataView));\n }\n }\n get players() {\n return this.#players;\n }\n get keys() {\n if (!this.#players[0]) {\n throw new Error(\"No player inputs available in InputContext\");\n }\n return this.#players[0].keys;\n }\n get mouse() {\n if (!this.#players[0]) {\n throw new Error(\"No player inputs available in InputContext\");\n }\n return this.#players[0].mouse;\n }\n}\n\nclass MouseContext {\n #dataView;\n #buttonStates = new Map;\n constructor(dataView) {\n this.#dataView = dataView;\n }\n get x() {\n return this.#dataView.getFloat32(0, true);\n }\n get y() {\n return this.#dataView.getFloat32(4, true);\n }\n get wheel() {\n return { x: this.wheelX, y: this.wheelY };\n }\n get wheelX() {\n return this.#dataView.getFloat32(8, true);\n }\n get wheelY() {\n return this.#dataView.getFloat32(12, true);\n }\n get left() {\n return this.#buttonState(1 /* Left */);\n }\n get right() {\n return this.#buttonState(3 /* Right */);\n }\n get middle() {\n return this.#buttonState(2 /* Middle */);\n }\n #buttonState(code) {\n let state;\n if (this.#buttonStates.has(code)) {\n state = this.#buttonStates.get(code);\n } else {\n state = { down: false, held: false, up: false };\n this.#buttonStates.set(code, state);\n }\n const offset = MOUSE_BUTTONS_OFFSET;\n state.held = !!(this.#dataView.getUint8(offset + code) & 1);\n state.down = state.held && !(this.#dataView.getUint8(offset + code) & 2);\n state.up = !state.held && !!(this.#dataView.getUint8(offset + code) & 2);\n return state;\n }\n}\n\nclass KeyboardContext {\n #dataView;\n #keystates = new Map;\n constructor(dataView) {\n this.#dataView = dataView;\n }\n get shift() {\n return this.shiftLeft || this.shiftRight;\n }\n get alt() {\n return this.altLeft || this.altRight;\n }\n get control() {\n return this.controlLeft || this.controlRight;\n }\n get meta() {\n return this.metaLeft || this.metaRight;\n }\n get backquote() {\n return this.#keystate(1 /* Backquote */);\n }\n get backslash() {\n return this.#keystate(2 /* Backslash */);\n }\n get bracketLeft() {\n return this.#keystate(3 /* BracketLeft */);\n }\n get bracketRight() {\n return this.#keystate(4 /* BracketRight */);\n }\n get comma() {\n return this.#keystate(5 /* Comma */);\n }\n get digit0() {\n return this.#keystate(6 /* Digit0 */);\n }\n get digit1() {\n return this.#keystate(7 /* Digit1 */);\n }\n get digit2() {\n return this.#keystate(8 /* Digit2 */);\n }\n get digit3() {\n return this.#keystate(9 /* Digit3 */);\n }\n get digit4() {\n return this.#keystate(10 /* Digit4 */);\n }\n get digit5() {\n return this.#keystate(11 /* Digit5 */);\n }\n get digit6() {\n return this.#keystate(12 /* Digit6 */);\n }\n get digit7() {\n return this.#keystate(13 /* Digit7 */);\n }\n get digit8() {\n return this.#keystate(14 /* Digit8 */);\n }\n get digit9() {\n return this.#keystate(15 /* Digit9 */);\n }\n get equal() {\n return this.#keystate(16 /* Equal */);\n }\n get intlBackslash() {\n return this.#keystate(17 /* IntlBackslash */);\n }\n get intlRo() {\n return this.#keystate(18 /* IntlRo */);\n }\n get intlYen() {\n return this.#keystate(19 /* IntlYen */);\n }\n get a() {\n return this.#keystate(20 /* KeyA */);\n }\n get b() {\n return this.#keystate(21 /* KeyB */);\n }\n get c() {\n return this.#keystate(22 /* KeyC */);\n }\n get d() {\n return this.#keystate(23 /* KeyD */);\n }\n get e() {\n return this.#keystate(24 /* KeyE */);\n }\n get f() {\n return this.#keystate(25 /* KeyF */);\n }\n get g() {\n return this.#keystate(26 /* KeyG */);\n }\n get h() {\n return this.#keystate(27 /* KeyH */);\n }\n get i() {\n return this.#keystate(28 /* KeyI */);\n }\n get j() {\n return this.#keystate(29 /* KeyJ */);\n }\n get k() {\n return this.#keystate(30 /* KeyK */);\n }\n get l() {\n return this.#keystate(31 /* KeyL */);\n }\n get m() {\n return this.#keystate(32 /* KeyM */);\n }\n get n() {\n return this.#keystate(33 /* KeyN */);\n }\n get o() {\n return this.#keystate(34 /* KeyO */);\n }\n get p() {\n return this.#keystate(35 /* KeyP */);\n }\n get q() {\n return this.#keystate(36 /* KeyQ */);\n }\n get r() {\n return this.#keystate(37 /* KeyR */);\n }\n get s() {\n return this.#keystate(38 /* KeyS */);\n }\n get t() {\n return this.#keystate(39 /* KeyT */);\n }\n get u() {\n return this.#keystate(40 /* KeyU */);\n }\n get v() {\n return this.#keystate(41 /* KeyV */);\n }\n get w() {\n return this.#keystate(42 /* KeyW */);\n }\n get x() {\n return this.#keystate(43 /* KeyX */);\n }\n get y() {\n return this.#keystate(44 /* KeyY */);\n }\n get z() {\n return this.#keystate(45 /* KeyZ */);\n }\n get minus() {\n return this.#keystate(46 /* Minus */);\n }\n get period() {\n return this.#keystate(47 /* Period */);\n }\n get quote() {\n return this.#keystate(48 /* Quote */);\n }\n get semicolon() {\n return this.#keystate(49 /* Semicolon */);\n }\n get slash() {\n return this.#keystate(50 /* Slash */);\n }\n get altLeft() {\n return this.#keystate(51 /* AltLeft */);\n }\n get altRight() {\n return this.#keystate(52 /* AltRight */);\n }\n get backspace() {\n return this.#keystate(53 /* Backspace */);\n }\n get capsLock() {\n return this.#keystate(54 /* CapsLock */);\n }\n get contextMenu() {\n return this.#keystate(55 /* ContextMenu */);\n }\n get controlLeft() {\n return this.#keystate(56 /* ControlLeft */);\n }\n get controlRight() {\n return this.#keystate(57 /* ControlRight */);\n }\n get enter() {\n return this.#keystate(58 /* Enter */);\n }\n get metaLeft() {\n return this.#keystate(59 /* MetaLeft */);\n }\n get metaRight() {\n return this.#keystate(60 /* MetaRight */);\n }\n get shiftLeft() {\n return this.#keystate(61 /* ShiftLeft */);\n }\n get shiftRight() {\n return this.#keystate(62 /* ShiftRight */);\n }\n get space() {\n return this.#keystate(63 /* Space */);\n }\n get tab() {\n return this.#keystate(64 /* Tab */);\n }\n get convert() {\n return this.#keystate(65 /* Convert */);\n }\n get kanaMode() {\n return this.#keystate(66 /* KanaMode */);\n }\n get lang1() {\n return this.#keystate(67 /* Lang1 */);\n }\n get lang2() {\n return this.#keystate(68 /* Lang2 */);\n }\n get lang3() {\n return this.#keystate(69 /* Lang3 */);\n }\n get lang4() {\n return this.#keystate(70 /* Lang4 */);\n }\n get lang5() {\n return this.#keystate(71 /* Lang5 */);\n }\n get nonConvert() {\n return this.#keystate(72 /* NonConvert */);\n }\n get delete() {\n return this.#keystate(73 /* Delete */);\n }\n get end() {\n return this.#keystate(74 /* End */);\n }\n get help() {\n return this.#keystate(75 /* Help */);\n }\n get home() {\n return this.#keystate(76 /* Home */);\n }\n get insert() {\n return this.#keystate(77 /* Insert */);\n }\n get pageDown() {\n return this.#keystate(78 /* PageDown */);\n }\n get pageUp() {\n return this.#keystate(79 /* PageUp */);\n }\n get arrowDown() {\n return this.#keystate(80 /* ArrowDown */);\n }\n get arrowLeft() {\n return this.#keystate(81 /* ArrowLeft */);\n }\n get arrowRight() {\n return this.#keystate(82 /* ArrowRight */);\n }\n get arrowUp() {\n return this.#keystate(83 /* ArrowUp */);\n }\n get numLock() {\n return this.#keystate(84 /* NumLock */);\n }\n get numpad0() {\n return this.#keystate(85 /* Numpad0 */);\n }\n get numpad1() {\n return this.#keystate(86 /* Numpad1 */);\n }\n get numpad2() {\n return this.#keystate(87 /* Numpad2 */);\n }\n get numpad3() {\n return this.#keystate(88 /* Numpad3 */);\n }\n get numpad4() {\n return this.#keystate(89 /* Numpad4 */);\n }\n get numpad5() {\n return this.#keystate(90 /* Numpad5 */);\n }\n get numpad6() {\n return this.#keystate(91 /* Numpad6 */);\n }\n get numpad7() {\n return this.#keystate(92 /* Numpad7 */);\n }\n get numpad8() {\n return this.#keystate(93 /* Numpad8 */);\n }\n get numpad9() {\n return this.#keystate(94 /* Numpad9 */);\n }\n get numpadAdd() {\n return this.#keystate(95 /* NumpadAdd */);\n }\n get numpadBackspace() {\n return this.#keystate(96 /* NumpadBackspace */);\n }\n get numpadClear() {\n return this.#keystate(97 /* NumpadClear */);\n }\n get numpadClearEntry() {\n return this.#keystate(98 /* NumpadClearEntry */);\n }\n get numpadComma() {\n return this.#keystate(99 /* NumpadComma */);\n }\n get numpadDecimal() {\n return this.#keystate(100 /* NumpadDecimal */);\n }\n get numpadDivide() {\n return this.#keystate(101 /* NumpadDivide */);\n }\n get numpadEnter() {\n return this.#keystate(102 /* NumpadEnter */);\n }\n get numpadEqual() {\n return this.#keystate(103 /* NumpadEqual */);\n }\n get numpadHash() {\n return this.#keystate(104 /* NumpadHash */);\n }\n get numpadMemoryAdd() {\n return this.#keystate(105 /* NumpadMemoryAdd */);\n }\n get numpadMemoryClear() {\n return this.#keystate(106 /* NumpadMemoryClear */);\n }\n get numpadMemoryRecall() {\n return this.#keystate(107 /* NumpadMemoryRecall */);\n }\n get numpadMemoryStore() {\n return this.#keystate(108 /* NumpadMemoryStore */);\n }\n get numpadMemorySubtract() {\n return this.#keystate(109 /* NumpadMemorySubtract */);\n }\n get numpadMultiply() {\n return this.#keystate(110 /* NumpadMultiply */);\n }\n get numpadParenLeft() {\n return this.#keystate(111 /* NumpadParenLeft */);\n }\n get numpadParenRight() {\n return this.#keystate(112 /* NumpadParenRight */);\n }\n get numpadStar() {\n return this.#keystate(113 /* NumpadStar */);\n }\n get numpadSubtract() {\n return this.#keystate(114 /* NumpadSubtract */);\n }\n get escape() {\n return this.#keystate(115 /* Escape */);\n }\n get fn() {\n return this.#keystate(116 /* Fn */);\n }\n get fnLock() {\n return this.#keystate(117 /* FnLock */);\n }\n get printScreen() {\n return this.#keystate(118 /* PrintScreen */);\n }\n get scrollLock() {\n return this.#keystate(119 /* ScrollLock */);\n }\n get pause() {\n return this.#keystate(120 /* Pause */);\n }\n get browserBack() {\n return this.#keystate(121 /* BrowserBack */);\n }\n get browserFavorites() {\n return this.#keystate(122 /* BrowserFavorites */);\n }\n get browserForward() {\n return this.#keystate(123 /* BrowserForward */);\n }\n get browserHome() {\n return this.#keystate(124 /* BrowserHome */);\n }\n get browserRefresh() {\n return this.#keystate(125 /* BrowserRefresh */);\n }\n get browserSearch() {\n return this.#keystate(126 /* BrowserSearch */);\n }\n get browserStop() {\n return this.#keystate(127 /* BrowserStop */);\n }\n get eject() {\n return this.#keystate(128 /* Eject */);\n }\n get launchApp1() {\n return this.#keystate(129 /* LaunchApp1 */);\n }\n get launchApp2() {\n return this.#keystate(130 /* LaunchApp2 */);\n }\n get launchMail() {\n return this.#keystate(131 /* LaunchMail */);\n }\n get mediaPlayPause() {\n return this.#keystate(132 /* MediaPlayPause */);\n }\n get mediaSelect() {\n return this.#keystate(133 /* MediaSelect */);\n }\n get mediaStop() {\n return this.#keystate(134 /* MediaStop */);\n }\n get mediaTrackNext() {\n return this.#keystate(135 /* MediaTrackNext */);\n }\n get mediaTrackPrevious() {\n return this.#keystate(136 /* MediaTrackPrevious */);\n }\n get power() {\n return this.#keystate(137 /* Power */);\n }\n get sleep() {\n return this.#keystate(138 /* Sleep */);\n }\n get audioVolumeDown() {\n return this.#keystate(139 /* AudioVolumeDown */);\n }\n get audioVolumeMute() {\n return this.#keystate(140 /* AudioVolumeMute */);\n }\n get audioVolumeUp() {\n return this.#keystate(141 /* AudioVolumeUp */);\n }\n get wakeUp() {\n return this.#keystate(142 /* WakeUp */);\n }\n get hyper() {\n return this.#keystate(143 /* Hyper */);\n }\n get super() {\n return this.#keystate(144 /* Super */);\n }\n get turbo() {\n return this.#keystate(145 /* Turbo */);\n }\n get abort() {\n return this.#keystate(146 /* Abort */);\n }\n get resume() {\n return this.#keystate(147 /* Resume */);\n }\n get suspend() {\n return this.#keystate(148 /* Suspend */);\n }\n get again() {\n return this.#keystate(149 /* Again */);\n }\n get copy() {\n return this.#keystate(150 /* Copy */);\n }\n get cut() {\n return this.#keystate(151 /* Cut */);\n }\n get find() {\n return this.#keystate(152 /* Find */);\n }\n get open() {\n return this.#keystate(153 /* Open */);\n }\n get paste() {\n return this.#keystate(154 /* Paste */);\n }\n get props() {\n return this.#keystate(155 /* Props */);\n }\n get select() {\n return this.#keystate(156 /* Select */);\n }\n get undo() {\n return this.#keystate(157 /* Undo */);\n }\n get hiragana() {\n return this.#keystate(158 /* Hiragana */);\n }\n get katakana() {\n return this.#keystate(159 /* Katakana */);\n }\n get f1() {\n return this.#keystate(160 /* F1 */);\n }\n get f2() {\n return this.#keystate(161 /* F2 */);\n }\n get f3() {\n return this.#keystate(162 /* F3 */);\n }\n get f4() {\n return this.#keystate(163 /* F4 */);\n }\n get f5() {\n return this.#keystate(164 /* F5 */);\n }\n get f6() {\n return this.#keystate(165 /* F6 */);\n }\n get f7() {\n return this.#keystate(166 /* F7 */);\n }\n get f8() {\n return this.#keystate(167 /* F8 */);\n }\n get f9() {\n return this.#keystate(168 /* F9 */);\n }\n get f10() {\n return this.#keystate(169 /* F10 */);\n }\n get f11() {\n return this.#keystate(170 /* F11 */);\n }\n get f12() {\n return this.#keystate(171 /* F12 */);\n }\n get f13() {\n return this.#keystate(172 /* F13 */);\n }\n get f14() {\n return this.#keystate(173 /* F14 */);\n }\n get f15() {\n return this.#keystate(174 /* F15 */);\n }\n get f16() {\n return this.#keystate(175 /* F16 */);\n }\n get f17() {\n return this.#keystate(176 /* F17 */);\n }\n get f18() {\n return this.#keystate(177 /* F18 */);\n }\n get f19() {\n return this.#keystate(178 /* F19 */);\n }\n get f20() {\n return this.#keystate(179 /* F20 */);\n }\n get f21() {\n return this.#keystate(180 /* F21 */);\n }\n get f22() {\n return this.#keystate(181 /* F22 */);\n }\n get f23() {\n return this.#keystate(182 /* F23 */);\n }\n get f24() {\n return this.#keystate(183 /* F24 */);\n }\n get f25() {\n return this.#keystate(184 /* F25 */);\n }\n get f26() {\n return this.#keystate(185 /* F26 */);\n }\n get f27() {\n return this.#keystate(186 /* F27 */);\n }\n get f28() {\n return this.#keystate(187 /* F28 */);\n }\n get f29() {\n return this.#keystate(188 /* F29 */);\n }\n get f30() {\n return this.#keystate(189 /* F30 */);\n }\n get f31() {\n return this.#keystate(190 /* F31 */);\n }\n get f32() {\n return this.#keystate(191 /* F32 */);\n }\n get f33() {\n return this.#keystate(192 /* F33 */);\n }\n get f34() {\n return this.#keystate(193 /* F34 */);\n }\n get f35() {\n return this.#keystate(194 /* F35 */);\n }\n #keystate(code) {\n let state;\n if (this.#keystates.has(code)) {\n state = this.#keystates.get(code);\n } else {\n state = { down: false, held: false, up: false };\n this.#keystates.set(code, state);\n }\n state.held = !!(this.#dataView.getUint8(code) & 1);\n state.down = state.held && !(this.#dataView.getUint8(code) & 2);\n state.up = !state.held && !!(this.#dataView.getUint8(code) & 2);\n return state;\n }\n}\n// js/contexts/timeContext.ts\nclass TimeContext {\n dataView;\n constructor(dataView) {\n this.dataView = dataView;\n }\n get frame() {\n if (!this.dataView) {\n throw new Error(\"TimeContext DataView is not initialized\");\n }\n return this.dataView.getUint32(0, true);\n }\n get dt() {\n if (!this.dataView) {\n throw new Error(\"TimeContext DataView is not initialized\");\n }\n return this.dataView.getUint32(4, true) / 1000;\n }\n get time() {\n if (!this.dataView) {\n throw new Error(\"TimeContext DataView is not initialized\");\n }\n return this.dataView.getUint32(8, true) / 1000;\n }\n}\n// js/contexts/netContext.ts\nclass NetContext {\n dataView;\n constructor(dataView) {\n this.dataView = dataView;\n }\n get peerCount() {\n if (!this.dataView) {\n throw new Error(\"NetContext DataView is not initialized\");\n }\n return this.dataView.getUint8(0);\n }\n get isInSession() {\n return this.peerCount > 0;\n }\n get matchFrame() {\n if (!this.dataView) {\n throw new Error(\"NetContext DataView is not initialized\");\n }\n return this.dataView.getUint32(4, true);\n }\n}\n\n// js/engine.ts\nvar DEFAULT_WASM_URL = new URL(\"../wasm/bloop.wasm\", import.meta.url);\nvar TIME_CTX_OFFSET = 0;\nvar INPUT_CTX_OFFSET = TIME_CTX_OFFSET + 4;\nvar EVENTS_OFFSET = INPUT_CTX_OFFSET + 4;\nvar NET_CTX_OFFSET = EVENTS_OFFSET + 4;\nvar SNAPSHOT_HEADER_LEN = 16;\nvar SNAPSHOT_HEADER_USER_LEN_OFFSET = 4;\nvar SNAPSHOT_HEADER_ENGINE_LEN_OFFSET = 8;\nexport {\n mouseButtonToMouseButtonCode,\n mouseButtonCodeToMouseButton,\n keyToKeyCode,\n keyCodeToKey,\n inputSourceToInputSourceCode,\n inputSourceCodeToInputSource,\n TimeContext,\n TIME_CTX_OFFSET,\n SNAPSHOT_HEADER_USER_LEN_OFFSET,\n SNAPSHOT_HEADER_LEN,\n SNAPSHOT_HEADER_ENGINE_LEN_OFFSET,\n PlayerInputContext,\n PLAYER_INPUTS_SIZE,\n NetContext,\n NET_CTX_OFFSET,\n MouseContext,\n MOUSE_OFFSET,\n MOUSE_BUTTONS_OFFSET,\n MAX_PLAYERS,\n KeyboardContext,\n KEYBOARD_SIZE,\n KEYBOARD_OFFSET,\n InputContext,\n INPUT_CTX_SIZE,\n INPUT_CTX_OFFSET,\n exports_enums as Enums,\n EVENT_PAYLOAD_SIZE,\n EVENT_PAYLOAD_ALIGN,\n EVENTS_OFFSET,\n DEFAULT_WASM_URL\n};\n\n//# debugId=D5845EC450A91A9164756E2164756E21\n//# sourceMappingURL=engine.js.map\n",
|
|
6
|
+
"var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, {\n get: all[name],\n enumerable: true,\n configurable: true,\n set: (newValue) => all[name] = () => newValue\n });\n};\n\n// js/codegen/enums.ts\nvar exports_enums = {};\n__export(exports_enums, {\n MouseButton: () => MouseButton,\n Key: () => Key,\n InputSource: () => InputSource,\n EventType: () => EventType\n});\nvar EventType;\n((EventType2) => {\n EventType2[EventType2[\"None\"] = 0] = \"None\";\n EventType2[EventType2[\"KeyDown\"] = 1] = \"KeyDown\";\n EventType2[EventType2[\"KeyUp\"] = 2] = \"KeyUp\";\n EventType2[EventType2[\"MouseMove\"] = 3] = \"MouseMove\";\n EventType2[EventType2[\"MouseDown\"] = 4] = \"MouseDown\";\n EventType2[EventType2[\"MouseUp\"] = 5] = \"MouseUp\";\n EventType2[EventType2[\"MouseWheel\"] = 6] = \"MouseWheel\";\n EventType2[EventType2[\"FrameStart\"] = 7] = \"FrameStart\";\n EventType2[EventType2[\"SessionInit\"] = 8] = \"SessionInit\";\n EventType2[EventType2[\"SessionSetLocalPeer\"] = 9] = \"SessionSetLocalPeer\";\n EventType2[EventType2[\"SessionConnectPeer\"] = 10] = \"SessionConnectPeer\";\n EventType2[EventType2[\"SessionDisconnectPeer\"] = 11] = \"SessionDisconnectPeer\";\n EventType2[EventType2[\"SessionEnd\"] = 12] = \"SessionEnd\";\n})(EventType ||= {});\nvar MouseButton;\n((MouseButton2) => {\n MouseButton2[MouseButton2[\"None\"] = 0] = \"None\";\n MouseButton2[MouseButton2[\"Left\"] = 1] = \"Left\";\n MouseButton2[MouseButton2[\"Middle\"] = 2] = \"Middle\";\n MouseButton2[MouseButton2[\"Right\"] = 3] = \"Right\";\n MouseButton2[MouseButton2[\"X1\"] = 4] = \"X1\";\n MouseButton2[MouseButton2[\"X2\"] = 5] = \"X2\";\n MouseButton2[MouseButton2[\"X3\"] = 6] = \"X3\";\n MouseButton2[MouseButton2[\"X4\"] = 7] = \"X4\";\n MouseButton2[MouseButton2[\"X5\"] = 8] = \"X5\";\n})(MouseButton ||= {});\nvar Key;\n((Key2) => {\n Key2[Key2[\"None\"] = 0] = \"None\";\n Key2[Key2[\"Backquote\"] = 1] = \"Backquote\";\n Key2[Key2[\"Backslash\"] = 2] = \"Backslash\";\n Key2[Key2[\"BracketLeft\"] = 3] = \"BracketLeft\";\n Key2[Key2[\"BracketRight\"] = 4] = \"BracketRight\";\n Key2[Key2[\"Comma\"] = 5] = \"Comma\";\n Key2[Key2[\"Digit0\"] = 6] = \"Digit0\";\n Key2[Key2[\"Digit1\"] = 7] = \"Digit1\";\n Key2[Key2[\"Digit2\"] = 8] = \"Digit2\";\n Key2[Key2[\"Digit3\"] = 9] = \"Digit3\";\n Key2[Key2[\"Digit4\"] = 10] = \"Digit4\";\n Key2[Key2[\"Digit5\"] = 11] = \"Digit5\";\n Key2[Key2[\"Digit6\"] = 12] = \"Digit6\";\n Key2[Key2[\"Digit7\"] = 13] = \"Digit7\";\n Key2[Key2[\"Digit8\"] = 14] = \"Digit8\";\n Key2[Key2[\"Digit9\"] = 15] = \"Digit9\";\n Key2[Key2[\"Equal\"] = 16] = \"Equal\";\n Key2[Key2[\"IntlBackslash\"] = 17] = \"IntlBackslash\";\n Key2[Key2[\"IntlRo\"] = 18] = \"IntlRo\";\n Key2[Key2[\"IntlYen\"] = 19] = \"IntlYen\";\n Key2[Key2[\"KeyA\"] = 20] = \"KeyA\";\n Key2[Key2[\"KeyB\"] = 21] = \"KeyB\";\n Key2[Key2[\"KeyC\"] = 22] = \"KeyC\";\n Key2[Key2[\"KeyD\"] = 23] = \"KeyD\";\n Key2[Key2[\"KeyE\"] = 24] = \"KeyE\";\n Key2[Key2[\"KeyF\"] = 25] = \"KeyF\";\n Key2[Key2[\"KeyG\"] = 26] = \"KeyG\";\n Key2[Key2[\"KeyH\"] = 27] = \"KeyH\";\n Key2[Key2[\"KeyI\"] = 28] = \"KeyI\";\n Key2[Key2[\"KeyJ\"] = 29] = \"KeyJ\";\n Key2[Key2[\"KeyK\"] = 30] = \"KeyK\";\n Key2[Key2[\"KeyL\"] = 31] = \"KeyL\";\n Key2[Key2[\"KeyM\"] = 32] = \"KeyM\";\n Key2[Key2[\"KeyN\"] = 33] = \"KeyN\";\n Key2[Key2[\"KeyO\"] = 34] = \"KeyO\";\n Key2[Key2[\"KeyP\"] = 35] = \"KeyP\";\n Key2[Key2[\"KeyQ\"] = 36] = \"KeyQ\";\n Key2[Key2[\"KeyR\"] = 37] = \"KeyR\";\n Key2[Key2[\"KeyS\"] = 38] = \"KeyS\";\n Key2[Key2[\"KeyT\"] = 39] = \"KeyT\";\n Key2[Key2[\"KeyU\"] = 40] = \"KeyU\";\n Key2[Key2[\"KeyV\"] = 41] = \"KeyV\";\n Key2[Key2[\"KeyW\"] = 42] = \"KeyW\";\n Key2[Key2[\"KeyX\"] = 43] = \"KeyX\";\n Key2[Key2[\"KeyY\"] = 44] = \"KeyY\";\n Key2[Key2[\"KeyZ\"] = 45] = \"KeyZ\";\n Key2[Key2[\"Minus\"] = 46] = \"Minus\";\n Key2[Key2[\"Period\"] = 47] = \"Period\";\n Key2[Key2[\"Quote\"] = 48] = \"Quote\";\n Key2[Key2[\"Semicolon\"] = 49] = \"Semicolon\";\n Key2[Key2[\"Slash\"] = 50] = \"Slash\";\n Key2[Key2[\"AltLeft\"] = 51] = \"AltLeft\";\n Key2[Key2[\"AltRight\"] = 52] = \"AltRight\";\n Key2[Key2[\"Backspace\"] = 53] = \"Backspace\";\n Key2[Key2[\"CapsLock\"] = 54] = \"CapsLock\";\n Key2[Key2[\"ContextMenu\"] = 55] = \"ContextMenu\";\n Key2[Key2[\"ControlLeft\"] = 56] = \"ControlLeft\";\n Key2[Key2[\"ControlRight\"] = 57] = \"ControlRight\";\n Key2[Key2[\"Enter\"] = 58] = \"Enter\";\n Key2[Key2[\"MetaLeft\"] = 59] = \"MetaLeft\";\n Key2[Key2[\"MetaRight\"] = 60] = \"MetaRight\";\n Key2[Key2[\"ShiftLeft\"] = 61] = \"ShiftLeft\";\n Key2[Key2[\"ShiftRight\"] = 62] = \"ShiftRight\";\n Key2[Key2[\"Space\"] = 63] = \"Space\";\n Key2[Key2[\"Tab\"] = 64] = \"Tab\";\n Key2[Key2[\"Convert\"] = 65] = \"Convert\";\n Key2[Key2[\"KanaMode\"] = 66] = \"KanaMode\";\n Key2[Key2[\"Lang1\"] = 67] = \"Lang1\";\n Key2[Key2[\"Lang2\"] = 68] = \"Lang2\";\n Key2[Key2[\"Lang3\"] = 69] = \"Lang3\";\n Key2[Key2[\"Lang4\"] = 70] = \"Lang4\";\n Key2[Key2[\"Lang5\"] = 71] = \"Lang5\";\n Key2[Key2[\"NonConvert\"] = 72] = \"NonConvert\";\n Key2[Key2[\"Delete\"] = 73] = \"Delete\";\n Key2[Key2[\"End\"] = 74] = \"End\";\n Key2[Key2[\"Help\"] = 75] = \"Help\";\n Key2[Key2[\"Home\"] = 76] = \"Home\";\n Key2[Key2[\"Insert\"] = 77] = \"Insert\";\n Key2[Key2[\"PageDown\"] = 78] = \"PageDown\";\n Key2[Key2[\"PageUp\"] = 79] = \"PageUp\";\n Key2[Key2[\"ArrowDown\"] = 80] = \"ArrowDown\";\n Key2[Key2[\"ArrowLeft\"] = 81] = \"ArrowLeft\";\n Key2[Key2[\"ArrowRight\"] = 82] = \"ArrowRight\";\n Key2[Key2[\"ArrowUp\"] = 83] = \"ArrowUp\";\n Key2[Key2[\"NumLock\"] = 84] = \"NumLock\";\n Key2[Key2[\"Numpad0\"] = 85] = \"Numpad0\";\n Key2[Key2[\"Numpad1\"] = 86] = \"Numpad1\";\n Key2[Key2[\"Numpad2\"] = 87] = \"Numpad2\";\n Key2[Key2[\"Numpad3\"] = 88] = \"Numpad3\";\n Key2[Key2[\"Numpad4\"] = 89] = \"Numpad4\";\n Key2[Key2[\"Numpad5\"] = 90] = \"Numpad5\";\n Key2[Key2[\"Numpad6\"] = 91] = \"Numpad6\";\n Key2[Key2[\"Numpad7\"] = 92] = \"Numpad7\";\n Key2[Key2[\"Numpad8\"] = 93] = \"Numpad8\";\n Key2[Key2[\"Numpad9\"] = 94] = \"Numpad9\";\n Key2[Key2[\"NumpadAdd\"] = 95] = \"NumpadAdd\";\n Key2[Key2[\"NumpadBackspace\"] = 96] = \"NumpadBackspace\";\n Key2[Key2[\"NumpadClear\"] = 97] = \"NumpadClear\";\n Key2[Key2[\"NumpadClearEntry\"] = 98] = \"NumpadClearEntry\";\n Key2[Key2[\"NumpadComma\"] = 99] = \"NumpadComma\";\n Key2[Key2[\"NumpadDecimal\"] = 100] = \"NumpadDecimal\";\n Key2[Key2[\"NumpadDivide\"] = 101] = \"NumpadDivide\";\n Key2[Key2[\"NumpadEnter\"] = 102] = \"NumpadEnter\";\n Key2[Key2[\"NumpadEqual\"] = 103] = \"NumpadEqual\";\n Key2[Key2[\"NumpadHash\"] = 104] = \"NumpadHash\";\n Key2[Key2[\"NumpadMemoryAdd\"] = 105] = \"NumpadMemoryAdd\";\n Key2[Key2[\"NumpadMemoryClear\"] = 106] = \"NumpadMemoryClear\";\n Key2[Key2[\"NumpadMemoryRecall\"] = 107] = \"NumpadMemoryRecall\";\n Key2[Key2[\"NumpadMemoryStore\"] = 108] = \"NumpadMemoryStore\";\n Key2[Key2[\"NumpadMemorySubtract\"] = 109] = \"NumpadMemorySubtract\";\n Key2[Key2[\"NumpadMultiply\"] = 110] = \"NumpadMultiply\";\n Key2[Key2[\"NumpadParenLeft\"] = 111] = \"NumpadParenLeft\";\n Key2[Key2[\"NumpadParenRight\"] = 112] = \"NumpadParenRight\";\n Key2[Key2[\"NumpadStar\"] = 113] = \"NumpadStar\";\n Key2[Key2[\"NumpadSubtract\"] = 114] = \"NumpadSubtract\";\n Key2[Key2[\"Escape\"] = 115] = \"Escape\";\n Key2[Key2[\"Fn\"] = 116] = \"Fn\";\n Key2[Key2[\"FnLock\"] = 117] = \"FnLock\";\n Key2[Key2[\"PrintScreen\"] = 118] = \"PrintScreen\";\n Key2[Key2[\"ScrollLock\"] = 119] = \"ScrollLock\";\n Key2[Key2[\"Pause\"] = 120] = \"Pause\";\n Key2[Key2[\"BrowserBack\"] = 121] = \"BrowserBack\";\n Key2[Key2[\"BrowserFavorites\"] = 122] = \"BrowserFavorites\";\n Key2[Key2[\"BrowserForward\"] = 123] = \"BrowserForward\";\n Key2[Key2[\"BrowserHome\"] = 124] = \"BrowserHome\";\n Key2[Key2[\"BrowserRefresh\"] = 125] = \"BrowserRefresh\";\n Key2[Key2[\"BrowserSearch\"] = 126] = \"BrowserSearch\";\n Key2[Key2[\"BrowserStop\"] = 127] = \"BrowserStop\";\n Key2[Key2[\"Eject\"] = 128] = \"Eject\";\n Key2[Key2[\"LaunchApp1\"] = 129] = \"LaunchApp1\";\n Key2[Key2[\"LaunchApp2\"] = 130] = \"LaunchApp2\";\n Key2[Key2[\"LaunchMail\"] = 131] = \"LaunchMail\";\n Key2[Key2[\"MediaPlayPause\"] = 132] = \"MediaPlayPause\";\n Key2[Key2[\"MediaSelect\"] = 133] = \"MediaSelect\";\n Key2[Key2[\"MediaStop\"] = 134] = \"MediaStop\";\n Key2[Key2[\"MediaTrackNext\"] = 135] = \"MediaTrackNext\";\n Key2[Key2[\"MediaTrackPrevious\"] = 136] = \"MediaTrackPrevious\";\n Key2[Key2[\"Power\"] = 137] = \"Power\";\n Key2[Key2[\"Sleep\"] = 138] = \"Sleep\";\n Key2[Key2[\"AudioVolumeDown\"] = 139] = \"AudioVolumeDown\";\n Key2[Key2[\"AudioVolumeMute\"] = 140] = \"AudioVolumeMute\";\n Key2[Key2[\"AudioVolumeUp\"] = 141] = \"AudioVolumeUp\";\n Key2[Key2[\"WakeUp\"] = 142] = \"WakeUp\";\n Key2[Key2[\"Hyper\"] = 143] = \"Hyper\";\n Key2[Key2[\"Super\"] = 144] = \"Super\";\n Key2[Key2[\"Turbo\"] = 145] = \"Turbo\";\n Key2[Key2[\"Abort\"] = 146] = \"Abort\";\n Key2[Key2[\"Resume\"] = 147] = \"Resume\";\n Key2[Key2[\"Suspend\"] = 148] = \"Suspend\";\n Key2[Key2[\"Again\"] = 149] = \"Again\";\n Key2[Key2[\"Copy\"] = 150] = \"Copy\";\n Key2[Key2[\"Cut\"] = 151] = \"Cut\";\n Key2[Key2[\"Find\"] = 152] = \"Find\";\n Key2[Key2[\"Open\"] = 153] = \"Open\";\n Key2[Key2[\"Paste\"] = 154] = \"Paste\";\n Key2[Key2[\"Props\"] = 155] = \"Props\";\n Key2[Key2[\"Select\"] = 156] = \"Select\";\n Key2[Key2[\"Undo\"] = 157] = \"Undo\";\n Key2[Key2[\"Hiragana\"] = 158] = \"Hiragana\";\n Key2[Key2[\"Katakana\"] = 159] = \"Katakana\";\n Key2[Key2[\"F1\"] = 160] = \"F1\";\n Key2[Key2[\"F2\"] = 161] = \"F2\";\n Key2[Key2[\"F3\"] = 162] = \"F3\";\n Key2[Key2[\"F4\"] = 163] = \"F4\";\n Key2[Key2[\"F5\"] = 164] = \"F5\";\n Key2[Key2[\"F6\"] = 165] = \"F6\";\n Key2[Key2[\"F7\"] = 166] = \"F7\";\n Key2[Key2[\"F8\"] = 167] = \"F8\";\n Key2[Key2[\"F9\"] = 168] = \"F9\";\n Key2[Key2[\"F10\"] = 169] = \"F10\";\n Key2[Key2[\"F11\"] = 170] = \"F11\";\n Key2[Key2[\"F12\"] = 171] = \"F12\";\n Key2[Key2[\"F13\"] = 172] = \"F13\";\n Key2[Key2[\"F14\"] = 173] = \"F14\";\n Key2[Key2[\"F15\"] = 174] = \"F15\";\n Key2[Key2[\"F16\"] = 175] = \"F16\";\n Key2[Key2[\"F17\"] = 176] = \"F17\";\n Key2[Key2[\"F18\"] = 177] = \"F18\";\n Key2[Key2[\"F19\"] = 178] = \"F19\";\n Key2[Key2[\"F20\"] = 179] = \"F20\";\n Key2[Key2[\"F21\"] = 180] = \"F21\";\n Key2[Key2[\"F22\"] = 181] = \"F22\";\n Key2[Key2[\"F23\"] = 182] = \"F23\";\n Key2[Key2[\"F24\"] = 183] = \"F24\";\n Key2[Key2[\"F25\"] = 184] = \"F25\";\n Key2[Key2[\"F26\"] = 185] = \"F26\";\n Key2[Key2[\"F27\"] = 186] = \"F27\";\n Key2[Key2[\"F28\"] = 187] = \"F28\";\n Key2[Key2[\"F29\"] = 188] = \"F29\";\n Key2[Key2[\"F30\"] = 189] = \"F30\";\n Key2[Key2[\"F31\"] = 190] = \"F31\";\n Key2[Key2[\"F32\"] = 191] = \"F32\";\n Key2[Key2[\"F33\"] = 192] = \"F33\";\n Key2[Key2[\"F34\"] = 193] = \"F34\";\n Key2[Key2[\"F35\"] = 194] = \"F35\";\n})(Key ||= {});\nvar InputSource;\n((InputSource2) => {\n InputSource2[InputSource2[\"None\"] = 0] = \"None\";\n InputSource2[InputSource2[\"LocalKeyboard\"] = 1] = \"LocalKeyboard\";\n InputSource2[InputSource2[\"LocalMouse\"] = 2] = \"LocalMouse\";\n InputSource2[InputSource2[\"LocalTouch\"] = 3] = \"LocalTouch\";\n InputSource2[InputSource2[\"LocalGamepad0\"] = 4] = \"LocalGamepad0\";\n InputSource2[InputSource2[\"LocalGamepad1\"] = 5] = \"LocalGamepad1\";\n InputSource2[InputSource2[\"LocalGamepad2\"] = 6] = \"LocalGamepad2\";\n InputSource2[InputSource2[\"LocalGamepad3\"] = 7] = \"LocalGamepad3\";\n InputSource2[InputSource2[\"LocalGamepad4\"] = 8] = \"LocalGamepad4\";\n InputSource2[InputSource2[\"LocalGamepad5\"] = 9] = \"LocalGamepad5\";\n InputSource2[InputSource2[\"LocalGamepad6\"] = 10] = \"LocalGamepad6\";\n InputSource2[InputSource2[\"LocalGamepad7\"] = 11] = \"LocalGamepad7\";\n InputSource2[InputSource2[\"LocalGamepad8\"] = 12] = \"LocalGamepad8\";\n InputSource2[InputSource2[\"LocalGamepad9\"] = 13] = \"LocalGamepad9\";\n InputSource2[InputSource2[\"LocalGamepad10\"] = 14] = \"LocalGamepad10\";\n InputSource2[InputSource2[\"LocalGamepad11\"] = 15] = \"LocalGamepad11\";\n InputSource2[InputSource2[\"RemotePeer0\"] = 128] = \"RemotePeer0\";\n InputSource2[InputSource2[\"RemotePeer1\"] = 129] = \"RemotePeer1\";\n InputSource2[InputSource2[\"RemotePeer2\"] = 130] = \"RemotePeer2\";\n InputSource2[InputSource2[\"RemotePeer3\"] = 131] = \"RemotePeer3\";\n InputSource2[InputSource2[\"RemotePeer4\"] = 132] = \"RemotePeer4\";\n InputSource2[InputSource2[\"RemotePeer5\"] = 133] = \"RemotePeer5\";\n InputSource2[InputSource2[\"RemotePeer6\"] = 134] = \"RemotePeer6\";\n InputSource2[InputSource2[\"RemotePeer7\"] = 135] = \"RemotePeer7\";\n InputSource2[InputSource2[\"RemotePeer8\"] = 136] = \"RemotePeer8\";\n InputSource2[InputSource2[\"RemotePeer9\"] = 137] = \"RemotePeer9\";\n InputSource2[InputSource2[\"RemotePeer10\"] = 138] = \"RemotePeer10\";\n InputSource2[InputSource2[\"RemotePeer11\"] = 139] = \"RemotePeer11\";\n InputSource2[InputSource2[\"Unmapped\"] = 255] = \"Unmapped\";\n})(InputSource ||= {});\n// js/inputs.ts\nvar MAX_PLAYERS = 12;\nvar KEYBOARD_OFFSET = 0;\nvar KEYBOARD_SIZE = 256;\nvar MOUSE_OFFSET = 256;\nvar MOUSE_BUTTONS_OFFSET = 16;\nvar PLAYER_INPUTS_SIZE = 280;\nvar INPUT_CTX_SIZE = MAX_PLAYERS * PLAYER_INPUTS_SIZE;\nvar EVENT_PAYLOAD_SIZE = 8;\nvar EVENT_PAYLOAD_ALIGN = 4;\nfunction keyToKeyCode(key) {\n return Key[key];\n}\nfunction keyCodeToKey(code) {\n return Key[code];\n}\nfunction mouseButtonToMouseButtonCode(button) {\n return MouseButton[button];\n}\nfunction mouseButtonCodeToMouseButton(code) {\n return MouseButton[code];\n}\nfunction inputSourceToInputSourceCode(source) {\n return InputSource[source];\n}\nfunction inputSourceCodeToInputSource(code) {\n return InputSource[code];\n}\n\n// js/contexts/inputContext.ts\nclass PlayerInputContext {\n #dataView;\n #keys;\n #mouse;\n constructor(dataView) {\n this.#dataView = dataView;\n }\n get keys() {\n if (!this.#keys) {\n this.#keys = new KeyboardContext(new DataView(this.#dataView.buffer, this.#dataView.byteOffset + KEYBOARD_OFFSET));\n }\n return this.#keys;\n }\n get mouse() {\n if (!this.#mouse) {\n this.#mouse = new MouseContext(new DataView(this.#dataView.buffer, this.#dataView.byteOffset + MOUSE_OFFSET));\n }\n return this.#mouse;\n }\n}\n\nclass InputContext {\n #dataView;\n #players = [];\n constructor(dataView) {\n if (dataView) {\n this.#dataView = dataView;\n this.#buildPlayers();\n }\n }\n get dataView() {\n if (!this.#dataView) {\n throw new Error(\"DataView is not initialized on InputContext\");\n }\n return this.#dataView;\n }\n set dataView(dataView) {\n this.#dataView = dataView;\n this.#buildPlayers();\n }\n #buildPlayers() {\n this.#players = [];\n for (let i = 0;i < MAX_PLAYERS; i++) {\n const playerOffset = i * PLAYER_INPUTS_SIZE;\n const playerDataView = new DataView(this.dataView.buffer, this.dataView.byteOffset + playerOffset, PLAYER_INPUTS_SIZE);\n this.#players.push(new PlayerInputContext(playerDataView));\n }\n }\n get players() {\n return this.#players;\n }\n get keys() {\n if (!this.#players[0]) {\n throw new Error(\"No player inputs available in InputContext\");\n }\n return this.#players[0].keys;\n }\n get mouse() {\n if (!this.#players[0]) {\n throw new Error(\"No player inputs available in InputContext\");\n }\n return this.#players[0].mouse;\n }\n}\n\nclass MouseContext {\n #dataView;\n #buttonStates = new Map;\n constructor(dataView) {\n this.#dataView = dataView;\n }\n get x() {\n return this.#dataView.getFloat32(0, true);\n }\n get y() {\n return this.#dataView.getFloat32(4, true);\n }\n get wheel() {\n return { x: this.wheelX, y: this.wheelY };\n }\n get wheelX() {\n return this.#dataView.getFloat32(8, true);\n }\n get wheelY() {\n return this.#dataView.getFloat32(12, true);\n }\n get left() {\n return this.#buttonState(1 /* Left */);\n }\n get right() {\n return this.#buttonState(3 /* Right */);\n }\n get middle() {\n return this.#buttonState(2 /* Middle */);\n }\n #buttonState(code) {\n let state;\n if (this.#buttonStates.has(code)) {\n state = this.#buttonStates.get(code);\n } else {\n state = { down: false, held: false, up: false };\n this.#buttonStates.set(code, state);\n }\n const offset = MOUSE_BUTTONS_OFFSET;\n state.held = !!(this.#dataView.getUint8(offset + code) & 1);\n state.down = state.held && !(this.#dataView.getUint8(offset + code) & 2);\n state.up = !state.held && !!(this.#dataView.getUint8(offset + code) & 2);\n return state;\n }\n}\n\nclass KeyboardContext {\n #dataView;\n #keystates = new Map;\n constructor(dataView) {\n this.#dataView = dataView;\n }\n get shift() {\n return this.shiftLeft || this.shiftRight;\n }\n get alt() {\n return this.altLeft || this.altRight;\n }\n get control() {\n return this.controlLeft || this.controlRight;\n }\n get meta() {\n return this.metaLeft || this.metaRight;\n }\n get backquote() {\n return this.#keystate(1 /* Backquote */);\n }\n get backslash() {\n return this.#keystate(2 /* Backslash */);\n }\n get bracketLeft() {\n return this.#keystate(3 /* BracketLeft */);\n }\n get bracketRight() {\n return this.#keystate(4 /* BracketRight */);\n }\n get comma() {\n return this.#keystate(5 /* Comma */);\n }\n get digit0() {\n return this.#keystate(6 /* Digit0 */);\n }\n get digit1() {\n return this.#keystate(7 /* Digit1 */);\n }\n get digit2() {\n return this.#keystate(8 /* Digit2 */);\n }\n get digit3() {\n return this.#keystate(9 /* Digit3 */);\n }\n get digit4() {\n return this.#keystate(10 /* Digit4 */);\n }\n get digit5() {\n return this.#keystate(11 /* Digit5 */);\n }\n get digit6() {\n return this.#keystate(12 /* Digit6 */);\n }\n get digit7() {\n return this.#keystate(13 /* Digit7 */);\n }\n get digit8() {\n return this.#keystate(14 /* Digit8 */);\n }\n get digit9() {\n return this.#keystate(15 /* Digit9 */);\n }\n get equal() {\n return this.#keystate(16 /* Equal */);\n }\n get intlBackslash() {\n return this.#keystate(17 /* IntlBackslash */);\n }\n get intlRo() {\n return this.#keystate(18 /* IntlRo */);\n }\n get intlYen() {\n return this.#keystate(19 /* IntlYen */);\n }\n get a() {\n return this.#keystate(20 /* KeyA */);\n }\n get b() {\n return this.#keystate(21 /* KeyB */);\n }\n get c() {\n return this.#keystate(22 /* KeyC */);\n }\n get d() {\n return this.#keystate(23 /* KeyD */);\n }\n get e() {\n return this.#keystate(24 /* KeyE */);\n }\n get f() {\n return this.#keystate(25 /* KeyF */);\n }\n get g() {\n return this.#keystate(26 /* KeyG */);\n }\n get h() {\n return this.#keystate(27 /* KeyH */);\n }\n get i() {\n return this.#keystate(28 /* KeyI */);\n }\n get j() {\n return this.#keystate(29 /* KeyJ */);\n }\n get k() {\n return this.#keystate(30 /* KeyK */);\n }\n get l() {\n return this.#keystate(31 /* KeyL */);\n }\n get m() {\n return this.#keystate(32 /* KeyM */);\n }\n get n() {\n return this.#keystate(33 /* KeyN */);\n }\n get o() {\n return this.#keystate(34 /* KeyO */);\n }\n get p() {\n return this.#keystate(35 /* KeyP */);\n }\n get q() {\n return this.#keystate(36 /* KeyQ */);\n }\n get r() {\n return this.#keystate(37 /* KeyR */);\n }\n get s() {\n return this.#keystate(38 /* KeyS */);\n }\n get t() {\n return this.#keystate(39 /* KeyT */);\n }\n get u() {\n return this.#keystate(40 /* KeyU */);\n }\n get v() {\n return this.#keystate(41 /* KeyV */);\n }\n get w() {\n return this.#keystate(42 /* KeyW */);\n }\n get x() {\n return this.#keystate(43 /* KeyX */);\n }\n get y() {\n return this.#keystate(44 /* KeyY */);\n }\n get z() {\n return this.#keystate(45 /* KeyZ */);\n }\n get minus() {\n return this.#keystate(46 /* Minus */);\n }\n get period() {\n return this.#keystate(47 /* Period */);\n }\n get quote() {\n return this.#keystate(48 /* Quote */);\n }\n get semicolon() {\n return this.#keystate(49 /* Semicolon */);\n }\n get slash() {\n return this.#keystate(50 /* Slash */);\n }\n get altLeft() {\n return this.#keystate(51 /* AltLeft */);\n }\n get altRight() {\n return this.#keystate(52 /* AltRight */);\n }\n get backspace() {\n return this.#keystate(53 /* Backspace */);\n }\n get capsLock() {\n return this.#keystate(54 /* CapsLock */);\n }\n get contextMenu() {\n return this.#keystate(55 /* ContextMenu */);\n }\n get controlLeft() {\n return this.#keystate(56 /* ControlLeft */);\n }\n get controlRight() {\n return this.#keystate(57 /* ControlRight */);\n }\n get enter() {\n return this.#keystate(58 /* Enter */);\n }\n get metaLeft() {\n return this.#keystate(59 /* MetaLeft */);\n }\n get metaRight() {\n return this.#keystate(60 /* MetaRight */);\n }\n get shiftLeft() {\n return this.#keystate(61 /* ShiftLeft */);\n }\n get shiftRight() {\n return this.#keystate(62 /* ShiftRight */);\n }\n get space() {\n return this.#keystate(63 /* Space */);\n }\n get tab() {\n return this.#keystate(64 /* Tab */);\n }\n get convert() {\n return this.#keystate(65 /* Convert */);\n }\n get kanaMode() {\n return this.#keystate(66 /* KanaMode */);\n }\n get lang1() {\n return this.#keystate(67 /* Lang1 */);\n }\n get lang2() {\n return this.#keystate(68 /* Lang2 */);\n }\n get lang3() {\n return this.#keystate(69 /* Lang3 */);\n }\n get lang4() {\n return this.#keystate(70 /* Lang4 */);\n }\n get lang5() {\n return this.#keystate(71 /* Lang5 */);\n }\n get nonConvert() {\n return this.#keystate(72 /* NonConvert */);\n }\n get delete() {\n return this.#keystate(73 /* Delete */);\n }\n get end() {\n return this.#keystate(74 /* End */);\n }\n get help() {\n return this.#keystate(75 /* Help */);\n }\n get home() {\n return this.#keystate(76 /* Home */);\n }\n get insert() {\n return this.#keystate(77 /* Insert */);\n }\n get pageDown() {\n return this.#keystate(78 /* PageDown */);\n }\n get pageUp() {\n return this.#keystate(79 /* PageUp */);\n }\n get arrowDown() {\n return this.#keystate(80 /* ArrowDown */);\n }\n get arrowLeft() {\n return this.#keystate(81 /* ArrowLeft */);\n }\n get arrowRight() {\n return this.#keystate(82 /* ArrowRight */);\n }\n get arrowUp() {\n return this.#keystate(83 /* ArrowUp */);\n }\n get numLock() {\n return this.#keystate(84 /* NumLock */);\n }\n get numpad0() {\n return this.#keystate(85 /* Numpad0 */);\n }\n get numpad1() {\n return this.#keystate(86 /* Numpad1 */);\n }\n get numpad2() {\n return this.#keystate(87 /* Numpad2 */);\n }\n get numpad3() {\n return this.#keystate(88 /* Numpad3 */);\n }\n get numpad4() {\n return this.#keystate(89 /* Numpad4 */);\n }\n get numpad5() {\n return this.#keystate(90 /* Numpad5 */);\n }\n get numpad6() {\n return this.#keystate(91 /* Numpad6 */);\n }\n get numpad7() {\n return this.#keystate(92 /* Numpad7 */);\n }\n get numpad8() {\n return this.#keystate(93 /* Numpad8 */);\n }\n get numpad9() {\n return this.#keystate(94 /* Numpad9 */);\n }\n get numpadAdd() {\n return this.#keystate(95 /* NumpadAdd */);\n }\n get numpadBackspace() {\n return this.#keystate(96 /* NumpadBackspace */);\n }\n get numpadClear() {\n return this.#keystate(97 /* NumpadClear */);\n }\n get numpadClearEntry() {\n return this.#keystate(98 /* NumpadClearEntry */);\n }\n get numpadComma() {\n return this.#keystate(99 /* NumpadComma */);\n }\n get numpadDecimal() {\n return this.#keystate(100 /* NumpadDecimal */);\n }\n get numpadDivide() {\n return this.#keystate(101 /* NumpadDivide */);\n }\n get numpadEnter() {\n return this.#keystate(102 /* NumpadEnter */);\n }\n get numpadEqual() {\n return this.#keystate(103 /* NumpadEqual */);\n }\n get numpadHash() {\n return this.#keystate(104 /* NumpadHash */);\n }\n get numpadMemoryAdd() {\n return this.#keystate(105 /* NumpadMemoryAdd */);\n }\n get numpadMemoryClear() {\n return this.#keystate(106 /* NumpadMemoryClear */);\n }\n get numpadMemoryRecall() {\n return this.#keystate(107 /* NumpadMemoryRecall */);\n }\n get numpadMemoryStore() {\n return this.#keystate(108 /* NumpadMemoryStore */);\n }\n get numpadMemorySubtract() {\n return this.#keystate(109 /* NumpadMemorySubtract */);\n }\n get numpadMultiply() {\n return this.#keystate(110 /* NumpadMultiply */);\n }\n get numpadParenLeft() {\n return this.#keystate(111 /* NumpadParenLeft */);\n }\n get numpadParenRight() {\n return this.#keystate(112 /* NumpadParenRight */);\n }\n get numpadStar() {\n return this.#keystate(113 /* NumpadStar */);\n }\n get numpadSubtract() {\n return this.#keystate(114 /* NumpadSubtract */);\n }\n get escape() {\n return this.#keystate(115 /* Escape */);\n }\n get fn() {\n return this.#keystate(116 /* Fn */);\n }\n get fnLock() {\n return this.#keystate(117 /* FnLock */);\n }\n get printScreen() {\n return this.#keystate(118 /* PrintScreen */);\n }\n get scrollLock() {\n return this.#keystate(119 /* ScrollLock */);\n }\n get pause() {\n return this.#keystate(120 /* Pause */);\n }\n get browserBack() {\n return this.#keystate(121 /* BrowserBack */);\n }\n get browserFavorites() {\n return this.#keystate(122 /* BrowserFavorites */);\n }\n get browserForward() {\n return this.#keystate(123 /* BrowserForward */);\n }\n get browserHome() {\n return this.#keystate(124 /* BrowserHome */);\n }\n get browserRefresh() {\n return this.#keystate(125 /* BrowserRefresh */);\n }\n get browserSearch() {\n return this.#keystate(126 /* BrowserSearch */);\n }\n get browserStop() {\n return this.#keystate(127 /* BrowserStop */);\n }\n get eject() {\n return this.#keystate(128 /* Eject */);\n }\n get launchApp1() {\n return this.#keystate(129 /* LaunchApp1 */);\n }\n get launchApp2() {\n return this.#keystate(130 /* LaunchApp2 */);\n }\n get launchMail() {\n return this.#keystate(131 /* LaunchMail */);\n }\n get mediaPlayPause() {\n return this.#keystate(132 /* MediaPlayPause */);\n }\n get mediaSelect() {\n return this.#keystate(133 /* MediaSelect */);\n }\n get mediaStop() {\n return this.#keystate(134 /* MediaStop */);\n }\n get mediaTrackNext() {\n return this.#keystate(135 /* MediaTrackNext */);\n }\n get mediaTrackPrevious() {\n return this.#keystate(136 /* MediaTrackPrevious */);\n }\n get power() {\n return this.#keystate(137 /* Power */);\n }\n get sleep() {\n return this.#keystate(138 /* Sleep */);\n }\n get audioVolumeDown() {\n return this.#keystate(139 /* AudioVolumeDown */);\n }\n get audioVolumeMute() {\n return this.#keystate(140 /* AudioVolumeMute */);\n }\n get audioVolumeUp() {\n return this.#keystate(141 /* AudioVolumeUp */);\n }\n get wakeUp() {\n return this.#keystate(142 /* WakeUp */);\n }\n get hyper() {\n return this.#keystate(143 /* Hyper */);\n }\n get super() {\n return this.#keystate(144 /* Super */);\n }\n get turbo() {\n return this.#keystate(145 /* Turbo */);\n }\n get abort() {\n return this.#keystate(146 /* Abort */);\n }\n get resume() {\n return this.#keystate(147 /* Resume */);\n }\n get suspend() {\n return this.#keystate(148 /* Suspend */);\n }\n get again() {\n return this.#keystate(149 /* Again */);\n }\n get copy() {\n return this.#keystate(150 /* Copy */);\n }\n get cut() {\n return this.#keystate(151 /* Cut */);\n }\n get find() {\n return this.#keystate(152 /* Find */);\n }\n get open() {\n return this.#keystate(153 /* Open */);\n }\n get paste() {\n return this.#keystate(154 /* Paste */);\n }\n get props() {\n return this.#keystate(155 /* Props */);\n }\n get select() {\n return this.#keystate(156 /* Select */);\n }\n get undo() {\n return this.#keystate(157 /* Undo */);\n }\n get hiragana() {\n return this.#keystate(158 /* Hiragana */);\n }\n get katakana() {\n return this.#keystate(159 /* Katakana */);\n }\n get f1() {\n return this.#keystate(160 /* F1 */);\n }\n get f2() {\n return this.#keystate(161 /* F2 */);\n }\n get f3() {\n return this.#keystate(162 /* F3 */);\n }\n get f4() {\n return this.#keystate(163 /* F4 */);\n }\n get f5() {\n return this.#keystate(164 /* F5 */);\n }\n get f6() {\n return this.#keystate(165 /* F6 */);\n }\n get f7() {\n return this.#keystate(166 /* F7 */);\n }\n get f8() {\n return this.#keystate(167 /* F8 */);\n }\n get f9() {\n return this.#keystate(168 /* F9 */);\n }\n get f10() {\n return this.#keystate(169 /* F10 */);\n }\n get f11() {\n return this.#keystate(170 /* F11 */);\n }\n get f12() {\n return this.#keystate(171 /* F12 */);\n }\n get f13() {\n return this.#keystate(172 /* F13 */);\n }\n get f14() {\n return this.#keystate(173 /* F14 */);\n }\n get f15() {\n return this.#keystate(174 /* F15 */);\n }\n get f16() {\n return this.#keystate(175 /* F16 */);\n }\n get f17() {\n return this.#keystate(176 /* F17 */);\n }\n get f18() {\n return this.#keystate(177 /* F18 */);\n }\n get f19() {\n return this.#keystate(178 /* F19 */);\n }\n get f20() {\n return this.#keystate(179 /* F20 */);\n }\n get f21() {\n return this.#keystate(180 /* F21 */);\n }\n get f22() {\n return this.#keystate(181 /* F22 */);\n }\n get f23() {\n return this.#keystate(182 /* F23 */);\n }\n get f24() {\n return this.#keystate(183 /* F24 */);\n }\n get f25() {\n return this.#keystate(184 /* F25 */);\n }\n get f26() {\n return this.#keystate(185 /* F26 */);\n }\n get f27() {\n return this.#keystate(186 /* F27 */);\n }\n get f28() {\n return this.#keystate(187 /* F28 */);\n }\n get f29() {\n return this.#keystate(188 /* F29 */);\n }\n get f30() {\n return this.#keystate(189 /* F30 */);\n }\n get f31() {\n return this.#keystate(190 /* F31 */);\n }\n get f32() {\n return this.#keystate(191 /* F32 */);\n }\n get f33() {\n return this.#keystate(192 /* F33 */);\n }\n get f34() {\n return this.#keystate(193 /* F34 */);\n }\n get f35() {\n return this.#keystate(194 /* F35 */);\n }\n #keystate(code) {\n let state;\n if (this.#keystates.has(code)) {\n state = this.#keystates.get(code);\n } else {\n state = { down: false, held: false, up: false };\n this.#keystates.set(code, state);\n }\n state.held = !!(this.#dataView.getUint8(code) & 1);\n state.down = state.held && !(this.#dataView.getUint8(code) & 2);\n state.up = !state.held && !!(this.#dataView.getUint8(code) & 2);\n return state;\n }\n}\n// js/contexts/timeContext.ts\nclass TimeContext {\n dataView;\n constructor(dataView) {\n this.dataView = dataView;\n }\n get frame() {\n if (!this.dataView) {\n throw new Error(\"TimeContext DataView is not initialized\");\n }\n return this.dataView.getUint32(0, true);\n }\n get dt() {\n if (!this.dataView) {\n throw new Error(\"TimeContext DataView is not initialized\");\n }\n return this.dataView.getUint32(4, true) / 1000;\n }\n get time() {\n if (!this.dataView) {\n throw new Error(\"TimeContext DataView is not initialized\");\n }\n return this.dataView.getUint32(8, true) / 1000;\n }\n}\n// js/contexts/netContext.ts\nclass NetContext {\n dataView;\n constructor(dataView) {\n this.dataView = dataView;\n }\n get peerCount() {\n if (!this.dataView) {\n throw new Error(\"NetContext DataView is not initialized\");\n }\n return this.dataView.getUint8(0);\n }\n get isInSession() {\n return this.peerCount > 0;\n }\n get matchFrame() {\n if (!this.dataView) {\n throw new Error(\"NetContext DataView is not initialized\");\n }\n return this.dataView.getUint32(4, true);\n }\n}\n\n// js/engine.ts\nvar DEFAULT_WASM_URL = new URL(\"../wasm/bloop.wasm\", import.meta.url);\nvar TIME_CTX_OFFSET = 0;\nvar INPUT_CTX_OFFSET = TIME_CTX_OFFSET + 4;\nvar EVENTS_OFFSET = INPUT_CTX_OFFSET + 4;\nvar NET_CTX_OFFSET = EVENTS_OFFSET + 4;\nvar SNAPSHOT_HEADER_LEN = 16;\nvar SNAPSHOT_HEADER_USER_LEN_OFFSET = 4;\nvar SNAPSHOT_HEADER_ENGINE_LEN_OFFSET = 8;\nexport {\n mouseButtonToMouseButtonCode,\n mouseButtonCodeToMouseButton,\n keyToKeyCode,\n keyCodeToKey,\n inputSourceToInputSourceCode,\n inputSourceCodeToInputSource,\n TimeContext,\n TIME_CTX_OFFSET,\n SNAPSHOT_HEADER_USER_LEN_OFFSET,\n SNAPSHOT_HEADER_LEN,\n SNAPSHOT_HEADER_ENGINE_LEN_OFFSET,\n PlayerInputContext,\n PLAYER_INPUTS_SIZE,\n NetContext,\n NET_CTX_OFFSET,\n MouseContext,\n MOUSE_OFFSET,\n MOUSE_BUTTONS_OFFSET,\n MAX_PLAYERS,\n KeyboardContext,\n KEYBOARD_SIZE,\n KEYBOARD_OFFSET,\n InputContext,\n INPUT_CTX_SIZE,\n INPUT_CTX_OFFSET,\n exports_enums as Enums,\n EVENT_PAYLOAD_SIZE,\n EVENT_PAYLOAD_ALIGN,\n EVENTS_OFFSET,\n DEFAULT_WASM_URL\n};\n\n//# debugId=6578C3EA76F8A43964756E2164756E21\n//# sourceMappingURL=engine.js.map\n",
|
|
7
7
|
"import type { EnginePointer, WasmEngine } from \"@bloopjs/engine\";\nimport { assert } from \"./util\";\n\n/**\n * Network API for packet management in multiplayer sessions.\n *\n * This class provides methods for:\n * - Building outbound packets to send to peers\n * - Processing received packets\n * - Querying peer network state (seq/ack/unacked)\n * - Managing peer connections\n *\n * Access via `sim.net` after initializing a session.\n */\nexport class Net {\n #wasm: WasmEngine;\n #memory: WebAssembly.Memory;\n\n constructor(wasm: WasmEngine, memory: WebAssembly.Memory) {\n this.#wasm = wasm;\n this.#memory = memory;\n }\n\n /**\n * Set the local peer ID for packet encoding.\n * Call this after session init to identify which peer we are.\n */\n setLocalPeer(peerId: number): void {\n this.#wasm.session_set_local_peer(peerId);\n }\n\n /**\n * Mark a peer as connected for packet management.\n * Call this when a peer joins the session.\n */\n connectPeer(peerId: number): void {\n this.#wasm.session_peer_connect(peerId);\n }\n\n /**\n * Mark a peer as disconnected.\n * Call this when a peer leaves the session.\n */\n disconnectPeer(peerId: number): void {\n this.#wasm.session_peer_disconnect(peerId);\n }\n\n /**\n * Get an outbound packet to send to a target peer.\n * Returns a copy of the packet data (caller owns the returned buffer).\n *\n * The packet contains all unacked inputs encoded in wire format.\n *\n * @param targetPeer - Peer ID to send the packet to\n * @returns Packet data to send, or null if no packet available\n */\n getOutboundPacket(targetPeer: number): Uint8Array<ArrayBuffer> | null {\n // Build the packet in engine memory\n this.#wasm.build_outbound_packet(targetPeer);\n\n const len = this.#wasm.get_outbound_packet_len();\n if (len === 0) {\n return null;\n }\n\n const ptr = this.#wasm.get_outbound_packet();\n assert(ptr > 0, `Invalid outbound packet pointer: ${ptr}`);\n\n // Copy from WASM memory\n const memoryView = new Uint8Array(this.#memory.buffer, ptr, len);\n const copy = new Uint8Array(len);\n copy.set(memoryView);\n\n return copy;\n }\n\n /**\n * Process a received packet from a peer.\n * This updates seq/ack state and stores events for rollback.\n *\n * @param data - Packet data received from the network\n * @throws Error if packet is invalid\n */\n receivePacket(data: Uint8Array): void {\n if (data.length === 0) {\n return;\n }\n\n // Allocate memory and copy packet\n const ptr = this.#wasm.alloc(data.byteLength);\n assert(\n ptr > 0,\n `Failed to allocate ${data.byteLength} bytes for received packet`,\n );\n\n const memoryView = new Uint8Array(\n this.#memory.buffer,\n ptr,\n data.byteLength,\n );\n memoryView.set(data);\n\n // Process the packet\n const result = this.#wasm.receive_packet(ptr, data.byteLength);\n\n // Free the allocated memory\n this.#wasm.free(ptr, data.byteLength);\n\n // Check result\n if (result !== 0) {\n const errorMessages: Record<number, string> = {\n 1: \"No active session\",\n 2: \"Buffer too small\",\n 3: \"Unsupported packet version\",\n 4: \"Invalid event count\",\n };\n throw new Error(\n errorMessages[result] ?? `Unknown packet error: ${result}`,\n );\n }\n }\n\n /**\n * Get network state for a specific peer.\n *\n * @param peer - Peer ID to query\n * @returns Object with seq and ack\n */\n getPeerState(peer: number): {\n seq: number;\n ack: number;\n } {\n return {\n seq: this.#wasm.get_peer_seq(peer),\n ack: this.#wasm.get_peer_ack(peer),\n };\n }\n}\n",
|
|
8
|
-
"import {\n type EnginePointer,\n type Key,\n keyToKeyCode,\n type MouseButton,\n mouseButtonToMouseButtonCode,\n SNAPSHOT_HEADER_ENGINE_LEN_OFFSET,\n SNAPSHOT_HEADER_USER_LEN_OFFSET,\n TimeContext,\n type WasmEngine,\n} from \"@bloopjs/engine\";\nimport { Net } from \"./net\";\nimport { assert } from \"./util\";\n\nconst originalConsole = (globalThis as any).console;\n\nconst noop = () => {};\n\nconst stubConsole = Object.fromEntries(\n Object.keys(originalConsole).map((key) => [key, noop]),\n) as unknown as Console;\n\nfunction muteConsole() {\n (globalThis.console as unknown as Console) = stubConsole;\n}\n\nfunction unmuteConsole() {\n (globalThis.console as unknown as Console) = originalConsole;\n}\n\nexport type EngineHooks = {\n /**\n * Hook to serialize some data when snapshotting\n */\n serialize: SerializeFn;\n /**\n * Hook to deserialize some data when restoring\n */\n deserialize: DeserializeFn;\n /**\n * A callback function to run logic for a given frame\n */\n systemsCallback: SystemsCallback;\n /**\n * Sets buffer to the latest engine memory buffer\n *\n * Note that if the engine wasm memory grows, all dataviews into the memory must be updated\n */\n setBuffer: (buffer: ArrayBuffer) => void;\n /**\n * Sets the context pointer\n */\n setContext: (ptr: EnginePointer) => void;\n /**\n * Called from the engine right before each simulation step.\n */\n beforeFrame?: (frame: number) => void;\n};\n\nexport type SystemsCallback = (\n system_handle: number,\n ptr: EnginePointer,\n) => void;\n\nexport type SerializeFn = () => {\n size: number;\n write(buffer: ArrayBufferLike, ptr: EnginePointer): void;\n};\n\nexport type DeserializeFn = (\n buffer: ArrayBufferLike,\n ptr: EnginePointer,\n size: number,\n) => void;\n\n/**\n * Sim is a portable simulation that is responsible for:\n *\n * * Moving the engine forward and backward in time\n * * Maintaining a js-friendly view of engine memory\n * * Pausing and unpausing game logic\n * * Managing recording and tapes\n */\nexport class Sim {\n wasm: WasmEngine;\n id: string;\n #memory: WebAssembly.Memory;\n #time: TimeContext;\n #serialize?: SerializeFn;\n #isPaused: boolean = false;\n\n /**\n * Network API for packet management in multiplayer sessions.\n * Use this to send/receive packets and query peer network state.\n */\n readonly net: Net;\n\n /**\n * Callback fired when tape buffer fills up and recording stops.\n * The tape data is passed so you can save it before clearing.\n */\n onTapeFull?: (tape: Uint8Array) => void;\n\n constructor(\n wasm: WasmEngine,\n memory: WebAssembly.Memory,\n opts?: { serialize?: SerializeFn },\n ) {\n this.wasm = wasm;\n this.#memory = memory;\n this.#time = new TimeContext(\n new DataView(this.#memory.buffer, this.wasm.get_time_ctx()),\n );\n\n this.id = `${Math.floor(Math.random() * 1_000_000)}`;\n\n this.#serialize = opts?.serialize;\n this.net = new Net(wasm, memory);\n }\n\n step(ms?: number): number {\n if (this.#isPaused && !this.isReplaying) {\n // console.log({ paused: this.#isPaused, isReplaying: this.isReplaying });\n return 0;\n }\n return this.wasm.step(ms ?? 16);\n }\n\n /**\n * Run a single simulation frame. step wraps this in an accumulator.\n * Use this for rollback resimulation to avoid re-entrancy issues with step().\n */\n tick(): void {\n this.wasm.tick();\n }\n\n /**\n * Clone a session from another running sim.\n * This dumps a snapshot at the current frame and the tape data from the source\n *\n * @param source\n */\n cloneSession(source: Sim): void {\n this.loadTape(source.saveTape());\n this.restore(source.snapshot());\n }\n\n pause() {\n this.#isPaused = true;\n }\n\n unpause() {\n this.#isPaused = false;\n }\n\n get isPaused(): boolean {\n return this.#isPaused;\n }\n\n stepBack() {\n if (this.time.frame === 0) {\n return;\n }\n\n this.seek(this.time.frame - 1);\n }\n\n /**\n * Seek to the start of a given frame\n * @param frame - frame number to replay to\n */\n seek(frame: number, inclusive?: boolean) {\n assert(\n this.hasHistory,\n \"Not recording or playing back, can't seek to frame\",\n );\n\n const targetFrame = inclusive ? frame + 1 : frame;\n\n const shouldMute = frame < this.time.frame;\n if (shouldMute) {\n muteConsole();\n }\n this.wasm.seek(targetFrame);\n if (shouldMute) {\n unmuteConsole();\n }\n }\n\n /**\n * Snapshot the current game state into a byte array\n */\n snapshot(): Uint8Array<ArrayBuffer> {\n const serializer = this.#serialize ? this.#serialize() : null;\n const size = serializer ? serializer.size : 0;\n\n const ptr = this.wasm.take_snapshot(size);\n const header = new Uint32Array(this.#memory.buffer, ptr, 4);\n const userLenIndex =\n SNAPSHOT_HEADER_USER_LEN_OFFSET / Uint32Array.BYTES_PER_ELEMENT;\n const engineLenIndex =\n SNAPSHOT_HEADER_ENGINE_LEN_OFFSET / Uint32Array.BYTES_PER_ELEMENT;\n assert(header[userLenIndex], `header user length missing`);\n assert(header[engineLenIndex], `header engine length missing`);\n const length = header[userLenIndex] + header[engineLenIndex];\n const memoryView = new Uint8Array(this.#memory.buffer, ptr, length);\n\n const copy = new Uint8Array(length);\n copy.set(memoryView);\n\n return copy;\n }\n\n /**\n * Start recording the simulation at the current frame\n * @param maxEvents Maximum number of events to record (default 1024)\n */\n record(maxEvents: number = 1024) {\n const serializer = this.#serialize ? this.#serialize() : null;\n const size = serializer ? serializer.size : 0;\n const result = this.wasm.start_recording(size, maxEvents);\n if (result !== 0) {\n throw new Error(`failed to start recording, error code=${result}`);\n }\n }\n\n /**\n * Get a recording of the current tape to linear memory\n */\n saveTape(): Uint8Array<ArrayBuffer> {\n const tapeLen = this.wasm.get_tape_len();\n const tapePtr = this.wasm.get_tape_ptr();\n const memoryView = new Uint8Array(this.#memory.buffer, tapePtr, tapeLen);\n\n const copy = new Uint8Array(tapeLen);\n copy.set(memoryView);\n\n return copy;\n }\n\n /**\n * Load a tape\n */\n loadTape(tape: Uint8Array) {\n const tapePtr = this.wasm.alloc(tape.byteLength);\n assert(\n tapePtr > 0,\n `failed to allocate ${tape.byteLength} bytes for tape load, pointer=${tapePtr}`,\n );\n\n // copy tape into wasm memory\n const memoryView = new Uint8Array(\n this.#memory.buffer,\n tapePtr,\n tape.byteLength,\n );\n memoryView.set(tape);\n\n // load the tape\n this.wasm.stop_recording();\n const result = this.wasm.load_tape(tapePtr, tape.byteLength);\n assert(result === 0, `failed to load tape, error code=${result}`);\n\n // free the allocated memory\n this.wasm.free(tapePtr, tape.byteLength);\n }\n\n /**\n * Restore the game state from a snapshot byte array\n */\n restore(snapshot: Uint8Array) {\n const dataPtr = this.wasm.alloc(snapshot.byteLength);\n assert(\n dataPtr > 0,\n `failed to allocate ${snapshot.byteLength} bytes for snapshot restore, pointer=${dataPtr}`,\n );\n\n // copy snapshot into wasm memory\n const memoryView = new Uint8Array(\n this.#memory.buffer,\n dataPtr,\n snapshot.byteLength,\n );\n memoryView.set(snapshot);\n\n // restore the snapshot\n this.wasm.restore(dataPtr);\n\n // free the allocated memory\n this.wasm.free(dataPtr, snapshot.byteLength);\n }\n\n /**\n * Unmount the simulation and free all associated memory\n */\n unmount() {\n this.wasm.deinit();\n }\n\n get time(): TimeContext {\n if (\n !this.#time.dataView ||\n this.#time.dataView.buffer !== this.#memory.buffer\n ) {\n // update the data view to the latest memory buffer\n this.#time.dataView = new DataView(\n this.#memory.buffer,\n this.wasm.get_time_ctx(),\n );\n }\n return this.#time;\n }\n\n get buffer(): ArrayBuffer {\n return this.#memory.buffer;\n }\n\n get isRecording(): boolean {\n return Boolean(this.wasm.is_recording());\n }\n\n get isReplaying(): boolean {\n return Boolean(this.wasm.is_replaying());\n }\n\n get hasHistory(): boolean {\n return this.isRecording || this.isReplaying;\n }\n\n emit = {\n keydown: (key: Key, peerId: number = 0): void => {\n this.wasm.emit_keydown(keyToKeyCode(key), peerId);\n },\n keyup: (key: Key, peerId: number = 0): void => {\n this.wasm.emit_keyup(keyToKeyCode(key), peerId);\n },\n mousemove: (x: number, y: number, peerId: number = 0): void => {\n this.wasm.emit_mousemove(x, y, peerId);\n },\n mousedown: (button: MouseButton, peerId: number = 0): void => {\n this.wasm.emit_mousedown(mouseButtonToMouseButtonCode(button), peerId);\n },\n mouseup: (button: MouseButton, peerId: number = 0): void => {\n this.wasm.emit_mouseup(mouseButtonToMouseButtonCode(button), peerId);\n },\n mousewheel: (x: number, y: number, peerId: number = 0): void => {\n this.wasm.emit_mousewheel(x, y, peerId);\n },\n };\n\n // ─────────────────────────────────────────────────────────────\n // Session / Rollback\n // ─────────────────────────────────────────────────────────────\n\n /**\n * Initialize a multiplayer session with rollback support.\n * Captures current frame as session start frame.\n *\n * @param peerCount Number of peers in the session\n */\n sessionInit(peerCount: number): void {\n const serializer = this.#serialize ? this.#serialize() : null;\n const size = serializer ? serializer.size : 0;\n const result = this.wasm.session_init(peerCount, size);\n assert(result === 0, `failed to initialize session, error code=${result}`);\n }\n\n /**\n * End the current session and clean up rollback state.\n */\n sessionEnd(): void {\n this.wasm.session_end();\n }\n\n /**\n * Emit inputs for a peer at a given match frame.\n * This is the unified API - works for any peer (local or remote).\n *\n * @param peer Peer ID (0-indexed)\n * @param matchFrame Frame number relative to session start\n * @param events Array of raw event bytes (12 bytes per event)\n */\n emitInputs(peer: number, matchFrame: number, events: Uint8Array): void {\n if (events.length === 0) {\n // Empty events array - still need to call to update peer confirmed frame\n this.wasm.session_emit_inputs(peer, matchFrame, 0, 0);\n return;\n }\n\n // Allocate memory for events and copy\n const ptr = this.wasm.alloc(events.byteLength);\n assert(ptr > 0, `failed to allocate ${events.byteLength} bytes for events`);\n\n const memoryView = new Uint8Array(this.buffer, ptr, events.byteLength);\n memoryView.set(events);\n\n // Each event is 12 bytes (kind: u8, source: u8, padding: 2, payload: 8)\n const eventCount = events.byteLength / 12;\n this.wasm.session_emit_inputs(peer, matchFrame, ptr, eventCount);\n\n // Free the allocated memory\n this.wasm.free(ptr, events.byteLength);\n }\n}\n",
|
|
9
|
-
"import {\n DEFAULT_WASM_URL,\n type EnginePointer,\n type WasmEngine,\n} from \"@bloopjs/engine\";\nimport { type EngineHooks, Sim } from \"./sim\";\nimport { assert } from \"./util\";\n\n/**\n * Mount a simulation engine instance - instantiates wasm and sets up hooks and initial state.\n *\n * This is called by app.start on the web.\n */\nexport async function mount(\n opts: MountOpts,\n options?: MountOptions,\n): Promise<MountResult> {\n const wasmUrl = options?.wasmUrl ?? opts.wasmUrl ?? DEFAULT_WASM_URL;\n const startRecording = options?.startRecording ?? opts.startRecording ?? true;\n const maxEvents =
|
|
8
|
+
"import {\n type EnginePointer,\n type Key,\n keyToKeyCode,\n type MouseButton,\n mouseButtonToMouseButtonCode,\n SNAPSHOT_HEADER_ENGINE_LEN_OFFSET,\n SNAPSHOT_HEADER_USER_LEN_OFFSET,\n TimeContext,\n type WasmEngine,\n} from \"@bloopjs/engine\";\nimport { Net } from \"./net\";\nimport { assert } from \"./util\";\n\nconst originalConsole = (globalThis as any).console;\n\nconst noop = () => {};\n\nconst stubConsole = Object.fromEntries(\n Object.keys(originalConsole).map((key) => [key, noop]),\n) as unknown as Console;\n\nfunction muteConsole() {\n (globalThis.console as unknown as Console) = stubConsole;\n}\n\nfunction unmuteConsole() {\n (globalThis.console as unknown as Console) = originalConsole;\n}\n\nexport type EngineHooks = {\n /**\n * Hook to serialize some data when snapshotting\n */\n serialize: SerializeFn;\n /**\n * Hook to deserialize some data when restoring\n */\n deserialize: DeserializeFn;\n /**\n * A callback function to run logic for a given frame\n */\n systemsCallback: SystemsCallback;\n /**\n * Sets buffer to the latest engine memory buffer\n *\n * Note that if the engine wasm memory grows, all dataviews into the memory must be updated\n */\n setBuffer: (buffer: ArrayBuffer) => void;\n /**\n * Sets the context pointer\n */\n setContext: (ptr: EnginePointer) => void;\n /**\n * Called from the engine right before each simulation step.\n */\n beforeFrame?: (frame: number) => void;\n};\n\nexport type SystemsCallback = (\n system_handle: number,\n ptr: EnginePointer,\n) => void;\n\nexport type SerializeFn = () => {\n size: number;\n write(buffer: ArrayBufferLike, ptr: EnginePointer): void;\n};\n\nexport type DeserializeFn = (\n buffer: ArrayBufferLike,\n ptr: EnginePointer,\n size: number,\n) => void;\n\n/**\n * Sim is a portable simulation that is responsible for:\n *\n * * Moving the engine forward and backward in time\n * * Maintaining a js-friendly view of engine memory\n * * Pausing and unpausing game logic\n * * Managing recording and tapes\n */\nexport class Sim {\n wasm: WasmEngine;\n id: string;\n #memory: WebAssembly.Memory;\n #time: TimeContext;\n #serialize?: SerializeFn;\n #isPaused: boolean = false;\n\n /**\n * Network API for packet management in multiplayer sessions.\n * Use this to send/receive packets and query peer network state.\n */\n readonly net: Net;\n\n /**\n * Callback fired when tape buffer fills up and recording stops.\n * The tape data is passed so you can save it before clearing.\n */\n onTapeFull?: (tape: Uint8Array) => void;\n\n constructor(\n wasm: WasmEngine,\n memory: WebAssembly.Memory,\n opts?: { serialize?: SerializeFn },\n ) {\n this.wasm = wasm;\n this.#memory = memory;\n this.#time = new TimeContext(\n new DataView(this.#memory.buffer, this.wasm.get_time_ctx()),\n );\n\n this.id = `${Math.floor(Math.random() * 1_000_000)}`;\n\n this.#serialize = opts?.serialize;\n this.net = new Net(wasm, memory);\n }\n\n step(ms?: number): number {\n if (this.#isPaused && !this.isReplaying) {\n // console.log({ paused: this.#isPaused, isReplaying: this.isReplaying });\n return 0;\n }\n return this.wasm.step(ms ?? 16);\n }\n\n /**\n * Run a single simulation frame. step wraps this in an accumulator.\n * Use this for rollback resimulation to avoid re-entrancy issues with step().\n */\n tick(): void {\n this.wasm.tick();\n }\n\n /**\n * Clone a session from another running sim.\n * This dumps a snapshot at the current frame and the tape data from the source\n *\n * @param source\n */\n cloneSession(source: Sim): void {\n this.loadTape(source.saveTape());\n this.restore(source.snapshot());\n }\n\n pause() {\n this.#isPaused = true;\n }\n\n unpause() {\n this.#isPaused = false;\n }\n\n get isPaused(): boolean {\n return this.#isPaused;\n }\n\n stepBack() {\n if (this.time.frame === 0) {\n return;\n }\n\n this.seek(this.time.frame - 1);\n }\n\n /**\n * Seek to the start of a given frame\n * @param frame - frame number to replay to\n */\n seek(frame: number, inclusive?: boolean) {\n assert(\n this.hasHistory,\n \"Not recording or playing back, can't seek to frame\",\n );\n\n const targetFrame = inclusive ? frame + 1 : frame;\n\n const shouldMute = frame < this.time.frame;\n if (shouldMute) {\n muteConsole();\n }\n this.wasm.seek(targetFrame);\n if (shouldMute) {\n unmuteConsole();\n }\n }\n\n /**\n * Snapshot the current game state into a byte array\n */\n snapshot(): Uint8Array<ArrayBuffer> {\n const serializer = this.#serialize ? this.#serialize() : null;\n const size = serializer ? serializer.size : 0;\n\n const ptr = this.wasm.take_snapshot(size);\n const header = new Uint32Array(this.#memory.buffer, ptr, 4);\n const userLenIndex =\n SNAPSHOT_HEADER_USER_LEN_OFFSET / Uint32Array.BYTES_PER_ELEMENT;\n const engineLenIndex =\n SNAPSHOT_HEADER_ENGINE_LEN_OFFSET / Uint32Array.BYTES_PER_ELEMENT;\n assert(header[userLenIndex], `header user length missing`);\n assert(header[engineLenIndex], `header engine length missing`);\n const length = header[userLenIndex] + header[engineLenIndex];\n const memoryView = new Uint8Array(this.#memory.buffer, ptr, length);\n\n const copy = new Uint8Array(length);\n copy.set(memoryView);\n\n return copy;\n }\n\n /**\n * Packet buffer size (2MB) for network session recording\n */\n static readonly NETWORK_MAX_PACKET_BYTES = 2 * 1024 * 1024;\n\n /**\n * Start recording the simulation at the current frame\n * @param maxEvents Maximum number of events to record\n * @param maxPacketBytes Maximum packet buffer size (0 for local-only, 2MB default for network)\n */\n record(maxEvents: number, maxPacketBytes: number) {\n const serializer = this.#serialize ? this.#serialize() : null;\n const size = serializer ? serializer.size : 0;\n const result = this.wasm.start_recording(size, maxEvents, maxPacketBytes);\n if (result !== 0) {\n throw new Error(`failed to start recording, error code=${result}`);\n }\n }\n\n /**\n * Get a recording of the current tape to linear memory\n */\n saveTape(): Uint8Array<ArrayBuffer> {\n const tapeLen = this.wasm.get_tape_len();\n const tapePtr = this.wasm.get_tape_ptr();\n const memoryView = new Uint8Array(this.#memory.buffer, tapePtr, tapeLen);\n\n const copy = new Uint8Array(tapeLen);\n copy.set(memoryView);\n\n return copy;\n }\n\n /**\n * Load a tape\n */\n loadTape(tape: Uint8Array) {\n const tapePtr = this.wasm.alloc(tape.byteLength);\n assert(\n tapePtr > 0,\n `failed to allocate ${tape.byteLength} bytes for tape load, pointer=${tapePtr}`,\n );\n\n // copy tape into wasm memory\n const memoryView = new Uint8Array(\n this.#memory.buffer,\n tapePtr,\n tape.byteLength,\n );\n memoryView.set(tape);\n\n // load the tape\n this.wasm.stop_recording();\n const result = this.wasm.load_tape(tapePtr, tape.byteLength);\n assert(result === 0, `failed to load tape, error code=${result}`);\n\n // free the allocated memory\n this.wasm.free(tapePtr, tape.byteLength);\n }\n\n /**\n * Restore the game state from a snapshot byte array\n */\n restore(snapshot: Uint8Array) {\n const dataPtr = this.wasm.alloc(snapshot.byteLength);\n assert(\n dataPtr > 0,\n `failed to allocate ${snapshot.byteLength} bytes for snapshot restore, pointer=${dataPtr}`,\n );\n\n // copy snapshot into wasm memory\n const memoryView = new Uint8Array(\n this.#memory.buffer,\n dataPtr,\n snapshot.byteLength,\n );\n memoryView.set(snapshot);\n\n // restore the snapshot\n this.wasm.restore(dataPtr);\n\n // free the allocated memory\n this.wasm.free(dataPtr, snapshot.byteLength);\n }\n\n /**\n * Unmount the simulation and free all associated memory\n */\n unmount() {\n this.wasm.deinit();\n }\n\n get time(): TimeContext {\n if (\n !this.#time.dataView ||\n this.#time.dataView.buffer !== this.#memory.buffer\n ) {\n // update the data view to the latest memory buffer\n this.#time.dataView = new DataView(\n this.#memory.buffer,\n this.wasm.get_time_ctx(),\n );\n }\n return this.#time;\n }\n\n get buffer(): ArrayBuffer {\n return this.#memory.buffer;\n }\n\n get isRecording(): boolean {\n return Boolean(this.wasm.is_recording());\n }\n\n get isReplaying(): boolean {\n return Boolean(this.wasm.is_replaying());\n }\n\n get hasHistory(): boolean {\n return this.isRecording || this.isReplaying;\n }\n\n emit = {\n keydown: (key: Key, peerId: number = 0): void => {\n this.wasm.emit_keydown(keyToKeyCode(key), peerId);\n },\n keyup: (key: Key, peerId: number = 0): void => {\n this.wasm.emit_keyup(keyToKeyCode(key), peerId);\n },\n mousemove: (x: number, y: number, peerId: number = 0): void => {\n this.wasm.emit_mousemove(x, y, peerId);\n },\n mousedown: (button: MouseButton, peerId: number = 0): void => {\n this.wasm.emit_mousedown(mouseButtonToMouseButtonCode(button), peerId);\n },\n mouseup: (button: MouseButton, peerId: number = 0): void => {\n this.wasm.emit_mouseup(mouseButtonToMouseButtonCode(button), peerId);\n },\n mousewheel: (x: number, y: number, peerId: number = 0): void => {\n this.wasm.emit_mousewheel(x, y, peerId);\n },\n };\n\n // ─────────────────────────────────────────────────────────────\n // Session / Rollback\n // ─────────────────────────────────────────────────────────────\n\n /**\n * Initialize a multiplayer session with rollback support.\n * Captures current frame as session start frame.\n *\n * @param peerCount Number of peers in the session\n */\n sessionInit(peerCount: number): void {\n const serializer = this.#serialize ? this.#serialize() : null;\n const size = serializer ? serializer.size : 0;\n const result = this.wasm.session_init(peerCount, size);\n assert(result === 0, `failed to initialize session, error code=${result}`);\n }\n\n /**\n * End the current session and clean up rollback state.\n */\n sessionEnd(): void {\n this.wasm.session_end();\n }\n\n /**\n * Emit inputs for a peer at a given match frame.\n * This is the unified API - works for any peer (local or remote).\n *\n * @param peer Peer ID (0-indexed)\n * @param matchFrame Frame number relative to session start\n * @param events Array of raw event bytes (12 bytes per event)\n */\n emitInputs(peer: number, matchFrame: number, events: Uint8Array): void {\n if (events.length === 0) {\n // Empty events array - still need to call to update peer confirmed frame\n this.wasm.session_emit_inputs(peer, matchFrame, 0, 0);\n return;\n }\n\n // Allocate memory for events and copy\n const ptr = this.wasm.alloc(events.byteLength);\n assert(ptr > 0, `failed to allocate ${events.byteLength} bytes for events`);\n\n const memoryView = new Uint8Array(this.buffer, ptr, events.byteLength);\n memoryView.set(events);\n\n // Each event is 12 bytes (kind: u8, source: u8, padding: 2, payload: 8)\n const eventCount = events.byteLength / 12;\n this.wasm.session_emit_inputs(peer, matchFrame, ptr, eventCount);\n\n // Free the allocated memory\n this.wasm.free(ptr, events.byteLength);\n }\n}\n",
|
|
9
|
+
"import {\n DEFAULT_WASM_URL,\n type EnginePointer,\n type WasmEngine,\n} from \"@bloopjs/engine\";\nimport { type EngineHooks, Sim } from \"./sim\";\nimport { assert } from \"./util\";\n\n/**\n * Mount a simulation engine instance - instantiates wasm and sets up hooks and initial state.\n *\n * This is called by app.start on the web.\n */\nexport async function mount(\n opts: MountOpts,\n options?: MountOptions,\n): Promise<MountResult> {\n const wasmUrl = options?.wasmUrl ?? opts.wasmUrl ?? DEFAULT_WASM_URL;\n const startRecording = options?.startRecording ?? opts.startRecording ?? true;\n const { maxEvents, maxPacketBytes } = calculateTapeConfig(options?.tape);\n\n // https://github.com/oven-sh/bun/issues/12434\n const bytes = await fetch(wasmUrl)\n .then((res) => res.arrayBuffer())\n .catch((e) => {\n console.error(`Failed to fetch wasm at ${wasmUrl}`, e);\n throw e;\n });\n\n // 1mb to 64mb\n // use bun check:wasm to find initial memory page size\n const memory = new WebAssembly.Memory({ initial: 310, maximum: 1000 });\n\n // Create sim early so we can reference it in callbacks\n let sim: Sim;\n\n const wasmInstantiatedSource = await WebAssembly.instantiate(bytes, {\n env: {\n memory,\n __systems: function (system_handle: number, ptr: number) {\n opts.hooks.setBuffer(memory.buffer);\n opts.hooks.systemsCallback(system_handle, ptr);\n },\n __before_frame: function (ptr: EnginePointer, frame: number) {\n try {\n // Refresh DataViews before beforeFrame hook (memory may have grown)\n opts.hooks.setBuffer(memory.buffer);\n opts.hooks.setContext(ptr);\n opts.hooks.beforeFrame?.(frame);\n } catch (e) {\n console.error(\"Error in beforeFrame hook:\", e);\n }\n },\n __on_tape_full: function (_ctxPtr: number) {\n if (!sim) {\n throw new Error(\"Sim not initialized in on_tape_full\");\n }\n const tapeBytes = sim.saveTape();\n if (sim.onTapeFull) {\n sim.onTapeFull(tapeBytes);\n } else {\n const size = tapeBytes.length / 1024;\n const duration = sim.time.time;\n const kbPerSecond = size / duration;\n\n console.warn(\"Tape full. Recording stopped\", {\n size: `${(tapeBytes.length / 1024).toFixed(0)}kb`,\n duration: `${sim.time.time.toFixed(2)}s`,\n kbPerSecond: `${kbPerSecond.toFixed(2)} kb/s`,\n });\n }\n },\n console_log: function (ptr: EnginePointer, len: number) {\n const bytes = new Uint8Array(memory.buffer, ptr, len);\n const string = new TextDecoder(\"utf-8\").decode(bytes);\n console.log(string);\n },\n __user_data_len: function () {\n const serializer = opts.hooks.serialize();\n return serializer ? serializer.size : 0;\n },\n user_data_serialize: function (ptr: EnginePointer, len: number) {\n const serializer = opts.hooks.serialize();\n assert(\n len === serializer.size,\n `user_data_serialize length mismatch, expected=${serializer.size} got=${len}`,\n );\n serializer.write(memory.buffer, ptr);\n },\n user_data_deserialize: function (ptr: EnginePointer, len: number) {\n opts.hooks.deserialize(memory.buffer, ptr, len);\n },\n },\n });\n const wasm = wasmInstantiatedSource.instance.exports as WasmEngine;\n\n const enginePointer = wasm.initialize();\n sim = new Sim(wasm, memory, {\n serialize: opts.hooks.serialize,\n });\n\n if (startRecording) {\n sim.record(maxEvents, maxPacketBytes);\n }\n\n opts.hooks.setBuffer(memory.buffer);\n opts.hooks.setContext(enginePointer);\n\n return {\n sim,\n };\n}\n\nexport type TapeOptions = (\n | { maxEvents: number }\n | { duration: number; averageEventsPerFrame?: number }\n) & {\n /**\n * Set to true for local-only recording (no network packet buffer).\n * Default: false (allocates 2MB for network packet recording)\n */\n localOnly?: boolean;\n};\n\nexport type MountOptions = {\n /**\n * Whether to start recording immediately upon mount\n * Defaults to true\n */\n startRecording?: boolean;\n\n /**\n * Tape configuration options\n */\n tape?: TapeOptions;\n\n /**\n * Custom WASM URL (for advanced use cases)\n */\n wasmUrl?: URL;\n};\n\nexport type MountOpts = {\n hooks: EngineHooks;\n\n wasmUrl?: URL;\n\n /**\n * Whether to start recording immediately upon mount\n * Defaults to true\n */\n startRecording?: boolean;\n};\n\nexport type MountResult = {\n sim: Sim;\n};\n\nfunction calculateTapeConfig(tape?: TapeOptions): {\n maxEvents: number;\n maxPacketBytes: number;\n} {\n let maxEvents: number;\n\n if (!tape) {\n maxEvents = 1024; // default\n } else if (\"maxEvents\" in tape) {\n maxEvents = tape.maxEvents;\n } else {\n // duration-based: frames * average events per frame\n // At 60fps, duration seconds = duration * 60 frames\n const avgEvents = tape.averageEventsPerFrame ?? 2;\n maxEvents = Math.ceil(tape.duration * 60 * avgEvents);\n }\n\n // Default to network mode (2MB), localOnly mode uses 0 bytes\n const maxPacketBytes = tape?.localOnly ? 0 : Sim.NETWORK_MAX_PACKET_BYTES;\n\n return { maxEvents, maxPacketBytes };\n}\n",
|
|
10
10
|
"import {\n type EnginePointer,\n Enums,\n EVENT_PAYLOAD_ALIGN,\n EVENT_PAYLOAD_SIZE,\n EVENTS_OFFSET,\n INPUT_CTX_OFFSET,\n InputContext,\n keyCodeToKey,\n mouseButtonCodeToMouseButton,\n NET_CTX_OFFSET,\n NetContext,\n TIME_CTX_OFFSET,\n TimeContext,\n} from \"@bloopjs/engine\";\nimport type { Context } from \"./context\";\nimport type { Bag } from \"./data/bag\";\nimport type { BloopSchema } from \"./data/schema\";\nimport type {\n InputEvent,\n KeyEvent,\n MouseButtonEvent,\n MouseMoveEvent,\n MouseWheelEvent,\n} from \"./events\";\nimport type { EngineHooks } from \"./sim\";\nimport type { System } from \"./system\";\n\nexport type BloopOpts<B extends Bag> = {\n /** defaults to \"Game\" */\n name?: string;\n /**\n * component definitions, defaults to empty object\n *\n * use `defineComponents` to generate component definitions from a simple schema\n */\n // components?: SchemaWithLayout<CS>;\n /**\n * input map, defaults to empty object\n */\n // inputMap?: IM;\n /**\n * bag definition, defaults to empty object\n *\n */\n bag?: B;\n // schema: GS;\n};\n\nexport class Bloop<GS extends BloopSchema> {\n #systems: System<GS>[] = [];\n #context: Context<GS>;\n #engineBuffer: ArrayBuffer = new ArrayBuffer(0);\n\n /**\n * Bloop.create() is the way to create a new bloop instance.\n */\n static create<\n // S extends Schema,\n // RS extends ResourceSchema,\n B extends Bag,\n // const IM extends InputMap,\n // >(opts: GameOpts<S, RS, B, IM> = {}) {\n >(opts: BloopOpts<B> = {}): Bloop<MakeGS<B>> {\n return new Bloop<MakeGS<B>>(opts, \"dontCallMeDirectly\");\n }\n\n /**\n * DO NOT USE `new Bloop` - use `Bloop.create()` instead for proper type hints.\n */\n constructor(opts: BloopOpts<GS[\"B\"]> = {}, dontCallMeDirectly: string) {\n if (dontCallMeDirectly !== \"dontCallMeDirectly\") {\n throw new Error(\n \"Bloop constructor is private. Use Bloop.create() to create a new game instance.\",\n );\n }\n\n const inputs = new InputContext();\n this.#context = {\n bag: opts.bag ?? {},\n time: new TimeContext(),\n inputs,\n get players() {\n return inputs.players;\n },\n rawPointer: -1,\n net: new NetContext(),\n };\n }\n\n /**\n * Read the game singleton bag\n */\n get bag(): GS[\"B\"] {\n return this.#context.bag;\n }\n\n /**\n * Read the game context object\n */\n get context(): Readonly<Context<GS>> {\n return this.#context;\n }\n\n /**\n * Register a system with the game loop.\n */\n system(label: string, system: System<GS>): number {\n system.label ??= label;\n this.#systems.push(system);\n return this.#systems.length;\n }\n\n /**\n * Low level hooks to engine functionality. Editing these is for advanced use cases, defaults should usually work.\n */\n hooks: EngineHooks = {\n /**\n * Take a snapshot of the game state outside the engine\n * @returns linear memory representation of the game state that the engine is unaware of\n */\n serialize: () => {\n const str = JSON.stringify(this.#context.bag);\n const encoder = new TextEncoder();\n const textBytes = encoder.encode(str);\n\n return {\n size: textBytes.byteLength,\n write: (buffer: ArrayBufferLike, ptr: EnginePointer) => {\n const memoryView = new Uint8Array(buffer, ptr, textBytes.byteLength);\n memoryView.set(textBytes);\n },\n };\n },\n\n /**\n * Restore a snapshot of the game state outside the engine\n * @returns linear memory representation of the game state that the engine is unaware of\n */\n deserialize: (buffer, ptr, len) => {\n const bagBytes = new Uint8Array(buffer, ptr, len);\n const decoder = new TextDecoder();\n const str = decoder.decode(bagBytes);\n\n try {\n this.#context.bag = JSON.parse(str);\n } catch (e) {\n console.error(\"failed to deserialize bag\", { json: str, error: e });\n }\n },\n\n setBuffer: (buffer: ArrayBuffer) => {\n this.#engineBuffer = buffer;\n },\n\n setContext: (ptr: EnginePointer) => {\n // todo - move this to engine\n if (!this.#engineBuffer) {\n throw new Error(\"Tried to set context before engine buffer\");\n }\n const dv = new DataView(this.#engineBuffer, ptr);\n const timeCtxPtr = dv.getUint32(TIME_CTX_OFFSET, true);\n const inputCtxPtr = dv.getUint32(INPUT_CTX_OFFSET, true);\n const netCtxPtr = dv.getUint32(NET_CTX_OFFSET, true);\n\n this.#context.rawPointer = ptr;\n // todo - only rebuild these if the buffer has changed due to memory growth or the pointers have changed\n this.#context.inputs.dataView = new DataView(\n this.#engineBuffer,\n inputCtxPtr,\n );\n this.#context.time.dataView = new DataView(\n this.#engineBuffer,\n timeCtxPtr,\n );\n this.#context.net.dataView = new DataView(this.#engineBuffer, netCtxPtr);\n },\n\n systemsCallback: (system_handle: number, ptr: EnginePointer) => {\n this.hooks.setContext(ptr);\n const dv = new DataView(this.#engineBuffer, ptr);\n const eventsPtr = dv.getUint32(EVENTS_OFFSET, true);\n const eventsDataView = new DataView(this.#engineBuffer, eventsPtr);\n\n for (const system of this.#systems) {\n system.update?.(this.#context);\n\n // EventBuffer: count (u16) + padding (2 bytes) + events\n // TODO: it would be better to have all the offset math centralized to the\n // engine package, and just do something like\n // const {jsEvent, size} = engine.decodeEvent(eventPtr, eventOffset)\n // eventOffset += size;\n\n const eventCount = eventsDataView.getUint16(0, true);\n let offset = 4; // Skip count (u16) + padding (2 bytes)\n\n for (let i = 0; i < eventCount; i++) {\n // Event layout: kind (u8) + source (u8) + padding (2 bytes) + payload (8 bytes) = 12 bytes\n const eventType = eventsDataView.getUint8(offset);\n const eventSource = eventsDataView.getUint8(offset + 1);\n const payloadOffset = offset + 4; // Skip kind + source + padding\n const payloadByte = eventsDataView.getUint8(payloadOffset);\n const payloadVec2 = {\n x: eventsDataView.getFloat32(payloadOffset, true),\n y: eventsDataView.getFloat32(\n payloadOffset + Float32Array.BYTES_PER_ELEMENT,\n true,\n ),\n };\n\n switch (eventType) {\n case Enums.EventType.KeyDown: {\n system.keydown?.(\n attachEvent<KeyEvent, GS>(this.#context, {\n key: keyCodeToKey(payloadByte),\n }),\n );\n break;\n }\n case Enums.EventType.KeyUp:\n system.keyup?.(\n attachEvent<KeyEvent, GS>(this.#context, {\n key: keyCodeToKey(payloadByte),\n }),\n );\n break;\n case Enums.EventType.MouseDown:\n system.mousedown?.(\n attachEvent<MouseButtonEvent, GS>(this.#context, {\n button: mouseButtonCodeToMouseButton(payloadByte),\n }),\n );\n break;\n case Enums.EventType.MouseUp:\n system.mouseup?.(\n attachEvent<MouseButtonEvent, GS>(this.#context, {\n button: mouseButtonCodeToMouseButton(payloadByte),\n }),\n );\n break;\n case Enums.EventType.MouseMove:\n system.mousemove?.(\n attachEvent<MouseMoveEvent, GS>(this.#context, {\n x: payloadVec2.x,\n y: payloadVec2.y,\n }),\n );\n break;\n case Enums.EventType.MouseWheel:\n system.mousewheel?.(\n attachEvent<MouseWheelEvent, GS>(this.#context, {\n x: payloadVec2.x,\n y: payloadVec2.y,\n }),\n );\n break;\n default:\n throw new Error(`Unknown event type: ${eventType}`);\n }\n // Event is 12 bytes: kind (1) + source (1) + padding (2) + payload (8)\n offset += 12;\n }\n (this.#context as any).event = undefined;\n }\n },\n };\n}\n\nfunction attachEvent<IE extends InputEvent, GS extends BloopSchema>(\n context: Context<GS>,\n event: IE,\n): Context<GS> & { event: IE } {\n (context as any).event = event;\n return context as Context<GS> & { event: IE };\n}\n\ntype MakeGS<B extends Bag> = BloopSchema<B>;\n"
|
|
11
11
|
],
|
|
12
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;AAAO,SAAS,WAAW,CAAC,UAAoB,QAAyB;AAAA,EACvE,WAAW,SAAS;AAAA,EACpB,IAAI,YAAY;AAAA,EAChB,SAAS,IAAI,EAAG,IAAI,QAAQ,KAAK;AAAA,IAC/B,MAAM,OAAO,SAAS,SAAS,CAAC;AAAA,IAChC,aAAa,GAAG,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAAA,EACnD;AAAA,EACA,OAAO,UAAU,KAAK;AAAA;AAGjB,SAAS,MAAM,CAAC,WAAgB,SAAqC;AAAA,EAC1E,IAAI,aAAa,QAAQ,cAAc,OAAO;AAAA,IAC5C,MAAM,IAAI,MAAM,WAAW,kBAAkB;AAAA,EAC/C;AAAA;AAGF,IAAM,mBAAmB,IAAI;AAStB,SAAS,OAAO,IAAI,MAAa;AAAA,EACtC,MAAM,MAAM,KAAK,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC,EAAE,KAAK,GAAG;AAAA,EAC/C,IAAI,CAAC,iBAAiB,IAAI,GAAG,GAAG;AAAA,IAC9B,QAAQ,IAAI,GAAG,IAAI;AAAA,IACnB,iBAAiB,IAAI,KAAK,CAAC;AAAA,EAC7B;AAAA;AAUK,SAAS,YAAY,CAAC,QAAgB,MAAa;AAAA,EACxD,SAAS,KAAK,MAAM,GAAG,IAAI;AAAA;AAUtB,SAAS,QAAQ,CAAC,KAAa,WAAmB,OAAO,MAAa;AAAA,EAC3E,MAAM,MAAM,KAAK,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC,EAAE,KAAK,GAAG;AAAA,EAC/C,MAAM,aAAa,iBAAiB,IAAI,GAAG,KAAK;AAAA,EAChD,IAAI,MAAM,cAAc,UAAU;AAAA,IAChC,QAAQ,IAAI,GAAG,IAAI;AAAA,IACnB,iBAAiB,IAAI,KAAK,GAAG;AAAA,EAC/B;AAAA;AAGK,SAAS,MAAS,CACvB,OACA,SACgB;AAAA,EAChB,OAAO,SAAS,MAAM,WAAW,2BAA2B,OAAO;AAAA,EACnE,OAAO;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjET,IAAI,aAAY,OAAO;AACvB,IAAI,YAAW,CAAC,QAAQ,QAAQ;AAAA,EAC9B,SAAS,QAAQ;AAAA,IACf,WAAU,QAAQ,MAAM;AAAA,MACtB,KAAK,IAAI;AAAA,MACT,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,KAAK,CAAC,aAAa,IAAI,QAAQ,MAAM;AAAA,IACvC,CAAC;AAAA;AAIL,IAAI,gBAAgB,CAAC;AACrB,UAAS,eAAe;AAAA,EACtB,aAAa,MAAM;AAAA,EACnB,KAAK,MAAM;AAAA,EACX,aAAa,MAAM;AAAA,EACnB,WAAW,MAAM;AACnB,CAAC;AACD,IAAI;AAAA,CACH,CAAC,eAAe;AAAA,EACf,WAAW,WAAW,UAAU,KAAK;AAAA,EACrC,WAAW,WAAW,aAAa,KAAK;AAAA,EACxC,WAAW,WAAW,WAAW,KAAK;AAAA,EACtC,WAAW,WAAW,eAAe,KAAK;AAAA,EAC1C,WAAW,WAAW,eAAe,KAAK;AAAA,EAC1C,WAAW,WAAW,aAAa,KAAK;AAAA,EACxC,WAAW,WAAW,gBAAgB,KAAK;AAAA,EAC3C,WAAW,WAAW,gBAAgB,KAAK;AAAA,GAC1C,cAAc,CAAC,CAAC;AACnB,IAAI;AAAA,CACH,CAAC,iBAAiB;AAAA,EACjB,aAAa,aAAa,UAAU,KAAK;AAAA,EACzC,aAAa,aAAa,UAAU,KAAK;AAAA,EACzC,aAAa,aAAa,YAAY,KAAK;AAAA,EAC3C,aAAa,aAAa,WAAW,KAAK;AAAA,EAC1C,aAAa,aAAa,QAAQ,KAAK;AAAA,EACvC,aAAa,aAAa,QAAQ,KAAK;AAAA,EACvC,aAAa,aAAa,QAAQ,KAAK;AAAA,EACvC,aAAa,aAAa,QAAQ,KAAK;AAAA,EACvC,aAAa,aAAa,QAAQ,KAAK;AAAA,GACtC,gBAAgB,CAAC,CAAC;AACrB,IAAI;AAAA,CACH,CAAC,SAAS;AAAA,EACT,KAAK,KAAK,UAAU,KAAK;AAAA,EACzB,KAAK,KAAK,eAAe,KAAK;AAAA,EAC9B,KAAK,KAAK,eAAe,KAAK;AAAA,EAC9B,KAAK,KAAK,iBAAiB,KAAK;AAAA,EAChC,KAAK,KAAK,kBAAkB,KAAK;AAAA,EACjC,KAAK,KAAK,WAAW,KAAK;AAAA,EAC1B,KAAK,KAAK,YAAY,KAAK;AAAA,EAC3B,KAAK,KAAK,YAAY,KAAK;AAAA,EAC3B,KAAK,KAAK,YAAY,KAAK;AAAA,EAC3B,KAAK,KAAK,YAAY,KAAK;AAAA,EAC3B,KAAK,KAAK,YAAY,MAAM;AAAA,EAC5B,KAAK,KAAK,YAAY,MAAM;AAAA,EAC5B,KAAK,KAAK,YAAY,MAAM;AAAA,EAC5B,KAAK,KAAK,YAAY,MAAM;AAAA,EAC5B,KAAK,KAAK,YAAY,MAAM;AAAA,EAC5B,KAAK,KAAK,YAAY,MAAM;AAAA,EAC5B,KAAK,KAAK,WAAW,MAAM;AAAA,EAC3B,KAAK,KAAK,mBAAmB,MAAM;AAAA,EACnC,KAAK,KAAK,YAAY,MAAM;AAAA,EAC5B,KAAK,KAAK,aAAa,MAAM;AAAA,EAC7B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,WAAW,MAAM;AAAA,EAC3B,KAAK,KAAK,YAAY,MAAM;AAAA,EAC5B,KAAK,KAAK,WAAW,MAAM;AAAA,EAC3B,KAAK,KAAK,eAAe,MAAM;AAAA,EAC/B,KAAK,KAAK,WAAW,MAAM;AAAA,EAC3B,KAAK,KAAK,aAAa,MAAM;AAAA,EAC7B,KAAK,KAAK,cAAc,MAAM;AAAA,EAC9B,KAAK,KAAK,eAAe,MAAM;AAAA,EAC/B,KAAK,KAAK,cAAc,MAAM;AAAA,EAC9B,KAAK,KAAK,iBAAiB,MAAM;AAAA,EACjC,KAAK,KAAK,iBAAiB,MAAM;AAAA,EACjC,KAAK,KAAK,kBAAkB,MAAM;AAAA,EAClC,KAAK,KAAK,WAAW,MAAM;AAAA,EAC3B,KAAK,KAAK,cAAc,MAAM;AAAA,EAC9B,KAAK,KAAK,eAAe,MAAM;AAAA,EAC/B,KAAK,KAAK,eAAe,MAAM;AAAA,EAC/B,KAAK,KAAK,gBAAgB,MAAM;AAAA,EAChC,KAAK,KAAK,WAAW,MAAM;AAAA,EAC3B,KAAK,KAAK,SAAS,MAAM;AAAA,EACzB,KAAK,KAAK,aAAa,MAAM;AAAA,EAC7B,KAAK,KAAK,cAAc,MAAM;AAAA,EAC9B,KAAK,KAAK,WAAW,MAAM;AAAA,EAC3B,KAAK,KAAK,WAAW,MAAM;AAAA,EAC3B,KAAK,KAAK,WAAW,MAAM;AAAA,EAC3B,KAAK,KAAK,WAAW,MAAM;AAAA,EAC3B,KAAK,KAAK,WAAW,MAAM;AAAA,EAC3B,KAAK,KAAK,gBAAgB,MAAM;AAAA,EAChC,KAAK,KAAK,YAAY,MAAM;AAAA,EAC5B,KAAK,KAAK,SAAS,MAAM;AAAA,EACzB,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,UAAU,MAAM;AAAA,EAC1B,KAAK,KAAK,YAAY,MAAM;AAAA,EAC5B,KAAK,KAAK,cAAc,MAAM;AAAA,EAC9B,KAAK,KAAK,YAAY,MAAM;AAAA,EAC5B,KAAK,KAAK,eAAe,MAAM;AAAA,EAC/B,KAAK,KAAK,eAAe,MAAM;AAAA,EAC/B,KAAK,KAAK,gBAAgB,MAAM;AAAA,EAChC,KAAK,KAAK,aAAa,MAAM;AAAA,EAC7B,KAAK,KAAK,aAAa,MAAM;AAAA,EAC7B,KAAK,KAAK,aAAa,MAAM;AAAA,EAC7B,KAAK,KAAK,aAAa,MAAM;AAAA,EAC7B,KAAK,KAAK,aAAa,MAAM;AAAA,EAC7B,KAAK,KAAK,aAAa,MAAM;AAAA,EAC7B,KAAK,KAAK,aAAa,MAAM;AAAA,EAC7B,KAAK,KAAK,aAAa,MAAM;AAAA,EAC7B,KAAK,KAAK,aAAa,MAAM;AAAA,EAC7B,KAAK,KAAK,aAAa,MAAM;AAAA,EAC7B,KAAK,KAAK,aAAa,MAAM;AAAA,EAC7B,KAAK,KAAK,aAAa,MAAM;AAAA,EAC7B,KAAK,KAAK,eAAe,MAAM;AAAA,EAC/B,KAAK,KAAK,qBAAqB,MAAM;AAAA,EACrC,KAAK,KAAK,iBAAiB,MAAM;AAAA,EACjC,KAAK,KAAK,sBAAsB,MAAM;AAAA,EACtC,KAAK,KAAK,iBAAiB,MAAM;AAAA,EACjC,KAAK,KAAK,mBAAmB,OAAO;AAAA,EACpC,KAAK,KAAK,kBAAkB,OAAO;AAAA,EACnC,KAAK,KAAK,iBAAiB,OAAO;AAAA,EAClC,KAAK,KAAK,iBAAiB,OAAO;AAAA,EAClC,KAAK,KAAK,gBAAgB,OAAO;AAAA,EACjC,KAAK,KAAK,qBAAqB,OAAO;AAAA,EACtC,KAAK,KAAK,uBAAuB,OAAO;AAAA,EACxC,KAAK,KAAK,wBAAwB,OAAO;AAAA,EACzC,KAAK,KAAK,uBAAuB,OAAO;AAAA,EACxC,KAAK,KAAK,0BAA0B,OAAO;AAAA,EAC3C,KAAK,KAAK,oBAAoB,OAAO;AAAA,EACrC,KAAK,KAAK,qBAAqB,OAAO;AAAA,EACtC,KAAK,KAAK,sBAAsB,OAAO;AAAA,EACvC,KAAK,KAAK,gBAAgB,OAAO;AAAA,EACjC,KAAK,KAAK,oBAAoB,OAAO;AAAA,EACrC,KAAK,KAAK,YAAY,OAAO;AAAA,EAC7B,KAAK,KAAK,QAAQ,OAAO;AAAA,EACzB,KAAK,KAAK,YAAY,OAAO;AAAA,EAC7B,KAAK,KAAK,iBAAiB,OAAO;AAAA,EAClC,KAAK,KAAK,gBAAgB,OAAO;AAAA,EACjC,KAAK,KAAK,WAAW,OAAO;AAAA,EAC5B,KAAK,KAAK,iBAAiB,OAAO;AAAA,EAClC,KAAK,KAAK,sBAAsB,OAAO;AAAA,EACvC,KAAK,KAAK,oBAAoB,OAAO;AAAA,EACrC,KAAK,KAAK,iBAAiB,OAAO;AAAA,EAClC,KAAK,KAAK,oBAAoB,OAAO;AAAA,EACrC,KAAK,KAAK,mBAAmB,OAAO;AAAA,EACpC,KAAK,KAAK,iBAAiB,OAAO;AAAA,EAClC,KAAK,KAAK,WAAW,OAAO;AAAA,EAC5B,KAAK,KAAK,gBAAgB,OAAO;AAAA,EACjC,KAAK,KAAK,gBAAgB,OAAO;AAAA,EACjC,KAAK,KAAK,gBAAgB,OAAO;AAAA,EACjC,KAAK,KAAK,oBAAoB,OAAO;AAAA,EACrC,KAAK,KAAK,iBAAiB,OAAO;AAAA,EAClC,KAAK,KAAK,eAAe,OAAO;AAAA,EAChC,KAAK,KAAK,oBAAoB,OAAO;AAAA,EACrC,KAAK,KAAK,wBAAwB,OAAO;AAAA,EACzC,KAAK,KAAK,WAAW,OAAO;AAAA,EAC5B,KAAK,KAAK,WAAW,OAAO;AAAA,EAC5B,KAAK,KAAK,qBAAqB,OAAO;AAAA,EACtC,KAAK,KAAK,qBAAqB,OAAO;AAAA,EACtC,KAAK,KAAK,mBAAmB,OAAO;AAAA,EACpC,KAAK,KAAK,YAAY,OAAO;AAAA,EAC7B,KAAK,KAAK,WAAW,OAAO;AAAA,EAC5B,KAAK,KAAK,WAAW,OAAO;AAAA,EAC5B,KAAK,KAAK,WAAW,OAAO;AAAA,EAC5B,KAAK,KAAK,WAAW,OAAO;AAAA,EAC5B,KAAK,KAAK,YAAY,OAAO;AAAA,EAC7B,KAAK,KAAK,aAAa,OAAO;AAAA,EAC9B,KAAK,KAAK,WAAW,OAAO;AAAA,EAC5B,KAAK,KAAK,UAAU,OAAO;AAAA,EAC3B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,UAAU,OAAO;AAAA,EAC3B,KAAK,KAAK,UAAU,OAAO;AAAA,EAC3B,KAAK,KAAK,WAAW,OAAO;AAAA,EAC5B,KAAK,KAAK,WAAW,OAAO;AAAA,EAC5B,KAAK,KAAK,YAAY,OAAO;AAAA,EAC7B,KAAK,KAAK,UAAU,OAAO;AAAA,EAC3B,KAAK,KAAK,cAAc,OAAO;AAAA,EAC/B,KAAK,KAAK,cAAc,OAAO;AAAA,EAC/B,KAAK,KAAK,QAAQ,OAAO;AAAA,EACzB,KAAK,KAAK,QAAQ,OAAO;AAAA,EACzB,KAAK,KAAK,QAAQ,OAAO;AAAA,EACzB,KAAK,KAAK,QAAQ,OAAO;AAAA,EACzB,KAAK,KAAK,QAAQ,OAAO;AAAA,EACzB,KAAK,KAAK,QAAQ,OAAO;AAAA,EACzB,KAAK,KAAK,QAAQ,OAAO;AAAA,EACzB,KAAK,KAAK,QAAQ,OAAO;AAAA,EACzB,KAAK,KAAK,QAAQ,OAAO;AAAA,EACzB,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,EAC1B,KAAK,KAAK,SAAS,OAAO;AAAA,GACzB,QAAQ,CAAC,CAAC;AACb,IAAI;AAAA,CACH,CAAC,iBAAiB;AAAA,EACjB,aAAa,aAAa,UAAU,KAAK;AAAA,EACzC,aAAa,aAAa,mBAAmB,KAAK;AAAA,EAClD,aAAa,aAAa,gBAAgB,KAAK;AAAA,EAC/C,aAAa,aAAa,gBAAgB,KAAK;AAAA,EAC/C,aAAa,aAAa,mBAAmB,KAAK;AAAA,EAClD,aAAa,aAAa,mBAAmB,KAAK;AAAA,EAClD,aAAa,aAAa,mBAAmB,KAAK;AAAA,EAClD,aAAa,aAAa,mBAAmB,KAAK;AAAA,EAClD,aAAa,aAAa,mBAAmB,KAAK;AAAA,EAClD,aAAa,aAAa,mBAAmB,KAAK;AAAA,EAClD,aAAa,aAAa,mBAAmB,MAAM;AAAA,EACnD,aAAa,aAAa,mBAAmB,MAAM;AAAA,EACnD,aAAa,aAAa,mBAAmB,MAAM;AAAA,EACnD,aAAa,aAAa,mBAAmB,MAAM;AAAA,EACnD,aAAa,aAAa,oBAAoB,MAAM;AAAA,EACpD,aAAa,aAAa,oBAAoB,MAAM;AAAA,EACpD,aAAa,aAAa,iBAAiB,OAAO;AAAA,EAClD,aAAa,aAAa,iBAAiB,OAAO;AAAA,EAClD,aAAa,aAAa,iBAAiB,OAAO;AAAA,EAClD,aAAa,aAAa,iBAAiB,OAAO;AAAA,EAClD,aAAa,aAAa,iBAAiB,OAAO;AAAA,EAClD,aAAa,aAAa,iBAAiB,OAAO;AAAA,EAClD,aAAa,aAAa,iBAAiB,OAAO;AAAA,EAClD,aAAa,aAAa,iBAAiB,OAAO;AAAA,EAClD,aAAa,aAAa,iBAAiB,OAAO;AAAA,EAClD,aAAa,aAAa,iBAAiB,OAAO;AAAA,EAClD,aAAa,aAAa,kBAAkB,OAAO;AAAA,EACnD,aAAa,aAAa,kBAAkB,OAAO;AAAA,EACnD,aAAa,aAAa,cAAc,OAAO;AAAA,GAC9C,gBAAgB,CAAC,CAAC;AAErB,IAAI,cAAc;AAClB,IAAI,kBAAkB;AACtB,IAAI,gBAAgB;AACpB,IAAI,eAAe;AACnB,IAAI,uBAAuB;AAC3B,IAAI,qBAAqB;AACzB,IAAI,iBAAiB,cAAc;AACnC,IAAI,qBAAqB;AACzB,IAAI,sBAAsB;AAC1B,SAAS,YAAY,CAAC,KAAK;AAAA,EACzB,OAAO,IAAI;AAAA;AAEb,SAAS,YAAY,CAAC,MAAM;AAAA,EAC1B,OAAO,IAAI;AAAA;AAEb,SAAS,4BAA4B,CAAC,QAAQ;AAAA,EAC5C,OAAO,YAAY;AAAA;AAErB,SAAS,4BAA4B,CAAC,MAAM;AAAA,EAC1C,OAAO,YAAY;AAAA;AAErB,SAAS,4BAA4B,CAAC,QAAQ;AAAA,EAC5C,OAAO,YAAY;AAAA;AAErB,SAAS,4BAA4B,CAAC,MAAM;AAAA,EAC1C,OAAO,YAAY;AAAA;AAAA;AAIrB,MAAM,mBAAmB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW,CAAC,UAAU;AAAA,IACpB,KAAK,YAAY;AAAA;AAAA,MAEf,IAAI,GAAG;AAAA,IACT,IAAI,CAAC,KAAK,OAAO;AAAA,MACf,KAAK,QAAQ,IAAI,gBAAgB,IAAI,SAAS,KAAK,UAAU,QAAQ,KAAK,UAAU,aAAa,eAAe,CAAC;AAAA,IACnH;AAAA,IACA,OAAO,KAAK;AAAA;AAAA,MAEV,KAAK,GAAG;AAAA,IACV,IAAI,CAAC,KAAK,QAAQ;AAAA,MAChB,KAAK,SAAS,IAAI,aAAa,IAAI,SAAS,KAAK,UAAU,QAAQ,KAAK,UAAU,aAAa,YAAY,CAAC;AAAA,IAC9G;AAAA,IACA,OAAO,KAAK;AAAA;AAEhB;AAAA;AAEA,MAAM,aAAa;AAAA,EACjB;AAAA,EACA,WAAW,CAAC;AAAA,EACZ,WAAW,CAAC,UAAU;AAAA,IACpB,IAAI,UAAU;AAAA,MACZ,KAAK,YAAY;AAAA,MACjB,KAAK,cAAc;AAAA,IACrB;AAAA;AAAA,MAEE,QAAQ,GAAG;AAAA,IACb,IAAI,CAAC,KAAK,WAAW;AAAA,MACnB,MAAM,IAAI,MAAM,6CAA6C;AAAA,IAC/D;AAAA,IACA,OAAO,KAAK;AAAA;AAAA,MAEV,QAAQ,CAAC,UAAU;AAAA,IACrB,KAAK,YAAY;AAAA,IACjB,KAAK,cAAc;AAAA;AAAA,EAErB,aAAa,GAAG;AAAA,IACd,KAAK,WAAW,CAAC;AAAA,IACjB,SAAS,IAAI,EAAE,IAAI,aAAa,KAAK;AAAA,MACnC,MAAM,eAAe,IAAI;AAAA,MACzB,MAAM,iBAAiB,IAAI,SAAS,KAAK,SAAS,QAAQ,KAAK,SAAS,aAAa,cAAc,kBAAkB;AAAA,MACrH,KAAK,SAAS,KAAK,IAAI,mBAAmB,cAAc,CAAC;AAAA,IAC3D;AAAA;AAAA,MAEE,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK;AAAA;AAAA,MAEV,IAAI,GAAG;AAAA,IACT,IAAI,CAAC,KAAK,SAAS,IAAI;AAAA,MACrB,MAAM,IAAI,MAAM,4CAA4C;AAAA,IAC9D;AAAA,IACA,OAAO,KAAK,SAAS,GAAG;AAAA;AAAA,MAEtB,KAAK,GAAG;AAAA,IACV,IAAI,CAAC,KAAK,SAAS,IAAI;AAAA,MACrB,MAAM,IAAI,MAAM,4CAA4C;AAAA,IAC9D;AAAA,IACA,OAAO,KAAK,SAAS,GAAG;AAAA;AAE5B;AAAA;AAEA,MAAM,aAAa;AAAA,EACjB;AAAA,EACA,gBAAgB,IAAI;AAAA,EACpB,WAAW,CAAC,UAAU;AAAA,IACpB,KAAK,YAAY;AAAA;AAAA,MAEf,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,WAAW,GAAG,IAAI;AAAA;AAAA,MAEtC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,WAAW,GAAG,IAAI;AAAA;AAAA,MAEtC,KAAK,GAAG;AAAA,IACV,OAAO,EAAE,GAAG,KAAK,QAAQ,GAAG,KAAK,OAAO;AAAA;AAAA,MAEtC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,WAAW,GAAG,IAAI;AAAA;AAAA,MAEtC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,WAAW,IAAI,IAAI;AAAA;AAAA,MAEvC,IAAI,GAAG;AAAA,IACT,OAAO,KAAK,aAAa,CAAY;AAAA;AAAA,MAEnC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,aAAa,CAAa;AAAA;AAAA,MAEpC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,aAAa,CAAc;AAAA;AAAA,EAEzC,YAAY,CAAC,MAAM;AAAA,IACjB,IAAI;AAAA,IACJ,IAAI,KAAK,cAAc,IAAI,IAAI,GAAG;AAAA,MAChC,QAAQ,KAAK,cAAc,IAAI,IAAI;AAAA,IACrC,EAAO;AAAA,MACL,QAAQ,EAAE,MAAM,OAAO,MAAM,OAAO,IAAI,MAAM;AAAA,MAC9C,KAAK,cAAc,IAAI,MAAM,KAAK;AAAA;AAAA,IAEpC,MAAM,SAAS;AAAA,IACf,MAAM,OAAO,CAAC,EAAE,KAAK,UAAU,SAAS,SAAS,IAAI,IAAI;AAAA,IACzD,MAAM,OAAO,MAAM,QAAQ,EAAE,KAAK,UAAU,SAAS,SAAS,IAAI,IAAI;AAAA,IACtE,MAAM,KAAK,CAAC,MAAM,QAAQ,CAAC,EAAE,KAAK,UAAU,SAAS,SAAS,IAAI,IAAI;AAAA,IACtE,OAAO;AAAA;AAEX;AAAA;AAEA,MAAM,gBAAgB;AAAA,EACpB;AAAA,EACA,aAAa,IAAI;AAAA,EACjB,WAAW,CAAC,UAAU;AAAA,IACpB,KAAK,YAAY;AAAA;AAAA,MAEf,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,aAAa,KAAK;AAAA;AAAA,MAE5B,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,WAAW,KAAK;AAAA;AAAA,MAE1B,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,eAAe,KAAK;AAAA;AAAA,MAE9B,IAAI,GAAG;AAAA,IACT,OAAO,KAAK,YAAY,KAAK;AAAA;AAAA,MAE3B,SAAS,GAAG;AAAA,IACd,OAAO,KAAK,UAAU,CAAiB;AAAA;AAAA,MAErC,SAAS,GAAG;AAAA,IACd,OAAO,KAAK,UAAU,CAAiB;AAAA;AAAA,MAErC,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,UAAU,CAAmB;AAAA;AAAA,MAEvC,YAAY,GAAG;AAAA,IACjB,OAAO,KAAK,UAAU,CAAoB;AAAA;AAAA,MAExC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,CAAa;AAAA;AAAA,MAEjC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,CAAc;AAAA;AAAA,MAElC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,CAAc;AAAA;AAAA,MAElC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,CAAc;AAAA;AAAA,MAElC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,CAAc;AAAA;AAAA,MAElC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,EAAe;AAAA;AAAA,MAEnC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,EAAe;AAAA;AAAA,MAEnC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,EAAe;AAAA;AAAA,MAEnC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,EAAe;AAAA;AAAA,MAEnC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,EAAe;AAAA;AAAA,MAEnC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,EAAe;AAAA;AAAA,MAEnC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,EAAc;AAAA;AAAA,MAElC,aAAa,GAAG;AAAA,IAClB,OAAO,KAAK,UAAU,EAAsB;AAAA;AAAA,MAE1C,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,EAAe;AAAA;AAAA,MAEnC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,EAAc;AAAA;AAAA,MAElC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,EAAe;AAAA;AAAA,MAEnC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,EAAc;AAAA;AAAA,MAElC,SAAS,GAAG;AAAA,IACd,OAAO,KAAK,UAAU,EAAkB;AAAA;AAAA,MAEtC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,EAAc;AAAA;AAAA,MAElC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,QAAQ,GAAG;AAAA,IACb,OAAO,KAAK,UAAU,EAAiB;AAAA;AAAA,MAErC,SAAS,GAAG;AAAA,IACd,OAAO,KAAK,UAAU,EAAkB;AAAA;AAAA,MAEtC,QAAQ,GAAG;AAAA,IACb,OAAO,KAAK,UAAU,EAAiB;AAAA;AAAA,MAErC,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,UAAU,EAAoB;AAAA;AAAA,MAExC,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,UAAU,EAAoB;AAAA;AAAA,MAExC,YAAY,GAAG;AAAA,IACjB,OAAO,KAAK,UAAU,EAAqB;AAAA;AAAA,MAEzC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,EAAc;AAAA;AAAA,MAElC,QAAQ,GAAG;AAAA,IACb,OAAO,KAAK,UAAU,EAAiB;AAAA;AAAA,MAErC,SAAS,GAAG;AAAA,IACd,OAAO,KAAK,UAAU,EAAkB;AAAA;AAAA,MAEtC,SAAS,GAAG;AAAA,IACd,OAAO,KAAK,UAAU,EAAkB;AAAA;AAAA,MAEtC,UAAU,GAAG;AAAA,IACf,OAAO,KAAK,UAAU,EAAmB;AAAA;AAAA,MAEvC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,EAAc;AAAA;AAAA,MAElC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,EAAY;AAAA;AAAA,MAEhC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,QAAQ,GAAG;AAAA,IACb,OAAO,KAAK,UAAU,EAAiB;AAAA;AAAA,MAErC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,EAAc;AAAA;AAAA,MAElC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,EAAc;AAAA;AAAA,MAElC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,EAAc;AAAA;AAAA,MAElC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,EAAc;AAAA;AAAA,MAElC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,EAAc;AAAA;AAAA,MAElC,UAAU,GAAG;AAAA,IACf,OAAO,KAAK,UAAU,EAAmB;AAAA;AAAA,MAEvC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,EAAe;AAAA;AAAA,MAEnC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,EAAY;AAAA;AAAA,MAEhC,IAAI,GAAG;AAAA,IACT,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,IAAI,GAAG;AAAA,IACT,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,EAAe;AAAA;AAAA,MAEnC,QAAQ,GAAG;AAAA,IACb,OAAO,KAAK,UAAU,EAAiB;AAAA;AAAA,MAErC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,EAAe;AAAA;AAAA,MAEnC,SAAS,GAAG;AAAA,IACd,OAAO,KAAK,UAAU,EAAkB;AAAA;AAAA,MAEtC,SAAS,GAAG;AAAA,IACd,OAAO,KAAK,UAAU,EAAkB;AAAA;AAAA,MAEtC,UAAU,GAAG;AAAA,IACf,OAAO,KAAK,UAAU,EAAmB;AAAA;AAAA,MAEvC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,SAAS,GAAG;AAAA,IACd,OAAO,KAAK,UAAU,EAAkB;AAAA;AAAA,MAEtC,eAAe,GAAG;AAAA,IACpB,OAAO,KAAK,UAAU,EAAwB;AAAA;AAAA,MAE5C,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,UAAU,EAAoB;AAAA;AAAA,MAExC,gBAAgB,GAAG;AAAA,IACrB,OAAO,KAAK,UAAU,EAAyB;AAAA;AAAA,MAE7C,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,UAAU,EAAoB;AAAA;AAAA,MAExC,aAAa,GAAG;AAAA,IAClB,OAAO,KAAK,UAAU,GAAuB;AAAA;AAAA,MAE3C,YAAY,GAAG;AAAA,IACjB,OAAO,KAAK,UAAU,GAAsB;AAAA;AAAA,MAE1C,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,UAAU,GAAqB;AAAA;AAAA,MAEzC,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,UAAU,GAAqB;AAAA;AAAA,MAEzC,UAAU,GAAG;AAAA,IACf,OAAO,KAAK,UAAU,GAAoB;AAAA;AAAA,MAExC,eAAe,GAAG;AAAA,IACpB,OAAO,KAAK,UAAU,GAAyB;AAAA;AAAA,MAE7C,iBAAiB,GAAG;AAAA,IACtB,OAAO,KAAK,UAAU,GAA2B;AAAA;AAAA,MAE/C,kBAAkB,GAAG;AAAA,IACvB,OAAO,KAAK,UAAU,GAA4B;AAAA;AAAA,MAEhD,iBAAiB,GAAG;AAAA,IACtB,OAAO,KAAK,UAAU,GAA2B;AAAA;AAAA,MAE/C,oBAAoB,GAAG;AAAA,IACzB,OAAO,KAAK,UAAU,GAA8B;AAAA;AAAA,MAElD,cAAc,GAAG;AAAA,IACnB,OAAO,KAAK,UAAU,GAAwB;AAAA;AAAA,MAE5C,eAAe,GAAG;AAAA,IACpB,OAAO,KAAK,UAAU,GAAyB;AAAA;AAAA,MAE7C,gBAAgB,GAAG;AAAA,IACrB,OAAO,KAAK,UAAU,GAA0B;AAAA;AAAA,MAE9C,UAAU,GAAG;AAAA,IACf,OAAO,KAAK,UAAU,GAAoB;AAAA;AAAA,MAExC,cAAc,GAAG;AAAA,IACnB,OAAO,KAAK,UAAU,GAAwB;AAAA;AAAA,MAE5C,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,GAAgB;AAAA;AAAA,MAEpC,EAAE,GAAG;AAAA,IACP,OAAO,KAAK,UAAU,GAAY;AAAA;AAAA,MAEhC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,GAAgB;AAAA;AAAA,MAEpC,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,UAAU,GAAqB;AAAA;AAAA,MAEzC,UAAU,GAAG;AAAA,IACf,OAAO,KAAK,UAAU,GAAoB;AAAA;AAAA,MAExC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,GAAe;AAAA;AAAA,MAEnC,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,UAAU,GAAqB;AAAA;AAAA,MAEzC,gBAAgB,GAAG;AAAA,IACrB,OAAO,KAAK,UAAU,GAA0B;AAAA;AAAA,MAE9C,cAAc,GAAG;AAAA,IACnB,OAAO,KAAK,UAAU,GAAwB;AAAA;AAAA,MAE5C,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,UAAU,GAAqB;AAAA;AAAA,MAEzC,cAAc,GAAG;AAAA,IACnB,OAAO,KAAK,UAAU,GAAwB;AAAA;AAAA,MAE5C,aAAa,GAAG;AAAA,IAClB,OAAO,KAAK,UAAU,GAAuB;AAAA;AAAA,MAE3C,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,UAAU,GAAqB;AAAA;AAAA,MAEzC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,GAAe;AAAA;AAAA,MAEnC,UAAU,GAAG;AAAA,IACf,OAAO,KAAK,UAAU,GAAoB;AAAA;AAAA,MAExC,UAAU,GAAG;AAAA,IACf,OAAO,KAAK,UAAU,GAAoB;AAAA;AAAA,MAExC,UAAU,GAAG;AAAA,IACf,OAAO,KAAK,UAAU,GAAoB;AAAA;AAAA,MAExC,cAAc,GAAG;AAAA,IACnB,OAAO,KAAK,UAAU,GAAwB;AAAA;AAAA,MAE5C,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,UAAU,GAAqB;AAAA;AAAA,MAEzC,SAAS,GAAG;AAAA,IACd,OAAO,KAAK,UAAU,GAAmB;AAAA;AAAA,MAEvC,cAAc,GAAG;AAAA,IACnB,OAAO,KAAK,UAAU,GAAwB;AAAA;AAAA,MAE5C,kBAAkB,GAAG;AAAA,IACvB,OAAO,KAAK,UAAU,GAA4B;AAAA;AAAA,MAEhD,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,GAAe;AAAA;AAAA,MAEnC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,GAAe;AAAA;AAAA,MAEnC,eAAe,GAAG;AAAA,IACpB,OAAO,KAAK,UAAU,GAAyB;AAAA;AAAA,MAE7C,eAAe,GAAG;AAAA,IACpB,OAAO,KAAK,UAAU,GAAyB;AAAA;AAAA,MAE7C,aAAa,GAAG;AAAA,IAClB,OAAO,KAAK,UAAU,GAAuB;AAAA;AAAA,MAE3C,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,GAAgB;AAAA;AAAA,MAEpC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,GAAe;AAAA;AAAA,MAEnC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,GAAe;AAAA;AAAA,MAEnC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,GAAe;AAAA;AAAA,MAEnC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,GAAe;AAAA;AAAA,MAEnC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,GAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,GAAiB;AAAA;AAAA,MAErC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,GAAe;AAAA;AAAA,MAEnC,IAAI,GAAG;AAAA,IACT,OAAO,KAAK,UAAU,GAAc;AAAA;AAAA,MAElC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,IAAI,GAAG;AAAA,IACT,OAAO,KAAK,UAAU,GAAc;AAAA;AAAA,MAElC,IAAI,GAAG;AAAA,IACT,OAAO,KAAK,UAAU,GAAc;AAAA;AAAA,MAElC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,GAAe;AAAA;AAAA,MAEnC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,GAAe;AAAA;AAAA,MAEnC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,GAAgB;AAAA;AAAA,MAEpC,IAAI,GAAG;AAAA,IACT,OAAO,KAAK,UAAU,GAAc;AAAA;AAAA,MAElC,QAAQ,GAAG;AAAA,IACb,OAAO,KAAK,UAAU,GAAkB;AAAA;AAAA,MAEtC,QAAQ,GAAG;AAAA,IACb,OAAO,KAAK,UAAU,GAAkB;AAAA;AAAA,MAEtC,EAAE,GAAG;AAAA,IACP,OAAO,KAAK,UAAU,GAAY;AAAA;AAAA,MAEhC,EAAE,GAAG;AAAA,IACP,OAAO,KAAK,UAAU,GAAY;AAAA;AAAA,MAEhC,EAAE,GAAG;AAAA,IACP,OAAO,KAAK,UAAU,GAAY;AAAA;AAAA,MAEhC,EAAE,GAAG;AAAA,IACP,OAAO,KAAK,UAAU,GAAY;AAAA;AAAA,MAEhC,EAAE,GAAG;AAAA,IACP,OAAO,KAAK,UAAU,GAAY;AAAA;AAAA,MAEhC,EAAE,GAAG;AAAA,IACP,OAAO,KAAK,UAAU,GAAY;AAAA;AAAA,MAEhC,EAAE,GAAG;AAAA,IACP,OAAO,KAAK,UAAU,GAAY;AAAA;AAAA,MAEhC,EAAE,GAAG;AAAA,IACP,OAAO,KAAK,UAAU,GAAY;AAAA;AAAA,MAEhC,EAAE,GAAG;AAAA,IACP,OAAO,KAAK,UAAU,GAAY;AAAA;AAAA,MAEhC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,EAErC,SAAS,CAAC,MAAM;AAAA,IACd,IAAI;AAAA,IACJ,IAAI,KAAK,WAAW,IAAI,IAAI,GAAG;AAAA,MAC7B,QAAQ,KAAK,WAAW,IAAI,IAAI;AAAA,IAClC,EAAO;AAAA,MACL,QAAQ,EAAE,MAAM,OAAO,MAAM,OAAO,IAAI,MAAM;AAAA,MAC9C,KAAK,WAAW,IAAI,MAAM,KAAK;AAAA;AAAA,IAEjC,MAAM,OAAO,CAAC,EAAE,KAAK,UAAU,SAAS,IAAI,IAAI;AAAA,IAChD,MAAM,OAAO,MAAM,QAAQ,EAAE,KAAK,UAAU,SAAS,IAAI,IAAI;AAAA,IAC7D,MAAM,KAAK,CAAC,MAAM,QAAQ,CAAC,EAAE,KAAK,UAAU,SAAS,IAAI,IAAI;AAAA,IAC7D,OAAO;AAAA;AAEX;AAAA;AAEA,MAAM,YAAY;AAAA,EAChB;AAAA,EACA,WAAW,CAAC,UAAU;AAAA,IACpB,KAAK,WAAW;AAAA;AAAA,MAEd,KAAK,GAAG;AAAA,IACV,IAAI,CAAC,KAAK,UAAU;AAAA,MAClB,MAAM,IAAI,MAAM,yCAAyC;AAAA,IAC3D;AAAA,IACA,OAAO,KAAK,SAAS,UAAU,GAAG,IAAI;AAAA;AAAA,MAEpC,EAAE,GAAG;AAAA,IACP,IAAI,CAAC,KAAK,UAAU;AAAA,MAClB,MAAM,IAAI,MAAM,yCAAyC;AAAA,IAC3D;AAAA,IACA,OAAO,KAAK,SAAS,UAAU,GAAG,IAAI,IAAI;AAAA;AAAA,MAExC,IAAI,GAAG;AAAA,IACT,IAAI,CAAC,KAAK,UAAU;AAAA,MAClB,MAAM,IAAI,MAAM,yCAAyC;AAAA,IAC3D;AAAA,IACA,OAAO,KAAK,SAAS,UAAU,GAAG,IAAI,IAAI;AAAA;AAE9C;AAAA;AAEA,MAAM,WAAW;AAAA,EACf;AAAA,EACA,WAAW,CAAC,UAAU;AAAA,IACpB,KAAK,WAAW;AAAA;AAAA,MAEd,SAAS,GAAG;AAAA,IACd,IAAI,CAAC,KAAK,UAAU;AAAA,MAClB,MAAM,IAAI,MAAM,wCAAwC;AAAA,IAC1D;AAAA,IACA,OAAO,KAAK,SAAS,SAAS,CAAC;AAAA;AAAA,MAE7B,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,YAAY;AAAA;AAAA,MAEtB,UAAU,GAAG;AAAA,IACf,IAAI,CAAC,KAAK,UAAU;AAAA,MAClB,MAAM,IAAI,MAAM,wCAAwC;AAAA,IAC1D;AAAA,IACA,OAAO,KAAK,SAAS,UAAU,GAAG,IAAI;AAAA;AAE1C;AAGA,IAAI,mBAAmB,IAAI,IAAI,sBAAsB,YAAY,GAAG;AACpE,IAAI,kBAAkB;AACtB,IAAI,mBAAmB,kBAAkB;AACzC,IAAI,gBAAgB,mBAAmB;AACvC,IAAI,iBAAiB,gBAAgB;AACrC,IAAI,sBAAsB;AAC1B,IAAI,kCAAkC;AACtC,IAAI,oCAAoC;;AC7iCjC,MAAM,IAAI;AAAA,EACf;AAAA,EACA;AAAA,EAEA,WAAW,CAAC,MAAkB,QAA4B;AAAA,IACxD,KAAK,QAAQ;AAAA,IACb,KAAK,UAAU;AAAA;AAAA,EAOjB,YAAY,CAAC,QAAsB;AAAA,IACjC,KAAK,MAAM,uBAAuB,MAAM;AAAA;AAAA,EAO1C,WAAW,CAAC,QAAsB;AAAA,IAChC,KAAK,MAAM,qBAAqB,MAAM;AAAA;AAAA,EAOxC,cAAc,CAAC,QAAsB;AAAA,IACnC,KAAK,MAAM,wBAAwB,MAAM;AAAA;AAAA,EAY3C,iBAAiB,CAAC,YAAoD;AAAA,IAEpE,KAAK,MAAM,sBAAsB,UAAU;AAAA,IAE3C,MAAM,MAAM,KAAK,MAAM,wBAAwB;AAAA,IAC/C,IAAI,QAAQ,GAAG;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,MAAM,KAAK,MAAM,oBAAoB;AAAA,IAC3C,OAAO,MAAM,GAAG,oCAAoC,KAAK;AAAA,IAGzD,MAAM,aAAa,IAAI,WAAW,KAAK,QAAQ,QAAQ,KAAK,GAAG;AAAA,IAC/D,MAAM,OAAO,IAAI,WAAW,GAAG;AAAA,IAC/B,KAAK,IAAI,UAAU;AAAA,IAEnB,OAAO;AAAA;AAAA,EAUT,aAAa,CAAC,MAAwB;AAAA,IACpC,IAAI,KAAK,WAAW,GAAG;AAAA,MACrB;AAAA,IACF;AAAA,IAGA,MAAM,MAAM,KAAK,MAAM,MAAM,KAAK,UAAU;AAAA,IAC5C,OACE,MAAM,GACN,sBAAsB,KAAK,sCAC7B;AAAA,IAEA,MAAM,aAAa,IAAI,WACrB,KAAK,QAAQ,QACb,KACA,KAAK,UACP;AAAA,IACA,WAAW,IAAI,IAAI;AAAA,IAGnB,MAAM,SAAS,KAAK,MAAM,eAAe,KAAK,KAAK,UAAU;AAAA,IAG7D,KAAK,MAAM,KAAK,KAAK,KAAK,UAAU;AAAA,IAGpC,IAAI,WAAW,GAAG;AAAA,MAChB,MAAM,gBAAwC;AAAA,QAC5C,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAAA,MACA,MAAM,IAAI,MACR,cAAc,WAAW,yBAAyB,QACpD;AAAA,IACF;AAAA;AAAA,EASF,YAAY,CAAC,MAGX;AAAA,IACA,OAAO;AAAA,MACL,KAAK,KAAK,MAAM,aAAa,IAAI;AAAA,MACjC,KAAK,KAAK,MAAM,aAAa,IAAI;AAAA,IACnC;AAAA;AAEJ;;;AC3HA,IAAM,kBAAmB,WAAmB;AAE5C,IAAM,OAAO,MAAM;AAEnB,IAAM,cAAc,OAAO,YACzB,OAAO,KAAK,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CACvD;AAEA,SAAS,WAAW,GAAG;AAAA,EACpB,WAAW,UAAiC;AAAA;AAG/C,SAAS,aAAa,GAAG;AAAA,EACtB,WAAW,UAAiC;AAAA;AAAA;AAwDxC,MAAM,IAAI;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAqB;AAAA,EAMZ;AAAA,EAMT;AAAA,EAEA,WAAW,CACT,MACA,QACA,MACA;AAAA,IACA,KAAK,OAAO;AAAA,IACZ,KAAK,UAAU;AAAA,IACf,KAAK,QAAQ,IAAI,YACf,IAAI,SAAS,KAAK,QAAQ,QAAQ,KAAK,KAAK,aAAa,CAAC,CAC5D;AAAA,IAEA,KAAK,KAAK,GAAG,KAAK,MAAM,KAAK,OAAO,IAAI,GAAS;AAAA,IAEjD,KAAK,aAAa,MAAM;AAAA,IACxB,KAAK,MAAM,IAAI,IAAI,MAAM,MAAM;AAAA;AAAA,EAGjC,IAAI,CAAC,IAAqB;AAAA,IACxB,IAAI,KAAK,aAAa,CAAC,KAAK,aAAa;AAAA,MAEvC,OAAO;AAAA,IACT;AAAA,IACA,OAAO,KAAK,KAAK,KAAK,MAAM,EAAE;AAAA;AAAA,EAOhC,IAAI,GAAS;AAAA,IACX,KAAK,KAAK,KAAK;AAAA;AAAA,EASjB,YAAY,CAAC,QAAmB;AAAA,IAC9B,KAAK,SAAS,OAAO,SAAS,CAAC;AAAA,IAC/B,KAAK,QAAQ,OAAO,SAAS,CAAC;AAAA;AAAA,EAGhC,KAAK,GAAG;AAAA,IACN,KAAK,YAAY;AAAA;AAAA,EAGnB,OAAO,GAAG;AAAA,IACR,KAAK,YAAY;AAAA;AAAA,MAGf,QAAQ,GAAY;AAAA,IACtB,OAAO,KAAK;AAAA;AAAA,EAGd,QAAQ,GAAG;AAAA,IACT,IAAI,KAAK,KAAK,UAAU,GAAG;AAAA,MACzB;AAAA,IACF;AAAA,IAEA,KAAK,KAAK,KAAK,KAAK,QAAQ,CAAC;AAAA;AAAA,EAO/B,IAAI,CAAC,OAAe,WAAqB;AAAA,IACvC,OACE,KAAK,YACL,oDACF;AAAA,IAEA,MAAM,cAAc,YAAY,QAAQ,IAAI;AAAA,IAE5C,MAAM,aAAa,QAAQ,KAAK,KAAK;AAAA,IACrC,IAAI,YAAY;AAAA,MACd,YAAY;AAAA,IACd;AAAA,IACA,KAAK,KAAK,KAAK,WAAW;AAAA,IAC1B,IAAI,YAAY;AAAA,MACd,cAAc;AAAA,IAChB;AAAA;AAAA,EAMF,QAAQ,GAA4B;AAAA,IAClC,MAAM,aAAa,KAAK,aAAa,KAAK,WAAW,IAAI;AAAA,IACzD,MAAM,OAAO,aAAa,WAAW,OAAO;AAAA,IAE5C,MAAM,MAAM,KAAK,KAAK,cAAc,IAAI;AAAA,IACxC,MAAM,SAAS,IAAI,YAAY,KAAK,QAAQ,QAAQ,KAAK,CAAC;AAAA,IAC1D,MAAM,eACJ,kCAAkC,YAAY;AAAA,IAChD,MAAM,iBACJ,oCAAoC,YAAY;AAAA,IAClD,OAAO,OAAO,eAAe,4BAA4B;AAAA,IACzD,OAAO,OAAO,iBAAiB,8BAA8B;AAAA,IAC7D,MAAM,SAAS,OAAO,gBAAgB,OAAO;AAAA,IAC7C,MAAM,aAAa,IAAI,WAAW,KAAK,QAAQ,QAAQ,KAAK,MAAM;AAAA,IAElE,MAAM,OAAO,IAAI,WAAW,MAAM;AAAA,IAClC,KAAK,IAAI,UAAU;AAAA,IAEnB,OAAO;AAAA;AAAA,EAOT,MAAM,CAAC,YAAoB,MAAM;AAAA,IAC/B,MAAM,aAAa,KAAK,aAAa,KAAK,WAAW,IAAI;AAAA,IACzD,MAAM,OAAO,aAAa,WAAW,OAAO;AAAA,IAC5C,MAAM,SAAS,KAAK,KAAK,gBAAgB,MAAM,SAAS;AAAA,IACxD,IAAI,WAAW,GAAG;AAAA,MAChB,MAAM,IAAI,MAAM,yCAAyC,QAAQ;AAAA,IACnE;AAAA;AAAA,EAMF,QAAQ,GAA4B;AAAA,IAClC,MAAM,UAAU,KAAK,KAAK,aAAa;AAAA,IACvC,MAAM,UAAU,KAAK,KAAK,aAAa;AAAA,IACvC,MAAM,aAAa,IAAI,WAAW,KAAK,QAAQ,QAAQ,SAAS,OAAO;AAAA,IAEvE,MAAM,OAAO,IAAI,WAAW,OAAO;AAAA,IACnC,KAAK,IAAI,UAAU;AAAA,IAEnB,OAAO;AAAA;AAAA,EAMT,QAAQ,CAAC,MAAkB;AAAA,IACzB,MAAM,UAAU,KAAK,KAAK,MAAM,KAAK,UAAU;AAAA,IAC/C,OACE,UAAU,GACV,sBAAsB,KAAK,2CAA2C,SACxE;AAAA,IAGA,MAAM,aAAa,IAAI,WACrB,KAAK,QAAQ,QACb,SACA,KAAK,UACP;AAAA,IACA,WAAW,IAAI,IAAI;AAAA,IAGnB,KAAK,KAAK,eAAe;AAAA,IACzB,MAAM,SAAS,KAAK,KAAK,UAAU,SAAS,KAAK,UAAU;AAAA,IAC3D,OAAO,WAAW,GAAG,mCAAmC,QAAQ;AAAA,IAGhE,KAAK,KAAK,KAAK,SAAS,KAAK,UAAU;AAAA;AAAA,EAMzC,OAAO,CAAC,UAAsB;AAAA,IAC5B,MAAM,UAAU,KAAK,KAAK,MAAM,SAAS,UAAU;AAAA,IACnD,OACE,UAAU,GACV,sBAAsB,SAAS,kDAAkD,SACnF;AAAA,IAGA,MAAM,aAAa,IAAI,WACrB,KAAK,QAAQ,QACb,SACA,SAAS,UACX;AAAA,IACA,WAAW,IAAI,QAAQ;AAAA,IAGvB,KAAK,KAAK,QAAQ,OAAO;AAAA,IAGzB,KAAK,KAAK,KAAK,SAAS,SAAS,UAAU;AAAA;AAAA,EAM7C,OAAO,GAAG;AAAA,IACR,KAAK,KAAK,OAAO;AAAA;AAAA,MAGf,IAAI,GAAgB;AAAA,IACtB,IACE,CAAC,KAAK,MAAM,YACZ,KAAK,MAAM,SAAS,WAAW,KAAK,QAAQ,QAC5C;AAAA,MAEA,KAAK,MAAM,WAAW,IAAI,SACxB,KAAK,QAAQ,QACb,KAAK,KAAK,aAAa,CACzB;AAAA,IACF;AAAA,IACA,OAAO,KAAK;AAAA;AAAA,MAGV,MAAM,GAAgB;AAAA,IACxB,OAAO,KAAK,QAAQ;AAAA;AAAA,MAGlB,WAAW,GAAY;AAAA,IACzB,OAAO,QAAQ,KAAK,KAAK,aAAa,CAAC;AAAA;AAAA,MAGrC,WAAW,GAAY;AAAA,IACzB,OAAO,QAAQ,KAAK,KAAK,aAAa,CAAC;AAAA;AAAA,MAGrC,UAAU,GAAY;AAAA,IACxB,OAAO,KAAK,eAAe,KAAK;AAAA;AAAA,EAGlC,OAAO;AAAA,IACL,SAAS,CAAC,KAAU,SAAiB,MAAY;AAAA,MAC/C,KAAK,KAAK,aAAa,aAAa,GAAG,GAAG,MAAM;AAAA;AAAA,IAElD,OAAO,CAAC,KAAU,SAAiB,MAAY;AAAA,MAC7C,KAAK,KAAK,WAAW,aAAa,GAAG,GAAG,MAAM;AAAA;AAAA,IAEhD,WAAW,CAAC,GAAW,GAAW,SAAiB,MAAY;AAAA,MAC7D,KAAK,KAAK,eAAe,GAAG,GAAG,MAAM;AAAA;AAAA,IAEvC,WAAW,CAAC,QAAqB,SAAiB,MAAY;AAAA,MAC5D,KAAK,KAAK,eAAe,6BAA6B,MAAM,GAAG,MAAM;AAAA;AAAA,IAEvE,SAAS,CAAC,QAAqB,SAAiB,MAAY;AAAA,MAC1D,KAAK,KAAK,aAAa,6BAA6B,MAAM,GAAG,MAAM;AAAA;AAAA,IAErE,YAAY,CAAC,GAAW,GAAW,SAAiB,MAAY;AAAA,MAC9D,KAAK,KAAK,gBAAgB,GAAG,GAAG,MAAM;AAAA;AAAA,EAE1C;AAAA,EAYA,WAAW,CAAC,WAAyB;AAAA,IACnC,MAAM,aAAa,KAAK,aAAa,KAAK,WAAW,IAAI;AAAA,IACzD,MAAM,OAAO,aAAa,WAAW,OAAO;AAAA,IAC5C,MAAM,SAAS,KAAK,KAAK,aAAa,WAAW,IAAI;AAAA,IACrD,OAAO,WAAW,GAAG,4CAA4C,QAAQ;AAAA;AAAA,EAM3E,UAAU,GAAS;AAAA,IACjB,KAAK,KAAK,YAAY;AAAA;AAAA,EAWxB,UAAU,CAAC,MAAc,YAAoB,QAA0B;AAAA,IACrE,IAAI,OAAO,WAAW,GAAG;AAAA,MAEvB,KAAK,KAAK,oBAAoB,MAAM,YAAY,GAAG,CAAC;AAAA,MACpD;AAAA,IACF;AAAA,IAGA,MAAM,MAAM,KAAK,KAAK,MAAM,OAAO,UAAU;AAAA,IAC7C,OAAO,MAAM,GAAG,sBAAsB,OAAO,6BAA6B;AAAA,IAE1E,MAAM,aAAa,IAAI,WAAW,KAAK,QAAQ,KAAK,OAAO,UAAU;AAAA,IACrE,WAAW,IAAI,MAAM;AAAA,IAGrB,MAAM,aAAa,OAAO,aAAa;AAAA,IACvC,KAAK,KAAK,oBAAoB,MAAM,YAAY,KAAK,UAAU;AAAA,IAG/D,KAAK,KAAK,KAAK,KAAK,OAAO,UAAU;AAAA;AAEzC;;;ACtYA,eAAsB,KAAK,CACzB,MACA,SACsB;AAAA,EACtB,MAAM,UAAU,SAAS,WAAW,KAAK,WAAW;AAAA,EACpD,MAAM,iBAAiB,SAAS,kBAAkB,KAAK,kBAAkB;AAAA,EACzE,MAAM,YAAY,mBAAmB,SAAS,IAAI;AAAA,EAGlD,MAAM,QAAQ,MAAM,MAAM,OAAO,EAC9B,KAAK,CAAC,QAAQ,IAAI,YAAY,CAAC,EAC/B,MAAM,CAAC,MAAM;AAAA,IACZ,QAAQ,MAAM,2BAA2B,WAAW,CAAC;AAAA,IACrD,MAAM;AAAA,GACP;AAAA,EAIH,MAAM,SAAS,IAAI,YAAY,OAAO,EAAE,SAAS,KAAK,SAAS,KAAK,CAAC;AAAA,EAGrE,IAAI;AAAA,EAEJ,MAAM,yBAAyB,MAAM,YAAY,YAAY,OAAO;AAAA,IAClE,KAAK;AAAA,MACH;AAAA,MACA,WAAW,QAAS,CAAC,eAAuB,KAAa;AAAA,QACvD,KAAK,MAAM,UAAU,OAAO,MAAM;AAAA,QAClC,KAAK,MAAM,gBAAgB,eAAe,GAAG;AAAA;AAAA,MAE/C,gBAAgB,QAAS,CAAC,KAAoB,OAAe;AAAA,QAC3D,IAAI;AAAA,UAEF,KAAK,MAAM,UAAU,OAAO,MAAM;AAAA,UAClC,KAAK,MAAM,WAAW,GAAG;AAAA,UACzB,KAAK,MAAM,cAAc,KAAK;AAAA,UAC9B,OAAO,GAAG;AAAA,UACV,QAAQ,MAAM,8BAA8B,CAAC;AAAA;AAAA;AAAA,MAGjD,gBAAgB,QAAS,CAAC,SAAiB;AAAA,QACzC,IAAI,CAAC,KAAK;AAAA,UACR,MAAM,IAAI,MAAM,qCAAqC;AAAA,QACvD;AAAA,QACA,MAAM,YAAY,IAAI,SAAS;AAAA,QAC/B,IAAI,IAAI,YAAY;AAAA,UAClB,IAAI,WAAW,SAAS;AAAA,QAC1B,EAAO;AAAA,UACL,MAAM,OAAO,UAAU,SAAS;AAAA,UAChC,MAAM,WAAW,IAAI,KAAK;AAAA,UAC1B,MAAM,cAAc,OAAO;AAAA,UAE3B,QAAQ,KAAK,gCAAgC;AAAA,YAC3C,MAAM,IAAI,UAAU,SAAS,MAAM,QAAQ,CAAC;AAAA,YAC5C,UAAU,GAAG,IAAI,KAAK,KAAK,QAAQ,CAAC;AAAA,YACpC,aAAa,GAAG,YAAY,QAAQ,CAAC;AAAA,UACvC,CAAC;AAAA;AAAA;AAAA,MAGL,aAAa,QAAS,CAAC,KAAoB,KAAa;AAAA,QACtD,MAAM,SAAQ,IAAI,WAAW,OAAO,QAAQ,KAAK,GAAG;AAAA,QACpD,MAAM,SAAS,IAAI,YAAY,OAAO,EAAE,OAAO,MAAK;AAAA,QACpD,QAAQ,IAAI,MAAM;AAAA;AAAA,MAEpB,iBAAiB,QAAS,GAAG;AAAA,QAC3B,MAAM,aAAa,KAAK,MAAM,UAAU;AAAA,QACxC,OAAO,aAAa,WAAW,OAAO;AAAA;AAAA,MAExC,qBAAqB,QAAS,CAAC,KAAoB,KAAa;AAAA,QAC9D,MAAM,aAAa,KAAK,MAAM,UAAU;AAAA,QACxC,OACE,QAAQ,WAAW,MACnB,iDAAiD,WAAW,YAAY,KAC1E;AAAA,QACA,WAAW,MAAM,OAAO,QAAQ,GAAG;AAAA;AAAA,MAErC,uBAAuB,QAAS,CAAC,KAAoB,KAAa;AAAA,QAChE,KAAK,MAAM,YAAY,OAAO,QAAQ,KAAK,GAAG;AAAA;AAAA,IAElD;AAAA,EACF,CAAC;AAAA,EACD,MAAM,OAAO,uBAAuB,SAAS;AAAA,EAE7C,MAAM,gBAAgB,KAAK,WAAW;AAAA,EACtC,MAAM,IAAI,IAAI,MAAM,QAAQ;AAAA,IAC1B,WAAW,KAAK,MAAM;AAAA,EACxB,CAAC;AAAA,EAED,IAAI,gBAAgB;AAAA,IAClB,IAAI,OAAO,SAAS;AAAA,EACtB;AAAA,EAEA,KAAK,MAAM,UAAU,OAAO,MAAM;AAAA,EAClC,KAAK,MAAM,WAAW,aAAa;AAAA,EAEnC,OAAO;AAAA,IACL;AAAA,EACF;AAAA;AAyCF,SAAS,kBAAkB,CAAC,MAA4B;AAAA,EACtD,IAAI,CAAC;AAAA,IAAM,OAAO;AAAA,EAElB,IAAI,eAAe,MAAM;AAAA,IACvB,OAAO,KAAK;AAAA,EACd;AAAA,EAIA,MAAM,YAAY,KAAK,yBAAyB;AAAA,EAChD,OAAO,KAAK,KAAK,KAAK,WAAW,KAAK,SAAS;AAAA;;AChH1C,MAAM,MAA8B;AAAA,EACzC,WAAyB,CAAC;AAAA,EAC1B;AAAA,EACA,gBAA6B,IAAI,YAAY,CAAC;AAAA,SAKvC,MAMN,CAAC,OAAqB,CAAC,GAAqB;AAAA,IAC3C,OAAO,IAAI,MAAiB,MAAM,oBAAoB;AAAA;AAAA,EAMxD,WAAW,CAAC,OAA2B,CAAC,GAAG,oBAA4B;AAAA,IACrE,IAAI,uBAAuB,sBAAsB;AAAA,MAC/C,MAAM,IAAI,MACR,iFACF;AAAA,IACF;AAAA,IAEA,MAAM,SAAS,IAAI;AAAA,IACnB,KAAK,WAAW;AAAA,MACd,KAAK,KAAK,OAAO,CAAC;AAAA,MAClB,MAAM,IAAI;AAAA,MACV;AAAA,UACI,OAAO,GAAG;AAAA,QACZ,OAAO,OAAO;AAAA;AAAA,MAEhB,YAAY;AAAA,MACZ,KAAK,IAAI;AAAA,IACX;AAAA;AAAA,MAME,GAAG,GAAY;AAAA,IACjB,OAAO,KAAK,SAAS;AAAA;AAAA,MAMnB,OAAO,GAA0B;AAAA,IACnC,OAAO,KAAK;AAAA;AAAA,EAMd,MAAM,CAAC,OAAe,QAA4B;AAAA,IAChD,OAAO,UAAU;AAAA,IACjB,KAAK,SAAS,KAAK,MAAM;AAAA,IACzB,OAAO,KAAK,SAAS;AAAA;AAAA,EAMvB,QAAqB;AAAA,IAKnB,WAAW,MAAM;AAAA,MACf,MAAM,MAAM,KAAK,UAAU,KAAK,SAAS,GAAG;AAAA,MAC5C,MAAM,UAAU,IAAI;AAAA,MACpB,MAAM,YAAY,QAAQ,OAAO,GAAG;AAAA,MAEpC,OAAO;AAAA,QACL,MAAM,UAAU;AAAA,QAChB,OAAO,CAAC,QAAyB,QAAuB;AAAA,UACtD,MAAM,aAAa,IAAI,WAAW,QAAQ,KAAK,UAAU,UAAU;AAAA,UACnE,WAAW,IAAI,SAAS;AAAA;AAAA,MAE5B;AAAA;AAAA,IAOF,aAAa,CAAC,QAAQ,KAAK,QAAQ;AAAA,MACjC,MAAM,WAAW,IAAI,WAAW,QAAQ,KAAK,GAAG;AAAA,MAChD,MAAM,UAAU,IAAI;AAAA,MACpB,MAAM,MAAM,QAAQ,OAAO,QAAQ;AAAA,MAEnC,IAAI;AAAA,QACF,KAAK,SAAS,MAAM,KAAK,MAAM,GAAG;AAAA,QAClC,OAAO,GAAG;AAAA,QACV,QAAQ,MAAM,6BAA6B,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;AAAA;AAAA;AAAA,IAItE,WAAW,CAAC,WAAwB;AAAA,MAClC,KAAK,gBAAgB;AAAA;AAAA,IAGvB,YAAY,CAAC,QAAuB;AAAA,MAElC,IAAI,CAAC,KAAK,eAAe;AAAA,QACvB,MAAM,IAAI,MAAM,2CAA2C;AAAA,MAC7D;AAAA,MACA,MAAM,KAAK,IAAI,SAAS,KAAK,eAAe,GAAG;AAAA,MAC/C,MAAM,aAAa,GAAG,UAAU,iBAAiB,IAAI;AAAA,MACrD,MAAM,cAAc,GAAG,UAAU,kBAAkB,IAAI;AAAA,MACvD,MAAM,YAAY,GAAG,UAAU,gBAAgB,IAAI;AAAA,MAEnD,KAAK,SAAS,aAAa;AAAA,MAE3B,KAAK,SAAS,OAAO,WAAW,IAAI,SAClC,KAAK,eACL,WACF;AAAA,MACA,KAAK,SAAS,KAAK,WAAW,IAAI,SAChC,KAAK,eACL,UACF;AAAA,MACA,KAAK,SAAS,IAAI,WAAW,IAAI,SAAS,KAAK,eAAe,SAAS;AAAA;AAAA,IAGzE,iBAAiB,CAAC,eAAuB,QAAuB;AAAA,MAC9D,KAAK,MAAM,WAAW,GAAG;AAAA,MACzB,MAAM,KAAK,IAAI,SAAS,KAAK,eAAe,GAAG;AAAA,MAC/C,MAAM,YAAY,GAAG,UAAU,eAAe,IAAI;AAAA,MAClD,MAAM,iBAAiB,IAAI,SAAS,KAAK,eAAe,SAAS;AAAA,MAEjE,WAAW,UAAU,KAAK,UAAU;AAAA,QAClC,OAAO,SAAS,KAAK,QAAQ;AAAA,QAQ7B,MAAM,aAAa,eAAe,UAAU,GAAG,IAAI;AAAA,QACnD,IAAI,SAAS;AAAA,QAEb,SAAS,IAAI,EAAG,IAAI,YAAY,KAAK;AAAA,UAEnC,MAAM,YAAY,eAAe,SAAS,MAAM;AAAA,UAChD,MAAM,cAAc,eAAe,SAAS,SAAS,CAAC;AAAA,UACtD,MAAM,gBAAgB,SAAS;AAAA,UAC/B,MAAM,cAAc,eAAe,SAAS,aAAa;AAAA,UACzD,MAAM,cAAc;AAAA,YAClB,GAAG,eAAe,WAAW,eAAe,IAAI;AAAA,YAChD,GAAG,eAAe,WAChB,gBAAgB,aAAa,mBAC7B,IACF;AAAA,UACF;AAAA,UAEA,QAAQ;AAAA,iBACD,cAAM,UAAU,SAAS;AAAA,cAC5B,OAAO,UACL,YAA0B,KAAK,UAAU;AAAA,gBACvC,KAAK,aAAa,WAAW;AAAA,cAC/B,CAAC,CACH;AAAA,cACA;AAAA,YACF;AAAA,iBACK,cAAM,UAAU;AAAA,cACnB,OAAO,QACL,YAA0B,KAAK,UAAU;AAAA,gBACvC,KAAK,aAAa,WAAW;AAAA,cAC/B,CAAC,CACH;AAAA,cACA;AAAA,iBACG,cAAM,UAAU;AAAA,cACnB,OAAO,YACL,YAAkC,KAAK,UAAU;AAAA,gBAC/C,QAAQ,6BAA6B,WAAW;AAAA,cAClD,CAAC,CACH;AAAA,cACA;AAAA,iBACG,cAAM,UAAU;AAAA,cACnB,OAAO,UACL,YAAkC,KAAK,UAAU;AAAA,gBAC/C,QAAQ,6BAA6B,WAAW;AAAA,cAClD,CAAC,CACH;AAAA,cACA;AAAA,iBACG,cAAM,UAAU;AAAA,cACnB,OAAO,YACL,YAAgC,KAAK,UAAU;AAAA,gBAC7C,GAAG,YAAY;AAAA,gBACf,GAAG,YAAY;AAAA,cACjB,CAAC,CACH;AAAA,cACA;AAAA,iBACG,cAAM,UAAU;AAAA,cACnB,OAAO,aACL,YAAiC,KAAK,UAAU;AAAA,gBAC9C,GAAG,YAAY;AAAA,gBACf,GAAG,YAAY;AAAA,cACjB,CAAC,CACH;AAAA,cACA;AAAA;AAAA,cAEA,MAAM,IAAI,MAAM,uBAAuB,WAAW;AAAA;AAAA,UAGtD,UAAU;AAAA,QACZ;AAAA,QACC,KAAK,SAAiB,QAAQ;AAAA,MACjC;AAAA;AAAA,EAEJ;AACF;AAEA,SAAS,WAA0D,CACjE,SACA,OAC6B;AAAA,EAC5B,QAAgB,QAAQ;AAAA,EACzB,OAAO;AAAA;",
|
|
13
|
-
"debugId": "
|
|
12
|
+
"mappings": "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",
|
|
13
|
+
"debugId": "6869EB8BB4207B5564756E2164756E21",
|
|
14
14
|
"names": []
|
|
15
15
|
}
|
package/dist/mount.d.ts
CHANGED
|
@@ -5,11 +5,17 @@ import { type EngineHooks, Sim } from "./sim";
|
|
|
5
5
|
* This is called by app.start on the web.
|
|
6
6
|
*/
|
|
7
7
|
export declare function mount(opts: MountOpts, options?: MountOptions): Promise<MountResult>;
|
|
8
|
-
export type TapeOptions = {
|
|
8
|
+
export type TapeOptions = ({
|
|
9
9
|
maxEvents: number;
|
|
10
10
|
} | {
|
|
11
11
|
duration: number;
|
|
12
12
|
averageEventsPerFrame?: number;
|
|
13
|
+
}) & {
|
|
14
|
+
/**
|
|
15
|
+
* Set to true for local-only recording (no network packet buffer).
|
|
16
|
+
* Default: false (allocates 2MB for network packet recording)
|
|
17
|
+
*/
|
|
18
|
+
localOnly?: boolean;
|
|
13
19
|
};
|
|
14
20
|
export type MountOptions = {
|
|
15
21
|
/**
|
package/dist/mount.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,WAAW,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG9C;;;;GAIG;AACH,wBAAsB,KAAK,CACzB,IAAI,EAAE,SAAS,EACf,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,WAAW,CAAC,CA+FtB;AAED,MAAM,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,WAAW,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG9C;;;;GAIG;AACH,wBAAsB,KAAK,CACzB,IAAI,EAAE,SAAS,EACf,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,WAAW,CAAC,CA+FtB;AAED,MAAM,MAAM,WAAW,GAAG,CACtB;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GACrB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAAE,CACvD,GAAG;IACF;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;IAEnB;;OAEG;IACH,OAAO,CAAC,EAAE,GAAG,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,WAAW,CAAC;IAEnB,OAAO,CAAC,EAAE,GAAG,CAAC;IAEd;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,GAAG,CAAC;CACV,CAAC"}
|
package/dist/sim.d.ts
CHANGED
|
@@ -85,11 +85,16 @@ export declare class Sim {
|
|
|
85
85
|
* Snapshot the current game state into a byte array
|
|
86
86
|
*/
|
|
87
87
|
snapshot(): Uint8Array<ArrayBuffer>;
|
|
88
|
+
/**
|
|
89
|
+
* Packet buffer size (2MB) for network session recording
|
|
90
|
+
*/
|
|
91
|
+
static readonly NETWORK_MAX_PACKET_BYTES: number;
|
|
88
92
|
/**
|
|
89
93
|
* Start recording the simulation at the current frame
|
|
90
|
-
* @param maxEvents Maximum number of events to record
|
|
94
|
+
* @param maxEvents Maximum number of events to record
|
|
95
|
+
* @param maxPacketBytes Maximum packet buffer size (0 for local-only, 2MB default for network)
|
|
91
96
|
*/
|
|
92
|
-
record(maxEvents
|
|
97
|
+
record(maxEvents: number, maxPacketBytes: number): void;
|
|
93
98
|
/**
|
|
94
99
|
* Get a recording of the current tape to linear memory
|
|
95
100
|
*/
|
package/dist/sim.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim.d.ts","sourceRoot":"","sources":["../src/sim.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,GAAG,EAER,KAAK,WAAW,EAIhB,WAAW,EACX,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAmB5B,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,SAAS,EAAE,WAAW,CAAC;IACvB;;OAEG;IACH,WAAW,EAAE,aAAa,CAAC;IAC3B;;OAEG;IACH,eAAe,EAAE,eAAe,CAAC;IACjC;;;;OAIG;IACH,SAAS,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACzC;;OAEG;IACH,UAAU,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;IACzC;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAC5B,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,aAAa,KACf,IAAI,CAAC;AAEV,MAAM,MAAM,WAAW,GAAG,MAAM;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAAC;CAC1D,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,CAC1B,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,MAAM,KACT,IAAI,CAAC;AAEV;;;;;;;GAOG;AACH,qBAAa,GAAG;;IACd,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IAMX;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAElB;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;gBAGtC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,WAAW,CAAC,MAAM,EAC1B,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,WAAW,CAAA;KAAE;IAcpC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAQzB;;;OAGG;IACH,IAAI,IAAI,IAAI;IAIZ;;;;;OAKG;IACH,YAAY,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI;IAK/B,KAAK;IAIL,OAAO;IAIP,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,QAAQ;IAQR;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO;IAkBvC;;OAEG;IACH,QAAQ,IAAI,UAAU,CAAC,WAAW,CAAC;IAqBnC
|
|
1
|
+
{"version":3,"file":"sim.d.ts","sourceRoot":"","sources":["../src/sim.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bloopjs/bloop",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.60",
|
|
4
4
|
"author": "Neil Sarkar",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"@types/bun": "latest"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@bloopjs/engine": "0.0.
|
|
38
|
+
"@bloopjs/engine": "0.0.60"
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
41
41
|
"typescript": "^5"
|
package/src/mount.ts
CHANGED
|
@@ -17,7 +17,7 @@ export async function mount(
|
|
|
17
17
|
): Promise<MountResult> {
|
|
18
18
|
const wasmUrl = options?.wasmUrl ?? opts.wasmUrl ?? DEFAULT_WASM_URL;
|
|
19
19
|
const startRecording = options?.startRecording ?? opts.startRecording ?? true;
|
|
20
|
-
const maxEvents =
|
|
20
|
+
const { maxEvents, maxPacketBytes } = calculateTapeConfig(options?.tape);
|
|
21
21
|
|
|
22
22
|
// https://github.com/oven-sh/bun/issues/12434
|
|
23
23
|
const bytes = await fetch(wasmUrl)
|
|
@@ -29,7 +29,7 @@ export async function mount(
|
|
|
29
29
|
|
|
30
30
|
// 1mb to 64mb
|
|
31
31
|
// use bun check:wasm to find initial memory page size
|
|
32
|
-
const memory = new WebAssembly.Memory({ initial:
|
|
32
|
+
const memory = new WebAssembly.Memory({ initial: 310, maximum: 1000 });
|
|
33
33
|
|
|
34
34
|
// Create sim early so we can reference it in callbacks
|
|
35
35
|
let sim: Sim;
|
|
@@ -100,7 +100,7 @@ export async function mount(
|
|
|
100
100
|
});
|
|
101
101
|
|
|
102
102
|
if (startRecording) {
|
|
103
|
-
sim.record(maxEvents);
|
|
103
|
+
sim.record(maxEvents, maxPacketBytes);
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
opts.hooks.setBuffer(memory.buffer);
|
|
@@ -111,9 +111,16 @@ export async function mount(
|
|
|
111
111
|
};
|
|
112
112
|
}
|
|
113
113
|
|
|
114
|
-
export type TapeOptions =
|
|
114
|
+
export type TapeOptions = (
|
|
115
115
|
| { maxEvents: number }
|
|
116
|
-
| { duration: number; averageEventsPerFrame?: number }
|
|
116
|
+
| { duration: number; averageEventsPerFrame?: number }
|
|
117
|
+
) & {
|
|
118
|
+
/**
|
|
119
|
+
* Set to true for local-only recording (no network packet buffer).
|
|
120
|
+
* Default: false (allocates 2MB for network packet recording)
|
|
121
|
+
*/
|
|
122
|
+
localOnly?: boolean;
|
|
123
|
+
};
|
|
117
124
|
|
|
118
125
|
export type MountOptions = {
|
|
119
126
|
/**
|
|
@@ -149,15 +156,25 @@ export type MountResult = {
|
|
|
149
156
|
sim: Sim;
|
|
150
157
|
};
|
|
151
158
|
|
|
152
|
-
function
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
159
|
+
function calculateTapeConfig(tape?: TapeOptions): {
|
|
160
|
+
maxEvents: number;
|
|
161
|
+
maxPacketBytes: number;
|
|
162
|
+
} {
|
|
163
|
+
let maxEvents: number;
|
|
164
|
+
|
|
165
|
+
if (!tape) {
|
|
166
|
+
maxEvents = 1024; // default
|
|
167
|
+
} else if ("maxEvents" in tape) {
|
|
168
|
+
maxEvents = tape.maxEvents;
|
|
169
|
+
} else {
|
|
170
|
+
// duration-based: frames * average events per frame
|
|
171
|
+
// At 60fps, duration seconds = duration * 60 frames
|
|
172
|
+
const avgEvents = tape.averageEventsPerFrame ?? 2;
|
|
173
|
+
maxEvents = Math.ceil(tape.duration * 60 * avgEvents);
|
|
157
174
|
}
|
|
158
175
|
|
|
159
|
-
//
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
return
|
|
176
|
+
// Default to network mode (2MB), localOnly mode uses 0 bytes
|
|
177
|
+
const maxPacketBytes = tape?.localOnly ? 0 : Sim.NETWORK_MAX_PACKET_BYTES;
|
|
178
|
+
|
|
179
|
+
return { maxEvents, maxPacketBytes };
|
|
163
180
|
}
|
package/src/sim.ts
CHANGED
|
@@ -211,14 +211,20 @@ export class Sim {
|
|
|
211
211
|
return copy;
|
|
212
212
|
}
|
|
213
213
|
|
|
214
|
+
/**
|
|
215
|
+
* Packet buffer size (2MB) for network session recording
|
|
216
|
+
*/
|
|
217
|
+
static readonly NETWORK_MAX_PACKET_BYTES = 2 * 1024 * 1024;
|
|
218
|
+
|
|
214
219
|
/**
|
|
215
220
|
* Start recording the simulation at the current frame
|
|
216
|
-
* @param maxEvents Maximum number of events to record
|
|
221
|
+
* @param maxEvents Maximum number of events to record
|
|
222
|
+
* @param maxPacketBytes Maximum packet buffer size (0 for local-only, 2MB default for network)
|
|
217
223
|
*/
|
|
218
|
-
record(maxEvents: number
|
|
224
|
+
record(maxEvents: number, maxPacketBytes: number) {
|
|
219
225
|
const serializer = this.#serialize ? this.#serialize() : null;
|
|
220
226
|
const size = serializer ? serializer.size : 0;
|
|
221
|
-
const result = this.wasm.start_recording(size, maxEvents);
|
|
227
|
+
const result = this.wasm.start_recording(size, maxEvents, maxPacketBytes);
|
|
222
228
|
if (result !== 0) {
|
|
223
229
|
throw new Error(`failed to start recording, error code=${result}`);
|
|
224
230
|
}
|