common-qa-mcp 0.2.0 → 0.3.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 (86) hide show
  1. package/README.md +6 -0
  2. package/dist/adapters/factory.d.ts +17 -7
  3. package/dist/adapters/factory.d.ts.map +1 -1
  4. package/dist/adapters/factory.js +61 -7
  5. package/dist/adapters/factory.js.map +1 -1
  6. package/dist/adapters/http.d.ts +50 -0
  7. package/dist/adapters/http.d.ts.map +1 -0
  8. package/dist/adapters/http.js +109 -0
  9. package/dist/adapters/http.js.map +1 -0
  10. package/dist/adapters/remoteMcp/adapter.d.ts +10 -1
  11. package/dist/adapters/remoteMcp/adapter.d.ts.map +1 -1
  12. package/dist/adapters/remoteMcp/adapter.js +26 -3
  13. package/dist/adapters/remoteMcp/adapter.js.map +1 -1
  14. package/dist/adapters/simplifyqa/adapter.d.ts +154 -0
  15. package/dist/adapters/simplifyqa/adapter.d.ts.map +1 -0
  16. package/dist/adapters/simplifyqa/adapter.js +1150 -0
  17. package/dist/adapters/simplifyqa/adapter.js.map +1 -0
  18. package/dist/adapters/simplifyqa/mapper.d.ts +63 -0
  19. package/dist/adapters/simplifyqa/mapper.d.ts.map +1 -0
  20. package/dist/adapters/simplifyqa/mapper.js +409 -0
  21. package/dist/adapters/simplifyqa/mapper.js.map +1 -0
  22. package/dist/adapters/types.d.ts +48 -1
  23. package/dist/adapters/types.d.ts.map +1 -1
  24. package/dist/adapters/walnut/adapter.d.ts +231 -0
  25. package/dist/adapters/walnut/adapter.d.ts.map +1 -0
  26. package/dist/adapters/walnut/adapter.js +1083 -0
  27. package/dist/adapters/walnut/adapter.js.map +1 -0
  28. package/dist/adapters/walnut/mapper.d.ts +29 -9
  29. package/dist/adapters/walnut/mapper.d.ts.map +1 -1
  30. package/dist/adapters/walnut/mapper.js +136 -24
  31. package/dist/adapters/walnut/mapper.js.map +1 -1
  32. package/dist/config.d.ts +28 -14
  33. package/dist/config.d.ts.map +1 -1
  34. package/dist/config.js +37 -19
  35. package/dist/config.js.map +1 -1
  36. package/dist/connection.d.ts +3 -2
  37. package/dist/connection.d.ts.map +1 -1
  38. package/dist/connection.js +36 -15
  39. package/dist/connection.js.map +1 -1
  40. package/dist/domain/types.d.ts +195 -1
  41. package/dist/domain/types.d.ts.map +1 -1
  42. package/dist/drafts/store.d.ts +4 -1
  43. package/dist/drafts/store.d.ts.map +1 -1
  44. package/dist/drafts/store.js +7 -2
  45. package/dist/drafts/store.js.map +1 -1
  46. package/dist/initAgents.d.ts.map +1 -1
  47. package/dist/initAgents.js +29 -12
  48. package/dist/initAgents.js.map +1 -1
  49. package/dist/requestConnection.d.ts +5 -3
  50. package/dist/requestConnection.d.ts.map +1 -1
  51. package/dist/requestConnection.js +11 -5
  52. package/dist/requestConnection.js.map +1 -1
  53. package/dist/server.d.ts.map +1 -1
  54. package/dist/server.js +25 -1
  55. package/dist/server.js.map +1 -1
  56. package/dist/tools/connection.tools.js +5 -5
  57. package/dist/tools/connection.tools.js.map +1 -1
  58. package/dist/tools/discovery.tools.d.ts.map +1 -1
  59. package/dist/tools/discovery.tools.js +93 -1
  60. package/dist/tools/discovery.tools.js.map +1 -1
  61. package/dist/tools/formulas.tools.d.ts +7 -0
  62. package/dist/tools/formulas.tools.d.ts.map +1 -0
  63. package/dist/tools/formulas.tools.js +56 -0
  64. package/dist/tools/formulas.tools.js.map +1 -0
  65. package/dist/tools/heal.tools.d.ts +17 -0
  66. package/dist/tools/heal.tools.d.ts.map +1 -0
  67. package/dist/tools/heal.tools.js +76 -0
  68. package/dist/tools/heal.tools.js.map +1 -0
  69. package/dist/tools/recording.tools.d.ts.map +1 -1
  70. package/dist/tools/recording.tools.js +28 -7
  71. package/dist/tools/recording.tools.js.map +1 -1
  72. package/dist/tools/run.tools.d.ts.map +1 -1
  73. package/dist/tools/run.tools.js +378 -37
  74. package/dist/tools/run.tools.js.map +1 -1
  75. package/dist/tools/storySync.tools.d.ts +66 -0
  76. package/dist/tools/storySync.tools.d.ts.map +1 -0
  77. package/dist/tools/storySync.tools.js +213 -0
  78. package/dist/tools/storySync.tools.js.map +1 -0
  79. package/dist/tools/testcase.tools.d.ts.map +1 -1
  80. package/dist/tools/testcase.tools.js +17 -2
  81. package/dist/tools/testcase.tools.js.map +1 -1
  82. package/dist/tools/testdata.tools.d.ts +7 -0
  83. package/dist/tools/testdata.tools.d.ts.map +1 -0
  84. package/dist/tools/testdata.tools.js +161 -0
  85. package/dist/tools/testdata.tools.js.map +1 -0
  86. package/package.json +1 -1
@@ -5,7 +5,63 @@ function describeError(e) {
5
5
  return e instanceof Error ? e.message : String(e);
6
6
  }
