screenci 0.0.34 → 0.0.37
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 +1 -2
- package/bin/screenci.js +8 -0
- package/dist/cli.d.ts +0 -7
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +71 -455
- package/dist/cli.js.map +1 -1
- package/dist/src/browserLaunchOptions.d.ts +1 -1
- package/dist/src/browserLaunchOptions.d.ts.map +1 -1
- package/dist/src/browserLaunchOptions.js +1 -4
- package/dist/src/browserLaunchOptions.js.map +1 -1
- package/dist/src/config.d.ts +1 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +17 -52
- package/dist/src/config.js.map +1 -1
- package/dist/src/types.d.ts +12 -5
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/video.d.ts +0 -1
- package/dist/src/video.d.ts.map +1 -1
- package/dist/src/video.js +47 -247
- package/dist/src/video.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
- package/skills/screenci/SKILL.md +1 -1
- package/skills/screenci/references/init.md +2 -3
- package/skills/screenci/references/record.md +1 -1
- package/dist/Dockerfile +0 -41
- package/dist/src/chromiumProfile.d.ts +0 -6
- package/dist/src/chromiumProfile.d.ts.map +0 -1
- package/dist/src/chromiumProfile.js +0 -20
- package/dist/src/chromiumProfile.js.map +0 -1
- package/dist/src/xvfb.d.ts +0 -22
- package/dist/src/xvfb.d.ts.map +0 -1
- package/dist/src/xvfb.js +0 -87
- package/dist/src/xvfb.js.map +0 -1
package/dist/src/video.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { test as base } from '@playwright/test';
|
|
2
2
|
import { mkdir, rm } from 'fs/promises';
|
|
3
3
|
import { join } from 'path';
|
|
4
|
-
import {
|
|
4
|
+
import { attachRecorder } from 'playwright-recorder-plus';
|
|
5
5
|
import { sanitizeVideoName } from './sanitize.js';
|
|
6
6
|
export { getDimensions } from './dimensions.js';
|
|
7
7
|
import { getDimensions, getViewportCenter } from './dimensions.js';
|
|
8
|
-
import { isHeadless, startXvfb } from './xvfb.js';
|
|
9
8
|
import { setActiveCueRecorder, resetCueChain, validateCustomVoiceRefs, } from './cue.js';
|
|
10
9
|
import { setActiveHideRecorder } from './hide.js';
|
|
11
10
|
import { setActiveAutoZoomRecorder } from './autoZoom.js';
|
|
@@ -15,7 +14,6 @@ import { EventRecorder } from './events.js';
|
|
|
15
14
|
import { setActiveClickRecorder, instrumentBrowser, instrumentContext, } from './instrument.js';
|
|
16
15
|
import { logger } from './logger.js';
|
|
17
16
|
import { getChromiumLaunchOptions } from './browserLaunchOptions.js';
|
|
18
|
-
import { createRecordingChromiumProfile } from './chromiumProfile.js';
|
|
19
17
|
export const POST_VIDEO_PAUSE = 500;
|
|
20
18
|
function sleep(ms) {
|
|
21
19
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
@@ -50,13 +48,6 @@ async function setupMouseTracking(_page, _recorder) {
|
|
|
50
48
|
})
|
|
51
49
|
*/
|
|
52
50
|
}
|
|
53
|
-
/**
|
|
54
|
-
* Get the path to the system ffmpeg binary
|
|
55
|
-
*/
|
|
56
|
-
function getSystemFfmpegPath() {
|
|
57
|
-
// Use system ffmpeg from standard locations
|
|
58
|
-
return '/usr/bin/ffmpeg';
|
|
59
|
-
}
|
|
60
51
|
/**
|
|
61
52
|
* Get CRF value (encoding quality) for a given quality preset.
|
|
62
53
|
*
|
|
@@ -79,187 +70,35 @@ function getCrfForQuality(quality) {
|
|
|
79
70
|
return 16;
|
|
80
71
|
}
|
|
81
72
|
}
|
|
82
|
-
|
|
83
|
-
* Start ffmpeg screen recording
|
|
84
|
-
*/
|
|
85
|
-
function startScreenRecording(outputPath, fps, quality, aspectRatio) {
|
|
73
|
+
async function startScreencastRecording(page, outputPath, fps, quality, aspectRatio) {
|
|
86
74
|
const { width, height } = getDimensions(aspectRatio, quality);
|
|
87
75
|
const crf = getCrfForQuality(quality);
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
'-crf',
|
|
107
|
-
`${crf}`,
|
|
108
|
-
'-pix_fmt',
|
|
109
|
-
'yuv444p',
|
|
110
|
-
'-movflags',
|
|
111
|
-
'frag_keyframe+empty_moov',
|
|
112
|
-
'-y',
|
|
113
|
-
outputPath,
|
|
114
|
-
];
|
|
115
|
-
const ffmpegPath = getSystemFfmpegPath();
|
|
116
|
-
const ffmpeg = spawn(ffmpegPath, ffmpegArgs);
|
|
117
|
-
activeFFmpegProcesses.add(ffmpeg);
|
|
118
|
-
ffmpeg.on('close', () => activeFFmpegProcesses.delete(ffmpeg));
|
|
119
|
-
let hasStarted = false;
|
|
120
|
-
let hasErrored = false;
|
|
121
|
-
const startedPromise = new Promise((resolve) => {
|
|
122
|
-
const timeout = setTimeout(() => {
|
|
123
|
-
if (!hasStarted && !hasErrored) {
|
|
124
|
-
hasStarted = true;
|
|
125
|
-
resolve(true);
|
|
126
|
-
}
|
|
127
|
-
}, 1000);
|
|
128
|
-
ffmpeg.stderr.on('data', (data) => {
|
|
129
|
-
const output = data.toString();
|
|
130
|
-
// ffmpeg outputs info to stderr, check for actual errors
|
|
131
|
-
if (output.includes('frame=') || output.includes('fps=')) {
|
|
132
|
-
if (!hasStarted) {
|
|
133
|
-
hasStarted = true;
|
|
134
|
-
clearTimeout(timeout);
|
|
135
|
-
resolve(true);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
else if (output.includes('error') ||
|
|
139
|
-
output.includes('Error') ||
|
|
140
|
-
output.includes('Invalid')) {
|
|
141
|
-
if (!hasErrored) {
|
|
142
|
-
hasErrored = true;
|
|
143
|
-
clearTimeout(timeout);
|
|
144
|
-
logger.error('FFmpeg error:', output);
|
|
145
|
-
resolve(false);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
});
|
|
149
|
-
ffmpeg.on('error', (err) => {
|
|
150
|
-
if (!hasErrored) {
|
|
151
|
-
hasErrored = true;
|
|
152
|
-
clearTimeout(timeout);
|
|
153
|
-
logger.error('Failed to start FFmpeg:', err);
|
|
154
|
-
resolve(false);
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
ffmpeg.on('close', (code) => {
|
|
158
|
-
clearTimeout(timeout);
|
|
159
|
-
if (code !== null && code !== 0 && code !== 255 && !hasErrored) {
|
|
160
|
-
logger.error(`FFmpeg exited with code ${code}`);
|
|
161
|
-
}
|
|
162
|
-
});
|
|
163
|
-
});
|
|
164
|
-
return { process: ffmpeg, started: startedPromise };
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Stop ffmpeg recording gracefully.
|
|
168
|
-
*
|
|
169
|
-
* SIGTERM tells ffmpeg to flush buffers and write the moov atom before exiting.
|
|
170
|
-
* SIGKILL is a last resort after timeoutMs and will leave the file corrupt.
|
|
171
|
-
*/
|
|
172
|
-
async function stopScreenRecording(ffmpegProcess, timeoutMs = 10000) {
|
|
173
|
-
// Already exited (e.g. display closed under it) — nothing to signal
|
|
174
|
-
if (ffmpegProcess.exitCode !== null || ffmpegProcess.killed) {
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
return new Promise((resolve) => {
|
|
178
|
-
const sigkillTimer = setTimeout(() => {
|
|
179
|
-
logger.warn('FFmpeg did not stop gracefully, forcing SIGKILL (file may be corrupt)');
|
|
180
|
-
ffmpegProcess.kill('SIGKILL');
|
|
181
|
-
resolve();
|
|
182
|
-
}, timeoutMs);
|
|
183
|
-
ffmpegProcess.on('close', () => {
|
|
184
|
-
clearTimeout(sigkillTimer);
|
|
185
|
-
resolve();
|
|
186
|
-
});
|
|
187
|
-
ffmpegProcess.kill('SIGTERM');
|
|
76
|
+
const recorder = await attachRecorder(page, {
|
|
77
|
+
path: outputPath,
|
|
78
|
+
autoStart: false,
|
|
79
|
+
size: { width, height },
|
|
80
|
+
fps,
|
|
81
|
+
jpegQuality: 100,
|
|
82
|
+
ffmpegArgs: [
|
|
83
|
+
'-c:v',
|
|
84
|
+
'libx264',
|
|
85
|
+
'-preset',
|
|
86
|
+
'fast',
|
|
87
|
+
'-crf',
|
|
88
|
+
`${crf}`,
|
|
89
|
+
'-pix_fmt',
|
|
90
|
+
'yuv444p',
|
|
91
|
+
'-movflags',
|
|
92
|
+
'frag_keyframe+empty_moov',
|
|
93
|
+
],
|
|
188
94
|
});
|
|
95
|
+
return recorder;
|
|
189
96
|
}
|
|
190
|
-
// Internal state for xvfb management (not exposed to users)
|
|
191
|
-
let currentXvfb = null;
|
|
192
|
-
let originalDisplay;
|
|
193
|
-
// Track active ffmpeg processes so they can be killed if the process is
|
|
194
|
-
// interrupted before the fixture teardown has a chance to stop them.
|
|
195
|
-
const activeFFmpegProcesses = new Set();
|
|
196
|
-
function killActiveFFmpegProcesses() {
|
|
197
|
-
for (const proc of activeFFmpegProcesses) {
|
|
198
|
-
try {
|
|
199
|
-
proc.kill('SIGTERM');
|
|
200
|
-
}
|
|
201
|
-
catch { }
|
|
202
|
-
}
|
|
203
|
-
activeFFmpegProcesses.clear();
|
|
204
|
-
}
|
|
205
|
-
// Clean up Xvfb and any active ffmpeg processes when the worker process exits
|
|
206
|
-
// so lock/socket files don't persist and block the next run.
|
|
207
|
-
process.on('exit', () => {
|
|
208
|
-
killActiveFFmpegProcesses();
|
|
209
|
-
if (currentXvfb) {
|
|
210
|
-
try {
|
|
211
|
-
currentXvfb.process.kill('SIGTERM');
|
|
212
|
-
}
|
|
213
|
-
catch { }
|
|
214
|
-
}
|
|
215
|
-
});
|
|
216
|
-
// Forward SIGTERM/SIGINT: clean up recorder processes, then re-raise the
|
|
217
|
-
// original signal so parent processes treat the worker as interrupted.
|
|
218
|
-
const handleTermSignal = (signal) => {
|
|
219
|
-
killActiveFFmpegProcesses();
|
|
220
|
-
if (currentXvfb) {
|
|
221
|
-
try {
|
|
222
|
-
currentXvfb.process.kill('SIGTERM');
|
|
223
|
-
}
|
|
224
|
-
catch { }
|
|
225
|
-
}
|
|
226
|
-
process.off('SIGTERM', handleSigterm);
|
|
227
|
-
process.off('SIGINT', handleSigint);
|
|
228
|
-
process.kill(process.pid, signal);
|
|
229
|
-
};
|
|
230
|
-
const handleSigterm = () => handleTermSignal('SIGTERM');
|
|
231
|
-
const handleSigint = () => handleTermSignal('SIGINT');
|
|
232
|
-
process.on('SIGTERM', handleSigterm);
|
|
233
|
-
process.on('SIGINT', handleSigint);
|
|
234
97
|
const _videoBase = base.extend({
|
|
235
98
|
recordOptions: [DEFAULT_VIDEO_OPTIONS, { option: true }],
|
|
236
99
|
renderOptions: [undefined, { option: true }],
|
|
237
|
-
// Internal worker fixture to manage xvfb per test
|
|
238
|
-
_xvfbSetup: [
|
|
239
|
-
async ({ recordOptions: _recordOptions }, use) => {
|
|
240
|
-
const shouldRecord = process.env.SCREENCI_RECORD === 'true';
|
|
241
|
-
if (shouldRecord && !currentXvfb && isHeadless()) {
|
|
242
|
-
// Start Xvfb once per worker at 3840×3840 — a square large enough to
|
|
243
|
-
// contain any quality/aspect-ratio combination. Per-test sizing is
|
|
244
|
-
// handled by the Playwright viewport override and the FFmpeg capture
|
|
245
|
-
// region. The framebuffer costs ~56 MB of RAM, negligible on any runner.
|
|
246
|
-
logger.info('Starting Xvfb at 3840×3840');
|
|
247
|
-
currentXvfb = await startXvfb(3840, 3840);
|
|
248
|
-
logger.info(`Xvfb started on ${currentXvfb.display}`);
|
|
249
|
-
if (originalDisplay === undefined) {
|
|
250
|
-
originalDisplay = process.env.DISPLAY;
|
|
251
|
-
}
|
|
252
|
-
process.env.DISPLAY = currentXvfb.display;
|
|
253
|
-
}
|
|
254
|
-
await use();
|
|
255
|
-
// Xvfb stays alive between tests — cleanup happens on process exit.
|
|
256
|
-
},
|
|
257
|
-
{ scope: 'test', auto: true },
|
|
258
|
-
],
|
|
259
100
|
browser: async ({ playwright }, use) => {
|
|
260
|
-
|
|
261
|
-
// Note: _xvfbSetup runs automatically before this due to auto: true
|
|
262
|
-
const shouldRecord = process.env.SCREENCI_RECORD === 'true';
|
|
101
|
+
const shouldRecord = process.env.SCREENCI_RECORDING === 'true';
|
|
263
102
|
const launchOptions = getChromiumLaunchOptions(shouldRecord);
|
|
264
103
|
const browser = await playwright.chromium.launch(launchOptions);
|
|
265
104
|
instrumentBrowser(browser);
|
|
@@ -268,20 +107,14 @@ const _videoBase = base.extend({
|
|
|
268
107
|
await browser.close();
|
|
269
108
|
}
|
|
270
109
|
},
|
|
271
|
-
context: async ({ browser,
|
|
110
|
+
context: async ({ browser, recordOptions }, use) => {
|
|
272
111
|
// Configure browser context
|
|
273
112
|
const aspectRatio = recordOptions.aspectRatio ?? DEFAULT_ASPECT_RATIO;
|
|
274
113
|
const quality = recordOptions.quality ?? DEFAULT_QUALITY;
|
|
275
114
|
const dimensions = getDimensions(aspectRatio, quality);
|
|
276
|
-
const shouldRecord = process.env.
|
|
115
|
+
const shouldRecord = process.env.SCREENCI_RECORDING === 'true';
|
|
277
116
|
if (shouldRecord) {
|
|
278
|
-
|
|
279
|
-
await browser.close();
|
|
280
|
-
}
|
|
281
|
-
const profile = await createRecordingChromiumProfile();
|
|
282
|
-
const launchOptions = getChromiumLaunchOptions(true);
|
|
283
|
-
const context = await playwright.chromium.launchPersistentContext(profile.userDataDir, {
|
|
284
|
-
...launchOptions,
|
|
117
|
+
const context = await browser.newContext({
|
|
285
118
|
locale: 'en-US',
|
|
286
119
|
viewport: dimensions,
|
|
287
120
|
});
|
|
@@ -291,7 +124,6 @@ const _videoBase = base.extend({
|
|
|
291
124
|
}
|
|
292
125
|
finally {
|
|
293
126
|
await context.close();
|
|
294
|
-
await profile.cleanup();
|
|
295
127
|
}
|
|
296
128
|
return;
|
|
297
129
|
}
|
|
@@ -304,7 +136,7 @@ const _videoBase = base.extend({
|
|
|
304
136
|
},
|
|
305
137
|
page: async ({ context, recordOptions, renderOptions }, use, testInfo) => {
|
|
306
138
|
// Only record when explicitly enabled (record command)
|
|
307
|
-
const shouldRecord = process.env.
|
|
139
|
+
const shouldRecord = process.env.SCREENCI_RECORDING === 'true';
|
|
308
140
|
if (!shouldRecord) {
|
|
309
141
|
// Skip recording, just create page
|
|
310
142
|
resetCueChain();
|
|
@@ -338,8 +170,6 @@ const _videoBase = base.extend({
|
|
|
338
170
|
await mkdir(videoDir, { recursive: true });
|
|
339
171
|
// Video output path - always use recording.mp4
|
|
340
172
|
const videoPath = join(videoDir, 'recording.mp4');
|
|
341
|
-
logger.info(`Recording video to: ${videoPath}`);
|
|
342
|
-
logger.info(`Recording with ${aspectRatio} ${quality} (${dimensions.width}x${dimensions.height}), ${fps}fps`);
|
|
343
173
|
const recorder = new EventRecorder(renderOptions, recordOptions);
|
|
344
174
|
resetCueChain();
|
|
345
175
|
setActiveCueRecorder(recorder);
|
|
@@ -357,61 +187,31 @@ const _videoBase = base.extend({
|
|
|
357
187
|
await page.waitForTimeout(1500);
|
|
358
188
|
await validateCustomVoiceRefs(testInfo.file);
|
|
359
189
|
await validateRegisteredAssetPaths(testInfo.file);
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
190
|
+
const screenRecorder = await startScreencastRecording(page, videoPath, fps, quality, aspectRatio);
|
|
191
|
+
const viewportCenter = getViewportCenter(dimensions);
|
|
192
|
+
await page.mouse._move(viewportCenter.x, viewportCenter.y);
|
|
193
|
+
await screenRecorder.start();
|
|
194
|
+
// Mark the moment the video recording actually begins after the cursor is positioned.
|
|
195
|
+
recorder.start();
|
|
364
196
|
try {
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
await
|
|
368
|
-
windowId,
|
|
369
|
-
bounds: { windowState: 'fullscreen' },
|
|
370
|
-
});
|
|
371
|
-
await cdpSession.detach();
|
|
372
|
-
}
|
|
373
|
-
catch (cdpError) {
|
|
374
|
-
logger.warn('CDP fullscreen failed, toolbar may be visible:', cdpError);
|
|
375
|
-
}
|
|
376
|
-
// Start ffmpeg recording after browser window is ready
|
|
377
|
-
const { process: ffmpegProcess, started } = startScreenRecording(videoPath, fps, quality, aspectRatio);
|
|
378
|
-
// Wait for ffmpeg to start or fail
|
|
379
|
-
const didStart = await started;
|
|
380
|
-
if (didStart) {
|
|
381
|
-
const viewportCenter = getViewportCenter(dimensions);
|
|
382
|
-
await page.mouse._move(viewportCenter.x, viewportCenter.y);
|
|
383
|
-
// Mark the moment the video recording actually begins after the cursor is positioned.
|
|
384
|
-
recorder.start();
|
|
385
|
-
}
|
|
386
|
-
else {
|
|
387
|
-
logger.warn('Screen recording failed to start. Test will continue without recording.');
|
|
388
|
-
logger.warn(`Note: Recording at ${dimensions.width}x${dimensions.height} requires a display of at least that size.`);
|
|
389
|
-
}
|
|
390
|
-
await use(page);
|
|
391
|
-
// Do not end video abruptly.
|
|
392
|
-
await sleep(POST_VIDEO_PAUSE);
|
|
393
|
-
// Stop ffmpeg BEFORE closing the page to avoid a black frame at the end
|
|
394
|
-
if (didStart) {
|
|
395
|
-
logger.info('Stopping recording...');
|
|
396
|
-
await stopScreenRecording(ffmpegProcess);
|
|
397
|
-
logger.info(`Video saved to: ${videoPath}`);
|
|
197
|
+
await use(page);
|
|
198
|
+
// Do not end video abruptly.
|
|
199
|
+
await sleep(POST_VIDEO_PAUSE);
|
|
398
200
|
}
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
201
|
+
finally {
|
|
202
|
+
const stopResult = await screenRecorder.stop();
|
|
203
|
+
await screenRecorder.finalized;
|
|
204
|
+
if (!stopResult.written) {
|
|
205
|
+
logger.warn('Screen recording did not write any frames. Test will continue without recording.');
|
|
403
206
|
}
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
// Write recorded events next to the video
|
|
412
|
-
if (didStart) {
|
|
207
|
+
await page.close();
|
|
208
|
+
setActiveCueRecorder(null);
|
|
209
|
+
setActiveClickRecorder(null);
|
|
210
|
+
setActiveHideRecorder(null);
|
|
211
|
+
setActiveAutoZoomRecorder(null);
|
|
212
|
+
setActiveAssetRecorder(null);
|
|
213
|
+
// Write recorded events next to the video
|
|
413
214
|
await recorder.writeToFile(videoDir, testInfo.title);
|
|
414
|
-
logger.info(`Events saved to: ${join(videoDir, 'data.json')}`);
|
|
415
215
|
}
|
|
416
216
|
},
|
|
417
217
|
});
|
package/dist/src/video.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video.js","sourceRoot":"","sources":["../../src/video.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"video.js","sourceRoot":"","sources":["../../src/video.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAU/C,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAUjD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,uBAAuB,GACxB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,EACL,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,WAAW,GACZ,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAEpE,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAA;AAEnC,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,KAAW,EACX,SAAwB;IAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;MA2BE;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,gBAAgB,CAAC,OAAgB;IACxC,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,EAAE,CAAA;QACX,KAAK,OAAO;YACV,OAAO,EAAE,CAAA;QACX,KAAK,OAAO;YACV,OAAO,EAAE,CAAA;QACX,KAAK,OAAO;YACV,OAAO,EAAE,CAAA;IACb,CAAC;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,IAAU,EACV,UAAkB,EAClB,GAAQ,EACR,OAAgB,EAChB,WAAwB;IAExB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IAC7D,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAErC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE;QAC1C,IAAI,EAAE,UAAU;QAChB,SAAS,EAAE,KAAK;QAChB,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;QACvB,GAAG;QACH,WAAW,EAAE,GAAG;QAChB,UAAU,EAAE;YACV,MAAM;YACN,SAAS;YACT,SAAS;YACT,MAAM;YACN,MAAM;YACN,GAAG,GAAG,EAAE;YACR,UAAU;YACV,SAAS;YACT,WAAW;YACX,0BAA0B;SAC3B;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAA;AACjB,CAAC;AAOD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAsB;IAClD,aAAa,EAAE,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACxD,aAAa,EAAE,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAE5C,OAAO,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,EAAE;QACrC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM,CAAA;QAC9D,MAAM,aAAa,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAA;QAE5D,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;QAC/D,iBAAiB,CAAC,OAAO,CAAC,CAAA;QAC1B,MAAM,GAAG,CAAC,OAAO,CAAC,CAAA;QAClB,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YAC1B,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;QACvB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,GAAG,EAAE,EAAE;QACjD,4BAA4B;QAC5B,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,IAAI,oBAAoB,CAAA;QACrE,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,eAAe,CAAA;QACxD,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACtD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM,CAAA;QAE9D,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;gBACvC,MAAM,EAAE,OAAO;gBACf,QAAQ,EAAE,UAAU;aACrB,CAAC,CAAA;YAEF,iBAAiB,CAAC,OAAO,CAAC,CAAA;YAE1B,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,OAAO,CAAC,CAAA;YACpB,CAAC;oBAAS,CAAC;gBACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;YACvB,CAAC;YAED,OAAM;QACR,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;YACvC,QAAQ,EAAE,UAAU;SACrB,CAAC,CAAA;QAEF,iBAAiB,CAAC,OAAO,CAAC,CAAA;QAE1B,MAAM,GAAG,CAAC,OAAO,CAAC,CAAA;QAElB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;IACvB,CAAC;IAED,IAAI,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE;QACvE,uDAAuD;QACvD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM,CAAA;QAE9D,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,mCAAmC;YACnC,aAAa,EAAE,CAAA;YACf,oBAAoB,CAAC,IAAI,CAAC,CAAA;YAC1B,sBAAsB,CAAC,IAAI,CAAC,CAAA;YAC5B,qBAAqB,CAAC,IAAI,CAAC,CAAA;YAC3B,yBAAyB,CAAC,IAAI,CAAC,CAAA;YAC/B,sBAAsB,CAAC,IAAI,CAAC,CAAA;YAC5B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;YACpC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAA;YACf,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;YAClB,OAAM;QACR,CAAC;QAED,oBAAoB;QACpB,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,IAAI,oBAAoB,CAAA;QACrE,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,eAAe,CAAA;QACxD,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,IAAI,WAAW,CAAA;QAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAEtD,wDAAwD;QACxD,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAE5D,iDAAiD;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAA;QAErE,kDAAkD;QAClD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,2CAA2C;QAC7C,CAAC;QAED,uBAAuB;QACvB,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAE1C,+CAA+C;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;QAEjD,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,aAAa,EAAE,aAAa,CAAC,CAAA;QAChE,aAAa,EAAE,CAAA;QACf,oBAAoB,CAAC,QAAQ,CAAC,CAAA;QAC9B,sBAAsB,CAAC,QAAQ,CAAC,CAAA;QAChC,qBAAqB,CAAC,QAAQ,CAAC,CAAA;QAC/B,yBAAyB,CAAC,QAAQ,CAAC,CAAA;QACnC,sBAAsB,CAAC,QAAQ,CAAC,CAAA;QAEhC,yDAAyD;QACzD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;QAEpC,MAAM,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAExC,gEAAgE;QAChE,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QAE9B,yEAAyE;QACzE,sCAAsC;QACtC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QAE/B,MAAM,uBAAuB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC5C,MAAM,4BAA4B,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAEjD,MAAM,cAAc,GAAG,MAAM,wBAAwB,CACnD,IAAI,EACJ,SAAS,EACT,GAAG,EACH,OAAO,EACP,WAAW,CACZ,CAAA;QAED,MAAM,cAAc,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAA;QACpD,MACE,IAAI,CAAC,KAGN,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAA;QAC3C,MAAM,cAAc,CAAC,KAAK,EAAE,CAAA;QAC5B,sFAAsF;QACtF,QAAQ,CAAC,KAAK,EAAE,CAAA;QAEhB,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,IAAI,CAAC,CAAA;YAEf,6BAA6B;YAC7B,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAA;QAC/B,CAAC;gBAAS,CAAC;YACT,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAA;YAC9C,MAAM,cAAc,CAAC,SAAS,CAAA;YAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACxB,MAAM,CAAC,IAAI,CACT,kFAAkF,CACnF,CAAA;YACH,CAAC;YAED,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;YAClB,oBAAoB,CAAC,IAAI,CAAC,CAAA;YAC1B,sBAAsB,CAAC,IAAI,CAAC,CAAA;YAC5B,qBAAqB,CAAC,IAAI,CAAC,CAAA;YAC3B,yBAAyB,CAAC,IAAI,CAAC,CAAA;YAC/B,sBAAsB,CAAC,IAAI,CAAC,CAAA;YAE5B,0CAA0C;YAC1C,MAAM,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;QACtD,CAAC;IACH,CAAC;CACF,CAAC,CAAA;AAgJF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,UAA8B,CAAA"}
|