agentdb 1.5.9 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -11
- package/dist/agentdb.min.js +4 -4
- package/dist/cli/agentdb-cli.d.ts +29 -0
- package/dist/cli/agentdb-cli.d.ts.map +1 -1
- package/dist/cli/agentdb-cli.js +1009 -34
- package/dist/cli/agentdb-cli.js.map +1 -1
- package/dist/controllers/ContextSynthesizer.d.ts +65 -0
- package/dist/controllers/ContextSynthesizer.d.ts.map +1 -0
- package/dist/controllers/ContextSynthesizer.js +208 -0
- package/dist/controllers/ContextSynthesizer.js.map +1 -0
- package/dist/controllers/MMRDiversityRanker.d.ts +50 -0
- package/dist/controllers/MMRDiversityRanker.d.ts.map +1 -0
- package/dist/controllers/MMRDiversityRanker.js +130 -0
- package/dist/controllers/MMRDiversityRanker.js.map +1 -0
- package/dist/controllers/MetadataFilter.d.ts +70 -0
- package/dist/controllers/MetadataFilter.d.ts.map +1 -0
- package/dist/controllers/MetadataFilter.js +243 -0
- package/dist/controllers/MetadataFilter.js.map +1 -0
- package/dist/controllers/QUICClient.d.ts +109 -0
- package/dist/controllers/QUICClient.d.ts.map +1 -0
- package/dist/controllers/QUICClient.js +299 -0
- package/dist/controllers/QUICClient.js.map +1 -0
- package/dist/controllers/QUICServer.d.ts +121 -0
- package/dist/controllers/QUICServer.d.ts.map +1 -0
- package/dist/controllers/QUICServer.js +383 -0
- package/dist/controllers/QUICServer.js.map +1 -0
- package/dist/controllers/SyncCoordinator.d.ts +120 -0
- package/dist/controllers/SyncCoordinator.d.ts.map +1 -0
- package/dist/controllers/SyncCoordinator.js +441 -0
- package/dist/controllers/SyncCoordinator.js.map +1 -0
- package/dist/controllers/WASMVectorSearch.d.ts.map +1 -1
- package/dist/controllers/WASMVectorSearch.js +10 -2
- package/dist/controllers/WASMVectorSearch.js.map +1 -1
- package/dist/controllers/index.d.ts +12 -0
- package/dist/controllers/index.d.ts.map +1 -1
- package/dist/controllers/index.js +6 -0
- package/dist/controllers/index.js.map +1 -1
- package/dist/examples/quic-sync-example.d.ts +9 -0
- package/dist/examples/quic-sync-example.d.ts.map +1 -0
- package/dist/examples/quic-sync-example.js +169 -0
- package/dist/examples/quic-sync-example.js.map +1 -0
- package/dist/types/quic.d.ts +518 -0
- package/dist/types/quic.d.ts.map +1 -0
- package/dist/types/quic.js +272 -0
- package/dist/types/quic.js.map +1 -0
- package/package.json +9 -3
- package/src/browser-entry.js +41 -6
- package/src/cli/agentdb-cli.ts +1114 -33
- package/src/controllers/ContextSynthesizer.ts +285 -0
- package/src/controllers/MMRDiversityRanker.ts +187 -0
- package/src/controllers/MetadataFilter.ts +280 -0
- package/src/controllers/QUICClient.ts +413 -0
- package/src/controllers/QUICServer.ts +498 -0
- package/src/controllers/SyncCoordinator.ts +597 -0
- package/src/controllers/WASMVectorSearch.ts +11 -2
- package/src/controllers/index.ts +12 -0
- package/src/examples/quic-sync-example.ts +198 -0
- package/src/types/quic.ts +772 -0
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QUICClient - QUIC Protocol Client for AgentDB Synchronization
|
|
3
|
+
*
|
|
4
|
+
* Implements a QUIC client for initiating synchronization requests to remote
|
|
5
|
+
* AgentDB instances. Supports connection pooling, retry logic, and reliable sync.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Connect to remote QUIC servers
|
|
9
|
+
* - Send sync requests (episodes, skills, edges)
|
|
10
|
+
* - Handle responses and errors
|
|
11
|
+
* - Automatic retry with exponential backoff
|
|
12
|
+
* - Connection pooling for efficiency
|
|
13
|
+
* - Comprehensive error handling
|
|
14
|
+
*/
|
|
15
|
+
import chalk from 'chalk';
|
|
16
|
+
export class QUICClient {
|
|
17
|
+
config;
|
|
18
|
+
connectionPool = new Map();
|
|
19
|
+
isConnected = false;
|
|
20
|
+
retryCount = 0;
|
|
21
|
+
constructor(config) {
|
|
22
|
+
this.config = {
|
|
23
|
+
serverHost: config.serverHost,
|
|
24
|
+
serverPort: config.serverPort,
|
|
25
|
+
authToken: config.authToken || '',
|
|
26
|
+
maxRetries: config.maxRetries || 3,
|
|
27
|
+
retryDelayMs: config.retryDelayMs || 1000,
|
|
28
|
+
timeoutMs: config.timeoutMs || 30000,
|
|
29
|
+
poolSize: config.poolSize || 5,
|
|
30
|
+
tlsConfig: config.tlsConfig || { rejectUnauthorized: true },
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Connect to remote QUIC server
|
|
35
|
+
*/
|
|
36
|
+
async connect() {
|
|
37
|
+
if (this.isConnected) {
|
|
38
|
+
console.log(chalk.yellow('⚠️ Client already connected'));
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
console.log(chalk.blue('🔌 Connecting to QUIC server...'));
|
|
43
|
+
console.log(chalk.gray(` Host: ${this.config.serverHost}`));
|
|
44
|
+
console.log(chalk.gray(` Port: ${this.config.serverPort}`));
|
|
45
|
+
// Note: Actual QUIC implementation would use a library like @fails-components/webtransport
|
|
46
|
+
// or node-quic. This is a reference implementation showing the interface.
|
|
47
|
+
// Initialize connection pool
|
|
48
|
+
for (let i = 0; i < this.config.poolSize; i++) {
|
|
49
|
+
const connectionId = `conn-${i}`;
|
|
50
|
+
this.connectionPool.set(connectionId, {
|
|
51
|
+
id: connectionId,
|
|
52
|
+
inUse: false,
|
|
53
|
+
createdAt: Date.now(),
|
|
54
|
+
lastUsedAt: 0,
|
|
55
|
+
requestCount: 0,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
this.isConnected = true;
|
|
59
|
+
this.retryCount = 0;
|
|
60
|
+
console.log(chalk.green('✓ Connected to QUIC server'));
|
|
61
|
+
console.log(chalk.gray(` Connection pool size: ${this.config.poolSize}`));
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
const err = error;
|
|
65
|
+
console.error(chalk.red('✗ Connection failed:'), err.message);
|
|
66
|
+
throw new Error(`Failed to connect to QUIC server: ${err.message}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Disconnect from server
|
|
71
|
+
*/
|
|
72
|
+
async disconnect() {
|
|
73
|
+
if (!this.isConnected) {
|
|
74
|
+
console.log(chalk.yellow('⚠️ Client not connected'));
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
console.log(chalk.blue('🔌 Disconnecting from QUIC server...'));
|
|
79
|
+
// Close all connections in pool
|
|
80
|
+
for (const [connId, conn] of this.connectionPool.entries()) {
|
|
81
|
+
console.log(chalk.gray(` Closing connection: ${connId}`));
|
|
82
|
+
// Close connection logic here
|
|
83
|
+
}
|
|
84
|
+
this.connectionPool.clear();
|
|
85
|
+
this.isConnected = false;
|
|
86
|
+
console.log(chalk.green('✓ Disconnected from QUIC server'));
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
const err = error;
|
|
90
|
+
console.error(chalk.red('✗ Disconnect error:'), err.message);
|
|
91
|
+
throw new Error(`Failed to disconnect: ${err.message}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Send sync request to server
|
|
96
|
+
*/
|
|
97
|
+
async sync(options) {
|
|
98
|
+
if (!this.isConnected) {
|
|
99
|
+
await this.connect();
|
|
100
|
+
}
|
|
101
|
+
const startTime = Date.now();
|
|
102
|
+
let bytesTransferred = 0;
|
|
103
|
+
try {
|
|
104
|
+
// Report progress: connecting
|
|
105
|
+
options.onProgress?.({
|
|
106
|
+
phase: 'connecting',
|
|
107
|
+
});
|
|
108
|
+
// Get connection from pool
|
|
109
|
+
const connection = await this.acquireConnection();
|
|
110
|
+
console.log(chalk.blue('📤 Sending sync request...'));
|
|
111
|
+
console.log(chalk.gray(` Type: ${options.type}`));
|
|
112
|
+
console.log(chalk.gray(` Since: ${options.since || 'full sync'}`));
|
|
113
|
+
console.log(chalk.gray(` Connection: ${connection.id}`));
|
|
114
|
+
// Report progress: syncing
|
|
115
|
+
options.onProgress?.({
|
|
116
|
+
phase: 'syncing',
|
|
117
|
+
});
|
|
118
|
+
// Prepare request
|
|
119
|
+
const request = {
|
|
120
|
+
type: options.type,
|
|
121
|
+
since: options.since,
|
|
122
|
+
filters: options.filters,
|
|
123
|
+
batchSize: options.batchSize,
|
|
124
|
+
};
|
|
125
|
+
// Send request with retry logic
|
|
126
|
+
const response = await this.sendWithRetry(connection, request);
|
|
127
|
+
if (!response.success) {
|
|
128
|
+
throw new Error(response.error || 'Sync request failed');
|
|
129
|
+
}
|
|
130
|
+
bytesTransferred = JSON.stringify(response.data).length;
|
|
131
|
+
// Report progress: processing
|
|
132
|
+
options.onProgress?.({
|
|
133
|
+
phase: 'processing',
|
|
134
|
+
itemsSynced: response.count,
|
|
135
|
+
bytesTransferred,
|
|
136
|
+
});
|
|
137
|
+
// Release connection
|
|
138
|
+
this.releaseConnection(connection);
|
|
139
|
+
const durationMs = Date.now() - startTime;
|
|
140
|
+
console.log(chalk.green('✓ Sync completed successfully'));
|
|
141
|
+
console.log(chalk.gray(` Items received: ${response.count}`));
|
|
142
|
+
console.log(chalk.gray(` Bytes transferred: ${bytesTransferred}`));
|
|
143
|
+
console.log(chalk.gray(` Duration: ${durationMs}ms`));
|
|
144
|
+
// Report progress: completed
|
|
145
|
+
options.onProgress?.({
|
|
146
|
+
phase: 'completed',
|
|
147
|
+
itemsSynced: response.count,
|
|
148
|
+
bytesTransferred,
|
|
149
|
+
});
|
|
150
|
+
return {
|
|
151
|
+
success: true,
|
|
152
|
+
data: response.data,
|
|
153
|
+
itemsReceived: response.count || 0,
|
|
154
|
+
bytesTransferred,
|
|
155
|
+
durationMs,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
const err = error;
|
|
160
|
+
const durationMs = Date.now() - startTime;
|
|
161
|
+
console.error(chalk.red('✗ Sync failed:'), err.message);
|
|
162
|
+
// Report progress: error
|
|
163
|
+
options.onProgress?.({
|
|
164
|
+
phase: 'error',
|
|
165
|
+
error: err.message,
|
|
166
|
+
});
|
|
167
|
+
return {
|
|
168
|
+
success: false,
|
|
169
|
+
itemsReceived: 0,
|
|
170
|
+
bytesTransferred,
|
|
171
|
+
durationMs,
|
|
172
|
+
error: err.message,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Send request with automatic retry
|
|
178
|
+
*/
|
|
179
|
+
async sendWithRetry(connection, request, attempt = 0) {
|
|
180
|
+
try {
|
|
181
|
+
// Simulate sending request
|
|
182
|
+
// In real implementation, this would use QUIC protocol
|
|
183
|
+
const response = await this.sendRequest(connection, request);
|
|
184
|
+
// Reset retry count on success
|
|
185
|
+
this.retryCount = 0;
|
|
186
|
+
return response;
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
const err = error;
|
|
190
|
+
if (attempt < this.config.maxRetries) {
|
|
191
|
+
const delay = this.config.retryDelayMs * Math.pow(2, attempt);
|
|
192
|
+
console.log(chalk.yellow(`⚠️ Request failed, retrying in ${delay}ms (attempt ${attempt + 1}/${this.config.maxRetries})`));
|
|
193
|
+
console.log(chalk.gray(` Error: ${err.message}`));
|
|
194
|
+
await this.sleep(delay);
|
|
195
|
+
return this.sendWithRetry(connection, request, attempt + 1);
|
|
196
|
+
}
|
|
197
|
+
throw new Error(`Sync failed after ${this.config.maxRetries} retries: ${err.message}`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Send request to server
|
|
202
|
+
*/
|
|
203
|
+
async sendRequest(connection, request) {
|
|
204
|
+
// Simulate request
|
|
205
|
+
// In real implementation, this would serialize and send via QUIC
|
|
206
|
+
connection.requestCount++;
|
|
207
|
+
connection.lastUsedAt = Date.now();
|
|
208
|
+
// Simulate network delay
|
|
209
|
+
await this.sleep(100);
|
|
210
|
+
// Mock response (in real implementation, this comes from server)
|
|
211
|
+
return {
|
|
212
|
+
success: true,
|
|
213
|
+
data: [],
|
|
214
|
+
count: 0,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Acquire connection from pool
|
|
219
|
+
*/
|
|
220
|
+
async acquireConnection() {
|
|
221
|
+
const timeout = Date.now() + this.config.timeoutMs;
|
|
222
|
+
while (Date.now() < timeout) {
|
|
223
|
+
for (const connection of this.connectionPool.values()) {
|
|
224
|
+
if (!connection.inUse) {
|
|
225
|
+
connection.inUse = true;
|
|
226
|
+
return connection;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// Wait and retry
|
|
230
|
+
await this.sleep(100);
|
|
231
|
+
}
|
|
232
|
+
throw new Error('Connection pool exhausted (timeout)');
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Release connection back to pool
|
|
236
|
+
*/
|
|
237
|
+
releaseConnection(connection) {
|
|
238
|
+
connection.inUse = false;
|
|
239
|
+
connection.lastUsedAt = Date.now();
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Get client status
|
|
243
|
+
*/
|
|
244
|
+
getStatus() {
|
|
245
|
+
let activeConnections = 0;
|
|
246
|
+
let totalRequests = 0;
|
|
247
|
+
for (const connection of this.connectionPool.values()) {
|
|
248
|
+
if (connection.inUse) {
|
|
249
|
+
activeConnections++;
|
|
250
|
+
}
|
|
251
|
+
totalRequests += connection.requestCount;
|
|
252
|
+
}
|
|
253
|
+
return {
|
|
254
|
+
isConnected: this.isConnected,
|
|
255
|
+
poolSize: this.connectionPool.size,
|
|
256
|
+
activeConnections,
|
|
257
|
+
totalRequests,
|
|
258
|
+
config: this.config,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Test connection to server
|
|
263
|
+
*/
|
|
264
|
+
async ping() {
|
|
265
|
+
const startTime = Date.now();
|
|
266
|
+
try {
|
|
267
|
+
if (!this.isConnected) {
|
|
268
|
+
await this.connect();
|
|
269
|
+
}
|
|
270
|
+
const connection = await this.acquireConnection();
|
|
271
|
+
// Send ping request
|
|
272
|
+
await this.sendRequest(connection, { type: 'ping' });
|
|
273
|
+
this.releaseConnection(connection);
|
|
274
|
+
const latencyMs = Date.now() - startTime;
|
|
275
|
+
console.log(chalk.green(`✓ Ping successful: ${latencyMs}ms`));
|
|
276
|
+
return {
|
|
277
|
+
success: true,
|
|
278
|
+
latencyMs,
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
const err = error;
|
|
283
|
+
const latencyMs = Date.now() - startTime;
|
|
284
|
+
console.error(chalk.red('✗ Ping failed:'), err.message);
|
|
285
|
+
return {
|
|
286
|
+
success: false,
|
|
287
|
+
latencyMs,
|
|
288
|
+
error: err.message,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Sleep helper
|
|
294
|
+
*/
|
|
295
|
+
sleep(ms) {
|
|
296
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=QUICClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QUICClient.js","sourceRoot":"","sources":["../../src/controllers/QUICClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QUICServer - QUIC Protocol Server for AgentDB Synchronization
|
|
3
|
+
*
|
|
4
|
+
* Implements a QUIC server for receiving and handling synchronization requests
|
|
5
|
+
* from remote AgentDB instances. Supports episodes, skills, and edge synchronization.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Start/stop server lifecycle management
|
|
9
|
+
* - Client connection handling
|
|
10
|
+
* - Authentication and authorization
|
|
11
|
+
* - Rate limiting per client
|
|
12
|
+
* - Sync request processing (episodes, skills, edges)
|
|
13
|
+
* - Comprehensive error handling and logging
|
|
14
|
+
*/
|
|
15
|
+
type Database = any;
|
|
16
|
+
export interface QUICServerConfig {
|
|
17
|
+
host?: string;
|
|
18
|
+
port?: number;
|
|
19
|
+
maxConnections?: number;
|
|
20
|
+
authToken?: string;
|
|
21
|
+
rateLimit?: {
|
|
22
|
+
maxRequestsPerMinute: number;
|
|
23
|
+
maxBytesPerMinute: number;
|
|
24
|
+
};
|
|
25
|
+
tlsConfig?: {
|
|
26
|
+
cert?: string;
|
|
27
|
+
key?: string;
|
|
28
|
+
ca?: string;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export interface SyncRequest {
|
|
32
|
+
type: 'episodes' | 'skills' | 'edges' | 'full';
|
|
33
|
+
since?: number;
|
|
34
|
+
filters?: Record<string, any>;
|
|
35
|
+
batchSize?: number;
|
|
36
|
+
}
|
|
37
|
+
export interface SyncResponse {
|
|
38
|
+
success: boolean;
|
|
39
|
+
data?: any;
|
|
40
|
+
error?: string;
|
|
41
|
+
nextCursor?: number;
|
|
42
|
+
hasMore?: boolean;
|
|
43
|
+
count?: number;
|
|
44
|
+
}
|
|
45
|
+
interface ClientConnection {
|
|
46
|
+
id: string;
|
|
47
|
+
address: string;
|
|
48
|
+
connectedAt: number;
|
|
49
|
+
requestCount: number;
|
|
50
|
+
bytesReceived: number;
|
|
51
|
+
lastRequestAt: number;
|
|
52
|
+
}
|
|
53
|
+
export declare class QUICServer {
|
|
54
|
+
private db;
|
|
55
|
+
private config;
|
|
56
|
+
private isRunning;
|
|
57
|
+
private connections;
|
|
58
|
+
private rateLimitState;
|
|
59
|
+
private server;
|
|
60
|
+
private cleanupInterval;
|
|
61
|
+
constructor(db: Database, config?: QUICServerConfig);
|
|
62
|
+
/**
|
|
63
|
+
* Start the QUIC server
|
|
64
|
+
*/
|
|
65
|
+
start(): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Stop the QUIC server
|
|
68
|
+
*/
|
|
69
|
+
stop(): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Handle incoming client connection
|
|
72
|
+
*/
|
|
73
|
+
private handleConnection;
|
|
74
|
+
/**
|
|
75
|
+
* Authenticate client request
|
|
76
|
+
*/
|
|
77
|
+
private authenticate;
|
|
78
|
+
/**
|
|
79
|
+
* Check rate limits for client
|
|
80
|
+
*/
|
|
81
|
+
private checkRateLimit;
|
|
82
|
+
/**
|
|
83
|
+
* Process sync request from client
|
|
84
|
+
*/
|
|
85
|
+
processSyncRequest(clientId: string, request: SyncRequest, authToken: string): Promise<SyncResponse>;
|
|
86
|
+
/**
|
|
87
|
+
* Sync episodes data
|
|
88
|
+
*/
|
|
89
|
+
private syncEpisodes;
|
|
90
|
+
/**
|
|
91
|
+
* Sync skills data
|
|
92
|
+
*/
|
|
93
|
+
private syncSkills;
|
|
94
|
+
/**
|
|
95
|
+
* Sync edges (skill relationships)
|
|
96
|
+
*/
|
|
97
|
+
private syncEdges;
|
|
98
|
+
/**
|
|
99
|
+
* Full sync of all data
|
|
100
|
+
*/
|
|
101
|
+
private syncFull;
|
|
102
|
+
/**
|
|
103
|
+
* Start cleanup interval for stale connections
|
|
104
|
+
*/
|
|
105
|
+
private startCleanupInterval;
|
|
106
|
+
/**
|
|
107
|
+
* Get server status
|
|
108
|
+
*/
|
|
109
|
+
getStatus(): {
|
|
110
|
+
isRunning: boolean;
|
|
111
|
+
activeConnections: number;
|
|
112
|
+
totalRequests: number;
|
|
113
|
+
config: QUICServerConfig;
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Get connection info
|
|
117
|
+
*/
|
|
118
|
+
getConnections(): ClientConnection[];
|
|
119
|
+
}
|
|
120
|
+
export {};
|
|
121
|
+
//# sourceMappingURL=QUICServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QUICServer.d.ts","sourceRoot":"","sources":["../../src/controllers/QUICServer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,KAAK,QAAQ,GAAG,GAAG,CAAC;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE;QACV,oBAAoB,EAAE,MAAM,CAAC;QAC7B,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,SAAS,CAAC,EAAE;QACV,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,EAAE,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAQD,qBAAa,UAAU;IACrB,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,WAAW,CAA4C;IAC/D,OAAO,CAAC,cAAc,CAA0C;IAChE,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,eAAe,CAA+B;gBAE1C,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAE,gBAAqB;IAevD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA4B5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAsC3B;;OAEG;YACW,gBAAgB;IAwB9B;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB;;OAEG;IACH,OAAO,CAAC,cAAc;IAgCtB;;OAEG;IACG,kBAAkB,CACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC;IA6ExB;;OAEG;YACW,YAAY;IA6C1B;;OAEG;YACW,UAAU;IA8BxB;;OAEG;YACW,SAAS;IA0BvB;;OAEG;YACW,QAAQ;IActB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;OAEG;IACH,SAAS,IAAI;QACX,SAAS,EAAE,OAAO,CAAC;QACnB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,aAAa,EAAE,MAAM,CAAC;QACtB,MAAM,EAAE,gBAAgB,CAAC;KAC1B;IAcD;;OAEG;IACH,cAAc,IAAI,gBAAgB,EAAE;CAGrC"}
|