@theia/ai-ide 1.71.0-next.72 → 1.71.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.
Files changed (41) hide show
  1. package/lib/browser/frontend-module.d.ts.map +1 -1
  2. package/lib/browser/frontend-module.js +8 -0
  3. package/lib/browser/frontend-module.js.map +1 -1
  4. package/lib/browser/review/pr-review-agent.d.ts +19 -0
  5. package/lib/browser/review/pr-review-agent.d.ts.map +1 -0
  6. package/lib/browser/review/pr-review-agent.js +47 -0
  7. package/lib/browser/review/pr-review-agent.js.map +1 -0
  8. package/lib/browser/review/pr-review-prompt-template.d.ts +4 -0
  9. package/lib/browser/review/pr-review-prompt-template.d.ts.map +1 -0
  10. package/lib/browser/review/pr-review-prompt-template.js +437 -0
  11. package/lib/browser/review/pr-review-prompt-template.js.map +1 -0
  12. package/lib/browser/user-interaction-tool-renderer.d.ts +18 -0
  13. package/lib/browser/user-interaction-tool-renderer.d.ts.map +1 -0
  14. package/lib/browser/user-interaction-tool-renderer.js +330 -0
  15. package/lib/browser/user-interaction-tool-renderer.js.map +1 -0
  16. package/lib/browser/user-interaction-tool.d.ts +47 -0
  17. package/lib/browser/user-interaction-tool.d.ts.map +1 -0
  18. package/lib/browser/user-interaction-tool.js +397 -0
  19. package/lib/browser/user-interaction-tool.js.map +1 -0
  20. package/lib/browser/user-interaction-tool.spec.d.ts +2 -0
  21. package/lib/browser/user-interaction-tool.spec.d.ts.map +1 -0
  22. package/lib/browser/user-interaction-tool.spec.js +336 -0
  23. package/lib/browser/user-interaction-tool.spec.js.map +1 -0
  24. package/lib/common/user-interaction-tool.d.ts +53 -0
  25. package/lib/common/user-interaction-tool.d.ts.map +1 -0
  26. package/lib/common/user-interaction-tool.js +176 -0
  27. package/lib/common/user-interaction-tool.js.map +1 -0
  28. package/lib/common/user-interaction-tool.spec.d.ts +2 -0
  29. package/lib/common/user-interaction-tool.spec.d.ts.map +1 -0
  30. package/lib/common/user-interaction-tool.spec.js +216 -0
  31. package/lib/common/user-interaction-tool.spec.js.map +1 -0
  32. package/package.json +22 -22
  33. package/src/browser/frontend-module.ts +9 -0
  34. package/src/browser/review/pr-review-agent.ts +42 -0
  35. package/src/browser/review/pr-review-prompt-template.ts +449 -0
  36. package/src/browser/style/index.css +299 -0
  37. package/src/browser/user-interaction-tool-renderer.tsx +531 -0
  38. package/src/browser/user-interaction-tool.spec.ts +396 -0
  39. package/src/browser/user-interaction-tool.ts +423 -0
  40. package/src/common/user-interaction-tool.spec.ts +241 -0
  41. package/src/common/user-interaction-tool.ts +237 -0
