@dollhousemcp/mcp-server 2.0.12-rc.9 → 2.0.13

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 (69) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/README.md +4 -4
  3. package/README.md.backup +5 -5
  4. package/README.npm.md +4 -4
  5. package/dist/di/Container.d.ts +14 -0
  6. package/dist/di/Container.d.ts.map +1 -1
  7. package/dist/di/Container.js +43 -26
  8. package/dist/elements/agents/AgentManager.d.ts +11 -4
  9. package/dist/elements/agents/AgentManager.d.ts.map +1 -1
  10. package/dist/elements/agents/AgentManager.js +38 -11
  11. package/dist/elements/base/BaseElementManager.d.ts +10 -0
  12. package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
  13. package/dist/elements/base/BaseElementManager.js +26 -1
  14. package/dist/elements/ensembles/EnsembleManager.d.ts +1 -0
  15. package/dist/elements/ensembles/EnsembleManager.d.ts.map +1 -1
  16. package/dist/elements/ensembles/EnsembleManager.js +13 -2
  17. package/dist/elements/templates/Template.d.ts +33 -1
  18. package/dist/elements/templates/Template.d.ts.map +1 -1
  19. package/dist/elements/templates/Template.js +74 -15
  20. package/dist/elements/templates/TemplateManager.d.ts.map +1 -1
  21. package/dist/elements/templates/TemplateManager.js +8 -1
  22. package/dist/generated/version.d.ts +2 -2
  23. package/dist/generated/version.d.ts.map +1 -1
  24. package/dist/generated/version.js +3 -3
  25. package/dist/handlers/element-crud/createElement.js +2 -2
  26. package/dist/handlers/mcp-aql/SchemaDispatcher.d.ts.map +1 -1
  27. package/dist/handlers/mcp-aql/SchemaDispatcher.js +8 -1
  28. package/dist/handlers/strategies/EnsembleActivationStrategy.d.ts +3 -0
  29. package/dist/handlers/strategies/EnsembleActivationStrategy.d.ts.map +1 -1
  30. package/dist/handlers/strategies/EnsembleActivationStrategy.js +48 -9
  31. package/dist/index.js +19 -13
  32. package/dist/portfolio/DefaultElementProvider.d.ts +8 -0
  33. package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
  34. package/dist/portfolio/DefaultElementProvider.js +43 -1
  35. package/dist/security/contentValidator.d.ts +15 -0
  36. package/dist/security/contentValidator.d.ts.map +1 -1
  37. package/dist/security/contentValidator.js +40 -2
  38. package/dist/utils/TemplateRenderer.d.ts +9 -0
  39. package/dist/utils/TemplateRenderer.d.ts.map +1 -1
  40. package/dist/utils/TemplateRenderer.js +21 -1
  41. package/dist/web/console/IngestRoutes.d.ts.map +1 -1
  42. package/dist/web/console/IngestRoutes.js +193 -59
  43. package/dist/web/console/SessionNames.d.ts +18 -5
  44. package/dist/web/console/SessionNames.d.ts.map +1 -1
  45. package/dist/web/console/SessionNames.js +63 -8
  46. package/dist/web/console/StaleProcessRecovery.d.ts.map +1 -1
  47. package/dist/web/console/StaleProcessRecovery.js +5 -4
  48. package/dist/web/console/UnifiedConsole.js +3 -3
  49. package/dist/web/console/consoleToken.js +3 -3
  50. package/dist/web/portDiscovery.d.ts +1 -1
  51. package/dist/web/portDiscovery.d.ts.map +1 -1
  52. package/dist/web/portDiscovery.js +2 -2
  53. package/dist/web/public/app.js +65 -11
  54. package/dist/web/public/index.html +2 -0
  55. package/dist/web/public/logs.js +24 -2
  56. package/dist/web/public/metrics.js +22 -4
  57. package/dist/web/public/sessions.js +55 -8
  58. package/dist/web/public/setup.js +11 -2
  59. package/dist/web/public/styles.css +12 -0
  60. package/dist/web/routes/permissionRoutes.js +2 -2
  61. package/dist/web/routes/setupRoutes.d.ts +67 -1
  62. package/dist/web/routes/setupRoutes.d.ts.map +1 -1
  63. package/dist/web/routes/setupRoutes.js +298 -6
  64. package/dist/web/routes.d.ts.map +1 -1
  65. package/dist/web/routes.js +4 -2
  66. package/dist/web/server.d.ts.map +1 -1
  67. package/dist/web/server.js +14 -5
  68. package/package.json +5 -3
  69. package/server.json +2 -2
@@ -14,7 +14,7 @@ import { logger } from '../../utils/logger.js';
14
14
  * Famous puppets, marionettes, and puppet characters from around the world.
15
15
  * Order doesn't matter — the pool is shuffled on startup.
16
16
  */
