@dollhousemcp/mcp-server 2.0.0-rc.5 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/CHANGELOG.md +54 -17
  2. package/README.github.md +2 -2
  3. package/README.md +2 -2
  4. package/README.md.backup +284 -224
  5. package/README.npm.md +2 -2
  6. package/dist/cache/LRUCache.d.ts +3 -0
  7. package/dist/cache/LRUCache.d.ts.map +1 -1
  8. package/dist/cache/LRUCache.js +36 -26
  9. package/dist/config/env.d.ts +14 -4
  10. package/dist/config/env.d.ts.map +1 -1
  11. package/dist/config/env.js +20 -6
  12. package/dist/di/Container.d.ts +21 -0
  13. package/dist/di/Container.d.ts.map +1 -1
  14. package/dist/di/Container.js +250 -53
  15. package/dist/elements/BaseElement.d.ts.map +1 -1
  16. package/dist/elements/BaseElement.js +5 -10
  17. package/dist/elements/base/BaseElementManager.d.ts +22 -0
  18. package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
  19. package/dist/elements/base/BaseElementManager.js +47 -7
  20. package/dist/elements/memories/Memory.d.ts +1 -0
  21. package/dist/elements/memories/Memory.d.ts.map +1 -1
  22. package/dist/elements/memories/Memory.js +12 -8
  23. package/dist/elements/memories/MemoryManager.d.ts.map +1 -1
  24. package/dist/elements/memories/MemoryManager.js +23 -42
  25. package/dist/elements/memories/MemorySearchIndex.js +2 -2
  26. package/dist/generated/version.d.ts +2 -2
  27. package/dist/generated/version.d.ts.map +1 -1
  28. package/dist/generated/version.js +3 -3
  29. package/dist/handlers/EnhancedIndexHandler.js +6 -6
  30. package/dist/handlers/element-crud/editElement.d.ts.map +1 -1
  31. package/dist/handlers/element-crud/editElement.js +39 -18
  32. package/dist/handlers/element-crud/helpers.d.ts.map +1 -1
  33. package/dist/handlers/element-crud/helpers.js +30 -3
  34. package/dist/handlers/element-crud/listElements.d.ts +2 -0
  35. package/dist/handlers/element-crud/listElements.d.ts.map +1 -1
  36. package/dist/handlers/element-crud/listElements.js +3 -1
  37. package/dist/handlers/mcp-aql/Gatekeeper.d.ts.map +1 -1
  38. package/dist/handlers/mcp-aql/Gatekeeper.js +23 -17
  39. package/dist/handlers/mcp-aql/GatekeeperTypes.d.ts +4 -0
  40. package/dist/handlers/mcp-aql/GatekeeperTypes.d.ts.map +1 -1
  41. package/dist/handlers/mcp-aql/GatekeeperTypes.js +1 -1
  42. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +33 -0
  43. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  44. package/dist/handlers/mcp-aql/MCPAQLHandler.js +232 -23
  45. package/dist/handlers/mcp-aql/OperationRouter.d.ts.map +1 -1
  46. package/dist/handlers/mcp-aql/OperationRouter.js +13 -1
  47. package/dist/handlers/mcp-aql/OperationSchema.d.ts +7 -0
  48. package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
  49. package/dist/handlers/mcp-aql/OperationSchema.js +52 -1
  50. package/dist/handlers/mcp-aql/UnifiedEndpoint.d.ts.map +1 -1
  51. package/dist/handlers/mcp-aql/UnifiedEndpoint.js +4 -3
  52. package/dist/handlers/mcp-aql/evaluatePermission.d.ts +53 -0
  53. package/dist/handlers/mcp-aql/evaluatePermission.d.ts.map +1 -0
  54. package/dist/handlers/mcp-aql/evaluatePermission.js +132 -0
  55. package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts +17 -0
  56. package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts.map +1 -1
  57. package/dist/handlers/mcp-aql/policies/ElementPolicies.js +91 -1
  58. package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts +5 -3
  59. package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts.map +1 -1
  60. package/dist/handlers/mcp-aql/policies/ToolClassification.js +56 -2
  61. package/dist/handlers/mcp-aql/types.d.ts +22 -0
  62. package/dist/handlers/mcp-aql/types.d.ts.map +1 -1
  63. package/dist/handlers/mcp-aql/types.js +47 -1
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +3 -3
  66. package/dist/logging/LogHooks.js +11 -11
  67. package/dist/logging/LogManager.d.ts +0 -2
  68. package/dist/logging/LogManager.d.ts.map +1 -1
  69. package/dist/logging/LogManager.js +1 -3
  70. package/dist/logging/sinks/MemoryLogSink.d.ts +2 -0
  71. package/dist/logging/sinks/MemoryLogSink.d.ts.map +1 -1
  72. package/dist/logging/sinks/MemoryLogSink.js +12 -3
  73. package/dist/logging/types.d.ts +0 -2
  74. package/dist/logging/types.d.ts.map +1 -1
  75. package/dist/logging/types.js +1 -1
  76. package/dist/metrics/GatekeeperMetricsTracker.d.ts +32 -0
  77. package/dist/metrics/GatekeeperMetricsTracker.d.ts.map +1 -0
  78. package/dist/metrics/GatekeeperMetricsTracker.js +42 -0
  79. package/dist/metrics/MetricsManager.d.ts +47 -0
  80. package/dist/metrics/MetricsManager.d.ts.map +1 -0
  81. package/dist/metrics/MetricsManager.js +232 -0
  82. package/dist/metrics/OperationMetricsTracker.d.ts +32 -0
  83. package/dist/metrics/OperationMetricsTracker.d.ts.map +1 -0
  84. package/dist/metrics/OperationMetricsTracker.js +53 -0
  85. package/dist/metrics/collectors/DefaultElementProviderCollector.d.ts +27 -0
  86. package/dist/metrics/collectors/DefaultElementProviderCollector.d.ts.map +1 -0
  87. package/dist/metrics/collectors/DefaultElementProviderCollector.js +69 -0
  88. package/dist/metrics/collectors/FileLockManagerCollector.d.ts +16 -0
  89. package/dist/metrics/collectors/FileLockManagerCollector.d.ts.map +1 -0
  90. package/dist/metrics/collectors/FileLockManagerCollector.js +51 -0
  91. package/dist/metrics/collectors/GatekeeperMetricsCollector.d.ts +16 -0
  92. package/dist/metrics/collectors/GatekeeperMetricsCollector.d.ts.map +1 -0
  93. package/dist/metrics/collectors/GatekeeperMetricsCollector.js +76 -0
  94. package/dist/metrics/collectors/LRUCacheCollector.d.ts +18 -0
  95. package/dist/metrics/collectors/LRUCacheCollector.d.ts.map +1 -0
  96. package/dist/metrics/collectors/LRUCacheCollector.js +95 -0
  97. package/dist/metrics/collectors/OperationMetricsCollector.d.ts +16 -0
  98. package/dist/metrics/collectors/OperationMetricsCollector.d.ts.map +1 -0
  99. package/dist/metrics/collectors/OperationMetricsCollector.js +80 -0
  100. package/dist/metrics/collectors/OperationalTelemetryCollector.d.ts +17 -0
  101. package/dist/metrics/collectors/OperationalTelemetryCollector.d.ts.map +1 -0
  102. package/dist/metrics/collectors/OperationalTelemetryCollector.js +26 -0
  103. package/dist/metrics/collectors/PerformanceMonitorCollector.d.ts +14 -0
  104. package/dist/metrics/collectors/PerformanceMonitorCollector.d.ts.map +1 -0
  105. package/dist/metrics/collectors/PerformanceMonitorCollector.js +141 -0
  106. package/dist/metrics/collectors/SecurityMonitorCollector.d.ts +21 -0
  107. package/dist/metrics/collectors/SecurityMonitorCollector.d.ts.map +1 -0
  108. package/dist/metrics/collectors/SecurityMonitorCollector.js +56 -0
  109. package/dist/metrics/collectors/SecurityTelemetryCollector.d.ts +15 -0
  110. package/dist/metrics/collectors/SecurityTelemetryCollector.d.ts.map +1 -0
  111. package/dist/metrics/collectors/SecurityTelemetryCollector.js +112 -0
  112. package/dist/metrics/collectors/TriggerMetricsTrackerCollector.d.ts +16 -0
  113. package/dist/metrics/collectors/TriggerMetricsTrackerCollector.d.ts.map +1 -0
  114. package/dist/metrics/collectors/TriggerMetricsTrackerCollector.js +26 -0
  115. package/dist/metrics/collectors/index.d.ts +11 -0
  116. package/dist/metrics/collectors/index.d.ts.map +1 -0
  117. package/dist/metrics/collectors/index.js +11 -0
  118. package/dist/metrics/sinks/MemoryMetricsSink.d.ts +22 -0
  119. package/dist/metrics/sinks/MemoryMetricsSink.d.ts.map +1 -0
  120. package/dist/metrics/sinks/MemoryMetricsSink.js +121 -0
  121. package/dist/metrics/types.d.ts +98 -0
  122. package/dist/metrics/types.d.ts.map +1 -0
  123. package/dist/metrics/types.js +24 -0
  124. package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
  125. package/dist/portfolio/DefaultElementProvider.js +1 -7
  126. package/dist/portfolio/EnhancedIndexManager.d.ts.map +1 -1
  127. package/dist/portfolio/EnhancedIndexManager.js +18 -18
  128. package/dist/portfolio/NLPScoringManager.d.ts.map +1 -1
  129. package/dist/portfolio/NLPScoringManager.js +5 -9
  130. package/dist/portfolio/PortfolioIndexManager.js +2 -2
  131. package/dist/portfolio/RelationshipManager.js +2 -2
  132. package/dist/portfolio/VerbTriggerManager.d.ts.map +1 -1
  133. package/dist/portfolio/VerbTriggerManager.js +5 -19
  134. package/dist/portfolio/config/IndexConfig.d.ts.map +1 -1
  135. package/dist/portfolio/config/IndexConfig.js +1 -12
  136. package/dist/portfolio/enhanced-index/ElementDefinitionBuilder.d.ts.map +1 -1
  137. package/dist/portfolio/enhanced-index/ElementDefinitionBuilder.js +3 -15
  138. package/dist/portfolio/enhanced-index/SemanticRelationshipService.d.ts.map +1 -1
  139. package/dist/portfolio/enhanced-index/SemanticRelationshipService.js +2 -16
  140. package/dist/portfolio/types/RelationshipTypes.d.ts.map +1 -1
  141. package/dist/portfolio/types/RelationshipTypes.js +3 -17
  142. package/dist/security/audit/config/suppressions.d.ts.map +1 -1
  143. package/dist/security/audit/config/suppressions.js +36 -8
  144. package/dist/security/constants.d.ts.map +1 -1
  145. package/dist/security/constants.js +10 -6
  146. package/dist/security/fileLockManager.d.ts.map +1 -1
  147. package/dist/security/fileLockManager.js +8 -6
  148. package/dist/security/secureYamlParser.d.ts.map +1 -1
  149. package/dist/security/secureYamlParser.js +1 -13
  150. package/dist/security/securityMonitor.d.ts +2 -1
  151. package/dist/security/securityMonitor.d.ts.map +1 -1
  152. package/dist/security/securityMonitor.js +14 -3
  153. package/dist/security/telemetry/SecurityTelemetry.d.ts +16 -0
  154. package/dist/security/telemetry/SecurityTelemetry.d.ts.map +1 -1
  155. package/dist/security/telemetry/SecurityTelemetry.js +30 -2
  156. package/dist/security/tokenManager.d.ts +3 -0
  157. package/dist/security/tokenManager.d.ts.map +1 -1
  158. package/dist/security/tokenManager.js +13 -5
  159. package/dist/security/validation/BackgroundValidator.d.ts.map +1 -1
  160. package/dist/security/validation/BackgroundValidator.js +7 -7
  161. package/dist/server/startup.d.ts.map +1 -1
  162. package/dist/server/startup.js +8 -24
  163. package/dist/server/tools/MCPAQLTools.js +8 -1
  164. package/dist/services/ActivationStore.d.ts.map +1 -1
  165. package/dist/services/ActivationStore.js +9 -3
  166. package/dist/services/FileWatchService.d.ts +1 -0
  167. package/dist/services/FileWatchService.d.ts.map +1 -1
  168. package/dist/services/FileWatchService.js +83 -48
  169. package/dist/services/MetadataService.d.ts.map +1 -1
  170. package/dist/services/MetadataService.js +7 -2
  171. package/dist/services/PolicyExportService.d.ts.map +1 -1
  172. package/dist/services/PolicyExportService.js +8 -1
  173. package/dist/services/query/ElementQueryService.d.ts.map +1 -1
  174. package/dist/services/query/ElementQueryService.js +1 -41
  175. package/dist/services/query/PaginationService.d.ts.map +1 -1
  176. package/dist/services/query/PaginationService.js +1 -14
  177. package/dist/services/query/SortService.d.ts.map +1 -1
  178. package/dist/services/query/SortService.js +1 -6
  179. package/dist/services/validation/ValidationService.d.ts.map +1 -1
  180. package/dist/services/validation/ValidationService.js +3 -8
  181. package/dist/storage/ElementStorageLayer.d.ts.map +1 -1
  182. package/dist/storage/ElementStorageLayer.js +5 -2
  183. package/dist/storage/MemoryStorageLayer.d.ts.map +1 -1
  184. package/dist/storage/MemoryStorageLayer.js +5 -2
  185. package/dist/telemetry/OperationalTelemetry.js +2 -2
  186. package/dist/utils/EventDeduplicator.d.ts +44 -0
  187. package/dist/utils/EventDeduplicator.d.ts.map +1 -0
  188. package/dist/utils/EventDeduplicator.js +93 -0
  189. package/dist/utils/FileLock.d.ts.map +1 -1
  190. package/dist/utils/FileLock.js +1 -9
  191. package/dist/utils/PerformanceMonitor.d.ts.map +1 -1
  192. package/dist/utils/PerformanceMonitor.js +5 -5
  193. package/dist/utils/SlidingWindowRateLimiter.d.ts +13 -0
  194. package/dist/utils/SlidingWindowRateLimiter.d.ts.map +1 -0
  195. package/dist/utils/SlidingWindowRateLimiter.js +23 -0
  196. package/dist/web/console/IngestRoutes.d.ts +84 -0
  197. package/dist/web/console/IngestRoutes.d.ts.map +1 -0
  198. package/dist/web/console/IngestRoutes.js +252 -0
  199. package/dist/web/console/LeaderElection.d.ts +89 -0
  200. package/dist/web/console/LeaderElection.d.ts.map +1 -0
  201. package/dist/web/console/LeaderElection.js +205 -0
  202. package/dist/web/console/LeaderForwardingSink.d.ts +61 -0
  203. package/dist/web/console/LeaderForwardingSink.d.ts.map +1 -0
  204. package/dist/web/console/LeaderForwardingSink.js +197 -0
  205. package/dist/web/console/SessionNames.d.ts +46 -0
  206. package/dist/web/console/SessionNames.d.ts.map +1 -0
  207. package/dist/web/console/SessionNames.js +257 -0
  208. package/dist/web/console/UnifiedConsole.d.ts +64 -0
  209. package/dist/web/console/UnifiedConsole.d.ts.map +1 -0
  210. package/dist/web/console/UnifiedConsole.js +119 -0
  211. package/dist/web/contentPipeline.d.ts +58 -0
  212. package/dist/web/contentPipeline.d.ts.map +1 -0
  213. package/dist/web/contentPipeline.js +112 -0
  214. package/dist/web/portDiscovery.d.ts +58 -0
  215. package/dist/web/portDiscovery.d.ts.map +1 -0
  216. package/dist/web/portDiscovery.js +143 -0
  217. package/dist/web/public/app.js +148 -60
  218. package/dist/web/public/logs.js +638 -0
  219. package/dist/web/public/metrics.js +682 -0
  220. package/dist/web/public/permissions.js +394 -0
  221. package/dist/web/public/sessions.js +369 -0
  222. package/dist/web/routes/healthRoutes.d.ts +16 -0
  223. package/dist/web/routes/healthRoutes.d.ts.map +1 -0
  224. package/dist/web/routes/healthRoutes.js +29 -0
  225. package/dist/web/routes/logRoutes.d.ts +18 -0
  226. package/dist/web/routes/logRoutes.d.ts.map +1 -0
  227. package/dist/web/routes/logRoutes.js +126 -0
  228. package/dist/web/routes/metricsRoutes.d.ts +17 -0
  229. package/dist/web/routes/metricsRoutes.d.ts.map +1 -0
  230. package/dist/web/routes/metricsRoutes.js +90 -0
  231. package/dist/web/routes/permissionRoutes.d.ts +16 -0
  232. package/dist/web/routes/permissionRoutes.d.ts.map +1 -0
  233. package/dist/web/routes/permissionRoutes.js +133 -0
  234. package/dist/web/routes.d.ts.map +1 -1
  235. package/dist/web/routes.js +309 -339
  236. package/dist/web/server.d.ts +21 -1
  237. package/dist/web/server.d.ts.map +1 -1
  238. package/dist/web/server.js +42 -4
  239. package/dist/web/sinks/WebSSELogSink.d.ts +15 -0
  240. package/dist/web/sinks/WebSSELogSink.d.ts.map +1 -0
  241. package/dist/web/sinks/WebSSELogSink.js +22 -0
  242. package/dist/web/sinks/WebSSEMetricsSink.d.ts +16 -0
  243. package/dist/web/sinks/WebSSEMetricsSink.d.ts.map +1 -0
  244. package/dist/web/sinks/WebSSEMetricsSink.js +23 -0
  245. package/package.json +2 -2
  246. package/server.json +2 -2
  247. package/dist/constants/version.d.ts +0 -3
  248. package/dist/constants/version.d.ts.map +0 -1
  249. package/dist/constants/version.js +0 -4
  250. package/dist/logging/sinks/SSELogSink.d.ts +0 -35
  251. package/dist/logging/sinks/SSELogSink.d.ts.map +0 -1
  252. package/dist/logging/sinks/SSELogSink.js +0 -181
  253. package/dist/logging/viewer/viewerHtml.d.ts +0 -8
  254. package/dist/logging/viewer/viewerHtml.d.ts.map +0 -1
  255. package/dist/logging/viewer/viewerHtml.js +0 -204
  256. package/dist/web/public/public/app.js +0 -1878
@@ -9,7 +9,7 @@ import { ElementType } from '../../portfolio/PortfolioManager.js';
9
9
  import { logger } from '../../utils/logger.js';
10
10
  import { SecurityMonitor } from '../../security/securityMonitor.js';
11
11
  import { ELEMENT_TYPE_MAP, ALL_ELEMENT_TYPES, formatElementTypesList as sharedFormatElementTypesList, } from '../../utils/elementTypeNormalization.js';
12
- import { parseElementPolicy } from '../mcp-aql/policies/ElementPolicies.js';
12
+ import { parseElementPolicy, analyzePatternSyntax } from '../mcp-aql/policies/ElementPolicies.js';
13
13
  import { findPatternConflicts } from '../../utils/patternMatcher.js';
14
14
  export function findElementFlexibly(name, elementList) {
15
15
  if (!name || !Array.isArray(elementList) || elementList.length === 0) {
@@ -250,7 +250,7 @@ export function validateGatekeeperPolicy(metadata) {
250
250
  }
251
251
  // Issue #625 Phase 2: Detect allow/deny pattern conflicts
252
252
  if (policy?.externalRestrictions) {
253
- const { allowPatterns, denyPatterns } = policy.externalRestrictions;
253
+ const { allowPatterns, denyPatterns, confirmPatterns } = policy.externalRestrictions;
254
254
  if (allowPatterns?.length && denyPatterns?.length) {
255
255
  const conflicts = findPatternConflicts(denyPatterns, allowPatterns);
256
256
  for (const conflict of conflicts) {
@@ -260,6 +260,33 @@ export function validateGatekeeperPolicy(metadata) {
260
260
  });
261
261
  }
262
262
  }
263
+ // Issue #1660: Detect confirm/deny pattern conflicts
264
+ if (confirmPatterns?.length && denyPatterns?.length) {
265
+ const conflicts = findPatternConflicts(denyPatterns, confirmPatterns);
266
+ for (const conflict of conflicts) {
267
+ warnings.push({
268
+ property: 'gatekeeper.externalRestrictions',
269
+ message: `Pattern conflict (deny takes precedence over confirm): ${conflict}`,
270
+ });
271
+ }
272
+ }
273
+ // Issue #1664: Enhanced pattern syntax validation
274
+ const allPatternArrays = [
275
+ [denyPatterns, 'denyPatterns'],
276
+ [confirmPatterns, 'confirmPatterns'],
277
+ [allowPatterns, 'allowPatterns'],
278
+ ];
279
+ for (const [patterns, fieldName] of allPatternArrays) {
280
+ if (patterns?.length) {
281
+ const syntaxWarnings = analyzePatternSyntax(patterns, fieldName);
282
+ for (const warning of syntaxWarnings) {
283
+ warnings.push({
284
+ property: 'gatekeeper.externalRestrictions',
285
+ message: warning,
286
+ });
287
+ }
288
+ }
289
+ }
263
290
  }
264
291
  return warnings;
265
292
  }
@@ -413,4 +440,4 @@ export async function resolveElementByName(manager, type, name) {
413
440
  logger.debug(`[ElementCRUD] Unable to locate ${type}:${name} via available manager operations.`);
414
441
  return undefined;
415
442
  }
