@vybestack/llxprt-code-core 0.8.0 → 0.9.0-nightly.260119.0f050754d

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 (42) hide show
  1. package/dist/src/auth/token-store.d.ts +57 -0
  2. package/dist/src/auth/token-store.js +137 -0
  3. package/dist/src/auth/token-store.js.map +1 -1
  4. package/dist/src/core/nonInteractiveToolExecutor.js +6 -1
  5. package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
  6. package/dist/src/index.d.ts +1 -0
  7. package/dist/src/index.js +3 -1
  8. package/dist/src/index.js.map +1 -1
  9. package/dist/src/models/hydration.d.ts +40 -0
  10. package/dist/src/models/hydration.js +148 -0
  11. package/dist/src/models/hydration.js.map +1 -0
  12. package/dist/src/models/index.d.ts +33 -0
  13. package/dist/src/models/index.js +46 -0
  14. package/dist/src/models/index.js.map +1 -0
  15. package/dist/src/models/profiles.d.ts +19 -0
  16. package/dist/src/models/profiles.js +83 -0
  17. package/dist/src/models/profiles.js.map +1 -0
  18. package/dist/src/models/provider-integration.d.ts +49 -0
  19. package/dist/src/models/provider-integration.js +162 -0
  20. package/dist/src/models/provider-integration.js.map +1 -0
  21. package/dist/src/models/registry.d.ts +137 -0
  22. package/dist/src/models/registry.js +321 -0
  23. package/dist/src/models/registry.js.map +1 -0
  24. package/dist/src/models/schema.d.ts +1173 -0
  25. package/dist/src/models/schema.js +166 -0
  26. package/dist/src/models/schema.js.map +1 -0
  27. package/dist/src/models/transformer.d.ts +21 -0
  28. package/dist/src/models/transformer.js +130 -0
  29. package/dist/src/models/transformer.js.map +1 -0
  30. package/dist/src/providers/IProviderManager.d.ts +7 -3
  31. package/dist/src/providers/ProviderManager.d.ts +2 -2
  32. package/dist/src/providers/ProviderManager.js +56 -1
  33. package/dist/src/providers/ProviderManager.js.map +1 -1
  34. package/dist/src/providers/anthropic/AnthropicProvider.js +15 -15
  35. package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
  36. package/dist/src/providers/gemini/GeminiProvider.js +27 -25
  37. package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
  38. package/dist/src/providers/openai/OpenAIProvider.js +15 -5
  39. package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
  40. package/dist/src/tools/diffOptions.d.ts +7 -3
  41. package/dist/src/tools/diffOptions.js.map +1 -1
  42. package/package.json +1 -1
