@bytespell/amux 0.0.18 → 0.0.22

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.
@@ -1,188 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { parseMessageToContentBlocks } from './message-parser.js';
3
- describe('parseMessageToContentBlocks', () => {
4
- const workingDir = '/home/user/project';
5
- describe('plain text messages', () => {
6
- it('returns single text block for plain text', () => {
7
- const result = parseMessageToContentBlocks('hello world', workingDir);
8
- expect(result).toEqual([{ type: 'text', text: 'hello world' }]);
9
- });
10
- it('returns single text block for empty message', () => {
11
- const result = parseMessageToContentBlocks('', workingDir);
12
- expect(result).toEqual([{ type: 'text', text: '' }]);
13
- });
14
- it('returns single text block for whitespace-only message', () => {
15
- const result = parseMessageToContentBlocks(' ', workingDir);
16
- expect(result).toEqual([{ type: 'text', text: ' ' }]);
17
- });
18
- it('preserves multi-line text', () => {
19
- const result = parseMessageToContentBlocks('line one\nline two', workingDir);
20
- expect(result).toEqual([{ type: 'text', text: 'line one\nline two' }]);
21
- });
22
- });
23
- describe('single @mentions', () => {
24
- it('parses single @mention as resource_link', () => {
25
- const result = parseMessageToContentBlocks('@src/foo.ts', workingDir);
26
- expect(result).toEqual([
27
- {
28
- type: 'resource_link',
29
- uri: 'file:///home/user/project/src/foo.ts',
30
- name: 'src/foo.ts',
31
- },
32
- ]);
33
- });
34
- it('parses relative path with ./', () => {
35
- const result = parseMessageToContentBlocks('@./local.ts', workingDir);
36
- expect(result).toEqual([
37
- {
38
- type: 'resource_link',
39
- uri: 'file:///home/user/project/local.ts',
40
- name: './local.ts',
41
- },
42
- ]);
43
- });
44
- it('parses relative path with ../', () => {
45
- const result = parseMessageToContentBlocks('@../parent/file.ts', workingDir);
46
- expect(result).toEqual([
47
- {
48
- type: 'resource_link',
49
- uri: 'file:///home/user/parent/file.ts',
50
- name: '../parent/file.ts',
51
- },
52
- ]);
53
- });
54
- it('handles file with dashes in name', () => {
55
- const result = parseMessageToContentBlocks('@src/my-file.ts', workingDir);
56
- expect(result).toEqual([
57
- {
58
- type: 'resource_link',
59
- uri: 'file:///home/user/project/src/my-file.ts',
60
- name: 'src/my-file.ts',
61
- },
62
- ]);
63
- });
64
- it('handles deeply nested paths', () => {
65
- const result = parseMessageToContentBlocks('@src/a/b/c/d.ts', workingDir);
66
- expect(result).toEqual([
67
- {
68
- type: 'resource_link',
69
- uri: 'file:///home/user/project/src/a/b/c/d.ts',
70
- name: 'src/a/b/c/d.ts',
71
- },
72
- ]);
73
- });
74
- });
75
- describe('mixed text and @mentions', () => {
76
- it('parses text before and after mention', () => {
77
- const result = parseMessageToContentBlocks('check @src/foo.ts for bugs', workingDir);
78
- expect(result).toEqual([
79
- { type: 'text', text: 'check ' },
80
- {
81
- type: 'resource_link',
82
- uri: 'file:///home/user/project/src/foo.ts',
83
- name: 'src/foo.ts',
84
- },
85
- { type: 'text', text: ' for bugs' },
86
- ]);
87
- });
88
- it('parses text only before mention', () => {
89
- const result = parseMessageToContentBlocks('look at @src/foo.ts', workingDir);
90
- expect(result).toEqual([
91
- { type: 'text', text: 'look at ' },
92
- {
93
- type: 'resource_link',
94
- uri: 'file:///home/user/project/src/foo.ts',
95
- name: 'src/foo.ts',
96
- },
97
- ]);
98
- });
99
- it('parses text only after mention', () => {
100
- const result = parseMessageToContentBlocks('@src/foo.ts has a bug', workingDir);
101
- expect(result).toEqual([
102
- {
103
- type: 'resource_link',
104
- uri: 'file:///home/user/project/src/foo.ts',
105
- name: 'src/foo.ts',
106
- },
107
- { type: 'text', text: ' has a bug' },
108
- ]);
109
- });
110
- });
111
- describe('multiple @mentions', () => {
112
- it('parses multiple mentions with text between', () => {
113
- const result = parseMessageToContentBlocks('@src/a.ts and @src/b.ts', workingDir);
114
- expect(result).toEqual([
115
- {
116
- type: 'resource_link',
117
- uri: 'file:///home/user/project/src/a.ts',
118
- name: 'src/a.ts',
119
- },
120
- { type: 'text', text: ' and ' },
121
- {
122
- type: 'resource_link',
123
- uri: 'file:///home/user/project/src/b.ts',
124
- name: 'src/b.ts',
125
- },
126
- ]);
127
- });
128
- it('parses consecutive mentions without text between', () => {
129
- const result = parseMessageToContentBlocks('@a.ts @b.ts', workingDir);
130
- // The space between becomes whitespace-only and gets skipped
131
- expect(result).toEqual([
132
- {
133
- type: 'resource_link',
134
- uri: 'file:///home/user/project/a.ts',
135
- name: 'a.ts',
136
- },
137
- {
138
- type: 'resource_link',
139
- uri: 'file:///home/user/project/b.ts',
140
- name: 'b.ts',
141
- },
142
- ]);
143
- });
144
- });
145
- describe('edge cases', () => {
146
- it('handles email-like patterns (should not match)', () => {
147
- // Email addresses should be matched by regex, which may not be desired
148
- // This test documents current behavior
149
- const result = parseMessageToContentBlocks('email user@example.com', workingDir);
150
- // The regex matches @example.com as a mention
151
- expect(result[0]).toEqual({ type: 'text', text: 'email user' });
152
- expect(result[1]).toHaveProperty('type', 'resource_link');
153
- });
154
- it('handles @ at end of string without path', () => {
155
- const result = parseMessageToContentBlocks('just an @', workingDir);
156
- expect(result).toEqual([{ type: 'text', text: 'just an @' }]);
157
- });
158
- it('handles multiple @ signs', () => {
159
- const result = parseMessageToContentBlocks('@@foo.ts', workingDir);
160
- // First @ doesn't match (followed by @), second @ matches
161
- expect(result).toHaveLength(2);
162
- expect(result[0]).toEqual({ type: 'text', text: '@' });
163
- });
164
- });
165
- describe('working directory resolution', () => {
166
- it('uses provided working directory for absolute path resolution', () => {
167
- const result = parseMessageToContentBlocks('@file.ts', '/custom/dir');
168
- expect(result).toEqual([
169
- {
170
- type: 'resource_link',
171
- uri: 'file:///custom/dir/file.ts',
172
- name: 'file.ts',
173
- },
174
- ]);
175
- });
176
- it('resolves relative paths correctly from working directory', () => {
177
- const result = parseMessageToContentBlocks('@../sibling/file.ts', '/home/user/project');
178
- expect(result).toEqual([
179
- {
180
- type: 'resource_link',
181
- uri: 'file:///home/user/sibling/file.ts',
182
- name: '../sibling/file.ts',
183
- },
184
- ]);
185
- });
186
- });
187
- });
188
- //# sourceMappingURL=message-parser.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"message-parser.test.js","sourceRoot":"","sources":["../src/message-parser.test.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts DELETED
@@ -1,24 +0,0 @@
1
- import { type Application } from 'express';
2
- import { type Server } from 'http';
3
- import { AgentSession } from './session.js';
4
- import type { AmuxServerConfig } from './types.js';
5
- /**
6
- * Create an amux server with full Express + WebSocket setup.
7
- * This is the "batteries included" API for building agent-powered plugins.
8
- */
9
- export declare function createAmuxServer(config?: AmuxServerConfig): {
10
- app: Application;
11
- server: Server;
12
- start: () => Promise<void>;
13
- shutdown: () => void;
14
- };
15
- /**
16
- * Attach amux to an existing Express app and HTTP server.
17
- * For when you want more control over the server setup.
18
- */
19
- export declare function attachAmux(_app: Application, server: Server, config: Omit<AmuxServerConfig, 'port' | 'dev' | 'staticDir'>): {
20
- agentSession: AgentSession;
21
- start: () => Promise<void>;
22
- shutdown: () => void;
23
- };
24
- //# sourceMappingURL=server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAkD,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AACpG,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAMjD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,gBAAgB,EAA0B,MAAM,YAAY,CAAC;AAY3E;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,GAAE,gBAAqB,GAAG;IAC/D,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,CA0SA;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,KAAK,GAAG,WAAW,CAAC,GAC3D;IACD,YAAY,EAAE,YAAY,CAAC;IAC3B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,CA2EA"}
package/dist/server.js DELETED
@@ -1,356 +0,0 @@
1
- import express from 'express';
2
- import { createServer } from 'http';
3
- import { WebSocketServer, WebSocket } from 'ws';
4
- import path from 'path';
5
- import fs from 'fs';
6
- import os from 'os';
7
- import { AgentSession } from './session.js';
8
- import { StateManager } from './state.js';
9
- /**
10
- * Create an amux server with full Express + WebSocket setup.
11
- * This is the "batteries included" API for building agent-powered plugins.
12
- */
13
- export function createAmuxServer(config = {}) {
14
- const PORT = config.port ?? (process.env.PORT ? parseInt(process.env.PORT, 10) : 3000);
15
- const INSTANCE_ID = process.env.INSTANCE_ID ?? 'default';
16
- const basePath = config.basePath ?? process.cwd();
17
- const isDev = config.dev ?? !config.staticDir;
18
- const app = express();
19
- const server = createServer(app);
20
- const clients = new Set();
21
- // State manager
22
- const stateManager = new StateManager(config.stateDir);
23
- // Broadcast function
24
- function broadcast(message) {
25
- const msgStr = JSON.stringify(message);
26
- for (const client of clients) {
27
- if (client.readyState === WebSocket.OPEN) {
28
- client.send(msgStr);
29
- }
30
- }
31
- }
32
- // Create agent session
33
- const agentSession = new AgentSession({
34
- instanceId: INSTANCE_ID,
35
- basePath,
36
- broadcast,
37
- systemContext: config.systemContext,
38
- fixedCwd: config.fixedCwd,
39
- agentType: config.agentType,
40
- stateDir: config.stateDir,
41
- });
42
- // Allow embedding in iframes
43
- app.use((_req, res, next) => {
44
- res.removeHeader('X-Frame-Options');
45
- res.setHeader('Content-Security-Policy', 'frame-ancestors *');
46
- next();
47
- });
48
- app.use(express.json());
49
- // --- HTTP API Routes ---
50
- // Health check
51
- app.get('/api/health', (_req, res) => {
52
- res.json({ status: 'ok' });
53
- });
54
- // List directories for picker
55
- app.get('/api/directories', (req, res) => {
56
- const dirPath = req.query.path || os.homedir();
57
- try {
58
- const stats = fs.statSync(dirPath);
59
- if (!stats.isDirectory()) {
60
- res.status(400).json({ error: 'Not a directory' });
61
- return;
62
- }
63
- const entries = fs.readdirSync(dirPath, { withFileTypes: true });
64
- const directories = entries
65
- .filter(e => e.isDirectory() && !e.name.startsWith('.'))
66
- .map(e => e.name)
67
- .sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()));
68
- const response = {
69
- path: dirPath,
70
- parent: path.dirname(dirPath),
71
- directories,
72
- isRoot: dirPath === '/' || dirPath === path.dirname(dirPath),
73
- };
74
- res.json(response);
75
- }
76
- catch (err) {
77
- res.status(400).json({ error: err.message });
78
- }
79
- });
80
- // Get replay history
81
- app.get('/api/history', (_req, res) => {
82
- const history = stateManager.loadHistory(agentSession.sessionId);
83
- res.json({ history, sessionId: agentSession.sessionId });
84
- });
85
- // Clear history
86
- app.delete('/api/history', (_req, res) => {
87
- stateManager.clearHistory(agentSession.sessionId);
88
- res.json({ success: true });
89
- });
90
- // Get available agents
91
- app.get('/api/agents', (_req, res) => {
92
- const agents = agentSession.getAvailableAgents().map(a => ({
93
- ...a,
94
- current: a.id === agentSession.agentType,
95
- }));
96
- res.json({ agents, currentAgent: agentSession.agentType });
97
- });
98
- // --- WebSocket Setup ---
99
- const wss = new WebSocketServer({ server, path: '/ws' });
100
- wss.on('connection', (ws) => {
101
- console.log('[amux] Client connected');
102
- clients.add(ws);
103
- // Send current state to new client
104
- if (agentSession.isConnected) {
105
- ws.send(JSON.stringify({
106
- type: 'ready',
107
- cwd: agentSession.cwd,
108
- sessionId: agentSession.sessionId,
109
- capabilities: agentSession.agentCapabilities,
110
- agent: agentSession.getAgentInfo(),
111
- availableAgents: agentSession.getAvailableAgents(),
112
- systemContext: agentSession.systemContext ? true : undefined,
113
- }));
114
- // Send history to hydrate the chat UI
115
- const history = stateManager.loadHistory(agentSession.sessionId);
116
- if (history.length > 0) {
117
- ws.send(JSON.stringify({
118
- type: 'history_replay',
119
- previousSessionId: agentSession.sessionId,
120
- events: history,
121
- eventCount: history.length,
122
- }));
123
- }
124
- }
125
- else {
126
- ws.send(JSON.stringify({ type: 'connecting' }));
127
- }
128
- ws.on('message', async (message) => {
129
- try {
130
- const msg = JSON.parse(message.toString());
131
- await handleWsMessage(ws, msg, agentSession);
132
- }
133
- catch (err) {
134
- console.error('[amux] Invalid message:', err);
135
- }
136
- });
137
- ws.on('close', () => {
138
- console.log('[amux] Client disconnected');
139
- clients.delete(ws);
140
- });
141
- ws.on('error', (err) => {
142
- console.error('[amux] WebSocket error:', err);
143
- clients.delete(ws);
144
- });
145
- });
146
- /**
147
- * Handle WebSocket messages
148
- */
149
- async function handleWsMessage(ws, msg, session) {
150
- switch (msg.type) {
151
- case 'prompt':
152
- if (!session.isConnected || !session.sessionId) {
153
- ws.send(JSON.stringify({ type: 'error', message: 'Agent not ready' }));
154
- return;
155
- }
156
- try {
157
- await session.prompt(msg.message);
158
- }
159
- catch {
160
- // Error already broadcast by session
161
- }
162
- break;
163
- case 'cancel':
164
- await session.cancel();
165
- break;
166
- case 'permission_response':
167
- session.handlePermissionResponse(msg.requestId, msg.optionId);
168
- break;
169
- case 'change_cwd':
170
- if (msg.path) {
171
- try {
172
- const stats = fs.statSync(msg.path);
173
- if (stats.isDirectory()) {
174
- await session.changeCwd(msg.path);
175
- }
176
- else {
177
- ws.send(JSON.stringify({ type: 'error', message: 'Path is not a directory' }));
178
- }
179
- }
180
- catch (err) {
181
- ws.send(JSON.stringify({ type: 'error', message: `Invalid path: ${err.message}` }));
182
- }
183
- }
184
- break;
185
- case 'new_session':
186
- try {
187
- await session.newSession();
188
- }
189
- catch (err) {
190
- ws.send(JSON.stringify({ type: 'error', message: `Failed to create session: ${err.message}` }));
191
- }
192
- break;
193
- case 'set_mode':
194
- if (msg.modeId) {
195
- try {
196
- await session.setMode(msg.modeId);
197
- }
198
- catch (err) {
199
- ws.send(JSON.stringify({ type: 'error', message: `Failed to set mode: ${err.message}` }));
200
- }
201
- }
202
- break;
203
- case 'set_model':
204
- if (msg.modelId) {
205
- try {
206
- await session.setModel(msg.modelId);
207
- }
208
- catch (err) {
209
- ws.send(JSON.stringify({ type: 'error', message: `Failed to set model: ${err.message}` }));
210
- }
211
- }
212
- break;
213
- case 'change_agent':
214
- if (msg.agentType) {
215
- try {
216
- await session.changeAgent(msg.agentType);
217
- }
218
- catch (err) {
219
- ws.send(JSON.stringify({ type: 'error', message: `${err.message}` }));
220
- }
221
- }
222
- break;
223
- case 'get_history': {
224
- const history = stateManager.loadHistory(session.sessionId);
225
- ws.send(JSON.stringify({ type: 'history', events: history, sessionId: session.sessionId }));
226
- break;
227
- }
228
- case 'list_sessions':
229
- try {
230
- const sessions = await session.listSessions();
231
- ws.send(JSON.stringify({ type: 'sessions', sessions }));
232
- }
233
- catch (err) {
234
- ws.send(JSON.stringify({ type: 'error', message: `Failed to list sessions: ${err.message}` }));
235
- }
236
- break;
237
- case 'switch_session':
238
- if (msg.sessionId) {
239
- try {
240
- await session.switchSession(msg.sessionId);
241
- }
242
- catch (err) {
243
- ws.send(JSON.stringify({ type: 'error', message: `Failed to switch session: ${err.message}` }));
244
- }
245
- }
246
- break;
247
- }
248
- }
249
- // Start function
250
- async function start() {
251
- // Setup static serving
252
- if (isDev && !config.staticDir) {
253
- // In dev mode without static dir, just serve API
254
- console.log('[amux] Running in API-only mode (no static files)');
255
- }
256
- else if (config.staticDir) {
257
- app.use(express.static(config.staticDir));
258
- app.get('/{*splat}', (_req, res) => {
259
- res.sendFile(path.join(config.staticDir, 'index.html'));
260
- });
261
- }
262
- // Start the agent
263
- await agentSession.spawnAgent();
264
- // Start HTTP server
265
- server.listen(PORT, () => {
266
- console.log(`[amux] Running on port ${PORT}`);
267
- });
268
- }
269
- // Shutdown function
270
- function shutdown() {
271
- console.log('[amux] Shutting down');
272
- agentSession.shutdown();
273
- for (const ws of clients)
274
- ws.close();
275
- wss.close();
276
- server.close();
277
- }
278
- // Handle SIGTERM
279
- process.on('SIGTERM', () => {
280
- shutdown();
281
- process.exit(0);
282
- });
283
- return { app, server, start, shutdown };
284
- }
285
- /**
286
- * Attach amux to an existing Express app and HTTP server.
287
- * For when you want more control over the server setup.
288
- */
289
- export function attachAmux(_app, server, config) {
290
- const INSTANCE_ID = process.env.INSTANCE_ID ?? 'default';
291
- const basePath = config.basePath ?? process.cwd();
292
- const clients = new Set();
293
- // State manager
294
- const stateManager = new StateManager(config.stateDir);
295
- // Broadcast function
296
- function broadcast(message) {
297
- const msgStr = JSON.stringify(message);
298
- for (const client of clients) {
299
- if (client.readyState === WebSocket.OPEN) {
300
- client.send(msgStr);
301
- }
302
- }
303
- }
304
- // Create agent session
305
- const agentSession = new AgentSession({
306
- instanceId: INSTANCE_ID,
307
- basePath,
308
- broadcast,
309
- systemContext: config.systemContext,
310
- fixedCwd: config.fixedCwd,
311
- agentType: config.agentType,
312
- stateDir: config.stateDir,
313
- });
314
- // WebSocket setup
315
- const wss = new WebSocketServer({ server, path: '/ws' });
316
- wss.on('connection', (ws) => {
317
- console.log('[amux] Client connected');
318
- clients.add(ws);
319
- if (agentSession.isConnected) {
320
- ws.send(JSON.stringify({
321
- type: 'ready',
322
- cwd: agentSession.cwd,
323
- sessionId: agentSession.sessionId,
324
- capabilities: agentSession.agentCapabilities,
325
- agent: agentSession.getAgentInfo(),
326
- availableAgents: agentSession.getAvailableAgents(),
327
- }));
328
- const history = stateManager.loadHistory(agentSession.sessionId);
329
- if (history.length > 0) {
330
- ws.send(JSON.stringify({
331
- type: 'history_replay',
332
- previousSessionId: agentSession.sessionId,
333
- events: history,
334
- eventCount: history.length,
335
- }));
336
- }
337
- }
338
- else {
339
- ws.send(JSON.stringify({ type: 'connecting' }));
340
- }
341
- ws.on('close', () => {
342
- clients.delete(ws);
343
- });
344
- });
345
- async function start() {
346
- await agentSession.spawnAgent();
347
- }
348
- function shutdown() {
349
- agentSession.shutdown();
350
- for (const ws of clients)
351
- ws.close();
352
- wss.close();
353
- }
354
- return { agentSession, start, shutdown };
355
- }
356
- //# sourceMappingURL=server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,OAA6E,MAAM,SAAS,CAAC;AACpG,OAAO,EAAE,YAAY,EAAe,MAAM,MAAM,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAChD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAa1C;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAA2B,EAAE;IAM5D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACvF,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,SAAS,CAAC;IACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;IAE9C,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAa,CAAC;IAErC,gBAAgB;IAChB,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEvD,qBAAqB;IACrB,SAAS,SAAS,CAAC,OAAoB;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACvC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;gBACzC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC;QACpC,UAAU,EAAE,WAAW;QACvB,QAAQ;QACR,SAAS;QACT,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC,CAAC;IAEH,6BAA6B;IAC7B,GAAG,CAAC,GAAG,CAAC,CAAC,IAAa,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAC3D,GAAG,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;QACpC,GAAG,CAAC,SAAS,CAAC,yBAAyB,EAAE,mBAAmB,CAAC,CAAC;QAC9D,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAExB,0BAA0B;IAE1B,eAAe;IACf,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;QACtD,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,8BAA8B;IAC9B,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;QAC1D,MAAM,OAAO,GAAI,GAAG,CAAC,KAAK,CAAC,IAAe,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAC3D,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACzB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;gBACnD,OAAO;YACT,CAAC;YACD,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,MAAM,WAAW,GAAG,OAAO;iBACxB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;iBACvD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBAChB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAClE,MAAM,QAAQ,GAAmB;gBAC/B,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;gBAC7B,WAAW;gBACX,MAAM,EAAE,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;aAC7D,CAAC;YACF,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,qBAAqB;IACrB,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;QACvD,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACjE,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,gBAAgB;IAChB,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;QAC1D,YAAY,CAAC,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAClD,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,uBAAuB;IACvB,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;QACtD,MAAM,MAAM,GAAG,YAAY,CAAC,kBAAkB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzD,GAAG,CAAC;YACJ,OAAO,EAAE,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,SAAS;SACzC,CAAC,CAAC,CAAC;QACJ,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,0BAA0B;IAE1B,MAAM,GAAG,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAEzD,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAa,EAAE,EAAE;QACrC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,mCAAmC;QACnC,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC;YAC7B,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;gBACrB,IAAI,EAAE,OAAO;gBACb,GAAG,EAAE,YAAY,CAAC,GAAG;gBACrB,SAAS,EAAE,YAAY,CAAC,SAAS;gBACjC,YAAY,EAAE,YAAY,CAAC,iBAAiB;gBAC5C,KAAK,EAAE,YAAY,CAAC,YAAY,EAAE;gBAClC,eAAe,EAAE,YAAY,CAAC,kBAAkB,EAAE;gBAClD,aAAa,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;aAC7D,CAAC,CAAC,CAAC;YAEJ,sCAAsC;YACtC,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YACjE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;oBACrB,IAAI,EAAE,gBAAgB;oBACtB,iBAAiB,EAAE,YAAY,CAAC,SAAS;oBACzC,MAAM,EAAE,OAAO;oBACf,UAAU,EAAE,OAAO,CAAC,MAAM;iBAC3B,CAAC,CAAC,CAAC;YACN,CAAC;QACH,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;QAClD,CAAC;QAED,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,OAAe,EAAE,EAAE;YACzC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAc,CAAC;gBACxD,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;YAC/C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;YAChD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAClB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC1C,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACrB,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;YAC9C,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH;;OAEG;IACH,KAAK,UAAU,eAAe,CAC5B,EAAa,EACb,GAAc,EACd,OAAqB;QAErB,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,QAAQ;gBACX,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;oBAC/C,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC;oBACvE,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACpC,CAAC;gBAAC,MAAM,CAAC;oBACP,qCAAqC;gBACvC,CAAC;gBACD,MAAM;YAER,KAAK,QAAQ;gBACX,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;gBACvB,MAAM;YAER,KAAK,qBAAqB;gBACxB,OAAO,CAAC,wBAAwB,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC9D,MAAM;YAER,KAAK,YAAY;gBACf,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;oBACb,IAAI,CAAC;wBACH,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBACpC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;4BACxB,MAAM,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBACpC,CAAC;6BAAM,CAAC;4BACN,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC,CAAC;wBACjF,CAAC;oBACH,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAkB,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;oBACjG,CAAC;gBACH,CAAC;gBACD,MAAM;YAER,KAAK,aAAa;gBAChB,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;gBAC7B,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,6BAA8B,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC7G,CAAC;gBACD,MAAM;YAER,KAAK,UAAU;gBACb,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;oBACf,IAAI,CAAC;wBACH,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBACpC,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,uBAAwB,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;oBACvG,CAAC;gBACH,CAAC;gBACD,MAAM;YAER,KAAK,WAAW;gBACd,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;oBAChB,IAAI,CAAC;wBACH,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBACtC,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,wBAAyB,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;oBACxG,CAAC;gBACH,CAAC;gBACD,MAAM;YAER,KAAK,cAAc;gBACjB,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;oBAClB,IAAI,CAAC;wBACH,MAAM,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAC3C,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAI,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;oBACnF,CAAC;gBACH,CAAC;gBACD,MAAM;YAER,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC5D,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;gBAC5F,MAAM;YACR,CAAC;YAED,KAAK,eAAe;gBAClB,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC;oBAC9C,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAC1D,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,4BAA6B,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC5G,CAAC;gBACD,MAAM;YAER,KAAK,gBAAgB;gBACnB,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;oBAClB,IAAI,CAAC;wBACH,MAAM,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAC7C,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,6BAA8B,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;oBAC7G,CAAC;gBACH,CAAC;gBACD,MAAM;QACV,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,KAAK,UAAU,KAAK;QAClB,uBAAuB;QACvB,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC/B,iDAAiD;YACjD,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QACnE,CAAC;aAAM,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YAC5B,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YAC1C,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;gBACpD,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAU,EAAE,YAAY,CAAC,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC;QACL,CAAC;QAED,kBAAkB;QAClB,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;QAEhC,oBAAoB;QACpB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;YACvB,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB;IACpB,SAAS,QAAQ;QACf,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,YAAY,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,MAAM,EAAE,IAAI,OAAO;YAAE,EAAE,CAAC,KAAK,EAAE,CAAC;QACrC,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAED,iBAAiB;IACjB,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,QAAQ,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CACxB,IAAiB,EACjB,MAAc,EACd,MAA4D;IAM5D,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,SAAS,CAAC;IACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAa,CAAC;IAErC,gBAAgB;IAChB,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEvD,qBAAqB;IACrB,SAAS,SAAS,CAAC,OAAoB;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACvC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;gBACzC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC;QACpC,UAAU,EAAE,WAAW;QACvB,QAAQ;QACR,SAAS;QACT,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC,CAAC;IAEH,kBAAkB;IAClB,MAAM,GAAG,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAEzD,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAa,EAAE,EAAE;QACrC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC;YAC7B,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;gBACrB,IAAI,EAAE,OAAO;gBACb,GAAG,EAAE,YAAY,CAAC,GAAG;gBACrB,SAAS,EAAE,YAAY,CAAC,SAAS;gBACjC,YAAY,EAAE,YAAY,CAAC,iBAAiB;gBAC5C,KAAK,EAAE,YAAY,CAAC,YAAY,EAAE;gBAClC,eAAe,EAAE,YAAY,CAAC,kBAAkB,EAAE;aACnD,CAAC,CAAC,CAAC;YAEJ,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YACjE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;oBACrB,IAAI,EAAE,gBAAgB;oBACtB,iBAAiB,EAAE,YAAY,CAAC,SAAS;oBACzC,MAAM,EAAE,OAAO;oBACf,UAAU,EAAE,OAAO,CAAC,MAAM;iBAC3B,CAAC,CAAC,CAAC;YACN,CAAC;QACH,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;QAClD,CAAC;QAED,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAClB,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,KAAK,UAAU,KAAK;QAClB,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC;IAED,SAAS,QAAQ;QACf,YAAY,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,MAAM,EAAE,IAAI,OAAO;YAAE,EAAE,CAAC,KAAK,EAAE,CAAC;QACrC,GAAG,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC3C,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=session-updates.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-updates.test.d.ts","sourceRoot":"","sources":["../src/session-updates.test.ts"],"names":[],"mappings":""}