@nahisaho/musubix-core 1.0.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.
Files changed (214) hide show
  1. package/bin/musubix.js +18 -0
  2. package/dist/__tests__/index.test.d.ts +2 -0
  3. package/dist/__tests__/index.test.d.ts.map +1 -0
  4. package/dist/__tests__/index.test.js +27 -0
  5. package/dist/__tests__/index.test.js.map +1 -0
  6. package/dist/auth/auth-manager.d.ts +320 -0
  7. package/dist/auth/auth-manager.d.ts.map +1 -0
  8. package/dist/auth/auth-manager.js +580 -0
  9. package/dist/auth/auth-manager.js.map +1 -0
  10. package/dist/cli/base.d.ts +58 -0
  11. package/dist/cli/base.d.ts.map +1 -0
  12. package/dist/cli/base.js +93 -0
  13. package/dist/cli/base.js.map +1 -0
  14. package/dist/cli/commands/help.d.ts +17 -0
  15. package/dist/cli/commands/help.d.ts.map +1 -0
  16. package/dist/cli/commands/help.js +228 -0
  17. package/dist/cli/commands/help.js.map +1 -0
  18. package/dist/cli/commands/index.d.ts +14 -0
  19. package/dist/cli/commands/index.d.ts.map +1 -0
  20. package/dist/cli/commands/index.js +25 -0
  21. package/dist/cli/commands/index.js.map +1 -0
  22. package/dist/cli/commands/init.d.ts +38 -0
  23. package/dist/cli/commands/init.d.ts.map +1 -0
  24. package/dist/cli/commands/init.js +258 -0
  25. package/dist/cli/commands/init.js.map +1 -0
  26. package/dist/cli/index.d.ts +9 -0
  27. package/dist/cli/index.d.ts.map +1 -0
  28. package/dist/cli/index.js +9 -0
  29. package/dist/cli/index.js.map +1 -0
  30. package/dist/codegen/coding-standards.d.ts +250 -0
  31. package/dist/codegen/coding-standards.d.ts.map +1 -0
  32. package/dist/codegen/coding-standards.js +976 -0
  33. package/dist/codegen/coding-standards.js.map +1 -0
  34. package/dist/codegen/coverage-reporter.d.ts +264 -0
  35. package/dist/codegen/coverage-reporter.d.ts.map +1 -0
  36. package/dist/codegen/coverage-reporter.js +697 -0
  37. package/dist/codegen/coverage-reporter.js.map +1 -0
  38. package/dist/codegen/dependency-analyzer.d.ts +271 -0
  39. package/dist/codegen/dependency-analyzer.d.ts.map +1 -0
  40. package/dist/codegen/dependency-analyzer.js +661 -0
  41. package/dist/codegen/dependency-analyzer.js.map +1 -0
  42. package/dist/codegen/generator.d.ts +275 -0
  43. package/dist/codegen/generator.d.ts.map +1 -0
  44. package/dist/codegen/generator.js +781 -0
  45. package/dist/codegen/generator.js.map +1 -0
  46. package/dist/codegen/index.d.ts +18 -0
  47. package/dist/codegen/index.d.ts.map +1 -0
  48. package/dist/codegen/index.js +27 -0
  49. package/dist/codegen/index.js.map +1 -0
  50. package/dist/codegen/integration-test-generator.d.ts +312 -0
  51. package/dist/codegen/integration-test-generator.d.ts.map +1 -0
  52. package/dist/codegen/integration-test-generator.js +765 -0
  53. package/dist/codegen/integration-test-generator.js.map +1 -0
  54. package/dist/codegen/pattern-conformance.d.ts +309 -0
  55. package/dist/codegen/pattern-conformance.d.ts.map +1 -0
  56. package/dist/codegen/pattern-conformance.js +590 -0
  57. package/dist/codegen/pattern-conformance.js.map +1 -0
  58. package/dist/codegen/quality-metrics.d.ts +235 -0
  59. package/dist/codegen/quality-metrics.d.ts.map +1 -0
  60. package/dist/codegen/quality-metrics.js +439 -0
  61. package/dist/codegen/quality-metrics.js.map +1 -0
  62. package/dist/codegen/security-scanner.d.ts +179 -0
  63. package/dist/codegen/security-scanner.d.ts.map +1 -0
  64. package/dist/codegen/security-scanner.js +495 -0
  65. package/dist/codegen/security-scanner.js.map +1 -0
  66. package/dist/codegen/static-analyzer.d.ts +188 -0
  67. package/dist/codegen/static-analyzer.d.ts.map +1 -0
  68. package/dist/codegen/static-analyzer.js +490 -0
  69. package/dist/codegen/static-analyzer.js.map +1 -0
  70. package/dist/codegen/unit-test-generator.d.ts +289 -0
  71. package/dist/codegen/unit-test-generator.d.ts.map +1 -0
  72. package/dist/codegen/unit-test-generator.js +634 -0
  73. package/dist/codegen/unit-test-generator.js.map +1 -0
  74. package/dist/design/adr-generator.d.ts +227 -0
  75. package/dist/design/adr-generator.d.ts.map +1 -0
  76. package/dist/design/adr-generator.js +423 -0
  77. package/dist/design/adr-generator.js.map +1 -0
  78. package/dist/design/c4-generator.d.ts +267 -0
  79. package/dist/design/c4-generator.d.ts.map +1 -0
  80. package/dist/design/c4-generator.js +453 -0
  81. package/dist/design/c4-generator.js.map +1 -0
  82. package/dist/design/framework-optimizer.d.ts +190 -0
  83. package/dist/design/framework-optimizer.d.ts.map +1 -0
  84. package/dist/design/framework-optimizer.js +589 -0
  85. package/dist/design/framework-optimizer.js.map +1 -0
  86. package/dist/design/index.d.ts +12 -0
  87. package/dist/design/index.d.ts.map +1 -0
  88. package/dist/design/index.js +13 -0
  89. package/dist/design/index.js.map +1 -0
  90. package/dist/design/pattern-detector.d.ts +270 -0
  91. package/dist/design/pattern-detector.d.ts.map +1 -0
  92. package/dist/design/pattern-detector.js +621 -0
  93. package/dist/design/pattern-detector.js.map +1 -0
  94. package/dist/design/solid-validator.d.ts +188 -0
  95. package/dist/design/solid-validator.d.ts.map +1 -0
  96. package/dist/design/solid-validator.js +579 -0
  97. package/dist/design/solid-validator.js.map +1 -0
  98. package/dist/error/data-persistence.d.ts +311 -0
  99. package/dist/error/data-persistence.d.ts.map +1 -0
  100. package/dist/error/data-persistence.js +586 -0
  101. package/dist/error/data-persistence.js.map +1 -0
  102. package/dist/error/graceful-degradation.d.ts +309 -0
  103. package/dist/error/graceful-degradation.d.ts.map +1 -0
  104. package/dist/error/graceful-degradation.js +510 -0
  105. package/dist/error/graceful-degradation.js.map +1 -0
  106. package/dist/error/index.d.ts +11 -0
  107. package/dist/error/index.d.ts.map +1 -0
  108. package/dist/error/index.js +19 -0
  109. package/dist/error/index.js.map +1 -0
  110. package/dist/explanation/explanation-generator.d.ts +228 -0
  111. package/dist/explanation/explanation-generator.d.ts.map +1 -0
  112. package/dist/explanation/explanation-generator.js +662 -0
  113. package/dist/explanation/explanation-generator.js.map +1 -0
  114. package/dist/explanation/index.d.ts +11 -0
  115. package/dist/explanation/index.d.ts.map +1 -0
  116. package/dist/explanation/index.js +19 -0
  117. package/dist/explanation/index.js.map +1 -0
  118. package/dist/explanation/reasoning-chain.d.ts +314 -0
  119. package/dist/explanation/reasoning-chain.d.ts.map +1 -0
  120. package/dist/explanation/reasoning-chain.js +414 -0
  121. package/dist/explanation/reasoning-chain.js.map +1 -0
  122. package/dist/explanation/visual-explanation.d.ts +315 -0
  123. package/dist/explanation/visual-explanation.d.ts.map +1 -0
  124. package/dist/explanation/visual-explanation.js +667 -0
  125. package/dist/explanation/visual-explanation.js.map +1 -0
  126. package/dist/index.d.ts +33 -0
  127. package/dist/index.d.ts.map +1 -0
  128. package/dist/index.js +47 -0
  129. package/dist/index.js.map +1 -0
  130. package/dist/requirements/decomposer.d.ts +235 -0
  131. package/dist/requirements/decomposer.d.ts.map +1 -0
  132. package/dist/requirements/decomposer.js +587 -0
  133. package/dist/requirements/decomposer.js.map +1 -0
  134. package/dist/requirements/related-finder.d.ts +261 -0
  135. package/dist/requirements/related-finder.d.ts.map +1 -0
  136. package/dist/requirements/related-finder.js +629 -0
  137. package/dist/requirements/related-finder.js.map +1 -0
  138. package/dist/traceability/impact.d.ts +196 -0
  139. package/dist/traceability/impact.d.ts.map +1 -0
  140. package/dist/traceability/impact.js +438 -0
  141. package/dist/traceability/impact.js.map +1 -0
  142. package/dist/traceability/index.d.ts +9 -0
  143. package/dist/traceability/index.d.ts.map +1 -0
  144. package/dist/traceability/index.js +10 -0
  145. package/dist/traceability/index.js.map +1 -0
  146. package/dist/traceability/manager.d.ts +266 -0
  147. package/dist/traceability/manager.d.ts.map +1 -0
  148. package/dist/traceability/manager.js +412 -0
  149. package/dist/traceability/manager.js.map +1 -0
  150. package/dist/types/common.d.ts +294 -0
  151. package/dist/types/common.d.ts.map +1 -0
  152. package/dist/types/common.js +15 -0
  153. package/dist/types/common.js.map +1 -0
  154. package/dist/types/ears.d.ts +158 -0
  155. package/dist/types/ears.d.ts.map +1 -0
  156. package/dist/types/ears.js +33 -0
  157. package/dist/types/ears.js.map +1 -0
  158. package/dist/types/errors.d.ts +176 -0
  159. package/dist/types/errors.d.ts.map +1 -0
  160. package/dist/types/errors.js +55 -0
  161. package/dist/types/errors.js.map +1 -0
  162. package/dist/types/index.d.ts +10 -0
  163. package/dist/types/index.d.ts.map +1 -0
  164. package/dist/types/index.js +10 -0
  165. package/dist/types/index.js.map +1 -0
  166. package/dist/utils/data-protector.d.ts +122 -0
  167. package/dist/utils/data-protector.d.ts.map +1 -0
  168. package/dist/utils/data-protector.js +275 -0
  169. package/dist/utils/data-protector.js.map +1 -0
  170. package/dist/utils/error-handler.d.ts +101 -0
  171. package/dist/utils/error-handler.d.ts.map +1 -0
  172. package/dist/utils/error-handler.js +324 -0
  173. package/dist/utils/error-handler.js.map +1 -0
  174. package/dist/utils/i18n-manager.d.ts +259 -0
  175. package/dist/utils/i18n-manager.d.ts.map +1 -0
  176. package/dist/utils/i18n-manager.js +554 -0
  177. package/dist/utils/i18n-manager.js.map +1 -0
  178. package/dist/utils/index.d.ts +10 -0
  179. package/dist/utils/index.d.ts.map +1 -0
  180. package/dist/utils/index.js +10 -0
  181. package/dist/utils/index.js.map +1 -0
  182. package/dist/utils/logger.d.ts +120 -0
  183. package/dist/utils/logger.d.ts.map +1 -0
  184. package/dist/utils/logger.js +237 -0
  185. package/dist/utils/logger.js.map +1 -0
  186. package/dist/utils/performance-profiler.d.ts +251 -0
  187. package/dist/utils/performance-profiler.d.ts.map +1 -0
  188. package/dist/utils/performance-profiler.js +458 -0
  189. package/dist/utils/performance-profiler.js.map +1 -0
  190. package/dist/utils/scalability-optimizer.d.ts +294 -0
  191. package/dist/utils/scalability-optimizer.d.ts.map +1 -0
  192. package/dist/utils/scalability-optimizer.js +606 -0
  193. package/dist/utils/scalability-optimizer.js.map +1 -0
  194. package/dist/utils/structured-logger.d.ts +294 -0
  195. package/dist/utils/structured-logger.d.ts.map +1 -0
  196. package/dist/utils/structured-logger.js +630 -0
  197. package/dist/utils/structured-logger.js.map +1 -0
  198. package/dist/utils/version-compatibility.d.ts +217 -0
  199. package/dist/utils/version-compatibility.d.ts.map +1 -0
  200. package/dist/utils/version-compatibility.js +443 -0
  201. package/dist/utils/version-compatibility.js.map +1 -0
  202. package/dist/validators/ears-validator.d.ts +182 -0
  203. package/dist/validators/ears-validator.d.ts.map +1 -0
  204. package/dist/validators/ears-validator.js +357 -0
  205. package/dist/validators/ears-validator.js.map +1 -0
  206. package/dist/validators/index.d.ts +8 -0
  207. package/dist/validators/index.d.ts.map +1 -0
  208. package/dist/validators/index.js +9 -0
  209. package/dist/validators/index.js.map +1 -0
  210. package/dist/version.d.ts +8 -0
  211. package/dist/version.d.ts.map +1 -0
  212. package/dist/version.js +8 -0
  213. package/dist/version.js.map +1 -0
  214. package/package.json +100 -0
