@dollhousemcp/mcp-server 1.5.2 → 1.6.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 (272) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +494 -111
  3. package/data/agents/code-reviewer.md +8 -1
  4. package/data/agents/research-assistant.md +8 -1
  5. package/data/agents/task-manager.md +8 -1
  6. package/data/ensembles/business-advisor.md +8 -1
  7. package/data/ensembles/creative-studio.md +8 -1
  8. package/data/ensembles/development-team.md +8 -1
  9. package/data/ensembles/security-analysis-team.md +8 -1
  10. package/data/memories/conversation-history.md +8 -1
  11. package/data/memories/learning-progress.md +8 -1
  12. package/data/memories/project-context.md +8 -1
  13. package/data/personas/business-consultant.md +8 -1
  14. package/data/personas/creative-writer.md +8 -1
  15. package/data/personas/debug-detective.md +8 -1
  16. package/data/personas/eli5-explainer.md +8 -1
  17. package/data/personas/security-analyst.md +8 -1
  18. package/data/personas/technical-analyst.md +8 -1
  19. package/data/skills/code-review.md +8 -1
  20. package/data/skills/creative-writing.md +8 -1
  21. package/data/skills/data-analysis.md +8 -1
  22. package/data/skills/penetration-testing.md +8 -1
  23. package/data/skills/research.md +8 -1
  24. package/data/skills/threat-modeling.md +8 -1
  25. package/data/skills/translation.md +8 -1
  26. package/data/templates/code-documentation.md +8 -1
  27. package/data/templates/email-professional.md +8 -1
  28. package/data/templates/meeting-notes.md +8 -1
  29. package/data/templates/penetration-test-report.md +8 -1
  30. package/data/templates/project-brief.md +8 -1
  31. package/data/templates/report-executive.md +8 -1
  32. package/data/templates/security-vulnerability-report.md +8 -1
  33. package/data/templates/threat-assessment-report.md +8 -1
  34. package/dist/auth/GitHubAuthManager.d.ts +6 -1
  35. package/dist/auth/GitHubAuthManager.d.ts.map +1 -1
  36. package/dist/auth/GitHubAuthManager.js +45 -18
  37. package/dist/benchmarks/IndexPerformanceBenchmark.d.ts +98 -0
  38. package/dist/benchmarks/IndexPerformanceBenchmark.d.ts.map +1 -0
  39. package/dist/benchmarks/IndexPerformanceBenchmark.js +531 -0
  40. package/dist/cache/CollectionCache.d.ts.map +1 -1
  41. package/dist/cache/CollectionCache.js +13 -3
  42. package/dist/cache/CollectionIndexCache.d.ts +77 -0
  43. package/dist/cache/CollectionIndexCache.d.ts.map +1 -0
  44. package/dist/cache/CollectionIndexCache.js +349 -0
  45. package/dist/cache/LRUCache.d.ts +93 -0
  46. package/dist/cache/LRUCache.d.ts.map +1 -0
  47. package/dist/cache/LRUCache.js +299 -0
  48. package/dist/cache/index.d.ts +1 -0
  49. package/dist/cache/index.d.ts.map +1 -1
  50. package/dist/cache/index.js +2 -1
  51. package/dist/collection/CollectionBrowser.d.ts +21 -1
  52. package/dist/collection/CollectionBrowser.d.ts.map +1 -1
  53. package/dist/collection/CollectionBrowser.js +130 -10
  54. package/dist/collection/CollectionIndexManager.d.ts +151 -0
  55. package/dist/collection/CollectionIndexManager.d.ts.map +1 -0
  56. package/dist/collection/CollectionIndexManager.js +499 -0
  57. package/dist/collection/CollectionSearch.d.ts +55 -0
  58. package/dist/collection/CollectionSearch.d.ts.map +1 -1
  59. package/dist/collection/CollectionSearch.js +338 -13
  60. package/dist/collection/CollectionSeeder.d.ts.map +1 -1
  61. package/dist/collection/CollectionSeeder.js +38 -1
  62. package/dist/collection/ElementInstaller.d.ts +31 -0
  63. package/dist/collection/ElementInstaller.d.ts.map +1 -1
  64. package/dist/collection/ElementInstaller.js +77 -15
  65. package/dist/collection/PersonaSubmitter.d.ts +1 -1
  66. package/dist/collection/PersonaSubmitter.d.ts.map +1 -1
  67. package/dist/collection/PersonaSubmitter.js +2 -2
  68. package/dist/collection/index.d.ts +1 -0
  69. package/dist/collection/index.d.ts.map +1 -1
  70. package/dist/collection/index.js +2 -1
  71. package/dist/config/ConfigManager.d.ts +78 -0
  72. package/dist/config/ConfigManager.d.ts.map +1 -0
  73. package/dist/config/ConfigManager.js +216 -0
  74. package/dist/config/element-types.d.ts +135 -0
  75. package/dist/config/element-types.d.ts.map +1 -0
  76. package/dist/config/element-types.js +108 -0
  77. package/dist/config/index.d.ts +2 -0
  78. package/dist/config/index.d.ts.map +1 -1
  79. package/dist/config/index.js +3 -1
  80. package/dist/config/portfolio-constants.d.ts +83 -0
  81. package/dist/config/portfolio-constants.d.ts.map +1 -0
  82. package/dist/config/portfolio-constants.js +99 -0
  83. package/dist/elements/BaseElement.d.ts +14 -2
  84. package/dist/elements/BaseElement.d.ts.map +1 -1
  85. package/dist/elements/BaseElement.js +88 -6
  86. package/dist/elements/agents/Agent.d.ts +10 -1
  87. package/dist/elements/agents/Agent.d.ts.map +1 -1
  88. package/dist/elements/agents/Agent.js +66 -19
  89. package/dist/elements/agents/AgentManager.d.ts +2 -0
  90. package/dist/elements/agents/AgentManager.d.ts.map +1 -1
  91. package/dist/elements/agents/AgentManager.js +12 -10
  92. package/dist/elements/skills/Skill.d.ts +10 -1
  93. package/dist/elements/skills/Skill.d.ts.map +1 -1
  94. package/dist/elements/skills/Skill.js +40 -3
  95. package/dist/elements/skills/SkillManager.d.ts +1 -0
  96. package/dist/elements/skills/SkillManager.d.ts.map +1 -1
  97. package/dist/elements/skills/SkillManager.js +10 -4
  98. package/dist/elements/templates/Template.d.ts +10 -1
  99. package/dist/elements/templates/Template.d.ts.map +1 -1
  100. package/dist/elements/templates/Template.js +35 -18
  101. package/dist/elements/templates/TemplateManager.d.ts +1 -1
  102. package/dist/elements/templates/TemplateManager.d.ts.map +1 -1
  103. package/dist/elements/templates/TemplateManager.js +6 -5
  104. package/dist/generated/version.d.ts +2 -2
  105. package/dist/generated/version.js +3 -3
  106. package/dist/index.barrel.d.ts +1 -2
  107. package/dist/index.barrel.d.ts.map +1 -1
  108. package/dist/index.barrel.js +2 -4
  109. package/dist/index.d.ts +143 -25
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/index.js +1883 -310
  112. package/dist/persona/PersonaElement.d.ts +10 -0
  113. package/dist/persona/PersonaElement.d.ts.map +1 -1
  114. package/dist/persona/PersonaElement.js +55 -32
  115. package/dist/persona/PersonaElementManager.d.ts.map +1 -1
  116. package/dist/persona/PersonaElementManager.js +13 -11
  117. package/dist/persona/PersonaLoader.d.ts.map +1 -1
  118. package/dist/persona/PersonaLoader.js +8 -2
  119. package/dist/persona/export-import/PersonaImporter.d.ts.map +1 -1
  120. package/dist/persona/export-import/PersonaImporter.js +24 -5
  121. package/dist/persona/export-import/PersonaSharer.d.ts +21 -0
  122. package/dist/persona/export-import/PersonaSharer.d.ts.map +1 -1
  123. package/dist/persona/export-import/PersonaSharer.js +198 -22
  124. package/dist/portfolio/DefaultElementProvider.d.ts +90 -0
  125. package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
  126. package/dist/portfolio/DefaultElementProvider.js +499 -7
  127. package/dist/portfolio/GitHubPortfolioIndexer.d.ts +129 -0
  128. package/dist/portfolio/GitHubPortfolioIndexer.d.ts.map +1 -0
  129. package/dist/portfolio/GitHubPortfolioIndexer.js +475 -0
  130. package/dist/portfolio/MigrationManager.d.ts.map +1 -1
  131. package/dist/portfolio/MigrationManager.js +136 -3
  132. package/dist/portfolio/PortfolioIndexManager.d.ts +130 -0
  133. package/dist/portfolio/PortfolioIndexManager.d.ts.map +1 -0
  134. package/dist/portfolio/PortfolioIndexManager.js +478 -0
  135. package/dist/portfolio/PortfolioManager.d.ts +5 -0
  136. package/dist/portfolio/PortfolioManager.d.ts.map +1 -1
  137. package/dist/portfolio/PortfolioManager.js +61 -20
  138. package/dist/portfolio/PortfolioRepoManager.d.ts +75 -0
  139. package/dist/portfolio/PortfolioRepoManager.d.ts.map +1 -0
  140. package/dist/portfolio/PortfolioRepoManager.js +337 -0
  141. package/dist/portfolio/UnifiedIndexManager.d.ts +388 -0
  142. package/dist/portfolio/UnifiedIndexManager.d.ts.map +1 -0
  143. package/dist/portfolio/UnifiedIndexManager.js +1434 -0
  144. package/dist/portfolio/index.d.ts +15 -0
  145. package/dist/portfolio/index.d.ts.map +1 -0
  146. package/dist/portfolio/index.js +15 -0
  147. package/dist/portfolio/types.d.ts +7 -0
  148. package/dist/portfolio/types.d.ts.map +1 -1
  149. package/dist/portfolio/types.js +6 -1
  150. package/dist/security/InputValidator.d.ts.map +1 -1
  151. package/dist/security/InputValidator.js +50 -48
  152. package/dist/security/audit/SecurityAuditor.d.ts.map +1 -1
  153. package/dist/security/audit/SecurityAuditor.js +17 -9
  154. package/dist/security/audit/config/suppressions.d.ts.map +1 -1
  155. package/dist/security/audit/config/suppressions.js +19 -3
  156. package/dist/security/contentValidator.d.ts +2 -0
  157. package/dist/security/contentValidator.d.ts.map +1 -1
  158. package/dist/security/contentValidator.js +115 -4
  159. package/dist/security/secureYamlParser.d.ts +1 -0
  160. package/dist/security/secureYamlParser.d.ts.map +1 -1
  161. package/dist/security/secureYamlParser.js +29 -7
  162. package/dist/security/securityMonitor.d.ts +1 -1
  163. package/dist/security/securityMonitor.d.ts.map +1 -1
  164. package/dist/security/securityMonitor.js +1 -1
  165. package/dist/security/tokenManager.d.ts +1 -1
  166. package/dist/security/tokenManager.d.ts.map +1 -1
  167. package/dist/security/tokenManager.js +30 -10
  168. package/dist/server/ServerSetup.d.ts +22 -2
  169. package/dist/server/ServerSetup.d.ts.map +1 -1
  170. package/dist/server/ServerSetup.js +77 -12
  171. package/dist/server/tools/AuthTools.d.ts.map +1 -1
  172. package/dist/server/tools/AuthTools.js +33 -1
  173. package/dist/server/tools/BuildInfoTools.d.ts +25 -0
  174. package/dist/server/tools/BuildInfoTools.d.ts.map +1 -0
  175. package/dist/server/tools/BuildInfoTools.js +36 -0
  176. package/dist/server/tools/CollectionTools.d.ts.map +1 -1
  177. package/dist/server/tools/CollectionTools.js +55 -46
  178. package/dist/server/tools/ConfigTools.d.ts.map +1 -1
  179. package/dist/server/tools/ConfigTools.js +29 -1
  180. package/dist/server/tools/PersonaTools.d.ts +4 -2
  181. package/dist/server/tools/PersonaTools.d.ts.map +1 -1
  182. package/dist/server/tools/PersonaTools.js +5 -152
  183. package/dist/server/tools/PortfolioTools.d.ts +12 -0
  184. package/dist/server/tools/PortfolioTools.d.ts.map +1 -0
  185. package/dist/server/tools/PortfolioTools.js +221 -0
  186. package/dist/server/tools/index.d.ts +3 -1
  187. package/dist/server/tools/index.d.ts.map +1 -1
  188. package/dist/server/tools/index.js +4 -2
  189. package/dist/server/types.d.ts +40 -5
  190. package/dist/server/types.d.ts.map +1 -1
  191. package/dist/server/types.js +1 -1
  192. package/dist/services/BuildInfoService.d.ts +84 -0
  193. package/dist/services/BuildInfoService.d.ts.map +1 -0
  194. package/dist/services/BuildInfoService.js +271 -0
  195. package/dist/tools/portfolio/PortfolioElementAdapter.d.ts +54 -0
  196. package/dist/tools/portfolio/PortfolioElementAdapter.d.ts.map +1 -0
  197. package/dist/tools/portfolio/PortfolioElementAdapter.js +229 -0
  198. package/dist/tools/portfolio/submitToPortfolioTool.d.ts +164 -0
  199. package/dist/tools/portfolio/submitToPortfolioTool.d.ts.map +1 -0
  200. package/dist/tools/portfolio/submitToPortfolioTool.js +1523 -0
  201. package/dist/tools/portfolio/types.d.ts +41 -0
  202. package/dist/tools/portfolio/types.d.ts.map +1 -0
  203. package/dist/tools/portfolio/types.js +15 -0
  204. package/dist/types/collection.d.ts +51 -0
  205. package/dist/types/collection.d.ts.map +1 -1
  206. package/dist/types/collection.js +1 -1
  207. package/dist/utils/EarlyTerminationSearch.d.ts +41 -0
  208. package/dist/utils/EarlyTerminationSearch.d.ts.map +1 -0
  209. package/dist/utils/EarlyTerminationSearch.js +164 -0
  210. package/dist/utils/ErrorHandler.d.ts +86 -0
  211. package/dist/utils/ErrorHandler.d.ts.map +1 -0
  212. package/dist/utils/ErrorHandler.js +201 -0
  213. package/dist/utils/FileDiscoveryUtil.d.ts +53 -0
  214. package/dist/utils/FileDiscoveryUtil.d.ts.map +1 -0
  215. package/dist/utils/FileDiscoveryUtil.js +169 -0
  216. package/dist/utils/GitHubRateLimiter.d.ts +88 -0
  217. package/dist/utils/GitHubRateLimiter.d.ts.map +1 -0
  218. package/dist/utils/GitHubRateLimiter.js +315 -0
  219. package/dist/utils/PerformanceMonitor.d.ts +134 -0
  220. package/dist/utils/PerformanceMonitor.d.ts.map +1 -0
  221. package/dist/utils/PerformanceMonitor.js +347 -0
  222. package/dist/utils/RateLimiter.d.ts.map +1 -0
  223. package/dist/utils/RateLimiter.js +172 -0
  224. package/dist/utils/SecureDownloader.d.ts +241 -0
  225. package/dist/utils/SecureDownloader.d.ts.map +1 -0
  226. package/dist/utils/SecureDownloader.js +759 -0
  227. package/dist/utils/ToolCache.d.ts +82 -0
  228. package/dist/utils/ToolCache.d.ts.map +1 -0
  229. package/dist/utils/ToolCache.js +196 -0
  230. package/dist/utils/errorCodes.d.ts +136 -0
  231. package/dist/utils/errorCodes.d.ts.map +1 -0
  232. package/dist/utils/errorCodes.js +87 -0
  233. package/dist/utils/index.d.ts +3 -0
  234. package/dist/utils/index.d.ts.map +1 -1
  235. package/dist/utils/index.js +4 -1
  236. package/dist/utils/installation.d.ts +1 -1
  237. package/dist/utils/installation.d.ts.map +1 -1
  238. package/dist/utils/installation.js +9 -8
  239. package/dist/utils/searchUtils.d.ts +31 -0
  240. package/dist/utils/searchUtils.d.ts.map +1 -1
  241. package/dist/utils/searchUtils.js +62 -1
  242. package/package.json +17 -7
  243. package/dist/config/updateConfig.d.ts +0 -84
  244. package/dist/config/updateConfig.d.ts.map +0 -1
  245. package/dist/config/updateConfig.js +0 -148
  246. package/dist/server/tools/UpdateTools.d.ts +0 -10
  247. package/dist/server/tools/UpdateTools.d.ts.map +0 -1
  248. package/dist/server/tools/UpdateTools.js +0 -85
  249. package/dist/update/BackupManager.d.ts +0 -63
  250. package/dist/update/BackupManager.d.ts.map +0 -1
  251. package/dist/update/BackupManager.js +0 -370
  252. package/dist/update/DependencyChecker.d.ts +0 -41
  253. package/dist/update/DependencyChecker.d.ts.map +0 -1
  254. package/dist/update/DependencyChecker.js +0 -132
  255. package/dist/update/RateLimiter.d.ts.map +0 -1
  256. package/dist/update/RateLimiter.js +0 -172
  257. package/dist/update/SignatureVerifier.d.ts +0 -71
  258. package/dist/update/SignatureVerifier.d.ts.map +0 -1
  259. package/dist/update/SignatureVerifier.js +0 -214
  260. package/dist/update/UpdateChecker.d.ts +0 -132
  261. package/dist/update/UpdateChecker.d.ts.map +0 -1
  262. package/dist/update/UpdateChecker.js +0 -506
  263. package/dist/update/UpdateManager.d.ts +0 -60
  264. package/dist/update/UpdateManager.d.ts.map +0 -1
  265. package/dist/update/UpdateManager.js +0 -730
  266. package/dist/update/VersionManager.d.ts +0 -31
  267. package/dist/update/VersionManager.d.ts.map +0 -1
  268. package/dist/update/VersionManager.js +0 -181
  269. package/dist/update/index.d.ts +0 -9
  270. package/dist/update/index.d.ts.map +0 -1
  271. package/dist/update/index.js +0 -9
  272. /package/dist/{update → utils}/RateLimiter.d.ts +0 -0
@@ -6,6 +6,7 @@ import { BaseElement } from '../elements/BaseElement.js';
6
6
  import { IElement, IElementMetadata, ElementValidationResult } from '../types/elements/index.js';
7
7
  import { PersonaMetadata } from '../types/persona.js';
