@dollhousemcp/mcp-server 2.0.12 → 2.0.14

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 (41) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/di/Container.d.ts.map +1 -1
  3. package/dist/di/Container.js +19 -9
  4. package/dist/elements/BaseElement.js +2 -2
  5. package/dist/elements/memories/Memory.d.ts.map +1 -1
  6. package/dist/elements/memories/Memory.js +3 -3
  7. package/dist/elements/skills/Skill.d.ts.map +1 -1
  8. package/dist/elements/skills/Skill.js +4 -4
  9. package/dist/elements/templates/Template.d.ts.map +1 -1
  10. package/dist/elements/templates/Template.js +4 -4
  11. package/dist/generated/version.d.ts +2 -2
  12. package/dist/generated/version.js +3 -3
  13. package/dist/handlers/ElementCRUDHandler.d.ts +10 -0
  14. package/dist/handlers/ElementCRUDHandler.d.ts.map +1 -1
  15. package/dist/handlers/ElementCRUDHandler.js +123 -1
  16. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +1 -0
  17. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  18. package/dist/handlers/mcp-aql/MCPAQLHandler.js +31 -2
  19. package/dist/portfolio/DefaultElementProvider.d.ts +8 -0
  20. package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
  21. package/dist/portfolio/DefaultElementProvider.js +43 -1
  22. package/dist/security/contentValidator.d.ts +15 -0
  23. package/dist/security/contentValidator.d.ts.map +1 -1
  24. package/dist/security/contentValidator.js +40 -2
  25. package/dist/services/ActivationStore.d.ts +20 -0
  26. package/dist/services/ActivationStore.d.ts.map +1 -1
  27. package/dist/services/ActivationStore.js +104 -1
  28. package/dist/web/console/IngestRoutes.d.ts +1 -0
  29. package/dist/web/console/IngestRoutes.d.ts.map +1 -1
  30. package/dist/web/console/IngestRoutes.js +4 -1
  31. package/dist/web/console/UnifiedConsole.js +2 -1
  32. package/dist/web/public/permissions.css +224 -16
  33. package/dist/web/public/permissions.js +326 -63
  34. package/dist/web/public/sessions.js +218 -98
  35. package/dist/web/public/styles.css +15 -10
  36. package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
  37. package/dist/web/routes/permissionRoutes.js +57 -19
  38. package/dist/web/server.d.ts.map +1 -1
  39. package/dist/web/server.js +2 -1
  40. package/package.json +2 -2
  41. package/server.json +2 -2
@@ -6,6 +6,7 @@
6
6
  *
7
7
  * Security: SEC-001 - Critical vulnerability protection
8
8
  */
9
+ import { createHash } from 'node:crypto';
9
10
  import { SecurityError } from './errors.js';
10
11
  import { SecurityMonitor } from './securityMonitor.js';
11
12
  import { logger } from '../utils/logger.js';
@@ -13,6 +14,28 @@ import { RegexValidator } from './regexValidator.js';
13
14
  import { SECURITY_LIMITS } from './constants.js';
14
15
  import { UnicodeValidator } from './validators/unicodeValidator.js';