@@ -0,0 +1,587 @@
1
+ /**
2
+ * Requirements Decomposer
3
+ *
4
+ * Decomposes complex requirements into smaller, manageable units
5
+ *
6
+ * @packageDocumentation
7
+ * @module requirements/decomposer
8
+ *
9
+ * @see REQ-RA-004 - Requirements Decomposition
10
+ * @see Article II - Complete Requirements Specification
11
+ */
12
+ /**
13
+ * Default configuration
14
+ */
15
+ export const DEFAULT_DECOMPOSER_CONFIG = {
16
+ defaultStrategy: 'functional',
17
+ maxDepth: 4,
18
+ targetUnitSize: 4, // 4 hours
19
+ autoAcceptanceCriteria: true,
20
+ autoEstimate: true,
21
+ };
22
+ /**
23
+ * Complexity indicators
24
+ */
25
+ const COMPLEXITY_INDICATORS = {
26
+ keywords: {
27
+ high: ['complex', 'multiple', 'various', 'all', 'every', 'integrate', 'synchronize'],
28
+ medium: ['several', 'some', 'process', 'manage', 'handle'],
29
+ low: ['single', 'simple', 'basic', 'display', 'show'],
30
+ },
31
+ patterns: {
32
+ conjunction: /\band\b/gi,
33
+ disjunction: /\bor\b/gi,
34
+ conditional: /\bif\b.*\bthen\b/gi,
35
+ iteration: /\bfor each\b|\bfor all\b|\bevery\b/gi,
36
+ },
37
+ };
38
+ /**
39
+ * Requirements Decomposer
40
+ */
41
+ export class RequirementsDecomposer {
42
+ config;
43
+ constructor(config) {
44
+ this.config = { ...DEFAULT_DECOMPOSER_CONFIG, ...config };
45
+ }
46
+ /**
47
+ * Decompose a requirement
48
+ */
49
+ decompose(requirement, strategy) {
50
+ const effectiveStrategy = strategy ?? this.config.defaultStrategy;
51
+ // Analyze complexity
52
+ const complexity = requirement.complexity ?? this.analyzeComplexity(requirement);
53
+ // Decompose based on strategy
54
+ const units = this.performDecomposition(requirement, effectiveStrategy, complexity);
55
+ // Build hierarchy
56
+ const hierarchy = this.buildHierarchy(units);
57
+ // Calculate statistics
58
+ const stats = this.calculateStats(units, hierarchy);
59
+ // Generate recommendations
60
+ const recommendations = this.generateRecommendations(requirement, units, stats);
61
+ return {
62
+ original: requirement,
63
+ strategy: effectiveStrategy,
64
+ units,
65
+ hierarchy,
66
+ stats,
67
+ recommendations,
68
+ };
69
+ }
70
+ /**
71
+ * Analyze requirement complexity
72
+ */
73
+ analyzeComplexity(requirement) {
74
+ const text = `${requirement.title} ${requirement.description}`.toLowerCase();
75
+ let score = 0;
76
+ // Check keywords
77
+ for (const keyword of COMPLEXITY_INDICATORS.keywords.high) {
78
+ if (text.includes(keyword))
79
+ score += 3;
80
+ }
81
+ for (const keyword of COMPLEXITY_INDICATORS.keywords.medium) {
82
+ if (text.includes(keyword))
83
+ score += 2;
84
+ }
85
+ for (const keyword of COMPLEXITY_INDICATORS.keywords.low) {
86
+ if (text.includes(keyword))
87
+ score -= 1;
88
+ }
89
+ // Check patterns
90
+ const conjunctions = (text.match(COMPLEXITY_INDICATORS.patterns.conjunction) ?? []).length;
91
+ const disjunctions = (text.match(COMPLEXITY_INDICATORS.patterns.disjunction) ?? []).length;
92
+ const conditionals = (text.match(COMPLEXITY_INDICATORS.patterns.conditional) ?? []).length;
93
+ const iterations = (text.match(COMPLEXITY_INDICATORS.patterns.iteration) ?? []).length;
94
+ score += conjunctions * 2;
95
+ score += disjunctions * 1.5;
96
+ score += conditionals * 2;
97
+ score += iterations * 2.5;
98
+ // Check acceptance criteria count
99
+ if (requirement.acceptanceCriteria) {
100
+ score += requirement.acceptanceCriteria.length * 1.5;
101
+ }
102
+ // Check dependencies
103
+ if (requirement.dependencies) {
104
+ score += requirement.dependencies.length;
105
+ }
106
+ // Determine level
107
+ if (score >= 15)
108
+ return 'very-high';
109
+ if (score >= 10)
110
+ return 'high';
111
+ if (score >= 5)
112
+ return 'medium';
113
+ return 'low';
114
+ }
115
+ /**
116
+ * Perform decomposition
117
+ */
118
+ performDecomposition(requirement, strategy, complexity) {
119
+ const units = [];
120
+ switch (strategy) {
121
+ case 'functional':
122
+ units.push(...this.decomposeFunctional(requirement, complexity));
123
+ break;
124
+ case 'behavioral':
125
+ units.push(...this.decomposeBehavioral(requirement, complexity));
126
+ break;
127
+ case 'structural':
128
+ units.push(...this.decomposeStructural(requirement, complexity));
129
+ break;
130
+ case 'temporal':
131
+ units.push(...this.decomposeTemporal(requirement, complexity));
132
+ break;
133
+ case 'stakeholder':
134
+ units.push(...this.decomposeByStakeholder(requirement, complexity));
135
+ break;
136
+ case 'risk-based':
137
+ units.push(...this.decomposeByRisk(requirement, complexity));
138
+ break;
139
+ }
140
+ // Recursively decompose if units are still too large
141
+ const refinedUnits = [];
142
+ for (const unit of units) {
143
+ if (this.shouldDecomposeMore(unit)) {
144
+ const subUnits = this.decomposeUnit(unit, strategy);
145
+ refinedUnits.push(...subUnits);
146
+ }
147
+ else {
148
+ refinedUnits.push(unit);
149
+ }
150
+ }
151
+ return refinedUnits;
152
+ }
153
+ /**
154
+ * Functional decomposition
155
+ */
156
+ decomposeFunctional(requirement, _complexity) {
157
+ const units = [];
158
+ const desc = requirement.description;
159
+ // Split by conjunctions
160
+ const parts = desc.split(/\band\b/i).map((p) => p.trim()).filter(Boolean);
161
+ if (parts.length > 1) {
162
+ for (let i = 0; i < parts.length; i++) {
163
+ units.push(this.createUnit(requirement, parts[i], 1, `func-${i + 1}`));
164
+ }
165
+ }
166
+ else {
167
+ // Identify functional aspects
168
+ const aspects = this.identifyFunctionalAspects(desc);
169
+ for (let i = 0; i < aspects.length; i++) {
170
+ units.push(this.createUnit(requirement, aspects[i], 1, `func-${i + 1}`));
171
+ }
172
+ }
173
+ // If no decomposition possible, return single unit
174
+ if (units.length === 0) {
175
+ units.push(this.createUnit(requirement, desc, 1, 'func-1'));
176
+ }
177
+ return units;
178
+ }
179
+ /**
180
+ * Behavioral decomposition
181
+ */
182
+ decomposeBehavioral(requirement, _complexity) {
183
+ const units = [];
184
+ // Create units for each acceptance criterion
185
+ if (requirement.acceptanceCriteria?.length) {
186
+ for (let i = 0; i < requirement.acceptanceCriteria.length; i++) {
187
+ const criterion = requirement.acceptanceCriteria[i];
188
+ units.push(this.createUnit(requirement, `Behavior: ${criterion}`, 1, `behav-${i + 1}`));
189
+ }
190
+ }
191
+ else {
192
+ // Generate behavioral scenarios
193
+ const scenarios = this.generateScenarios(requirement);
194
+ for (let i = 0; i < scenarios.length; i++) {
195
+ units.push(this.createUnit(requirement, scenarios[i], 1, `behav-${i + 1}`));
196
+ }
197
+ }
198
+ return units;
199
+ }
200
+ /**
201
+ * Structural decomposition
202
+ */
203
+ decomposeStructural(requirement, _complexity) {
204
+ const units = [];
205
+ const components = this.identifyComponents(requirement.description);
206
+ for (let i = 0; i < components.length; i++) {
207
+ const unit = this.createUnit(requirement, `${components[i]} component implementation`, 1, `struct-${i + 1}`);
208
+ unit.component = components[i];
209
+ units.push(unit);
210
+ }
211
+ if (units.length === 0) {
212
+ units.push(this.createUnit(requirement, requirement.description, 1, 'struct-1'));
213
+ }
214
+ return units;
215
+ }
216
+ /**
217
+ * Temporal decomposition
218
+ */
219
+ decomposeTemporal(requirement, _complexity) {
220
+ const phases = ['setup', 'execution', 'validation', 'cleanup'];
221
+ const units = [];
222
+ for (let i = 0; i < phases.length; i++) {
223
+ const phase = phases[i];
224
+ units.push(this.createUnit(requirement, `${phase.charAt(0).toUpperCase() + phase.slice(1)} phase: ${requirement.title}`, 1, `temp-${phase}`));
225
+ }
226
+ return units;
227
+ }
228
+ /**
229
+ * Stakeholder-based decomposition
230
+ */
231
+ decomposeByStakeholder(requirement, _complexity) {
232
+ const stakeholders = requirement.stakeholders ?? ['user', 'system', 'admin'];
233
+ const units = [];
234
+ for (let i = 0; i < stakeholders.length; i++) {
235
+ const stakeholder = stakeholders[i];
236
+ units.push(this.createUnit(requirement, `${stakeholder} perspective: ${requirement.title}`, 1, `stake-${stakeholder}`));
237
+ }
238
+ return units;
239
+ }
240
+ /**
241
+ * Risk-based decomposition
242
+ */
243
+ decomposeByRisk(requirement, _complexity) {
244
+ const riskAreas = ['core-functionality', 'edge-cases', 'error-handling', 'performance'];
245
+ const units = [];
246
+ for (let i = 0; i < riskAreas.length; i++) {
247
+ const area = riskAreas[i];
248
+ units.push(this.createUnit(requirement, `${area.replace(/-/g, ' ')}: ${requirement.title}`, 1, `risk-${area}`));
249
+ }
250
+ return units;
251
+ }
252
+ /**
253
+ * Create a requirement unit
254
+ */
255
+ createUnit(parent, description, level, suffix) {
256
+ const id = `${parent.id}-${suffix}`;
257
+ const title = this.generateTitle(description);
258
+ const unit = {
259
+ id,
260
+ parentId: parent.id,
261
+ title,
262
+ description,
263
+ type: parent.type,
264
+ level,
265
+ testable: this.isTestable(description),
266
+ dependencies: [],
267
+ tags: this.extractTags(description),
268
+ acceptanceCriteria: [],
269
+ };
270
+ // Auto-generate acceptance criteria
271
+ if (this.config.autoAcceptanceCriteria) {
272
+ unit.acceptanceCriteria = this.generateAcceptanceCriteria(description);
273
+ }
274
+ // Auto-estimate effort
275
+ if (this.config.autoEstimate) {
276
+ unit.estimatedEffort = this.estimateEffort(description);
277
+ }
278
+ return unit;
279
+ }
280
+ /**
281
+ * Check if unit should be decomposed more
282
+ */
283
+ shouldDecomposeMore(unit) {
284
+ if (unit.level >= this.config.maxDepth)
285
+ return false;
286
+ if (unit.estimatedEffort && unit.estimatedEffort <= this.config.targetUnitSize)
287
+ return false;
288
+ // Check complexity of unit
289
+ const complexity = this.analyzeUnitComplexity(unit);
290
+ return complexity === 'high' || complexity === 'very-high';
291
+ }
292
+ /**
293
+ * Analyze unit complexity
294
+ */
295
+ analyzeUnitComplexity(unit) {
296
+ const text = `${unit.title} ${unit.description}`.toLowerCase();
297
+ const conjunctions = (text.match(/\band\b/gi) ?? []).length;
298
+ if (conjunctions >= 3)
299
+ return 'very-high';
300
+ if (conjunctions >= 2)
301
+ return 'high';
302
+ if (conjunctions >= 1)
303
+ return 'medium';
304
+ return 'low';
305
+ }
306
+ /**
307
+ * Decompose a single unit further
308
+ */
309
+ decomposeUnit(unit, strategy) {
310
+ const parentReq = {
311
+ id: unit.id,
312
+ title: unit.title,
313
+ description: unit.description,
314
+ type: unit.type,
315
+ priority: 'should',
316
+ };
317
+ const subUnits = this.performDecomposition(parentReq, strategy, 'medium');
318
+ // Update levels and parent IDs
319
+ for (const sub of subUnits) {
320
+ sub.level = unit.level + 1;
321
+ sub.parentId = unit.id;
322
+ }
323
+ return subUnits;
324
+ }
325
+ /**
326
+ * Identify functional aspects
327
+ */
328
+ identifyFunctionalAspects(description) {
329
+ const aspects = [];
330
+ // Look for verb phrases
331
+ const verbPatterns = [
332
+ /(?:must|shall|should|will)\s+(\w+\s+\w+(?:\s+\w+)?)/gi,
333
+ /(?:to|can|able to)\s+(\w+\s+\w+(?:\s+\w+)?)/gi,
334
+ ];
335
+ for (const pattern of verbPatterns) {
336
+ let match;
337
+ while ((match = pattern.exec(description)) !== null) {
338
+ aspects.push(match[1].trim());
339
+ }
340
+ }
341
+ // If no aspects found, split by commas
342
+ if (aspects.length === 0) {
343
+ const commaParts = description.split(',').map((p) => p.trim()).filter((p) => p.length > 10);
344
+ aspects.push(...commaParts);
345
+ }
346
+ return aspects.length > 0 ? aspects : [description];
347
+ }
348
+ /**
349
+ * Generate behavioral scenarios
350
+ */
351
+ generateScenarios(requirement) {
352
+ const scenarios = [];
353
+ // Generate typical scenarios
354
+ scenarios.push(`Given valid input, when ${requirement.title.toLowerCase()}, then operation succeeds`);
355
+ scenarios.push(`Given invalid input, when ${requirement.title.toLowerCase()}, then appropriate error is returned`);
356
+ scenarios.push(`Given edge case, when ${requirement.title.toLowerCase()}, then system handles gracefully`);
357
+ return scenarios;
358
+ }
359
+ /**
360
+ * Identify components from description
361
+ */
362
+ identifyComponents(description) {
363
+ const components = [];
364
+ // Common component keywords
365
+ const componentPatterns = [
366
+ /\b(UI|interface|frontend)\b/gi,
367
+ /\b(API|service|backend)\b/gi,
368
+ /\b(database|storage|persistence)\b/gi,
369
+ /\b(validation|verification)\b/gi,
370
+ /\b(authentication|authorization|security)\b/gi,
371
+ /\b(logging|monitoring|metrics)\b/gi,
372
+ ];
373
+ for (const pattern of componentPatterns) {
374
+ if (pattern.test(description)) {
375
+ const match = description.match(pattern);
376
+ if (match) {
377
+ components.push(match[0].toLowerCase());
378
+ }
379
+ }
380
+ }
381
+ // Use component mapping if available
382
+ if (this.config.componentMapping) {
383
+ for (const [component, keywords] of Object.entries(this.config.componentMapping)) {
384
+ if (keywords.some((k) => description.toLowerCase().includes(k.toLowerCase()))) {
385
+ components.push(component);
386
+ }
387
+ }
388
+ }
389
+ return [...new Set(components)];
390
+ }
391
+ /**
392
+ * Generate title from description
393
+ */
394
+ generateTitle(description) {
395
+ // Take first sentence or first N words
396
+ const firstSentence = description.split(/[.!?]/)[0];
397
+ const words = firstSentence.split(/\s+/).slice(0, 8);
398
+ return words.join(' ').replace(/[,;:]$/, '');
399
+ }
400
+ /**
401
+ * Check if description is testable
402
+ */
403
+ isTestable(description) {
404
+ const testablePatterns = [
405
+ /\b(must|shall|should|will)\b/i,
406
+ /\b(returns?|produces?|generates?|displays?)\b/i,
407
+ /\b(validates?|verifies?|checks?)\b/i,
408
+ /\b(within|less than|at least|exactly)\b/i,
409
+ ];
410
+ return testablePatterns.some((p) => p.test(description));
411
+ }
412
+ /**
413
+ * Extract tags from description
414
+ */
415
+ extractTags(description) {
416
+ const tags = [];
417
+ const tagPatterns = [
418
+ [/\b(security|auth)\b/i, 'security'],
419
+ [/\b(performance|speed|fast)\b/i, 'performance'],
420
+ [/\b(UI|interface|display)\b/i, 'ui'],
421
+ [/\b(API|service|endpoint)\b/i, 'api'],
422
+ [/\b(database|storage|persist)\b/i, 'data'],
423
+ [/\b(validation|verify)\b/i, 'validation'],
424
+ [/\b(error|exception|fail)\b/i, 'error-handling'],
425
+ ];
426
+ for (const [pattern, tag] of tagPatterns) {
427
+ if (pattern.test(description)) {
428
+ tags.push(tag);
429
+ }
430
+ }
431
+ return tags;
432
+ }
433
+ /**
434
+ * Generate acceptance criteria
435
+ */
436
+ generateAcceptanceCriteria(description) {
437
+ const criteria = [];
438
+ // Extract measurable aspects
439
+ if (/\b(must|shall|should)\b/i.test(description)) {
440
+ criteria.push(`Verify that: ${description.replace(/^.*?(must|shall|should)\s*/i, '')}`);
441
+ }
442
+ // Add testability criteria
443
+ if (this.isTestable(description)) {
444
+ criteria.push('Unit tests cover this functionality');
445
+ criteria.push('Integration test validates end-to-end behavior');
446
+ }
447
+ if (criteria.length === 0) {
448
+ criteria.push(`Implementation matches specification: ${description.substring(0, 50)}...`);
449
+ }
450
+ return criteria;
451
+ }
452
+ /**
453
+ * Estimate effort in hours
454
+ */
455
+ estimateEffort(description) {
456
+ let baseEffort = 2; // Base hours
457
+ // Adjust based on complexity indicators
458
+ const conjunctions = (description.match(/\band\b/gi) ?? []).length;
459
+ baseEffort += conjunctions * 1;
460
+ const conditionals = (description.match(/\bif\b/gi) ?? []).length;
461
+ baseEffort += conditionals * 1.5;
462
+ // Adjust based on keywords
463
+ if (/\bintegrat/i.test(description))
464
+ baseEffort += 2;
465
+ if (/\bsecurity|auth/i.test(description))
466
+ baseEffort += 2;
467
+ if (/\bperformance/i.test(description))
468
+ baseEffort += 1;
469
+ return Math.round(baseEffort * 2) / 2; // Round to 0.5 hours
470
+ }
471
+ /**
472
+ * Build hierarchy tree
473
+ */
474
+ buildHierarchy(units) {
475
+ const rootUnit = units.find((u) => u.level === 1) ?? units[0];
476
+ const buildNode = (unit) => {
477
+ const children = units
478
+ .filter((u) => u.parentId === unit.id && u.id !== unit.id)
479
+ .map((u) => buildNode(u));
480
+ return { unit, children };
481
+ };
482
+ return buildNode(rootUnit);
483
+ }
484
+ /**
485
+ * Calculate statistics
486
+ */
487
+ calculateStats(units, _hierarchy) {
488
+ const depths = units.map((u) => u.level);
489
+ const avgDepth = depths.reduce((a, b) => a + b, 0) / depths.length;
490
+ const maxDepth = Math.max(...depths);
491
+ const totalEffort = units
492
+ .filter((u) => u.estimatedEffort)
493
+ .reduce((sum, u) => sum + (u.estimatedEffort ?? 0), 0);
494
+ return {
495
+ totalUnits: units.length,
496
+ avgDepth,
497
+ maxDepth,
498
+ estimatedTotalEffort: totalEffort > 0 ? totalEffort : undefined,
499
+ };
500
+ }
501
+ /**
502
+ * Generate recommendations
503
+ */
504
+ generateRecommendations(_requirement, units, stats) {
505
+ const recommendations = [];
506
+ // Check unit count
507
+ if (units.length > 10) {
508
+ recommendations.push('Consider grouping related units to reduce complexity');
509
+ }
510
+ if (units.length < 2) {
511
+ recommendations.push('Requirement may need further decomposition');
512
+ }
513
+ // Check testability
514
+ const untestable = units.filter((u) => !u.testable);
515
+ if (untestable.length > 0) {
516
+ recommendations.push(`${untestable.length} unit(s) may need clearer testability criteria`);
517
+ }
518
+ // Check dependencies
519
+ const noDeps = units.filter((u) => u.dependencies.length === 0 && u.level > 1);
520
+ if (noDeps.length > units.length / 2) {
521
+ recommendations.push('Consider identifying dependencies between units');
522
+ }
523
+ // Check effort distribution
524
+ if (stats.estimatedTotalEffort) {
525
+ const avgEffort = stats.estimatedTotalEffort / units.length;
526
+ if (avgEffort > this.config.targetUnitSize * 2) {
527
+ recommendations.push('Units may be too large, consider further decomposition');
528
+ }
529
+ }
530
+ if (recommendations.length === 0) {
531
+ recommendations.push('Decomposition looks well-balanced');
532
+ }
533
+ return recommendations;
534
+ }
535
+ /**
536
+ * Export decomposition as markdown
537
+ */
538
+ exportMarkdown(result) {
539
+ const lines = [];
540
+ lines.push(`# Decomposition: ${result.original.title}`);
541
+ lines.push('');
542
+ lines.push(`**Strategy:** ${result.strategy}`);
543
+ lines.push(`**Total Units:** ${result.stats.totalUnits}`);
544
+ lines.push(`**Max Depth:** ${result.stats.maxDepth}`);
545
+ if (result.stats.estimatedTotalEffort) {
546
+ lines.push(`**Estimated Total Effort:** ${result.stats.estimatedTotalEffort}h`);
547
+ }
548
+ lines.push('');
549
+ lines.push('## Original Requirement');
550
+ lines.push('');
551
+ lines.push(`> ${result.original.description}`);
552
+ lines.push('');
553
+ lines.push('## Decomposed Units');
554
+ lines.push('');
555
+ const renderUnit = (unit, indent) => {
556
+ lines.push(`${indent}- **${unit.id}**: ${unit.title}`);
557
+ if (unit.estimatedEffort) {
558
+ lines.push(`${indent} - Effort: ${unit.estimatedEffort}h`);
559
+ }
560
+ if (unit.acceptanceCriteria.length > 0) {
561
+ lines.push(`${indent} - Criteria: ${unit.acceptanceCriteria[0]}`);
562
+ }
563
+ };
564
+ const renderNode = (node, depth) => {
565
+ const indent = ' '.repeat(depth);
566
+ renderUnit(node.unit, indent);
567
+ for (const child of node.children) {
568
+ renderNode(child, depth + 1);
569
+ }
570
+ };
571
+ renderNode(result.hierarchy, 0);
572
+ lines.push('');
573
+ lines.push('## Recommendations');
574
+ lines.push('');
575
+ for (const rec of result.recommendations) {
576
+ lines.push(`- ${rec}`);
577
+ }
578
+ return lines.join('\n');
579
+ }
580
+ }
581
+ /**
582
+ * Create requirements decomposer instance
583
+ */
584
+ export function createRequirementsDecomposer(config) {
585
+ return new RequirementsDecomposer(config);
586
+ }
587
+ //# sourceMappingURL=decomposer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decomposer.js","sourceRoot":"","sources":["../../src/requirements/decomposer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA2HH;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAqB;IACzD,eAAe,EAAE,YAAY;IAC7B,QAAQ,EAAE,CAAC;IACX,cAAc,EAAE,CAAC,EAAE,UAAU;IAC7B,sBAAsB,EAAE,IAAI;IAC5B,YAAY,EAAE,IAAI;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,qBAAqB,GAAG;IAC5B,QAAQ,EAAE;QACR,IAAI,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC;QACpF,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;QAC1D,GAAG,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;KACtD;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,WAAW;QACxB,WAAW,EAAE,UAAU;QACvB,WAAW,EAAE,oBAAoB;QACjC,SAAS,EAAE,sCAAsC;KAClD;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,sBAAsB;IACzB,MAAM,CAAmB;IAEjC,YAAY,MAAkC;QAC5C,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,yBAAyB,EAAE,GAAG,MAAM,EAAE,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,SAAS,CACP,WAAoC,EACpC,QAAgC;QAEhC,MAAM,iBAAiB,GAAG,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;QAElE,qBAAqB;QACrB,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAEjF,8BAA8B;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,iBAAiB,EAAE,UAAU,CAAC,CAAC;QAEpF,kBAAkB;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE7C,uBAAuB;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAEpD,2BAA2B;QAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAEhF,OAAO;YACL,QAAQ,EAAE,WAAW;YACrB,QAAQ,EAAE,iBAAiB;YAC3B,KAAK;YACL,SAAS;YACT,KAAK;YACL,eAAe;SAChB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,WAAoC;QACpD,MAAM,IAAI,GAAG,GAAG,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,CAAC;QAC7E,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,iBAAiB;QACjB,KAAK,MAAM,OAAO,IAAI,qBAAqB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC1D,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,KAAK,IAAI,CAAC,CAAC;QACzC,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,qBAAqB,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC5D,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,KAAK,IAAI,CAAC,CAAC;QACzC,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,qBAAqB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YACzD,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,KAAK,IAAI,CAAC,CAAC;QACzC,CAAC;QAED,iBAAiB;QACjB,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAC3F,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAC3F,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAC3F,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAEvF,KAAK,IAAI,YAAY,GAAG,CAAC,CAAC;QAC1B,KAAK,IAAI,YAAY,GAAG,GAAG,CAAC;QAC5B,KAAK,IAAI,YAAY,GAAG,CAAC,CAAC;QAC1B,KAAK,IAAI,UAAU,GAAG,GAAG,CAAC;QAE1B,kCAAkC;QAClC,IAAI,WAAW,CAAC,kBAAkB,EAAE,CAAC;YACnC,KAAK,IAAI,WAAW,CAAC,kBAAkB,CAAC,MAAM,GAAG,GAAG,CAAC;QACvD,CAAC;QAED,qBAAqB;QACrB,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;YAC7B,KAAK,IAAI,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC;QAC3C,CAAC;QAED,kBAAkB;QAClB,IAAI,KAAK,IAAI,EAAE;YAAE,OAAO,WAAW,CAAC;QACpC,IAAI,KAAK,IAAI,EAAE;YAAE,OAAO,MAAM,CAAC;QAC/B,IAAI,KAAK,IAAI,CAAC;YAAE,OAAO,QAAQ,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,oBAAoB,CAC1B,WAAoC,EACpC,QAA+B,EAC/B,UAA2B;QAE3B,MAAM,KAAK,GAAsB,EAAE,CAAC;QAEpC,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,YAAY;gBACf,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;gBACjE,MAAM;YACR,KAAK,YAAY;gBACf,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;gBACjE,MAAM;YACR,KAAK,YAAY;gBACf,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;gBACjE,MAAM;YACR,KAAK,UAAU;gBACb,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;gBAC/D,MAAM;YACR,KAAK,aAAa;gBAChB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;gBACpE,MAAM;YACR,KAAK,YAAY;gBACf,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;gBAC7D,MAAM;QACV,CAAC;QAED,qDAAqD;QACrD,MAAM,YAAY,GAAsB,EAAE,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACpD,YAAY,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACK,mBAAmB,CACzB,WAAoC,EACpC,WAA4B;QAE5B,MAAM,KAAK,GAAsB,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC;QAErC,wBAAwB;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAElF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,8BAA8B;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;YACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;QAED,mDAAmD;QACnD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,mBAAmB,CACzB,WAAoC,EACpC,WAA4B;QAE5B,MAAM,KAAK,GAAsB,EAAE,CAAC;QAEpC,6CAA6C;QAC7C,IAAI,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC;YAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/D,MAAM,SAAS,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;gBACpD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CACxB,WAAW,EACX,aAAa,SAAS,EAAE,EACxB,CAAC,EACD,SAAS,CAAC,GAAG,CAAC,EAAE,CACjB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,CAAC;YACN,gCAAgC;YAChC,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;YACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,mBAAmB,CACzB,WAAoC,EACpC,WAA4B;QAE5B,MAAM,KAAK,GAAsB,EAAE,CAAC;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAEpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAC1B,WAAW,EACX,GAAG,UAAU,CAAC,CAAC,CAAC,2BAA2B,EAC3C,CAAC,EACD,UAAU,CAAC,GAAG,CAAC,EAAE,CAClB,CAAC;YACF,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;QACnF,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,iBAAiB,CACvB,WAAoC,EACpC,WAA4B;QAE5B,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAsB,EAAE,CAAC;QAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CACxB,WAAW,EACX,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,WAAW,CAAC,KAAK,EAAE,EAC/E,CAAC,EACD,QAAQ,KAAK,EAAE,CAChB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,sBAAsB,CAC5B,WAAoC,EACpC,WAA4B;QAE5B,MAAM,YAAY,GAAG,WAAW,CAAC,YAAY,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAsB,EAAE,CAAC;QAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CACxB,WAAW,EACX,GAAG,WAAW,iBAAiB,WAAW,CAAC,KAAK,EAAE,EAClD,CAAC,EACD,SAAS,WAAW,EAAE,CACvB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,eAAe,CACrB,WAAoC,EACpC,WAA4B;QAE5B,MAAM,SAAS,GAAG,CAAC,oBAAoB,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;QACxF,MAAM,KAAK,GAAsB,EAAE,CAAC;QAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CACxB,WAAW,EACX,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,WAAW,CAAC,KAAK,EAAE,EAClD,CAAC,EACD,QAAQ,IAAI,EAAE,CACf,CAAC,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,UAAU,CAChB,MAA+B,EAC/B,WAAmB,EACnB,KAAa,EACb,MAAc;QAEd,MAAM,EAAE,GAAG,GAAG,MAAM,CAAC,EAAE,IAAI,MAAM,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QAE9C,MAAM,IAAI,GAAoB;YAC5B,EAAE;YACF,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,KAAK;YACL,WAAW;YACX,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK;YACL,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;YACtC,YAAY,EAAE,EAAE;YAChB,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;YACnC,kBAAkB,EAAE,EAAE;SACvB,CAAC;QAEF,oCAAoC;QACpC,IAAI,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;YACvC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC;QACzE,CAAC;QAED,uBAAuB;QACvB,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,IAAqB;QAC/C,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QACrD,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc;YAAE,OAAO,KAAK,CAAC;QAE7F,2BAA2B;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACpD,OAAO,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,WAAW,CAAC;IAC7D,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,IAAqB;QACjD,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,CAAC;QAC/D,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAE5D,IAAI,YAAY,IAAI,CAAC;YAAE,OAAO,WAAW,CAAC;QAC1C,IAAI,YAAY,IAAI,CAAC;YAAE,OAAO,MAAM,CAAC;QACrC,IAAI,YAAY,IAAI,CAAC;YAAE,OAAO,QAAQ,CAAC;QACvC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,IAAqB,EAAE,QAA+B;QAC1E,MAAM,SAAS,GAA4B;YACzC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,QAAQ;SACnB,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE1E,+BAA+B;QAC/B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YAC3B,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC;QACzB,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,yBAAyB,CAAC,WAAmB;QACnD,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,wBAAwB;QACxB,MAAM,YAAY,GAAG;YACnB,uDAAuD;YACvD,+CAA+C;SAChD,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;YACnC,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,uCAAuC;QACvC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;YAC5F,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,WAAoC;QAC5D,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,6BAA6B;QAC7B,SAAS,CAAC,IAAI,CAAC,2BAA2B,WAAW,CAAC,KAAK,CAAC,WAAW,EAAE,2BAA2B,CAAC,CAAC;QACtG,SAAS,CAAC,IAAI,CAAC,6BAA6B,WAAW,CAAC,KAAK,CAAC,WAAW,EAAE,sCAAsC,CAAC,CAAC;QACnH,SAAS,CAAC,IAAI,CAAC,yBAAyB,WAAW,CAAC,KAAK,CAAC,WAAW,EAAE,kCAAkC,CAAC,CAAC;QAE3G,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,WAAmB;QAC5C,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,4BAA4B;QAC5B,MAAM,iBAAiB,GAAG;YACxB,+BAA+B;YAC/B,6BAA6B;YAC7B,sCAAsC;YACtC,iCAAiC;YACjC,+CAA+C;YAC/C,oCAAoC;SACrC,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;YACxC,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC9B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACzC,IAAI,KAAK,EAAE,CAAC;oBACV,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC1C,CAAC;YACH,CAAC;QACH,CAAC;QAED,qCAAqC;QACrC,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACjC,KAAK,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACjF,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC;oBAC9E,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,WAAmB;QACvC,uCAAuC;QACvC,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,WAAmB;QACpC,MAAM,gBAAgB,GAAG;YACvB,+BAA+B;YAC/B,gDAAgD;YAChD,qCAAqC;YACrC,0CAA0C;SAC3C,CAAC;QAEF,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,WAAmB;QACrC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,WAAW,GAA4B;YAC3C,CAAC,sBAAsB,EAAE,UAAU,CAAC;YACpC,CAAC,+BAA+B,EAAE,aAAa,CAAC;YAChD,CAAC,6BAA6B,EAAE,IAAI,CAAC;YACrC,CAAC,6BAA6B,EAAE,KAAK,CAAC;YACtC,CAAC,iCAAiC,EAAE,MAAM,CAAC;YAC3C,CAAC,0BAA0B,EAAE,YAAY,CAAC;YAC1C,CAAC,6BAA6B,EAAE,gBAAgB,CAAC;SAClD,CAAC;QAEF,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,WAAW,EAAE,CAAC;YACzC,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,0BAA0B,CAAC,WAAmB;QACpD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,6BAA6B;QAC7B,IAAI,0BAA0B,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACjD,QAAQ,CAAC,IAAI,CAAC,gBAAgB,WAAW,CAAC,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,2BAA2B;QAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YACrD,QAAQ,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,yCAAyC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QAC5F,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,WAAmB;QACxC,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,aAAa;QAEjC,wCAAwC;QACxC,MAAM,YAAY,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACnE,UAAU,IAAI,YAAY,GAAG,CAAC,CAAC;QAE/B,MAAM,YAAY,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAClE,UAAU,IAAI,YAAY,GAAG,GAAG,CAAC;QAEjC,2BAA2B;QAC3B,IAAI,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;YAAE,UAAU,IAAI,CAAC,CAAC;QACrD,IAAI,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;YAAE,UAAU,IAAI,CAAC,CAAC;QAC1D,IAAI,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC;YAAE,UAAU,IAAI,CAAC,CAAC;QAExD,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,qBAAqB;IAC9D,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,KAAwB;QAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;QAE9D,MAAM,SAAS,GAAG,CAAC,IAAqB,EAAqB,EAAE;YAC7D,MAAM,QAAQ,GAAG,KAAK;iBACnB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;iBACzD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAE5B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC5B,CAAC,CAAC;QAEF,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,cAAc,CACpB,KAAwB,EACxB,UAA6B;QAE7B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAErC,MAAM,WAAW,GAAG,KAAK;aACtB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC;aAChC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEzD,OAAO;YACL,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,QAAQ;YACR,QAAQ;YACR,oBAAoB,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;SAChE,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,uBAAuB,CAC7B,YAAqC,EACrC,KAAwB,EACxB,KAAmC;QAEnC,MAAM,eAAe,GAAa,EAAE,CAAC;QAErC,mBAAmB;QACnB,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACtB,eAAe,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,eAAe,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QACrE,CAAC;QAED,oBAAoB;QACpB,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,eAAe,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,gDAAgD,CAAC,CAAC;QAC7F,CAAC;QAED,qBAAqB;QACrB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC/E,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,eAAe,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAC1E,CAAC;QAED,4BAA4B;QAC5B,IAAI,KAAK,CAAC,oBAAoB,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,KAAK,CAAC,oBAAoB,GAAG,KAAK,CAAC,MAAM,CAAC;YAC5D,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;gBAC/C,eAAe,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;QAED,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,eAAe,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,MAA2B;QACxC,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtD,IAAI,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,+BAA+B,MAAM,CAAC,KAAK,CAAC,oBAAoB,GAAG,CAAC,CAAC;QAClF,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,MAAM,UAAU,GAAG,CAAC,IAAqB,EAAE,MAAc,EAAE,EAAE;YAC3D,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,OAAO,IAAI,CAAC,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACvD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,eAAe,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;YAC9D,CAAC;YACD,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,iBAAiB,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,CAAC,IAAuB,EAAE,KAAa,EAAE,EAAE;YAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAClC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC9B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC,CAAC;QAEF,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QACzB,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAC1C,MAAkC;IAElC,OAAO,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC"}