@namzu/sdk 45.1.0 → 46.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +111 -0
- package/dist/authorization/gate.d.ts +5 -2
- package/dist/authorization/gate.d.ts.map +1 -1
- package/dist/authorization/gate.js +25 -4
- package/dist/authorization/gate.js.map +1 -1
- package/dist/authorization/rules.d.ts.map +1 -1
- package/dist/authorization/rules.js +19 -0
- package/dist/authorization/rules.js.map +1 -1
- package/dist/authorization/shell-lexer.d.ts +24 -0
- package/dist/authorization/shell-lexer.d.ts.map +1 -1
- package/dist/authorization/shell-lexer.js +69 -51
- package/dist/authorization/shell-lexer.js.map +1 -1
- package/dist/pricing/catalogue.generated.d.ts.map +1 -1
- package/dist/pricing/catalogue.generated.js +28 -4
- package/dist/pricing/catalogue.generated.js.map +1 -1
- package/dist/public-runtime.d.ts +3 -3
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +4 -2
- package/dist/public-runtime.js.map +1 -1
- package/dist/public-tools.d.ts +3 -2
- package/dist/public-tools.d.ts.map +1 -1
- package/dist/public-tools.js +5 -2
- package/dist/public-tools.js.map +1 -1
- package/dist/public-types.d.ts +3 -3
- package/dist/public-types.d.ts.map +1 -1
- package/dist/registry/tool/callable.d.ts +22 -0
- package/dist/registry/tool/callable.d.ts.map +1 -0
- package/dist/registry/tool/callable.js +29 -0
- package/dist/registry/tool/callable.js.map +1 -0
- package/dist/registry/tool/execute.d.ts.map +1 -1
- package/dist/registry/tool/execute.js +8 -1
- package/dist/registry/tool/execute.js.map +1 -1
- package/dist/runtime/query/executor/tool-call-admission.d.ts +37 -11
- package/dist/runtime/query/executor/tool-call-admission.d.ts.map +1 -1
- package/dist/runtime/query/executor/tool-call-admission.js +38 -12
- package/dist/runtime/query/executor/tool-call-admission.js.map +1 -1
- package/dist/runtime/query/executor.d.ts +4 -2
- package/dist/runtime/query/executor.d.ts.map +1 -1
- package/dist/runtime/query/executor.js +18 -5
- package/dist/runtime/query/executor.js.map +1 -1
- package/dist/runtime/query/review-policy.d.ts +43 -0
- package/dist/runtime/query/review-policy.d.ts.map +1 -1
- package/dist/runtime/query/review-policy.js +59 -16
- package/dist/runtime/query/review-policy.js.map +1 -1
- package/dist/skills/registry.d.ts +6 -0
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +1 -0
- package/dist/skills/registry.js.map +1 -1
- package/dist/tools/builtins/computer-use-coordinates.d.ts +65 -0
- package/dist/tools/builtins/computer-use-coordinates.d.ts.map +1 -0
- package/dist/tools/builtins/computer-use-coordinates.js +123 -0
- package/dist/tools/builtins/computer-use-coordinates.js.map +1 -0
- package/dist/tools/builtins/computer-use-image.d.ts +77 -0
- package/dist/tools/builtins/computer-use-image.d.ts.map +1 -0
- package/dist/tools/builtins/computer-use-image.js +223 -0
- package/dist/tools/builtins/computer-use-image.js.map +1 -0
- package/dist/tools/builtins/computer-use.d.ts +519 -14
- package/dist/tools/builtins/computer-use.d.ts.map +1 -1
- package/dist/tools/builtins/computer-use.js +1188 -183
- package/dist/tools/builtins/computer-use.js.map +1 -1
- package/dist/tools/builtins/index.d.ts +2 -1
- package/dist/tools/builtins/index.d.ts.map +1 -1
- package/dist/tools/builtins/index.js +1 -1
- package/dist/tools/builtins/index.js.map +1 -1
- package/dist/tools/builtins/skill.d.ts +74 -0
- package/dist/tools/builtins/skill.d.ts.map +1 -1
- package/dist/tools/builtins/skill.js +214 -174
- package/dist/tools/builtins/skill.js.map +1 -1
- package/dist/tools/defineTool.d.ts +2 -0
- package/dist/tools/defineTool.d.ts.map +1 -1
- package/dist/tools/defineTool.js +7 -0
- package/dist/tools/defineTool.js.map +1 -1
- package/dist/tools/schedules/present.d.ts.map +1 -1
- package/dist/tools/schedules/present.js +2 -0
- package/dist/tools/schedules/present.js.map +1 -1
- package/dist/tools/schedules/schedule-tool.d.ts +6 -5
- package/dist/tools/schedules/schedule-tool.d.ts.map +1 -1
- package/dist/tools/schedules/schedule-tool.js +121 -30
- package/dist/tools/schedules/schedule-tool.js.map +1 -1
- package/dist/tools/schedules/types.d.ts +69 -1
- package/dist/tools/schedules/types.d.ts.map +1 -1
- package/dist/types/authorization/index.d.ts +21 -0
- package/dist/types/authorization/index.d.ts.map +1 -1
- package/dist/types/authorization/index.js +5 -0
- package/dist/types/authorization/index.js.map +1 -1
- package/dist/types/computer-use/index.d.ts +176 -0
- package/dist/types/computer-use/index.d.ts.map +1 -1
- package/dist/types/computer-use/index.js.map +1 -1
- package/dist/types/tool/index.d.ts +19 -0
- package/dist/types/tool/index.d.ts.map +1 -1
- package/dist/types/tool/index.js.map +1 -1
- package/package.json +3 -1
- package/src/authorization/gate.ts +25 -4
- package/src/authorization/rules.ts +18 -0
- package/src/authorization/shell-lexer.ts +73 -45
- package/src/pricing/catalogue.generated.ts +28 -4
- package/src/pricing/rates.source.json +27 -6
- package/src/public-runtime.ts +16 -2
- package/src/public-tools.ts +19 -1
- package/src/public-types.ts +5 -0
- package/src/registry/tool/callable.ts +37 -0
- package/src/registry/tool/execute.ts +8 -1
- package/src/runtime/query/executor/tool-call-admission.ts +60 -16
- package/src/runtime/query/executor.ts +19 -4
- package/src/runtime/query/review-policy.ts +103 -15
- package/src/skills/registry.ts +8 -0
- package/src/tools/builtins/computer-use-coordinates.ts +144 -0
- package/src/tools/builtins/computer-use-image.ts +278 -0
- package/src/tools/builtins/computer-use.ts +1485 -191
- package/src/tools/builtins/index.ts +7 -1
- package/src/tools/builtins/skill.ts +304 -174
- package/src/tools/defineTool.ts +10 -0
- package/src/tools/schedules/present.ts +2 -0
- package/src/tools/schedules/schedule-tool.ts +139 -33
- package/src/tools/schedules/types.ts +69 -1
- package/src/types/authorization/index.ts +21 -0
- package/src/types/computer-use/index.ts +202 -0
- package/src/types/tool/index.ts +19 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Screenshot sizing for `computer_use`.
|
|
3
|
+
*
|
|
4
|
+
* A model sees a screenshot at some size and answers with coordinates in that
|
|
5
|
+
* size. If the host sends a native 3440x1440 capture, the provider shrinks it
|
|
6
|
+
* before the model looks (or, for some computer-use tool results, rejects
|
|
7
|
+
* it), and every coordinate the model returns is in a space the host never
|
|
8
|
+
* observed: clicks land systematically off target. So the tool shrinks each
|
|
9
|
+
* capture itself, to the largest size the model takes without a further
|
|
10
|
+
* resize, remembers that size, and maps coordinates back.
|
|
11
|
+
*
|
|
12
|
+
* The size rule is the vision encoder's published reference implementation
|
|
13
|
+
* (`resizedSize`), ported line for line — it is a policy, not an image
|
|
14
|
+
* operation. The pixels are
|
|
15
|
+
* decoded, resampled and encoded by maintained packages: `fast-png` (PNG
|
|
16
|
+
* codec) and `pica` (Lanczos-3 resampling, pure JS with a bundled WASM
|
|
17
|
+
* kernel). Neither needs a native build, and both load only when a capture
|
|
18
|
+
* actually has to change size.
|
|
19
|
+
*/
|
|
20
|
+
/** Patch edge of the vision encoder: an image costs ⌈w/28⌉ × ⌈h/28⌉ visual tokens. */
|
|
21
|
+
const PATCH_PX = 28;
|
|
22
|
+
/**
|
|
23
|
+
* Every current vision model takes this without resizing it: the standard
|
|
24
|
+
* tier's limits exactly, and well inside the `detail: "high"` budget of the
|
|
25
|
+
* Responses wire (2048 px, 2 500 32-pixel patches). The default.
|
|
26
|
+
*/
|
|
27
|
+
export const STANDARD_SCREENSHOT_LIMITS = Object.freeze({
|
|
28
|
+
maxLongEdge: 1568,
|
|
29
|
+
maxTiles: 1568,
|
|
30
|
+
});
|
|
31
|
+
/**
|
|
32
|
+
* The high-resolution tier some newer models accept. Use it only when every
|
|
33
|
+
* model the session can reach is on that tier: a standard-tier model rejects
|
|
34
|
+
* such a screenshot in a tool result, the Responses wire's `high` detail
|
|
35
|
+
* shrinks anything over 2048 px, and a request carrying more than 20 images
|
|
36
|
+
* caps every image at 2000 px.
|
|
37
|
+
*/
|
|
38
|
+
export const HIGH_RES_SCREENSHOT_LIMITS = Object.freeze({
|
|
39
|
+
maxLongEdge: 2576,
|
|
40
|
+
maxTiles: 4784,
|
|
41
|
+
});
|
|
42
|
+
function tiles(width, height) {
|
|
43
|
+
return Math.ceil(width / PATCH_PX) * Math.ceil(height / PATCH_PX);
|
|
44
|
+
}
|
|
45
|
+
/** Python's `round()`: exact .5 ties go to the even neighbour, as the live API does. */
|
|
46
|
+
function roundTiesToEven(value) {
|
|
47
|
+
const floor = Math.floor(value);
|
|
48
|
+
if (value - floor !== 0.5)
|
|
49
|
+
return Math.round(value);
|
|
50
|
+
return floor % 2 === 0 ? floor : floor + 1;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The largest aspect-preserving size within `limits`; the input unchanged
|
|
54
|
+
* when it already fits. Never larger than the input.
|
|
55
|
+
*/
|
|
56
|
+
export function screenshotTargetSize(width, height, limits = STANDARD_SCREENSHOT_LIMITS) {
|
|
57
|
+
if (!Number.isSafeInteger(width) || !Number.isSafeInteger(height) || width < 1 || height < 1)
|
|
58
|
+
throw new RangeError(`screenshot size must be positive integers, got ${width}x${height}`);
|
|
59
|
+
const fits = (w, h) => Math.ceil(w / PATCH_PX) * PATCH_PX <= limits.maxLongEdge &&
|
|
60
|
+
Math.ceil(h / PATCH_PX) * PATCH_PX <= limits.maxLongEdge &&
|
|
61
|
+
tiles(w, h) <= limits.maxTiles;
|
|
62
|
+
if (fits(width, height))
|
|
63
|
+
return { width, height };
|
|
64
|
+
if (height > width) {
|
|
65
|
+
const transposed = screenshotTargetSize(height, width, limits);
|
|
66
|
+
return { width: transposed.height, height: transposed.width };
|
|
67
|
+
}
|
|
68
|
+
const aspect = width / height;
|
|
69
|
+
let lo = 1; // always fits
|
|
70
|
+
let hi = width; // never fits
|
|
71
|
+
while (lo + 1 < hi) {
|
|
72
|
+
const mid = Math.floor((lo + hi) / 2);
|
|
73
|
+
if (fits(mid, Math.max(roundTiesToEven(mid / aspect), 1)))
|
|
74
|
+
lo = mid;
|
|
75
|
+
else
|
|
76
|
+
hi = mid;
|
|
77
|
+
}
|
|
78
|
+
return { width: lo, height: Math.max(roundTiesToEven(lo / aspect), 1) };
|
|
79
|
+
}
|
|
80
|
+
/** Width and height from a PNG's IHDR chunk, without decoding it. */
|
|
81
|
+
export function pngSize(data) {
|
|
82
|
+
const signature = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];
|
|
83
|
+
if (data.length < 24 || signature.some((byte, index) => data[index] !== byte))
|
|
84
|
+
throw new Error('computer_use: the host returned a screenshot that is not a PNG');
|
|
85
|
+
const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
86
|
+
return { width: view.getUint32(16), height: view.getUint32(20) };
|
|
87
|
+
}
|
|
88
|
+
let codec;
|
|
89
|
+
function loadCodec() {
|
|
90
|
+
codec ??= Promise.all([import('fast-png'), import('pica')]).then(([png, picaModule]) => ({
|
|
91
|
+
png,
|
|
92
|
+
// No `ww`/`cib`: those are browser features (Web Workers,
|
|
93
|
+
// createImageBitmap). In Node pica resizes on the calling thread.
|
|
94
|
+
resizer: new picaModule.Pica({ features: ['js', 'wasm'] }),
|
|
95
|
+
}));
|
|
96
|
+
return codec;
|
|
97
|
+
}
|
|
98
|
+
/** For each PNG channel count: where red, green, blue and alpha come from (-1: opaque). */
|
|
99
|
+
const CHANNEL_SOURCES = {
|
|
100
|
+
1: [0, 0, 0, -1],
|
|
101
|
+
2: [0, 0, 0, 1],
|
|
102
|
+
3: [0, 1, 2, -1],
|
|
103
|
+
4: [0, 1, 2, 3],
|
|
104
|
+
};
|
|
105
|
+
async function decodeRgba(data) {
|
|
106
|
+
const { png } = await loadCodec();
|
|
107
|
+
const decoded = png.decode(data);
|
|
108
|
+
const { width, height } = decoded;
|
|
109
|
+
let source = decoded.data;
|
|
110
|
+
let channels = decoded.channels;
|
|
111
|
+
let depth = decoded.depth;
|
|
112
|
+
if (decoded.palette) {
|
|
113
|
+
source = png.convertIndexedToRgb(decoded);
|
|
114
|
+
channels = decoded.palette[0]?.length ?? 3;
|
|
115
|
+
depth = 8;
|
|
116
|
+
}
|
|
117
|
+
const sources = CHANNEL_SOURCES[channels];
|
|
118
|
+
if ((depth !== 8 && depth !== 16) || !sources)
|
|
119
|
+
throw new Error(`computer_use: cannot read a ${depth}-bit, ${channels}-channel PNG screenshot; hosts should capture 8-bit RGB or RGBA`);
|
|
120
|
+
// The common capture — 8-bit RGBA — is already the layout the resampler takes.
|
|
121
|
+
if (depth === 8 && channels === 4 && !decoded.palette) {
|
|
122
|
+
const bytes = decoded.data;
|
|
123
|
+
return { width, height, data: new Uint8Array(bytes.buffer, bytes.byteOffset, bytes.byteLength) };
|
|
124
|
+
}
|
|
125
|
+
// Everything else becomes 8-bit RGBA; 16-bit samples keep their high byte.
|
|
126
|
+
// No per-pixel branches: this runs once per pixel of a whole display.
|
|
127
|
+
const shift = depth === 16 ? 8 : 0;
|
|
128
|
+
const [r, g, b, a] = sources;
|
|
129
|
+
const pixels = width * height;
|
|
130
|
+
const rgba = new Uint8Array(pixels * 4);
|
|
131
|
+
if (a < 0)
|
|
132
|
+
rgba.fill(255);
|
|
133
|
+
for (let i = 0, s = 0, d = 0; i < pixels; i += 1, s += channels, d += 4) {
|
|
134
|
+
rgba[d] = source[s + r] >> shift;
|
|
135
|
+
rgba[d + 1] = source[s + g] >> shift;
|
|
136
|
+
rgba[d + 2] = source[s + b] >> shift;
|
|
137
|
+
}
|
|
138
|
+
if (a >= 0)
|
|
139
|
+
for (let i = 0, s = a, d = 3; i < pixels; i += 1, s += channels, d += 4)
|
|
140
|
+
rgba[d] = source[s] >> shift;
|
|
141
|
+
return { width, height, data: rgba };
|
|
142
|
+
}
|
|
143
|
+
async function encodePng(image) {
|
|
144
|
+
const { png } = await loadCodec();
|
|
145
|
+
const { width, height, data } = image;
|
|
146
|
+
// An opaque capture (every desktop screenshot) is sent as RGB: a quarter
|
|
147
|
+
// fewer bytes in every request that carries it.
|
|
148
|
+
let opaque = true;
|
|
149
|
+
for (let i = 3; i < data.length; i += 4) {
|
|
150
|
+
if (data[i] !== 255) {
|
|
151
|
+
opaque = false;
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (!opaque)
|
|
156
|
+
return Buffer.from(png.encode({ width, height, data, channels: 4, depth: 8 }));
|
|
157
|
+
const rgb = new Uint8Array(width * height * 3);
|
|
158
|
+
for (let s = 0, d = 0; s < data.length; s += 4, d += 3) {
|
|
159
|
+
rgb[d] = data[s];
|
|
160
|
+
rgb[d + 1] = data[s + 1];
|
|
161
|
+
rgb[d + 2] = data[s + 2];
|
|
162
|
+
}
|
|
163
|
+
return Buffer.from(png.encode({ width, height, data: rgb, channels: 3, depth: 8 }));
|
|
164
|
+
}
|
|
165
|
+
async function resizeRgba(image, target) {
|
|
166
|
+
if (target.width === image.width && target.height === image.height)
|
|
167
|
+
return image;
|
|
168
|
+
const { resizer } = await loadCodec();
|
|
169
|
+
const data = await resizer.resizeBuffer({
|
|
170
|
+
src: image.data,
|
|
171
|
+
width: image.width,
|
|
172
|
+
height: image.height,
|
|
173
|
+
toWidth: target.width,
|
|
174
|
+
toHeight: target.height,
|
|
175
|
+
filter: 'lanczos3',
|
|
176
|
+
});
|
|
177
|
+
return { width: target.width, height: target.height, data };
|
|
178
|
+
}
|
|
179
|
+
function cropRgba(image, rect) {
|
|
180
|
+
const data = new Uint8Array(rect.width * rect.height * 4);
|
|
181
|
+
for (let row = 0; row < rect.height; row += 1) {
|
|
182
|
+
const from = ((rect.y + row) * image.width + rect.x) * 4;
|
|
183
|
+
data.set(image.data.subarray(from, from + rect.width * 4), row * rect.width * 4);
|
|
184
|
+
}
|
|
185
|
+
return { width: rect.width, height: rect.height, data };
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Fit a PNG capture to `limits`. A capture that already fits is returned
|
|
189
|
+
* byte for byte, without being decoded.
|
|
190
|
+
*/
|
|
191
|
+
export async function fitPng(data, limits) {
|
|
192
|
+
const source = pngSize(data);
|
|
193
|
+
const target = screenshotTargetSize(source.width, source.height, limits);
|
|
194
|
+
if (target.width === source.width && target.height === source.height)
|
|
195
|
+
return { data, ...target, sourceWidth: source.width, sourceHeight: source.height };
|
|
196
|
+
const resized = await resizeRgba(await decodeRgba(data), target);
|
|
197
|
+
return {
|
|
198
|
+
data: await encodePng(resized),
|
|
199
|
+
width: resized.width,
|
|
200
|
+
height: resized.height,
|
|
201
|
+
sourceWidth: source.width,
|
|
202
|
+
sourceHeight: source.height,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Cut `rect` (pixels of `data`, already clamped to it) out of a PNG and fit
|
|
207
|
+
* the piece to `limits`. Never enlarges: a small region stays at its native
|
|
208
|
+
* size, which is still more detail than the downscaled screenshot showed.
|
|
209
|
+
*/
|
|
210
|
+
export async function cropAndFitPng(data, rect, limits) {
|
|
211
|
+
const decoded = await decodeRgba(data);
|
|
212
|
+
const piece = cropRgba(decoded, rect);
|
|
213
|
+
const target = screenshotTargetSize(piece.width, piece.height, limits);
|
|
214
|
+
const resized = await resizeRgba(piece, target);
|
|
215
|
+
return {
|
|
216
|
+
data: await encodePng(resized),
|
|
217
|
+
width: resized.width,
|
|
218
|
+
height: resized.height,
|
|
219
|
+
sourceWidth: piece.width,
|
|
220
|
+
sourceHeight: piece.height,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=computer-use-image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computer-use-image.js","sourceRoot":"","sources":["../../../src/tools/builtins/computer-use-image.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,sFAAsF;AACtF,MAAM,QAAQ,GAAG,EAAE,CAAA;AAWnB;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAqB,MAAM,CAAC,MAAM,CAAC;IACzE,WAAW,EAAE,IAAI;IACjB,QAAQ,EAAE,IAAI;CACd,CAAC,CAAA;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAqB,MAAM,CAAC,MAAM,CAAC;IACzE,WAAW,EAAE,IAAI;IACjB,QAAQ,EAAE,IAAI;CACd,CAAC,CAAA;AAOF,SAAS,KAAK,CAAC,KAAa,EAAE,MAAc;IAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAA;AAClE,CAAC;AAED,wFAAwF;AACxF,SAAS,eAAe,CAAC,KAAa;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC/B,IAAI,KAAK,GAAG,KAAK,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACnD,OAAO,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAA;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CACnC,KAAa,EACb,MAAc,EACd,SAA2B,0BAA0B;IAErD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC;QAC3F,MAAM,IAAI,UAAU,CAAC,kDAAkD,KAAK,IAAI,MAAM,EAAE,CAAC,CAAA;IAC1F,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,CAAS,EAAW,EAAE,CAC9C,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,QAAQ,IAAI,MAAM,CAAC,WAAW;QACxD,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,QAAQ,IAAI,MAAM,CAAC,WAAW;QACxD,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAA;IAC/B,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;IACjD,IAAI,MAAM,GAAG,KAAK,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;QAC9D,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,KAAK,EAAE,CAAA;IAC9D,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;IAC7B,IAAI,EAAE,GAAG,CAAC,CAAA,CAAC,cAAc;IACzB,IAAI,EAAE,GAAG,KAAK,CAAA,CAAC,aAAa;IAC5B,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QACrC,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAAE,EAAE,GAAG,GAAG,CAAA;;YAC9D,EAAE,GAAG,GAAG,CAAA;IACd,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;AACxE,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,OAAO,CAAC,IAAgB;IACvC,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IAClE,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;QAC5E,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAA;IAClF,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;IACxE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAA;AACjE,CAAC;AAYD,IAAI,KAAuF,CAAA;AAE3F,SAAS,SAAS;IACjB,KAAK,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;QACxF,GAAG;QACH,0DAA0D;QAC1D,kEAAkE;QAClE,OAAO,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;KAC1D,CAAC,CAAC,CAAA;IACH,OAAO,KAAK,CAAA;AACb,CAAC;AAED,2FAA2F;AAC3F,MAAM,eAAe,GAAwE;IAC5F,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACf,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CACf,CAAA;AAED,KAAK,UAAU,UAAU,CAAC,IAAgB;IACzC,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,SAAS,EAAE,CAAA;IACjC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAChC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IACjC,IAAI,MAAM,GAAsB,OAAO,CAAC,IAAI,CAAA;IAC5C,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;IAC/B,IAAI,KAAK,GAAW,OAAO,CAAC,KAAK,CAAA;IACjC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;QACzC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAA;QAC1C,KAAK,GAAG,CAAC,CAAA;IACV,CAAC;IACD,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;IACzC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC,IAAI,CAAC,OAAO;QAC5C,MAAM,IAAI,KAAK,CACd,+BAA+B,KAAK,SAAS,QAAQ,iEAAiE,CACtH,CAAA;IACF,+EAA+E;IAC/E,IAAI,KAAK,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAA;QAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,CAAA;IACjG,CAAC;IACD,2EAA2E;IAC3E,sEAAsE;IACtE,MAAM,KAAK,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAClC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAA;IAC5B,MAAM,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;IAC7B,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACvC,IAAI,CAAC,GAAG,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzE,IAAI,CAAC,CAAC,CAAC,GAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAY,IAAI,KAAK,CAAA;QAC5C,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAY,IAAI,KAAK,CAAA;QAChD,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAY,IAAI,KAAK,CAAA;IACjD,CAAC;IACD,IAAI,CAAC,IAAI,CAAC;QACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,IAAI,CAAC;YACtE,IAAI,CAAC,CAAC,CAAC,GAAI,MAAM,CAAC,CAAC,CAAY,IAAI,KAAK,CAAA;IAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;AACrC,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,KAAgB;IACxC,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,SAAS,EAAE,CAAA;IACjC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;IACrC,yEAAyE;IACzE,gDAAgD;IAChD,IAAI,MAAM,GAAG,IAAI,CAAA;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,MAAM,GAAG,KAAK,CAAA;YACd,MAAK;QACN,CAAC;IACF,CAAC;IACD,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3F,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,CAAA;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAW,CAAA;QAC1B,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAW,CAAA;QAClC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAW,CAAA;IACnC,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AACpF,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,KAAgB,EAAE,MAAiB;IAC5D,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IAChF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,EAAE,CAAA;IACrC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC;QACvC,GAAG,EAAE,KAAK,CAAC,IAAI;QACf,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,MAAM,CAAC,KAAK;QACrB,QAAQ,EAAE,MAAM,CAAC,MAAM;QACvB,MAAM,EAAE,UAAU;KAClB,CAAC,CAAA;IACF,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAA;AAC5D,CAAC;AAED,SAAS,QAAQ,CAChB,KAAgB,EAChB,IAA6D;IAE7D,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACzD,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACxD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;IACjF,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAA;AACxD,CAAC;AAWD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAY,EAAE,MAAwB;IAClE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxE,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;QACnE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAAA;IACnF,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;IAChE,OAAO;QACN,IAAI,EAAE,MAAM,SAAS,CAAC,OAAO,CAAC;QAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW,EAAE,MAAM,CAAC,KAAK;QACzB,YAAY,EAAE,MAAM,CAAC,MAAM;KAC3B,CAAA;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,IAAY,EACZ,IAA6D,EAC7D,MAAwB;IAExB,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAA;IACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IACrC,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtE,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAC/C,OAAO;QACN,IAAI,EAAE,MAAM,SAAS,CAAC,OAAO,CAAC;QAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW,EAAE,KAAK,CAAC,KAAK;QACxB,YAAY,EAAE,KAAK,CAAC,MAAM;KAC1B,CAAA;AACF,CAAC"}
|