7
7
  function runnerLine(r) {
8
- return `- ${r.online ? '🟢' : '⚪'} ${r.name} \`${r.id}\`${r.status ? ` (${r.status})` : ''}`;
8
+ const host = r.os ? ` · ${r.os}` : '';
9
+ return `- ${r.online ? '🟢' : '⚪'} ${r.name}${host} \`${r.id}\`${r.status ? ` (${r.status})` : ''}`;
10
+ }
11
+ function localAgentLine(a) {
12
+ // Show the machine hostname next to the owner (like the product UI) so the user can tell apart
13
+ // several agents owned by the same person; the credential_id in backticks is for the tool call.
14
+ const host = a.host && a.host !== a.name ? ` · ${a.host}` : '';
15
+ return `- ${a.online ? '🟢' : '⚪'} ${a.name ?? a.id}${host} \`${a.id}\`${a.status ? ` (${a.status})` : ''}`;
16
+ }
17
+ /** One line per schedule for management listings — what it runs, cadence, where + pinned agent,
18
+ * browser, next run, status; the credential-free id in backticks is what the management tools take. */
19
+ function scheduleLine(s) {
20
+ const where = s.executionTarget === 'cloud_runner' ? 'cloud' : 'local';
21
+ const agent = s.agent ? ` → ${s.agent}` : '';
22
+ const br = s.browser ? ` · ${s.browser}` : '';
23
+ const next = s.nextRunAt ? ` · next ${s.nextRunAt}` : s.scheduledFor ? ` · at ${s.scheduledFor}` : '';
24
+ const paused = s.active === false ? ' [paused]' : '';
25
+ return `- ${s.target} — ${s.scheduleType}, ${where}${agent}${br}${next} · **${s.status}**${paused} \`${s.id}\``;
26
+ }
27
+ /** A schedule fires detached from any live session, so a LOCAL schedule must target a specific
28
+ * agent — there is no "your online agent" at fire time. Build the "pick an agent" message, offering
29
+ * ALL agents (online AND offline): a scheduled run can target an agent that is offline right now,
30
+ * because it runs when it fires — this mirrors the product's scheduler picker. */
31
+ async function localScheduleNeedsAgent(adapter) {
32
+ let list = '';
33
+ if (adapter.listLocalAgents) {
34
+ try {
35
+ const agents = await adapter.listLocalAgents();
36
+ list = agents.length
37
+ ? '\n\nAgents (a scheduled run can target an offline one — it runs when it fires):\n' +
38
+ agents.map(localAgentLine).join('\n')
39
+ : '\n\nNo local agents are registered to this project.';
40
+ }
41
+ catch { /* best-effort listing — the core message still stands */ }
42
+ }
43
+ return ('A LOCAL schedule runs detached from any live session, so it must target a specific agent. ' +
44
+ 'Call again with `agentId` set to a credential_id from local_agents.' + list);
45
+ }
46
+ /** A run-NOW to a specific LOCAL agent cannot target an offline one (mirrors the product UI, which
47
+ * offers only ONLINE agents for an immediate run). Returns an error message when the picked agent is
48
+ * known-offline, else null. Roster errors are swallowed — the backend still validates at reserve. */
49
+ async function localAgentOfflineForNow(adapter, agentId) {
50
+ if (!adapter.listLocalAgents)
51
+ return null;
52
+ try {
53
+ const agents = await adapter.listLocalAgents();
54
+ const picked = agents.find((a) => a.id === agentId);
55
+ if (picked && !picked.online) {
56
+ const online = agents.filter((a) => a.online);
57
+ return (`Agent \`${agentId}\`${picked.name ? ` (${picked.name})` : ''} is offline — a run-now needs an ONLINE agent. ` +
58
+ (online.length
59
+ ? 'Online now:\n' + online.map(localAgentLine).join('\n')
60
+ : 'No local agents are online right now — schedule it instead, or bring an agent online.'));
61
+ }
62
+ }
63
+ catch { /* roster unavailable — let the backend validate at reserve */ }
64
+ return null;
9
65
  }
10
66
  /** Human summary of a run's status. For a SUITE run `children` carries the per-test-case rollup and
11
67
  * `progress` counts TEST CASES; a single test-case run has neither (progress counts steps). */
@@ -45,32 +101,81 @@ export function registerRunTools(server, deps) {
45
101
  return err(describeError(e));
46
102
  }
47
103
  });
