@nahisaho/musubix-security 1.8.0 → 1.8.1

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 (186) hide show
  1. package/README.md +27 -0
  2. package/dist/analyzers/ai/index.d.ts +6 -0
  3. package/dist/analyzers/ai/index.d.ts.map +1 -0
  4. package/dist/analyzers/ai/index.js +6 -0
  5. package/dist/analyzers/ai/index.js.map +1 -0
  6. package/dist/analyzers/ai/prompt-injection-detector.d.ts +152 -0
  7. package/dist/analyzers/ai/prompt-injection-detector.d.ts.map +1 -0
  8. package/dist/analyzers/ai/prompt-injection-detector.js +468 -0
  9. package/dist/analyzers/ai/prompt-injection-detector.js.map +1 -0
  10. package/dist/analyzers/api/api-security-analyzer.d.ts +263 -0
  11. package/dist/analyzers/api/api-security-analyzer.d.ts.map +1 -0
  12. package/dist/analyzers/api/api-security-analyzer.js +581 -0
  13. package/dist/analyzers/api/api-security-analyzer.js.map +1 -0
  14. package/dist/analyzers/compliance/compliance-checker.d.ts +201 -0
  15. package/dist/analyzers/compliance/compliance-checker.d.ts.map +1 -0
  16. package/dist/analyzers/compliance/compliance-checker.js +772 -0
  17. package/dist/analyzers/compliance/compliance-checker.js.map +1 -0
  18. package/dist/analyzers/container/image-scanner.d.ts +163 -0
  19. package/dist/analyzers/container/image-scanner.d.ts.map +1 -0
  20. package/dist/analyzers/container/image-scanner.js +459 -0
  21. package/dist/analyzers/container/image-scanner.js.map +1 -0
  22. package/dist/analyzers/container/index.d.ts +6 -0
  23. package/dist/analyzers/container/index.d.ts.map +1 -0
  24. package/dist/analyzers/container/index.js +6 -0
  25. package/dist/analyzers/container/index.js.map +1 -0
  26. package/dist/analyzers/dashboard/security-dashboard.d.ts +286 -0
  27. package/dist/analyzers/dashboard/security-dashboard.d.ts.map +1 -0
  28. package/dist/analyzers/dashboard/security-dashboard.js +796 -0
  29. package/dist/analyzers/dashboard/security-dashboard.js.map +1 -0
  30. package/dist/analyzers/iac/iac-checker.d.ts +124 -0
  31. package/dist/analyzers/iac/iac-checker.d.ts.map +1 -0
  32. package/dist/analyzers/iac/iac-checker.js +755 -0
  33. package/dist/analyzers/iac/iac-checker.js.map +1 -0
  34. package/dist/analyzers/iac/index.d.ts +6 -0
  35. package/dist/analyzers/iac/index.d.ts.map +1 -0
  36. package/dist/analyzers/iac/index.js +6 -0
  37. package/dist/analyzers/iac/index.js.map +1 -0
  38. package/dist/analyzers/index.d.ts +9 -0
  39. package/dist/analyzers/index.d.ts.map +1 -0
  40. package/dist/analyzers/index.js +13 -0
  41. package/dist/analyzers/index.js.map +1 -0
  42. package/dist/analyzers/monitor/realtime-monitor.d.ts +216 -0
  43. package/dist/analyzers/monitor/realtime-monitor.d.ts.map +1 -0
  44. package/dist/analyzers/monitor/realtime-monitor.js +601 -0
  45. package/dist/analyzers/monitor/realtime-monitor.js.map +1 -0
  46. package/dist/analyzers/sast/index.d.ts +7 -0
  47. package/dist/analyzers/sast/index.d.ts.map +1 -0
  48. package/dist/analyzers/sast/index.js +7 -0
  49. package/dist/analyzers/sast/index.js.map +1 -0
  50. package/dist/analyzers/sast/interprocedural-analyzer.d.ts +276 -0
  51. package/dist/analyzers/sast/interprocedural-analyzer.d.ts.map +1 -0
  52. package/dist/analyzers/sast/interprocedural-analyzer.js +635 -0
  53. package/dist/analyzers/sast/interprocedural-analyzer.js.map +1 -0
  54. package/dist/analyzers/sast/zero-day-detector.d.ts +183 -0
  55. package/dist/analyzers/sast/zero-day-detector.d.ts.map +1 -0
  56. package/dist/analyzers/sast/zero-day-detector.js +593 -0
  57. package/dist/analyzers/sast/zero-day-detector.js.map +1 -0
  58. package/dist/analyzers/sca/dependency-scanner.d.ts +275 -0
  59. package/dist/analyzers/sca/dependency-scanner.d.ts.map +1 -0
  60. package/dist/analyzers/sca/dependency-scanner.js +642 -0
  61. package/dist/analyzers/sca/dependency-scanner.js.map +1 -0
  62. package/dist/core/index.d.ts +8 -0
  63. package/dist/core/index.d.ts.map +1 -0
  64. package/dist/core/index.js +10 -0
  65. package/dist/core/index.js.map +1 -0
  66. package/dist/core/pipeline-manager.d.ts +105 -0
  67. package/dist/core/pipeline-manager.d.ts.map +1 -0
  68. package/dist/core/pipeline-manager.js +449 -0
  69. package/dist/core/pipeline-manager.js.map +1 -0
  70. package/dist/core/result-aggregator.d.ts +96 -0
  71. package/dist/core/result-aggregator.d.ts.map +1 -0
  72. package/dist/core/result-aggregator.js +462 -0
  73. package/dist/core/result-aggregator.js.map +1 -0
  74. package/dist/index.d.ts +15 -0
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +68 -0
  77. package/dist/index.js.map +1 -1
  78. package/dist/integrations/ci-integration.d.ts +227 -0
  79. package/dist/integrations/ci-integration.d.ts.map +1 -0
  80. package/dist/integrations/ci-integration.js +472 -0
  81. package/dist/integrations/ci-integration.js.map +1 -0
  82. package/dist/integrations/git-hooks.d.ts +155 -0
  83. package/dist/integrations/git-hooks.d.ts.map +1 -0
  84. package/dist/integrations/git-hooks.js +425 -0
  85. package/dist/integrations/git-hooks.js.map +1 -0
  86. package/dist/integrations/index.d.ts +9 -0
  87. package/dist/integrations/index.d.ts.map +1 -0
  88. package/dist/integrations/index.js +9 -0
  89. package/dist/integrations/index.js.map +1 -0
  90. package/dist/integrations/report-aggregator.d.ts +250 -0
  91. package/dist/integrations/report-aggregator.d.ts.map +1 -0
  92. package/dist/integrations/report-aggregator.js +488 -0
  93. package/dist/integrations/report-aggregator.js.map +1 -0
  94. package/dist/integrations/vscode-integration.d.ts +245 -0
  95. package/dist/integrations/vscode-integration.d.ts.map +1 -0
  96. package/dist/integrations/vscode-integration.js +449 -0
  97. package/dist/integrations/vscode-integration.js.map +1 -0
  98. package/dist/intelligence/attack-pattern-matcher.d.ts +217 -0
  99. package/dist/intelligence/attack-pattern-matcher.d.ts.map +1 -0
  100. package/dist/intelligence/attack-pattern-matcher.js +887 -0
  101. package/dist/intelligence/attack-pattern-matcher.js.map +1 -0
  102. package/dist/intelligence/index.d.ts +12 -0
  103. package/dist/intelligence/index.d.ts.map +1 -0
  104. package/dist/intelligence/index.js +18 -0
  105. package/dist/intelligence/index.js.map +1 -0
  106. package/dist/intelligence/neuro-symbolic-core.d.ts +88 -0
  107. package/dist/intelligence/neuro-symbolic-core.d.ts.map +1 -0
  108. package/dist/intelligence/neuro-symbolic-core.js +403 -0
  109. package/dist/intelligence/neuro-symbolic-core.js.map +1 -0
  110. package/dist/intelligence/predictive-analyzer.d.ts +317 -0
  111. package/dist/intelligence/predictive-analyzer.d.ts.map +1 -0
  112. package/dist/intelligence/predictive-analyzer.js +714 -0
  113. package/dist/intelligence/predictive-analyzer.js.map +1 -0
  114. package/dist/intelligence/risk-scorer.d.ts +333 -0
  115. package/dist/intelligence/risk-scorer.d.ts.map +1 -0
  116. package/dist/intelligence/risk-scorer.js +824 -0
  117. package/dist/intelligence/risk-scorer.js.map +1 -0
  118. package/dist/intelligence/security-analytics.d.ts +349 -0
  119. package/dist/intelligence/security-analytics.d.ts.map +1 -0
  120. package/dist/intelligence/security-analytics.js +813 -0
  121. package/dist/intelligence/security-analytics.js.map +1 -0
  122. package/dist/intelligence/threat-intelligence.d.ts +288 -0
  123. package/dist/intelligence/threat-intelligence.d.ts.map +1 -0
  124. package/dist/intelligence/threat-intelligence.js +639 -0
  125. package/dist/intelligence/threat-intelligence.js.map +1 -0
  126. package/dist/policy/index.d.ts +6 -0
  127. package/dist/policy/index.d.ts.map +1 -0
  128. package/dist/policy/index.js +6 -0
  129. package/dist/policy/index.js.map +1 -0
  130. package/dist/policy/policy-engine.d.ts +254 -0
  131. package/dist/policy/policy-engine.d.ts.map +1 -0
  132. package/dist/policy/policy-engine.js +651 -0
  133. package/dist/policy/policy-engine.js.map +1 -0
  134. package/dist/remediation/auto-fixer.d.ts +179 -0
  135. package/dist/remediation/auto-fixer.d.ts.map +1 -0
  136. package/dist/remediation/auto-fixer.js +540 -0
  137. package/dist/remediation/auto-fixer.js.map +1 -0
  138. package/dist/remediation/fix-validator.d.ts +195 -0
  139. package/dist/remediation/fix-validator.d.ts.map +1 -0
  140. package/dist/remediation/fix-validator.js +462 -0
  141. package/dist/remediation/fix-validator.js.map +1 -0
  142. package/dist/remediation/index.d.ts +10 -0
  143. package/dist/remediation/index.d.ts.map +1 -0
  144. package/dist/remediation/index.js +15 -0
  145. package/dist/remediation/index.js.map +1 -0
  146. package/dist/remediation/patch-generator.d.ts +203 -0
  147. package/dist/remediation/patch-generator.d.ts.map +1 -0
  148. package/dist/remediation/patch-generator.js +533 -0
  149. package/dist/remediation/patch-generator.js.map +1 -0
  150. package/dist/remediation/remediation-planner.d.ts +262 -0
  151. package/dist/remediation/remediation-planner.d.ts.map +1 -0
  152. package/dist/remediation/remediation-planner.js +531 -0
  153. package/dist/remediation/remediation-planner.js.map +1 -0
  154. package/dist/remediation/secure-code-transformer.d.ts +222 -0
  155. package/dist/remediation/secure-code-transformer.d.ts.map +1 -0
  156. package/dist/remediation/secure-code-transformer.js +625 -0
  157. package/dist/remediation/secure-code-transformer.js.map +1 -0
  158. package/dist/types/fix.d.ts +3 -1
  159. package/dist/types/fix.d.ts.map +1 -1
  160. package/dist/types/index.d.ts +6 -0
  161. package/dist/types/index.d.ts.map +1 -1
  162. package/dist/types/index.js +1 -0
  163. package/dist/types/index.js.map +1 -1
  164. package/dist/types/interprocedural.d.ts +203 -0
  165. package/dist/types/interprocedural.d.ts.map +1 -0
  166. package/dist/types/interprocedural.js +7 -0
  167. package/dist/types/interprocedural.js.map +1 -0
  168. package/dist/types/neuro-symbolic.d.ts +179 -0
  169. package/dist/types/neuro-symbolic.d.ts.map +1 -0
  170. package/dist/types/neuro-symbolic.js +7 -0
  171. package/dist/types/neuro-symbolic.js.map +1 -0
  172. package/dist/types/pipeline.d.ts +173 -0
  173. package/dist/types/pipeline.d.ts.map +1 -0
  174. package/dist/types/pipeline.js +7 -0
  175. package/dist/types/pipeline.js.map +1 -0
  176. package/dist/types/result.d.ts +134 -0
  177. package/dist/types/result.d.ts.map +1 -0
  178. package/dist/types/result.js +25 -0
  179. package/dist/types/result.js.map +1 -0
  180. package/dist/types/vulnerability.d.ts +2 -2
  181. package/dist/types/vulnerability.d.ts.map +1 -1
  182. package/dist/types/zero-day.d.ts +146 -0
  183. package/dist/types/zero-day.d.ts.map +1 -0
  184. package/dist/types/zero-day.js +7 -0
  185. package/dist/types/zero-day.js.map +1 -0
  186. package/package.json +2 -2