17
- const ALL_PUPPET_NAMES = [
17
+ export const ALL_PUPPET_NAMES = [
18
18
  // Classic & traditional
19
19
  'Punch',
20
20
  'Judy',
@@ -100,13 +100,68 @@ function shuffleArray(arr) {
100
100
  /** Shuffled copy of the name pool — randomized on each process start */
101
101
  const PUPPET_NAMES = shuffleArray([...ALL_PUPPET_NAMES]);
102
102
  /**
103
- * Pick a random puppet name from the pool, independent of the session
104
- * name assignment. Used by the console token module (#1780) to generate
105
- * a friendly default name for newly created tokens. Does not reserve the
106
- * name — multiple callers can receive the same value.
103
+ * Iconic attire and accessories drawn from famous dolls, puppets, and
104
+ * theatrical characters throughout history. Used to name console tokens
105
+ * so they never collide with the session puppet-name pool (#1871).
106
+ *
107
+ * Names evoke costume pieces — a token is something you wear or carry,
108
+ * not a person.
109
+ */
110
+ export const ALL_TOKEN_NAMES = [
111
+ // Victorian & theatrical
112
+ 'Top Hat',
113
+ 'Monocle',
114
+ 'Trench Coat',
115
+ 'Opera Cape',
116
+ 'Opera Gloves',
117
+ 'Velvet Cloak',
118
+ 'Lace Collar',
119
+ 'Silk Cravat',
120
+ 'Waistcoat',
121
+ 'Gilt Button',
122
+ // Phantom, masks, mystery
123
+ 'Half Mask',
124
+ 'Domino Mask',
125
+ 'Feathered Mask',
126
+ // Punch & Judy / Harlequin
127
+ 'Jester Bells',
128
+ 'Diamond Suit',
129
+ 'Bell Cap',
130
+ 'Slapstick',
131
+ 'Red Nose',
132
+ // Puppet traditions
133
+ 'Marionette Strings',
134
+ 'Cracked Porcelain',
135
+ 'Papier-Mâché',
136
+ // Classic dolls & characters
137
+ 'Pink Corvette',
138
+ 'Red Yarn Hair',
139
+ 'Sailor Suit',
140
+ 'Yellow Hat',
141
+ 'Ruby Slippers',
142
+ 'Glass Slipper',
143
+ 'Blue Ribbon',
144
+ 'Striped Stockings',
145
+ // Wizard / witch / fantasy
146
+ 'Pointed Hat',
147
+ 'Broomstick',
148
+ 'Silver Wand',
149
+ 'Tin Crown',
150
+ 'Straw Hat',
151
+ // Adventure & mystery
152
+ 'Deerstalker',
153
+ 'Magnifying Glass',
154
+ 'Feathered Cap',
155
+ 'Silver Buckle',
156
+ 'Wicker Basket',
157
+ ];
158
+ /**
159
+ * Pick a random token name from the attire pool.
160
+ * Used by the console token module to name newly created tokens (#1871).
161
+ * Drawn from a separate pool to avoid collision with session puppet names.
107
162
  */
108
- export function pickRandomPuppetName() {
109
- return ALL_PUPPET_NAMES[randomInt(ALL_PUPPET_NAMES.length)];
163
+ export function pickRandomTokenName() {
164
+ return ALL_TOKEN_NAMES[randomInt(ALL_TOKEN_NAMES.length)];
110
165
  }
111
166
  /**
112
167
  * Canonical colors for each puppet character.
@@ -263,4 +318,4 @@ export class SessionNamePool {
263
318
  this.cooldown = this.cooldown.filter(c => (now - c.releasedAt) < NAME_COOLDOWN_MS);
264
319
  }
265
320
  }
266
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Vzc2lvbk5hbWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dlYi9jb25zb2xlL1Nlc3Npb25OYW1lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQzs7O0dBR0c7QUFDSCxNQUFNLGdCQUFnQixHQUFzQjtJQUMxQyx3QkFBd0I7SUFDeEIsT0FBTztJQUNQLE1BQU07SUFDTixXQUFXO0lBQ1gsWUFBWTtJQUNaLFlBQVk7SUFDWixTQUFTO0lBQ1QsVUFBVTtJQUVWLHVCQUF1QjtJQUN2QixRQUFRO0lBQ1IsT0FBTztJQUNQLFFBQVE7SUFDUixPQUFPO0lBQ1AsU0FBUztJQUNULE9BQU87SUFDUCxTQUFTO0lBQ1QsU0FBUztJQUVULHdCQUF3QjtJQUN4QixPQUFPO0lBQ1AsT0FBTztJQUVQLGtCQUFrQjtJQUNsQixPQUFPO0lBQ1AsV0FBVztJQUVYLGdCQUFnQjtJQUNoQixRQUFRO0lBQ1IsTUFBTTtJQUNOLE9BQU87SUFDUCxNQUFNO0lBQ04sT0FBTztJQUVQLDBCQUEwQjtJQUMxQixVQUFVO0lBQ1YsVUFBVTtJQUNWLFFBQVE7SUFDUixNQUFNO0lBRU4seUJBQXlCO0lBQ3pCLFNBQVM7SUFDVCxRQUFRO0lBQ1IsV0FBVztJQUNYLFlBQVk7SUFDWixXQUFXO0lBRVgsdUJBQXVCO0lBQ3ZCLE9BQU87SUFDUCxTQUFTO0lBQ1QsUUFBUTtJQUNSLFFBQVE7SUFFUix3QkFBd0I7SUFDeEIsWUFBWTtJQUNaLGNBQWM7SUFDZCxXQUFXO0lBQ1gsV0FBVztJQUVYLHdCQUF3QjtJQUN4QixNQUFNO0lBRU4sZUFBZTtJQUNmLE9BQU87SUFDUCxPQUFPO0lBRVAsZ0JBQWdCO0lBQ2hCLFFBQVE7SUFDUixLQUFLO0lBQ0wsU0FBUztJQUNULE9BQU87SUFDUCxVQUFVO0lBQ1YsT0FBTztJQUNQLE1BQU07SUFDTixPQUFPO0lBQ1AsT0FBTztJQUNQLFFBQVE7SUFDUixZQUFZO0lBQ1osUUFBUTtJQUNSLE9BQU87SUFDUCxPQUFPO0lBQ1AsVUFBVTtDQUNYLENBQUM7QUFFRiwyREFBMkQ7QUFDM0QsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFFL0Msd0VBQXdFO0FBQ3hFLFNBQVMsWUFBWSxDQUFJLEdBQVE7SUFDL0IsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDeEMsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsd0VBQXdFO0FBQ3hFLE1BQU0sWUFBWSxHQUFhLFlBQVksQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBRW5FOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQjtJQUNsQyxPQUFPLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzlELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLGFBQWEsR0FBMkI7SUFDNUMsT0FBTyxFQUFTLFNBQVMsRUFBRSxzQkFBc0I7SUFDakQsTUFBTSxFQUFVLFNBQVMsRUFBRSxhQUFhO0lBQ3hDLFdBQVcsRUFBSyxTQUFTLEVBQUUsaUNBQWlDO0lBQzVELFlBQVksRUFBSSxTQUFTLEVBQUUscURBQXFEO0lBQ2hGLFlBQVksRUFBSSxTQUFTLEVBQUUsc0NBQXNDO0lBQ2pFLFNBQVMsRUFBTyxTQUFTLEVBQUUsZUFBZTtJQUMxQyxVQUFVLEVBQU0sU0FBUyxFQUFFLGtCQUFrQjtJQUM3QyxRQUFRLEVBQVEsU0FBUyxFQUFFLGFBQWE7SUFDeEMsT0FBTyxFQUFTLFNBQVMsRUFBRSwyQkFBMkI7SUFDdEQsUUFBUSxFQUFRLFNBQVMsRUFBRSxtQkFBbUI7SUFDOUMsT0FBTyxFQUFTLFNBQVMsRUFBRSxhQUFhO0lBQ3hDLFNBQVMsRUFBTyxTQUFTLEVBQUUsY0FBYztJQUN6QyxPQUFPLEVBQVMsU0FBUyxFQUFFLDJCQUEyQjtJQUN0RCxTQUFTLEVBQU8sU0FBUyxFQUFFLG1CQUFtQjtJQUM5QyxTQUFTLEVBQU8sU0FBUyxFQUFFLGFBQWE7SUFDeEMsT0FBTyxFQUFTLFNBQVMsRUFBRSx1QkFBdUI7SUFDbEQsT0FBTyxFQUFTLFNBQVMsRUFBRSxzQkFBc0I7SUFDakQsT0FBTyxFQUFTLFNBQVMsRUFBRSxjQUFjO0lBQ3pDLFdBQVcsRUFBSyxTQUFTLEVBQUUsc0JBQXNCO0lBQ2pELFFBQVEsRUFBUSxTQUFTLEVBQUUsYUFBYTtJQUN4QyxNQUFNLEVBQVUsU0FBUyxFQUFFLGNBQWM7SUFDekMsT0FBTyxFQUFTLFNBQVMsRUFBRSxjQUFjO0lBQ3pDLE1BQU0sRUFBVSxTQUFTLEVBQUUsY0FBYztJQUN6QyxPQUFPLEVBQVMsU0FBUyxFQUFFLG1CQUFtQjtJQUM5QyxVQUFVLEVBQU0sU0FBUyxFQUFFLFlBQVk7SUFDdkMsVUFBVSxFQUFNLFNBQVMsRUFBRSx3Q0FBd0M7SUFDbkUsUUFBUSxFQUFRLFNBQVMsRUFBRSxTQUFTO0lBQ3BDLE1BQU0sRUFBVSxTQUFTLEVBQUUsY0FBYztJQUN6QyxTQUFTLEVBQU8sU0FBUyxFQUFFLGdCQUFnQjtJQUMzQyxRQUFRLEVBQVEsU0FBUyxFQUFFLGdEQUFnRDtJQUMzRSxXQUFXLEVBQUssU0FBUyxFQUFFLGFBQWE7SUFDeEMsWUFBWSxFQUFJLFNBQVMsRUFBRSxhQUFhO0lBQ3hDLFdBQVcsRUFBSyxTQUFTLEVBQUUsaUJBQWlCO0lBQzVDLE9BQU8sRUFBUyxTQUFTLEVBQUUsa0RBQWtEO0lBQzdFLFNBQVMsRUFBTyxTQUFTLEVBQUUsZUFBZTtJQUMxQyxRQUFRLEVBQVEsU0FBUyxFQUFFLGdCQUFnQjtJQUMzQyxRQUFRLEVBQVEsU0FBUyxFQUFFLHdDQUF3QztJQUNuRSxZQUFZLEVBQUksU0FBUyxFQUFFLGVBQWU7SUFDMUMsY0FBYyxFQUFFLFNBQVMsRUFBRSxZQUFZO0lBQ3ZDLFdBQVcsRUFBSyxTQUFTLEVBQUUsa0JBQWtCO0lBQzdDLFdBQVcsRUFBSyxTQUFTLEVBQUUsY0FBYztJQUN6QyxNQUFNLEVBQVUsU0FBUyxFQUFFLGdEQUFnRDtJQUMzRSxPQUFPLEVBQVMsU0FBUyxFQUFFLDhDQUE4QztJQUN6RSxPQUFPLEVBQVMsU0FBUyxFQUFFLG9EQUFvRDtJQUUvRSxnQkFBZ0I7SUFDaEIsUUFBUSxFQUFRLFNBQVMsRUFBRSxjQUFjO0lBQ3pDLEtBQUssRUFBVyxTQUFTLEVBQUUsV0FBVztJQUN0QyxTQUFTLEVBQU8sU0FBUyxFQUFFLFlBQVk7SUFDdkMsT0FBTyxFQUFTLFNBQVMsRUFBRSxjQUFjO0lBQ3pDLFVBQVUsRUFBTSxTQUFTLEVBQUUsYUFBYTtJQUN4QyxPQUFPLEVBQVMsU0FBUyxFQUFFLDRCQUE0QjtJQUN2RCxNQUFNLEVBQVUsU0FBUyxFQUFFLGtDQUFrQztJQUM3RCxPQUFPLEVBQVMsU0FBUyxFQUFFLDJCQUEyQjtJQUN0RCxPQUFPLEVBQVMsU0FBUyxFQUFFLDBCQUEwQjtJQUNyRCxRQUFRLEVBQVEsU0FBUyxFQUFFLHVDQUF1QztJQUNsRSxZQUFZLEVBQUksU0FBUyxFQUFFLHNCQUFzQjtJQUNqRCxRQUFRLEVBQVEsU0FBUyxFQUFFLGtCQUFrQjtJQUM3QyxPQUFPLEVBQVMsU0FBUyxFQUFFLHFCQUFxQjtJQUNoRCxPQUFPLEVBQVMsU0FBUyxFQUFFLFlBQVk7SUFDdkMsVUFBVSxFQUFNLFNBQVMsRUFBRSxhQUFhO0NBQ3pDLENBQUM7QUFFRixnRUFBZ0U7QUFDaEUsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsWUFBWTtBQU9qRDs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBQzFCLG9FQUFvRTtJQUNuRCxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDdEQsdUNBQXVDO0lBQ3RCLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUMzRCwwQ0FBMEM7SUFDbEMsUUFBUSxHQUFvQixFQUFFLENBQUM7SUFFdkM7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsU0FBaUIsRUFBRSxRQUFRLEdBQUcsS0FBSztRQUN4QyxvQkFBb0I7UUFDcEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFBSSxRQUFRO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFFOUIsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0Qix5REFBeUQ7UUFDekQsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5RCxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUNyQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQzdCLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDeEIsQ0FBQyxDQUFDLFFBQVEsSUFBSSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDckQsQ0FBQztRQUVGLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNqRCxNQUFNLENBQUMsS0FBSyxDQUFDLDRCQUE0QixhQUFhLFFBQVEsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUMzRSxPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDO1FBRUQsdUVBQXVFO1FBQ3ZFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUcsQ0FBQztZQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDL0MsTUFBTSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsTUFBTSxDQUFDLElBQUksUUFBUSxTQUFTLDJCQUEyQixDQUFDLENBQUM7WUFDbEcsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3JCLENBQUM7UUFFRCxzREFBc0Q7UUFDdEQsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkMsTUFBTSxDQUFDLElBQUksQ0FBQyx1REFBdUQsUUFBUSxTQUFTLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDakcsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTyxDQUFDLFNBQWlCO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUVsQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoQywrQ0FBK0M7UUFDL0MsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLElBQUksVUFBVSxTQUFTLGNBQWMsZ0JBQWdCLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUM3RyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPLENBQUMsU0FBaUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRLENBQUMsU0FBaUI7UUFDeEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDL0QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTTtRQUNKLE9BQU8sSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTyxjQUFjO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUM7SUFDckYsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGcmllbmRseSBzZXNzaW9uIG5hbWVzIGRyYXduIGZyb20gZmFtb3VzIHB1cHBldHMsIG1hcmlvbmV0dGVzLFxuICogYW5kIHB1cHBldCBjaGFyYWN0ZXJzIHRocm91Z2hvdXQgaGlzdG9yeS5cbiAqXG4gKiBOYW1lcyBhcmUgYXNzaWduZWQgZnJvbSBhIHBvb2wgYW5kIHJldHVybmVkIGFmdGVyIGEgY29vbGRvd24gcGVyaW9kXG4gKiB3aGVuIHNlc3Npb25zIGVuZC4gVGhpcyBrZWVwcyB0aGUgYWN0aXZlIHNlc3Npb24gbGlzdCBodW1hbi1yZWFkYWJsZVxuICogYW5kIG9uLWJyYW5kIGZvciBEb2xsaG91c2VNQ1AuXG4gKlxuICogQHNpbmNlIHYyLjEuMCDigJQgSXNzdWUgIzE3MDBcbiAqL1xuXG5pbXBvcnQgeyByYW5kb21JbnQgfSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuXG4vKipcbiAqIEZhbW91cyBwdXBwZXRzLCBtYXJpb25ldHRlcywgYW5kIHB1cHBldCBjaGFyYWN0ZXJzIGZyb20gYXJvdW5kIHRoZSB3b3JsZC5cbiAqIE9yZGVyIGRvZXNuJ3QgbWF0dGVyIOKAlCB0aGUgcG9vbCBpcyBzaHVmZmxlZCBvbiBzdGFydHVwLlxuICovXG5jb25zdCBBTExfUFVQUEVUX05BTUVTOiByZWFkb25seSBzdHJpbmdbXSA9IFtcbiAgLy8gQ2xhc3NpYyAmIHRyYWRpdGlvbmFsXG4gICdQdW5jaCcsXG4gICdKdWR5JyxcbiAgJ1Bpbm9jY2hpbycsXG4gICdQZXRyb3VjaGthJyxcbiAgJ1B1bGNpbmVsbGEnLFxuICAnR3VpZ25vbCcsXG4gICdLYXNwZXJsZScsXG5cbiAgLy8gTXVwcGV0cyAmIEppbSBIZW5zb25cbiAgJ0tlcm1pdCcsXG4gICdQaWdneScsXG4gICdGb3p6aWUnLFxuICAnR29uem8nLFxuICAnU2Nvb3RlcicsXG4gICdSb3dsZicsXG4gICdXYWxkb3JmJyxcbiAgJ1N0YXRsZXInLFxuXG4gIC8vIEt1a2xhLCBGcmFuIGFuZCBPbGxpZVxuICAnS3VrbGEnLFxuICAnT2xsaWUnLFxuXG4gIC8vIEhvd2R5IERvb2R5IGVyYVxuICAnSG93ZHknLFxuICAnQ2xhcmFiZWxsJyxcblxuICAvLyBTZXNhbWUgU3RyZWV0XG4gICdHcm92ZXInLFxuICAnRWxtbycsXG4gICdFcm5pZScsXG4gICdCZXJ0JyxcbiAgJ09zY2FyJyxcblxuICAvLyBWZW50cmlsb3F1aXN0ICYgdmFyaWV0eVxuICAnTW9ydGltZXInLFxuICAnTGFtYmNob3AnLFxuICAnTWFkYW1lJyxcbiAgJ1RvcG8nLFxuXG4gIC8vIEludGVybmF0aW9uYWwgcHVwcGV0cnlcbiAgJ0J1bnJha3UnLFxuICAnV2F5YW5nJyxcbiAgJ1BldHJ1c2hrYScsXG4gICdIYW5uZXNjaGVuJyxcbiAgJ1ZpdGV6c2xhdicsXG5cbiAgLy8gTW9kZXJuICYgcG9wIGN1bHR1cmVcbiAgJ1NhbGVtJyxcbiAgJ1RyaXVtcGgnLFxuICAnUGVhbnV0JyxcbiAgJ0FjaG1lZCcsXG5cbiAgLy8gTWFyaW9uZXR0ZSB0cmFkaXRpb25zXG4gICdGYW50b2NjaW5pJyxcbiAgJ1NhbHRpbWJhbnF1ZScsXG4gICdCdXJhdHRpbm8nLFxuICAnSGFybGVxdWluJyxcblxuICAvLyBEb2xsaG91c2UgKFRWIHNlcmllcylcbiAgJ0VjaG8nLFxuXG4gIC8vIEluc2lkZSBqb2tlc1xuICAnU3Bpa2UnLFxuICAnQW5nZWwnLFxuXG4gIC8vIENsYXNzaWMgZG9sbHNcbiAgJ0JhcmJpZScsXG4gICdLZW4nLFxuICAnU2tpcHBlcicsXG4gICdNaWRnZScsXG4gICdDaHJpc3RpZScsXG4gICdBbm5pZScsXG4gICdBbmR5JyxcbiAgJ0NhdGh5JyxcbiAgJ1RlZGR5JyxcbiAgJ1hhdmllcicsXG4gICdTdHJhd2JlcnJ5JyxcbiAgJ0JseXRoZScsXG4gICdHaW5ueScsXG4gICdCZXRzeScsXG4gICdNYWRlbGluZScsXG5dO1xuXG4vKiogTmFtZXMgdGhhdCBjYW4gbmV2ZXIgYmUgYXNzaWduZWQgdG8gYSBsZWFkZXIgc2Vzc2lvbiAqL1xuY29uc3QgRk9MTE9XRVJfT05MWV9OQU1FUyA9IG5ldyBTZXQoWydQdW5jaCddKTtcblxuLyoqIEZpc2hlci1ZYXRlcyBzaHVmZmxlIHVzaW5nIGNyeXB0by5yYW5kb21JbnQgKHVuYmlhc2VkLCBubyBtb2R1bG8pICovXG5mdW5jdGlvbiBzaHVmZmxlQXJyYXk8VD4oYXJyOiBUW10pOiBUW10ge1xuICBmb3IgKGxldCBpID0gYXJyLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICBjb25zdCBqID0gcmFuZG9tSW50KGkgKyAxKTtcbiAgICBbYXJyW2ldLCBhcnJbal1dID0gW2FycltqXSwgYXJyW2ldXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufVxuXG4vKiogU2h1ZmZsZWQgY29weSBvZiB0aGUgbmFtZSBwb29sIOKAlCByYW5kb21pemVkIG9uIGVhY2ggcHJvY2VzcyBzdGFydCAqL1xuY29uc3QgUFVQUEVUX05BTUVTOiBzdHJpbmdbXSA9IHNodWZmbGVBcnJheShbLi4uQUxMX1BVUFBFVF9OQU1FU10pO1xuXG4vKipcbiAqIFBpY2sgYSByYW5kb20gcHVwcGV0IG5hbWUgZnJvbSB0aGUgcG9vbCwgaW5kZXBlbmRlbnQgb2YgdGhlIHNlc3Npb25cbiAqIG5hbWUgYXNzaWdubWVudC4gVXNlZCBieSB0aGUgY29uc29sZSB0b2tlbiBtb2R1bGUgKCMxNzgwKSB0byBnZW5lcmF0ZVxuICogYSBmcmllbmRseSBkZWZhdWx0IG5hbWUgZm9yIG5ld2x5IGNyZWF0ZWQgdG9rZW5zLiBEb2VzIG5vdCByZXNlcnZlIHRoZVxuICogbmFtZSDigJQgbXVsdGlwbGUgY2FsbGVycyBjYW4gcmVjZWl2ZSB0aGUgc2FtZSB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpY2tSYW5kb21QdXBwZXROYW1lKCk6IHN0cmluZyB7XG4gIHJldHVybiBBTExfUFVQUEVUX05BTUVTW3JhbmRvbUludChBTExfUFVQUEVUX05BTUVTLmxlbmd0aCldO1xufVxuXG4vKipcbiAqIENhbm9uaWNhbCBjb2xvcnMgZm9yIGVhY2ggcHVwcGV0IGNoYXJhY3Rlci5cbiAqIEFkanVzdGVkIGZyb20gdHJ1ZSBjYW5vbmljYWwgY29sb3JzIGZvciBVSSByZWFkYWJpbGl0eSBpbiBib3RoIGxpZ2h0L2RhcmsgdGhlbWVzLlxuICovXG5jb25zdCBQVVBQRVRfQ09MT1JTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAnUHVuY2gnOiAgICAgICAgJyNEQzE0M0MnLCAvLyBjcmltc29uIHJlZCBjb3N0dW1lXG4gICdKdWR5JzogICAgICAgICAnIzFFOTBGRicsIC8vIGJsdWUgZHJlc3NcbiAgJ1Bpbm9jY2hpbyc6ICAgICcjREFBNTIwJywgLy8gZ29sZGVucm9kICh3b29kZW4sIHllbGxvdyBoYXQpXG4gICdQZXRyb3VjaGthJzogICAnI0IwQkVDNScsIC8vIGJsdWUtZ3JheSAod2hpdGUgY29zdHVtZSwgYWRqdXN0ZWQgZm9yIHZpc2liaWxpdHkpXG4gICdQdWxjaW5lbGxhJzogICAnIzkwQTRBRScsIC8vIGdyYXktYmx1ZSAod2hpdGUgY29zdHVtZSwgYWRqdXN0ZWQpXG4gICdHdWlnbm9sJzogICAgICAnIzhCNDUxMycsIC8vIHNhZGRsZSBicm93blxuICAnS2FzcGVybGUnOiAgICAgJyNGRjAwMDAnLCAvLyByZWQgcG9pbnRlZCBjYXBcbiAgJ0tlcm1pdCc6ICAgICAgICcjNENBRjUwJywgLy8gZ3JlZW4gZnJvZ1xuICAnUGlnZ3knOiAgICAgICAgJyNFOTFFOEMnLCAvLyBob3QgcGluayAoZ2xhbW9yb3VzIHBpZylcbiAgJ0ZvenppZSc6ICAgICAgICcjQ0M3NzIyJywgLy8gb2NocmUgYnJvd24gYmVhclxuICAnR29uem8nOiAgICAgICAgJyM0MTY5RTEnLCAvLyByb3lhbCBibHVlXG4gICdTY29vdGVyJzogICAgICAnI0ZGOEMwMCcsIC8vIGRhcmsgb3JhbmdlXG4gICdSb3dsZic6ICAgICAgICAnIzhCNjkxNCcsIC8vIGRhcmsgZ29sZGVucm9kIGJyb3duIGRvZ1xuICAnV2FsZG9yZic6ICAgICAgJyM1NTZCMkYnLCAvLyBkYXJrIG9saXZlIGdyZWVuXG4gICdTdGF0bGVyJzogICAgICAnIzcwODA5MCcsIC8vIHNsYXRlIGdyYXlcbiAgJ0t1a2xhJzogICAgICAgICcjRkYwMDAwJywgLy8gcmVkIG5vc2UgYW5kIGNvc3R1bWVcbiAgJ09sbGllJzogICAgICAgICcjMjI4QjIyJywgLy8gZm9yZXN0IGdyZWVuIGRyYWdvblxuICAnSG93ZHknOiAgICAgICAgJyNFMjcyNUInLCAvLyB0ZXJyYSBjb3R0YVxuICAnQ2xhcmFiZWxsJzogICAgJyNGRkNDMDAnLCAvLyBicmlnaHQgeWVsbG93IGNsb3duXG4gICdHcm92ZXInOiAgICAgICAnIzQ2ODJCNCcsIC8vIHN0ZWVsIGJsdWVcbiAgJ0VsbW8nOiAgICAgICAgICcjRkYyNDAwJywgLy8gc2NhcmxldCByZWRcbiAgJ0VybmllJzogICAgICAgICcjRjRBNDYwJywgLy8gc2FuZHkgYnJvd25cbiAgJ0JlcnQnOiAgICAgICAgICcjRkZENzAwJywgLy8gZ29sZCB5ZWxsb3dcbiAgJ09zY2FyJzogICAgICAgICcjNkI4RTIzJywgLy8gb2xpdmUgZHJhYiBncmVlblxuICAnTW9ydGltZXInOiAgICAgJyNERUI4ODcnLCAvLyBidXJseXdvb2RcbiAgJ0xhbWJjaG9wJzogICAgICcjRDRDNUE5JywgLy8gd2FybSBjcmVhbSAoYWRqdXN0ZWQgZnJvbSBwdXJlIHdoaXRlKVxuICAnTWFkYW1lJzogICAgICAgJyM4MDAwODAnLCAvLyBwdXJwbGVcbiAgJ1RvcG8nOiAgICAgICAgICcjQTBBMEEwJywgLy8gc2lsdmVyIGdyYXlcbiAgJ0J1bnJha3UnOiAgICAgICcjQjIyMjIyJywgLy8gZmlyZWJyaWNrIHJlZFxuICAnV2F5YW5nJzogICAgICAgJyM2QjQyMjYnLCAvLyBkYXJrIGxlYXRoZXIgYnJvd24gKGxpZ2h0ZW5lZCBmb3IgdmlzaWJpbGl0eSlcbiAgJ1BldHJ1c2hrYSc6ICAgICcjRkY0NTAwJywgLy8gb3JhbmdlIHJlZFxuICAnSGFubmVzY2hlbic6ICAgJyNDRDVDNUMnLCAvLyBpbmRpYW4gcmVkXG4gICdWaXRlenNsYXYnOiAgICAnI0I4ODYwQicsIC8vIGRhcmsgZ29sZGVucm9kXG4gICdTYWxlbSc6ICAgICAgICAnIzRBNEE0QScsIC8vIGRhcmsgZ3JheSAoYmxhY2sgY2F0LCBsaWdodGVuZWQgZm9yIHZpc2liaWxpdHkpXG4gICdUcml1bXBoJzogICAgICAnIzZGNEUzNycsIC8vIGNvZmZlZSBicm93blxuICAnUGVhbnV0JzogICAgICAgJyM5MzcwREInLCAvLyBtZWRpdW0gcHVycGxlXG4gICdBY2htZWQnOiAgICAgICAnI0M4QkZBOScsIC8vIGJvbmUvcGFyY2htZW50IChsaWdodGVuZWQgZnJvbSBiZWlnZSlcbiAgJ0ZhbnRvY2NpbmknOiAgICcjQzQxRTNBJywgLy8gY2FyZGluYWwgcmVkXG4gICdTYWx0aW1iYW5xdWUnOiAnI0RBQTUyMCcsIC8vIGdvbGRlbnJvZFxuICAnQnVyYXR0aW5vJzogICAgJyNEMjY5MUUnLCAvLyBjaG9jb2xhdGUgYnJvd25cbiAgJ0hhcmxlcXVpbic6ICAgICcjRTYwMDI2JywgLy8gZGlhbW9uZCByZWRcbiAgJ0VjaG8nOiAgICAgICAgICcjNUM2MzcwJywgLy8gc2xhdGUgKGRhcmsgYXR0aXJlLCBsaWdodGVuZWQgZm9yIHZpc2liaWxpdHkpXG4gICdTcGlrZSc6ICAgICAgICAnI0U4RENDOCcsIC8vIHBsYXRpbnVtL2JsZWFjaCAobGlnaHRlbmVkIGZvciByZWFkYWJpbGl0eSlcbiAgJ0FuZ2VsJzogICAgICAgICcjM0QzRDNEJywgLy8gY2hhcmNvYWwgKGJsYWNrIGR1c3RlciwgbGlnaHRlbmVkIGZvciB2aXNpYmlsaXR5KVxuXG4gIC8vIENsYXNzaWMgZG9sbHNcbiAgJ0JhcmJpZSc6ICAgICAgICcjRTkxRTkwJywgLy8gQmFyYmllIHBpbmtcbiAgJ0tlbic6ICAgICAgICAgICcjNEE5MEQ5JywgLy8gS2VuIGJsdWVcbiAgJ1NraXBwZXInOiAgICAgICcjRkY2QjZCJywgLy8gY29yYWwgcmVkXG4gICdNaWRnZSc6ICAgICAgICAnI0U4NzA0MCcsIC8vIHdhcm0gYXVidXJuXG4gICdDaHJpc3RpZSc6ICAgICAnI0MwNjAzMCcsIC8vIHdhcm0gYnJvd25cbiAgJ0FubmllJzogICAgICAgICcjRTAzMDMwJywgLy8gUmFnZ2VkeSBBbm4gcmVkIHlhcm4gaGFpclxuICAnQW5keSc6ICAgICAgICAgJyMzMDcwQzAnLCAvLyBSYWdnZWR5IEFuZHkgYmx1ZSBzYWlsb3Igb3V0Zml0XG4gICdDYXRoeSc6ICAgICAgICAnI0Q0QTU3NCcsIC8vIENoYXR0eSBDYXRoeSB2aW50YWdlIHRhblxuICAnVGVkZHknOiAgICAgICAgJyNBMDc4NEEnLCAvLyBUZWRkeSBSdXhwaW4gYmVhciBicm93blxuICAnWGF2aWVyJzogICAgICAgJyM1QUFGNEEnLCAvLyBYYXZpZXIgUm9iZXJ0cyAvIENhYmJhZ2UgUGF0Y2ggZ3JlZW5cbiAgJ1N0cmF3YmVycnknOiAgICcjRTg0NDVBJywgLy8gc3RyYXdiZXJyeSByZWQtcGlua1xuICAnQmx5dGhlJzogICAgICAgJyM3QjY4RUUnLCAvLyBiaWctZXllZCBwdXJwbGVcbiAgJ0dpbm55JzogICAgICAgICcjNUI5QkQ1JywgLy8gY2xhc3NpYyBibHVlIGRyZXNzXG4gICdCZXRzeSc6ICAgICAgICAnI0RENzY5NCcsIC8vIHJvc2UgcGlua1xuICAnTWFkZWxpbmUnOiAgICAgJyNGRkQ3MDAnLCAvLyB5ZWxsb3cgaGF0XG59O1xuXG4vKiogQ29vbGRvd24gcGVyaW9kIGJlZm9yZSBhIHJlbGVhc2VkIG5hbWUgY2FuIGJlIHJldXNlZCAobXMpICovXG5jb25zdCBOQU1FX0NPT0xET1dOX01TID0gNSAqIDYwXzAwMDsgLy8gNSBtaW51dGVzXG5cbmludGVyZmFjZSBDb29sZG93bkVudHJ5IHtcbiAgbmFtZTogc3RyaW5nO1xuICByZWxlYXNlZEF0OiBudW1iZXI7XG59XG5cbi8qKlxuICogTWFuYWdlcyBmcmllbmRseSBzZXNzaW9uIG5hbWUgYXNzaWdubWVudCBmcm9tIHRoZSBwdXBwZXQgbmFtZSBwb29sLlxuICovXG5leHBvcnQgY2xhc3MgU2Vzc2lvbk5hbWVQb29sIHtcbiAgLyoqIE5hbWVzIGN1cnJlbnRseSBhc3NpZ25lZCB0byBhY3RpdmUgc2Vzc2lvbnM6IHNlc3Npb25JZCDihpIgbmFtZSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGFzc2lnbmVkID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgLyoqIFJldmVyc2UgbG9va3VwOiBuYW1lIOKGkiBzZXNzaW9uSWQgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBuYW1lVG9TZXNzaW9uID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgLyoqIE5hbWVzIGluIGNvb2xkb3duIGFmdGVyIHNlc3Npb24gZW5kICovXG4gIHByaXZhdGUgY29vbGRvd246IENvb2xkb3duRW50cnlbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBBc3NpZ24gYSBmcmllbmRseSBuYW1lIHRvIGEgc2Vzc2lvbi5cbiAgICogUmV0dXJucyBhbiBleGlzdGluZyBhc3NpZ25tZW50IGlmIHRoZSBzZXNzaW9uIGFscmVhZHkgaGFzIG9uZS5cbiAgICpcbiAgICogQHBhcmFtIGlzTGVhZGVyIC0gSWYgdHJ1ZSwgZm9sbG93ZXItb25seSBuYW1lcyAoZS5nLiwgUHVuY2gpIGFyZSBleGNsdWRlZFxuICAgKi9cbiAgYXNzaWduKHNlc3Npb25JZDogc3RyaW5nLCBpc0xlYWRlciA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICAvLyBBbHJlYWR5IGFzc2lnbmVkP1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5hc3NpZ25lZC5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcblxuICAgIC8vIEZsdXNoIGV4cGlyZWQgY29vbGRvd25zXG4gICAgdGhpcy5mbHVzaENvb2xkb3ducygpO1xuXG4gICAgLy8gRmluZCBhbiBhdmFpbGFibGUgbmFtZSwgcmVzcGVjdGluZyBsZWFkZXIgcmVzdHJpY3Rpb25zXG4gICAgY29uc3QgY29vbGRvd25OYW1lcyA9IG5ldyBTZXQodGhpcy5jb29sZG93bi5tYXAoYyA9PiBjLm5hbWUpKTtcbiAgICBjb25zdCBhdmFpbGFibGVOYW1lID0gUFVQUEVUX05BTUVTLmZpbmQoXG4gICAgICBuYW1lID0+ICF0aGlzLm5hbWVUb1Nlc3Npb24uaGFzKG5hbWUpICYmXG4gICAgICAgICAgICAgICFjb29sZG93bk5hbWVzLmhhcyhuYW1lKSAmJlxuICAgICAgICAgICAgICAhKGlzTGVhZGVyICYmIEZPTExPV0VSX09OTFlfTkFNRVMuaGFzKG5hbWUpKVxuICAgICk7XG5cbiAgICBpZiAoYXZhaWxhYmxlTmFtZSkge1xuICAgICAgdGhpcy5hc3NpZ25lZC5zZXQoc2Vzc2lvbklkLCBhdmFpbGFibGVOYW1lKTtcbiAgICAgIHRoaXMubmFtZVRvU2Vzc2lvbi5zZXQoYXZhaWxhYmxlTmFtZSwgc2Vzc2lvbklkKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW1Nlc3Npb25OYW1lc10gQXNzaWduZWQgJyR7YXZhaWxhYmxlTmFtZX0nIHRvICR7c2Vzc2lvbklkfWApO1xuICAgICAgcmV0dXJuIGF2YWlsYWJsZU5hbWU7XG4gICAgfVxuXG4gICAgLy8gQWxsIG5hbWVzIGluIHVzZSBvciBjb29saW5nIGRvd24g4oCUIHRyeSBjb29sZG93biBuYW1lcyAob2xkZXN0IGZpcnN0KVxuICAgIGlmICh0aGlzLmNvb2xkb3duLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG9sZGVzdCA9IHRoaXMuY29vbGRvd24uc2hpZnQoKSE7XG4gICAgICB0aGlzLmFzc2lnbmVkLnNldChzZXNzaW9uSWQsIG9sZGVzdC5uYW1lKTtcbiAgICAgIHRoaXMubmFtZVRvU2Vzc2lvbi5zZXQob2xkZXN0Lm5hbWUsIHNlc3Npb25JZCk7XG4gICAgICBsb2dnZXIuZGVidWcoYFtTZXNzaW9uTmFtZXNdIEFzc2lnbmVkICcke29sZGVzdC5uYW1lfScgdG8gJHtzZXNzaW9uSWR9IChlYXJseSBjb29sZG93biByZWxlYXNlKWApO1xuICAgICAgcmV0dXJuIG9sZGVzdC5uYW1lO1xuICAgIH1cblxuICAgIC8vIFRydWx5IGV4aGF1c3RlZCDigJQgZmFsbCBiYWNrIHRvIHRydW5jYXRlZCBzZXNzaW9uIElEXG4gICAgY29uc3QgZmFsbGJhY2sgPSBzZXNzaW9uSWQuc3BsaXQoJy0nKVsxXSB8fCBzZXNzaW9uSWQuc2xpY2UoMCwgOCk7XG4gICAgdGhpcy5hc3NpZ25lZC5zZXQoc2Vzc2lvbklkLCBmYWxsYmFjayk7XG4gICAgbG9nZ2VyLndhcm4oYFtTZXNzaW9uTmFtZXNdIE5hbWUgcG9vbCBleGhhdXN0ZWQsIHVzaW5nIGZhbGxiYWNrICcke2ZhbGxiYWNrfScgZm9yICR7c2Vzc2lvbklkfWApO1xuICAgIHJldHVybiBmYWxsYmFjaztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWxlYXNlIGEgbmFtZSBiYWNrIHRvIHRoZSBwb29sIHdpdGggYSBjb29sZG93biBwZXJpb2QuXG4gICAqL1xuICByZWxlYXNlKHNlc3Npb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuYXNzaWduZWQuZ2V0KHNlc3Npb25JZCk7XG4gICAgaWYgKCFuYW1lKSByZXR1cm47XG5cbiAgICB0aGlzLmFzc2lnbmVkLmRlbGV0ZShzZXNzaW9uSWQpO1xuICAgIHRoaXMubmFtZVRvU2Vzc2lvbi5kZWxldGUobmFtZSk7XG5cbiAgICAvLyBPbmx5IGNvb2xkb3duIHB1cHBldCBuYW1lcywgbm90IGZhbGxiYWNrIElEc1xuICAgIGlmIChQVVBQRVRfTkFNRVMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgIHRoaXMuY29vbGRvd24ucHVzaCh7IG5hbWUsIHJlbGVhc2VkQXQ6IERhdGUubm93KCkgfSk7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKGBbU2Vzc2lvbk5hbWVzXSBSZWxlYXNlZCAnJHtuYW1lfScgZnJvbSAke3Nlc3Npb25JZH0gKGNvb2xkb3duICR7TkFNRV9DT09MRE9XTl9NUyAvIDEwMDB9cylgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZyaWVuZGx5IG5hbWUgZm9yIGEgc2Vzc2lvbiwgb3IgdW5kZWZpbmVkIGlmIG5vdCBhc3NpZ25lZC5cbiAgICovXG4gIGdldE5hbWUoc2Vzc2lvbklkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmFzc2lnbmVkLmdldChzZXNzaW9uSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY2Fub25pY2FsIGNvbG9yIGZvciBhbiBhc3NpZ25lZCBzZXNzaW9uIG5hbWUuXG4gICAqL1xuICBnZXRDb2xvcihzZXNzaW9uSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuYXNzaWduZWQuZ2V0KHNlc3Npb25JZCk7XG4gICAgcmV0dXJuIG5hbWUgPyAoUFVQUEVUX0NPTE9SU1tuYW1lXSA/PyB1bmRlZmluZWQpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgY3VycmVudCBhc3NpZ25tZW50cy5cbiAgICovXG4gIGdldEFsbCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IE1hcCh0aGlzLmFzc2lnbmVkKTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2hDb29sZG93bnMoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLmNvb2xkb3duID0gdGhpcy5jb29sZG93bi5maWx0ZXIoYyA9PiAobm93IC0gYy5yZWxlYXNlZEF0KSA8IE5BTUVfQ09PTERPV05fTVMpO1xuICB9XG59XG4iXX0=
321
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Vzc2lvbk5hbWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dlYi9jb25zb2xlL1Nlc3Npb25OYW1lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBc0I7SUFDakQsd0JBQXdCO0lBQ3hCLE9BQU87SUFDUCxNQUFNO0lBQ04sV0FBVztJQUNYLFlBQVk7SUFDWixZQUFZO0lBQ1osU0FBUztJQUNULFVBQVU7SUFFVix1QkFBdUI7SUFDdkIsUUFBUTtJQUNSLE9BQU87SUFDUCxRQUFRO0lBQ1IsT0FBTztJQUNQLFNBQVM7SUFDVCxPQUFPO0lBQ1AsU0FBUztJQUNULFNBQVM7SUFFVCx3QkFBd0I7SUFDeEIsT0FBTztJQUNQLE9BQU87SUFFUCxrQkFBa0I7SUFDbEIsT0FBTztJQUNQLFdBQVc7SUFFWCxnQkFBZ0I7SUFDaEIsUUFBUTtJQUNSLE1BQU07SUFDTixPQUFPO0lBQ1AsTUFBTTtJQUNOLE9BQU87SUFFUCwwQkFBMEI7SUFDMUIsVUFBVTtJQUNWLFVBQVU7SUFDVixRQUFRO0lBQ1IsTUFBTTtJQUVOLHlCQUF5QjtJQUN6QixTQUFTO0lBQ1QsUUFBUTtJQUNSLFdBQVc7SUFDWCxZQUFZO0lBQ1osV0FBVztJQUVYLHVCQUF1QjtJQUN2QixPQUFPO0lBQ1AsU0FBUztJQUNULFFBQVE7SUFDUixRQUFRO0lBRVIsd0JBQXdCO0lBQ3hCLFlBQVk7SUFDWixjQUFjO0lBQ2QsV0FBVztJQUNYLFdBQVc7SUFFWCx3QkFBd0I7SUFDeEIsTUFBTTtJQUVOLGVBQWU7SUFDZixPQUFPO0lBQ1AsT0FBTztJQUVQLGdCQUFnQjtJQUNoQixRQUFRO0lBQ1IsS0FBSztJQUNMLFNB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SUFBSSxVQUFVLFNBQVMsY0FBYyxnQkFBZ0IsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU8sQ0FBQyxTQUFpQjtRQUN2QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVEsQ0FBQyxTQUFpQjtRQUN4QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNO1FBQ0osT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVPLGNBQWM7UUFDcEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztJQUNyRixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZyaWVuZGx5IHNlc3Npb24gbmFtZXMgZHJhd24gZnJvbSBmYW1vdXMgcHVwcGV0cywgbWFyaW9uZXR0ZXMsXG4gKiBhbmQgcHVwcGV0IGNoYXJhY3RlcnMgdGhyb3VnaG91dCBoaXN0b3J5LlxuICpcbiAqIE5hbWVzIGFyZSBhc3NpZ25lZCBmcm9tIGEgcG9vbCBhbmQgcmV0dXJuZWQgYWZ0ZXIgYSBjb29sZG93biBwZXJpb2RcbiAqIHdoZW4gc2Vzc2lvbnMgZW5kLiBUaGlzIGtlZXBzIHRoZSBhY3RpdmUgc2Vzc2lvbiBsaXN0IGh1bWFuLXJlYWRhYmxlXG4gKiBhbmQgb24tYnJhbmQgZm9yIERvbGxob3VzZU1DUC5cbiAqXG4gKiBAc2luY2UgdjIuMS4wIOKAlCBJc3N1ZSAjMTcwMFxuICovXG5cbmltcG9ydCB7IHJhbmRvbUludCB9IGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5cbi8qKlxuICogRmFtb3VzIHB1cHBldHMsIG1hcmlvbmV0dGVzLCBhbmQgcHVwcGV0IGNoYXJhY3RlcnMgZnJvbSBhcm91bmQgdGhlIHdvcmxkLlxuICogT3JkZXIgZG9lc24ndCBtYXR0ZXIg4oCUIHRoZSBwb29sIGlzIHNodWZmbGVkIG9uIHN0YXJ0dXAuXG4gKi9cbmV4cG9ydCBjb25zdCBBTExfUFVQUEVUX05BTUVTOiByZWFkb25seSBzdHJpbmdbXSA9IFtcbiAgLy8gQ2xhc3NpYyAmIHRyYWRpdGlvbmFsXG4gICdQdW5jaCcsXG4gICdKdWR5JyxcbiAgJ1Bpbm9jY2hpbycsXG4gICdQZXRyb3VjaGthJyxcbiAgJ1B1bGNpbmVsbGEnLFxuICAnR3VpZ25vbCcsXG4gICdLYXNwZXJsZScsXG5cbiAgLy8gTXVwcGV0cyAmIEppbSBIZW5zb25cbiAgJ0tlcm1pdCcsXG4gICdQaWdneScsXG4gICdGb3p6aWUnLFxuICAnR29uem8nLFxuICAnU2Nvb3RlcicsXG4gICdSb3dsZicsXG4gICdXYWxkb3JmJyxcbiAgJ1N0YXRsZXInLFxuXG4gIC8vIEt1a2xhLCBGcmFuIGFuZCBPbGxpZVxuICAnS3VrbGEnLFxuICAnT2xsaWUnLFxuXG4gIC8vIEhvd2R5IERvb2R5IGVyYVxuICAnSG93ZHknLFxuICAnQ2xhcmFiZWxsJyxcblxuICAvLyBTZXNhbWUgU3RyZWV0XG4gICdHcm92ZXInLFxuICAnRWxtbycsXG4gICdFcm5pZScsXG4gICdCZXJ0JyxcbiAgJ09zY2FyJyxcblxuICAvLyBWZW50cmlsb3F1aXN0ICYgdmFyaWV0eVxuICAnTW9ydGltZXInLFxuICAnTGFtYmNob3AnLFxuICAnTWFkYW1lJyxcbiAgJ1RvcG8nLFxuXG4gIC8vIEludGVybmF0aW9uYWwgcHVwcGV0cnlcbiAgJ0J1bnJha3UnLFxuICAnV2F5YW5nJyxcbiAgJ1BldHJ1c2hrYScsXG4gICdIYW5uZXNjaGVuJyxcbiAgJ1ZpdGV6c2xhdicsXG5cbiAgLy8gTW9kZXJuICYgcG9wIGN1bHR1cmVcbiAgJ1NhbGVtJyxcbiAgJ1RyaXVtcGgnLFxuICAnUGVhbnV0JyxcbiAgJ0FjaG1lZCcsXG5cbiAgLy8gTWFyaW9uZXR0ZSB0cmFkaXRpb25zXG4gICdGYW50b2NjaW5pJyxcbiAgJ1NhbHRpbWJhbnF1ZScsXG4gICdCdXJhdHRpbm8nLFxuICAnSGFybGVxdWluJyxcblxuICAvLyBEb2xsaG91c2UgKFRWIHNlcmllcylcbiAgJ0VjaG8nLFxuXG4gIC8vIEluc2lkZSBqb2tlc1xuICAnU3Bpa2UnLFxuICAnQW5nZWwnLFxuXG4gIC8vIENsYXNzaWMgZG9sbHNcbiAgJ0JhcmJpZScsXG4gICdLZW4nLFxuICAnU2tpcHBlcicsXG4gICdNaWRnZScsXG4gICdDaHJpc3RpZScsXG4gICdBbm5pZScsXG4gICdBbmR5JyxcbiAgJ0NhdGh5JyxcbiAgJ1RlZGR5JyxcbiAgJ1hhdmllcicsXG4gICdTdHJhd2JlcnJ5JyxcbiAgJ0JseXRoZScsXG4gICdHaW5ueScsXG4gICdCZXRzeScsXG4gICdNYWRlbGluZScsXG5dO1xuXG4vKiogTmFtZXMgdGhhdCBjYW4gbmV2ZXIgYmUgYXNzaWduZWQgdG8gYSBsZWFkZXIgc2Vzc2lvbiAqL1xuY29uc3QgRk9MTE9XRVJfT05MWV9OQU1FUyA9IG5ldyBTZXQoWydQdW5jaCddKTtcblxuLyoqIEZpc2hlci1ZYXRlcyBzaHVmZmxlIHVzaW5nIGNyeXB0by5yYW5kb21JbnQgKHVuYmlhc2VkLCBubyBtb2R1bG8pICovXG5mdW5jdGlvbiBzaHVmZmxlQXJyYXk8VD4oYXJyOiBUW10pOiBUW10ge1xuICBmb3IgKGxldCBpID0gYXJyLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICBjb25zdCBqID0gcmFuZG9tSW50KGkgKyAxKTtcbiAgICBbYXJyW2ldLCBhcnJbal1dID0gW2FycltqXSwgYXJyW2ldXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufVxuXG4vKiogU2h1ZmZsZWQgY29weSBvZiB0aGUgbmFtZSBwb29sIOKAlCByYW5kb21pemVkIG9uIGVhY2ggcHJvY2VzcyBzdGFydCAqL1xuY29uc3QgUFVQUEVUX05BTUVTOiBzdHJpbmdbXSA9IHNodWZmbGVBcnJheShbLi4uQUxMX1BVUFBFVF9OQU1FU10pO1xuXG4vKipcbiAqIEljb25pYyBhdHRpcmUgYW5kIGFjY2Vzc29yaWVzIGRyYXduIGZyb20gZmFtb3VzIGRvbGxzLCBwdXBwZXRzLCBhbmRcbiAqIHRoZWF0cmljYWwgY2hhcmFjdGVycyB0aHJvdWdob3V0IGhpc3RvcnkuIFVzZWQgdG8gbmFtZSBjb25zb2xlIHRva2Vuc1xuICogc28gdGhleSBuZXZlciBjb2xsaWRlIHdpdGggdGhlIHNlc3Npb24gcHVwcGV0LW5hbWUgcG9vbCAoIzE4NzEpLlxuICpcbiAqIE5hbWVzIGV2b2tlIGNvc3R1bWUgcGllY2VzIOKAlCBhIHRva2VuIGlzIHNvbWV0aGluZyB5b3Ugd2VhciBvciBjYXJyeSxcbiAqIG5vdCBhIHBlcnNvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IEFMTF9UT0tFTl9OQU1FUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXG4gIC8vIFZpY3RvcmlhbiAmIHRoZWF0cmljYWxcbiAgJ1RvcCBIYXQnLFxuICAnTW9ub2NsZScsXG4gICdUcmVuY2ggQ29hdCcsXG4gICdPcGVyYSBDYXBlJyxcbiAgJ09wZXJhIEdsb3ZlcycsXG4gICdWZWx2ZXQgQ2xvYWsnLFxuICAnTGFjZSBDb2xsYXInLFxuICAnU2lsayBDcmF2YXQnLFxuICAnV2Fpc3Rjb2F0JyxcbiAgJ0dpbHQgQnV0dG9uJyxcblxuICAvLyBQaGFudG9tLCBtYXNrcywgbXlzdGVyeVxuICAnSGFsZiBNYXNrJyxcbiAgJ0RvbWlubyBNYXNrJyxcbiAgJ0ZlYXRoZXJlZCBNYXNrJyxcblxuICAvLyBQdW5jaCAmIEp1ZHkgLyBIYXJsZXF1aW5cbiAgJ0plc3RlciBCZWxscycsXG4gICdEaWFtb25kIFN1aXQnLFxuICAnQmVsbCBDYXAnLFxuICAnU2xhcHN0aWNrJyxcbiAgJ1JlZCBOb3NlJyxcblxuICAvLyBQdXBwZXQgdHJhZGl0aW9uc1xuICAnTWFyaW9uZXR0ZSBTdHJpbmdzJyxcbiAgJ0NyYWNrZWQgUG9yY2VsYWluJyxcbiAgJ1BhcGllci1Nw6JjaMOpJyxcblxuICAvLyBDbGFzc2ljIGRvbGxzICYgY2hhcmFjdGVyc1xuICAnUGluayBDb3J2ZXR0ZScsXG4gICdSZWQgWWFybiBIYWlyJyxcbiAgJ1NhaWxvciBTdWl0JyxcbiAgJ1llbGxvdyBIYXQnLFxuICAnUnVieSBTbGlwcGVycycsXG4gICdHbGFzcyBTbGlwcGVyJyxcbiAgJ0JsdWUgUmliYm9uJyxcbiAgJ1N0cmlwZWQgU3RvY2tpbmdzJyxcblxuICAvLyBXaXphcmQgLyB3aXRjaCAvIGZhbnRhc3lcbiAgJ1BvaW50ZWQgSGF0JyxcbiAgJ0Jyb29tc3RpY2snLFxuICAnU2lsdmVyIFdhbmQnLFxuICAnVGluIENyb3duJyxcbiAgJ1N0cmF3IEhhdCcsXG5cbiAgLy8gQWR2ZW50dXJlICYgbXlzdGVyeVxuICAnRGVlcnN0YWxrZXInLFxuICAnTWFnbmlmeWluZyBHbGFzcycsXG4gICdGZWF0aGVyZWQgQ2FwJyxcbiAgJ1NpbHZlciBCdWNrbGUnLFxuICAnV2lja2VyIEJhc2tldCcsXG5dO1xuXG4vKipcbiAqIFBpY2sgYSByYW5kb20gdG9rZW4gbmFtZSBmcm9tIHRoZSBhdHRpcmUgcG9vbC5cbiAqIFVzZWQgYnkgdGhlIGNvbnNvbGUgdG9rZW4gbW9kdWxlIHRvIG5hbWUgbmV3bHkgY3JlYXRlZCB0b2tlbnMgKCMxODcxKS5cbiAqIERyYXduIGZyb20gYSBzZXBhcmF0ZSBwb29sIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIHNlc3Npb24gcHVwcGV0IG5hbWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGlja1JhbmRvbVRva2VuTmFtZSgpOiBzdHJpbmcge1xuICByZXR1cm4gQUxMX1RPS0VOX05BTUVTW3JhbmRvbUludChBTExfVE9LRU5fTkFNRVMubGVuZ3RoKV07XG59XG5cbi8qKlxuICogQ2Fub25pY2FsIGNvbG9ycyBmb3IgZWFjaCBwdXBwZXQgY2hhcmFjdGVyLlxuICogQWRqdXN0ZWQgZnJvbSB0cnVlIGNhbm9uaWNhbCBjb2xvcnMgZm9yIFVJIHJlYWRhYmlsaXR5IGluIGJvdGggbGlnaHQvZGFyayB0aGVtZXMuXG4gKi9cbmNvbnN0IFBVUFBFVF9DT0xPUlM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICdQdW5jaCc6ICAgICAgICAnI0RDMTQzQycsIC8vIGNyaW1zb24gcmVkIGNvc3R1bWVcbiAgJ0p1ZHknOiAgICAgICAgICcjMUU5MEZGJywgLy8gYmx1ZSBkcmVzc1xuICAnUGlub2NjaGlvJzogICAgJyNEQUE1MjAnLCAvLyBnb2xkZW5yb2QgKHdvb2RlbiwgeWVsbG93IGhhdClcbiAgJ1BldHJvdWNoa2EnOiAgICcjQjBCRUM1JywgLy8gYmx1ZS1ncmF5ICh3aGl0ZSBjb3N0dW1lLCBhZGp1c3RlZCBmb3IgdmlzaWJpbGl0eSlcbiAgJ1B1bGNpbmVsbGEnOiAgICcjOTBBNEFFJywgLy8gZ3JheS1ibHVlICh3aGl0ZSBjb3N0dW1lLCBhZGp1c3RlZClcbiAgJ0d1aWdub2wnOiAgICAgICcjOEI0NTEzJywgLy8gc2FkZGxlIGJyb3duXG4gICdLYXNwZXJsZSc6ICAgICAnI0ZGMDAwMCcsIC8vIHJlZCBwb2ludGVkIGNhcFxuICAnS2VybWl0JzogICAgICAgJyM0Q0FGNTAnLCAvLyBncmVlbiBmcm9nXG4gICdQaWdneSc6ICAgICAgICAnI0U5MUU4QycsIC8vIGhvdCBwaW5rIChnbGFtb3JvdXMgcGlnKVxuICAnRm96emllJzogICAgICAgJyNDQzc3MjInLCAvLyBvY2hyZSBicm93biBiZWFyXG4gICdHb256byc6ICAgICAgICAnIzQxNjlFMScsIC8vIHJveWFsIGJsdWVcbiAgJ1Njb290ZXInOiAgICAgICcjRkY4QzAwJywgLy8gZGFyayBvcmFuZ2VcbiAgJ1Jvd2xmJzogICAgICAgICcjOEI2OTE0JywgLy8gZGFyayBnb2xkZW5yb2QgYnJvd24gZG9nXG4gICdXYWxkb3JmJzogICAgICAnIzU1NkIyRicsIC8vIGRhcmsgb2xpdmUgZ3JlZW5cbiAgJ1N0YXRsZXInOiAgICAgICcjNzA4MDkwJywgLy8gc2xhdGUgZ3JheVxuICAnS3VrbGEnOiAgICAgICAgJyNGRjAwMDAnLCAvLyByZWQgbm9zZSBhbmQgY29zdHVtZVxuICAnT2xsaWUnOiAgICAgICAgJyMyMjhCMjInLCAvLyBmb3Jlc3QgZ3JlZW4gZHJhZ29uXG4gICdIb3dkeSc6ICAgICAgICAnI0UyNzI1QicsIC8vIHRlcnJhIGNvdHRhXG4gICdDbGFyYWJlbGwnOiAgICAnI0ZGQ0MwMCcsIC8vIGJyaWdodCB5ZWxsb3cgY2xvd25cbiAgJ0dyb3Zlcic6ICAgICAgICcjNDY4MkI0JywgLy8gc3RlZWwgYmx1ZVxuICAnRWxtbyc6ICAgICAgICAgJyNGRjI0MDAnLCAvLyBzY2FybGV0IHJlZFxuICAnRXJuaWUnOiAgICAgICAgJyNGNEE0NjAnLCAvLyBzYW5keSBicm93blxuICAnQmVydCc6ICAgICAgICAgJyNGRkQ3MDAnLCAvLyBnb2xkIHllbGxvd1xuICAnT3NjYXInOiAgICAgICAgJyM2QjhFMjMnLCAvLyBvbGl2ZSBkcmFiIGdyZWVuXG4gICdNb3J0aW1lcic6ICAgICAnI0RFQjg4NycsIC8vIGJ1cmx5d29vZFxuICAnTGFtYmNob3AnOiAgICAgJyNENEM1QTknLCAvLyB3YXJtIGNyZWFtIChhZGp1c3RlZCBmcm9tIHB1cmUgd2hpdGUpXG4gICdNYWRhbWUnOiAgICAgICAnIzgwMDA4MCcsIC8vIHB1cnBsZVxuICAnVG9wbyc6ICAgICAgICAgJyNBMEEwQTAnLCAvLyBzaWx2ZXIgZ3JheVxuICAnQnVucmFrdSc6ICAgICAgJyNCMjIyMjInLCAvLyBmaXJlYnJpY2sgcmVkXG4gICdXYXlhbmcnOiAgICAgICAnIzZCNDIyNicsIC8vIGRhcmsgbGVhdGhlciBicm93biAobGlnaHRlbmVkIGZvciB2aXNpYmlsaXR5KVxuICAnUGV0cnVzaGthJzogICAgJyNGRjQ1MDAnLCAvLyBvcmFuZ2UgcmVkXG4gICdIYW5uZXNjaGVuJzogICAnI0NENUM1QycsIC8vIGluZGlhbiByZWRcbiAgJ1ZpdGV6c2xhdic6ICAgICcjQjg4NjBCJywgLy8gZGFyayBnb2xkZW5yb2RcbiAgJ1NhbGVtJzogICAgICAgICcjNEE0QTRBJywgLy8gZGFyayBncmF5IChibGFjayBjYXQsIGxpZ2h0ZW5lZCBmb3IgdmlzaWJpbGl0eSlcbiAgJ1RyaXVtcGgnOiAgICAgICcjNkY0RTM3JywgLy8gY29mZmVlIGJyb3duXG4gICdQZWFudXQnOiAgICAgICAnIzkzNzBEQicsIC8vIG1lZGl1bSBwdXJwbGVcbiAgJ0FjaG1lZCc6ICAgICAgICcjQzhCRkE5JywgLy8gYm9uZS9wYXJjaG1lbnQgKGxpZ2h0ZW5lZCBmcm9tIGJlaWdlKVxuICAnRmFudG9jY2luaSc6ICAgJyNDNDFFM0EnLCAvLyBjYXJkaW5hbCByZWRcbiAgJ1NhbHRpbWJhbnF1ZSc6ICcjREFBNTIwJywgLy8gZ29sZGVucm9kXG4gICdCdXJhdHRpbm8nOiAgICAnI0QyNjkxRScsIC8vIGNob2NvbGF0ZSBicm93blxuICAnSGFybGVxdWluJzogICAgJyNFNjAwMjYnLCAvLyBkaWFtb25kIHJlZFxuICAnRWNobyc6ICAgICAgICAgJyM1QzYzNzAnLCAvLyBzbGF0ZSAoZGFyayBhdHRpcmUsIGxpZ2h0ZW5lZCBmb3IgdmlzaWJpbGl0eSlcbiAgJ1NwaWtlJzogICAgICAgICcjRThEQ0M4JywgLy8gcGxhdGludW0vYmxlYWNoIChsaWdodGVuZWQgZm9yIHJlYWRhYmlsaXR5KVxuICAnQW5nZWwnOiAgICAgICAgJyMzRDNEM0QnLCAvLyBjaGFyY29hbCAoYmxhY2sgZHVzdGVyLCBsaWdodGVuZWQgZm9yIHZpc2liaWxpdHkpXG5cbiAgLy8gQ2xhc3NpYyBkb2xsc1xuICAnQmFyYmllJzogICAgICAgJyNFOTFFOTAnLCAvLyBCYXJiaWUgcGlua1xuICAnS2VuJzogICAgICAgICAgJyM0QTkwRDknLCAvLyBLZW4gYmx1ZVxuICAnU2tpcHBlcic6ICAgICAgJyNGRjZCNkInLCAvLyBjb3JhbCByZWRcbiAgJ01pZGdlJzogICAgICAgICcjRTg3MDQwJywgLy8gd2FybSBhdWJ1cm5cbiAgJ0NocmlzdGllJzogICAgICcjQzA2MDMwJywgLy8gd2FybSBicm93blxuICAnQW5uaWUnOiAgICAgICAgJyNFMDMwMzAnLCAvLyBSYWdnZWR5IEFubiByZWQgeWFybiBoYWlyXG4gICdBbmR5JzogICAgICAgICAnIzMwNzBDMCcsIC8vIFJhZ2dlZHkgQW5keSBibHVlIHNhaWxvciBvdXRmaXRcbiAgJ0NhdGh5JzogICAgICAgICcjRDRBNTc0JywgLy8gQ2hhdHR5IENhdGh5IHZpbnRhZ2UgdGFuXG4gICdUZWRkeSc6ICAgICAgICAnI0EwNzg0QScsIC8vIFRlZGR5IFJ1eHBpbiBiZWFyIGJyb3duXG4gICdYYXZpZXInOiAgICAgICAnIzVBQUY0QScsIC8vIFhhdmllciBSb2JlcnRzIC8gQ2FiYmFnZSBQYXRjaCBncmVlblxuICAnU3RyYXdiZXJyeSc6ICAgJyNFODQ0NUEnLCAvLyBzdHJhd2JlcnJ5IHJlZC1waW5rXG4gICdCbHl0aGUnOiAgICAgICAnIzdCNjhFRScsIC8vIGJpZy1leWVkIHB1cnBsZVxuICAnR2lubnknOiAgICAgICAgJyM1QjlCRDUnLCAvLyBjbGFzc2ljIGJsdWUgZHJlc3NcbiAgJ0JldHN5JzogICAgICAgICcjREQ3Njk0JywgLy8gcm9zZSBwaW5rXG4gICdNYWRlbGluZSc6ICAgICAnI0ZGRDcwMCcsIC8vIHllbGxvdyBoYXRcbn07XG5cbi8qKiBDb29sZG93biBwZXJpb2QgYmVmb3JlIGEgcmVsZWFzZWQgbmFtZSBjYW4gYmUgcmV1c2VkIChtcykgKi9cbmNvbnN0IE5BTUVfQ09PTERPV05fTVMgPSA1ICogNjBfMDAwOyAvLyA1IG1pbnV0ZXNcblxuaW50ZXJmYWNlIENvb2xkb3duRW50cnkge1xuICBuYW1lOiBzdHJpbmc7XG4gIHJlbGVhc2VkQXQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBNYW5hZ2VzIGZyaWVuZGx5IHNlc3Npb24gbmFtZSBhc3NpZ25tZW50IGZyb20gdGhlIHB1cHBldCBuYW1lIHBvb2wuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZXNzaW9uTmFtZVBvb2wge1xuICAvKiogTmFtZXMgY3VycmVudGx5IGFzc2lnbmVkIHRvIGFjdGl2ZSBzZXNzaW9uczogc2Vzc2lvbklkIOKGkiBuYW1lICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYXNzaWduZWQgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAvKiogUmV2ZXJzZSBsb29rdXA6IG5hbWUg4oaSIHNlc3Npb25JZCAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG5hbWVUb1Nlc3Npb24gPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAvKiogTmFtZXMgaW4gY29vbGRvd24gYWZ0ZXIgc2Vzc2lvbiBlbmQgKi9cbiAgcHJpdmF0ZSBjb29sZG93bjogQ29vbGRvd25FbnRyeVtdID0gW107XG5cbiAgLyoqXG4gICAqIEFzc2lnbiBhIGZyaWVuZGx5IG5hbWUgdG8gYSBzZXNzaW9uLlxuICAgKiBSZXR1cm5zIGFuIGV4aXN0aW5nIGFzc2lnbm1lbnQgaWYgdGhlIHNlc3Npb24gYWxyZWFkeSBoYXMgb25lLlxuICAgKlxuICAgKiBAcGFyYW0gaXNMZWFkZXIgLSBJZiB0cnVlLCBmb2xsb3dlci1vbmx5IG5hbWVzIChlLmcuLCBQdW5jaCkgYXJlIGV4Y2x1ZGVkXG4gICAqL1xuICBhc3NpZ24oc2Vzc2lvbklkOiBzdHJpbmcsIGlzTGVhZGVyID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIC8vIEFscmVhZHkgYXNzaWduZWQ/XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmFzc2lnbmVkLmdldChzZXNzaW9uSWQpO1xuICAgIGlmIChleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nO1xuXG4gICAgLy8gRmx1c2ggZXhwaXJlZCBjb29sZG93bnNcbiAgICB0aGlzLmZsdXNoQ29vbGRvd25zKCk7XG5cbiAgICAvLyBGaW5kIGFuIGF2YWlsYWJsZSBuYW1lLCByZXNwZWN0aW5nIGxlYWRlciByZXN0cmljdGlvbnNcbiAgICBjb25zdCBjb29sZG93bk5hbWVzID0gbmV3IFNldCh0aGlzLmNvb2xkb3duLm1hcChjID0+IGMubmFtZSkpO1xuICAgIGNvbnN0IGF2YWlsYWJsZU5hbWUgPSBQVVBQRVRfTkFNRVMuZmluZChcbiAgICAgIG5hbWUgPT4gIXRoaXMubmFtZVRvU2Vzc2lvbi5oYXMobmFtZSkgJiZcbiAgICAgICAgICAgICAgIWNvb2xkb3duTmFtZXMuaGFzKG5hbWUpICYmXG4gICAgICAgICAgICAgICEoaXNMZWFkZXIgJiYgRk9MTE9XRVJfT05MWV9OQU1FUy5oYXMobmFtZSkpXG4gICAgKTtcblxuICAgIGlmIChhdmFpbGFibGVOYW1lKSB7XG4gICAgICB0aGlzLmFzc2lnbmVkLnNldChzZXNzaW9uSWQsIGF2YWlsYWJsZU5hbWUpO1xuICAgICAgdGhpcy5uYW1lVG9TZXNzaW9uLnNldChhdmFpbGFibGVOYW1lLCBzZXNzaW9uSWQpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBbU2Vzc2lvbk5hbWVzXSBBc3NpZ25lZCAnJHthdmFpbGFibGVOYW1lfScgdG8gJHtzZXNzaW9uSWR9YCk7XG4gICAgICByZXR1cm4gYXZhaWxhYmxlTmFtZTtcbiAgICB9XG5cbiAgICAvLyBBbGwgbmFtZXMgaW4gdXNlIG9yIGNvb2xpbmcgZG93biDigJQgdHJ5IGNvb2xkb3duIG5hbWVzIChvbGRlc3QgZmlyc3QpXG4gICAgaWYgKHRoaXMuY29vbGRvd24ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgb2xkZXN0ID0gdGhpcy5jb29sZG93bi5zaGlmdCgpITtcbiAgICAgIHRoaXMuYXNzaWduZWQuc2V0KHNlc3Npb25JZCwgb2xkZXN0Lm5hbWUpO1xuICAgICAgdGhpcy5uYW1lVG9TZXNzaW9uLnNldChvbGRlc3QubmFtZSwgc2Vzc2lvbklkKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW1Nlc3Npb25OYW1lc10gQXNzaWduZWQgJyR7b2xkZXN0Lm5hbWV9JyB0byAke3Nlc3Npb25JZH0gKGVhcmx5IGNvb2xkb3duIHJlbGVhc2UpYCk7XG4gICAgICByZXR1cm4gb2xkZXN0Lm5hbWU7XG4gICAgfVxuXG4gICAgLy8gVHJ1bHkgZXhoYXVzdGVkIOKAlCBmYWxsIGJhY2sgdG8gdHJ1bmNhdGVkIHNlc3Npb24gSURcbiAgICBjb25zdCBmYWxsYmFjayA9IHNlc3Npb25JZC5zcGxpdCgnLScpWzFdIHx8IHNlc3Npb25JZC5zbGljZSgwLCA4KTtcbiAgICB0aGlzLmFzc2lnbmVkLnNldChzZXNzaW9uSWQsIGZhbGxiYWNrKTtcbiAgICBsb2dnZXIud2FybihgW1Nlc3Npb25OYW1lc10gTmFtZSBwb29sIGV4aGF1c3RlZCwgdXNpbmcgZmFsbGJhY2sgJyR7ZmFsbGJhY2t9JyBmb3IgJHtzZXNzaW9uSWR9YCk7XG4gICAgcmV0dXJuIGZhbGxiYWNrO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2UgYSBuYW1lIGJhY2sgdG8gdGhlIHBvb2wgd2l0aCBhIGNvb2xkb3duIHBlcmlvZC5cbiAgICovXG4gIHJlbGVhc2Uoc2Vzc2lvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5hc3NpZ25lZC5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcblxuICAgIHRoaXMuYXNzaWduZWQuZGVsZXRlKHNlc3Npb25JZCk7XG4gICAgdGhpcy5uYW1lVG9TZXNzaW9uLmRlbGV0ZShuYW1lKTtcblxuICAgIC8vIE9ubHkgY29vbGRvd24gcHVwcGV0IG5hbWVzLCBub3QgZmFsbGJhY2sgSURzXG4gICAgaWYgKFBVUFBFVF9OQU1FUy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgdGhpcy5jb29sZG93bi5wdXNoKHsgbmFtZSwgcmVsZWFzZWRBdDogRGF0ZS5ub3coKSB9KTtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoYFtTZXNzaW9uTmFtZXNdIFJlbGVhc2VkICcke25hbWV9JyBmcm9tICR7c2Vzc2lvbklkfSAoY29vbGRvd24gJHtOQU1FX0NPT0xET1dOX01TIC8gMTAwMH1zKWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZnJpZW5kbHkgbmFtZSBmb3IgYSBzZXNzaW9uLCBvciB1bmRlZmluZWQgaWYgbm90IGFzc2lnbmVkLlxuICAgKi9cbiAgZ2V0TmFtZShzZXNzaW9uSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYXNzaWduZWQuZ2V0KHNlc3Npb25JZCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjYW5vbmljYWwgY29sb3IgZm9yIGFuIGFzc2lnbmVkIHNlc3Npb24gbmFtZS5cbiAgICovXG4gIGdldENvbG9yKHNlc3Npb25JZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5hc3NpZ25lZC5nZXQoc2Vzc2lvbklkKTtcbiAgICByZXR1cm4gbmFtZSA/IChQVVBQRVRfQ09MT1JTW25hbWVdID8/IHVuZGVmaW5lZCkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBjdXJyZW50IGFzc2lnbm1lbnRzLlxuICAgKi9cbiAgZ2V0QWxsKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgTWFwKHRoaXMuYXNzaWduZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaENvb2xkb3ducygpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuY29vbGRvd24gPSB0aGlzLmNvb2xkb3duLmZpbHRlcihjID0+IChub3cgLSBjLnJlbGVhc2VkQXQpIDwgTkFNRV9DT09MRE9XTl9NUyk7XG4gIH1cbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"StaleProcessRecovery.d.ts","sourceRoot":"","sources":["../../../src/web/console/StaleProcessRecovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA6BH;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsBxE;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAuDlF;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA6BrE"}
1
+ {"version":3,"file":"StaleProcessRecovery.d.ts","sourceRoot":"","sources":["../../../src/web/console/StaleProcessRecovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA6BH;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsBxE;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAwDlF;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA6BrE"}
@@ -83,6 +83,7 @@ export async function killStaleProcess(pid, port) {
83
83
  // 1. Process must be owned by the current OS user (prevents cross-user kills)
84
84
  // 2. Command line must match a DollhouseMCP binary path (prevents killing other services)
85
85
  // 3. If both fail or ps can't run, we refuse — safe default is to not kill
86
+ let cmdLine = '';
86
87
  try {
87
88
  const { stdout } = await execFileAsync('ps', ['-p', String(pid), '-o', 'user=,command='], { timeout: COMMAND_TIMEOUT_MS });
88
89
  // Check 1: User ownership — only kill our own processes
@@ -95,11 +96,11 @@ export async function killStaleProcess(pid, port) {
95
96
  // /bin/dollhousemcp (global install), or dist/index.js (direct node execution).
96
97
  // NOT just 'mcp-server' anywhere in the path — that would match Jest workers
97
98
  // running from within the mcp-server project directory.
98
- const cmdLine = stdout.trim();
99
+ cmdLine = stdout.trim();
99
100
  const isDollhouseBin = /(?:^|\/)dollhousemcp(?:\s|$)/.test(cmdLine) ||
100
101
  cmdLine.includes('.bin/dollhousemcp');
101
102
  const isMcpServerBin = cmdLine.includes('.bin/mcp-server') ||
102
- cmdLine.includes('dist/index.js');
103
+ /(?:dollhousemcp|mcp-server)[/\\]dist[/\\]index\.js/.test(cmdLine);
103
104
  if (!isDollhouseBin && !isMcpServerBin) {
104
105
  await logger.warn(`[WebUI] Port ${port} held by non-DollhouseMCP process (pid ${pid}) — not killing`, { cmdLine });
105
106
  return false;
@@ -115,7 +116,7 @@ export async function killStaleProcess(pid, port) {
115
116
  }
116
117
  try {
117
118
  process.kill(pid, 'SIGTERM');
118
- logger.warn(`[WebUI] Sent SIGTERM to stale process ${pid} on port ${port}`);
119
+ logger.warn(`[WebUI] Sent SIGTERM to stale process ${pid} on port ${port}`, { cmdLine });
119
120
  for (let i = 0; i < KILL_POLL_COUNT; i++) {
120
121
  await new Promise(r => setTimeout(r, SIGTERM_POLL_MS));
121
122
  try {
@@ -171,4 +172,4 @@ export async function recoverStalePort(port) {
171
172
  }
172
173
  return killed;
173
174
  }
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhbGVQcm9jZXNzUmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvU3RhbGVQcm9jZXNzUmVjb3ZlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHO0FBRUgsOEVBQThFO0FBQzlFLHFFQUFxRTtBQUNyRSxrREFBa0Q7QUFDbEQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFDaEMsb0VBQW9FO0FBQ3BFLE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQztBQUM1QixtREFBbUQ7QUFDbkQsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQzNCLCtDQUErQztBQUMvQyxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFDNUIsOERBQThEO0FBQzlELE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDO0FBRWxDLElBQUksT0FBTyxHQUF5RCxJQUFJLENBQUM7QUFDekUsS0FBSyxVQUFVLFNBQVM7SUFDdEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDO1lBQUMsT0FBTyxHQUFHLENBQUMsTUFBTSxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUFDLENBQUM7UUFDakUsTUFBTSxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUNELE1BQU0sTUFBTSxHQUFHO0lBQ2IsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQWUsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsTUFBTSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9JLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFlLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLE1BQU0sU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvSSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBZSxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxNQUFNLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3hILENBQUM7QUFFRjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxhQUFhLENBQUMsSUFBWTtJQUM5QyxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDcEUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUU1QyxpRkFBaUY7SUFDakYsS0FBSyxNQUFNLEdBQUcsSUFBSTtRQUNoQixFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRTtRQUMxQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxFQUFFO0tBQ3hDLEVBQUUsQ0FBQztRQUNGLElBQUksQ0FBQztZQUNILE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztZQUNuRywwQ0FBMEM7WUFDMUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFNLElBQUksTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQy9DLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDcEYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkQsSUFBSSxRQUFRO2dCQUFFLE9BQU8sUUFBUSxDQUFDO1FBQ2hDLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxTQUFTLENBQUMsNkNBQTZDO1FBQ3pELENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsR0FBVyxFQUFFLElBQVk7SUFDOUQsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoRCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFNUMsc0VBQXNFO0lBQ3RFLDhFQUE4RTtJQUM5RSwwRkFBMEY7SUFDMUYsMkVBQTJFO0lBQzNFLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUUzSCx3REFBd0Q7UUFDeEQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUNsRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQzNDLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxnQ0FBZ0MsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO1lBQzVGLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELHlFQUF5RTtRQUN6RSxnRkFBZ0Y7UUFDaEYsNkVBQTZFO1FBQzdFLHdEQUF3RDtRQUN4RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUIsTUFBTSxjQUFjLEdBQUcsOEJBQThCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNqRSxPQUFPLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDeEMsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztZQUN4RCxPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksMENBQTBDLEdBQUcsaUJBQWlCLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ25ILE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsR0FBRyxrQkFBa0IsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYix5REFBeUQ7UUFDekQsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxHQUFHLGtCQUFrQixFQUFFO1lBQ3pFLEtBQUssRUFBRSxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1NBQ3hELENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMseUNBQXlDLEdBQUcsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN6QyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQztnQkFBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUFDLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQUMsT0FBTyxJQUFJLENBQUM7WUFBQyxDQUFDO1FBQ3RELENBQUM7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxHQUFHLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM1RSxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sSUFBSSxDQUFDLENBQUMsdUJBQXVCO0lBQ3RDLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxJQUFZO0lBQ2pELE1BQU0sUUFBUSxHQUFHLE1BQU0sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLElBQUksQ0FBQyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFNUIsNEVBQTRFO0lBQzVFLDJFQUEyRTtJQUMzRSxpRUFBaUU7SUFDakUsTUFBTSxFQUFFLGNBQWMsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDL0QsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxHQUFHLE1BQU0sY0FBYyxFQUFFLENBQUM7WUFDcEMsSUFBSSxJQUFJLEVBQUUsR0FBRyxLQUFLLFFBQVEsSUFBSSxJQUFJLEVBQUUsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDOUUsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLG1DQUFtQyxRQUFRLGlCQUFpQixDQUFDLENBQUM7Z0JBQ3BHLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCx3REFBd0Q7UUFDMUQsQ0FBQztRQUNELElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RELElBQUksTUFBTSxFQUFFLENBQUM7UUFDWCxNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixRQUFRLHNCQUFzQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQywrQkFBK0I7SUFDekYsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0YWxlIHByb2Nlc3MgZGV0ZWN0aW9uIGFuZCByZWNvdmVyeSAoIzE4NTApLlxuICpcbiAqIEZpbmRzIGFuZCBraWxscyB6b21iaWUgRG9sbGhvdXNlTUNQIHByb2Nlc3NlcyB0aGF0IHNxdWF0IG9uIHRoZSBjb25zb2xlXG4gKiBwb3J0IGFmdGVyIHRoZWlyIHNlc3Npb24gaGFzIGVuZGVkLiBVc2VkIGJ5IGJpbmRBbmRMaXN0ZW4gaW4gc2VydmVyLnRzXG4gKiB3aGVuIEVBRERSSU5VU0Ugb2NjdXJzLlxuICpcbiAqIEV4dHJhY3RlZCB0byBhIHN0YW5kYWxvbmUgbW9kdWxlIHNvIGl0IGNhbiBiZSB0ZXN0ZWQgd2l0aG91dCBpbXBvcnRpbmdcbiAqIHRoZSBmdWxsIEV4cHJlc3Mgc2VydmVyIGFuZCBpdHMgZGVwZW5kZW5jeSBjaGFpbi5cbiAqL1xuXG4vLyBVc2UgbGF6eSBpbXBvcnQgZm9yIGxvZ2dlciB0byBhdm9pZCBwdWxsaW5nIGluIHRoZSBmdWxsIGVudi50cy9jb25maWcgY2hhaW5cbi8vIGF0IG1vZHVsZSBsb2FkIHRpbWUuIFRoaXMga2VlcHMgdGhlIG1vZHVsZSBpbmRlcGVuZGVudGx5IHRlc3RhYmxlLlxuLyoqIFRpbWVvdXQgZm9yIGxzb2YvZnVzZXIvcHMgc3lzdGVtIGNhbGxzIChtcykgKi9cbmNvbnN0IENPTU1BTkRfVElNRU9VVF9NUyA9IDEwMDA7XG4vKiogUG9sbGluZyBpbnRlcnZhbCB3aGVuIHdhaXRpbmcgZm9yIFNJR1RFUk0gdG8gdGFrZSBlZmZlY3QgKG1zKSAqL1xuY29uc3QgU0lHVEVSTV9QT0xMX01TID0gMzAwO1xuLyoqIE51bWJlciBvZiBwb2xscyBiZWZvcmUgZXNjYWxhdGluZyB0byBTSUdLSUxMICovXG5jb25zdCBLSUxMX1BPTExfQ09VTlQgPSAxMDtcbi8qKiBXYWl0IGFmdGVyIFNJR0tJTEwgYmVmb3JlIHJldHVybmluZyAobXMpICovXG5jb25zdCBTSUdLSUxMX1dBSVRfTVMgPSA1MDA7XG4vKiogV2FpdCBiZXR3ZWVuIGxvY2sgZmlsZSByZWFkcyBmb3IgVE9DVE9VIG1pdGlnYXRpb24gKG1zKSAqL1xuY29uc3QgTE9DS19SRUNIRUNLX0RFTEFZX01TID0gNTAwO1xuXG5sZXQgX2xvZ2dlcjogdHlwZW9mIGltcG9ydCgnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJykubG9nZ2VyIHwgbnVsbCA9IG51bGw7XG5hc3luYyBmdW5jdGlvbiBnZXRMb2dnZXIoKSB7XG4gIGlmICghX2xvZ2dlcikge1xuICAgIHRyeSB7IF9sb2dnZXIgPSAoYXdhaXQgaW1wb3J0KCcuLi8uLi91dGlscy9sb2dnZXIuanMnKSkubG9nZ2VyOyB9XG4gICAgY2F0Y2ggeyAvKiBmYWxsYmFjayBiZWxvdyAqLyB9XG4gIH1cbiAgcmV0dXJuIF9sb2dnZXI7XG59XG5jb25zdCBsb2dnZXIgPSB7XG4gIHdhcm46IGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHsgY29uc3QgbCA9IGF3YWl0IGdldExvZ2dlcigpOyBsID8gbC53YXJuKGFyZ3NbMF0gYXMgc3RyaW5nLCBhcmdzWzFdKSA6IGNvbnNvbGUuZXJyb3IoJ1tXQVJOXScsIC4uLmFyZ3MpOyB9LFxuICBpbmZvOiBhc3luYyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7IGNvbnN0IGwgPSBhd2FpdCBnZXRMb2dnZXIoKTsgbCA/IGwuaW5mbyhhcmdzWzBdIGFzIHN0cmluZywgYXJnc1sxXSkgOiBjb25zb2xlLmVycm9yKCdbSU5GT10nLCAuLi5hcmdzKTsgfSxcbiAgZGVidWc6IGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHsgY29uc3QgbCA9IGF3YWl0IGdldExvZ2dlcigpOyBsID8gbC5kZWJ1ZyhhcmdzWzBdIGFzIHN0cmluZywgYXJnc1sxXSkgOiB2b2lkIDA7IH0sXG59O1xuXG4vKipcbiAqIEZpbmQgdGhlIFBJRCBvZiB0aGUgcHJvY2VzcyBsaXN0ZW5pbmcgb24gYSBnaXZlbiBwb3J0LlxuICogVXNlcyBsc29mIG9uIG1hY09TL0xpbnV4LiBSZXR1cm5zIG51bGwgaWYgbm90IGZvdW5kIG9yIG9uIGVycm9yLlxuICpcbiAqIFRpbWVvdXQ6IDFzIOKAlCBsc29mIG9uIGxvY2FsaG9zdCBpcyB0eXBpY2FsbHkgPDEwMG1zLiBUaGUgMXMgY2VpbGluZ1xuICogaGFuZGxlcyBzbG93IE5GUy1tb3VudGVkIC9kZXYvZmQgb3Igb3ZlcmxvYWRlZCBDSSBydW5uZXJzIHdpdGhvdXRcbiAqIGRlbGF5aW5nIHN0YXJ0dXAgbm90aWNlYWJseS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmRQaWRPblBvcnQocG9ydDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG4gIGNvbnN0IHsgZXhlY0ZpbGU6IGV4ZWNGaWxlQ2IgfSA9IGF3YWl0IGltcG9ydCgnbm9kZTpjaGlsZF9wcm9jZXNzJyk7XG4gIGNvbnN0IHsgcHJvbWlzaWZ5IH0gPSBhd2FpdCBpbXBvcnQoJ25vZGU6dXRpbCcpO1xuICBjb25zdCBleGVjRmlsZUFzeW5jID0gcHJvbWlzaWZ5KGV4ZWNGaWxlQ2IpO1xuXG4gIC8vIFRyeSBsc29mIGZpcnN0IChtYWNPUyArIG1vc3QgTGludXgpLCBmYWxsIGJhY2sgdG8gZnVzZXIgKG1pbmltYWwgTGludXgvRG9ja2VyKVxuICBmb3IgKGNvbnN0IGNtZCBvZiBbXG4gICAgeyBiaW46ICdsc29mJywgYXJnczogWyctdGknLCBgOiR7cG9ydH1gXSB9LFxuICAgIHsgYmluOiAnZnVzZXInLCBhcmdzOiBbYCR7cG9ydH0vdGNwYF0gfSxcbiAgXSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHN0ZG91dCwgc3RkZXJyIH0gPSBhd2FpdCBleGVjRmlsZUFzeW5jKGNtZC5iaW4sIGNtZC5hcmdzLCB7IHRpbWVvdXQ6IENPTU1BTkRfVElNRU9VVF9NUyB9KTtcbiAgICAgIC8vIGZ1c2VyIG91dHB1dHMgdG8gc3RkZXJyIG9uIHNvbWUgc3lzdGVtc1xuICAgICAgY29uc3Qgb3V0cHV0ID0gKHN0ZG91dCB8fCBzdGRlcnIgfHwgJycpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHBpZHMgPSBvdXRwdXQuc3BsaXQoL1xccysvKS5tYXAoTnVtYmVyKS5maWx0ZXIobiA9PiAhTnVtYmVyLmlzTmFOKG4pICYmIG4gPiAwKTtcbiAgICAgIGNvbnN0IG90aGVyUGlkID0gcGlkcy5maW5kKHAgPT4gcCAhPT0gcHJvY2Vzcy5waWQpO1xuICAgICAgaWYgKG90aGVyUGlkKSByZXR1cm4gb3RoZXJQaWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICBjb250aW51ZTsgLy8gY29tbWFuZCBub3QgZm91bmQgb3Igbm8gcmVzdWx0cyDigJQgdHJ5IG5leHRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogS2lsbCBhIHN0YWxlIHByb2Nlc3MgaG9sZGluZyBhIHBvcnQuIFNlbmRzIFNJR1RFUk0sIHdhaXRzIGJyaWVmbHksXG4gKiB0aGVuIFNJR0tJTEwgaWYgc3RpbGwgYWxpdmUuIE9ubHkga2lsbHMgRG9sbGhvdXNlTUNQIHByb2Nlc3Nlc1xuICogKHZlcmlmaWVkIGJ5IGNoZWNraW5nIHRoZSBjb21tYW5kIGxpbmUgYW5kIHVzZXIgb3duZXJzaGlwKS5cbiAqXG4gKiBUaW1lb3V0OiAxcyBmb3IgcHMgdmVyaWZpY2F0aW9uLiBLaWxsIHdhaXQ6IDMwMG1zIMOXIDEwIHBvbGxzID0gM3NcbiAqIGJlZm9yZSBlc2NhbGF0aW5nIHRvIFNJR0tJTEwuIFRvdGFsIHdvcnN0IGNhc2U6IH40cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGtpbGxTdGFsZVByb2Nlc3MocGlkOiBudW1iZXIsIHBvcnQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7IGV4ZWNGaWxlOiBleGVjRmlsZUNiIH0gPSBhd2FpdCBpbXBvcnQoJ25vZGU6Y2hpbGRfcHJvY2VzcycpO1xuICBjb25zdCB7IHByb21pc2lmeSB9ID0gYXdhaXQgaW1wb3J0KCdub2RlOnV0aWwnKTtcbiAgY29uc3QgZXhlY0ZpbGVBc3luYyA9IHByb21pc2lmeShleGVjRmlsZUNiKTtcblxuICAvLyBTZWN1cml0eSB2ZXJpZmljYXRpb24gZmxvdyDigJQgdGhyZWUgY2hlY2tzIG11c3QgcGFzcyBiZWZvcmUgd2Uga2lsbDpcbiAgLy8gMS4gUHJvY2VzcyBtdXN0IGJlIG93bmVkIGJ5IHRoZSBjdXJyZW50IE9TIHVzZXIgKHByZXZlbnRzIGNyb3NzLXVzZXIga2lsbHMpXG4gIC8vIDIuIENvbW1hbmQgbGluZSBtdXN0IG1hdGNoIGEgRG9sbGhvdXNlTUNQIGJpbmFyeSBwYXRoIChwcmV2ZW50cyBraWxsaW5nIG90aGVyIHNlcnZpY2VzKVxuICAvLyAzLiBJZiBib3RoIGZhaWwgb3IgcHMgY2FuJ3QgcnVuLCB3ZSByZWZ1c2Ug4oCUIHNhZmUgZGVmYXVsdCBpcyB0byBub3Qga2lsbFxuICB0cnkge1xuICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBleGVjRmlsZUFzeW5jKCdwcycsIFsnLXAnLCBTdHJpbmcocGlkKSwgJy1vJywgJ3VzZXI9LGNvbW1hbmQ9J10sIHsgdGltZW91dDogQ09NTUFORF9USU1FT1VUX01TIH0pO1xuXG4gICAgLy8gQ2hlY2sgMTogVXNlciBvd25lcnNoaXAg4oCUIG9ubHkga2lsbCBvdXIgb3duIHByb2Nlc3Nlc1xuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gKGF3YWl0IGltcG9ydCgnbm9kZTpvcycpKS51c2VySW5mbygpLnVzZXJuYW1lO1xuICAgIGlmICghc3Rkb3V0LnRyaW0oKS5zdGFydHNXaXRoKGN1cnJlbnRVc2VyKSkge1xuICAgICAgYXdhaXQgbG9nZ2VyLndhcm4oYFtXZWJVSV0gUG9ydCAke3BvcnR9IGhlbGQgYnkgZGlmZmVyZW50IHVzZXIgKHBpZCAke3BpZH0pIOKAlCBub3Qga2lsbGluZ2ApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIDI6IEJpbmFyeSBpZGVudGl0eSDigJQgbXVzdCBiZSAuYmluL21jcC1zZXJ2ZXIsIC5iaW4vZG9sbGhvdXNlbWNwLFxuICAgIC8vIC9iaW4vZG9sbGhvdXNlbWNwIChnbG9iYWwgaW5zdGFsbCksIG9yIGRpc3QvaW5kZXguanMgKGRpcmVjdCBub2RlIGV4ZWN1dGlvbikuXG4gICAgLy8gTk9UIGp1c3QgJ21jcC1zZXJ2ZXInIGFueXdoZXJlIGluIHRoZSBwYXRoIOKAlCB0aGF0IHdvdWxkIG1hdGNoIEplc3Qgd29ya2Vyc1xuICAgIC8vIHJ1bm5pbmcgZnJvbSB3aXRoaW4gdGhlIG1jcC1zZXJ2ZXIgcHJvamVjdCBkaXJlY3RvcnkuXG4gICAgY29uc3QgY21kTGluZSA9IHN0ZG91dC50cmltKCk7XG4gICAgY29uc3QgaXNEb2xsaG91c2VCaW4gPSAvKD86XnxcXC8pZG9sbGhvdXNlbWNwKD86XFxzfCQpLy50ZXN0KGNtZExpbmUpIHx8XG4gICAgICBjbWRMaW5lLmluY2x1ZGVzKCcuYmluL2RvbGxob3VzZW1jcCcpO1xuICAgIGNvbnN0IGlzTWNwU2VydmVyQmluID0gY21kTGluZS5pbmNsdWRlcygnLmJpbi9tY3Atc2VydmVyJykgfHxcbiAgICAgIGNtZExpbmUuaW5jbHVkZXMoJ2Rpc3QvaW5kZXguanMnKTtcbiAgICBpZiAoIWlzRG9sbGhvdXNlQmluICYmICFpc01jcFNlcnZlckJpbikge1xuICAgICAgYXdhaXQgbG9nZ2VyLndhcm4oYFtXZWJVSV0gUG9ydCAke3BvcnR9IGhlbGQgYnkgbm9uLURvbGxob3VzZU1DUCBwcm9jZXNzIChwaWQgJHtwaWR9KSDigJQgbm90IGtpbGxpbmdgLCB7IGNtZExpbmUgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGF3YWl0IGxvZ2dlci5kZWJ1ZyhgW1dlYlVJXSBWZXJpZmllZCBzdGFsZSBwcm9jZXNzICR7cGlkfSBpcyBEb2xsaG91c2VNQ1BgLCB7IGNtZExpbmUgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIENoZWNrIDM6IElmIHdlIGNhbid0IHZlcmlmeSwgZG9uJ3Qga2lsbCDigJQgc2FmZSBkZWZhdWx0XG4gICAgYXdhaXQgbG9nZ2VyLmRlYnVnKGBbV2ViVUldIENhbm5vdCB2ZXJpZnkgcHJvY2VzcyAke3BpZH0g4oCUIHNraXBwaW5nIGtpbGxgLCB7XG4gICAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcHJvY2Vzcy5raWxsKHBpZCwgJ1NJR1RFUk0nKTtcbiAgICBsb2dnZXIud2FybihgW1dlYlVJXSBTZW50IFNJR1RFUk0gdG8gc3RhbGUgcHJvY2VzcyAke3BpZH0gb24gcG9ydCAke3BvcnR9YCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBLSUxMX1BPTExfQ09VTlQ7IGkrKykge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIFNJR1RFUk1fUE9MTF9NUykpO1xuICAgICAgdHJ5IHsgcHJvY2Vzcy5raWxsKHBpZCwgMCk7IH0gY2F0Y2ggeyByZXR1cm4gdHJ1ZTsgfVxuICAgIH1cbiAgICBwcm9jZXNzLmtpbGwocGlkLCAnU0lHS0lMTCcpO1xuICAgIGxvZ2dlci53YXJuKGBbV2ViVUldIFNlbnQgU0lHS0lMTCB0byBzdGFsZSBwcm9jZXNzICR7cGlkfSBvbiBwb3J0ICR7cG9ydH1gKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgU0lHS0lMTF9XQUlUX01TKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB0cnVlOyAvLyBwcm9jZXNzIGFscmVhZHkgZGVhZFxuICB9XG59XG5cbi8qKlxuICogRGV0ZWN0IGFuZCByZWNvdmVyIGZyb20gYSBzdGFsZSBwcm9jZXNzIHNxdWF0dGluZyBvbiB0aGUgcG9ydC5cbiAqIENvbXBhcmVzIHRoZSBwb3J0IGhvbGRlcidzIFBJRCBhZ2FpbnN0IHRoZSBsZWFkZXIgbG9jayBmaWxlIHRvIGRldGVybWluZVxuICogaWYgaXQncyBhIHNxdWF0dGVyLiBSZXR1cm5zIHRydWUgaWYgdGhlIHNxdWF0dGVyIHdhcyBraWxsZWQuXG4gKlxuICogVGltZW91dHM6IGxzb2YgMXMsIHBzIDFzLCBTSUdURVJNIHdhaXQgM3Mg4oCUIG1heCB+NXMgdG90YWwuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWNvdmVyU3RhbGVQb3J0KHBvcnQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBzdGFsZVBpZCA9IGF3YWl0IGZpbmRQaWRPblBvcnQocG9ydCk7XG4gIGlmICghc3RhbGVQaWQpIHJldHVybiBmYWxzZTtcblxuICAvLyBUT0NUT1UgbWl0aWdhdGlvbjogYSBuZXcgcHJvY2VzcyBtYXkgaGF2ZSBqdXN0IGJvdW5kIHRoZSBwb3J0IGJ1dCBub3QgeWV0XG4gIC8vIHdyaXR0ZW4gaXRzIGxvY2sgZmlsZS4gUmVhZCB0aGUgbG9jaywgcGF1c2UsIHJlLXJlYWQuIElmIHRoZSBzZWNvbmQgcmVhZFxuICAvLyBub3cgbWF0Y2hlcyB0aGUgcG9ydCBob2xkZXIsIGl0J3MgYSBmcmVzaCBsZWFkZXIg4oCUIGRvbid0IGtpbGwuXG4gIGNvbnN0IHsgcmVhZExlYWRlckxvY2sgfSA9IGF3YWl0IGltcG9ydCgnLi9MZWFkZXJFbGVjdGlvbi5qcycpO1xuICBmb3IgKGxldCBjaGVjayA9IDA7IGNoZWNrIDwgMjsgY2hlY2srKykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBsb2NrID0gYXdhaXQgcmVhZExlYWRlckxvY2soKTtcbiAgICAgIGlmIChsb2NrPy5waWQgPT09IHN0YWxlUGlkICYmIGxvY2s/LnBvcnQgPT09IHBvcnQgJiYgbG9jay5waWQgIT09IHByb2Nlc3MucGlkKSB7XG4gICAgICAgIGF3YWl0IGxvZ2dlci53YXJuKGBbV2ViVUldIFBvcnQgJHtwb3J0fSBoZWxkIGJ5IGxlZ2l0aW1hdGUgbGVhZGVyIChwaWQgJHtzdGFsZVBpZH0pIOKAlCBub3Qga2lsbGluZ2ApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBDYW4ndCByZWFkIGxvY2sgZmlsZSDigJQgY29udGludWUgdG8gbmV4dCBjaGVjayBvciBraWxsXG4gICAgfVxuICAgIGlmIChjaGVjayA9PT0gMCkge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIExPQ0tfUkVDSEVDS19ERUxBWV9NUykpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGtpbGxlZCA9IGF3YWl0IGtpbGxTdGFsZVByb2Nlc3Moc3RhbGVQaWQsIHBvcnQpO1xuICBpZiAoa2lsbGVkKSB7XG4gICAgbG9nZ2VyLmluZm8oYFtXZWJVSV0gU3RhbGUgcHJvY2VzcyAke3N0YWxlUGlkfSByZW1vdmVkIGZyb20gcG9ydCAke3BvcnR9YCk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIFNJR0tJTExfV0FJVF9NUykpOyAvLyBicmllZiBwYXVzZSBmb3IgcG9ydCByZWxlYXNlXG4gIH1cbiAgcmV0dXJuIGtpbGxlZDtcbn1cbiJdfQ==
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhbGVQcm9jZXNzUmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvU3RhbGVQcm9jZXNzUmVjb3ZlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHO0FBRUgsOEVBQThFO0FBQzlFLHFFQUFxRTtBQUNyRSxrREFBa0Q7QUFDbEQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFDaEMsb0VBQW9FO0FBQ3BFLE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQztBQUM1QixtREFBbUQ7QUFDbkQsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQzNCLCtDQUErQztBQUMvQyxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFDNUIsOERBQThEO0FBQzlELE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDO0FBRWxDLElBQUksT0FBTyxHQUF5RCxJQUFJLENBQUM7QUFDekUsS0FBSyxVQUFVLFNBQVM7SUFDdEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDO1lBQUMsT0FBTyxHQUFHLENBQUMsTUFBTSxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUFDLENBQUM7UUFDakUsTUFBTSxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUNELE1BQU0sTUFBTSxHQUFHO0lBQ2IsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQWUsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsTUFBTSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFL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QU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCx3REFBd0Q7UUFDMUQsQ0FBQztRQUNELElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RELElBQUksTUFBTSxFQUFFLENBQUM7UUFDWCxNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixRQUFRLHNCQUFzQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQywrQkFBK0I7SUFDekYsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0YWxlIHByb2Nlc3MgZGV0ZWN0aW9uIGFuZCByZWNvdmVyeSAoIzE4NTApLlxuICpcbiAqIEZpbmRzIGFuZCBraWxscyB6b21iaWUgRG9sbGhvdXNlTUNQIHByb2Nlc3NlcyB0aGF0IHNxdWF0IG9uIHRoZSBjb25zb2xlXG4gKiBwb3J0IGFmdGVyIHRoZWlyIHNlc3Npb24gaGFzIGVuZGVkLiBVc2VkIGJ5IGJpbmRBbmRMaXN0ZW4gaW4gc2VydmVyLnRzXG4gKiB3aGVuIEVBRERSSU5VU0Ugb2NjdXJzLlxuICpcbiAqIEV4dHJhY3RlZCB0byBhIHN0YW5kYWxvbmUgbW9kdWxlIHNvIGl0IGNhbiBiZSB0ZXN0ZWQgd2l0aG91dCBpbXBvcnRpbmdcbiAqIHRoZSBmdWxsIEV4cHJlc3Mgc2VydmVyIGFuZCBpdHMgZGVwZW5kZW5jeSBjaGFpbi5cbiAqL1xuXG4vLyBVc2UgbGF6eSBpbXBvcnQgZm9yIGxvZ2dlciB0byBhdm9pZCBwdWxsaW5nIGluIHRoZSBmdWxsIGVudi50cy9jb25maWcgY2hhaW5cbi8vIGF0IG1vZHVsZSBsb2FkIHRpbWUuIFRoaXMga2VlcHMgdGhlIG1vZHVsZSBpbmRlcGVuZGVudGx5IHRlc3RhYmxlLlxuLyoqIFRpbWVvdXQgZm9yIGxzb2YvZnVzZXIvcHMgc3lzdGVtIGNhbGxzIChtcykgKi9cbmNvbnN0IENPTU1BTkRfVElNRU9VVF9NUyA9IDEwMDA7XG4vKiogUG9sbGluZyBpbnRlcnZhbCB3aGVuIHdhaXRpbmcgZm9yIFNJR1RFUk0gdG8gdGFrZSBlZmZlY3QgKG1zKSAqL1xuY29uc3QgU0lHVEVSTV9QT0xMX01TID0gMzAwO1xuLyoqIE51bWJlciBvZiBwb2xscyBiZWZvcmUgZXNjYWxhdGluZyB0byBTSUdLSUxMICovXG5jb25zdCBLSUxMX1BPTExfQ09VTlQgPSAxMDtcbi8qKiBXYWl0IGFmdGVyIFNJR0tJTEwgYmVmb3JlIHJldHVybmluZyAobXMpICovXG5jb25zdCBTSUdLSUxMX1dBSVRfTVMgPSA1MDA7XG4vKiogV2FpdCBiZXR3ZWVuIGxvY2sgZmlsZSByZWFkcyBmb3IgVE9DVE9VIG1pdGlnYXRpb24gKG1zKSAqL1xuY29uc3QgTE9DS19SRUNIRUNLX0RFTEFZX01TID0gNTAwO1xuXG5sZXQgX2xvZ2dlcjogdHlwZW9mIGltcG9ydCgnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJykubG9nZ2VyIHwgbnVsbCA9IG51bGw7XG5hc3luYyBmdW5jdGlvbiBnZXRMb2dnZXIoKSB7XG4gIGlmICghX2xvZ2dlcikge1xuICAgIHRyeSB7IF9sb2dnZXIgPSAoYXdhaXQgaW1wb3J0KCcuLi8uLi91dGlscy9sb2dnZXIuanMnKSkubG9nZ2VyOyB9XG4gICAgY2F0Y2ggeyAvKiBmYWxsYmFjayBiZWxvdyAqLyB9XG4gIH1cbiAgcmV0dXJuIF9sb2dnZXI7XG59XG5jb25zdCBsb2dnZXIgPSB7XG4gIHdhcm46IGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHsgY29uc3QgbCA9IGF3YWl0IGdldExvZ2dlcigpOyBsID8gbC53YXJuKGFyZ3NbMF0gYXMgc3RyaW5nLCBhcmdzWzFdKSA6IGNvbnNvbGUuZXJyb3IoJ1tXQVJOXScsIC4uLmFyZ3MpOyB9LFxuICBpbmZvOiBhc3luYyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7IGNvbnN0IGwgPSBhd2FpdCBnZXRMb2dnZXIoKTsgbCA/IGwuaW5mbyhhcmdzWzBdIGFzIHN0cmluZywgYXJnc1sxXSkgOiBjb25zb2xlLmVycm9yKCdbSU5GT10nLCAuLi5hcmdzKTsgfSxcbiAgZGVidWc6IGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHsgY29uc3QgbCA9IGF3YWl0IGdldExvZ2dlcigpOyBsID8gbC5kZWJ1ZyhhcmdzWzBdIGFzIHN0cmluZywgYXJnc1sxXSkgOiB2b2lkIDA7IH0sXG59O1xuXG4vKipcbiAqIEZpbmQgdGhlIFBJRCBvZiB0aGUgcHJvY2VzcyBsaXN0ZW5pbmcgb24gYSBnaXZlbiBwb3J0LlxuICogVXNlcyBsc29mIG9uIG1hY09TL0xpbnV4LiBSZXR1cm5zIG51bGwgaWYgbm90IGZvdW5kIG9yIG9uIGVycm9yLlxuICpcbiAqIFRpbWVvdXQ6IDFzIOKAlCBsc29mIG9uIGxvY2FsaG9zdCBpcyB0eXBpY2FsbHkgPDEwMG1zLiBUaGUgMXMgY2VpbGluZ1xuICogaGFuZGxlcyBzbG93IE5GUy1tb3VudGVkIC9kZXYvZmQgb3Igb3ZlcmxvYWRlZCBDSSBydW5uZXJzIHdpdGhvdXRcbiAqIGRlbGF5aW5nIHN0YXJ0dXAgbm90aWNlYWJseS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmRQaWRPblBvcnQocG9ydDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG4gIGNvbnN0IHsgZXhlY0ZpbGU6IGV4ZWNGaWxlQ2IgfSA9IGF3YWl0IGltcG9ydCgnbm9kZTpjaGlsZF9wcm9jZXNzJyk7XG4gIGNvbnN0IHsgcHJvbWlzaWZ5IH0gPSBhd2FpdCBpbXBvcnQoJ25vZGU6dXRpbCcpO1xuICBjb25zdCBleGVjRmlsZUFzeW5jID0gcHJvbWlzaWZ5KGV4ZWNGaWxlQ2IpO1xuXG4gIC8vIFRyeSBsc29mIGZpcnN0IChtYWNPUyArIG1vc3QgTGludXgpLCBmYWxsIGJhY2sgdG8gZnVzZXIgKG1pbmltYWwgTGludXgvRG9ja2VyKVxuICBmb3IgKGNvbnN0IGNtZCBvZiBbXG4gICAgeyBiaW46ICdsc29mJywgYXJnczogWyctdGknLCBgOiR7cG9ydH1gXSB9LFxuICAgIHsgYmluOiAnZnVzZXInLCBhcmdzOiBbYCR7cG9ydH0vdGNwYF0gfSxcbiAgXSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHN0ZG91dCwgc3RkZXJyIH0gPSBhd2FpdCBleGVjRmlsZUFzeW5jKGNtZC5iaW4sIGNtZC5hcmdzLCB7IHRpbWVvdXQ6IENPTU1BTkRfVElNRU9VVF9NUyB9KTtcbiAgICAgIC8vIGZ1c2VyIG91dHB1dHMgdG8gc3RkZXJyIG9uIHNvbWUgc3lzdGVtc1xuICAgICAgY29uc3Qgb3V0cHV0ID0gKHN0ZG91dCB8fCBzdGRlcnIgfHwgJycpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHBpZHMgPSBvdXRwdXQuc3BsaXQoL1xccysvKS5tYXAoTnVtYmVyKS5maWx0ZXIobiA9PiAhTnVtYmVyLmlzTmFOKG4pICYmIG4gPiAwKTtcbiAgICAgIGNvbnN0IG90aGVyUGlkID0gcGlkcy5maW5kKHAgPT4gcCAhPT0gcHJvY2Vzcy5waWQpO1xuICAgICAgaWYgKG90aGVyUGlkKSByZXR1cm4gb3RoZXJQaWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICBjb250aW51ZTsgLy8gY29tbWFuZCBub3QgZm91bmQgb3Igbm8gcmVzdWx0cyDigJQgdHJ5IG5leHRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogS2lsbCBhIHN0YWxlIHByb2Nlc3MgaG9sZGluZyBhIHBvcnQuIFNlbmRzIFNJR1RFUk0sIHdhaXRzIGJyaWVmbHksXG4gKiB0aGVuIFNJR0tJTEwgaWYgc3RpbGwgYWxpdmUuIE9ubHkga2lsbHMgRG9sbGhvdXNlTUNQIHByb2Nlc3Nlc1xuICogKHZlcmlmaWVkIGJ5IGNoZWNraW5nIHRoZSBjb21tYW5kIGxpbmUgYW5kIHVzZXIgb3duZXJzaGlwKS5cbiAqXG4gKiBUaW1lb3V0OiAxcyBmb3IgcHMgdmVyaWZpY2F0aW9uLiBLaWxsIHdhaXQ6IDMwMG1zIMOXIDEwIHBvbGxzID0gM3NcbiAqIGJlZm9yZSBlc2NhbGF0aW5nIHRvIFNJR0tJTEwuIFRvdGFsIHdvcnN0IGNhc2U6IH40cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGtpbGxTdGFsZVByb2Nlc3MocGlkOiBudW1iZXIsIHBvcnQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7IGV4ZWNGaWxlOiBleGVjRmlsZUNiIH0gPSBhd2FpdCBpbXBvcnQoJ25vZGU6Y2hpbGRfcHJvY2VzcycpO1xuICBjb25zdCB7IHByb21pc2lmeSB9ID0gYXdhaXQgaW1wb3J0KCdub2RlOnV0aWwnKTtcbiAgY29uc3QgZXhlY0ZpbGVBc3luYyA9IHByb21pc2lmeShleGVjRmlsZUNiKTtcblxuICAvLyBTZWN1cml0eSB2ZXJpZmljYXRpb24gZmxvdyDigJQgdGhyZWUgY2hlY2tzIG11c3QgcGFzcyBiZWZvcmUgd2Uga2lsbDpcbiAgLy8gMS4gUHJvY2VzcyBtdXN0IGJlIG93bmVkIGJ5IHRoZSBjdXJyZW50IE9TIHVzZXIgKHByZXZlbnRzIGNyb3NzLXVzZXIga2lsbHMpXG4gIC8vIDIuIENvbW1hbmQgbGluZSBtdXN0IG1hdGNoIGEgRG9sbGhvdXNlTUNQIGJpbmFyeSBwYXRoIChwcmV2ZW50cyBraWxsaW5nIG90aGVyIHNlcnZpY2VzKVxuICAvLyAzLiBJZiBib3RoIGZhaWwgb3IgcHMgY2FuJ3QgcnVuLCB3ZSByZWZ1c2Ug4oCUIHNhZmUgZGVmYXVsdCBpcyB0byBub3Qga2lsbFxuICBsZXQgY21kTGluZSA9ICcnO1xuICB0cnkge1xuICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBleGVjRmlsZUFzeW5jKCdwcycsIFsnLXAnLCBTdHJpbmcocGlkKSwgJy1vJywgJ3VzZXI9LGNvbW1hbmQ9J10sIHsgdGltZW91dDogQ09NTUFORF9USU1FT1VUX01TIH0pO1xuXG4gICAgLy8gQ2hlY2sgMTogVXNlciBvd25lcnNoaXAg4oCUIG9ubHkga2lsbCBvdXIgb3duIHByb2Nlc3Nlc1xuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gKGF3YWl0IGltcG9ydCgnbm9kZTpvcycpKS51c2VySW5mbygpLnVzZXJuYW1lO1xuICAgIGlmICghc3Rkb3V0LnRyaW0oKS5zdGFydHNXaXRoKGN1cnJlbnRVc2VyKSkge1xuICAgICAgYXdhaXQgbG9nZ2VyLndhcm4oYFtXZWJVSV0gUG9ydCAke3BvcnR9IGhlbGQgYnkgZGlmZmVyZW50IHVzZXIgKHBpZCAke3BpZH0pIOKAlCBub3Qga2lsbGluZ2ApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIDI6IEJpbmFyeSBpZGVudGl0eSDigJQgbXVzdCBiZSAuYmluL21jcC1zZXJ2ZXIsIC5iaW4vZG9sbGhvdXNlbWNwLFxuICAgIC8vIC9iaW4vZG9sbGhvdXNlbWNwIChnbG9iYWwgaW5zdGFsbCksIG9yIGRpc3QvaW5kZXguanMgKGRpcmVjdCBub2RlIGV4ZWN1dGlvbikuXG4gICAgLy8gTk9UIGp1c3QgJ21jcC1zZXJ2ZXInIGFueXdoZXJlIGluIHRoZSBwYXRoIOKAlCB0aGF0IHdvdWxkIG1hdGNoIEplc3Qgd29ya2Vyc1xuICAgIC8vIHJ1bm5pbmcgZnJvbSB3aXRoaW4gdGhlIG1jcC1zZXJ2ZXIgcHJvamVjdCBkaXJlY3RvcnkuXG4gICAgY21kTGluZSA9IHN0ZG91dC50cmltKCk7XG4gICAgY29uc3QgaXNEb2xsaG91c2VCaW4gPSAvKD86XnxcXC8pZG9sbGhvdXNlbWNwKD86XFxzfCQpLy50ZXN0KGNtZExpbmUpIHx8XG4gICAgICBjbWRMaW5lLmluY2x1ZGVzKCcuYmluL2RvbGxob3VzZW1jcCcpO1xuICAgIGNvbnN0IGlzTWNwU2VydmVyQmluID0gY21kTGluZS5pbmNsdWRlcygnLmJpbi9tY3Atc2VydmVyJykgfHxcbiAgICAgIC8oPzpkb2xsaG91c2VtY3B8bWNwLXNlcnZlcilbL1xcXFxdZGlzdFsvXFxcXF1pbmRleFxcLmpzLy50ZXN0KGNtZExpbmUpO1xuICAgIGlmICghaXNEb2xsaG91c2VCaW4gJiYgIWlzTWNwU2VydmVyQmluKSB7XG4gICAgICBhd2FpdCBsb2dnZXIud2FybihgW1dlYlVJXSBQb3J0ICR7cG9ydH0gaGVsZCBieSBub24tRG9sbGhvdXNlTUNQIHByb2Nlc3MgKHBpZCAke3BpZH0pIOKAlCBub3Qga2lsbGluZ2AsIHsgY21kTGluZSB9KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgYXdhaXQgbG9nZ2VyLmRlYnVnKGBbV2ViVUldIFZlcmlmaWVkIHN0YWxlIHByb2Nlc3MgJHtwaWR9IGlzIERvbGxob3VzZU1DUGAsIHsgY21kTGluZSB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gQ2hlY2sgMzogSWYgd2UgY2FuJ3QgdmVyaWZ5LCBkb24ndCBraWxsIOKAlCBzYWZlIGRlZmF1bHRcbiAgICBhd2FpdCBsb2dnZXIuZGVidWcoYFtXZWJVSV0gQ2Fubm90IHZlcmlmeSBwcm9jZXNzICR7cGlkfSDigJQgc2tpcHBpbmcga2lsbGAsIHtcbiAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBwcm9jZXNzLmtpbGwocGlkLCAnU0lHVEVSTScpO1xuICAgIGxvZ2dlci53YXJuKGBbV2ViVUldIFNlbnQgU0lHVEVSTSB0byBzdGFsZSBwcm9jZXNzICR7cGlkfSBvbiBwb3J0ICR7cG9ydH1gLCB7IGNtZExpbmUgfSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBLSUxMX1BPTExfQ09VTlQ7IGkrKykge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIFNJR1RFUk1fUE9MTF9NUykpO1xuICAgICAgdHJ5IHsgcHJvY2Vzcy5raWxsKHBpZCwgMCk7IH0gY2F0Y2ggeyByZXR1cm4gdHJ1ZTsgfVxuICAgIH1cbiAgICBwcm9jZXNzLmtpbGwocGlkLCAnU0lHS0lMTCcpO1xuICAgIGxvZ2dlci53YXJuKGBbV2ViVUldIFNlbnQgU0lHS0lMTCB0byBzdGFsZSBwcm9jZXNzICR7cGlkfSBvbiBwb3J0ICR7cG9ydH1gKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgU0lHS0lMTF9XQUlUX01TKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB0cnVlOyAvLyBwcm9jZXNzIGFscmVhZHkgZGVhZFxuICB9XG59XG5cbi8qKlxuICogRGV0ZWN0IGFuZCByZWNvdmVyIGZyb20gYSBzdGFsZSBwcm9jZXNzIHNxdWF0dGluZyBvbiB0aGUgcG9ydC5cbiAqIENvbXBhcmVzIHRoZSBwb3J0IGhvbGRlcidzIFBJRCBhZ2FpbnN0IHRoZSBsZWFkZXIgbG9jayBmaWxlIHRvIGRldGVybWluZVxuICogaWYgaXQncyBhIHNxdWF0dGVyLiBSZXR1cm5zIHRydWUgaWYgdGhlIHNxdWF0dGVyIHdhcyBraWxsZWQuXG4gKlxuICogVGltZW91dHM6IGxzb2YgMXMsIHBzIDFzLCBTSUdURVJNIHdhaXQgM3Mg4oCUIG1heCB+NXMgdG90YWwuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWNvdmVyU3RhbGVQb3J0KHBvcnQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBzdGFsZVBpZCA9IGF3YWl0IGZpbmRQaWRPblBvcnQocG9ydCk7XG4gIGlmICghc3RhbGVQaWQpIHJldHVybiBmYWxzZTtcblxuICAvLyBUT0NUT1UgbWl0aWdhdGlvbjogYSBuZXcgcHJvY2VzcyBtYXkgaGF2ZSBqdXN0IGJvdW5kIHRoZSBwb3J0IGJ1dCBub3QgeWV0XG4gIC8vIHdyaXR0ZW4gaXRzIGxvY2sgZmlsZS4gUmVhZCB0aGUgbG9jaywgcGF1c2UsIHJlLXJlYWQuIElmIHRoZSBzZWNvbmQgcmVhZFxuICAvLyBub3cgbWF0Y2hlcyB0aGUgcG9ydCBob2xkZXIsIGl0J3MgYSBmcmVzaCBsZWFkZXIg4oCUIGRvbid0IGtpbGwuXG4gIGNvbnN0IHsgcmVhZExlYWRlckxvY2sgfSA9IGF3YWl0IGltcG9ydCgnLi9MZWFkZXJFbGVjdGlvbi5qcycpO1xuICBmb3IgKGxldCBjaGVjayA9IDA7IGNoZWNrIDwgMjsgY2hlY2srKykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBsb2NrID0gYXdhaXQgcmVhZExlYWRlckxvY2soKTtcbiAgICAgIGlmIChsb2NrPy5waWQgPT09IHN0YWxlUGlkICYmIGxvY2s/LnBvcnQgPT09IHBvcnQgJiYgbG9jay5waWQgIT09IHByb2Nlc3MucGlkKSB7XG4gICAgICAgIGF3YWl0IGxvZ2dlci53YXJuKGBbV2ViVUldIFBvcnQgJHtwb3J0fSBoZWxkIGJ5IGxlZ2l0aW1hdGUgbGVhZGVyIChwaWQgJHtzdGFsZVBpZH0pIOKAlCBub3Qga2lsbGluZ2ApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBDYW4ndCByZWFkIGxvY2sgZmlsZSDigJQgY29udGludWUgdG8gbmV4dCBjaGVjayBvciBraWxsXG4gICAgfVxuICAgIGlmIChjaGVjayA9PT0gMCkge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIExPQ0tfUkVDSEVDS19ERUxBWV9NUykpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGtpbGxlZCA9IGF3YWl0IGtpbGxTdGFsZVByb2Nlc3Moc3RhbGVQaWQsIHBvcnQpO1xuICBpZiAoa2lsbGVkKSB7XG4gICAgbG9nZ2VyLmluZm8oYFtXZWJVSV0gU3RhbGUgcHJvY2VzcyAke3N0YWxlUGlkfSByZW1vdmVkIGZyb20gcG9ydCAke3BvcnR9YCk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIFNJR0tJTExfV0FJVF9NUykpOyAvLyBicmllZiBwYXVzZSBmb3IgcG9ydCByZWxlYXNlXG4gIH1cbiAgcmV0dXJuIGtpbGxlZDtcbn1cbiJdfQ==
@@ -111,14 +111,14 @@ export async function startUnifiedConsole(options) {
111
111
  */
112
112
  async function startAsLeader(options, election, consolePort = DEFAULT_CONSOLE_PORT) {
113
113
  const { startWebServer } = await import('../server.js');
114
- const { pickRandomPuppetName } = await import('./SessionNames.js');
114
+ const { pickRandomTokenName } = await import('./SessionNames.js');
115
115
  // Initialize the console token store (#1780). Creates the token file on
116
116
  // first run, reads the existing tokens on subsequent runs. The token is
117
117
  // persistent across restarts — only rotated on explicit request (Phase 2).
118
118
  // Feature flag DOLLHOUSE_WEB_AUTH_ENABLED controls enforcement; the file
119
119
  // is generated regardless so consumers can attach tokens preemptively.
120
120
  const tokenStore = new ConsoleTokenStore(env.DOLLHOUSE_CONSOLE_TOKEN_FILE);
121
- const primaryToken = await tokenStore.ensureInitialized(pickRandomPuppetName());
121
+ const primaryToken = await tokenStore.ensureInitialized(pickRandomTokenName());
122
122
  logger.info('[UnifiedConsole] Console token store initialized', {
123
123
  tokenId: primaryToken.id,
124
124
  tokenName: primaryToken.name,
@@ -232,4 +232,4 @@ async function startAsFollower(options, election, consolePort = DEFAULT_CONSOLE_
232
232
  },
233
233
  };
234
234
  }
235
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5pZmllZENvbnNvbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvVW5pZmllZENvbnNvbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQU1ILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLDJCQUEyQixFQUMzQixvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixrQkFBa0IsR0FFbkIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGdCQUFnQixHQUNqQixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUxQzs7Ozs7O0dBTUc7QUFDSCxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQztBQW9DNUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSwwQkFBMEIsQ0FDOUMsV0FBbUIsRUFDbkIsU0FBb0Msa0JBQWtCLEVBQ3RELE1BQXFCLE1BQU07SUFFM0IsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLEVBQUUsQ0FBQztRQUM5QixJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QixHQUFHLENBQUMsSUFBSSxDQUNOLDZFQUE2RTtnQkFDN0UsUUFBUSxNQUFNLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxJQUFJLDRCQUE0QjtnQkFDbkUs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R0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5RixDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFeEMsd0NBQXdDO0lBQ3hDLGdCQUFnQixHQUFHLElBQUksZ0JBQWdCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM5RixNQUFNLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBRS9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLEVBQUU7UUFDL0MsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFVBQVU7UUFDaEUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUc7UUFDaEYsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVM7S0FDaEQsQ0FBQyxDQUFDO0lBRUgsT0FBTztRQUNMLElBQUksRUFBRSxVQUFVO1FBQ2hCLFFBQVE7UUFDUixPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDbEIsTUFBTSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM5QixNQUFNLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVuaWZpZWQgd2ViIGNvbnNvbGUgb3JjaGVzdHJhdG9yLlxuICpcbiAqIFRpZXMgdG9nZXRoZXIgbGVhZGVyIGVsZWN0aW9uLCBjb25zb2xlIHN0YXJ0dXAsIGZvbGxvd2VyIHdpcmluZyxcbiAqIGFuZCBzZXNzaW9uIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50XG4gKiBjYWxsZWQgYnkgdGhlIERJIGNvbnRhaW5lciBkdXJpbmcgZGVmZXJyZWQgc2V0dXAuXG4gKlxuICogRmxvdzpcbiAqIDEuIFJ1biBsZWFkZXIgZWxlY3Rpb24gKHJlYWQgbG9jayBmaWxlLCBjbGFpbSBvciBmb2xsb3cpXG4gKiAyLiBJZiBsZWFkZXI6IHN0YXJ0IHdlYiBzZXJ2ZXIgb24gZml4ZWQgcG9ydCwgbW91bnQgaW5nZXN0IHJvdXRlcywgc3RhcnQgaGVhcnRiZWF0XG4gKiAzLiBJZiBmb2xsb3dlcjogcmVnaXN0ZXIgZm9yd2FyZGluZyBzaW5rcyB3aXRoIExvZ01hbmFnZXIsIHN0YXJ0IHNlc3Npb24gaGVhcnRiZWF0XG4gKlxuICogQHNpbmNlIHYyLjEuMCDigJQgSXNzdWUgIzE3MDBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFVuaWZpZWRMb2dFbnRyeSB9IGZyb20gJy4uLy4uL2xvZ2dpbmcvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZXRyaWNTbmFwc2hvdCB9IGZyb20gJy4uLy4uL21ldHJpY3MvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlMb2dTaW5rIH0gZnJvbSAnLi4vLi4vbG9nZ2luZy9zaW5rcy9NZW1vcnlMb2dTaW5rLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtb3J5TWV0cmljc1NpbmsgfSBmcm9tICcuLi8uLi9tZXRyaWNzL3NpbmtzL01lbW9yeU1ldHJpY3NTaW5rLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQge1xuICBlbGVjdExlYWRlcixcbiAgaXNMZWFkZXJXZWJDb25zb2xlUmVhY2hhYmxlLFxuICBmb3JjZUNsYWltTGVhZGVyc2hpcCxcbiAgc3RhcnRIZWFydGJlYXQsXG4gIHJlZ2lzdGVyTGVhZGVyQ2xlYW51cCxcbiAgZGV0ZWN0TGVnYWN5TGVhZGVyLFxuICB0eXBlIEVsZWN0aW9uUmVzdWx0LFxufSBmcm9tICcuL0xlYWRlckVsZWN0aW9uLmpzJztcbmltcG9ydCB7IGNyZWF0ZUluZ2VzdFJvdXRlcyB9IGZyb20gJy4vSW5nZXN0Um91dGVzLmpzJztcbmltcG9ydCB7XG4gIExlYWRlckZvcndhcmRpbmdMb2dTaW5rLFxuICBTZXNzaW9uSGVhcnRiZWF0LFxufSBmcm9tICcuL0xlYWRlckZvcndhcmRpbmdTaW5rLmpzJztcbmltcG9ydCB7IFByb21vdGlvbk1hbmFnZXIgfSBmcm9tICcuL1Byb21vdGlvbk1hbmFnZXIuanMnO1xuaW1wb3J0IHsgQ29uc29sZVRva2VuU3RvcmUgfSBmcm9tICcuL2NvbnNvbGVUb2tlbi5qcyc7XG5pbXBvcnQgeyBlbnYgfSBmcm9tICcuLi8uLi9jb25maWcvZW52LmpzJztcblxuLyoqXG4gKiBEZWZhdWx0IGNvbnNvbGUgcG9ydCBmcm9tIHRoZSBlbnYgdmFyLiBVc2VkIGFzIGZhbGxiYWNrIHdoZW4gbm8gcG9ydFxuICogaXMgcHJvdmlkZWQgdmlhIGNvbmZpZyBmaWxlIG9yIG9wdGlvbnMuIFRoZSByZXNvbHV0aW9uIGhpZXJhcmNoeSBpczpcbiAqICAgMS4gb3B0aW9ucy5wb3J0IChmcm9tIGNvbmZpZyBmaWxlLCByZXNvbHZlZCBieSB0aGUgREkgY29udGFpbmVyKVxuICogICAyLiBET0xMSE9VU0VfV0VCX0NPTlNPTEVfUE9SVCBlbnYgdmFyXG4gKiAgIDMuIDQxNzE1IChoYXJkY29kZWQgZGVmYXVsdCBpbiBlbnYudHMpXG4gKi9cbmNvbnN0IERFRkFVTFRfQ09OU09MRV9QT1JUID0gZW52LkRPTExIT1VTRV9XRUJfQ09OU09MRV9QT1JUO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHN0YXJ0aW5nIHRoZSB1bmlmaWVkIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pZmllZENvbnNvbGVPcHRpb25zIHtcbiAgLyoqIFRoaXMgcHJvY2VzcydzIHVuaXF1ZSBzZXNzaW9uIElEICovXG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICAvKiogUG9ydGZvbGlvIGJhc2UgZGlyZWN0b3J5IChmb3Igc3RhcnRXZWJTZXJ2ZXIpICovXG4gIHBvcnRmb2xpb0Rpcjogc3RyaW5nO1xuICAvKiogTG9nIG1lbW9yeSBzaW5rIChmb3IgY29uc29sZSBoaXN0b3J5KSAqL1xuICBtZW1vcnlTaW5rOiBNZW1vcnlMb2dTaW5rO1xuICAvKiogTWV0cmljcyBtZW1vcnkgc2luayAqL1xuICBtZXRyaWNzU2luaz86IE1lbW9yeU1ldHJpY3NTaW5rO1xuICAvKiogTUNQLUFRTCBoYW5kbGVyIGZvciBwZXJtaXNzaW9uIHJvdXRlcyAodHlwZWQgYXMgYW55IHRvIGF2b2lkIGNpcmN1bGFyIGltcG9ydHMpICovXG4gIG1jcEFxbEhhbmRsZXI/OiBhbnk7XG4gIC8qKiBDYWxsYmFjayB0byByZWdpc3RlciBhIGxvZyBzaW5rIHdpdGggdGhlIExvZ01hbmFnZXIgKi9cbiAgcmVnaXN0ZXJMb2dTaW5rOiAoc2luazogeyB3cml0ZShlbnRyeTogVW5pZmllZExvZ0VudHJ5KTogdm9pZDsgZmx1c2goKTogUHJvbWlzZTx2b2lkPjsgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB9KSA9PiB2b2lkO1xuICAvKiogQ2FsbGJhY2sgdG8gd2lyZSBTU0UgYnJvYWRjYXN0cyBhZnRlciB3ZWIgc2VydmVyIHN0YXJ0cyAqL1xuICB3aXJlU1NFQnJvYWRjYXN0czogKHdlYlJlc3VsdDogeyBsb2dCcm9hZGNhc3Q/OiAoZW50cnk6IFVuaWZpZWRMb2dFbnRyeSkgPT4gdm9pZDsgbWV0cmljc09uU25hcHNob3Q/OiAoc25hcHNob3Q6IE1ldHJpY1NuYXBzaG90KSA9PiB2b2lkIH0sIG1ldHJpY3NTaW5rPzogTWVtb3J5TWV0cmljc1NpbmspID0+IHZvaWQ7XG4gIC8qKiBDb25zb2xlIHBvcnQgb3ZlcnJpZGUgZnJvbSBjb25maWcgZmlsZS4gRmFsbHMgYmFjayB0byBlbnYgdmFyIGlmIG5vdCBwcm92aWRlZC4gKi9cbiAgcG9ydD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2Ygc3RhcnRpbmcgdGhlIHVuaWZpZWQgY29uc29sZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbmlmaWVkQ29uc29sZVJlc3VsdCB7XG4gIHJvbGU6ICdsZWFkZXInIHwgJ2ZvbGxvd2VyJztcbiAgZWxlY3Rpb246IEVsZWN0aW9uUmVzdWx0O1xuICAvKiogUG9ydCB0aGUgY29uc29sZSBpcyBydW5uaW5nIG9uIChsZWFkZXIgb25seSkgKi9cbiAgcG9ydD86IG51bWJlcjtcbiAgLyoqIENsZWFudXAgZnVuY3Rpb24gdG8gY2FsbCBvbiBzaHV0ZG93biAqL1xuICBjbGVhbnVwOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIENoZWNrIGZvciBhIHJ1bm5pbmcgbGVnYWN5IChwcmUtYXV0aGVudGljYXRpb24pIERvbGxob3VzZU1DUCBjb25zb2xlIGFuZFxuICogbG9nIGEgV0FSTi1sZXZlbCBtZXNzYWdlIGlmIG9uZSBpcyBmb3VuZCAoIzE3OTQpLlxuICpcbiAqIEV4dHJhY3RlZCBmcm9tIGBzdGFydFVuaWZpZWRDb25zb2xlYCBzbyB0aGUgd2lyaW5nIGNhbiBiZSBpbnRlZ3JhdGlvbi1cbiAqIHRlc3RlZCBpbiBpc29sYXRpb24gd2l0aG91dCBzcGlubmluZyB1cCBhIGZ1bGwgd2ViIHNlcnZlciBhbmQgbGVhZGVyXG4gKiBlbGVjdGlvbi4gVGhlIGltcGxlbWVudGF0aW9uIGlzIGZpcmUtYW5kLWZvcmdldDogZGV0ZWN0aW9uIGZhaWx1cmVzXG4gKiBhcmUgbG9nZ2VkIGF0IERFQlVHIGFuZCBuZXZlciBwcm9wYWdhdGUsIGJlY2F1c2UgYSBmYWlsdXJlIGhlcmUgbXVzdFxuICogbm90IGJsb2NrIGxlYWRlciBlbGVjdGlvbiBvZiB0aGUgYXV0aGVudGljYXRlZCBjb25zb2xlLlxuICpcbiAqIEBwYXJhbSBjdXJyZW50UG9ydCAtIFRoZSBwb3J0IHRoZSBhdXRoZW50aWNhdGVkIGNvbnNvbGUgaW50ZW5kcyB0b1xuICogICAgICAgICAgICAgICAgICAgICAgYmluZCB0by4gVXNlZCBpbiB0aGUgd2FybmluZyBtZXNzYWdlIHRvIGhlbHAgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICB1c2VyIHRlbGwgdGhlIHR3byBjb25zb2xlcyBhcGFydC5cbiAqIEBwYXJhbSBkZXRlY3QgICAgICAtIE9wdGlvbmFsIGluamVjdGlvbiBwb2ludCBmb3IgdGhlIGRldGVjdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24uIERlZmF1bHRzIHRvIGBkZXRlY3RMZWdhY3lMZWFkZXJgLiBUZXN0c1xuICogICAgICAgICAgICAgICAgICAgICAgcGFzcyBhIHN0dWIuXG4gKiBAcGFyYW0gbG9nICAgICAgICAgLSBPcHRpb25hbCBpbmplY3Rpb24gcG9pbnQgZm9yIHRoZSBsb2dnZXIuIERlZmF1bHRzXG4gKiAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgbW9kdWxlIGxvZ2dlci4gVGVzdHMgcGFzcyBhIHNweS5cbiAqIEByZXR1cm5zIFRoZSBsZWdhY3kgbGVhZGVyIGluZm8gZnJvbSBgZGV0ZWN0KClgLCBvciBudWxsIGlmIGRldGVjdGlvblxuICogICAgICAgICAgdGhyZXcuIEV4cG9zZWQgc28gdGVzdHMgY2FuIGFzc2VydCB0aGUgZnVsbCByZXN1bHQgc2hhcGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YXJuSWZMZWdhY3lDb25zb2xlUHJlc2VudChcbiAgY3VycmVudFBvcnQ6IG51bWJlcixcbiAgZGV0ZWN0OiB0eXBlb2YgZGV0ZWN0TGVnYWN5TGVhZGVyID0gZGV0ZWN0TGVnYWN5TGVhZGVyLFxuICBsb2c6IHR5cGVvZiBsb2dnZXIgPSBsb2dnZXIsXG4pOiBQcm9taXNlPEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgZGV0ZWN0TGVnYWN5TGVhZGVyPj4gfCBudWxsPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgbGVnYWN5ID0gYXdhaXQgZGV0ZWN0KCk7XG4gICAgaWYgKGxlZ2FjeS5sZWdhY3lSdW5uaW5nKSB7XG4gICAgICBsb2cud2FybihcbiAgICAgICAgYFtVbmlmaWVkQ29uc29sZV0gTGVnYWN5IChwcmUtYXV0aGVudGljYXRpb24pIERvbGxob3VzZU1DUCBjb25zb2xlIGRldGVjdGVkIGAgK1xuICAgICAgICBgKHBpZD0ke2xlZ2FjeS5waWR9LCBwb3J0PSR7bGVnYWN5LnBvcnR9KS4gQm90aCBjb25zb2xlcyB3aWxsIHJ1biBgICtcbiAgICAgICAgYGluZGVwZW5kZW50bHkgb24gZGlmZmVyZW50IHBvcnRzIHdpdGggZGlmZmVyZW50IHNlY3VyaXR5IHBvc3R1cmUuIGAgK1xuICAgICAgICBgVGhlIGF1dGhlbnRpY2F0ZWQgY29uc29sZSAodGhpcyBwcm9jZXNzKSB1c2VzIHBvcnQgJHtjdXJyZW50UG9ydH07IGAgK1xuICAgICAgICBgdGhlIGxlZ2FjeSBjb25zb2xlIHVzZXMgcG9ydCAke2xlZ2FjeS5wb3J0ID8/IDM5Mzl9LiBgICtcbiAgICAgICAgYEZvciBjb25zaXN0ZW50IHNlY3VyaXR5LCB1cGRhdGUgdGhlIGxlZ2FjeSBpbnN0YWxsYXRpb24gdG8gYSBgICtcbiAgICAgICAgYHZlcnNpb24gd2l0aCB0aGUgYXV0aGVudGljYXRlZCBjb25zb2xlLmAsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbGVnYWN5O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBCZXN0LWVmZm9ydCDigJQgbmV2ZXIgYmxvY2sgZWxlY3Rpb24gb24gYSBkZXRlY3Rpb24gZmFpbHVyZVxuICAgIGxvZy5kZWJ1ZygnW1VuaWZpZWRDb25zb2xlXSBMZWdhY3kgbGVhZGVyIGRldGVjdGlvbiBmYWlsZWQnLCB7XG4gICAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpLFxuICAgIH0pO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogU3RhcnQgdGhlIHVuaWZpZWQgd2ViIGNvbnNvbGUuXG4gKlxuICogUnVucyBsZWFkZXIgZWxlY3Rpb24sIHRoZW4gZWl0aGVyIHN0YXJ0cyB0aGUgZnVsbCBjb25zb2xlIChsZWFkZXIpXG4gKiBvciBzZXRzIHVwIGV2ZW50IGZvcndhcmRpbmcgKGZvbGxvd2VyKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0VW5pZmllZENvbnNvbGUob3B0aW9uczogVW5pZmllZENvbnNvbGVPcHRpb25zKTogUHJvbWlzZTxVbmlmaWVkQ29uc29sZVJlc3VsdD4ge1xuICAvLyBSZXNvbHZlIHBvcnQ6IG9wdGlvbnMgKGNvbmZpZyBmaWxlKSDihpIgZW52IHZhciDihpIgZGVmYXVsdFxuICBjb25zdCBjb25zb2xlUG9ydCA9IG9wdGlvbnMucG9ydCB8fCBERUZBVUxUX0NPTlNPTEVfUE9SVDtcbiAgbG9nZ2VyLmRlYnVnKGBbVW5pZmllZENvbnNvbGVdIFBvcnQgcmVzb2x2ZWQ6ICR7Y29uc29sZVBvcnR9YCArXG4gICAgKG9wdGlvbnMucG9ydCA/ICcgKGZyb20gY29uZmlnIGZpbGUpJyA6IGAgKGZyb20gZW52L2RlZmF1bHQpYCkpO1xuXG4gIC8vIExlZ2FjeS1sZWFkZXIgZGV0ZWN0aW9uICgjMTc5NCkg4oCUIHdhcm4gdGhlIHVzZXIgaWYgYSBwcmUtYXV0aFxuICAvLyBEb2xsaG91c2VNQ1AgY29uc29sZSBpcyBydW5uaW5nIGFsb25nc2lkZSB0aGlzIGF1dGhlbnRpY2F0ZWQgb25lLlxuICAvLyBUaGV5IHdpbGwgY29leGlzdCBmaW5lIGJlY2F1c2Ugb2YgcG9ydCArIGxvY2sgKyB0b2tlbiBmaWxlIGlzb2xhdGlvbixcbiAgLy8gYnV0IHRoZSB1c2VyIHNob3VsZCBrbm93IGJvdGggZXhpc3Qgc28gdGhlIGRpZmZlcmluZyBzZWN1cml0eSBwb3N0dXJlXG4gIC8vIGJldHdlZW4gdGhlbSBkb2Vzbid0IGxvb2sgbGlrZSBhIGJ1Zy5cbiAgYXdhaXQgd2FybklmTGVnYWN5Q29uc29sZVByZXNlbnQoY29uc29sZVBvcnQpO1xuXG4gIGxldCBlbGVjdGlvbiA9IGF3YWl0IGVsZWN0TGVhZGVyKG9wdGlvbnMuc2Vzc2lvbklkLCBjb25zb2xlUG9ydCk7XG5cbiAgLy8gSWYgd2UgbG9zdCB0aGUgZWxlY3Rpb24sIGNoZWNrIGlmIHRoZSBsZWFkZXIgaXMgYWN0dWFsbHkgcnVubmluZyBhIHdlYiBjb25zb2xlLlxuICAvLyBBbiBNQ1Agc3RkaW8gcHJvY2VzcyBtYXkgaG9sZCBsZWFkZXJzaGlwIGJ1dCBub3Qgc2VydmUgd2ViIHJvdXRlcy5cbiAgLy8gSW4gdGhhdCBjYXNlLCBmb3JjZSBhIHRha2VvdmVyIHNvIHRoZSB3ZWIgY29uc29sZSB3b3JrcyBwcm9wZXJseS5cbiAgaWYgKGVsZWN0aW9uLnJvbGUgPT09ICdmb2xsb3dlcicpIHtcbiAgICBjb25zdCByZWFjaGFibGUgPSBhd2FpdCBpc0xlYWRlcldlYkNvbnNvbGVSZWFjaGFibGUoZWxlY3Rpb24ubGVhZGVySW5mbyk7XG4gICAgaWYgKCFyZWFjaGFibGUpIHtcbiAgICAgIGVsZWN0aW9uID0gYXdhaXQgZm9yY2VDbGFpbUxlYWRlcnNoaXAob3B0aW9ucy5zZXNzaW9uSWQsIGNvbnNvbGVQb3J0KTtcbiAgICB9XG4gIH1cblxuICBpZiAoZWxlY3Rpb24ucm9sZSA9PT0gJ2xlYWRlcicpIHtcbiAgICByZXR1cm4gc3RhcnRBc0xlYWRlcihvcHRpb25zLCBlbGVjdGlvbiwgY29uc29sZVBvcnQpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdGFydEFzRm9sbG93ZXIob3B0aW9ucywgZWxlY3Rpb24sIGNvbnNvbGVQb3J0KTtcbiAgfVxufVxuXG4vKipcbiAqIFN0YXJ0IGFzIHRoZSBjb25zb2xlIGxlYWRlci5cbiAqIEJpbmRzIHRoZSByZXNvbHZlZCBjb25zb2xlIHBvcnQgKGNvbmZpZyBmaWxlIOKGkiBlbnYgdmFyIOKGkiBkZWZhdWx0KSxcbiAqIG1vdW50cyBhbGwgcm91dGVzIGluY2x1ZGluZyBpbmdlc3Rpb24sIHN0YXJ0cyBoZWFydGJlYXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0QXNMZWFkZXIoXG4gIG9wdGlvbnM6IFVuaWZpZWRDb25zb2xlT3B0aW9ucyxcbiAgZWxlY3Rpb246IEVsZWN0aW9uUmVzdWx0LFxuICBjb25zb2xlUG9ydDogbnVtYmVyID0gREVGQVVMVF9DT05TT0xFX1BPUlQsXG4pOiBQcm9taXNlPFVuaWZpZWRDb25zb2xlUmVzdWx0PiB7XG4gIGNvbnN0IHsgc3RhcnRXZWJTZXJ2ZXIgfSA9IGF3YWl0IGltcG9ydCgnLi4vc2VydmVyLmpzJyk7XG4gIGNvbnN0IHsgcGlja1JhbmRvbVB1cHBldE5hbWUgfSA9IGF3YWl0IGltcG9ydCgnLi9TZXNzaW9uTmFtZXMuanMnKTtcblxuICAvLyBJbml0aWFsaXplIHRoZSBjb25zb2xlIHRva2VuIHN0b3JlICgjMTc4MCkuIENyZWF0ZXMgdGhlIHRva2VuIGZpbGUgb25cbiAgLy8gZmlyc3QgcnVuLCByZWFkcyB0aGUgZXhpc3RpbmcgdG9rZW5zIG9uIHN1YnNlcXVlbnQgcnVucy4gVGhlIHRva2VuIGlzXG4gIC8vIHBlcnNpc3RlbnQgYWNyb3NzIHJlc3RhcnRzIOKAlCBvbmx5IHJvdGF0ZWQgb24gZXhwbGljaXQgcmVxdWVzdCAoUGhhc2UgMikuXG4gIC8vIEZlYXR1cmUgZmxhZyBET0xMSE9VU0VfV0VCX0FVVEhfRU5BQkxFRCBjb250cm9scyBlbmZvcmNlbWVudDsgdGhlIGZpbGVcbiAgLy8gaXMgZ2VuZXJhdGVkIHJlZ2FyZGxlc3Mgc28gY29uc3VtZXJzIGNhbiBhdHRhY2ggdG9rZW5zIHByZWVtcHRpdmVseS5cbiAgY29uc3QgdG9rZW5TdG9yZSA9IG5ldyBDb25zb2xlVG9rZW5TdG9yZShlbnYuRE9MTEhPVVNFX0NPTlNPTEVfVE9LRU5fRklMRSk7XG4gIGNvbnN0IHByaW1hcnlUb2tlbiA9IGF3YWl0IHRva2VuU3RvcmUuZW5zdXJlSW5pdGlhbGl6ZWQocGlja1JhbmRvbVB1cHBldE5hbWUoKSk7XG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIENvbnNvbGUgdG9rZW4gc3RvcmUgaW5pdGlhbGl6ZWQnLCB7XG4gICAgdG9rZW5JZDogcHJpbWFyeVRva2VuLmlkLFxuICAgIHRva2VuTmFtZTogcHJpbWFyeVRva2VuLm5hbWUsXG4gICAgZmlsZTogdG9rZW5TdG9yZS5nZXRGaWxlUGF0aCgpLFxuICAgIGF1dGhFbmZvcmNlZDogZW52LkRPTExIT1VTRV9XRUJfQVVUSF9FTkFCTEVELFxuICB9KTtcblxuICAvLyBQcmUtY3JlYXRlIGEgcGxhY2Vob2xkZXIgYnJvYWRjYXN0IHRoYXQgd2UnbGwgd2lyZSB1cCBhZnRlciB0aGUgc2VydmVyIHN0YXJ0c1xuICBsZXQgbGl2ZUJyb2FkY2FzdDogKChlbnRyeTogVW5pZmllZExvZ0VudHJ5KSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IGxpdmVNZXRyaWNzT25TbmFwc2hvdDogKChzbmFwc2hvdDogTWV0cmljU25hcHNob3QpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gIC8vIENyZWF0ZSBpbmdlc3Rpb24gcm91dGVzIHdpdGggYSBkZWZlcnJlZCBicm9hZGNhc3QgKHdpcmVkIGFmdGVyIHNlcnZlciBzdGFydHMpXG4gIGNvbnN0IGluZ2VzdFJlc3VsdCA9IGNyZWF0ZUluZ2VzdFJvdXRlcyh7XG4gICAgbG9nQnJvYWRjYXN0OiAoZW50cnkpID0+IGxpdmVCcm9hZGNhc3Q/LihlbnRyeSksXG4gICAgbWV0cmljc09uU25hcHNob3Q6IChzbmFwc2hvdCkgPT4gbGl2ZU1ldHJpY3NPblNuYXBzaG90Py4oc25hcHNob3QpLFxuICB9KTtcblxuICAvLyBSZWdpc3RlciB0aGUgbGVhZGVyIGFzIGEgc2Vzc2lvblxuICBpbmdlc3RSZXN1bHQucmVnaXN0ZXJMZWFkZXJTZXNzaW9uKG9wdGlvbnMuc2Vzc2lvbklkLCBwcm9jZXNzLnBpZCk7XG5cbiAgLy8gUmVnaXN0ZXIgdGhlIHdlYiBjb25zb2xlIGl0c2VsZiBzbyB0aGUgc2Vzc2lvbiBpbmRpY2F0b3IgaXMgbmV2ZXIgZW1wdHkgKCMxODA1KVxuICBpbmdlc3RSZXN1bHQucmVnaXN0ZXJDb25zb2xlU2Vzc2lvbigpO1xuXG4gIC8vIFN0YXJ0IHRoZSB3ZWIgc2VydmVyIHdpdGggaW5nZXN0IHJvdXRlcyBtb3VudGVkIGJlZm9yZSB0aGUgU1BBIGZhbGxiYWNrLlxuICAvLyBJZiB0aGUgcG9ydCBpcyBvY2N1cGllZCBieSBhIHN0YWxlIHByb2Nlc3MsIHJldHJ5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi5cbiAgY29uc3Qgc2VydmVyT3B0cyA9IHtcbiAgICBwb3J0Zm9saW9EaXI6IG9wdGlvbnMucG9ydGZvbGlvRGlyLFxuICAgIG1lbW9yeVNpbms6IG9wdGlvbnMubWVtb3J5U2luayxcbiAgICBtZXRyaWNzU2luazogb3B0aW9ucy5tZXRyaWNzU2luayxcbiAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICBhZGRpdGlvbmFsUm91dGVyczogW2luZ2VzdFJlc3VsdC5yb3V0ZXJdLFxuICAgIHRva2VuU3RvcmUsXG4gICAgLi4uKG9wdGlvbnMubWNwQXFsSGFuZGxlciA/IHsgbWNwQXFsSGFuZGxlcjogb3B0aW9ucy5tY3BBcWxIYW5kbGVyIH0gOiB7fSksXG4gIH07XG4gIC8vIGJpbmRBbmRMaXN0ZW4gbm93IGhhbmRsZXMgRUFERFJJTlVTRSBieSBmaW5kaW5nIGFuZCBraWxsaW5nIHRoZSBzdGFsZVxuICAvLyBwcm9jZXNzIG9uIHRoZSBwb3J0LCB0aGVuIHJldHJ5aW5nLiBObyBleHRlcm5hbCByZXRyeSBsb29wIG5lZWRlZC5cbiAgY29uc3Qgd2ViUmVzdWx0ID0gYXdhaXQgc3RhcnRXZWJTZXJ2ZXIoc2VydmVyT3B0cyk7XG5cbiAgaWYgKHdlYlJlc3VsdC5iaW5kUmVzdWx0ICYmICF3ZWJSZXN1bHQuYmluZFJlc3VsdC5zdWNjZXNzKSB7XG4gICAgbG9nZ2VyLmVycm9yKGBbVW5pZmllZENvbnNvbGVdIExlYWRlciBmYWlsZWQgdG8gYmluZCBwb3J0ICR7Y29uc29sZVBvcnR9IOKAlCBjb25zb2xlIHVuYXZhaWxhYmxlYCk7XG4gIH1cblxuICAvLyBXaXJlIFNTRSBicm9hZGNhc3RzIGZvciB0aGlzIGxlYWRlcidzIG93biBldmVudHNcbiAgb3B0aW9ucy53aXJlU1NFQnJvYWRjYXN0cyh3ZWJSZXN1bHQsIG9wdGlvbnMubWV0cmljc1NpbmspO1xuXG4gIC8vIE5vdyB3aXJlIHRoZSBsaXZlIGJyb2FkY2FzdCBmdW5jdGlvbnMgaW50byB0aGUgaW5nZXN0IHJvdXRlc1xuICBpZiAod2ViUmVzdWx0LmxvZ0Jyb2FkY2FzdCkge1xuICAgIGNvbnN0IG9yaWdpbmFsQnJvYWRjYXN0ID0gd2ViUmVzdWx0LmxvZ0Jyb2FkY2FzdDtcbiAgICAvLyBTdGFtcCBsZWFkZXIncyBvd24gZW50cmllcyB3aXRoIHNlc3Npb24gSURcbiAgICBsaXZlQnJvYWRjYXN0ID0gKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpID0+IHtcbiAgICAgIGNvbnN0IHN0YW1wZWQ6IFVuaWZpZWRMb2dFbnRyeSA9IHtcbiAgICAgICAgLi4uZW50cnksXG4gICAgICAgIGRhdGE6IHsgLi4uZW50cnkuZGF0YSwgX3Nlc3Npb25JZDogb3B0aW9ucy5zZXNzaW9uSWQgfSxcbiAgICAgIH07XG4gICAgICBvcmlnaW5hbEJyb2FkY2FzdChzdGFtcGVkKTtcbiAgICB9O1xuICB9XG4gIGxpdmVNZXRyaWNzT25TbmFwc2hvdCA9IHdlYlJlc3VsdC5tZXRyaWNzT25TbmFwc2hvdDtcblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBJbmdlc3Rpb24gcm91dGVzIG1vdW50ZWQnKTtcblxuICAvLyBTdGFydCBoZWFydGJlYXQgYW5kIHJlZ2lzdGVyIGNsZWFudXBcbiAgY29uc3Qgc3RvcEhlYXJ0YmVhdCA9IHN0YXJ0SGVhcnRiZWF0KGVsZWN0aW9uLmxlYWRlckluZm8pO1xuICByZWdpc3RlckxlYWRlckNsZWFudXAoKTtcblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBMZWFkZXIgc3RhcnRlZCcsIHtcbiAgICBzZXNzaW9uSWQ6IG9wdGlvbnMuc2Vzc2lvbklkLCBwb3J0OiBjb25zb2xlUG9ydCwgcGlkOiBwcm9jZXNzLnBpZCxcbiAgICByb2xlOiAnbGVhZGVyJywgaW5nZXN0Um91dGVzOiBbJy9hcGkvaW5nZXN0L2xvZ3MnLCAnL2FwaS9pbmdlc3QvbWV0cmljcycsICcvYXBpL2luZ2VzdC9zZXNzaW9uJywgJy9hcGkvc2Vzc2lvbnMnXSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICByb2xlOiAnbGVhZGVyJyxcbiAgICBlbGVjdGlvbixcbiAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICBjbGVhbnVwOiBhc3luYyAoKSA9PiB7XG4gICAgICBzdG9wSGVhcnRiZWF0KCk7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBTdGFydCBhcyBhIGZvbGxvd2VyLlxuICogUmVnaXN0ZXJzIGZvcndhcmRpbmcgc2lua3Mgd2l0aCB0aGUgTG9nTWFuYWdlciwgc3RhcnRzIHNlc3Npb24gaGVhcnRiZWF0LlxuICovXG5hc3luYyBmdW5jdGlvbiBzdGFydEFzRm9sbG93ZXIoXG4gIG9wdGlvbnM6IFVuaWZpZWRDb25zb2xlT3B0aW9ucyxcbiAgZWxlY3Rpb246IEVsZWN0aW9uUmVzdWx0LFxuICBjb25zb2xlUG9ydDogbnVtYmVyID0gREVGQVVMVF9DT05TT0xFX1BPUlQsXG4pOiBQcm9taXNlPFVuaWZpZWRDb25zb2xlUmVzdWx0PiB7XG4gIGNvbnN0IGxlYWRlclVybCA9IGBodHRwOi8vMTI3LjAuMC4xOiR7ZWxlY3Rpb24ubGVhZGVySW5mby5wb3J0fWA7XG5cbiAgLy8gUmVhZCB0aGUgY29uc29sZSBhdXRoIHRva2VuICgjMTc4MCkgd3JpdHRlbiBieSB0aGUgbGVhZGVyLiBNYXkgYmUgbnVsbFxuICAvLyBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IHlldCDigJQgdGhlIHNpbmtzIGhhbmRsZSB0aGF0IGdyYWNlZnVsbHkgYW5kXG4gIC8vIHNpbXBseSBvbWl0IHRoZSBCZWFyZXIgaGVhZGVyLCB3aGljaCBpcyBmaW5lIHdoZW4gYXV0aCBpcyBub3QgZW5mb3JjZWQuXG4gIGNvbnN0IHsgZ2V0UHJpbWFyeVRva2VuRnJvbUZpbGUgfSA9IGF3YWl0IGltcG9ydCgnLi9jb25zb2xlVG9rZW4uanMnKTtcbiAgY29uc3QgYXV0aFRva2VuID0gYXdhaXQgZ2V0UHJpbWFyeVRva2VuRnJvbUZpbGUoZW52LkRPTExIT1VTRV9DT05TT0xFX1RPS0VOX0ZJTEUpO1xuICBpZiAoYXV0aFRva2VuKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdbVW5pZmllZENvbnNvbGVdIEZvbGxvd2VyIGxvYWRlZCBjb25zb2xlIGF1dGggdG9rZW4nKTtcbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIuZGVidWcoJ1tVbmlmaWVkQ29uc29sZV0gTm8gY29uc29sZSBhdXRoIHRva2VuIGZpbGUgZm91bmQ7IGZvbGxvd2VyIHdpbGwgUE9TVCB3aXRob3V0IEJlYXJlciBoZWFkZXInKTtcbiAgfVxuXG4gIC8vIFBlci1pbnN0YW5jZSBwcm9tb3Rpb24gbWFuYWdlciDigJQgdHJhY2tzIGl0cyBvd24gYXR0ZW1wdCBjb3VudGVyIHNvXG4gIC8vIG11bHRpcGxlIGZvbGxvd2VycyBkb24ndCBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyJ3MgcHJvbW90aW9uIGJ1ZGdldHMuXG4gIGNvbnN0IHByb21vdGlvbk1nciA9IG5ldyBQcm9tb3Rpb25NYW5hZ2VyKG9wdGlvbnMsIGNvbnNvbGVQb3J0LCBzdGFydEFzTGVhZGVyLCBzdGFydEFzRm9sbG93ZXIpO1xuXG4gIC8vIERlY2xhcmUgc2Vzc2lvbkhlYXJ0YmVhdCBiZWZvcmUgdGhlIHNpbmsgc28gdGhlIGNsb3N1cmUgY2FuIGNhcHR1cmUgaXQuXG4gIC8vIEJvdGggYXJlIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgY2FsbGJhY2sgY291bGQgcG9zc2libHkgZmlyZSAobmVlZHMgNSsgZmFpbGVkIGZsdXNoZXMpLlxuICBsZXQgc2Vzc2lvbkhlYXJ0YmVhdDogU2Vzc2lvbkhlYXJ0YmVhdDtcblxuICAvLyBSZWdpc3RlciBhIGZvcndhcmRpbmcgbG9nIHNpbmsgd2l0aCBsZWFkZXItZGVhdGggY2FsbGJhY2sgKCMxODUwKS5cbiAgY29uc3QgZm9yd2FyZGluZ1NpbmsgPSBuZXcgTGVhZGVyRm9yd2FyZGluZ0xvZ1NpbmsobGVhZGVyVXJsLCBvcHRpb25zLnNlc3Npb25JZCwgYXV0aFRva2VuLCAoKSA9PiB7XG4gICAgcHJvbW90aW9uTWdyLnByb21vdGUoZm9yd2FyZGluZ1NpbmssIHNlc3Npb25IZWFydGJlYXQpXG4gICAgICAuY2F0Y2goZXJyID0+IGxvZ2dlci5lcnJvcignW1VuaWZpZWRDb25zb2xlXSBQcm9tb3Rpb24gY3Jhc2hlZCcsIHsgZXJyb3I6IFN0cmluZyhlcnIpIH0pKTtcbiAgfSk7XG4gIG9wdGlvbnMucmVnaXN0ZXJMb2dTaW5rKGZvcndhcmRpbmdTaW5rKTtcblxuICAvLyBTdGFydCBzZXNzaW9uIGhlYXJ0YmVhdCB0byB0aGUgbGVhZGVyXG4gIHNlc3Npb25IZWFydGJlYXQgPSBuZXcgU2Vzc2lvbkhlYXJ0YmVhdChsZWFkZXJVcmwsIG9wdGlvbnMuc2Vzc2lvbklkLCBwcm9jZXNzLnBpZCwgYXV0aFRva2VuKTtcbiAgYXdhaXQgc2Vzc2lvbkhlYXJ0YmVhdC5zdGFydCgpO1xuXG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIEZvbGxvd2VyIHN0YXJ0ZWQnLCB7XG4gICAgc2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCwgcGlkOiBwcm9jZXNzLnBpZCwgcm9sZTogJ2ZvbGxvd2VyJyxcbiAgICBsZWFkZXJTZXNzaW9uOiBlbGVjdGlvbi5sZWFkZXJJbmZvLnNlc3Npb25JZCwgbGVhZGVyUGlkOiBlbGVjdGlvbi5sZWFkZXJJbmZvLnBpZCxcbiAgICBsZWFkZXJQb3J0OiBlbGVjdGlvbi5sZWFkZXJJbmZvLnBvcnQsIGxlYWRlclVybCxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICByb2xlOiAnZm9sbG93ZXInLFxuICAgIGVsZWN0aW9uLFxuICAgIGNsZWFudXA6IGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHNlc3Npb25IZWFydGJlYXQuc3RvcCgpO1xuICAgICAgYXdhaXQgZm9yd2FyZGluZ1NpbmsuY2xvc2UoKTtcbiAgICB9LFxuICB9O1xufVxuXG4iXX0=
235
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5pZmllZENvbnNvbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvVW5pZmllZENvbnNvbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQU1ILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLDJCQUEyQixFQUMzQixvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixrQkFBa0IsR0FFbkIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGdCQUFnQixHQUNqQixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUxQzs7Ozs7O0dBTUc7QUFDSCxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQztBQW9DNUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSwwQkFBMEIsQ0FDOUMsV0FBbUIsRUFDbkIsU0FBb0Msa0JBQWtCLEVBQ3RELE1BQXFCLE1BQU07SUFFM0IsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLEVBQUUsQ0FBQztRQUM5QixJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QixHQUFHLENBQUMsSUFBSSxDQUNOLDZFQUE2RTtnQkFDN0UsUUFBUSxNQUFNLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxJQUFJLDRCQUE0QjtnQkFDbkUs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R0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5RixDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFeEMsd0NBQXdDO0lBQ3hDLGdCQUFnQixHQUFHLElBQUksZ0JBQWdCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM5RixNQUFNLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBRS9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLEVBQUU7UUFDL0MsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFVBQVU7UUFDaEUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUc7UUFDaEYsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVM7S0FDaEQsQ0FBQyxDQUFDO0lBRUgsT0FBTztRQUNMLElBQUksRUFBRSxVQUFVO1FBQ2hCLFFBQVE7UUFDUixPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDbEIsTUFBTSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM5QixNQUFNLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVuaWZpZWQgd2ViIGNvbnNvbGUgb3JjaGVzdHJhdG9yLlxuICpcbiAqIFRpZXMgdG9nZXRoZXIgbGVhZGVyIGVsZWN0aW9uLCBjb25zb2xlIHN0YXJ0dXAsIGZvbGxvd2VyIHdpcmluZyxcbiAqIGFuZCBzZXNzaW9uIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50XG4gKiBjYWxsZWQgYnkgdGhlIERJIGNvbnRhaW5lciBkdXJpbmcgZGVmZXJyZWQgc2V0dXAuXG4gKlxuICogRmxvdzpcbiAqIDEuIFJ1biBsZWFkZXIgZWxlY3Rpb24gKHJlYWQgbG9jayBmaWxlLCBjbGFpbSBvciBmb2xsb3cpXG4gKiAyLiBJZiBsZWFkZXI6IHN0YXJ0IHdlYiBzZXJ2ZXIgb24gZml4ZWQgcG9ydCwgbW91bnQgaW5nZXN0IHJvdXRlcywgc3RhcnQgaGVhcnRiZWF0XG4gKiAzLiBJZiBmb2xsb3dlcjogcmVnaXN0ZXIgZm9yd2FyZGluZyBzaW5rcyB3aXRoIExvZ01hbmFnZXIsIHN0YXJ0IHNlc3Npb24gaGVhcnRiZWF0XG4gKlxuICogQHNpbmNlIHYyLjEuMCDigJQgSXNzdWUgIzE3MDBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFVuaWZpZWRMb2dFbnRyeSB9IGZyb20gJy4uLy4uL2xvZ2dpbmcvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZXRyaWNTbmFwc2hvdCB9IGZyb20gJy4uLy4uL21ldHJpY3MvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlMb2dTaW5rIH0gZnJvbSAnLi4vLi4vbG9nZ2luZy9zaW5rcy9NZW1vcnlMb2dTaW5rLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtb3J5TWV0cmljc1NpbmsgfSBmcm9tICcuLi8uLi9tZXRyaWNzL3NpbmtzL01lbW9yeU1ldHJpY3NTaW5rLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQge1xuICBlbGVjdExlYWRlcixcbiAgaXNMZWFkZXJXZWJDb25zb2xlUmVhY2hhYmxlLFxuICBmb3JjZUNsYWltTGVhZGVyc2hpcCxcbiAgc3RhcnRIZWFydGJlYXQsXG4gIHJlZ2lzdGVyTGVhZGVyQ2xlYW51cCxcbiAgZGV0ZWN0TGVnYWN5TGVhZGVyLFxuICB0eXBlIEVsZWN0aW9uUmVzdWx0LFxufSBmcm9tICcuL0xlYWRlckVsZWN0aW9uLmpzJztcbmltcG9ydCB7IGNyZWF0ZUluZ2VzdFJvdXRlcyB9IGZyb20gJy4vSW5nZXN0Um91dGVzLmpzJztcbmltcG9ydCB7XG4gIExlYWRlckZvcndhcmRpbmdMb2dTaW5rLFxuICBTZXNzaW9uSGVhcnRiZWF0LFxufSBmcm9tICcuL0xlYWRlckZvcndhcmRpbmdTaW5rLmpzJztcbmltcG9ydCB7IFByb21vdGlvbk1hbmFnZXIgfSBmcm9tICcuL1Byb21vdGlvbk1hbmFnZXIuanMnO1xuaW1wb3J0IHsgQ29uc29sZVRva2VuU3RvcmUgfSBmcm9tICcuL2NvbnNvbGVUb2tlbi5qcyc7XG5pbXBvcnQgeyBlbnYgfSBmcm9tICcuLi8uLi9jb25maWcvZW52LmpzJztcblxuLyoqXG4gKiBEZWZhdWx0IGNvbnNvbGUgcG9ydCBmcm9tIHRoZSBlbnYgdmFyLiBVc2VkIGFzIGZhbGxiYWNrIHdoZW4gbm8gcG9ydFxuICogaXMgcHJvdmlkZWQgdmlhIGNvbmZpZyBmaWxlIG9yIG9wdGlvbnMuIFRoZSByZXNvbHV0aW9uIGhpZXJhcmNoeSBpczpcbiAqICAgMS4gb3B0aW9ucy5wb3J0IChmcm9tIGNvbmZpZyBmaWxlLCByZXNvbHZlZCBieSB0aGUgREkgY29udGFpbmVyKVxuICogICAyLiBET0xMSE9VU0VfV0VCX0NPTlNPTEVfUE9SVCBlbnYgdmFyXG4gKiAgIDMuIDQxNzE1IChoYXJkY29kZWQgZGVmYXVsdCBpbiBlbnYudHMpXG4gKi9cbmNvbnN0IERFRkFVTFRfQ09OU09MRV9QT1JUID0gZW52LkRPTExIT1VTRV9XRUJfQ09OU09MRV9QT1JUO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHN0YXJ0aW5nIHRoZSB1bmlmaWVkIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pZmllZENvbnNvbGVPcHRpb25zIHtcbiAgLyoqIFRoaXMgcHJvY2VzcydzIHVuaXF1ZSBzZXNzaW9uIElEICovXG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICAvKiogUG9ydGZvbGlvIGJhc2UgZGlyZWN0b3J5IChmb3Igc3RhcnRXZWJTZXJ2ZXIpICovXG4gIHBvcnRmb2xpb0Rpcjogc3RyaW5nO1xuICAvKiogTG9nIG1lbW9yeSBzaW5rIChmb3IgY29uc29sZSBoaXN0b3J5KSAqL1xuICBtZW1vcnlTaW5rOiBNZW1vcnlMb2dTaW5rO1xuICAvKiogTWV0cmljcyBtZW1vcnkgc2luayAqL1xuICBtZXRyaWNzU2luaz86IE1lbW9yeU1ldHJpY3NTaW5rO1xuICAvKiogTUNQLUFRTCBoYW5kbGVyIGZvciBwZXJtaXNzaW9uIHJvdXRlcyAodHlwZWQgYXMgYW55IHRvIGF2b2lkIGNpcmN1bGFyIGltcG9ydHMpICovXG4gIG1jcEFxbEhhbmRsZXI/OiBhbnk7XG4gIC8qKiBDYWxsYmFjayB0byByZWdpc3RlciBhIGxvZyBzaW5rIHdpdGggdGhlIExvZ01hbmFnZXIgKi9cbiAgcmVnaXN0ZXJMb2dTaW5rOiAoc2luazogeyB3cml0ZShlbnRyeTogVW5pZmllZExvZ0VudHJ5KTogdm9pZDsgZmx1c2goKTogUHJvbWlzZTx2b2lkPjsgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB9KSA9PiB2b2lkO1xuICAvKiogQ2FsbGJhY2sgdG8gd2lyZSBTU0UgYnJvYWRjYXN0cyBhZnRlciB3ZWIgc2VydmVyIHN0YXJ0cyAqL1xuICB3aXJlU1NFQnJvYWRjYXN0czogKHdlYlJlc3VsdDogeyBsb2dCcm9hZGNhc3Q/OiAoZW50cnk6IFVuaWZpZWRMb2dFbnRyeSkgPT4gdm9pZDsgbWV0cmljc09uU25hcHNob3Q/OiAoc25hcHNob3Q6IE1ldHJpY1NuYXBzaG90KSA9PiB2b2lkIH0sIG1ldHJpY3NTaW5rPzogTWVtb3J5TWV0cmljc1NpbmspID0+IHZvaWQ7XG4gIC8qKiBDb25zb2xlIHBvcnQgb3ZlcnJpZGUgZnJvbSBjb25maWcgZmlsZS4gRmFsbHMgYmFjayB0byBlbnYgdmFyIGlmIG5vdCBwcm92aWRlZC4gKi9cbiAgcG9ydD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2Ygc3RhcnRpbmcgdGhlIHVuaWZpZWQgY29uc29sZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbmlmaWVkQ29uc29sZVJlc3VsdCB7XG4gIHJvbGU6ICdsZWFkZXInIHwgJ2ZvbGxvd2VyJztcbiAgZWxlY3Rpb246IEVsZWN0aW9uUmVzdWx0O1xuICAvKiogUG9ydCB0aGUgY29uc29sZSBpcyBydW5uaW5nIG9uIChsZWFkZXIgb25seSkgKi9cbiAgcG9ydD86IG51bWJlcjtcbiAgLyoqIENsZWFudXAgZnVuY3Rpb24gdG8gY2FsbCBvbiBzaHV0ZG93biAqL1xuICBjbGVhbnVwOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIENoZWNrIGZvciBhIHJ1bm5pbmcgbGVnYWN5IChwcmUtYXV0aGVudGljYXRpb24pIERvbGxob3VzZU1DUCBjb25zb2xlIGFuZFxuICogbG9nIGEgV0FSTi1sZXZlbCBtZXNzYWdlIGlmIG9uZSBpcyBmb3VuZCAoIzE3OTQpLlxuICpcbiAqIEV4dHJhY3RlZCBmcm9tIGBzdGFydFVuaWZpZWRDb25zb2xlYCBzbyB0aGUgd2lyaW5nIGNhbiBiZSBpbnRlZ3JhdGlvbi1cbiAqIHRlc3RlZCBpbiBpc29sYXRpb24gd2l0aG91dCBzcGlubmluZyB1cCBhIGZ1bGwgd2ViIHNlcnZlciBhbmQgbGVhZGVyXG4gKiBlbGVjdGlvbi4gVGhlIGltcGxlbWVudGF0aW9uIGlzIGZpcmUtYW5kLWZvcmdldDogZGV0ZWN0aW9uIGZhaWx1cmVzXG4gKiBhcmUgbG9nZ2VkIGF0IERFQlVHIGFuZCBuZXZlciBwcm9wYWdhdGUsIGJlY2F1c2UgYSBmYWlsdXJlIGhlcmUgbXVzdFxuICogbm90IGJsb2NrIGxlYWRlciBlbGVjdGlvbiBvZiB0aGUgYXV0aGVudGljYXRlZCBjb25zb2xlLlxuICpcbiAqIEBwYXJhbSBjdXJyZW50UG9ydCAtIFRoZSBwb3J0IHRoZSBhdXRoZW50aWNhdGVkIGNvbnNvbGUgaW50ZW5kcyB0b1xuICogICAgICAgICAgICAgICAgICAgICAgYmluZCB0by4gVXNlZCBpbiB0aGUgd2FybmluZyBtZXNzYWdlIHRvIGhlbHAgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICB1c2VyIHRlbGwgdGhlIHR3byBjb25zb2xlcyBhcGFydC5cbiAqIEBwYXJhbSBkZXRlY3QgICAgICAtIE9wdGlvbmFsIGluamVjdGlvbiBwb2ludCBmb3IgdGhlIGRldGVjdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24uIERlZmF1bHRzIHRvIGBkZXRlY3RMZWdhY3lMZWFkZXJgLiBUZXN0c1xuICogICAgICAgICAgICAgICAgICAgICAgcGFzcyBhIHN0dWIuXG4gKiBAcGFyYW0gbG9nICAgICAgICAgLSBPcHRpb25hbCBpbmplY3Rpb24gcG9pbnQgZm9yIHRoZSBsb2dnZXIuIERlZmF1bHRzXG4gKiAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgbW9kdWxlIGxvZ2dlci4gVGVzdHMgcGFzcyBhIHNweS5cbiAqIEByZXR1cm5zIFRoZSBsZWdhY3kgbGVhZGVyIGluZm8gZnJvbSBgZGV0ZWN0KClgLCBvciBudWxsIGlmIGRldGVjdGlvblxuICogICAgICAgICAgdGhyZXcuIEV4cG9zZWQgc28gdGVzdHMgY2FuIGFzc2VydCB0aGUgZnVsbCByZXN1bHQgc2hhcGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YXJuSWZMZWdhY3lDb25zb2xlUHJlc2VudChcbiAgY3VycmVudFBvcnQ6IG51bWJlcixcbiAgZGV0ZWN0OiB0eXBlb2YgZGV0ZWN0TGVnYWN5TGVhZGVyID0gZGV0ZWN0TGVnYWN5TGVhZGVyLFxuICBsb2c6IHR5cGVvZiBsb2dnZXIgPSBsb2dnZXIsXG4pOiBQcm9taXNlPEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgZGV0ZWN0TGVnYWN5TGVhZGVyPj4gfCBudWxsPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgbGVnYWN5ID0gYXdhaXQgZGV0ZWN0KCk7XG4gICAgaWYgKGxlZ2FjeS5sZWdhY3lSdW5uaW5nKSB7XG4gICAgICBsb2cud2FybihcbiAgICAgICAgYFtVbmlmaWVkQ29uc29sZV0gTGVnYWN5IChwcmUtYXV0aGVudGljYXRpb24pIERvbGxob3VzZU1DUCBjb25zb2xlIGRldGVjdGVkIGAgK1xuICAgICAgICBgKHBpZD0ke2xlZ2FjeS5waWR9LCBwb3J0PSR7bGVnYWN5LnBvcnR9KS4gQm90aCBjb25zb2xlcyB3aWxsIHJ1biBgICtcbiAgICAgICAgYGluZGVwZW5kZW50bHkgb24gZGlmZmVyZW50IHBvcnRzIHdpdGggZGlmZmVyZW50IHNlY3VyaXR5IHBvc3R1cmUuIGAgK1xuICAgICAgICBgVGhlIGF1dGhlbnRpY2F0ZWQgY29uc29sZSAodGhpcyBwcm9jZXNzKSB1c2VzIHBvcnQgJHtjdXJyZW50UG9ydH07IGAgK1xuICAgICAgICBgdGhlIGxlZ2FjeSBjb25zb2xlIHVzZXMgcG9ydCAke2xlZ2FjeS5wb3J0ID8/IDM5Mzl9LiBgICtcbiAgICAgICAgYEZvciBjb25zaXN0ZW50IHNlY3VyaXR5LCB1cGRhdGUgdGhlIGxlZ2FjeSBpbnN0YWxsYXRpb24gdG8gYSBgICtcbiAgICAgICAgYHZlcnNpb24gd2l0aCB0aGUgYXV0aGVudGljYXRlZCBjb25zb2xlLmAsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbGVnYWN5O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBCZXN0LWVmZm9ydCDigJQgbmV2ZXIgYmxvY2sgZWxlY3Rpb24gb24gYSBkZXRlY3Rpb24gZmFpbHVyZVxuICAgIGxvZy5kZWJ1ZygnW1VuaWZpZWRDb25zb2xlXSBMZWdhY3kgbGVhZGVyIGRldGVjdGlvbiBmYWlsZWQnLCB7XG4gICAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpLFxuICAgIH0pO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogU3RhcnQgdGhlIHVuaWZpZWQgd2ViIGNvbnNvbGUuXG4gKlxuICogUnVucyBsZWFkZXIgZWxlY3Rpb24sIHRoZW4gZWl0aGVyIHN0YXJ0cyB0aGUgZnVsbCBjb25zb2xlIChsZWFkZXIpXG4gKiBvciBzZXRzIHVwIGV2ZW50IGZvcndhcmRpbmcgKGZvbGxvd2VyKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0VW5pZmllZENvbnNvbGUob3B0aW9uczogVW5pZmllZENvbnNvbGVPcHRpb25zKTogUHJvbWlzZTxVbmlmaWVkQ29uc29sZVJlc3VsdD4ge1xuICAvLyBSZXNvbHZlIHBvcnQ6IG9wdGlvbnMgKGNvbmZpZyBmaWxlKSDihpIgZW52IHZhciDihpIgZGVmYXVsdFxuICBjb25zdCBjb25zb2xlUG9ydCA9IG9wdGlvbnMucG9ydCB8fCBERUZBVUxUX0NPTlNPTEVfUE9SVDtcbiAgbG9nZ2VyLmRlYnVnKGBbVW5pZmllZENvbnNvbGVdIFBvcnQgcmVzb2x2ZWQ6ICR7Y29uc29sZVBvcnR9YCArXG4gICAgKG9wdGlvbnMucG9ydCA/ICcgKGZyb20gY29uZmlnIGZpbGUpJyA6IGAgKGZyb20gZW52L2RlZmF1bHQpYCkpO1xuXG4gIC8vIExlZ2FjeS1sZWFkZXIgZGV0ZWN0aW9uICgjMTc5NCkg4oCUIHdhcm4gdGhlIHVzZXIgaWYgYSBwcmUtYXV0aFxuICAvLyBEb2xsaG91c2VNQ1AgY29uc29sZSBpcyBydW5uaW5nIGFsb25nc2lkZSB0aGlzIGF1dGhlbnRpY2F0ZWQgb25lLlxuICAvLyBUaGV5IHdpbGwgY29leGlzdCBmaW5lIGJlY2F1c2Ugb2YgcG9ydCArIGxvY2sgKyB0b2tlbiBmaWxlIGlzb2xhdGlvbixcbiAgLy8gYnV0IHRoZSB1c2VyIHNob3VsZCBrbm93IGJvdGggZXhpc3Qgc28gdGhlIGRpZmZlcmluZyBzZWN1cml0eSBwb3N0dXJlXG4gIC8vIGJldHdlZW4gdGhlbSBkb2Vzbid0IGxvb2sgbGlrZSBhIGJ1Zy5cbiAgYXdhaXQgd2FybklmTGVnYWN5Q29uc29sZVByZXNlbnQoY29uc29sZVBvcnQpO1xuXG4gIGxldCBlbGVjdGlvbiA9IGF3YWl0IGVsZWN0TGVhZGVyKG9wdGlvbnMuc2Vzc2lvbklkLCBjb25zb2xlUG9ydCk7XG5cbiAgLy8gSWYgd2UgbG9zdCB0aGUgZWxlY3Rpb24sIGNoZWNrIGlmIHRoZSBsZWFkZXIgaXMgYWN0dWFsbHkgcnVubmluZyBhIHdlYiBjb25zb2xlLlxuICAvLyBBbiBNQ1Agc3RkaW8gcHJvY2VzcyBtYXkgaG9sZCBsZWFkZXJzaGlwIGJ1dCBub3Qgc2VydmUgd2ViIHJvdXRlcy5cbiAgLy8gSW4gdGhhdCBjYXNlLCBmb3JjZSBhIHRha2VvdmVyIHNvIHRoZSB3ZWIgY29uc29sZSB3b3JrcyBwcm9wZXJseS5cbiAgaWYgKGVsZWN0aW9uLnJvbGUgPT09ICdmb2xsb3dlcicpIHtcbiAgICBjb25zdCByZWFjaGFibGUgPSBhd2FpdCBpc0xlYWRlcldlYkNvbnNvbGVSZWFjaGFibGUoZWxlY3Rpb24ubGVhZGVySW5mbyk7XG4gICAgaWYgKCFyZWFjaGFibGUpIHtcbiAgICAgIGVsZWN0aW9uID0gYXdhaXQgZm9yY2VDbGFpbUxlYWRlcnNoaXAob3B0aW9ucy5zZXNzaW9uSWQsIGNvbnNvbGVQb3J0KTtcbiAgICB9XG4gIH1cblxuICBpZiAoZWxlY3Rpb24ucm9sZSA9PT0gJ2xlYWRlcicpIHtcbiAgICByZXR1cm4gc3RhcnRBc0xlYWRlcihvcHRpb25zLCBlbGVjdGlvbiwgY29uc29sZVBvcnQpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdGFydEFzRm9sbG93ZXIob3B0aW9ucywgZWxlY3Rpb24sIGNvbnNvbGVQb3J0KTtcbiAgfVxufVxuXG4vKipcbiAqIFN0YXJ0IGFzIHRoZSBjb25zb2xlIGxlYWRlci5cbiAqIEJpbmRzIHRoZSByZXNvbHZlZCBjb25zb2xlIHBvcnQgKGNvbmZpZyBmaWxlIOKGkiBlbnYgdmFyIOKGkiBkZWZhdWx0KSxcbiAqIG1vdW50cyBhbGwgcm91dGVzIGluY2x1ZGluZyBpbmdlc3Rpb24sIHN0YXJ0cyBoZWFydGJlYXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0QXNMZWFkZXIoXG4gIG9wdGlvbnM6IFVuaWZpZWRDb25zb2xlT3B0aW9ucyxcbiAgZWxlY3Rpb246IEVsZWN0aW9uUmVzdWx0LFxuICBjb25zb2xlUG9ydDogbnVtYmVyID0gREVGQVVMVF9DT05TT0xFX1BPUlQsXG4pOiBQcm9taXNlPFVuaWZpZWRDb25zb2xlUmVzdWx0PiB7XG4gIGNvbnN0IHsgc3RhcnRXZWJTZXJ2ZXIgfSA9IGF3YWl0IGltcG9ydCgnLi4vc2VydmVyLmpzJyk7XG4gIGNvbnN0IHsgcGlja1JhbmRvbVRva2VuTmFtZSB9ID0gYXdhaXQgaW1wb3J0KCcuL1Nlc3Npb25OYW1lcy5qcycpO1xuXG4gIC8vIEluaXRpYWxpemUgdGhlIGNvbnNvbGUgdG9rZW4gc3RvcmUgKCMxNzgwKS4gQ3JlYXRlcyB0aGUgdG9rZW4gZmlsZSBvblxuICAvLyBmaXJzdCBydW4sIHJlYWRzIHRoZSBleGlzdGluZyB0b2tlbnMgb24gc3Vic2VxdWVudCBydW5zLiBUaGUgdG9rZW4gaXNcbiAgLy8gcGVyc2lzdGVudCBhY3Jvc3MgcmVzdGFydHMg4oCUIG9ubHkgcm90YXRlZCBvbiBleHBsaWNpdCByZXF1ZXN0IChQaGFzZSAyKS5cbiAgLy8gRmVhdHVyZSBmbGFnIERPTExIT1VTRV9XRUJfQVVUSF9FTkFCTEVEIGNvbnRyb2xzIGVuZm9yY2VtZW50OyB0aGUgZmlsZVxuICAvLyBpcyBnZW5lcmF0ZWQgcmVnYXJkbGVzcyBzbyBjb25zdW1lcnMgY2FuIGF0dGFjaCB0b2tlbnMgcHJlZW1wdGl2ZWx5LlxuICBjb25zdCB0b2tlblN0b3JlID0gbmV3IENvbnNvbGVUb2tlblN0b3JlKGVudi5ET0xMSE9VU0VfQ09OU09MRV9UT0tFTl9GSUxFKTtcbiAgY29uc3QgcHJpbWFyeVRva2VuID0gYXdhaXQgdG9rZW5TdG9yZS5lbnN1cmVJbml0aWFsaXplZChwaWNrUmFuZG9tVG9rZW5OYW1lKCkpO1xuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBDb25zb2xlIHRva2VuIHN0b3JlIGluaXRpYWxpemVkJywge1xuICAgIHRva2VuSWQ6IHByaW1hcnlUb2tlbi5pZCxcbiAgICB0b2tlbk5hbWU6IHByaW1hcnlUb2tlbi5uYW1lLFxuICAgIGZpbGU6IHRva2VuU3RvcmUuZ2V0RmlsZVBhdGgoKSxcbiAgICBhdXRoRW5mb3JjZWQ6IGVudi5ET0xMSE9VU0VfV0VCX0FVVEhfRU5BQkxFRCxcbiAgfSk7XG5cbiAgLy8gUHJlLWNyZWF0ZSBhIHBsYWNlaG9sZGVyIGJyb2FkY2FzdCB0aGF0IHdlJ2xsIHdpcmUgdXAgYWZ0ZXIgdGhlIHNlcnZlciBzdGFydHNcbiAgbGV0IGxpdmVCcm9hZGNhc3Q6ICgoZW50cnk6IFVuaWZpZWRMb2dFbnRyeSkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCBsaXZlTWV0cmljc09uU25hcHNob3Q6ICgoc25hcHNob3Q6IE1ldHJpY1NuYXBzaG90KSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcblxuICAvLyBDcmVhdGUgaW5nZXN0aW9uIHJvdXRlcyB3aXRoIGEgZGVmZXJyZWQgYnJvYWRjYXN0ICh3aXJlZCBhZnRlciBzZXJ2ZXIgc3RhcnRzKVxuICBjb25zdCBpbmdlc3RSZXN1bHQgPSBjcmVhdGVJbmdlc3RSb3V0ZXMoe1xuICAgIGxvZ0Jyb2FkY2FzdDogKGVudHJ5KSA9PiBsaXZlQnJvYWRjYXN0Py4oZW50cnkpLFxuICAgIG1ldHJpY3NPblNuYXBzaG90OiAoc25hcHNob3QpID0+IGxpdmVNZXRyaWNzT25TbmFwc2hvdD8uKHNuYXBzaG90KSxcbiAgfSk7XG5cbiAgLy8gUmVnaXN0ZXIgdGhlIGxlYWRlciBhcyBhIHNlc3Npb25cbiAgaW5nZXN0UmVzdWx0LnJlZ2lzdGVyTGVhZGVyU2Vzc2lvbihvcHRpb25zLnNlc3Npb25JZCwgcHJvY2Vzcy5waWQpO1xuXG4gIC8vIFJlZ2lzdGVyIHRoZSB3ZWIgY29uc29sZSBpdHNlbGYgc28gdGhlIHNlc3Npb24gaW5kaWNhdG9yIGlzIG5ldmVyIGVtcHR5ICgjMTgwNSlcbiAgaW5nZXN0UmVzdWx0LnJlZ2lzdGVyQ29uc29sZVNlc3Npb24oKTtcblxuICAvLyBTdGFydCB0aGUgd2ViIHNlcnZlciB3aXRoIGluZ2VzdCByb3V0ZXMgbW91bnRlZCBiZWZvcmUgdGhlIFNQQSBmYWxsYmFjay5cbiAgLy8gSWYgdGhlIHBvcnQgaXMgb2NjdXBpZWQgYnkgYSBzdGFsZSBwcm9jZXNzLCByZXRyeSB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYuXG4gIGNvbnN0IHNlcnZlck9wdHMgPSB7XG4gICAgcG9ydGZvbGlvRGlyOiBvcHRpb25zLnBvcnRmb2xpb0RpcixcbiAgICBtZW1vcnlTaW5rOiBvcHRpb25zLm1lbW9yeVNpbmssXG4gICAgbWV0cmljc1Npbms6IG9wdGlvbnMubWV0cmljc1NpbmssXG4gICAgcG9ydDogY29uc29sZVBvcnQsXG4gICAgYWRkaXRpb25hbFJvdXRlcnM6IFtpbmdlc3RSZXN1bHQucm91dGVyXSxcbiAgICB0b2tlblN0b3JlLFxuICAgIC4uLihvcHRpb25zLm1jcEFxbEhhbmRsZXIgPyB7IG1jcEFxbEhhbmRsZXI6IG9wdGlvbnMubWNwQXFsSGFuZGxlciB9IDoge30pLFxuICB9O1xuICAvLyBiaW5kQW5kTGlzdGVuIG5vdyBoYW5kbGVzIEVBRERSSU5VU0UgYnkgZmluZGluZyBhbmQga2lsbGluZyB0aGUgc3RhbGVcbiAgLy8gcHJvY2VzcyBvbiB0aGUgcG9ydCwgdGhlbiByZXRyeWluZy4gTm8gZXh0ZXJuYWwgcmV0cnkgbG9vcCBuZWVkZWQuXG4gIGNvbnN0IHdlYlJlc3VsdCA9IGF3YWl0IHN0YXJ0V2ViU2VydmVyKHNlcnZlck9wdHMpO1xuXG4gIGlmICh3ZWJSZXN1bHQuYmluZFJlc3VsdCAmJiAhd2ViUmVzdWx0LmJpbmRSZXN1bHQuc3VjY2Vzcykge1xuICAgIGxvZ2dlci5lcnJvcihgW1VuaWZpZWRDb25zb2xlXSBMZWFkZXIgZmFpbGVkIHRvIGJpbmQgcG9ydCAke2NvbnNvbGVQb3J0fSDigJQgY29uc29sZSB1bmF2YWlsYWJsZWApO1xuICB9XG5cbiAgLy8gV2lyZSBTU0UgYnJvYWRjYXN0cyBmb3IgdGhpcyBsZWFkZXIncyBvd24gZXZlbnRzXG4gIG9wdGlvbnMud2lyZVNTRUJyb2FkY2FzdHMod2ViUmVzdWx0LCBvcHRpb25zLm1ldHJpY3NTaW5rKTtcblxuICAvLyBOb3cgd2lyZSB0aGUgbGl2ZSBicm9hZGNhc3QgZnVuY3Rpb25zIGludG8gdGhlIGluZ2VzdCByb3V0ZXNcbiAgaWYgKHdlYlJlc3VsdC5sb2dCcm9hZGNhc3QpIHtcbiAgICBjb25zdCBvcmlnaW5hbEJyb2FkY2FzdCA9IHdlYlJlc3VsdC5sb2dCcm9hZGNhc3Q7XG4gICAgLy8gU3RhbXAgbGVhZGVyJ3Mgb3duIGVudHJpZXMgd2l0aCBzZXNzaW9uIElEXG4gICAgbGl2ZUJyb2FkY2FzdCA9IChlbnRyeTogVW5pZmllZExvZ0VudHJ5KSA9PiB7XG4gICAgICBjb25zdCBzdGFtcGVkOiBVbmlmaWVkTG9nRW50cnkgPSB7XG4gICAgICAgIC4uLmVudHJ5LFxuICAgICAgICBkYXRhOiB7IC4uLmVudHJ5LmRhdGEsIF9zZXNzaW9uSWQ6IG9wdGlvbnMuc2Vzc2lvbklkIH0sXG4gICAgICB9O1xuICAgICAgb3JpZ2luYWxCcm9hZGNhc3Qoc3RhbXBlZCk7XG4gICAgfTtcbiAgfVxuICBsaXZlTWV0cmljc09uU25hcHNob3QgPSB3ZWJSZXN1bHQubWV0cmljc09uU25hcHNob3Q7XG5cbiAgbG9nZ2VyLmluZm8oJ1tVbmlmaWVkQ29uc29sZV0gSW5nZXN0aW9uIHJvdXRlcyBtb3VudGVkJyk7XG5cbiAgLy8gU3RhcnQgaGVhcnRiZWF0IGFuZCByZWdpc3RlciBjbGVhbnVwXG4gIGNvbnN0IHN0b3BIZWFydGJlYXQgPSBzdGFydEhlYXJ0YmVhdChlbGVjdGlvbi5sZWFkZXJJbmZvKTtcbiAgcmVnaXN0ZXJMZWFkZXJDbGVhbnVwKCk7XG5cbiAgbG9nZ2VyLmluZm8oJ1tVbmlmaWVkQ29uc29sZV0gTGVhZGVyIHN0YXJ0ZWQnLCB7XG4gICAgc2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCwgcG9ydDogY29uc29sZVBvcnQsIHBpZDogcHJvY2Vzcy5waWQsXG4gICAgcm9sZTogJ2xlYWRlcicsIGluZ2VzdFJvdXRlczogWycvYXBpL2luZ2VzdC9sb2dzJywgJy9hcGkvaW5nZXN0L21ldHJpY3MnLCAnL2FwaS9pbmdlc3Qvc2Vzc2lvbicsICcvYXBpL3Nlc3Npb25zJ10sXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgcm9sZTogJ2xlYWRlcicsXG4gICAgZWxlY3Rpb24sXG4gICAgcG9ydDogY29uc29sZVBvcnQsXG4gICAgY2xlYW51cDogYXN5bmMgKCkgPT4ge1xuICAgICAgc3RvcEhlYXJ0YmVhdCgpO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogU3RhcnQgYXMgYSBmb2xsb3dlci5cbiAqIFJlZ2lzdGVycyBmb3J3YXJkaW5nIHNpbmtzIHdpdGggdGhlIExvZ01hbmFnZXIsIHN0YXJ0cyBzZXNzaW9uIGhlYXJ0YmVhdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3RhcnRBc0ZvbGxvd2VyKFxuICBvcHRpb25zOiBVbmlmaWVkQ29uc29sZU9wdGlvbnMsXG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCxcbiAgY29uc29sZVBvcnQ6IG51bWJlciA9IERFRkFVTFRfQ09OU09MRV9QT1JULFxuKTogUHJvbWlzZTxVbmlmaWVkQ29uc29sZVJlc3VsdD4ge1xuICBjb25zdCBsZWFkZXJVcmwgPSBgaHR0cDovLzEyNy4wLjAuMToke2VsZWN0aW9uLmxlYWRlckluZm8ucG9ydH1gO1xuXG4gIC8vIFJlYWQgdGhlIGNvbnNvbGUgYXV0aCB0b2tlbiAoIzE3ODApIHdyaXR0ZW4gYnkgdGhlIGxlYWRlci4gTWF5IGJlIG51bGxcbiAgLy8gaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCB5ZXQg4oCUIHRoZSBzaW5rcyBoYW5kbGUgdGhhdCBncmFjZWZ1bGx5IGFuZFxuICAvLyBzaW1wbHkgb21pdCB0aGUgQmVhcmVyIGhlYWRlciwgd2hpY2ggaXMgZmluZSB3aGVuIGF1dGggaXMgbm90IGVuZm9yY2VkLlxuICBjb25zdCB7IGdldFByaW1hcnlUb2tlbkZyb21GaWxlIH0gPSBhd2FpdCBpbXBvcnQoJy4vY29uc29sZVRva2VuLmpzJyk7XG4gIGNvbnN0IGF1dGhUb2tlbiA9IGF3YWl0IGdldFByaW1hcnlUb2tlbkZyb21GaWxlKGVudi5ET0xMSE9VU0VfQ09OU09MRV9UT0tFTl9GSUxFKTtcbiAgaWYgKGF1dGhUb2tlbikge1xuICAgIGxvZ2dlci5kZWJ1ZygnW1VuaWZpZWRDb25zb2xlXSBGb2xsb3dlciBsb2FkZWQgY29uc29sZSBhdXRoIHRva2VuJyk7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdbVW5pZmllZENvbnNvbGVdIE5vIGNvbnNvbGUgYXV0aCB0b2tlbiBmaWxlIGZvdW5kOyBmb2xsb3dlciB3aWxsIFBPU1Qgd2l0aG91dCBCZWFyZXIgaGVhZGVyJyk7XG4gIH1cblxuICAvLyBQZXItaW5zdGFuY2UgcHJvbW90aW9uIG1hbmFnZXIg4oCUIHRyYWNrcyBpdHMgb3duIGF0dGVtcHQgY291bnRlciBzb1xuICAvLyBtdWx0aXBsZSBmb2xsb3dlcnMgZG9uJ3QgaW50ZXJmZXJlIHdpdGggZWFjaCBvdGhlcidzIHByb21vdGlvbiBidWRnZXRzLlxuICBjb25zdCBwcm9tb3Rpb25NZ3IgPSBuZXcgUHJvbW90aW9uTWFuYWdlcihvcHRpb25zLCBjb25zb2xlUG9ydCwgc3RhcnRBc0xlYWRlciwgc3RhcnRBc0ZvbGxvd2VyKTtcblxuICAvLyBEZWNsYXJlIHNlc3Npb25IZWFydGJlYXQgYmVmb3JlIHRoZSBzaW5rIHNvIHRoZSBjbG9zdXJlIGNhbiBjYXB0dXJlIGl0LlxuICAvLyBCb3RoIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGNhbGxiYWNrIGNvdWxkIHBvc3NpYmx5IGZpcmUgKG5lZWRzIDUrIGZhaWxlZCBmbHVzaGVzKS5cbiAgbGV0IHNlc3Npb25IZWFydGJlYXQ6IFNlc3Npb25IZWFydGJlYXQ7XG5cbiAgLy8gUmVnaXN0ZXIgYSBmb3J3YXJkaW5nIGxvZyBzaW5rIHdpdGggbGVhZGVyLWRlYXRoIGNhbGxiYWNrICgjMTg1MCkuXG4gIGNvbnN0IGZvcndhcmRpbmdTaW5rID0gbmV3IExlYWRlckZvcndhcmRpbmdMb2dTaW5rKGxlYWRlclVybCwgb3B0aW9ucy5zZXNzaW9uSWQsIGF1dGhUb2tlbiwgKCkgPT4ge1xuICAgIHByb21vdGlvbk1nci5wcm9tb3RlKGZvcndhcmRpbmdTaW5rLCBzZXNzaW9uSGVhcnRiZWF0KVxuICAgICAgLmNhdGNoKGVyciA9PiBsb2dnZXIuZXJyb3IoJ1tVbmlmaWVkQ29uc29sZV0gUHJvbW90aW9uIGNyYXNoZWQnLCB7IGVycm9yOiBTdHJpbmcoZXJyKSB9KSk7XG4gIH0pO1xuICBvcHRpb25zLnJlZ2lzdGVyTG9nU2luayhmb3J3YXJkaW5nU2luayk7XG5cbiAgLy8gU3RhcnQgc2Vzc2lvbiBoZWFydGJlYXQgdG8gdGhlIGxlYWRlclxuICBzZXNzaW9uSGVhcnRiZWF0ID0gbmV3IFNlc3Npb25IZWFydGJlYXQobGVhZGVyVXJsLCBvcHRpb25zLnNlc3Npb25JZCwgcHJvY2Vzcy5waWQsIGF1dGhUb2tlbik7XG4gIGF3YWl0IHNlc3Npb25IZWFydGJlYXQuc3RhcnQoKTtcblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBGb2xsb3dlciBzdGFydGVkJywge1xuICAgIHNlc3Npb25JZDogb3B0aW9ucy5zZXNzaW9uSWQsIHBpZDogcHJvY2Vzcy5waWQsIHJvbGU6ICdmb2xsb3dlcicsXG4gICAgbGVhZGVyU2Vzc2lvbjogZWxlY3Rpb24ubGVhZGVySW5mby5zZXNzaW9uSWQsIGxlYWRlclBpZDogZWxlY3Rpb24ubGVhZGVySW5mby5waWQsXG4gICAgbGVhZGVyUG9ydDogZWxlY3Rpb24ubGVhZGVySW5mby5wb3J0LCBsZWFkZXJVcmwsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgcm9sZTogJ2ZvbGxvd2VyJyxcbiAgICBlbGVjdGlvbixcbiAgICBjbGVhbnVwOiBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBzZXNzaW9uSGVhcnRiZWF0LnN0b3AoKTtcbiAgICAgIGF3YWl0IGZvcndhcmRpbmdTaW5rLmNsb3NlKCk7XG4gICAgfSxcbiAgfTtcbn1cblxuIl19