8
8
  export interface PersonaElementMetadata extends IElementMetadata {
9
+ unique_id?: string;
9
10
  triggers?: string[];
10
11
  category?: string;
11
12
  age_rating?: 'all' | '13+' | '18+';
@@ -44,10 +45,19 @@ export declare class PersonaElement extends BaseElement implements IElement {
44
45
  * Persona-specific validation
45
46
  */
46
47
  validate(): ElementValidationResult;
48
+ /**
49
+ * Get content for serialization
50
+ */
51
+ protected getContent(): string;
47
52
  /**
48
53
  * Serialize persona to markdown format
54
+ * Refactored to use base class pattern with getContent()
49
55
  */
50
56
  serialize(): string;
57
+ /**
58
+ * Serialize to JSON format for internal use and testing
59
+ */
60
+ serializeToJSON(): string;
51
61
  /**
52
62
  * Deserialize persona from markdown format
53
63
  */
@@ -1 +1 @@
1
- {"version":3,"file":"PersonaElement.d.ts","sourceRoot":"","sources":["../../src/persona/PersonaElement.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAEjG,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKtD,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC9D,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,cAAe,SAAQ,WAAY,YAAW,QAAQ;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACT,QAAQ,EAAE,sBAAsB,CAAC;gBAEpC,QAAQ,EAAE,OAAO,CAAC,sBAAsB,CAAC,EAAE,OAAO,GAAE,MAAW,EAAE,QAAQ,GAAE,MAAW;IAoBlG;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,aAAa,EAAE;QAAE,QAAQ,EAAE,eAAe,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,cAAc;IA0BrI;;OAEG;IACH,QAAQ,IAAI;QAAE,QAAQ,EAAE,eAAe,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IA2B/F;;OAEG;IACa,QAAQ,IAAI,uBAAuB;IAmDnD;;OAEG;IACa,SAAS,IAAI,MAAM;IAqCnC;;OAEG;IACa,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAyC/C;;OAEG;IACmB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAS/C;;OAEG;IACmB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAQlD"}
1
+ {"version":3,"file":"PersonaElement.d.ts","sourceRoot":"","sources":["../../src/persona/PersonaElement.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAEjG,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKtD,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,cAAe,SAAQ,WAAY,YAAW,QAAQ;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACT,QAAQ,EAAE,sBAAsB,CAAC;gBAEpC,QAAQ,EAAE,OAAO,CAAC,sBAAsB,CAAC,EAAE,OAAO,GAAE,MAAW,EAAE,QAAQ,GAAE,MAAW;IAoBlG;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,aAAa,EAAE;QAAE,QAAQ,EAAE,eAAe,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,cAAc;IA0BrI;;OAEG;IACH,QAAQ,IAAI;QAAE,QAAQ,EAAE,eAAe,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IA2B/F;;OAEG;IACa,QAAQ,IAAI,uBAAuB;IAmDnD;;OAEG;cACgB,UAAU,IAAI,MAAM;IAIvC;;;OAGG;IACa,SAAS,IAAI,MAAM;IA8BnC;;OAEG;IACa,eAAe,IAAI,MAAM;IASzC;;OAEG;IACa,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAuD/C;;OAEG;IACmB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAS/C;;OAEG;IACmB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAQlD"}
@@ -127,40 +127,51 @@ export class PersonaElement extends BaseElement {
127
127
  result.valid = (result.errors?.length || 0) === 0;
128
128
  return result;
129
129
  }
130
+ /**
131
+ * Get content for serialization
132
+ */
133
+ getContent() {
134
+ return this.content;
135
+ }
130
136
  /**
131
137
  * Serialize persona to markdown format
138
+ * Refactored to use base class pattern with getContent()
132
139
  */
133
140
  serialize() {
134
- const frontmatter = {
135
- name: this.metadata.name,
136
- description: this.metadata.description,
137
- unique_id: this.id,
138
- author: this.metadata.author,
139
- triggers: this.metadata.triggers,
140
- version: this.metadata.version,
141
- category: this.metadata.category,
142
- age_rating: this.metadata.age_rating,
143
- content_flags: this.metadata.content_flags,
144
- ai_generated: this.metadata.ai_generated,
145
- generation_method: this.metadata.generation_method,
146
- price: this.metadata.price,
147
- revenue_split: this.metadata.revenue_split,
148
- license: this.metadata.license,
149
- created_date: this.metadata.created_date
141
+ // Store original metadata
142
+ const originalMetadata = this.metadata;
143
+ // Add persona-specific fields to metadata temporarily
144
+ // Cast to PersonaElementMetadata to include unique_id
145
+ this.metadata = {
146
+ ...originalMetadata,
147
+ unique_id: this.id, // Include ID as unique_id for legacy compatibility
148
+ triggers: originalMetadata.triggers,
149
+ category: originalMetadata.category,
150
+ age_rating: originalMetadata.age_rating,
151
+ content_flags: originalMetadata.content_flags,
152
+ ai_generated: originalMetadata.ai_generated,
153
+ generation_method: originalMetadata.generation_method,
154
+ price: originalMetadata.price,
155
+ revenue_split: originalMetadata.revenue_split,
156
+ license: originalMetadata.license,
157
+ created_date: originalMetadata.created_date
150
158
  };
151
- // Remove undefined values
152
- const cleanFrontmatter = Object.fromEntries(Object.entries(frontmatter).filter(([_, value]) => value !== undefined));
153
- const yamlFrontmatter = Object.entries(cleanFrontmatter)
154
- .map(([key, value]) => {
155
- if (Array.isArray(value)) {
156
- if (value.length === 0)
157
- return `${key}: []`;
158
- return `${key}:\n${value.map(item => ` - ${item}`).join('\n')}`;
159
- }
160
- return `${key}: ${JSON.stringify(value)}`;
161
- })
162
- .join('\n');
163
- return `---\n${yamlFrontmatter}\n---\n\n${this.content}`;
159
+ // Use base class serialize which now uses js-yaml
160
+ const result = super.serialize();
161
+ // Restore original metadata
162
+ this.metadata = originalMetadata;
163
+ return result;
164
+ }
165
+ /**
166
+ * Serialize to JSON format for internal use and testing
167
+ */
168
+ serializeToJSON() {
169
+ // Include persona-specific fields
170
+ const data = {
171
+ ...JSON.parse(super.serializeToJSON()),
172
+ content: this.content
173
+ };
174
+ return JSON.stringify(data, null, 2);
164
175
  }
165
176
  /**
166
177
  * Deserialize persona from markdown format
@@ -197,8 +208,20 @@ export class PersonaElement extends BaseElement {
197
208
  logger.debug(`Deserialized persona: ${this.metadata.name}`);
198
209
  }
199
210
  catch (error) {
200
- logger.error(`Failed to deserialize persona: ${error}`);
201
- throw new Error(`Deserialization failed: ${error}`);
211
+ // Preserve original error context for better debugging
212
+ const errorMessage = error instanceof Error ? error.message : String(error);
213
+ const errorStack = error instanceof Error ? error.stack : undefined;
214
+ logger.error('Failed to deserialize persona', {
215
+ error: errorMessage,
216
+ stack: errorStack,
217
+ data: data.substring(0, 200) // Log first 200 chars for context
218
+ });
219
+ // Re-throw with original error as cause
220
+ const deserializeError = new Error(`PersonaElement deserialization failed: ${errorMessage}`);
221
+ if (error instanceof Error) {
222
+ deserializeError.cause = error;
223
+ }
224
+ throw deserializeError;
202
225
  }
203
226
  }
204
227
  /**
@@ -220,4 +243,4 @@ export class PersonaElement extends BaseElement {
220
243
  await super.deactivate?.();
221
244
  }
222
245
  }
223
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYUVsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGVyc29uYS9QZXJzb25hRWxlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXBELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFnQmpDLE1BQU0sT0FBTyxjQUFlLFNBQVEsV0FBVztJQUN0QyxPQUFPLENBQVM7SUFDaEIsUUFBUSxDQUFTO0lBR3hCLFlBQVksUUFBeUMsRUFBRSxVQUFrQixFQUFFLEVBQUUsV0FBbUIsRUFBRTtRQUNoRyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUV6QixtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRztZQUNkLEdBQUcsSUFBSSxDQUFDLFFBQVE7WUFDaEIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLElBQUksRUFBRTtZQUNqQyxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVEsSUFBSSxVQUFVO1lBQ3pDLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxJQUFJLEtBQUs7WUFDeEMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxhQUFhLElBQUksRUFBRTtZQUMzQyxZQUFZLEVBQUUsUUFBUSxDQUFDLFlBQVksSUFBSSxLQUFLO1lBQzVDLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxpQkFBaUIsSUFBSSxPQUFPO1lBQ3hELEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxJQUFJLE1BQU07WUFDL0IsT0FB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QVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTlELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN4RCxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDYSxLQUFLLENBQUMsUUFBUTtRQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUV0RSx5REFBeUQ7UUFDekQsbURBQW1EO1FBRW5ELE1BQU0sS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ2EsS0FBSyxDQUFDLFVBQVU7UUFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFeEUsMkRBQTJEO1FBQzNELG1EQUFtRDtRQUVuRCxNQUFNLEtBQUssQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO0lBQzdCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGVyc29uYSBlbGVtZW50IGNsYXNzIGltcGxlbWVudGluZyBJRWxlbWVudCBpbnRlcmZhY2UuXG4gKiBSZXByZXNlbnRzIGEgYmVoYXZpb3JhbCBwcm9maWxlIHRoYXQgZGVmaW5lcyBBSSBwZXJzb25hbGl0eSBhbmQgaW50ZXJhY3Rpb24gc3R5bGUuXG4gKi9cblxuaW1wb3J0IHsgQmFzZUVsZW1lbnQgfSBmcm9tICcuLi9lbGVtZW50cy9CYXNlRWxlbWVudC5qcyc7XG5pbXBvcnQgeyBJRWxlbWVudCwgSUVsZW1lbnRNZXRhZGF0YSwgRWxlbWVudFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICcuLi90eXBlcy9lbGVtZW50cy9pbmRleC5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4uL3BvcnRmb2xpby90eXBlcy5qcyc7XG5pbXBvcnQgeyBQZXJzb25hTWV0YWRhdGEgfSBmcm9tICcuLi90eXBlcy9wZXJzb25hLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgbWF0dGVyIGZyb20gJ2dyYXktbWF0dGVyJztcblxuLy8gRXh0ZW5kIElFbGVtZW50TWV0YWRhdGEgd2l0aCBwZXJzb25hLXNwZWNpZmljIGZpZWxkc1xuZXhwb3J0IGludGVyZmFjZSBQZXJzb25hRWxlbWVudE1ldGFkYXRhIGV4dGVuZHMgSUVsZW1lbnRNZXRhZGF0YSB7XG4gIHRyaWdnZXJzPzogc3RyaW5nW107XG4gIGNhdGVnb3J5Pzogc3RyaW5nO1xuICBhZ2VfcmF0aW5nPzogJ2FsbCcgfCAnMTMrJyB8ICcxOCsnO1xuICBjb250ZW50X2ZsYWdzPzogc3RyaW5nW107XG4gIGFpX2dlbmVyYXRlZD86IGJvb2xlYW47XG4gIGdlbmVyYXRpb25fbWV0aG9kPzogJ2h1bWFuJyB8ICdDaGF0R1BUJyB8ICdDbGF1ZGUnIHwgJ2h5YnJpZCc7XG4gIHByaWNlPzogc3RyaW5nO1xuICByZXZlbnVlX3NwbGl0Pzogc3RyaW5nO1xuICBsaWNlbnNlPzogc3RyaW5nO1xuICBjcmVhdGVkX2RhdGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBQZXJzb25hRWxlbWVudCBleHRlbmRzIEJhc2VFbGVtZW50IGltcGxlbWVudHMgSUVsZW1lbnQge1xuICBwdWJsaWMgY29udGVudDogc3RyaW5nO1xuICBwdWJsaWMgZmlsZW5hbWU6IHN0cmluZztcbiAgcHVibGljIGRlY2xhcmUgbWV0YWRhdGE6IFBlcnNvbmFFbGVtZW50TWV0YWRhdGE7XG5cbiAgY29uc3RydWN0b3IobWV0YWRhdGE6IFBhcnRpYWw8UGVyc29uYUVsZW1lbnRNZXRhZGF0YT4sIGNvbnRlbnQ6IHN0cmluZyA9ICcnLCBmaWxlbmFtZTogc3RyaW5nID0gJycpIHtcbiAgICBzdXBlcihFbGVtZW50VHlwZS5QRVJTT05BLCBtZXRhZGF0YSk7XG4gICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgICB0aGlzLmZpbGVuYW1lID0gZmlsZW5hbWU7XG4gICAgXG4gICAgLy8gRW5zdXJlIHBlcnNvbmEtc3BlY2lmaWMgbWV0YWRhdGFcbiAgICB0aGlzLm1ldGFkYXRhID0ge1xuICAgICAgLi4udGhpcy5tZXRhZGF0YSxcbiAgICAgIHRyaWdnZXJzOiBtZXRhZGF0YS50cmlnZ2VycyB8fCBbXSxcbiAgICAgIGNhdGVnb3J5OiBtZXRhZGF0YS5jYXRlZ29yeSB8fCAncGVyc29uYWwnLFxuICAgICAgYWdlX3JhdGluZzogbWV0YWRhdGEuYWdlX3JhdGluZyB8fCAnYWxsJyxcbiAgICAgIGNvbnRlbnRfZmxhZ3M6IG1ldGFkYXRhLmNvbnRlbnRfZmxhZ3MgfHwgW10sXG4gICAgICBhaV9nZW5lcmF0ZWQ6IG1ldGFkYXRhLmFpX2dlbmVyYXRlZCB8fCBmYWxzZSxcbiAgICAgIGdlbmVyYXRpb25fbWV0aG9kOiBtZXRhZGF0YS5nZW5lcmF0aW9uX21ldGhvZCB8fCAnaHVtYW4nLFxuICAgICAgcHJpY2U6IG1ldGFkYXRhLnByaWNlIHx8ICdmcmVlJyxcbiAgICAgIGxpY2Vuc2U6IG1ldGFkYXRhLmxpY2Vuc2UgfHwgJ0NDLUJZLVNBLTQuMCcsXG4gICAgICBjcmVhdGVkX2RhdGU6IG1ldGFkYXRhLmNyZWF0ZWRfZGF0ZSB8fCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIFBlcnNvbmFFbGVtZW50IGZyb20gbGVnYWN5IFBlcnNvbmEgaW50ZXJmYWNlXG4gICAqL1xuICBzdGF0aWMgZnJvbUxlZ2FjeShsZWdhY3lQZXJzb25hOiB7IG1ldGFkYXRhOiBQZXJzb25hTWV0YWRhdGE7IGNvbnRlbnQ6IHN0cmluZzsgZmlsZW5hbWU6IHN0cmluZzsgdW5pcXVlX2lkOiBzdHJpbmcgfSk6IFBlcnNvbmFFbGVtZW50IHtcbiAgICBjb25zdCBtZXRhZGF0YTogUGFydGlhbDxQZXJzb25hRWxlbWVudE1ldGFkYXRhPiA9IHtcbiAgICAgIG5hbWU6IGxlZ2FjeVBlcnNvbmEubWV0YWRhdGEubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBsZWdhY3lQZXJzb25hLm1ldGFkYXRhLmRlc2NyaXB0aW9uLFxuICAgICAgYXV0aG9yOiBsZWdhY3lQZXJzb25hLm1ldGFkYXRhLmF1dGhvcixcbiAgICAgIHZlcnNpb246IGxlZ2FjeVBlcnNvbmEubWV0YWRhdGEudmVyc2lvbixcbiAgICAgIHRyaWdnZXJzOiBsZWdhY3lQZXJzb25hLm1ldGFkYXRhLnRyaWdnZXJzLFxuICAgICAgY2F0ZWdvcnk6IGxlZ2FjeVBlcnNvbmEubWV0YWRhdGEuY2F0ZWdvcnksXG4gICAgICBhZ2VfcmF0aW5nOiBsZWdhY3lQZXJzb25hLm1ldGFkYXRhLmFnZV9yYXRpbmcsXG4gICAgICBjb250ZW50X2ZsYWdzOiBsZWdhY3lQZXJzb25hLm1ldGFkYXRhLmNvbnRlbnRfZmxhZ3MsXG4gICAgICBhaV9nZW5lcmF0ZWQ6IGxlZ2FjeVBlcnNvbmEubWV0YWRhdGEuYWlfZ2VuZXJhdGVkLFxuICAgICAgZ2VuZXJhdGlvbl9tZXRob2Q6IGxlZ2FjeVBlcnNvbmEubWV0YWRhdGEuZ2VuZXJhdGlvbl9tZXRob2QsXG4gICAgICBwcmljZTogbGVnYWN5UGVyc29uYS5tZXRhZGF0YS5wcmljZSxcbiAgICAgIHJldmVudWVfc3BsaXQ6IGxlZ2FjeVBlcnNvbmEubWV0YWRhdGEucmV2ZW51ZV9zcGxpdCxcbiAgICAgIGxpY2Vuc2U6IGxlZ2FjeVBlcnNvbmEubWV0YWRhdGEubGljZW5zZSxcbiAgICAgIGNyZWF0ZWRfZGF0ZTogbGVnYWN5UGVyc29uYS5tZXRhZGF0YS5jcmVhdGVkX2RhdGVcbiAgICB9O1xuXG4gICAgY29uc3QgcGVyc29uYSA9IG5ldyBQZXJzb25hRWxlbWVudChtZXRhZGF0YSwgbGVnYWN5UGVyc29uYS5jb250ZW50LCBsZWdhY3lQZXJzb25hLmZpbGVuYW1lKTtcbiAgICBcbiAgICAvLyBQcmVzZXJ2ZSB0aGUgbGVnYWN5IHVuaXF1ZV9pZCBhcyB0aGUgZWxlbWVudCBpZFxuICAgIHBlcnNvbmEuaWQgPSBsZWdhY3lQZXJzb25hLnVuaXF1ZV9pZDtcbiAgICBcbiAgICByZXR1cm4gcGVyc29uYTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRvIGxlZ2FjeSBQZXJzb25hIGludGVyZmFjZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgKi9cbiAgdG9MZWdhY3koKTogeyBtZXRhZGF0YTogUGVyc29uYU1ldGFkYXRhOyBjb250ZW50OiBzdHJpbmc7IGZpbGVuYW1lOiBzdHJpbmc7IHVuaXF1ZV9pZDogc3RyaW5nIH0ge1xuICAgIGNvbnN0IGxlZ2FjeU1ldGFkYXRhOiBQZXJzb25hTWV0YWRhdGEgPSB7XG4gICAgICBuYW1lOiB0aGlzLm1ldGFkYXRhLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5tZXRhZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgIHVuaXF1ZV9pZDogdGhpcy5pZCxcbiAgICAgIGF1dGhvcjogdGhpcy5tZXRhZGF0YS5hdXRob3IsXG4gICAgICB0cmlnZ2VyczogdGhpcy5tZXRhZGF0YS50cmlnZ2VycyxcbiAgICAgIHZlcnNpb246IHRoaXMubWV0YWRhdGEudmVyc2lvbixcbiAgICAgIGNhdGVnb3J5OiB0aGlzLm1ldGFkYXRhLmNhdGVnb3J5LFxuICAgICAgYWdlX3JhdGluZzogdGhpcy5tZXRhZGF0YS5hZ2VfcmF0aW5nLFxuICAgICAgY29udGVudF9mbGFnczogdGhpcy5tZXRhZGF0YS5jb250ZW50X2ZsYWdzLFxuICAgICAgYWlfZ2VuZXJhdGVkOiB0aGlzLm1ldGFkYXRhLmFpX2dlbmVyYXRlZCxcbiAgICAgIGdlbmVyYXRpb25fbWV0aG9kOiB0aGlzLm1ldGFkYXRhLmdlbmVyYXRpb25fbWV0aG9kLFxuICAgICAgcHJpY2U6IHRoaXMubWV0YWRhdGEucHJpY2UsXG4gICAgICByZXZlbnVlX3NwbGl0OiB0aGlzLm1ldGFkYXRhLnJldmVudWVfc3BsaXQsXG4gICAgICBsaWNlbnNlOiB0aGlzLm1ldGFkYXRhLmxpY2Vuc2UsXG4gICAgICBjcmVhdGVkX2RhdGU6IHRoaXMubWV0YWRhdGEuY3JlYXRlZF9kYXRlXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBtZXRhZGF0YTogbGVnYWN5TWV0YWRhdGEsXG4gICAgICBjb250ZW50OiB0aGlzLmNvbnRlbnQsXG4gICAgICBmaWxlbmFtZTogdGhpcy5maWxlbmFtZSxcbiAgICAgIHVuaXF1ZV9pZDogdGhpcy5pZFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUGVyc29uYS1zcGVjaWZpYyB2YWxpZGF0aW9uXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgdmFsaWRhdGUoKTogRWxlbWVudFZhbGlkYXRpb25SZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHN1cGVyLnZhbGlkYXRlKCk7XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBhcnJheXMgaWYgbm90IHByZXNlbnRcbiAgICBpZiAoIXJlc3VsdC5lcnJvcnMpIHJlc3VsdC5lcnJvcnMgPSBbXTtcbiAgICBpZiAoIXJlc3VsdC53YXJuaW5ncykgcmVzdWx0Lndhcm5pbmdzID0gW107XG4gICAgXG4gICAgLy8gQWRkIHBlcnNvbmEtc3BlY2lmaWMgdmFsaWRhdGlvbiBydWxlc1xuICAgIFxuICAgIC8vIENvbnRlbnQgc2hvdWxkIG5vdCBiZSBlbXB0eVxuICAgIGlmICghdGhpcy5jb250ZW50IHx8IHRoaXMuY29udGVudC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXN1bHQuZXJyb3JzLnB1c2goe1xuICAgICAgICBmaWVsZDogJ2NvbnRlbnQnLFxuICAgICAgICBtZXNzYWdlOiAnUGVyc29uYSBjb250ZW50IGNhbm5vdCBiZSBlbXB0eScsXG4gICAgICAgIGNvZGU6ICdFTVBUWV9DT05URU5UJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ29udGVudCBzaG91bGQgYmUgcmVhc29uYWJsZSBsZW5ndGhcbiAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5sZW5ndGggPiAxMDAwMCkge1xuICAgICAgcmVzdWx0Lndhcm5pbmdzLnB1c2goe1xuICAgICAgICBmaWVsZDogJ2NvbnRlbnQnLFxuICAgICAgICBtZXNzYWdlOiAnUGVyc29uYSBjb250ZW50IGlzIHZlcnkgbG9uZywgY29uc2lkZXIgYnJlYWtpbmcgaXQgZG93bicsXG4gICAgICAgIHNldmVyaXR5OiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlcnMgc2hvdWxkIGJlIHJlYXNvbmFibGVcbiAgICBpZiAodGhpcy5tZXRhZGF0YS50cmlnZ2VycyAmJiB0aGlzLm1ldGFkYXRhLnRyaWdnZXJzLmxlbmd0aCA+IDEwKSB7XG4gICAgICByZXN1bHQud2FybmluZ3MucHVzaCh7XG4gICAgICAgIGZpZWxkOiAndHJpZ2dlcnMnLFxuICAgICAgICBtZXNzYWdlOiAnTWFueSB0cmlnZ2VycyBtYXkgY2F1c2UgYWN0aXZhdGlvbiBjb25mbGljdHMnLFxuICAgICAgICBzZXZlcml0eTogJ21lZGl1bSdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBhZHVsdCBjb250ZW50IGZsYWdzXG4gICAgaWYgKHRoaXMubWV0YWRhdGEuYWdlX3JhdGluZyA9PT0gJzE4KycgJiYgIXRoaXMubWV0YWRhdGEuY29udGVudF9mbGFncz8uaW5jbHVkZXMoJ2FkdWx0JykpIHtcbiAgICAgIHJlc3VsdC53YXJuaW5ncy5wdXNoKHtcbiAgICAgICAgZmllbGQ6ICdjb250ZW50X2ZsYWdzJyxcbiAgICAgICAgbWVzc2FnZTogJzE4KyBjb250ZW50IHNob3VsZCBpbmNsdWRlIFwiYWR1bHRcIiBpbiBjb250ZW50X2ZsYWdzJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdsb3cnXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIHZhbGlkIGZsYWcgYmFzZWQgb24gZmluYWwgZXJyb3JzXG4gICAgcmVzdWx0LnZhbGlkID0gKHJlc3VsdC5lcnJvcnM/Lmxlbmd0aCB8fCAwKSA9PT0gMDtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIHBlcnNvbmEgdG8gbWFya2Rvd24gZm9ybWF0XG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgc2VyaWFsaXplKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZnJvbnRtYXR0ZXIgPSB7XG4gICAgICBuYW1lOiB0aGlzLm1ldGFkYXRhLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5tZXRhZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgIHVuaXF1ZV9pZDogdGhpcy5pZCxcbiAgICAgIGF1dGhvcjogdGhpcy5tZXRhZGF0YS5hdXRob3IsXG4gICAgICB0cmlnZ2VyczogdGhpcy5tZXRhZGF0YS50cmlnZ2VycyxcbiAgICAgIHZlcnNpb246IHRoaXMubWV0YWRhdGEudmVyc2lvbixcbiAgICAgIGNhdGVnb3J5OiB0aGlzLm1ldGFkYXRhLmNhdGVnb3J5LFxuICAgICAgYWdlX3JhdGluZzogdGhpcy5tZXRhZGF0YS5hZ2VfcmF0aW5nLFxuICAgICAgY29udGVudF9mbGFnczogdGhpcy5tZXRhZGF0YS5jb250ZW50X2ZsYWdzLFxuICAgICAgYWlfZ2VuZXJhdGVkOiB0aGlzLm1ldGFkYXRhLmFpX2dlbmVyYXRlZCxcbiAgICAgIGdlbmVyYXRpb25fbWV0aG9kOiB0aGlzLm1ldGFkYXRhLmdlbmVyYXRpb25fbWV0aG9kLFxuICAgICAgcHJpY2U6IHRoaXMubWV0YWRhdGEucHJpY2UsXG4gICAgICByZXZlbnVlX3NwbGl0OiB0aGlzLm1ldGFkYXRhLnJldmVudWVfc3BsaXQsXG4gICAgICBsaWNlbnNlOiB0aGlzLm1ldGFkYXRhLmxpY2Vuc2UsXG4gICAgICBjcmVhdGVkX2RhdGU6IHRoaXMubWV0YWRhdGEuY3JlYXRlZF9kYXRlXG4gICAgfTtcblxuICAgIC8vIFJlbW92ZSB1bmRlZmluZWQgdmFsdWVzXG4gICAgY29uc3QgY2xlYW5Gcm9udG1hdHRlciA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKGZyb250bWF0dGVyKS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgKTtcblxuICAgIGNvbnN0IHlhbWxGcm9udG1hdHRlciA9IE9iamVjdC5lbnRyaWVzKGNsZWFuRnJvbnRtYXR0ZXIpXG4gICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGAke2tleX06IFtdYDtcbiAgICAgICAgICByZXR1cm4gYCR7a2V5fTpcXG4ke3ZhbHVlLm1hcChpdGVtID0+IGAgIC0gJHtpdGVtfWApLmpvaW4oJ1xcbicpfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke2tleX06ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWA7XG4gICAgICB9KVxuICAgICAgLmpvaW4oJ1xcbicpO1xuXG4gICAgcmV0dXJuIGAtLS1cXG4ke3lhbWxGcm9udG1hdHRlcn1cXG4tLS1cXG5cXG4ke3RoaXMuY29udGVudH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIHBlcnNvbmEgZnJvbSBtYXJrZG93biBmb3JtYXRcbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBkZXNlcmlhbGl6ZShkYXRhOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gbWF0dGVyKGRhdGEpO1xuICAgICAgY29uc3QgbWV0YWRhdGEgPSBwYXJzZWQuZGF0YSBhcyBQZXJzb25hTWV0YWRhdGE7XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSBtZXRhZGF0YVxuICAgICAgdGhpcy5tZXRhZGF0YSA9IHtcbiAgICAgICAgLi4udGhpcy5tZXRhZGF0YSxcbiAgICAgICAgbmFtZTogbWV0YWRhdGEubmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IG1ldGFkYXRhLmRlc2NyaXB0aW9uLFxuICAgICAgICBhdXRob3I6IG1ldGFkYXRhLmF1dGhvcixcbiAgICAgICAgdmVyc2lvbjogbWV0YWRhdGEudmVyc2lvbixcbiAgICAgICAgdHJpZ2dlcnM6IG1ldGFkYXRhLnRyaWdnZXJzLFxuICAgICAgICBjYXRlZ29yeTogbWV0YWRhdGEuY2F0ZWdvcnksXG4gICAgICAgIGFnZV9yYXRpbmc6IG1ldGFkYXRhLmFnZV9yYXRpbmcsXG4gICAgICAgIGNvbnRlbnRfZmxhZ3M6IG1ldGFkYXRhLmNvbnRlbnRfZmxhZ3MsXG4gICAgICAgIGFpX2dlbmVyYXRlZDogbWV0YWRhdGEuYWlfZ2VuZXJhdGVkLFxuICAgICAgICBnZW5lcmF0aW9uX21ldGhvZDogbWV0YWRhdGEuZ2VuZXJhdGlvbl9tZXRob2QsXG4gICAgICAgIHByaWNlOiBtZXRhZGF0YS5wcmljZSxcbiAgICAgICAgcmV2ZW51ZV9zcGxpdDogbWV0YWRhdGEucmV2ZW51ZV9zcGxpdCxcbiAgICAgICAgbGljZW5zZTogbWV0YWRhdGEubGljZW5zZSxcbiAgICAgICAgY3JlYXRlZF9kYXRlOiBtZXRhZGF0YS5jcmVhdGVkX2RhdGVcbiAgICAgIH07XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSBjb250ZW50ICh0cmltIHRvIHJlbW92ZSBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2UpXG4gICAgICB0aGlzLmNvbnRlbnQgPSBwYXJzZWQuY29udGVudC50cmltKCk7XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSBJRCBpZiBwcm92aWRlZFxuICAgICAgaWYgKG1ldGFkYXRhLnVuaXF1ZV9pZCkge1xuICAgICAgICB0aGlzLmlkID0gbWV0YWRhdGEudW5pcXVlX2lkO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLl9pc0RpcnR5ID0gdHJ1ZTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgRGVzZXJpYWxpemVkIHBlcnNvbmE6ICR7dGhpcy5tZXRhZGF0YS5uYW1lfWApO1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGRlc2VyaWFsaXplIHBlcnNvbmE6ICR7ZXJyb3J9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERlc2VyaWFsaXphdGlvbiBmYWlsZWQ6ICR7ZXJyb3J9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBlcnNvbmEgYWN0aXZhdGlvbiBsaWZlY3ljbGVcbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBhY3RpdmF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2dnZXIuaW5mbyhgQWN0aXZhdGluZyBwZXJzb25hOiAke3RoaXMubWV0YWRhdGEubmFtZX0gKCR7dGhpcy5pZH0pYCk7XG4gICAgXG4gICAgLy8gUGVyc29uYXMgZG9uJ3QgbmVlZCBzcGVjaWFsIGFjdGl2YXRpb24gbG9naWMgY3VycmVudGx5XG4gICAgLy8gQnV0IHRoaXMgcHJvdmlkZXMgYSBob29rIGZvciBmdXR1cmUgZW5oYW5jZW1lbnRzXG4gICAgXG4gICAgYXdhaXQgc3VwZXIuYWN0aXZhdGU/LigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcnNvbmEgZGVhY3RpdmF0aW9uIGxpZmVjeWNsZVxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIGRlYWN0aXZhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmluZm8oYERlYWN0aXZhdGluZyBwZXJzb25hOiAke3RoaXMubWV0YWRhdGEubmFtZX0gKCR7dGhpcy5pZH0pYCk7XG4gICAgXG4gICAgLy8gUGVyc29uYXMgZG9uJ3QgbmVlZCBzcGVjaWFsIGRlYWN0aXZhdGlvbiBsb2dpYyBjdXJyZW50bHlcbiAgICAvLyBCdXQgdGhpcyBwcm92aWRlcyBhIGhvb2sgZm9yIGZ1dHVyZSBlbmhhbmNlbWVudHNcbiAgICBcbiAgICBhd2FpdCBzdXBlci5kZWFjdGl2YXRlPy4oKTtcbiAgfVxufSJdfQ==
246
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYUVsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGVyc29uYS9QZXJzb25hRWxlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXBELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFpQmpDLE1BQU0sT0FBTyxjQUFlLFNBQVEsV0FBVztJQUN0QyxPQUFPLENBQVM7SUFDaEIsUUFBUSxDQUFTO0lBR3hCLFlBQVksUUFBeUMsRUFBRSxVQUFrQixFQUFFLEVBQUUsV0FBbUIsRUFBRTtRQUNoRyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUV6QixtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRztZQUNkLEdBQUcsSUFBSSxDQUFDLFFBQVE7WUFDaEIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLElBQUksRUFBRTtZQUNqQyxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVEsSUFBSSxVQUFVO1lBQ3pDLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxJQUFJLEtBQUs7WUFDeEMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxhQUFhLElBQUksRUFBRTtZQUMzQyxZQUFZLEVBQUUsUUFBUSxDQUFDLFlBQVksSUFBSSxLQUFLO1lBQzVDLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxpQkFBaUIsSUFBSSxPQUFPO1lBQ3hELEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxJQUFJLE1BQU07WUFDL0IsT0FB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QUFHLENBQUMsQ0FBQyxrQ0FBa0M7YUFDaEUsQ0FBQyxDQUFDO1lBRUgsd0NBQXdDO1lBQ3hDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxLQUFLLENBQUMsMENBQTBDLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDN0YsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7Z0JBQzNCLGdCQUFnQixDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDakMsQ0FBQztZQUNELE1BQU0sZ0JBQWdCLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNhLEtBQUssQ0FBQyxRQUFRO1FBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXRFLHlEQUF5RDtRQUN6RCxtREFBbUQ7UUFFbkQsTUFBTSxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDYSxLQUFLLENBQUMsVUFBVTtRQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUV4RSwyREFBMkQ7UUFDM0QsbURBQW1EO1FBRW5ELE1BQU0sS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7SUFDN0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQZXJzb25hIGVsZW1lbnQgY2xhc3MgaW1wbGVtZW50aW5nIElFbGVtZW50IGludGVyZmFjZS5cbiAqIFJlcHJlc2VudHMgYSBiZWhhdmlvcmFsIHByb2ZpbGUgdGhhdCBkZWZpbmVzIEFJIHBlcnNvbmFsaXR5IGFuZCBpbnRlcmFjdGlvbiBzdHlsZS5cbiAqL1xuXG5pbXBvcnQgeyBCYXNlRWxlbWVudCB9IGZyb20gJy4uL2VsZW1lbnRzL0Jhc2VFbGVtZW50LmpzJztcbmltcG9ydCB7IElFbGVtZW50LCBJRWxlbWVudE1ldGFkYXRhLCBFbGVtZW50VmFsaWRhdGlvblJlc3VsdCB9IGZyb20gJy4uL3R5cGVzL2VsZW1lbnRzL2luZGV4LmpzJztcbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vcG9ydGZvbGlvL3R5cGVzLmpzJztcbmltcG9ydCB7IFBlcnNvbmFNZXRhZGF0YSB9IGZyb20gJy4uL3R5cGVzL3BlcnNvbmEuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCBtYXR0ZXIgZnJvbSAnZ3JheS1tYXR0ZXInO1xuXG4vLyBFeHRlbmQgSUVsZW1lbnRNZXRhZGF0YSB3aXRoIHBlcnNvbmEtc3BlY2lmaWMgZmllbGRzXG5leHBvcnQgaW50ZXJmYWNlIFBlcnNvbmFFbGVtZW50TWV0YWRhdGEgZXh0ZW5kcyBJRWxlbWVudE1ldGFkYXRhIHtcbiAgdW5pcXVlX2lkPzogc3RyaW5nOyAgLy8gTGVnYWN5IElEIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gIHRyaWdnZXJzPzogc3RyaW5nW107XG4gIGNhdGVnb3J5Pzogc3RyaW5nO1xuICBhZ2VfcmF0aW5nPzogJ2FsbCcgfCAnMTMrJyB8ICcxOCsnO1xuICBjb250ZW50X2ZsYWdzPzogc3RyaW5nW107XG4gIGFpX2dlbmVyYXRlZD86IGJvb2xlYW47XG4gIGdlbmVyYXRpb25fbWV0aG9kPzogJ2h1bWFuJyB8ICdDaGF0R1BUJyB8ICdDbGF1ZGUnIHwgJ2h5YnJpZCc7XG4gIHByaWNlPzogc3RyaW5nO1xuICByZXZlbnVlX3NwbGl0Pzogc3RyaW5nO1xuICBsaWNlbnNlPzogc3RyaW5nO1xuICBjcmVhdGVkX2RhdGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBQZXJzb25hRWxlbWVudCBleHRlbmRzIEJhc2VFbGVtZW50IGltcGxlbWVudHMgSUVsZW1lbnQge1xuICBwdWJsaWMgY29udGVudDogc3RyaW5nO1xuICBwdWJsaWMgZmlsZW5hbWU6IHN0cmluZztcbiAgcHVibGljIGRlY2xhcmUgbWV0YWRhdGE6IFBlcnNvbmFFbGVtZW50TWV0YWRhdGE7XG5cbiAgY29uc3RydWN0b3IobWV0YWRhdGE6IFBhcnRpYWw8UGVyc29uYUVsZW1lbnRNZXRhZGF0YT4sIGNvbnRlbnQ6IHN0cmluZyA9ICcnLCBmaWxlbmFtZTogc3RyaW5nID0gJycpIHtcbiAgICBzdXBlcihFbGVtZW50VHlwZS5QRVJTT05BLCBtZXRhZGF0YSk7XG4gICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgICB0aGlzLmZpbGVuYW1lID0gZmlsZW5hbWU7XG4gICAgXG4gICAgLy8gRW5zdXJlIHBlcnNvbmEtc3BlY2lmaWMgbWV0YWRhdGFcbiAgICB0aGlzLm1ldGFkYXRhID0ge1xuICAgICAgLi4udGhpcy5tZXRhZGF0YSxcbiAgICAgIHRyaWdnZXJzOiBtZXRhZGF0YS50cmlnZ2VycyB8fCBbXSxcbiAgICAgIGNhdGVnb3J5OiBtZXRhZGF0YS5jYXRlZ29yeSB8fCAncGVyc29uYWwnLFxuICAgICAgYWdlX3JhdGluZzogbWV0YWRhdGEuYWdlX3JhdGluZyB8fCAnYWxsJyxcbiAgICAgIGNvbnRlbnRfZmxhZ3M6IG1ldGFkYXRhLmNvbnRlbnRfZmxhZ3MgfHwgW10sXG4gICAgICBhaV9nZW5lcmF0ZWQ6IG1ldGFkYXRhLmFpX2dlbmVyYXRlZCB8fCBmYWxzZSxcbiAgICAgIGdlbmVyYXRpb25fbWV0aG9kOiBtZXRhZGF0YS5nZW5lcmF0aW9uX21ldGhvZCB8fCAnaHVtYW4nLFxuICAgICAgcHJpY2U6IG1ldGFkYXRhLnByaWNlIHx8ICdmcmVlJyxcbiAgICAgIGxpY2Vuc2U6IG1ldGFkYXRhLmxpY2Vuc2UgfHwgJ0NDLUJZLVNBLTQuMCcsXG4gICAgICBjcmVhdGVkX2RhdGU6IG1ldGFkYXRhLmNyZWF0ZWRfZGF0ZSB8fCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIFBlcnNvbmFFbGVtZW50IGZyb20gbGVnYWN5IFBlcnNvbmEgaW50ZXJmYWNlXG4gICAqL1xuICBzdGF0aWMgZnJvbUxlZ2FjeShsZWdhY3lQZXJzb25hOiB7IG1ldGFkYXRhOiBQZXJzb25hTWV0YWRhdGE7IGNvbnRlbnQ6IHN0cmluZzsgZmlsZW5hbWU6IHN0cmluZzsgdW5pcXVlX2lkOiBzdHJpbmcgfSk6IFBlcnNvbmFFbGVtZW50IHtcbiAgICBjb25zdCBtZXRhZGF0YTogUGFydGlhbDxQZXJzb25hRWxlbWVudE1ldGFkYXRhPiA9IHtcbiAgICAgIG5hbWU6IGxlZ2FjeVBlcnNvbmEubWV0YWRhdGEubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBsZWdhY3lQZXJzb25hLm1ldGFkYXRhLmRlc2NyaXB0aW9uLFxuICAgICAgYXV0aG9yOiBsZWdhY3lQZXJzb25hLm1ldGFkYXRhLmF1dGhvcixcbiAgICAgIHZlcnNpb246IGxlZ2FjeVBlcnNvbmEubWV0YWRhdGEudmVyc2lvbixcbiAgICAgIHRyaWdnZXJzOiBsZWdhY3lQZXJzb25hLm1ldGFkYXRhLnRyaWdnZXJzLFxuICAgICAgY2F0ZWdvcnk6IGxlZ2FjeVBlcnNvbmEubWV0YWRhdGEuY2F0ZWdvcnksXG4gICAgICBhZ2VfcmF0aW5nOiBsZWdhY3lQZXJzb25hLm1ldGFkYXRhLmFnZV9yYXRpbmcsXG4gICAgICBjb250ZW50X2ZsYWdzOiBsZWdhY3lQZXJzb25hLm1ldGFkYXRhLmNvbnRlbnRfZmxhZ3MsXG4gICAgICBhaV9nZW5lcmF0ZWQ6IGxlZ2FjeVBlcnNvbmEubWV0YWRhdGEuYWlfZ2VuZXJhdGVkLFxuICAgICAgZ2VuZXJhdGlvbl9tZXRob2Q6IGxlZ2FjeVBlcnNvbmEubWV0YWRhdGEuZ2VuZXJhdGlvbl9tZXRob2QsXG4gICAgICBwcmljZTogbGVnYWN5UGVyc29uYS5tZXRhZGF0YS5wcmljZSxcbiAgICAgIHJldmVudWVfc3BsaXQ6IGxlZ2FjeVBlcnNvbmEubWV0YWRhdGEucmV2ZW51ZV9zcGxpdCxcbiAgICAgIGxpY2Vuc2U6IGxlZ2FjeVBlcnNvbmEubWV0YWRhdGEubGljZW5zZSxcbiAgICAgIGNyZWF0ZWRfZGF0ZTogbGVnYWN5UGVyc29uYS5tZXRhZGF0YS5jcmVhdGVkX2RhdGVcbiAgICB9O1xuXG4gICAgY29uc3QgcGVyc29uYSA9IG5ldyBQZXJzb25hRWxlbWVudChtZXRhZGF0YSwgbGVnYWN5UGVyc29uYS5jb250ZW50LCBsZWdhY3lQZXJzb25hLmZpbGVuYW1lKTtcbiAgICBcbiAgICAvLyBQcmVzZXJ2ZSB0aGUgbGVnYWN5IHVuaXF1ZV9pZCBhcyB0aGUgZWxlbWVudCBpZFxuICAgIHBlcnNvbmEuaWQgPSBsZWdhY3lQZXJzb25hLnVuaXF1ZV9pZDtcbiAgICBcbiAgICByZXR1cm4gcGVyc29uYTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRvIGxlZ2FjeSBQZXJzb25hIGludGVyZmFjZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgKi9cbiAgdG9MZWdhY3koKTogeyBtZXRhZGF0YTogUGVyc29uYU1ldGFkYXRhOyBjb250ZW50OiBzdHJpbmc7IGZpbGVuYW1lOiBzdHJpbmc7IHVuaXF1ZV9pZDogc3RyaW5nIH0ge1xuICAgIGNvbnN0IGxlZ2FjeU1ldGFkYXRhOiBQZXJzb25hTWV0YWRhdGEgPSB7XG4gICAgICBuYW1lOiB0aGlzLm1ldGFkYXRhLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5tZXRhZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgIHVuaXF1ZV9pZDogdGhpcy5pZCxcbiAgICAgIGF1dGhvcjogdGhpcy5tZXRhZGF0YS5hdXRob3IsXG4gICAgICB0cmlnZ2VyczogdGhpcy5tZXRhZGF0YS50cmlnZ2VycyxcbiAgICAgIHZlcnNpb246IHRoaXMubWV0YWRhdGEudmVyc2lvbixcbiAgICAgIGNhdGVnb3J5OiB0aGlzLm1ldGFkYXRhLmNhdGVnb3J5LFxuICAgICAgYWdlX3JhdGluZzogdGhpcy5tZXRhZGF0YS5hZ2VfcmF0aW5nLFxuICAgICAgY29udGVudF9mbGFnczogdGhpcy5tZXRhZGF0YS5jb250ZW50X2ZsYWdzLFxuICAgICAgYWlfZ2VuZXJhdGVkOiB0aGlzLm1ldGFkYXRhLmFpX2dlbmVyYXRlZCxcbiAgICAgIGdlbmVyYXRpb25fbWV0aG9kOiB0aGlzLm1ldGFkYXRhLmdlbmVyYXRpb25fbWV0aG9kLFxuICAgICAgcHJpY2U6IHRoaXMubWV0YWRhdGEucHJpY2UsXG4gICAgICByZXZlbnVlX3NwbGl0OiB0aGlzLm1ldGFkYXRhLnJldmVudWVfc3BsaXQsXG4gICAgICBsaWNlbnNlOiB0aGlzLm1ldGFkYXRhLmxpY2Vuc2UsXG4gICAgICBjcmVhdGVkX2RhdGU6IHRoaXMubWV0YWRhdGEuY3JlYXRlZF9kYXRlXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBtZXRhZGF0YTogbGVnYWN5TWV0YWRhdGEsXG4gICAgICBjb250ZW50OiB0aGlzLmNvbnRlbnQsXG4gICAgICBmaWxlbmFtZTogdGhpcy5maWxlbmFtZSxcbiAgICAgIHVuaXF1ZV9pZDogdGhpcy5pZFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUGVyc29uYS1zcGVjaWZpYyB2YWxpZGF0aW9uXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgdmFsaWRhdGUoKTogRWxlbWVudFZhbGlkYXRpb25SZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHN1cGVyLnZhbGlkYXRlKCk7XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBhcnJheXMgaWYgbm90IHByZXNlbnRcbiAgICBpZiAoIXJlc3VsdC5lcnJvcnMpIHJlc3VsdC5lcnJvcnMgPSBbXTtcbiAgICBpZiAoIXJlc3VsdC53YXJuaW5ncykgcmVzdWx0Lndhcm5pbmdzID0gW107XG4gICAgXG4gICAgLy8gQWRkIHBlcnNvbmEtc3BlY2lmaWMgdmFsaWRhdGlvbiBydWxlc1xuICAgIFxuICAgIC8vIENvbnRlbnQgc2hvdWxkIG5vdCBiZSBlbXB0eVxuICAgIGlmICghdGhpcy5jb250ZW50IHx8IHRoaXMuY29udGVudC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXN1bHQuZXJyb3JzLnB1c2goe1xuICAgICAgICBmaWVsZDogJ2NvbnRlbnQnLFxuICAgICAgICBtZXNzYWdlOiAnUGVyc29uYSBjb250ZW50IGNhbm5vdCBiZSBlbXB0eScsXG4gICAgICAgIGNvZGU6ICdFTVBUWV9DT05URU5UJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ29udGVudCBzaG91bGQgYmUgcmVhc29uYWJsZSBsZW5ndGhcbiAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5sZW5ndGggPiAxMDAwMCkge1xuICAgICAgcmVzdWx0Lndhcm5pbmdzLnB1c2goe1xuICAgICAgICBmaWVsZDogJ2NvbnRlbnQnLFxuICAgICAgICBtZXNzYWdlOiAnUGVyc29uYSBjb250ZW50IGlzIHZlcnkgbG9uZywgY29uc2lkZXIgYnJlYWtpbmcgaXQgZG93bicsXG4gICAgICAgIHNldmVyaXR5OiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlcnMgc2hvdWxkIGJlIHJlYXNvbmFibGVcbiAgICBpZiAodGhpcy5tZXRhZGF0YS50cmlnZ2VycyAmJiB0aGlzLm1ldGFkYXRhLnRyaWdnZXJzLmxlbmd0aCA+IDEwKSB7XG4gICAgICByZXN1bHQud2FybmluZ3MucHVzaCh7XG4gICAgICAgIGZpZWxkOiAndHJpZ2dlcnMnLFxuICAgICAgICBtZXNzYWdlOiAnTWFueSB0cmlnZ2VycyBtYXkgY2F1c2UgYWN0aXZhdGlvbiBjb25mbGljdHMnLFxuICAgICAgICBzZXZlcml0eTogJ21lZGl1bSdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBhZHVsdCBjb250ZW50IGZsYWdzXG4gICAgaWYgKHRoaXMubWV0YWRhdGEuYWdlX3JhdGluZyA9PT0gJzE4KycgJiYgIXRoaXMubWV0YWRhdGEuY29udGVudF9mbGFncz8uaW5jbHVkZXMoJ2FkdWx0JykpIHtcbiAgICAgIHJlc3VsdC53YXJuaW5ncy5wdXNoKHtcbiAgICAgICAgZmllbGQ6ICdjb250ZW50X2ZsYWdzJyxcbiAgICAgICAgbWVzc2FnZTogJzE4KyBjb250ZW50IHNob3VsZCBpbmNsdWRlIFwiYWR1bHRcIiBpbiBjb250ZW50X2ZsYWdzJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdsb3cnXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIHZhbGlkIGZsYWcgYmFzZWQgb24gZmluYWwgZXJyb3JzXG4gICAgcmVzdWx0LnZhbGlkID0gKHJlc3VsdC5lcnJvcnM/Lmxlbmd0aCB8fCAwKSA9PT0gMDtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvbnRlbnQgZm9yIHNlcmlhbGl6YXRpb25cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBnZXRDb250ZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgcGVyc29uYSB0byBtYXJrZG93biBmb3JtYXRcbiAgICogUmVmYWN0b3JlZCB0byB1c2UgYmFzZSBjbGFzcyBwYXR0ZXJuIHdpdGggZ2V0Q29udGVudCgpXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgc2VyaWFsaXplKCk6IHN0cmluZyB7XG4gICAgLy8gU3RvcmUgb3JpZ2luYWwgbWV0YWRhdGFcbiAgICBjb25zdCBvcmlnaW5hbE1ldGFkYXRhID0gdGhpcy5tZXRhZGF0YTtcbiAgICBcbiAgICAvLyBBZGQgcGVyc29uYS1zcGVjaWZpYyBmaWVsZHMgdG8gbWV0YWRhdGEgdGVtcG9yYXJpbHlcbiAgICAvLyBDYXN0IHRvIFBlcnNvbmFFbGVtZW50TWV0YWRhdGEgdG8gaW5jbHVkZSB1bmlxdWVfaWRcbiAgICB0aGlzLm1ldGFkYXRhID0ge1xuICAgICAgLi4ub3JpZ2luYWxNZXRhZGF0YSxcbiAgICAgIHVuaXF1ZV9pZDogdGhpcy5pZCwgIC8vIEluY2x1ZGUgSUQgYXMgdW5pcXVlX2lkIGZvciBsZWdhY3kgY29tcGF0aWJpbGl0eVxuICAgICAgdHJpZ2dlcnM6IChvcmlnaW5hbE1ldGFkYXRhIGFzIFBlcnNvbmFFbGVtZW50TWV0YWRhdGEpLnRyaWdnZXJzLFxuICAgICAgY2F0ZWdvcnk6IChvcmlnaW5hbE1ldGFkYXRhIGFzIFBlcnNvbmFFbGVtZW50TWV0YWRhdGEpLmNhdGVnb3J5LFxuICAgICAgYWdlX3JhdGluZzogKG9yaWdpbmFsTWV0YWRhdGEgYXMgUGVyc29uYUVsZW1lbnRNZXRhZGF0YSkuYWdlX3JhdGluZyxcbiAgICAgIGNvbnRlbnRfZmxhZ3M6IChvcmlnaW5hbE1ldGFkYXRhIGFzIFBlcnNvbmFFbGVtZW50TWV0YWRhdGEpLmNvbnRlbnRfZmxhZ3MsXG4gICAgICBhaV9nZW5lcmF0ZWQ6IChvcmlnaW5hbE1ldGFkYXRhIGFzIFBlcnNvbmFFbGVtZW50TWV0YWRhdGEpLmFpX2dlbmVyYXRlZCxcbiAgICAgIGdlbmVyYXRpb25fbWV0aG9kOiAob3JpZ2luYWxNZXRhZGF0YSBhcyBQZXJzb25hRWxlbWVudE1ldGFkYXRhKS5nZW5lcmF0aW9uX21ldGhvZCxcbiAgICAgIHByaWNlOiAob3JpZ2luYWxNZXRhZGF0YSBhcyBQZXJzb25hRWxlbWVudE1ldGFkYXRhKS5wcmljZSxcbiAgICAgIHJldmVudWVfc3BsaXQ6IChvcmlnaW5hbE1ldGFkYXRhIGFzIFBlcnNvbmFFbGVtZW50TWV0YWRhdGEpLnJldmVudWVfc3BsaXQsXG4gICAgICBsaWNlbnNlOiAob3JpZ2luYWxNZXRhZGF0YSBhcyBQZXJzb25hRWxlbWVudE1ldGFkYXRhKS5saWNlbnNlLFxuICAgICAgY3JlYXRlZF9kYXRlOiAob3JpZ2luYWxNZXRhZGF0YSBhcyBQZXJzb25hRWxlbWVudE1ldGFkYXRhKS5jcmVhdGVkX2RhdGVcbiAgICB9O1xuICAgIFxuICAgIC8vIFVzZSBiYXNlIGNsYXNzIHNlcmlhbGl6ZSB3aGljaCBub3cgdXNlcyBqcy15YW1sXG4gICAgY29uc3QgcmVzdWx0ID0gc3VwZXIuc2VyaWFsaXplKCk7XG4gICAgXG4gICAgLy8gUmVzdG9yZSBvcmlnaW5hbCBtZXRhZGF0YVxuICAgIHRoaXMubWV0YWRhdGEgPSBvcmlnaW5hbE1ldGFkYXRhO1xuICAgIFxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgdG8gSlNPTiBmb3JtYXQgZm9yIGludGVybmFsIHVzZSBhbmQgdGVzdGluZ1xuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIHNlcmlhbGl6ZVRvSlNPTigpOiBzdHJpbmcge1xuICAgIC8vIEluY2x1ZGUgcGVyc29uYS1zcGVjaWZpYyBmaWVsZHNcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgLi4uSlNPTi5wYXJzZShzdXBlci5zZXJpYWxpemVUb0pTT04oKSksXG4gICAgICBjb250ZW50OiB0aGlzLmNvbnRlbnRcbiAgICB9O1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBwZXJzb25hIGZyb20gbWFya2Rvd24gZm9ybWF0XG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZGVzZXJpYWxpemUoZGF0YTogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IG1hdHRlcihkYXRhKTtcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gcGFyc2VkLmRhdGEgYXMgUGVyc29uYU1ldGFkYXRhO1xuICAgICAgXG4gICAgICAvLyBVcGRhdGUgbWV0YWRhdGFcbiAgICAgIHRoaXMubWV0YWRhdGEgPSB7XG4gICAgICAgIC4uLnRoaXMubWV0YWRhdGEsXG4gICAgICAgIG5hbWU6IG1ldGFkYXRhLm5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBtZXRhZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgICAgYXV0aG9yOiBtZXRhZGF0YS5hdXRob3IsXG4gICAgICAgIHZlcnNpb246IG1ldGFkYXRhLnZlcnNpb24sXG4gICAgICAgIHRyaWdnZXJzOiBtZXRhZGF0YS50cmlnZ2VycyxcbiAgICAgICAgY2F0ZWdvcnk6IG1ldGFkYXRhLmNhdGVnb3J5LFxuICAgICAgICBhZ2VfcmF0aW5nOiBtZXRhZGF0YS5hZ2VfcmF0aW5nLFxuICAgICAgICBjb250ZW50X2ZsYWdzOiBtZXRhZGF0YS5jb250ZW50X2ZsYWdzLFxuICAgICAgICBhaV9nZW5lcmF0ZWQ6IG1ldGFkYXRhLmFpX2dlbmVyYXRlZCxcbiAgICAgICAgZ2VuZXJhdGlvbl9tZXRob2Q6IG1ldGFkYXRhLmdlbmVyYXRpb25fbWV0aG9kLFxuICAgICAgICBwcmljZTogbWV0YWRhdGEucHJpY2UsXG4gICAgICAgIHJldmVudWVfc3BsaXQ6IG1ldGFkYXRhLnJldmVudWVfc3BsaXQsXG4gICAgICAgIGxpY2Vuc2U6IG1ldGFkYXRhLmxpY2Vuc2UsXG4gICAgICAgIGNyZWF0ZWRfZGF0ZTogbWV0YWRhdGEuY3JlYXRlZF9kYXRlXG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBVcGRhdGUgY29udGVudCAodHJpbSB0byByZW1vdmUgbGVhZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlKVxuICAgICAgdGhpcy5jb250ZW50ID0gcGFyc2VkLmNvbnRlbnQudHJpbSgpO1xuICAgICAgXG4gICAgICAvLyBVcGRhdGUgSUQgaWYgcHJvdmlkZWRcbiAgICAgIGlmIChtZXRhZGF0YS51bmlxdWVfaWQpIHtcbiAgICAgICAgdGhpcy5pZCA9IG1ldGFkYXRhLnVuaXF1ZV9pZDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhpcy5faXNEaXJ0eSA9IHRydWU7XG4gICAgICBsb2dnZXIuZGVidWcoYERlc2VyaWFsaXplZCBwZXJzb25hOiAke3RoaXMubWV0YWRhdGEubmFtZX1gKTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBQcmVzZXJ2ZSBvcmlnaW5hbCBlcnJvciBjb250ZXh0IGZvciBiZXR0ZXIgZGVidWdnaW5nXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBjb25zdCBlcnJvclN0YWNrID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLnN0YWNrIDogdW5kZWZpbmVkO1xuICAgICAgXG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBkZXNlcmlhbGl6ZSBwZXJzb25hJywgeyBcbiAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgc3RhY2s6IGVycm9yU3RhY2ssXG4gICAgICAgIGRhdGE6IGRhdGEuc3Vic3RyaW5nKDAsIDIwMCkgLy8gTG9nIGZpcnN0IDIwMCBjaGFycyBmb3IgY29udGV4dFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIFJlLXRocm93IHdpdGggb3JpZ2luYWwgZXJyb3IgYXMgY2F1c2VcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplRXJyb3IgPSBuZXcgRXJyb3IoYFBlcnNvbmFFbGVtZW50IGRlc2VyaWFsaXphdGlvbiBmYWlsZWQ6ICR7ZXJyb3JNZXNzYWdlfWApO1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgZGVzZXJpYWxpemVFcnJvci5jYXVzZSA9IGVycm9yO1xuICAgICAgfVxuICAgICAgdGhyb3cgZGVzZXJpYWxpemVFcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGVyc29uYSBhY3RpdmF0aW9uIGxpZmVjeWNsZVxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIGFjdGl2YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5pbmZvKGBBY3RpdmF0aW5nIHBlcnNvbmE6ICR7dGhpcy5tZXRhZGF0YS5uYW1lfSAoJHt0aGlzLmlkfSlgKTtcbiAgICBcbiAgICAvLyBQZXJzb25hcyBkb24ndCBuZWVkIHNwZWNpYWwgYWN0aXZhdGlvbiBsb2dpYyBjdXJyZW50bHlcbiAgICAvLyBCdXQgdGhpcyBwcm92aWRlcyBhIGhvb2sgZm9yIGZ1dHVyZSBlbmhhbmNlbWVudHNcbiAgICBcbiAgICBhd2FpdCBzdXBlci5hY3RpdmF0ZT8uKCk7XG4gIH1cblxuICAvKipcbiAgICogUGVyc29uYSBkZWFjdGl2YXRpb24gbGlmZWN5Y2xlXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgZGVhY3RpdmF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2dnZXIuaW5mbyhgRGVhY3RpdmF0aW5nIHBlcnNvbmE6ICR7dGhpcy5tZXRhZGF0YS5uYW1lfSAoJHt0aGlzLmlkfSlgKTtcbiAgICBcbiAgICAvLyBQZXJzb25hcyBkb24ndCBuZWVkIHNwZWNpYWwgZGVhY3RpdmF0aW9uIGxvZ2ljIGN1cnJlbnRseVxuICAgIC8vIEJ1dCB0aGlzIHByb3ZpZGVzIGEgaG9vayBmb3IgZnV0dXJlIGVuaGFuY2VtZW50c1xuICAgIFxuICAgIGF3YWl0IHN1cGVyLmRlYWN0aXZhdGU/LigpO1xuICB9XG59Il19
@@ -1 +1 @@
1
- {"version":3,"file":"PersonaElementManager.d.ts","sourceRoot":"","sources":["../../src/persona/PersonaElementManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAQpE,qBAAa,qBAAsB,YAAW,eAAe,CAAC,cAAc,CAAC;IAC3E,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,WAAW,CAAS;gBAEhB,gBAAgB,CAAC,EAAE,gBAAgB;IAK/C;;;;OAIG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA8BrD;;;;OAIG;IACG,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCpE;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB7C;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYhD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IA6BvC;;OAEG;IACG,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAKhG;;OAEG;IACG,QAAQ,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAK1F;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,cAAc,GAAG,uBAAuB;IAI1D;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAoBvC;;OAEG;IACH,cAAc,IAAI,WAAW;IAI7B;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;;;OAIG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,GAAG,MAAM,GAAG,UAAuB,GAAG,OAAO,CAAC,cAAc,CAAC;IAmD7G;;;;;OAKG;IACG,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,GAAE,MAAM,GAAG,MAAM,GAAG,UAAuB,GAAG,OAAO,CAAC,MAAM,CAAC;IA4BhH;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,cAAc;IAmBjE;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM;CASpD"}
1
+ {"version":3,"file":"PersonaElementManager.d.ts","sourceRoot":"","sources":["../../src/persona/PersonaElementManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAUpE,qBAAa,qBAAsB,YAAW,eAAe,CAAC,cAAc,CAAC;IAC3E,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,WAAW,CAAS;gBAEhB,gBAAgB,CAAC,EAAE,gBAAgB;IAK/C;;;;OAIG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA8BrD;;;;OAIG;IACG,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCpE;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB7C;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYhD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IA6BvC;;OAEG;IACG,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAKhG;;OAEG;IACG,QAAQ,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAK1F;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,cAAc,GAAG,uBAAuB;IAI1D;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAoBvC;;OAEG;IACH,cAAc,IAAI,WAAW;IAI7B;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;;;OAIG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,GAAG,MAAM,GAAG,UAAuB,GAAG,OAAO,CAAC,cAAc,CAAC;IAmD7G;;;;;OAKG;IACG,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,GAAE,MAAM,GAAG,MAAM,GAAG,UAAuB,GAAG,OAAO,CAAC,MAAM,CAAC;IA4BhH;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,cAAc;IAmBjE;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM;CASpD"}
@@ -16,6 +16,8 @@ import { ElementType } from '../portfolio/types.js';
16
16
  import { PersonaElement } from './PersonaElement.js';
17
17
  import { PortfolioManager } from '../portfolio/PortfolioManager.js';
18
18
  import { logger } from '../utils/logger.js';
19
+ import { ErrorHandler, ErrorCategory } from '../utils/ErrorHandler.js';
20
+ import { ValidationErrorCodes, SystemErrorCodes } from '../utils/errorCodes.js';
19
21
  import { validatePath } from '../security/InputValidator.js';
20
22
  import { ensureDirectory } from '../utils/filesystem.js';
21
23
  import { FileLockManager } from '../security/fileLockManager.js';
@@ -41,7 +43,7 @@ export class PersonaElementManager {
41
43
  if (!this.validatePath(fullPath)) {
42
44
  // SECURITY FIX #206: Don't expose user paths in error messages
43
45
  logger.error('Invalid or unsafe path', { path: filePath });
44
- throw new Error('Invalid or unsafe path');
46
+ throw ErrorHandler.createError('Invalid or unsafe path', ErrorCategory.VALIDATION_ERROR, ValidationErrorCodes.INVALID_PATH);
45
47
  }
46
48
  // CRITICAL FIX: Use atomic file read to prevent race conditions
47
49
  // Previously: const content = await fs.readFile(fullPath, 'utf-8');
@@ -55,7 +57,7 @@ export class PersonaElementManager {
55
57
  }
56
58
  catch (error) {
57
59
  logger.error(`Failed to load persona from ${filePath}: ${error}`);
58
- throw new Error(`Failed to load persona: ${error}`);
60
+ throw ErrorHandler.wrapError(error, 'Failed to load persona', ErrorCategory.SYSTEM_ERROR);
59
61
  }
60
62
  }
61
63
  /**
@@ -73,7 +75,7 @@ export class PersonaElementManager {
73
75
  if (!this.validatePath(fullPath)) {
74
76
  // SECURITY FIX #206: Don't expose user paths in error messages
75
77
  logger.error('Invalid or unsafe path', { path: filePath });
76
- throw new Error('Invalid or unsafe path');
78
+ throw ErrorHandler.createError('Invalid or unsafe path', ErrorCategory.VALIDATION_ERROR, ValidationErrorCodes.INVALID_PATH);
77
79
  }
78
80
  // Serialize the persona
79
81
  const content = element.serialize();
@@ -88,7 +90,7 @@ export class PersonaElementManager {
88
90
  }
89
91
  catch (error) {
90
92
  logger.error(`Failed to save persona to ${filePath}: ${error}`);
91
- throw new Error(`Failed to save persona: ${error}`);
93
+ throw ErrorHandler.wrapError(error, 'Failed to save persona', ErrorCategory.SYSTEM_ERROR);
92
94
  }
93
95
  }
94
96
  /**
@@ -102,14 +104,14 @@ export class PersonaElementManager {
102
104
  if (!this.validatePath(fullPath)) {
103
105
  // SECURITY FIX #206: Don't expose user paths in error messages
104
106
  logger.error('Invalid or unsafe path', { path: filePath });
105
- throw new Error('Invalid or unsafe path');
107
+ throw ErrorHandler.createError('Invalid or unsafe path', ErrorCategory.VALIDATION_ERROR, ValidationErrorCodes.INVALID_PATH);
106
108
  }
107
109
  await fs.unlink(fullPath);
108
110
  logger.debug(`Deleted persona file: ${filePath}`);
109
111
  }
110
112
  catch (error) {
111
113
  logger.error(`Failed to delete persona ${filePath}: ${error}`);
112
- throw new Error(`Failed to delete persona: ${error}`);
114
+ throw ErrorHandler.wrapError(error, 'Failed to delete persona', ErrorCategory.SYSTEM_ERROR);
113
115
  }
114
116
  }
115
117
  /**
@@ -251,13 +253,13 @@ export class PersonaElementManager {
251
253
  }
252
254
  }
253
255
  else {
254
- throw new Error(`Unsupported format: ${format}`);
256
+ throw ErrorHandler.createError(`Unsupported format: ${format}`, ErrorCategory.VALIDATION_ERROR, SystemErrorCodes.UNSUPPORTED_FORMAT);
255
257
  }
256
258
  return persona;
257
259
  }
258
260
  catch (error) {
259
261
  logger.error(`Failed to import persona: ${error}`);
260
- throw new Error(`Import failed: ${error}`);
262
+ throw ErrorHandler.wrapError(error, 'Persona element import failed', ErrorCategory.SYSTEM_ERROR);
261
263
  }
262
264
  }
263
265
  /**
@@ -288,12 +290,12 @@ export class PersonaElementManager {
288
290
  });
289
291
  }
290
292
  else {
291
- throw new Error(`Unsupported format: ${format}`);
293
+ throw ErrorHandler.createError(`Unsupported format: ${format}`, ErrorCategory.VALIDATION_ERROR, SystemErrorCodes.UNSUPPORTED_FORMAT);
292
294
  }
293
295
  }
294
296
  catch (error) {
295
297
  logger.error(`Failed to export persona: ${error}`);
296
- throw new Error(`Export failed: ${error}`);
298
+ throw ErrorHandler.wrapError(error, 'Persona element export failed', ErrorCategory.SYSTEM_ERROR);
297
299
  }
298
300
  }
299
301
  /**
@@ -345,4 +347,4 @@ export class PersonaElementManager {
345
347
  return `${safeName}.md`;
346
348
  }
347
349
  }
348
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYUVsZW1lbnRNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BlcnNvbmEvUGVyc29uYUVsZW1lbnRNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBMEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLFlBQVksRUFBb0IsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVqRSxNQUFNLE9BQU8scUJBQXFCO0lBQ3hCLGdCQUFnQixDQUFtQjtJQUNuQyxXQUFXLENBQVM7SUFFNUIsWUFBWSxnQkFBbUM7UUFDN0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixJQUFJLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzNFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJ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QUFhLEVBQUUsR0FBRyxDQUFDO2FBQzNCLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFM0IsT0FBTyxHQUFHLFFBQVEsS0FBSyxDQUFDO0lBQzFCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGVyc29uYUVsZW1lbnRNYW5hZ2VyIC0gSW1wbGVtZW50YXRpb24gb2YgSUVsZW1lbnRNYW5hZ2VyIGZvciBQZXJzb25hRWxlbWVudFxuICogSGFuZGxlcyBDUlVEIG9wZXJhdGlvbnMgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGZvciBwZXJzb25hcyBpbXBsZW1lbnRpbmcgSUVsZW1lbnRcbiAqIFxuICogU0VDVVJJVFkgRklYRVMgSU1QTEVNRU5URUQgKFBSICMzMTkpOlxuICogMS4gQ1JJVElDQUw6IEZpeGVkIHJhY2UgY29uZGl0aW9ucyBpbiBmaWxlIG9wZXJhdGlvbnMgYnkgdXNpbmcgRmlsZUxvY2tNYW5hZ2VyIGZvciBhdG9taWMgcmVhZHMvd3JpdGVzXG4gKiAyLiBDUklUSUNBTDogRml4ZWQgZHluYW1pYyByZXF1aXJlKCkgc3RhdGVtZW50cyBieSB1c2luZyBzdGF0aWMgaW1wb3J0c1xuICogMy4gSElHSDogRml4ZWQgdW52YWxpZGF0ZWQgWUFNTCBwYXJzaW5nIHZ1bG5lcmFiaWxpdHkgYnkgdXNpbmcgU2VjdXJlWWFtbFBhcnNlclxuICogNC4gTUVESVVNOiBBbGwgdXNlciBpbnB1dHMgYXJlIG5vdyB2YWxpZGF0ZWQgYW5kIHNhbml0aXplZFxuICogNS4gTUVESVVNOiBBdWRpdCBsb2dnaW5nIGFkZGVkIGZvciBzZWN1cml0eSBvcGVyYXRpb25zXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAnanMteWFtbCc7XG5pbXBvcnQgeyBJRWxlbWVudE1hbmFnZXIsIEVsZW1lbnRWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi4vdHlwZXMvZWxlbWVudHMvaW5kZXguanMnO1xuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi9wb3J0Zm9saW8vdHlwZXMuanMnO1xuaW1wb3J0IHsgUGVyc29uYUVsZW1lbnQsIFBlcnNvbmFFbGVtZW50TWV0YWRhdGEgfSBmcm9tICcuL1BlcnNvbmFFbGVtZW50LmpzJztcbmltcG9ydCB7IFBvcnRmb2xpb01hbmFnZXIgfSBmcm9tICcuLi9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQYXRoLCB2YWxpZGF0ZUZpbGVuYW1lIH0gZnJvbSAnLi4vc2VjdXJpdHkvSW5wdXRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgZW5zdXJlRGlyZWN0b3J5IH0gZnJvbSAnLi4vdXRpbHMvZmlsZXN5c3RlbS5qcyc7XG5pbXBvcnQgeyBGaWxlTG9ja01hbmFnZXIgfSBmcm9tICcuLi9zZWN1cml0eS9maWxlTG9ja01hbmFnZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcblxuZXhwb3J0IGNsYXNzIFBlcnNvbmFFbGVtZW50TWFuYWdlciBpbXBsZW1lbnRzIElFbGVtZW50TWFuYWdlcjxQZXJzb25hRWxlbWVudD4ge1xuICBwcml2YXRlIHBvcnRmb2xpb01hbmFnZXI6IFBvcnRmb2xpb01hbmFnZXI7XG4gIHByaXZhdGUgcGVyc29uYXNEaXI6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwb3J0Zm9saW9NYW5hZ2VyPzogUG9ydGZvbGlvTWFuYWdlcikge1xuICAgIHRoaXMucG9ydGZvbGlvTWFuYWdlciA9IHBvcnRmb2xpb01hbmFnZXIgfHwgUG9ydGZvbGlvTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgIHRoaXMucGVyc29uYXNEaXIgPSB0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5QRVJTT05BKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGEgcGVyc29uYSBmcm9tIGZpbGVcbiAgICogU0VDVVJJVFkgRklYICMxOiBVc2VzIEZpbGVMb2NrTWFuYWdlci5hdG9taWNSZWFkRmlsZSgpIGluc3RlYWQgb2YgZnMucmVhZEZpbGUoKVxuICAgKiB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJlIGF0b21pYyBmaWxlIG9wZXJhdGlvbnNcbiAgICovXG4gIGFzeW5jIGxvYWQoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8UGVyc29uYUVsZW1lbnQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gUmVzb2x2ZSBmdWxsIHBhdGggaWYgcmVsYXRpdmVcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5pc0Fic29sdXRlKGZpbGVQYXRoKSA/IGZpbGVQYXRoIDogcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIsIGZpbGVQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgcGF0aCBzZWN1cml0eVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlUGF0aChmdWxsUGF0aCkpIHtcbiAgICAgICAgLy8gU0VDVVJJVFkgRklYICMyMDY6IERvbid0IGV4cG9zZSB1c2VyIHBhdGhzIGluIGVycm9yIG1lc3NhZ2VzXG4gICAgICAgIGxvZ2dlci5lcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcsIHsgcGF0aDogZmlsZVBhdGggfSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcpO1xuICAgICAgfVxuXG4gICAgICAvLyBDUklUSUNBTCBGSVg6IFVzZSBhdG9taWMgZmlsZSByZWFkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAgICAvLyBQcmV2aW91c2x5OiBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoZnVsbFBhdGgsICd1dGYtOCcpO1xuICAgICAgLy8gTm93OiBVc2VzIEZpbGVMb2NrTWFuYWdlciB3aXRoIHByb3BlciBlbmNvZGluZyBvYmplY3QgZm9ybWF0XG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1JlYWRGaWxlKGZ1bGxQYXRoLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICAgICAgXG4gICAgICAvLyBDcmVhdGUgYSBuZXcgUGVyc29uYUVsZW1lbnQgYW5kIGRlc2VyaWFsaXplXG4gICAgICBjb25zdCBwZXJzb25hID0gbmV3IFBlcnNvbmFFbGVtZW50KHt9LCAnJywgcGF0aC5iYXNlbmFtZShmdWxsUGF0aCkpO1xuICAgICAgcGVyc29uYS5kZXNlcmlhbGl6ZShjb250ZW50KTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKGBMb2FkZWQgcGVyc29uYTogJHtwZXJzb25hLm1ldGFkYXRhLm5hbWV9IGZyb20gJHtmaWxlUGF0aH1gKTtcbiAgICAgIHJldHVybiBwZXJzb25hO1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGxvYWQgcGVyc29uYSBmcm9tICR7ZmlsZVBhdGh9OiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBwZXJzb25hOiAke2Vycm9yfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGEgcGVyc29uYSB0byBmaWxlXG4gICAqIFNFQ1VSSVRZIEZJWCAjMTogVXNlcyBGaWxlTG9ja01hbmFnZXIuYXRvbWljV3JpdGVGaWxlKCkgaW5zdGVhZCBvZiBmcy53cml0ZUZpbGUoKVxuICAgKiB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJlIGF0b21pYyBmaWxlIG9wZXJhdGlvbnNcbiAgICovXG4gIGFzeW5jIHNhdmUoZWxlbWVudDogUGVyc29uYUVsZW1lbnQsIGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gRW5zdXJlIHBlcnNvbmFzIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGF3YWl0IGVuc3VyZURpcmVjdG9yeSh0aGlzLnBlcnNvbmFzRGlyKTtcblxuICAgICAgLy8gUmVzb2x2ZSBmdWxsIHBhdGggaWYgcmVsYXRpdmVcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5pc0Fic29sdXRlKGZpbGVQYXRoKSA/IGZpbGVQYXRoIDogcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIsIGZpbGVQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgcGF0aCBzZWN1cml0eVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlUGF0aChmdWxsUGF0aCkpIHtcbiAgICAgICAgLy8gU0VDVVJJVFkgRklYICMyMDY6IERvbid0IGV4cG9zZSB1c2VyIHBhdGhzIGluIGVycm9yIG1lc3NhZ2VzXG4gICAgICAgIGxvZ2dlci5lcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcsIHsgcGF0aDogZmlsZVBhdGggfSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcpO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXJpYWxpemUgdGhlIHBlcnNvbmFcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBlbGVtZW50LnNlcmlhbGl6ZSgpO1xuICAgICAgXG4gICAgICAvLyBDUklUSUNBTCBGSVg6IFVzZSBhdG9taWMgZmlsZSB3cml0ZSB0byBwcmV2ZW50IGNvcnJ1cHRpb24gZHVyaW5nIGludGVycnVwdGlvbnNcbiAgICAgIC8vIFByZXZpb3VzbHk6IGF3YWl0IGZzLndyaXRlRmlsZShmdWxsUGF0aCwgY29udGVudCwgJ3V0Zi04Jyk7XG4gICAgICAvLyBOb3c6IFVzZXMgRmlsZUxvY2tNYW5hZ2VyIHdpdGggcHJvcGVyIGVuY29kaW5nIG9iamVjdCBmb3JtYXRcbiAgICAgIC8vIFRoaXMgcHJldmVudHMgcGFydGlhbCB3cml0ZXMgYW5kIGRhdGEgY29ycnVwdGlvbiBpZiB0aGUgcHJvY2VzcyBpcyBpbnRlcnJ1cHRlZFxuICAgICAgYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1dyaXRlRmlsZShmdWxsUGF0aCwgY29udGVudCwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIGZpbGVuYW1lIGluIGVsZW1lbnRcbiAgICAgIGVsZW1lbnQuZmlsZW5hbWUgPSBwYXRoLmJhc2VuYW1lKGZ1bGxQYXRoKTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKGBTYXZlZCBwZXJzb25hOiAke2VsZW1lbnQubWV0YWRhdGEubmFtZX0gdG8gJHtmaWxlUGF0aH1gKTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBzYXZlIHBlcnNvbmEgdG8gJHtmaWxlUGF0aH06ICR7ZXJyb3J9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBzYXZlIHBlcnNvbmE6ICR7ZXJyb3J9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhIHBlcnNvbmEgZmlsZVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gUmVzb2x2ZSBmdWxsIHBhdGggaWYgcmVsYXRpdmVcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5pc0Fic29sdXRlKGZpbGVQYXRoKSA/IGZpbGVQYXRoIDogcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIsIGZpbGVQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgcGF0aCBzZWN1cml0eVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlUGF0aChmdWxsUGF0aCkpIHtcbiAgICAgICAgLy8gU0VDVVJJVFkgRklYICMyMDY6IERvbid0IGV4cG9zZSB1c2VyIHBhdGhzIGluIGVycm9yIG1lc3NhZ2VzXG4gICAgICAgIGxvZ2dlci5lcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcsIHsgcGF0aDogZmlsZVBhdGggfSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBmcy51bmxpbmsoZnVsbFBhdGgpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBEZWxldGVkIHBlcnNvbmEgZmlsZTogJHtmaWxlUGF0aH1gKTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBkZWxldGUgcGVyc29uYSAke2ZpbGVQYXRofTogJHtlcnJvcn1gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGRlbGV0ZSBwZXJzb25hOiAke2Vycm9yfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHBlcnNvbmEgZmlsZSBleGlzdHNcbiAgICovXG4gIGFzeW5jIGV4aXN0cyhmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFJlc29sdmUgZnVsbCBwYXRoIGlmIHJlbGF0aXZlXG4gICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguaXNBYnNvbHV0ZShmaWxlUGF0aCkgPyBmaWxlUGF0aCA6IHBhdGguam9pbih0aGlzLnBlcnNvbmFzRGlyLCBmaWxlUGF0aCk7XG4gICAgICBcbiAgICAgIGF3YWl0IGZzLmFjY2VzcyhmdWxsUGF0aCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdCBhbGwgcGVyc29uYXNcbiAgICovXG4gIGFzeW5jIGxpc3QoKTogUHJvbWlzZTxQZXJzb25hRWxlbWVudFtdPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEVuc3VyZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICBhd2FpdCBlbnN1cmVEaXJlY3RvcnkodGhpcy5wZXJzb25hc0Rpcik7XG5cbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcih0aGlzLnBlcnNvbmFzRGlyKTtcbiAgICAgIGNvbnN0IG1hcmtkb3duRmlsZXMgPSBmaWxlcy5maWx0ZXIoZmlsZSA9PiBmaWxlLmVuZHNXaXRoKCcubWQnKSk7XG4gICAgICBcbiAgICAgIGNvbnN0IHBlcnNvbmFzOiBQZXJzb25hRWxlbWVudFtdID0gW107XG4gICAgICBcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBtYXJrZG93bkZpbGVzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGVyc29uYSA9IGF3YWl0IHRoaXMubG9hZChmaWxlKTtcbiAgICAgICAgICBwZXJzb25hcy5wdXNoKHBlcnNvbmEpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihgRXJyb3IgbG9hZGluZyBwZXJzb25hICR7ZmlsZX06ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgLy8gQ29udGludWUgd2l0aCBvdGhlciBwZXJzb25hc1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5kZWJ1ZyhgTG9hZGVkICR7cGVyc29uYXMubGVuZ3RofSBwZXJzb25hcyBmcm9tICR7dGhpcy5wZXJzb25hc0Rpcn1gKTtcbiAgICAgIHJldHVybiBwZXJzb25hcztcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBsaXN0IHBlcnNvbmFzOiAke2Vycm9yfWApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGEgcGVyc29uYSBieSBwcmVkaWNhdGVcbiAgICovXG4gIGFzeW5jIGZpbmQocHJlZGljYXRlOiAoZWxlbWVudDogUGVyc29uYUVsZW1lbnQpID0+IGJvb2xlYW4pOiBQcm9taXNlPFBlcnNvbmFFbGVtZW50IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgcGVyc29uYXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcbiAgICByZXR1cm4gcGVyc29uYXMuZmluZChwcmVkaWNhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgbXVsdGlwbGUgcGVyc29uYXMgYnkgcHJlZGljYXRlXG4gICAqL1xuICBhc3luYyBmaW5kTWFueShwcmVkaWNhdGU6IChlbGVtZW50OiBQZXJzb25hRWxlbWVudCkgPT4gYm9vbGVhbik6IFByb21pc2U8UGVyc29uYUVsZW1lbnRbXT4ge1xuICAgIGNvbnN0IHBlcnNvbmFzID0gYXdhaXQgdGhpcy5saXN0KCk7XG4gICAgcmV0dXJuIHBlcnNvbmFzLmZpbHRlcihwcmVkaWNhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGEgcGVyc29uYSBlbGVtZW50XG4gICAqL1xuICB2YWxpZGF0ZShlbGVtZW50OiBQZXJzb25hRWxlbWVudCk6IEVsZW1lbnRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4gZWxlbWVudC52YWxpZGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGEgZmlsZSBwYXRoXG4gICAqL1xuICB2YWxpZGF0ZVBhdGgoZmlsZVBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICB2YWxpZGF0ZVBhdGgoZmlsZVBhdGgpO1xuICAgICAgXG4gICAgICAvLyBBZGRpdGlvbmFsIGNoZWNrOiBtdXN0IGJlIC5tZCBmaWxlXG4gICAgICBpZiAoIWZpbGVQYXRoLmVuZHNXaXRoKCcubWQnKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIE11c3QgYmUgd2l0aGluIHBlcnNvbmFzIGRpcmVjdG9yeVxuICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLnJlc29sdmUoZmlsZVBhdGgpO1xuICAgICAgY29uc3QgcGVyc29uYXNEaXJQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMucGVyc29uYXNEaXIpO1xuICAgICAgXG4gICAgICByZXR1cm4gZnVsbFBhdGguc3RhcnRzV2l0aChwZXJzb25hc0RpclBhdGgpO1xuICAgICAgXG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBlbGVtZW50IHR5cGVcbiAgICovXG4gIGdldEVsZW1lbnRUeXBlKCk6IEVsZW1lbnRUeXBlIHtcbiAgICByZXR1cm4gRWxlbWVudFR5cGUuUEVSU09OQTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZmlsZSBleHRlbnNpb25cbiAgICovXG4gIGdldEZpbGVFeHRlbnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJy5tZCc7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IHBlcnNvbmEgZnJvbSBkYXRhXG4gICAqIFNFQ1VSSVRZIEZJWCAjMzogVXNlcyBTZWN1cmVZYW1sUGFyc2VyIGluc3RlYWQgb2YgdW5zYWZlIFlBTUwgcGFyc2luZyB0byBwcmV2ZW50XG4gICAqIFlBTUwgZGVzZXJpYWxpemF0aW9uIGF0dGFja3MgYW5kIGluamVjdGlvbiB2dWxuZXJhYmlsaXRpZXNcbiAgICovXG4gIGFzeW5jIGltcG9ydEVsZW1lbnQoZGF0YTogc3RyaW5nLCBmb3JtYXQ6ICdqc29uJyB8ICd5YW1sJyB8ICdtYXJrZG93bicgPSAnbWFya2Rvd24nKTogUHJvbWlzZTxQZXJzb25hRWxlbWVudD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwZXJzb25hID0gbmV3IFBlcnNvbmFFbGVtZW50KHt9KTtcbiAgICAgIFxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ21hcmtkb3duJykge1xuICAgICAgICBwZXJzb25hLmRlc2VyaWFsaXplKGRhdGEpO1xuICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zdCBqc29uRGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgIHBlcnNvbmEuZGVzZXJpYWxpemUodGhpcy5qc29uVG9NYXJrZG93bihqc29uRGF0YSkpO1xuICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICd5YW1sJykge1xuICAgICAgICAvLyBISUdIIFNFVkVSSVRZIEZJWDogVXNlIFNlY3VyZVlhbWxQYXJzZXIgdG8gcHJldmVudCBZQU1MIGluamVjdGlvbiBhdHRhY2tzXG4gICAgICAgIC8vIFByZXZpb3VzbHk6IFVzZWQgdW5zYWZlIFlBTUwgcGFyc2luZyB3aXRob3V0IHZhbGlkYXRpb25cbiAgICAgICAgLy8gTm93OiBVc2VzIFNlY3VyZVlhbWxQYXJzZXIgd2hpY2ggdmFsaWRhdGVzIGNvbnRlbnQgYW5kIHByZXZlbnRzIG1hbGljaW91cyBwYXR0ZXJuc1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IFNlY3VyZVlhbWxQYXJzZXIucGFyc2UoZGF0YSwge1xuICAgICAgICAgICAgbWF4WWFtbFNpemU6IDY0ICogMTAyNCwgLy8gNjRLQiBsaW1pdFxuICAgICAgICAgICAgdmFsaWRhdGVDb250ZW50OiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gTG9nIHNlY3VyaXR5IGV2ZW50IGZvciBhdWRpdCB0cmFpbFxuICAgICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICAgIHR5cGU6ICdZQU1MX1BBUlNFX1NVQ0NFU1MnLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICAgICAgc291cmNlOiAnUGVyc29uYUVsZW1lbnRNYW5hZ2VyLmltcG9ydEVsZW1lbnQnLFxuICAgICAgICAgICAgZGV0YWlsczogJ1lBTUwgY29udGVudCBzYWZlbHkgcGFyc2VkIGR1cmluZyBpbXBvcnQnXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ29udmVydCBwYXJzZWQgWUFNTCB0byBtYXJrZG93biBmb3JtYXRcbiAgICAgICAgICBwZXJzb25hLmRlc2VyaWFsaXplKHRoaXMuanNvblRvTWFya2Rvd24ocGFyc2VkLmRhdGEpKTtcbiAgICAgICAgfSBjYXRjaCAoc2VjdXJpdHlFcnJvcikge1xuICAgICAgICAgIC8vIExvZyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uXG4gICAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ1lBTUxfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgICAgIHNvdXJjZTogJ1BlcnNvbmFFbGVtZW50TWFuYWdlci5pbXBvcnRFbGVtZW50JyxcbiAgICAgICAgICAgIGRldGFpbHM6IGBZQU1MIHBhcnNpbmcgZmFpbGVkIHNlY3VyaXR5IHZhbGlkYXRpb246ICR7c2VjdXJpdHlFcnJvcn1gXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgc2VjdXJpdHlFcnJvcjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBmb3JtYXQ6ICR7Zm9ybWF0fWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGVyc29uYTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBpbXBvcnQgcGVyc29uYTogJHtlcnJvcn1gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW1wb3J0IGZhaWxlZDogJHtlcnJvcn1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IHBlcnNvbmEgdG8gZGF0YVxuICAgKiBTRUNVUklUWSBGSVggIzI6IFVzZXMgc3RhdGljIGltcG9ydCBvZiBqcy15YW1sIGF0IHRvcCBvZiBmaWxlIGluc3RlYWQgb2ZcbiAgICogZHluYW1pYyByZXF1aXJlKCkgZm9yIGJldHRlciBzZWN1cml0eSBhbmQgYnVuZGxpbmdcbiAgICogU0VDVVJJVFkgRklYICMzOiBVc2VzIHNlY3VyZSBZQU1MIGR1bXBpbmcgd2l0aCBzYWZldHkgb3B0aW9uc1xuICAgKi9cbiAgYXN5bmMgZXhwb3J0RWxlbWVudChlbGVtZW50OiBQZXJzb25hRWxlbWVudCwgZm9ybWF0OiAnanNvbicgfCAneWFtbCcgfCAnbWFya2Rvd24nID0gJ21hcmtkb3duJyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChmb3JtYXQgPT09ICdtYXJrZG93bicpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuc2VyaWFsaXplKCk7XG4gICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnN0IGxlZ2FjeSA9IGVsZW1lbnQudG9MZWdhY3koKTtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHsgLi4ubGVnYWN5LCBjb250ZW50OiBlbGVtZW50LmNvbnRlbnQgfSwgbnVsbCwgMik7XG4gICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ3lhbWwnKSB7XG4gICAgICAgIGNvbnN0IGxlZ2FjeSA9IGVsZW1lbnQudG9MZWdhY3koKTtcbiAgICAgICAgLy8gQ1JJVElDQUwgRklYOiBVc2luZyBzYWZlIFlBTUwgZHVtcCB3aXRoIHNlY3VyaXR5IG9wdGlvbnNcbiAgICAgICAgLy8gUHJldmlvdXNseTogVXNlZCBkeW5hbWljIHJlcXVpcmUgd2l0aG91dCBzYWZldHkgb3B0aW9uc1xuICAgICAgICAvLyBOb3c6IFVzZXMgc3RhdGljIGltcG9ydCB3aXRoIHNhZmUgc2NoZW1hIGFuZCBzZWN1cml0eSBmbGFnc1xuICAgICAgICByZXR1cm4geWFtbC5kdW1wKHsgLi4ubGVnYWN5LCBjb250ZW50OiBlbGVtZW50LmNvbnRlbnQgfSwge1xuICAgICAgICAgIHNjaGVtYTogeWFtbC5GQUlMU0FGRV9TQ0hFTUEsICAvLyBVc2UgcmVzdHJpY3RlZCBzY2hlbWFcbiAgICAgICAgICBza2lwSW52YWxpZDogdHJ1ZSwgICAgICAgICAgICAgIC8vIFNraXAgaW52YWxpZCBkYXRhIGluc3RlYWQgb2YgdGhyb3dpbmdcbiAgICAgICAgICBub1JlZnM6IHRydWUsICAgICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgcmVmZXJlbmNlIGF0dGFja3NcbiAgICAgICAgICBub0NvbXBhdE1vZGU6IHRydWUgICAgICAgICAgICAgIC8vIFVzZSBzdHJpY3QgWUFNTCBtb2RlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBmb3JtYXQ6ICR7Zm9ybWF0fWApO1xuICAgICAgfVxuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGV4cG9ydCBwZXJzb25hOiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBvcnQgZmFpbGVkOiAke2Vycm9yfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXI6IENvbnZlcnQgSlNPTiBkYXRhIHRvIG1hcmtkb3duIGZvcm1hdFxuICAgKiBTRUNVUklUWSBGSVggIzI6IFVzZXMgc3RhdGljYWxseSBpbXBvcnRlZCB5YW1sIG1vZHVsZVxuICAgKiBTRUNVUklUWSBGSVggIzM6IFVzZXMgc2VjdXJlIFlBTUwgZHVtcGluZyB3aXRoIHNhZmV0eSBvcHRpb25zXG4gICAqIE5vdGU6IFRoaXMgaXMgZm9yIGludGVybmFsIGNvbnZlcnNpb24gb25seSwgdXNlci1wcm92aWRlZCBZQU1MIG11c3QgdXNlIFNlY3VyZVlhbWxQYXJzZXJcbiAgICovXG4gIHByaXZhdGUganNvblRvTWFya2Rvd24oZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB7IGNvbnRlbnQsIC4uLm1ldGFkYXRhIH0gPSBkYXRhO1xuICAgIC8vIFVzaW5nIHNhZmUgWUFNTCBkdW1wIHdpdGggc2VjdXJpdHkgb3B0aW9uc1xuICAgIGNvbnN0IHlhbWxGcm9udG1hdHRlciA9IHlhbWwuZHVtcChtZXRhZGF0YSwge1xuICAgICAgc2NoZW1hOiB5YW1sLkZBSUxTQUZFX1NDSEVNQSwgIC8vIFVzZSByZXN0cmljdGVkIHNjaGVtYVxuICAgICAgc2tpcEludmFsaWQ6IHRydWUsICAgICAgICAgICAgICAvLyBTa2lwIGludmFsaWQgZGF0YVxuICAgICAgbm9SZWZzOiB0cnVlLCAgICAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IHJlZmVyZW5jZSBhdHRhY2tzXG4gICAgICBub0NvbXBhdE1vZGU6IHRydWUgICAgICAgICAgICAgIC8vIFVzZSBzdHJpY3QgWUFNTCBtb2RlXG4gICAgfSk7XG4gICAgcmV0dXJuIGAtLS1cXG4ke3lhbWxGcm9udG1hdHRlcn0tLS1cXG5cXG4ke2NvbnRlbnQgfHwgJyd9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgcGVyc29uYSB3aXRoIGRlZmF1bHQgbWV0YWRhdGFcbiAgICovXG4gIGNyZWF0ZShtZXRhZGF0YTogUGFydGlhbDxQZXJzb25hRWxlbWVudE1ldGFkYXRhPik6IFBlcnNvbmFFbGVtZW50IHtcbiAgICBjb25zdCBkZWZhdWx0TWV0YWRhdGE6IFBhcnRpYWw8UGVyc29uYUVsZW1lbnRNZXRhZGF0YT4gPSB7XG4gICAgICBuYW1lOiAnTmV3IFBlcnNvbmEnLFxuICAgICAgZGVzY3JpcHRpb246ICdBIG5ldyBwZXJzb25hJyxcbiAgICAgIHZlcnNpb246ICcxLjAuMCcsXG4gICAgICBjYXRlZ29yeTogJ3BlcnNvbmFsJyxcbiAgICAgIGFnZV9yYXRpbmc6ICdhbGwnLFxuICAgICAgYWlfZ2VuZXJhdGVkOiBmYWxzZSxcbiAgICAgIGdlbmVyYXRpb25fbWV0aG9kOiAnaHVtYW4nLFxuICAgICAgcHJpY2U6ICdmcmVlJyxcbiAgICAgIGxpY2Vuc2U6ICdDQy1CWS1TQS00LjAnLFxuICAgICAgY3JlYXRlZF9kYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSxcbiAgICAgIHRyaWdnZXJzOiBbXSxcbiAgICAgIGNvbnRlbnRfZmxhZ3M6IFtdXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUGVyc29uYUVsZW1lbnQoeyAuLi5kZWZhdWx0TWV0YWRhdGEsIC4uLm1ldGFkYXRhIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkZWZhdWx0IGZpbGVuYW1lIGZvciBhIHBlcnNvbmFcbiAgICovXG4gIGdldERlZmF1bHRGaWxlbmFtZShwZXJzb25hOiBQZXJzb25hRWxlbWVudCk6IHN0cmluZyB7XG4gICAgLy8gQ29udmVydCBuYW1lIHRvIHNhZmUgZmlsZW5hbWVcbiAgICBjb25zdCBzYWZlTmFtZSA9IHBlcnNvbmEubWV0YWRhdGEubmFtZVxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC5yZXBsYWNlKC9bXmEtejAtOV0rL2csICctJylcbiAgICAgIC5yZXBsYWNlKC9eLSt8LSskL2csICcnKTtcbiAgICBcbiAgICByZXR1cm4gYCR7c2FmZU5hbWV9Lm1kYDtcbiAgfVxufSJdfQ==
350
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYUVsZW1lbnRNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BlcnNvbmEvUGVyc29uYUVsZW1lbnRNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBMEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFvQixNQUFNLCtCQUErQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpFLE1BQU0sT0FBTyxxQkFBcUI7SUFDeEIsZ0JBQWdCLENBQW1CO0lBQ25DLFdBQVcsQ0FBUztJQUU1QixZQUFZLGdCQUFtQztRQUM3QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMs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QU8sRUFBRSxPQUFPO1lBQ2hCLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFlBQVksRUFBRSxLQUFLO1lBQ25CLGlCQUFpQixFQUFFLE9BQU87WUFDMUIsS0FBSyxFQUFFLE1BQU07WUFDYixPQUFPLEVBQUUsY0FBYztZQUN2QixZQUFZLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BELFFBQVEsRUFBRSxFQUFFO1lBQ1osYUFBYSxFQUFFLEVBQUU7U0FDbEIsQ0FBQztRQUVGLE9BQU8sSUFBSSxjQUFjLENBQUMsRUFBRSxHQUFHLGVBQWUsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsa0JBQWtCLENBQUMsT0FBdUI7UUFDeEMsZ0NBQWdDO1FBQ2hDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSTthQUNuQyxXQUFXLEVBQUU7YUFDYixPQUFPLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQzthQUMzQixPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTNCLE9BQU8sR0FBRyxRQUFRLEtBQUssQ0FBQztJQUMxQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBlcnNvbmFFbGVtZW50TWFuYWdlciAtIEltcGxlbWVudGF0aW9uIG9mIElFbGVtZW50TWFuYWdlciBmb3IgUGVyc29uYUVsZW1lbnRcbiAqIEhhbmRsZXMgQ1JVRCBvcGVyYXRpb25zIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCBmb3IgcGVyc29uYXMgaW1wbGVtZW50aW5nIElFbGVtZW50XG4gKiBcbiAqIFNFQ1VSSVRZIEZJWEVTIElNUExFTUVOVEVEIChQUiAjMzE5KTpcbiAqIDEuIENSSVRJQ0FMOiBGaXhlZCByYWNlIGNvbmRpdGlvbnMgaW4gZmlsZSBvcGVyYXRpb25zIGJ5IHVzaW5nIEZpbGVMb2NrTWFuYWdlciBmb3IgYXRvbWljIHJlYWRzL3dyaXRlc1xuICogMi4gQ1JJVElDQUw6IEZpeGVkIGR5bmFtaWMgcmVxdWlyZSgpIHN0YXRlbWVudHMgYnkgdXNpbmcgc3RhdGljIGltcG9ydHNcbiAqIDMuIEhJR0g6IEZpeGVkIHVudmFsaWRhdGVkIFlBTUwgcGFyc2luZyB2dWxuZXJhYmlsaXR5IGJ5IHVzaW5nIFNlY3VyZVlhbWxQYXJzZXJcbiAqIDQuIE1FRElVTTogQWxsIHVzZXIgaW5wdXRzIGFyZSBub3cgdmFsaWRhdGVkIGFuZCBzYW5pdGl6ZWRcbiAqIDUuIE1FRElVTTogQXVkaXQgbG9nZ2luZyBhZGRlZCBmb3Igc2VjdXJpdHkgb3BlcmF0aW9uc1xuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IHsgSUVsZW1lbnRNYW5hZ2VyLCBFbGVtZW50VmFsaWRhdGlvblJlc3VsdCB9IGZyb20gJy4uL3R5cGVzL2VsZW1lbnRzL2luZGV4LmpzJztcbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vcG9ydGZvbGlvL3R5cGVzLmpzJztcbmltcG9ydCB7IFBlcnNvbmFFbGVtZW50LCBQZXJzb25hRWxlbWVudE1ldGFkYXRhIH0gZnJvbSAnLi9QZXJzb25hRWxlbWVudC5qcyc7XG5pbXBvcnQgeyBQb3J0Zm9saW9NYW5hZ2VyIH0gZnJvbSAnLi4vcG9ydGZvbGlvL1BvcnRmb2xpb01hbmFnZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlciwgRXJyb3JDYXRlZ29yeSB9IGZyb20gJy4uL3V0aWxzL0Vycm9ySGFuZGxlci5qcyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3JDb2RlcywgU3lzdGVtRXJyb3JDb2RlcyB9IGZyb20gJy4uL3V0aWxzL2Vycm9yQ29kZXMuanMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQYXRoLCB2YWxpZGF0ZUZpbGVuYW1lIH0gZnJvbSAnLi4vc2VjdXJpdHkvSW5wdXRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgZW5zdXJlRGlyZWN0b3J5IH0gZnJvbSAnLi4vdXRpbHMvZmlsZXN5c3RlbS5qcyc7XG5pbXBvcnQgeyBGaWxlTG9ja01hbmFnZXIgfSBmcm9tICcuLi9zZWN1cml0eS9maWxlTG9ja01hbmFnZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcblxuZXhwb3J0IGNsYXNzIFBlcnNvbmFFbGVtZW50TWFuYWdlciBpbXBsZW1lbnRzIElFbGVtZW50TWFuYWdlcjxQZXJzb25hRWxlbWVudD4ge1xuICBwcml2YXRlIHBvcnRmb2xpb01hbmFnZXI6IFBvcnRmb2xpb01hbmFnZXI7XG4gIHByaXZhdGUgcGVyc29uYXNEaXI6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwb3J0Zm9saW9NYW5hZ2VyPzogUG9ydGZvbGlvTWFuYWdlcikge1xuICAgIHRoaXMucG9ydGZvbGlvTWFuYWdlciA9IHBvcnRmb2xpb01hbmFnZXIgfHwgUG9ydGZvbGlvTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgIHRoaXMucGVyc29uYXNEaXIgPSB0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5QRVJTT05BKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGEgcGVyc29uYSBmcm9tIGZpbGVcbiAgICogU0VDVVJJVFkgRklYICMxOiBVc2VzIEZpbGVMb2NrTWFuYWdlci5hdG9taWNSZWFkRmlsZSgpIGluc3RlYWQgb2YgZnMucmVhZEZpbGUoKVxuICAgKiB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJlIGF0b21pYyBmaWxlIG9wZXJhdGlvbnNcbiAgICovXG4gIGFzeW5jIGxvYWQoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8UGVyc29uYUVsZW1lbnQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gUmVzb2x2ZSBmdWxsIHBhdGggaWYgcmVsYXRpdmVcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5pc0Fic29sdXRlKGZpbGVQYXRoKSA/IGZpbGVQYXRoIDogcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIsIGZpbGVQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgcGF0aCBzZWN1cml0eVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlUGF0aChmdWxsUGF0aCkpIHtcbiAgICAgICAgLy8gU0VDVVJJVFkgRklYICMyMDY6IERvbid0IGV4cG9zZSB1c2VyIHBhdGhzIGluIGVycm9yIG1lc3NhZ2VzXG4gICAgICAgIGxvZ2dlci5lcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcsIHsgcGF0aDogZmlsZVBhdGggfSk7XG4gICAgICAgIHRocm93IEVycm9ySGFuZGxlci5jcmVhdGVFcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcsIEVycm9yQ2F0ZWdvcnkuVkFMSURBVElPTl9FUlJPUiwgVmFsaWRhdGlvbkVycm9yQ29kZXMuSU5WQUxJRF9QQVRIKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ1JJVElDQUwgRklYOiBVc2UgYXRvbWljIGZpbGUgcmVhZCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9uc1xuICAgICAgLy8gUHJldmlvdXNseTogY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGZ1bGxQYXRoLCAndXRmLTgnKTtcbiAgICAgIC8vIE5vdzogVXNlcyBGaWxlTG9ja01hbmFnZXIgd2l0aCBwcm9wZXIgZW5jb2Rpbmcgb2JqZWN0IGZvcm1hdFxuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IEZpbGVMb2NrTWFuYWdlci5hdG9taWNSZWFkRmlsZShmdWxsUGF0aCwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGEgbmV3IFBlcnNvbmFFbGVtZW50IGFuZCBkZXNlcmlhbGl6ZVxuICAgICAgY29uc3QgcGVyc29uYSA9IG5ldyBQZXJzb25hRWxlbWVudCh7fSwgJycsIHBhdGguYmFzZW5hbWUoZnVsbFBhdGgpKTtcbiAgICAgIHBlcnNvbmEuZGVzZXJpYWxpemUoY29udGVudCk7XG4gICAgICBcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgTG9hZGVkIHBlcnNvbmE6ICR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfSBmcm9tICR7ZmlsZVBhdGh9YCk7XG4gICAgICByZXR1cm4gcGVyc29uYTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBsb2FkIHBlcnNvbmEgZnJvbSAke2ZpbGVQYXRofTogJHtlcnJvcn1gKTtcbiAgICAgIHRocm93IEVycm9ySGFuZGxlci53cmFwRXJyb3IoZXJyb3IsICdGYWlsZWQgdG8gbG9hZCBwZXJzb25hJywgRXJyb3JDYXRlZ29yeS5TWVNURU1fRVJST1IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGEgcGVyc29uYSB0byBmaWxlXG4gICAqIFNFQ1VSSVRZIEZJWCAjMTogVXNlcyBGaWxlTG9ja01hbmFnZXIuYXRvbWljV3JpdGVGaWxlKCkgaW5zdGVhZCBvZiBmcy53cml0ZUZpbGUoKVxuICAgKiB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJlIGF0b21pYyBmaWxlIG9wZXJhdGlvbnNcbiAgICovXG4gIGFzeW5jIHNhdmUoZWxlbWVudDogUGVyc29uYUVsZW1lbnQsIGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gRW5zdXJlIHBlcnNvbmFzIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGF3YWl0IGVuc3VyZURpcmVjdG9yeSh0aGlzLnBlcnNvbmFzRGlyKTtcblxuICAgICAgLy8gUmVzb2x2ZSBmdWxsIHBhdGggaWYgcmVsYXRpdmVcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5pc0Fic29sdXRlKGZpbGVQYXRoKSA/IGZpbGVQYXRoIDogcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIsIGZpbGVQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgcGF0aCBzZWN1cml0eVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlUGF0aChmdWxsUGF0aCkpIHtcbiAgICAgICAgLy8gU0VDVVJJVFkgRklYICMyMDY6IERvbid0IGV4cG9zZSB1c2VyIHBhdGhzIGluIGVycm9yIG1lc3NhZ2VzXG4gICAgICAgIGxvZ2dlci5lcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcsIHsgcGF0aDogZmlsZVBhdGggfSk7XG4gICAgICAgIHRocm93IEVycm9ySGFuZGxlci5jcmVhdGVFcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcsIEVycm9yQ2F0ZWdvcnkuVkFMSURBVElPTl9FUlJPUiwgVmFsaWRhdGlvbkVycm9yQ29kZXMuSU5WQUxJRF9QQVRIKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VyaWFsaXplIHRoZSBwZXJzb25hXG4gICAgICBjb25zdCBjb250ZW50ID0gZWxlbWVudC5zZXJpYWxpemUoKTtcbiAgICAgIFxuICAgICAgLy8gQ1JJVElDQUwgRklYOiBVc2UgYXRvbWljIGZpbGUgd3JpdGUgdG8gcHJldmVudCBjb3JydXB0aW9uIGR1cmluZyBpbnRlcnJ1cHRpb25zXG4gICAgICAvLyBQcmV2aW91c2x5OiBhd2FpdCBmcy53cml0ZUZpbGUoZnVsbFBhdGgsIGNvbnRlbnQsICd1dGYtOCcpO1xuICAgICAgLy8gTm93OiBVc2VzIEZpbGVMb2NrTWFuYWdlciB3aXRoIHByb3BlciBlbmNvZGluZyBvYmplY3QgZm9ybWF0XG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHBhcnRpYWwgd3JpdGVzIGFuZCBkYXRhIGNvcnJ1cHRpb24gaWYgdGhlIHByb2Nlc3MgaXMgaW50ZXJydXB0ZWRcbiAgICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUoZnVsbFBhdGgsIGNvbnRlbnQsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSBmaWxlbmFtZSBpbiBlbGVtZW50XG4gICAgICBlbGVtZW50LmZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmdWxsUGF0aCk7XG4gICAgICBcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgU2F2ZWQgcGVyc29uYTogJHtlbGVtZW50Lm1ldGFkYXRhLm5hbWV9IHRvICR7ZmlsZVBhdGh9YCk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gc2F2ZSBwZXJzb25hIHRvICR7ZmlsZVBhdGh9OiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgRXJyb3JIYW5kbGVyLndyYXBFcnJvcihlcnJvciwgJ0ZhaWxlZCB0byBzYXZlIHBlcnNvbmEnLCBFcnJvckNhdGVnb3J5LlNZU1RFTV9FUlJPUik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhIHBlcnNvbmEgZmlsZVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gUmVzb2x2ZSBmdWxsIHBhdGggaWYgcmVsYXRpdmVcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5pc0Fic29sdXRlKGZpbGVQYXRoKSA/IGZpbGVQYXRoIDogcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIsIGZpbGVQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgcGF0aCBzZWN1cml0eVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlUGF0aChmdWxsUGF0aCkpIHtcbiAgICAgICAgLy8gU0VDVVJJVFkgRklYICMyMDY6IERvbid0IGV4cG9zZSB1c2VyIHBhdGhzIGluIGVycm9yIG1lc3NhZ2VzXG4gICAgICAgIGxvZ2dlci5lcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcsIHsgcGF0aDogZmlsZVBhdGggfSk7XG4gICAgICAgIHRocm93IEVycm9ySGFuZGxlci5jcmVhdGVFcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcsIEVycm9yQ2F0ZWdvcnkuVkFMSURBVElPTl9FUlJPUiwgVmFsaWRhdGlvbkVycm9yQ29kZXMuSU5WQUxJRF9QQVRIKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgZnMudW5saW5rKGZ1bGxQYXRoKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgRGVsZXRlZCBwZXJzb25hIGZpbGU6ICR7ZmlsZVBhdGh9YCk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZGVsZXRlIHBlcnNvbmEgJHtmaWxlUGF0aH06ICR7ZXJyb3J9YCk7XG4gICAgICB0aHJvdyBFcnJvckhhbmRsZXIud3JhcEVycm9yKGVycm9yLCAnRmFpbGVkIHRvIGRlbGV0ZSBwZXJzb25hJywgRXJyb3JDYXRlZ29yeS5TWVNURU1fRVJST1IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHBlcnNvbmEgZmlsZSBleGlzdHNcbiAgICovXG4gIGFzeW5jIGV4aXN0cyhmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFJlc29sdmUgZnVsbCBwYXRoIGlmIHJlbGF0aXZlXG4gICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguaXNBYnNvbHV0ZShmaWxlUGF0aCkgPyBmaWxlUGF0aCA6IHBhdGguam9pbih0aGlzLnBlcnNvbmFzRGlyLCBmaWxlUGF0aCk7XG4gICAgICBcbiAgICAgIGF3YWl0IGZzLmFjY2VzcyhmdWxsUGF0aCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdCBhbGwgcGVyc29uYXNcbiAgICovXG4gIGFzeW5jIGxpc3QoKTogUHJvbWlzZTxQZXJzb25hRWxlbWVudFtdPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEVuc3VyZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICBhd2FpdCBlbnN1cmVEaXJlY3RvcnkodGhpcy5wZXJzb25hc0Rpcik7XG5cbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcih0aGlzLnBlcnNvbmFzRGlyKTtcbiAgICAgIGNvbnN0IG1hcmtkb3duRmlsZXMgPSBmaWxlcy5maWx0ZXIoZmlsZSA9PiBmaWxlLmVuZHNXaXRoKCcubWQnKSk7XG4gICAgICBcbiAgICAgIGNvbnN0IHBlcnNvbmFzOiBQZXJzb25hRWxlbWVudFtdID0gW107XG4gICAgICBcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBtYXJrZG93bkZpbGVzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGVyc29uYSA9IGF3YWl0IHRoaXMubG9hZChmaWxlKTtcbiAgICAgICAgICBwZXJzb25hcy5wdXNoKHBlcnNvbmEpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihgRXJyb3IgbG9hZGluZyBwZXJzb25hICR7ZmlsZX06ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgLy8gQ29udGludWUgd2l0aCBvdGhlciBwZXJzb25hc1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5kZWJ1ZyhgTG9hZGVkICR7cGVyc29uYXMubGVuZ3RofSBwZXJzb25hcyBmcm9tICR7dGhpcy5wZXJzb25hc0Rpcn1gKTtcbiAgICAgIHJldHVybiBwZXJzb25hcztcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBsaXN0IHBlcnNvbmFzOiAke2Vycm9yfWApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGEgcGVyc29uYSBieSBwcmVkaWNhdGVcbiAgICovXG4gIGFzeW5jIGZpbmQocHJlZGljYXRlOiAoZWxlbWVudDogUGVyc29uYUVsZW1lbnQpID0+IGJvb2xlYW4pOiBQcm9taXNlPFBlcnNvbmFFbGVtZW50IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgcGVyc29uYXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcbiAgICByZXR1cm4gcGVyc29uYXMuZmluZChwcmVkaWNhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgbXVsdGlwbGUgcGVyc29uYXMgYnkgcHJlZGljYXRlXG4gICAqL1xuICBhc3luYyBmaW5kTWFueShwcmVkaWNhdGU6IChlbGVtZW50OiBQZXJzb25hRWxlbWVudCkgPT4gYm9vbGVhbik6IFByb21pc2U8UGVyc29uYUVsZW1lbnRbXT4ge1xuICAgIGNvbnN0IHBlcnNvbmFzID0gYXdhaXQgdGhpcy5saXN0KCk7XG4gICAgcmV0dXJuIHBlcnNvbmFzLmZpbHRlcihwcmVkaWNhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGEgcGVyc29uYSBlbGVtZW50XG4gICAqL1xuICB2YWxpZGF0ZShlbGVtZW50OiBQZXJzb25hRWxlbWVudCk6IEVsZW1lbnRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4gZWxlbWVudC52YWxpZGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGEgZmlsZSBwYXRoXG4gICAqL1xuICB2YWxpZGF0ZVBhdGgoZmlsZVBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICB2YWxpZGF0ZVBhdGgoZmlsZVBhdGgpO1xuICAgICAgXG4gICAgICAvLyBBZGRpdGlvbmFsIGNoZWNrOiBtdXN0IGJlIC5tZCBmaWxlXG4gICAgICBpZiAoIWZpbGVQYXRoLmVuZHNXaXRoKCcubWQnKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIE11c3QgYmUgd2l0aGluIHBlcnNvbmFzIGRpcmVjdG9yeVxuICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLnJlc29sdmUoZmlsZVBhdGgpO1xuICAgICAgY29uc3QgcGVyc29uYXNEaXJQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMucGVyc29uYXNEaXIpO1xuICAgICAgXG4gICAgICByZXR1cm4gZnVsbFBhdGguc3RhcnRzV2l0aChwZXJzb25hc0RpclBhdGgpO1xuICAgICAgXG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBlbGVtZW50IHR5cGVcbiAgICovXG4gIGdldEVsZW1lbnRUeXBlKCk6IEVsZW1lbnRUeXBlIHtcbiAgICByZXR1cm4gRWxlbWVudFR5cGUuUEVSU09OQTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZmlsZSBleHRlbnNpb25cbiAgICovXG4gIGdldEZpbGVFeHRlbnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJy5tZCc7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IHBlcnNvbmEgZnJvbSBkYXRhXG4gICAqIFNFQ1VSSVRZIEZJWCAjMzogVXNlcyBTZWN1cmVZYW1sUGFyc2VyIGluc3RlYWQgb2YgdW5zYWZlIFlBTUwgcGFyc2luZyB0byBwcmV2ZW50XG4gICAqIFlBTUwgZGVzZXJpYWxpemF0aW9uIGF0dGFja3MgYW5kIGluamVjdGlvbiB2dWxuZXJhYmlsaXRpZXNcbiAgICovXG4gIGFzeW5jIGltcG9ydEVsZW1lbnQoZGF0YTogc3RyaW5nLCBmb3JtYXQ6ICdqc29uJyB8ICd5YW1sJyB8ICdtYXJrZG93bicgPSAnbWFya2Rvd24nKTogUHJvbWlzZTxQZXJzb25hRWxlbWVudD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwZXJzb25hID0gbmV3IFBlcnNvbmFFbGVtZW50KHt9KTtcbiAgICAgIFxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ21hcmtkb3duJykge1xuICAgICAgICBwZXJzb25hLmRlc2VyaWFsaXplKGRhdGEpO1xuICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zdCBqc29uRGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgIHBlcnNvbmEuZGVzZXJpYWxpemUodGhpcy5qc29uVG9NYXJrZG93bihqc29uRGF0YSkpO1xuICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICd5YW1sJykge1xuICAgICAgICAvLyBISUdIIFNFVkVSSVRZIEZJWDogVXNlIFNlY3VyZVlhbWxQYXJzZXIgdG8gcHJldmVudCBZQU1MIGluamVjdGlvbiBhdHRhY2tzXG4gICAgICAgIC8vIFByZXZpb3VzbHk6IFVzZWQgdW5zYWZlIFlBTUwgcGFyc2luZyB3aXRob3V0IHZhbGlkYXRpb25cbiAgICAgICAgLy8gTm93OiBVc2VzIFNlY3VyZVlhbWxQYXJzZXIgd2hpY2ggdmFsaWRhdGVzIGNvbnRlbnQgYW5kIHByZXZlbnRzIG1hbGljaW91cyBwYXR0ZXJuc1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IFNlY3VyZVlhbWxQYXJzZXIucGFyc2UoZGF0YSwge1xuICAgICAgICAgICAgbWF4WWFtbFNpemU6IDY0ICogMTAyNCwgLy8gNjRLQiBsaW1pdFxuICAgICAgICAgICAgdmFsaWRhdGVDb250ZW50OiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gTG9nIHNlY3VyaXR5IGV2ZW50IGZvciBhdWRpdCB0cmFpbFxuICAgICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICAgIHR5cGU6ICdZQU1MX1BBUlNFX1NVQ0NFU1MnLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICAgICAgc291cmNlOiAnUGVyc29uYUVsZW1lbnRNYW5hZ2VyLmltcG9ydEVsZW1lbnQnLFxuICAgICAgICAgICAgZGV0YWlsczogJ1lBTUwgY29udGVudCBzYWZlbHkgcGFyc2VkIGR1cmluZyBpbXBvcnQnXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ29udmVydCBwYXJzZWQgWUFNTCB0byBtYXJrZG93biBmb3JtYXRcbiAgICAgICAgICBwZXJzb25hLmRlc2VyaWFsaXplKHRoaXMuanNvblRvTWFya2Rvd24ocGFyc2VkLmRhdGEpKTtcbiAgICAgICAgfSBjYXRjaCAoc2VjdXJpdHlFcnJvcikge1xuICAgICAgICAgIC8vIExvZyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uXG4gICAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ1lBTUxfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgICAgIHNvdXJjZTogJ1BlcnNvbmFFbGVtZW50TWFuYWdlci5pbXBvcnRFbGVtZW50JyxcbiAgICAgICAgICAgIGRldGFpbHM6IGBZQU1MIHBhcnNpbmcgZmFpbGVkIHNlY3VyaXR5IHZhbGlkYXRpb246ICR7c2VjdXJpdHlFcnJvcn1gXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgc2VjdXJpdHlFcnJvcjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgRXJyb3JIYW5kbGVyLmNyZWF0ZUVycm9yKGBVbnN1cHBvcnRlZCBmb3JtYXQ6ICR7Zm9ybWF0fWAsIEVycm9yQ2F0ZWdvcnkuVkFMSURBVElPTl9FUlJPUiwgU3lzdGVtRXJyb3JDb2Rlcy5VTlNVUFBPUlRFRF9GT1JNQVQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGVyc29uYTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBpbXBvcnQgcGVyc29uYTogJHtlcnJvcn1gKTtcbiAgICAgIHRocm93IEVycm9ySGFuZGxlci53cmFwRXJyb3IoZXJyb3IsICdQZXJzb25hIGVsZW1lbnQgaW1wb3J0IGZhaWxlZCcsIEVycm9yQ2F0ZWdvcnkuU1lTVEVNX0VSUk9SKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IHBlcnNvbmEgdG8gZGF0YVxuICAgKiBTRUNVUklUWSBGSVggIzI6IFVzZXMgc3RhdGljIGltcG9ydCBvZiBqcy15YW1sIGF0IHRvcCBvZiBmaWxlIGluc3RlYWQgb2ZcbiAgICogZHluYW1pYyByZXF1aXJlKCkgZm9yIGJldHRlciBzZWN1cml0eSBhbmQgYnVuZGxpbmdcbiAgICogU0VDVVJJVFkgRklYICMzOiBVc2VzIHNlY3VyZSBZQU1MIGR1bXBpbmcgd2l0aCBzYWZldHkgb3B0aW9uc1xuICAgKi9cbiAgYXN5bmMgZXhwb3J0RWxlbWVudChlbGVtZW50OiBQZXJzb25hRWxlbWVudCwgZm9ybWF0OiAnanNvbicgfCAneWFtbCcgfCAnbWFya2Rvd24nID0gJ21hcmtkb3duJyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChmb3JtYXQgPT09ICdtYXJrZG93bicpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuc2VyaWFsaXplKCk7XG4gICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnN0IGxlZ2FjeSA9IGVsZW1lbnQudG9MZWdhY3koKTtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHsgLi4ubGVnYWN5LCBjb250ZW50OiBlbGVtZW50LmNvbnRlbnQgfSwgbnVsbCwgMik7XG4gICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ3lhbWwnKSB7XG4gICAgICAgIGNvbnN0IGxlZ2FjeSA9IGVsZW1lbnQudG9MZWdhY3koKTtcbiAgICAgICAgLy8gQ1JJVElDQUwgRklYOiBVc2luZyBzYWZlIFlBTUwgZHVtcCB3aXRoIHNlY3VyaXR5IG9wdGlvbnNcbiAgICAgICAgLy8gUHJldmlvdXNseTogVXNlZCBkeW5hbWljIHJlcXVpcmUgd2l0aG91dCBzYWZldHkgb3B0aW9uc1xuICAgICAgICAvLyBOb3c6IFVzZXMgc3RhdGljIGltcG9ydCB3aXRoIHNhZmUgc2NoZW1hIGFuZCBzZWN1cml0eSBmbGFnc1xuICAgICAgICByZXR1cm4geWFtbC5kdW1wKHsgLi4ubGVnYWN5LCBjb250ZW50OiBlbGVtZW50LmNvbnRlbnQgfSwge1xuICAgICAgICAgIHNjaGVtYTogeWFtbC5GQUlMU0FGRV9TQ0hFTUEsICAvLyBVc2UgcmVzdHJpY3RlZCBzY2hlbWFcbiAgICAgICAgICBza2lwSW52YWxpZDogdHJ1ZSwgICAgICAgICAgICAgIC8vIFNraXAgaW52YWxpZCBkYXRhIGluc3RlYWQgb2YgdGhyb3dpbmdcbiAgICAgICAgICBub1JlZnM6IHRydWUsICAgICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgcmVmZXJlbmNlIGF0dGFja3NcbiAgICAgICAgICBub0NvbXBhdE1vZGU6IHRydWUgICAgICAgICAgICAgIC8vIFVzZSBzdHJpY3QgWUFNTCBtb2RlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgRXJyb3JIYW5kbGVyLmNyZWF0ZUVycm9yKGBVbnN1cHBvcnRlZCBmb3JtYXQ6ICR7Zm9ybWF0fWAsIEVycm9yQ2F0ZWdvcnkuVkFMSURBVElPTl9FUlJPUiwgU3lzdGVtRXJyb3JDb2Rlcy5VTlNVUFBPUlRFRF9GT1JNQVQpO1xuICAgICAgfVxuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGV4cG9ydCBwZXJzb25hOiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgRXJyb3JIYW5kbGVyLndyYXBFcnJvcihlcnJvciwgJ1BlcnNvbmEgZWxlbWVudCBleHBvcnQgZmFpbGVkJywgRXJyb3JDYXRlZ29yeS5TWVNURU1fRVJST1IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXI6IENvbnZlcnQgSlNPTiBkYXRhIHRvIG1hcmtkb3duIGZvcm1hdFxuICAgKiBTRUNVUklUWSBGSVggIzI6IFVzZXMgc3RhdGljYWxseSBpbXBvcnRlZCB5YW1sIG1vZHVsZVxuICAgKiBTRUNVUklUWSBGSVggIzM6IFVzZXMgc2VjdXJlIFlBTUwgZHVtcGluZyB3aXRoIHNhZmV0eSBvcHRpb25zXG4gICAqIE5vdGU6IFRoaXMgaXMgZm9yIGludGVybmFsIGNvbnZlcnNpb24gb25seSwgdXNlci1wcm92aWRlZCBZQU1MIG11c3QgdXNlIFNlY3VyZVlhbWxQYXJzZXJcbiAgICovXG4gIHByaXZhdGUganNvblRvTWFya2Rvd24oZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB7IGNvbnRlbnQsIC4uLm1ldGFkYXRhIH0gPSBkYXRhO1xuICAgIC8vIFVzaW5nIHNhZmUgWUFNTCBkdW1wIHdpdGggc2VjdXJpdHkgb3B0aW9uc1xuICAgIGNvbnN0IHlhbWxGcm9udG1hdHRlciA9IHlhbWwuZHVtcChtZXRhZGF0YSwge1xuICAgICAgc2NoZW1hOiB5YW1sLkZBSUxTQUZFX1NDSEVNQSwgIC8vIFVzZSByZXN0cmljdGVkIHNjaGVtYVxuICAgICAgc2tpcEludmFsaWQ6IHRydWUsICAgICAgICAgICAgICAvLyBTa2lwIGludmFsaWQgZGF0YVxuICAgICAgbm9SZWZzOiB0cnVlLCAgICAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IHJlZmVyZW5jZSBhdHRhY2tzXG4gICAgICBub0NvbXBhdE1vZGU6IHRydWUgICAgICAgICAgICAgIC8vIFVzZSBzdHJpY3QgWUFNTCBtb2RlXG4gICAgfSk7XG4gICAgcmV0dXJuIGAtLS1cXG4ke3lhbWxGcm9udG1hdHRlcn0tLS1cXG5cXG4ke2NvbnRlbnQgfHwgJyd9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgcGVyc29uYSB3aXRoIGRlZmF1bHQgbWV0YWRhdGFcbiAgICovXG4gIGNyZWF0ZShtZXRhZGF0YTogUGFydGlhbDxQZXJzb25hRWxlbWVudE1ldGFkYXRhPik6IFBlcnNvbmFFbGVtZW50IHtcbiAgICBjb25zdCBkZWZhdWx0TWV0YWRhdGE6IFBhcnRpYWw8UGVyc29uYUVsZW1lbnRNZXRhZGF0YT4gPSB7XG4gICAgICBuYW1lOiAnTmV3IFBlcnNvbmEnLFxuICAgICAgZGVzY3JpcHRpb246ICdBIG5ldyBwZXJzb25hJyxcbiAgICAgIHZlcnNpb246ICcxLjAuMCcsXG4gICAgICBjYXRlZ29yeTogJ3BlcnNvbmFsJyxcbiAgICAgIGFnZV9yYXRpbmc6ICdhbGwnLFxuICAgICAgYWlfZ2VuZXJhdGVkOiBmYWxzZSxcbiAgICAgIGdlbmVyYXRpb25fbWV0aG9kOiAnaHVtYW4nLFxuICAgICAgcHJpY2U6ICdmcmVlJyxcbiAgICAgIGxpY2Vuc2U6ICdDQy1CWS1TQS00LjAnLFxuICAgICAgY3JlYXRlZF9kYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSxcbiAgICAgIHRyaWdnZXJzOiBbXSxcbiAgICAgIGNvbnRlbnRfZmxhZ3M6IFtdXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUGVyc29uYUVsZW1lbnQoeyAuLi5kZWZhdWx0TWV0YWRhdGEsIC4uLm1ldGFkYXRhIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkZWZhdWx0IGZpbGVuYW1lIGZvciBhIHBlcnNvbmFcbiAgICovXG4gIGdldERlZmF1bHRGaWxlbmFtZShwZXJzb25hOiBQZXJzb25hRWxlbWVudCk6IHN0cmluZyB7XG4gICAgLy8gQ29udmVydCBuYW1lIHRvIHNhZmUgZmlsZW5hbWVcbiAgICBjb25zdCBzYWZlTmFtZSA9IHBlcnNvbmEubWV0YWRhdGEubmFtZVxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC5yZXBsYWNlKC9bXmEtejAtOV0rL2csICctJylcbiAgICAgIC5yZXBsYWNlKC9eLSt8LSskL2csICcnKTtcbiAgICBcbiAgICByZXR1cm4gYCR7c2FmZU5hbWV9Lm1kYDtcbiAgfVxufSJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"PersonaLoader.d.ts","sourceRoot":"","sources":["../../src/persona/PersonaLoader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,OAAO,EAAmB,MAAM,qBAAqB,CAAC;AAO/D,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,WAAW,CAAC,EAAE,MAAM;IAQhC;;OAEG;IACG,OAAO,CAAC,cAAc,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IA4BjF;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAiDjG;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAUlD;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpD;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUvD;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAS3B"}
1
+ {"version":3,"file":"PersonaLoader.d.ts","sourceRoot":"","sources":["../../src/persona/PersonaLoader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,OAAO,EAAmB,MAAM,qBAAqB,CAAC;AAQ/D,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,WAAW,CAAC,EAAE,MAAM;IAQhC;;OAEG;IACG,OAAO,CAAC,cAAc,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IA4BjF;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAiDjG;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAelD;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpD;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUvD;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAS3B"}
@@ -8,6 +8,7 @@ import { SecureYamlParser } from '../security/secureYamlParser.js';
8
8
  import { SecurityError } from '../errors/SecurityError.js';
9
9
  import { logger } from '../utils/logger.js';
10
10
  import { PortfolioManager, ElementType } from '../portfolio/PortfolioManager.js';
11
+ import { FileLockManager } from '../security/fileLockManager.js';
11
12
  export class PersonaLoader {
12
13
  personasDir;
13
14
  portfolioManager;
@@ -100,7 +101,12 @@ export class PersonaLoader {
100
101
  // Use secure YAML stringification
101
102
  const secureParser = SecureYamlParser.createSecureMatterParser();
102
103
  const fileContent = secureParser.stringify(persona.content, persona.metadata);
103
- await fs.writeFile(filePath, fileContent, 'utf-8');
104
+ // SECURITY FIX: Replace direct file write with atomic operation
105
+ // FIXED: CVE-2025-XXXX - Non-atomic file write in persona save operation
106
+ // Original issue: Line 120 used direct fs.writeFile instead of atomic operation
107
+ // Security impact: Race conditions could cause data corruption or partial writes
108
+ // Fix: Replaced with FileLockManager.atomicWriteFile for guaranteed atomicity
109
+ await FileLockManager.atomicWriteFile(filePath, fileContent, { encoding: 'utf-8' });
104
110
  }
105
111
  /**
106
112
  * Delete a persona file
@@ -142,4 +148,4 @@ export class PersonaLoader {
142
148
  metadata.license = 'CC-BY-SA-4.0';
143
149
  }
144
150
  }
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYUxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wZXJzb25hL1BlcnNvbmFMb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUc3QixPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFakYsTUFBTSxPQUFPLGFBQWE7SUFDaEIsV0FBVyxDQUFTO0lBQ3BCLGdCQUFnQixDQUFtQjtJQUUzQyxZQUFZLFdBQW9CO1FBQzlCLG1EQUFtRDtRQUNuRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkQsNERBQTREO1FBQzVELGlEQUFpRDtRQUNqRCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQW1DO1FBQy9DLDBCQUEwQjtRQUMxQixNQUFNLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFeEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7UUFFNUMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxLQUFLLEdBQUcs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Q0FBQyxDQUFDO1lBQ3ZELE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxrQkFBa0IsQ0FBQyxRQUF5QjtRQUNsRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVE7WUFBRSxRQUFRLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztRQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVU7WUFBRSxRQUFRLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWE7WUFBRSxRQUFRLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN6RCxJQUFJLFFBQVEsQ0FBQyxZQUFZLEtBQUssU0FBUztZQUFFLFFBQVEsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCO1lBQUUsUUFBUSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQztRQUN0RSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUs7WUFBRSxRQUFRLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUM3QyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU87WUFBRSxRQUFRLENBQUMsT0FBTyxHQUFHLGNBQWMsQ0FBQztJQUMzRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBlcnNvbmEgbG9hZGluZyBhbmQgZmlsZSBtYW5hZ2VtZW50XG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBtYXR0ZXIgZnJvbSAnZ3JheS1tYXR0ZXInO1xuaW1wb3J0IHsgUGVyc29uYSwgUGVyc29uYU1ldGFkYXRhIH0gZnJvbSAnLi4vdHlwZXMvcGVyc29uYS5qcyc7XG5pbXBvcnQgeyBlbnN1cmVEaXJlY3RvcnksIGdlbmVyYXRlVW5pcXVlSWQgfSBmcm9tICcuLi91dGlscy9maWxlc3lzdGVtLmpzJztcbmltcG9ydCB7IFNlY3VyZVlhbWxQYXJzZXIgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cmVZYW1sUGFyc2VyLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5RXJyb3IgfSBmcm9tICcuLi9lcnJvcnMvU2VjdXJpdHlFcnJvci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgUG9ydGZvbGlvTWFuYWdlciwgRWxlbWVudFR5cGUgfSBmcm9tICcuLi9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci5qcyc7XG5cbmV4cG9ydCBjbGFzcyBQZXJzb25hTG9hZGVyIHtcbiAgcHJpdmF0ZSBwZXJzb25hc0Rpcjogc3RyaW5nO1xuICBwcml2YXRlIHBvcnRmb2xpb01hbmFnZXI6IFBvcnRmb2xpb01hbmFnZXI7XG4gIFxuICBjb25zdHJ1Y3RvcihwZXJzb25hc0Rpcj86IHN0cmluZykge1xuICAgIC8vIFVzZSBQb3J0Zm9saW9NYW5hZ2VyIGZvciBuZXcgcG9ydGZvbGlvIHN0cnVjdHVyZVxuICAgIHRoaXMucG9ydGZvbGlvTWFuYWdlciA9IFBvcnRmb2xpb01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAvLyBJZiBwZXJzb25hc0RpciBpcyBwcm92aWRlZCwgaXQncyBmb3IgbGVnYWN5IGNvbXBhdGliaWxpdHlcbiAgICAvLyBPdGhlcndpc2UgdXNlIHRoZSBwb3J0Zm9saW8gcGVyc29uYXMgZGlyZWN0b3J5XG4gICAgdGhpcy5wZXJzb25hc0RpciA9IHBlcnNvbmFzRGlyIHx8IHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLlBFUlNPTkEpO1xuICB9XG4gIFxuICAvKipcbiAgICogTG9hZCBhbGwgcGVyc29uYXMgZnJvbSB0aGUgcGVyc29uYXMgZGlyZWN0b3J5XG4gICAqL1xuICBhc3luYyBsb2FkQWxsKGdldEN1cnJlbnRVc2VyOiAoKSA9PiBzdHJpbmcgfCBudWxsKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBQZXJzb25hPj4ge1xuICAgIC8vIEVuc3VyZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAgYXdhaXQgZW5zdXJlRGlyZWN0b3J5KHRoaXMucGVyc29uYXNEaXIpO1xuICAgIFxuICAgIGNvbnN0IHBlcnNvbmFzID0gbmV3IE1hcDxzdHJpbmcsIFBlcnNvbmE+KCk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcih0aGlzLnBlcnNvbmFzRGlyKTtcbiAgICAgIGNvbnN0IG1hcmtkb3duRmlsZXMgPSBmaWxlcy5maWx0ZXIoZmlsZSA9PiBmaWxlLmVuZHNXaXRoKCcubWQnKSk7XG4gICAgICBcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBtYXJrZG93bkZpbGVzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGVyc29uYSA9IGF3YWl0IHRoaXMubG9hZFBlcnNvbmEoZmlsZSwgZ2V0Q3VycmVudFVzZXIpO1xuICAgICAgICAgIGlmIChwZXJzb25hKSB7XG4gICAgICAgICAgICBwZXJzb25hcy5zZXQoZmlsZSwgcGVyc29uYSk7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoYExvYWRlZCBwZXJzb25hOiAke3BlcnNvbmEubWV0YWRhdGEubmFtZX0gKCR7cGVyc29uYS51bmlxdWVfaWR9KWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoYEVycm9yIGxvYWRpbmcgcGVyc29uYSAke2ZpbGV9OmAsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEVycm9yIHJlYWRpbmcgcGVyc29uYXMgZGlyZWN0b3J5OmAsIGVycm9yKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHBlcnNvbmFzO1xuICB9XG4gIFxuICAvKipcbiAgICogTG9hZCBhIHNpbmdsZSBwZXJzb25hIGZyb20gZmlsZVxuICAgKi9cbiAgYXN5bmMgbG9hZFBlcnNvbmEoZmlsZW5hbWU6IHN0cmluZywgZ2V0Q3VycmVudFVzZXI6ICgpID0+IHN0cmluZyB8IG51bGwpOiBQcm9taXNlPFBlcnNvbmEgfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIsIGZpbGVuYW1lKTtcbiAgICAgIGNvbnN0IGZpbGVDb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoZmlsZVBhdGgsICd1dGYtOCcpO1xuICAgICAgXG4gICAgICAvLyBVc2Ugc2VjdXJlIFlBTUwgcGFyc2VyIGluc3RlYWQgb2YgZGlyZWN0IGdyYXktbWF0dGVyXG4gICAgICBsZXQgcGFyc2VkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkID0gU2VjdXJlWWFtbFBhcnNlci5zYWZlTWF0dGVyKGZpbGVDb250ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFNlY3VyaXR5RXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoYFNlY3VyaXR5IHRocmVhdCBkZXRlY3RlZCBpbiBwZXJzb25hICR7ZmlsZW5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gcGFyc2VkLmRhdGEgYXMgUGVyc29uYU1ldGFkYXRhO1xuICAgICAgY29uc3QgY29udGVudCA9IHBhcnNlZC5jb250ZW50O1xuICAgICAgXG4gICAgICBpZiAoIW1ldGFkYXRhLm5hbWUpIHtcbiAgICAgICAgbWV0YWRhdGEubmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZW5hbWUsICcubWQnKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gR2VuZXJhdGUgdW5pcXVlIElEIGlmIG5vdCBwcmVzZW50XG4gICAgICBsZXQgdW5pcXVlSWQgPSBtZXRhZGF0YS51bmlxdWVfaWQ7XG4gICAgICBpZiAoIXVuaXF1ZUlkKSB7XG4gICAgICAgIGNvbnN0IGF1dGhvckZvcklkID0gbWV0YWRhdGEuYXV0aG9yIHx8IGdldEN1cnJlbnRVc2VyKCkgfHwgdW5kZWZpbmVkO1xuICAgICAgICB1bmlxdWVJZCA9IGdlbmVyYXRlVW5pcXVlSWQobWV0YWRhdGEubmFtZSwgYXV0aG9yRm9ySWQpO1xuICAgICAgICBsb2dnZXIuZGVidWcoYEdlbmVyYXRlZCB1bmlxdWUgSUQgZm9yICR7bWV0YWRhdGEubmFtZX06ICR7dW5pcXVlSWR9YCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgbWV0YWRhdGEgZmllbGRzXG4gICAgICB0aGlzLnNldERlZmF1bHRNZXRhZGF0YShtZXRhZGF0YSk7XG4gICAgICBcbiAgICAgIGNvbnN0IHBlcnNvbmE6IFBlcnNvbmEgPSB7XG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBjb250ZW50LFxuICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgdW5pcXVlX2lkOiB1bmlxdWVJZCxcbiAgICAgIH07XG4gICAgICBcbiAgICAgIHJldHVybiBwZXJzb25hO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEVycm9yIGxvYWRpbmcgcGVyc29uYSAke2ZpbGVuYW1lfTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTYXZlIGEgcGVyc29uYSB0byBmaWxlXG4gICAqL1xuICBhc3luYyBzYXZlUGVyc29uYShwZXJzb25hOiBQZXJzb25hKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5wZXJzb25hc0RpciwgcGVyc29uYS5maWxlbmFtZSk7XG4gICAgXG4gICAgLy8gVXNlIHNlY3VyZSBZQU1MIHN0cmluZ2lmaWNhdGlvblxuICAgIGNvbnN0IHNlY3VyZVBhcnNlciA9IFNlY3VyZVlhbWxQYXJzZXIuY3JlYXRlU2VjdXJlTWF0dGVyUGFyc2VyKCk7XG4gICAgY29uc3QgZmlsZUNvbnRlbnQgPSBzZWN1cmVQYXJzZXIuc3RyaW5naWZ5KHBlcnNvbmEuY29udGVudCwgcGVyc29uYS5tZXRhZGF0YSk7XG4gICAgXG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGZpbGVQYXRoLCBmaWxlQ29udGVudCwgJ3V0Zi04Jyk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBEZWxldGUgYSBwZXJzb25hIGZpbGVcbiAgICovXG4gIGFzeW5jIGRlbGV0ZVBlcnNvbmEoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIsIGZpbGVuYW1lKTtcbiAgICBhd2FpdCBmcy51bmxpbmsoZmlsZVBhdGgpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBwZXJzb25hIGZpbGUgZXhpc3RzXG4gICAqL1xuICBhc3luYyBwZXJzb25hRXhpc3RzKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5wZXJzb25hc0RpciwgZmlsZW5hbWUpO1xuICAgICAgYXdhaXQgZnMuYWNjZXNzKGZpbGVQYXRoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFNldCBkZWZhdWx0IG1ldGFkYXRhIHZhbHVlc1xuICAgKi9cbiAgcHJpdmF0ZSBzZXREZWZhdWx0TWV0YWRhdGEobWV0YWRhdGE6IFBlcnNvbmFNZXRhZGF0YSk6IHZvaWQge1xuICAgIGlmICghbWV0YWRhdGEuY2F0ZWdvcnkpIG1ldGFkYXRhLmNhdGVnb3J5ID0gJ2dlbmVyYWwnO1xuICAgIGlmICghbWV0YWRhdGEuYWdlX3JhdGluZykgbWV0YWRhdGEuYWdlX3JhdGluZyA9ICdhbGwnO1xuICAgIGlmICghbWV0YWRhdGEuY29udGVudF9mbGFncykgbWV0YWRhdGEuY29udGVudF9mbGFncyA9IFtdO1xuICAgIGlmIChtZXRhZGF0YS5haV9nZW5lcmF0ZWQgPT09IHVuZGVmaW5lZCkgbWV0YWRhdGEuYWlfZ2VuZXJhdGVkID0gZmFsc2U7XG4gICAgaWYgKCFtZXRhZGF0YS5nZW5lcmF0aW9uX21ldGhvZCkgbWV0YWRhdGEuZ2VuZXJhdGlvbl9tZXRob2QgPSAnaHVtYW4nO1xuICAgIGlmICghbWV0YWRhdGEucHJpY2UpIG1ldGFkYXRhLnByaWNlID0gJ2ZyZWUnO1xuICAgIGlmICghbWV0YWRhdGEubGljZW5zZSkgbWV0YWRhdGEubGljZW5zZSA9ICdDQy1CWS1TQS00LjAnO1xuICB9XG59Il19
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYUxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wZXJzb25hL1BlcnNvbmFMb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUc3QixPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpFLE1BQU0sT0FBTyxhQUFhO0lBQ2hCLFdBQVcsQ0FBUztJQUNwQixnQkFBZ0IsQ0FBbUI7SUFFM0MsWUFBWSxXQUFvQjtRQUM5QixtREFBbUQ7UUFDbkQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZELDREQUE0RDtRQUM1RCxpREFBaUQ7UUFDakQsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFtQztRQUMvQywwQkFBMEI7UUFDMUIsTUFBTSxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXhDLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFt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Q0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFnQjtRQUNsQyxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdkQsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGtCQUFrQixDQUFDLFFBQXlCO1FBQ2xELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUTtZQUFFLFFBQVEsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVTtZQUFFLFFBQVEsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYTtZQUFFLFFBQVEsQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3pELElBQUksUUFBUSxDQUFDLFlBQVksS0FBSyxTQUFTO1lBQUUsUUFBUSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDdkUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUI7WUFBRSxRQUFRLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSztZQUFFLFFBQVEsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1FBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTztZQUFFLFFBQVEsQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDO0lBQzNELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGVyc29uYSBsb2FkaW5nIGFuZCBmaWxlIG1hbmFnZW1lbnRcbiAqL1xuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy9wcm9taXNlcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IG1hdHRlciBmcm9tICdncmF5LW1hdHRlcic7XG5pbXBvcnQgeyBQZXJzb25hLCBQZXJzb25hTWV0YWRhdGEgfSBmcm9tICcuLi90eXBlcy9wZXJzb25hLmpzJztcbmltcG9ydCB7IGVuc3VyZURpcmVjdG9yeSwgZ2VuZXJhdGVVbmlxdWVJZCB9IGZyb20gJy4uL3V0aWxzL2ZpbGVzeXN0ZW0uanMnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlFcnJvciB9IGZyb20gJy4uL2Vycm9ycy9TZWN1cml0eUVycm9yLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBQb3J0Zm9saW9NYW5hZ2VyLCBFbGVtZW50VHlwZSB9IGZyb20gJy4uL3BvcnRmb2xpby9Qb3J0Zm9saW9NYW5hZ2VyLmpzJztcbmltcG9ydCB7IEZpbGVMb2NrTWFuYWdlciB9IGZyb20gJy4uL3NlY3VyaXR5L2ZpbGVMb2NrTWFuYWdlci5qcyc7XG5cbmV4cG9ydCBjbGFzcyBQZXJzb25hTG9hZGVyIHtcbiAgcHJpdmF0ZSBwZXJzb25hc0Rpcjogc3RyaW5nO1xuICBwcml2YXRlIHBvcnRmb2xpb01hbmFnZXI6IFBvcnRmb2xpb01hbmFnZXI7XG4gIFxuICBjb25zdHJ1Y3RvcihwZXJzb25hc0Rpcj86IHN0cmluZykge1xuICAgIC8vIFVzZSBQb3J0Zm9saW9NYW5hZ2VyIGZvciBuZXcgcG9ydGZvbGlvIHN0cnVjdHVyZVxuICAgIHRoaXMucG9ydGZvbGlvTWFuYWdlciA9IFBvcnRmb2xpb01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAvLyBJZiBwZXJzb25hc0RpciBpcyBwcm92aWRlZCwgaXQncyBmb3IgbGVnYWN5IGNvbXBhdGliaWxpdHlcbiAgICAvLyBPdGhlcndpc2UgdXNlIHRoZSBwb3J0Zm9saW8gcGVyc29uYXMgZGlyZWN0b3J5XG4gICAgdGhpcy5wZXJzb25hc0RpciA9IHBlcnNvbmFzRGlyIHx8IHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLlBFUlNPTkEpO1xuICB9XG4gIFxuICAvKipcbiAgICogTG9hZCBhbGwgcGVyc29uYXMgZnJvbSB0aGUgcGVyc29uYXMgZGlyZWN0b3J5XG4gICAqL1xuICBhc3luYyBsb2FkQWxsKGdldEN1cnJlbnRVc2VyOiAoKSA9PiBzdHJpbmcgfCBudWxsKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBQZXJzb25hPj4ge1xuICAgIC8vIEVuc3VyZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAgYXdhaXQgZW5zdXJlRGlyZWN0b3J5KHRoaXMucGVyc29uYXNEaXIpO1xuICAgIFxuICAgIGNvbnN0IHBlcnNvbmFzID0gbmV3IE1hcDxzdHJpbmcsIFBlcnNvbmE+KCk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcih0aGlzLnBlcnNvbmFzRGlyKTtcbiAgICAgIGNvbnN0IG1hcmtkb3duRmlsZXMgPSBmaWxlcy5maWx0ZXIoZmlsZSA9PiBmaWxlLmVuZHNXaXRoKCcubWQnKSk7XG4gICAgICBcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBtYXJrZG93bkZpbGVzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGVyc29uYSA9IGF3YWl0IHRoaXMubG9hZFBlcnNvbmEoZmlsZSwgZ2V0Q3VycmVudFVzZXIpO1xuICAgICAgICAgIGlmIChwZXJzb25hKSB7XG4gICAgICAgICAgICBwZXJzb25hcy5zZXQoZmlsZSwgcGVyc29uYSk7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoYExvYWRlZCBwZXJzb25hOiAke3BlcnNvbmEubWV0YWRhdGEubmFtZX0gKCR7cGVyc29uYS51bmlxdWVfaWR9KWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoYEVycm9yIGxvYWRpbmcgcGVyc29uYSAke2ZpbGV9OmAsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEVycm9yIHJlYWRpbmcgcGVyc29uYXMgZGlyZWN0b3J5OmAsIGVycm9yKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHBlcnNvbmFzO1xuICB9XG4gIFxuICAvKipcbiAgICogTG9hZCBhIHNpbmdsZSBwZXJzb25hIGZyb20gZmlsZVxuICAgKi9cbiAgYXN5bmMgbG9hZFBlcnNvbmEoZmlsZW5hbWU6IHN0cmluZywgZ2V0Q3VycmVudFVzZXI6ICgpID0+IHN0cmluZyB8IG51bGwpOiBQcm9taXNlPFBlcnNvbmEgfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIsIGZpbGVuYW1lKTtcbiAgICAgIGNvbnN0IGZpbGVDb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoZmlsZVBhdGgsICd1dGYtOCcpO1xuICAgICAgXG4gICAgICAvLyBVc2Ugc2VjdXJlIFlBTUwgcGFyc2VyIGluc3RlYWQgb2YgZGlyZWN0IGdyYXktbWF0dGVyXG4gICAgICBsZXQgcGFyc2VkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkID0gU2VjdXJlWWFtbFBhcnNlci5zYWZlTWF0dGVyKGZpbGVDb250ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFNlY3VyaXR5RXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoYFNlY3VyaXR5IHRocmVhdCBkZXRlY3RlZCBpbiBwZXJzb25hICR7ZmlsZW5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gcGFyc2VkLmRhdGEgYXMgUGVyc29uYU1ldGFkYXRhO1xuICAgICAgY29uc3QgY29udGVudCA9IHBhcnNlZC5jb250ZW50O1xuICAgICAgXG4gICAgICBpZiAoIW1ldGFkYXRhLm5hbWUpIHtcbiAgICAgICAgbWV0YWRhdGEubmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZW5hbWUsICcubWQnKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gR2VuZXJhdGUgdW5pcXVlIElEIGlmIG5vdCBwcmVzZW50XG4gICAgICBsZXQgdW5pcXVlSWQgPSBtZXRhZGF0YS51bmlxdWVfaWQ7XG4gICAgICBpZiAoIXVuaXF1ZUlkKSB7XG4gICAgICAgIGNvbnN0IGF1dGhvckZvcklkID0gbWV0YWRhdGEuYXV0aG9yIHx8IGdldEN1cnJlbnRVc2VyKCkgfHwgdW5kZWZpbmVkO1xuICAgICAgICB1bmlxdWVJZCA9IGdlbmVyYXRlVW5pcXVlSWQobWV0YWRhdGEubmFtZSwgYXV0aG9yRm9ySWQpO1xuICAgICAgICBsb2dnZXIuZGVidWcoYEdlbmVyYXRlZCB1bmlxdWUgSUQgZm9yICR7bWV0YWRhdGEubmFtZX06ICR7dW5pcXVlSWR9YCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgbWV0YWRhdGEgZmllbGRzXG4gICAgICB0aGlzLnNldERlZmF1bHRNZXRhZGF0YShtZXRhZGF0YSk7XG4gICAgICBcbiAgICAgIGNvbnN0IHBlcnNvbmE6IFBlcnNvbmEgPSB7XG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBjb250ZW50LFxuICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgdW5pcXVlX2lkOiB1bmlxdWVJZCxcbiAgICAgIH07XG4gICAgICBcbiAgICAgIHJldHVybiBwZXJzb25hO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEVycm9yIGxvYWRpbmcgcGVyc29uYSAke2ZpbGVuYW1lfTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTYXZlIGEgcGVyc29uYSB0byBmaWxlXG4gICAqL1xuICBhc3luYyBzYXZlUGVyc29uYShwZXJzb25hOiBQZXJzb25hKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5wZXJzb25hc0RpciwgcGVyc29uYS5maWxlbmFtZSk7XG4gICAgXG4gICAgLy8gVXNlIHNlY3VyZSBZQU1MIHN0cmluZ2lmaWNhdGlvblxuICAgIGNvbnN0IHNlY3VyZVBhcnNlciA9IFNlY3VyZVlhbWxQYXJzZXIuY3JlYXRlU2VjdXJlTWF0dGVyUGFyc2VyKCk7XG4gICAgY29uc3QgZmlsZUNvbnRlbnQgPSBzZWN1cmVQYXJzZXIuc3RyaW5naWZ5KHBlcnNvbmEuY29udGVudCwgcGVyc29uYS5tZXRhZGF0YSk7XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYOiBSZXBsYWNlIGRpcmVjdCBmaWxlIHdyaXRlIHdpdGggYXRvbWljIG9wZXJhdGlvblxuICAgIC8vIEZJWEVEOiBDVkUtMjAyNS1YWFhYIC0gTm9uLWF0b21pYyBmaWxlIHdyaXRlIGluIHBlcnNvbmEgc2F2ZSBvcGVyYXRpb25cbiAgICAvLyBPcmlnaW5hbCBpc3N1ZTogTGluZSAxMjAgdXNlZCBkaXJlY3QgZnMud3JpdGVGaWxlIGluc3RlYWQgb2YgYXRvbWljIG9wZXJhdGlvblxuICAgIC8vIFNlY3VyaXR5IGltcGFjdDogUmFjZSBjb25kaXRpb25zIGNvdWxkIGNhdXNlIGRhdGEgY29ycnVwdGlvbiBvciBwYXJ0aWFsIHdyaXRlc1xuICAgIC8vIEZpeDogUmVwbGFjZWQgd2l0aCBGaWxlTG9ja01hbmFnZXIuYXRvbWljV3JpdGVGaWxlIGZvciBndWFyYW50ZWVkIGF0b21pY2l0eVxuICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUoZmlsZVBhdGgsIGZpbGVDb250ZW50LCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogRGVsZXRlIGEgcGVyc29uYSBmaWxlXG4gICAqL1xuICBhc3luYyBkZWxldGVQZXJzb25hKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLnBlcnNvbmFzRGlyLCBmaWxlbmFtZSk7XG4gICAgYXdhaXQgZnMudW5saW5rKGZpbGVQYXRoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgcGVyc29uYSBmaWxlIGV4aXN0c1xuICAgKi9cbiAgYXN5bmMgcGVyc29uYUV4aXN0cyhmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIsIGZpbGVuYW1lKTtcbiAgICAgIGF3YWl0IGZzLmFjY2VzcyhmaWxlUGF0aCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCBtZXRhZGF0YSB2YWx1ZXNcbiAgICovXG4gIHByaXZhdGUgc2V0RGVmYXVsdE1ldGFkYXRhKG1ldGFkYXRhOiBQZXJzb25hTWV0YWRhdGEpOiB2b2lkIHtcbiAgICBpZiAoIW1ldGFkYXRhLmNhdGVnb3J5KSBtZXRhZGF0YS5jYXRlZ29yeSA9ICdnZW5lcmFsJztcbiAgICBpZiAoIW1ldGFkYXRhLmFnZV9yYXRpbmcpIG1ldGFkYXRhLmFnZV9yYXRpbmcgPSAnYWxsJztcbiAgICBpZiAoIW1ldGFkYXRhLmNvbnRlbnRfZmxhZ3MpIG1ldGFkYXRhLmNvbnRlbnRfZmxhZ3MgPSBbXTtcbiAgICBpZiAobWV0YWRhdGEuYWlfZ2VuZXJhdGVkID09PSB1bmRlZmluZWQpIG1ldGFkYXRhLmFpX2dlbmVyYXRlZCA9IGZhbHNlO1xuICAgIGlmICghbWV0YWRhdGEuZ2VuZXJhdGlvbl9tZXRob2QpIG1ldGFkYXRhLmdlbmVyYXRpb25fbWV0aG9kID0gJ2h1bWFuJztcbiAgICBpZiAoIW1ldGFkYXRhLnByaWNlKSBtZXRhZGF0YS5wcmljZSA9ICdmcmVlJztcbiAgICBpZiAoIW1ldGFkYXRhLmxpY2Vuc2UpIG1ldGFkYXRhLmxpY2Vuc2UgPSAnQ0MtQlktU0EtNC4wJztcbiAgfVxufSJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"PersonaImporter.d.ts","sourceRoot":"","sources":["../../../src/persona/export-import/PersonaImporter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,OAAO,EAAmB,MAAM,wBAAwB,CAAC;AASlE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,qBAAa,eAAe;IAExB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,WAAW;gBADX,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAAG,IAAI;IAGpC;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;IA+CrH;;OAEG;YACW,cAAc;IA+B5B;;OAEG;YACW,gBAAgB;IAgB9B;;OAEG;YACW,kBAAkB;IAmChC;;OAEG;YACW,YAAY;IA4B1B;;OAEG;YACW,uBAAuB;IA8DrC;;OAEG;YACW,yBAAyB;IAuBvC;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAUhB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,OAAO,CAAC,wBAAwB;CAejC"}
1
+ {"version":3,"file":"PersonaImporter.d.ts","sourceRoot":"","sources":["../../../src/persona/export-import/PersonaImporter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,OAAO,EAAmB,MAAM,wBAAwB,CAAC;AAUlE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,qBAAa,eAAe;IAExB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,WAAW;gBADX,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAAG,IAAI;IAGpC;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;IA+CrH;;OAEG;YACW,cAAc;IA+B5B;;OAEG;YACW,gBAAgB;IAgB9B;;OAEG;YACW,kBAAkB;IAmChC;;OAEG;YACW,YAAY;IA4B1B;;OAEG;YACW,uBAAuB;IAqErC;;OAEG;YACW,yBAAyB;IAsCvC;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAUhB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,OAAO,CAAC,wBAAwB;CAejC"}