@helix3/helix-cli 0.1.20-helix3.399 → 0.1.21-helix3.402
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/README.md +10 -5
- package/dist/realizability.d.ts +6 -1
- package/dist/realizability.js +89 -23
- package/dist/realizability.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/visualQa/vehicleMath.js +23 -13
- package/dist/visualQa/vehicleMath.js.map +1 -1
- package/package.json +1 -1
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_abs.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_audio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_engine.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_expression.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_jbeam.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_materials.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/test_beamng_engine.cpython-312.pyc +0 -0
package/README.md
CHANGED
|
@@ -346,11 +346,16 @@ A published world ships only its **built bundle**, so there is nothing on the se
|
|
|
346
346
|
channel for exactly that reason.
|
|
347
347
|
- **Limit**: 128 MiB compressed, checked locally before anything is uploaded.
|
|
348
348
|
|
|
349
|
-
Before upload,
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
349
|
+
Before upload, multiplayer worlds that install modules are checked for server realizability. A
|
|
350
|
+
module with a `bank` reference must name a bank that is published with the declared checksum (bank
|
|
351
|
+
modules belong to the default `multiplayer` block; the manifest validator refuses one inside a room
|
|
352
|
+
type). A module without `bank` is inline: its rules are in the manifest, so there is nothing to
|
|
353
|
+
resolve. The modules of every program (the default block and each `multiplayer.roomTypes` entry)
|
|
354
|
+
must then fit the 100,000 tick-node ceiling at the number of players that program's room holds: 24
|
|
355
|
+
for a standard default block, a room type's own `maxPlayers` up to 24, and the declared `maxPlayers`
|
|
356
|
+
up to 64 with `capacityClass: "large"`, never fewer than 2. Fix the named module or bank when this
|
|
357
|
+
gate refuses a publish. For exceptional recovery only, `--skip-realizability-check` bypasses this
|
|
358
|
+
check; worlds without modules are unaffected.
|
|
354
359
|
|
|
355
360
|
The programmatic surface (`publishWorld`, `checkBundle`, `whoAmI`, …) is exported for other CLI
|
|
356
361
|
modules. Agent integrations should instruct or delegate to the `helix` commands above rather than
|
package/dist/realizability.d.ts
CHANGED
|
@@ -9,7 +9,12 @@ export type PublishedBank = {
|
|
|
9
9
|
};
|
|
10
10
|
export type RealizabilityDeps = {
|
|
11
11
|
resolveBank(ref: string): Promise<PublishedBank>;
|
|
12
|
-
|
|
12
|
+
/**
|
|
13
|
+
* `playerCap` is the number of players a room of the modules' program can hold, which is what
|
|
14
|
+
* every per-player budget term is charged at: 24 for a standard default block, a room type's own
|
|
15
|
+
* seats for a type, and up to 64 for a `capacityClass: "large"` program.
|
|
16
|
+
*/
|
|
17
|
+
validateBudgets(modules: ModuleDeclaration[], ceiling: number, playerCap: number): string[];
|
|
13
18
|
};
|
|
14
19
|
export type RealizabilityFailure = {
|
|
15
20
|
moduleId: string;
|
package/dist/realizability.js
CHANGED
|
@@ -93,6 +93,13 @@ function asModule(value) {
|
|
|
93
93
|
// and `sha256` — none of which is the published field. Guessing is strictly worse than failing
|
|
94
94
|
// here: if a near-miss field happens to exist, the gate passes on a digest nobody ever agreed on,
|
|
95
95
|
// which is the exact failure this gate exists to prevent.
|
|
96
|
+
// A module with no `bank` key is INLINE: its rules are in the manifest (helix-manifest refuses a
|
|
97
|
+
// module that has both, and refuses a bank ref inside a room type). A `bank` that is present but
|
|
98
|
+
// unreadable is still a malformed ref, never an inline module.
|
|
99
|
+
const INLINE = '<inline>';
|
|
100
|
+
function isInline(module) {
|
|
101
|
+
return module.bank === undefined || module.bank === null;
|
|
102
|
+
}
|
|
96
103
|
function checksumOf(value) {
|
|
97
104
|
if (!value || typeof value !== 'object')
|
|
98
105
|
return null;
|
|
@@ -124,13 +131,14 @@ function registryRealizabilityDeps(apiUrl) {
|
|
|
124
131
|
throw err;
|
|
125
132
|
}
|
|
126
133
|
},
|
|
127
|
-
validateBudgets(modules, ceiling) {
|
|
134
|
+
validateBudgets(modules, ceiling, playerCap) {
|
|
128
135
|
const contract = manifestContract;
|
|
129
136
|
const validator = contract.validateModuleBudgets ?? contract.validateMultiplayerBudgets;
|
|
130
137
|
if (typeof validator !== 'function') {
|
|
131
138
|
throw new Error('installed helix-manifest does not provide multiplayer budget validation');
|
|
132
139
|
}
|
|
133
|
-
|
|
140
|
+
// A helix-manifest from before large rooms takes two arguments and ignores the third.
|
|
141
|
+
const result = validator(modules, ceiling, playerCap);
|
|
134
142
|
if (Array.isArray(result))
|
|
135
143
|
return result.map(String);
|
|
136
144
|
if (result && typeof result === 'object' && Array.isArray(result.errors)) {
|
|
@@ -140,20 +148,77 @@ function registryRealizabilityDeps(apiUrl) {
|
|
|
140
148
|
},
|
|
141
149
|
};
|
|
142
150
|
}
|
|
151
|
+
// The seat caps the room server clamps a room to. Read from the installed helix-manifest so the gate
|
|
152
|
+
// charges what the validator charges; the literals cover a manifest package that predates the
|
|
153
|
+
// exports, and are the values those constants have.
|
|
154
|
+
function seatCap(name, fallback) {
|
|
155
|
+
const value = manifestContract[name];
|
|
156
|
+
return typeof value === 'number' && Number.isInteger(value) && value > 0 ? value : fallback;
|
|
157
|
+
}
|
|
158
|
+
function declaredMaxPlayers(value, fallback) {
|
|
159
|
+
return typeof value === 'number' && Number.isFinite(value) && value >= 1 ? Math.floor(value) : fallback;
|
|
160
|
+
}
|
|
161
|
+
// The room server never seats fewer than this (helix-colyseus-server tuning, MIN_MAX_CLIENTS), so a
|
|
162
|
+
// program that declares maxPlayers 1 still runs in a room of two.
|
|
163
|
+
const MIN_ROOM_SEATS = 2;
|
|
164
|
+
// Every program of the world that carries modules, with the number of players its room can hold.
|
|
165
|
+
// The default block is a standard room of 24 whatever the world's maxPlayers says, unless it
|
|
166
|
+
// declares `capacityClass: "large"`, which is a room of the declared maxPlayers up to 64. A room
|
|
167
|
+
// type is a room of its own: its own maxPlayers, clamped to 24, or to 64 when the type is large.
|
|
168
|
+
// These are helix-manifest's own numbers (`programPlayerCap`), raised to the server's floor of 2.
|
|
169
|
+
// Room-type modules are inline (helix-manifest refuses a bank ref there), so for a room type this
|
|
170
|
+
// is a budget check; a bank ref that reaches here anyway is resolved like any other.
|
|
171
|
+
function modulePrograms(manifest, multiplayer) {
|
|
172
|
+
const standard = seatCap('PLATFORM_MAX_PLAYERS_PER_ROOM', 24);
|
|
173
|
+
const large = seatCap('PLATFORM_MAX_PLAYERS_PER_LARGE_ROOM', 64);
|
|
174
|
+
const programs = [];
|
|
175
|
+
if (Array.isArray(multiplayer.modules)) {
|
|
176
|
+
programs.push({
|
|
177
|
+
label: '',
|
|
178
|
+
modules: multiplayer.modules,
|
|
179
|
+
playerCap: multiplayer.capacityClass === 'large'
|
|
180
|
+
? Math.max(MIN_ROOM_SEATS, Math.min(declaredMaxPlayers(manifest.maxPlayers, standard), large))
|
|
181
|
+
: standard,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
const roomTypes = multiplayer.roomTypes;
|
|
185
|
+
if (roomTypes && typeof roomTypes === 'object' && !Array.isArray(roomTypes)) {
|
|
186
|
+
for (const [name, raw] of Object.entries(roomTypes)) {
|
|
187
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw))
|
|
188
|
+
continue;
|
|
189
|
+
const type = raw;
|
|
190
|
+
if (!Array.isArray(type.modules))
|
|
191
|
+
continue;
|
|
192
|
+
// Absent, a room type's maxPlayers is 10 (helix-manifest, HelixRoomType).
|
|
193
|
+
const declared = declaredMaxPlayers(type.maxPlayers, 10);
|
|
194
|
+
programs.push({
|
|
195
|
+
label: `roomTypes.${name}: `,
|
|
196
|
+
modules: type.modules,
|
|
197
|
+
playerCap: Math.max(MIN_ROOM_SEATS, Math.min(declared, type.capacityClass === 'large' ? large : standard)),
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return programs;
|
|
202
|
+
}
|
|
143
203
|
async function checkRealizability(manifest, deps) {
|
|
144
204
|
if (!manifest || typeof manifest !== 'object')
|
|
145
205
|
return [];
|
|
146
206
|
const multiplayer = manifest.multiplayer;
|
|
147
207
|
if (!multiplayer || typeof multiplayer !== 'object' || Array.isArray(multiplayer))
|
|
148
208
|
return [];
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
209
|
+
// flat-v0 and pre-module multiplayer are deliberately unchanged: no program with modules, no work.
|
|
210
|
+
const programs = modulePrograms(manifest, multiplayer);
|
|
211
|
+
if (!programs.length)
|
|
212
|
+
return [];
|
|
152
213
|
const failures = [];
|
|
153
214
|
const resolved = new Map();
|
|
154
|
-
await Promise.all(modules.map(async (raw, index) => {
|
|
215
|
+
await Promise.all(programs.flatMap((program) => program.modules.map(async (raw, index) => {
|
|
155
216
|
const module = asModule(raw);
|
|
156
|
-
const id = moduleName(module, index);
|
|
217
|
+
const id = program.label + moduleName(module, index);
|
|
218
|
+
// An inline module carries its program in the manifest, so there is no bank for the server to
|
|
219
|
+
// resolve. Only its budget is checked, below.
|
|
220
|
+
if (isInline(module))
|
|
221
|
+
return;
|
|
157
222
|
const bank = parseBankRef(module.bank);
|
|
158
223
|
const shown = typeof module.bank === 'string' ? module.bank : JSON.stringify(module.bank);
|
|
159
224
|
if (!bank) {
|
|
@@ -173,29 +238,30 @@ async function checkRealizability(manifest, deps) {
|
|
|
173
238
|
catch (err) {
|
|
174
239
|
failures.push({ moduleId: id, bankRef: bank.ref, reason: err instanceof Error ? err.message : String(err) });
|
|
175
240
|
}
|
|
176
|
-
}));
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
241
|
+
})));
|
|
242
|
+
// Budgets are a property of one program in one room, so each program is checked on its own, at
|
|
243
|
+
// the number of players its room can hold.
|
|
244
|
+
for (const program of programs) {
|
|
245
|
+
const modules = program.modules;
|
|
246
|
+
const moduleId = modules.map((module, index) => program.label + moduleName(asModule(module), index)).join(', ');
|
|
247
|
+
const bankRef = modules.map((module) => (isInline(asModule(module)) ? INLINE : parseBankRef(asModule(module).bank)?.ref ?? '<malformed>')).join(', ');
|
|
248
|
+
try {
|
|
249
|
+
for (const reason of deps.validateBudgets(modules, exports.TICK_NODE_CEILING, program.playerCap)) {
|
|
250
|
+
failures.push({ moduleId, bankRef, reason });
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
catch (err) {
|
|
254
|
+
failures.push({ moduleId, bankRef, reason: err instanceof Error ? err.message : String(err) });
|
|
184
255
|
}
|
|
185
|
-
}
|
|
186
|
-
catch (err) {
|
|
187
|
-
failures.push({
|
|
188
|
-
moduleId: modules.map((module, index) => moduleName(asModule(module), index)).join(', '),
|
|
189
|
-
bankRef: modules.map((module) => parseBankRef(asModule(module).bank)?.ref ?? '<malformed>').join(', '),
|
|
190
|
-
reason: err instanceof Error ? err.message : String(err),
|
|
191
|
-
});
|
|
192
256
|
}
|
|
193
257
|
return failures;
|
|
194
258
|
}
|
|
195
259
|
function renderRealizabilityRefusal(failures) {
|
|
196
260
|
return [
|
|
197
261
|
'Refusing to publish: the server cannot realize this multiplayer world.',
|
|
198
|
-
...failures.map((f) =>
|
|
262
|
+
...failures.map((f) => (f.bankRef.split(', ').every((ref) => ref === INLINE)
|
|
263
|
+
? ` - module "${f.moduleId}" (inline): ${f.reason}`
|
|
264
|
+
: ` - module "${f.moduleId}", bank "${f.bankRef}": ${f.reason}`)),
|
|
199
265
|
'Publish the referenced bank (or correct its version/checksum and module budgets), then retry.',
|
|
200
266
|
'To bypass this safety gate intentionally, pass --skip-realizability-check.',
|
|
201
267
|
].join('\n');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realizability.js","sourceRoot":"","sources":["../src/realizability.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"realizability.js","sourceRoot":"","sources":["../src/realizability.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDA,oCAcC;AAuBD,gCAMC;AAID,8DAkCC;AA+DD,gDAsDC;AAED,gEASC;AAzQD,iFAAmE;AACnE,+BAA2C;AAE9B,QAAA,iBAAiB,GAAG,OAAO,CAAC;AA4BzC,mGAAmG;AACnG,kGAAkG;AAClG,+FAA+F;AAC/F,kGAAkG;AAClG,8FAA8F;AAC9F,uEAAuE;AACvE,8EAA8E;AAC9E,EAAE;AACF,uFAAuF;AACvF,kGAAkG;AAClG,iGAAiG;AACjG,6EAA6E;AAC7E,gGAAgG;AAChG,EAAE;AACF,kGAAkG;AAClG,iGAAiG;AACjG,6FAA6F;AAC7F,8FAA8F;AAC9F,0FAA0F;AAC1F,MAAM,QAAQ,GAAG,8FAA8F,CAAC;AAEhH,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAC7D,CAAC;AAED,SAAgB,YAAY,CAAC,KAAc;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5I,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7E,MAAM,IAAI,GAAG,KAAmB,CAAC;IACjC,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAChH,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACvE,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1E,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAChD,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;IAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACrI,CAAC;AAED,SAAS,UAAU,CAAC,MAAyB,EAAE,KAAa;IAC1D,OAAO,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,GAAG,CAAC;AACtF,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAA0B,CAAC,CAAC,CAAC,EAAE,CAAC;AACvG,CAAC;AAED,oGAAoG;AACpG,iGAAiG;AACjG,+FAA+F;AAC/F,kGAAkG;AAClG,0DAA0D;AAC1D,iGAAiG;AACjG,iGAAiG;AACjG,+DAA+D;AAC/D,MAAM,MAAM,GAAG,UAAU,CAAC;AAC1B,SAAS,QAAQ,CAAC,MAAyB;IACzC,OAAO,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC;AAC3D,CAAC;AAED,SAAgB,UAAU,CAAC,KAAc;IACvC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACrD,MAAM,IAAI,GAAG,KAAmB,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC;IACtC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE;QAAE,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC;IACzF,OAAO,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED,+FAA+F;AAC/F,mGAAmG;AACnG,SAAgB,yBAAyB,CAAC,MAAc;IACtD,MAAM,GAAG,GAAG,IAAI,cAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,OAAO;QACL,KAAK,CAAC,WAAW,CAAC,GAAG;YACnB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACnD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,WAAW,CAChC,KAAK,EACL,4BAA4B,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAC7G,CAAC;gBACF,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;gBAClC,IAAI,CAAC,QAAQ;oBAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;gBACnF,OAAO,EAAE,QAAQ,EAAE,CAAC;YACtB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,cAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;oBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBAC5F,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QACD,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS;YACzC,MAAM,QAAQ,GAAG,gBAA8B,CAAC;YAChD,MAAM,SAAS,GAAG,QAAQ,CAAC,qBAAqB,IAAI,QAAQ,CAAC,0BAA0B,CAAC;YACxF,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;YAC7F,CAAC;YACD,sFAAsF;YACtF,MAAM,MAAM,GAAI,SAA2F,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YACzI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAE,MAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzF,OAAS,MAAqB,CAAC,MAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAClE,CAAC;YACD,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACzE,CAAC;KACF,CAAC;AACJ,CAAC;AAED,qGAAqG;AACrG,8FAA8F;AAC9F,oDAAoD;AACpD,SAAS,OAAO,CAAC,IAA6E,EAAE,QAAgB;IAC9G,MAAM,KAAK,GAAI,gBAA+B,CAAC,IAAI,CAAC,CAAC;IACrD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC9F,CAAC;AASD,SAAS,kBAAkB,CAAC,KAAc,EAAE,QAAgB;IAC1D,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC1G,CAAC;AAED,oGAAoG;AACpG,kEAAkE;AAClE,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB,iGAAiG;AACjG,6FAA6F;AAC7F,iGAAiG;AACjG,iGAAiG;AACjG,kGAAkG;AAClG,kGAAkG;AAClG,qFAAqF;AACrF,SAAS,cAAc,CAAC,QAAoB,EAAE,WAAuB;IACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,OAAO,CAAC,qCAAqC,EAAE,EAAE,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,QAAQ,CAAC,IAAI,CAAC;YACZ,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B,SAAS,EAAE,WAAW,CAAC,aAAa,KAAK,OAAO;gBAC9C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC9F,CAAC,CAAC,QAAQ;SACb,CAAC,CAAC;IACL,CAAC;IACD,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;IACxC,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5E,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAuB,CAAC,EAAE,CAAC;YAClE,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;gBAAE,SAAS;YACpE,MAAM,IAAI,GAAG,GAAiB,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,SAAS;YAC3C,0EAA0E;YAC1E,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACzD,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,aAAa,IAAI,IAAI;gBAC5B,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;aAC3G,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAEM,KAAK,UAAU,kBAAkB,CACtC,QAAiB,EACjB,IAAuB;IAEvB,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzD,MAAM,WAAW,GAAI,QAAuB,CAAC,WAAW,CAAC;IACzD,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7F,mGAAmG;IACnG,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAsB,EAAE,WAAyB,CAAC,CAAC;IACnF,IAAI,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEhC,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkC,CAAC;IAC3D,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACvF,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACrD,8FAA8F;QAC9F,8CAA8C;QAC9C,IAAI,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO;QAC7B,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1F,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,EAAE,6IAA6I,EAAE,CAAC,CAAC;YACtN,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;gBACvD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC3C,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBAChC,OAAO,OAAO,CAAC;YACjB,CAAC,CAAC,EAAE,CAAC,CAAC;YACN,IAAI,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,+BAA+B,IAAI,CAAC,QAAQ,eAAe,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;YAC/I,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/G,CAAC;IACH,CAAC,CAAC,CAAC,CAAC,CAAC;IAEL,+FAA+F;IAC/F,2CAA2C;IAC3C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,OAA8B,CAAC;QACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChH,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtJ,IAAI,CAAC;YACH,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,yBAAiB,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBACzF,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAgB,0BAA0B,CAAC,QAAgC;IACzE,OAAO;QACL,wEAAwE;QACxE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC;YAC1E,CAAC,CAAC,eAAe,CAAC,CAAC,QAAQ,eAAe,CAAC,CAAC,MAAM,EAAE;YACpD,CAAC,CAAC,eAAe,CAAC,CAAC,QAAQ,YAAY,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACpE,+FAA+F;QAC/F,4EAA4E;KAC7E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|