@@ -0,0 +1,397 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 EclipseSource GmbH.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ var UserInteractionTool_1;
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.UserInteractionTool = void 0;
20
+ const tslib_1 = require("tslib");
21
+ const language_model_1 = require("@theia/ai-core/lib/common/language-model");
22
+ const diff_uris_1 = require("@theia/core/lib/browser/diff-uris");
23
+ const browser_1 = require("@theia/core/lib/browser");
24
+ const promise_util_1 = require("@theia/core/lib/common/promise-util");
25
+ const resource_1 = require("@theia/core/lib/common/resource");
26
+ const uri_1 = require("@theia/core/lib/common/uri");
27
+ const inversify_1 = require("@theia/core/shared/inversify");
28
+ const browser_2 = require("@theia/editor/lib/browser");
29
+ const scm_service_1 = require("@theia/scm/lib/browser/scm-service");
30
+ const workspace_functions_1 = require("./workspace-functions");
31
+ const user_interaction_tool_1 = require("../common/user-interaction-tool");
32
+ // Schemas are module-level constants so they are built once at load time
33
+ // rather than reconstructed on every getTool() call. We use a single object
34
+ // schema (no oneOf/anyOf) since some providers (notably OpenAI) handle union
35
+ // types poorly. The runtime parser additionally accepts plain string paths
36
+ // as shorthand.
37
+ const CONTENT_REF_SCHEMA = {
38
+ type: 'object',
39
+ properties: {
40
+ path: {
41
+ type: 'string',
42
+ description: 'Workspace-relative file path. Required unless "empty" is true.'
43
+ },
44
+ gitRef: {
45
+ type: 'string',
46
+ description: 'Optional git ref (branch, tag, or commit hash). Ignored when "empty" is true.'
47
+ },
48
+ line: {
49
+ type: 'number',
50
+ description: 'Optional 1-based line number to scroll to. Ignored when "empty" is true.'
51
+ },
52
+ empty: {
53
+ type: 'boolean',
54
+ description: 'Set to true to mark this side as intentionally empty (e.g., for newly added or deleted files in a diff).'
55
+ },
56
+ label: {
57
+ type: 'string',
58
+ description: 'Optional label for an empty side (e.g., "new file", "deleted"). Only used when "empty" is true.'
59
+ }
60
+ },
61
+ description: 'Content reference. Provide "path" for a real file (optionally with "gitRef" and/or "line"), '
62
+ + 'or set "empty": true to represent a missing side of a diff.'
63
+ };
64
+ const STEP_SCHEMA = {
65
+ type: 'object',
66
+ properties: {
67
+ title: { type: 'string', description: 'A short title for this step.' },
68
+ message: { type: 'string', description: 'A markdown-formatted message to present to the user.' },
69
+ options: {
70
+ type: 'array',
71
+ items: {
72
+ type: 'object',
73
+ properties: {
74
+ text: { type: 'string', description: 'Display text for the option button.' },
75
+ value: { type: 'string', description: 'Value returned when the user selects this option.' },
76
+ description: { type: 'string', description: 'Optional longer description shown with the option.' },
77
+ buttonLabel: { type: 'string', description: 'Optional prominent button label text. Falls back to text if not provided.' }
78
+ },
79
+ required: ['text', 'value']
80
+ },
81
+ description: 'Optional buttons offered to the user for this step. Omit for purely informational steps; '
82
+ + 'a hardcoded "Next"/"Finish" button is always shown to advance.'
83
+ },
84
+ links: {
85
+ type: 'array',
86
+ items: {
87
+ type: 'object',
88
+ properties: {
89
+ ref: {
90
+ ...CONTENT_REF_SCHEMA,
91
+ description: 'Content reference for the file (or left side of a diff). '
92
+ + 'Provide "path" for a real file, or "empty": true for files that did not exist.'
93
+ },
94
+ rightRef: {
95
+ ...CONTENT_REF_SCHEMA,
96
+ description: 'Optional right-side content reference for diff views. '
97
+ + 'Provide "path" for a real file, or "empty": true for files that no longer exist.'
98
+ },
99
+ label: { type: 'string', description: 'Optional label for the link or diff tab.' },
100
+ autoOpen: {
101
+ type: 'boolean',
102
+ description: 'Whether to automatically open the file/diff when this step becomes active. Defaults to true.'
103
+ }
104
+ },
105
+ required: ['ref']
106
+ },
107
+ description: 'Optional links to files or diffs to show alongside this step.'
108
+ }
109
+ },
110
+ required: ['title', 'message']
111
+ };
112
+ const TOOL_PARAMETERS = {
113
+ type: 'object',
114
+ properties: {
115
+ interactions: {
116
+ type: 'array',
117
+ items: STEP_SCHEMA,
118
+ description: 'Ordered list of wizard steps. The user walks through them sequentially without a back button.'
119
+ }
120
+ },
121
+ required: ['interactions']
122
+ };
123
+ const TOOL_DESCRIPTION = 'Present an interactive interaction to the user. Each step has a title, a markdown message, optional option buttons, '
124
+ + 'and optional file/diff links that auto-open when the step is reached. '
125
+ + 'Single-step behavior: a single-step interaction with options waits for the user to pick one option, which immediately completes the interaction; '
126
+ + 'a single-step interaction without options is purely informational and is auto-completed by the tool '
127
+ + '(do not promise the user a "Finish" or "Next" button — there is none, and no comments can be entered). '
128
+ + 'Multi-step behavior: the user advances through steps with a "Next" button (or "Finish" on the last step), can navigate freely between steps, '
129
+ + 'and may add free-form comments on every step. '
130
+ + 'The tool returns a JSON string with { "completed": boolean, "steps": [{ "title", "value"?, "comments"?, "skipped"? }] }. '
131
+ + 'If the user cancels mid-interaction, the tool returns whatever has been collected so far with "completed": false. '
132
+ + 'Use this to walk users through a series of pre-determined findings or decisions in a single tool call, '
133
+ + 'or to surface a single message/diff that should be shown inline in the chat.';
134
+ let UserInteractionTool = class UserInteractionTool {
135
+ constructor() {
136
+ this.pendingInteractions = new Map();
137
+ }
138
+ static { UserInteractionTool_1 = this; }
139
+ static { this.ID = user_interaction_tool_1.USER_INTERACTION_FUNCTION_ID; }
140
+ getTool() {
141
+ return {
142
+ id: UserInteractionTool_1.ID,
143
+ name: UserInteractionTool_1.ID,
144
+ providerName: 'ai-ide',
145
+ description: TOOL_DESCRIPTION,
146
+ parameters: TOOL_PARAMETERS,
147
+ handler: (argString, ctx) => this.handleInteraction(argString, ctx)
148
+ };
149
+ }
150
+ setStepResult(toolCallId, stepIndex, partial) {
151
+ const pending = this.pendingInteractions.get(toolCallId);
152
+ if (!pending || pending.resolved) {
153
+ return;
154
+ }
155
+ if (stepIndex < 0 || stepIndex >= pending.steps.length) {
156
+ return;
157
+ }
158
+ const existing = pending.stepResults[stepIndex] ?? { title: pending.steps[stepIndex].title };
159
+ pending.stepResults[stepIndex] = {
160
+ ...existing,
161
+ ...partial,
162
+ title: pending.steps[stepIndex].title
163
+ };
164
+ }
165
+ completeInteraction(toolCallId) {
166
+ const pending = this.pendingInteractions.get(toolCallId);
167
+ if (!pending || pending.resolved) {
168
+ return;
169
+ }
170
+ pending.resolved = true;
171
+ const result = {
172
+ completed: true,
173
+ steps: this.normalizeStepResults(pending)
174
+ };
175
+ pending.deferred.resolve(JSON.stringify(result));
176
+ }
177
+ /**
178
+ * Set the result for a step and immediately complete the interaction.
179
+ * Use this to atomically pass the user's input value into the result, avoiding
180
+ * any reliance on synchronous state updates between `setStepResult` and `completeInteraction`.
181
+ */
182
+ completeInteractionWith(toolCallId, stepIndex, partial) {
183
+ this.setStepResult(toolCallId, stepIndex, partial);
184
+ this.completeInteraction(toolCallId);
185
+ }
186
+ cancelInteraction(toolCallId) {
187
+ const pending = this.pendingInteractions.get(toolCallId);
188
+ if (!pending || pending.resolved) {
189
+ return;
190
+ }
191
+ pending.resolved = true;
192
+ const steps = this.normalizeStepResults(pending);
193
+ // Mark steps without any user input as skipped.
194
+ for (let i = 0; i < steps.length; i++) {
195
+ const step = steps[i];
196
+ const hasInput = step.value !== undefined || (step.comments && step.comments.length > 0);
197
+ if (!hasInput) {
198
+ steps[i] = { ...step, skipped: true };
199
+ }
200
+ }
201
+ const result = { completed: false, steps };
202
+ pending.deferred.resolve(JSON.stringify(result));
203
+ }
204
+ normalizeStepResults(pending) {
205
+ return pending.steps.map((step, i) => pending.stepResults[i] ?? { title: step.title });
206
+ }
207
+ async openLink(link) {
208
+ const workspaceRoot = await this.workspaceScope.getWorkspaceRoot();
209
+ if (link.rightRef !== undefined) {
210
+ const resolvedLeftUri = await this.resolveDiffSideUri(link.ref, workspaceRoot);
211
+ const resolvedRightUri = await this.resolveDiffSideUri(link.rightRef, workspaceRoot);
212
+ const left = (0, user_interaction_tool_1.resolveContentRef)(link.ref);
213
+ const right = (0, user_interaction_tool_1.resolveContentRef)(link.rightRef);
214
+ const diffLabel = link.label || (0, user_interaction_tool_1.buildDiffLabel)(left, right);
215
+ const diffUri = diff_uris_1.DiffUris.encode(resolvedLeftUri, resolvedRightUri, diffLabel);
216
+ // Prefer the right-side line (working copy) since diff editors reveal
217
+ // selections on the modified editor; fall back to the left-side line.
218
+ const line = (!(0, user_interaction_tool_1.isEmptyContentRef)(right) && right.line)
219
+ || (!(0, user_interaction_tool_1.isEmptyContentRef)(left) && left.line)
220
+ || undefined;
221
+ const selection = line ? { start: { line: line - 1, character: 0 } } : undefined;
222
+ await (0, browser_1.open)(this.openerService, diffUri, { selection });
223
+ }
224
+ else {
225
+ if ((0, user_interaction_tool_1.isEmptyContentRef)(link.ref)) {
226
+ return;
227
+ }
228
+ const left = (0, user_interaction_tool_1.resolveContentRef)(link.ref);
229
+ if (left.gitRef) {
230
+ const uri = this.resolveUri(left, workspaceRoot);
231
+ let targetUri;
232
+ if (uri === undefined) {
233
+ targetUri = this.errorContentUri(left.path, left.gitRef);
234
+ }
235
+ else if (await this.canResolveUri(uri)) {
236
+ targetUri = uri;
237
+ }
238
+ else {
239
+ // SCM is available but reading at this ref failed — likely the
240
+ // ref does not exist or the file did not exist at that ref.
241
+ targetUri = this.refNotFoundUri(left.path, left.gitRef);
242
+ }
243
+ await (0, browser_1.open)(this.openerService, targetUri);
244
+ }
245
+ else {
246
+ const fileUri = workspaceRoot.resolve(left.path);
247
+ this.workspaceScope.ensureWithinWorkspace(fileUri, workspaceRoot);
248
+ if (!(await this.canResolveUri(fileUri))) {
249
+ await (0, browser_1.open)(this.openerService, this.fileNotFoundUri(left.path));
250
+ return;
251
+ }
252
+ const selection = left.line
253
+ ? { start: { line: left.line - 1, character: 0 } }
254
+ : undefined;
255
+ await this.editorManager.open(fileUri, { selection });
256
+ }
257
+ }
258
+ }
259
+ resolveUri(ref, workspaceRoot) {
260
+ const fileUri = workspaceRoot.resolve(ref.path);
261
+ this.workspaceScope.ensureWithinWorkspace(fileUri, workspaceRoot);
262
+ if (ref.gitRef) {
263
+ const repo = this.scmService.findRepository(fileUri);
264
+ if (repo) {
265
+ const query = { path: fileUri['codeUri'].fsPath, ref: ref.gitRef };
266
+ return fileUri.withScheme(repo.provider.id).withQuery(JSON.stringify(query));
267
+ }
268
+ console.warn(`No SCM repository found to resolve gitRef '${ref.gitRef}' for '${ref.path}'`);
269
+ return undefined;
270
+ }
271
+ return fileUri;
272
+ }
273
+ async handleInteraction(argString, ctx) {
274
+ try {
275
+ JSON.parse(argString);
276
+ }
277
+ catch {
278
+ return JSON.stringify({ error: 'Invalid arguments' });
279
+ }
280
+ // Validate via the shared parser so the tool only ever waits for steps that
281
+ // the renderer would actually render. Otherwise the agent could send a
282
+ // step the UI filters out, leaving the tool blocked on input forever.
283
+ const validated = (0, user_interaction_tool_1.parseUserInteractionArgs)(argString);
284
+ if (!validated || validated.interactions.length === 0) {
285
+ return JSON.stringify({ error: 'No interactions provided' });
286
+ }
287
+ const toolCallId = language_model_1.ToolInvocationContext.getToolCallId(ctx);
288
+ if (!toolCallId) {
289
+ return JSON.stringify({ error: 'No tool call ID available' });
290
+ }
291
+ const steps = validated.interactions;
292
+ // Single-step interactions without options are purely informational
293
+ // (message + optional links/diffs) and should not block the agent.
294
+ // Resolve immediately with completed=true.
295
+ if (steps.length === 1 && (!steps[0].options || steps[0].options.length === 0)) {
296
+ const result = {
297
+ completed: true,
298
+ steps: [{ title: steps[0].title }]
299
+ };
300
+ return JSON.stringify(result);
301
+ }
302
+ const pending = {
303
+ deferred: new promise_util_1.Deferred(),
304
+ steps,
305
+ stepResults: new Array(steps.length),
306
+ resolved: false
307
+ };
308
+ this.pendingInteractions.set(toolCallId, pending);
309
+ const cancellationToken = language_model_1.ToolInvocationContext.getCancellationToken(ctx);
310
+ const cancellationListener = cancellationToken?.onCancellationRequested(() => this.cancelInteraction(toolCallId));
311
+ try {
312
+ return await pending.deferred.promise;
313
+ }
314
+ finally {
315
+ cancellationListener?.dispose();
316
+ this.pendingInteractions.delete(toolCallId);
317
+ }
318
+ }
319
+ async resolveDiffSideUri(ref, workspaceRoot) {
320
+ if ((0, user_interaction_tool_1.isEmptyContentRef)(ref)) {
321
+ return this.emptyContentUri(ref.label || '');
322
+ }
323
+ const resolved = (0, user_interaction_tool_1.resolveContentRef)(ref);
324
+ const uri = this.resolveUri(resolved, workspaceRoot);
325
+ if (uri === undefined) {
326
+ // No SCM provider could resolve the gitRef — surface as an actionable error.
327
+ return this.errorContentUri(resolved.path, resolved.gitRef);
328
+ }
329
+ if (await this.canResolveUri(uri)) {
330
+ return uri;
331
+ }
332
+ // SCM resolved the URI but reading content failed — most commonly the file
333
+ // simply did not exist at that revision (e.g. newly added file). Show empty.
334
+ return this.emptyContentUri(resolved.path);
335
+ }
336
+ errorContentUri(path, gitRef) {
337
+ const message = `Unable to resolve revision '${gitRef}' for '${path}'.\n\n`
338
+ + 'No SCM provider is available to retrieve this revision. '
339
+ + 'Ensure the Git extension is active and the repository is recognized.';
340
+ return new uri_1.default().withScheme(resource_1.MEMORY_TEXT_READONLY).withPath(path).withQuery(message);
341
+ }
342
+ refNotFoundUri(path, gitRef) {
343
+ const message = `Could not load '${path}' at revision '${gitRef}'.\n\n`
344
+ + 'The revision may not exist, or the file did not exist at that revision.';
345
+ return new uri_1.default().withScheme(resource_1.MEMORY_TEXT_READONLY).withPath(path).withQuery(message);
346
+ }
347
+ fileNotFoundUri(path) {
348
+ const message = `Could not load '${path}'.\n\nThe file does not exist in the current workspace.`;
349
+ return new uri_1.default().withScheme(resource_1.MEMORY_TEXT_READONLY).withPath(path).withQuery(message);
350
+ }
351
+ emptyContentUri(path) {
352
+ return new uri_1.default().withScheme(resource_1.MEMORY_TEXT).withPath(path);
353
+ }
354
+ async canResolveUri(uri) {
355
+ try {
356
+ const resource = await this.resourceProvider(uri);
357
+ try {
358
+ await resource.readContents();
359
+ return true;
360
+ }
361
+ catch {
362
+ return false;
363
+ }
364
+ finally {
365
+ resource.dispose();
366
+ }
367
+ }
368
+ catch {
369
+ return false;
370
+ }
371
+ }
372
+ };
373
+ exports.UserInteractionTool = UserInteractionTool;
374
+ tslib_1.__decorate([
375
+ (0, inversify_1.inject)(browser_1.OpenerService),
376
+ tslib_1.__metadata("design:type", Object)
377
+ ], UserInteractionTool.prototype, "openerService", void 0);
378
+ tslib_1.__decorate([
379
+ (0, inversify_1.inject)(browser_2.EditorManager),
380
+ tslib_1.__metadata("design:type", browser_2.EditorManager)
381
+ ], UserInteractionTool.prototype, "editorManager", void 0);
382
+ tslib_1.__decorate([
383
+ (0, inversify_1.inject)(scm_service_1.ScmService),
384
+ tslib_1.__metadata("design:type", scm_service_1.ScmService)
385
+ ], UserInteractionTool.prototype, "scmService", void 0);
386
+ tslib_1.__decorate([
387
+ (0, inversify_1.inject)(workspace_functions_1.WorkspaceFunctionScope),
388
+ tslib_1.__metadata("design:type", workspace_functions_1.WorkspaceFunctionScope)
389
+ ], UserInteractionTool.prototype, "workspaceScope", void 0);
390
+ tslib_1.__decorate([
391
+ (0, inversify_1.inject)(resource_1.ResourceProvider),
392
+ tslib_1.__metadata("design:type", Function)
393
+ ], UserInteractionTool.prototype, "resourceProvider", void 0);
394
+ exports.UserInteractionTool = UserInteractionTool = UserInteractionTool_1 = tslib_1.__decorate([
395
+ (0, inversify_1.injectable)()
396
+ ], UserInteractionTool);
397
+ //# sourceMappingURL=user-interaction-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-interaction-tool.js","sourceRoot":"","sources":["../../src/browser/user-interaction-tool.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;;AAGhF,6EAAiF;AACjF,iEAA6D;AAC7D,qDAA8D;AAC9D,sEAA+D;AAC/D,8DAAsG;AACtG,oDAA6C;AAC7C,4DAAkE;AAClE,uDAA0D;AAC1D,oEAAgE;AAChE,+DAA+D;AAC/D,2EAYyC;AASzC,yEAAyE;AACzE,4EAA4E;AAC5E,6EAA6E;AAC7E,2EAA2E;AAC3E,gBAAgB;AAChB,MAAM,kBAAkB,GAAiC;IACrD,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACR,IAAI,EAAE;YACF,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,gEAAgE;SAChF;QACD,MAAM,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,+EAA+E;SAC/F;QACD,IAAI,EAAE;YACF,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,0EAA0E;SAC1F;QACD,KAAK,EAAE;YACH,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,0GAA0G;SAC1H;QACD,KAAK,EAAE;YACH,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,iGAAiG;SACjH;KACJ;IACD,WAAW,EAAE,8FAA8F;UACrG,6DAA6D;CACtE,CAAC;AAEF,MAAM,WAAW,GAAiC;IAC9C,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACR,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;QACtE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sDAAsD,EAAE;QAChG,OAAO,EAAE;YACL,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACH,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACR,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE;oBAC5E,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mDAAmD,EAAE;oBAC3F,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oDAAoD,EAAE;oBAClG,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2EAA2E,EAAE;iBAC5H;gBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;aAC9B;YACD,WAAW,EAAE,2FAA2F;kBAClG,gEAAgE;SACzE;QACD,KAAK,EAAE;YACH,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACH,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACR,GAAG,EAAE;wBACD,GAAG,kBAAkB;wBACrB,WAAW,EAAE,2DAA2D;8BAClE,gFAAgF;qBACzF;oBACD,QAAQ,EAAE;wBACN,GAAG,kBAAkB;wBACrB,WAAW,EAAE,wDAAwD;8BAC/D,kFAAkF;qBAC3F;oBACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0CAA0C,EAAE;oBAClF,QAAQ,EAAE;wBACN,IAAI,EAAE,SAAS;wBACf,WAAW,EAAE,8FAA8F;qBAC9G;iBACJ;gBACD,QAAQ,EAAE,CAAC,KAAK,CAAC;aACpB;YACD,WAAW,EAAE,+DAA+D;SAC/E;KACJ;IACD,QAAQ,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC;CACjC,CAAC;AAEF,MAAM,eAAe,GAA0B;IAC3C,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACR,YAAY,EAAE;YACV,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,WAAW;YAClB,WAAW,EAAE,+FAA+F;SAC/G;KACJ;IACD,QAAQ,EAAE,CAAC,cAAc,CAAC;CAC7B,CAAC;AAEF,MAAM,gBAAgB,GAAG,sHAAsH;MACzI,wEAAwE;MACxE,mJAAmJ;MACnJ,sGAAsG;MACtG,yGAAyG;MACzG,+IAA+I;MAC/I,gDAAgD;MAChD,2HAA2H;MAC3H,oHAAoH;MACpH,yGAAyG;MACzG,8EAA8E,CAAC;AAG9E,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAAzB;QAkBgB,wBAAmB,GAAG,IAAI,GAAG,EAA8B,CAAC;IAyPnF,CAAC;;aA1QU,OAAE,GAAG,oDAA4B,AAA/B,CAAgC;IAmBzC,OAAO;QACH,OAAO;YACH,EAAE,EAAE,qBAAmB,CAAC,EAAE;YAC1B,IAAI,EAAE,qBAAmB,CAAC,EAAE;YAC5B,YAAY,EAAE,QAAQ;YACtB,WAAW,EAAE,gBAAgB;YAC7B,UAAU,EAAE,eAAe;YAC3B,OAAO,EAAE,CAAC,SAAiB,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,GAAG,CAAC;SAC9E,CAAC;IACN,CAAC;IAED,aAAa,CAAC,UAAkB,EAAE,SAAiB,EAAE,OAA2C;QAC5F,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC/B,OAAO;QACX,CAAC;QACD,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACrD,OAAO;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;QAC7F,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG;YAC7B,GAAG,QAAQ;YACX,GAAG,OAAO;YACV,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK;SACxC,CAAC;IACN,CAAC;IAED,mBAAmB,CAAC,UAAkB;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC/B,OAAO;QACX,CAAC;QACD,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;QACxB,MAAM,MAAM,GAA0B;YAClC,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;SAC5C,CAAC;QACF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,CAAC;IAED;;;;OAIG;IACH,uBAAuB,CAAC,UAAkB,EAAE,SAAiB,EAAE,OAA2C;QACtG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAED,iBAAiB,CAAC,UAAkB;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC/B,OAAO;QACX,CAAC;QACD,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACjD,gDAAgD;QAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACzF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACZ,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC1C,CAAC;QACL,CAAC;QACD,MAAM,MAAM,GAA0B,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAClE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,CAAC;IAES,oBAAoB,CAAC,OAA2B;QACtD,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAyB;QACpC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;QAEnE,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;YAC/E,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YACrF,MAAM,IAAI,GAAG,IAAA,yCAAiB,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzC,MAAM,KAAK,GAAG,IAAA,yCAAiB,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,IAAA,sCAAc,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC5D,MAAM,OAAO,GAAG,oBAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,gBAAgB,EAAE,SAAS,CAAC,CAAC;YAC9E,sEAAsE;YACtE,sEAAsE;YACtE,MAAM,IAAI,GAAG,CAAC,CAAC,IAAA,yCAAiB,EAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC;mBAC/C,CAAC,CAAC,IAAA,yCAAiB,EAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;mBACvC,SAAS,CAAC;YACjB,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACjF,MAAM,IAAA,cAAI,EAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACJ,IAAI,IAAA,yCAAiB,EAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,OAAO;YACX,CAAC;YACD,MAAM,IAAI,GAAG,IAAA,yCAAiB,EAAC,IAAI,CAAC,GAAG,CAAmB,CAAC;YAC3D,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;gBACjD,IAAI,SAAc,CAAC;gBACnB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;oBACpB,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC7D,CAAC;qBAAM,IAAI,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvC,SAAS,GAAG,GAAG,CAAC;gBACpB,CAAC;qBAAM,CAAC;oBACJ,+DAA+D;oBAC/D,4DAA4D;oBAC5D,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC5D,CAAC;gBACD,MAAM,IAAA,cAAI,EAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACJ,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjD,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;gBAClE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;oBACvC,MAAM,IAAA,cAAI,EAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;oBAChE,OAAO;gBACX,CAAC;gBACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI;oBACvB,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE;oBAClD,CAAC,CAAC,SAAS,CAAC;gBAChB,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YAC1D,CAAC;QACL,CAAC;IACL,CAAC;IAES,UAAU,CAChB,GAAmB,EACnB,aAAkB;QAElB,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAClE,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YACrD,IAAI,IAAI,EAAE,CAAC;gBACP,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;gBACnE,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YACjF,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,8CAA8C,GAAG,CAAC,MAAM,UAAU,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;YAC5F,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAES,KAAK,CAAC,iBAAiB,CAAC,SAAiB,EAAE,GAAsC;QACvF,IAAI,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,4EAA4E;QAC5E,uEAAuE;QACvE,sEAAsE;QACtE,MAAM,SAAS,GAAG,IAAA,gDAAwB,EAAC,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpD,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,UAAU,GAAG,sCAAqB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,KAAK,GAA0B,SAAS,CAAC,YAAY,CAAC;QAE5D,oEAAoE;QACpE,mEAAmE;QACnE,2CAA2C;QAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAC7E,MAAM,MAAM,GAA0B;gBAClC,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;aACrC,CAAC;YACF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;QAED,MAAM,OAAO,GAAuB;YAChC,QAAQ,EAAE,IAAI,uBAAQ,EAAU;YAChC,KAAK;YACL,WAAW,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;YACpC,QAAQ,EAAE,KAAK;SAClB,CAAC;QACF,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAElD,MAAM,iBAAiB,GAAG,sCAAqB,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC1E,MAAM,oBAAoB,GAAG,iBAAiB,EAAE,uBAAuB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;QAElH,IAAI,CAAC;YACD,OAAO,MAAM,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC1C,CAAC;gBAAS,CAAC;YACP,oBAAoB,EAAE,OAAO,EAAE,CAAC;YAChC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAChD,CAAC;IACL,CAAC;IAES,KAAK,CAAC,kBAAkB,CAAC,GAAe,EAAE,aAAkB;QAClE,IAAI,IAAA,yCAAiB,EAAC,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,QAAQ,GAAG,IAAA,yCAAiB,EAAC,GAAG,CAAmB,CAAC;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QACrD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACpB,6EAA6E;YAC7E,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAO,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,GAAG,CAAC;QACf,CAAC;QACD,2EAA2E;QAC3E,6EAA6E;QAC7E,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAES,eAAe,CAAC,IAAY,EAAE,MAAc;QAClD,MAAM,OAAO,GAAG,+BAA+B,MAAM,UAAU,IAAI,QAAQ;cACrE,0DAA0D;cAC1D,sEAAsE,CAAC;QAC7E,OAAO,IAAI,aAAG,EAAE,CAAC,UAAU,CAAC,+BAAoB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACxF,CAAC;IAES,cAAc,CAAC,IAAY,EAAE,MAAc;QACjD,MAAM,OAAO,GAAG,mBAAmB,IAAI,kBAAkB,MAAM,QAAQ;cACjE,yEAAyE,CAAC;QAChF,OAAO,IAAI,aAAG,EAAE,CAAC,UAAU,CAAC,+BAAoB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACxF,CAAC;IAES,eAAe,CAAC,IAAY;QAClC,MAAM,OAAO,GAAG,mBAAmB,IAAI,yDAAyD,CAAC;QACjG,OAAO,IAAI,aAAG,EAAE,CAAC,UAAU,CAAC,+BAAoB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACxF,CAAC;IAES,eAAe,CAAC,IAAY;QAClC,OAAO,IAAI,aAAG,EAAE,CAAC,UAAU,CAAC,sBAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC;IAES,KAAK,CAAC,aAAa,CAAC,GAAQ;QAClC,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAClD,IAAI,CAAC;gBACD,MAAM,QAAQ,CAAC,YAAY,EAAE,CAAC;gBAC9B,OAAO,IAAI,CAAC;YAChB,CAAC;YAAC,MAAM,CAAC;gBACL,OAAO,KAAK,CAAC;YACjB,CAAC;oBAAS,CAAC;gBACP,QAAQ,CAAC,OAAO,EAAE,CAAC;YACvB,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;;AA1QQ,kDAAmB;AAIT;IADlB,IAAA,kBAAM,EAAC,uBAAa,CAAC;;0DAC0B;AAG7B;IADlB,IAAA,kBAAM,EAAC,uBAAa,CAAC;sCACY,uBAAa;0DAAC;AAG7B;IADlB,IAAA,kBAAM,EAAC,wBAAU,CAAC;sCACY,wBAAU;uDAAC;AAGvB;IADlB,IAAA,kBAAM,EAAC,4CAAsB,CAAC;sCACI,4CAAsB;2DAAC;AAGvC;IADlB,IAAA,kBAAM,EAAC,2BAAgB,CAAC;;6DAC6B;8BAhB7C,mBAAmB;IAD/B,IAAA,sBAAU,GAAE;GACA,mBAAmB,CA2Q/B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=user-interaction-tool.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-interaction-tool.spec.d.ts","sourceRoot":"","sources":["../../src/browser/user-interaction-tool.spec.ts"],"names":[],"mappings":""}