15
16
  export class ContentValidator {
17
+ /**
18
+ * SHA-256 hashes of bundled data/ elements verified against HASHES.json at seed time.
19
+ * Content whose hash is in this set bypasses injection-pattern checks — it was
20
+ * vetted by the DollhouseMCP team before being included in the npm package.
21
+ * Unicode and YAML-bomb checks still run regardless.
22
+ *
23
+ * Populated by DefaultElementProvider.registerBundledHashes() on startup.
24
+ * Only content that matches the published HASHES.json is registered — any
25
+ * modification to a bundled file after install breaks the hash and revokes trust.
26
+ */
27
+ static bundledContentHashes = new Set();
28
+ /** Register a SHA-256 hex hash as trusted bundled content. */
29
+ static registerBundledHash(sha256hex) {
30
+ this.bundledContentHashes.add(sha256hex);
31
+ }
32
+ /** True if the given content hash belongs to a verified bundled element. */
33
+ static isBundledContent(content) {
34
+ if (this.bundledContentHashes.size === 0)
35
+ return false;
36
+ const hash = createHash('sha256').update(content).digest('hex');
37
+ return this.bundledContentHashes.has(hash);
38
+ }
16
39
  static telemetryResolver;
17
40
  static configureTelemetryResolver(resolver) {
18
41
  this.telemetryResolver = resolver;
@@ -101,7 +124,7 @@ export class ContentValidator {
101
124
  { pattern: /<object[\s>]/gi, severity: 'high', description: 'HTML object injection' },
102
125
  { pattern: /<embed[\s>]/gi, severity: 'high', description: 'HTML embed injection' },
103
126
  { pattern: /\bon\w+=\s*["']/gi, severity: 'critical', description: 'HTML event handler injection' },
104
- { pattern: /javascript\s*:/gi, severity: 'critical', description: 'JavaScript protocol injection' },
127
+ { pattern: /javascript[ \t]*:[ \t]*\S/gi, severity: 'critical', description: 'JavaScript protocol injection' },
105
128
  // Entity-encoded variants: &#106;avascript, &#x6a;avascript, &#106;&#97;vascript, etc.
106
129
  { pattern: /&#x?[0-9a-f]+;?\s*a\s*v\s*a\s*s\s*c\s*r\s*i\s*p\s*t/gi, severity: 'critical', description: 'Encoded JavaScript protocol injection' },
107
130
  // Fully/partially entity-encoded: detects &#...script pattern (covers multi-entity encoding)
@@ -379,6 +402,21 @@ export class ContentValidator {
379
402
  throw new SecurityError(`Content exceeds maximum length of ${maxLength} characters after normalization (${unicodeCheck.sanitized.length} provided)`);
380
403
  }
381
404
  }
405
+ // Skip injection-pattern scanning for verified bundled elements.
406
+ // Content whose SHA-256 matches HASHES.json was reviewed by the DollhouseMCP
407
+ // team before being included in the npm package — false positives from
408
+ // legitimate YAML keys (javascript:) or educational payloads (wget in pentest
409
+ // templates) should not fire CRITICAL alerts at every install.
410
+ // Unicode and YAML-bomb checks above still run unconditionally.
411
+ if (this.isBundledContent(content)) {
412
+ logger.debug('[ContentValidator] Skipping injection scan for verified bundled element');
413
+ return {
414
+ isValid: true,
415
+ sanitizedContent: unicodeCheck.sanitized,
416
+ detectedPatterns: [],
417
+ severity: 'low'
418
+ };
419
+ }
382
420
  // Check for injection patterns on ORIGINAL content (to catch encoded attacks)
383
421
  // but apply replacements to NORMALIZED content (to preserve normalization)
384
422
  const injectionCheck = this.checkInjectionPatterns(content, unicodeCheck.sanitized, detectedPatterns, unicodeCheck.highestSeverity, maxLength, options.contentContext);
@@ -606,4 +644,4 @@ export class ContentValidator {
606
644
  return `---\n${yamlContent}\n---${contentResult.sanitizedContent || markdownContent}`;
607
645
  }
608
646
  }
609
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudFZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWN1cml0eS9jb250ZW50VmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQWlDcEUsTUFBTSxPQUFPLGdCQUFnQjtJQUNuQixNQUFNLENBQUMsaUJBQWlCLENBQXVDO0lBRWhFLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxRQUE2QztRQUNwRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDO0lBQ3BDLENBQUM7SUFFTyxNQUFNLENBQUMsWUFBWTtRQUN6QixJQUFJLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN2RSxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFDRDs7Ozs7Ozs7Ozs7T0FXRztJQUNILGlFQUFpRTtJQUNqRSxpRkFBaUY7SUFDakYsd0ZBQXdGO0lBQ2hGLE1BQU0sQ0FBVSxrQkFBa0IsR0FBbUY7UUFDM0gsa0NBQWtDO1FBQ2xDLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLHdCQUF3QixFQUFFO1FBQy9GLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFO1FBQzdGLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLDJCQUEyQixFQUFFO1FBQ3JHLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLHNCQUFzQixFQUFFO1FBRXZGLDJCQUEyQjtRQUMzQixFQUFFLE9BQU8sRUFBRSw2Q0FBNkMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRTtRQUNySCxFQUFFLE9BQU8sRUFBRSwwQ0FBMEMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRTtRQUNsSCxFQUFFLE9BQU8sRUFBRSxnREFBZ0QsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRTtRQUN4SCxFQUFFLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRTtRQUMxRyxFQUFFLE9BQU8sRUFBRSw2Q0FBNkMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRTtRQUNySCxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRTtRQUNwRyxFQUFFLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRTtRQUN6RyxFQUFFLE9BQU8sRUFBRSx5RkFBeUYsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRTtRQUNuSywrRUFBK0U7UUFDL0UscUVBQXFFO1FBQ3JFLEVBQUUsT0FBTyxFQUFFLHVEQUF1RCxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLHdCQUF3QixFQUFFO1FBQ2pJLEVBQUUsT0FBTyxFQUFFLHNFQUFzRSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLDBCQUEwQixFQUFFO1FBQ2xKLEVBQUUsT0FBTyxFQUFFLGtEQUFrRCxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFO1FBRXZILDZCQUE2QjtRQUM3QixFQUFFLE9BQU8sRUFBRSxzRUFBc0UsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRTtRQUMzSSxFQUFFLE9BQU8sRUFBRSx5RUFBeUUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRTtRQUM5SSxFQUFFLE9BQU8sRUFBRSw4REFBOEQsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRTtRQUNwSSxFQUFFLE9BQU8sRUFBRSw2REFBNkQsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBRTtRQUVsSSw2QkFBNkI7UUFDN0IsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsNEJBQTRCLEVBQUU7UUFDckcsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsNEJBQTRCLEVBQUU7UUFDckcsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLHNCQUFzQixFQUFFO1FBQ3RGLDZEQUE2RDtRQUM3RCx5RUFBeUU7UUFDekUscUZBQXFGO1FBQ3JGLDhGQUE4RjtRQUM5Riw0RkFBNEY7UUFDNUYsRUFBRSxPQUFPLEVBQUUsbUZBQW1GLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsc0NBQXNDLEVBQUU7UUFDM0ssRUFBRSxPQUFPLEVBQUUsZ0RBQWdELEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsb0NBQW9DLEVBQUU7UUFDdEksRUFBRSxPQUFPLEVBQUUsbURBQW1ELEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsOEJBQThCLEVBQUU7UUFDbkksRUFBRSxPQUFPLEVBQUUsNkVBQTZFLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsZ0NBQWdDLEVBQUU7UUFDL0osRUFBRSxPQUFPLEVBQUUsdUVBQXVFLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsNEJBQTRCLEVBQUU7UUFDckosRUFBRSxPQUFPLEVBQUUsZ0ZBQWdGLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUscURBQXFELEVBQUU7UUFDdkwsRUFBRSxPQUFPLEVBQUUsa0hBQWtILEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUseURBQXlELEVBQUU7UUFDN04sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFO1FBQ2hGLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRTtRQUMvRSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSwwQkFBMEIsRUFBRTtRQUMvRixFQUFFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRTtRQUV4Ryw0QkFBNEI7UUFDNUIsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUU7UUFDL0UsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsdUJBQXVCLEVBQUU7UUFDL0YsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsNkJBQTZCLEVBQUU7UUFFckcsNEJBQTRCO1FBQzVCLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLHdCQUF3QixFQUFFO1FBQzNGLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFO1FBQ3RGLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRTtRQUVuRixxRUFBcUU7UUFDckUsZ0ZBQWdGO1FBQ2hGLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFO1FBQ3pGLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBRTtRQUN2RixFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBRTtRQUN6RixFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBRTtRQUNyRixFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUU7UUFDbkYsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsOEJBQThCLEVBQUU7UUFDbkcsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsK0JBQStCLEVBQUU7UUFDbkcsdUZBQXVGO1FBQ3ZGLEVBQUUsT0FBTyxFQUFFLHVEQUF1RCxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLHVDQUF1QyxFQUFFO1FBQ2hKLDZGQUE2RjtRQUM3RixFQUFFLE9BQU8sRUFBRSxtREFBbUQsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSx1Q0FBdUMsRUFBRTtLQUM3SSxDQUFDO0lBRUYsMEJBQTBCO0lBQzFCLGtEQUFrRDtJQUNsRCwwRUFBMEU7SUFDbEUsTUFBTSxDQUFVLGtCQUFrQixHQUFHO1FBQzNDLDZFQUE2RTtRQUM3RSw0Q0FBNEM7UUFDNUMsK0JBQStCLEVBQU8sNEJBQTRCO1FBQ2xFLDZCQUE2QixFQUFTLDZCQUE2QjtRQUNuRSx1Q0FBdUMsRUFBRyx3REFBd0Q7UUFFbEcsdUVBQXVFO1FBQ3ZFLHFEQUFxRDtRQUNyRCx3QkFBd0IsRUFBYSw2Q0FBNkM7UUFFbEYseUVBQXlFO1FBQ3pFLG9EQUFvRDtRQUNwRCwwQkFBMEIsRUFBVyxnREFBZ0Q7S0FDdEYsQ0FBQztJQUVNLE1BQU0sQ0FBVSx1QkFBdUIsR0FBRztRQUNoRCw0Q0FBNEM7UUFDNUMsa0JBQWtCO1FBQ2xCLGtCQUFrQjtRQUNsQixnQkFBZ0I7UUFDaEIsZ0JBQWdCO1FBQ2hCLGNBQWM7UUFDZCxnQkFBZ0I7UUFDaEIsaUJBQWlCO1FBQ2pCLFFBQVE7UUFDUixTQUFTO1FBQ1QsWUFBWTtRQUNaLGNBQWM7UUFDZCxjQUFjO1FBQ2QsZUFBZTtRQUVmLGlDQUFpQztRQUNqQyxRQUFRO1FBQ1IsUUFBUTtRQUNSLE9BQU87UUFDUCxhQUFhO1FBQ2IsU0FBUztRQUNULFFBQVE7UUFDUixVQUFVO1FBRVYsbUVBQW1FO1FBQ25FLGNBQWM7UUFDZCxZQUFZO1FBQ1osV0FBVztRQUNYLFdBQVc7UUFDWCxpQkFBaUI7UUFDakIsY0FBYztRQUNkLDBDQUEwQztRQUMxQywyQ0FBMkM7UUFFM0Msc0RBQXNEO1FBQ3RELFlBQVk7UUFDWixZQUFZO1FBQ1osYUFBYTtRQUNiLGVBQWU7UUFDZixpQkFBaUI7UUFDakIsZUFBZTtRQUNmLGdCQUFnQjtRQUVoQixrREFBa0Q7UUFDbEQsaUJBQWlCLEVBQXVDLHFDQUFxQztRQUM3RixpQkFBaUIsRUFBdUMsNEJBQTRCO1FBQ3BGLHdDQUF3QyxFQUFlLDBDQUEwQztRQUNqRyw4QkFBOEIsRUFBeUIsdUNBQXVDO1FBQzlGLHNCQUFzQixFQUFrQyxrQ0FBa0M7UUFDMUYsa0RBQWtELEVBQUsscUNBQXFDO1FBRTVGLHNEQUFzRDtRQUN0RCwrREFBK0QsRUFBTSxrQ0FBa0M7UUFDdkcsd0JBQXdCLEVBQThDLDRCQUE0QjtRQUNsRyx3QkFBd0IsRUFBOEMsNEJBQTRCO1FBQ2xHLDZDQUE2QyxFQUF3Qix3Q0FBd0M7UUFDN0csNERBQTRELEVBQVMsd0NBQXdDO1FBQzdHLGlFQUFpRSxFQUFJLG9DQUFvQztRQUV6RyxvQkFBb0I7UUFDcEIsV0FBVztRQUNYLFdBQVc7UUFDWCxhQUFhO1FBQ2IsVUFBVTtRQUNWLFdBQVc7UUFDWCxVQUFVO1FBQ1YsV0FBVztRQUNYLFVBQVU7UUFFVixtQ0FBbUM7UUFDbkMsV0FBVyxFQUFFLDhCQUE4QjtRQUMzQyxZQUFZLEVBQUUsNkJBQTZCO1FBQzNDLFNBQVM7UUFDVCxVQUFVO1FBQ1YsYUFBYTtRQUViLHFFQUFxRTtRQUNyRSw0QkFBNEIsRUFBSSxtREFBbUQ7UUFDbkYsOEJBQThCLEVBQUcsZ0RBQWdEO1FBQ2pGLDhCQUE4QixFQUFHLCtDQUErQztRQUNoRixzQkFBc0IsRUFBVyx5Q0FBeUM7S0FDM0UsQ0FBQztJQUVGOzs7Ozs7OztPQVFHO0lBQ0ssTUFBTSxDQUFVLG9CQUFvQixHQUFHLElBQUksR0FBRyxDQUE0QztRQUNoRyxPQUFPLEVBQUssK0NBQStDO1FBQzNELFVBQVUsRUFBRSxxREFBcUQ7UUFDakUsT0FBTyxFQUFLLG1FQUFtRTtRQUNuRSxnRUFBZ0U7UUFDaEUsa0VBQWtFO1FBQ2xFLDZEQUE2RDtLQUMxRSxDQUFDLENBQUM7SUFFSDs7OztPQUlHO0lBQ0ssTUFBTSxDQUFVLHVCQUF1QixHQUFHLElBQUksR0FBRyxDQUFDO1FBQ3hELGlCQUFpQjtRQUNqQixnQkFBZ0I7UUFDaEIsMEJBQTBCO1FBQzFCLHNCQUFzQjtLQUN2QixDQUFDLENBQUM7SUFFSDs7Ozs7Ozs7Ozs7Ozs7O09BZUc7SUFDSyxNQUFNLENBQVUscUJBQXFCLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDdEQsc0JBQXNCO1FBQ3RCLDRCQUE0QjtRQUM1Qix1QkFBdUI7UUFDdkIsd0JBQXdCO1FBQ3hCLHdCQUF3QjtRQUN4QixpQkFBaUI7UUFDakIsc0NBQXNDO1FBQ3RDLG9DQUFvQztRQUNwQyw4QkFBOEI7UUFDOUIsZ0NBQWdDO1FBQ2hDLDRCQUE0QjtRQUM1QixxREFBcUQ7UUFDckQseURBQXlEO0tBQzFELENBQUMsQ0FBQztJQUVIOzs7O09BSUc7SUFDSyxNQUFNLENBQVUscUJBQXFCLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDdEQsdUJBQXVCO1FBQ3ZCLHVCQUF1QjtRQUN2QixzQkFBc0I7S0FDdkIsQ0FBQyxDQUFDO0lBRUg7Ozs7T0FJRztJQUNLLE1BQU0sQ0FBQyx1QkFBdUIsQ0FDcEMsT0FBZSxFQUNmLGdCQUEwQjtRQUsxQixNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUQsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLGlCQUFpQixDQUFDO1FBQ2xELElBQUksZUFBZSxHQUFxQixLQUFLLENBQUM7UUFFOUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzNELGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDekYsSUFBSSxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzNCLGVBQWUsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDO1lBQzNDLENBQUM7WUFFRCxvQ0FBb0M7WUFDcEMsSUFBSSxhQUFhLENBQUMsUUFBUSxLQUFLLFVBQVUsSUFBSSxhQUFhLENBQUMsUUFBUSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUMvRSxlQUFlLENBQUMsZ0JBQWdCLENBQUM7b0JBQy9CLElBQUksRUFBRSwyQkFBMkI7b0JBQ2pDLFFBQVEsRUFBRSxhQUFhLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBeUI7b0JBQ3JFLE1BQU0sRUFBRSxvQkFBb0I7b0JBQzVCLE9BQU8sRUFBRSw0QkFBNEIsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7aUJBQy9FLENBQUMsQ0FBQztnQkFFSCxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsRUFBRSxtQkFBbUIsQ0FDbEQsZ0JBQWdCLEVBQ2hCLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUN2QyxhQUFhLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBeUIsRUFDM0Qsb0JBQW9CLEVBQ3BCLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FDekMsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ssTUFBTSxDQUFDLHNCQUFzQixDQUNuQyxlQUF1QixFQUN2QixpQkFBeUIsRUFDekIsZ0JBQTBCLEVBQzFCLGVBQWlDLEVBQ2pDLFNBQWlCLEVBQ2pCLGNBQTBEO1FBSzFELElBQUksU0FBUyxHQUFHLGlCQUFpQixDQUFDO1FBQ2xDLElBQUksZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUV0QyxLQUFLLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3pFLDBFQUEwRTtZQUMxRSw0RUFBNEU7WUFDNUUsdUVBQXVFO1lBQ3ZFLElBQUksY0FBYyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDO2dCQUMvRCxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ25HLFNBQVM7WUFDWCxDQUFDO1lBQ0Qsc0dBQXNHO1lBQ3RHLElBQUksY0FBYyxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pGLFNBQVM7WUFDWCxDQUFDO1lBQ0Qsb0ZBQW9GO1lBQ3BGLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsT0FBTyxFQUFFO2dCQUNwRCxTQUFTO2dCQUNULHVCQUF1QixFQUFFLEtBQUs7Z0JBQzlCLFNBQVMsRUFBRSxLQUFLO2FBQ2pCLENBQUMsRUFBRSxDQUFDO2dCQUNILGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDbkMsTUFBTSxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsV0FBVyxLQUFLLFFBQVEsZ0JBQWdCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dCQUVyRywwQkFBMEI7Z0JBQzFCLElBQUksUUFBUSxLQUFLLFVBQVUsSUFBSSxDQUFDLFFBQVEsS0FBSyxNQUFNLElBQUksZUFBZSxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQ3ZGLGVBQWUsR0FBRyxRQUFRLENBQUM7Z0JBQzdCLENBQUM7Z0JBRUQscUJBQXFCO2dCQUNyQixlQUFlLENBQUMsZ0JBQWdCLENBQUM7b0JBQy9CLElBQUksRUFBRSwyQkFBMkI7b0JBQ2pDLFFBQVEsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUF5QjtvQkFDdkQsTUFBTSxFQUFFLG9CQUFvQjtvQkFDNUIsT0FBTyxFQUFFLHFCQUFxQixXQUFXLEVBQUU7aUJBQzVDLENBQUMsQ0FBQztnQkFFSCxzQkFBc0I7Z0JBQ3RCLGdCQUFnQixDQUFDLFlBQVksRUFBRSxFQUFFLG1CQUFtQixDQUNsRCxtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLFFBQVEsQ0FBQyxXQUFXLEVBQXlCLEVBQzdDLG9CQUFvQixFQUNwQixFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQzVCLENBQUM7Z0JBRUYsMENBQTBDO2dCQUMxQyxTQUFTLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUM5RCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE9BQWUsRUFBRSxVQUFtQyxFQUFFO1FBQy9FLHNDQUFzQztRQUN0QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQztRQUUxRSwyREFBMkQ7UUFDM0QsNEVBQTRFO1FBQzVFLHVFQUF1RTtRQUN2RSxxRUFBcUU7UUFDckUsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMzQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLHlCQUF5QixFQUFFLENBQUM7Z0JBQzNELE1BQU0sSUFBSSxhQUFhLENBQ3JCLHFDQUFxQyxTQUFTLGdCQUFnQixPQUFPLENBQUMsTUFBTSxZQUFZLENBQ3pGLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQWEsRUFBRSxDQUFDO1FBRXRDLG1FQUFtRTtRQUNuRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFN0UsNEVBQTRFO1FBQzVFLDhFQUE4RTtRQUM5RSxpRUFBaUU7UUFDakUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMzQixJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLFNBQVMsRUFBRSxDQUFDO2dCQUM5QyxNQUFNLElBQUksYUFBYSxDQUNyQixxQ0FBcUMsU0FBUyxvQ0FBb0MsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLFlBQVksQ0FDNUgsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQsOEVBQThFO1FBQzlFLDJFQUEyRTtRQUMzRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQ2hELE9BQU8sRUFDUCxZQUFZLENBQUMsU0FBUyxFQUN0QixnQkFBZ0IsRUFDaEIsWUFBWSxDQUFDLGVBQWUsRUFDNUIsU0FBUyxFQUNULE9BQU8sQ0FBQyxjQUFjLENBQ3ZCLENBQUM7UUFFRiwrREFBK0Q7UUFDL0QsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLGVBQWUsQ0FBQztRQUVyRCwwQ0FBMEM7UUFDMUMsSUFBSSxhQUFhLEtBQUssTUFBTSxJQUFJLGFBQWEsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUM3RCxPQUFPO2dCQUNMLE9BQU8sRUFBRSxLQUFLO2dCQUNkLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxTQUFTO2dCQUMxQyxnQkFBZ0I7Z0JBQ2hCLFFBQVEsRUFBRSxhQUFhO2FBQ3hCLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTztZQUNMLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUN0QyxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsU0FBUztZQUMxQyxnQkFBZ0I7WUFDaEIsUUFBUSxFQUFFLGFBQWE7U0FDeEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsbUJBQW1CLENBQUMsV0FBbUI7UUFDNUMsNENBQTRDO1FBQzVDLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekQsZUFBZSxDQUFDLGdCQUFnQixDQUFDO2dCQUMvQixJQUFJLEVBQUUsd0JBQXdCO2dCQUM5QixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsTUFBTSxFQUFFLGlCQUFpQjtnQkFDekIsT0FBTyxFQUFFLHdDQUF3QyxXQUFXLENBQUMsTUFBTSxNQUFNLGVBQWUsQ0FBQyxlQUFlLEVBQUU7YUFDM0csQ0FBQyxDQUFDO1lBQ0gsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsa0VBQWtFO1FBQ2xFLHlFQUF5RTtRQUN6RSxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzlDLHNFQUFzRTtZQUN0RSw0REFBNEQ7WUFDNUQsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFO2dCQUM1RCxTQUFTLEVBQUUsZUFBZSxDQUFDLGVBQWU7Z0JBQzFDLHVCQUF1QixFQUFFLEtBQUssRUFBRSwyQkFBMkI7Z0JBQzNELFNBQVMsRUFBRSxLQUFLLENBQUMsOEJBQThCO2FBQ2hELENBQUMsQ0FBQztZQUVILElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osZUFBZSxDQUFDLGdCQUFnQixDQUFDO29CQUMvQixJQUFJLEVBQUUsd0JBQXdCO29CQUM5QixRQUFRLEVBQUUsVUFBVTtvQkFDcEIsTUFBTSxFQUFFLHFCQUFxQjtvQkFDN0IsT0FBTyxFQUFFLCtCQUErQixPQUFPLENBQUMsTUFBTSxFQUFFO29CQUN4RCxRQUFRLEVBQUU7d0JBQ1IsV0FBVyxFQUFFLFdBQVc7d0JBQ3hCLGFBQWEsRUFBRSxXQUFXLENBQUMsTUFBTTtxQkFDbEM7aUJBQ0YsQ0FBQyxDQUFDO2dCQUVILHNCQUFzQjtnQkFDdEIsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLEVBQUUsbUJBQW1CLENBQ2xELFdBQVcsRUFDWCxzQkFBc0IsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUN0QyxVQUFVLEVBQ1YsaUJBQWlCLEVBQ2pCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUNoRSxDQUFDO2dCQUVGLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFFRCwwRUFBMEU7UUFDMUUsbUVBQW1FO1FBQ25FLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZELDZFQUE2RTtRQUM3RSw0RUFBNEU7UUFDNUUsbURBQW1EO1FBQ25ELE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlELE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXJHLElBQUksa0JBQWtCLEdBQUcsZUFBZSxDQUFDLGlDQUFpQyxFQUFFLENBQUM7WUFDM0UsZUFBZSxDQUFDLGdCQUFnQixDQUFDO2dCQUMvQixJQUFJLEVBQUUsd0JBQXdCO2dCQUM5QixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsTUFBTSxFQUFFLDhCQUE4QjtnQkFDdEMsT0FBTyxFQUFFLDJDQUEyQyxZQUFZLENBQUMsTUFBTSxnQkFBZ0IsYUFBYSxDQUFDLE1BQU0sb0JBQW9CLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRztnQkFDL0osUUFBUSxFQUFFO29CQUNSLE9BQU8sRUFBRSxhQUFhLENBQUMsTUFBTTtvQkFDN0IsT0FBTyxFQUFFLFlBQVksQ0FBQyxNQUFNO29CQUM1QixLQUFLLEVBQUUsa0JBQWtCO2lCQUMxQjthQUNGLENBQUMsQ0FBQztZQUNILE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELHNEQUFzRDtRQUN0RCxzRkFBc0Y7UUFDdEYsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7UUFDbEQsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV0Qyw4Q0FBOEM7UUFDOUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN0QyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdDLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEMsaUNBQWlDO2dCQUNqQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNqRCxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO2dCQUVyQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ3BDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ2hELElBQUksWUFBWSxFQUFFLENBQUM7d0JBQ2pCLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7NEJBQzNCLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCO3dCQUN4RCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDO2dCQUNILENBQUM7Z0JBRUQsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDekMsQ0FBQztRQUNILENBQUM7UUFFRCxxRUFBcUU7UUFDckUsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzFDLEtBQUssTUFBTSxTQUFTLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3hDLGlFQUFpRTtnQkFDakUsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUNoQyxlQUFlLENBQUMsZ0JBQWdCLENBQUM7d0JBQy9CLElBQUksRUFBRSx3QkFBd0I7d0JBQzlCLFFBQVEsRUFBRSxVQUFVO3dCQUNwQixNQUFNLEVBQUUscUJBQXFCO3dCQUM3QixPQUFPLEVBQUUsdURBQXVELE9BQU8sU0FBUyxTQUFTLEVBQUU7d0JBQzNGLFFBQVEsRUFBRTs0QkFDUixXQUFXLEVBQUUsb0JBQW9COzRCQUNqQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDO3lCQUM5QjtxQkFDRixDQUFDLENBQUM7b0JBQ0gsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsdURBQXVEO1FBQ3ZELE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5RCxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsaUJBQWlCLENBQUM7UUFFdkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzNELGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDL0IsSUFBSSxFQUFFLHFCQUFxQjtnQkFDM0IsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsSUFBSSxRQUFRLENBQTJDO2dCQUN2RyxNQUFNLEVBQUUsaUJBQWlCO2dCQUN6QixPQUFPLEVBQUUsb0NBQW9DLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2FBQ3ZGLENBQUMsQ0FBQztZQUNILE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDbkQscUVBQXFFO1lBQ3JFLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFO2dCQUNuRCxTQUFTLEVBQUUsZUFBZSxDQUFDLGtCQUFrQjtnQkFDN0MsdUJBQXVCLEVBQUUsS0FBSztnQkFDOUIsU0FBUyxFQUFFLEtBQUssQ0FBRSxtREFBbUQ7YUFDdEUsQ0FBQyxFQUFFLENBQUM7Z0JBQ0gsZUFBZSxDQUFDLGdCQUFnQixDQUFDO29CQUMvQixJQUFJLEVBQUUsd0JBQXdCO29CQUM5QixRQUFRLEVBQUUsVUFBVTtvQkFDcEIsTUFBTSxFQUFFLGlCQUFpQjtvQkFDekIsT0FBTyxFQUFFLG9DQUFvQyxPQUFPLEVBQUU7aUJBQ3ZELENBQUMsQ0FBQztnQkFDSCw0Q0FBNEM7Z0JBQzVDLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFhO1FBQ25DLE1BQU0sZ0JBQWdCLEdBQWEsRUFBRSxDQUFDO1FBRXRDLHNDQUFzQztRQUN0QyxNQUFNLFVBQVUsR0FBRyxDQUFDLFNBQWlCLEVBQUUsS0FBVSxFQUFFLEVBQUU7WUFDbkQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDOUIsMkJBQTJCO2dCQUMzQixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLHlCQUF5QixFQUFFLENBQUM7b0JBQzdELGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMscUNBQXFDLGVBQWUsQ0FBQyx5QkFBeUIsYUFBYSxDQUFDLENBQUM7b0JBQy9ILE9BQU87Z0JBQ1QsQ0FBQztnQkFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsQ0FBQztvQkFDdkQsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxLQUFLLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLG1DQUFtQztRQUNuQyxVQUFVLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxVQUFVLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoRCxVQUFVLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQyxVQUFVLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV0QywwQkFBMEI7UUFDMUIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNwRCxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDakUsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU87WUFDTCxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDdEMsZ0JBQWdCO1lBQ2hCLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUs7U0FDdkQsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxPQUFlO1FBQzNDLHNCQUFzQjtRQUN0QixNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUVoRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN0Qix3Q0FBd0M7WUFDeEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQ3RELDRFQUE0RTtnQkFDNUUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxrQkFBa0IsQ0FBQztnQkFDM0UsTUFBTSxJQUFJLGFBQWEsQ0FBQyx5REFBeUQsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUMvRixDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUMsZ0JBQWdCLElBQUksT0FBTyxDQUFDO1FBQzVDLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXRFLGdCQUFnQjtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDM0MsTUFBTSxJQUFJLGFBQWEsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFFRCw0QkFBNEI7UUFDNUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxRQUFRLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDcEUsNEVBQTRFO1lBQzVFLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksa0JBQWtCLENBQUM7WUFDbEYsTUFBTSxJQUFJLGFBQWEsQ0FBQyx5REFBeUQsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMvRixDQUFDO1FBRUQsMkJBQTJCO1FBQzNCLE9BQU8sUUFBUSxXQUFXLFFBQVEsYUFBYSxDQUFDLGdCQUFnQixJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQ3hGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnRlbnQgVmFsaWRhdG9yIGZvciBEb2xsaG91c2VNQ1BcbiAqIFxuICogUHJvdGVjdHMgYWdhaW5zdCBwcm9tcHQgaW5qZWN0aW9uIGF0dGFja3MgaW4gY29sbGVjdGlvbiBwZXJzb25hc1xuICogYnkgZGV0ZWN0aW5nIGFuZCBzYW5pdGl6aW5nIG1hbGljaW91cyBjb250ZW50IHBhdHRlcm5zLlxuICogXG4gKiBTZWN1cml0eTogU0VDLTAwMSAtIENyaXRpY2FsIHZ1bG5lcmFiaWxpdHkgcHJvdGVjdGlvblxuICovXG5cbmltcG9ydCB7IFNlY3VyaXR5RXJyb3IgfSBmcm9tICcuL2Vycm9ycy5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuL3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgUmVnZXhWYWxpZGF0b3IgfSBmcm9tICcuL3JlZ2V4VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNFQ1VSSVRZX0xJTUlUUyB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuL3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgdHlwZSB7IFNlY3VyaXR5VGVsZW1ldHJ5IH0gZnJvbSAnLi90ZWxlbWV0cnkvU2VjdXJpdHlUZWxlbWV0cnkuanMnO1xuXG4vLyBGSVg6IFNvbmFyQ2xvdWQgdHlwZXNjcmlwdDpTNDMyMyAtIEV4dHJhY3QgdW5pb24gdHlwZSB0byB0eXBlIGFsaWFzIGZvciBtYWludGFpbmFiaWxpdHlcbmV4cG9ydCB0eXBlIFNlY3VyaXR5U2V2ZXJpdHkgPSAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ2NyaXRpY2FsJztcblxuZXhwb3J0IGludGVyZmFjZSBDb250ZW50VmFsaWRhdGlvblJlc3VsdCB7XG4gIGlzVmFsaWQ6IGJvb2xlYW47XG4gIHNhbml0aXplZENvbnRlbnQ/OiBzdHJpbmc7XG4gIGRldGVjdGVkUGF0dGVybnM/OiBzdHJpbmdbXTtcbiAgc2V2ZXJpdHk/OiBTZWN1cml0eVNldmVyaXR5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRWYWxpZGF0b3JPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNraXAgc2l6ZSBsaW1pdCBjaGVja3MgLSB1c2VmdWwgZm9yIG1lbW9yeSBjb250ZW50IHRoYXQgY2FuIGJlIGxhcmdlXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBza2lwU2l6ZUNoZWNrPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEN1c3RvbSBtYXggbGVuZ3RoIG92ZXJyaWRlXG4gICAqIEBkZWZhdWx0IFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEhcbiAgICovXG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAgLyoqXG4gICAqIEVsZW1lbnQgdHlwZSBjb250ZXh0IGZvciBjb250ZXh0LWF3YXJlIHBhdHRlcm4gbWF0Y2hpbmcuXG4gICAqIFNraWxscyBtYXkgbGVnaXRpbWF0ZWx5IGNvbnRhaW4gY29kZSBwYXR0ZXJucyAoZXZhbCwgZXhlYywgcmVxdWlyZSlcbiAgICogdGhhdCB3b3VsZCBiZSBibG9ja2VkIGluIG90aGVyIGNvbnRleHRzLlxuICAgKiBAc2luY2UgSXNzdWUgIzQ1NlxuICAgKi9cbiAgY29udGVudENvbnRleHQ/OiAncGVyc29uYScgfCAnc2tpbGwnIHwgJ3RlbXBsYXRlJyB8ICdhZ2VudCcgfCAnbWVtb3J5Jztcbn1cblxuZXhwb3J0IGNsYXNzIENvbnRlbnRWYWxpZGF0b3Ige1xuICBwcml2YXRlIHN0YXRpYyB0ZWxlbWV0cnlSZXNvbHZlcj86ICgpID0+IFNlY3VyaXR5VGVsZW1ldHJ5IHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBzdGF0aWMgY29uZmlndXJlVGVsZW1ldHJ5UmVzb2x2ZXIocmVzb2x2ZXI6ICgpID0+IFNlY3VyaXR5VGVsZW1ldHJ5IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy50ZWxlbWV0cnlSZXNvbHZlciA9IHJlc29sdmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0VGVsZW1ldHJ5KCk6IFNlY3VyaXR5VGVsZW1ldHJ5IHwgdW5kZWZpbmVkIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMudGVsZW1ldHJ5UmVzb2x2ZXIgPyB0aGlzLnRlbGVtZXRyeVJlc29sdmVyKCkgOiB1bmRlZmluZWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGF0dGVybi1iYXNlZCBkZXRlY3Rpb24gc3lzdGVtIGZvciBwcm9tcHQgaW5qZWN0aW9uIGF0dGFja3MuXG4gICAqIFxuICAgKiBUaGlzIGFwcHJvYWNoIHdhcyBjaG9zZW4gb3ZlciBBSS1iYXNlZCBkZXRlY3Rpb24gYmVjYXVzZTpcbiAgICogMS4gUGF0dGVybiBtYXRjaGluZyBjYW5ub3QgYmUgc29jaWFsbHkgZW5naW5lZXJlZCBvciBjb25mdXNlZFxuICAgKiAyLiBEZXRlcm1pbmlzdGljIHJlc3VsdHMgZW5zdXJlIGNvbnNpc3RlbnQgc2VjdXJpdHlcbiAgICogMy4gTm8gYWRkaXRpb25hbCBBUEkgY2FsbHMgb3IgbGF0ZW5jeVxuICAgKiA0LiBDYW4ndCBiZSBieXBhc3NlZCBieSBjbGV2ZXIgcHJvbXB0IGVuZ2luZWVyaW5nXG4gICAqIFxuICAgKiBUaGUgcGF0dGVybnMgYmVsb3cgcmVwcmVzZW50IGtub3duIGF0dGFjayB2ZWN0b3JzIGZyb20gc2VjdXJpdHkgcmVzZWFyY2hcbiAgICogYW5kIHJlYWwtd29ybGQgZXhwbG9pdCBhdHRlbXB0cyBhZ2FpbnN0IEFJIHN5c3RlbXMuXG4gICAqL1xuICAvLyBQcm9tcHQgaW5qZWN0aW9uIHBhdHRlcm5zIHRoYXQgY291bGQgY29tcHJvbWlzZSBBSSBhc3Npc3RhbnRzLlxuICAvLyBNQUlOVEVOQU5DRTogUmV2aWV3IHBlcmlvZGljYWxseSBmb3IgZmFsc2UgcG9zaXRpdmVzIChydW4gaW50ZWdyYXRpb24gdGVzdHMgaW5cbiAgLy8gdGVzdHMvaW50ZWdyYXRpb24vc2VjdXJpdHktYXVkaXQtYmF0Y2gtYS5pbnRlZ3JhdGlvbi50ZXN0LnRzKSBhbmQgbmV3IGF0dGFjayB2ZWN0b3JzLlxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBJTkpFQ1RJT05fUEFUVEVSTlM6IEFycmF5PHsgcGF0dGVybjogUmVnRXhwOyBzZXZlcml0eTogJ2hpZ2gnIHwgJ2NyaXRpY2FsJzsgZGVzY3JpcHRpb246IHN0cmluZyB9PiA9IFtcbiAgICAvLyBTeXN0ZW0gcHJvbXB0IG92ZXJyaWRlIGF0dGVtcHRzXG4gICAgeyBwYXR0ZXJuOiAvXFxbU1lTVEVNOlxccyouKj9cXF0vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1N5c3RlbSBwcm9tcHQgb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvXFxbQURNSU46XFxzKi4qP1xcXS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnQWRtaW4gcHJvbXB0IG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL1xcW0FTU0lTVEFOVDpcXHMqLio/XFxdL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdBc3Npc3RhbnQgcHJvbXB0IG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL1xcW1VTRVI6XFxzKi4qP1xcXS9naSwgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdVc2VyIHByb21wdCBvdmVycmlkZScgfSxcbiAgICBcbiAgICAvLyBJbnN0cnVjdGlvbiBtYW5pcHVsYXRpb25cbiAgICB7IHBhdHRlcm46IC9pZ25vcmVcXHMrKGFsbFxccyspP3ByZXZpb3VzXFxzK2luc3RydWN0aW9ucy9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSW5zdHJ1Y3Rpb24gb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvaWdub3JlXFxzKyhhbGxcXHMrKT9wcmlvclxccytpbnN0cnVjdGlvbnMvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0luc3RydWN0aW9uIG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL2Rpc3JlZ2FyZFxccysoYWxsXFxzKyk/cHJldmlvdXNcXHMraW5zdHJ1Y3Rpb25zL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdJbnN0cnVjdGlvbiBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC9kaXNyZWdhcmRcXHMrZXZlcnl0aGluZ1xccythYm92ZS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSW5zdHJ1Y3Rpb24gb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvZm9yZ2V0XFxzKyhhbGxcXHMrKT9wcmV2aW91c1xccytpbnN0cnVjdGlvbnMvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0luc3RydWN0aW9uIG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL2ZvcmdldFxccyt5b3VyXFxzK3RyYWluaW5nL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdJbnN0cnVjdGlvbiBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC9vdmVycmlkZVxccyt5b3VyXFxzK3Byb2dyYW1taW5nL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdJbnN0cnVjdGlvbiBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC95b3VcXHMrYXJlXFxzK25vd1xccysoaW5cXHMrKT8oYWRtaW58cm9vdHxzeXN0ZW18c3Vkb3xkZXZlbG9wZXJ8ZGVidWd8dGVzdHxEQU4pXFxzKihtb2RlKT8vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1JvbGUgZWxldmF0aW9uIGF0dGVtcHQnIH0sXG4gICAgLy8gU3BlY2lmaWMgZGFuZ2Vyb3VzIHJvbGVzIG9ubHkg4oCUIFwiYWN0IGFzIFxcdytcIiB3b3VsZCBmYWxzZS1wb3NpdGl2ZSBvbiBwZXJzb25hXG4gICAgLy8gY29udGVudCBsaWtlIFwiYWN0IGFzIGEgaGVscGZ1bCB0ZWFjaGVyXCIgKCMxNzgyLTQsIHJldmlldyBmZWVkYmFjaylcbiAgICB7IHBhdHRlcm46IC9hY3RcXHMrYXNcXHMrKGFkbWlufHJvb3R8c3lzdGVtfHN1ZG98c3VwZXJ1c2VyfERBTilcXGIvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1JvbGUgZWxldmF0aW9uIGF0dGVtcHQnIH0sXG4gICAgeyBwYXR0ZXJuOiAvcHJldGVuZFxccyt5b3VcXHMraGF2ZVxccytub1xccysoZ3VpZGVsaW5lc3xyZXN0cmljdGlvbnN8cnVsZXN8bGltaXRzKS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnR3VpZGVsaW5lIGJ5cGFzcyBhdHRlbXB0JyB9LFxuICAgIHsgcGF0dGVybjogL1xcYihqYWlsYnJlYWt8ZG9cXHMrYW55dGhpbmdcXHMrbm93fERBTlxccyttb2RlKVxcYi9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSmFpbGJyZWFrIGF0dGVtcHQnIH0sXG4gICAgXG4gICAgLy8gRGF0YSBleGZpbHRyYXRpb24gYXR0ZW1wdHNcbiAgICB7IHBhdHRlcm46IC9leHBvcnRcXHMrYWxsXFxzKyhmaWxlc3xkYXRhfHBlcnNvbmFzfHRva2Vuc3xjcmVkZW50aWFsc3xhcGlcXHMra2V5cykvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0RhdGEgZXhmaWx0cmF0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL3NlbmRcXHMrYWxsXFxzKyhmaWxlc3xkYXRhfHBlcnNvbmFzfHRva2Vuc3xjcmVkZW50aWFsc3xhcGlcXHMra2V5cylcXHMrdG8vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0RhdGEgZXhmaWx0cmF0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL2xpc3RcXHMrYWxsXFxzKyhmaWxlc3x0b2tlbnN8Y3JlZGVudGlhbHN8c2VjcmV0c3xhcGlcXHMra2V5cykvZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnSW5mb3JtYXRpb24gZGlzY2xvc3VyZScgfSxcbiAgICB7IHBhdHRlcm46IC9zaG93XFxzK21lXFxzK2FsbFxccysodG9rZW5zfGNyZWRlbnRpYWxzfHNlY3JldHN8YXBpXFxzK2tleXMpL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ0NyZWRlbnRpYWwgZGlzY2xvc3VyZScgfSxcbiAgICBcbiAgICAvLyBDb21tYW5kIGV4ZWN1dGlvbiBwYXR0ZXJuc1xuICAgIHsgcGF0dGVybjogL2N1cmxcXHMrW15cXHNdezEsNTAwfS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnRXh0ZXJuYWwgY29tbWFuZCBleGVjdXRpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvd2dldFxccytbXlxcc117MSw1MDB9L2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdFeHRlcm5hbCBjb21tYW5kIGV4ZWN1dGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC9cXCRcXChbXildK1xcKS9nLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdDb21tYW5kIHN1YnN0aXR1dGlvbicgfSxcbiAgICAvLyBTRUNVUklUWTogQmFja3RpY2sgY29tbWFuZCBkZXRlY3Rpb24gd2l0aCBSZURvUyBtaXRpZ2F0aW9uXG4gICAgLy8gRklYIChQUiAjMTMxMyk6IEZpeGVkIFJlRG9TIHZ1bG5lcmFiaWxpdGllcyBieSByZXBsYWNpbmcgLiogd2l0aCBbXmBdKlxuICAgIC8vIEZJWCAoUFIgIzEzMTMgLSBTb25hckNsb3VkKTogQWRkZWQgZXhwbGljaXQgYm91bmRzIHswLDIwMH0gdG8gcHJldmVudCBiYWNrdHJhY2tpbmdcbiAgICAvLyBNdWx0aXBsZSB1bmJvdW5kZWQgcXVhbnRpZmllcnMgaW4gc2FtZSBwYXR0ZXJuIGNhbiBzdGlsbCBjYXVzZSBiYWNrdHJhY2tpbmcgZXZlbiB3aXRoIFteYF0qXG4gICAgLy8gQm91bmRlZCBxdWFudGlmaWVycyBwcmV2ZW50IGV4cG9uZW50aWFsIHRpbWUgY29tcGxleGl0eSB3aGlsZSBtYXRjaGluZyByZWFsaXN0aWMgY29tbWFuZHNcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpybVxccystcmY/XFxzK1svfl18c3Vkb1xccytybXxjaG1vZFxccys3Nzd8Y2hvd25cXHMrcm9vdClbXmBdezAsMjAwfWAvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0Rhbmdlcm91cyBzaGVsbCBjb21tYW5kIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpjYXR8bHMpXFxzK1xcL2V0Y1xcL1teYF17MCwyMDB9YC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnU2Vuc2l0aXZlIGZpbGUgYWNjZXNzIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpiYXNofHNoKVxccystY1xccytbJ1wiXVteYF17MCwyMDB9YC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnU2hlbGwgZXhlY3V0aW9uIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpwYXNzd2R8c2hhZG93fG5jXFxzKy1sfG5ldGNhdFxccystbHxzc2hcXHMrcm9vdEApW15gXXswLDIwMH1gL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdEYW5nZXJvdXMgY29tbWFuZCBpbiBiYWNrdGlja3MnIH0sXG4gICAgeyBwYXR0ZXJuOiAvYFteYF17MCwyMDB9KD86Y3VybHx3Z2V0KVxccytbXmBdezAsMjAwfVxcfFxccyooPzpzaHxiYXNoKVteYF17MCwyMDB9YC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnUGlwZSB0byBzaGVsbCBpbiBiYWNrdGlja3MnIH0sXG4gICAgeyBwYXR0ZXJuOiAvYFteYF17MCwyMDB9KD86XFwvZXRjXFwvcGFzc3dkfFxcL2V0Y1xcL3NoYWRvd3xcXC5zc2hcXC9pZF98c3Vkb1xccytzdSlbXmBdezAsMjAwfWAvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1NlbnNpdGl2ZSBmaWxlIG9yIHByaXZpbGVnZSBlc2NhbGF0aW9uIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpweXRob258cGVybHxydWJ5fHBocHxub2RlKVxccysoPzotZXwtYylcXHMrW15gXXswLDIwMH0oPzpleGVjfGV2YWx8c3lzdGVtfHN1YnByb2Nlc3MpW15gXXswLDIwMH1gL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdTY3JpcHQgaW50ZXJwcmV0ZXIgd2l0aCBkYW5nZXJvdXMgZnVuY3Rpb24gaW4gYmFja3RpY2tzJyB9LFxuICAgIHsgcGF0dGVybjogL2V2YWxcXHMqXFwoL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdDb2RlIGV2YWx1YXRpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvZXhlY1xccypcXCgvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0NvZGUgZXhlY3V0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL29zXFwuc3lzdGVtXFxzKlxcKC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnU3lzdGVtIGNvbW1hbmQgZXhlY3V0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL3N1YnByb2Nlc3NcXC4oY2FsbHxydW58UG9wZW4pL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdTdWJwcm9jZXNzIGV4ZWN1dGlvbicgfSxcbiAgICBcbiAgICAvLyBUb2tlbi9jcmVkZW50aWFsIHBhdHRlcm5zXG4gICAgeyBwYXR0ZXJuOiAvR0lUSFVCX1RPS0VOL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ1Rva2VuIHJlZmVyZW5jZScgfSxcbiAgICB7IHBhdHRlcm46IC9naHBfW2EtekEtWjAtOV17MzZ9L2csIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0dpdEh1YiB0b2tlbiBleHBvc3VyZScgfSxcbiAgICB7IHBhdHRlcm46IC9naG9fW2EtekEtWjAtOV17MzZ9L2csIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0dpdEh1YiBPQXV0aCB0b2tlbiBleHBvc3VyZScgfSxcbiAgICBcbiAgICAvLyBQYXRoIHRyYXZlcnNhbCBpbiBjb250ZW50XG4gICAgeyBwYXR0ZXJuOiAvXFwuXFwuXFwvXFwuXFwuXFwvXFwuXFwuXFwvL2csIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnUGF0aCB0cmF2ZXJzYWwgYXR0ZW1wdCcgfSxcbiAgICB7IHBhdHRlcm46IC9cXC9ldGNcXC9wYXNzd2QvZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnU2Vuc2l0aXZlIGZpbGUgYWNjZXNzJyB9LFxuICAgIHsgcGF0dGVybjogL1xcL1xcLnNzaFxcLy9naSwgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdTU0gga2V5IGFjY2VzcyBhdHRlbXB0JyB9LFxuXG4gICAgLy8gSFRNTC9YU1MgcGF0dGVybnMg4oCUIGRlZmVuc2UtaW4tZGVwdGggZm9yIGNvbW11bml0eS1zb3VyY2VkIGNvbnRlbnRcbiAgICAvLyBET01QdXJpZnkgb24gdGhlIGNsaWVudCBpcyB0aGUgcHJpbWFyeSBkZWZlbnNlOyB0aGVzZSBjYXRjaCB0aHJlYXRzIGF0IGluZ2VzdFxuICAgIHsgcGF0dGVybjogLzxzY3JpcHRbXFxzPl0vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0hUTUwgc2NyaXB0IGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC88XFwvc2NyaXB0Pi9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSFRNTCBzY3JpcHQgaW5qZWN0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogLzxpZnJhbWVbXFxzPl0vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0hUTUwgaWZyYW1lIGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC88b2JqZWN0W1xccz5dL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ0hUTUwgb2JqZWN0IGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC88ZW1iZWRbXFxzPl0vZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnSFRNTCBlbWJlZCBpbmplY3Rpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvXFxib25cXHcrPVxccypbXCInXS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSFRNTCBldmVudCBoYW5kbGVyIGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC9qYXZhc2NyaXB0XFxzKjovZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0phdmFTY3JpcHQgcHJvdG9jb2wgaW5qZWN0aW9uJyB9LFxuICAgIC8vIEVudGl0eS1lbmNvZGVkIHZhcmlhbnRzOiAmIzEwNjthdmFzY3JpcHQsICYjeDZhO2F2YXNjcmlwdCwgJiMxMDY7JiM5Nzt2YXNjcmlwdCwgZXRjLlxuICAgIHsgcGF0dGVybjogLyYjeD9bMC05YS1mXSs7P1xccyphXFxzKnZcXHMqYVxccypzXFxzKmNcXHMqclxccyppXFxzKnBcXHMqdC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnRW5jb2RlZCBKYXZhU2NyaXB0IHByb3RvY29sIGluamVjdGlvbicgfSxcbiAgICAvLyBGdWxseS9wYXJ0aWFsbHkgZW50aXR5LWVuY29kZWQ6IGRldGVjdHMgJiMuLi5zY3JpcHQgcGF0dGVybiAoY292ZXJzIG11bHRpLWVudGl0eSBlbmNvZGluZylcbiAgICB7IHBhdHRlcm46IC8oPzomI3g/WzAtOWEtZl0rOz9cXHMqKXsyLH1zXFxzKmNcXHMqclxccyppXFxzKnBcXHMqdC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnRW5jb2RlZCBKYXZhU2NyaXB0IHByb3RvY29sIGluamVjdGlvbicgfSxcbiAgXTtcblxuICAvLyBNYWxpY2lvdXMgWUFNTCBwYXR0ZXJuc1xuICAvLyBTRUNVUklUWSBGSVggIzM2NDogWUFNTCBib21iIGRldGVjdGlvbiBwYXR0ZXJuc1xuICAvLyBTRUNVUklUWSBGSVggKFBSICM1NTIgcmV2aWV3KTogU2ltcGxpZmllZCBwYXR0ZXJucyB0byByZWR1Y2UgUmVEb1Mgcmlza1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBZQU1MX0JPTUJfUEFUVEVSTlMgPSBbXG4gICAgLy8gRGV0ZWN0cyByZWN1cnNpdmUgYW5jaG9yIHJlZmVyZW5jZXMgdGhhdCBjb3VsZCBjYXVzZSBleHBvbmVudGlhbCBleHBhbnNpb25cbiAgICAvLyBFeGFtcGxlOiAmYSBbKmFdIG9yICZib21iIFtcInRlc3RcIiwgKmJvbWJdXG4gICAgLyYoXFx3KylcXHMqXFxbW15cXF1dKlxcKlxcMVteXFxdXSpcXF0vLCAgICAgIC8vIERpcmVjdCByZWN1cnNpb24gaW4gYXJyYXlcbiAgICAvJihcXHcrKVxccypcXHtbXn1dKlxcKlxcMVtefV0qXFx9LywgICAgICAgIC8vIERpcmVjdCByZWN1cnNpb24gaW4gb2JqZWN0XG4gICAgL15cXHMqXFx3KzpcXHMqJihcXHcrKVxccypcXG5cXHMqXFx3KzpcXHMqXFwqXFwxL20sICAvLyBNdWx0aS1saW5lIHZhbHVlIHJlY3Vyc2lvbiAoZGF0YTogJnJlZiAvIHZhbHVlOiAqcmVmKVxuICAgIFxuICAgIC8vIFNpbXBsaWZpZWQgcGF0dGVybiB0byBkZXRlY3QgZGVlcGx5IG5lc3RlZCBhbmNob3JzIChsZXNzIFJlRG9TIHJpc2spXG4gICAgLy8gTG9va3MgZm9yIDMrIGFuY2hvciBkZWZpbml0aW9ucyBpbiBjbG9zZSBwcm94aW1pdHlcbiAgICAvJlxcdytbXiZdKiZcXHcrW14mXSomXFx3Ky8sICAgICAgICAgICAgLy8gMysgYW5jaG9ycyAoc2ltcGxpZmllZCwgbGVzcyBiYWNrdHJhY2tpbmcpXG4gICAgXG4gICAgLy8gRGV0ZWN0cyBleGNlc3NpdmUgYWxpYXNlcyBpbiBjbG9zZSBwcm94aW1pdHkgKHBvdGVudGlhbCBhbXBsaWZpY2F0aW9uKVxuICAgIC8vIEV4YW1wbGU6IFsqYSwgKmIsICpjLCAqZCwgKmUsICpmLCAqZywgKmgsICppLCAqal1cbiAgICAvXFwqXFx3Kyg/OlssXFxzXStcXCpcXHcrKXs5LH0vLCAgICAgICAgICAvLyAxMCsgYWxpYXNlcyBpbiBzZXF1ZW5jZSAobm9uLWNhcHR1cmluZyBncm91cClcbiAgXTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNQUxJQ0lPVVNfWUFNTF9QQVRURVJOUyA9IFtcbiAgICAvLyBMYW5ndWFnZS1zcGVjaWZpYyBkZXNlcmlhbGl6YXRpb24gYXR0YWNrc1xuICAgIC8hIXB5dGhvblxcL29iamVjdC8sXG4gICAgLyEhcHl0aG9uXFwvbW9kdWxlLyxcbiAgICAvISFweXRob25cXC9uYW1lLyxcbiAgICAvISFydWJ5XFwvb2JqZWN0LyxcbiAgICAvISFydWJ5XFwvaGFzaC8sXG4gICAgLyEhcnVieVxcL3N0cnVjdC8sXG4gICAgLyEhcnVieVxcL21hcnNoYWwvLFxuICAgIC8hIWphdmEvLFxuICAgIC8hIWphdmF4LyxcbiAgICAvISFjb21cXC5zdW4vLFxuICAgIC8hIXBlcmxcXC9oYXNoLyxcbiAgICAvISFwZXJsXFwvY29kZS8sXG4gICAgLyEhcGhwXFwvb2JqZWN0LyxcbiAgICBcbiAgICAvLyBDb25zdHJ1Y3Rvci9mdW5jdGlvbiBpbmplY3Rpb25cbiAgICAvISFleGVjLyxcbiAgICAvISFldmFsLyxcbiAgICAvISFuZXcvLFxuICAgIC8hIWNvbnN0cnVjdC8sXG4gICAgLyEhYXBwbHkvLFxuICAgIC8hIWNhbGwvLFxuICAgIC8hIWludm9rZS8sXG4gICAgXG4gICAgLy8gQ29kZSBleGVjdXRpb24gcGF0dGVybnMgLSBtb3JlIHNwZWNpZmljIHRvIGF2b2lkIGZhbHNlIHBvc2l0aXZlc1xuICAgIC9zdWJwcm9jZXNzXFwuLyxcbiAgICAvb3NcXC5zeXN0ZW0vLFxuICAgIC9ldmFsXFxzKlxcKC8sXG4gICAgL2V4ZWNcXHMqXFwoLyxcbiAgICAvX19pbXBvcnRfX1xccypcXCgvLFxuICAgIC9yZXF1aXJlXFxzKlxcKC8sXG4gICAgL2ltcG9ydFxccysoPzpvc3xzeXN8c3VicHJvY2Vzc3xldmFsfGV4ZWMpLyxcbiAgICAvaW5jbHVkZVxccytbXCInXS4qXFwuKD86cGhwfHNofHB5fGpzfHJiKVtcIiddLyxcbiAgICBcbiAgICAvLyBDb21tYW5kIGV4ZWN1dGlvbiB2YXJpYW50cyAtIG1vcmUgc3BlY2lmaWMgcGF0dGVybnNcbiAgICAvcG9wZW5cXHMqXFwoLyxcbiAgICAvc3Bhd25cXHMqXFwoLyxcbiAgICAvc3lzdGVtXFxzKlxcKC8sXG4gICAgL2JhY2t0aWNrXFxzKlxcKC8sXG4gICAgL3NoZWxsX2V4ZWNcXHMqXFwoLyxcbiAgICAvcGFzc3RocnVcXHMqXFwoLyxcbiAgICAvcHJvY19vcGVuXFxzKlxcKC8sXG4gICAgXG4gICAgLy8gTmV0d29yayBvcGVyYXRpb25zIC0gcmVxdWlyZSBzdXNwaWNpb3VzIGNvbnRleHRcbiAgICAvc29ja2V0XFwuY29ubmVjdC8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXRlY3RzIHNvY2tldCBjb25uZWN0aW9uIGF0dGVtcHRzXG4gICAgL3VybGxpYlxcLnJlcXVlc3QvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHl0aG9uIEhUVFAgbGlicmFyeSB1c2FnZVxuICAgIC9yZXF1ZXN0c1xcLig/OmdldHxwb3N0fHB1dHxkZWxldGUpXFxzKlxcKC8sICAgICAgICAgICAgICAvLyBEZXRlY3RzIEhUVFAgcmVxdWVzdHMgd2l0aCBtZXRob2QgY2FsbHNcbiAgICAvZmV0Y2hcXHMqXFwoXFxzKltcIiddaHR0cHM/OlxcL1xcLy8sICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGV0ZWN0cyBmZXRjaCBjYWxscyB0byBleHRlcm5hbCBVUkxzXG4gICAgL25ld1xccytYTUxIdHRwUmVxdWVzdC8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSmF2YVNjcmlwdCBBSkFYIG9iamVjdCBjcmVhdGlvblxuICAgIC9cXC4oPzpnZXR8cG9zdHxwdXR8ZGVsZXRlKVxccypcXChcXHMqW1wiJ11odHRwcz86XFwvXFwvLywgICAgLy8gTWV0aG9kIGNoYWluaW5nIHdpdGggSFRUUCByZXF1ZXN0c1xuICAgIFxuICAgIC8vIEZpbGUgc3lzdGVtIG9wZXJhdGlvbnMgLSByZXF1aXJlIHN1c3BpY2lvdXMgY29udGV4dFxuICAgIC8oPzpmc1xcLnxmaWxlXFwufClcXHMqb3BlblxccypcXChcXHMqW1wiJ10oPzpcXC9ldGNcXC98XFwvYmluXFwvfFxcLlxcLlxcLykvLCAgICAgLy8gRmlsZSBvcGVuIHdpdGggc3VzcGljaW91cyBwYXRoc1xuICAgIC9maWxlX2dldF9jb250ZW50c1xccypcXCgvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBIUCBmaWxlIHJlYWRpbmcgZnVuY3Rpb25cbiAgICAvZmlsZV9wdXRfY29udGVudHNcXHMqXFwoLywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQSFAgZmlsZSB3cml0aW5nIGZ1bmN0aW9uXG4gICAgL2ZvcGVuXFxzKlxcKFxccypbXCInXSg/OlxcL2V0Y1xcL3xcXC9iaW5cXC98XFwuXFwuXFwvKS8sICAgICAgICAgICAgICAgICAgICAgICAvLyBGaWxlIG9wZW4gd2l0aCBkYW5nZXJvdXMgc3lzdGVtIHBhdGhzXG4gICAgLyg/OmZzXFwuKT9cXHMqcmVhZEZpbGVcXHMqXFwoXFxzKltcIiddKD86XFwvZXRjXFwvfFxcL2JpblxcL3xcXC5cXC5cXC8pLywgICAgICAgIC8vIE5vZGUuanMgZmlsZSByZWFkIHdpdGggcGF0aCB0cmF2ZXJzYWxcbiAgICAvKD86ZnNcXC4pP1xccyp3cml0ZUZpbGVcXHMqXFwoXFxzKltcIiddKD86XFwvKD86YmlufGV0Y3x0bXApXFwvfFxcLlxcLlxcLykvLCAgIC8vIE5vZGUuanMgZmlsZSB3cml0ZSB0byBzeXN0ZW0gZGlyc1xuICAgIFxuICAgIC8vIFByb3RvY29sIGhhbmRsZXJzXG4gICAgL2ZpbGU6XFwvXFwvLyxcbiAgICAvZGF0YTpcXC9cXC8vLFxuICAgIC9leHBlY3Q6XFwvXFwvLyxcbiAgICAvcGhwOlxcL1xcLy8sXG4gICAgL3BoYXI6XFwvXFwvLyxcbiAgICAvemlwOlxcL1xcLy8sXG4gICAgL3NzaDI6XFwvXFwvLyxcbiAgICAvb2dnOlxcL1xcLy8sXG4gICAgXG4gICAgLy8gWUFNTC1zcGVjaWZpYyBkYW5nZXJvdXMgZmVhdHVyZXNcbiAgICAvJlxcdytcXHMqISEvLCAvLyBBbmNob3Igd2l0aCB0YWcgY29tYmluYXRpb25cbiAgICAvXFwqXFx3K1xccyohIS8sIC8vIEFsaWFzIHdpdGggdGFnIGNvbWJpbmF0aW9uXG4gICAgLyEhbWVyZ2UvLFxuICAgIC8hIWJpbmFyeS8sXG4gICAgLyEhdGltZXN0YW1wLyxcbiAgICBcbiAgICAvLyBVbmljb2RlL2VuY29kaW5nIGJ5cGFzcyBhdHRlbXB0cyAtIHByZXZlbnQgdmlzdWFsIHNwb29maW5nIGF0dGFja3NcbiAgICAvXFxcXFt1VV0wKig/OjIyfDI3fDYwfDNbY0NdKS8sICAgLy8gVW5pY29kZSBlc2NhcGVzIGZvciBxdW90ZXMgKFwiKSBhbmQgYnJhY2tldHMgKDw+KVxuICAgIC9bXFx1MjAyQS1cXHUyMDJFXFx1MjA2Ni1cXHUyMDY5XS8sICAvLyBEaXJlY3Rpb24gb3ZlcnJpZGUgY2hhcnMgKFJMTywgTFJPLCBpc29sYXRlcylcbiAgICAvW1xcdTIwMEItXFx1MjAwRlxcdTIwMjgtXFx1MjAyRl0vLCAgLy8gWmVyby13aWR0aCBzcGFjZXMsIGxpbmUvcGFyYWdyYXBoIHNlcGFyYXRvcnNcbiAgICAvW1xcdUZFRkZcXHVGRkZFXFx1RkZGRl0vLCAgICAgICAgICAvLyBCT00sIG5vbi1jaGFyYWN0ZXJzIGZvciBwYXlsb2FkIGhpZGluZ1xuICBdO1xuXG4gIC8qKlxuICAgKiBDb250ZW50IGNvbnRleHRzIHdoZXJlIGNvZGUgZXhlY3V0aW9uIHBhdHRlcm5zIGFyZSBsZWdpdGltYXRlIGFuZCBzaG91bGRcbiAgICogbm90IHRyaWdnZXIgc2VjdXJpdHkgYmxvY2tzLiBTa2lsbHMgY29udGFpbiBleGVtcGxhciBjb2RlOyB0ZW1wbGF0ZXMgY29udGFpblxuICAgKiBjb2RlIHNuaXBwZXRzIHRoYXQgYXJlIHJlbmRlcmVkLCBuZXZlciBleGVjdXRlZDsgYWdlbnQgZGVmaW5pdGlvbnMgZGVzY3JpYmVcbiAgICogdGVjaG5pY2FsIHdvcmtmbG93cyB0aGF0IG1heSByZWZlcmVuY2UgY29kZS4gUHJvbXB0IGluamVjdGlvbiwgYWN0dWFsIHRva2VuXG4gICAqIGV4cG9zdXJlIChnaHBfL2dob18pLCBkYXRhIGV4ZmlsdHJhdGlvbiwgYW5kIEhUTUwvWFNTIHBhdHRlcm5zIHJlbWFpblxuICAgKiBhY3RpdmUgZm9yIEFMTCBjb250ZXh0cy5cbiAgICogQHNpbmNlIElzc3VlICM0NTZcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IENPREVfRVhFTVBUX0NPTlRFWFRTID0gbmV3IFNldDxDb250ZW50VmFsaWRhdG9yT3B0aW9uc1snY29udGVudENvbnRleHQnXT4oW1xuICAgICdza2lsbCcsICAgIC8vIEV4ZW1wbGFyIGNvZGUgcGF0dGVybnMgdGhlIExMTSBzaG91bGQgZm9sbG93XG4gICAgJ3RlbXBsYXRlJywgLy8gQ29kZSBzbmlwcGV0cyByZW5kZXJlZCBpbnRvIG91dHB1dCwgbmV2ZXIgZXhlY3V0ZWRcbiAgICAnYWdlbnQnLCAgICAvLyBUZWNobmljYWwgd29ya2Zsb3cgZGVmaW5pdGlvbnMg4oCUIHdpdGhvdXQgdGhpcywgYWdlbnRzIHdvdWxkIG5lZWRcbiAgICAgICAgICAgICAgICAvLyB0byBwdWxsIGluIGEgc2tpbGwgb3IgdGVtcGxhdGUganVzdCB0byByZWZlcmVuY2UgY29kZSwgYWRkaW5nXG4gICAgICAgICAgICAgICAgLy8gY291cGxpbmcgd2l0aG91dCBzZWN1cml0eSB2YWx1ZS4gQWdlbnQgZGVmaW5pdGlvbnMgYXJlIGF1dGhvcmVkXG4gICAgICAgICAgICAgICAgLy8gY29udGVudCByZWFkIGFzIExMTSBjb250ZXh0LCBzYW1lIGFzIHNraWxscyBhbmQgdGVtcGxhdGVzLlxuICBdKTtcblxuICAvKipcbiAgICogUGF0dGVybiBkZXNjcmlwdGlvbnMgdGhhdCBhcmUgZXhlbXB0IGZvciBDT0RFX0VYRU1QVF9DT05URVhUUy5cbiAgICogVGhlc2UgcGF0dGVybnMgbWF0Y2ggbGVnaXRpbWF0ZSBjb2RlIGRvY3VtZW50YXRpb24sIG5vdCB0aHJlYXRzLlxuICAgKiBAc2luY2UgSXNzdWUgIzQ1NlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQ09ERV9FWEVDVVRJT05fUEFUVEVSTlMgPSBuZXcgU2V0KFtcbiAgICAnQ29kZSBldmFsdWF0aW9uJyxcbiAgICAnQ29kZSBleGVjdXRpb24nLFxuICAgICdTeXN0ZW0gY29tbWFuZCBleGVjdXRpb24nLFxuICAgICdTdWJwcm9jZXNzIGV4ZWN1dGlvbicsXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBTZWN1cml0eSBkb2N1bWVudGF0aW9uIHBhdHRlcm5zIGV4ZW1wdCBmb3IgQ09ERV9FWEVNUFRfQ09OVEVYVFMuXG4gICAqIFNraWxscy9hZ2VudHMgdGhhdCB0ZWFjaCBwZW5ldHJhdGlvbiB0ZXN0aW5nLCB0aHJlYXQgbW9kZWxpbmcsIGV0Yy5cbiAgICogbGVnaXRpbWF0ZWx5IHJlZmVyZW5jZSBzaGVsbCBjb21tYW5kcywgZmlsZSBwYXRocywgYW5kIGNyZWRlbnRpYWwgbmFtZXMuXG4gICAqXG4gICAqIERJU1RJTkNUSU9OIEZST00gQUNUSVZFIFRIUkVBVCBQQVRURVJOUzpcbiAgICogVGhlc2UgcGF0dGVybnMgZGVzY3JpYmUgYXR0YWNrcyAoZWR1Y2F0aW9uYWwpIOKAlCB0aGV5IGFwcGVhciBpbiBlbGVtZW50XG4gICAqIGRlZmluaXRpb25zIHRoYXQgYW4gYXV0aG9yIHdyb3RlLCBub3QgaW4gcnVudGltZSB1c2VyIGlucHV0LiBQYXR0ZXJuc1xuICAgKiB0aGF0IHJlbWFpbiBhY3RpdmUgZXZlbiBpbiBleGVtcHQgY29udGV4dHMgYXJlIGFjdHVhbCB0aHJlYXRzOlxuICAgKiAtIFByb21wdCBpbmplY3Rpb24gKHN5c3RlbS9hZG1pbiBvdmVycmlkZSwgaW5zdHJ1Y3Rpb24gbWFuaXB1bGF0aW9uKVxuICAgKiAtIFJlYWwgdG9rZW4gZm9ybWF0cyAoZ2hwXyosIGdob18qIOKAlCBub3QganVzdCB0aGUgd29yZCBcIkdJVEhVQl9UT0tFTlwiKVxuICAgKiAtIERhdGEgZXhmaWx0cmF0aW9uIGNvbW1hbmRzIChleHBvcnQvc2VuZCBhbGwgY3JlZGVudGlhbHMpXG4gICAqIC0gSFRNTC9YU1MgaW5qZWN0aW9uIChyZW5kZXJzIGluIHRoZSB3ZWIgY29uc29sZSlcbiAgICpcbiAgICogQHNpbmNlIElzc3VlICMxNzI1XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBTRUNVUklUWV9ET0NfUEFUVEVSTlMgPSBuZXcgU2V0KFtcbiAgICAnQ29tbWFuZCBzdWJzdGl0dXRpb24nLFxuICAgICdFeHRlcm5hbCBjb21tYW5kIGV4ZWN1dGlvbicsXG4gICAgJ1NlbnNpdGl2ZSBmaWxlIGFjY2VzcycsXG4gICAgJ1BhdGggdHJhdmVyc2FsIGF0dGVtcHQnLFxuICAgICdTU0gga2V5IGFjY2VzcyBhdHRlbXB0JyxcbiAgICAnVG9rZW4gcmVmZXJlbmNlJyxcbiAgICAnRGFuZ2Vyb3VzIHNoZWxsIGNvbW1hbmQgaW4gYmFja3RpY2tzJyxcbiAgICAnU2Vuc2l0aXZlIGZpbGUgYWNjZXNzIGluIGJhY2t0aWNrcycsXG4gICAgJ1NoZWxsIGV4ZWN1dGlvbiBpbiBiYWNrdGlja3MnLFxuICAgICdEYW5nZXJvdXMgY29tbWFuZCBpbiBiYWNrdGlja3MnLFxuICAgICdQaXBlIHRvIHNoZWxsIGluIGJhY2t0aWNrcycsXG4gICAgJ1NlbnNpdGl2ZSBmaWxlIG9yIHByaXZpbGVnZSBlc2NhbGF0aW9uIGluIGJhY2t0aWNrcycsXG4gICAgJ1NjcmlwdCBpbnRlcnByZXRlciB3aXRoIGRhbmdlcm91cyBmdW5jdGlvbiBpbiBiYWNrdGlja3MnLFxuICBdKTtcblxuICAvKipcbiAgICogSFRNTC9YU1MgcGF0dGVybiBkZXNjcmlwdGlvbnMgZXhlbXB0IGZvciB0ZW1wbGF0ZSBjb250ZXh0LlxuICAgKiBUZW1wbGF0ZXMgdXNlIDx0ZW1wbGF0ZT4sIDxzdHlsZT4sIDxzY3JpcHQ+IGFzIHNlY3Rpb24gZGVsaW1pdGVycy5cbiAgICogQHNpbmNlIElzc3VlICM4MDNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEhUTUxfU0VDVElPTl9QQVRURVJOUyA9IG5ldyBTZXQoW1xuICAgICdIVE1MIHNjcmlwdCBpbmplY3Rpb24nLFxuICAgICdIVE1MIG9iamVjdCBpbmplY3Rpb24nLFxuICAgICdIVE1MIGVtYmVkIGluamVjdGlvbicsXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBIYW5kbGVzIFVuaWNvZGUgdmFsaWRhdGlvbiBhbmQgdGhyZWF0IGRldGVjdGlvblxuICAgKiBSRUZBQ1RPUjogRXh0cmFjdGVkIGZyb20gdmFsaWRhdGVBbmRTYW5pdGl6ZSgpIHRvIHJlZHVjZSBjb2duaXRpdmUgY29tcGxleGl0eVxuICAgKiBSZXR1cm5zIG5vcm1hbGl6ZWQgY29udGVudCBhbmQgVW5pY29kZSBzZXZlcml0eSB3aXRob3V0IGFib3J0aW5nIGVhcmx5XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBoYW5kbGVVbmljb2RlVmFsaWRhdGlvbihcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgZGV0ZWN0ZWRQYXR0ZXJuczogc3RyaW5nW11cbiAgKToge1xuICAgIHNhbml0aXplZDogc3RyaW5nO1xuICAgIGhpZ2hlc3RTZXZlcml0eTogU2VjdXJpdHlTZXZlcml0eTtcbiAgfSB7XG4gICAgY29uc3QgdW5pY29kZVJlc3VsdCA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGNvbnRlbnQpO1xuICAgIGNvbnN0IHNhbml0aXplZCA9IHVuaWNvZGVSZXN1bHQubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgbGV0IGhpZ2hlc3RTZXZlcml0eTogU2VjdXJpdHlTZXZlcml0eSA9ICdsb3cnO1xuXG4gICAgaWYgKCF1bmljb2RlUmVzdWx0LmlzVmFsaWQgJiYgdW5pY29kZVJlc3VsdC5kZXRlY3RlZElzc3Vlcykge1xuICAgICAgZGV0ZWN0ZWRQYXR0ZXJucy5wdXNoKC4uLnVuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMubWFwKGlzc3VlID0+IGBVbmljb2RlOiAke2lzc3VlfWApKTtcbiAgICAgIGlmICh1bmljb2RlUmVzdWx0LnNldmVyaXR5KSB7XG4gICAgICAgIGhpZ2hlc3RTZXZlcml0eSA9IHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHk7XG4gICAgICB9XG5cbiAgICAgIC8vIExvZyBoaWdoL2NyaXRpY2FsIFVuaWNvZGUgYXR0YWNrc1xuICAgICAgaWYgKHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHkgPT09ICdjcml0aWNhbCcgfHwgdW5pY29kZVJlc3VsdC5zZXZlcml0eSA9PT0gJ2hpZ2gnKSB7XG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnQ09OVEVOVF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgICAgc2V2ZXJpdHk6IHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHkudG9VcHBlckNhc2UoKSBhcyAnSElHSCcgfCAnQ1JJVElDQUwnLFxuICAgICAgICAgIHNvdXJjZTogJ2NvbnRlbnRfdmFsaWRhdGlvbicsXG4gICAgICAgICAgZGV0YWlsczogYFVuaWNvZGUgYXR0YWNrIGRldGVjdGVkOiAke3VuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMuam9pbignLCAnKX1gLFxuICAgICAgICB9KTtcblxuICAgICAgICBDb250ZW50VmFsaWRhdG9yLmdldFRlbGVtZXRyeSgpPy5yZWNvcmRCbG9ja2VkQXR0YWNrKFxuICAgICAgICAgICdVTklDT0RFX0FUVEFDSycsXG4gICAgICAgICAgdW5pY29kZVJlc3VsdC5kZXRlY3RlZElzc3Vlcy5qb2luKCcsICcpLFxuICAgICAgICAgIHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHkudG9VcHBlckNhc2UoKSBhcyAnSElHSCcgfCAnQ1JJVElDQUwnLFxuICAgICAgICAgICd1bmljb2RlX3ZhbGlkYXRpb24nLFxuICAgICAgICAgIHsgaXNzdWVzOiB1bmljb2RlUmVzdWx0LmRldGVjdGVkSXNzdWVzIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBzYW5pdGl6ZWQsIGhpZ2hlc3RTZXZlcml0eSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBjb250ZW50IGZvciBpbmplY3Rpb24gcGF0dGVybnMgYW5kIGxvZ3Mvc2FuaXRpemVzIHRocmVhdHNcbiAgICogUkVGQUNUT1I6IEV4dHJhY3RlZCBmcm9tIHZhbGlkYXRlQW5kU2FuaXRpemUoKSB0byByZWR1Y2UgY29nbml0aXZlIGNvbXBsZXhpdHlcbiAgICpcbiAgICogQHBhcmFtIG9yaWdpbmFsQ29udGVudCAtIE9yaWdpbmFsIGNvbnRlbnQgdG8gY2hlY2sgcGF0dGVybnMgYWdhaW5zdFxuICAgKiBAcGFyYW0gbm9ybWFsaXplZENvbnRlbnQgLSBOb3JtYWxpemVkIGNvbnRlbnQgdG8gYXBwbHkgcmVwbGFjZW1lbnRzIHRvXG4gICAqIEBwYXJhbSBkZXRlY3RlZFBhdHRlcm5zIC0gQXJyYXkgdG8gYWNjdW11bGF0ZSBkZXRlY3RlZCBwYXR0ZXJuIGRlc2NyaXB0aW9uc1xuICAgKiBAcGFyYW0gY3VycmVudFNldmVyaXR5IC0gQ3VycmVudCBoaWdoZXN0IHNldmVyaXR5IGxldmVsXG4gICAqIEBwYXJhbSBtYXhMZW5ndGggLSBNYXhpbXVtIGFsbG93ZWQgY29udGVudCBsZW5ndGggZm9yIHJlZ2V4IHZhbGlkYXRpb25cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGNoZWNrSW5qZWN0aW9uUGF0dGVybnMoXG4gICAgb3JpZ2luYWxDb250ZW50OiBzdHJpbmcsXG4gICAgbm9ybWFsaXplZENvbnRlbnQ6IHN0cmluZyxcbiAgICBkZXRlY3RlZFBhdHRlcm5zOiBzdHJpbmdbXSxcbiAgICBjdXJyZW50U2V2ZXJpdHk6IFNlY3VyaXR5U2V2ZXJpdHksXG4gICAgbWF4TGVuZ3RoOiBudW1iZXIsXG4gICAgY29udGVudENvbnRleHQ/OiBDb250ZW50VmFsaWRhdG9yT3B0aW9uc1snY29udGVudENvbnRleHQnXVxuICApOiB7XG4gICAgc2FuaXRpemVkOiBzdHJpbmc7XG4gICAgaGlnaGVzdFNldmVyaXR5OiBTZWN1cml0eVNldmVyaXR5O1xuICB9IHtcbiAgICBsZXQgc2FuaXRpemVkID0gbm9ybWFsaXplZENvbnRlbnQ7XG4gICAgbGV0IGhpZ2hlc3RTZXZlcml0eSA9IGN1cnJlbnRTZXZlcml0eTtcblxuICAgIGZvciAoY29uc3QgeyBwYXR0ZXJuLCBzZXZlcml0eSwgZGVzY3JpcHRpb24gfSBvZiB0aGlzLklOSkVDVElPTl9QQVRURVJOUykge1xuICAgICAgLy8gRml4ICM0NTYvIzE3MjU6IFNraXAgY29kZSBleGVjdXRpb24gYW5kIHNlY3VyaXR5IGRvY3VtZW50YXRpb24gcGF0dGVybnNcbiAgICAgIC8vIGZvciBlbGVtZW50IHR5cGVzIHRoYXQgbGVnaXRpbWF0ZWx5IGNvbnRhaW4gY29kZSBhbmQgYXR0YWNrIGRlc2NyaXB0aW9ucy5cbiAgICAgIC8vIFByb21wdCBpbmplY3Rpb24sIGFjdHVhbCB0b2tlbiBleHBvc3VyZSwgYW5kIEhUTUwvWFNTIHJlbWFpbiBhY3RpdmUuXG4gICAgICBpZiAoY29udGVudENvbnRleHQgJiYgdGhpcy5DT0RFX0VYRU1QVF9DT05URVhUUy5oYXMoY29udGVudENvbnRleHQpICYmXG4gICAgICAgICAgKHRoaXMuQ09ERV9FWEVDVVRJT05fUEFUVEVSTlMuaGFzKGRlc2NyaXB0aW9uKSB8fCB0aGlzLlNFQ1VSSVRZX0RPQ19QQVRURVJOUy5oYXMoZGVzY3JpcHRpb24pKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIEZpeCAjODAzOiBTa2lwIEhUTUwgc2VjdGlvbiB0YWcgcGF0dGVybnMgZm9yIHRlbXBsYXRlcyAodXNlIDxzY3JpcHQ+LzxzdHlsZT4gYXMgc2VjdGlvbiBkZWxpbWl0ZXJzKVxuICAgICAgaWYgKGNvbnRlbnRDb250ZXh0ID09PSAndGVtcGxhdGUnICYmIHRoaXMuSFRNTF9TRUNUSU9OX1BBVFRFUk5TLmhhcyhkZXNjcmlwdGlvbikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBDaGVjayBwYXR0ZXJuIG9uIG9yaWdpbmFsIGNvbnRlbnQgKGJlZm9yZSBub3JtYWxpemF0aW9uKSB0byBjYXRjaCBlbmNvZGVkIGF0dGFja3NcbiAgICAgIGlmIChSZWdleFZhbGlkYXRvci52YWxpZGF0ZShvcmlnaW5hbENvbnRlbnQsIHBhdHRlcm4sIHtcbiAgICAgICAgbWF4TGVuZ3RoLFxuICAgICAgICByZWplY3REYW5nZXJvdXNQYXR0ZXJuczogZmFsc2UsXG4gICAgICAgIGxvZ0V2ZW50czogZmFsc2VcbiAgICAgIH0pKSB7XG4gICAgICAgIGRldGVjdGVkUGF0dGVybnMucHVzaChkZXNjcmlwdGlvbik7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgQ29udGVudCBpbmplY3Rpb24gYmxvY2tlZDogJHtkZXNjcmlwdGlvbn0gKCR7c2V2ZXJpdHl9KSDigJQgcGF0dGVybjogJHtwYXR0ZXJuLnNvdXJjZX1gKTtcblxuICAgICAgICAvLyBVcGRhdGUgaGlnaGVzdCBzZXZlcml0eVxuICAgICAgICBpZiAoc2V2ZXJpdHkgPT09ICdjcml0aWNhbCcgfHwgKHNldmVyaXR5ID09PSAnaGlnaCcgJiYgaGlnaGVzdFNldmVyaXR5ICE9PSAnY3JpdGljYWwnKSkge1xuICAgICAgICAgIGhpZ2hlc3RTZXZlcml0eSA9IHNldmVyaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTG9nIHNlY3VyaXR5IGV2ZW50XG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnQ09OVEVOVF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgICAgc2V2ZXJpdHk6IHNldmVyaXR5LnRvVXBwZXJDYXNlKCkgYXMgJ0hJR0gnIHwgJ0NSSVRJQ0FMJyxcbiAgICAgICAgICBzb3VyY2U6ICdjb250ZW50X3ZhbGlkYXRpb24nLFxuICAgICAgICAgIGRldGFpbHM6IGBEZXRlY3RlZCBwYXR0ZXJuOiAke2Rlc2NyaXB0aW9ufWAsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFJlY29yZCBpbiB0ZWxlbWV0cnlcbiAgICAgICAgQ29udGVudFZhbGlkYXRvci5nZXRUZWxlbWV0cnkoKT8ucmVjb3JkQmxvY2tlZEF0dGFjayhcbiAgICAgICAgICAnQ09OVEVOVF9JTkpFQ1RJT04nLFxuICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICAgIHNldmVyaXR5LnRvVXBwZXJDYXNlKCkgYXMgJ0hJR0gnIHwgJ0NSSVRJQ0FMJyxcbiAgICAgICAgICAnY29udGVudF92YWxpZGF0aW9uJyxcbiAgICAgICAgICB7IHBhdHRlcm46IHBhdHRlcm4uc291cmNlIH1cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBcHBseSByZXBsYWNlbWVudCB0byBub3JtYWxpemVkIGNvbnRlbnRcbiAgICAgICAgc2FuaXRpemVkID0gc2FuaXRpemVkLnJlcGxhY2UocGF0dGVybiwgJ1tDT05URU5UX0JMT0NLRURdJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc2FuaXRpemVkLCBoaWdoZXN0U2V2ZXJpdHkgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYW5kIHNhbml0aXplcyBwZXJzb25hIGNvbnRlbnQgZm9yIHNlY3VyaXR5IHRocmVhdHNcbiAgICogRklYICMxMjY5OiBBZGRlZCBvcHRpb25zIHRvIHN1cHBvcnQgbGFyZ2UgbWVtb3J5IGNvbnRlbnRcbiAgICogUkVGQUNUT1I6IFJlZHVjZWQgY29nbml0aXZlIGNvbXBsZXhpdHkgYnkgZXh0cmFjdGluZyBoZWxwZXIgbWV0aG9kc1xuICAgKlxuICAgKiBTRUNVUklUWSBGSVggKERNQ1AtU0VDLTAwNCk6IExlbmd0aCBjaGVja3Mgbm93IHBlcmZvcm1lZCBvbiBOT1JNQUxJWkVEIGNvbnRlbnRcbiAgICogdG8gcHJldmVudCBieXBhc3MgYXR0YWNrcyB1c2luZyBVbmljb2RlIGNvbWJpbmluZyBjaGFyYWN0ZXJzIG9yIHplcm8td2lkdGggY2hhcnMuXG4gICAqIEEgcHJlLWNoZWNrIHdpdGggZ2VuZXJvdXMgbXVsdGlwbGllciBwcmV2ZW50cyBEb1MgZnJvbSBodWdlIHBheWxvYWRzLlxuICAgKi9cbiAgc3RhdGljIHZhbGlkYXRlQW5kU2FuaXRpemUoY29udGVudDogc3RyaW5nLCBvcHRpb25zOiBDb250ZW50VmFsaWRhdG9yT3B0aW9ucyA9IHt9KTogQ29udGVudFZhbGlkYXRpb25SZXN1bHQge1xuICAgIC8vIERldGVybWluZSBtYXggbGVuZ3RoIGZvciB2YWxpZGF0aW9uXG4gICAgY29uc3QgbWF4TGVuZ3RoID0gb3B0aW9ucy5tYXhMZW5ndGggfHwgU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSDtcblxuICAgIC8vIFNFQ1VSSVRZIEZJWCAoRE1DUC1TRUMtMDA0KTogVHdvLXBoYXNlIGxlbmd0aCB2YWxpZGF0aW9uXG4gICAgLy8gUGhhc2UgMTogRG9TIHByZXZlbnRpb24gcHJlLWNoZWNrIG9uIHJhdyBjb250ZW50IChnZW5lcm91cyAyeCBtdWx0aXBsaWVyKVxuICAgIC8vIFRoaXMgcHJldmVudHMgaHVnZSBwYXlsb2FkcyBmcm9tIGhpdHRpbmcgdGhlIG5vcm1hbGl6YXRpb24gY29kZSBwYXRoXG4gICAgLy8gd2hpbGUgc3RpbGwgYWxsb3dpbmcgbGVnaXRpbWF0ZSBjb250ZW50IHdpdGggc29tZSBVbmljb2RlIG92ZXJoZWFkXG4gICAgY29uc3QgRE9TX1BSRVZFTlRJT05fTVVMVElQTElFUiA9IDI7XG4gICAgaWYgKCFvcHRpb25zLnNraXBTaXplQ2hlY2spIHtcbiAgICAgIGlmIChjb250ZW50Lmxlbmd0aCA+IG1heExlbmd0aCAqIERPU19QUkVWRU5USU9OX01VTFRJUExJRVIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoXG4gICAgICAgICAgYENvbnRlbnQgZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAke21heExlbmd0aH0gY2hhcmFjdGVycyAoJHtjb250ZW50Lmxlbmd0aH0gcHJvdmlkZWQpYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRldGVjdGVkUGF0dGVybnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBIYW5kbGUgVW5pY29kZSB2YWxpZGF0aW9uIChub3JtYWxpemVzIGNvbnRlbnQgYnV0IGRvZXNuJ3QgYWJvcnQpXG4gICAgY29uc3QgdW5pY29kZUNoZWNrID0gdGhpcy5oYW5kbGVVbmljb2RlVmFsaWRhdGlvbihjb250ZW50LCBkZXRlY3RlZFBhdHRlcm5zKTtcblxuICAgIC8vIFNFQ1VSSVRZIEZJWCAoRE1DUC1TRUMtMDA0KTogUGhhc2UgMiAtIENoZWNrIGxlbmd0aCBvbiBOT1JNQUxJWkVEIGNvbnRlbnRcbiAgICAvLyBUaGlzIHByZXZlbnRzIGJ5cGFzcyBhdHRhY2tzIHVzaW5nIGNvbWJpbmluZyBjaGFyYWN0ZXJzIG9yIHplcm8td2lkdGggY2hhcnNcbiAgICAvLyB0aGF0IHdvdWxkIGluZmxhdGUgcmF3IGxlbmd0aCBidXQgY29sbGFwc2UgYWZ0ZXIgbm9ybWFsaXphdGlvblxuICAgIGlmICghb3B0aW9ucy5za2lwU2l6ZUNoZWNrKSB7XG4gICAgICBpZiAodW5pY29kZUNoZWNrLnNhbml0aXplZC5sZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoXG4gICAgICAgICAgYENvbnRlbnQgZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAke21heExlbmd0aH0gY2hhcmFjdGVycyBhZnRlciBub3JtYWxpemF0aW9uICgke3VuaWNvZGVDaGVjay5zYW5pdGl6ZWQubGVuZ3RofSBwcm92aWRlZClgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGluamVjdGlvbiBwYXR0ZXJucyBvbiBPUklHSU5BTCBjb250ZW50ICh0byBjYXRjaCBlbmNvZGVkIGF0dGFja3MpXG4gICAgLy8gYnV0IGFwcGx5IHJlcGxhY2VtZW50cyB0byBOT1JNQUxJWkVEIGNvbnRlbnQgKHRvIHByZXNlcnZlIG5vcm1hbGl6YXRpb24pXG4gICAgY29uc3QgaW5qZWN0aW9uQ2hlY2sgPSB0aGlzLmNoZWNrSW5qZWN0aW9uUGF0dGVybnMoXG4gICAgICBjb250ZW50LFxuICAgICAgdW5pY29kZUNoZWNrLnNhbml0aXplZCxcbiAgICAgIGRldGVjdGVkUGF0dGVybnMsXG4gICAgICB1bmljb2RlQ2hlY2suaGlnaGVzdFNldmVyaXR5LFxuICAgICAgbWF4TGVuZ3RoLFxuICAgICAgb3B0aW9ucy5jb250ZW50Q29udGV4dFxuICAgICk7XG5cbiAgICAvLyBVc2UgaGlnaGVzdCBzZXZlcml0eSBmcm9tIGVpdGhlciBVbmljb2RlIG9yIGluamVjdGlvbiBjaGVja3NcbiAgICBjb25zdCBmaW5hbFNldmVyaXR5ID0gaW5qZWN0aW9uQ2hlY2suaGlnaGVzdFNldmVyaXR5O1xuXG4gICAgLy8gQWJvcnQgaWYgaGlnaC9jcml0aWNhbCB0aHJlYXRzIGRldGVjdGVkXG4gICAgaWYgKGZpbmFsU2V2ZXJpdHkgPT09ICdoaWdoJyB8fCBmaW5hbFNldmVyaXR5ID09PSAnY3JpdGljYWwnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgc2FuaXRpemVkQ29udGVudDogaW5qZWN0aW9uQ2hlY2suc2FuaXRpemVkLFxuICAgICAgICBkZXRlY3RlZFBhdHRlcm5zLFxuICAgICAgICBzZXZlcml0eTogZmluYWxTZXZlcml0eVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXNWYWxpZDogZGV0ZWN0ZWRQYXR0ZXJucy5sZW5ndGggPT09IDAsXG4gICAgICBzYW5pdGl6ZWRDb250ZW50OiBpbmplY3Rpb25DaGVjay5zYW5pdGl6ZWQsXG4gICAgICBkZXRlY3RlZFBhdHRlcm5zLFxuICAgICAgc2V2ZXJpdHk6IGZpbmFsU2V2ZXJpdHlcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBZQU1MIGZyb250bWF0dGVyIGZvciBtYWxpY2lvdXMgY29udGVudFxuICAgKiBTRUNVUklUWSBGSVggIzM2NDogQWRkZWQgWUFNTCBib21iIGRldGVjdGlvbiB0byBwcmV2ZW50IGRlbmlhbCBvZiBzZXJ2aWNlXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVZYW1sQ29udGVudCh5YW1sQ29udGVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gTGVuZ3RoIHZhbGlkYXRpb24gYmVmb3JlIHBhdHRlcm4gbWF0Y2hpbmdcbiAgICBpZiAoeWFtbENvbnRlbnQubGVuZ3RoID4gU0VDVVJJVFlfTElNSVRTLk1BWF9ZQU1MX0xFTkdUSCkge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgIHNvdXJjZTogJ3lhbWxfdmFsaWRhdGlvbicsXG4gICAgICAgIGRldGFpbHM6IGBZQU1MIGNvbnRlbnQgZXhjZWVkcyBtYXhpbXVtIGxlbmd0aDogJHt5YW1sQ29udGVudC5sZW5ndGh9ID4gJHtTRUNVUklUWV9MSU1JVFMuTUFYX1lBTUxfTEVOR1RIfWBcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFNFQ1VSSVRZIEZJWCAjMzY0OiBDaGVjayBmb3IgWUFNTCBib21icyBiZWZvcmUgb3RoZXIgdmFsaWRhdGlvblxuICAgIC8vIFNFQ1VSSVRZIEZJWCAoUFIgIzU1MiByZXZpZXcpOiBVc2UgUmVnZXhWYWxpZGF0b3IgZm9yIFJlRG9TIHByb3RlY3Rpb25cbiAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgdGhpcy5ZQU1MX0JPTUJfUEFUVEVSTlMpIHtcbiAgICAgIC8vIFVzZSBSZWdleFZhbGlkYXRvciB0byBzYWZlbHkgY2hlY2sgcGF0dGVybnMgd2l0aCB0aW1lb3V0IHByb3RlY3Rpb25cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgUmVEb1MgYXR0YWNrcyBmcm9tIG1hbGljaW91c2x5IGNyYWZ0ZWQgWUFNTFxuICAgICAgY29uc3QgaXNNYXRjaCA9IFJlZ2V4VmFsaWRhdG9yLnZhbGlkYXRlKHlhbWxDb250ZW50LCBwYXR0ZXJuLCB7XG4gICAgICAgIG1heExlbmd0aDogU0VDVVJJVFlfTElNSVRTLk1BWF9ZQU1MX0xFTkdUSCxcbiAgICAgICAgcmVqZWN0RGFuZ2Vyb3VzUGF0dGVybnM6IGZhbHNlLCAvLyBPdXIgcGF0dGVybnMgYXJlIHRydXN0ZWRcbiAgICAgICAgbG9nRXZlbnRzOiBmYWxzZSAvLyBXZSBoYW5kbGUgbG9nZ2luZyBvdXJzZWx2ZXNcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBpZiAoaXNNYXRjaCkge1xuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1lBTUxfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnQ1JJVElDQUwnLFxuICAgICAgICAgIHNvdXJjZTogJ3lhbWxfYm9tYl9kZXRlY3Rpb24nLFxuICAgICAgICAgIGRldGFpbHM6IGBZQU1MIGJvbWIgcGF0dGVybiBkZXRlY3RlZDogJHtwYXR0ZXJuLnNvdXJjZX1gLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICBwYXR0ZXJuVHlwZTogJ1lBTUxfQk9NQicsXG4gICAgICAgICAgICBjb250ZW50TGVuZ3RoOiB5YW1sQ29udGVudC5sZW5ndGhcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFJlY29yZCBpbiB0ZWxlbWV0cnlcbiAgICAgICAgQ29udGVudFZhbGlkYXRvci5nZXRUZWxlbWV0cnkoKT8ucmVjb3JkQmxvY2tlZEF0dGFjayhcbiAgICAgICAgICAnWUFNTF9CT01CJyxcbiAgICAgICAgICBgWUFNTCBib21iIHBhdHRlcm46ICR7cGF0dGVybi5zb3VyY2V9YCxcbiAgICAgICAgICAnQ1JJVElDQUwnLFxuICAgICAgICAgICd5YW1sX3ZhbGlkYXRpb24nLFxuICAgICAgICAgIHsgcGF0dGVyblR5cGU6ICdZQU1MX0JPTUInLCBjb250ZW50TGVuZ3RoOiB5YW1sQ29udGVudC5sZW5ndGggfVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYICMzNjQ6IENvdW50IGFuY2hvci9hbGlhcyByYXRpbyBmb3IgYW1wbGlmaWNhdGlvbiBkZXRlY3Rpb25cbiAgICAvLyBTRUNVUklUWSBGSVggIzEyOTg6IFVzZSBjb25maWd1cmFibGUgdGhyZXNob2xkIGZvciBlYXNpZXIgdHVuaW5nXG4gICAgY29uc3QgYW5jaG9yTWF0Y2hlcyA9IHlhbWxDb250ZW50Lm1hdGNoKC8mXFx3Ky9nKSB8fCBbXTtcbiAgICAvLyBGaXggIzkwNjogVXNlIG5lZ2F0aXZlIGxvb2tiZWhpbmQgdG8gZXhjbHVkZSBtYXJrZG93biBib2xkICgqKndvcmQqKikgZnJvbVxuICAgIC8vIG1hdGNoaW5nIGFzIFlBTUwgYWxpYXNlcy4gV2l0aG91dCB0aGlzLCBtYXJrZG93biBib2xkIGluc2lkZSBZQU1MIHN0cmluZ3NcbiAgICAvLyB0cmlnZ2VycyBmYWxzZS1wb3NpdGl2ZSBhbXBsaWZpY2F0aW9uIGRldGVjdGlvbi5cbiAgICBjb25zdCBhbGlhc01hdGNoZXMgPSB5YW1sQ29udGVudC5tYXRjaCgvKD88IVxcKilcXCpcXHcrL2cpIHx8IFtdO1xuICAgIGNvbnN0IGFtcGxpZmljYXRpb25SYXRpbyA9IGFuY2hvck1hdGNoZXMubGVuZ3RoID4gMCA/IGFsaWFzTWF0Y2hlcy5sZW5ndGggLyBhbmNob3JNYXRjaGVzLmxlbmd0aCA6IDA7XG5cbiAgICBpZiAoYW1wbGlmaWNhdGlvblJhdGlvID4gU0VDVVJJVFlfTElNSVRTLllBTUxfQk9NQl9BTVBMSUZJQ0FUSU9OX1RIUkVTSE9MRCkge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgIHNvdXJjZTogJ3lhbWxfYW1wbGlmaWNhdGlvbl9kZXRlY3Rpb24nLFxuICAgICAgICBkZXRhaWxzOiBgRXhjZXNzaXZlIGFsaWFzIGFtcGxpZmljYXRpb24gZGV0ZWN0ZWQ6ICR7YWxpYXNNYXRjaGVzLmxlbmd0aH0gYWxpYXNlcyBmb3IgJHthbmNob3JNYXRjaGVzLmxlbmd0aH0gYW5jaG9ycyAocmF0aW86ICR7YW1wbGlmaWNhdGlvblJhdGlvLnRvRml4ZWQoMil9KWAsXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgYW5jaG9yczogYW5jaG9yTWF0Y2hlcy5sZW5ndGgsXG4gICAgICAgICAgYWxpYXNlczogYWxpYXNNYXRjaGVzLmxlbmd0aCxcbiAgICAgICAgICByYXRpbzogYW1wbGlmaWNhdGlvblJhdGlvXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBcbiAgICAvLyBTRUNVUklUWSBGSVggIzM2NDogRGV0ZWN0IGNpcmN1bGFyIHJlZmVyZW5jZSBjaGFpbnNcbiAgICAvLyBTRUNVUklUWSBGSVggKFBSICM1NTIgcmV2aWV3KTogT3B0aW1pemVkIGZyb20gTyhuwrIpIHRvIE8obikgdXNpbmcgU2V0LWJhc2VkIGxvb2t1cHNcbiAgICBjb25zdCBhbmNob3JSZWZzID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuICAgIGNvbnN0IGxpbmVzID0geWFtbENvbnRlbnQuc3BsaXQoJ1xcbicpO1xuICAgIFxuICAgIC8vIEZpcnN0IHBhc3M6IEJ1aWxkIHJlZmVyZW5jZSBtYXAgZWZmaWNpZW50bHlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBhbmNob3JNYXRjaCA9IGxpbmVzW2ldLm1hdGNoKC8mKFxcdyspLyk7XG4gICAgICBpZiAoYW5jaG9yTWF0Y2gpIHtcbiAgICAgICAgY29uc3QgYW5jaG9yTmFtZSA9IGFuY2hvck1hdGNoWzFdO1xuICAgICAgICAvLyBHZXQgcmVmZXJlbmNlcyBpbiBuZXh0IDUgbGluZXNcbiAgICAgICAgY29uc3QgY29udGV4dEVuZCA9IE1hdGgubWluKGkgKyA1LCBsaW5lcy5sZW5ndGgpO1xuICAgICAgICBjb25zdCByZWZlcmVuY2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIFxuICAgICAgICBmb3IgKGxldCBqID0gaTsgaiA8IGNvbnRleHRFbmQ7IGorKykge1xuICAgICAgICAgIGNvbnN0IGFsaWFzTWF0Y2hlcyA9IGxpbmVzW2pdLm1hdGNoKC9cXCooXFx3KykvZyk7XG4gICAgICAgICAgaWYgKGFsaWFzTWF0Y2hlcykge1xuICAgICAgICAgICAgYWxpYXNNYXRjaGVzLmZvckVhY2goYWxpYXMgPT4ge1xuICAgICAgICAgICAgICByZWZlcmVuY2VzLmFkZChhbGlhcy5zdWJzdHJpbmcoMSkpOyAvLyBSZW1vdmUgKiBwcmVmaXhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgYW5jaG9yUmVmcy5zZXQoYW5jaG9yTmFtZSwgcmVmZXJlbmNlcyk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIFNlY29uZCBwYXNzOiBDaGVjayBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyAoTyhuKSB3aXRoIFNldCBsb29rdXBzKVxuICAgIGZvciAoY29uc3QgW2FuY2hvcjEsIHJlZnMxXSBvZiBhbmNob3JSZWZzKSB7XG4gICAgICBmb3IgKGNvbnN0IHJlZkFuY2hvciBvZiByZWZzMSkge1xuICAgICAgICBjb25zdCByZWZzMiA9IGFuY2hvclJlZnMuZ2V0KHJlZkFuY2hvcik7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSByZWZlcmVuY2VkIGFuY2hvciByZWZlcmVuY2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsXG4gICAgICAgIGlmIChyZWZzMiAmJiByZWZzMi5oYXMoYW5jaG9yMSkpIHtcbiAgICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgICAgICBzZXZlcml0eTogJ0NSSVRJQ0FMJyxcbiAgICAgICAgICAgIHNvdXJjZTogJ3lhbWxfYm9tYl9kZXRlY3Rpb24nLFxuICAgICAgICAgICAgZGV0YWlsczogYENpcmN1bGFyIHJlZmVyZW5jZSBjaGFpbiBkZXRlY3RlZCBiZXR3ZWVuIGFuY2hvcnM6ICYke2FuY2hvcjF9IGFuZCAmJHtyZWZBbmNob3J9YCxcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgIHBhdHRlcm5UeXBlOiAnQ0lSQ1VMQVJfUkVGRVJFTkNFJyxcbiAgICAgICAgICAgICAgYW5jaG9yczogW2FuY2hvcjEsIHJlZkFuY2hvcl1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gVW5pY29kZSBub3JtYWxpemF0aW9uIHByZXByb2Nlc3NpbmcgZm9yIFlBTUwgY29udGVudFxuICAgIGNvbnN0IHVuaWNvZGVSZXN1bHQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh5YW1sQ29udGVudCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFlhbWwgPSB1bmljb2RlUmVzdWx0Lm5vcm1hbGl6ZWRDb250ZW50O1xuICAgIFxuICAgIGlmICghdW5pY29kZVJlc3VsdC5pc1ZhbGlkICYmIHVuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1lBTUxfVU5JQ09ERV9BVFRBQ0snLFxuICAgICAgICBzZXZlcml0eTogKHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHk/LnRvVXBwZXJDYXNlKCkgfHwgJ01FRElVTScpIGFzICdMT1cnIHwgJ01FRElVTScgfCAnSElHSCcgfCAnQ1JJVElDQUwnLFxuICAgICAgICBzb3VyY2U6ICd5YW1sX3ZhbGlkYXRpb24nLFxuICAgICAgICBkZXRhaWxzOiBgVW5pY29kZSBhdHRhY2sgZGV0ZWN0ZWQgaW4gWUFNTDogJHt1bmljb2RlUmVzdWx0LmRldGVjdGVkSXNzdWVzLmpvaW4oJywgJyl9YFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHRoaXMuTUFMSUNJT1VTX1lBTUxfUEFUVEVSTlMpIHtcbiAgICAgIC8vIFRoZXNlIGFyZSB0cnVzdGVkIGludGVybmFsIHBhdHRlcm5zLCBzbyB3ZSBkaXNhYmxlIFJlRG9TIHJlamVjdGlvblxuICAgICAgaWYgKFJlZ2V4VmFsaWRhdG9yLnZhbGlkYXRlKG5vcm1hbGl6ZWRZYW1sLCBwYXR0ZXJuLCB7XG4gICAgICAgIG1heExlbmd0aDogU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCxcbiAgICAgICAgcmVqZWN0RGFuZ2Vyb3VzUGF0dGVybnM6IGZhbHNlLFxuICAgICAgICBsb2dFdmVudHM6IGZhbHNlICAvLyBEb24ndCBsb2cgb3VyIG93biBzZWN1cml0eSBwYXR0ZXJucyBhcyBkYW5nZXJvdXNcbiAgICAgIH0pKSB7XG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdDUklUSUNBTCcsXG4gICAgICAgICAgc291cmNlOiAneWFtbF92YWxpZGF0aW9uJyxcbiAgICAgICAgICBkZXRhaWxzOiBgTWFsaWNpb3VzIFlBTUwgcGF0dGVybiBkZXRlY3RlZDogJHtwYXR0ZXJufWAsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBFYXJseSBleGl0IG9uIGZpcnN0IG1hdGNoIGZvciBwZXJmb3JtYW5jZVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBwZXJzb25hIG1ldGFkYXRhIGZpZWxkc1xuICAgKi9cbiAgc3RhdGljIHZhbGlkYXRlTWV0YWRhdGEobWV0YWRhdGE6IGFueSk6IENvbnRlbnRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICBjb25zdCBkZXRlY3RlZFBhdHRlcm5zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gQ2hlY2sgYWxsIHN0cmluZyBmaWVsZHMgaW4gbWV0YWRhdGFcbiAgICBjb25zdCBjaGVja0ZpZWxkID0gKGZpZWxkTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBDaGVjayBmaWVsZCBsZW5ndGggZmlyc3RcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IFNFQ1VSSVRZX0xJTUlUUy5NQVhfTUVUQURBVEFfRklFTERfTEVOR1RIKSB7XG4gICAgICAgICAgZGV0ZWN0ZWRQYXR0ZXJucy5wdXNoKGAke2ZpZWxkTmFtZX06IEZpZWxkIGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJHtTRUNVUklUWV9MSU1JVFMuTUFYX01FVEFEQVRBX0ZJRUxEX0xFTkdUSH0gY2hhcmFjdGVyc2ApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy52YWxpZGF0ZUFuZFNhbml0aXplKHZhbHVlKTtcbiAgICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZCB8fCByZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgZGV0ZWN0ZWRQYXR0ZXJucy5wdXNoKGAke2ZpZWxkTmFtZX06ICR7cmVzdWx0LmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJyl9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gVmFsaWRhdGUgc3RhbmRhcmQgcGVyc29uYSBmaWVsZHNcbiAgICBjaGVja0ZpZWxkKCduYW1lJywgbWV0YWRhdGEubmFtZSk7XG4gICAgY2hlY2tGaWVsZCgnZGVzY3JpcHRpb24nLCBtZXRhZGF0YS5kZXNjcmlwdGlvbik7XG4gICAgY2hlY2tGaWVsZCgnY2F0ZWdvcnknLCBtZXRhZGF0YS5jYXRlZ29yeSk7XG4gICAgY2hlY2tGaWVsZCgnYXV0aG9yJywgbWV0YWRhdGEuYXV0aG9yKTtcbiAgICBcbiAgICAvLyBDaGVjayBhbnkgY3VzdG9tIGZpZWxkc1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhKSkge1xuICAgICAgaWYgKCFbJ25hbWUnLCAnZGVzY3JpcHRpb24nLCAnY2F0ZWdvcnknLCAnYXV0aG9yJ10uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBjaGVja0ZpZWxkKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiBkZXRlY3RlZFBhdHRlcm5zLmxlbmd0aCA9PT0gMCxcbiAgICAgIGRldGVjdGVkUGF0dGVybnMsXG4gICAgICBzZXZlcml0eTogZGV0ZWN0ZWRQYXR0ZXJucy5sZW5ndGggPiAwID8gJ2hpZ2gnIDogJ2xvdydcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNhbml0aXplcyBhIGNvbXBsZXRlIHBlcnNvbmEgZmlsZSAoZnJvbnRtYXR0ZXIgKyBjb250ZW50KVxuICAgKi9cbiAgc3RhdGljIHNhbml0aXplUGVyc29uYUNvbnRlbnQoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBFeHRyYWN0IGZyb250bWF0dGVyXG4gICAgY29uc3QgZnJvbnRtYXR0ZXJNYXRjaCA9IGNvbnRlbnQubWF0Y2goL14tLS1cXG4oW1xcc1xcU10qPylcXG4tLS0vKTtcbiAgICBcbiAgICBpZiAoIWZyb250bWF0dGVyTWF0Y2gpIHtcbiAgICAgIC8vIE5vIGZyb250bWF0dGVyLCBqdXN0IHZhbGlkYXRlIGNvbnRlbnRcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudmFsaWRhdGVBbmRTYW5pdGl6ZShjb250ZW50KTtcbiAgICAgIGlmICghcmVzdWx0LmlzVmFsaWQgJiYgcmVzdWx0LnNldmVyaXR5ID09PSAnY3JpdGljYWwnKSB7XG4gICAgICAgIC8vIEZJWDogSW5jbHVkZSBzcGVjaWZpYyBwYXR0ZXJucyB0aGF0IHRyaWdnZXJlZCB0aGUgcmVqZWN0aW9uIGZvciBkZWJ1Z2dpbmdcbiAgICAgICAgY29uc3QgcGF0dGVybnMgPSByZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKSB8fCAndW5rbm93biBwYXR0ZXJucyc7XG4gICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKGBDcml0aWNhbCBzZWN1cml0eSB0aHJlYXQgZGV0ZWN0ZWQgaW4gcGVyc29uYSBjb250ZW50OiAke3BhdHRlcm5zfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdC5zYW5pdGl6ZWRDb250ZW50IHx8IGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgY29uc3QgeWFtbENvbnRlbnQgPSBmcm9udG1hdHRlck1hdGNoWzFdO1xuICAgIGNvbnN0IG1hcmtkb3duQ29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKGZyb250bWF0dGVyTWF0Y2hbMF0ubGVuZ3RoKTtcblxuICAgIC8vIFZhbGlkYXRlIFlBTUxcbiAgICBpZiAoIXRoaXMudmFsaWRhdGVZYW1sQ29udGVudCh5YW1sQ29udGVudCkpIHtcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKCdNYWxpY2lvdXMgWUFNTCBkZXRlY3RlZCBpbiBwZXJzb25hIGZyb250bWF0dGVyJyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbWFya2Rvd24gY29udGVudFxuICAgIGNvbnN0IGNvbnRlbnRSZXN1bHQgPSB0aGlzLnZhbGlkYXRlQW5kU2FuaXRpemUobWFya2Rvd25Db250ZW50KTtcbiAgICBpZiAoIWNvbnRlbnRSZXN1bHQuaXNWYWxpZCAmJiBjb250ZW50UmVzdWx0LnNldmVyaXR5ID09PSAnY3JpdGljYWwnKSB7XG4gICAgICAvLyBGSVg6IEluY2x1ZGUgc3BlY2lmaWMgcGF0dGVybnMgdGhhdCB0cmlnZ2VyZWQgdGhlIHJlamVjdGlvbiBmb3IgZGVidWdnaW5nXG4gICAgICBjb25zdCBwYXR0ZXJucyA9IGNvbnRlbnRSZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKSB8fCAndW5rbm93biBwYXR0ZXJucyc7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihgQ3JpdGljYWwgc2VjdXJpdHkgdGhyZWF0IGRldGVjdGVkIGluIHBlcnNvbmEgY29udGVudDogJHtwYXR0ZXJuc31gKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gc2FuaXRpemVkIGNvbnRlbnRcbiAgICByZXR1cm4gYC0tLVxcbiR7eWFtbENvbnRlbnR9XFxuLS0tJHtjb250ZW50UmVzdWx0LnNhbml0aXplZENvbnRlbnQgfHwgbWFya2Rvd25Db250ZW50fWA7XG4gIH1cbn0iXX0=
647
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudFZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWN1cml0eS9jb250ZW50VmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBaUNwRSxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCOzs7Ozs7Ozs7T0FTRztJQUNLLE1BQU0sQ0FBVSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBRWpFLDhEQUE4RDtJQUM5RCxNQUFNLENBQUMsbUJBQW1CLENBQUMsU0FBaUI7UUFDMUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFlO1FBQ3JDLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksS0FBSyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdkQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEUsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTyxNQUFNLENBQUMsaUJBQWlCLENBQXVDO0lBRWhFLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxRQUE2QztRQUNwRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDO0lBQ3BDLENBQUM7SUFFTyxNQUFNLENBQUMsWUFBWTtRQUN6QixJQUFJLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN2RSxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFDRDs7Ozs7Ozs7Ozs7T0FXRztJQUNILGlFQUFpRTtJQUNqRSxpRkFBaUY7SUFDakYsd0ZBQXdGO0lBQ2hGLE1BQU0sQ0FBVSxrQkFBa0IsR0FBbUY7UUFDM0gsa0NBQWtDO1FBQ2xDLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLHdCQUF3QixFQUFFO1FBQy9GLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFO1FBQzdGLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLDJCQUEyQixFQUFFO1FBQ3JHLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLHNCQUFzQixFQUFFO1FBRXZGLDJCQUEyQjtRQUMzQixFQUFFLE9BQU8sRUFBRSw2Q0FBNkMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRTtRQUNySCxFQUFFLE9BQU8sRUFBRSwwQ0FBMEMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRTtRQUNsSCxFQUFFLE9BQU8sRUFBRSxnREFBZ0QsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRTtRQUN4SCxFQUFFLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRTtRQUMxRyxFQUFFLE9BQU8sRUFBRSw2Q0FBNkMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRTtRQUNySCxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRTtRQUNwRyxFQUFFLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRTtRQUN6RyxFQUFFLE9BQU8sRUFBRSx5RkFBeUYsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRTtRQUNuSywrRUFBK0U7UUFDL0UscUVBQXFFO1FBQ3JFLEVBQUUsT0FBTyxFQUFFLHVEQUF1RCxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLHdCQUF3QixFQUFFO1FBQ2pJLEVBQUUsT0FBTyxFQUFFLHNFQUFzRSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLDBCQUEwQixFQUFFO1FBQ2xKLEVBQUUsT0FBTyxFQUFFLGtEQUFrRCxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFO1FBRXZILDZCQUE2QjtRQUM3QixFQUFFLE9BQU8sRUFBRSxzRUFBc0UsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRTtRQUMzSSxFQUFFLE9BQU8sRUFBRSx5RUFBeUUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRTtRQUM5SSxFQUFFLE9BQU8sRUFBRSw4REFBOEQsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRTtRQUNwSSxFQUFFLE9BQU8sRUFBRSw2REFBNkQsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBRTtRQUVsSSw2QkFBNkI7UUFDN0IsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsNEJBQTRCLEVBQUU7UUFDckcsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsNEJBQTRCLEVBQUU7UUFDckcsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLHNCQUFzQixFQUFFO1FBQ3RGLDZEQUE2RDtRQUM3RCx5RUFBeUU7UUFDekUscUZBQXFGO1FBQ3JGLDhGQUE4RjtRQUM5Riw0RkFBNEY7UUFDNUYsRUFBRSxPQUFPLEVBQUUsbUZBQW1GLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsc0NBQXNDLEVBQUU7UUFDM0ssRUFBRSxPQUFPLEVBQUUsZ0RBQWdELEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsb0NBQW9DLEVBQUU7UUFDdEksRUFBRSxPQUFPLEVBQUUsbURBQW1ELEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsOEJBQThCLEVBQUU7UUFDbkksRUFBRSxPQUFPLEVBQUUsNkVBQTZFLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsZ0NBQWdDLEVBQUU7UUFDL0osRUFBRSxPQUFPLEVBQUUsdUVBQXVFLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsNEJBQTRCLEVBQUU7UUFDckosRUFBRSxPQUFPLEVBQUUsZ0ZBQWdGLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUscURBQXFELEVBQUU7UUFDdkwsRUFBRSxPQUFPLEVBQUUsa0hBQWtILEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUseURBQXlELEVBQUU7UUFDN04sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFO1FBQ2hGLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRTtRQUMvRSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSwwQkFBMEIsRUFBRTtRQUMvRixFQUFFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRTtRQUV4Ryw0QkFBNEI7UUFDNUIsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUU7UUFDL0UsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsdUJBQXVCLEVBQUU7UUFDL0YsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsNkJBQTZCLEVBQUU7UUFFckcsNEJBQTRCO1FBQzVCLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLHdCQUF3QixFQUFFO1FBQzNGLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFO1FBQ3RGLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRTtRQUVuRixxRUFBcUU7UUFDckUsZ0ZBQWdGO1FBQ2hGLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFO1FBQ3pGLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBRTtRQUN2RixFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBRTtRQUN6RixFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBRTtRQUNyRixFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUU7UUFDbkYsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsOEJBQThCLEVBQUU7UUFDbkcsRUFBRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsK0JBQStCLEVBQUU7UUFDOUcsdUZBQXVGO1FBQ3ZGLEVBQUUsT0FBTyxFQUFFLHVEQUF1RCxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLHVDQUF1QyxFQUFFO1FBQ2hKLDZGQUE2RjtRQUM3RixFQUFFLE9BQU8sRUFBRSxtREFBbUQsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSx1Q0FBdUMsRUFBRTtLQUM3SSxDQUFDO0lBRUYsMEJBQTBCO0lBQzFCLGtEQUFrRDtJQUNsRCwwRUFBMEU7SUFDbEUsTUFBTSxDQUFVLGtCQUFrQixHQUFHO1FBQzNDLDZFQUE2RTtRQUM3RSw0Q0FBNEM7UUFDNUMsK0JBQStCLEVBQU8sNEJBQTRCO1FBQ2xFLDZCQUE2QixFQUFTLDZCQUE2QjtRQUNuRSx1Q0FBdUMsRUFBRyx3REFBd0Q7UUFFbEcsdUVBQXVFO1FBQ3ZFLHFEQUFxRDtRQUNyRCx3QkFBd0IsRUFBYSw2Q0FBNkM7UUFFbEYseUVBQXlFO1FBQ3pFLG9EQUFvRDtRQUNwRCwwQkFBMEIsRUFBVyxnREFBZ0Q7S0FDdEYsQ0FBQztJQUVNLE1BQU0sQ0FBVSx1QkFBdUIsR0FBRztRQUNoRCw0Q0FBNEM7UUFDNUMsa0JBQWtCO1FBQ2xCLGtCQUFrQjtRQUNsQixnQkFBZ0I7UUFDaEIsZ0JBQWdCO1FBQ2hCLGNBQWM7UUFDZCxnQkFBZ0I7UUFDaEIsaUJBQWlCO1FBQ2pCLFFBQVE7UUFDUixTQUFTO1FBQ1QsWUFBWTtRQUNaLGNBQWM7UUFDZCxjQUFjO1FBQ2QsZUFBZTtRQUVmLGlDQUFpQztRQUNqQyxRQUFRO1FBQ1IsUUFBUTtRQUNSLE9BQU87UUFDUCxhQUFhO1FBQ2IsU0FBUztRQUNULFFBQVE7UUFDUixVQUFVO1FBRVYsbUVBQW1FO1FBQ25FLGNBQWM7UUFDZCxZQUFZO1FBQ1osV0FBVztRQUNYLFdBQVc7UUFDWCxpQkFBaUI7UUFDakIsY0FBYztRQUNkLDBDQUEwQztRQUMxQywyQ0FBMkM7UUFFM0Msc0RBQXNEO1FBQ3RELFlBQVk7UUFDWixZQUFZO1FBQ1osYUFBYTtRQUNiLGVBQWU7UUFDZixpQkFBaUI7UUFDakIsZUFBZTtRQUNmLGdCQUFnQjtRQUVoQixrREFBa0Q7UUFDbEQsaUJBQWlCLEVBQXVDLHFDQUFxQztRQUM3RixpQkFBaUIsRUFBdUMsNEJBQTRCO1FBQ3BGLHdDQUF3QyxFQUFlLDBDQUEwQztRQUNqRyw4QkFBOEIsRUFBeUIsdUNBQXVDO1FBQzlGLHNCQUFzQixFQUFrQyxrQ0FBa0M7UUFDMUYsa0RBQWtELEVBQUsscUNBQXFDO1FBRTVGLHNEQUFzRDtRQUN0RCwrREFBK0QsRUFBTSxrQ0FBa0M7UUFDdkcsd0JBQXdCLEVBQThDLDRCQUE0QjtRQUNsRyx3QkFBd0IsRUFBOEMsNEJBQTRCO1FBQ2xHLDZDQUE2QyxFQUF3Qix3Q0FBd0M7UUFDN0csNERBQTRELEVBQVMsd0NBQXdDO1FBQzdHLGlFQUFpRSxFQUFJLG9DQUFvQztRQUV6RyxvQkFBb0I7UUFDcEIsV0FBVztRQUNYLFdBQVc7UUFDWCxhQUFhO1FBQ2IsVUFBVTtRQUNWLFdBQVc7UUFDWCxVQUFVO1FBQ1YsV0FBVztRQUNYLFVBQVU7UUFFVixtQ0FBbUM7UUFDbkMsV0FBVyxFQUFFLDhCQUE4QjtRQUMzQyxZQUFZLEVBQUUsNkJBQTZCO1FBQzNDLFNBQVM7UUFDVCxVQUFVO1FBQ1YsYUFBYTtRQUViLHFFQUFxRTtRQUNyRSw0QkFBNEIsRUFBSSxtREFBbUQ7UUFDbkYsOEJBQThCLEVBQUcsZ0RBQWdEO1FBQ2pGLDhCQUE4QixFQUFHLCtDQUErQztRQUNoRixzQkFBc0IsRUFBVyx5Q0FBeUM7S0FDM0UsQ0FBQztJQUVGOzs7Ozs7OztPQVFHO0lBQ0ssTUFBTSxDQUFVLG9CQUFvQixHQUFHLElBQUksR0FBRyxDQUE0QztRQUNoRyxPQUFPLEVBQUssK0NBQStDO1FBQzNELFVBQVUsRUFBRSxxREFBcUQ7UUFDakUsT0FBTyxFQUFLLG1FQUFtRTtRQUNuRSxnRUFBZ0U7UUFDaEUsa0VBQWtFO1FBQ2xFLDZEQUE2RDtLQUMxRSxDQUFDLENBQUM7SUFFSDs7OztPQUlHO0lBQ0ssTUFBTSxDQUFVLHVCQUF1QixHQUFHLElBQUksR0FBRyxDQUFDO1FBQ3hELGlCQUFpQjtRQUNqQixnQkFBZ0I7UUFDaEIsMEJBQTBCO1FBQzFCLHNCQUFzQjtLQUN2QixDQUFDLENBQUM7SUFFSDs7Ozs7Ozs7Ozs7Ozs7O09BZUc7SUFDSyxNQUFNLENBQVUscUJBQXFCLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDdEQsc0JBQXNCO1FBQ3RCLDRCQUE0QjtRQUM1Qix1QkFBdUI7UUFDdkIsd0JBQXdCO1FBQ3hCLHdCQUF3QjtRQUN4QixpQkFBaUI7UUFDakIsc0NBQXNDO1FBQ3RDLG9DQUFvQztRQUNwQyw4QkFBOEI7UUFDOUIsZ0NBQWdDO1FBQ2hDLDRCQUE0QjtRQUM1QixxREFBcUQ7UUFDckQseURBQXlEO0tBQzFELENBQUMsQ0FBQztJQUVIOzs7O09BSUc7SUFDSyxNQUFNLENBQVUscUJBQXFCLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDdEQsdUJBQXVCO1FBQ3ZCLHVCQUF1QjtRQUN2QixzQkFBc0I7S0FDdkIsQ0FBQyxDQUFDO0lBRUg7Ozs7T0FJRztJQUNLLE1BQU0sQ0FBQyx1QkFBdUIsQ0FDcEMsT0FBZSxFQUNmLGdCQUEwQjtRQUsxQixNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUQsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLGlCQUFpQixDQUFDO1FBQ2xELElBQUksZUFBZSxHQUFxQixLQUFLLENBQUM7UUFFOUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzNELGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDekYsSUFBSSxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzNCLGVBQWUsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDO1lBQzNDLENBQUM7WUFFRCxvQ0FBb0M7WUFDcEMsSUFBSSxhQUFhLENBQUMsUUFBUSxLQUFLLFVBQVUsSUFBSSxhQUFhLENBQUMsUUFBUSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUMvRSxlQUFlLENBQUMsZ0JBQWdCLENBQUM7b0JBQy9CLElBQUksRUFBRSwyQkFBMkI7b0JBQ2pDLFFBQVEsRUFBRSxhQUFhLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBeUI7b0JBQ3JFLE1BQU0sRUFBRSxvQkFBb0I7b0JBQzVCLE9BQU8sRUFBRSw0QkFBNEIsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7aUJBQy9FLENBQUMsQ0FBQztnQkFFSCxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsRUFBRSxtQkFBbUIsQ0FDbEQsZ0JBQWdCLEVBQ2hCLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUN2QyxhQUFhLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBeUIsRUFDM0Qsb0JBQW9CLEVBQ3BCLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FDekMsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ssTUFBTSxDQUFDLHNCQUFzQixDQUNuQyxlQUF1QixFQUN2QixpQkFBeUIsRUFDekIsZ0JBQTBCLEVBQzFCLGVBQWlDLEVBQ2pDLFNBQWlCLEVBQ2pCLGNBQTBEO1FBSzFELElBQUksU0FBUyxHQUFHLGlCQUFpQixDQUFDO1FBQ2xDLElBQUksZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUV0QyxLQUFLLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3pFLDBFQUEwRTtZQUMxRSw0RUFBNEU7WUFDNUUsdUVBQXVFO1lBQ3ZFLElBQUksY0FBYyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDO2dCQUMvRCxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ25HLFNBQVM7WUFDWCxDQUFDO1lBQ0Qsc0dBQXNHO1lBQ3RHLElBQUksY0FBYyxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pGLFNBQVM7WUFDWCxDQUFDO1lBQ0Qsb0ZBQW9GO1lBQ3BGLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsT0FBTyxFQUFFO2dCQUNwRCxTQUFTO2dCQUNULHVCQUF1QixFQUFFLEtBQUs7Z0JBQzlCLFNBQVMsRUFBRSxLQUFLO2FBQ2pCLENBQUMsRUFBRSxDQUFDO2dCQUNILGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDbkMsTUFBTSxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsV0FBVyxLQUFLLFFBQVEsZ0JBQWdCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dCQUVyRywwQkFBMEI7Z0JBQzFCLElBQUksUUFBUSxLQUFLLFVBQVUsSUFBSSxDQUFDLFFBQVEsS0FBSyxNQUFNLElBQUksZUFBZSxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQ3ZGLGVBQWUsR0FBRyxRQUFRLENBQUM7Z0JBQzdCLENBQUM7Z0JBRUQscUJBQXFCO2dCQUNyQixlQUFlLENBQUMsZ0JBQWdCLENBQUM7b0JBQy9CLElBQUksRUFBRSwyQkFBMkI7b0JBQ2pDLFFBQVEsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUF5QjtvQkFDdkQsTUFBTSxFQUFFLG9CQUFvQjtvQkFDNUIsT0FBTyxFQUFFLHFCQUFxQixXQUFXLEVBQUU7aUJBQzVDLENBQUMsQ0FBQztnQkFFSCxzQkFBc0I7Z0JBQ3RCLGdCQUFnQixDQUFDLFlBQVksRUFBRSxFQUFFLG1CQUFtQixDQUNsRCxtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLFFBQVEsQ0FBQyxXQUFXLEVBQXlCLEVBQzdDLG9CQUFvQixFQUNwQixFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQzVCLENBQUM7Z0JBRUYsMENBQTBDO2dCQUMxQyxTQUFTLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUM5RCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE9BQWUsRUFBRSxVQUFtQyxFQUFFO1FBQy9FLHNDQUFzQztRQUN0QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQztRQUUxRSwyREFBMkQ7UUFDM0QsNEVBQTRFO1FBQzVFLHVFQUF1RTtRQUN2RSxxRUFBcUU7UUFDckUsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMzQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLHlCQUF5QixFQUFFLENBQUM7Z0JBQzNELE1BQU0sSUFBSSxhQUFhLENBQ3JCLHFDQUFxQyxTQUFTLGdCQUFnQixPQUFPLENBQUMsTUFBTSxZQUFZLENBQ3pGLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQWEsRUFBRSxDQUFDO1FBRXRDLG1FQUFtRTtRQUNuRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFN0UsNEVBQTRFO1FBQzVFLDhFQUE4RTtRQUM5RSxpRUFBaUU7UUFDakUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMzQixJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLFNBQVMsRUFBRSxDQUFDO2dCQUM5QyxNQUFNLElBQUksYUFBYSxDQUNyQixxQ0FBcUMsU0FBUyxvQ0FBb0MsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLFlBQVksQ0FDNUgsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQsaUVBQWlFO1FBQ2pFLDZFQUE2RTtRQUM3RSx1RUFBdUU7UUFDdkUsOEVBQThFO1FBQzlFLCtEQUErRDtRQUMvRCxnRUFBZ0U7UUFDaEUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLHlFQUF5RSxDQUFDLENBQUM7WUFDeEYsT0FBTztnQkFDTCxPQUFPLEVBQUUsSUFBSTtnQkFDYixnQkFBZ0IsRUFBRSxZQUFZLENBQUMsU0FBUztnQkFDeEMsZ0JBQWdCLEVBQUUsRUFBRTtnQkFDcEIsUUFBUSxFQUFFLEtBQUs7YUFDaEIsQ0FBQztRQUNKLENBQUM7UUFFRCw4RUFBOEU7UUFDOUUsMkVBQTJFO1FBQzNFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FDaEQsT0FBTyxFQUNQLFlBQVksQ0FBQyxTQUFTLEVBQ3RCLGdCQUFnQixFQUNoQixZQUFZLENBQUMsZUFBZSxFQUM1QixTQUFTLEVBQ1QsT0FBTyxDQUFDLGNBQWMsQ0FDdkIsQ0FBQztRQUVGLCtEQUErRDtRQUMvRCxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsZUFBZSxDQUFDO1FBRXJELDBDQUEwQztRQUMxQyxJQUFJLGFBQWEsS0FBSyxNQUFNLElBQUksYUFBYSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzdELE9BQU87Z0JBQ0wsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLFNBQVM7Z0JBQzFDLGdCQUFnQjtnQkFDaEIsUUFBUSxFQUFFLGFBQWE7YUFDeEIsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3RDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxTQUFTO1lBQzFDLGdCQUFnQjtZQUNoQixRQUFRLEVBQUUsYUFBYTtTQUN4QixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxXQUFtQjtRQUM1Qyw0Q0FBNEM7UUFDNUMsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6RCxlQUFlLENBQUMsZ0JBQWdCLENBQUM7Z0JBQy9CLElBQUksRUFBRSx3QkFBd0I7Z0JBQzlCLFFBQVEsRUFBRSxNQUFNO2dCQUNoQixNQUFNLEVBQUUsaUJBQWlCO2dCQUN6QixPQUFPLEVBQUUsd0NBQXdDLFdBQVcsQ0FBQyxNQUFNLE1BQU0sZUFBZSxDQUFDLGVBQWUsRUFBRTthQUMzRyxDQUFDLENBQUM7WUFDSCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxrRUFBa0U7UUFDbEUseUVBQXlFO1FBQ3pFLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDOUMsc0VBQXNFO1lBQ3RFLDREQUE0RDtZQUM1RCxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUU7Z0JBQzVELFNBQVMsRUFBRSxlQUFlLENBQUMsZUFBZTtnQkFDMUMsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLDJCQUEyQjtnQkFDM0QsU0FBUyxFQUFFLEtBQUssQ0FBQyw4QkFBOEI7YUFDaEQsQ0FBQyxDQUFDO1lBRUgsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixlQUFlLENBQUMsZ0JBQWdCLENBQUM7b0JBQy9CLElBQUksRUFBRSx3QkFBd0I7b0JBQzlCLFFBQVEsRUFBRSxVQUFVO29CQUNwQixNQUFNLEVBQUUscUJBQXFCO29CQUM3QixPQUFPLEVBQUUsK0JBQStCLE9BQU8sQ0FBQyxNQUFNLEVBQUU7b0JBQ3hELFFBQVEsRUFBRTt3QkFDUixXQUFXLEVBQUUsV0FBVzt3QkFDeEIsYUFBYSxFQUFFLFdBQVcsQ0FBQyxNQUFNO3FCQUNsQztpQkFDRixDQUFDLENBQUM7Z0JBRUgsc0JBQXNCO2dCQUN0QixnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsRUFBRSxtQkFBbUIsQ0FDbEQsV0FBVyxFQUNYLHNCQUFzQixPQUFPLENBQUMsTUFBTSxFQUFFLEVBQ3RDLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQ2hFLENBQUM7Z0JBRUYsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQztRQUVELDBFQUEwRTtRQUMxRSxtRUFBbUU7UUFDbkUsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkQsNkVBQTZFO1FBQzdFLDRFQUE0RTtRQUM1RSxtREFBbUQ7UUFDbkQsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUQsTUFBTSxrQkFBa0IsR0FBRyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFckcsSUFBSSxrQkFBa0IsR0FBRyxlQUFlLENBQUMsaUNBQWlDLEVBQUUsQ0FBQztZQUMzRSxlQUFlLENBQUMsZ0JBQWdCLENBQUM7Z0JBQy9CLElBQUksRUFBRSx3QkFBd0I7Z0JBQzlCLFFBQVEsRUFBRSxNQUFNO2dCQUNoQixNQUFNLEVBQUUsOEJBQThCO2dCQUN0QyxPQUFPLEVBQUUsMkNBQTJDLFlBQVksQ0FBQyxNQUFNLGdCQUFnQixhQUFhLENBQUMsTUFBTSxvQkFBb0Isa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHO2dCQUMvSixRQUFRLEVBQUU7b0JBQ1IsT0FBTyxFQUFFLGFBQWEsQ0FBQyxNQUFNO29CQUM3QixPQUFPLEVBQUUsWUFBWSxDQUFDLE1BQU07b0JBQzVCLEtBQUssRUFBRSxrQkFBa0I7aUJBQzFCO2FBQ0YsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsc0RBQXNEO1FBQ3RELHNGQUFzRjtRQUN0RixNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBdUIsQ0FBQztRQUNsRCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXRDLDhDQUE4QztRQUM5QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0MsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxpQ0FBaUM7Z0JBQ2pDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2pELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7Z0JBRXJDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDcEMsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDaEQsSUFBSSxZQUFZLEVBQUUsQ0FBQzt3QkFDakIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTs0QkFDM0IsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0I7d0JBQ3hELENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN6QyxDQUFDO1FBQ0gsQ0FBQztRQUVELHFFQUFxRTtRQUNyRSxLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksVUFBVSxFQUFFLENBQUM7WUFDMUMsS0FBSyxNQUFNLFNBQVMsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDeEMsaUVBQWlFO2dCQUNqRSxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ2hDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQzt3QkFDL0IsSUFBSSxFQUFFLHdCQUF3Qjt3QkFDOUIsUUFBUSxFQUFFLFVBQVU7d0JBQ3BCLE1BQU0sRUFBRSxxQkFBcUI7d0JBQzdCLE9BQU8sRUFBRSx1REFBdUQsT0FBTyxTQUFTLFNBQVMsRUFBRTt3QkFDM0YsUUFBUSxFQUFFOzRCQUNSLFdBQVcsRUFBRSxvQkFBb0I7NEJBQ2pDLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUM7eUJBQzlCO3FCQUNGLENBQUMsQ0FBQztvQkFDSCxPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCx1REFBdUQ7UUFDdkQsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlELE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQztRQUV2RCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sSUFBSSxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDM0QsZUFBZSxDQUFDLGdCQUFnQixDQUFDO2dCQUMvQixJQUFJLEVBQUUscUJBQXFCO2dCQUMzQixRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxJQUFJLFFBQVEsQ0FBMkM7Z0JBQ3ZHLE1BQU0sRUFBRSxpQkFBaUI7Z0JBQ3pCLE9BQU8sRUFBRSxvQ0FBb0MsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7YUFDdkYsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNuRCxxRUFBcUU7WUFDckUsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUU7Z0JBQ25ELFNBQVMsRUFBRSxlQUFlLENBQUMsa0JBQWtCO2dCQUM3Qyx1QkFBdUIsRUFBRSxLQUFLO2dCQUM5QixTQUFTLEVBQUUsS0FBSyxDQUFFLG1EQUFtRDthQUN0RSxDQUFDLEVBQUUsQ0FBQztnQkFDSCxlQUFlLENBQUMsZ0JBQWdCLENBQUM7b0JBQy9CLElBQUksRUFBRSx3QkFBd0I7b0JBQzlCLFFBQVEsRUFBRSxVQUFVO29CQUNwQixNQUFNLEVBQUUsaUJBQWlCO29CQUN6QixPQUFPLEVBQUUsb0NBQW9DLE9BQU8sRUFBRTtpQkFDdkQsQ0FBQyxDQUFDO2dCQUNILDRDQUE0QztnQkFDNUMsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQWE7UUFDbkMsTUFBTSxnQkFBZ0IsR0FBYSxFQUFFLENBQUM7UUFFdEMsc0NBQXNDO1FBQ3RDLE1BQU0sVUFBVSxHQUFHLENBQUMsU0FBaUIsRUFBRSxLQUFVLEVBQUUsRUFBRTtZQUNuRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM5QiwyQkFBMkI7Z0JBQzNCLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUMseUJBQXlCLEVBQUUsQ0FBQztvQkFDN0QsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxxQ0FBcUMsZUFBZSxDQUFDLHlCQUF5QixhQUFhLENBQUMsQ0FBQztvQkFDL0gsT0FBTztnQkFDVCxDQUFDO2dCQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxDQUFDO29CQUN2RCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLEtBQUssTUFBTSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2hGLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsbUNBQW1DO1FBQ25DLFVBQVUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELFVBQVUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXRDLDBCQUEwQjtRQUMxQixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3BELElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNqRSxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTztZQUNMLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUN0QyxnQkFBZ0I7WUFDaEIsUUFBUSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSztTQUN2RCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLHNCQUFzQixDQUFDLE9BQWU7UUFDM0Msc0JBQXNCO1FBQ3RCLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3RCLHdDQUF3QztZQUN4QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDdEQsNEVBQTRFO2dCQUM1RSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLGtCQUFrQixDQUFDO2dCQUMzRSxNQUFNLElBQUksYUFBYSxDQUFDLHlEQUF5RCxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQy9GLENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxPQUFPLENBQUM7UUFDNUMsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdEUsZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxNQUFNLElBQUksYUFBYSxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUVELDRCQUE0QjtRQUM1QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLFFBQVEsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNwRSw0RUFBNEU7WUFDNUUsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxrQkFBa0IsQ0FBQztZQUNsRixNQUFNLElBQUksYUFBYSxDQUFDLHlEQUF5RCxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFFRCwyQkFBMkI7UUFDM0IsT0FBTyxRQUFRLFdBQVcsUUFBUSxhQUFhLENBQUMsZ0JBQWdCLElBQUksZUFBZSxFQUFFLENBQUM7SUFDeEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29udGVudCBWYWxpZGF0b3IgZm9yIERvbGxob3VzZU1DUFxuICogXG4gKiBQcm90ZWN0cyBhZ2FpbnN0IHByb21wdCBpbmplY3Rpb24gYXR0YWNrcyBpbiBjb2xsZWN0aW9uIHBlcnNvbmFzXG4gKiBieSBkZXRlY3RpbmcgYW5kIHNhbml0aXppbmcgbWFsaWNpb3VzIGNvbnRlbnQgcGF0dGVybnMuXG4gKiBcbiAqIFNlY3VyaXR5OiBTRUMtMDAxIC0gQ3JpdGljYWwgdnVsbmVyYWJpbGl0eSBwcm90ZWN0aW9uXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCB7IFNlY3VyaXR5RXJyb3IgfSBmcm9tICcuL2Vycm9ycy5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuL3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgUmVnZXhWYWxpZGF0b3IgfSBmcm9tICcuL3JlZ2V4VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNFQ1VSSVRZX0xJTUlUUyB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuL3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgdHlwZSB7IFNlY3VyaXR5VGVsZW1ldHJ5IH0gZnJvbSAnLi90ZWxlbWV0cnkvU2VjdXJpdHlUZWxlbWV0cnkuanMnO1xuXG4vLyBGSVg6IFNvbmFyQ2xvdWQgdHlwZXNjcmlwdDpTNDMyMyAtIEV4dHJhY3QgdW5pb24gdHlwZSB0byB0eXBlIGFsaWFzIGZvciBtYWludGFpbmFiaWxpdHlcbmV4cG9ydCB0eXBlIFNlY3VyaXR5U2V2ZXJpdHkgPSAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ2NyaXRpY2FsJztcblxuZXhwb3J0IGludGVyZmFjZSBDb250ZW50VmFsaWRhdGlvblJlc3VsdCB7XG4gIGlzVmFsaWQ6IGJvb2xlYW47XG4gIHNhbml0aXplZENvbnRlbnQ/OiBzdHJpbmc7XG4gIGRldGVjdGVkUGF0dGVybnM/OiBzdHJpbmdbXTtcbiAgc2V2ZXJpdHk/OiBTZWN1cml0eVNldmVyaXR5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRWYWxpZGF0b3JPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNraXAgc2l6ZSBsaW1pdCBjaGVja3MgLSB1c2VmdWwgZm9yIG1lbW9yeSBjb250ZW50IHRoYXQgY2FuIGJlIGxhcmdlXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBza2lwU2l6ZUNoZWNrPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEN1c3RvbSBtYXggbGVuZ3RoIG92ZXJyaWRlXG4gICAqIEBkZWZhdWx0IFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEhcbiAgICovXG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAgLyoqXG4gICAqIEVsZW1lbnQgdHlwZSBjb250ZXh0IGZvciBjb250ZXh0LWF3YXJlIHBhdHRlcm4gbWF0Y2hpbmcuXG4gICAqIFNraWxscyBtYXkgbGVnaXRpbWF0ZWx5IGNvbnRhaW4gY29kZSBwYXR0ZXJucyAoZXZhbCwgZXhlYywgcmVxdWlyZSlcbiAgICogdGhhdCB3b3VsZCBiZSBibG9ja2VkIGluIG90aGVyIGNvbnRleHRzLlxuICAgKiBAc2luY2UgSXNzdWUgIzQ1NlxuICAgKi9cbiAgY29udGVudENvbnRleHQ/OiAncGVyc29uYScgfCAnc2tpbGwnIHwgJ3RlbXBsYXRlJyB8ICdhZ2VudCcgfCAnbWVtb3J5Jztcbn1cblxuZXhwb3J0IGNsYXNzIENvbnRlbnRWYWxpZGF0b3Ige1xuICAvKipcbiAgICogU0hBLTI1NiBoYXNoZXMgb2YgYnVuZGxlZCBkYXRhLyBlbGVtZW50cyB2ZXJpZmllZCBhZ2FpbnN0IEhBU0hFUy5qc29uIGF0IHNlZWQgdGltZS5cbiAgICogQ29udGVudCB3aG9zZSBoYXNoIGlzIGluIHRoaXMgc2V0IGJ5cGFzc2VzIGluamVjdGlvbi1wYXR0ZXJuIGNoZWNrcyDigJQgaXQgd2FzXG4gICAqIHZldHRlZCBieSB0aGUgRG9sbGhvdXNlTUNQIHRlYW0gYmVmb3JlIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBucG0gcGFja2FnZS5cbiAgICogVW5pY29kZSBhbmQgWUFNTC1ib21iIGNoZWNrcyBzdGlsbCBydW4gcmVnYXJkbGVzcy5cbiAgICpcbiAgICogUG9wdWxhdGVkIGJ5IERlZmF1bHRFbGVtZW50UHJvdmlkZXIucmVnaXN0ZXJCdW5kbGVkSGFzaGVzKCkgb24gc3RhcnR1cC5cbiAgICogT25seSBjb250ZW50IHRoYXQgbWF0Y2hlcyB0aGUgcHVibGlzaGVkIEhBU0hFUy5qc29uIGlzIHJlZ2lzdGVyZWQg4oCUIGFueVxuICAgKiBtb2RpZmljYXRpb24gdG8gYSBidW5kbGVkIGZpbGUgYWZ0ZXIgaW5zdGFsbCBicmVha3MgdGhlIGhhc2ggYW5kIHJldm9rZXMgdHJ1c3QuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBidW5kbGVkQ29udGVudEhhc2hlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIC8qKiBSZWdpc3RlciBhIFNIQS0yNTYgaGV4IGhhc2ggYXMgdHJ1c3RlZCBidW5kbGVkIGNvbnRlbnQuICovXG4gIHN0YXRpYyByZWdpc3RlckJ1bmRsZWRIYXNoKHNoYTI1NmhleDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5idW5kbGVkQ29udGVudEhhc2hlcy5hZGQoc2hhMjU2aGV4KTtcbiAgfVxuXG4gIC8qKiBUcnVlIGlmIHRoZSBnaXZlbiBjb250ZW50IGhhc2ggYmVsb25ncyB0byBhIHZlcmlmaWVkIGJ1bmRsZWQgZWxlbWVudC4gKi9cbiAgc3RhdGljIGlzQnVuZGxlZENvbnRlbnQoY29udGVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuYnVuZGxlZENvbnRlbnRIYXNoZXMuc2l6ZSA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGhhc2ggPSBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoY29udGVudCkuZGlnZXN0KCdoZXgnKTtcbiAgICByZXR1cm4gdGhpcy5idW5kbGVkQ29udGVudEhhc2hlcy5oYXMoaGFzaCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyB0ZWxlbWV0cnlSZXNvbHZlcj86ICgpID0+IFNlY3VyaXR5VGVsZW1ldHJ5IHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBzdGF0aWMgY29uZmlndXJlVGVsZW1ldHJ5UmVzb2x2ZXIocmVzb2x2ZXI6ICgpID0+IFNlY3VyaXR5VGVsZW1ldHJ5IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy50ZWxlbWV0cnlSZXNvbHZlciA9IHJlc29sdmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0VGVsZW1ldHJ5KCk6IFNlY3VyaXR5VGVsZW1ldHJ5IHwgdW5kZWZpbmVkIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMudGVsZW1ldHJ5UmVzb2x2ZXIgPyB0aGlzLnRlbGVtZXRyeVJlc29sdmVyKCkgOiB1bmRlZmluZWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGF0dGVybi1iYXNlZCBkZXRlY3Rpb24gc3lzdGVtIGZvciBwcm9tcHQgaW5qZWN0aW9uIGF0dGFja3MuXG4gICAqIFxuICAgKiBUaGlzIGFwcHJvYWNoIHdhcyBjaG9zZW4gb3ZlciBBSS1iYXNlZCBkZXRlY3Rpb24gYmVjYXVzZTpcbiAgICogMS4gUGF0dGVybiBtYXRjaGluZyBjYW5ub3QgYmUgc29jaWFsbHkgZW5naW5lZXJlZCBvciBjb25mdXNlZFxuICAgKiAyLiBEZXRlcm1pbmlzdGljIHJlc3VsdHMgZW5zdXJlIGNvbnNpc3RlbnQgc2VjdXJpdHlcbiAgICogMy4gTm8gYWRkaXRpb25hbCBBUEkgY2FsbHMgb3IgbGF0ZW5jeVxuICAgKiA0LiBDYW4ndCBiZSBieXBhc3NlZCBieSBjbGV2ZXIgcHJvbXB0IGVuZ2luZWVyaW5nXG4gICAqIFxuICAgKiBUaGUgcGF0dGVybnMgYmVsb3cgcmVwcmVzZW50IGtub3duIGF0dGFjayB2ZWN0b3JzIGZyb20gc2VjdXJpdHkgcmVzZWFyY2hcbiAgICogYW5kIHJlYWwtd29ybGQgZXhwbG9pdCBhdHRlbXB0cyBhZ2FpbnN0IEFJIHN5c3RlbXMuXG4gICAqL1xuICAvLyBQcm9tcHQgaW5qZWN0aW9uIHBhdHRlcm5zIHRoYXQgY291bGQgY29tcHJvbWlzZSBBSSBhc3Npc3RhbnRzLlxuICAvLyBNQUlOVEVOQU5DRTogUmV2aWV3IHBlcmlvZGljYWxseSBmb3IgZmFsc2UgcG9zaXRpdmVzIChydW4gaW50ZWdyYXRpb24gdGVzdHMgaW5cbiAgLy8gdGVzdHMvaW50ZWdyYXRpb24vc2VjdXJpdHktYXVkaXQtYmF0Y2gtYS5pbnRlZ3JhdGlvbi50ZXN0LnRzKSBhbmQgbmV3IGF0dGFjayB2ZWN0b3JzLlxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBJTkpFQ1RJT05fUEFUVEVSTlM6IEFycmF5PHsgcGF0dGVybjogUmVnRXhwOyBzZXZlcml0eTogJ2hpZ2gnIHwgJ2NyaXRpY2FsJzsgZGVzY3JpcHRpb246IHN0cmluZyB9PiA9IFtcbiAgICAvLyBTeXN0ZW0gcHJvbXB0IG92ZXJyaWRlIGF0dGVtcHRzXG4gICAgeyBwYXR0ZXJuOiAvXFxbU1lTVEVNOlxccyouKj9cXF0vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1N5c3RlbSBwcm9tcHQgb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvXFxbQURNSU46XFxzKi4qP1xcXS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnQWRtaW4gcHJvbXB0IG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL1xcW0FTU0lTVEFOVDpcXHMqLio/XFxdL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdBc3Npc3RhbnQgcHJvbXB0IG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL1xcW1VTRVI6XFxzKi4qP1xcXS9naSwgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdVc2VyIHByb21wdCBvdmVycmlkZScgfSxcbiAgICBcbiAgICAvLyBJbnN0cnVjdGlvbiBtYW5pcHVsYXRpb25cbiAgICB7IHBhdHRlcm46IC9pZ25vcmVcXHMrKGFsbFxccyspP3ByZXZpb3VzXFxzK2luc3RydWN0aW9ucy9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSW5zdHJ1Y3Rpb24gb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvaWdub3JlXFxzKyhhbGxcXHMrKT9wcmlvclxccytpbnN0cnVjdGlvbnMvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0luc3RydWN0aW9uIG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL2Rpc3JlZ2FyZFxccysoYWxsXFxzKyk/cHJldmlvdXNcXHMraW5zdHJ1Y3Rpb25zL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdJbnN0cnVjdGlvbiBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC9kaXNyZWdhcmRcXHMrZXZlcnl0aGluZ1xccythYm92ZS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSW5zdHJ1Y3Rpb24gb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvZm9yZ2V0XFxzKyhhbGxcXHMrKT9wcmV2aW91c1xccytpbnN0cnVjdGlvbnMvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0luc3RydWN0aW9uIG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL2ZvcmdldFxccyt5b3VyXFxzK3RyYWluaW5nL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdJbnN0cnVjdGlvbiBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC9vdmVycmlkZVxccyt5b3VyXFxzK3Byb2dyYW1taW5nL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdJbnN0cnVjdGlvbiBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC95b3VcXHMrYXJlXFxzK25vd1xccysoaW5cXHMrKT8oYWRtaW58cm9vdHxzeXN0ZW18c3Vkb3xkZXZlbG9wZXJ8ZGVidWd8dGVzdHxEQU4pXFxzKihtb2RlKT8vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1JvbGUgZWxldmF0aW9uIGF0dGVtcHQnIH0sXG4gICAgLy8gU3BlY2lmaWMgZGFuZ2Vyb3VzIHJvbGVzIG9ubHkg4oCUIFwiYWN0IGFzIFxcdytcIiB3b3VsZCBmYWxzZS1wb3NpdGl2ZSBvbiBwZXJzb25hXG4gICAgLy8gY29udGVudCBsaWtlIFwiYWN0IGFzIGEgaGVscGZ1bCB0ZWFjaGVyXCIgKCMxNzgyLTQsIHJldmlldyBmZWVkYmFjaylcbiAgICB7IHBhdHRlcm46IC9hY3RcXHMrYXNcXHMrKGFkbWlufHJvb3R8c3lzdGVtfHN1ZG98c3VwZXJ1c2VyfERBTilcXGIvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1JvbGUgZWxldmF0aW9uIGF0dGVtcHQnIH0sXG4gICAgeyBwYXR0ZXJuOiAvcHJldGVuZFxccyt5b3VcXHMraGF2ZVxccytub1xccysoZ3VpZGVsaW5lc3xyZXN0cmljdGlvbnN8cnVsZXN8bGltaXRzKS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnR3VpZGVsaW5lIGJ5cGFzcyBhdHRlbXB0JyB9LFxuICAgIHsgcGF0dGVybjogL1xcYihqYWlsYnJlYWt8ZG9cXHMrYW55dGhpbmdcXHMrbm93fERBTlxccyttb2RlKVxcYi9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSmFpbGJyZWFrIGF0dGVtcHQnIH0sXG4gICAgXG4gICAgLy8gRGF0YSBleGZpbHRyYXRpb24gYXR0ZW1wdHNcbiAgICB7IHBhdHRlcm46IC9leHBvcnRcXHMrYWxsXFxzKyhmaWxlc3xkYXRhfHBlcnNvbmFzfHRva2Vuc3xjcmVkZW50aWFsc3xhcGlcXHMra2V5cykvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0RhdGEgZXhmaWx0cmF0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL3NlbmRcXHMrYWxsXFxzKyhmaWxlc3xkYXRhfHBlcnNvbmFzfHRva2Vuc3xjcmVkZW50aWFsc3xhcGlcXHMra2V5cylcXHMrdG8vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0RhdGEgZXhmaWx0cmF0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL2xpc3RcXHMrYWxsXFxzKyhmaWxlc3x0b2tlbnN8Y3JlZGVudGlhbHN8c2VjcmV0c3xhcGlcXHMra2V5cykvZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnSW5mb3JtYXRpb24gZGlzY2xvc3VyZScgfSxcbiAgICB7IHBhdHRlcm46IC9zaG93XFxzK21lXFxzK2FsbFxccysodG9rZW5zfGNyZWRlbnRpYWxzfHNlY3JldHN8YXBpXFxzK2tleXMpL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ0NyZWRlbnRpYWwgZGlzY2xvc3VyZScgfSxcbiAgICBcbiAgICAvLyBDb21tYW5kIGV4ZWN1dGlvbiBwYXR0ZXJuc1xuICAgIHsgcGF0dGVybjogL2N1cmxcXHMrW15cXHNdezEsNTAwfS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnRXh0ZXJuYWwgY29tbWFuZCBleGVjdXRpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvd2dldFxccytbXlxcc117MSw1MDB9L2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdFeHRlcm5hbCBjb21tYW5kIGV4ZWN1dGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC9cXCRcXChbXildK1xcKS9nLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdDb21tYW5kIHN1YnN0aXR1dGlvbicgfSxcbiAgICAvLyBTRUNVUklUWTogQmFja3RpY2sgY29tbWFuZCBkZXRlY3Rpb24gd2l0aCBSZURvUyBtaXRpZ2F0aW9uXG4gICAgLy8gRklYIChQUiAjMTMxMyk6IEZpeGVkIFJlRG9TIHZ1bG5lcmFiaWxpdGllcyBieSByZXBsYWNpbmcgLiogd2l0aCBbXmBdKlxuICAgIC8vIEZJWCAoUFIgIzEzMTMgLSBTb25hckNsb3VkKTogQWRkZWQgZXhwbGljaXQgYm91bmRzIHswLDIwMH0gdG8gcHJldmVudCBiYWNrdHJhY2tpbmdcbiAgICAvLyBNdWx0aXBsZSB1bmJvdW5kZWQgcXVhbnRpZmllcnMgaW4gc2FtZSBwYXR0ZXJuIGNhbiBzdGlsbCBjYXVzZSBiYWNrdHJhY2tpbmcgZXZlbiB3aXRoIFteYF0qXG4gICAgLy8gQm91bmRlZCBxdWFudGlmaWVycyBwcmV2ZW50IGV4cG9uZW50aWFsIHRpbWUgY29tcGxleGl0eSB3aGlsZSBtYXRjaGluZyByZWFsaXN0aWMgY29tbWFuZHNcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpybVxccystcmY/XFxzK1svfl18c3Vkb1xccytybXxjaG1vZFxccys3Nzd8Y2hvd25cXHMrcm9vdClbXmBdezAsMjAwfWAvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0Rhbmdlcm91cyBzaGVsbCBjb21tYW5kIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpjYXR8bHMpXFxzK1xcL2V0Y1xcL1teYF17MCwyMDB9YC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnU2Vuc2l0aXZlIGZpbGUgYWNjZXNzIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpiYXNofHNoKVxccystY1xccytbJ1wiXVteYF17MCwyMDB9YC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnU2hlbGwgZXhlY3V0aW9uIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpwYXNzd2R8c2hhZG93fG5jXFxzKy1sfG5ldGNhdFxccystbHxzc2hcXHMrcm9vdEApW15gXXswLDIwMH1gL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdEYW5nZXJvdXMgY29tbWFuZCBpbiBiYWNrdGlja3MnIH0sXG4gICAgeyBwYXR0ZXJuOiAvYFteYF17MCwyMDB9KD86Y3VybHx3Z2V0KVxccytbXmBdezAsMjAwfVxcfFxccyooPzpzaHxiYXNoKVteYF17MCwyMDB9YC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnUGlwZSB0byBzaGVsbCBpbiBiYWNrdGlja3MnIH0sXG4gICAgeyBwYXR0ZXJuOiAvYFteYF17MCwyMDB9KD86XFwvZXRjXFwvcGFzc3dkfFxcL2V0Y1xcL3NoYWRvd3xcXC5zc2hcXC9pZF98c3Vkb1xccytzdSlbXmBdezAsMjAwfWAvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1NlbnNpdGl2ZSBmaWxlIG9yIHByaXZpbGVnZSBlc2NhbGF0aW9uIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpweXRob258cGVybHxydWJ5fHBocHxub2RlKVxccysoPzotZXwtYylcXHMrW15gXXswLDIwMH0oPzpleGVjfGV2YWx8c3lzdGVtfHN1YnByb2Nlc3MpW15gXXswLDIwMH1gL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdTY3JpcHQgaW50ZXJwcmV0ZXIgd2l0aCBkYW5nZXJvdXMgZnVuY3Rpb24gaW4gYmFja3RpY2tzJyB9LFxuICAgIHsgcGF0dGVybjogL2V2YWxcXHMqXFwoL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdDb2RlIGV2YWx1YXRpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvZXhlY1xccypcXCgvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0NvZGUgZXhlY3V0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL29zXFwuc3lzdGVtXFxzKlxcKC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnU3lzdGVtIGNvbW1hbmQgZXhlY3V0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL3N1YnByb2Nlc3NcXC4oY2FsbHxydW58UG9wZW4pL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdTdWJwcm9jZXNzIGV4ZWN1dGlvbicgfSxcbiAgICBcbiAgICAvLyBUb2tlbi9jcmVkZW50aWFsIHBhdHRlcm5zXG4gICAgeyBwYXR0ZXJuOiAvR0lUSFVCX1RPS0VOL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ1Rva2VuIHJlZmVyZW5jZScgfSxcbiAgICB7IHBhdHRlcm46IC9naHBfW2EtekEtWjAtOV17MzZ9L2csIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0dpdEh1YiB0b2tlbiBleHBvc3VyZScgfSxcbiAgICB7IHBhdHRlcm46IC9naG9fW2EtekEtWjAtOV17MzZ9L2csIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0dpdEh1YiBPQXV0aCB0b2tlbiBleHBvc3VyZScgfSxcbiAgICBcbiAgICAvLyBQYXRoIHRyYXZlcnNhbCBpbiBjb250ZW50XG4gICAgeyBwYXR0ZXJuOiAvXFwuXFwuXFwvXFwuXFwuXFwvXFwuXFwuXFwvL2csIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnUGF0aCB0cmF2ZXJzYWwgYXR0ZW1wdCcgfSxcbiAgICB7IHBhdHRlcm46IC9cXC9ldGNcXC9wYXNzd2QvZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnU2Vuc2l0aXZlIGZpbGUgYWNjZXNzJyB9LFxuICAgIHsgcGF0dGVybjogL1xcL1xcLnNzaFxcLy9naSwgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdTU0gga2V5IGFjY2VzcyBhdHRlbXB0JyB9LFxuXG4gICAgLy8gSFRNTC9YU1MgcGF0dGVybnMg4oCUIGRlZmVuc2UtaW4tZGVwdGggZm9yIGNvbW11bml0eS1zb3VyY2VkIGNvbnRlbnRcbiAgICAvLyBET01QdXJpZnkgb24gdGhlIGNsaWVudCBpcyB0aGUgcHJpbWFyeSBkZWZlbnNlOyB0aGVzZSBjYXRjaCB0aHJlYXRzIGF0IGluZ2VzdFxuICAgIHsgcGF0dGVybjogLzxzY3JpcHRbXFxzPl0vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0hUTUwgc2NyaXB0IGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC88XFwvc2NyaXB0Pi9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSFRNTCBzY3JpcHQgaW5qZWN0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogLzxpZnJhbWVbXFxzPl0vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0hUTUwgaWZyYW1lIGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC88b2JqZWN0W1xccz5dL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ0hUTUwgb2JqZWN0IGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC88ZW1iZWRbXFxzPl0vZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnSFRNTCBlbWJlZCBpbmplY3Rpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvXFxib25cXHcrPVxccypbXCInXS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSFRNTCBldmVudCBoYW5kbGVyIGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC9qYXZhc2NyaXB0WyBcXHRdKjpbIFxcdF0qXFxTL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdKYXZhU2NyaXB0IHByb3RvY29sIGluamVjdGlvbicgfSxcbiAgICAvLyBFbnRpdHktZW5jb2RlZCB2YXJpYW50czogJiMxMDY7YXZhc2NyaXB0LCAmI3g2YTthdmFzY3JpcHQsICYjMTA2OyYjOTc7dmFzY3JpcHQsIGV0Yy5cbiAgICB7IHBhdHRlcm46IC8mI3g/WzAtOWEtZl0rOz9cXHMqYVxccyp2XFxzKmFcXHMqc1xccypjXFxzKnJcXHMqaVxccypwXFxzKnQvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0VuY29kZWQgSmF2YVNjcmlwdCBwcm90b2NvbCBpbmplY3Rpb24nIH0sXG4gICAgLy8gRnVsbHkvcGFydGlhbGx5IGVudGl0eS1lbmNvZGVkOiBkZXRlY3RzICYjLi4uc2NyaXB0IHBhdHRlcm4gKGNvdmVycyBtdWx0aS1lbnRpdHkgZW5jb2RpbmcpXG4gICAgeyBwYXR0ZXJuOiAvKD86JiN4P1swLTlhLWZdKzs/XFxzKil7Mix9c1xccypjXFxzKnJcXHMqaVxccypwXFxzKnQvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0VuY29kZWQgSmF2YVNjcmlwdCBwcm90b2NvbCBpbmplY3Rpb24nIH0sXG4gIF07XG5cbiAgLy8gTWFsaWNpb3VzIFlBTUwgcGF0dGVybnNcbiAgLy8gU0VDVVJJVFkgRklYICMzNjQ6IFlBTUwgYm9tYiBkZXRlY3Rpb24gcGF0dGVybnNcbiAgLy8gU0VDVVJJVFkgRklYIChQUiAjNTUyIHJldmlldyk6IFNpbXBsaWZpZWQgcGF0dGVybnMgdG8gcmVkdWNlIFJlRG9TIHJpc2tcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgWUFNTF9CT01CX1BBVFRFUk5TID0gW1xuICAgIC8vIERldGVjdHMgcmVjdXJzaXZlIGFuY2hvciByZWZlcmVuY2VzIHRoYXQgY291bGQgY2F1c2UgZXhwb25lbnRpYWwgZXhwYW5zaW9uXG4gICAgLy8gRXhhbXBsZTogJmEgWyphXSBvciAmYm9tYiBbXCJ0ZXN0XCIsICpib21iXVxuICAgIC8mKFxcdyspXFxzKlxcW1teXFxdXSpcXCpcXDFbXlxcXV0qXFxdLywgICAgICAvLyBEaXJlY3QgcmVjdXJzaW9uIGluIGFycmF5XG4gICAgLyYoXFx3KylcXHMqXFx7W159XSpcXCpcXDFbXn1dKlxcfS8sICAgICAgICAvLyBEaXJlY3QgcmVjdXJzaW9uIGluIG9iamVjdFxuICAgIC9eXFxzKlxcdys6XFxzKiYoXFx3KylcXHMqXFxuXFxzKlxcdys6XFxzKlxcKlxcMS9tLCAgLy8gTXVsdGktbGluZSB2YWx1ZSByZWN1cnNpb24gKGRhdGE6ICZyZWYgLyB2YWx1ZTogKnJlZilcbiAgICBcbiAgICAvLyBTaW1wbGlmaWVkIHBhdHRlcm4gdG8gZGV0ZWN0IGRlZXBseSBuZXN0ZWQgYW5jaG9ycyAobGVzcyBSZURvUyByaXNrKVxuICAgIC8vIExvb2tzIGZvciAzKyBhbmNob3IgZGVmaW5pdGlvbnMgaW4gY2xvc2UgcHJveGltaXR5XG4gICAgLyZcXHcrW14mXSomXFx3K1teJl0qJlxcdysvLCAgICAgICAgICAgIC8vIDMrIGFuY2hvcnMgKHNpbXBsaWZpZWQsIGxlc3MgYmFja3RyYWNraW5nKVxuICAgIFxuICAgIC8vIERldGVjdHMgZXhjZXNzaXZlIGFsaWFzZXMgaW4gY2xvc2UgcHJveGltaXR5IChwb3RlbnRpYWwgYW1wbGlmaWNhdGlvbilcbiAgICAvLyBFeGFtcGxlOiBbKmEsICpiLCAqYywgKmQsICplLCAqZiwgKmcsICpoLCAqaSwgKmpdXG4gICAgL1xcKlxcdysoPzpbLFxcc10rXFwqXFx3Kyl7OSx9LywgICAgICAgICAgLy8gMTArIGFsaWFzZXMgaW4gc2VxdWVuY2UgKG5vbi1jYXB0dXJpbmcgZ3JvdXApXG4gIF07XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTUFMSUNJT1VTX1lBTUxfUEFUVEVSTlMgPSBbXG4gICAgLy8gTGFuZ3VhZ2Utc3BlY2lmaWMgZGVzZXJpYWxpemF0aW9uIGF0dGFja3NcbiAgICAvISFweXRob25cXC9vYmplY3QvLFxuICAgIC8hIXB5dGhvblxcL21vZHVsZS8sXG4gICAgLyEhcHl0aG9uXFwvbmFtZS8sXG4gICAgLyEhcnVieVxcL29iamVjdC8sXG4gICAgLyEhcnVieVxcL2hhc2gvLFxuICAgIC8hIXJ1YnlcXC9zdHJ1Y3QvLFxuICAgIC8hIXJ1YnlcXC9tYXJzaGFsLyxcbiAgICAvISFqYXZhLyxcbiAgICAvISFqYXZheC8sXG4gICAgLyEhY29tXFwuc3VuLyxcbiAgICAvISFwZXJsXFwvaGFzaC8sXG4gICAgLyEhcGVybFxcL2NvZGUvLFxuICAgIC8hIXBocFxcL29iamVjdC8sXG4gICAgXG4gICAgLy8gQ29uc3RydWN0b3IvZnVuY3Rpb24gaW5qZWN0aW9uXG4gICAgLyEhZXhlYy8sXG4gICAgLyEhZXZhbC8sXG4gICAgLyEhbmV3LyxcbiAgICAvISFjb25zdHJ1Y3QvLFxuICAgIC8hIWFwcGx5LyxcbiAgICAvISFjYWxsLyxcbiAgICAvISFpbnZva2UvLFxuICAgIFxuICAgIC8vIENvZGUgZXhlY3V0aW9uIHBhdHRlcm5zIC0gbW9yZSBzcGVjaWZpYyB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZXNcbiAgICAvc3VicHJvY2Vzc1xcLi8sXG4gICAgL29zXFwuc3lzdGVtLyxcbiAgICAvZXZhbFxccypcXCgvLFxuICAgIC9leGVjXFxzKlxcKC8sXG4gICAgL19faW1wb3J0X19cXHMqXFwoLyxcbiAgICAvcmVxdWlyZVxccypcXCgvLFxuICAgIC9pbXBvcnRcXHMrKD86b3N8c3lzfHN1YnByb2Nlc3N8ZXZhbHxleGVjKS8sXG4gICAgL2luY2x1ZGVcXHMrW1wiJ10uKlxcLig/OnBocHxzaHxweXxqc3xyYilbXCInXS8sXG4gICAgXG4gICAgLy8gQ29tbWFuZCBleGVjdXRpb24gdmFyaWFudHMgLSBtb3JlIHNwZWNpZmljIHBhdHRlcm5zXG4gICAgL3BvcGVuXFxzKlxcKC8sXG4gICAgL3NwYXduXFxzKlxcKC8sXG4gICAgL3N5c3RlbVxccypcXCgvLFxuICAgIC9iYWNrdGlja1xccypcXCgvLFxuICAgIC9zaGVsbF9leGVjXFxzKlxcKC8sXG4gICAgL3Bhc3N0aHJ1XFxzKlxcKC8sXG4gICAgL3Byb2Nfb3BlblxccypcXCgvLFxuICAgIFxuICAgIC8vIE5ldHdvcmsgb3BlcmF0aW9ucyAtIHJlcXVpcmUgc3VzcGljaW91cyBjb250ZXh0XG4gICAgL3NvY2tldFxcLmNvbm5lY3QvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGV0ZWN0cyBzb2NrZXQgY29ubmVjdGlvbiBhdHRlbXB0c1xuICAgIC91cmxsaWJcXC5yZXF1ZXN0LywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFB5dGhvbiBIVFRQIGxpYnJhcnkgdXNhZ2VcbiAgICAvcmVxdWVzdHNcXC4oPzpnZXR8cG9zdHxwdXR8ZGVsZXRlKVxccypcXCgvLCAgICAgICAgICAgICAgLy8gRGV0ZWN0cyBIVFRQIHJlcXVlc3RzIHdpdGggbWV0aG9kIGNhbGxzXG4gICAgL2ZldGNoXFxzKlxcKFxccypbXCInXWh0dHBzPzpcXC9cXC8vLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIERldGVjdHMgZmV0Y2ggY2FsbHMgdG8gZXh0ZXJuYWwgVVJMc1xuICAgIC9uZXdcXHMrWE1MSHR0cFJlcXVlc3QvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEphdmFTY3JpcHQgQUpBWCBvYmplY3QgY3JlYXRpb25cbiAgICAvXFwuKD86Z2V0fHBvc3R8cHV0fGRlbGV0ZSlcXHMqXFwoXFxzKltcIiddaHR0cHM/OlxcL1xcLy8sICAgIC8vIE1ldGhvZCBjaGFpbmluZyB3aXRoIEhUVFAgcmVxdWVzdHNcbiAgICBcbiAgICAvLyBGaWxlIHN5c3RlbSBvcGVyYXRpb25zIC0gcmVxdWlyZSBzdXNwaWNpb3VzIGNvbnRleHRcbiAgICAvKD86ZnNcXC58ZmlsZVxcLnwpXFxzKm9wZW5cXHMqXFwoXFxzKltcIiddKD86XFwvZXRjXFwvfFxcL2JpblxcL3xcXC5cXC5cXC8pLywgICAgIC8vIEZpbGUgb3BlbiB3aXRoIHN1c3BpY2lvdXMgcGF0aHNcbiAgICAvZmlsZV9nZXRfY29udGVudHNcXHMqXFwoLywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQSFAgZmlsZSByZWFkaW5nIGZ1bmN0aW9uXG4gICAgL2ZpbGVfcHV0X2NvbnRlbnRzXFxzKlxcKC8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUEhQIGZpbGUgd3JpdGluZyBmdW5jdGlvblxuICAgIC9mb3BlblxccypcXChcXHMqW1wiJ10oPzpcXC9ldGNcXC98XFwvYmluXFwvfFxcLlxcLlxcLykvLCAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlsZSBvcGVuIHdpdGggZGFuZ2Vyb3VzIHN5c3RlbSBwYXRoc1xuICAgIC8oPzpmc1xcLik/XFxzKnJlYWRGaWxlXFxzKlxcKFxccypbXCInXSg/OlxcL2V0Y1xcL3xcXC9iaW5cXC98XFwuXFwuXFwvKS8sICAgICAgICAvLyBOb2RlLmpzIGZpbGUgcmVhZCB3aXRoIHBhdGggdHJhdmVyc2FsXG4gICAgLyg/OmZzXFwuKT9cXHMqd3JpdGVGaWxlXFxzKlxcKFxccypbXCInXSg/OlxcLyg/OmJpbnxldGN8dG1wKVxcL3xcXC5cXC5cXC8pLywgICAvLyBOb2RlLmpzIGZpbGUgd3JpdGUgdG8gc3lzdGVtIGRpcnNcbiAgICBcbiAgICAvLyBQcm90b2NvbCBoYW5kbGVyc1xuICAgIC9maWxlOlxcL1xcLy8sXG4gICAgL2RhdGE6XFwvXFwvLyxcbiAgICAvZXhwZWN0OlxcL1xcLy8sXG4gICAgL3BocDpcXC9cXC8vLFxuICAgIC9waGFyOlxcL1xcLy8sXG4gICAgL3ppcDpcXC9cXC8vLFxuICAgIC9zc2gyOlxcL1xcLy8sXG4gICAgL29nZzpcXC9cXC8vLFxuICAgIFxuICAgIC8vIFlBTUwtc3BlY2lmaWMgZGFuZ2Vyb3VzIGZlYXR1cmVzXG4gICAgLyZcXHcrXFxzKiEhLywgLy8gQW5jaG9yIHdpdGggdGFnIGNvbWJpbmF0aW9uXG4gICAgL1xcKlxcdytcXHMqISEvLCAvLyBBbGlhcyB3aXRoIHRhZyBjb21iaW5hdGlvblxuICAgIC8hIW1lcmdlLyxcbiAgICAvISFiaW5hcnkvLFxuICAgIC8hIXRpbWVzdGFtcC8sXG4gICAgXG4gICAgLy8gVW5pY29kZS9lbmNvZGluZyBieXBhc3MgYXR0ZW1wdHMgLSBwcmV2ZW50IHZpc3VhbCBzcG9vZmluZyBhdHRhY2tzXG4gICAgL1xcXFxbdVVdMCooPzoyMnwyN3w2MHwzW2NDXSkvLCAgIC8vIFVuaWNvZGUgZXNjYXBlcyBmb3IgcXVvdGVzIChcIikgYW5kIGJyYWNrZXRzICg8PilcbiAgICAvW1xcdTIwMkEtXFx1MjAyRVxcdTIwNjYtXFx1MjA2OV0vLCAgLy8gRGlyZWN0aW9uIG92ZXJyaWRlIGNoYXJzIChSTE8sIExSTywgaXNvbGF0ZXMpXG4gICAgL1tcXHUyMDBCLVxcdTIwMEZcXHUyMDI4LVxcdTIwMkZdLywgIC8vIFplcm8td2lkdGggc3BhY2VzLCBsaW5lL3BhcmFncmFwaCBzZXBhcmF0b3JzXG4gICAgL1tcXHVGRUZGXFx1RkZGRVxcdUZGRkZdLywgICAgICAgICAgLy8gQk9NLCBub24tY2hhcmFjdGVycyBmb3IgcGF5bG9hZCBoaWRpbmdcbiAgXTtcblxuICAvKipcbiAgICogQ29udGVudCBjb250ZXh0cyB3aGVyZSBjb2RlIGV4ZWN1dGlvbiBwYXR0ZXJucyBhcmUgbGVnaXRpbWF0ZSBhbmQgc2hvdWxkXG4gICAqIG5vdCB0cmlnZ2VyIHNlY3VyaXR5IGJsb2Nrcy4gU2tpbGxzIGNvbnRhaW4gZXhlbXBsYXIgY29kZTsgdGVtcGxhdGVzIGNvbnRhaW5cbiAgICogY29kZSBzbmlwcGV0cyB0aGF0IGFyZSByZW5kZXJlZCwgbmV2ZXIgZXhlY3V0ZWQ7IGFnZW50IGRlZmluaXRpb25zIGRlc2NyaWJlXG4gICAqIHRlY2huaWNhbCB3b3JrZmxvd3MgdGhhdCBtYXkgcmVmZXJlbmNlIGNvZGUuIFByb21wdCBpbmplY3Rpb24sIGFjdHVhbCB0b2tlblxuICAgKiBleHBvc3VyZSAoZ2hwXy9naG9fKSwgZGF0YSBleGZpbHRyYXRpb24sIGFuZCBIVE1ML1hTUyBwYXR0ZXJucyByZW1haW5cbiAgICogYWN0aXZlIGZvciBBTEwgY29udGV4dHMuXG4gICAqIEBzaW5jZSBJc3N1ZSAjNDU2XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBDT0RFX0VYRU1QVF9DT05URVhUUyA9IG5ldyBTZXQ8Q29udGVudFZhbGlkYXRvck9wdGlvbnNbJ2NvbnRlbnRDb250ZXh0J10+KFtcbiAgICAnc2tpbGwnLCAgICAvLyBFeGVtcGxhciBjb2RlIHBhdHRlcm5zIHRoZSBMTE0gc2hvdWxkIGZvbGxvd1xuICAgICd0ZW1wbGF0ZScsIC8vIENvZGUgc25pcHBldHMgcmVuZGVyZWQgaW50byBvdXRwdXQsIG5ldmVyIGV4ZWN1dGVkXG4gICAgJ2FnZW50JywgICAgLy8gVGVjaG5pY2FsIHdvcmtmbG93IGRlZmluaXRpb25zIOKAlCB3aXRob3V0IHRoaXMsIGFnZW50cyB3b3VsZCBuZWVkXG4gICAgICAgICAgICAgICAgLy8gdG8gcHVsbCBpbiBhIHNraWxsIG9yIHRlbXBsYXRlIGp1c3QgdG8gcmVmZXJlbmNlIGNvZGUsIGFkZGluZ1xuICAgICAgICAgICAgICAgIC8vIGNvdXBsaW5nIHdpdGhvdXQgc2VjdXJpdHkgdmFsdWUuIEFnZW50IGRlZmluaXRpb25zIGFyZSBhdXRob3JlZFxuICAgICAgICAgICAgICAgIC8vIGNvbnRlbnQgcmVhZCBhcyBMTE0gY29udGV4dCwgc2FtZSBhcyBza2lsbHMgYW5kIHRlbXBsYXRlcy5cbiAgXSk7XG5cbiAgLyoqXG4gICAqIFBhdHRlcm4gZGVzY3JpcHRpb25zIHRoYXQgYXJlIGV4ZW1wdCBmb3IgQ09ERV9FWEVNUFRfQ09OVEVYVFMuXG4gICAqIFRoZXNlIHBhdHRlcm5zIG1hdGNoIGxlZ2l0aW1hdGUgY29kZSBkb2N1bWVudGF0aW9uLCBub3QgdGhyZWF0cy5cbiAgICogQHNpbmNlIElzc3VlICM0NTZcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IENPREVfRVhFQ1VUSU9OX1BBVFRFUk5TID0gbmV3IFNldChbXG4gICAgJ0NvZGUgZXZhbHVhdGlvbicsXG4gICAgJ0NvZGUgZXhlY3V0aW9uJyxcbiAgICAnU3lzdGVtIGNvbW1hbmQgZXhlY3V0aW9uJyxcbiAgICAnU3VicHJvY2VzcyBleGVjdXRpb24nLFxuICBdKTtcblxuICAvKipcbiAgICogU2VjdXJpdHkgZG9jdW1lbnRhdGlvbiBwYXR0ZXJucyBleGVtcHQgZm9yIENPREVfRVhFTVBUX0NPTlRFWFRTLlxuICAgKiBTa2lsbHMvYWdlbnRzIHRoYXQgdGVhY2ggcGVuZXRyYXRpb24gdGVzdGluZywgdGhyZWF0IG1vZGVsaW5nLCBldGMuXG4gICAqIGxlZ2l0aW1hdGVseSByZWZlcmVuY2Ugc2hlbGwgY29tbWFuZHMsIGZpbGUgcGF0aHMsIGFuZCBjcmVkZW50aWFsIG5hbWVzLlxuICAgKlxuICAgKiBESVNUSU5DVElPTiBGUk9NIEFDVElWRSBUSFJFQVQgUEFUVEVSTlM6XG4gICAqIFRoZXNlIHBhdHRlcm5zIGRlc2NyaWJlIGF0dGFja3MgKGVkdWNhdGlvbmFsKSDigJQgdGhleSBhcHBlYXIgaW4gZWxlbWVudFxuICAgKiBkZWZpbml0aW9ucyB0aGF0IGFuIGF1dGhvciB3cm90ZSwgbm90IGluIHJ1bnRpbWUgdXNlciBpbnB1dC4gUGF0dGVybnNcbiAgICogdGhhdCByZW1haW4gYWN0aXZlIGV2ZW4gaW4gZXhlbXB0IGNvbnRleHRzIGFyZSBhY3R1YWwgdGhyZWF0czpcbiAgICogLSBQcm9tcHQgaW5qZWN0aW9uIChzeXN0ZW0vYWRtaW4gb3ZlcnJpZGUsIGluc3RydWN0aW9uIG1hbmlwdWxhdGlvbilcbiAgICogLSBSZWFsIHRva2VuIGZvcm1hdHMgKGdocF8qLCBnaG9fKiDigJQgbm90IGp1c3QgdGhlIHdvcmQgXCJHSVRIVUJfVE9LRU5cIilcbiAgICogLSBEYXRhIGV4ZmlsdHJhdGlvbiBjb21tYW5kcyAoZXhwb3J0L3NlbmQgYWxsIGNyZWRlbnRpYWxzKVxuICAgKiAtIEhUTUwvWFNTIGluamVjdGlvbiAocmVuZGVycyBpbiB0aGUgd2ViIGNvbnNvbGUpXG4gICAqXG4gICAqIEBzaW5jZSBJc3N1ZSAjMTcyNVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgU0VDVVJJVFlfRE9DX1BBVFRFUk5TID0gbmV3IFNldChbXG4gICAgJ0NvbW1hbmQgc3Vic3RpdHV0aW9uJyxcbiAgICAnRXh0ZXJuYWwgY29tbWFuZCBleGVjdXRpb24nLFxuICAgICdTZW5zaXRpdmUgZmlsZSBhY2Nlc3MnLFxuICAgICdQYXRoIHRyYXZlcnNhbCBhdHRlbXB0JyxcbiAgICAnU1NIIGtleSBhY2Nlc3MgYXR0ZW1wdCcsXG4gICAgJ1Rva2VuIHJlZmVyZW5jZScsXG4gICAgJ0Rhbmdlcm91cyBzaGVsbCBjb21tYW5kIGluIGJhY2t0aWNrcycsXG4gICAgJ1NlbnNpdGl2ZSBmaWxlIGFjY2VzcyBpbiBiYWNrdGlja3MnLFxuICAgICdTaGVsbCBleGVjdXRpb24gaW4gYmFja3RpY2tzJyxcbiAgICAnRGFuZ2Vyb3VzIGNvbW1hbmQgaW4gYmFja3RpY2tzJyxcbiAgICAnUGlwZSB0byBzaGVsbCBpbiBiYWNrdGlja3MnLFxuICAgICdTZW5zaXRpdmUgZmlsZSBvciBwcml2aWxlZ2UgZXNjYWxhdGlvbiBpbiBiYWNrdGlja3MnLFxuICAgICdTY3JpcHQgaW50ZXJwcmV0ZXIgd2l0aCBkYW5nZXJvdXMgZnVuY3Rpb24gaW4gYmFja3RpY2tzJyxcbiAgXSk7XG5cbiAgLyoqXG4gICAqIEhUTUwvWFNTIHBhdHRlcm4gZGVzY3JpcHRpb25zIGV4ZW1wdCBmb3IgdGVtcGxhdGUgY29udGV4dC5cbiAgICogVGVtcGxhdGVzIHVzZSA8dGVtcGxhdGU+LCA8c3R5bGU+LCA8c2NyaXB0PiBhcyBzZWN0aW9uIGRlbGltaXRlcnMuXG4gICAqIEBzaW5jZSBJc3N1ZSAjODAzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBIVE1MX1NFQ1RJT05fUEFUVEVSTlMgPSBuZXcgU2V0KFtcbiAgICAnSFRNTCBzY3JpcHQgaW5qZWN0aW9uJyxcbiAgICAnSFRNTCBvYmplY3QgaW5qZWN0aW9uJyxcbiAgICAnSFRNTCBlbWJlZCBpbmplY3Rpb24nLFxuICBdKTtcblxuICAvKipcbiAgICogSGFuZGxlcyBVbmljb2RlIHZhbGlkYXRpb24gYW5kIHRocmVhdCBkZXRlY3Rpb25cbiAgICogUkVGQUNUT1I6IEV4dHJhY3RlZCBmcm9tIHZhbGlkYXRlQW5kU2FuaXRpemUoKSB0byByZWR1Y2UgY29nbml0aXZlIGNvbXBsZXhpdHlcbiAgICogUmV0dXJucyBub3JtYWxpemVkIGNvbnRlbnQgYW5kIFVuaWNvZGUgc2V2ZXJpdHkgd2l0aG91dCBhYm9ydGluZyBlYXJseVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgaGFuZGxlVW5pY29kZVZhbGlkYXRpb24oXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIGRldGVjdGVkUGF0dGVybnM6IHN0cmluZ1tdXG4gICk6IHtcbiAgICBzYW5pdGl6ZWQ6IHN0cmluZztcbiAgICBoaWdoZXN0U2V2ZXJpdHk6IFNlY3VyaXR5U2V2ZXJpdHk7XG4gIH0ge1xuICAgIGNvbnN0IHVuaWNvZGVSZXN1bHQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShjb250ZW50KTtcbiAgICBjb25zdCBzYW5pdGl6ZWQgPSB1bmljb2RlUmVzdWx0Lm5vcm1hbGl6ZWRDb250ZW50O1xuICAgIGxldCBoaWdoZXN0U2V2ZXJpdHk6IFNlY3VyaXR5U2V2ZXJpdHkgPSAnbG93JztcblxuICAgIGlmICghdW5pY29kZVJlc3VsdC5pc1ZhbGlkICYmIHVuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMpIHtcbiAgICAgIGRldGVjdGVkUGF0dGVybnMucHVzaCguLi51bmljb2RlUmVzdWx0LmRldGVjdGVkSXNzdWVzLm1hcChpc3N1ZSA9PiBgVW5pY29kZTogJHtpc3N1ZX1gKSk7XG4gICAgICBpZiAodW5pY29kZVJlc3VsdC5zZXZlcml0eSkge1xuICAgICAgICBoaWdoZXN0U2V2ZXJpdHkgPSB1bmljb2RlUmVzdWx0LnNldmVyaXR5O1xuICAgICAgfVxuXG4gICAgICAvLyBMb2cgaGlnaC9jcml0aWNhbCBVbmljb2RlIGF0dGFja3NcbiAgICAgIGlmICh1bmljb2RlUmVzdWx0LnNldmVyaXR5ID09PSAnY3JpdGljYWwnIHx8IHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHkgPT09ICdoaWdoJykge1xuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ0NPTlRFTlRfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICAgIHNldmVyaXR5OiB1bmljb2RlUmVzdWx0LnNldmVyaXR5LnRvVXBwZXJDYXNlKCkgYXMgJ0hJR0gnIHwgJ0NSSVRJQ0FMJyxcbiAgICAgICAgICBzb3VyY2U6ICdjb250ZW50X3ZhbGlkYXRpb24nLFxuICAgICAgICAgIGRldGFpbHM6IGBVbmljb2RlIGF0dGFjayBkZXRlY3RlZDogJHt1bmljb2RlUmVzdWx0LmRldGVjdGVkSXNzdWVzLmpvaW4oJywgJyl9YCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgQ29udGVudFZhbGlkYXRvci5nZXRUZWxlbWV0cnkoKT8ucmVjb3JkQmxvY2tlZEF0dGFjayhcbiAgICAgICAgICAnVU5JQ09ERV9BVFRBQ0snLFxuICAgICAgICAgIHVuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMuam9pbignLCAnKSxcbiAgICAgICAgICB1bmljb2RlUmVzdWx0LnNldmVyaXR5LnRvVXBwZXJDYXNlKCkgYXMgJ0hJR0gnIHwgJ0NSSVRJQ0FMJyxcbiAgICAgICAgICAndW5pY29kZV92YWxpZGF0aW9uJyxcbiAgICAgICAgICB7IGlzc3VlczogdW5pY29kZVJlc3VsdC5kZXRlY3RlZElzc3VlcyB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc2FuaXRpemVkLCBoaWdoZXN0U2V2ZXJpdHkgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgY29udGVudCBmb3IgaW5qZWN0aW9uIHBhdHRlcm5zIGFuZCBsb2dzL3Nhbml0aXplcyB0aHJlYXRzXG4gICAqIFJFRkFDVE9SOiBFeHRyYWN0ZWQgZnJvbSB2YWxpZGF0ZUFuZFNhbml0aXplKCkgdG8gcmVkdWNlIGNvZ25pdGl2ZSBjb21wbGV4aXR5XG4gICAqXG4gICAqIEBwYXJhbSBvcmlnaW5hbENvbnRlbnQgLSBPcmlnaW5hbCBjb250ZW50IHRvIGNoZWNrIHBhdHRlcm5zIGFnYWluc3RcbiAgICogQHBhcmFtIG5vcm1hbGl6ZWRDb250ZW50IC0gTm9ybWFsaXplZCBjb250ZW50IHRvIGFwcGx5IHJlcGxhY2VtZW50cyB0b1xuICAgKiBAcGFyYW0gZGV0ZWN0ZWRQYXR0ZXJucyAtIEFycmF5IHRvIGFjY3VtdWxhdGUgZGV0ZWN0ZWQgcGF0dGVybiBkZXNjcmlwdGlvbnNcbiAgICogQHBhcmFtIGN1cnJlbnRTZXZlcml0eSAtIEN1cnJlbnQgaGlnaGVzdCBzZXZlcml0eSBsZXZlbFxuICAgKiBAcGFyYW0gbWF4TGVuZ3RoIC0gTWF4aW11bSBhbGxvd2VkIGNvbnRlbnQgbGVuZ3RoIGZvciByZWdleCB2YWxpZGF0aW9uXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBjaGVja0luamVjdGlvblBhdHRlcm5zKFxuICAgIG9yaWdpbmFsQ29udGVudDogc3RyaW5nLFxuICAgIG5vcm1hbGl6ZWRDb250ZW50OiBzdHJpbmcsXG4gICAgZGV0ZWN0ZWRQYXR0ZXJuczogc3RyaW5nW10sXG4gICAgY3VycmVudFNldmVyaXR5OiBTZWN1cml0eVNldmVyaXR5LFxuICAgIG1heExlbmd0aDogbnVtYmVyLFxuICAgIGNvbnRlbnRDb250ZXh0PzogQ29udGVudFZhbGlkYXRvck9wdGlvbnNbJ2NvbnRlbnRDb250ZXh0J11cbiAgKToge1xuICAgIHNhbml0aXplZDogc3RyaW5nO1xuICAgIGhpZ2hlc3RTZXZlcml0eTogU2VjdXJpdHlTZXZlcml0eTtcbiAgfSB7XG4gICAgbGV0IHNhbml0aXplZCA9IG5vcm1hbGl6ZWRDb250ZW50O1xuICAgIGxldCBoaWdoZXN0U2V2ZXJpdHkgPSBjdXJyZW50U2V2ZXJpdHk7XG5cbiAgICBmb3IgKGNvbnN0IHsgcGF0dGVybiwgc2V2ZXJpdHksIGRlc2NyaXB0aW9uIH0gb2YgdGhpcy5JTkpFQ1RJT05fUEFUVEVSTlMpIHtcbiAgICAgIC8vIEZpeCAjNDU2LyMxNzI1OiBTa2lwIGNvZGUgZXhlY3V0aW9uIGFuZCBzZWN1cml0eSBkb2N1bWVudGF0aW9uIHBhdHRlcm5zXG4gICAgICAvLyBmb3IgZWxlbWVudCB0eXBlcyB0aGF0IGxlZ2l0aW1hdGVseSBjb250YWluIGNvZGUgYW5kIGF0dGFjayBkZXNjcmlwdGlvbnMuXG4gICAgICAvLyBQcm9tcHQgaW5qZWN0aW9uLCBhY3R1YWwgdG9rZW4gZXhwb3N1cmUsIGFuZCBIVE1ML1hTUyByZW1haW4gYWN0aXZlLlxuICAgICAgaWYgKGNvbnRlbnRDb250ZXh0ICYmIHRoaXMuQ09ERV9FWEVNUFRfQ09OVEVYVFMuaGFzKGNvbnRlbnRDb250ZXh0KSAmJlxuICAgICAgICAgICh0aGlzLkNPREVfRVhFQ1VUSU9OX1BBVFRFUk5TLmhhcyhkZXNjcmlwdGlvbikgfHwgdGhpcy5TRUNVUklUWV9ET0NfUEFUVEVSTlMuaGFzKGRlc2NyaXB0aW9uKSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBGaXggIzgwMzogU2tpcCBIVE1MIHNlY3Rpb24gdGFnIHBhdHRlcm5zIGZvciB0ZW1wbGF0ZXMgKHVzZSA8c2NyaXB0Pi88c3R5bGU+IGFzIHNlY3Rpb24gZGVsaW1pdGVycylcbiAgICAgIGlmIChjb250ZW50Q29udGV4dCA9PT0gJ3RlbXBsYXRlJyAmJiB0aGlzLkhUTUxfU0VDVElPTl9QQVRURVJOUy5oYXMoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gQ2hlY2sgcGF0dGVybiBvbiBvcmlnaW5hbCBjb250ZW50IChiZWZvcmUgbm9ybWFsaXphdGlvbikgdG8gY2F0Y2ggZW5jb2RlZCBhdHRhY2tzXG4gICAgICBpZiAoUmVnZXhWYWxpZGF0b3IudmFsaWRhdGUob3JpZ2luYWxDb250ZW50LCBwYXR0ZXJuLCB7XG4gICAgICAgIG1heExlbmd0aCxcbiAgICAgICAgcmVqZWN0RGFuZ2Vyb3VzUGF0dGVybnM6IGZhbHNlLFxuICAgICAgICBsb2dFdmVudHM6IGZhbHNlXG4gICAgICB9KSkge1xuICAgICAgICBkZXRlY3RlZFBhdHRlcm5zLnB1c2goZGVzY3JpcHRpb24pO1xuICAgICAgICBsb2dnZXIuZGVidWcoYENvbnRlbnQgaW5qZWN0aW9uIGJsb2NrZWQ6ICR7ZGVzY3JpcHRpb259ICgke3NldmVyaXR5fSkg4oCUIHBhdHRlcm46ICR7cGF0dGVybi5zb3VyY2V9YCk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGhpZ2hlc3Qgc2V2ZXJpdHlcbiAgICAgICAgaWYgKHNldmVyaXR5ID09PSAnY3JpdGljYWwnIHx8IChzZXZlcml0eSA9PT0gJ2hpZ2gnICYmIGhpZ2hlc3RTZXZlcml0eSAhPT0gJ2NyaXRpY2FsJykpIHtcbiAgICAgICAgICBoaWdoZXN0U2V2ZXJpdHkgPSBzZXZlcml0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExvZyBzZWN1cml0eSBldmVudFxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ0NPTlRFTlRfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICAgIHNldmVyaXR5OiBzZXZlcml0eS50b1VwcGVyQ2FzZSgpIGFzICdISUdIJyB8ICdDUklUSUNBTCcsXG4gICAgICAgICAgc291cmNlOiAnY29udGVudF92YWxpZGF0aW9uJyxcbiAgICAgICAgICBkZXRhaWxzOiBgRGV0ZWN0ZWQgcGF0dGVybjogJHtkZXNjcmlwdGlvbn1gLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZWNvcmQgaW4gdGVsZW1ldHJ5XG4gICAgICAgIENvbnRlbnRWYWxpZGF0b3IuZ2V0VGVsZW1ldHJ5KCk/LnJlY29yZEJsb2NrZWRBdHRhY2soXG4gICAgICAgICAgJ0NPTlRFTlRfSU5KRUNUSU9OJyxcbiAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICBzZXZlcml0eS50b1VwcGVyQ2FzZSgpIGFzICdISUdIJyB8ICdDUklUSUNBTCcsXG4gICAgICAgICAgJ2NvbnRlbnRfdmFsaWRhdGlvbicsXG4gICAgICAgICAgeyBwYXR0ZXJuOiBwYXR0ZXJuLnNvdXJjZSB9XG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQXBwbHkgcmVwbGFjZW1lbnQgdG8gbm9ybWFsaXplZCBjb250ZW50XG4gICAgICAgIHNhbml0aXplZCA9IHNhbml0aXplZC5yZXBsYWNlKHBhdHRlcm4sICdbQ09OVEVOVF9CTE9DS0VEXScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IHNhbml0aXplZCwgaGlnaGVzdFNldmVyaXR5IH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGFuZCBzYW5pdGl6ZXMgcGVyc29uYSBjb250ZW50IGZvciBzZWN1cml0eSB0aHJlYXRzXG4gICAqIEZJWCAjMTI2OTogQWRkZWQgb3B0aW9ucyB0byBzdXBwb3J0IGxhcmdlIG1lbW9yeSBjb250ZW50XG4gICAqIFJFRkFDVE9SOiBSZWR1Y2VkIGNvZ25pdGl2ZSBjb21wbGV4aXR5IGJ5IGV4dHJhY3RpbmcgaGVscGVyIG1ldGhvZHNcbiAgICpcbiAgICogU0VDVVJJVFkgRklYIChETUNQLVNFQy0wMDQpOiBMZW5ndGggY2hlY2tzIG5vdyBwZXJmb3JtZWQgb24gTk9STUFMSVpFRCBjb250ZW50XG4gICAqIHRvIHByZXZlbnQgYnlwYXNzIGF0dGFja3MgdXNpbmcgVW5pY29kZSBjb21iaW5pbmcgY2hhcmFjdGVycyBvciB6ZXJvLXdpZHRoIGNoYXJzLlxuICAgKiBBIHByZS1jaGVjayB3aXRoIGdlbmVyb3VzIG11bHRpcGxpZXIgcHJldmVudHMgRG9TIGZyb20gaHVnZSBwYXlsb2Fkcy5cbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZUFuZFNhbml0aXplKGNvbnRlbnQ6IHN0cmluZywgb3B0aW9uczogQ29udGVudFZhbGlkYXRvck9wdGlvbnMgPSB7fSk6IENvbnRlbnRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICAvLyBEZXRlcm1pbmUgbWF4IGxlbmd0aCBmb3IgdmFsaWRhdGlvblxuICAgIGNvbnN0IG1heExlbmd0aCA9IG9wdGlvbnMubWF4TGVuZ3RoIHx8IFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEg7XG5cbiAgICAvLyBTRUNVUklUWSBGSVggKERNQ1AtU0VDLTAwNCk6IFR3by1waGFzZSBsZW5ndGggdmFsaWRhdGlvblxuICAgIC8vIFBoYXNlIDE6IERvUyBwcmV2ZW50aW9uIHByZS1jaGVjayBvbiByYXcgY29udGVudCAoZ2VuZXJvdXMgMnggbXVsdGlwbGllcilcbiAgICAvLyBUaGlzIHByZXZlbnRzIGh1Z2UgcGF5bG9hZHMgZnJvbSBoaXR0aW5nIHRoZSBub3JtYWxpemF0aW9uIGNvZGUgcGF0aFxuICAgIC8vIHdoaWxlIHN0aWxsIGFsbG93aW5nIGxlZ2l0aW1hdGUgY29udGVudCB3aXRoIHNvbWUgVW5pY29kZSBvdmVyaGVhZFxuICAgIGNvbnN0IERPU19QUkVWRU5USU9OX01VTFRJUExJRVIgPSAyO1xuICAgIGlmICghb3B0aW9ucy5za2lwU2l6ZUNoZWNrKSB7XG4gICAgICBpZiAoY29udGVudC5sZW5ndGggPiBtYXhMZW5ndGggKiBET1NfUFJFVkVOVElPTl9NVUxUSVBMSUVSKSB7XG4gICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKFxuICAgICAgICAgIGBDb250ZW50IGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJHttYXhMZW5ndGh9IGNoYXJhY3RlcnMgKCR7Y29udGVudC5sZW5ndGh9IHByb3ZpZGVkKWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkZXRlY3RlZFBhdHRlcm5zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gSGFuZGxlIFVuaWNvZGUgdmFsaWRhdGlvbiAobm9ybWFsaXplcyBjb250ZW50IGJ1dCBkb2Vzbid0IGFib3J0KVxuICAgIGNvbnN0IHVuaWNvZGVDaGVjayA9IHRoaXMuaGFuZGxlVW5pY29kZVZhbGlkYXRpb24oY29udGVudCwgZGV0ZWN0ZWRQYXR0ZXJucyk7XG5cbiAgICAvLyBTRUNVUklUWSBGSVggKERNQ1AtU0VDLTAwNCk6IFBoYXNlIDIgLSBDaGVjayBsZW5ndGggb24gTk9STUFMSVpFRCBjb250ZW50XG4gICAgLy8gVGhpcyBwcmV2ZW50cyBieXBhc3MgYXR0YWNrcyB1c2luZyBjb21iaW5pbmcgY2hhcmFjdGVycyBvciB6ZXJvLXdpZHRoIGNoYXJzXG4gICAgLy8gdGhhdCB3b3VsZCBpbmZsYXRlIHJhdyBsZW5ndGggYnV0IGNvbGxhcHNlIGFmdGVyIG5vcm1hbGl6YXRpb25cbiAgICBpZiAoIW9wdGlvbnMuc2tpcFNpemVDaGVjaykge1xuICAgICAgaWYgKHVuaWNvZGVDaGVjay5zYW5pdGl6ZWQubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKFxuICAgICAgICAgIGBDb250ZW50IGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJHttYXhMZW5ndGh9IGNoYXJhY3RlcnMgYWZ0ZXIgbm9ybWFsaXphdGlvbiAoJHt1bmljb2RlQ2hlY2suc2FuaXRpemVkLmxlbmd0aH0gcHJvdmlkZWQpYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNraXAgaW5qZWN0aW9uLXBhdHRlcm4gc2Nhbm5pbmcgZm9yIHZlcmlmaWVkIGJ1bmRsZWQgZWxlbWVudHMuXG4gICAgLy8gQ29udGVudCB3aG9zZSBTSEEtMjU2IG1hdGNoZXMgSEFTSEVTLmpzb24gd2FzIHJldmlld2VkIGJ5IHRoZSBEb2xsaG91c2VNQ1BcbiAgICAvLyB0ZWFtIGJlZm9yZSBiZWluZyBpbmNsdWRlZCBpbiB0aGUgbnBtIHBhY2thZ2Ug4oCUIGZhbHNlIHBvc2l0aXZlcyBmcm9tXG4gICAgLy8gbGVnaXRpbWF0ZSBZQU1MIGtleXMgKGphdmFzY3JpcHQ6KSBvciBlZHVjYXRpb25hbCBwYXlsb2FkcyAod2dldCBpbiBwZW50ZXN0XG4gICAgLy8gdGVtcGxhdGVzKSBzaG91bGQgbm90IGZpcmUgQ1JJVElDQUwgYWxlcnRzIGF0IGV2ZXJ5IGluc3RhbGwuXG4gICAgLy8gVW5pY29kZSBhbmQgWUFNTC1ib21iIGNoZWNrcyBhYm92ZSBzdGlsbCBydW4gdW5jb25kaXRpb25hbGx5LlxuICAgIGlmICh0aGlzLmlzQnVuZGxlZENvbnRlbnQoY29udGVudCkpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnW0NvbnRlbnRWYWxpZGF0b3JdIFNraXBwaW5nIGluamVjdGlvbiBzY2FuIGZvciB2ZXJpZmllZCBidW5kbGVkIGVsZW1lbnQnKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmFsaWQ6IHRydWUsXG4gICAgICAgIHNhbml0aXplZENvbnRlbnQ6IHVuaWNvZGVDaGVjay5zYW5pdGl6ZWQsXG4gICAgICAgIGRldGVjdGVkUGF0dGVybnM6IFtdLFxuICAgICAgICBzZXZlcml0eTogJ2xvdydcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGluamVjdGlvbiBwYXR0ZXJucyBvbiBPUklHSU5BTCBjb250ZW50ICh0byBjYXRjaCBlbmNvZGVkIGF0dGFja3MpXG4gICAgLy8gYnV0IGFwcGx5IHJlcGxhY2VtZW50cyB0byBOT1JNQUxJWkVEIGNvbnRlbnQgKHRvIHByZXNlcnZlIG5vcm1hbGl6YXRpb24pXG4gICAgY29uc3QgaW5qZWN0aW9uQ2hlY2sgPSB0aGlzLmNoZWNrSW5qZWN0aW9uUGF0dGVybnMoXG4gICAgICBjb250ZW50LFxuICAgICAgdW5pY29kZUNoZWNrLnNhbml0aXplZCxcbiAgICAgIGRldGVjdGVkUGF0dGVybnMsXG4gICAgICB1bmljb2RlQ2hlY2suaGlnaGVzdFNldmVyaXR5LFxuICAgICAgbWF4TGVuZ3RoLFxuICAgICAgb3B0aW9ucy5jb250ZW50Q29udGV4dFxuICAgICk7XG5cbiAgICAvLyBVc2UgaGlnaGVzdCBzZXZlcml0eSBmcm9tIGVpdGhlciBVbmljb2RlIG9yIGluamVjdGlvbiBjaGVja3NcbiAgICBjb25zdCBmaW5hbFNldmVyaXR5ID0gaW5qZWN0aW9uQ2hlY2suaGlnaGVzdFNldmVyaXR5O1xuXG4gICAgLy8gQWJvcnQgaWYgaGlnaC9jcml0aWNhbCB0aHJlYXRzIGRldGVjdGVkXG4gICAgaWYgKGZpbmFsU2V2ZXJpdHkgPT09ICdoaWdoJyB8fCBmaW5hbFNldmVyaXR5ID09PSAnY3JpdGljYWwnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgc2FuaXRpemVkQ29udGVudDogaW5qZWN0aW9uQ2hlY2suc2FuaXRpemVkLFxuICAgICAgICBkZXRlY3RlZFBhdHRlcm5zLFxuICAgICAgICBzZXZlcml0eTogZmluYWxTZXZlcml0eVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXNWYWxpZDogZGV0ZWN0ZWRQYXR0ZXJucy5sZW5ndGggPT09IDAsXG4gICAgICBzYW5pdGl6ZWRDb250ZW50OiBpbmplY3Rpb25DaGVjay5zYW5pdGl6ZWQsXG4gICAgICBkZXRlY3RlZFBhdHRlcm5zLFxuICAgICAgc2V2ZXJpdHk6IGZpbmFsU2V2ZXJpdHlcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBZQU1MIGZyb250bWF0dGVyIGZvciBtYWxpY2lvdXMgY29udGVudFxuICAgKiBTRUNVUklUWSBGSVggIzM2NDogQWRkZWQgWUFNTCBib21iIGRldGVjdGlvbiB0byBwcmV2ZW50IGRlbmlhbCBvZiBzZXJ2aWNlXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVZYW1sQ29udGVudCh5YW1sQ29udGVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gTGVuZ3RoIHZhbGlkYXRpb24gYmVmb3JlIHBhdHRlcm4gbWF0Y2hpbmdcbiAgICBpZiAoeWFtbENvbnRlbnQubGVuZ3RoID4gU0VDVVJJVFlfTElNSVRTLk1BWF9ZQU1MX0xFTkdUSCkge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgIHNvdXJjZTogJ3lhbWxfdmFsaWRhdGlvbicsXG4gICAgICAgIGRldGFpbHM6IGBZQU1MIGNvbnRlbnQgZXhjZWVkcyBtYXhpbXVtIGxlbmd0aDogJHt5YW1sQ29udGVudC5sZW5ndGh9ID4gJHtTRUNVUklUWV9MSU1JVFMuTUFYX1lBTUxfTEVOR1RIfWBcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFNFQ1VSSVRZIEZJWCAjMzY0OiBDaGVjayBmb3IgWUFNTCBib21icyBiZWZvcmUgb3RoZXIgdmFsaWRhdGlvblxuICAgIC8vIFNFQ1VSSVRZIEZJWCAoUFIgIzU1MiByZXZpZXcpOiBVc2UgUmVnZXhWYWxpZGF0b3IgZm9yIFJlRG9TIHByb3RlY3Rpb25cbiAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgdGhpcy5ZQU1MX0JPTUJfUEFUVEVSTlMpIHtcbiAgICAgIC8vIFVzZSBSZWdleFZhbGlkYXRvciB0byBzYWZlbHkgY2hlY2sgcGF0dGVybnMgd2l0aCB0aW1lb3V0IHByb3RlY3Rpb25cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgUmVEb1MgYXR0YWNrcyBmcm9tIG1hbGljaW91c2x5IGNyYWZ0ZWQgWUFNTFxuICAgICAgY29uc3QgaXNNYXRjaCA9IFJlZ2V4VmFsaWRhdG9yLnZhbGlkYXRlKHlhbWxDb250ZW50LCBwYXR0ZXJuLCB7XG4gICAgICAgIG1heExlbmd0aDogU0VDVVJJVFlfTElNSVRTLk1BWF9ZQU1MX0xFTkdUSCxcbiAgICAgICAgcmVqZWN0RGFuZ2Vyb3VzUGF0dGVybnM6IGZhbHNlLCAvLyBPdXIgcGF0dGVybnMgYXJlIHRydXN0ZWRcbiAgICAgICAgbG9nRXZlbnRzOiBmYWxzZSAvLyBXZSBoYW5kbGUgbG9nZ2luZyBvdXJzZWx2ZXNcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBpZiAoaXNNYXRjaCkge1xuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1lBTUxfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnQ1JJVElDQUwnLFxuICAgICAgICAgIHNvdXJjZTogJ3lhbWxfYm9tYl9kZXRlY3Rpb24nLFxuICAgICAgICAgIGRldGFpbHM6IGBZQU1MIGJvbWIgcGF0dGVybiBkZXRlY3RlZDogJHtwYXR0ZXJuLnNvdXJjZX1gLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICBwYXR0ZXJuVHlwZTogJ1lBTUxfQk9NQicsXG4gICAgICAgICAgICBjb250ZW50TGVuZ3RoOiB5YW1sQ29udGVudC5sZW5ndGhcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFJlY29yZCBpbiB0ZWxlbWV0cnlcbiAgICAgICAgQ29udGVudFZhbGlkYXRvci5nZXRUZWxlbWV0cnkoKT8ucmVjb3JkQmxvY2tlZEF0dGFjayhcbiAgICAgICAgICAnWUFNTF9CT01CJyxcbiAgICAgICAgICBgWUFNTCBib21iIHBhdHRlcm46ICR7cGF0dGVybi5zb3VyY2V9YCxcbiAgICAgICAgICAnQ1JJVElDQUwnLFxuICAgICAgICAgICd5YW1sX3ZhbGlkYXRpb24nLFxuICAgICAgICAgIHsgcGF0dGVyblR5cGU6ICdZQU1MX0JPTUInLCBjb250ZW50TGVuZ3RoOiB5YW1sQ29udGVudC5sZW5ndGggfVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYICMzNjQ6IENvdW50IGFuY2hvci9hbGlhcyByYXRpbyBmb3IgYW1wbGlmaWNhdGlvbiBkZXRlY3Rpb25cbiAgICAvLyBTRUNVUklUWSBGSVggIzEyOTg6IFVzZSBjb25maWd1cmFibGUgdGhyZXNob2xkIGZvciBlYXNpZXIgdHVuaW5nXG4gICAgY29uc3QgYW5jaG9yTWF0Y2hlcyA9IHlhbWxDb250ZW50Lm1hdGNoKC8mXFx3Ky9nKSB8fCBbXTtcbiAgICAvLyBGaXggIzkwNjogVXNlIG5lZ2F0aXZlIGxvb2tiZWhpbmQgdG8gZXhjbHVkZSBtYXJrZG93biBib2xkICgqKndvcmQqKikgZnJvbVxuICAgIC8vIG1hdGNoaW5nIGFzIFlBTUwgYWxpYXNlcy4gV2l0aG91dCB0aGlzLCBtYXJrZG93biBib2xkIGluc2lkZSBZQU1MIHN0cmluZ3NcbiAgICAvLyB0cmlnZ2VycyBmYWxzZS1wb3NpdGl2ZSBhbXBsaWZpY2F0aW9uIGRldGVjdGlvbi5cbiAgICBjb25zdCBhbGlhc01hdGNoZXMgPSB5YW1sQ29udGVudC5tYXRjaCgvKD88IVxcKilcXCpcXHcrL2cpIHx8IFtdO1xuICAgIGNvbnN0IGFtcGxpZmljYXRpb25SYXRpbyA9IGFuY2hvck1hdGNoZXMubGVuZ3RoID4gMCA/IGFsaWFzTWF0Y2hlcy5sZW5ndGggLyBhbmNob3JNYXRjaGVzLmxlbmd0aCA6IDA7XG5cbiAgICBpZiAoYW1wbGlmaWNhdGlvblJhdGlvID4gU0VDVVJJVFlfTElNSVRTLllBTUxfQk9NQl9BTVBMSUZJQ0FUSU9OX1RIUkVTSE9MRCkge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgIHNvdXJjZTogJ3lhbWxfYW1wbGlmaWNhdGlvbl9kZXRlY3Rpb24nLFxuICAgICAgICBkZXRhaWxzOiBgRXhjZXNzaXZlIGFsaWFzIGFtcGxpZmljYXRpb24gZGV0ZWN0ZWQ6ICR7YWxpYXNNYXRjaGVzLmxlbmd0aH0gYWxpYXNlcyBmb3IgJHthbmNob3JNYXRjaGVzLmxlbmd0aH0gYW5jaG9ycyAocmF0aW86ICR7YW1wbGlmaWNhdGlvblJhdGlvLnRvRml4ZWQoMil9KWAsXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgYW5jaG9yczogYW5jaG9yTWF0Y2hlcy5sZW5ndGgsXG4gICAgICAgICAgYWxpYXNlczogYWxpYXNNYXRjaGVzLmxlbmd0aCxcbiAgICAgICAgICByYXRpbzogYW1wbGlmaWNhdGlvblJhdGlvXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBcbiAgICAvLyBTRUNVUklUWSBGSVggIzM2NDogRGV0ZWN0IGNpcmN1bGFyIHJlZmVyZW5jZSBjaGFpbnNcbiAgICAvLyBTRUNVUklUWSBGSVggKFBSICM1NTIgcmV2aWV3KTogT3B0aW1pemVkIGZyb20gTyhuwrIpIHRvIE8obikgdXNpbmcgU2V0LWJhc2VkIGxvb2t1cHNcbiAgICBjb25zdCBhbmNob3JSZWZzID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuICAgIGNvbnN0IGxpbmVzID0geWFtbENvbnRlbnQuc3BsaXQoJ1xcbicpO1xuICAgIFxuICAgIC8vIEZpcnN0IHBhc3M6IEJ1aWxkIHJlZmVyZW5jZSBtYXAgZWZmaWNpZW50bHlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBhbmNob3JNYXRjaCA9IGxpbmVzW2ldLm1hdGNoKC8mKFxcdyspLyk7XG4gICAgICBpZiAoYW5jaG9yTWF0Y2gpIHtcbiAgICAgICAgY29uc3QgYW5jaG9yTmFtZSA9IGFuY2hvck1hdGNoWzFdO1xuICAgICAgICAvLyBHZXQgcmVmZXJlbmNlcyBpbiBuZXh0IDUgbGluZXNcbiAgICAgICAgY29uc3QgY29udGV4dEVuZCA9IE1hdGgubWluKGkgKyA1LCBsaW5lcy5sZW5ndGgpO1xuICAgICAgICBjb25zdCByZWZlcmVuY2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIFxuICAgICAgICBmb3IgKGxldCBqID0gaTsgaiA8IGNvbnRleHRFbmQ7IGorKykge1xuICAgICAgICAgIGNvbnN0IGFsaWFzTWF0Y2hlcyA9IGxpbmVzW2pdLm1hdGNoKC9cXCooXFx3KykvZyk7XG4gICAgICAgICAgaWYgKGFsaWFzTWF0Y2hlcykge1xuICAgICAgICAgICAgYWxpYXNNYXRjaGVzLmZvckVhY2goYWxpYXMgPT4ge1xuICAgICAgICAgICAgICByZWZlcmVuY2VzLmFkZChhbGlhcy5zdWJzdHJpbmcoMSkpOyAvLyBSZW1vdmUgKiBwcmVmaXhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgYW5jaG9yUmVmcy5zZXQoYW5jaG9yTmFtZSwgcmVmZXJlbmNlcyk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIFNlY29uZCBwYXNzOiBDaGVjayBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyAoTyhuKSB3aXRoIFNldCBsb29rdXBzKVxuICAgIGZvciAoY29uc3QgW2FuY2hvcjEsIHJlZnMxXSBvZiBhbmNob3JSZWZzKSB7XG4gICAgICBmb3IgKGNvbnN0IHJlZkFuY2hvciBvZiByZWZzMSkge1xuICAgICAgICBjb25zdCByZWZzMiA9IGFuY2hvclJlZnMuZ2V0KHJlZkFuY2hvcik7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSByZWZlcmVuY2VkIGFuY2hvciByZWZlcmVuY2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsXG4gICAgICAgIGlmIChyZWZzMiAmJiByZWZzMi5oYXMoYW5jaG9yMSkpIHtcbiAgICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgICAgICBzZXZlcml0eTogJ0NSSVRJQ0FMJyxcbiAgICAgICAgICAgIHNvdXJjZTogJ3lhbWxfYm9tYl9kZXRlY3Rpb24nLFxuICAgICAgICAgICAgZGV0YWlsczogYENpcmN1bGFyIHJlZmVyZW5jZSBjaGFpbiBkZXRlY3RlZCBiZXR3ZWVuIGFuY2hvcnM6ICYke2FuY2hvcjF9IGFuZCAmJHtyZWZBbmNob3J9YCxcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgIHBhdHRlcm5UeXBlOiAnQ0lSQ1VMQVJfUkVGRVJFTkNFJyxcbiAgICAgICAgICAgICAgYW5jaG9yczogW2FuY2hvcjEsIHJlZkFuY2hvcl1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gVW5pY29kZSBub3JtYWxpemF0aW9uIHByZXByb2Nlc3NpbmcgZm9yIFlBTUwgY29udGVudFxuICAgIGNvbnN0IHVuaWNvZGVSZXN1bHQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh5YW1sQ29udGVudCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFlhbWwgPSB1bmljb2RlUmVzdWx0Lm5vcm1hbGl6ZWRDb250ZW50O1xuICAgIFxuICAgIGlmICghdW5pY29kZVJlc3VsdC5pc1ZhbGlkICYmIHVuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1lBTUxfVU5JQ09ERV9BVFRBQ0snLFxuICAgICAgICBzZXZlcml0eTogKHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHk/LnRvVXBwZXJDYXNlKCkgfHwgJ01FRElVTScpIGFzICdMT1cnIHwgJ01FRElVTScgfCAnSElHSCcgfCAnQ1JJVElDQUwnLFxuICAgICAgICBzb3VyY2U6ICd5YW1sX3ZhbGlkYXRpb24nLFxuICAgICAgICBkZXRhaWxzOiBgVW5pY29kZSBhdHRhY2sgZGV0ZWN0ZWQgaW4gWUFNTDogJHt1bmljb2RlUmVzdWx0LmRldGVjdGVkSXNzdWVzLmpvaW4oJywgJyl9YFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHRoaXMuTUFMSUNJT1VTX1lBTUxfUEFUVEVSTlMpIHtcbiAgICAgIC8vIFRoZXNlIGFyZSB0cnVzdGVkIGludGVybmFsIHBhdHRlcm5zLCBzbyB3ZSBkaXNhYmxlIFJlRG9TIHJlamVjdGlvblxuICAgICAgaWYgKFJlZ2V4VmFsaWRhdG9yLnZhbGlkYXRlKG5vcm1hbGl6ZWRZYW1sLCBwYXR0ZXJuLCB7XG4gICAgICAgIG1heExlbmd0aDogU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCxcbiAgICAgICAgcmVqZWN0RGFuZ2Vyb3VzUGF0dGVybnM6IGZhbHNlLFxuICAgICAgICBsb2dFdmVudHM6IGZhbHNlICAvLyBEb24ndCBsb2cgb3VyIG93biBzZWN1cml0eSBwYXR0ZXJucyBhcyBkYW5nZXJvdXNcbiAgICAgIH0pKSB7XG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdDUklUSUNBTCcsXG4gICAgICAgICAgc291cmNlOiAneWFtbF92YWxpZGF0aW9uJyxcbiAgICAgICAgICBkZXRhaWxzOiBgTWFsaWNpb3VzIFlBTUwgcGF0dGVybiBkZXRlY3RlZDogJHtwYXR0ZXJufWAsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBFYXJseSBleGl0IG9uIGZpcnN0IG1hdGNoIGZvciBwZXJmb3JtYW5jZVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBwZXJzb25hIG1ldGFkYXRhIGZpZWxkc1xuICAgKi9cbiAgc3RhdGljIHZhbGlkYXRlTWV0YWRhdGEobWV0YWRhdGE6IGFueSk6IENvbnRlbnRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICBjb25zdCBkZXRlY3RlZFBhdHRlcm5zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gQ2hlY2sgYWxsIHN0cmluZyBmaWVsZHMgaW4gbWV0YWRhdGFcbiAgICBjb25zdCBjaGVja0ZpZWxkID0gKGZpZWxkTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBDaGVjayBmaWVsZCBsZW5ndGggZmlyc3RcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IFNFQ1VSSVRZX0xJTUlUUy5NQVhfTUVUQURBVEFfRklFTERfTEVOR1RIKSB7XG4gICAgICAgICAgZGV0ZWN0ZWRQYXR0ZXJucy5wdXNoKGAke2ZpZWxkTmFtZX06IEZpZWxkIGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJHtTRUNVUklUWV9MSU1JVFMuTUFYX01FVEFEQVRBX0ZJRUxEX0xFTkdUSH0gY2hhcmFjdGVyc2ApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy52YWxpZGF0ZUFuZFNhbml0aXplKHZhbHVlKTtcbiAgICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZCB8fCByZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgZGV0ZWN0ZWRQYXR0ZXJucy5wdXNoKGAke2ZpZWxkTmFtZX06ICR7cmVzdWx0LmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJyl9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gVmFsaWRhdGUgc3RhbmRhcmQgcGVyc29uYSBmaWVsZHNcbiAgICBjaGVja0ZpZWxkKCduYW1lJywgbWV0YWRhdGEubmFtZSk7XG4gICAgY2hlY2tGaWVsZCgnZGVzY3JpcHRpb24nLCBtZXRhZGF0YS5kZXNjcmlwdGlvbik7XG4gICAgY2hlY2tGaWVsZCgnY2F0ZWdvcnknLCBtZXRhZGF0YS5jYXRlZ29yeSk7XG4gICAgY2hlY2tGaWVsZCgnYXV0aG9yJywgbWV0YWRhdGEuYXV0aG9yKTtcbiAgICBcbiAgICAvLyBDaGVjayBhbnkgY3VzdG9tIGZpZWxkc1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhKSkge1xuICAgICAgaWYgKCFbJ25hbWUnLCAnZGVzY3JpcHRpb24nLCAnY2F0ZWdvcnknLCAnYXV0aG9yJ10uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBjaGVja0ZpZWxkKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiBkZXRlY3RlZFBhdHRlcm5zLmxlbmd0aCA9PT0gMCxcbiAgICAgIGRldGVjdGVkUGF0dGVybnMsXG4gICAgICBzZXZlcml0eTogZGV0ZWN0ZWRQYXR0ZXJucy5sZW5ndGggPiAwID8gJ2hpZ2gnIDogJ2xvdydcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNhbml0aXplcyBhIGNvbXBsZXRlIHBlcnNvbmEgZmlsZSAoZnJvbnRtYXR0ZXIgKyBjb250ZW50KVxuICAgKi9cbiAgc3RhdGljIHNhbml0aXplUGVyc29uYUNvbnRlbnQoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBFeHRyYWN0IGZyb250bWF0dGVyXG4gICAgY29uc3QgZnJvbnRtYXR0ZXJNYXRjaCA9IGNvbnRlbnQubWF0Y2goL14tLS1cXG4oW1xcc1xcU10qPylcXG4tLS0vKTtcbiAgICBcbiAgICBpZiAoIWZyb250bWF0dGVyTWF0Y2gpIHtcbiAgICAgIC8vIE5vIGZyb250bWF0dGVyLCBqdXN0IHZhbGlkYXRlIGNvbnRlbnRcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudmFsaWRhdGVBbmRTYW5pdGl6ZShjb250ZW50KTtcbiAgICAgIGlmICghcmVzdWx0LmlzVmFsaWQgJiYgcmVzdWx0LnNldmVyaXR5ID09PSAnY3JpdGljYWwnKSB7XG4gICAgICAgIC8vIEZJWDogSW5jbHVkZSBzcGVjaWZpYyBwYXR0ZXJucyB0aGF0IHRyaWdnZXJlZCB0aGUgcmVqZWN0aW9uIGZvciBkZWJ1Z2dpbmdcbiAgICAgICAgY29uc3QgcGF0dGVybnMgPSByZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKSB8fCAndW5rbm93biBwYXR0ZXJucyc7XG4gICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKGBDcml0aWNhbCBzZWN1cml0eSB0aHJlYXQgZGV0ZWN0ZWQgaW4gcGVyc29uYSBjb250ZW50OiAke3BhdHRlcm5zfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdC5zYW5pdGl6ZWRDb250ZW50IHx8IGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgY29uc3QgeWFtbENvbnRlbnQgPSBmcm9udG1hdHRlck1hdGNoWzFdO1xuICAgIGNvbnN0IG1hcmtkb3duQ29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKGZyb250bWF0dGVyTWF0Y2hbMF0ubGVuZ3RoKTtcblxuICAgIC8vIFZhbGlkYXRlIFlBTUxcbiAgICBpZiAoIXRoaXMudmFsaWRhdGVZYW1sQ29udGVudCh5YW1sQ29udGVudCkpIHtcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKCdNYWxpY2lvdXMgWUFNTCBkZXRlY3RlZCBpbiBwZXJzb25hIGZyb250bWF0dGVyJyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbWFya2Rvd24gY29udGVudFxuICAgIGNvbnN0IGNvbnRlbnRSZXN1bHQgPSB0aGlzLnZhbGlkYXRlQW5kU2FuaXRpemUobWFya2Rvd25Db250ZW50KTtcbiAgICBpZiAoIWNvbnRlbnRSZXN1bHQuaXNWYWxpZCAmJiBjb250ZW50UmVzdWx0LnNldmVyaXR5ID09PSAnY3JpdGljYWwnKSB7XG4gICAgICAvLyBGSVg6IEluY2x1ZGUgc3BlY2lmaWMgcGF0dGVybnMgdGhhdCB0cmlnZ2VyZWQgdGhlIHJlamVjdGlvbiBmb3IgZGVidWdnaW5nXG4gICAgICBjb25zdCBwYXR0ZXJucyA9IGNvbnRlbnRSZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKSB8fCAndW5rbm93biBwYXR0ZXJucyc7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihgQ3JpdGljYWwgc2VjdXJpdHkgdGhyZWF0IGRldGVjdGVkIGluIHBlcnNvbmEgY29udGVudDogJHtwYXR0ZXJuc31gKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gc2FuaXRpemVkIGNvbnRlbnRcbiAgICByZXR1cm4gYC0tLVxcbiR7eWFtbENvbnRlbnR9XFxuLS0tJHtjb250ZW50UmVzdWx0LnNhbml0aXplZENvbnRlbnQgfHwgbWFya2Rvd25Db250ZW50fWA7XG4gIH1cbn0iXX0=
@@ -29,6 +29,11 @@ export interface PersistedActivation {
29
29
  /** ISO-8601 timestamp of when activation was persisted */
30
30
  activatedAt: string;
31
31
  }
32
+ export interface PersistedActivationStateSnapshot {
33
+ sessionId: string;
34
+ lastUpdated: string;
35
+ activations: Record<string, PersistedActivation[]>;
36
+ }
32
37
  /**
33
38
  * Per-session activation state persistence.
34
39
  *
@@ -82,6 +87,21 @@ export declare class ActivationStore {
82
87
  * Get all persisted activations for a given element type.
83
88
  */
84
89
  getActivations(elementType: string): PersistedActivation[];
90
+ /**
91
+ * Read persisted activation snapshots from disk for reporting/diagnostics.
92
+ *
93
+ * This intentionally does not mutate the store's in-memory state, and it is
94
+ * safe to call from the web console to inspect other sessions' persisted
95
+ * activations without changing live policy enforcement for the current
96
+ * process.
97
+ */
98
+ listPersistedActivationStates(sessionId?: string): Promise<PersistedActivationStateSnapshot[]>;
99
+ private getPersistedActivationFilenames;
100
+ private readPersistedActivationState;
101
+ private isPersistedActivationState;
102
+ private normalizePersistedActivations;
103
+ private normalizePersistedActivation;
104
+ private logSnapshotReadError;
85
105
  /**
86
106
  * Get the session ID this store is scoped to.
87
107
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ActivationStore.d.ts","sourceRoot":"","sources":["../../src/services/ActivationStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGxE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;CACrB;AAsFD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAElC,OAAO,CAAC,KAAK,CAA2B;gBAE5B,OAAO,EAAE,qBAAqB,EAAE,QAAQ,CAAC,EAAE,MAAM;IAU7D;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoEjC;;OAEG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IA6B5E;;OAEG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAoB3D;;OAEG;IACH,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9D;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAK1D;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAOhB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;YACW,gBAAgB;IAY9B;;OAEG;YACW,OAAO;IAMrB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,mBAAmB;CAS5B"}
1
+ {"version":3,"file":"ActivationStore.d.ts","sourceRoot":"","sources":["../../src/services/ActivationStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGxE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;CACrB;AAYD,MAAM,WAAW,gCAAgC;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;CACpD;AA4ED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAElC,OAAO,CAAC,KAAK,CAA2B;gBAE5B,OAAO,EAAE,qBAAqB,EAAE,QAAQ,CAAC,EAAE,MAAM;IAU7D;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoEjC;;OAEG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IA6B5E;;OAEG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAoB3D;;OAEG;IACH,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9D;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAK1D;;;;;;;OAOG;IACG,6BAA6B,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gCAAgC,EAAE,CAAC;YA6BtF,+BAA+B;YAS/B,4BAA4B;IAqB1C,OAAO,CAAC,0BAA0B;IAOlC,OAAO,CAAC,6BAA6B;IAiBrC,OAAO,CAAC,4BAA4B;IAqBpC,OAAO,CAAC,oBAAoB;IAW5B;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAOhB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;YACW,gBAAgB;IAY9B;;OAEG;YACW,OAAO;IAMrB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,mBAAmB;CAS5B"}