@@ -0,0 +1,642 @@
1
+ /**
2
+ * @fileoverview Dependency Scanner - SCA and SBOM generation
3
+ * @module @nahisaho/musubix-security/analyzers/sca/dependency-scanner
4
+ * @trace DES-SEC3-SCA-001, REQ-SEC3-SCA-001
5
+ */
6
+ import { execSync } from 'node:child_process';
7
+ import { existsSync, readFileSync } from 'node:fs';
8
+ import { join } from 'node:path';
9
+ /**
10
+ * License categories for risk assessment
11
+ */
12
+ const LICENSE_CATEGORIES = {
13
+ // Permissive - Low risk
14
+ 'MIT': { risk: 'low', reason: 'Permissive license, minimal restrictions' },
15
+ 'ISC': { risk: 'low', reason: 'Permissive license, minimal restrictions' },
16
+ 'BSD-2-Clause': { risk: 'low', reason: 'Permissive license, minimal restrictions' },
17
+ 'BSD-3-Clause': { risk: 'low', reason: 'Permissive license, minimal restrictions' },
18
+ 'Apache-2.0': { risk: 'low', reason: 'Permissive license with patent grant' },
19
+ 'Unlicense': { risk: 'low', reason: 'Public domain dedication' },
20
+ 'CC0-1.0': { risk: 'low', reason: 'Public domain dedication' },
21
+ '0BSD': { risk: 'low', reason: 'Public domain equivalent' },
22
+ // Weak copyleft - Medium risk
23
+ 'LGPL-2.1': { risk: 'medium', reason: 'Weak copyleft, dynamic linking permitted' },
24
+ 'LGPL-3.0': { risk: 'medium', reason: 'Weak copyleft, dynamic linking permitted' },
25
+ 'MPL-2.0': { risk: 'medium', reason: 'File-level copyleft' },
26
+ 'EPL-1.0': { risk: 'medium', reason: 'Weak copyleft license' },
27
+ 'EPL-2.0': { risk: 'medium', reason: 'Weak copyleft license' },
28
+ // Strong copyleft - High risk
29
+ 'GPL-2.0': { risk: 'high', reason: 'Strong copyleft, requires derivative works to be GPL' },
30
+ 'GPL-3.0': { risk: 'high', reason: 'Strong copyleft with anti-tivoization' },
31
+ 'AGPL-3.0': { risk: 'critical', reason: 'Network copyleft, affects SaaS usage' },
32
+ // Unknown/Custom - High risk
33
+ 'UNKNOWN': { risk: 'high', reason: 'Unknown license, legal review required' },
34
+ 'UNLICENSED': { risk: 'high', reason: 'No license specified, all rights reserved' },
35
+ 'SEE LICENSE IN': { risk: 'medium', reason: 'Custom license, review required' },
36
+ };
37
+ /**
38
+ * Dependency Scanner
39
+ * @trace DES-SEC3-SCA-001
40
+ */
41
+ export class DependencyScanner {
42
+ options;
43
+ constructor(options = {}) {
44
+ this.options = {
45
+ checkVulnerabilities: options.checkVulnerabilities ?? true,
46
+ checkLicenses: options.checkLicenses ?? true,
47
+ checkOutdated: options.checkOutdated ?? true,
48
+ generateSBOM: options.generateSBOM ?? true,
49
+ includeDev: options.includeDev ?? true,
50
+ depth: options.depth ?? Infinity,
51
+ ignoredPackages: options.ignoredPackages ?? [],
52
+ allowedLicenses: options.allowedLicenses ?? [],
53
+ blockedLicenses: options.blockedLicenses ?? ['AGPL-3.0', 'GPL-3.0'],
54
+ };
55
+ }
56
+ /**
57
+ * Scan project dependencies
58
+ * @trace REQ-SEC3-SCA-001
59
+ */
60
+ async scan(projectPath) {
61
+ const packageManager = this.detectPackageManager(projectPath);
62
+ const dependencies = this.parseDependencies(projectPath);
63
+ const vulnerabilities = [];
64
+ const licenseRisks = [];
65
+ const outdatedPackages = [];
66
+ // Check vulnerabilities
67
+ if (this.options.checkVulnerabilities) {
68
+ const vulns = await this.checkVulnerabilities(projectPath, packageManager);
69
+ vulnerabilities.push(...vulns);
70
+ }
71
+ // Check licenses
72
+ if (this.options.checkLicenses) {
73
+ const risks = this.checkLicenses(dependencies);
74
+ licenseRisks.push(...risks);
75
+ }
76
+ // Check outdated packages
77
+ if (this.options.checkOutdated) {
78
+ const outdated = await this.checkOutdated(projectPath, packageManager);
79
+ outdatedPackages.push(...outdated);
80
+ }
81
+ // Generate SBOM
82
+ const sbom = this.options.generateSBOM
83
+ ? this.generateSBOMPrivate(projectPath, dependencies)
84
+ : this.createEmptySBOM(projectPath);
85
+ const directDeps = dependencies.filter(d => d.type === 'production').length;
86
+ const devDeps = dependencies.filter(d => d.type === 'development').length;
87
+ return {
88
+ timestamp: new Date(),
89
+ projectPath,
90
+ packageManager,
91
+ totalDependencies: dependencies.length,
92
+ directDependencies: directDeps,
93
+ devDependencies: devDeps,
94
+ vulnerabilities,
95
+ licenseRisks,
96
+ outdatedPackages,
97
+ sbom,
98
+ summary: this.generateSummary(vulnerabilities, licenseRisks, outdatedPackages),
99
+ };
100
+ }
101
+ /**
102
+ * Alias for scan() - for API compatibility
103
+ */
104
+ async scanDependencies(projectPath) {
105
+ const result = await this.scan(projectPath);
106
+ // Parse dependencies to include isDev
107
+ const deps = this.parseDependenciesPublic(projectPath);
108
+ return {
109
+ packageManager: result.packageManager,
110
+ dependencies: deps.map(d => ({
111
+ name: d.name,
112
+ version: d.version,
113
+ isDev: d.type === 'development',
114
+ })),
115
+ vulnerabilities: result.vulnerabilities.map(v => ({
116
+ name: v.package,
117
+ severity: v.severity,
118
+ advisory: v.id,
119
+ })),
120
+ outdatedPackages: result.outdatedPackages.map(o => ({
121
+ name: o.name,
122
+ current: o.currentVersion,
123
+ latest: o.latestVersion,
124
+ updateType: o.type,
125
+ })),
126
+ licenseRisks: result.licenseRisks.map(r => ({
127
+ package: r.package,
128
+ license: r.license,
129
+ risk: r.riskLevel,
130
+ })),
131
+ summary: {
132
+ totalDependencies: result.totalDependencies,
133
+ vulnerableCount: result.summary.vulnerabilityCount.critical +
134
+ result.summary.vulnerabilityCount.high +
135
+ result.summary.vulnerabilityCount.medium +
136
+ result.summary.vulnerabilityCount.low,
137
+ outdatedCount: result.outdatedPackages.length,
138
+ healthScore: result.summary.healthScore,
139
+ },
140
+ };
141
+ }
142
+ /**
143
+ * Public accessor for parsing dependencies
144
+ */
145
+ parseDependenciesPublic(projectPath) {
146
+ return this.parseDependencies(projectPath);
147
+ }
148
+ /**
149
+ * Generate SBOM from scan result (public)
150
+ */
151
+ generateSBOM(scanResult, deps) {
152
+ if (typeof scanResult === 'string') {
153
+ // Old signature: generateSBOM(projectPath, dependencies)
154
+ return this.generateSBOMInternal(scanResult, deps ?? []);
155
+ }
156
+ // New signature: generateSBOM(scanResult)
157
+ return scanResult.sbom;
158
+ }
159
+ /**
160
+ * Internal SBOM generation
161
+ */
162
+ generateSBOMInternal(projectPath, dependencies) {
163
+ const packageJsonPath = join(projectPath, 'package.json');
164
+ let projectName = 'unknown';
165
+ let projectVersion = '0.0.0';
166
+ try {
167
+ if (existsSync(packageJsonPath)) {
168
+ const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
169
+ projectName = pkg.name ?? 'unknown';
170
+ projectVersion = pkg.version ?? '0.0.0';
171
+ }
172
+ }
173
+ catch {
174
+ // Ignore
175
+ }
176
+ return {
177
+ bomFormat: 'CycloneDX',
178
+ specVersion: '1.4',
179
+ serialNumber: `urn:uuid:${this.generateUUID()}`,
180
+ version: 1,
181
+ metadata: {
182
+ timestamp: new Date().toISOString(),
183
+ tools: [{
184
+ vendor: 'MUSUBIX',
185
+ name: 'musubix-security',
186
+ version: '1.8.0',
187
+ }],
188
+ component: {
189
+ type: 'application',
190
+ name: projectName,
191
+ version: projectVersion,
192
+ },
193
+ },
194
+ components: dependencies.map(dep => ({
195
+ type: 'library',
196
+ name: dep.name,
197
+ version: dep.version,
198
+ purl: `pkg:npm/${dep.name}@${dep.version}`,
199
+ licenses: dep.license ? [{ id: dep.license, name: dep.license }] : undefined,
200
+ })),
201
+ dependencies: [],
202
+ };
203
+ }
204
+ /**
205
+ * Detect package manager
206
+ */
207
+ detectPackageManager(projectPath) {
208
+ if (existsSync(join(projectPath, 'pnpm-lock.yaml')))
209
+ return 'pnpm';
210
+ if (existsSync(join(projectPath, 'yarn.lock')))
211
+ return 'yarn';
212
+ if (existsSync(join(projectPath, 'package-lock.json')))
213
+ return 'npm';
214
+ if (existsSync(join(projectPath, 'package.json')))
215
+ return 'npm';
216
+ return 'unknown';
217
+ }
218
+ /**
219
+ * Parse dependencies from package.json
220
+ */
221
+ parseDependencies(projectPath) {
222
+ const packageJsonPath = join(projectPath, 'package.json');
223
+ if (!existsSync(packageJsonPath)) {
224
+ return [];
225
+ }
226
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
227
+ const dependencies = [];
228
+ // Production dependencies
229
+ if (packageJson.dependencies) {
230
+ for (const [name, version] of Object.entries(packageJson.dependencies)) {
231
+ if (this.options.ignoredPackages.includes(name))
232
+ continue;
233
+ dependencies.push({
234
+ name,
235
+ version: String(version),
236
+ type: 'production',
237
+ license: this.getLicense(projectPath, name),
238
+ });
239
+ }
240
+ }
241
+ // Dev dependencies
242
+ if (this.options.includeDev && packageJson.devDependencies) {
243
+ for (const [name, version] of Object.entries(packageJson.devDependencies)) {
244
+ if (this.options.ignoredPackages.includes(name))
245
+ continue;
246
+ dependencies.push({
247
+ name,
248
+ version: String(version),
249
+ type: 'development',
250
+ license: this.getLicense(projectPath, name),
251
+ });
252
+ }
253
+ }
254
+ // Peer dependencies
255
+ if (packageJson.peerDependencies) {
256
+ for (const [name, version] of Object.entries(packageJson.peerDependencies)) {
257
+ if (this.options.ignoredPackages.includes(name))
258
+ continue;
259
+ dependencies.push({
260
+ name,
261
+ version: String(version),
262
+ type: 'peer',
263
+ license: this.getLicense(projectPath, name),
264
+ });
265
+ }
266
+ }
267
+ return dependencies;
268
+ }
269
+ /**
270
+ * Get license for a package
271
+ */
272
+ getLicense(projectPath, packageName) {
273
+ const modulePath = join(projectPath, 'node_modules', packageName, 'package.json');
274
+ try {
275
+ if (existsSync(modulePath)) {
276
+ const pkg = JSON.parse(readFileSync(modulePath, 'utf-8'));
277
+ if (typeof pkg.license === 'string')
278
+ return pkg.license;
279
+ if (pkg.license?.type)
280
+ return pkg.license.type;
281
+ if (Array.isArray(pkg.licenses))
282
+ return pkg.licenses[0]?.type ?? 'UNKNOWN';
283
+ }
284
+ }
285
+ catch {
286
+ // Ignore errors
287
+ }
288
+ return 'UNKNOWN';
289
+ }
290
+ /**
291
+ * Check for vulnerabilities using npm audit
292
+ */
293
+ async checkVulnerabilities(projectPath, _packageManager) {
294
+ const vulnerabilities = [];
295
+ try {
296
+ const result = execSync('npm audit --json 2>/dev/null', {
297
+ cwd: projectPath,
298
+ encoding: 'utf-8',
299
+ maxBuffer: 10 * 1024 * 1024,
300
+ });
301
+ const auditData = JSON.parse(result);
302
+ if (auditData.vulnerabilities) {
303
+ for (const [pkgName, vulnData] of Object.entries(auditData.vulnerabilities)) {
304
+ if (this.options.ignoredPackages.includes(pkgName))
305
+ continue;
306
+ const severity = this.mapNpmSeverity(vulnData.severity);
307
+ for (const via of vulnData.via ?? []) {
308
+ if (typeof via === 'string')
309
+ continue;
310
+ vulnerabilities.push({
311
+ id: via.source?.toString() ?? `NPM-${pkgName}`,
312
+ package: pkgName,
313
+ severity,
314
+ vulnerableVersions: vulnData.range ?? '*',
315
+ patchedVersions: vulnData.fixAvailable?.version,
316
+ title: via.title ?? `Vulnerability in ${pkgName}`,
317
+ description: via.title ?? 'No description available',
318
+ cve: via.cve,
319
+ cwe: via.cwe ? [via.cwe] : undefined,
320
+ references: via.url ? [via.url] : [],
321
+ recommendation: vulnData.fixAvailable
322
+ ? `Upgrade to ${vulnData.fixAvailable.name}@${vulnData.fixAvailable.version}`
323
+ : 'No fix available, consider using an alternative package',
324
+ });
325
+ }
326
+ }
327
+ }
328
+ }
329
+ catch (error) {
330
+ // npm audit may exit with non-zero if vulnerabilities found
331
+ // Try to parse the output anyway
332
+ const errorOutput = error?.stdout;
333
+ if (errorOutput) {
334
+ try {
335
+ const auditData = JSON.parse(errorOutput);
336
+ // Same parsing logic as above
337
+ if (auditData.vulnerabilities) {
338
+ for (const [pkgName, vulnData] of Object.entries(auditData.vulnerabilities)) {
339
+ const severity = this.mapNpmSeverity(vulnData.severity);
340
+ vulnerabilities.push({
341
+ id: `NPM-${pkgName}-${Date.now()}`,
342
+ package: pkgName,
343
+ severity,
344
+ vulnerableVersions: vulnData.range ?? '*',
345
+ patchedVersions: vulnData.fixAvailable?.version,
346
+ title: `Vulnerability in ${pkgName}`,
347
+ description: 'Detected by npm audit',
348
+ references: [],
349
+ recommendation: vulnData.fixAvailable
350
+ ? `Upgrade to ${vulnData.fixAvailable.name}@${vulnData.fixAvailable.version}`
351
+ : 'Review and update the package',
352
+ });
353
+ }
354
+ }
355
+ }
356
+ catch {
357
+ // Ignore parse errors
358
+ }
359
+ }
360
+ }
361
+ return vulnerabilities;
362
+ }
363
+ /**
364
+ * Map npm severity to our severity type
365
+ */
366
+ mapNpmSeverity(npmSeverity) {
367
+ const map = {
368
+ 'critical': 'critical',
369
+ 'high': 'high',
370
+ 'moderate': 'medium',
371
+ 'low': 'low',
372
+ 'info': 'info',
373
+ };
374
+ return map[npmSeverity] ?? 'medium';
375
+ }
376
+ /**
377
+ * Check license risks
378
+ */
379
+ checkLicenses(dependencies) {
380
+ const risks = [];
381
+ for (const dep of dependencies) {
382
+ const normalizedLicense = this.normalizeLicense(dep.license);
383
+ // Check blocked licenses
384
+ if (this.options.blockedLicenses.includes(normalizedLicense)) {
385
+ risks.push({
386
+ package: dep.name,
387
+ version: dep.version,
388
+ license: dep.license,
389
+ riskLevel: 'critical',
390
+ reason: `Blocked license: ${dep.license}`,
391
+ recommendation: 'Find an alternative package with a compatible license',
392
+ });
393
+ continue;
394
+ }
395
+ // Check allowed licenses
396
+ if (this.options.allowedLicenses.length > 0 &&
397
+ !this.options.allowedLicenses.includes(normalizedLicense)) {
398
+ risks.push({
399
+ package: dep.name,
400
+ version: dep.version,
401
+ license: dep.license,
402
+ riskLevel: 'medium',
403
+ reason: 'License not in allowed list',
404
+ recommendation: 'Review license compatibility',
405
+ });
406
+ continue;
407
+ }
408
+ // Check license category
409
+ const category = LICENSE_CATEGORIES[normalizedLicense] ?? LICENSE_CATEGORIES['UNKNOWN'];
410
+ if (category.risk !== 'low') {
411
+ risks.push({
412
+ package: dep.name,
413
+ version: dep.version,
414
+ license: dep.license,
415
+ riskLevel: category.risk,
416
+ reason: category.reason,
417
+ recommendation: category.risk === 'high' || category.risk === 'critical'
418
+ ? 'Consider using an alternative package'
419
+ : 'Review license terms before commercial use',
420
+ });
421
+ }
422
+ }
423
+ return risks;
424
+ }
425
+ /**
426
+ * Normalize license identifier
427
+ */
428
+ normalizeLicense(license) {
429
+ const normalized = license.trim().toUpperCase();
430
+ // Handle common variations
431
+ const mappings = {
432
+ 'MIT LICENSE': 'MIT',
433
+ '(MIT)': 'MIT',
434
+ 'APACHE 2.0': 'Apache-2.0',
435
+ 'APACHE LICENSE 2.0': 'Apache-2.0',
436
+ 'BSD': 'BSD-3-Clause',
437
+ 'ISC LICENSE': 'ISC',
438
+ };
439
+ return mappings[normalized] ?? license;
440
+ }
441
+ /**
442
+ * Check for outdated packages
443
+ */
444
+ async checkOutdated(projectPath, _packageManager) {
445
+ const outdated = [];
446
+ try {
447
+ const result = execSync('npm outdated --json 2>/dev/null', {
448
+ cwd: projectPath,
449
+ encoding: 'utf-8',
450
+ maxBuffer: 10 * 1024 * 1024,
451
+ });
452
+ const data = JSON.parse(result || '{}');
453
+ for (const [name, info] of Object.entries(data)) {
454
+ if (this.options.ignoredPackages.includes(name))
455
+ continue;
456
+ const current = info.current ?? info.wanted;
457
+ const latest = info.latest;
458
+ if (!current || !latest)
459
+ continue;
460
+ const updateType = this.determineUpdateType(current, latest);
461
+ outdated.push({
462
+ name,
463
+ currentVersion: current,
464
+ latestVersion: latest,
465
+ type: updateType,
466
+ breaking: updateType === 'major',
467
+ });
468
+ }
469
+ }
470
+ catch {
471
+ // npm outdated exits with non-zero when outdated packages found
472
+ // This is expected behavior
473
+ }
474
+ return outdated;
475
+ }
476
+ /**
477
+ * Determine update type
478
+ */
479
+ determineUpdateType(current, latest) {
480
+ const currentParts = current.replace(/[^0-9.]/g, '').split('.');
481
+ const latestParts = latest.replace(/[^0-9.]/g, '').split('.');
482
+ const currentMajor = parseInt(currentParts[0] ?? '0', 10);
483
+ const latestMajor = parseInt(latestParts[0] ?? '0', 10);
484
+ if (latestMajor > currentMajor)
485
+ return 'major';
486
+ const currentMinor = parseInt(currentParts[1] ?? '0', 10);
487
+ const latestMinor = parseInt(latestParts[1] ?? '0', 10);
488
+ if (latestMinor > currentMinor)
489
+ return 'minor';
490
+ return 'patch';
491
+ }
492
+ /**
493
+ * Generate SBOM document
494
+ */
495
+ generateSBOMPrivate(projectPath, dependencies) {
496
+ const packageJsonPath = join(projectPath, 'package.json');
497
+ let projectName = 'unknown';
498
+ let projectVersion = '0.0.0';
499
+ if (existsSync(packageJsonPath)) {
500
+ const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
501
+ projectName = pkg.name ?? 'unknown';
502
+ projectVersion = pkg.version ?? '0.0.0';
503
+ }
504
+ const components = dependencies.map(dep => ({
505
+ type: 'library',
506
+ name: dep.name,
507
+ version: dep.version.replace(/[\^~>=<]/g, ''),
508
+ purl: `pkg:npm/${dep.name}@${dep.version.replace(/[\^~>=<]/g, '')}`,
509
+ licenses: dep.license !== 'UNKNOWN' ? [{ id: dep.license, name: dep.license }] : undefined,
510
+ }));
511
+ return {
512
+ bomFormat: 'CycloneDX',
513
+ specVersion: '1.4',
514
+ serialNumber: `urn:uuid:${this.generateUUID()}`,
515
+ version: 1,
516
+ metadata: {
517
+ timestamp: new Date().toISOString(),
518
+ tools: [
519
+ { vendor: 'nahisaho', name: 'musubix-security', version: '1.8.0' },
520
+ ],
521
+ component: {
522
+ type: 'application',
523
+ name: projectName,
524
+ version: projectVersion,
525
+ },
526
+ },
527
+ components,
528
+ dependencies: this.buildDependencyGraph(projectPath, dependencies),
529
+ };
530
+ }
531
+ /**
532
+ * Build dependency graph for SBOM
533
+ */
534
+ buildDependencyGraph(projectPath, dependencies) {
535
+ const graph = [];
536
+ for (const dep of dependencies) {
537
+ const modulePath = join(projectPath, 'node_modules', dep.name, 'package.json');
538
+ const dependsOn = [];
539
+ try {
540
+ if (existsSync(modulePath)) {
541
+ const pkg = JSON.parse(readFileSync(modulePath, 'utf-8'));
542
+ if (pkg.dependencies) {
543
+ for (const subDep of Object.keys(pkg.dependencies)) {
544
+ dependsOn.push(`pkg:npm/${subDep}`);
545
+ }
546
+ }
547
+ }
548
+ }
549
+ catch {
550
+ // Ignore errors
551
+ }
552
+ graph.push({
553
+ ref: `pkg:npm/${dep.name}@${dep.version.replace(/[\^~>=<]/g, '')}`,
554
+ dependsOn,
555
+ });
556
+ }
557
+ return graph;
558
+ }
559
+ /**
560
+ * Create empty SBOM
561
+ */
562
+ createEmptySBOM(projectPath) {
563
+ return this.generateSBOM(projectPath, []);
564
+ }
565
+ /**
566
+ * Generate UUID v4
567
+ */
568
+ generateUUID() {
569
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
570
+ const r = Math.random() * 16 | 0;
571
+ const v = c === 'x' ? r : (r & 0x3 | 0x8);
572
+ return v.toString(16);
573
+ });
574
+ }
575
+ /**
576
+ * Generate scan summary
577
+ */
578
+ generateSummary(vulnerabilities, licenseRisks, outdated) {
579
+ const vulnCount = { critical: 0, high: 0, medium: 0, low: 0 };
580
+ for (const v of vulnerabilities) {
581
+ if (v.severity in vulnCount) {
582
+ vulnCount[v.severity]++;
583
+ }
584
+ }
585
+ const licenseCount = { high: 0, medium: 0, low: 0 };
586
+ for (const r of licenseRisks) {
587
+ if (r.riskLevel === 'critical')
588
+ licenseCount.high++;
589
+ else if (r.riskLevel in licenseCount) {
590
+ licenseCount[r.riskLevel]++;
591
+ }
592
+ }
593
+ // Calculate health score (0-100)
594
+ let score = 100;
595
+ score -= vulnCount.critical * 20;
596
+ score -= vulnCount.high * 10;
597
+ score -= vulnCount.medium * 5;
598
+ score -= vulnCount.low * 1;
599
+ score -= licenseCount.high * 15;
600
+ score -= licenseCount.medium * 5;
601
+ score -= outdated.filter(o => o.type === 'major').length * 3;
602
+ score = Math.max(0, score);
603
+ return {
604
+ vulnerabilityCount: vulnCount,
605
+ licenseRiskCount: licenseCount,
606
+ outdatedCount: outdated.length,
607
+ healthScore: score,
608
+ };
609
+ }
610
+ /**
611
+ * Convert scan result to vulnerabilities
612
+ */
613
+ toVulnerabilities(result) {
614
+ return result.vulnerabilities.map(v => ({
615
+ id: v.id,
616
+ type: 'dependency',
617
+ severity: v.severity,
618
+ cwes: v.cwe ?? [],
619
+ owasp: ['A06:2021'], // Vulnerable and Outdated Components
620
+ location: {
621
+ file: 'package.json',
622
+ startLine: 1,
623
+ endLine: 1,
624
+ startColumn: 0,
625
+ endColumn: 0,
626
+ },
627
+ description: `${v.package}: ${v.title}`,
628
+ recommendation: v.recommendation,
629
+ confidence: 0.95,
630
+ ruleId: v.cve ?? v.id,
631
+ codeSnippet: `"${v.package}": "${v.vulnerableVersions}"`,
632
+ detectedAt: new Date(),
633
+ }));
634
+ }
635
+ }
636
+ /**
637
+ * Create dependency scanner instance
638
+ */
639
+ export function createDependencyScanner(options) {
640
+ return new DependencyScanner(options);
641
+ }
642
+ //# sourceMappingURL=dependency-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-scanner.js","sourceRoot":"","sources":["../../../src/analyzers/sca/dependency-scanner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAiJjC;;GAEG;AACH,MAAM,kBAAkB,GAAuE;IAC7F,wBAAwB;IACxB,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,0CAA0C,EAAE;IAC1E,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,0CAA0C,EAAE;IAC1E,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,0CAA0C,EAAE;IACnF,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,0CAA0C,EAAE;IACnF,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,sCAAsC,EAAE;IAC7E,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,0BAA0B,EAAE;IAChE,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,0BAA0B,EAAE;IAC9D,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,0BAA0B,EAAE;IAE3D,8BAA8B;IAC9B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,0CAA0C,EAAE;IAClF,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,0CAA0C,EAAE;IAClF,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,qBAAqB,EAAE;IAC5D,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,uBAAuB,EAAE;IAC9D,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,uBAAuB,EAAE;IAE9D,8BAA8B;IAC9B,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,sDAAsD,EAAE;IAC3F,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,uCAAuC,EAAE;IAC5E,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,sCAAsC,EAAE;IAEhF,6BAA6B;IAC7B,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,wCAAwC,EAAE;IAC7E,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,2CAA2C,EAAE;IACnF,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,iCAAiC,EAAE;CAChF,CAAC;AAEF;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IACpB,OAAO,CAAqC;IAEpD,YAAY,UAAoC,EAAE;QAChD,IAAI,CAAC,OAAO,GAAG;YACb,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,IAAI,IAAI;YAC1D,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI;YAC5C,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI;YAC5C,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI;YAC1C,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;YACtC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,QAAQ;YAChC,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,EAAE;YAC9C,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,EAAE;YAC9C,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC;SACpE,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,WAAmB;QAC5B,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAEzD,MAAM,eAAe,GAA8B,EAAE,CAAC;QACtD,MAAM,YAAY,GAAkB,EAAE,CAAC;QACvC,MAAM,gBAAgB,GAAsB,EAAE,CAAC;QAE/C,wBAAwB;QACxB,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YAC3E,eAAe,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QACjC,CAAC;QAED,iBAAiB;QACjB,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YAC/C,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC9B,CAAC;QAED,0BAA0B;QAC1B,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YACvE,gBAAgB,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QACrC,CAAC;QAED,gBAAgB;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY;YACpC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,YAAY,CAAC;YACrD,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAEtC,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,MAAM,CAAC;QAC5E,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,MAAM,CAAC;QAE1E,OAAO;YACL,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,WAAW;YACX,cAAc;YACd,iBAAiB,EAAE,YAAY,CAAC,MAAM;YACtC,kBAAkB,EAAE,UAAU;YAC9B,eAAe,EAAE,OAAO;YACxB,eAAe;YACf,YAAY;YACZ,gBAAgB;YAChB,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,YAAY,EAAE,gBAAgB,CAAC;SAC/E,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,WAAmB;QAaxC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE5C,sCAAsC;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;QAEvD,OAAO;YACL,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC3B,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,KAAK,EAAE,CAAC,CAAC,IAAI,KAAK,aAAa;aAChC,CAAC,CAAC;YACH,eAAe,EAAE,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAChD,IAAI,EAAE,CAAC,CAAC,OAAO;gBACf,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,QAAQ,EAAE,CAAC,CAAC,EAAE;aACf,CAAC,CAAC;YACH,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAClD,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,OAAO,EAAE,CAAC,CAAC,cAAc;gBACzB,MAAM,EAAE,CAAC,CAAC,aAAa;gBACvB,UAAU,EAAE,CAAC,CAAC,IAAI;aACnB,CAAC,CAAC;YACH,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC1C,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,IAAI,EAAE,CAAC,CAAC,SAAS;aAClB,CAAC,CAAC;YACH,OAAO,EAAE;gBACP,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;gBAC3C,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,QAAQ;oBACzD,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI;oBACtC,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,MAAM;oBACxC,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG;gBACvC,aAAa,EAAE,MAAM,CAAC,gBAAgB,CAAC,MAAM;gBAC7C,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW;aACxC;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,uBAAuB,CAAC,WAAmB;QACjD,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,UAAyC,EAAE,IAAuB;QAC7E,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,yDAAyD;YACzD,OAAO,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,0CAA0C;QAC1C,OAAO,UAAU,CAAC,IAAI,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,WAAmB,EAAE,YAA8B;QAC9E,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC1D,IAAI,WAAW,GAAG,SAAS,CAAC;QAC5B,IAAI,cAAc,GAAG,OAAO,CAAC;QAE7B,IAAI,CAAC;YACH,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBAChC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC/D,WAAW,GAAG,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC;gBACpC,cAAc,GAAG,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;YAC1C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,OAAO;YACL,SAAS,EAAE,WAAW;YACtB,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,YAAY,IAAI,CAAC,YAAY,EAAE,EAAE;YAC/C,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE;gBACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,KAAK,EAAE,CAAC;wBACN,MAAM,EAAE,SAAS;wBACjB,IAAI,EAAE,kBAAkB;wBACxB,OAAO,EAAE,OAAO;qBACjB,CAAC;gBACF,SAAS,EAAE;oBACT,IAAI,EAAE,aAAa;oBACnB,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,cAAc;iBACxB;aACF;YACD,UAAU,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACnC,IAAI,EAAE,SAAkB;gBACxB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,IAAI,EAAE,WAAW,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE;gBAC1C,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;aAC7E,CAAC,CAAC;YACH,YAAY,EAAE,EAAE;SACjB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,WAAmB;QAC9C,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;YAAE,OAAO,MAAM,CAAC;QACnE,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YAAE,OAAO,MAAM,CAAC;QAC9D,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACrE,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAChE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,WAAmB;QAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC1D,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACjC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QACvE,MAAM,YAAY,GAAqB,EAAE,CAAC;QAE1C,0BAA0B;QAC1B,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;YAC7B,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;gBACvE,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAC1D,YAAY,CAAC,IAAI,CAAC;oBAChB,IAAI;oBACJ,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;oBACxB,IAAI,EAAE,YAAY;oBAClB,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC;iBAC5C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,WAAW,CAAC,eAAe,EAAE,CAAC;YAC3D,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC1E,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAC1D,YAAY,CAAC,IAAI,CAAC;oBAChB,IAAI;oBACJ,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;oBACxB,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC;iBAC5C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,IAAI,WAAW,CAAC,gBAAgB,EAAE,CAAC;YACjC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC3E,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAC1D,YAAY,CAAC,IAAI,CAAC;oBAChB,IAAI;oBACJ,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;oBACxB,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC;iBAC5C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,WAAmB,EAAE,WAAmB;QACzD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;QAClF,IAAI,CAAC;YACH,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC1D,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;oBAAE,OAAO,GAAG,CAAC,OAAO,CAAC;gBACxD,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI;oBAAE,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,SAAS,CAAC;YAC7E,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,oBAAoB,CAChC,WAAmB,EACnB,eAAuD;QAEvD,MAAM,eAAe,GAA8B,EAAE,CAAC;QAEtD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,8BAA8B,EAAE;gBACtD,GAAG,EAAE,WAAW;gBAChB,QAAQ,EAAE,OAAO;gBACjB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;aAC5B,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAErC,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC;gBAC9B,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,eAAsC,CAAC,EAAE,CAAC;oBACnG,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC;wBAAE,SAAS;oBAE7D,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAExD,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC;wBACrC,IAAI,OAAO,GAAG,KAAK,QAAQ;4BAAE,SAAS;wBAEtC,eAAe,CAAC,IAAI,CAAC;4BACnB,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,OAAO,OAAO,EAAE;4BAC9C,OAAO,EAAE,OAAO;4BAChB,QAAQ;4BACR,kBAAkB,EAAE,QAAQ,CAAC,KAAK,IAAI,GAAG;4BACzC,eAAe,EAAE,QAAQ,CAAC,YAAY,EAAE,OAAO;4BAC/C,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,oBAAoB,OAAO,EAAE;4BACjD,WAAW,EAAE,GAAG,CAAC,KAAK,IAAI,0BAA0B;4BACpD,GAAG,EAAE,GAAG,CAAC,GAAG;4BACZ,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;4BACpC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;4BACpC,cAAc,EAAE,QAAQ,CAAC,YAAY;gCACnC,CAAC,CAAC,cAAc,QAAQ,CAAC,YAAY,CAAC,IAAI,IAAI,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE;gCAC7E,CAAC,CAAC,yDAAyD;yBAC9D,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,4DAA4D;YAC5D,iCAAiC;YACjC,MAAM,WAAW,GAAI,KAAa,EAAE,MAAM,CAAC;YAC3C,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,CAAC;oBACH,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBAC1C,8BAA8B;oBAC9B,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC;wBAC9B,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,eAAsC,CAAC,EAAE,CAAC;4BACnG,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;4BACxD,eAAe,CAAC,IAAI,CAAC;gCACnB,EAAE,EAAE,OAAO,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;gCAClC,OAAO,EAAE,OAAO;gCAChB,QAAQ;gCACR,kBAAkB,EAAE,QAAQ,CAAC,KAAK,IAAI,GAAG;gCACzC,eAAe,EAAE,QAAQ,CAAC,YAAY,EAAE,OAAO;gCAC/C,KAAK,EAAE,oBAAoB,OAAO,EAAE;gCACpC,WAAW,EAAE,uBAAuB;gCACpC,UAAU,EAAE,EAAE;gCACd,cAAc,EAAE,QAAQ,CAAC,YAAY;oCACnC,CAAC,CAAC,cAAc,QAAQ,CAAC,YAAY,CAAC,IAAI,IAAI,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE;oCAC7E,CAAC,CAAC,+BAA+B;6BACpC,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,sBAAsB;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,WAAmB;QACxC,MAAM,GAAG,GAA6B;YACpC,UAAU,EAAE,UAAU;YACtB,MAAM,EAAE,MAAM;YACd,UAAU,EAAE,QAAQ;YACpB,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,MAAM;SACf,CAAC;QACF,OAAO,GAAG,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC;IACtC,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,YAA8B;QAClD,MAAM,KAAK,GAAkB,EAAE,CAAC;QAEhC,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAE7D,yBAAyB;YACzB,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC7D,KAAK,CAAC,IAAI,CAAC;oBACT,OAAO,EAAE,GAAG,CAAC,IAAI;oBACjB,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,SAAS,EAAE,UAAU;oBACrB,MAAM,EAAE,oBAAoB,GAAG,CAAC,OAAO,EAAE;oBACzC,cAAc,EAAE,uDAAuD;iBACxE,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,yBAAyB;YACzB,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;gBACvC,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC9D,KAAK,CAAC,IAAI,CAAC;oBACT,OAAO,EAAE,GAAG,CAAC,IAAI;oBACjB,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,6BAA6B;oBACrC,cAAc,EAAE,8BAA8B;iBAC/C,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,yBAAyB;YACzB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC;YACxF,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC;oBACT,OAAO,EAAE,GAAG,CAAC,IAAI;oBACjB,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,SAAS,EAAE,QAAQ,CAAC,IAAI;oBACxB,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,cAAc,EAAE,QAAQ,CAAC,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU;wBACtE,CAAC,CAAC,uCAAuC;wBACzC,CAAC,CAAC,4CAA4C;iBACjD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,OAAe;QACtC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAEhD,2BAA2B;QAC3B,MAAM,QAAQ,GAA2B;YACvC,aAAa,EAAE,KAAK;YACpB,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,YAAY;YAC1B,oBAAoB,EAAE,YAAY;YAClC,KAAK,EAAE,cAAc;YACrB,aAAa,EAAE,KAAK;SACrB,CAAC;QAEF,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC;IACzC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CACzB,WAAmB,EACnB,eAAuD;QAEvD,MAAM,QAAQ,GAAsB,EAAE,CAAC;QAEvC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,iCAAiC,EAAE;gBACzD,GAAG,EAAE,WAAW;gBAChB,QAAQ,EAAE,OAAO;gBACjB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;aAC5B,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;YAExC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAA2B,CAAC,EAAE,CAAC;gBACvE,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAE1D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC;gBAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBAE3B,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM;oBAAE,SAAS;gBAElC,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAE7D,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI;oBACJ,cAAc,EAAE,OAAO;oBACvB,aAAa,EAAE,MAAM;oBACrB,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,UAAU,KAAK,OAAO;iBACjC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gEAAgE;YAChE,4BAA4B;QAC9B,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,OAAe,EAAE,MAAc;QACzD,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE9D,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QAExD,IAAI,WAAW,GAAG,YAAY;YAAE,OAAO,OAAO,CAAC;QAE/C,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QAExD,IAAI,WAAW,GAAG,YAAY;YAAE,OAAO,OAAO,CAAC;QAE/C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,WAAmB,EAAE,YAA8B;QAC7E,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC1D,IAAI,WAAW,GAAG,SAAS,CAAC;QAC5B,IAAI,cAAc,GAAG,OAAO,CAAC;QAE7B,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;YAC/D,WAAW,GAAG,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC;YACpC,cAAc,GAAG,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;QAC1C,CAAC;QAED,MAAM,UAAU,GAAoB,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3D,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7C,IAAI,EAAE,WAAW,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE;YACnE,QAAQ,EAAE,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;SAC3F,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,SAAS,EAAE,WAAW;YACtB,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,YAAY,IAAI,CAAC,YAAY,EAAE,EAAE;YAC/C,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE;gBACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,KAAK,EAAE;oBACL,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE;iBACnE;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,aAAa;oBACnB,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,cAAc;iBACxB;aACF;YACD,UAAU;YACV,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,YAAY,CAAC;SACnE,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,oBAAoB,CAC1B,WAAmB,EACnB,YAA8B;QAE9B,MAAM,KAAK,GAAiC,EAAE,CAAC;QAE/C,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAC/E,MAAM,SAAS,GAAa,EAAE,CAAC;YAE/B,IAAI,CAAC;gBACH,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;oBAC1D,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;wBACrB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;4BACnD,SAAS,CAAC,IAAI,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;wBACtC,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,gBAAgB;YAClB,CAAC;YAED,KAAK,CAAC,IAAI,CAAC;gBACT,GAAG,EAAE,WAAW,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE;gBAClE,SAAS;aACV,CAAC,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,WAAmB;QACzC,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACK,YAAY;QAClB,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACnE,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;YAC1C,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,eAAe,CACrB,eAA0C,EAC1C,YAA2B,EAC3B,QAA2B;QAE3B,MAAM,SAAS,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAC9D,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;YAChC,IAAI,CAAC,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAC5B,SAAS,CAAC,CAAC,CAAC,QAAkC,CAAC,EAAE,CAAC;YACpD,CAAC;QACH,CAAC;QAED,MAAM,YAAY,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QACpD,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;YAC7B,IAAI,CAAC,CAAC,SAAS,KAAK,UAAU;gBAAE,YAAY,CAAC,IAAI,EAAE,CAAC;iBAC/C,IAAI,CAAC,CAAC,SAAS,IAAI,YAAY,EAAE,CAAC;gBACrC,YAAY,CAAC,CAAC,CAAC,SAAsC,CAAC,EAAE,CAAC;YAC3D,CAAC;QACH,CAAC;QAED,iCAAiC;QACjC,IAAI,KAAK,GAAG,GAAG,CAAC;QAChB,KAAK,IAAI,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAC;QACjC,KAAK,IAAI,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC;QAC7B,KAAK,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9B,KAAK,IAAI,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC;QAC3B,KAAK,IAAI,YAAY,CAAC,IAAI,GAAG,EAAE,CAAC;QAChC,KAAK,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QACjC,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7D,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAE3B,OAAO;YACL,kBAAkB,EAAE,SAAS;YAC7B,gBAAgB,EAAE,YAAY;YAC9B,aAAa,EAAE,QAAQ,CAAC,MAAM;YAC9B,WAAW,EAAE,KAAK;SACnB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,MAA4B;QAC5C,OAAO,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACtC,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,YAAqB;YAC3B,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;YACjB,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,qCAAqC;YAC1D,QAAQ,EAAE;gBACR,IAAI,EAAE,cAAc;gBACpB,SAAS,EAAE,CAAC;gBACZ,OAAO,EAAE,CAAC;gBACV,WAAW,EAAE,CAAC;gBACd,SAAS,EAAE,CAAC;aACb;YACD,WAAW,EAAE,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,KAAK,EAAE;YACvC,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE;YACrB,WAAW,EAAE,IAAI,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,kBAAkB,GAAG;YACxD,UAAU,EAAE,IAAI,IAAI,EAAE;SACvB,CAAC,CAAC,CAAC;IACN,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAkC;IACxE,OAAO,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACxC,CAAC"}