coverme-security-scanner 3.0.0 → 3.2.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.
@@ -1,564 +0,0 @@
1
- /**
2
- * CoverMe Scanner v3 - PDF Generator
3
- * Generates professional security assessment reports
4
- */
5
- import PDFDocument from 'pdfkit';
6
- import { createWriteStream } from 'fs';
7
- export class PDFGenerator {
8
- doc;
9
- yPosition = 0;
10
- pageHeight = 720;
11
- pageWidth = 595.28; // A4
12
- margin = 50;
13
- constructor() {
14
- this.doc = new PDFDocument({
15
- size: 'A4',
16
- margins: { top: 50, bottom: 50, left: 50, right: 50 },
17
- });
18
- }
19
- async generate(result, outputPath) {
20
- const stream = createWriteStream(outputPath);
21
- this.doc.pipe(stream);
22
- // Cover Page
23
- this.renderCoverPage(result);
24
- // Table of Contents
25
- this.addPage();
26
- this.renderTableOfContents(result);
27
- // Executive Summary
28
- this.addPage();
29
- this.renderExecutiveSummary(result);
30
- // Architecture Overview
31
- if (result.architectureOverview) {
32
- this.addPage();
33
- this.renderArchitectureOverview(result);
34
- }
35
- // Security Findings - CRITICAL
36
- const criticalFindings = result.findings.filter((f) => f.severity === 'critical');
37
- if (criticalFindings.length > 0) {
38
- this.addPage();
39
- this.renderFindingsSection('CRITICAL', criticalFindings);
40
- }
41
- // Security Findings - HIGH
42
- const highFindings = result.findings.filter((f) => f.severity === 'high');
43
- if (highFindings.length > 0) {
44
- this.addPage();
45
- this.renderFindingsSection('HIGH', highFindings);
46
- }
47
- // Security & Quality Findings - MEDIUM
48
- const mediumFindings = result.findings.filter((f) => f.severity === 'medium');
49
- if (mediumFindings.length > 0) {
50
- this.addPage();
51
- this.renderFindingsSection('MEDIUM', mediumFindings);
52
- }
53
- // Low & Informational
54
- const lowFindings = result.findings.filter((f) => f.severity === 'low' || f.severity === 'info');
55
- if (lowFindings.length > 0) {
56
- this.addPage();
57
- this.renderLowSeveritySection(lowFindings);
58
- }
59
- // Threat Model Register
60
- if (result.threatModel && result.threatModel.length > 0) {
61
- this.addPage();
62
- this.renderThreatModel(result);
63
- }
64
- // Quality Review
65
- if (result.qualityReview) {
66
- this.addPage();
67
- this.renderQualityReview(result);
68
- }
69
- // Previously Resolved
70
- if (result.previouslyResolved && result.previouslyResolved.length > 0) {
71
- this.addPage();
72
- this.renderPreviouslyResolved(result);
73
- }
74
- // Positive Observations
75
- if (result.positiveObservations && result.positiveObservations.length > 0) {
76
- this.addPage();
77
- this.renderPositiveObservations(result);
78
- }
79
- // Summary Page
80
- this.addPage();
81
- this.renderSummaryPage(result);
82
- this.doc.end();
83
- return new Promise((resolve) => {
84
- stream.on('finish', resolve);
85
- });
86
- }
87
- renderCoverPage(result) {
88
- // Dark header background
89
- this.doc.rect(0, 0, this.pageWidth, 200).fill('#1e293b');
90
- // Title
91
- this.doc
92
- .fillColor('#ffffff')
93
- .fontSize(32)
94
- .font('Helvetica-Bold')
95
- .text('Combined Assessment Report', this.margin, 80, {
96
- align: 'center',
97
- width: this.pageWidth - this.margin * 2,
98
- });
99
- // Project name
100
- this.doc
101
- .fillColor('#e2e8f0')
102
- .fontSize(20)
103
- .font('Helvetica')
104
- .text(result.projectName, this.margin, 130, {
105
- align: 'center',
106
- width: this.pageWidth - this.margin * 2,
107
- });
108
- // Subtitle
109
- const subtitle = `Comprehensive Codebase Review - ${result.filesScanned} files, ~${result.linesOfCode?.toLocaleString() || 'N/A'} lines - ${result.summary.total} Findings`;
110
- this.doc
111
- .fillColor('#94a3b8')
112
- .fontSize(11)
113
- .text(subtitle, this.margin, 160, {
114
- align: 'center',
115
- width: this.pageWidth - this.margin * 2,
116
- });
117
- // Date badge
118
- this.doc.roundedRect(this.pageWidth / 2 - 80, 220, 160, 36, 18).fill('#3b82f6');
119
- this.doc
120
- .fillColor('#ffffff')
121
- .fontSize(13)
122
- .font('Helvetica-Bold')
123
- .text(new Date(result.scanDate).toLocaleDateString('en-US', {
124
- year: 'numeric',
125
- month: 'long',
126
- day: 'numeric',
127
- }), this.pageWidth / 2 - 80, 230, { width: 160, align: 'center' });
128
- // Summary table
129
- this.renderCoverTable(result, 290);
130
- // Severity boxes
131
- this.renderSeverityBoxes(result, 480);
132
- // Footer
133
- this.doc
134
- .fontSize(8)
135
- .fillColor('#9ca3af')
136
- .text('CONFIDENTIAL', this.margin, this.pageHeight + 30, {
137
- align: 'center',
138
- width: this.pageWidth - this.margin * 2,
139
- });
140
- }
141
- renderCoverTable(result, startY) {
142
- const rows = [
143
- ['Project', result.projectName],
144
- ['Review Type', 'Security - Threat Model - Code Quality - Codebase Review'],
145
- ['Branch', result.branch || 'main'],
146
- ['Scope', `${result.filesScanned} files, ~${result.linesOfCode?.toLocaleString() || 'N/A'} lines`],
147
- ['Components', result.projectOverview?.keyComponents?.slice(0, 3).join(', ') || 'Full platform'],
148
- ['Author', 'Claude Code - Claude Opus 4.5'],
149
- ];
150
- let y = startY;
151
- rows.forEach(([label, value]) => {
152
- // Background stripe
153
- this.doc.rect(this.margin, y - 5, this.pageWidth - this.margin * 2, 24).fill('#f8fafc');
154
- this.doc.fontSize(10).font('Helvetica-Bold').fillColor('#64748b').text(label, this.margin + 10, y);
155
- this.doc.fontSize(10).font('Helvetica').fillColor('#1e293b').text(String(value), 160, y, {
156
- width: this.pageWidth - 160 - this.margin,
157
- });
158
- y += 28;
159
- });
160
- }
161
- renderSeverityBoxes(result, startY) {
162
- const boxWidth = 80;
163
- const boxHeight = 90;
164
- const gap = 15;
165
- const totalWidth = boxWidth * 5 + gap * 4;
166
- const startX = (this.pageWidth - totalWidth) / 2;
167
- const severities = [
168
- { label: 'CRITICAL', count: result.summary.critical, color: '#dc2626' },
169
- { label: 'HIGH', count: result.summary.high, color: '#9333ea' },
170
- { label: 'MEDIUM', count: result.summary.medium, color: '#ea580c' },
171
- { label: 'LOW', count: result.summary.low, color: '#6b7280' },
172
- { label: 'TOTAL', count: result.summary.total, color: '#1e293b' },
173
- ];
174
- severities.forEach((sev, i) => {
175
- const x = startX + i * (boxWidth + gap);
176
- // Box background
177
- this.doc.roundedRect(x, startY, boxWidth, boxHeight, 4).fill(sev.color + '12');
178
- // Count
179
- this.doc
180
- .fontSize(36)
181
- .font('Helvetica-Bold')
182
- .fillColor(sev.color)
183
- .text(sev.count.toString(), x, startY + 18, { width: boxWidth, align: 'center' });
184
- // Label
185
- this.doc
186
- .fontSize(9)
187
- .font('Helvetica')
188
- .fillColor('#6b7280')
189
- .text(sev.label, x, startY + 65, { width: boxWidth, align: 'center' });
190
- });
191
- }
192
- renderTableOfContents(result) {
193
- this.renderSectionHeader('Table of Contents');
194
- const sections = [
195
- 'Executive Summary',
196
- result.architectureOverview && 'Architecture Overview & Trust Boundaries',
197
- result.findings.filter((f) => f.severity === 'critical').length > 0 && 'Security Findings (CRITICAL)',
198
- result.findings.filter((f) => f.severity === 'high').length > 0 && 'Security Findings (HIGH)',
199
- result.findings.filter((f) => f.severity === 'medium').length > 0 && 'Security & Code Quality Findings (MEDIUM)',
200
- result.findings.filter((f) => f.severity === 'low' || f.severity === 'info').length > 0 &&
201
- 'Low-Severity & Informational Findings',
202
- result.threatModel?.length && 'Threat Model Register (STRIDE + DREAD)',
203
- result.qualityReview && 'Quality Review - Delete / Merge / Simplify',
204
- result.previouslyResolved?.length && 'Previously Resolved Issues',
205
- result.positiveObservations?.length && 'Positive Observations',
206
- 'Summary',
207
- ].filter(Boolean);
208
- this.yPosition = 120;
209
- sections.forEach((section) => {
210
- this.doc.fillColor('#1e293b').fontSize(12).font('Helvetica').text(String(section), this.margin, this.yPosition);
211
- this.yPosition += 28;
212
- });
213
- }
214
- renderExecutiveSummary(result) {
215
- this.renderSectionHeader('Executive Summary');
216
- this.yPosition = 100;
217
- // Overview paragraph
218
- if (result.executiveSummary?.overview) {
219
- this.doc
220
- .fillColor('#1e293b')
221
- .fontSize(11)
222
- .font('Helvetica')
223
- .text(result.executiveSummary.overview, this.margin, this.yPosition, {
224
- width: this.pageWidth - this.margin * 2,
225
- align: 'justify',
226
- lineGap: 4,
227
- });
228
- this.yPosition += this.doc.heightOfString(result.executiveSummary.overview, {
229
- width: this.pageWidth - this.margin * 2,
230
- }) + 30;
231
- }
232
- // No critical banner
233
- if (result.summary.critical === 0) {
234
- this.doc
235
- .roundedRect(this.margin, this.yPosition, this.pageWidth - this.margin * 2, 30, 4)
236
- .fill('#22c55e15');
237
- this.doc
238
- .fontSize(12)
239
- .font('Helvetica-Bold')
240
- .fillColor('#22c55e')
241
- .text('No critical vulnerabilities remain.', this.margin + 15, this.yPosition + 9);
242
- this.yPosition += 50;
243
- }
244
- // Top Risks
245
- if (result.executiveSummary?.topRisks?.length) {
246
- this.doc.fontSize(14).font('Helvetica-Bold').fillColor('#1e293b').text('Top Risks', this.margin, this.yPosition);
247
- this.yPosition += 25;
248
- result.executiveSummary.topRisks.slice(0, 5).forEach((risk) => {
249
- this.doc
250
- .fontSize(10)
251
- .font('Helvetica')
252
- .fillColor('#374151')
253
- .text(` - ${risk}`, this.margin, this.yPosition, {
254
- width: this.pageWidth - this.margin * 2 - 10,
255
- lineGap: 2,
256
- });
257
- this.yPosition += this.doc.heightOfString(risk, { width: this.pageWidth - this.margin * 2 - 20 }) + 8;
258
- });
259
- }
260
- }
261
- renderArchitectureOverview(result) {
262
- this.renderSectionHeader('Architecture Overview');
263
- this.yPosition = 100;
264
- if (!result.architectureOverview)
265
- return;
266
- // Components table
267
- result.architectureOverview.components?.forEach((comp) => {
268
- this.doc.roundedRect(this.margin, this.yPosition, this.pageWidth - this.margin * 2, 50, 4).fill('#f8fafc');
269
- this.doc.fontSize(12).font('Helvetica-Bold').fillColor('#1e293b').text(comp.name, this.margin + 10, this.yPosition + 10);
270
- this.doc
271
- .fontSize(10)
272
- .font('Helvetica')
273
- .fillColor('#64748b')
274
- .text(comp.description, this.margin + 10, this.yPosition + 28, {
275
- width: this.pageWidth - this.margin * 2 - 20,
276
- });
277
- this.yPosition += 60;
278
- });
279
- // Trust Boundaries
280
- if (result.architectureOverview.trustBoundaries?.length) {
281
- this.yPosition += 20;
282
- this.doc.fontSize(12).font('Helvetica-Bold').fillColor('#1e293b').text('Trust Boundaries', this.margin, this.yPosition);
283
- this.yPosition += 20;
284
- result.architectureOverview.trustBoundaries.forEach((tb) => {
285
- this.doc
286
- .fontSize(10)
287
- .font('Helvetica')
288
- .fillColor('#374151')
289
- .text(`${tb.name}: ${tb.from} -> ${tb.to} (${tb.protocol})`, this.margin + 10, this.yPosition);
290
- this.yPosition += 18;
291
- });
292
- }
293
- }
294
- renderFindingsSection(severity, findings) {
295
- const colors = {
296
- CRITICAL: '#dc2626',
297
- HIGH: '#9333ea',
298
- MEDIUM: '#ea580c',
299
- };
300
- const color = colors[severity] || '#6b7280';
301
- this.renderSectionHeader(`Security Findings - ${severity}`, color);
302
- this.yPosition = 100;
303
- findings.forEach((finding) => {
304
- this.renderFinding(finding, color);
305
- });
306
- }
307
- renderFinding(finding, color) {
308
- // Check page break
309
- if (this.yPosition > this.pageHeight - 200) {
310
- this.addPage();
311
- }
312
- // ID badge
313
- this.doc.roundedRect(this.margin, this.yPosition, this.pageWidth - this.margin * 2, 35, 4).fill(color + '10');
314
- this.doc.fontSize(11).font('Helvetica-Bold').fillColor(color).text(finding.id, this.margin + 12, this.yPosition + 11);
315
- this.yPosition += 45;
316
- // Title
317
- this.doc.fontSize(15).font('Helvetica-Bold').fillColor('#1e293b').text(finding.title, this.margin, this.yPosition);
318
- this.yPosition += 25;
319
- // Severity badge
320
- this.doc.roundedRect(this.margin, this.yPosition, 55, 22, 11).fill(color);
321
- this.doc
322
- .fontSize(10)
323
- .font('Helvetica-Bold')
324
- .fillColor('#ffffff')
325
- .text(finding.severity.toUpperCase(), this.margin, this.yPosition + 5, { width: 55, align: 'center' });
326
- this.yPosition += 35;
327
- // File reference
328
- if (finding.file) {
329
- this.doc
330
- .fontSize(9)
331
- .font('Helvetica')
332
- .fillColor('#3b82f6')
333
- .text(`${finding.file}:${finding.line}`, this.margin, this.yPosition);
334
- this.yPosition += 18;
335
- }
336
- // Description
337
- this.doc.fontSize(10).font('Helvetica-Bold').fillColor('#64748b').text('DESCRIPTION', this.margin, this.yPosition);
338
- this.yPosition += 16;
339
- this.doc
340
- .fontSize(10)
341
- .font('Helvetica')
342
- .fillColor('#1e293b')
343
- .text(finding.description, this.margin, this.yPosition, {
344
- width: this.pageWidth - this.margin * 2,
345
- align: 'justify',
346
- lineGap: 3,
347
- });
348
- this.yPosition += this.doc.heightOfString(finding.description, { width: this.pageWidth - this.margin * 2 }) + 20;
349
- // Recommendation
350
- this.doc.fontSize(10).font('Helvetica-Bold').fillColor('#64748b').text('RECOMMENDATION', this.margin, this.yPosition);
351
- this.yPosition += 16;
352
- this.doc
353
- .fontSize(10)
354
- .font('Helvetica')
355
- .fillColor('#1e293b')
356
- .text(finding.recommendation, this.margin, this.yPosition, {
357
- width: this.pageWidth - this.margin * 2,
358
- align: 'justify',
359
- lineGap: 3,
360
- });
361
- this.yPosition += this.doc.heightOfString(finding.recommendation, { width: this.pageWidth - this.margin * 2 }) + 40;
362
- }
363
- renderLowSeveritySection(findings) {
364
- this.renderSectionHeader('Low-Severity & Informational');
365
- this.yPosition = 100;
366
- findings.forEach((f) => {
367
- this.doc
368
- .fontSize(10)
369
- .font('Helvetica-Bold')
370
- .fillColor('#64748b')
371
- .text(f.id, this.margin, this.yPosition, { continued: true })
372
- .font('Helvetica')
373
- .fillColor('#1e293b')
374
- .text(` ${f.title}`);
375
- this.yPosition += 22;
376
- });
377
- }
378
- renderThreatModel(result) {
379
- this.renderSectionHeader('Threat Model Register (v2.0)');
380
- this.yPosition = 90;
381
- this.doc
382
- .fontSize(10)
383
- .font('Helvetica')
384
- .fillColor('#64748b')
385
- .text('STRIDE + DREAD-D analysis. Methodology: STRIDE per component.', this.margin, this.yPosition);
386
- this.yPosition += 30;
387
- // Table header
388
- this.doc.rect(this.margin, this.yPosition, this.pageWidth - this.margin * 2, 25).fill('#1e293b');
389
- const cols = [
390
- { label: 'ID', width: 70 },
391
- { label: 'Sev', width: 50 },
392
- { label: 'DREAD', width: 50 },
393
- { label: 'Status', width: 60 },
394
- { label: 'Finding', width: 265 },
395
- ];
396
- let colX = this.margin + 8;
397
- this.doc.fontSize(9).font('Helvetica-Bold').fillColor('#ffffff');
398
- cols.forEach((col) => {
399
- this.doc.text(col.label, colX, this.yPosition + 8, { width: col.width });
400
- colX += col.width;
401
- });
402
- this.yPosition += 30;
403
- // Rows
404
- result.threatModel?.slice(0, 16).forEach((threat, i) => {
405
- if (this.yPosition > this.pageHeight - 40) {
406
- this.addPage();
407
- this.yPosition = 50;
408
- }
409
- // Alternate row background
410
- if (i % 2 === 0) {
411
- this.doc.rect(this.margin, this.yPosition - 3, this.pageWidth - this.margin * 2, 20).fill('#f8fafc');
412
- }
413
- colX = this.margin + 8;
414
- this.doc.fontSize(9).font('Helvetica').fillColor('#1e293b');
415
- this.doc.text(threat.id, colX, this.yPosition, { width: cols[0].width });
416
- colX += cols[0].width;
417
- const dreadNum = threat.dreadScore ?? 5;
418
- const sevColor = dreadNum >= 7 ? '#dc2626' : dreadNum >= 5 ? '#9333ea' : '#ea580c';
419
- const sevLabel = dreadNum >= 7 ? 'HIGH' : dreadNum >= 5 ? 'MED' : 'LOW';
420
- this.doc.fillColor(sevColor).text(sevLabel, colX, this.yPosition, { width: cols[1].width });
421
- colX += cols[1].width;
422
- this.doc.fillColor('#1e293b').text(dreadNum.toFixed(1), colX, this.yPosition, { width: cols[2].width });
423
- colX += cols[2].width;
424
- const statusColors = {
425
- mitigated: '#22c55e',
426
- partial: '#ea580c',
427
- accepted: '#6b7280',
428
- open: '#dc2626',
429
- };
430
- this.doc.fillColor(statusColors[threat.status] || '#dc2626').text(threat.status.charAt(0).toUpperCase() + threat.status.slice(1), colX, this.yPosition, { width: cols[3].width });
431
- colX += cols[3].width;
432
- this.doc.fillColor('#1e293b').text(threat.threat, colX, this.yPosition, { width: cols[4].width });
433
- this.yPosition += 22;
434
- });
435
- }
436
- renderQualityReview(result) {
437
- this.renderSectionHeader('Quality Review - Dead Code & DRY Violations');
438
- this.yPosition = 100;
439
- if (!result.qualityReview)
440
- return;
441
- this.doc
442
- .fontSize(11)
443
- .font('Helvetica')
444
- .fillColor('#1e293b')
445
- .text(`${result.qualityReview.totalLinesRemovable.toLocaleString()} lines removable (${result.qualityReview.percentageOfCodebase.toFixed(1)}% of codebase)`, this.margin, this.yPosition);
446
- this.yPosition += 35;
447
- // MERGE section
448
- if (result.qualityReview.mergeItems?.length) {
449
- this.doc.fontSize(13).font('Helvetica-Bold').fillColor('#ea580c').text('MERGE - Highest ROI', this.margin, this.yPosition);
450
- this.yPosition += 22;
451
- result.qualityReview.mergeItems.slice(0, 6).forEach((item) => {
452
- this.renderQualityItem(item);
453
- });
454
- this.yPosition += 15;
455
- }
456
- // DELETE section
457
- if (result.qualityReview.deleteItems?.length) {
458
- this.doc.fontSize(13).font('Helvetica-Bold').fillColor('#dc2626').text('DELETE - Dead Code', this.margin, this.yPosition);
459
- this.yPosition += 22;
460
- result.qualityReview.deleteItems.slice(0, 6).forEach((item) => {
461
- this.renderQualityItem(item);
462
- });
463
- }
464
- }
465
- renderQualityItem(item) {
466
- const roiText = item.roi || (item.lines ? `~${item.lines} lines` : '');
467
- this.doc
468
- .fontSize(10)
469
- .font('Helvetica-Bold')
470
- .fillColor('#1e293b')
471
- .text(item.title, this.margin + 10, this.yPosition, { continued: true })
472
- .font('Helvetica')
473
- .fillColor('#64748b')
474
- .text(roiText ? ` ${roiText}` : '');
475
- this.yPosition += 16;
476
- this.doc
477
- .fontSize(9)
478
- .font('Helvetica')
479
- .fillColor('#64748b')
480
- .text(item.description, this.margin + 20, this.yPosition, { width: this.pageWidth - this.margin * 2 - 30 });
481
- this.yPosition += 20;
482
- }
483
- renderPreviouslyResolved(result) {
484
- this.renderSectionHeader('Previously Resolved Issues');
485
- this.yPosition = 100;
486
- result.previouslyResolved?.forEach((issue) => {
487
- this.doc
488
- .roundedRect(this.margin, this.yPosition, this.pageWidth - this.margin * 2, 50, 4)
489
- .fill('#22c55e10');
490
- this.doc
491
- .fontSize(11)
492
- .font('Helvetica-Bold')
493
- .fillColor('#22c55e')
494
- .text(` ${issue.title} (was ${issue.originalSeverity.toUpperCase()})`, this.margin + 10, this.yPosition + 10);
495
- this.doc
496
- .fontSize(10)
497
- .font('Helvetica')
498
- .fillColor('#1e293b')
499
- .text(`Resolved: ${issue.resolution}`, this.margin + 10, this.yPosition + 28, {
500
- width: this.pageWidth - this.margin * 2 - 20,
501
- });
502
- this.yPosition += 60;
503
- });
504
- }
505
- renderPositiveObservations(result) {
506
- this.renderSectionHeader('Positive Observations');
507
- this.yPosition = 100;
508
- result.positiveObservations?.forEach((obs) => {
509
- this.doc
510
- .roundedRect(this.margin, this.yPosition, this.pageWidth - this.margin * 2, 55, 4)
511
- .fill('#22c55e08');
512
- this.doc
513
- .fontSize(11)
514
- .font('Helvetica-Bold')
515
- .fillColor('#22c55e')
516
- .text(` ${obs.title}`, this.margin + 10, this.yPosition + 10);
517
- this.doc
518
- .fontSize(10)
519
- .font('Helvetica')
520
- .fillColor('#374151')
521
- .text(obs.description, this.margin + 10, this.yPosition + 28, {
522
- width: this.pageWidth - this.margin * 2 - 20,
523
- lineGap: 2,
524
- });
525
- this.yPosition += 65;
526
- });
527
- }
528
- renderSummaryPage(result) {
529
- this.renderSectionHeader('Summary');
530
- this.yPosition = 100;
531
- // Finding Severity table
532
- this.doc.fontSize(13).font('Helvetica-Bold').fillColor('#1e293b').text('Finding Severity', this.margin, this.yPosition);
533
- this.yPosition += 25;
534
- const severities = [
535
- { label: 'CRITICAL', count: result.summary.critical, color: '#dc2626' },
536
- { label: 'HIGH', count: result.summary.high, color: '#9333ea' },
537
- { label: 'MEDIUM', count: result.summary.medium, color: '#ea580c' },
538
- { label: 'LOW', count: result.summary.low, color: '#6b7280' },
539
- { label: 'TOTAL', count: result.summary.total, color: '#1e293b' },
540
- ];
541
- severities.forEach((sev) => {
542
- this.doc.rect(this.margin, this.yPosition, 150, 25).fill('#f8fafc');
543
- this.doc.fontSize(10).font('Helvetica-Bold').fillColor(sev.color).text(sev.label, this.margin + 10, this.yPosition + 7);
544
- this.doc.fontSize(10).font('Helvetica').fillColor('#1e293b').text(sev.count.toString(), this.margin + 120, this.yPosition + 7);
545
- this.yPosition += 28;
546
- });
547
- // Metadata
548
- this.yPosition += 30;
549
- this.doc.fontSize(11).font('Helvetica').fillColor('#64748b').text(`Scan Date: ${result.scanDate}`, this.margin, this.yPosition);
550
- this.yPosition += 18;
551
- this.doc.text(`Files Scanned: ${result.filesScanned}`, this.margin, this.yPosition);
552
- this.yPosition += 18;
553
- this.doc.text(`Lines of Code: ${result.linesOfCode?.toLocaleString() || 'N/A'}`, this.margin, this.yPosition);
554
- }
555
- renderSectionHeader(title, underlineColor = '#ea580c') {
556
- this.doc.fontSize(24).font('Helvetica-Bold').fillColor('#1e293b').text(title, this.margin, 50);
557
- this.doc.rect(this.margin, 82, 60, 3).fill(underlineColor);
558
- }
559
- addPage() {
560
- this.doc.addPage();
561
- this.yPosition = 0;
562
- }
563
- }
564
- //# sourceMappingURL=pdf-generator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pdf-generator.js","sourceRoot":"","sources":["../src/pdf-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,WAAW,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAC;AAGvC,MAAM,OAAO,YAAY;IACf,GAAG,CAAqB;IACxB,SAAS,GAAG,CAAC,CAAC;IACd,UAAU,GAAG,GAAG,CAAC;IACjB,SAAS,GAAG,MAAM,CAAC,CAAC,KAAK;IACzB,MAAM,GAAG,EAAE,CAAC;IAEpB;QACE,IAAI,CAAC,GAAG,GAAG,IAAI,WAAW,CAAC;YACzB,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;SACtD,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAkB,EAAE,UAAkB;QACnD,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEtB,aAAa;QACb,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAE7B,oBAAoB;QACpB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAEnC,oBAAoB;QACpB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAEpC,wBAAwB;QACxB,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAChC,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;QAED,+BAA+B;QAC/B,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;QAClF,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QAC3D,CAAC;QAED,2BAA2B;QAC3B,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;QAC1E,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACnD,CAAC;QAED,uCAAuC;QACvC,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QAC9E,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACvD,CAAC;QAED,sBAAsB;QACtB,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;QACjG,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC;QAC7C,CAAC;QAED,wBAAwB;QACxB,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QAED,iBAAiB;QACjB,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QAED,sBAAsB;QACtB,IAAI,MAAM,CAAC,kBAAkB,IAAI,MAAM,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtE,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QAED,wBAAwB;QACxB,IAAI,MAAM,CAAC,oBAAoB,IAAI,MAAM,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1E,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;QAED,eAAe;QACf,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAE/B,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QAEf,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,eAAe,CAAC,MAAkB;QACxC,yBAAyB;QACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEzD,QAAQ;QACR,IAAI,CAAC,GAAG;aACL,SAAS,CAAC,SAAS,CAAC;aACpB,QAAQ,CAAC,EAAE,CAAC;aACZ,IAAI,CAAC,gBAAgB,CAAC;aACtB,IAAI,CAAC,4BAA4B,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE;YACnD,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;SACxC,CAAC,CAAC;QAEL,eAAe;QACf,IAAI,CAAC,GAAG;aACL,SAAS,CAAC,SAAS,CAAC;aACpB,QAAQ,CAAC,EAAE,CAAC;aACZ,IAAI,CAAC,WAAW,CAAC;aACjB,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;YAC1C,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;SACxC,CAAC,CAAC;QAEL,WAAW;QACX,MAAM,QAAQ,GAAG,mCAAmC,MAAM,CAAC,YAAY,YAAY,MAAM,CAAC,WAAW,EAAE,cAAc,EAAE,IAAI,KAAK,YAAY,MAAM,CAAC,OAAO,CAAC,KAAK,WAAW,CAAC;QAC5K,IAAI,CAAC,GAAG;aACL,SAAS,CAAC,SAAS,CAAC;aACpB,QAAQ,CAAC,EAAE,CAAC;aACZ,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;YAChC,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;SACxC,CAAC,CAAC;QAEL,aAAa;QACb,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChF,IAAI,CAAC,GAAG;aACL,SAAS,CAAC,SAAS,CAAC;aACpB,QAAQ,CAAC,EAAE,CAAC;aACZ,IAAI,CAAC,gBAAgB,CAAC;aACtB,IAAI,CACH,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;YACpD,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,SAAS;SACf,CAAC,EACF,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,EAAE,EACvB,GAAG,EACH,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAChC,CAAC;QAEJ,gBAAgB;QAChB,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAEnC,iBAAiB;QACjB,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAEtC,SAAS;QACT,IAAI,CAAC,GAAG;aACL,QAAQ,CAAC,CAAC,CAAC;aACX,SAAS,CAAC,SAAS,CAAC;aACpB,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE;YACvD,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;SACxC,CAAC,CAAC;IACP,CAAC;IAEO,gBAAgB,CAAC,MAAkB,EAAE,MAAc;QACzD,MAAM,IAAI,GAAG;YACX,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;YAC/B,CAAC,aAAa,EAAE,0DAA0D,CAAC;YAC3E,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC;YACnC,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,YAAY,YAAY,MAAM,CAAC,WAAW,EAAE,cAAc,EAAE,IAAI,KAAK,QAAQ,CAAC;YAClG,CAAC,YAAY,EAAE,MAAM,CAAC,eAAe,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC;YAChG,CAAC,QAAQ,EAAE,+BAA+B,CAAC;SAC5C,CAAC;QAEF,IAAI,CAAC,GAAG,MAAM,CAAC;QACf,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE;YAC9B,oBAAoB;YACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAExF,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YACnG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;gBACvF,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM;aAC1C,CAAC,CAAC;YACH,CAAC,IAAI,EAAE,CAAC;QACV,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,mBAAmB,CAAC,MAAkB,EAAE,MAAc;QAC5D,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,MAAM,UAAU,GAAG,QAAQ,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAEjD,MAAM,UAAU,GAAG;YACjB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;YACvE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;YAC/D,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE;YACnE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;YAC7D,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE;SAClE,CAAC;QAEF,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YAC5B,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;YAExC,iBAAiB;YACjB,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;YAE/E,QAAQ;YACR,IAAI,CAAC,GAAG;iBACL,QAAQ,CAAC,EAAE,CAAC;iBACZ,IAAI,CAAC,gBAAgB,CAAC;iBACtB,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;iBACpB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEpF,QAAQ;YACR,IAAI,CAAC,GAAG;iBACL,QAAQ,CAAC,CAAC,CAAC;iBACX,IAAI,CAAC,WAAW,CAAC;iBACjB,SAAS,CAAC,SAAS,CAAC;iBACpB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,qBAAqB,CAAC,MAAkB;QAC9C,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;QAE9C,MAAM,QAAQ,GAAG;YACf,mBAAmB;YACnB,MAAM,CAAC,oBAAoB,IAAI,0CAA0C;YACzE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,8BAA8B;YACrG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,0BAA0B;YAC7F,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,2CAA2C;YAChH,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC;gBACrF,uCAAuC;YACzC,MAAM,CAAC,WAAW,EAAE,MAAM,IAAI,wCAAwC;YACtE,MAAM,CAAC,aAAa,IAAI,4CAA4C;YACpE,MAAM,CAAC,kBAAkB,EAAE,MAAM,IAAI,4BAA4B;YACjE,MAAM,CAAC,oBAAoB,EAAE,MAAM,IAAI,uBAAuB;YAC9D,SAAS;SACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAElB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QACrB,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAChH,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,sBAAsB,CAAC,MAAkB;QAC/C,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QAErB,qBAAqB;QACrB,IAAI,MAAM,CAAC,gBAAgB,EAAE,QAAQ,EAAE,CAAC;YACtC,IAAI,CAAC,GAAG;iBACL,SAAS,CAAC,SAAS,CAAC;iBACpB,QAAQ,CAAC,EAAE,CAAC;iBACZ,IAAI,CAAC,WAAW,CAAC;iBACjB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE;gBACnE,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;gBACvC,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,CAAC;aACX,CAAC,CAAC;YACL,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE;gBAC1E,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;aACxC,CAAC,GAAG,EAAE,CAAC;QACV,CAAC;QAED,qBAAqB;QACrB,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,GAAG;iBACL,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;iBACjF,IAAI,CAAC,WAAW,CAAC,CAAC;YACrB,IAAI,CAAC,GAAG;iBACL,QAAQ,CAAC,EAAE,CAAC;iBACZ,IAAI,CAAC,gBAAgB,CAAC;iBACtB,SAAS,CAAC,SAAS,CAAC;iBACpB,IAAI,CAAC,qCAAqC,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;YACrF,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACvB,CAAC;QAED,YAAY;QACZ,IAAI,MAAM,CAAC,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;YAC9C,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACjH,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;YAErB,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC5D,IAAI,CAAC,GAAG;qBACL,QAAQ,CAAC,EAAE,CAAC;qBACZ,IAAI,CAAC,WAAW,CAAC;qBACjB,SAAS,CAAC,SAAS,CAAC;qBACpB,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE;oBACjD,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE;oBAC5C,OAAO,EAAE,CAAC;iBACX,CAAC,CAAC;gBACL,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;YACxG,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,0BAA0B,CAAC,MAAkB;QACnD,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QAErB,IAAI,CAAC,MAAM,CAAC,oBAAoB;YAAE,OAAO;QAEzC,mBAAmB;QACnB,MAAM,CAAC,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACvD,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAE3G,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;YAEzH,IAAI,CAAC,GAAG;iBACL,QAAQ,CAAC,EAAE,CAAC;iBACZ,IAAI,CAAC,WAAW,CAAC;iBACjB,SAAS,CAAC,SAAS,CAAC;iBACpB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,SAAS,GAAG,EAAE,EAAE;gBAC7D,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE;aAC7C,CAAC,CAAC;YAEL,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,mBAAmB;QACnB,IAAI,MAAM,CAAC,oBAAoB,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;YACxD,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACxH,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;YAErB,MAAM,CAAC,oBAAoB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;gBACzD,IAAI,CAAC,GAAG;qBACL,QAAQ,CAAC,EAAE,CAAC;qBACZ,IAAI,CAAC,WAAW,CAAC;qBACjB,SAAS,CAAC,SAAS,CAAC;qBACpB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACjG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;YACvB,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,qBAAqB,CAAC,QAAgB,EAAE,QAAmB;QACjE,MAAM,MAAM,GAA2B;YACrC,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,SAAS;SAClB,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC;QAE5C,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;QACnE,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QAErB,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,OAAgB,EAAE,KAAa;QACnD,mBAAmB;QACnB,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;YAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;QAED,WAAW;QACX,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;QAC9G,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;QACtH,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QAErB,QAAQ;QACR,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACnH,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QAErB,iBAAiB;QACjB,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1E,IAAI,CAAC,GAAG;aACL,QAAQ,CAAC,EAAE,CAAC;aACZ,IAAI,CAAC,gBAAgB,CAAC;aACtB,SAAS,CAAC,SAAS,CAAC;aACpB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QAErB,iBAAiB;QACjB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,GAAG;iBACL,QAAQ,CAAC,CAAC,CAAC;iBACX,IAAI,CAAC,WAAW,CAAC;iBACjB,SAAS,CAAC,SAAS,CAAC;iBACpB,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACxE,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACvB,CAAC;QAED,cAAc;QACd,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACnH,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QAErB,IAAI,CAAC,GAAG;aACL,QAAQ,CAAC,EAAE,CAAC;aACZ,IAAI,CAAC,WAAW,CAAC;aACjB,SAAS,CAAC,SAAS,CAAC;aACpB,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE;YACtD,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;YACvC,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,CAAC;SACX,CAAC,CAAC;QACL,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;QAEjH,iBAAiB;QACjB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACtH,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QAErB,IAAI,CAAC,GAAG;aACL,QAAQ,CAAC,EAAE,CAAC;aACZ,IAAI,CAAC,WAAW,CAAC;aACjB,SAAS,CAAC,SAAS,CAAC;aACpB,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE;YACzD,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;YACvC,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,CAAC;SACX,CAAC,CAAC;QACL,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;IACtH,CAAC;IAEO,wBAAwB,CAAC,QAAmB;QAClD,IAAI,CAAC,mBAAmB,CAAC,8BAA8B,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QAErB,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACrB,IAAI,CAAC,GAAG;iBACL,QAAQ,CAAC,EAAE,CAAC;iBACZ,IAAI,CAAC,gBAAgB,CAAC;iBACtB,SAAS,CAAC,SAAS,CAAC;iBACpB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;iBAC5D,IAAI,CAAC,WAAW,CAAC;iBACjB,SAAS,CAAC,SAAS,CAAC;iBACpB,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACxB,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,iBAAiB,CAAC,MAAkB;QAC1C,IAAI,CAAC,mBAAmB,CAAC,8BAA8B,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QAEpB,IAAI,CAAC,GAAG;aACL,QAAQ,CAAC,EAAE,CAAC;aACZ,IAAI,CAAC,WAAW,CAAC;aACjB,SAAS,CAAC,SAAS,CAAC;aACpB,IAAI,CAAC,+DAA+D,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACtG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QAErB,eAAe;QACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEjG,MAAM,IAAI,GAAG;YACX,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;YAC1B,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3B,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;YAC7B,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;YAC9B,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;SACjC,CAAC;QAEF,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACnB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YACzE,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QAErB,OAAO;QACP,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrD,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE,CAAC;gBAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;YACtB,CAAC;YAED,2BAA2B;YAC3B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvG,CAAC;YAED,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAE5D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACzE,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAEtB,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;YACxC,MAAM,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YACnF,MAAM,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YAExE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAC5F,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAEtB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACxG,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAEtB,MAAM,YAAY,GAA2B;gBAC3C,SAAS,EAAE,SAAS;gBACpB,OAAO,EAAE,SAAS;gBAClB,QAAQ,EAAE,SAAS;gBACnB,IAAI,EAAE,SAAS;aAChB,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,CAAC,IAAI,CAC/D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAC9D,IAAI,EACJ,IAAI,CAAC,SAAS,EACd,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CACzB,CAAC;YACF,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAEtB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAElG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,mBAAmB,CAAC,MAAkB;QAC5C,IAAI,CAAC,mBAAmB,CAAC,6CAA6C,CAAC,CAAC;QACxE,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QAErB,IAAI,CAAC,MAAM,CAAC,aAAa;YAAE,OAAO;QAElC,IAAI,CAAC,GAAG;aACL,QAAQ,CAAC,EAAE,CAAC;aACZ,IAAI,CAAC,WAAW,CAAC;aACjB,SAAS,CAAC,SAAS,CAAC;aACpB,IAAI,CACH,GAAG,MAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC,cAAc,EAAE,qBAAqB,MAAM,CAAC,aAAa,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,EACrJ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,SAAS,CACf,CAAC;QACJ,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QAErB,gBAAgB;QAChB,IAAI,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YAC5C,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3H,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;YAErB,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC3D,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACvB,CAAC;QAED,iBAAiB;QACjB,IAAI,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;YAC7C,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1H,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;YAErB,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC5D,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,IAA0E;QAClG,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAEvE,IAAI,CAAC,GAAG;aACL,QAAQ,CAAC,EAAE,CAAC;aACZ,IAAI,CAAC,gBAAgB,CAAC;aACtB,SAAS,CAAC,SAAS,CAAC;aACpB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;aACvE,IAAI,CAAC,WAAW,CAAC;aACjB,SAAS,CAAC,SAAS,CAAC;aACpB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QAErB,IAAI,CAAC,GAAG;aACL,QAAQ,CAAC,CAAC,CAAC;aACX,IAAI,CAAC,WAAW,CAAC;aACjB,SAAS,CAAC,SAAS,CAAC;aACpB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC9G,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;IACvB,CAAC;IAEO,wBAAwB,CAAC,MAAkB;QACjD,IAAI,CAAC,mBAAmB,CAAC,4BAA4B,CAAC,CAAC;QACvD,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QAErB,MAAM,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3C,IAAI,CAAC,GAAG;iBACL,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;iBACjF,IAAI,CAAC,WAAW,CAAC,CAAC;YAErB,IAAI,CAAC,GAAG;iBACL,QAAQ,CAAC,EAAE,CAAC;iBACZ,IAAI,CAAC,gBAAgB,CAAC;iBACtB,SAAS,CAAC,SAAS,CAAC;iBACpB,IAAI,CAAC,KAAK,KAAK,CAAC,KAAK,SAAS,KAAK,CAAC,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;YAEjH,IAAI,CAAC,GAAG;iBACL,QAAQ,CAAC,EAAE,CAAC;iBACZ,IAAI,CAAC,WAAW,CAAC;iBACjB,SAAS,CAAC,SAAS,CAAC;iBACpB,IAAI,CAAC,aAAa,KAAK,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,SAAS,GAAG,EAAE,EAAE;gBAC5E,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE;aAC7C,CAAC,CAAC;YAEL,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,0BAA0B,CAAC,MAAkB;QACnD,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QAErB,MAAM,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC3C,IAAI,CAAC,GAAG;iBACL,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;iBACjF,IAAI,CAAC,WAAW,CAAC,CAAC;YAErB,IAAI,CAAC,GAAG;iBACL,QAAQ,CAAC,EAAE,CAAC;iBACZ,IAAI,CAAC,gBAAgB,CAAC;iBACtB,SAAS,CAAC,SAAS,CAAC;iBACpB,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;YAEjE,IAAI,CAAC,GAAG;iBACL,QAAQ,CAAC,EAAE,CAAC;iBACZ,IAAI,CAAC,WAAW,CAAC;iBACjB,SAAS,CAAC,SAAS,CAAC;iBACpB,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,SAAS,GAAG,EAAE,EAAE;gBAC5D,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE;gBAC5C,OAAO,EAAE,CAAC;aACX,CAAC,CAAC;YAEL,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,iBAAiB,CAAC,MAAkB;QAC1C,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QAErB,yBAAyB;QACzB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACxH,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QAErB,MAAM,UAAU,GAAG;YACjB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;YACvE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;YAC/D,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE;YACnE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;YAC7D,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE;SAClE,CAAC;QAEF,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;YACxH,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;YAC/H,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,WAAW;QACX,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAChI,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACpF,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,WAAW,EAAE,cAAc,EAAE,IAAI,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAChH,CAAC;IAEO,mBAAmB,CAAC,KAAa,EAAE,cAAc,GAAG,SAAS;QACnE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/F,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC7D,CAAC;IAEO,OAAO;QACb,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACrB,CAAC;CACF"}