416
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oYW5kbGVycy9lbGVtZW50LWNydWQvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixzQkFBc0IsSUFBSSw0QkFBNEIsR0FDdkQsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVyRSxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLElBQVksRUFDWixXQUFnQjtJQUVoQixJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3JFLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDM0MsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXJDLElBQUksT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQzVCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxlQUFlLENBQzNELENBQUM7SUFFRixJQUFJLENB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T0FBTyxhQUFhLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3RDLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM3QyxPQUFPLGFBQWEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPLElBQUksYUFBYSxLQUFLLElBQUksQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxPQUFPLE9BQU8sQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDdkMsTUFBTSxpQkFBaUIsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRTtnQkFDbkUsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDOUQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxJQUFJLElBQUksSUFBSSxvQ0FBb0MsQ0FBQyxDQUFDO0lBQ2pHLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZJWDogRE1DUC1TRUMtMDA2IC0gU2VjdXJpdHkgYXVkaXQgc3VwcHJlc3Npb25cbiAqIFRoaXMgZmlsZSBjb250YWlucyBvbmx5IGhlbHBlciB1dGlsaXRpZXMgZm9yIGVsZW1lbnQgb3BlcmF0aW9ucy5cbiAqIE5vIGF1ZGl0IGxvZ2dpbmcgaXMgcmVxdWlyZWQgLSBsb2dnaW5nIGhhcHBlbnMgaW4gdGhlIGNhbGxpbmcgaGFuZGxlcnMuXG4gKiBAc2VjdXJpdHktYXVkaXQtc3VwcHJlc3MgRE1DUC1TRUMtMDA2XG4gKi9cblxuaW1wb3J0IHsgc2x1Z2lmeSB9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGVzeXN0ZW0uanMnO1xuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi8uLi9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7XG4gIEVMRU1FTlRfVFlQRV9NQVAsXG4gIEFMTF9FTEVNRU5UX1RZUEVTLFxuICBmb3JtYXRFbGVtZW50VHlwZXNMaXN0IGFzIHNoYXJlZEZvcm1hdEVsZW1lbnRUeXBlc0xpc3QsXG59IGZyb20gJy4uLy4uL3V0aWxzL2VsZW1lbnRUeXBlTm9ybWFsaXphdGlvbi5qcyc7XG5pbXBvcnQgeyBwYXJzZUVsZW1lbnRQb2xpY3kgfSBmcm9tICcuLi9tY3AtYXFsL3BvbGljaWVzL0VsZW1lbnRQb2xpY2llcy5qcyc7XG5pbXBvcnQgeyBmaW5kUGF0dGVybkNvbmZsaWN0cyB9IGZyb20gJy4uLy4uL3V0aWxzL3BhdHRlcm5NYXRjaGVyLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFbGVtZW50RmxleGlibHk8VCBleHRlbmRzIHsgbWV0YWRhdGE/OiB7IG5hbWU/OiBzdHJpbmcgfSB9PihcbiAgbmFtZTogc3RyaW5nLFxuICBlbGVtZW50TGlzdDogVFtdXG4pOiBUIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFuYW1lIHx8ICFBcnJheS5pc0FycmF5KGVsZW1lbnRMaXN0KSB8fCBlbGVtZW50TGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgc2VhcmNoTmFtZUxvd2VyID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBzZWFyY2hOYW1lU2x1ZyA9IHNsdWdpZnkobmFtZSk7XG5cbiAgbGV0IGVsZW1lbnQgPSBlbGVtZW50TGlzdC5maW5kKFxuICAgIChlKSA9PiBlLm1ldGFkYXRhPy5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBzZWFyY2hOYW1lTG93ZXJcbiAgKTtcblxuICBpZiAoIWVsZW1lbnQpIHtcbiAgICBlbGVtZW50ID0gZWxlbWVudExpc3QuZmluZCgoZSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudFNsdWcgPSBzbHVnaWZ5KGUubWV0YWRhdGE/Lm5hbWUgfHwgJycpO1xuICAgICAgcmV0dXJuIGVsZW1lbnRTbHVnID09PSBzZWFyY2hOYW1lU2x1ZyB8fCBlbGVtZW50U2x1ZyA9PT0gc2VhcmNoTmFtZUxvd2VyO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgZWxlbWVudCA9IGVsZW1lbnRMaXN0LmZpbmQoKGUpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnROYW1lID0gZS5tZXRhZGF0YT8ubmFtZSB8fCAnJztcbiAgICAgIGNvbnN0IGVsZW1lbnRTbHVnID0gc2x1Z2lmeShlbGVtZW50TmFtZSk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBlbGVtZW50U2x1Zy5pbmNsdWRlcyhzZWFyY2hOYW1lU2x1ZykgfHxcbiAgICAgICAgZWxlbWVudE5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hOYW1lTG93ZXIpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZU1ldGFkYXRhKG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gIGlmICghbWV0YWRhdGEgfHwgdHlwZW9mIG1ldGFkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8vIEZJWDogRE1DUC1TRUMtMDA2IC0gQWRkIHNlY3VyaXR5IGF1ZGl0IGxvZ2dpbmcgZm9yIHNhbml0aXphdGlvblxuICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgdHlwZTogJ0VMRU1FTlRfVkFMSURBVEVEJyxcbiAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgc291cmNlOiAnaGVscGVycy5zYW5pdGl6ZU1ldGFkYXRhJyxcbiAgICBkZXRhaWxzOiAnTWV0YWRhdGEgc2FuaXRpemVkIGZvciBlbGVtZW50IGNyZWF0aW9uL3VwZGF0ZScsXG4gICAgYWRkaXRpb25hbERhdGE6IHsgZmllbGRDb3VudDogT2JqZWN0LmtleXMobWV0YWRhdGEpLmxlbmd0aCB9XG4gIH0pO1xuXG4gIGNvbnN0IGRhbmdlcm91c1Byb3BlcnRpZXMgPSBbJ19fcHJvdG9fXycsICdjb25zdHJ1Y3RvcicsICdwcm90b3R5cGUnXTtcbiAgY29uc3Qgc2FuaXRpemVkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWV0YWRhdGEpKSB7XG4gICAgaWYgKGRhbmdlcm91c1Byb3BlcnRpZXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBzYW5pdGl6ZWRba2V5XSA9IHNhbml0aXplTWV0YWRhdGEodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgYW55Pik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNhbml0aXplZFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNhbml0aXplZDtcbn1cblxuLy8gRGVsZWdhdGUgdG8gc2hhcmVkIG5vcm1hbGl6YXRpb24gdXRpbGl0eSAoSXNzdWUgIzQzMylcbmNvbnN0IEVMRU1FTlRfVFlQRV9BTElBU0VTID0gRUxFTUVOVF9UWVBFX01BUDtcblxuY29uc3QgRUxFTUVOVF9UWVBFX0xBQkVMUzogUmVjb3JkPEVsZW1lbnRUeXBlLCB7IHNpbmd1bGFyOiBzdHJpbmc7IHBsdXJhbDogc3RyaW5nIH0+ID0ge1xuICBbRWxlbWVudFR5cGUuUEVSU09OQV06IHsgc2luZ3VsYXI6ICdwZXJzb25hJywgcGx1cmFsOiAncGVyc29uYXMnIH0sXG4gIFtFbGVtZW50VHlwZS5TS0lMTF06IHsgc2luZ3VsYXI6ICdza2lsbCcsIHBsdXJhbDogJ3NraWxscycgfSxcbiAgW0VsZW1lbnRUeXBlLlRFTVBMQVRFXTogeyBzaW5ndWxhcjogJ3RlbXBsYXRlJywgcGx1cmFsOiAndGVtcGxhdGVzJyB9LFxuICBbRWxlbWVudFR5cGUuQUdFTlRdOiB7IHNpbmd1bGFyOiAnYWdlbnQnLCBwbHVyYWw6ICdhZ2VudHMnIH0sXG4gIFtFbGVtZW50VHlwZS5NRU1PUlldOiB7IHNpbmd1bGFyOiAnbWVtb3J5JywgcGx1cmFsOiAnbWVtb3JpZXMnIH0sXG4gIFtFbGVtZW50VHlwZS5FTlNFTUJMRV06IHsgc2luZ3VsYXI6ICdlbnNlbWJsZScsIHBsdXJhbDogJ2Vuc2VtYmxlcycgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUVsZW1lbnRUeXBlSW5wdXQocmF3VHlwZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHsgdHlwZTogRWxlbWVudFR5cGUgfCBudWxsOyBhbGlhc1VzZWQ6IGJvb2xlYW4gfSB7XG4gIGlmICghcmF3VHlwZSB8fCB0eXBlb2YgcmF3VHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4geyB0eXBlOiBudWxsLCBhbGlhc1VzZWQ6IGZhbHNlIH07XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkS2V5ID0gcmF3VHlwZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgcmVzb2x2ZWRUeXBlID0gRUxFTUVOVF9UWVBFX0FMSUFTRVNbbm9ybWFsaXplZEtleV07XG5cbiAgaWYgKCFyZXNvbHZlZFR5cGUpIHtcbiAgICByZXR1cm4geyB0eXBlOiBudWxsLCBhbGlhc1VzZWQ6IGZhbHNlIH07XG4gIH1cblxuICBjb25zdCBhbGlhc1VzZWQgPSAhQUxMX0VMRU1FTlRfVFlQRVMuaW5jbHVkZXMocmF3VHlwZSBhcyBFbGVtZW50VHlwZSkgJiYgbm9ybWFsaXplZEtleSAhPT0gcmVzb2x2ZWRUeXBlO1xuICBpZiAoYWxpYXNVc2VkKSB7XG4gICAgbG9nZ2VyLndhcm4oYFVzaW5nIHNpbmd1bGFyIGVsZW1lbnQgdHlwZSAnJHtyYXdUeXBlfScgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSAnJHtyZXNvbHZlZFR5cGV9JyBpbnN0ZWFkLmApO1xuICB9XG5cbiAgcmV0dXJuIHsgdHlwZTogcmVzb2x2ZWRUeXBlLCBhbGlhc1VzZWQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFZhbGlkRWxlbWVudFR5cGVzTGlzdCgpOiBzdHJpbmcge1xuICByZXR1cm4gc2hhcmVkRm9ybWF0RWxlbWVudFR5cGVzTGlzdCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudFR5cGVMYWJlbCh0eXBlOiBFbGVtZW50VHlwZSwgb3B0aW9uczogeyBwbHVyYWw/OiBib29sZWFuIH0gPSB7fSk6IHN0cmluZyB7XG4gIGNvbnN0IGxhYmVsID0gRUxFTUVOVF9UWVBFX0xBQkVMU1t0eXBlXTtcbiAgaWYgKCFsYWJlbCkge1xuICAgIHJldHVybiBvcHRpb25zLnBsdXJhbCA/IHR5cGUgOiB0eXBlLnJlcGxhY2UoL3MkLywgJycpO1xuICB9XG4gIHJldHVybiBvcHRpb25zLnBsdXJhbCA/IGxhYmVsLnBsdXJhbCA6IGxhYmVsLnNpbmd1bGFyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudEZpbGVuYW1lKHR5cGU6IEVsZW1lbnRUeXBlLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzYWZlU2x1ZyA9IHNsdWdpZnkobmFtZSB8fCAnJykgfHwgJ3VudGl0bGVkJztcbiAgY29uc3QgZXh0ZW5zaW9uID0gdHlwZSA9PT0gRWxlbWVudFR5cGUuTUVNT1JZID8gJy55YW1sJyA6ICcubWQnO1xuICByZXR1cm4gYCR7c2FmZVNsdWd9JHtleHRlbnNpb259YDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50TWFuYWdlck9wZXJhdGlvbnM8VD4ge1xuICBsaXN0PzogKCkgPT4gUHJvbWlzZTxUW10+O1xuICBmaW5kPzogKHByZWRpY2F0ZTogKGNhbmRpZGF0ZTogVCkgPT4gYm9vbGVhbikgPT4gUHJvbWlzZTxUIHwgdW5kZWZpbmVkPjtcbiAgbG9hZD86IChmaWxlUGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPFQ+O1xufVxuXG4vKipcbiAqIEtub3duIG1ldGFkYXRhIHByb3BlcnRpZXMgZm9yIGVhY2ggZWxlbWVudCB0eXBlLlxuICogVXNlZCBieSBib3RoIGBkZXRlY3RVbmtub3duTWV0YWRhdGFQcm9wZXJ0aWVzKClgIChjcmVhdGUvZWRpdCB3YXJuaW5ncylcbiAqIGFuZCBgZWRpdEVsZW1lbnQoKWAgKGZpZWxkIHJvdXRpbmcgdG8gbWV0YWRhdGEgdnMgZWxlbWVudCBvYmplY3QpLlxuICpcbiAqIElNUE9SVEFOVDogQm90aCBjYW1lbENhc2UgYW5kIHNuYWtlX2Nhc2UgdmFyaWFudHMgbXVzdCBiZSBsaXN0ZWQgd2hlcmVcbiAqIGFwcGxpY2FibGUsIHNpbmNlIExMTXMgbWF5IHNlbmQgZWl0aGVyIGZvcm0uIFRoZSBsb29rdXAgdXNlcyBleGFjdFxuICogc3RyaW5nIG1hdGNoaW5nIHZpYSBgU2V0LmhhcygpYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29tbW9uIHByb3BlcnRpZXMgc2hhcmVkIGFjcm9zcyBhbGwgdHlwZXM6XG4gKiAnbmFtZScsICdkZXNjcmlwdGlvbicsICdhdXRob3InLCAndmVyc2lvbicsICd0YWdzJywgJ2dhdGVrZWVwZXInXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFR5cGUtc3BlY2lmaWMgcHJvcGVydGllcyAob25seSB2YWxpZCBmb3IgdGhhdCBlbGVtZW50IHR5cGUpOlxuICogQWdlbnQ6ICdnb2FsJywgJ2FjdGl2YXRlcycsICd0b29scycsICdhdXRvbm9teScsICdyZXNpbGllbmNlJ1xuICogU2tpbGw6ICdkb21haW5zJywgJ2NhdGVnb3J5JywgJ3ByZXJlcXVpc2l0ZXMnXG4gKiBFbnNlbWJsZTogJ2VsZW1lbnRzJywgJ2FjdGl2YXRpb25TdHJhdGVneScsICdhY3RpdmF0aW9uX3N0cmF0ZWd5J1xuICovXG5leHBvcnQgY29uc3QgS05PV05fTUVUQURBVEFfUFJPUEVSVElFUzogUmVjb3JkPEVsZW1lbnRUeXBlLCBTZXQ8c3RyaW5nPj4gPSB7XG4gIFtFbGVtZW50VHlwZS5QRVJTT05BXTogbmV3IFNldChbXG4gICAgLy8gQ29tbW9uIG1ldGFkYXRhXG4gICAgJ25hbWUnLCAnZGVzY3JpcHRpb24nLCAnYXV0aG9yJywgJ3ZlcnNpb24nLCAndGFncycsICdjcmVhdGVkJywgJ21vZGlmaWVkJyxcbiAgICAvLyBHYXRla2VlcGVyIHBvbGljeSAoYWxsIGVsZW1lbnQgdHlwZXMpXG4gICAgJ2dhdGVrZWVwZXInLFxuICAgIC8vIFBlcnNvbmEtc3BlY2lmaWNcbiAgICAndHJpZ2dlcnMnLCAndG9uZScsICd2b2ljZScsICdkb21haW4nLCAnY29udGV4dCcsICdzdHlsZScsICdpbnN0cnVjdGlvbnMnLFxuICAgICdwZXJzb25hbGl0eScsICdleHBlcnRpc2UnLCAnY29tbXVuaWNhdGlvbl9zdHlsZScsICdjb21tdW5pY2F0aW9uU3R5bGUnXG4gIF0pLFxuICBbRWxlbWVudFR5cGUuU0tJTExdOiBuZXcgU2V0KFtcbiAgICAvLyBDb21tb24gbWV0YWRhdGFcbiAgICAnbmFtZScsICdkZXNjcmlwdGlvbicsICdhdXRob3InLCAndmVyc2lvbicsICd0YWdzJywgJ2NyZWF0ZWQnLCAnbW9kaWZpZWQnLFxuICAgIC8vIEdhdGVrZWVwZXIgcG9saWN5IChhbGwgZWxlbWVudCB0eXBlcylcbiAgICAnZ2F0ZWtlZXBlcicsXG4gICAgLy8gU2tpbGwtc3BlY2lmaWNcbiAgICAndHJpZ2dlcnMnLCAnZG9tYWluJywgJ2RvbWFpbnMnLCAnY2F0ZWdvcnknLCAnZXhhbXBsZXMnLCAncHJlcmVxdWlzaXRlcycsXG4gICAgJ2NvbnRlbnQnLCAnaW5zdHJ1Y3Rpb25zJywgJ3VzYWdlJywgJ2NhcGFiaWxpdGllcydcbiAgXSksXG4gIFtFbGVtZW50VHlwZS5URU1QTEFURV06IG5ldyBTZXQoW1xuICAgIC8vIENvbW1vbiBtZXRhZGF0YVxuICAgICduYW1lJywgJ2Rlc2NyaXB0aW9uJywgJ2F1dGhvcicsICd2ZXJzaW9uJywgJ3RhZ3MnLCAnY3JlYXRlZCcsICdtb2RpZmllZCcsXG4gICAgLy8gR2F0ZWtlZXBlciBwb2xpY3kgKGFsbCBlbGVtZW50IHR5cGVzKVxuICAgICdnYXRla2VlcGVyJyxcbiAgICAvLyBUZW1wbGF0ZS1zcGVjaWZpY1xuICAgICd2YXJpYWJsZXMnLCAndGVtcGxhdGUnLCAnY2F0ZWdvcnknLCAnb3V0cHV0Rm9ybWF0JywgJ291dHB1dF9mb3JtYXQnLFxuICAgICdjb250ZW50JywgJ2luc3RydWN0aW9ucycsICdmb3JtYXQnLCAnc2NoZW1hJ1xuICBdKSxcbiAgW0VsZW1lbnRUeXBlLkFHRU5UXTogbmV3IFNldChbXG4gICAgLy8gQ29tbW9uIG1ldGFkYXRhXG4gICAgJ25hbWUnLCAnZGVzY3JpcHRpb24nLCAnYXV0aG9yJywgJ3ZlcnNpb24nLCAndGFncycsICdjcmVhdGVkJywgJ21vZGlmaWVkJyxcbiAgICAvLyBHYXRla2VlcGVyIHBvbGljeSAoYWxsIGVsZW1lbnQgdHlwZXMpXG4gICAgJ2dhdGVrZWVwZXInLFxuICAgIC8vIEFnZW50IFYxIGZpZWxkcyAobGVnYWN5LCBzdGlsbCBzdXBwb3J0ZWQpXG4gICAgJ2dvYWxzJywgJ2NvbnN0cmFpbnRzJywgJ2NhcGFiaWxpdGllcycsICd0cmlnZ2VycycsICdzdGF0ZScsICdhY3Rpb25zJyxcbiAgICAnZGVjaXNpb25GcmFtZXdvcmsnLCAnZGVjaXNpb25fZnJhbWV3b3JrJywgJ3NraWxscycsXG4gICAgLy8gQWdlbnQgVjIgZmllbGRzICh2Mi4wLjAgQWdlbnRpYyBMb29wIFJlZGVzaWduKVxuICAgICdnb2FsJywgJ2FjdGl2YXRlcycsICd0b29scycsICdzeXN0ZW1Qcm9tcHQnLCAnc3lzdGVtX3Byb21wdCcsXG4gICAgJ2F1dG9ub215JywgJ3Jlc2lsaWVuY2UnLCAnc3VjY2Vzc0NyaXRlcmlhJywgJ3N1Y2Nlc3NfY3JpdGVyaWEnLFxuICAgIC8vIElzc3VlICM1ODU6IEJvZHkgY29udGVudCBmaWVsZHMgKHN0b3JlZCBpbiBleHRlbnNpb25zLmluc3RydWN0aW9ucylcbiAgICAnY29udGVudCcsICdpbnN0cnVjdGlvbnMnLFxuICAgIC8vIFYxIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAnc3BlY2lhbGl6YXRpb25zJywgJ3Jpc2tUb2xlcmFuY2UnLCAncmlza190b2xlcmFuY2UnLFxuICAgICdsZWFybmluZ0VuYWJsZWQnLCAnbGVhcm5pbmdfZW5hYmxlZCcsICdtYXhDb25jdXJyZW50R29hbHMnLCAnbWF4X2NvbmN1cnJlbnRfZ29hbHMnXG4gIF0pLFxuICBbRWxlbWVudFR5cGUuTUVNT1JZXTogbmV3IFNldChbXG4gICAgLy8gQ29tbW9uIG1ldGFkYXRhXG4gICAgJ25hbWUnLCAnZGVzY3JpcHRpb24nLCAnYXV0aG9yJywgJ3ZlcnNpb24nLCAndGFncycsICdjcmVhdGVkJywgJ21vZGlmaWVkJyxcbiAgICAvLyBHYXRla2VlcGVyIHBvbGljeSAoYWxsIGVsZW1lbnQgdHlwZXMpXG4gICAgJ2dhdGVrZWVwZXInLFxuICAgIC8vIE1lbW9yeS1zcGVjaWZpY1xuICAgICdpZCcsICdlbnRyaWVzJywgJ2luc3RydWN0aW9ucycsICdyZXRlbnRpb25Qb2xpY3knLCAncmV0ZW50aW9uX3BvbGljeScsICdtYXhFbnRyaWVzJyxcbiAgICAnbWF4X2VudHJpZXMnLCAnY2F0ZWdvcnknLCAnc2NvcGUnXG4gIF0pLFxuICBbRWxlbWVudFR5cGUuRU5TRU1CTEVdOiBuZXcgU2V0KFtcbiAgICAvLyBDb21tb24gbWV0YWRhdGFcbiAgICAnbmFtZScsICdkZXNjcmlwdGlvbicsICdhdXRob3InLCAndmVyc2lvbicsICd0YWdzJywgJ2NyZWF0ZWQnLCAnbW9kaWZpZWQnLFxuICAgIC8vIEdhdGVrZWVwZXIgcG9saWN5IChhbGwgZWxlbWVudCB0eXBlcylcbiAgICAnZ2F0ZWtlZXBlcicsXG4gICAgLy8gRW5zZW1ibGUtc3BlY2lmaWMgLSBOT1RFOiAnZWxlbWVudHMnIGlzIGNvcnJlY3QsIE5PVCAnbWVtYmVycydcbiAgICAnZWxlbWVudHMnLCAnaW5zdHJ1Y3Rpb25zJywgJ2FjdGl2YXRpb25TdHJhdGVneScsICdhY3RpdmF0aW9uX3N0cmF0ZWd5JyxcbiAgICAnY29uZmxpY3RSZXNvbHV0aW9uJywgJ2NvbmZsaWN0X3Jlc29sdXRpb24nLFxuICAgICdjb250ZXh0U2hhcmluZycsICdjb250ZXh0X3NoYXJpbmcnLFxuICAgICdyZXNvdXJjZUxpbWl0cycsICdyZXNvdXJjZV9saW1pdHMnLFxuICAgICdhbGxvd05lc3RlZCcsICdhbGxvd19uZXN0ZWQnLFxuICAgICdtYXhOZXN0aW5nRGVwdGgnLCAnbWF4X25lc3RpbmdfZGVwdGgnXG4gIF0pXG59O1xuXG4vKipcbiAqIENvbW1vbiB0eXBvcyBhbmQgdGhlaXIgY29ycmVjdGlvbnMgZm9yIGJldHRlciBMTE0gZmVlZGJhY2suXG4gKlxuICogSU1QT1JUQU5UOiBBbGwga2V5cyBNVVNUIGJlIGxvd2VyY2FzZS4gVGhlIGxvb2t1cCB1c2VzIGBrZXkudG9Mb3dlckNhc2UoKWBcbiAqIHRvIGVuc3VyZSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoaW5nLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHbG9iYWwgY29ycmVjdGlvbiAoYXBwbGllcyB0byBhbGwgZWxlbWVudCB0eXBlcyk6XG4gKiAnZGlzY3JpcHRpb24nOiB7IGNvcnJlY3Q6ICdkZXNjcmlwdGlvbicgfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUeXBlLXNwZWNpZmljIGNvcnJlY3Rpb24gKG9ubHkgYXBwbGllcyB0byBzcGVjaWZpZWQgdHlwZXMpOlxuICogJ21lbWJlcnMnOiB7IGNvcnJlY3Q6ICdlbGVtZW50cycsIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkVOU0VNQkxFXSB9XG4gKi9cbmNvbnN0IFBST1BFUlRZX0NPUlJFQ1RJT05TOiBSZWNvcmQ8c3RyaW5nLCB7IGNvcnJlY3Q6IHN0cmluZzsgZWxlbWVudFR5cGVzPzogRWxlbWVudFR5cGVbXSB9PiA9IHtcbiAgLy8gRW5zZW1ibGU6ICdtZW1iZXJzJyBpcyBhIGNvbW1vbiBtaXN0YWtlIC0gc2hvdWxkIGJlICdlbGVtZW50cydcbiAgJ21lbWJlcnMnOiB7IGNvcnJlY3Q6ICdlbGVtZW50cycsIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkVOU0VNQkxFXSB9LFxuICAnbWVtYmVyJzogeyBjb3JyZWN0OiAnZWxlbWVudHMnLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5FTlNFTUJMRV0gfSxcbiAgLy8gQ29tbW9uIHR5cG9zXG4gICdkaXNjcmlwdGlvbic6IHsgY29ycmVjdDogJ2Rlc2NyaXB0aW9uJyB9LFxuICAnZGVzY2lwdGlvbic6IHsgY29ycmVjdDogJ2Rlc2NyaXB0aW9uJyB9LFxuICAnYXV0aGVyJzogeyBjb3JyZWN0OiAnYXV0aG9yJyB9LFxuICAndGFnZXMnOiB7IGNvcnJlY3Q6ICd0YWdzJyB9LFxuICAndmFyaWJsZXMnOiB7IGNvcnJlY3Q6ICd2YXJpYWJsZXMnLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5URU1QTEFURV0gfSxcbiAgJ2FjdGl2aWF0aW9uJzogeyBjb3JyZWN0OiAnYWN0aXZhdGlvbicgfSxcbiAgJ3N0cmF0ZXJneSc6IHsgY29ycmVjdDogJ3N0cmF0ZWd5JyB9LFxuICAnZWxlbWV0cyc6IHsgY29ycmVjdDogJ2VsZW1lbnRzJywgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuRU5TRU1CTEVdIH0sXG4gIC8vIFNuYWtlX2Nhc2UgdnMgY2FtZWxDYXNlIG1pc21hdGNoZXNcbiAgJ2FjdGl2YXRpb25zdHJhdGVneSc6IHsgY29ycmVjdDogJ2FjdGl2YXRpb25TdHJhdGVneScsIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkVOU0VNQkxFXSB9LFxuICAnY29uZmxpY3RyZXNvbHV0aW9uJzogeyBjb3JyZWN0OiAnY29uZmxpY3RSZXNvbHV0aW9uJywgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuRU5TRU1CTEVdIH0sXG4gICdjb250ZXh0c2hhcmluZyc6IHsgY29ycmVjdDogJ2NvbnRleHRTaGFyaW5nJywgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuRU5TRU1CTEVdIH1cbn07XG5cbi8qKlxuICogUmVzdWx0IG9mIGNoZWNraW5nIG1ldGFkYXRhIGZvciB1bmtub3duIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5rbm93blByb3BlcnR5V2FybmluZyB7XG4gIHByb3BlcnR5OiBzdHJpbmc7XG4gIHN1Z2dlc3Rpb24/OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIGdhdGVrZWVwZXIgcG9saWN5IGluIGVsZW1lbnQgbWV0YWRhdGEuXG4gKiBSZXR1cm5zIHdhcm5pbmdzIChub3QgdGhyb3dzKSBmb3IgaW52YWxpZCBwb2xpY3kgc3RydWN0dXJlcyxcbiAqIHNvIExMTXMgZ2V0IGltbWVkaWF0ZSBmZWVkYmFjayBhYm91dCBtYWxmb3JtZWQgcG9saWNpZXMuXG4gKlxuICogQHBhcmFtIG1ldGFkYXRhIC0gVGhlIG1ldGFkYXRhIG9iamVjdCBjb250YWluaW5nIHRoZSBnYXRla2VlcGVyIHBvbGljeVxuICogQHJldHVybnMgQXJyYXkgb2Ygd2FybmluZ3MgZm9yIGludmFsaWQgcG9saWN5IHN0cnVjdHVyZSAoZW1wdHkgaWYgdmFsaWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUdhdGVrZWVwZXJQb2xpY3koXG4gIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogVW5rbm93blByb3BlcnR5V2FybmluZ1tdIHtcbiAgaWYgKCFtZXRhZGF0YS5nYXRla2VlcGVyKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwb2xpY3kgPSBwYXJzZUVsZW1lbnRQb2xpY3kobWV0YWRhdGEpO1xuICAgIGNvbnN0IHdhcm5pbmdzOiBVbmtub3duUHJvcGVydHlXYXJuaW5nW10gPSBbXTtcblxuICAgIC8vIElzc3VlICM2NzQ6IFdhcm4gd2hlbiBhbiBvcGVyYXRpb24gYXBwZWFycyBpbiBib3RoIGFsbG93IGFuZCBjb25maXJtIGxpc3RzXG4gICAgLy8gVGhlIG1vc3QgcmVzdHJpY3RpdmUgcG9saWN5IChjb25maXJtKSB3aWxsIGFwcGx5LCBidXQgdGhlIG92ZXJsYXAgaXMgbGlrZWx5IGEgbWlzdGFrZVxuICAgIGlmIChwb2xpY3k/LmFsbG93Py5sZW5ndGggJiYgcG9saWN5Py5jb25maXJtPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGFsbG93U2V0ID0gbmV3IFNldChwb2xpY3kuYWxsb3cpO1xuICAgICAgZm9yIChjb25zdCBvcCBvZiBwb2xpY3kuY29uZmlybSkge1xuICAgICAgICBpZiAoYWxsb3dTZXQuaGFzKG9wKSkge1xuICAgICAgICAgIHdhcm5pbmdzLnB1c2goe1xuICAgICAgICAgICAgcHJvcGVydHk6ICdnYXRla2VlcGVyJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBPcGVyYXRpb24gJyR7b3B9JyBhcHBlYXJzIGluIGJvdGggYWxsb3cgYW5kIGNvbmZpcm0g4oCUIG1vc3QgcmVzdHJpY3RpdmUgcG9saWN5IChjb25maXJtKSB3aWxsIGFwcGx5LmAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJc3N1ZSAjNjI1IFBoYXNlIDI6IERldGVjdCBhbGxvdy9kZW55IHBhdHRlcm4gY29uZmxpY3RzXG4gICAgaWYgKHBvbGljeT8uZXh0ZXJuYWxSZXN0cmljdGlvbnMpIHtcbiAgICAgIGNvbnN0IHsgYWxsb3dQYXR0ZXJucywgZGVueVBhdHRlcm5zIH0gPSBwb2xpY3kuZXh0ZXJuYWxSZXN0cmljdGlvbnM7XG4gICAgICBpZiAoYWxsb3dQYXR0ZXJucz8ubGVuZ3RoICYmIGRlbnlQYXR0ZXJucz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGNvbmZsaWN0cyA9IGZpbmRQYXR0ZXJuQ29uZmxpY3RzKGRlbnlQYXR0ZXJucywgYWxsb3dQYXR0ZXJucyk7XG4gICAgICAgIGZvciAoY29uc3QgY29uZmxpY3Qgb2YgY29uZmxpY3RzKSB7XG4gICAgICAgICAgd2FybmluZ3MucHVzaCh7XG4gICAgICAgICAgICBwcm9wZXJ0eTogJ2dhdGVrZWVwZXIuZXh0ZXJuYWxSZXN0cmljdGlvbnMnLFxuICAgICAgICAgICAgbWVzc2FnZTogYFBhdHRlcm4gY29uZmxpY3QgKGRlbnkgdGFrZXMgcHJlY2VkZW5jZSk6ICR7Y29uZmxpY3R9YCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB3YXJuaW5ncztcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgIHJldHVybiBbe1xuICAgICAgcHJvcGVydHk6ICdnYXRla2VlcGVyJyxcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgfV07XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayBtZXRhZGF0YSBmb3IgdW5rbm93biBwcm9wZXJ0aWVzIGFuZCByZXR1cm4gd2FybmluZ3MuXG4gKiBUaGlzIGhlbHBzIExMTXMgY29ycmVjdCB0aGVpciBiZWhhdmlvciBpbiByZWFsLXRpbWUgd2hlbiB0aGV5IHVzZSB3cm9uZyBwcm9wZXJ0eSBuYW1lcy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudFR5cGUgLSBUaGUgdHlwZSBvZiBlbGVtZW50IGJlaW5nIGNyZWF0ZWQvZWRpdGVkXG4gKiBAcGFyYW0gbWV0YWRhdGEgLSBUaGUgbWV0YWRhdGEgb2JqZWN0IHRvIGNoZWNrXG4gKiBAcmV0dXJucyBBcnJheSBvZiB3YXJuaW5ncyBmb3IgdW5rbm93biBwcm9wZXJ0aWVzXG4gKi9cbi8vIEZpZWxkcyBoYW5kbGVkIGJ5IGRlZGljYXRlZCBicmFuY2hlcyBpbiBlZGl0RWxlbWVudCwgbm90IG1ldGFkYXRhIHJvdXRpbmcuXG4vLyBUaGVzZSBzaG91bGQgbm90IHRyaWdnZXIgXCJ1bmtub3duIHByb3BlcnR5XCIgd2FybmluZ3Mgc2luY2UgdGhleSBBUkUgcHJvY2Vzc2VkLlxuY29uc3QgU1BFQ0lBTF9ST1VURV9GSUVMRFMgPSBuZXcgU2V0KFtcbiAgJ2luc3RydWN0aW9ucycsICdjb250ZW50JywgJ2VsZW1lbnRzJywgJ21ldGFkYXRhJywgJ2VudHJpZXMnLCAndmVyc2lvbidcbl0pO1xuXG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0VW5rbm93bk1ldGFkYXRhUHJvcGVydGllcyhcbiAgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlLFxuICBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWRcbik6IFVua25vd25Qcm9wZXJ0eVdhcm5pbmdbXSB7XG4gIGlmICghbWV0YWRhdGEgfHwgdHlwZW9mIG1ldGFkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGtub3duUHJvcGVydGllcyA9IEtOT1dOX01FVEFEQVRBX1BST1BFUlRJRVNbZWxlbWVudFR5cGVdO1xuICBpZiAoIWtub3duUHJvcGVydGllcykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHdhcm5pbmdzOiBVbmtub3duUHJvcGVydHlXYXJuaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtZXRhZGF0YSkpIHtcbiAgICAvLyBTa2lwIGlmIGl0J3MgYSBrbm93biBwcm9wZXJ0eVxuICAgIGlmIChrbm93blByb3BlcnRpZXMuaGFzKGtleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIFNraXAgc3BlY2lhbCByb3V0ZSBmaWVsZHMg4oCUIHRoZXNlIGFyZSBoYW5kbGVkIGJ5IGRlZGljYXRlZCBjb2RlIHBhdGhzXG4gICAgLy8gaW4gZWRpdEVsZW1lbnQgKG5vdCBtZXRhZGF0YSByb3V0aW5nKSwgc28gd2FybmluZyBpcyBtaXNsZWFkaW5nXG4gICAgaWYgKFNQRUNJQUxfUk9VVEVfRklFTERTLmhhcyhrZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBpdCdzIGEga25vd24gdHlwbyB3aXRoIGEgY29ycmVjdGlvblxuICAgIGNvbnN0IGNvcnJlY3Rpb24gPSBQUk9QRVJUWV9DT1JSRUNUSU9OU1trZXkudG9Mb3dlckNhc2UoKV07XG4gICAgaWYgKGNvcnJlY3Rpb24pIHtcbiAgICAgIC8vIENoZWNrIGlmIGNvcnJlY3Rpb24gYXBwbGllcyB0byB0aGlzIGVsZW1lbnQgdHlwZVxuICAgICAgY29uc3QgYXBwbGllc1RvVHlwZSA9ICFjb3JyZWN0aW9uLmVsZW1lbnRUeXBlcyB8fFxuICAgICAgICBjb3JyZWN0aW9uLmVsZW1lbnRUeXBlcy5pbmNsdWRlcyhlbGVtZW50VHlwZSk7XG5cbiAgICAgIGlmIChhcHBsaWVzVG9UeXBlKSB7XG4gICAgICAgIHdhcm5pbmdzLnB1c2goe1xuICAgICAgICAgIHByb3BlcnR5OiBrZXksXG4gICAgICAgICAgc3VnZ2VzdGlvbjogY29ycmVjdGlvbi5jb3JyZWN0LFxuICAgICAgICAgIG1lc3NhZ2U6IGBVbmtub3duIHByb3BlcnR5ICcke2tleX0nIC0gZGlkIHlvdSBtZWFuICcke2NvcnJlY3Rpb24uY29ycmVjdH0nP2BcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdlbmVyaWMgdW5rbm93biBwcm9wZXJ0eSB3YXJuaW5nXG4gICAgd2FybmluZ3MucHVzaCh7XG4gICAgICBwcm9wZXJ0eToga2V5LFxuICAgICAgbWVzc2FnZTogYFVua25vd24gcHJvcGVydHkgJyR7a2V5fScgZm9yICR7Z2V0RWxlbWVudFR5cGVMYWJlbChlbGVtZW50VHlwZSl9IC0gdGhpcyBwcm9wZXJ0eSB3aWxsIGJlIGlnbm9yZWRgXG4gICAgfSk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBnYXRla2VlcGVyIHBvbGljeSBzdHJ1Y3R1cmUgaWYgcHJlc2VudFxuICBpZiAobWV0YWRhdGEuZ2F0ZWtlZXBlcikge1xuICAgIHdhcm5pbmdzLnB1c2goLi4udmFsaWRhdGVHYXRla2VlcGVyUG9saWN5KG1ldGFkYXRhKSk7XG4gIH1cblxuICByZXR1cm4gd2FybmluZ3M7XG59XG5cbi8qKlxuICogRm9ybWF0IHVua25vd24gcHJvcGVydHkgd2FybmluZ3MgZm9yIE1DUCByZXNwb25zZS5cbiAqIFJldHVybnMgYSB3YXJuaW5nIGJsb2NrIHRoYXQgY2FuIGJlIHByZXBlbmRlZCB0byBzdWNjZXNzIG1lc3NhZ2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VW5rbm93blByb3BlcnR5V2FybmluZ3Mod2FybmluZ3M6IFVua25vd25Qcm9wZXJ0eVdhcm5pbmdbXSk6IHN0cmluZyB7XG4gIGlmICh3YXJuaW5ncy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBsaW5lcyA9IFsn4pqg77iPICoqTWV0YWRhdGEgV2FybmluZ3M6KionXTtcbiAgZm9yIChjb25zdCB3YXJuaW5nIG9mIHdhcm5pbmdzKSB7XG4gICAgaWYgKHdhcm5pbmcuc3VnZ2VzdGlvbikge1xuICAgICAgbGluZXMucHVzaChgICAg4oCiICR7d2FybmluZy5tZXNzYWdlfSBVc2UgJyR7d2FybmluZy5zdWdnZXN0aW9ufScgaW5zdGVhZC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGluZXMucHVzaChgICAg4oCiICR7d2FybmluZy5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuICBsaW5lcy5wdXNoKCcnKTsgLy8gRW1wdHkgbGluZSBhZnRlciB3YXJuaW5nc1xuXG4gIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBGb3JtYXQgZWxlbWVudCByZXNvbHV0aW9uIHdhcm5pbmdzIGZvciBNQ1AgcmVzcG9uc2UuXG4gKiBTdXJmYWNlcyBkaXNhbWJpZ3VhdGlvbiBhbmQgbm90LWZvdW5kIGluZm8gZnJvbSByZXNvbHZlRWxlbWVudFR5cGVzKClcbiAqIHNvIHRoZSB1c2VyIGNhbiBmaXggbWlzc2luZyBlbGVtZW50X3R5cGUgZmllbGRzLlxuICpcbiAqIEZvbGxvd3MgdGhlIHNhbWUgcGF0dGVybiBhcyBmb3JtYXRVbmtub3duUHJvcGVydHlXYXJuaW5ncygpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RWxlbWVudFJlc29sdXRpb25XYXJuaW5ncyhyZXN1bHQ6IHsgYW1iaWd1b3VzOiBBcnJheTx7IGVsZW1lbnRfbmFtZTogc3RyaW5nOyBmb3VuZF9pbjogc3RyaW5nW10gfT47IG5vdEZvdW5kOiBzdHJpbmdbXSB9KTogc3RyaW5nIHtcbiAgaWYgKHJlc3VsdC5hbWJpZ3VvdXMubGVuZ3RoID09PSAwICYmIHJlc3VsdC5ub3RGb3VuZC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBsaW5lcyA9IFsn4pqg77iPICoqRWxlbWVudCBSZXNvbHV0aW9uIFdhcm5pbmdzOioqJ107XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIHJlc3VsdC5hbWJpZ3VvdXMpIHtcbiAgICBsaW5lcy5wdXNoKFxuICAgICAgYCAgIOKAoiAnJHtpdGVtLmVsZW1lbnRfbmFtZX0nIGV4aXN0cyBhcyBtdWx0aXBsZSB0eXBlcyAoJHtpdGVtLmZvdW5kX2luLmpvaW4oJywgJyl9KSDigJQgc3BlY2lmeSBlbGVtZW50X3R5cGUgdG8gZGlzYW1iaWd1YXRlYFxuICAgICk7XG4gIH1cblxuICBmb3IgKGNvbnN0IG5hbWUgb2YgcmVzdWx0Lm5vdEZvdW5kKSB7XG4gICAgbGluZXMucHVzaChcbiAgICAgIGAgICDigKIgJyR7bmFtZX0nIG5vdCBmb3VuZCBpbiBwb3J0Zm9saW8g4oCUIHByb3ZpZGUgZWxlbWVudF90eXBlIGV4cGxpY2l0bHkgb3IgZW5zdXJlIHRoZSBlbGVtZW50IGV4aXN0c2BcbiAgICApO1xuICB9XG5cbiAgbGluZXMucHVzaCgnJyk7IC8vIEVtcHR5IGxpbmUgYWZ0ZXIgd2FybmluZ3NcbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUVsZW1lbnRCeU5hbWU8VD4oXG4gIG1hbmFnZXI6IEVsZW1lbnRNYW5hZ2VyT3BlcmF0aW9uczxUPiB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHR5cGU6IEVsZW1lbnRUeXBlLFxuICBuYW1lOiBzdHJpbmdcbik6IFByb21pc2U8VCB8IHVuZGVmaW5lZD4ge1xuICBpZiAoIW1hbmFnZXIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBtYW5hZ2VyLmxpc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCBlbGVtZW50cyA9IGF3YWl0IG1hbmFnZXIubGlzdCgpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGVsZW1lbnRzKSAmJiBlbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IGZpbmRFbGVtZW50RmxleGlibHkobmFtZSwgZWxlbWVudHMgYXMgYW55W10pO1xuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIHJldHVybiBmb3VuZCBhcyBUO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgbWFuYWdlci5maW5kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3QgbG93ZXJlZCA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBzbHVnID0gc2x1Z2lmeShuYW1lKTtcbiAgICBjb25zdCBmb3VuZCA9IGF3YWl0IG1hbmFnZXIuZmluZCgoY2FuZGlkYXRlOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZU5hbWUgPSBjYW5kaWRhdGU/Lm1ldGFkYXRhPy5uYW1lO1xuICAgICAgaWYgKHR5cGVvZiBjYW5kaWRhdGVOYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBjYW5kaWRhdGVTbHVnID0gc2x1Z2lmeShjYW5kaWRhdGVOYW1lKTtcbiAgICAgIHJldHVybiBjYW5kaWRhdGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IGxvd2VyZWQgfHwgY2FuZGlkYXRlU2x1ZyA9PT0gc2x1ZztcbiAgICB9KTtcbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIHJldHVybiBmb3VuZDtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIG1hbmFnZXIubG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IGNhbmRpZGF0ZUZpbGVuYW1lID0gZ2V0RWxlbWVudEZpbGVuYW1lKHR5cGUsIG5hbWUpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgbWFuYWdlci5sb2FkKGNhbmRpZGF0ZUZpbGVuYW1lKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBbRWxlbWVudENSVURdIERpcmVjdCBsb2FkIGZhaWxlZCBmb3IgJHt0eXBlfToke25hbWV9YCwge1xuICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBsb2dnZXIuZGVidWcoYFtFbGVtZW50Q1JVRF0gVW5hYmxlIHRvIGxvY2F0ZSAke3R5cGV9OiR7bmFtZX0gdmlhIGF2YWlsYWJsZSBtYW5hZ2VyIG9wZXJhdGlvbnMuYCk7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=
443
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oYW5kbGVycy9lbGVtZW50LWNydWQvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixzQkFBc0IsSUFBSSw0QkFBNEIsR0FDdkQsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNsRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVyRSxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLElBQVksRUFDWixXQUFnQjtJQUVoQixJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3JFLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDM0MsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXJDLElBQUksT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQzVCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxlQUFlLENBQzNELENBQUM7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YSxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sSUFBSSxhQUFhLEtBQUssSUFBSSxDQUFDO1FBQzNFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLE9BQU8sT0FBTyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUN2QyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFO2dCQUNuRSxLQUFLLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQzthQUM5RCxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLElBQUksSUFBSSxJQUFJLG9DQUFvQyxDQUFDLENBQUM7SUFDakcsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRklYOiBETUNQLVNFQy0wMDYgLSBTZWN1cml0eSBhdWRpdCBzdXBwcmVzc2lvblxuICogVGhpcyBmaWxlIGNvbnRhaW5zIG9ubHkgaGVscGVyIHV0aWxpdGllcyBmb3IgZWxlbWVudCBvcGVyYXRpb25zLlxuICogTm8gYXVkaXQgbG9nZ2luZyBpcyByZXF1aXJlZCAtIGxvZ2dpbmcgaGFwcGVucyBpbiB0aGUgY2FsbGluZyBoYW5kbGVycy5cbiAqIEBzZWN1cml0eS1hdWRpdC1zdXBwcmVzcyBETUNQLVNFQy0wMDZcbiAqL1xuXG5pbXBvcnQgeyBzbHVnaWZ5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZmlsZXN5c3RlbS5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4uLy4uL3BvcnRmb2xpby9Qb3J0Zm9saW9NYW5hZ2VyLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHtcbiAgRUxFTUVOVF9UWVBFX01BUCxcbiAgQUxMX0VMRU1FTlRfVFlQRVMsXG4gIGZvcm1hdEVsZW1lbnRUeXBlc0xpc3QgYXMgc2hhcmVkRm9ybWF0RWxlbWVudFR5cGVzTGlzdCxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvZWxlbWVudFR5cGVOb3JtYWxpemF0aW9uLmpzJztcbmltcG9ydCB7IHBhcnNlRWxlbWVudFBvbGljeSwgYW5hbHl6ZVBhdHRlcm5TeW50YXggfSBmcm9tICcuLi9tY3AtYXFsL3BvbGljaWVzL0VsZW1lbnRQb2xpY2llcy5qcyc7XG5pbXBvcnQgeyBmaW5kUGF0dGVybkNvbmZsaWN0cyB9IGZyb20gJy4uLy4uL3V0aWxzL3BhdHRlcm5NYXRjaGVyLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFbGVtZW50RmxleGlibHk8VCBleHRlbmRzIHsgbWV0YWRhdGE/OiB7IG5hbWU/OiBzdHJpbmcgfSB9PihcbiAgbmFtZTogc3RyaW5nLFxuICBlbGVtZW50TGlzdDogVFtdXG4pOiBUIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFuYW1lIHx8ICFBcnJheS5pc0FycmF5KGVsZW1lbnRMaXN0KSB8fCBlbGVtZW50TGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgc2VhcmNoTmFtZUxvd2VyID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBzZWFyY2hOYW1lU2x1ZyA9IHNsdWdpZnkobmFtZSk7XG5cbiAgbGV0IGVsZW1lbnQgPSBlbGVtZW50TGlzdC5maW5kKFxuICAgIChlKSA9PiBlLm1ldGFkYXRhPy5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBzZWFyY2hOYW1lTG93ZXJcbiAgKTtcblxuICBpZiAoIWVsZW1lbnQpIHtcbiAgICBlbGVtZW50ID0gZWxlbWVudExpc3QuZmluZCgoZSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudFNsdWcgPSBzbHVnaWZ5KGUubWV0YWRhdGE/Lm5hbWUgfHwgJycpO1xuICAgICAgcmV0dXJuIGVsZW1lbnRTbHVnID09PSBzZWFyY2hOYW1lU2x1ZyB8fCBlbGVtZW50U2x1ZyA9PT0gc2VhcmNoTmFtZUxvd2VyO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgZWxlbWVudCA9IGVsZW1lbnRMaXN0LmZpbmQoKGUpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnROYW1lID0gZS5tZXRhZGF0YT8ubmFtZSB8fCAnJztcbiAgICAgIGNvbnN0IGVsZW1lbnRTbHVnID0gc2x1Z2lmeShlbGVtZW50TmFtZSk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBlbGVtZW50U2x1Zy5pbmNsdWRlcyhzZWFyY2hOYW1lU2x1ZykgfHxcbiAgICAgICAgZWxlbWVudE5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hOYW1lTG93ZXIpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZU1ldGFkYXRhKG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gIGlmICghbWV0YWRhdGEgfHwgdHlwZW9mIG1ldGFkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8vIEZJWDogRE1DUC1TRUMtMDA2IC0gQWRkIHNlY3VyaXR5IGF1ZGl0IGxvZ2dpbmcgZm9yIHNhbml0aXphdGlvblxuICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgdHlwZTogJ0VMRU1FTlRfVkFMSURBVEVEJyxcbiAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgc291cmNlOiAnaGVscGVycy5zYW5pdGl6ZU1ldGFkYXRhJyxcbiAgICBkZXRhaWxzOiAnTWV0YWRhdGEgc2FuaXRpemVkIGZvciBlbGVtZW50IGNyZWF0aW9uL3VwZGF0ZScsXG4gICAgYWRkaXRpb25hbERhdGE6IHsgZmllbGRDb3VudDogT2JqZWN0LmtleXMobWV0YWRhdGEpLmxlbmd0aCB9XG4gIH0pO1xuXG4gIGNvbnN0IGRhbmdlcm91c1Byb3BlcnRpZXMgPSBbJ19fcHJvdG9fXycsICdjb25zdHJ1Y3RvcicsICdwcm90b3R5cGUnXTtcbiAgY29uc3Qgc2FuaXRpemVkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWV0YWRhdGEpKSB7XG4gICAgaWYgKGRhbmdlcm91c1Byb3BlcnRpZXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBzYW5pdGl6ZWRba2V5XSA9IHNhbml0aXplTWV0YWRhdGEodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgYW55Pik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNhbml0aXplZFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNhbml0aXplZDtcbn1cblxuLy8gRGVsZWdhdGUgdG8gc2hhcmVkIG5vcm1hbGl6YXRpb24gdXRpbGl0eSAoSXNzdWUgIzQzMylcbmNvbnN0IEVMRU1FTlRfVFlQRV9BTElBU0VTID0gRUxFTUVOVF9UWVBFX01BUDtcblxuY29uc3QgRUxFTUVOVF9UWVBFX0xBQkVMUzogUmVjb3JkPEVsZW1lbnRUeXBlLCB7IHNpbmd1bGFyOiBzdHJpbmc7IHBsdXJhbDogc3RyaW5nIH0+ID0ge1xuICBbRWxlbWVudFR5cGUuUEVSU09OQV06IHsgc2luZ3VsYXI6ICdwZXJzb25hJywgcGx1cmFsOiAncGVyc29uYXMnIH0sXG4gIFtFbGVtZW50VHlwZS5TS0lMTF06IHsgc2luZ3VsYXI6ICdza2lsbCcsIHBsdXJhbDogJ3NraWxscycgfSxcbiAgW0VsZW1lbnRUeXBlLlRFTVBMQVRFXTogeyBzaW5ndWxhcjogJ3RlbXBsYXRlJywgcGx1cmFsOiAndGVtcGxhdGVzJyB9LFxuICBbRWxlbWVudFR5cGUuQUdFTlRdOiB7IHNpbmd1bGFyOiAnYWdlbnQnLCBwbHVyYWw6ICdhZ2VudHMnIH0sXG4gIFtFbGVtZW50VHlwZS5NRU1PUlldOiB7IHNpbmd1bGFyOiAnbWVtb3J5JywgcGx1cmFsOiAnbWVtb3JpZXMnIH0sXG4gIFtFbGVtZW50VHlwZS5FTlNFTUJMRV06IHsgc2luZ3VsYXI6ICdlbnNlbWJsZScsIHBsdXJhbDogJ2Vuc2VtYmxlcycgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUVsZW1lbnRUeXBlSW5wdXQocmF3VHlwZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHsgdHlwZTogRWxlbWVudFR5cGUgfCBudWxsOyBhbGlhc1VzZWQ6IGJvb2xlYW4gfSB7XG4gIGlmICghcmF3VHlwZSB8fCB0eXBlb2YgcmF3VHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4geyB0eXBlOiBudWxsLCBhbGlhc1VzZWQ6IGZhbHNlIH07XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkS2V5ID0gcmF3VHlwZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgcmVzb2x2ZWRUeXBlID0gRUxFTUVOVF9UWVBFX0FMSUFTRVNbbm9ybWFsaXplZEtleV07XG5cbiAgaWYgKCFyZXNvbHZlZFR5cGUpIHtcbiAgICByZXR1cm4geyB0eXBlOiBudWxsLCBhbGlhc1VzZWQ6IGZhbHNlIH07XG4gIH1cblxuICBjb25zdCBhbGlhc1VzZWQgPSAhQUxMX0VMRU1FTlRfVFlQRVMuaW5jbHVkZXMocmF3VHlwZSBhcyBFbGVtZW50VHlwZSkgJiYgbm9ybWFsaXplZEtleSAhPT0gcmVzb2x2ZWRUeXBlO1xuICBpZiAoYWxpYXNVc2VkKSB7XG4gICAgbG9nZ2VyLndhcm4oYFVzaW5nIHNpbmd1bGFyIGVsZW1lbnQgdHlwZSAnJHtyYXdUeXBlfScgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSAnJHtyZXNvbHZlZFR5cGV9JyBpbnN0ZWFkLmApO1xuICB9XG5cbiAgcmV0dXJuIHsgdHlwZTogcmVzb2x2ZWRUeXBlLCBhbGlhc1VzZWQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFZhbGlkRWxlbWVudFR5cGVzTGlzdCgpOiBzdHJpbmcge1xuICByZXR1cm4gc2hhcmVkRm9ybWF0RWxlbWVudFR5cGVzTGlzdCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudFR5cGVMYWJlbCh0eXBlOiBFbGVtZW50VHlwZSwgb3B0aW9uczogeyBwbHVyYWw/OiBib29sZWFuIH0gPSB7fSk6IHN0cmluZyB7XG4gIGNvbnN0IGxhYmVsID0gRUxFTUVOVF9UWVBFX0xBQkVMU1t0eXBlXTtcbiAgaWYgKCFsYWJlbCkge1xuICAgIHJldHVybiBvcHRpb25zLnBsdXJhbCA/IHR5cGUgOiB0eXBlLnJlcGxhY2UoL3MkLywgJycpO1xuICB9XG4gIHJldHVybiBvcHRpb25zLnBsdXJhbCA/IGxhYmVsLnBsdXJhbCA6IGxhYmVsLnNpbmd1bGFyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudEZpbGVuYW1lKHR5cGU6IEVsZW1lbnRUeXBlLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzYWZlU2x1ZyA9IHNsdWdpZnkobmFtZSB8fCAnJykgfHwgJ3VudGl0bGVkJztcbiAgY29uc3QgZXh0ZW5zaW9uID0gdHlwZSA9PT0gRWxlbWVudFR5cGUuTUVNT1JZID8gJy55YW1sJyA6ICcubWQnO1xuICByZXR1cm4gYCR7c2FmZVNsdWd9JHtleHRlbnNpb259YDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50TWFuYWdlck9wZXJhdGlvbnM8VD4ge1xuICBsaXN0PzogKCkgPT4gUHJvbWlzZTxUW10+O1xuICBmaW5kPzogKHByZWRpY2F0ZTogKGNhbmRpZGF0ZTogVCkgPT4gYm9vbGVhbikgPT4gUHJvbWlzZTxUIHwgdW5kZWZpbmVkPjtcbiAgbG9hZD86IChmaWxlUGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPFQ+O1xufVxuXG4vKipcbiAqIEtub3duIG1ldGFkYXRhIHByb3BlcnRpZXMgZm9yIGVhY2ggZWxlbWVudCB0eXBlLlxuICogVXNlZCBieSBib3RoIGBkZXRlY3RVbmtub3duTWV0YWRhdGFQcm9wZXJ0aWVzKClgIChjcmVhdGUvZWRpdCB3YXJuaW5ncylcbiAqIGFuZCBgZWRpdEVsZW1lbnQoKWAgKGZpZWxkIHJvdXRpbmcgdG8gbWV0YWRhdGEgdnMgZWxlbWVudCBvYmplY3QpLlxuICpcbiAqIElNUE9SVEFOVDogQm90aCBjYW1lbENhc2UgYW5kIHNuYWtlX2Nhc2UgdmFyaWFudHMgbXVzdCBiZSBsaXN0ZWQgd2hlcmVcbiAqIGFwcGxpY2FibGUsIHNpbmNlIExMTXMgbWF5IHNlbmQgZWl0aGVyIGZvcm0uIFRoZSBsb29rdXAgdXNlcyBleGFjdFxuICogc3RyaW5nIG1hdGNoaW5nIHZpYSBgU2V0LmhhcygpYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29tbW9uIHByb3BlcnRpZXMgc2hhcmVkIGFjcm9zcyBhbGwgdHlwZXM6XG4gKiAnbmFtZScsICdkZXNjcmlwdGlvbicsICdhdXRob3InLCAndmVyc2lvbicsICd0YWdzJywgJ2dhdGVrZWVwZXInXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFR5cGUtc3BlY2lmaWMgcHJvcGVydGllcyAob25seSB2YWxpZCBmb3IgdGhhdCBlbGVtZW50IHR5cGUpOlxuICogQWdlbnQ6ICdnb2FsJywgJ2FjdGl2YXRlcycsICd0b29scycsICdhdXRvbm9teScsICdyZXNpbGllbmNlJ1xuICogU2tpbGw6ICdkb21haW5zJywgJ2NhdGVnb3J5JywgJ3ByZXJlcXVpc2l0ZXMnXG4gKiBFbnNlbWJsZTogJ2VsZW1lbnRzJywgJ2FjdGl2YXRpb25TdHJhdGVneScsICdhY3RpdmF0aW9uX3N0cmF0ZWd5J1xuICovXG5leHBvcnQgY29uc3QgS05PV05fTUVUQURBVEFfUFJPUEVSVElFUzogUmVjb3JkPEVsZW1lbnRUeXBlLCBTZXQ8c3RyaW5nPj4gPSB7XG4gIFtFbGVtZW50VHlwZS5QRVJTT05BXTogbmV3IFNldChbXG4gICAgLy8gQ29tbW9uIG1ldGFkYXRhXG4gICAgJ25hbWUnLCAnZGVzY3JpcHRpb24nLCAnYXV0aG9yJywgJ3ZlcnNpb24nLCAndGFncycsICdjcmVhdGVkJywgJ21vZGlmaWVkJyxcbiAgICAvLyBHYXRla2VlcGVyIHBvbGljeSAoYWxsIGVsZW1lbnQgdHlwZXMpXG4gICAgJ2dhdGVrZWVwZXInLFxuICAgIC8vIFBlcnNvbmEtc3BlY2lmaWNcbiAgICAndHJpZ2dlcnMnLCAndG9uZScsICd2b2ljZScsICdkb21haW4nLCAnY29udGV4dCcsICdzdHlsZScsICdpbnN0cnVjdGlvbnMnLFxuICAgICdwZXJzb25hbGl0eScsICdleHBlcnRpc2UnLCAnY29tbXVuaWNhdGlvbl9zdHlsZScsICdjb21tdW5pY2F0aW9uU3R5bGUnXG4gIF0pLFxuICBbRWxlbWVudFR5cGUuU0tJTExdOiBuZXcgU2V0KFtcbiAgICAvLyBDb21tb24gbWV0YWRhdGFcbiAgICAnbmFtZScsICdkZXNjcmlwdGlvbicsICdhdXRob3InLCAndmVyc2lvbicsICd0YWdzJywgJ2NyZWF0ZWQnLCAnbW9kaWZpZWQnLFxuICAgIC8vIEdhdGVrZWVwZXIgcG9saWN5IChhbGwgZWxlbWVudCB0eXBlcylcbiAgICAnZ2F0ZWtlZXBlcicsXG4gICAgLy8gU2tpbGwtc3BlY2lmaWNcbiAgICAndHJpZ2dlcnMnLCAnZG9tYWluJywgJ2RvbWFpbnMnLCAnY2F0ZWdvcnknLCAnZXhhbXBsZXMnLCAncHJlcmVxdWlzaXRlcycsXG4gICAgJ2NvbnRlbnQnLCAnaW5zdHJ1Y3Rpb25zJywgJ3VzYWdlJywgJ2NhcGFiaWxpdGllcydcbiAgXSksXG4gIFtFbGVtZW50VHlwZS5URU1QTEFURV06IG5ldyBTZXQoW1xuICAgIC8vIENvbW1vbiBtZXRhZGF0YVxuICAgICduYW1lJywgJ2Rlc2NyaXB0aW9uJywgJ2F1dGhvcicsICd2ZXJzaW9uJywgJ3RhZ3MnLCAnY3JlYXRlZCcsICdtb2RpZmllZCcsXG4gICAgLy8gR2F0ZWtlZXBlciBwb2xpY3kgKGFsbCBlbGVtZW50IHR5cGVzKVxuICAgICdnYXRla2VlcGVyJyxcbiAgICAvLyBUZW1wbGF0ZS1zcGVjaWZpY1xuICAgICd2YXJpYWJsZXMnLCAndGVtcGxhdGUnLCAnY2F0ZWdvcnknLCAnb3V0cHV0Rm9ybWF0JywgJ291dHB1dF9mb3JtYXQnLFxuICAgICdjb250ZW50JywgJ2luc3RydWN0aW9ucycsICdmb3JtYXQnLCAnc2NoZW1hJ1xuICBdKSxcbiAgW0VsZW1lbnRUeXBlLkFHRU5UXTogbmV3IFNldChbXG4gICAgLy8gQ29tbW9uIG1ldGFkYXRhXG4gICAgJ25hbWUnLCAnZGVzY3JpcHRpb24nLCAnYXV0aG9yJywgJ3ZlcnNpb24nLCAndGFncycsICdjcmVhdGVkJywgJ21vZGlmaWVkJyxcbiAgICAvLyBHYXRla2VlcGVyIHBvbGljeSAoYWxsIGVsZW1lbnQgdHlwZXMpXG4gICAgJ2dhdGVrZWVwZXInLFxuICAgIC8vIEFnZW50IFYxIGZpZWxkcyAobGVnYWN5LCBzdGlsbCBzdXBwb3J0ZWQpXG4gICAgJ2dvYWxzJywgJ2NvbnN0cmFpbnRzJywgJ2NhcGFiaWxpdGllcycsICd0cmlnZ2VycycsICdzdGF0ZScsICdhY3Rpb25zJyxcbiAgICAnZGVjaXNpb25GcmFtZXdvcmsnLCAnZGVjaXNpb25fZnJhbWV3b3JrJywgJ3NraWxscycsXG4gICAgLy8gQWdlbnQgVjIgZmllbGRzICh2Mi4wLjAgQWdlbnRpYyBMb29wIFJlZGVzaWduKVxuICAgICdnb2FsJywgJ2FjdGl2YXRlcycsICd0b29scycsICdzeXN0ZW1Qcm9tcHQnLCAnc3lzdGVtX3Byb21wdCcsXG4gICAgJ2F1dG9ub215JywgJ3Jlc2lsaWVuY2UnLCAnc3VjY2Vzc0NyaXRlcmlhJywgJ3N1Y2Nlc3NfY3JpdGVyaWEnLFxuICAgIC8vIElzc3VlICM1ODU6IEJvZHkgY29udGVudCBmaWVsZHMgKHN0b3JlZCBpbiBleHRlbnNpb25zLmluc3RydWN0aW9ucylcbiAgICAnY29udGVudCcsICdpbnN0cnVjdGlvbnMnLFxuICAgIC8vIFYxIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAnc3BlY2lhbGl6YXRpb25zJywgJ3Jpc2tUb2xlcmFuY2UnLCAncmlza190b2xlcmFuY2UnLFxuICAgICdsZWFybmluZ0VuYWJsZWQnLCAnbGVhcm5pbmdfZW5hYmxlZCcsICdtYXhDb25jdXJyZW50R29hbHMnLCAnbWF4X2NvbmN1cnJlbnRfZ29hbHMnXG4gIF0pLFxuICBbRWxlbWVudFR5cGUuTUVNT1JZXTogbmV3IFNldChbXG4gICAgLy8gQ29tbW9uIG1ldGFkYXRhXG4gICAgJ25hbWUnLCAnZGVzY3JpcHRpb24nLCAnYXV0aG9yJywgJ3ZlcnNpb24nLCAndGFncycsICdjcmVhdGVkJywgJ21vZGlmaWVkJyxcbiAgICAvLyBHYXRla2VlcGVyIHBvbGljeSAoYWxsIGVsZW1lbnQgdHlwZXMpXG4gICAgJ2dhdGVrZWVwZXInLFxuICAgIC8vIE1lbW9yeS1zcGVjaWZpY1xuICAgICdpZCcsICdlbnRyaWVzJywgJ2luc3RydWN0aW9ucycsICdyZXRlbnRpb25Qb2xpY3knLCAncmV0ZW50aW9uX3BvbGljeScsICdtYXhFbnRyaWVzJyxcbiAgICAnbWF4X2VudHJpZXMnLCAnY2F0ZWdvcnknLCAnc2NvcGUnXG4gIF0pLFxuICBbRWxlbWVudFR5cGUuRU5TRU1CTEVdOiBuZXcgU2V0KFtcbiAgICAvLyBDb21tb24gbWV0YWRhdGFcbiAgICAnbmFtZScsICdkZXNjcmlwdGlvbicsICdhdXRob3InLCAndmVyc2lvbicsICd0YWdzJywgJ2NyZWF0ZWQnLCAnbW9kaWZpZWQnLFxuICAgIC8vIEdhdGVrZWVwZXIgcG9saWN5IChhbGwgZWxlbWVudCB0eXBlcylcbiAgICAnZ2F0ZWtlZXBlcicsXG4gICAgLy8gRW5zZW1ibGUtc3BlY2lmaWMgLSBOT1RFOiAnZWxlbWVudHMnIGlzIGNvcnJlY3QsIE5PVCAnbWVtYmVycydcbiAgICAnZWxlbWVudHMnLCAnaW5zdHJ1Y3Rpb25zJywgJ2FjdGl2YXRpb25TdHJhdGVneScsICdhY3RpdmF0aW9uX3N0cmF0ZWd5JyxcbiAgICAnY29uZmxpY3RSZXNvbHV0aW9uJywgJ2NvbmZsaWN0X3Jlc29sdXRpb24nLFxuICAgICdjb250ZXh0U2hhcmluZycsICdjb250ZXh0X3NoYXJpbmcnLFxuICAgICdyZXNvdXJjZUxpbWl0cycsICdyZXNvdXJjZV9saW1pdHMnLFxuICAgICdhbGxvd05lc3RlZCcsICdhbGxvd19uZXN0ZWQnLFxuICAgICdtYXhOZXN0aW5nRGVwdGgnLCAnbWF4X25lc3RpbmdfZGVwdGgnXG4gIF0pXG59O1xuXG4vKipcbiAqIENvbW1vbiB0eXBvcyBhbmQgdGhlaXIgY29ycmVjdGlvbnMgZm9yIGJldHRlciBMTE0gZmVlZGJhY2suXG4gKlxuICogSU1QT1JUQU5UOiBBbGwga2V5cyBNVVNUIGJlIGxvd2VyY2FzZS4gVGhlIGxvb2t1cCB1c2VzIGBrZXkudG9Mb3dlckNhc2UoKWBcbiAqIHRvIGVuc3VyZSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoaW5nLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHbG9iYWwgY29ycmVjdGlvbiAoYXBwbGllcyB0byBhbGwgZWxlbWVudCB0eXBlcyk6XG4gKiAnZGlzY3JpcHRpb24nOiB7IGNvcnJlY3Q6ICdkZXNjcmlwdGlvbicgfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUeXBlLXNwZWNpZmljIGNvcnJlY3Rpb24gKG9ubHkgYXBwbGllcyB0byBzcGVjaWZpZWQgdHlwZXMpOlxuICogJ21lbWJlcnMnOiB7IGNvcnJlY3Q6ICdlbGVtZW50cycsIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkVOU0VNQkxFXSB9XG4gKi9cbmNvbnN0IFBST1BFUlRZX0NPUlJFQ1RJT05TOiBSZWNvcmQ8c3RyaW5nLCB7IGNvcnJlY3Q6IHN0cmluZzsgZWxlbWVudFR5cGVzPzogRWxlbWVudFR5cGVbXSB9PiA9IHtcbiAgLy8gRW5zZW1ibGU6ICdtZW1iZXJzJyBpcyBhIGNvbW1vbiBtaXN0YWtlIC0gc2hvdWxkIGJlICdlbGVtZW50cydcbiAgJ21lbWJlcnMnOiB7IGNvcnJlY3Q6ICdlbGVtZW50cycsIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkVOU0VNQkxFXSB9LFxuICAnbWVtYmVyJzogeyBjb3JyZWN0OiAnZWxlbWVudHMnLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5FTlNFTUJMRV0gfSxcbiAgLy8gQ29tbW9uIHR5cG9zXG4gICdkaXNjcmlwdGlvbic6IHsgY29ycmVjdDogJ2Rlc2NyaXB0aW9uJyB9LFxuICAnZGVzY2lwdGlvbic6IHsgY29ycmVjdDogJ2Rlc2NyaXB0aW9uJyB9LFxuICAnYXV0aGVyJzogeyBjb3JyZWN0OiAnYXV0aG9yJyB9LFxuICAndGFnZXMnOiB7IGNvcnJlY3Q6ICd0YWdzJyB9LFxuICAndmFyaWJsZXMnOiB7IGNvcnJlY3Q6ICd2YXJpYWJsZXMnLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5URU1QTEFURV0gfSxcbiAgJ2FjdGl2aWF0aW9uJzogeyBjb3JyZWN0OiAnYWN0aXZhdGlvbicgfSxcbiAgJ3N0cmF0ZXJneSc6IHsgY29ycmVjdDogJ3N0cmF0ZWd5JyB9LFxuICAnZWxlbWV0cyc6IHsgY29ycmVjdDogJ2VsZW1lbnRzJywgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuRU5TRU1CTEVdIH0sXG4gIC8vIFNuYWtlX2Nhc2UgdnMgY2FtZWxDYXNlIG1pc21hdGNoZXNcbiAgJ2FjdGl2YXRpb25zdHJhdGVneSc6IHsgY29ycmVjdDogJ2FjdGl2YXRpb25TdHJhdGVneScsIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkVOU0VNQkxFXSB9LFxuICAnY29uZmxpY3RyZXNvbHV0aW9uJzogeyBjb3JyZWN0OiAnY29uZmxpY3RSZXNvbHV0aW9uJywgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuRU5TRU1CTEVdIH0sXG4gICdjb250ZXh0c2hhcmluZyc6IHsgY29ycmVjdDogJ2NvbnRleHRTaGFyaW5nJywgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuRU5TRU1CTEVdIH1cbn07XG5cbi8qKlxuICogUmVzdWx0IG9mIGNoZWNraW5nIG1ldGFkYXRhIGZvciB1bmtub3duIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5rbm93blByb3BlcnR5V2FybmluZyB7XG4gIHByb3BlcnR5OiBzdHJpbmc7XG4gIHN1Z2dlc3Rpb24/OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIGdhdGVrZWVwZXIgcG9saWN5IGluIGVsZW1lbnQgbWV0YWRhdGEuXG4gKiBSZXR1cm5zIHdhcm5pbmdzIChub3QgdGhyb3dzKSBmb3IgaW52YWxpZCBwb2xpY3kgc3RydWN0dXJlcyxcbiAqIHNvIExMTXMgZ2V0IGltbWVkaWF0ZSBmZWVkYmFjayBhYm91dCBtYWxmb3JtZWQgcG9saWNpZXMuXG4gKlxuICogQHBhcmFtIG1ldGFkYXRhIC0gVGhlIG1ldGFkYXRhIG9iamVjdCBjb250YWluaW5nIHRoZSBnYXRla2VlcGVyIHBvbGljeVxuICogQHJldHVybnMgQXJyYXkgb2Ygd2FybmluZ3MgZm9yIGludmFsaWQgcG9saWN5IHN0cnVjdHVyZSAoZW1wdHkgaWYgdmFsaWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUdhdGVrZWVwZXJQb2xpY3koXG4gIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogVW5rbm93blByb3BlcnR5V2FybmluZ1tdIHtcbiAgaWYgKCFtZXRhZGF0YS5nYXRla2VlcGVyKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwb2xpY3kgPSBwYXJzZUVsZW1lbnRQb2xpY3kobWV0YWRhdGEpO1xuICAgIGNvbnN0IHdhcm5pbmdzOiBVbmtub3duUHJvcGVydHlXYXJuaW5nW10gPSBbXTtcblxuICAgIC8vIElzc3VlICM2NzQ6IFdhcm4gd2hlbiBhbiBvcGVyYXRpb24gYXBwZWFycyBpbiBib3RoIGFsbG93IGFuZCBjb25maXJtIGxpc3RzXG4gICAgLy8gVGhlIG1vc3QgcmVzdHJpY3RpdmUgcG9saWN5IChjb25maXJtKSB3aWxsIGFwcGx5LCBidXQgdGhlIG92ZXJsYXAgaXMgbGlrZWx5IGEgbWlzdGFrZVxuICAgIGlmIChwb2xpY3k/LmFsbG93Py5sZW5ndGggJiYgcG9saWN5Py5jb25maXJtPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGFsbG93U2V0ID0gbmV3IFNldChwb2xpY3kuYWxsb3cpO1xuICAgICAgZm9yIChjb25zdCBvcCBvZiBwb2xpY3kuY29uZmlybSkge1xuICAgICAgICBpZiAoYWxsb3dTZXQuaGFzKG9wKSkge1xuICAgICAgICAgIHdhcm5pbmdzLnB1c2goe1xuICAgICAgICAgICAgcHJvcGVydHk6ICdnYXRla2VlcGVyJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBPcGVyYXRpb24gJyR7b3B9JyBhcHBlYXJzIGluIGJvdGggYWxsb3cgYW5kIGNvbmZpcm0g4oCUIG1vc3QgcmVzdHJpY3RpdmUgcG9saWN5IChjb25maXJtKSB3aWxsIGFwcGx5LmAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJc3N1ZSAjNjI1IFBoYXNlIDI6IERldGVjdCBhbGxvdy9kZW55IHBhdHRlcm4gY29uZmxpY3RzXG4gICAgaWYgKHBvbGljeT8uZXh0ZXJuYWxSZXN0cmljdGlvbnMpIHtcbiAgICAgIGNvbnN0IHsgYWxsb3dQYXR0ZXJucywgZGVueVBhdHRlcm5zLCBjb25maXJtUGF0dGVybnMgfSA9IHBvbGljeS5leHRlcm5hbFJlc3RyaWN0aW9ucztcbiAgICAgIGlmIChhbGxvd1BhdHRlcm5zPy5sZW5ndGggJiYgZGVueVBhdHRlcm5zPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY29uZmxpY3RzID0gZmluZFBhdHRlcm5Db25mbGljdHMoZGVueVBhdHRlcm5zLCBhbGxvd1BhdHRlcm5zKTtcbiAgICAgICAgZm9yIChjb25zdCBjb25mbGljdCBvZiBjb25mbGljdHMpIHtcbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIHByb3BlcnR5OiAnZ2F0ZWtlZXBlci5leHRlcm5hbFJlc3RyaWN0aW9ucycsXG4gICAgICAgICAgICBtZXNzYWdlOiBgUGF0dGVybiBjb25mbGljdCAoZGVueSB0YWtlcyBwcmVjZWRlbmNlKTogJHtjb25mbGljdH1gLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElzc3VlICMxNjYwOiBEZXRlY3QgY29uZmlybS9kZW55IHBhdHRlcm4gY29uZmxpY3RzXG4gICAgICBpZiAoY29uZmlybVBhdHRlcm5zPy5sZW5ndGggJiYgZGVueVBhdHRlcm5zPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY29uZmxpY3RzID0gZmluZFBhdHRlcm5Db25mbGljdHMoZGVueVBhdHRlcm5zLCBjb25maXJtUGF0dGVybnMpO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbmZsaWN0IG9mIGNvbmZsaWN0cykge1xuICAgICAgICAgIHdhcm5pbmdzLnB1c2goe1xuICAgICAgICAgICAgcHJvcGVydHk6ICdnYXRla2VlcGVyLmV4dGVybmFsUmVzdHJpY3Rpb25zJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBQYXR0ZXJuIGNvbmZsaWN0IChkZW55IHRha2VzIHByZWNlZGVuY2Ugb3ZlciBjb25maXJtKTogJHtjb25mbGljdH1gLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElzc3VlICMxNjY0OiBFbmhhbmNlZCBwYXR0ZXJuIHN5bnRheCB2YWxpZGF0aW9uXG4gICAgICBjb25zdCBhbGxQYXR0ZXJuQXJyYXlzOiBbc3RyaW5nW10gfCB1bmRlZmluZWQsIHN0cmluZ11bXSA9IFtcbiAgICAgICAgW2RlbnlQYXR0ZXJucywgJ2RlbnlQYXR0ZXJucyddLFxuICAgICAgICBbY29uZmlybVBhdHRlcm5zLCAnY29uZmlybVBhdHRlcm5zJ10sXG4gICAgICAgIFthbGxvd1BhdHRlcm5zLCAnYWxsb3dQYXR0ZXJucyddLFxuICAgICAgXTtcbiAgICAgIGZvciAoY29uc3QgW3BhdHRlcm5zLCBmaWVsZE5hbWVdIG9mIGFsbFBhdHRlcm5BcnJheXMpIHtcbiAgICAgICAgaWYgKHBhdHRlcm5zPy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBzeW50YXhXYXJuaW5ncyA9IGFuYWx5emVQYXR0ZXJuU3ludGF4KHBhdHRlcm5zLCBmaWVsZE5hbWUpO1xuICAgICAgICAgIGZvciAoY29uc3Qgd2FybmluZyBvZiBzeW50YXhXYXJuaW5ncykge1xuICAgICAgICAgICAgd2FybmluZ3MucHVzaCh7XG4gICAgICAgICAgICAgIHByb3BlcnR5OiAnZ2F0ZWtlZXBlci5leHRlcm5hbFJlc3RyaWN0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHdhcm5pbmcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gd2FybmluZ3M7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICByZXR1cm4gW3tcbiAgICAgIHByb3BlcnR5OiAnZ2F0ZWtlZXBlcicsXG4gICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgIH1dO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgbWV0YWRhdGEgZm9yIHVua25vd24gcHJvcGVydGllcyBhbmQgcmV0dXJuIHdhcm5pbmdzLlxuICogVGhpcyBoZWxwcyBMTE1zIGNvcnJlY3QgdGhlaXIgYmVoYXZpb3IgaW4gcmVhbC10aW1lIHdoZW4gdGhleSB1c2Ugd3JvbmcgcHJvcGVydHkgbmFtZXMuXG4gKlxuICogQHBhcmFtIGVsZW1lbnRUeXBlIC0gVGhlIHR5cGUgb2YgZWxlbWVudCBiZWluZyBjcmVhdGVkL2VkaXRlZFxuICogQHBhcmFtIG1ldGFkYXRhIC0gVGhlIG1ldGFkYXRhIG9iamVjdCB0byBjaGVja1xuICogQHJldHVybnMgQXJyYXkgb2Ygd2FybmluZ3MgZm9yIHVua25vd24gcHJvcGVydGllc1xuICovXG4vLyBGaWVsZHMgaGFuZGxlZCBieSBkZWRpY2F0ZWQgYnJhbmNoZXMgaW4gZWRpdEVsZW1lbnQsIG5vdCBtZXRhZGF0YSByb3V0aW5nLlxuLy8gVGhlc2Ugc2hvdWxkIG5vdCB0cmlnZ2VyIFwidW5rbm93biBwcm9wZXJ0eVwiIHdhcm5pbmdzIHNpbmNlIHRoZXkgQVJFIHByb2Nlc3NlZC5cbmNvbnN0IFNQRUNJQUxfUk9VVEVfRklFTERTID0gbmV3IFNldChbXG4gICdpbnN0cnVjdGlvbnMnLCAnY29udGVudCcsICdlbGVtZW50cycsICdtZXRhZGF0YScsICdlbnRyaWVzJywgJ3ZlcnNpb24nXG5dKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdFVua25vd25NZXRhZGF0YVByb3BlcnRpZXMoXG4gIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZSxcbiAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkXG4pOiBVbmtub3duUHJvcGVydHlXYXJuaW5nW10ge1xuICBpZiAoIW1ldGFkYXRhIHx8IHR5cGVvZiBtZXRhZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBrbm93blByb3BlcnRpZXMgPSBLTk9XTl9NRVRBREFUQV9QUk9QRVJUSUVTW2VsZW1lbnRUeXBlXTtcbiAgaWYgKCFrbm93blByb3BlcnRpZXMpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCB3YXJuaW5nczogVW5rbm93blByb3BlcnR5V2FybmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobWV0YWRhdGEpKSB7XG4gICAgLy8gU2tpcCBpZiBpdCdzIGEga25vd24gcHJvcGVydHlcbiAgICBpZiAoa25vd25Qcm9wZXJ0aWVzLmhhcyhrZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBTa2lwIHNwZWNpYWwgcm91dGUgZmllbGRzIOKAlCB0aGVzZSBhcmUgaGFuZGxlZCBieSBkZWRpY2F0ZWQgY29kZSBwYXRoc1xuICAgIC8vIGluIGVkaXRFbGVtZW50IChub3QgbWV0YWRhdGEgcm91dGluZyksIHNvIHdhcm5pbmcgaXMgbWlzbGVhZGluZ1xuICAgIGlmIChTUEVDSUFMX1JPVVRFX0ZJRUxEUy5oYXMoa2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgaXQncyBhIGtub3duIHR5cG8gd2l0aCBhIGNvcnJlY3Rpb25cbiAgICBjb25zdCBjb3JyZWN0aW9uID0gUFJPUEVSVFlfQ09SUkVDVElPTlNba2V5LnRvTG93ZXJDYXNlKCldO1xuICAgIGlmIChjb3JyZWN0aW9uKSB7XG4gICAgICAvLyBDaGVjayBpZiBjb3JyZWN0aW9uIGFwcGxpZXMgdG8gdGhpcyBlbGVtZW50IHR5cGVcbiAgICAgIGNvbnN0IGFwcGxpZXNUb1R5cGUgPSAhY29ycmVjdGlvbi5lbGVtZW50VHlwZXMgfHxcbiAgICAgICAgY29ycmVjdGlvbi5lbGVtZW50VHlwZXMuaW5jbHVkZXMoZWxlbWVudFR5cGUpO1xuXG4gICAgICBpZiAoYXBwbGllc1RvVHlwZSkge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKHtcbiAgICAgICAgICBwcm9wZXJ0eToga2V5LFxuICAgICAgICAgIHN1Z2dlc3Rpb246IGNvcnJlY3Rpb24uY29ycmVjdCxcbiAgICAgICAgICBtZXNzYWdlOiBgVW5rbm93biBwcm9wZXJ0eSAnJHtrZXl9JyAtIGRpZCB5b3UgbWVhbiAnJHtjb3JyZWN0aW9uLmNvcnJlY3R9Jz9gXG4gICAgICAgIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZW5lcmljIHVua25vd24gcHJvcGVydHkgd2FybmluZ1xuICAgIHdhcm5pbmdzLnB1c2goe1xuICAgICAgcHJvcGVydHk6IGtleSxcbiAgICAgIG1lc3NhZ2U6IGBVbmtub3duIHByb3BlcnR5ICcke2tleX0nIGZvciAke2dldEVsZW1lbnRUeXBlTGFiZWwoZWxlbWVudFR5cGUpfSAtIHRoaXMgcHJvcGVydHkgd2lsbCBiZSBpZ25vcmVkYFxuICAgIH0pO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgZ2F0ZWtlZXBlciBwb2xpY3kgc3RydWN0dXJlIGlmIHByZXNlbnRcbiAgaWYgKG1ldGFkYXRhLmdhdGVrZWVwZXIpIHtcbiAgICB3YXJuaW5ncy5wdXNoKC4uLnZhbGlkYXRlR2F0ZWtlZXBlclBvbGljeShtZXRhZGF0YSkpO1xuICB9XG5cbiAgcmV0dXJuIHdhcm5pbmdzO1xufVxuXG4vKipcbiAqIEZvcm1hdCB1bmtub3duIHByb3BlcnR5IHdhcm5pbmdzIGZvciBNQ1AgcmVzcG9uc2UuXG4gKiBSZXR1cm5zIGEgd2FybmluZyBibG9jayB0aGF0IGNhbiBiZSBwcmVwZW5kZWQgdG8gc3VjY2VzcyBtZXNzYWdlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFVua25vd25Qcm9wZXJ0eVdhcm5pbmdzKHdhcm5pbmdzOiBVbmtub3duUHJvcGVydHlXYXJuaW5nW10pOiBzdHJpbmcge1xuICBpZiAod2FybmluZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgbGluZXMgPSBbJ+KaoO+4jyAqKk1ldGFkYXRhIFdhcm5pbmdzOioqJ107XG4gIGZvciAoY29uc3Qgd2FybmluZyBvZiB3YXJuaW5ncykge1xuICAgIGlmICh3YXJuaW5nLnN1Z2dlc3Rpb24pIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgIOKAoiAke3dhcm5pbmcubWVzc2FnZX0gVXNlICcke3dhcm5pbmcuc3VnZ2VzdGlvbn0nIGluc3RlYWQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgIOKAoiAke3dhcm5pbmcubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbiAgbGluZXMucHVzaCgnJyk7IC8vIEVtcHR5IGxpbmUgYWZ0ZXIgd2FybmluZ3NcblxuICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogRm9ybWF0IGVsZW1lbnQgcmVzb2x1dGlvbiB3YXJuaW5ncyBmb3IgTUNQIHJlc3BvbnNlLlxuICogU3VyZmFjZXMgZGlzYW1iaWd1YXRpb24gYW5kIG5vdC1mb3VuZCBpbmZvIGZyb20gcmVzb2x2ZUVsZW1lbnRUeXBlcygpXG4gKiBzbyB0aGUgdXNlciBjYW4gZml4IG1pc3NpbmcgZWxlbWVudF90eXBlIGZpZWxkcy5cbiAqXG4gKiBGb2xsb3dzIHRoZSBzYW1lIHBhdHRlcm4gYXMgZm9ybWF0VW5rbm93blByb3BlcnR5V2FybmluZ3MoKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEVsZW1lbnRSZXNvbHV0aW9uV2FybmluZ3MocmVzdWx0OiB7IGFtYmlndW91czogQXJyYXk8eyBlbGVtZW50X25hbWU6IHN0cmluZzsgZm91bmRfaW46IHN0cmluZ1tdIH0+OyBub3RGb3VuZDogc3RyaW5nW10gfSk6IHN0cmluZyB7XG4gIGlmIChyZXN1bHQuYW1iaWd1b3VzLmxlbmd0aCA9PT0gMCAmJiByZXN1bHQubm90Rm91bmQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgbGluZXMgPSBbJ+KaoO+4jyAqKkVsZW1lbnQgUmVzb2x1dGlvbiBXYXJuaW5nczoqKiddO1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiByZXN1bHQuYW1iaWd1b3VzKSB7XG4gICAgbGluZXMucHVzaChcbiAgICAgIGAgICDigKIgJyR7aXRlbS5lbGVtZW50X25hbWV9JyBleGlzdHMgYXMgbXVsdGlwbGUgdHlwZXMgKCR7aXRlbS5mb3VuZF9pbi5qb2luKCcsICcpfSkg4oCUIHNwZWNpZnkgZWxlbWVudF90eXBlIHRvIGRpc2FtYmlndWF0ZWBcbiAgICApO1xuICB9XG5cbiAgZm9yIChjb25zdCBuYW1lIG9mIHJlc3VsdC5ub3RGb3VuZCkge1xuICAgIGxpbmVzLnB1c2goXG4gICAgICBgICAg4oCiICcke25hbWV9JyBub3QgZm91bmQgaW4gcG9ydGZvbGlvIOKAlCBwcm92aWRlIGVsZW1lbnRfdHlwZSBleHBsaWNpdGx5IG9yIGVuc3VyZSB0aGUgZWxlbWVudCBleGlzdHNgXG4gICAgKTtcbiAgfVxuXG4gIGxpbmVzLnB1c2goJycpOyAvLyBFbXB0eSBsaW5lIGFmdGVyIHdhcm5pbmdzXG4gIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVFbGVtZW50QnlOYW1lPFQ+KFxuICBtYW5hZ2VyOiBFbGVtZW50TWFuYWdlck9wZXJhdGlvbnM8VD4gfCBudWxsIHwgdW5kZWZpbmVkLFxuICB0eXBlOiBFbGVtZW50VHlwZSxcbiAgbmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCFtYW5hZ2VyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgbWFuYWdlci5saXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBhd2FpdCBtYW5hZ2VyLmxpc3QoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50cykgJiYgZWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZm91bmQgPSBmaW5kRWxlbWVudEZsZXhpYmx5KG5hbWUsIGVsZW1lbnRzIGFzIGFueVtdKTtcbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICByZXR1cm4gZm91bmQgYXMgVDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIG1hbmFnZXIuZmluZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IGxvd2VyZWQgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3Qgc2x1ZyA9IHNsdWdpZnkobmFtZSk7XG4gICAgY29uc3QgZm91bmQgPSBhd2FpdCBtYW5hZ2VyLmZpbmQoKGNhbmRpZGF0ZTogYW55KSA9PiB7XG4gICAgICBjb25zdCBjYW5kaWRhdGVOYW1lID0gY2FuZGlkYXRlPy5tZXRhZGF0YT8ubmFtZTtcbiAgICAgIGlmICh0eXBlb2YgY2FuZGlkYXRlTmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgY2FuZGlkYXRlU2x1ZyA9IHNsdWdpZnkoY2FuZGlkYXRlTmFtZSk7XG4gICAgICByZXR1cm4gY2FuZGlkYXRlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBsb3dlcmVkIHx8IGNhbmRpZGF0ZVNsdWcgPT09IHNsdWc7XG4gICAgfSk7XG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICByZXR1cm4gZm91bmQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBtYW5hZ2VyLmxvYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCBjYW5kaWRhdGVGaWxlbmFtZSA9IGdldEVsZW1lbnRGaWxlbmFtZSh0eXBlLCBuYW1lKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IG1hbmFnZXIubG9hZChjYW5kaWRhdGVGaWxlbmFtZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW0VsZW1lbnRDUlVEXSBEaXJlY3QgbG9hZCBmYWlsZWQgZm9yICR7dHlwZX06JHtuYW1lfWAsIHtcbiAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBbRWxlbWVudENSVURdIFVuYWJsZSB0byBsb2NhdGUgJHt0eXBlfToke25hbWV9IHZpYSBhdmFpbGFibGUgbWFuYWdlciBvcGVyYXRpb25zLmApO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
@@ -22,6 +22,8 @@ export interface ListElementItem {
22
22
  type: string;
23
23
  version?: string;
24
24
  tags?: string[];
25
+ created?: string;
26
+ author?: string;
25
27
  }