@@ -0,0 +1,321 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import * as fs from 'node:fs';
7
+ import * as path from 'node:path';
8
+ import { Storage } from '../config/storage.js';
9
+ import { ModelsDevApiResponseSchema, } from './schema.js';
10
+ import { transformApiResponse } from './transformer.js';
11
+ const MODELS_DEV_API_URL = 'https://models.dev/api.json';
12
+ const CACHE_FILENAME = 'models.json';
13
+ const CACHE_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000; // 7 days
14
+ const REFRESH_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours
15
+ const FETCH_TIMEOUT_MS = 10000; // 10 seconds
16
+ /**
17
+ * ModelRegistry - Central registry for AI model metadata from models.dev
18
+ *
19
+ * Provides:
20
+ * - Automatic loading from cache or bundled fallback
21
+ * - Background periodic refresh (24h)
22
+ * - Search and filtering by capabilities, price, context
23
+ * - Event emission for UI updates
24
+ */
25
+ export class ModelRegistry {
26
+ models = new Map();
27
+ providers = new Map();
28
+ lastRefresh = null;
29
+ refreshTimer = null;
30
+ listeners = new Map();
31
+ initialized = false;
32
+ initPromise = null;
33
+ /**
34
+ * Get the cache file path
35
+ */
36
+ static getCachePath() {
37
+ const cacheDir = path.join(Storage.getGlobalLlxprtDir(), 'cache');
38
+ return path.join(cacheDir, CACHE_FILENAME);
39
+ }
40
+ /**
41
+ * Initialize the registry - loads models and starts background refresh
42
+ */
43
+ async initialize() {
44
+ if (this.initialized)
45
+ return;
46
+ if (this.initPromise)
47
+ return this.initPromise;
48
+ this.initPromise = (async () => {
49
+ await this.loadModels();
50
+ this.initialized = true;
51
+ this.startBackgroundRefresh();
52
+ })();
53
+ await this.initPromise;
54
+ }
55
+ /**
56
+ * Load models from cache or trigger fresh fetch
57
+ */
58
+ async loadModels() {
59
+ // Try cache first
60
+ const cached = await this.loadFromCache();
61
+ if (cached) {
62
+ this.populateModels(cached);
63
+ return;
64
+ }
65
+ // No cache - trigger refresh
66
+ this.refresh().catch(() => {
67
+ // Silent failure - models will be empty until next refresh
68
+ });
69
+ }
70
+ /**
71
+ * Load from cache file if fresh
72
+ */
73
+ async loadFromCache() {
74
+ try {
75
+ const cachePath = ModelRegistry.getCachePath();
76
+ if (!fs.existsSync(cachePath)) {
77
+ return null;
78
+ }
79
+ const stats = fs.statSync(cachePath);
80
+ const age = Date.now() - stats.mtimeMs;
81
+ // Check if cache is stale
82
+ if (age > CACHE_MAX_AGE_MS) {
83
+ return null;
84
+ }
85
+ const content = fs.readFileSync(cachePath, 'utf-8');
86
+ const data = JSON.parse(content);
87
+ // Validate schema
88
+ const validated = ModelsDevApiResponseSchema.safeParse(data);
89
+ if (!validated.success) {
90
+ return null;
91
+ }
92
+ return validated.data;
93
+ }
94
+ catch {
95
+ return null;
96
+ }
97
+ }
98
+ /**
99
+ * Refresh models from models.dev API (non-blocking)
100
+ */
101
+ async refresh() {
102
+ const controller = new AbortController();
103
+ const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
104
+ try {
105
+ const response = await fetch(MODELS_DEV_API_URL, {
106
+ headers: {
107
+ 'User-Agent': 'llxprt/1.0',
108
+ },
109
+ signal: controller.signal,
110
+ });
111
+ if (!response.ok) {
112
+ return false;
113
+ }
114
+ const data = await response.json();
115
+ // Validate schema
116
+ const validated = ModelsDevApiResponseSchema.safeParse(data);
117
+ if (!validated.success) {
118
+ return false;
119
+ }
120
+ // Save to cache
121
+ await this.saveToCache(validated.data);
122
+ // Update in-memory registry
123
+ this.populateModels(validated.data);
124
+ this.lastRefresh = new Date();
125
+ this.emit('models:updated');
126
+ return true;
127
+ }
128
+ catch {
129
+ this.emit('models:error');
130
+ return false;
131
+ }
132
+ finally {
133
+ clearTimeout(timeout);
134
+ }
135
+ }
136
+ /**
137
+ * Save data to cache file
138
+ */
139
+ async saveToCache(data) {
140
+ try {
141
+ const cachePath = ModelRegistry.getCachePath();
142
+ const cacheDir = path.dirname(cachePath);
143
+ // Ensure cache directory exists
144
+ if (!fs.existsSync(cacheDir)) {
145
+ fs.mkdirSync(cacheDir, { recursive: true });
146
+ }
147
+ fs.writeFileSync(cachePath, JSON.stringify(data, null, 2));
148
+ }
149
+ catch {
150
+ // Silent failure - cache is optional
151
+ }
152
+ }
153
+ /**
154
+ * Populate internal maps from API response
155
+ */
156
+ populateModels(data) {
157
+ const { models, providers } = transformApiResponse(data);
158
+ this.models = models;
159
+ this.providers = providers;
160
+ }
161
+ /**
162
+ * Start background refresh timer
163
+ */
164
+ startBackgroundRefresh() {
165
+ if (this.refreshTimer)
166
+ return;
167
+ this.refreshTimer = setInterval(() => {
168
+ this.refresh().catch(() => {
169
+ // Silent failure
170
+ });
171
+ }, REFRESH_INTERVAL_MS);
172
+ // Don't prevent process exit
173
+ this.refreshTimer.unref?.();
174
+ }
175
+ /**
176
+ * Stop background refresh and cleanup
177
+ */
178
+ dispose() {
179
+ if (this.refreshTimer) {
180
+ clearInterval(this.refreshTimer);
181
+ this.refreshTimer = null;
182
+ }
183
+ this.listeners.clear();
184
+ }
185
+ // ============== Public Query API ==============
186
+ /**
187
+ * Get all models
188
+ */
189
+ getAll() {
190
+ return Array.from(this.models.values());
191
+ }
192
+ /**
193
+ * Get model by full ID (provider/model-id)
194
+ */
195
+ getById(id) {
196
+ return this.models.get(id);
197
+ }
198
+ /**
199
+ * Get all models for a specific provider
200
+ */
201
+ getByProvider(providerId) {
202
+ return this.getAll().filter((m) => m.providerId === providerId);
203
+ }
204
+ /**
205
+ * Search models by various criteria
206
+ */
207
+ search(query) {
208
+ let results = this.getAll();
209
+ if (query.provider) {
210
+ results = results.filter((m) => m.providerId === query.provider);
211
+ }
212
+ if (query.capability) {
213
+ results = results.filter((m) => m.capabilities[query.capability]);
214
+ }
215
+ if (query.reasoning !== undefined) {
216
+ results = results.filter((m) => m.capabilities.reasoning === query.reasoning);
217
+ }
218
+ if (query.toolCalling !== undefined) {
219
+ results = results.filter((m) => m.capabilities.toolCalling === query.toolCalling);
220
+ }
221
+ if (query.maxPrice !== undefined) {
222
+ results = results.filter((m) => m.pricing && m.pricing.input <= query.maxPrice);
223
+ }
224
+ if (query.minContext !== undefined) {
225
+ results = results.filter((m) => m.limits.contextWindow >= query.minContext);
226
+ }
227
+ return results;
228
+ }
229
+ /**
230
+ * Get all providers
231
+ */
232
+ getProviders() {
233
+ return Array.from(this.providers.values());
234
+ }
235
+ /**
236
+ * Get provider by ID
237
+ */
238
+ getProvider(providerId) {
239
+ return this.providers.get(providerId);
240
+ }
241
+ /**
242
+ * Get cache metadata
243
+ */
244
+ getCacheMetadata() {
245
+ if (!this.lastRefresh)
246
+ return null;
247
+ return {
248
+ fetchedAt: this.lastRefresh.toISOString(),
249
+ version: '1.0',
250
+ providerCount: this.providers.size,
251
+ modelCount: this.models.size,
252
+ };
253
+ }
254
+ /**
255
+ * Check if registry has been initialized
256
+ */
257
+ isInitialized() {
258
+ return this.initialized;
259
+ }
260
+ /**
261
+ * Get model count
262
+ */
263
+ getModelCount() {
264
+ return this.models.size;
265
+ }
266
+ /**
267
+ * Get provider count
268
+ */
269
+ getProviderCount() {
270
+ return this.providers.size;
271
+ }
272
+ // ============== Event System ==============
273
+ /**
274
+ * Subscribe to registry events
275
+ */
276
+ on(event, callback) {
277
+ if (!this.listeners.has(event)) {
278
+ this.listeners.set(event, []);
279
+ }
280
+ this.listeners.get(event).push(callback);
281
+ }
282
+ /**
283
+ * Unsubscribe from registry events
284
+ */
285
+ off(event, callback) {
286
+ const callbacks = this.listeners.get(event);
287
+ if (callbacks) {
288
+ const index = callbacks.indexOf(callback);
289
+ if (index !== -1) {
290
+ callbacks.splice(index, 1);
291
+ }
292
+ }
293
+ }
294
+ /**
295
+ * Emit an event
296
+ */
297
+ emit(event) {
298
+ const callbacks = this.listeners.get(event) || [];
299
+ callbacks.forEach((cb) => cb());
300
+ }
301
+ }
302
+ // Singleton instance
303
+ let registryInstance = null;
304
+ /**
305
+ * Get the global ModelRegistry instance
306
+ */
307
+ export function getModelRegistry() {
308
+ if (!registryInstance) {
309
+ registryInstance = new ModelRegistry();
310
+ }
311
+ return registryInstance;
312
+ }
313
+ /**
314
+ * Initialize the global ModelRegistry
315
+ */
316
+ export async function initializeModelRegistry() {
317
+ const registry = getModelRegistry();
318
+ await registry.initialize();
319
+ return registry;
320
+ }
321
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/models/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EACL,0BAA0B,GAK3B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,kBAAkB,GAAG,6BAA6B,CAAC;AACzD,MAAM,cAAc,GAAG,aAAa,CAAC;AACrC,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AAC3D,MAAM,mBAAmB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;AAC5D,MAAM,gBAAgB,GAAG,KAAK,CAAC,CAAC,aAAa;AAqB7C;;;;;;;;GAQG;AACH,MAAM,OAAO,aAAa;IAChB,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IACxC,SAAS,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC9C,WAAW,GAAgB,IAAI,CAAC;IAChC,YAAY,GAA0C,IAAI,CAAC;IAC3D,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC/C,WAAW,GAAG,KAAK,CAAC;IACpB,WAAW,GAAyB,IAAI,CAAC;IAEjD;;OAEG;IACK,MAAM,CAAC,YAAY;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,OAAO,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAC7B,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC;QAE9C,IAAI,CAAC,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE;YAC7B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACxB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAChC,CAAC,CAAC,EAAE,CAAC;QACL,MAAM,IAAI,CAAC,WAAW,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU;QACtB,kBAAkB;QAClB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1C,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,6BAA6B;QAC7B,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;YACxB,2DAA2D;QAC7D,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa;QACzB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,EAAE,CAAC;YAE/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9B,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;YAEvC,0BAA0B;YAC1B,IAAI,GAAG,GAAG,gBAAgB,EAAE,CAAC;gBAC3B,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEjC,kBAAkB;YAClB,MAAM,SAAS,GAAG,0BAA0B,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC7D,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,SAAS,CAAC,IAAI,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;QAEvE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,kBAAkB,EAAE;gBAC/C,OAAO,EAAE;oBACP,YAAY,EAAE,YAAY;iBAC3B;gBACD,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEnC,kBAAkB;YAClB,MAAM,SAAS,GAAG,0BAA0B,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC7D,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gBACvB,OAAO,KAAK,CAAC;YACf,CAAC;YAED,gBAAgB;YAChB,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAEvC,4BAA4B;YAC5B,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;YAE9B,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC1B,OAAO,KAAK,CAAC;QACf,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,WAAW,CAAC,IAA0B;QAClD,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAEzC,gCAAgC;YAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,CAAC;YAED,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,qCAAqC;QACvC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,IAA0B;QAC/C,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,sBAAsB;QAC5B,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO;QAE9B,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;YACnC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;gBACxB,iBAAiB;YACnB,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,mBAAmB,CAAC,CAAC;QAExB,6BAA6B;QAC7B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,iDAAiD;IAEjD;;OAEG;IACH,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,UAAkB;QAC9B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAuB;QAC5B,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAE5B,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,UAAW,CAAC,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAClC,OAAO,GAAG,OAAO,CAAC,MAAM,CACtB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,CACpD,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO,GAAG,OAAO,CAAC,MAAM,CACtB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,CACxD,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,GAAG,OAAO,CAAC,MAAM,CACtB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,QAAS,CACvD,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,GAAG,OAAO,CAAC,MAAM,CACtB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,IAAI,KAAK,CAAC,UAAW,CACnD,CAAC;QACJ,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,UAAkB;QAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAEnC,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;YACzC,OAAO,EAAE,KAAK;YACd,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;YAClC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;SAC7B,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,6CAA6C;IAE7C;;OAEG;IACH,EAAE,CAAC,KAAyB,EAAE,QAAuB;QACnD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,KAAyB,EAAE,QAAuB;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC1C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,IAAI,CAAC,KAAyB;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAClD,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAClC,CAAC;CACF;AAED,qBAAqB;AACrB,IAAI,gBAAgB,GAAyB,IAAI,CAAC;AAElD;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,gBAAgB,GAAG,IAAI,aAAa,EAAE,CAAC;IACzC,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAC3C,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;IAC5B,OAAO,QAAQ,CAAC;AAClB,CAAC"}