104
+ server.registerTool('local_agents', {
105
+ title: 'List local agents (and which are online)',
106
+ description: 'List the LOCAL agents registered to the connected project and which are online. Use this ' +
107
+ 'to show the user their local run options, or to pick a specific agent id (its credential_id) to ' +
108
+ 'pass as `agentId` to a LOCAL tc_run / suite_run. Requires a live connection.',
109
+ inputSchema: {},
110
+ annotations: { readOnlyHint: true },
111
+ }, async () => {
112
+ const adapter = deps.getAdapter();
113
+ if (!adapter)
114
+ return err(NOT_CONNECTED);
115
+ if (!adapter.listLocalAgents)
116
+ return err('This product has no local agents to list.');
117
+ try {
118
+ const agents = await adapter.listLocalAgents();
119
+ const online = agents.filter((a) => a.online);
120
+ if (!agents.length)
121
+ return ok('No local agents are registered to this project.', { agents: [] });
122
+ const text = `${agents.length} local agent${agents.length === 1 ? '' : 's'} · ${online.length} online:\n\n` +
123
+ agents.map(localAgentLine).join('\n');
124
+ return ok(text, { agents, online: online.length });
125
+ }
126
+ catch (e) {
127
+ return err(describeError(e));
128
+ }
129
+ });
48
130
  server.registerTool('tc_run', {
49
- title: 'Run a test case (local or cloud)',
50
- description: 'Execute ONE existing test case in the connected product. `mode` decides WHERE it runs:\n' +
51
- " • 'local' — the connected agent's own browser\n" +
52
- " • 'cloud' — an online cloud runner VM\n" +
53
- 'IF THE USER HAS NOT SAID local or cloud, ASK THEM before calling — do not guess. When mode is ' +
54
- 'omitted this tool refuses with that instruction. For cloud, if no runner is online it reports that ' +
55
- 'there are no active cloud runners (nothing is run). Returns the run id — poll run_status for the result.',
131
+ title: 'Run a test case (local or cloud; now or scheduled)',
132
+ description: 'Execute ONE existing test case in the connected product. ASK the user — never assume — and in ORDER ' +
133
+ '(this mirrors the product UI): (1) `mode` local/cloud, (2) `when` immediate/schedule, (3) for a ' +
134
+ 'schedule the start time + recurrence + timezone, (4) THEN offer the eligible agent/runner and pass ' +
135
+ "the pick. `mode` decides WHERE it runs:\n" +
136
+ " • 'local' — a local agent's own browser. Pass `agentId` from local_agents. For when:'immediate' only " +
137
+ "ONLINE agents are eligible (a run-now can't target an offline agent; omit to auto-pick your own online " +
138
+ "agent). For when:'schedule' ANY agent (online OR offline) is eligible and `agentId` is REQUIRED.\n" +
139
+ " • 'cloud' — an online cloud runner VM (ONLINE-only whether now or scheduled). Pass `cloudRunnerId` " +
140
+ 'from cloud_runners; for a schedule omit it to let the backend auto-pick a live VM at fire time.\n' +
141
+ 'IF THE USER HAS NOT SAID local or cloud, ASK — this tool refuses when `mode` is omitted. For cloud, if ' +
142
+ 'no runner is online it reports that there are no active cloud runners (nothing is run).\n' +
143
+ '`when` decides WHEN it runs (this tool REFUSES when `when` is omitted — ASK the user):\n' +
144
+ " • 'immediate' — dispatch now; returns the run id — poll run_status for the result.\n" +
145
+ " • 'schedule' — create a schedule instead (requires `scheduledFor`); ASK the start time, recurrence, " +
146
+ 'end date and timezone BEFORE offering an agent. Returns the schedule id.\n' +
147
+ 'NOTE: MANUAL test cases cannot be run or scheduled by an agent — the backend rejects them.',
56
148
  inputSchema: {
57
149
  tcId: z.string().describe('The test case id (or business key) to run.'),
58
- mode: z.enum(['local', 'cloud']).optional().describe("Where to run. REQUIRED in practice — ask the user if unstated."),
150
+ mode: z.enum(['local', 'cloud']).optional().describe("Where to run. REQUIRED — ASK the user if unstated (the tool refuses when omitted)."),
151
+ agentId: z.string().optional().describe("For local: a specific agent credential_id (from local_agents). when:'immediate' → must be an ONLINE agent (or omit to auto-pick your own online agent); when:'schedule' → REQUIRED, and may be an offline agent (it runs when it fires)."),
59
152
  environment: z.string().optional().describe('Environment id (Mongo id); a name is ignored and the project default is used.'),
60
- browser: z.string().optional().describe("Browser, default 'chromium' (bundled + isolated). Others: 'chrome'/'msedge' (installed channel), 'firefox', 'webkit'."),
61
- headless: z.boolean().optional().describe('Headless. Defaults: cloud=true, local=false.'),
62
- cloudRunnerId: z.string().optional().describe('For cloud: a specific runner id (from cloud_runners). Omit to auto-pick an online one.'),
153
+ browser: z.string().optional().describe("Browser, default 'chromium' (bundled + isolated). Others: 'chrome'/'msedge' (installed channel), 'firefox', 'webkit'. NOTE: a schedule accepts only chromium/msedge/firefox/webkit."),
154
+ headless: z.boolean().optional().describe('Headless. Defaults: cloud=true, local=false. (Immediate runs only.)'),
155
+ cloudRunnerId: z.string().optional().describe("For cloud: a specific ONLINE runner id (from cloud_runners). For when:'schedule' omit to auto-pick a live VM at fire time."),
156
+ deviceId: z.string().optional().describe("REQUIRED for ANDROID/IOS test cases — the target device id. LOCAL: adb serial or emulator name. CLOUD: the marketplace device name. Enumerate with android_list_devices."),
157
+ when: z.enum(['immediate', 'schedule']).optional().describe("When to run — REQUIRED, ASK the user if unstated (the tool refuses when omitted). 'immediate' dispatches now; 'schedule' creates a schedule (needs scheduledFor)."),
158
+ scheduledFor: z.string().optional().describe("REQUIRED for when:'schedule' — ISO datetime of the first/only run (e.g. '2026-08-20T09:00:00Z')."),
159
+ scheduleType: z.enum(['once', 'hourly', 'daily', 'weekdays', 'weekly', 'monthly']).optional().describe("Recurrence for a schedule. Default 'once'. hourly/daily/weekdays require an endDate."),
160
+ endDate: z.string().optional().describe('For a recurring schedule — ISO end date (required for hourly/daily/weekdays).'),
161
+ timezone: z.string().optional().describe("IANA timezone for a schedule (e.g. 'Asia/Kolkata'). Default 'UTC'."),
63
162
  },
64
163
  annotations: { readOnlyHint: false },
65
- }, async ({ tcId, mode, environment, browser, headless, cloudRunnerId }) => {
164
+ }, async ({ tcId, mode, agentId, environment, browser, headless, cloudRunnerId, deviceId, when, scheduledFor, scheduleType, endDate, timezone }) => {
66
165
  const adapter = deps.getAdapter();
67
166
  if (!adapter)
68
167
  return err(NOT_CONNECTED);
69
168
  if (!mode) {
70
169
  return err("Specify where to run: call tc_run again with mode: 'local' or 'cloud'. " +
71
- 'If the user has not said which, ask them first — local runs on the connected agent, ' +
170
+ 'If the user has not said which, ask them first — local runs on a local agent, ' +
72
171
  'cloud runs on an online cloud runner VM.');
73
172
  }
173
+ // Never assume now-vs-scheduled — it decides which agents are eligible (online-only for now,
174
+ // online+offline for a local schedule) and, for a schedule, the start time asked next.
175
+ if (!when) {
176
+ return err("Specify WHEN to run: call tc_run again with when: 'immediate' (run now) or when: 'schedule' " +
177
+ '(create a schedule). If the user has not said, ask them first — never assume.');
178
+ }
74
179
  let resolvedRunner;
75
180
  if (mode === 'cloud') {
76
181
  if (!adapter.listCloudRunners)
@@ -82,6 +187,7 @@ export function registerRunTools(server, deps) {
82
187
  catch (e) {
83
188
  return err(describeError(e));
84
189
  }
190
+ // Cloud is ONLINE-only whether now or scheduled (a schedule pin to an offline VM is rejected).
85
191
  const online = runners.filter((r) => r.online);
86
192
  if (!online.length) {
87
193
  return err('Currently there are no active cloud runners in your project.');
@@ -92,22 +198,69 @@ export function registerRunTools(server, deps) {
92
198
  return err(`Cloud runner "${cloudRunnerId}" is not online. Online now:\n` + online.map(runnerLine).join('\n'));
93
199
  }
94
200
  }
95
- else {
96
- resolvedRunner = online[0]; // auto-pick the first online runner
201
+ else if (when === 'immediate') {
202
+ resolvedRunner = online[0]; // run-now with no pick → auto-pick the first online runner
203
+ }
204
+ // when:'schedule' with no cloudRunnerId → leave unpinned; the backend auto-picks a live VM at fire time.
205
+ }
206
+ // LOCAL run-NOW to a specific agent must be online (can't dispatch to an offline agent). A local
207
+ // SCHEDULE may target an offline agent — that path is handled in the schedule branch below.
208
+ if (mode === 'local' && when === 'immediate' && agentId) {
209
+ const offlineMsg = await localAgentOfflineForNow(adapter, agentId);
210
+ if (offlineMsg)
211
+ return err(offlineMsg);
212
+ }
213
+ if (when === 'schedule') {
214
+ if (!adapter.createSchedule)
215
+ return err('This product does not support scheduling runs.');
216
+ if (!scheduledFor) {
217
+ return err("Scheduling needs a start time: call tc_run again with when: 'schedule' and scheduledFor as an " +
218
+ "ISO datetime (e.g. '2026-08-20T09:00:00Z'). Ask the user when the run should start (and the " +
219
+ 'recurrence, end date and timezone if any).');
220
+ }
221
+ // A schedule fires detached from any live session — a LOCAL schedule must pin a specific agent.
222
+ if (mode === 'local' && !agentId)
223
+ return err(await localScheduleNeedsAgent(adapter));
224
+ // Cloud: pin the runner's CREDENTIAL only when the user explicitly picked one; otherwise leave
225
+ // it unpinned so the backend auto-picks a live VM at fire time (don't freeze today's online[0]).
226
+ const pinnedRunner = mode === 'cloud' && cloudRunnerId ? resolvedRunner : undefined;
227
+ const schedOpts = {
228
+ mode,
229
+ scheduledFor,
230
+ ...(mode === 'local' && agentId ? { agentId } : {}),
231
+ ...(pinnedRunner?.credentialId ? { cloudRunnerCredentialId: pinnedRunner.credentialId } : {}),
232
+ ...(browser !== undefined ? { browser } : {}),
233
+ ...(environment !== undefined ? { environmentId: environment } : {}),
234
+ ...(scheduleType !== undefined ? { scheduleType } : {}),
235
+ ...(endDate !== undefined ? { endDate } : {}),
236
+ ...(timezone !== undefined ? { timezone } : {}),
237
+ };
238
+ try {
239
+ const sched = await adapter.createSchedule({ tcId }, schedOpts);
240
+ const next = sched.nextRunAt ? ` · first run ${sched.nextRunAt}` : '';
241
+ const where = mode === 'cloud'
242
+ ? (pinnedRunner ? `cloud runner **${pinnedRunner.name}**` : 'cloud (auto-pick a live VM at run time)')
243
+ : `agent \`${agentId}\``;
244
+ return ok(`Scheduled ${tcId} (${scheduleType ?? 'once'}, ${mode}) for ${scheduledFor}${next} → ${where}. Schedule id \`${sched.id}\`.`, { schedule: sched, mode, when: 'schedule', ...(pinnedRunner ? { runner: pinnedRunner } : {}) });
245
+ }
246
+ catch (e) {
247
+ return err(describeError(e));
97
248
  }
98
249
  }
99
250
  const opts = {
100
251
  mode,
252
+ ...(mode === 'local' && agentId ? { agentId } : {}),
101
253
  ...(environment !== undefined ? { environment } : {}),
102
254
  ...(browser !== undefined ? { browser } : {}),
103
255
  ...(headless !== undefined ? { headless } : {}),
104
256
  ...(resolvedRunner ? { cloudRunnerId: resolvedRunner.id } : {}),
257
+ ...(deviceId !== undefined ? { deviceId } : {}),
105
258
  };
106
259
  try {
107
260
  const run = await adapter.startRun({ tcId }, opts);
108
261
  const where = mode === 'cloud'
109
262
  ? `on cloud runner ${resolvedRunner ? `**${resolvedRunner.name}**` : ''}`
110
- : 'locally on the connected agent';
263
+ : `locally${agentId ? ` on agent \`${agentId}\`` : ' on your online agent'}`;
111
264
  return ok(`Started ${tcId} ${where}. Run id \`${run.runId}\` — poll run_status({ runId: "${run.runId}" }) for progress.`, { run, mode, ...(resolvedRunner ? { runner: resolvedRunner } : {}) });
112
265
  }
113
266
  catch (e) {
@@ -115,36 +268,57 @@ export function registerRunTools(server, deps) {
115
268
  }
116
269
  });
117
270
  server.registerTool('suite_run', {
118
- title: 'Run a test suite (local or cloud)',
271
+ title: 'Run a test suite (local or cloud; now or scheduled)',
119
272
  description: 'Execute an existing test SUITE — all its member test cases, in order — in the connected product. ' +
120
- '`mode` decides WHERE it runs:\n' +
121
- " • 'local' — the connected agent's own browser (always serial)\n" +
122
- " • 'cloud' — online cloud runner VM(s)\n" +
123
- 'IF THE USER HAS NOT SAID local or cloud, ASK THEM before calling — do not guess (this tool refuses ' +
124
- 'when mode is omitted). For cloud, if no runner is online it reports that there are no active cloud ' +
125
- 'runners (nothing is run). Returns the suite-run id — poll run_status for progress (it reports ' +
126
- 'per-test-case results under `children`) and run_stop to cancel.',
273
+ 'ASK the user — never assume — and in ORDER (mirrors the product UI): (1) `mode` local/cloud, (2) `when` ' +
274
+ 'immediate/schedule, (3) for a schedule the start time + recurrence + timezone, (4) THEN offer the ' +
275
+ 'eligible agent/runner. `mode` decides WHERE it runs:\n' +
276
+ " • 'local' — a local agent's own browser, always serial. Pass `agentId` from local_agents. For " +
277
+ "when:'immediate' only ONLINE agents are eligible (omit to auto-pick your own online agent); for " +
278
+ "when:'schedule' ANY agent (online OR offline) is eligible and `agentId` is REQUIRED.\n" +
279
+ " • 'cloud' — online cloud runner VM(s) (ONLINE-only whether now or scheduled). Pass `cloudRunnerId` " +
280
+ 'from cloud_runners; for a schedule omit it to auto-pick a live VM at fire time.\n' +
281
+ 'IF THE USER HAS NOT SAID local or cloud, ASK — this tool refuses when mode is omitted. For cloud, if no ' +
282
+ 'runner is online it reports that there are no active cloud runners (nothing is run).\n' +
283
+ '`when` decides WHEN it runs (this tool REFUSES when `when` is omitted — ASK the user):\n' +
284
+ " • 'immediate' — dispatch now; returns the suite-run id — poll run_status for progress " +
285
+ '(per-test-case results under `children`) and run_stop to cancel.\n' +
286
+ " • 'schedule' — create a schedule instead (requires `scheduledFor`); ASK the start time, recurrence, " +
287
+ 'end date and timezone BEFORE offering an agent. Returns the schedule id.\n' +
288
+ 'NOTE: a suite of only MANUAL test cases cannot be run or scheduled by an agent — the backend rejects it.',
127
289
  inputSchema: {
128
290
  suiteId: z.string().describe('The suite id to run (from suite_list / suite_get).'),
129
- mode: z.enum(['local', 'cloud']).optional().describe('Where to run. REQUIRED in practice — ask the user if unstated.'),
291
+ mode: z.enum(['local', 'cloud']).optional().describe('Where to run. REQUIRED — ASK the user if unstated (the tool refuses when omitted).'),
292
+ agentId: z.string().optional().describe("For local: a specific agent credential_id (from local_agents). when:'immediate' → must be ONLINE (or omit to auto-pick your own online agent); when:'schedule' → REQUIRED, may be offline."),
130
293
  environment: z.string().optional().describe('Environment id (Mongo id); a name is ignored and the project default is used.'),
131
- browser: z.string().optional().describe("Browser, default 'chromium'. Others: 'chrome'/'msedge', 'firefox', 'webkit'."),
132
- headless: z.boolean().optional().describe('Headless. Defaults: cloud=true, local=false.'),
133
- cloudRunnerId: z.string().optional().describe('For cloud: a specific runner id (from cloud_runners). Omit to auto-pick an online one.'),
134
- strategy: z.enum(['serial', 'batch', 'dynamic']).optional().describe('Cloud dispatch order across the suite. Default serial; local is always serial.'),
135
- maxConcurrent: z.number().int().positive().optional().describe('Cloud batch/dynamic only — max test cases running at once.'),
136
- terminateOnFailure: z.boolean().optional().describe('Stop dispatching remaining test cases after the first failure.'),
294
+ browser: z.string().optional().describe("Browser, default 'chromium'. Others: 'chrome'/'msedge', 'firefox', 'webkit'. NOTE: a schedule accepts only chromium/msedge/firefox/webkit."),
295
+ headless: z.boolean().optional().describe('Headless. Defaults: cloud=true, local=false. (Immediate runs only.)'),
296
+ cloudRunnerId: z.string().optional().describe("For cloud: a specific ONLINE runner id (from cloud_runners). For when:'schedule' omit to auto-pick a live VM at fire time."),
297
+ strategy: z.enum(['serial', 'batch', 'dynamic']).optional().describe('Cloud dispatch order across the suite (immediate runs). Default serial; local is always serial.'),
298
+ maxConcurrent: z.number().int().positive().optional().describe('Cloud batch/dynamic only — max test cases running at once (immediate runs).'),
299
+ terminateOnFailure: z.boolean().optional().describe('Stop dispatching remaining test cases after the first failure (immediate runs).'),
300
+ when: z.enum(['immediate', 'schedule']).optional().describe("When to run — REQUIRED, ASK the user if unstated (the tool refuses when omitted). 'immediate' dispatches now; 'schedule' creates a schedule (needs scheduledFor)."),
301
+ scheduledFor: z.string().optional().describe("REQUIRED for when:'schedule' — ISO datetime of the first/only run (e.g. '2026-08-20T09:00:00Z')."),
302
+ scheduleType: z.enum(['once', 'hourly', 'daily', 'weekdays', 'weekly', 'monthly']).optional().describe("Recurrence for a schedule. Default 'once'. hourly/daily/weekdays require an endDate."),
303
+ endDate: z.string().optional().describe('For a recurring schedule — ISO end date (required for hourly/daily/weekdays).'),
304
+ timezone: z.string().optional().describe("IANA timezone for a schedule (e.g. 'Asia/Kolkata'). Default 'UTC'."),
137
305
  },
138
306
  annotations: { readOnlyHint: false },
139
- }, async ({ suiteId, mode, environment, browser, headless, cloudRunnerId, strategy, maxConcurrent, terminateOnFailure }) => {
307
+ }, async ({ suiteId, mode, agentId, environment, browser, headless, cloudRunnerId, strategy, maxConcurrent, terminateOnFailure, when, scheduledFor, scheduleType, endDate, timezone }) => {
140
308
  const adapter = deps.getAdapter();
141
309
  if (!adapter)
142
310
  return err(NOT_CONNECTED);
143
311
  if (!mode) {
144
312
  return err("Specify where to run: call suite_run again with mode: 'local' or 'cloud'. " +
145
- 'If the user has not said which, ask them first — local runs on the connected agent, ' +
313
+ 'If the user has not said which, ask them first — local runs on a local agent, ' +
146
314
  'cloud runs on online cloud runner VM(s).');
147
315
  }
316
+ // Never assume now-vs-scheduled — it decides which agents are eligible (online-only for now,
317
+ // online+offline for a local schedule) and, for a schedule, the start time asked next.
318
+ if (!when) {
319
+ return err("Specify WHEN to run: call suite_run again with when: 'immediate' (run now) or when: 'schedule' " +
320
+ '(create a schedule). If the user has not said, ask them first — never assume.');
321
+ }
148
322
  let resolvedRunner;
149
323
  if (mode === 'cloud') {
150
324
  if (!adapter.listCloudRunners)
@@ -156,6 +330,7 @@ export function registerRunTools(server, deps) {
156
330
  catch (e) {
157
331
  return err(describeError(e));
158
332
  }
333
+ // Cloud is ONLINE-only whether now or scheduled (a schedule pin to an offline VM is rejected).
159
334
  const online = runners.filter((r) => r.online);
160
335
  if (!online.length) {
161
336
  return err('Currently there are no active cloud runners in your project.');
@@ -166,12 +341,59 @@ export function registerRunTools(server, deps) {
166
341
  return err(`Cloud runner "${cloudRunnerId}" is not online. Online now:\n` + online.map(runnerLine).join('\n'));
167
342
  }
168
343
  }
169
- else {
170
- resolvedRunner = online[0]; // auto-pick the first online runner
344
+ else if (when === 'immediate') {
345
+ resolvedRunner = online[0]; // run-now with no pick → auto-pick the first online runner
346
+ }
347
+ // when:'schedule' with no cloudRunnerId → leave unpinned; the backend auto-picks a live VM at fire time.
348
+ }
349
+ // LOCAL run-NOW to a specific agent must be online (can't dispatch to an offline agent). A local
350
+ // SCHEDULE may target an offline agent — that path is handled in the schedule branch below.
351
+ if (mode === 'local' && when === 'immediate' && agentId) {
352
+ const offlineMsg = await localAgentOfflineForNow(adapter, agentId);
353
+ if (offlineMsg)
354
+ return err(offlineMsg);
355
+ }
356
+ if (when === 'schedule') {
357
+ if (!adapter.createSchedule)
358
+ return err('This product does not support scheduling runs.');
359
+ if (!scheduledFor) {
360
+ return err("Scheduling needs a start time: call suite_run again with when: 'schedule' and scheduledFor as an " +
361
+ "ISO datetime (e.g. '2026-08-20T09:00:00Z'). Ask the user when the run should start (and the " +
362
+ 'recurrence, end date and timezone if any). NOTE: strategy/maxConcurrent/terminateOnFailure are ' +
363
+ "immediate-run only — a schedule uses the suite's own settings.");
364
+ }
365
+ // A schedule fires detached from any live session — a LOCAL schedule must pin a specific agent.
366
+ if (mode === 'local' && !agentId)
367
+ return err(await localScheduleNeedsAgent(adapter));
368
+ // Cloud: pin the runner's CREDENTIAL only when the user explicitly picked one; otherwise leave
369
+ // it unpinned so the backend auto-picks a live VM at fire time (don't freeze today's online[0]).
370
+ const pinnedRunner = mode === 'cloud' && cloudRunnerId ? resolvedRunner : undefined;
371
+ const schedOpts = {
372
+ mode,
373
+ scheduledFor,
374
+ ...(mode === 'local' && agentId ? { agentId } : {}),
375
+ ...(pinnedRunner?.credentialId ? { cloudRunnerCredentialId: pinnedRunner.credentialId } : {}),
376
+ ...(browser !== undefined ? { browser } : {}),
377
+ ...(environment !== undefined ? { environmentId: environment } : {}),
378
+ ...(scheduleType !== undefined ? { scheduleType } : {}),
379
+ ...(endDate !== undefined ? { endDate } : {}),
380
+ ...(timezone !== undefined ? { timezone } : {}),
381
+ };
382
+ try {
383
+ const sched = await adapter.createSchedule({ suiteId }, schedOpts);
384
+ const next = sched.nextRunAt ? ` · first run ${sched.nextRunAt}` : '';
385
+ const where = mode === 'cloud'
386
+ ? (pinnedRunner ? `cloud runner **${pinnedRunner.name}**` : 'cloud (auto-pick a live VM at run time)')
387
+ : `agent \`${agentId}\``;
388
+ return ok(`Scheduled suite ${suiteId} (${scheduleType ?? 'once'}, ${mode}) for ${scheduledFor}${next} → ${where}. Schedule id \`${sched.id}\`.`, { schedule: sched, mode, when: 'schedule', ...(pinnedRunner ? { runner: pinnedRunner } : {}) });
389
+ }
390
+ catch (e) {
391
+ return err(describeError(e));
171
392
  }
172
393
  }
173
394
  const opts = {
174
395
  mode,
396
+ ...(mode === 'local' && agentId ? { agentId } : {}),
175
397
  ...(environment !== undefined ? { environment } : {}),
176
398
  ...(browser !== undefined ? { browser } : {}),
177
399
  ...(headless !== undefined ? { headless } : {}),
@@ -184,7 +406,7 @@ export function registerRunTools(server, deps) {
184
406
  const run = await adapter.startRun({ suiteId }, opts);
185
407
  const where = mode === 'cloud'
186
408
  ? `on cloud runner ${resolvedRunner ? `**${resolvedRunner.name}**` : ''}`
187
- : 'locally on the connected agent';
409
+ : `locally${agentId ? ` on agent \`${agentId}\`` : ' on your online agent'}`;
188
410
  return ok(`Started suite ${suiteId} ${where}. Run id \`${run.runId}\` — poll run_status({ runId: "${run.runId}" }) for progress.`, { run, mode, ...(resolvedRunner ? { runner: resolvedRunner } : {}) });
189
411
  }
190
412
  catch (e) {
@@ -226,5 +448,124 @@ export function registerRunTools(server, deps) {
226
448
  return err(describeError(e));
227
449
  }
228
450
  });
451
+ server.registerTool('schedule_list', {
452
+ title: 'List schedules',
453
+ description: 'List the scheduled runs in the connected project — each with WHAT it runs (test case / suite), ' +
454
+ 'its cadence, next run time, status (scheduled / running / paused / cancelled), where it runs + the ' +
455
+ 'pinned agent, and its browser. Use this to find a schedule to edit, pause/resume, cancel, or delete. ' +
456
+ 'Requires a live connection.',
457
+ inputSchema: {},
458
+ annotations: { readOnlyHint: true },
459
+ }, async () => {
460
+ const adapter = deps.getAdapter();
461
+ if (!adapter)
462
+ return err(NOT_CONNECTED);
463
+ if (!adapter.listSchedules)
464
+ return err('This product does not support listing schedules.');
465
+ try {
466
+ const schedules = await adapter.listSchedules();
467
+ if (!schedules.length)
468
+ return ok('No schedules in this project.', { schedules: [] });
469
+ const text = `${schedules.length} schedule${schedules.length === 1 ? '' : 's'}:\n\n` +
470
+ schedules.map(scheduleLine).join('\n');
471
+ return ok(text, { schedules });
472
+ }
473
+ catch (e) {
474
+ return err(describeError(e));
475
+ }
476
+ });
477
+ server.registerTool('schedule_update', {
478
+ title: 'Edit a schedule',
479
+ description: "Change a schedule's time / recurrence / end date / timezone / browser / environment, or RE-PIN its " +
480
+ 'agent. Pass `scheduleId` (from schedule_list) and ONLY the fields to change. To re-pin: ' +
481
+ "mode:'local' + `agentId` (from local_agents), or mode:'cloud' + a runner's `cloudRunnerCredentialId` " +
482
+ '(the `credentialId` from cloud_runners). Requires a live connection.',
483
+ inputSchema: {
484
+ scheduleId: z.string().describe('The schedule id (from schedule_list).'),
485
+ scheduledFor: z.string().optional().describe('New start / next-run ISO datetime.'),
486
+ scheduleType: z.enum(['once', 'hourly', 'daily', 'weekdays', 'weekly', 'monthly']).optional().describe('New recurrence.'),
487
+ endDate: z.string().optional().describe('New ISO end date (for recurring schedules).'),
488
+ timezone: z.string().optional().describe("New IANA timezone (e.g. 'Asia/Kolkata')."),
489
+ browser: z.enum(['chromium', 'msedge', 'firefox', 'webkit']).optional().describe('New browser (schedules accept chromium/msedge/firefox/webkit, not chrome).'),
490
+ environment: z.string().optional().describe('New environment id (Mongo id).'),
491
+ mode: z.enum(['local', 'cloud']).optional().describe('Re-pin target: pair with agentId (local) or cloudRunnerCredentialId (cloud).'),
492
+ agentId: z.string().optional().describe('Local re-pin: an agent credential_id from local_agents.'),
493
+ cloudRunnerCredentialId: z.string().optional().describe("Cloud re-pin: a runner's credentialId from cloud_runners."),
494
+ },
495
+ annotations: { readOnlyHint: false },
496
+ }, async ({ scheduleId, scheduledFor, scheduleType, endDate, timezone, browser, environment, mode, agentId, cloudRunnerCredentialId }) => {
497
+ const adapter = deps.getAdapter();
498
+ if (!adapter)
499
+ return err(NOT_CONNECTED);
500
+ if (!adapter.updateSchedule)
501
+ return err('This product does not support editing schedules.');
502
+ const changes = {
503
+ ...(scheduledFor !== undefined ? { scheduledFor } : {}),
504
+ ...(scheduleType !== undefined ? { scheduleType } : {}),
505
+ ...(endDate !== undefined ? { endDate } : {}),
506
+ ...(timezone !== undefined ? { timezone } : {}),
507
+ ...(browser !== undefined ? { browser } : {}),
508
+ ...(environment !== undefined ? { environmentId: environment } : {}),
509
+ ...(mode !== undefined ? { mode } : {}),
510
+ ...(agentId !== undefined ? { agentId } : {}),
511
+ ...(cloudRunnerCredentialId !== undefined ? { cloudRunnerCredentialId } : {}),
512
+ };
513
+ if (Object.keys(changes).length === 0) {
514
+ return err('Nothing to change — pass at least one field to edit (e.g. scheduledFor, scheduleType, browser, or a re-pin via mode + agentId/cloudRunnerCredentialId).');
515
+ }
516
+ try {
517
+ const ref = await adapter.updateSchedule(scheduleId, changes);
518
+ return ok(`Updated schedule \`${ref.id}\`${ref.nextRunAt ? ` · next run ${ref.nextRunAt}` : ''}.`, { schedule: ref });
519
+ }
520
+ catch (e) {
521
+ return err(describeError(e));
522
+ }
523
+ });
524
+ server.registerTool('schedule_control', {
525
+ title: 'Pause / resume / cancel a schedule',
526
+ description: "Change a schedule's state: `pause` (stop it firing but keep it — reversible with `resume`), " +
527
+ '`resume` (re-enable a paused schedule), or `cancel` (stop its pending / live run). To remove a ' +
528
+ 'schedule entirely, use schedule_delete instead. Requires a live connection.',
529
+ inputSchema: {
530
+ scheduleId: z.string().describe('The schedule id (from schedule_list).'),
531
+ action: z.enum(['pause', 'resume', 'cancel']).describe('pause / resume / cancel.'),
532
+ },
533
+ annotations: { readOnlyHint: false },
534
+ }, async ({ scheduleId, action }) => {
535
+ const adapter = deps.getAdapter();
536
+ if (!adapter)
537
+ return err(NOT_CONNECTED);
538
+ if (!adapter.controlSchedule)
539
+ return err('This product does not support pausing / resuming / cancelling schedules.');
540
+ try {
541
+ const ref = await adapter.controlSchedule(scheduleId, action);
542
+ const verb = action === 'pause' ? 'Paused' : action === 'resume' ? 'Resumed' : 'Cancelled';
543
+ return ok(`${verb} schedule \`${ref.id}\`${ref.status ? ` · status ${ref.status}` : ''}.`, { schedule: ref });
544
+ }
545
+ catch (e) {
546
+ return err(describeError(e));
547
+ }
548
+ });
549
+ server.registerTool('schedule_delete', {
550
+ title: 'Delete a schedule',
551
+ description: 'Permanently DELETE a schedule (and tear down any run it currently owns). This cannot be undone — ' +
552
+ 'to only stop it temporarily use schedule_control (pause / cancel). CONFIRM with the user before ' +
553
+ 'deleting. Requires a live connection.',
554
+ inputSchema: { scheduleId: z.string().describe('The schedule id (from schedule_list).') },
555
+ annotations: { readOnlyHint: false, destructiveHint: true },
556
+ }, async ({ scheduleId }) => {
557
+ const adapter = deps.getAdapter();
558
+ if (!adapter)
559
+ return err(NOT_CONNECTED);
560
+ if (!adapter.deleteSchedule)
561
+ return err('This product does not support deleting schedules.');
562
+ try {
563
+ await adapter.deleteSchedule(scheduleId);
564
+ return ok(`Deleted schedule \`${scheduleId}\`.`);
565
+ }
566
+ catch (e) {
567
+ return err(describeError(e));
568
+ }
569
+ });
229
570
  }
230
571
  //# sourceMappingURL=run.tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.tools.js","sourceRoot":"","sources":["../../src/tools/run.tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.tools.js","sourceRoot":"","sources":["../../src/tools/run.tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAc1C,MAAM,aAAa,GACjB,+HAA+H,CAAC;AAElI,SAAS,aAAa,CAAC,CAAU;IAC/B,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,UAAU,CAAC,CAAc;IAChC,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACtG,CAAC;AAED,SAAS,cAAc,CAAC,CAAa;IACnC,+FAA+F;IAC/F,gGAAgG;IAChG,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC9G,CAAC;AAED;wGACwG;AACxG,SAAS,YAAY,CAAC,CAAe;IACnC,MAAM,KAAK,GAAG,CAAC,CAAC,eAAe,KAAK,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACvE,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtG,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,OAAO,KAAK,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,YAAY,KAAK,KAAK,GAAG,KAAK,GAAG,EAAE,GAAG,IAAI,QAAQ,CAAC,CAAC,MAAM,KAAK,MAAM,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC;AAClH,CAAC;AAED;;;mFAGmF;AACnF,KAAK,UAAU,uBAAuB,CAAC,OAAwB;IAC7D,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC;YAC/C,IAAI,GAAG,MAAM,CAAC,MAAM;gBAClB,CAAC,CAAC,mFAAmF;oBACnF,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBACvC,CAAC,CAAC,qDAAqD,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC,CAAC,yDAAyD,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,CACL,4FAA4F;QAC5F,qEAAqE,GAAG,IAAI,CAC7E,CAAC;AACJ,CAAC;AAED;;sGAEsG;AACtG,KAAK,UAAU,uBAAuB,CAAC,OAAwB,EAAE,OAAe;IAC9E,IAAI,CAAC,OAAO,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;QACpD,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC9C,OAAO,CACL,WAAW,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,iDAAiD;gBAC9G,CAAC,MAAM,CAAC,MAAM;oBACZ,CAAC,CAAC,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;oBACzD,CAAC,CAAC,uFAAuF,CAAC,CAC7F,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,8DAA8D,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC;AACd,CAAC;AAED;gGACgG;AAChG,SAAS,UAAU,CAAC,CAAY;IAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC;IACjD,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACnF,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,MAAM,IAAI,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAChI,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM;QAC7B,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACvH,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,OAAO,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,KAAK,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,IAAkB;IACpE,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,2CAA2C;QAClD,WAAW,EACT,+FAA+F;YAC/F,6GAA6G;QAC/G,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,IAAI,EAAE;QACT,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,gBAAgB;YAAE,OAAO,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAChF,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC;YACjD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,CAAC,OAAO,CAAC,MAAM;gBAAE,OAAO,EAAE,CAAC,kDAAkD,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YACpG,MAAM,IAAI,GACR,GAAG,OAAO,CAAC,MAAM,gBAAgB,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,cAAc;gBACjG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,0CAA0C;QACjD,WAAW,EACT,2FAA2F;YAC3F,kGAAkG;YAClG,8EAA8E;QAChF,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,IAAI,EAAE;QACT,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,eAAe;YAAE,OAAO,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACtF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,MAAM;gBAAE,OAAO,EAAE,CAAC,iDAAiD,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;YACjG,MAAM,IAAI,GACR,GAAG,MAAM,CAAC,MAAM,eAAe,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,cAAc;gBAC9F,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,QAAQ,EACR;QACE,KAAK,EAAE,oDAAoD;QAC3D,WAAW,EACT,sGAAsG;YACtG,kGAAkG;YAClG,qGAAqG;YACrG,2CAA2C;YAC3C,yGAAyG;YACzG,yGAAyG;YACzG,oGAAoG;YACpG,uGAAuG;YACvG,mGAAmG;YACnG,yGAAyG;YACzG,2FAA2F;YAC3F,0FAA0F;YAC1F,wFAAwF;YACxF,wGAAwG;YACxG,4EAA4E;YAC5E,4FAA4F;QAC9F,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;YACvE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oFAAoF,CAAC;YAC1I,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0OAA0O,CAAC;YACnR,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+EAA+E,CAAC;YAC5H,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qLAAqL,CAAC;YAC9N,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qEAAqE,CAAC;YAChH,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4HAA4H,CAAC;YAC3K,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0KAA0K,CAAC;YACpN,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mKAAmK,CAAC;YAChO,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kGAAkG,CAAC;YAChJ,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sFAAsF,CAAC;YAC9L,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+EAA+E,CAAC;YACxH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oEAAoE,CAAC;SAC/G;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;KACrC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC9I,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC;QAExC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,GAAG,CACR,yEAAyE;gBACvE,gFAAgF;gBAChF,0CAA0C,CAC7C,CAAC;QACJ,CAAC;QACD,6FAA6F;QAC7F,uFAAuF;QACvF,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,GAAG,CACR,8FAA8F;gBAC5F,+EAA+E,CAClF,CAAC;QACJ,CAAC;QAED,IAAI,cAAuC,CAAC;QAC5C,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,CAAC,gBAAgB;gBAAE,OAAO,GAAG,CAAC,4DAA4D,CAAC,CAAC;YACxG,IAAI,OAAsB,CAAC;YAC3B,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,CAAC;YACD,+FAA+F;YAC/F,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,GAAG,CAAC,8DAA8D,CAAC,CAAC;YAC7E,CAAC;YACD,IAAI,aAAa,EAAE,CAAC;gBAClB,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,aAAa,CAAC,CAAC;gBAC5D,IAAI,CAAC,cAAc,EAAE,CAAC;oBACpB,OAAO,GAAG,CACR,iBAAiB,aAAa,gCAAgC,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACnG,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;gBAChC,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,2DAA2D;YACzF,CAAC;YACD,yGAAyG;QAC3G,CAAC;QAED,iGAAiG;QACjG,4FAA4F;QAC5F,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,WAAW,IAAI,OAAO,EAAE,CAAC;YACxD,MAAM,UAAU,GAAG,MAAM,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACnE,IAAI,UAAU;gBAAE,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,cAAc;gBAAE,OAAO,GAAG,CAAC,gDAAgD,CAAC,CAAC;YAC1F,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,GAAG,CACR,gGAAgG;oBAC9F,8FAA8F;oBAC9F,4CAA4C,CAC/C,CAAC;YACJ,CAAC;YACD,gGAAgG;YAChG,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,OAAO;gBAAE,OAAO,GAAG,CAAC,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;YACrF,+FAA+F;YAC/F,iGAAiG;YACjG,MAAM,YAAY,GAAG,IAAI,KAAK,OAAO,IAAI,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;YACpF,MAAM,SAAS,GAAoB;gBACjC,IAAI;gBACJ,YAAY;gBACZ,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnD,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,uBAAuB,EAAE,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7F,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpE,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvD,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChD,CAAC;YACF,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;gBAChE,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtE,MAAM,KAAK,GAAG,IAAI,KAAK,OAAO;oBAC5B,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB,YAAY,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,yCAAyC,CAAC;oBACtG,CAAC,CAAC,WAAW,OAAO,IAAI,CAAC;gBAC3B,OAAO,EAAE,CACP,aAAa,IAAI,KAAK,YAAY,IAAI,MAAM,KAAK,IAAI,SAAS,YAAY,GAAG,IAAI,MAAM,KAAK,mBAAmB,KAAK,CAAC,EAAE,KAAK,EAC5H,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAC/F,CAAC;YACJ,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAe;YACvB,IAAI;YACJ,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChD,CAAC;QACF,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;YACnD,MAAM,KAAK,GACT,IAAI,KAAK,OAAO;gBACd,CAAC,CAAC,mBAAmB,cAAc,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBACzE,CAAC,CAAC,UAAU,OAAO,CAAC,CAAC,CAAC,eAAe,OAAO,IAAI,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC;YACjF,OAAO,EAAE,CACP,WAAW,IAAI,IAAI,KAAK,cAAc,GAAG,CAAC,KAAK,kCAAkC,GAAG,CAAC,KAAK,oBAAoB,EAC9G,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CACrE,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,KAAK,EAAE,qDAAqD;QAC5D,WAAW,EACT,mGAAmG;YACnG,0GAA0G;YAC1G,oGAAoG;YACpG,wDAAwD;YACxD,kGAAkG;YAClG,kGAAkG;YAClG,wFAAwF;YACxF,uGAAuG;YACvG,mFAAmF;YACnF,0GAA0G;YAC1G,wFAAwF;YACxF,0FAA0F;YAC1F,0FAA0F;YAC1F,oEAAoE;YACpE,wGAAwG;YACxG,4EAA4E;YAC5E,0GAA0G;QAC5G,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;YAClF,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oFAAoF,CAAC;YAC1I,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4LAA4L,CAAC;YACrO,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+EAA+E,CAAC;YAC5H,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4IAA4I,CAAC;YACrL,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qEAAqE,CAAC;YAChH,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4HAA4H,CAAC;YAC3K,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iGAAiG,CAAC;YACvK,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6EAA6E,CAAC;YAC7I,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iFAAiF,CAAC;YACtI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mKAAmK,CAAC;YAChO,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kGAAkG,CAAC;YAChJ,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sFAAsF,CAAC;YAC9L,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+EAA+E,CAAC;YACxH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oEAAoE,CAAC;SAC/G;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;KACrC,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;QACpL,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC;QAExC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,GAAG,CACR,4EAA4E;gBAC1E,gFAAgF;gBAChF,0CAA0C,CAC7C,CAAC;QACJ,CAAC;QACD,6FAA6F;QAC7F,uFAAuF;QACvF,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,GAAG,CACR,iGAAiG;gBAC/F,+EAA+E,CAClF,CAAC;QACJ,CAAC;QAED,IAAI,cAAuC,CAAC;QAC5C,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,CAAC,gBAAgB;gBAAE,OAAO,GAAG,CAAC,4DAA4D,CAAC,CAAC;YACxG,IAAI,OAAsB,CAAC;YAC3B,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,CAAC;YACD,+FAA+F;YAC/F,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,GAAG,CAAC,8DAA8D,CAAC,CAAC;YAC7E,CAAC;YACD,IAAI,aAAa,EAAE,CAAC;gBAClB,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,aAAa,CAAC,CAAC;gBAC5D,IAAI,CAAC,cAAc,EAAE,CAAC;oBACpB,OAAO,GAAG,CAAC,iBAAiB,aAAa,gCAAgC,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACjH,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;gBAChC,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,2DAA2D;YACzF,CAAC;YACD,yGAAyG;QAC3G,CAAC;QAED,iGAAiG;QACjG,4FAA4F;QAC5F,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,WAAW,IAAI,OAAO,EAAE,CAAC;YACxD,MAAM,UAAU,GAAG,MAAM,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACnE,IAAI,UAAU;gBAAE,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,cAAc;gBAAE,OAAO,GAAG,CAAC,gDAAgD,CAAC,CAAC;YAC1F,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,GAAG,CACR,mGAAmG;oBACjG,8FAA8F;oBAC9F,iGAAiG;oBACjG,gEAAgE,CACnE,CAAC;YACJ,CAAC;YACD,gGAAgG;YAChG,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,OAAO;gBAAE,OAAO,GAAG,CAAC,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;YACrF,+FAA+F;YAC/F,iGAAiG;YACjG,MAAM,YAAY,GAAG,IAAI,KAAK,OAAO,IAAI,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;YACpF,MAAM,SAAS,GAAoB;gBACjC,IAAI;gBACJ,YAAY;gBACZ,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnD,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,uBAAuB,EAAE,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7F,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpE,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvD,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChD,CAAC;YACF,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;gBACnE,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtE,MAAM,KAAK,GAAG,IAAI,KAAK,OAAO;oBAC5B,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB,YAAY,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,yCAAyC,CAAC;oBACtG,CAAC,CAAC,WAAW,OAAO,IAAI,CAAC;gBAC3B,OAAO,EAAE,CACP,mBAAmB,OAAO,KAAK,YAAY,IAAI,MAAM,KAAK,IAAI,SAAS,YAAY,GAAG,IAAI,MAAM,KAAK,mBAAmB,KAAK,CAAC,EAAE,KAAK,EACrI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAC/F,CAAC;YACJ,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAe;YACvB,IAAI;YACJ,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,GAAG,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpE,CAAC;QACF,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;YACtD,MAAM,KAAK,GACT,IAAI,KAAK,OAAO;gBACd,CAAC,CAAC,mBAAmB,cAAc,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBACzE,CAAC,CAAC,UAAU,OAAO,CAAC,CAAC,CAAC,eAAe,OAAO,IAAI,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC;YACjF,OAAO,EAAE,CACP,iBAAiB,OAAO,IAAI,KAAK,cAAc,GAAG,CAAC,KAAK,kCAAkC,GAAG,CAAC,KAAK,oBAAoB,EACvH,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CACrE,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,mGAAmG;YACnG,wDAAwD;QAC1D,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC,EAAE;QAC7E,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3C,OAAO,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,UAAU,EACV;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,iEAAiE;QAC9E,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE;QAClE,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;KACrC,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC7B,OAAO,EAAE,CAAC,0BAA0B,KAAK,GAAG,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,iGAAiG;YACjG,qGAAqG;YACrG,uGAAuG;YACvG,6BAA6B;QAC/B,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,IAAI,EAAE;QACT,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,aAAa;YAAE,OAAO,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAC3F,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;YAChD,IAAI,CAAC,SAAS,CAAC,MAAM;gBAAE,OAAO,EAAE,CAAC,+BAA+B,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;YACrF,MAAM,IAAI,GACR,GAAG,SAAS,CAAC,MAAM,YAAY,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO;gBACvE,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,qGAAqG;YACrG,0FAA0F;YAC1F,uGAAuG;YACvG,sEAAsE;QACxE,WAAW,EAAE;YACX,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;YACxE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YAClF,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACzH,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;YACtF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;YACpF,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4EAA4E,CAAC;YAC9J,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;YAC7E,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8EAA8E,CAAC;YACpI,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;YAClG,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;SACrH;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;KACrC,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,uBAAuB,EAAE,EAAE,EAAE;QACpI,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,cAAc;YAAE,OAAO,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAC5F,MAAM,OAAO,GAAmB;YAC9B,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,GAAG,CAAC,uBAAuB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9E,CAAC;QACF,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,OAAO,GAAG,CAAC,yJAAyJ,CAAC,CAAC;QACxK,CAAC;QACD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC9D,OAAO,EAAE,CAAC,sBAAsB,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QACxH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,oCAAoC;QAC3C,WAAW,EACT,8FAA8F;YAC9F,iGAAiG;YACjG,6EAA6E;QAC/E,WAAW,EAAE;YACX,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;YACxE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;SACnF;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;KACrC,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,eAAe;YAAE,OAAO,GAAG,CAAC,0EAA0E,CAAC,CAAC;QACrH,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAC9D,MAAM,IAAI,GAAG,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;YAC3F,OAAO,EAAE,CAAC,GAAG,IAAI,eAAe,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QAChH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,mGAAmG;YACnG,kGAAkG;YAClG,uCAAuC;QACzC,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC,EAAE;QACzF,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE;KAC5D,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,cAAc;YAAE,OAAO,GAAG,CAAC,mDAAmD,CAAC,CAAC;QAC7F,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YACzC,OAAO,EAAE,CAAC,sBAAsB,UAAU,KAAK,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}