26
28
  /**
27
29
  * Structured response shape for list_elements.
@@ -1 +1 @@
1
- {"version":3,"file":"listElements.d.ts","sourceRoot":"","sources":["../../../src/handlers/element-crud/listElements.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAmC,MAAM,+BAA+B,CAAC;AAE9F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAoNpF;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,OAAO,CAAC;QACrB,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;YACjC,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;KACH,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE;QACT,sBAAsB,EAAE,MAAM,CAAC;KAChC,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,kBAAkB,GAAG,cAAc,GAAG,gBAAgB,CAAC;CAC9D;AAED,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC,wBAAsB,YAAY,CAChC,OAAO,EAAE,kBAAkB,EAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/C,OAAO,CAAC,kBAAkB,GAAG,iBAAiB,GAAG,eAAe,CAAC,CA0DnE"}
1
+ {"version":3,"file":"listElements.d.ts","sourceRoot":"","sources":["../../../src/handlers/element-crud/listElements.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAmC,MAAM,+BAA+B,CAAC;AAE9F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAoNpF;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,OAAO,CAAC;QACrB,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;YACjC,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;KACH,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE;QACT,sBAAsB,EAAE,MAAM,CAAC;KAChC,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,kBAAkB,GAAG,cAAc,GAAG,gBAAgB,CAAC;CAC9D;AAED,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC,wBAAsB,YAAY,CAChC,OAAO,EAAE,kBAAkB,EAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/C,OAAO,CAAC,kBAAkB,GAAG,iBAAiB,GAAG,eAAe,CAAC,CA0DnE"}
@@ -330,6 +330,8 @@ function formatStructuredResult(result, type, invalidElementCount = 0) {
330
330
  type,
331
331
  version: item.metadata?.version || item.version,
332
332
  tags: item.metadata?.tags,
333
+ created: item.metadata?.created || '',
334
+ author: item.metadata?.author || '',
333
335
  })),
334
336
  pagination: {
335
337
  page: pagination.page,
@@ -397,4 +399,4 @@ function unknownType(type) {
397
399
  code: 'UNKNOWN_TYPE',
398
400
  };
399
401
  }
400
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdEVsZW1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hhbmRsZXJzL2VsZW1lbnQtY3J1ZC9saXN0RWxlbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVsRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLDBCQUEwQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFHM0csT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTVGLG9GQUFvRjtBQUNwRixNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7R0FXRztBQUNIOzs7OztHQUtHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxPQUFnQztJQUMvRCxpQ0FBaUM7SUFDakMsSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLE9BQU8sT0FBTyxDQUFDLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNqRSxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsVUFBcUMsQ0FBQztRQUN4RCxJQUFJLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pHLE9BQU8sNkRBQTZELENBQUMsQ0FBQyxJQUFJLHdEQUF3RCxDQUFDO1FBQ3JJLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0s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RUFBRSxDQUFDO1lBQ1AsUUFBUSxFQUFFLHNCQUFzQjtZQUNoQyxVQUFVLEVBQUUsQ0FBQztZQUNiLFVBQVUsRUFBRSxDQUFDO1lBQ2IsV0FBVyxFQUFFLEtBQUs7WUFDbEIsV0FBVyxFQUFFLEtBQUs7U0FDbkI7UUFDRCxPQUFPLEVBQUU7WUFDUCxNQUFNLEVBQUUsTUFBTTtZQUNkLFNBQVMsRUFBRSxLQUFLO1NBQ2pCO1FBQ0QsWUFBWSxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUM7S0FDcEMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUFZO0lBQy9CLE9BQU87UUFDTCxLQUFLLEVBQUUseUJBQXlCLElBQUksdUJBQXVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnRUFBZ0U7UUFDaEssSUFBSSxFQUFFLGNBQWM7S0FDckIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExpc3QgRWxlbWVudHMgSGFuZGxlciAtIFRva2VuLUVmZmljaWVudCBMaXN0aW5nc1xuICpcbiAqIElzc3VlcyAjMjk5LCAjMzA5OiBBbGwgbGlzdF9lbGVtZW50cyBjYWxscyBnbyB0aHJvdWdoIHRoZSBxdWVyeSBwaXBlbGluZVxuICogd2l0aCBkZWZhdWx0IHBhZ2luYXRpb24gKHBhZ2UgMSwgcGFnZVNpemUgMjApLiBSZXR1cm5zIHN0cnVjdHVyZWQgZGF0YVxuICogdGhhdCBGaWVsZEZpbHRlciBjYW4gcHJvY2VzcyBmb3IgdG9rZW4gb3B0aW1pemF0aW9uLlxuICpcbiAqIExlZ2FjeSB0ZXh0LWZvcm1hdCBtb2RlIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZXNwb25zZSBpcyBub3cgYSBzdHJ1Y3R1cmVkXG4gKiBvYmplY3Qgd2l0aCB7IGl0ZW1zLCBwYWdpbmF0aW9uLCBzb3J0aW5nLCBmaWx0ZXJzIH0gdGhhdCBNQ1BBUUxIYW5kbGVyJ3NcbiAqIGFwcGx5RmllbGRTZWxlY3Rpb24gY2FuIGZpbHRlciB3aXRoIHByZXNldHMgKG1pbmltYWwvc3RhbmRhcmQvZnVsbCkuXG4gKi9cblxuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi8uLi9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBFbGVtZW50Q3J1ZENvbnRleHQgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBRdWVyeU9wdGlvbnMsIFF1ZXJ5UmVzdWx0LCBBZ2dyZWdhdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9xdWVyeS90eXBlcy5qcyc7XG5pbXBvcnQgeyBhZ2dyZWdhdGVFbGVtZW50cywgdmFsaWRhdGVBZ2dyZWdhdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9xdWVyeS9BZ2dyZWdhdGlvblNlcnZpY2UuanMnO1xuaW1wb3J0IHR5cGUgeyBBZ2dyZWdhdGlvblJlc3VsdCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3F1ZXJ5L0FnZ3JlZ2F0aW9uU2VydmljZS5qcyc7XG5pbXBvcnQgeyBJRWxlbWVudCB9IGZyb20gJy4uLy4uL3R5cGVzL2VsZW1lbnRzL0lFbGVtZW50LmpzJztcbmltcG9ydCB7IEVMRU1FTlRfVFlQRV9NQVAsIHRvU2luZ3VsYXJMYWJlbCB9IGZyb20gJy4uLy4uL3V0aWxzL2VsZW1lbnRUeXBlTm9ybWFsaXphdGlvbi5qcyc7XG5cbi8qKiBEZWZhdWx0IHBhZ2Ugc2l6ZSBmb3IgbGlzdF9lbGVtZW50cyB3aGVuIG5vIHBhZ2luYXRpb24gc3BlY2lmaWVkIChJc3N1ZSAjMjk5KSAqL1xuY29uc3QgREVGQVVMVF9MSVNUX1BBR0VfU0laRSA9IDIwO1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBmbGF0L21peGVkIHBhcmFtcyBpbnRvIHByb3BlciBRdWVyeU9wdGlvbnMgc3RydWN0dXJlLlxuICpcbiAqIFN1cHBvcnRzIG11bHRpcGxlIGlucHV0IGZvcm1hdHMgZm9yIGNvbnZlbmllbmNlOlxuICogLSBOZXN0ZWQ6IHsgcGFnaW5hdGlvbjogeyBwYWdlOiAyLCBwYWdlU2l6ZTogMjUgfSwgZmlsdGVyczogey4uLn0sIHNvcnQ6IHsuLi59IH1cbiAqIC0gRmxhdCBwYWdpbmF0aW9uOiB7IHBhZ2U6IDIsIHBhZ2VTaXplOiAyNSB9XG4gKiAtIEZsYXQgbGltaXQvb2Zmc2V0OiB7IGxpbWl0OiAyNSwgb2Zmc2V0OiA1MCB9IChvZmZzZXQ9NTAsIGxpbWl0PTI1IOKGkiBwYWdlIDMpXG4gKiAtIEZsYXQgZmlsdGVyczogeyBuYW1lQ29udGFpbnM6ICd0ZXN0JywgdGFnczogWydhJywgJ2InXSB9XG4gKiAtIEZsYXQgc29ydDogeyBzb3J0Qnk6ICdtb2RpZmllZCcsIHNvcnRPcmRlcjogJ2Rlc2MnIH1cbiAqXG4gKiBJc3N1ZSAjMjA0OiBNQ1AtQVFMIFBhZ2luYXRpb24sIGZpbHRlcmluZywgYW5kIHNvcnRpbmdcbiAqL1xuLyoqXG4gKiBWYWxpZGF0ZSBwYWdpbmF0aW9uIGlucHV0IGJlZm9yZSBub3JtYWxpemF0aW9uLlxuICogUmV0dXJucyBhbiBlcnJvciBzdHJpbmcgaWYgaW52YWxpZCwgb3IgbnVsbCBpZiB2YWxpZC5cbiAqXG4gKiBJc3N1ZSAjMjI3OiBSZWplY3QgaW52YWxpZCBwYWdpbmF0aW9uIHBhcmFtZXRlciBjb21iaW5hdGlvbnNcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVQYWdpbmF0aW9uSW5wdXQob3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gQ2hlY2sgbmVzdGVkIHBhZ2luYXRpb24gb2JqZWN0XG4gIGlmIChvcHRpb25zLnBhZ2luYXRpb24gJiYgdHlwZW9mIG9wdGlvbnMucGFnaW5hdGlvbiA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBwID0gb3B0aW9ucy5wYWdpbmF0aW9uIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmICh0eXBlb2YgcC5wYWdlID09PSAnbnVtYmVyJyAmJiAoIU51bWJlci5pc0Zpbml0ZShwLnBhZ2UpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHAucGFnZSkgfHwgcC5wYWdlIDw9IDApKSB7XG4gICAgICByZXR1cm4gYEludmFsaWQgcGFnaW5hdGlvbjogcGFnZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciAoZ290OiAke3AucGFnZX0pLlxcbkV4YW1wbGU6IHsgcGFnaW5hdGlvbjogeyBwYWdlOiAxLCBwYWdlU2l6ZTogMjUgfSB9YDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwLnBhZ2VTaXplID09PSAnbnVtYmVyJyAmJiAoIU51bWJlci5pc0Zpbml0ZShwLnBhZ2VTaXplKSB8fCAhTnVtYmVyLmlzSW50ZWdlcihwLnBhZ2VTaXplKSB8fCBwLnBhZ2VTaXplIDw9IDApKSB7XG4gICAgICByZXR1cm4gYEludmFsaWQgcGFnaW5hdGlvbjogcGFnZVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgKGdvdDogJHtwLnBhZ2VTaXplfSkuXFxuRXhhbXBsZTogeyBwYWdpbmF0aW9uOiB7IHBhZ2U6IDEsIHBhZ2VTaXplOiAyNSB9IH1gO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENoZWNrIGZsYXQgcGFyYW1zXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5wYWdlID09PSAnbnVtYmVyJyAmJiAoIU51bWJlci5pc0Zpbml0ZShvcHRpb25zLnBhZ2UpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMucGFnZSkgfHwgb3B0aW9ucy5wYWdlIDw9IDApKSB7XG4gICAgcmV0dXJuIGBJbnZhbGlkIHBhZ2luYXRpb246IHBhZ2UgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgKGdvdDogJHtvcHRpb25zLnBhZ2V9KS5cXG5FeGFtcGxlOiB7IHBhZ2U6IDEsIHBhZ2VTaXplOiAyNSB9YDtcbiAgfVxuICBpZiAodHlwZW9mIG9wdGlvbnMucGFnZVNpemUgPT09ICdudW1iZXInICYmICghTnVtYmVyLmlzRmluaXRlKG9wdGlvbnMucGFnZVNpemUpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMucGFnZVNpemUpIHx8IG9wdGlvbnMucGFnZVNpemUgPD0gMCkpIHtcbiAgICByZXR1cm4gYEludmFsaWQgcGFnaW5hdGlvbjogcGFnZVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgKGdvdDogJHtvcHRpb25zLnBhZ2VTaXplfSkuXFxuRXhhbXBsZTogeyBwYWdlOiAxLCBwYWdlU2l6ZTogMjUgfWA7XG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmxpbWl0ID09PSAnbnVtYmVyJyAmJiAoIU51bWJlci5pc0Zpbml0ZShvcHRpb25zLmxpbWl0KSB8fCAhTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLmxpbWl0KSB8fCBvcHRpb25zLmxpbWl0IDw9IDApKSB7XG4gICAgcmV0dXJuIGBJbnZhbGlkIHBhZ2luYXRpb246IGxpbWl0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIChnb3Q6ICR7b3B0aW9ucy5saW1pdH0pLlxcbkV4YW1wbGU6IHsgbGltaXQ6IDI1LCBvZmZzZXQ6IDAgfWA7XG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRpb25zLm9mZnNldCA9PT0gJ251bWJlcicgJiYgKCFOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5vZmZzZXQpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMub2Zmc2V0KSB8fCBvcHRpb25zLm9mZnNldCA8IDApKSB7XG4gICAgcmV0dXJuIGBJbnZhbGlkIHBhZ2luYXRpb246IG9mZnNldCBtdXN0IGJlIGEgd2hvbGUgbnVtYmVyLCAwIG9yIGdyZWF0ZXIgKGdvdDogJHtvcHRpb25zLm9mZnNldH0pLlxcbkV4YW1wbGU6IHsgbGltaXQ6IDI1LCBvZmZzZXQ6IDAgfWA7XG4gIH1cblxuICAvLyBSZWplY3QgY29uZmxpY3RpbmcgcGFnZSArIG9mZnNldCAoYW1iaWd1b3VzIGludGVudClcbiAgY29uc3QgaGFzUGFnZSA9IHR5cGVvZiBvcHRpb25zLnBhZ2UgPT09ICdudW1iZXInO1xuICBjb25zdCBoYXNPZmZzZXQgPSB0eXBlb2Ygb3B0aW9ucy5vZmZzZXQgPT09ICdudW1iZXInO1xuICBpZiAoaGFzUGFnZSAmJiBoYXNPZmZzZXQpIHtcbiAgICByZXR1cm4gXCJDb25mbGljdGluZyBwYWdpbmF0aW9uOiBjYW5ub3QgdXNlIGJvdGggJ3BhZ2UnIGFuZCAnb2Zmc2V0Jy5cXG5Vc2UgZWl0aGVyIHBhZ2UtYmFzZWQgKHsgcGFnZTogMiwgcGFnZVNpemU6IDI1IH0pIG9yIG9mZnNldC1iYXNlZCAoeyBvZmZzZXQ6IDUwLCBsaW1pdDogMjUgfSkuXCI7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUXVlcnlPcHRpb25zKG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUXVlcnlPcHRpb25zIHwgeyBlcnJvcjogc3RyaW5nIH0ge1xuICAvLyBWYWxpZGF0ZSBwYWdpbmF0aW9uIGlucHV0IGZpcnN0IChJc3N1ZSAjMjI3KVxuICBjb25zdCB2YWxpZGF0aW9uRXJyb3IgPSB2YWxpZGF0ZVBhZ2luYXRpb25JbnB1dChvcHRpb25zKTtcbiAgaWYgKHZhbGlkYXRpb25FcnJvcikge1xuICAgIHJldHVybiB7IGVycm9yOiB2YWxpZGF0aW9uRXJyb3IgfTtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWQ6IFF1ZXJ5T3B0aW9ucyA9IHt9O1xuXG4gIC8vIE5vcm1hbGl6ZSBwYWdpbmF0aW9uXG4gIC8vIFByaW9yaXR5OiBuZXN0ZWQgcGFnaW5hdGlvbiA+IGxpbWl0L29mZnNldCA+IGZsYXQgcGFnZS9wYWdlU2l6ZVxuICBpZiAob3B0aW9ucy5wYWdpbmF0aW9uICYmIHR5cGVvZiBvcHRpb25zLnBhZ2luYXRpb24gPT09ICdvYmplY3QnKSB7XG4gICAgbm9ybWFsaXplZC5wYWdpbmF0aW9uID0gb3B0aW9ucy5wYWdpbmF0aW9uIGFzIFF1ZXJ5T3B0aW9uc1sncGFnaW5hdGlvbiddO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHBhZ2luYXRpb246IFF1ZXJ5T3B0aW9uc1sncGFnaW5hdGlvbiddID0ge307XG5cbiAgICAvLyBTdXBwb3J0IGxpbWl0L29mZnNldCBzdHlsZSAoY29udmVydCB0byBwYWdlL3BhZ2VTaXplKVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5saW1pdCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5saW1pdCA+IDApIHtcbiAgICAgIHBhZ2luYXRpb24ucGFnZVNpemUgPSBvcHRpb25zLmxpbWl0O1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLm9mZnNldCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5vZmZzZXQgPj0gMCkge1xuICAgICAgICAvLyBDb252ZXJ0IG9mZnNldCB0byBwYWdlIG51bWJlciAoMS1pbmRleGVkKVxuICAgICAgICBwYWdpbmF0aW9uLnBhZ2UgPSBNYXRoLmZsb29yKG9wdGlvbnMub2Zmc2V0IC8gb3B0aW9ucy5saW1pdCkgKyAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN1cHBvcnQgZmxhdCBwYWdlL3BhZ2VTaXplIChvdmVycmlkZXMgbGltaXQvb2Zmc2V0IGlmIGJvdGggcHJlc2VudClcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucGFnZSA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5wYWdlID4gMCkge1xuICAgICAgcGFnaW5hdGlvbi5wYWdlID0gb3B0aW9ucy5wYWdlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucGFnZVNpemUgPT09ICdudW1iZXInICYmIG9wdGlvbnMucGFnZVNpemUgPiAwKSB7XG4gICAgICBwYWdpbmF0aW9uLnBhZ2VTaXplID0gb3B0aW9ucy5wYWdlU2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMocGFnaW5hdGlvbikubGVuZ3RoID4gMCkge1xuICAgICAgbm9ybWFsaXplZC5wYWdpbmF0aW9uID0gcGFnaW5hdGlvbjtcbiAgICB9XG4gIH1cblxuICAvLyBOb3JtYWxpemUgZmlsdGVyc1xuICAvLyBQcmlvcml0eTogbmVzdGVkIGZpbHRlcnMvZmlsdGVyID4gZmxhdCBmaWx0ZXIgZmllbGRzXG4gIGlmIChvcHRpb25zLmZpbHRlcnMgJiYgdHlwZW9mIG9wdGlvbnMuZmlsdGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICBub3JtYWxpemVkLmZpbHRlcnMgPSBvcHRpb25zLmZpbHRlcnMgYXMgUXVlcnlPcHRpb25zWydmaWx0ZXJzJ107XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5maWx0ZXIgJiYgdHlwZW9mIG9wdGlvbnMuZmlsdGVyID09PSAnb2JqZWN0Jykge1xuICAgIC8vIFN1cHBvcnQgc2luZ3VsYXIgJ2ZpbHRlcicgYXMgYWxpYXMgZm9yICdmaWx0ZXJzJ1xuICAgIG5vcm1hbGl6ZWQuZmlsdGVycyA9IG9wdGlvbnMuZmlsdGVyIGFzIFF1ZXJ5T3B0aW9uc1snZmlsdGVycyddO1xuICB9IGVsc2Uge1xuICAgIC8vIFN1cHBvcnQgZmxhdCBmaWx0ZXIgZmllbGRzXG4gICAgY29uc3QgZmlsdGVyczogTm9uTnVsbGFibGU8UXVlcnlPcHRpb25zWydmaWx0ZXJzJ10+ID0ge307XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMubmFtZUNvbnRhaW5zID09PSAnc3RyaW5nJykge1xuICAgICAgZmlsdGVycy5uYW1lQ29udGFpbnMgPSBvcHRpb25zLm5hbWVDb250YWlucztcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy50YWdzKSAmJiBvcHRpb25zLnRhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgZmlsdGVycy50YWdzID0gb3B0aW9ucy50YWdzIGFzIHN0cmluZ1tdO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLnRhZ3NBbnkpICYmIG9wdGlvbnMudGFnc0FueS5sZW5ndGggPiAwKSB7XG4gICAgICBmaWx0ZXJzLnRhZ3NBbnkgPSBvcHRpb25zLnRhZ3NBbnkgYXMgc3RyaW5nW107XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRob3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmaWx0ZXJzLmF1dGhvciA9IG9wdGlvbnMuYXV0aG9yO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuY3JlYXRlZEFmdGVyID09PSAnc3RyaW5nJykge1xuICAgICAgZmlsdGVycy5jcmVhdGVkQWZ0ZXIgPSBvcHRpb25zLmNyZWF0ZWRBZnRlcjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNyZWF0ZWRCZWZvcmUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmaWx0ZXJzLmNyZWF0ZWRCZWZvcmUgPSBvcHRpb25zLmNyZWF0ZWRCZWZvcmU7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnN0YXR1cyA9PT0gJ2FjdGl2ZScgfHwgb3B0aW9ucy5zdGF0dXMgPT09ICdpbmFjdGl2ZScgfHwgb3B0aW9ucy5zdGF0dXMgPT09ICdhbGwnKSB7XG4gICAgICBmaWx0ZXJzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzY3JpcHRpb25Db250YWlucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGZpbHRlcnMuZGVzY3JpcHRpb25Db250YWlucyA9IG9wdGlvbnMuZGVzY3JpcHRpb25Db250YWlucztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNhdGVnb3J5ID09PSAnc3RyaW5nJykge1xuICAgICAgZmlsdGVycy5jYXRlZ29yeSA9IG9wdGlvbnMuY2F0ZWdvcnk7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKGZpbHRlcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIG5vcm1hbGl6ZWQuZmlsdGVycyA9IGZpbHRlcnM7XG4gICAgfVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHNvcnRcbiAgLy8gUHJpb3JpdHk6IG5lc3RlZCBzb3J0ID4gZmxhdCBzb3J0Qnkvc29ydE9yZGVyXG4gIGlmIChvcHRpb25zLnNvcnQgJiYgdHlwZW9mIG9wdGlvbnMuc29ydCA9PT0gJ29iamVjdCcpIHtcbiAgICBub3JtYWxpemVkLnNvcnQgPSBvcHRpb25zLnNvcnQgYXMgUXVlcnlPcHRpb25zWydzb3J0J107XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc29ydDogTm9uTnVsbGFibGU8UXVlcnlPcHRpb25zWydzb3J0J10+ID0ge307XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuc29ydEJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgc29ydC5zb3J0QnkgPSBvcHRpb25zLnNvcnRCeSBhcyAnbmFtZScgfCAnY3JlYXRlZCcgfCAnbW9kaWZpZWQnIHwgJ3ZlcnNpb24nIHwgJ3JldGVudGlvbic7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnNvcnRPcmRlciA9PT0gJ2FzYycgfHwgb3B0aW9ucy5zb3J0T3JkZXIgPT09ICdkZXNjJykge1xuICAgICAgc29ydC5zb3J0T3JkZXIgPSBvcHRpb25zLnNvcnRPcmRlcjtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoc29ydCkubGVuZ3RoID4gMCkge1xuICAgICAgbm9ybWFsaXplZC5zb3J0ID0gc29ydDtcbiAgICB9XG4gIH1cblxuICAvLyBOb3JtYWxpemUgYWdncmVnYXRpb24gKElzc3VlICMzMDkpXG4gIGlmIChvcHRpb25zLmFnZ3JlZ2F0ZSAmJiB0eXBlb2Ygb3B0aW9ucy5hZ2dyZWdhdGUgPT09ICdvYmplY3QnKSB7XG4gICAgbm9ybWFsaXplZC5hZ2dyZWdhdGUgPSBvcHRpb25zLmFnZ3JlZ2F0ZSBhcyBBZ2dyZWdhdGlvbk9wdGlvbnM7XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLyoqXG4gKiBDbGVhbiB1cCB1bmRlZmluZWQgdmFsdWVzIGZyb20gb3B0aW9ucyB0byBwcmV2ZW50IHZhbGlkYXRpb24gaXNzdWVzXG4gKi9cbmZ1bmN0aW9uIGNsZWFuUXVlcnlPcHRpb25zKG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyk6IFF1ZXJ5T3B0aW9ucyB7XG4gIGNvbnN0IGNsZWFuOiBRdWVyeU9wdGlvbnMgPSB7fTtcblxuICBpZiAob3B0aW9ucy5wYWdpbmF0aW9uKSB7XG4gICAgY29uc3QgcGFnaW5hdGlvbjogUGFydGlhbDxRdWVyeU9wdGlvbnNbJ3BhZ2luYXRpb24nXT4gPSB7fTtcbiAgICBpZiAob3B0aW9ucy5wYWdpbmF0aW9uLnBhZ2UgIT09IHVuZGVmaW5lZCkgcGFnaW5hdGlvbi5wYWdlID0gb3B0aW9ucy5wYWdpbmF0aW9uLnBhZ2U7XG4gICAgaWYgKG9wdGlvbnMucGFnaW5hdGlvbi5wYWdlU2l6ZSAhPT0gdW5kZWZpbmVkKSBwYWdpbmF0aW9uLnBhZ2VTaXplID0gb3B0aW9ucy5wYWdpbmF0aW9uLnBhZ2VTaXplO1xuICAgIGlmIChPYmplY3Qua2V5cyhwYWdpbmF0aW9uKS5sZW5ndGggPiAwKSBjbGVhbi5wYWdpbmF0aW9uID0gcGFnaW5hdGlvbjtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnNvcnQpIHtcbiAgICBjb25zdCBzb3J0OiBQYXJ0aWFsPE5vbk51bGxhYmxlPFF1ZXJ5T3B0aW9uc1snc29ydCddPj4gPSB7fTtcbiAgICBpZiAob3B0aW9ucy5zb3J0LnNvcnRCeSAhPT0gdW5kZWZpbmVkKSBzb3J0LnNvcnRCeSA9IG9wdGlvbnMuc29ydC5zb3J0Qnk7XG4gICAgaWYgKG9wdGlvbnMuc29ydC5zb3J0T3JkZXIgIT09IHVuZGVmaW5lZCkgc29ydC5zb3J0T3JkZXIgPSBvcHRpb25zLnNvcnQuc29ydE9yZGVyO1xuICAgIGlmIChPYmplY3Qua2V5cyhzb3J0KS5sZW5ndGggPiAwKSBjbGVhbi5zb3J0ID0gc29ydDtcbiAgfVxuXG4gIGlmIChvcHRpb25zLmZpbHRlcnMpIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBQYXJ0aWFsPE5vbk51bGxhYmxlPFF1ZXJ5T3B0aW9uc1snZmlsdGVycyddPj4gPSB7fTtcbiAgICBpZiAob3B0aW9ucy5maWx0ZXJzLm5hbWVDb250YWlucyAhPT0gdW5kZWZpbmVkKSBmaWx0ZXJzLm5hbWVDb250YWlucyA9IG9wdGlvbnMuZmlsdGVycy5uYW1lQ29udGFpbnM7XG4gICAgaWYgKG9wdGlvbnMuZmlsdGVycy50YWdzICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5maWx0ZXJzLnRhZ3MubGVuZ3RoID4gMCkgZmlsdGVycy50YWdzID0gb3B0aW9ucy5maWx0ZXJzLnRhZ3M7XG4gICAgaWYgKG9wdGlvbnMuZmlsdGVycy50YWdzQW55ICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5maWx0ZXJzLnRhZ3NBbnkubGVuZ3RoID4gMCkgZmlsdGVycy50YWdzQW55ID0gb3B0aW9ucy5maWx0ZXJzLnRhZ3NBbnk7XG4gICAgaWYgKG9wdGlvbnMuZmlsdGVycy5hdXRob3IgIT09IHVuZGVmaW5lZCkgZmlsdGVycy5hdXRob3IgPSBvcHRpb25zLmZpbHRlcnMuYXV0aG9yO1xuICAgIGlmIChvcHRpb25zLmZpbHRlcnMuY3JlYXRlZEFmdGVyICE9PSB1bmRlZmluZWQpIGZpbHRlcnMuY3JlYXRlZEFmdGVyID0gb3B0aW9ucy5maWx0ZXJzLmNyZWF0ZWRBZnRlcjtcbiAgICBpZiAob3B0aW9ucy5maWx0ZXJzLmNyZWF0ZWRCZWZvcmUgIT09IHVuZGVmaW5lZCkgZmlsdGVycy5jcmVhdGVkQmVmb3JlID0gb3B0aW9ucy5maWx0ZXJzLmNyZWF0ZWRCZWZvcmU7XG4gICAgaWYgKG9wdGlvbnMuZmlsdGVycy5zdGF0dXMgIT09IHVuZGVmaW5lZCkgZmlsdGVycy5zdGF0dXMgPSBvcHRpb25zLmZpbHRlcnMuc3RhdHVzO1xuICAgIGlmIChvcHRpb25zLmZpbHRlcnMuZGVzY3JpcHRpb25Db250YWlucyAhPT0gdW5kZWZpbmVkKSBmaWx0ZXJzLmRlc2NyaXB0aW9uQ29udGFpbnMgPSBvcHRpb25zLmZpbHRlcnMuZGVzY3JpcHRpb25Db250YWlucztcbiAgICBpZiAob3B0aW9ucy5maWx0ZXJzLmNhdGVnb3J5ICE9PSB1bmRlZmluZWQpIGZpbHRlcnMuY2F0ZWdvcnkgPSBvcHRpb25zLmZpbHRlcnMuY2F0ZWdvcnk7XG4gICAgaWYgKE9iamVjdC5rZXlzKGZpbHRlcnMpLmxlbmd0aCA+IDApIGNsZWFuLmZpbHRlcnMgPSBmaWx0ZXJzO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuYWdncmVnYXRlKSB7XG4gICAgY2xlYW4uYWdncmVnYXRlID0gb3B0aW9ucy5hZ2dyZWdhdGU7XG4gIH1cblxuICByZXR1cm4gY2xlYW47XG59XG5cbi8qKlxuICogU3RydWN0dXJlZCBpdGVtIHNoYXBlIHJldHVybmVkIGJ5IGxpc3RfZWxlbWVudHMuXG4gKiBEZXNpZ25lZCBmb3IgdG9rZW4gZWZmaWNpZW5jeSDigJQgaW5jbHVkZXMgb25seSB0aGUgZmllbGRzIExMTXMgdHlwaWNhbGx5IG5lZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdEVsZW1lbnRJdGVtIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIHRhZ3M/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBTdHJ1Y3R1cmVkIHJlc3BvbnNlIHNoYXBlIGZvciBsaXN0X2VsZW1lbnRzLlxuICogUmVwbGFjZXMgdGhlIG9sZCBNQ1AgdGV4dCBmb3JtYXQgd2l0aCBzdHJ1Y3R1cmVkIGRhdGEgdGhhdCBGaWVsZEZpbHRlciBjYW4gcHJvY2Vzcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaXN0RWxlbWVudHNSZXN1bHQge1xuICBpdGVtczogTGlzdEVsZW1lbnRJdGVtW107XG4gIHBhZ2luYXRpb246IHtcbiAgICBwYWdlOiBudW1iZXI7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICB0b3RhbEl0ZW1zOiBudW1iZXI7XG4gICAgdG90YWxQYWdlczogbnVtYmVyO1xuICAgIGhhc05leHRQYWdlOiBib29sZWFuO1xuICAgIGhhc1ByZXZQYWdlOiBib29sZWFuO1xuICB9O1xuICBzb3J0aW5nOiB7XG4gICAgc29ydEJ5OiBzdHJpbmc7XG4gICAgc29ydE9yZGVyOiBzdHJpbmc7XG4gIH07XG4gIGZpbHRlcnM/OiB7XG4gICAgYXBwbGllZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7XG4gICAgICBjb3VudDogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIGVsZW1lbnRfdHlwZTogc3RyaW5nO1xuICAvKiogSXNzdWUgIzcwODogQ291bnQgb2YgZWxlbWVudHMgdGhhdCBleGlzdCBvbiBkaXNrIGJ1dCBmYWlsZWQgdmFsaWRhdGlvbi4gKi9cbiAgd2FybmluZ3M/OiB7XG4gICAgaW52YWxpZF9lbGVtZW50c19jb3VudDogbnVtYmVyO1xuICB9O1xufVxuXG4vKipcbiAqIFN0cnVjdHVyZWQgZXJyb3IgcmVzcG9uc2Ug4oCUIGNvbnNpc3RlbnQgd2l0aCBzdHJ1Y3R1cmVkIHN1Y2Nlc3MgcmVzcG9uc2VzLlxuICogUmVwbGFjZXMgdGhlIG9sZCBNQ1AgdGV4dCBmb3JtYXQgZm9yIHZhbGlkYXRpb24gZXJyb3JzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZWRFcnJvciB7XG4gIGVycm9yOiBzdHJpbmc7XG4gIGNvZGU6ICdWQUxJREFUSU9OX0VSUk9SJyB8ICdVTktOT1dOX1RZUEUnIHwgJ0lOVEVSTkFMX0VSUk9SJztcbn1cblxuZXhwb3J0IHR5cGUgeyBBZ2dyZWdhdGlvblJlc3VsdCB9O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdEVsZW1lbnRzKFxuICBjb250ZXh0OiBFbGVtZW50Q3J1ZENvbnRleHQsXG4gIHR5cGU6IHN0cmluZyxcbiAgb3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBQcm9taXNlPExpc3RFbGVtZW50c1Jlc3VsdCB8IEFnZ3JlZ2F0aW9uUmVzdWx0IHwgU3RydWN0dXJlZEVycm9yPiB7XG4gIGF3YWl0IGNvbnRleHQuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcblxuICBjb25zdCBub3JtYWxpemVkVHlwZSA9IEVMRU1FTlRfVFlQRV9NQVBbdHlwZS50cmltKCkudG9Mb3dlckNhc2UoKV07XG5cbiAgdHJ5IHtcbiAgICAvLyBOb3JtYWxpemUgb3B0aW9ucyAoc3VwcG9ydHMgZmxhdCBwYXJhbXMsIG5lc3RlZCBwYXJhbXMsIG9yIG5vIHBhcmFtcylcbiAgICBjb25zdCByYXdPcHRpb25zID0gKG9wdGlvbnMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHx8IHt9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRPcHRpb25zID0gbm9ybWFsaXplUXVlcnlPcHRpb25zKHJhd09wdGlvbnMpO1xuXG4gICAgLy8gQ2hlY2sgZm9yIHZhbGlkYXRpb24gZXJyb3JzIChJc3N1ZSAjMjI3KVxuICAgIGlmICgnZXJyb3InIGluIG5vcm1hbGl6ZWRPcHRpb25zKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlcnJvcjogbm9ybWFsaXplZE9wdGlvbnMuZXJyb3IsXG4gICAgICAgIGNvZGU6ICdWQUxJREFUSU9OX0VSUk9SJyBhcyBjb25zdCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCFub3JtYWxpemVkVHlwZSkge1xuICAgICAgcmV0dXJuIHVua25vd25UeXBlKHR5cGUpO1xuICAgIH1cblxuICAgIC8vIEdldCByYXcgZWxlbWVudHMgZnJvbSB0aGUgYXBwcm9wcmlhdGUgbWFuYWdlclxuICAgIGNvbnN0IGVsZW1lbnRzID0gYXdhaXQgZ2V0RWxlbWVudHNGb3JUeXBlKGNvbnRleHQsIG5vcm1hbGl6ZWRUeXBlKTtcblxuICAgIGlmIChlbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBlbXB0eUVsZW1lbnRzUmVzcG9uc2Uobm9ybWFsaXplZFR5cGUpO1xuICAgIH1cblxuICAgIC8vIENsZWFuIHRoZSBvcHRpb25zIHRvIHJlbW92ZSB1bmRlZmluZWQgdmFsdWVzXG4gICAgY29uc3QgY2xlYW5PcHRpb25zID0gY2xlYW5RdWVyeU9wdGlvbnMobm9ybWFsaXplZE9wdGlvbnMpO1xuXG4gICAgLy8gSGFuZGxlIGFnZ3JlZ2F0aW9uIHJlcXVlc3RzIChJc3N1ZSAjMzA5KVxuICAgIGlmIChjbGVhbk9wdGlvbnMuYWdncmVnYXRlICYmIChjbGVhbk9wdGlvbnMuYWdncmVnYXRlLmNvdW50IHx8IGNsZWFuT3B0aW9ucy5hZ2dyZWdhdGUuZ3JvdXBfYnkpKSB7XG4gICAgICByZXR1cm4gaGFuZGxlQWdncmVnYXRpb24oY29udGV4dCwgZWxlbWVudHMgYXMgSUVsZW1lbnRbXSwgbm9ybWFsaXplZFR5cGUsIGNsZWFuT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgcXVlcnkgc2VydmljZSAoZmlsdGVyIOKGkiBzb3J0IOKGkiBwYWdpbmF0ZSkgd2l0aCBkZWZhdWx0IHBhZ2luYXRpb25cbiAgICBpZiAoIWNsZWFuT3B0aW9ucy5wYWdpbmF0aW9uKSB7XG4gICAgICBjbGVhbk9wdGlvbnMucGFnaW5hdGlvbiA9IHsgcGFnZTogMSwgcGFnZVNpemU6IERFRkFVTFRfTElTVF9QQUdFX1NJWkUgfTtcbiAgICB9IGVsc2UgaWYgKCFjbGVhbk9wdGlvbnMucGFnaW5hdGlvbi5wYWdlU2l6ZSkge1xuICAgICAgY2xlYW5PcHRpb25zLnBhZ2luYXRpb24ucGFnZVNpemUgPSBERUZBVUxUX0xJU1RfUEFHRV9TSVpFO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuZWxlbWVudFF1ZXJ5U2VydmljZS5xdWVyeShlbGVtZW50cyBhcyBJRWxlbWVudFtdLCBjbGVhbk9wdGlvbnMpO1xuXG4gICAgLy8gSXNzdWUgIzcwODogSW5jbHVkZSBjb3VudCBvZiBpbnZhbGlkIGVsZW1lbnRzIGluIGxpc3QgcmVzcG9uc2VcbiAgICBjb25zdCBpbnZhbGlkQ291bnQgPSBnZXRJbnZhbGlkRWxlbWVudENvdW50KGNvbnRleHQsIG5vcm1hbGl6ZWRUeXBlKTtcblxuICAgIC8vIFJldHVybiBzdHJ1Y3R1cmVkIGRhdGEgKG5vdCBNQ1AgdGV4dCBmb3JtYXQpIHNvIEZpZWxkRmlsdGVyIGNhbiBwcm9jZXNzIGl0XG4gICAgcmV0dXJuIGZvcm1hdFN0cnVjdHVyZWRSZXN1bHQocmVzdWx0LCBub3JtYWxpemVkVHlwZSwgaW52YWxpZENvdW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0VsZW1lbnRDUlVESGFuZGxlci5saXN0RWxlbWVudHMnLCB7IGVycm9yLCB0eXBlIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjogYEZhaWxlZCB0byBsaXN0ICR7dHlwZX06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCxcbiAgICAgIGNvZGU6ICdJTlRFUk5BTF9FUlJPUicgYXMgY29uc3QsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEdldCBlbGVtZW50cyBmcm9tIHRoZSBhcHByb3ByaWF0ZSBtYW5hZ2VyIGJhc2VkIG9uIHR5cGVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0RWxlbWVudHNGb3JUeXBlKFxuICBjb250ZXh0OiBFbGVtZW50Q3J1ZENvbnRleHQsXG4gIHR5cGU6IEVsZW1lbnRUeXBlXG4pOiBQcm9taXNlPGFueVtdPiB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTpcbiAgICAgIHJldHVybiBjb250ZXh0LnBlcnNvbmFNYW5hZ2VyLmxpc3QoKTtcbiAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOlxuICAgICAgcmV0dXJuIGNvbnRleHQuc2tpbGxNYW5hZ2VyLmxpc3QoKTtcbiAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOlxuICAgICAgcmV0dXJuIGNvbnRleHQudGVtcGxhdGVNYW5hZ2VyLmxpc3QoKTtcbiAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOlxuICAgICAgcmV0dXJuIGNvbnRleHQuYWdlbnRNYW5hZ2VyLmxpc3QoKTtcbiAgICBjYXNlIEVsZW1lbnRUeXBlLk1FTU9SWTpcbiAgICAgIHJldHVybiBjb250ZXh0Lm1lbW9yeU1hbmFnZXIubGlzdCgpO1xuICAgIGNhc2UgRWxlbWVudFR5cGUuRU5TRU1CTEU6XG4gICAgICByZXR1cm4gY29udGV4dC5lbnNlbWJsZU1hbmFnZXIubGlzdCgpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gW107XG4gIH1cbn1cblxuLyoqXG4gKiBJc3N1ZSAjNzA4OiBHZXQgdGhlIGNvdW50IG9mIGludmFsaWQgZWxlbWVudHMgZm9yIGEgZ2l2ZW4gdHlwZS5cbiAqL1xuZnVuY3Rpb24gZ2V0SW52YWxpZEVsZW1lbnRDb3VudChcbiAgY29udGV4dDogRWxlbWVudENydWRDb250ZXh0LFxuICB0eXBlOiBFbGVtZW50VHlwZVxuKTogbnVtYmVyIHtcbiAgbGV0IG1hbmFnZXI6IHsgZ2V0SW52YWxpZEVsZW1lbnRzPzogKCkgPT4gdW5rbm93bltdIH0gfCB1bmRlZmluZWQ7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTogbWFuYWdlciA9IGNvbnRleHQucGVyc29uYU1hbmFnZXI7IGJyZWFrO1xuICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6IG1hbmFnZXIgPSBjb250ZXh0LnNraWxsTWFuYWdlcjsgYnJlYWs7XG4gICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURTogbWFuYWdlciA9IGNvbnRleHQudGVtcGxhdGVNYW5hZ2VyOyBicmVhaztcbiAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOiBtYW5hZ2VyID0gY29udGV4dC5hZ2VudE1hbmFnZXI7IGJyZWFrO1xuICAgIGNhc2UgRWxlbWVudFR5cGUuTUVNT1JZOiBtYW5hZ2VyID0gY29udGV4dC5tZW1vcnlNYW5hZ2VyOyBicmVhaztcbiAgICBjYXNlIEVsZW1lbnRUeXBlLkVOU0VNQkxFOiBtYW5hZ2VyID0gY29udGV4dC5lbnNlbWJsZU1hbmFnZXI7IGJyZWFrO1xuICB9XG4gIGlmIChtYW5hZ2VyICYmIHR5cGVvZiBtYW5hZ2VyLmdldEludmFsaWRFbGVtZW50cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYW5hZ2VyLmdldEludmFsaWRFbGVtZW50cygpLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IFF1ZXJ5UmVzdWx0IGludG8gYSBzdHJ1Y3R1cmVkIHJlc3BvbnNlIHdpdGggY29uY2lzZSBwZXItaXRlbSBkYXRhLlxuICogVGhpcyByZXBsYWNlcyB0aGUgb2xkIHRleHQtZm9ybWF0IHJlc3BvbnNlLiBUaGUgc3RydWN0dXJlZCBzaGFwZSBhbGxvd3NcbiAqIE1DUEFRTEhhbmRsZXIuYXBwbHlGaWVsZFNlbGVjdGlvbigpIHRvIGZ1cnRoZXIgcmVkdWNlIHRva2VucyB2aWEgcHJlc2V0cy5cbiAqL1xuZnVuY3Rpb24gZm9ybWF0U3RydWN0dXJlZFJlc3VsdChcbiAgcmVzdWx0OiBRdWVyeVJlc3VsdDxJRWxlbWVudD4sXG4gIHR5cGU6IEVsZW1lbnRUeXBlLFxuICBpbnZhbGlkRWxlbWVudENvdW50ID0gMFxuKTogTGlzdEVsZW1lbnRzUmVzdWx0IHtcbiAgY29uc3QgeyBpdGVtcywgcGFnaW5hdGlvbiwgc29ydGluZywgZmlsdGVycyB9ID0gcmVzdWx0O1xuXG4gIGNvbnN0IHJlc3BvbnNlOiBMaXN0RWxlbWVudHNSZXN1bHQgPSB7XG4gICAgaXRlbXM6IGl0ZW1zLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIG5hbWU6IGl0ZW0ubWV0YWRhdGE/Lm5hbWUgfHwgJ1Vua25vd24nLFxuICAgICAgZGVzY3JpcHRpb246IGl0ZW0ubWV0YWRhdGE/LmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgdHlwZSxcbiAgICAgIHZlcnNpb246IGl0ZW0ubWV0YWRhdGE/LnZlcnNpb24gfHwgaXRlbS52ZXJzaW9uLFxuICAgICAgdGFnczogaXRlbS5tZXRhZGF0YT8udGFncyxcbiAgICB9KSksXG4gICAgcGFnaW5hdGlvbjoge1xuICAgICAgcGFnZTogcGFnaW5hdGlvbi5wYWdlLFxuICAgICAgcGFnZVNpemU6IHBhZ2luYXRpb24ucGFnZVNpemUsXG4gICAgICB0b3RhbEl0ZW1zOiBwYWdpbmF0aW9uLnRvdGFsSXRlbXMsXG4gICAgICB0b3RhbFBhZ2VzOiBwYWdpbmF0aW9uLnRvdGFsUGFnZXMsXG4gICAgICBoYXNOZXh0UGFnZTogcGFnaW5hdGlvbi5oYXNOZXh0UGFnZSxcbiAgICAgIGhhc1ByZXZQYWdlOiBwYWdpbmF0aW9uLmhhc1ByZXZQYWdlLFxuICAgIH0sXG4gICAgc29ydGluZzoge1xuICAgICAgc29ydEJ5OiBzb3J0aW5nLnNvcnRCeSxcbiAgICAgIHNvcnRPcmRlcjogc29ydGluZy5zb3J0T3JkZXIsXG4gICAgfSxcbiAgICBmaWx0ZXJzOiBmaWx0ZXJzLmFwcGxpZWQuY291bnQgPiAwID8geyBhcHBsaWVkOiB7IC4uLmZpbHRlcnMuYXBwbGllZCB9IH0gOiB1bmRlZmluZWQsXG4gICAgZWxlbWVudF90eXBlOiB0b1Npbmd1bGFyTGFiZWwodHlwZSksXG4gIH07XG5cbiAgLy8gSXNzdWUgIzcwODogSW5jbHVkZSB3YXJuaW5nIHdoZW4gZWxlbWVudHMgZmFpbGVkIHRvIGxvYWRcbiAgaWYgKGludmFsaWRFbGVtZW50Q291bnQgPiAwKSB7XG4gICAgcmVzcG9uc2Uud2FybmluZ3MgPSB7IGludmFsaWRfZWxlbWVudHNfY291bnQ6IGludmFsaWRFbGVtZW50Q291bnQgfTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuLyoqXG4gKiBIYW5kbGUgYWdncmVnYXRpb24gcmVxdWVzdHMgKElzc3VlICMzMDkpLlxuICogRGVsZWdhdGVzIHRvIHNoYXJlZCBBZ2dyZWdhdGlvblNlcnZpY2UgZm9yIGNvdW50IGFuZCBncm91cF9ieS5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlQWdncmVnYXRpb24oXG4gIF9jb250ZXh0OiBFbGVtZW50Q3J1ZENvbnRleHQsXG4gIGVsZW1lbnRzOiBJRWxlbWVudFtdLFxuICB0eXBlOiBFbGVtZW50VHlwZSxcbiAgb3B0aW9uczogUXVlcnlPcHRpb25zXG4pOiBBZ2dyZWdhdGlvblJlc3VsdCB8IFN0cnVjdHVyZWRFcnJvciB7XG4gIGlmICghb3B0aW9ucy5hZ2dyZWdhdGUpIHtcbiAgICByZXR1cm4geyBjb3VudDogZWxlbWVudHMubGVuZ3RoLCBlbGVtZW50X3R5cGU6IHRvU2luZ3VsYXJMYWJlbCh0eXBlKSB9O1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgYWdncmVnYXRpb24gb3B0aW9uc1xuICBjb25zdCB2YWxpZGF0aW9uRXJyb3IgPSB2YWxpZGF0ZUFnZ3JlZ2F0aW9uT3B0aW9ucyhvcHRpb25zLmFnZ3JlZ2F0ZSk7XG4gIGlmICh2YWxpZGF0aW9uRXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3I6IHZhbGlkYXRpb25FcnJvcixcbiAgICAgIGNvZGU6ICdWQUxJREFUSU9OX0VSUk9SJyBhcyBjb25zdCxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGFnZ3JlZ2F0ZUVsZW1lbnRzKGVsZW1lbnRzLCB0b1Npbmd1bGFyTGFiZWwodHlwZSksIG9wdGlvbnMuYWdncmVnYXRlLCBvcHRpb25zLmZpbHRlcnMpO1xufVxuXG4vKipcbiAqIEVtcHR5IHJlc3BvbnNlIGZvciBlYWNoIGVsZW1lbnQgdHlwZSDigJQgcmV0dXJucyBzdHJ1Y3R1cmVkIGRhdGEgd2l0aCB6ZXJvIGl0ZW1zXG4gKi9cbmZ1bmN0aW9uIGVtcHR5RWxlbWVudHNSZXNwb25zZSh0eXBlOiBFbGVtZW50VHlwZSk6IExpc3RFbGVtZW50c1Jlc3VsdCB7XG4gIHJldHVybiB7XG4gICAgaXRlbXM6IFtdLFxuICAgIHBhZ2luYXRpb246IHtcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBwYWdlU2l6ZTogREVGQVVMVF9MSVNUX1BBR0VfU0laRSxcbiAgICAgIHRvdGFsSXRlbXM6IDAsXG4gICAgICB0b3RhbFBhZ2VzOiAwLFxuICAgICAgaGFzTmV4dFBhZ2U6IGZhbHNlLFxuICAgICAgaGFzUHJldlBhZ2U6IGZhbHNlLFxuICAgIH0sXG4gICAgc29ydGluZzoge1xuICAgICAgc29ydEJ5OiAnbmFtZScsXG4gICAgICBzb3J0T3JkZXI6ICdhc2MnLFxuICAgIH0sXG4gICAgZWxlbWVudF90eXBlOiB0b1Npbmd1bGFyTGFiZWwodHlwZSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVua25vd25UeXBlKHR5cGU6IHN0cmluZyk6IFN0cnVjdHVyZWRFcnJvciB7XG4gIHJldHVybiB7XG4gICAgZXJyb3I6IGBVbmtub3duIGVsZW1lbnQgdHlwZSAnJHt0eXBlfScuIEF2YWlsYWJsZSB0eXBlczogJHtPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5qb2luKCcsICcpfSAob3IgbGVnYWN5IHBsdXJhbCBmb3JtczogcGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhZ2VudHMpYCxcbiAgICBjb2RlOiAnVU5LTk9XTl9UWVBFJyxcbiAgfTtcbn1cbiJdfQ==
402
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdEVsZW1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hhbmRsZXJzL2VsZW1lbnQtY3J1ZC9saXN0RWxlbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVsRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLDBCQUEwQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFHM0csT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTVGLG9GQUFvRjtBQUNwRixNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7R0FXRztBQUNIOzs7OztHQUtHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxPQUFnQztJQUMvRCxpQ0FBaUM7SUFDakMsSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLE9BQU8sT0FBTyxDQUFDLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNqRSxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsVUFBcUMsQ0FBQztRQUN4RCxJQUFJLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pHLE9BQU8sNkRBQTZELENBQUMsQ0FBQyxJQUFJLHdEQUF3RCxDQUFDO1FBQ3JJLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0s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RyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLHFCQUFxQixDQUFDLElBQWlCO0lBQzlDLE9BQU87UUFDTCxLQUFLLEVBQUUsRUFBRTtRQUNULFVBQVUsRUFBRTtZQUNWLElBQUksRUFBRSxDQUFDO1lBQ1AsUUFBUSxFQUFFLHNCQUFzQjtZQUNoQyxVQUFVLEVBQUUsQ0FBQztZQUNiLFVBQVUsRUFBRSxDQUFDO1lBQ2IsV0FBVyxFQUFFLEtBQUs7WUFDbEIsV0FBVyxFQUFFLEtBQUs7U0FDbkI7UUFDRCxPQUFPLEVBQUU7WUFDUCxNQUFNLEVBQUUsTUFBTTtZQUNkLFNBQVMsRUFBRSxLQUFLO1NBQ2pCO1FBQ0QsWUFBWSxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUM7S0FDcEMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUFZO0lBQy9CLE9BQU87UUFDTCxLQUFLLEVBQUUseUJBQXlCLElBQUksdUJBQXVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnRUFBZ0U7UUFDaEssSUFBSSxFQUFFLGNBQWM7S0FDckIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExpc3QgRWxlbWVudHMgSGFuZGxlciAtIFRva2VuLUVmZmljaWVudCBMaXN0aW5nc1xuICpcbiAqIElzc3VlcyAjMjk5LCAjMzA5OiBBbGwgbGlzdF9lbGVtZW50cyBjYWxscyBnbyB0aHJvdWdoIHRoZSBxdWVyeSBwaXBlbGluZVxuICogd2l0aCBkZWZhdWx0IHBhZ2luYXRpb24gKHBhZ2UgMSwgcGFnZVNpemUgMjApLiBSZXR1cm5zIHN0cnVjdHVyZWQgZGF0YVxuICogdGhhdCBGaWVsZEZpbHRlciBjYW4gcHJvY2VzcyBmb3IgdG9rZW4gb3B0aW1pemF0aW9uLlxuICpcbiAqIExlZ2FjeSB0ZXh0LWZvcm1hdCBtb2RlIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZXNwb25zZSBpcyBub3cgYSBzdHJ1Y3R1cmVkXG4gKiBvYmplY3Qgd2l0aCB7IGl0ZW1zLCBwYWdpbmF0aW9uLCBzb3J0aW5nLCBmaWx0ZXJzIH0gdGhhdCBNQ1BBUUxIYW5kbGVyJ3NcbiAqIGFwcGx5RmllbGRTZWxlY3Rpb24gY2FuIGZpbHRlciB3aXRoIHByZXNldHMgKG1pbmltYWwvc3RhbmRhcmQvZnVsbCkuXG4gKi9cblxuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi8uLi9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBFbGVtZW50Q3J1ZENvbnRleHQgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBRdWVyeU9wdGlvbnMsIFF1ZXJ5UmVzdWx0LCBBZ2dyZWdhdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9xdWVyeS90eXBlcy5qcyc7XG5pbXBvcnQgeyBhZ2dyZWdhdGVFbGVtZW50cywgdmFsaWRhdGVBZ2dyZWdhdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9xdWVyeS9BZ2dyZWdhdGlvblNlcnZpY2UuanMnO1xuaW1wb3J0IHR5cGUgeyBBZ2dyZWdhdGlvblJlc3VsdCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3F1ZXJ5L0FnZ3JlZ2F0aW9uU2VydmljZS5qcyc7XG5pbXBvcnQgeyBJRWxlbWVudCB9IGZyb20gJy4uLy4uL3R5cGVzL2VsZW1lbnRzL0lFbGVtZW50LmpzJztcbmltcG9ydCB7IEVMRU1FTlRfVFlQRV9NQVAsIHRvU2luZ3VsYXJMYWJlbCB9IGZyb20gJy4uLy4uL3V0aWxzL2VsZW1lbnRUeXBlTm9ybWFsaXphdGlvbi5qcyc7XG5cbi8qKiBEZWZhdWx0IHBhZ2Ugc2l6ZSBmb3IgbGlzdF9lbGVtZW50cyB3aGVuIG5vIHBhZ2luYXRpb24gc3BlY2lmaWVkIChJc3N1ZSAjMjk5KSAqL1xuY29uc3QgREVGQVVMVF9MSVNUX1BBR0VfU0laRSA9IDIwO1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBmbGF0L21peGVkIHBhcmFtcyBpbnRvIHByb3BlciBRdWVyeU9wdGlvbnMgc3RydWN0dXJlLlxuICpcbiAqIFN1cHBvcnRzIG11bHRpcGxlIGlucHV0IGZvcm1hdHMgZm9yIGNvbnZlbmllbmNlOlxuICogLSBOZXN0ZWQ6IHsgcGFnaW5hdGlvbjogeyBwYWdlOiAyLCBwYWdlU2l6ZTogMjUgfSwgZmlsdGVyczogey4uLn0sIHNvcnQ6IHsuLi59IH1cbiAqIC0gRmxhdCBwYWdpbmF0aW9uOiB7IHBhZ2U6IDIsIHBhZ2VTaXplOiAyNSB9XG4gKiAtIEZsYXQgbGltaXQvb2Zmc2V0OiB7IGxpbWl0OiAyNSwgb2Zmc2V0OiA1MCB9IChvZmZzZXQ9NTAsIGxpbWl0PTI1IOKGkiBwYWdlIDMpXG4gKiAtIEZsYXQgZmlsdGVyczogeyBuYW1lQ29udGFpbnM6ICd0ZXN0JywgdGFnczogWydhJywgJ2InXSB9XG4gKiAtIEZsYXQgc29ydDogeyBzb3J0Qnk6ICdtb2RpZmllZCcsIHNvcnRPcmRlcjogJ2Rlc2MnIH1cbiAqXG4gKiBJc3N1ZSAjMjA0OiBNQ1AtQVFMIFBhZ2luYXRpb24sIGZpbHRlcmluZywgYW5kIHNvcnRpbmdcbiAqL1xuLyoqXG4gKiBWYWxpZGF0ZSBwYWdpbmF0aW9uIGlucHV0IGJlZm9yZSBub3JtYWxpemF0aW9uLlxuICogUmV0dXJucyBhbiBlcnJvciBzdHJpbmcgaWYgaW52YWxpZCwgb3IgbnVsbCBpZiB2YWxpZC5cbiAqXG4gKiBJc3N1ZSAjMjI3OiBSZWplY3QgaW52YWxpZCBwYWdpbmF0aW9uIHBhcmFtZXRlciBjb21iaW5hdGlvbnNcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVQYWdpbmF0aW9uSW5wdXQob3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gQ2hlY2sgbmVzdGVkIHBhZ2luYXRpb24gb2JqZWN0XG4gIGlmIChvcHRpb25zLnBhZ2luYXRpb24gJiYgdHlwZW9mIG9wdGlvbnMucGFnaW5hdGlvbiA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBwID0gb3B0aW9ucy5wYWdpbmF0aW9uIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmICh0eXBlb2YgcC5wYWdlID09PSAnbnVtYmVyJyAmJiAoIU51bWJlci5pc0Zpbml0ZShwLnBhZ2UpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHAucGFnZSkgfHwgcC5wYWdlIDw9IDApKSB7XG4gICAgICByZXR1cm4gYEludmFsaWQgcGFnaW5hdGlvbjogcGFnZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciAoZ290OiAke3AucGFnZX0pLlxcbkV4YW1wbGU6IHsgcGFnaW5hdGlvbjogeyBwYWdlOiAxLCBwYWdlU2l6ZTogMjUgfSB9YDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwLnBhZ2VTaXplID09PSAnbnVtYmVyJyAmJiAoIU51bWJlci5pc0Zpbml0ZShwLnBhZ2VTaXplKSB8fCAhTnVtYmVyLmlzSW50ZWdlcihwLnBhZ2VTaXplKSB8fCBwLnBhZ2VTaXplIDw9IDApKSB7XG4gICAgICByZXR1cm4gYEludmFsaWQgcGFnaW5hdGlvbjogcGFnZVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgKGdvdDogJHtwLnBhZ2VTaXplfSkuXFxuRXhhbXBsZTogeyBwYWdpbmF0aW9uOiB7IHBhZ2U6IDEsIHBhZ2VTaXplOiAyNSB9IH1gO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENoZWNrIGZsYXQgcGFyYW1zXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5wYWdlID09PSAnbnVtYmVyJyAmJiAoIU51bWJlci5pc0Zpbml0ZShvcHRpb25zLnBhZ2UpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMucGFnZSkgfHwgb3B0aW9ucy5wYWdlIDw9IDApKSB7XG4gICAgcmV0dXJuIGBJbnZhbGlkIHBhZ2luYXRpb246IHBhZ2UgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgKGdvdDogJHtvcHRpb25zLnBhZ2V9KS5cXG5FeGFtcGxlOiB7IHBhZ2U6IDEsIHBhZ2VTaXplOiAyNSB9YDtcbiAgfVxuICBpZiAodHlwZW9mIG9wdGlvbnMucGFnZVNpemUgPT09ICdudW1iZXInICYmICghTnVtYmVyLmlzRmluaXRlKG9wdGlvbnMucGFnZVNpemUpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMucGFnZVNpemUpIHx8IG9wdGlvbnMucGFnZVNpemUgPD0gMCkpIHtcbiAgICByZXR1cm4gYEludmFsaWQgcGFnaW5hdGlvbjogcGFnZVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgKGdvdDogJHtvcHRpb25zLnBhZ2VTaXplfSkuXFxuRXhhbXBsZTogeyBwYWdlOiAxLCBwYWdlU2l6ZTogMjUgfWA7XG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmxpbWl0ID09PSAnbnVtYmVyJyAmJiAoIU51bWJlci5pc0Zpbml0ZShvcHRpb25zLmxpbWl0KSB8fCAhTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLmxpbWl0KSB8fCBvcHRpb25zLmxpbWl0IDw9IDApKSB7XG4gICAgcmV0dXJuIGBJbnZhbGlkIHBhZ2luYXRpb246IGxpbWl0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIChnb3Q6ICR7b3B0aW9ucy5saW1pdH0pLlxcbkV4YW1wbGU6IHsgbGltaXQ6IDI1LCBvZmZzZXQ6IDAgfWA7XG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRpb25zLm9mZnNldCA9PT0gJ251bWJlcicgJiYgKCFOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5vZmZzZXQpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMub2Zmc2V0KSB8fCBvcHRpb25zLm9mZnNldCA8IDApKSB7XG4gICAgcmV0dXJuIGBJbnZhbGlkIHBhZ2luYXRpb246IG9mZnNldCBtdXN0IGJlIGEgd2hvbGUgbnVtYmVyLCAwIG9yIGdyZWF0ZXIgKGdvdDogJHtvcHRpb25zLm9mZnNldH0pLlxcbkV4YW1wbGU6IHsgbGltaXQ6IDI1LCBvZmZzZXQ6IDAgfWA7XG4gIH1cblxuICAvLyBSZWplY3QgY29uZmxpY3RpbmcgcGFnZSArIG9mZnNldCAoYW1iaWd1b3VzIGludGVudClcbiAgY29uc3QgaGFzUGFnZSA9IHR5cGVvZiBvcHRpb25zLnBhZ2UgPT09ICdudW1iZXInO1xuICBjb25zdCBoYXNPZmZzZXQgPSB0eXBlb2Ygb3B0aW9ucy5vZmZzZXQgPT09ICdudW1iZXInO1xuICBpZiAoaGFzUGFnZSAmJiBoYXNPZmZzZXQpIHtcbiAgICByZXR1cm4gXCJDb25mbGljdGluZyBwYWdpbmF0aW9uOiBjYW5ub3QgdXNlIGJvdGggJ3BhZ2UnIGFuZCAnb2Zmc2V0Jy5cXG5Vc2UgZWl0aGVyIHBhZ2UtYmFzZWQgKHsgcGFnZTogMiwgcGFnZVNpemU6IDI1IH0pIG9yIG9mZnNldC1iYXNlZCAoeyBvZmZzZXQ6IDUwLCBsaW1pdDogMjUgfSkuXCI7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUXVlcnlPcHRpb25zKG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUXVlcnlPcHRpb25zIHwgeyBlcnJvcjogc3RyaW5nIH0ge1xuICAvLyBWYWxpZGF0ZSBwYWdpbmF0aW9uIGlucHV0IGZpcnN0IChJc3N1ZSAjMjI3KVxuICBjb25zdCB2YWxpZGF0aW9uRXJyb3IgPSB2YWxpZGF0ZVBhZ2luYXRpb25JbnB1dChvcHRpb25zKTtcbiAgaWYgKHZhbGlkYXRpb25FcnJvcikge1xuICAgIHJldHVybiB7IGVycm9yOiB2YWxpZGF0aW9uRXJyb3IgfTtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWQ6IFF1ZXJ5T3B0aW9ucyA9IHt9O1xuXG4gIC8vIE5vcm1hbGl6ZSBwYWdpbmF0aW9uXG4gIC8vIFByaW9yaXR5OiBuZXN0ZWQgcGFnaW5hdGlvbiA+IGxpbWl0L29mZnNldCA+IGZsYXQgcGFnZS9wYWdlU2l6ZVxuICBpZiAob3B0aW9ucy5wYWdpbmF0aW9uICYmIHR5cGVvZiBvcHRpb25zLnBhZ2luYXRpb24gPT09ICdvYmplY3QnKSB7XG4gICAgbm9ybWFsaXplZC5wYWdpbmF0aW9uID0gb3B0aW9ucy5wYWdpbmF0aW9uIGFzIFF1ZXJ5T3B0aW9uc1sncGFnaW5hdGlvbiddO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHBhZ2luYXRpb246IFF1ZXJ5T3B0aW9uc1sncGFnaW5hdGlvbiddID0ge307XG5cbiAgICAvLyBTdXBwb3J0IGxpbWl0L29mZnNldCBzdHlsZSAoY29udmVydCB0byBwYWdlL3BhZ2VTaXplKVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5saW1pdCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5saW1pdCA+IDApIHtcbiAgICAgIHBhZ2luYXRpb24ucGFnZVNpemUgPSBvcHRpb25zLmxpbWl0O1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLm9mZnNldCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5vZmZzZXQgPj0gMCkge1xuICAgICAgICAvLyBDb252ZXJ0IG9mZnNldCB0byBwYWdlIG51bWJlciAoMS1pbmRleGVkKVxuICAgICAgICBwYWdpbmF0aW9uLnBhZ2UgPSBNYXRoLmZsb29yKG9wdGlvbnMub2Zmc2V0IC8gb3B0aW9ucy5saW1pdCkgKyAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN1cHBvcnQgZmxhdCBwYWdlL3BhZ2VTaXplIChvdmVycmlkZXMgbGltaXQvb2Zmc2V0IGlmIGJvdGggcHJlc2VudClcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucGFnZSA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5wYWdlID4gMCkge1xuICAgICAgcGFnaW5hdGlvbi5wYWdlID0gb3B0aW9ucy5wYWdlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucGFnZVNpemUgPT09ICdudW1iZXInICYmIG9wdGlvbnMucGFnZVNpemUgPiAwKSB7XG4gICAgICBwYWdpbmF0aW9uLnBhZ2VTaXplID0gb3B0aW9ucy5wYWdlU2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMocGFnaW5hdGlvbikubGVuZ3RoID4gMCkge1xuICAgICAgbm9ybWFsaXplZC5wYWdpbmF0aW9uID0gcGFnaW5hdGlvbjtcbiAgICB9XG4gIH1cblxuICAvLyBOb3JtYWxpemUgZmlsdGVyc1xuICAvLyBQcmlvcml0eTogbmVzdGVkIGZpbHRlcnMvZmlsdGVyID4gZmxhdCBmaWx0ZXIgZmllbGRzXG4gIGlmIChvcHRpb25zLmZpbHRlcnMgJiYgdHlwZW9mIG9wdGlvbnMuZmlsdGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICBub3JtYWxpemVkLmZpbHRlcnMgPSBvcHRpb25zLmZpbHRlcnMgYXMgUXVlcnlPcHRpb25zWydmaWx0ZXJzJ107XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5maWx0ZXIgJiYgdHlwZW9mIG9wdGlvbnMuZmlsdGVyID09PSAnb2JqZWN0Jykge1xuICAgIC8vIFN1cHBvcnQgc2luZ3VsYXIgJ2ZpbHRlcicgYXMgYWxpYXMgZm9yICdmaWx0ZXJzJ1xuICAgIG5vcm1hbGl6ZWQuZmlsdGVycyA9IG9wdGlvbnMuZmlsdGVyIGFzIFF1ZXJ5T3B0aW9uc1snZmlsdGVycyddO1xuICB9IGVsc2Uge1xuICAgIC8vIFN1cHBvcnQgZmxhdCBmaWx0ZXIgZmllbGRzXG4gICAgY29uc3QgZmlsdGVyczogTm9uTnVsbGFibGU8UXVlcnlPcHRpb25zWydmaWx0ZXJzJ10+ID0ge307XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMubmFtZUNvbnRhaW5zID09PSAnc3RyaW5nJykge1xuICAgICAgZmlsdGVycy5uYW1lQ29udGFpbnMgPSBvcHRpb25zLm5hbWVDb250YWlucztcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy50YWdzKSAmJiBvcHRpb25zLnRhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgZmlsdGVycy50YWdzID0gb3B0aW9ucy50YWdzIGFzIHN0cmluZ1tdO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLnRhZ3NBbnkpICYmIG9wdGlvbnMudGFnc0FueS5sZW5ndGggPiAwKSB7XG4gICAgICBmaWx0ZXJzLnRhZ3NBbnkgPSBvcHRpb25zLnRhZ3NBbnkgYXMgc3RyaW5nW107XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRob3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmaWx0ZXJzLmF1dGhvciA9IG9wdGlvbnMuYXV0aG9yO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuY3JlYXRlZEFmdGVyID09PSAnc3RyaW5nJykge1xuICAgICAgZmlsdGVycy5jcmVhdGVkQWZ0ZXIgPSBvcHRpb25zLmNyZWF0ZWRBZnRlcjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNyZWF0ZWRCZWZvcmUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmaWx0ZXJzLmNyZWF0ZWRCZWZvcmUgPSBvcHRpb25zLmNyZWF0ZWRCZWZvcmU7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnN0YXR1cyA9PT0gJ2FjdGl2ZScgfHwgb3B0aW9ucy5zdGF0dXMgPT09ICdpbmFjdGl2ZScgfHwgb3B0aW9ucy5zdGF0dXMgPT09ICdhbGwnKSB7XG4gICAgICBmaWx0ZXJzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzY3JpcHRpb25Db250YWlucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGZpbHRlcnMuZGVzY3JpcHRpb25Db250YWlucyA9IG9wdGlvbnMuZGVzY3JpcHRpb25Db250YWlucztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNhdGVnb3J5ID09PSAnc3RyaW5nJykge1xuICAgICAgZmlsdGVycy5jYXRlZ29yeSA9IG9wdGlvbnMuY2F0ZWdvcnk7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKGZpbHRlcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIG5vcm1hbGl6ZWQuZmlsdGVycyA9IGZpbHRlcnM7XG4gICAgfVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHNvcnRcbiAgLy8gUHJpb3JpdHk6IG5lc3RlZCBzb3J0ID4gZmxhdCBzb3J0Qnkvc29ydE9yZGVyXG4gIGlmIChvcHRpb25zLnNvcnQgJiYgdHlwZW9mIG9wdGlvbnMuc29ydCA9PT0gJ29iamVjdCcpIHtcbiAgICBub3JtYWxpemVkLnNvcnQgPSBvcHRpb25zLnNvcnQgYXMgUXVlcnlPcHRpb25zWydzb3J0J107XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc29ydDogTm9uTnVsbGFibGU8UXVlcnlPcHRpb25zWydzb3J0J10+ID0ge307XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuc29ydEJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgc29ydC5zb3J0QnkgPSBvcHRpb25zLnNvcnRCeSBhcyAnbmFtZScgfCAnY3JlYXRlZCcgfCAnbW9kaWZpZWQnIHwgJ3ZlcnNpb24nIHwgJ3JldGVudGlvbic7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnNvcnRPcmRlciA9PT0gJ2FzYycgfHwgb3B0aW9ucy5zb3J0T3JkZXIgPT09ICdkZXNjJykge1xuICAgICAgc29ydC5zb3J0T3JkZXIgPSBvcHRpb25zLnNvcnRPcmRlcjtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoc29ydCkubGVuZ3RoID4gMCkge1xuICAgICAgbm9ybWFsaXplZC5zb3J0ID0gc29ydDtcbiAgICB9XG4gIH1cblxuICAvLyBOb3JtYWxpemUgYWdncmVnYXRpb24gKElzc3VlICMzMDkpXG4gIGlmIChvcHRpb25zLmFnZ3JlZ2F0ZSAmJiB0eXBlb2Ygb3B0aW9ucy5hZ2dyZWdhdGUgPT09ICdvYmplY3QnKSB7XG4gICAgbm9ybWFsaXplZC5hZ2dyZWdhdGUgPSBvcHRpb25zLmFnZ3JlZ2F0ZSBhcyBBZ2dyZWdhdGlvbk9wdGlvbnM7XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLyoqXG4gKiBDbGVhbiB1cCB1bmRlZmluZWQgdmFsdWVzIGZyb20gb3B0aW9ucyB0byBwcmV2ZW50IHZhbGlkYXRpb24gaXNzdWVzXG4gKi9cbmZ1bmN0aW9uIGNsZWFuUXVlcnlPcHRpb25zKG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyk6IFF1ZXJ5T3B0aW9ucyB7XG4gIGNvbnN0IGNsZWFuOiBRdWVyeU9wdGlvbnMgPSB7fTtcblxuICBpZiAob3B0aW9ucy5wYWdpbmF0aW9uKSB7XG4gICAgY29uc3QgcGFnaW5hdGlvbjogUGFydGlhbDxRdWVyeU9wdGlvbnNbJ3BhZ2luYXRpb24nXT4gPSB7fTtcbiAgICBpZiAob3B0aW9ucy5wYWdpbmF0aW9uLnBhZ2UgIT09IHVuZGVmaW5lZCkgcGFnaW5hdGlvbi5wYWdlID0gb3B0aW9ucy5wYWdpbmF0aW9uLnBhZ2U7XG4gICAgaWYgKG9wdGlvbnMucGFnaW5hdGlvbi5wYWdlU2l6ZSAhPT0gdW5kZWZpbmVkKSBwYWdpbmF0aW9uLnBhZ2VTaXplID0gb3B0aW9ucy5wYWdpbmF0aW9uLnBhZ2VTaXplO1xuICAgIGlmIChPYmplY3Qua2V5cyhwYWdpbmF0aW9uKS5sZW5ndGggPiAwKSBjbGVhbi5wYWdpbmF0aW9uID0gcGFnaW5hdGlvbjtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnNvcnQpIHtcbiAgICBjb25zdCBzb3J0OiBQYXJ0aWFsPE5vbk51bGxhYmxlPFF1ZXJ5T3B0aW9uc1snc29ydCddPj4gPSB7fTtcbiAgICBpZiAob3B0aW9ucy5zb3J0LnNvcnRCeSAhPT0gdW5kZWZpbmVkKSBzb3J0LnNvcnRCeSA9IG9wdGlvbnMuc29ydC5zb3J0Qnk7XG4gICAgaWYgKG9wdGlvbnMuc29ydC5zb3J0T3JkZXIgIT09IHVuZGVmaW5lZCkgc29ydC5zb3J0T3JkZXIgPSBvcHRpb25zLnNvcnQuc29ydE9yZGVyO1xuICAgIGlmIChPYmplY3Qua2V5cyhzb3J0KS5sZW5ndGggPiAwKSBjbGVhbi5zb3J0ID0gc29ydDtcbiAgfVxuXG4gIGlmIChvcHRpb25zLmZpbHRlcnMpIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBQYXJ0aWFsPE5vbk51bGxhYmxlPFF1ZXJ5T3B0aW9uc1snZmlsdGVycyddPj4gPSB7fTtcbiAgICBpZiAob3B0aW9ucy5maWx0ZXJzLm5hbWVDb250YWlucyAhPT0gdW5kZWZpbmVkKSBmaWx0ZXJzLm5hbWVDb250YWlucyA9IG9wdGlvbnMuZmlsdGVycy5uYW1lQ29udGFpbnM7XG4gICAgaWYgKG9wdGlvbnMuZmlsdGVycy50YWdzICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5maWx0ZXJzLnRhZ3MubGVuZ3RoID4gMCkgZmlsdGVycy50YWdzID0gb3B0aW9ucy5maWx0ZXJzLnRhZ3M7XG4gICAgaWYgKG9wdGlvbnMuZmlsdGVycy50YWdzQW55ICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5maWx0ZXJzLnRhZ3NBbnkubGVuZ3RoID4gMCkgZmlsdGVycy50YWdzQW55ID0gb3B0aW9ucy5maWx0ZXJzLnRhZ3NBbnk7XG4gICAgaWYgKG9wdGlvbnMuZmlsdGVycy5hdXRob3IgIT09IHVuZGVmaW5lZCkgZmlsdGVycy5hdXRob3IgPSBvcHRpb25zLmZpbHRlcnMuYXV0aG9yO1xuICAgIGlmIChvcHRpb25zLmZpbHRlcnMuY3JlYXRlZEFmdGVyICE9PSB1bmRlZmluZWQpIGZpbHRlcnMuY3JlYXRlZEFmdGVyID0gb3B0aW9ucy5maWx0ZXJzLmNyZWF0ZWRBZnRlcjtcbiAgICBpZiAob3B0aW9ucy5maWx0ZXJzLmNyZWF0ZWRCZWZvcmUgIT09IHVuZGVmaW5lZCkgZmlsdGVycy5jcmVhdGVkQmVmb3JlID0gb3B0aW9ucy5maWx0ZXJzLmNyZWF0ZWRCZWZvcmU7XG4gICAgaWYgKG9wdGlvbnMuZmlsdGVycy5zdGF0dXMgIT09IHVuZGVmaW5lZCkgZmlsdGVycy5zdGF0dXMgPSBvcHRpb25zLmZpbHRlcnMuc3RhdHVzO1xuICAgIGlmIChvcHRpb25zLmZpbHRlcnMuZGVzY3JpcHRpb25Db250YWlucyAhPT0gdW5kZWZpbmVkKSBmaWx0ZXJzLmRlc2NyaXB0aW9uQ29udGFpbnMgPSBvcHRpb25zLmZpbHRlcnMuZGVzY3JpcHRpb25Db250YWlucztcbiAgICBpZiAob3B0aW9ucy5maWx0ZXJzLmNhdGVnb3J5ICE9PSB1bmRlZmluZWQpIGZpbHRlcnMuY2F0ZWdvcnkgPSBvcHRpb25zLmZpbHRlcnMuY2F0ZWdvcnk7XG4gICAgaWYgKE9iamVjdC5rZXlzKGZpbHRlcnMpLmxlbmd0aCA+IDApIGNsZWFuLmZpbHRlcnMgPSBmaWx0ZXJzO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuYWdncmVnYXRlKSB7XG4gICAgY2xlYW4uYWdncmVnYXRlID0gb3B0aW9ucy5hZ2dyZWdhdGU7XG4gIH1cblxuICByZXR1cm4gY2xlYW47XG59XG5cbi8qKlxuICogU3RydWN0dXJlZCBpdGVtIHNoYXBlIHJldHVybmVkIGJ5IGxpc3RfZWxlbWVudHMuXG4gKiBEZXNpZ25lZCBmb3IgdG9rZW4gZWZmaWNpZW5jeSDigJQgaW5jbHVkZXMgb25seSB0aGUgZmllbGRzIExMTXMgdHlwaWNhbGx5IG5lZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdEVsZW1lbnRJdGVtIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIHRhZ3M/OiBzdHJpbmdbXTtcbiAgY3JlYXRlZD86IHN0cmluZztcbiAgYXV0aG9yPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN0cnVjdHVyZWQgcmVzcG9uc2Ugc2hhcGUgZm9yIGxpc3RfZWxlbWVudHMuXG4gKiBSZXBsYWNlcyB0aGUgb2xkIE1DUCB0ZXh0IGZvcm1hdCB3aXRoIHN0cnVjdHVyZWQgZGF0YSB0aGF0IEZpZWxkRmlsdGVyIGNhbiBwcm9jZXNzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RFbGVtZW50c1Jlc3VsdCB7XG4gIGl0ZW1zOiBMaXN0RWxlbWVudEl0ZW1bXTtcbiAgcGFnaW5hdGlvbjoge1xuICAgIHBhZ2U6IG51bWJlcjtcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIHRvdGFsSXRlbXM6IG51bWJlcjtcbiAgICB0b3RhbFBhZ2VzOiBudW1iZXI7XG4gICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgaGFzUHJldlBhZ2U6IGJvb2xlYW47XG4gIH07XG4gIHNvcnRpbmc6IHtcbiAgICBzb3J0Qnk6IHN0cmluZztcbiAgICBzb3J0T3JkZXI6IHN0cmluZztcbiAgfTtcbiAgZmlsdGVycz86IHtcbiAgICBhcHBsaWVkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIHtcbiAgICAgIGNvdW50OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgZWxlbWVudF90eXBlOiBzdHJpbmc7XG4gIC8qKiBJc3N1ZSAjNzA4OiBDb3VudCBvZiBlbGVtZW50cyB0aGF0IGV4aXN0IG9uIGRpc2sgYnV0IGZhaWxlZCB2YWxpZGF0aW9uLiAqL1xuICB3YXJuaW5ncz86IHtcbiAgICBpbnZhbGlkX2VsZW1lbnRzX2NvdW50OiBudW1iZXI7XG4gIH07XG59XG5cbi8qKlxuICogU3RydWN0dXJlZCBlcnJvciByZXNwb25zZSDigJQgY29uc2lzdGVudCB3aXRoIHN0cnVjdHVyZWQgc3VjY2VzcyByZXNwb25zZXMuXG4gKiBSZXBsYWNlcyB0aGUgb2xkIE1DUCB0ZXh0IGZvcm1hdCBmb3IgdmFsaWRhdGlvbiBlcnJvcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlZEVycm9yIHtcbiAgZXJyb3I6IHN0cmluZztcbiAgY29kZTogJ1ZBTElEQVRJT05fRVJST1InIHwgJ1VOS05PV05fVFlQRScgfCAnSU5URVJOQUxfRVJST1InO1xufVxuXG5leHBvcnQgdHlwZSB7IEFnZ3JlZ2F0aW9uUmVzdWx0IH07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0RWxlbWVudHMoXG4gIGNvbnRleHQ6IEVsZW1lbnRDcnVkQ29udGV4dCxcbiAgdHlwZTogc3RyaW5nLFxuICBvcHRpb25zPzogUXVlcnlPcHRpb25zIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFByb21pc2U8TGlzdEVsZW1lbnRzUmVzdWx0IHwgQWdncmVnYXRpb25SZXN1bHQgfCBTdHJ1Y3R1cmVkRXJyb3I+IHtcbiAgYXdhaXQgY29udGV4dC5lbnN1cmVJbml0aWFsaXplZCgpO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gRUxFTUVOVF9UWVBFX01BUFt0eXBlLnRyaW0oKS50b0xvd2VyQ2FzZSgpXTtcblxuICB0cnkge1xuICAgIC8vIE5vcm1hbGl6ZSBvcHRpb25zIChzdXBwb3J0cyBmbGF0IHBhcmFtcywgbmVzdGVkIHBhcmFtcywgb3Igbm8gcGFyYW1zKVxuICAgIGNvbnN0IHJhd09wdGlvbnMgPSAob3B0aW9ucyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfHwge307XG4gICAgY29uc3Qgbm9ybWFsaXplZE9wdGlvbnMgPSBub3JtYWxpemVRdWVyeU9wdGlvbnMocmF3T3B0aW9ucyk7XG5cbiAgICAvLyBDaGVjayBmb3IgdmFsaWRhdGlvbiBlcnJvcnMgKElzc3VlICMyMjcpXG4gICAgaWYgKCdlcnJvcicgaW4gbm9ybWFsaXplZE9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVycm9yOiBub3JtYWxpemVkT3B0aW9ucy5lcnJvcixcbiAgICAgICAgY29kZTogJ1ZBTElEQVRJT05fRVJST1InIGFzIGNvbnN0LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIW5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgICByZXR1cm4gdW5rbm93blR5cGUodHlwZSk7XG4gICAgfVxuXG4gICAgLy8gR2V0IHJhdyBlbGVtZW50cyBmcm9tIHRoZSBhcHByb3ByaWF0ZSBtYW5hZ2VyXG4gICAgY29uc3QgZWxlbWVudHMgPSBhd2FpdCBnZXRFbGVtZW50c0ZvclR5cGUoY29udGV4dCwgbm9ybWFsaXplZFR5cGUpO1xuXG4gICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGVtcHR5RWxlbWVudHNSZXNwb25zZShub3JtYWxpemVkVHlwZSk7XG4gICAgfVxuXG4gICAgLy8gQ2xlYW4gdGhlIG9wdGlvbnMgdG8gcmVtb3ZlIHVuZGVmaW5lZCB2YWx1ZXNcbiAgICBjb25zdCBjbGVhbk9wdGlvbnMgPSBjbGVhblF1ZXJ5T3B0aW9ucyhub3JtYWxpemVkT3B0aW9ucyk7XG5cbiAgICAvLyBIYW5kbGUgYWdncmVnYXRpb24gcmVxdWVzdHMgKElzc3VlICMzMDkpXG4gICAgaWYgKGNsZWFuT3B0aW9ucy5hZ2dyZWdhdGUgJiYgKGNsZWFuT3B0aW9ucy5hZ2dyZWdhdGUuY291bnQgfHwgY2xlYW5PcHRpb25zLmFnZ3JlZ2F0ZS5ncm91cF9ieSkpIHtcbiAgICAgIHJldHVybiBoYW5kbGVBZ2dyZWdhdGlvbihjb250ZXh0LCBlbGVtZW50cyBhcyBJRWxlbWVudFtdLCBub3JtYWxpemVkVHlwZSwgY2xlYW5PcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSBxdWVyeSBzZXJ2aWNlIChmaWx0ZXIg4oaSIHNvcnQg4oaSIHBhZ2luYXRlKSB3aXRoIGRlZmF1bHQgcGFnaW5hdGlvblxuICAgIGlmICghY2xlYW5PcHRpb25zLnBhZ2luYXRpb24pIHtcbiAgICAgIGNsZWFuT3B0aW9ucy5wYWdpbmF0aW9uID0geyBwYWdlOiAxLCBwYWdlU2l6ZTogREVGQVVMVF9MSVNUX1BBR0VfU0laRSB9O1xuICAgIH0gZWxzZSBpZiAoIWNsZWFuT3B0aW9ucy5wYWdpbmF0aW9uLnBhZ2VTaXplKSB7XG4gICAgICBjbGVhbk9wdGlvbnMucGFnaW5hdGlvbi5wYWdlU2l6ZSA9IERFRkFVTFRfTElTVF9QQUdFX1NJWkU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5lbGVtZW50UXVlcnlTZXJ2aWNlLnF1ZXJ5KGVsZW1lbnRzIGFzIElFbGVtZW50W10sIGNsZWFuT3B0aW9ucyk7XG5cbiAgICAvLyBJc3N1ZSAjNzA4OiBJbmNsdWRlIGNvdW50IG9mIGludmFsaWQgZWxlbWVudHMgaW4gbGlzdCByZXNwb25zZVxuICAgIGNvbnN0IGludmFsaWRDb3VudCA9IGdldEludmFsaWRFbGVtZW50Q291bnQoY29udGV4dCwgbm9ybWFsaXplZFR5cGUpO1xuXG4gICAgLy8gUmV0dXJuIHN0cnVjdHVyZWQgZGF0YSAobm90IE1DUCB0ZXh0IGZvcm1hdCkgc28gRmllbGRGaWx0ZXIgY2FuIHByb2Nlc3MgaXRcbiAgICByZXR1cm4gZm9ybWF0U3RydWN0dXJlZFJlc3VsdChyZXN1bHQsIG5vcm1hbGl6ZWRUeXBlLCBpbnZhbGlkQ291bnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcignRWxlbWVudENSVURIYW5kbGVyLmxpc3RFbGVtZW50cycsIHsgZXJyb3IsIHR5cGUgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiBgRmFpbGVkIHRvIGxpc3QgJHt0eXBlfTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gLFxuICAgICAgY29kZTogJ0lOVEVSTkFMX0VSUk9SJyBhcyBjb25zdCxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogR2V0IGVsZW1lbnRzIGZyb20gdGhlIGFwcHJvcHJpYXRlIG1hbmFnZXIgYmFzZWQgb24gdHlwZVxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRFbGVtZW50c0ZvclR5cGUoXG4gIGNvbnRleHQ6IEVsZW1lbnRDcnVkQ29udGV4dCxcbiAgdHlwZTogRWxlbWVudFR5cGVcbik6IFByb21pc2U8YW55W10+IHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOlxuICAgICAgcmV0dXJuIGNvbnRleHQucGVyc29uYU1hbmFnZXIubGlzdCgpO1xuICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6XG4gICAgICByZXR1cm4gY29udGV4dC5za2lsbE1hbmFnZXIubGlzdCgpO1xuICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6XG4gICAgICByZXR1cm4gY29udGV4dC50ZW1wbGF0ZU1hbmFnZXIubGlzdCgpO1xuICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6XG4gICAgICByZXR1cm4gY29udGV4dC5hZ2VudE1hbmFnZXIubGlzdCgpO1xuICAgIGNhc2UgRWxlbWVudFR5cGUuTUVNT1JZOlxuICAgICAgcmV0dXJuIGNvbnRleHQubWVtb3J5TWFuYWdlci5saXN0KCk7XG4gICAgY2FzZSBFbGVtZW50VHlwZS5FTlNFTUJMRTpcbiAgICAgIHJldHVybiBjb250ZXh0LmVuc2VtYmxlTWFuYWdlci5saXN0KCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG4vKipcbiAqIElzc3VlICM3MDg6IEdldCB0aGUgY291bnQgb2YgaW52YWxpZCBlbGVtZW50cyBmb3IgYSBnaXZlbiB0eXBlLlxuICovXG5mdW5jdGlvbiBnZXRJbnZhbGlkRWxlbWVudENvdW50KFxuICBjb250ZXh0OiBFbGVtZW50Q3J1ZENvbnRleHQsXG4gIHR5cGU6IEVsZW1lbnRUeXBlXG4pOiBudW1iZXIge1xuICBsZXQgbWFuYWdlcjogeyBnZXRJbnZhbGlkRWxlbWVudHM/OiAoKSA9PiB1bmtub3duW10gfSB8IHVuZGVmaW5lZDtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOiBtYW5hZ2VyID0gY29udGV4dC5wZXJzb25hTWFuYWdlcjsgYnJlYWs7XG4gICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDogbWFuYWdlciA9IGNvbnRleHQuc2tpbGxNYW5hZ2VyOyBicmVhaztcbiAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOiBtYW5hZ2VyID0gY29udGV4dC50ZW1wbGF0ZU1hbmFnZXI7IGJyZWFrO1xuICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6IG1hbmFnZXIgPSBjb250ZXh0LmFnZW50TWFuYWdlcjsgYnJlYWs7XG4gICAgY2FzZSBFbGVtZW50VHlwZS5NRU1PUlk6IG1hbmFnZXIgPSBjb250ZXh0Lm1lbW9yeU1hbmFnZXI7IGJyZWFrO1xuICAgIGNhc2UgRWxlbWVudFR5cGUuRU5TRU1CTEU6IG1hbmFnZXIgPSBjb250ZXh0LmVuc2VtYmxlTWFuYWdlcjsgYnJlYWs7XG4gIH1cbiAgaWYgKG1hbmFnZXIgJiYgdHlwZW9mIG1hbmFnZXIuZ2V0SW52YWxpZEVsZW1lbnRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1hbmFnZXIuZ2V0SW52YWxpZEVsZW1lbnRzKCkubGVuZ3RoO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vKipcbiAqIENvbnZlcnQgUXVlcnlSZXN1bHQgaW50byBhIHN0cnVjdHVyZWQgcmVzcG9uc2Ugd2l0aCBjb25jaXNlIHBlci1pdGVtIGRhdGEuXG4gKiBUaGlzIHJlcGxhY2VzIHRoZSBvbGQgdGV4dC1mb3JtYXQgcmVzcG9uc2UuIFRoZSBzdHJ1Y3R1cmVkIHNoYXBlIGFsbG93c1xuICogTUNQQVFMSGFuZGxlci5hcHBseUZpZWxkU2VsZWN0aW9uKCkgdG8gZnVydGhlciByZWR1Y2UgdG9rZW5zIHZpYSBwcmVzZXRzLlxuICovXG5mdW5jdGlvbiBmb3JtYXRTdHJ1Y3R1cmVkUmVzdWx0KFxuICByZXN1bHQ6IFF1ZXJ5UmVzdWx0PElFbGVtZW50PixcbiAgdHlwZTogRWxlbWVudFR5cGUsXG4gIGludmFsaWRFbGVtZW50Q291bnQgPSAwXG4pOiBMaXN0RWxlbWVudHNSZXN1bHQge1xuICBjb25zdCB7IGl0ZW1zLCBwYWdpbmF0aW9uLCBzb3J0aW5nLCBmaWx0ZXJzIH0gPSByZXN1bHQ7XG5cbiAgY29uc3QgcmVzcG9uc2U6IExpc3RFbGVtZW50c1Jlc3VsdCA9IHtcbiAgICBpdGVtczogaXRlbXMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgbmFtZTogaXRlbS5tZXRhZGF0YT8ubmFtZSB8fCAnVW5rbm93bicsXG4gICAgICBkZXNjcmlwdGlvbjogaXRlbS5tZXRhZGF0YT8uZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICB0eXBlLFxuICAgICAgdmVyc2lvbjogaXRlbS5tZXRhZGF0YT8udmVyc2lvbiB8fCBpdGVtLnZlcnNpb24sXG4gICAgICB0YWdzOiBpdGVtLm1ldGFkYXRhPy50YWdzLFxuICAgICAgY3JlYXRlZDogaXRlbS5tZXRhZGF0YT8uY3JlYXRlZCB8fCAnJyxcbiAgICAgIGF1dGhvcjogaXRlbS5tZXRhZGF0YT8uYXV0aG9yIHx8ICcnLFxuICAgIH0pKSxcbiAgICBwYWdpbmF0aW9uOiB7XG4gICAgICBwYWdlOiBwYWdpbmF0aW9uLnBhZ2UsXG4gICAgICBwYWdlU2l6ZTogcGFnaW5hdGlvbi5wYWdlU2l6ZSxcbiAgICAgIHRvdGFsSXRlbXM6IHBhZ2luYXRpb24udG90YWxJdGVtcyxcbiAgICAgIHRvdGFsUGFnZXM6IHBhZ2luYXRpb24udG90YWxQYWdlcyxcbiAgICAgIGhhc05leHRQYWdlOiBwYWdpbmF0aW9uLmhhc05leHRQYWdlLFxuICAgICAgaGFzUHJldlBhZ2U6IHBhZ2luYXRpb24uaGFzUHJldlBhZ2UsXG4gICAgfSxcbiAgICBzb3J0aW5nOiB7XG4gICAgICBzb3J0Qnk6IHNvcnRpbmcuc29ydEJ5LFxuICAgICAgc29ydE9yZGVyOiBzb3J0aW5nLnNvcnRPcmRlcixcbiAgICB9LFxuICAgIGZpbHRlcnM6IGZpbHRlcnMuYXBwbGllZC5jb3VudCA+IDAgPyB7IGFwcGxpZWQ6IHsgLi4uZmlsdGVycy5hcHBsaWVkIH0gfSA6IHVuZGVmaW5lZCxcbiAgICBlbGVtZW50X3R5cGU6IHRvU2luZ3VsYXJMYWJlbCh0eXBlKSxcbiAgfTtcblxuICAvLyBJc3N1ZSAjNzA4OiBJbmNsdWRlIHdhcm5pbmcgd2hlbiBlbGVtZW50cyBmYWlsZWQgdG8gbG9hZFxuICBpZiAoaW52YWxpZEVsZW1lbnRDb3VudCA+IDApIHtcbiAgICByZXNwb25zZS53YXJuaW5ncyA9IHsgaW52YWxpZF9lbGVtZW50c19jb3VudDogaW52YWxpZEVsZW1lbnRDb3VudCB9O1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG4vKipcbiAqIEhhbmRsZSBhZ2dyZWdhdGlvbiByZXF1ZXN0cyAoSXNzdWUgIzMwOSkuXG4gKiBEZWxlZ2F0ZXMgdG8gc2hhcmVkIEFnZ3JlZ2F0aW9uU2VydmljZSBmb3IgY291bnQgYW5kIGdyb3VwX2J5LlxuICovXG5mdW5jdGlvbiBoYW5kbGVBZ2dyZWdhdGlvbihcbiAgX2NvbnRleHQ6IEVsZW1lbnRDcnVkQ29udGV4dCxcbiAgZWxlbWVudHM6IElFbGVtZW50W10sXG4gIHR5cGU6IEVsZW1lbnRUeXBlLFxuICBvcHRpb25zOiBRdWVyeU9wdGlvbnNcbik6IEFnZ3JlZ2F0aW9uUmVzdWx0IHwgU3RydWN0dXJlZEVycm9yIHtcbiAgaWYgKCFvcHRpb25zLmFnZ3JlZ2F0ZSkge1xuICAgIHJldHVybiB7IGNvdW50OiBlbGVtZW50cy5sZW5ndGgsIGVsZW1lbnRfdHlwZTogdG9TaW5ndWxhckxhYmVsKHR5cGUpIH07XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBhZ2dyZWdhdGlvbiBvcHRpb25zXG4gIGNvbnN0IHZhbGlkYXRpb25FcnJvciA9IHZhbGlkYXRlQWdncmVnYXRpb25PcHRpb25zKG9wdGlvbnMuYWdncmVnYXRlKTtcbiAgaWYgKHZhbGlkYXRpb25FcnJvcikge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjogdmFsaWRhdGlvbkVycm9yLFxuICAgICAgY29kZTogJ1ZBTElEQVRJT05fRVJST1InIGFzIGNvbnN0LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gYWdncmVnYXRlRWxlbWVudHMoZWxlbWVudHMsIHRvU2luZ3VsYXJMYWJlbCh0eXBlKSwgb3B0aW9ucy5hZ2dyZWdhdGUsIG9wdGlvbnMuZmlsdGVycyk7XG59XG5cbi8qKlxuICogRW1wdHkgcmVzcG9uc2UgZm9yIGVhY2ggZWxlbWVudCB0eXBlIOKAlCByZXR1cm5zIHN0cnVjdHVyZWQgZGF0YSB3aXRoIHplcm8gaXRlbXNcbiAqL1xuZnVuY3Rpb24gZW1wdHlFbGVtZW50c1Jlc3BvbnNlKHR5cGU6IEVsZW1lbnRUeXBlKTogTGlzdEVsZW1lbnRzUmVzdWx0IHtcbiAgcmV0dXJuIHtcbiAgICBpdGVtczogW10sXG4gICAgcGFnaW5hdGlvbjoge1xuICAgICAgcGFnZTogMSxcbiAgICAgIHBhZ2VTaXplOiBERUZBVUxUX0xJU1RfUEFHRV9TSVpFLFxuICAgICAgdG90YWxJdGVtczogMCxcbiAgICAgIHRvdGFsUGFnZXM6IDAsXG4gICAgICBoYXNOZXh0UGFnZTogZmFsc2UsXG4gICAgICBoYXNQcmV2UGFnZTogZmFsc2UsXG4gICAgfSxcbiAgICBzb3J0aW5nOiB7XG4gICAgICBzb3J0Qnk6ICduYW1lJyxcbiAgICAgIHNvcnRPcmRlcjogJ2FzYycsXG4gICAgfSxcbiAgICBlbGVtZW50X3R5cGU6IHRvU2luZ3VsYXJMYWJlbCh0eXBlKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdW5rbm93blR5cGUodHlwZTogc3RyaW5nKTogU3RydWN0dXJlZEVycm9yIHtcbiAgcmV0dXJuIHtcbiAgICBlcnJvcjogYFVua25vd24gZWxlbWVudCB0eXBlICcke3R5cGV9Jy4gQXZhaWxhYmxlIHR5cGVzOiAke09iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmpvaW4oJywgJyl9IChvciBsZWdhY3kgcGx1cmFsIGZvcm1zOiBwZXJzb25hcywgc2tpbGxzLCB0ZW1wbGF0ZXMsIGFnZW50cylgLFxuICAgIGNvZGU6ICdVTktOT1dOX1RZUEUnLFxuICB9O1xufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"Gatekeeper.d.ts","sourceRoot":"","sources":["../../../src/handlers/mcp-aql/Gatekeeper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Gatekeeper.d.ts","sourceRoot":"","sources":["../../../src/handlers/mcp-aql/Gatekeeper.ts"],"names":[],"mappings":"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"}