@robinmordasiewicz/f5xc-api-mcp 3.11.0 → 3.12.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.
@@ -0,0 +1,499 @@
1
+ /**
2
+ * Best Practices Discovery
3
+ *
4
+ * Generates domain-specific best practices from tool metadata including:
5
+ * - Common errors and resolutions
6
+ * - Danger level analysis
7
+ * - Recommended workflows
8
+ * - Security considerations
9
+ */
10
+ import { getToolIndex } from "./index-loader.js";
11
+ import { getResourcesInDomain, getAllDependencyDomains } from "./dependencies.js";
12
+ /**
13
+ * Domain display names and descriptions
14
+ */
15
+ const DOMAIN_INFO = {
16
+ virtual: {
17
+ displayName: "Virtual Services (WAAP)",
18
+ description: "HTTP load balancers, origin pools, and web application protection",
19
+ },
20
+ network: {
21
+ displayName: "Network Infrastructure",
22
+ description: "Network policies, cloud connectors, and routing configuration",
23
+ },
24
+ dns: {
25
+ displayName: "DNS Management",
26
+ description: "DNS zones, records, and domain management",
27
+ },
28
+ certificates: {
29
+ displayName: "Certificate Management",
30
+ description: "TLS certificates, CA management, and certificate lifecycle",
31
+ },
32
+ waf: {
33
+ displayName: "Web Application Firewall",
34
+ description: "WAF policies, rule sets, and security configurations",
35
+ },
36
+ sites: {
37
+ displayName: "Site Management",
38
+ description: "F5XC site deployment and configuration across cloud providers",
39
+ },
40
+ api: {
41
+ displayName: "API Security",
42
+ description: "API definitions, discovery, and protection policies",
43
+ },
44
+ bot_and_threat_defense: {
45
+ displayName: "Bot & Threat Defense",
46
+ description: "Bot detection, threat intelligence, and automated defense",
47
+ },
48
+ authentication: {
49
+ displayName: "Authentication",
50
+ description: "Identity providers, OIDC, and authentication policies",
51
+ },
52
+ users: {
53
+ displayName: "User Management",
54
+ description: "User accounts, roles, and access control",
55
+ },
56
+ tenant_and_identity: {
57
+ displayName: "Tenant & Identity",
58
+ description: "Tenant configuration and identity management",
59
+ },
60
+ };
61
+ /**
62
+ * Common errors by domain
63
+ */
64
+ const DOMAIN_COMMON_ERRORS = {
65
+ virtual: [
66
+ {
67
+ statusCode: 404,
68
+ errorType: "NotFound",
69
+ description: "Origin pool or referenced resource not found",
70
+ resolution: [
71
+ "Verify the origin pool exists using f5xc-api-network-origin-pool-list",
72
+ "Check namespace is correct",
73
+ "Ensure referenced certificates exist",
74
+ ],
75
+ relatedTools: ["f5xc-api-network-origin-pool-list", "f5xc-api-certificates-certificate-list"],
76
+ },
77
+ {
78
+ statusCode: 409,
79
+ errorType: "Conflict",
80
+ description: "Load balancer with same name already exists",
81
+ resolution: [
82
+ "Use a unique name for the load balancer",
83
+ "Delete existing resource if replacement is intended",
84
+ "Check for naming conflicts across namespaces",
85
+ ],
86
+ },
87
+ ],
88
+ dns: [
89
+ {
90
+ statusCode: 400,
91
+ errorType: "ValidationError",
92
+ description: "Invalid DNS record format or TTL",
93
+ resolution: [
94
+ "Verify record type matches the data format",
95
+ "Check TTL is within valid range (60-86400)",
96
+ "Ensure FQDN is properly formatted",
97
+ ],
98
+ },
99
+ ],
100
+ certificates: [
101
+ {
102
+ statusCode: 400,
103
+ errorType: "CertificateError",
104
+ description: "Invalid certificate chain or format",
105
+ resolution: [
106
+ "Verify certificate is in PEM format",
107
+ "Ensure full chain is included",
108
+ "Check certificate is not expired",
109
+ "Verify private key matches certificate",
110
+ ],
111
+ },
112
+ ],
113
+ };
114
+ /**
115
+ * Security notes by domain
116
+ */
117
+ const DOMAIN_SECURITY_NOTES = {
118
+ virtual: [
119
+ "Always enable WAF policies for production load balancers",
120
+ "Use TLS 1.2 or higher for all HTTPS listeners",
121
+ "Configure rate limiting to prevent DoS attacks",
122
+ "Review origin pool health check configurations",
123
+ ],
124
+ certificates: [
125
+ "Never expose private keys in API responses",
126
+ "Use certificate chains for proper validation",
127
+ "Set up certificate expiration alerts",
128
+ "Prefer automatic certificate management when available",
129
+ ],
130
+ authentication: [
131
+ "Use short-lived API tokens when possible",
132
+ "Implement token rotation policies",
133
+ "Audit authentication logs regularly",
134
+ "Use certificate-based authentication for automation",
135
+ ],
136
+ users: [
137
+ "Follow principle of least privilege",
138
+ "Regularly audit user access and roles",
139
+ "Use namespaces to isolate resources",
140
+ "Enable MFA for console access",
141
+ ],
142
+ };
143
+ /**
144
+ * Performance tips by domain
145
+ */
146
+ const DOMAIN_PERFORMANCE_TIPS = {
147
+ virtual: [
148
+ "Use appropriate health check intervals to balance detection vs overhead",
149
+ "Configure connection pooling for origin servers",
150
+ "Enable response caching where appropriate",
151
+ "Use regional deployments for latency-sensitive applications",
152
+ ],
153
+ dns: [
154
+ "Set appropriate TTLs based on update frequency",
155
+ "Use ALIAS records for apex domains when possible",
156
+ "Configure health-based routing for failover",
157
+ ],
158
+ sites: [
159
+ "Pre-configure site templates for faster deployments",
160
+ "Use site mesh groups for efficient routing",
161
+ "Monitor site health metrics proactively",
162
+ ],
163
+ };
164
+ /**
165
+ * Analyze danger levels for a domain
166
+ */
167
+ function analyzeDangerLevels(domain) {
168
+ const index = getToolIndex();
169
+ const domainTools = index.tools.filter((t) => t.domain === domain);
170
+ const analysis = {
171
+ low: 0,
172
+ medium: 0,
173
+ high: 0,
174
+ highDangerTools: [],
175
+ safePercentage: 0,
176
+ };
177
+ for (const tool of domainTools) {
178
+ switch (tool.dangerLevel) {
179
+ case "low":
180
+ analysis.low++;
181
+ break;
182
+ case "medium":
183
+ analysis.medium++;
184
+ break;
185
+ case "high":
186
+ analysis.high++;
187
+ analysis.highDangerTools.push(tool.name);
188
+ break;
189
+ }
190
+ }
191
+ const total = domainTools.length;
192
+ if (total > 0) {
193
+ analysis.safePercentage = Math.round(((analysis.low + analysis.medium) / total) * 100);
194
+ }
195
+ return analysis;
196
+ }
197
+ /**
198
+ * Count operations by type for a domain
199
+ */
200
+ function countOperations(domain) {
201
+ const index = getToolIndex();
202
+ const domainTools = index.tools.filter((t) => t.domain === domain);
203
+ const ops = {
204
+ create: 0,
205
+ get: 0,
206
+ list: 0,
207
+ update: 0,
208
+ delete: 0,
209
+ other: 0,
210
+ };
211
+ for (const tool of domainTools) {
212
+ switch (tool.operation) {
213
+ case "create":
214
+ ops.create++;
215
+ break;
216
+ case "get":
217
+ ops.get++;
218
+ break;
219
+ case "list":
220
+ ops.list++;
221
+ break;
222
+ case "update":
223
+ ops.update++;
224
+ break;
225
+ case "delete":
226
+ ops.delete++;
227
+ break;
228
+ default:
229
+ ops.other++;
230
+ }
231
+ }
232
+ return ops;
233
+ }
234
+ /**
235
+ * Generate recommended workflows for a domain
236
+ */
237
+ function generateWorkflows(domain) {
238
+ const workflows = [];
239
+ // Get resources in the domain from dependency graph
240
+ const resources = getResourcesInDomain(domain);
241
+ // Create a basic CRUD workflow for the domain
242
+ if (resources.length > 0) {
243
+ workflows.push({
244
+ name: `List ${domain} resources`,
245
+ description: `Discover existing resources in the ${domain} domain`,
246
+ steps: [
247
+ {
248
+ stepNumber: 1,
249
+ action: "Search for list operations",
250
+ note: `Use f5xc-api-search-tools with query '${domain} list'`,
251
+ },
252
+ {
253
+ stepNumber: 2,
254
+ action: "Execute list operation",
255
+ note: "Provide namespace parameter to scope results",
256
+ },
257
+ {
258
+ stepNumber: 3,
259
+ action: "Review results",
260
+ note: "Check resource metadata and dependencies",
261
+ },
262
+ ],
263
+ complexity: "low",
264
+ });
265
+ }
266
+ // Domain-specific workflows
267
+ if (domain === "virtual") {
268
+ workflows.push({
269
+ name: "Deploy HTTP Load Balancer",
270
+ description: "Complete workflow to deploy an HTTP load balancer with WAF protection",
271
+ steps: [
272
+ {
273
+ stepNumber: 1,
274
+ action: "Create origin pool",
275
+ toolName: "f5xc-api-network-origin-pool-create",
276
+ },
277
+ {
278
+ stepNumber: 2,
279
+ action: "Create WAF policy (optional)",
280
+ toolName: "f5xc-api-waf-app-firewall-create",
281
+ },
282
+ {
283
+ stepNumber: 3,
284
+ action: "Create HTTP load balancer",
285
+ toolName: "f5xc-api-virtual-http-loadbalancer-create",
286
+ },
287
+ {
288
+ stepNumber: 4,
289
+ action: "Verify deployment",
290
+ toolName: "f5xc-api-virtual-http-loadbalancer-get",
291
+ },
292
+ ],
293
+ prerequisites: ["Certificate (if using HTTPS)", "Namespace"],
294
+ complexity: "medium",
295
+ });
296
+ }
297
+ if (domain === "dns") {
298
+ workflows.push({
299
+ name: "Configure DNS Zone",
300
+ description: "Set up a DNS zone with common record types",
301
+ steps: [
302
+ { stepNumber: 1, action: "Create DNS zone", toolName: "f5xc-api-dns-dns-zone-create" },
303
+ { stepNumber: 2, action: "Add A/AAAA records", note: "Create records for your services" },
304
+ { stepNumber: 3, action: "Add CNAME records (optional)", note: "Set up aliases" },
305
+ { stepNumber: 4, action: "Verify propagation", note: "Use dig or nslookup to verify" },
306
+ ],
307
+ complexity: "low",
308
+ });
309
+ }
310
+ return workflows;
311
+ }
312
+ /**
313
+ * Get best practices for a specific domain
314
+ */
315
+ export function getDomainBestPractices(domain) {
316
+ const index = getToolIndex();
317
+ const domainTools = index.tools.filter((t) => t.domain === domain);
318
+ if (domainTools.length === 0) {
319
+ return null;
320
+ }
321
+ const info = DOMAIN_INFO[domain] ?? {
322
+ displayName: domain.replace(/_/g, " ").replace(/\b\w/g, (l) => l.toUpperCase()),
323
+ description: `Operations for ${domain} resources`,
324
+ };
325
+ return {
326
+ domain,
327
+ displayName: info.displayName,
328
+ description: info.description,
329
+ totalTools: domainTools.length,
330
+ operations: countOperations(domain),
331
+ dangerAnalysis: analyzeDangerLevels(domain),
332
+ commonErrors: DOMAIN_COMMON_ERRORS[domain] ?? [],
333
+ workflows: generateWorkflows(domain),
334
+ securityNotes: DOMAIN_SECURITY_NOTES[domain] ?? [],
335
+ performanceTips: DOMAIN_PERFORMANCE_TIPS[domain] ?? [],
336
+ };
337
+ }
338
+ /**
339
+ * Query best practices
340
+ */
341
+ export function queryBestPractices(query) {
342
+ // If no domain specified, return available domains
343
+ if (!query.domain) {
344
+ const domains = getAllDependencyDomains();
345
+ return {
346
+ success: true,
347
+ availableDomains: domains,
348
+ };
349
+ }
350
+ // Get best practices for specified domain
351
+ const practices = getDomainBestPractices(query.domain);
352
+ if (!practices) {
353
+ return {
354
+ success: false,
355
+ error: `Domain '${query.domain}' not found. Use without domain parameter to see available domains.`,
356
+ };
357
+ }
358
+ // Filter by aspect if specified
359
+ if (query.aspect && query.aspect !== "all") {
360
+ const filtered = { ...practices };
361
+ switch (query.aspect) {
362
+ case "errors":
363
+ filtered.workflows = [];
364
+ filtered.securityNotes = [];
365
+ filtered.performanceTips = [];
366
+ break;
367
+ case "workflows":
368
+ filtered.commonErrors = [];
369
+ filtered.securityNotes = [];
370
+ filtered.performanceTips = [];
371
+ break;
372
+ case "danger":
373
+ filtered.commonErrors = [];
374
+ filtered.workflows = [];
375
+ filtered.securityNotes = [];
376
+ filtered.performanceTips = [];
377
+ break;
378
+ case "security":
379
+ filtered.commonErrors = [];
380
+ filtered.workflows = [];
381
+ filtered.performanceTips = [];
382
+ break;
383
+ case "performance":
384
+ filtered.commonErrors = [];
385
+ filtered.workflows = [];
386
+ filtered.securityNotes = [];
387
+ break;
388
+ }
389
+ return {
390
+ success: true,
391
+ practices: filtered,
392
+ };
393
+ }
394
+ return {
395
+ success: true,
396
+ practices,
397
+ };
398
+ }
399
+ /**
400
+ * Get summary of all domains with their danger levels
401
+ */
402
+ export function getAllDomainsSummary() {
403
+ const index = getToolIndex();
404
+ const domains = new Map();
405
+ for (const tool of index.tools) {
406
+ const existing = domains.get(tool.domain) ?? { count: 0, safe: 0, dangerous: 0 };
407
+ existing.count++;
408
+ if (tool.dangerLevel === "low" || tool.dangerLevel === "medium") {
409
+ existing.safe++;
410
+ }
411
+ else {
412
+ existing.dangerous++;
413
+ }
414
+ domains.set(tool.domain, existing);
415
+ }
416
+ return Array.from(domains.entries())
417
+ .map(([domain, stats]) => {
418
+ const info = DOMAIN_INFO[domain];
419
+ return {
420
+ domain,
421
+ displayName: info?.displayName ?? domain.replace(/_/g, " ").replace(/\b\w/g, (l) => l.toUpperCase()),
422
+ toolCount: stats.count,
423
+ dangerSummary: { safe: stats.safe, dangerous: stats.dangerous },
424
+ };
425
+ })
426
+ .sort((a, b) => b.toolCount - a.toolCount);
427
+ }
428
+ /**
429
+ * Format best practices for human-readable output
430
+ */
431
+ export function formatBestPractices(practices) {
432
+ const lines = [];
433
+ lines.push(`# Best Practices: ${practices.displayName}`);
434
+ lines.push("");
435
+ lines.push(`**Description**: ${practices.description}`);
436
+ lines.push(`**Total Tools**: ${practices.totalTools}`);
437
+ lines.push("");
438
+ lines.push("## Operations");
439
+ lines.push(`- Create: ${practices.operations.create}`);
440
+ lines.push(`- Get: ${practices.operations.get}`);
441
+ lines.push(`- List: ${practices.operations.list}`);
442
+ lines.push(`- Update: ${practices.operations.update}`);
443
+ lines.push(`- Delete: ${practices.operations.delete}`);
444
+ lines.push("");
445
+ lines.push("## Danger Analysis");
446
+ lines.push(`- Safe Operations: ${practices.dangerAnalysis.safePercentage}%`);
447
+ lines.push(`- Low: ${practices.dangerAnalysis.low}`);
448
+ lines.push(`- Medium: ${practices.dangerAnalysis.medium}`);
449
+ lines.push(`- High: ${practices.dangerAnalysis.high}`);
450
+ if (practices.dangerAnalysis.highDangerTools.length > 0) {
451
+ lines.push(`- High-risk tools: ${practices.dangerAnalysis.highDangerTools.slice(0, 5).join(", ")}${practices.dangerAnalysis.highDangerTools.length > 5 ? "..." : ""}`);
452
+ }
453
+ lines.push("");
454
+ if (practices.commonErrors.length > 0) {
455
+ lines.push("## Common Errors");
456
+ for (const error of practices.commonErrors) {
457
+ lines.push(`### ${error.statusCode} - ${error.errorType}`);
458
+ lines.push(error.description);
459
+ lines.push("**Resolution**:");
460
+ for (const step of error.resolution) {
461
+ lines.push(`- ${step}`);
462
+ }
463
+ lines.push("");
464
+ }
465
+ }
466
+ if (practices.workflows.length > 0) {
467
+ lines.push("## Recommended Workflows");
468
+ for (const workflow of practices.workflows) {
469
+ lines.push(`### ${workflow.name}`);
470
+ lines.push(`*${workflow.description}* (Complexity: ${workflow.complexity})`);
471
+ if (workflow.prerequisites && workflow.prerequisites.length > 0) {
472
+ lines.push(`**Prerequisites**: ${workflow.prerequisites.join(", ")}`);
473
+ }
474
+ lines.push("**Steps**:");
475
+ for (const step of workflow.steps) {
476
+ const toolInfo = step.toolName ? ` (\`${step.toolName}\`)` : "";
477
+ const noteInfo = step.note ? ` - ${step.note}` : "";
478
+ lines.push(`${step.stepNumber}. ${step.action}${toolInfo}${noteInfo}`);
479
+ }
480
+ lines.push("");
481
+ }
482
+ }
483
+ if (practices.securityNotes.length > 0) {
484
+ lines.push("## Security Notes");
485
+ for (const note of practices.securityNotes) {
486
+ lines.push(`- ${note}`);
487
+ }
488
+ lines.push("");
489
+ }
490
+ if (practices.performanceTips.length > 0) {
491
+ lines.push("## Performance Tips");
492
+ for (const tip of practices.performanceTips) {
493
+ lines.push(`- ${tip}`);
494
+ }
495
+ lines.push("");
496
+ }
497
+ return lines.join("\n");
498
+ }
499
+ //# sourceMappingURL=best-practices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"best-practices.js","sourceRoot":"","sources":["../../../src/tools/discovery/best-practices.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Cost and Performance Estimation
3
+ *
4
+ * Provides token usage estimates, latency expectations, and
5
+ * workflow cost aggregation for F5XC API operations.
6
+ */
7
+ import type { CreationPlan } from "./resolver.js";
8
+ /**
9
+ * Latency classification from performance_impact
10
+ */
11
+ export type LatencyLevel = "low" | "moderate" | "high" | "unknown";
12
+ /**
13
+ * Token cost estimate for a single tool
14
+ */
15
+ export interface TokenEstimate {
16
+ /** Estimated tokens for tool schema/description */
17
+ schemaTokens: number;
18
+ /** Estimated tokens for typical request body */
19
+ requestTokens: number;
20
+ /** Estimated tokens for typical response */
21
+ responseTokens: number;
22
+ /** Total estimated tokens for one call */
23
+ totalTokens: number;
24
+ }
25
+ /**
26
+ * Latency estimate for a single tool
27
+ */
28
+ export interface LatencyEstimate {
29
+ /** Latency level from performance_impact */
30
+ level: LatencyLevel;
31
+ /** Estimated milliseconds (rough approximation) */
32
+ estimatedMs: number;
33
+ /** Description of latency expectation */
34
+ description: string;
35
+ }
36
+ /**
37
+ * Complete cost estimate for a single tool
38
+ */
39
+ export interface ToolCostEstimate {
40
+ /** Tool name */
41
+ toolName: string;
42
+ /** Token estimates */
43
+ tokens: TokenEstimate;
44
+ /** Latency estimate */
45
+ latency: LatencyEstimate;
46
+ /** Danger level */
47
+ dangerLevel: "low" | "medium" | "high" | "critical";
48
+ /** Whether tool exists */
49
+ exists: boolean;
50
+ }
51
+ /**
52
+ * Workflow cost aggregation
53
+ */
54
+ export interface WorkflowCostEstimate {
55
+ /** Total estimated tokens across all steps */
56
+ totalTokens: number;
57
+ /** Average latency level */
58
+ averageLatency: LatencyLevel;
59
+ /** Total estimated time in milliseconds */
60
+ estimatedTotalMs: number;
61
+ /** Number of steps */
62
+ stepCount: number;
63
+ /** Per-step breakdown */
64
+ steps: Array<{
65
+ stepNumber: number;
66
+ toolName: string;
67
+ tokens: number;
68
+ latencyMs: number;
69
+ }>;
70
+ /** Warnings about estimates */
71
+ warnings: string[];
72
+ }
73
+ /**
74
+ * Parameters for cost estimation
75
+ */
76
+ export interface EstimateCostParams {
77
+ /** Tool name to estimate */
78
+ toolName?: string;
79
+ /** Multiple tools to estimate */
80
+ toolNames?: string[];
81
+ /** Creation plan to estimate */
82
+ plan?: CreationPlan;
83
+ /** Include detailed breakdown */
84
+ detailed?: boolean;
85
+ }
86
+ /**
87
+ * Estimate tokens for a tool call
88
+ */
89
+ export declare function estimateToolTokens(toolName: string): TokenEstimate;
90
+ /**
91
+ * Estimate latency for a tool call
92
+ */
93
+ export declare function estimateToolLatency(toolName: string): LatencyEstimate;
94
+ /**
95
+ * Get complete cost estimate for a single tool
96
+ */
97
+ export declare function estimateToolCost(toolName: string): ToolCostEstimate;
98
+ /**
99
+ * Estimate costs for multiple tools
100
+ */
101
+ export declare function estimateMultipleToolsCost(toolNames: string[]): ToolCostEstimate[];
102
+ /**
103
+ * Estimate costs for a creation plan workflow
104
+ */
105
+ export declare function estimateWorkflowCost(plan: CreationPlan): WorkflowCostEstimate;
106
+ /**
107
+ * Format cost estimate for human-readable output
108
+ */
109
+ export declare function formatCostEstimate(estimate: ToolCostEstimate): string;
110
+ /**
111
+ * Format workflow cost estimate for human-readable output
112
+ */
113
+ export declare function formatWorkflowCostEstimate(estimate: WorkflowCostEstimate): string;
114
+ //# sourceMappingURL=cost-estimator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-estimator.d.ts","sourceRoot":"","sources":["../../../src/tools/discovery/cost-estimator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,eAAe,CAAC;AAEhE;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,aAAa,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,4CAA4C;IAC5C,KAAK,EAAE,YAAY,CAAC;IACpB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,MAAM,EAAE,aAAa,CAAC;IACtB,uBAAuB;IACvB,OAAO,EAAE,eAAe,CAAC;IACzB,mBAAmB;IACnB,WAAW,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACpD,0BAA0B;IAC1B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,cAAc,EAAE,YAAY,CAAC;IAC7B,2CAA2C;IAC3C,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,KAAK,EAAE,KAAK,CAAC;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,gCAAgC;IAChC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAkED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAqElE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAOrE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAWnE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAEjF;AAyBD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,oBAAoB,CAiC7E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CA4BrE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,CA+BjF"}