@blokjs/trigger-webhook 0.6.20 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -67,6 +67,10 @@ interface WebhookTriggerConfig {
67
67
  secretEnv: string;
68
68
  tolerance?: number;
69
69
  timestampHeader?: string;
70
+ /** Event-id source for replay dedup — header name (wins) … */
71
+ eventIdHeader?: string;
72
+ /** … or a dot-path into the parsed body (e.g. "id", "data.id"). */
73
+ eventIdPath?: string;
70
74
  };
71
75
  tolerance?: number;
72
76
  idempotencyKey?: string;
@@ -264,6 +264,8 @@ export default class WebhookTrigger extends TriggerBase {
264
264
  secretEnv: config.signature.secretEnv,
265
265
  tolerance: config.signature.tolerance ?? DEFAULT_TOLERANCE_SEC,
266
266
  timestampHeader: config.signature.timestampHeader,
267
+ eventIdHeader: config.signature.eventIdHeader,
268
+ eventIdPath: config.signature.eventIdPath,
267
269
  });
268
270
  }
269
271
  return null;
@@ -351,4 +353,4 @@ export function _setActiveWebhookTrigger(trigger) {
351
353
  export function _getActiveWebhookTrigger() {
352
354
  return activeTrigger;
353
355
  }
354
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2ViaG9va1RyaWdnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvV2ViaG9va1RyaWdnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNERztBQUVILE9BQU8sRUFDTixhQUFhLEVBQ2IsVUFBVSxFQUVWLFdBQVcsRUFDWCxnQkFBZ0IsR0FDaEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQWEsY0FBYyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUvRSxPQUFPLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsQyxPQUFPLEVBQUUsaUJBQWlCLEVBQW9DLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBNkJ2RyxNQUFNLHFCQUFxQixHQUFHLEdBQUcsQ0FBQztBQUNsQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsdUNBQXVDO0FBQ3BGLE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDO0FBRXZDLGdGQUFnRjtBQUNoRixnQkFBZ0I7QUFDaEIsZ0ZBQWdGO0FBRWhGLE1BQU0sQ0FBQyxPQUFPLE9BQU8sY0FBZSxTQUFRLFdBQVc7SUFDNUMsT0FBTyxHQUF3QixFQUF5QixDQUFDO0lBQ2hELE1BQU0sR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO0lBQzdCLE1BQU0sR0FBRyxLQUFLLENBQUMsU0FBUyxDQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksSUFBSSwwQkFBMEIsRUFDdEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLElBQUksT0FBTyxDQUN0QyxDQUFDO0lBRWUsS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLDZCQUE2QixFQUFFO1FBQzFGLFdBQVcsRUFBRSwyQ0FBMkM7UUFDeEQsSUFBSSxFQUFFLEdBQUc7S0FDVCxDQUFDLENBQUM7SUFDYyxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsNkJBQTZCLEVBQUU7UUFDMUYsV0FBVyxFQUFFLDBFQUEwRTtRQUN2RixJQUFJLEVBQUUsR0FBRztLQUNULENBQUMsQ0FBQztJQUNjLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyw2QkFBNkIsRUFBRTtRQUMxRixXQUFXLEVBQUUsbURBQW1EO1FBQ2hFLElBQUksRUFBRSxHQUFHO0tBQ1QsQ0FBQyxDQUFDO0lBRUgseUVBQXlFO0lBQ3hELEdBQUcsQ0FBc0I7SUFDekIsV0FBVyxDQUF5QjtJQUU3QyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBRXRCLGdGQUFnRjtJQUNoRixZQUFZLEdBQXdCLEVBQUUsV0FBNkI7UUFDbEUsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQztRQUN2Qyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxVQUFVLENBQUMsT0FBNEI7UUFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNO1FBQ1gsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7WUFDbkUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUVsQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNQLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ25DLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1QsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSx3QkFBd0IsRUFBRSxLQUFLLElBQUk7WUFBRSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCw4RUFBOEU7SUFDOUUscUJBQXFCO0lBQ3JCLDhFQUE4RTtJQUV0RSwwQkFBMEI7UUFDakMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDN0MsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7WUFDM0UsT0FBTztRQUNSLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsU0FBUyxDQUFDLE1BQU0sb0JBQW9CLENBQUMsQ0FBQztRQUNyRixLQUFLLE1BQU0sS0FBSyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxDQUFDO0lBQ0YsQ0FBQztJQUVPLG9CQUFvQixDQUFDLEtBQTZEO1FBQ3pGLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxhQUFhLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzdHLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLDZCQUE2QixJQUFJLFFBQVEsWUFBWSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUM7UUFFckYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBYyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVPLEtBQUssQ0FBQyxhQUFhLENBQzFCLENBQWMsRUFDZCxZQUFvQixFQUNwQixJQUFZLEVBQ1osTUFBNEI7UUFFNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7UUFFN0Qsc0VBQXNFO1FBQ3RFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNuQyxJQUFJLFVBQVUsR0FBWSxFQUFFLENBQUM7UUFDN0IsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQztnQkFDSixVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQVksQ0FBQztZQUM3QyxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNSLHNEQUFzRDtnQkFDdEQsdURBQXVEO2dCQUN2RCxVQUFVLEdBQUcsT0FBTyxDQUFDO1lBQ3RCLENBQUM7UUFDRixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0RCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBNEIsQ0FBQztRQUMzRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFeEUsd0JBQXdCO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDcEYsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzFHLENBQUM7UUFFRCwwQ0FBMEM7UUFDMUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQztRQUNsRSxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRS9ELGFBQWE7UUFDYixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsU0FBUyxJQUFJLHFCQUFxQixDQUFDO1FBQzlGLE1BQU0sTUFBTSxHQUFpQixRQUFRLENBQUMsTUFBTSxDQUFDO1lBQzVDLE9BQU87WUFDUCxPQUFPO1lBQ1AsVUFBVTtZQUNWLE1BQU07WUFDTixZQUFZO1NBQ1osQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNwRixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDaEIsbUJBQW1CLFlBQVksMEJBQTBCLE1BQU0sQ0FBQyxNQUFNLGFBQWEsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUNwRyxDQUFDO1lBQ0YsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFFRCwwRUFBMEU7UUFDMUUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMzRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7WUFDMUYsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyRyxDQUFDO1FBRUQsa0RBQWtEO1FBQ2xELElBQUksTUFBTSxDQUFDLGNBQWMsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0MsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN6RixJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNaLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQy9FLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDWjtvQkFDQyxNQUFNLEVBQUUsV0FBVztvQkFDbkIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO29CQUN2QixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7b0JBQzNCLGNBQWMsRUFBRSxNQUFNLENBQUMsV0FBVztpQkFDbEMsRUFDRCxHQUFHLENBQ0gsQ0FBQztZQUNILENBQUM7UUFDRixDQUFDO1FBRUQsbURBQW1EO1FBQ25ELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzdELE1BQU0sU0FBUyxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ3pCLE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQ25ELFlBQVk7WUFDWixJQUFJO1lBQ0osTUFBTTtZQUNOLFNBQVM7WUFDVCxPQUFPO1lBQ1AsSUFBSSxFQUFFLFVBQVU7WUFDaEIsT0FBTztZQUNQLFVBQVU7WUFDVixXQUFXO1lBQ1gsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1lBQ3ZCLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztTQUMzQixDQUFDLENBQUM7UUFFSCxnRUFBZ0U7UUFDaEUsa0VBQWtFO1FBQ2xFLDJEQUEyRDtRQUMzRCxtRUFBbUU7UUFDbkUsSUFBSSxNQUFNLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM3QyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDekMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRTtnQkFDekUsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUU7Z0JBQzlELFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNwQixTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLHFCQUFxQjtnQkFDN0MsV0FBVyxFQUFFLFNBQVM7Z0JBQ3RCLGVBQWUsRUFBRSxTQUFTO2FBQzFCLENBQUMsQ0FBQztRQUNKLENBQUM7UUFFRCxnRUFBZ0U7UUFDaEUseUNBQXlDO1FBQ3pDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDWjtZQUNDLE1BQU0sRUFBRSxJQUFJO1lBQ1osT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1lBQ3ZCLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztZQUMzQixLQUFLLEVBQUUsU0FBUztZQUNoQixRQUFRLEVBQUUsZUFBZTtTQUN6QixFQUNELEdBQUcsQ0FDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGVBQWUsQ0FBQyxZQUFvQixFQUFFLE1BQTRCO1FBQ3pFLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLFlBQVksdUJBQXVCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUM1RixPQUFPLElBQUksQ0FBQztZQUNiLENBQUM7WUFDRCxPQUFPLENBQUMsQ0FBQztRQUNWLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN0QixPQUFPLG1CQUFtQixDQUFDO2dCQUMxQixNQUFNLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksYUFBYTtnQkFDaEQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTTtnQkFDL0IsTUFBTSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLE9BQU87Z0JBQzFDLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVM7Z0JBQ3JDLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsSUFBSSxxQkFBcUI7Z0JBQzlELGVBQWUsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWU7YUFDakQsQ0FBQyxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSxvQkFBb0I7SUFDcEIsOEVBQThFO0lBRXRFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQVk5QjtRQUNBLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQztRQUU5RyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFdBQVcsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQVUsRUFBRSxFQUFFO1lBQ2xGLElBQUksQ0FBQztnQkFDSixNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDaEQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLFlBQVkseUJBQXlCLENBQUMsQ0FBQztnQkFDckYsQ0FBQztnQkFDRCxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFMUUsTUFBTSxHQUFHLEdBQVksSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUM1RSxHQUFHLENBQUMsT0FBTyxHQUFHO29CQUNiLElBQUk7b0JBQ0osT0FBTztvQkFDUCxPQUFPO29CQUNQLE1BQU0sRUFBRSxVQUFVO29CQUNsQixLQUFLLEVBQUUsV0FBVztpQkFDVyxDQUFDO2dCQUUvQiwwREFBMEQ7Z0JBQzFELGlEQUFpRDtnQkFDaEQsR0FBK0IsQ0FBQyxRQUFRLEdBQUc7b0JBQzNDLE9BQU87b0JBQ1AsU0FBUztvQkFDVCxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTO2lCQUNoQyxDQUFDO2dCQUVGLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25ELE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDNUMsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQ3JCLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNkLE1BQU0sR0FBRyxHQUFHLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFZLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsWUFBWSxZQUFZLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQzdFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDdkIsQ0FBQztvQkFBUyxDQUFDO2dCQUNWLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNaLENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsZ0JBQWdCO0lBQ2hCLDhFQUE4RTtJQUU5RSxRQUFRO1FBQ1AsT0FBTyxFQUFFLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ25FLENBQUM7SUFFTyxtQkFBbUI7UUFDMUIsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEQsTUFBTSxHQUFHLEdBQWtFLEVBQUUsQ0FBQztRQUM5RSxLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUF3RSxDQUFDO1lBQzFGLE1BQU0sR0FBRyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxHQUFHO2dCQUFFLFNBQVM7WUFDbkIsZ0VBQWdFO1lBQ2hFLDJEQUEyRDtZQUMzRCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2hCLDZCQUE2QixLQUFLLENBQUMsSUFBSSx5SEFBeUgsQ0FDaEssQ0FBQztnQkFDRixTQUFTO1lBQ1YsQ0FBQztZQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDWixDQUFDO0NBQ0Q7QUFFRCxnRkFBZ0Y7QUFDaEYsd0NBQXdDO0FBQ3hDLGdGQUFnRjtBQUVoRixJQUFJLGFBQWEsR0FBMEIsSUFBSSxDQUFDO0FBRWhELE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxPQUE4QjtJQUN0RSxhQUFhLEdBQUcsT0FBTyxDQUFDO0FBQ3pCLENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCO0lBQ3ZDLE9BQU8sYUFBYSxDQUFDO0FBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdlYmhvb2tUcmlnZ2VyIOKAlCB2MC43IFBSIDQg4oCUIEluYm91bmQgd2ViaG9vayB0cmlnZ2VyIHRoYXQgbW91bnRzXG4gKiB2ZXJpZmllZCBQT1NUIHJvdXRlcyBvbiB0aGUgc2hhcmVkIEhvbm8gYXBwLiBPbmUgcm91dGUgcGVyIHdvcmtmbG93XG4gKiB3aG9zZSBgdHJpZ2dlci53ZWJob29rYCBjb25maWcgaXMgcmVnaXN0ZXJlZC5cbiAqXG4gKiAqKkF1dGhvcmluZyBzdXJmYWNlIChidWlsdC1pbiBwcm92aWRlcik6KipcbiAqXG4gKiBgYGBqc29uXG4gKiB7XG4gKiAgIFwibmFtZVwiOiBcInN0cmlwZS1ldmVudHNcIixcbiAqICAgXCJ0cmlnZ2VyXCI6IHtcbiAqICAgICBcIndlYmhvb2tcIjoge1xuICogICAgICAgXCJwcm92aWRlclwiOiBcInN0cmlwZVwiLFxuICogICAgICAgXCJwYXRoXCI6IFwiL3dlYmhvb2tzL3N0cmlwZVwiLFxuICogICAgICAgXCJzZWNyZXRFbnZcIjogXCJTVFJJUEVfV0VCSE9PS19TRUNSRVRcIixcbiAqICAgICAgIFwibmFtZXNwYWNlXCI6IFwic3RyaXBlXCIsXG4gKiAgICAgICBcImlkZW1wb3RlbmN5S2V5XCI6IFwianMvY3R4LnJlcXVlc3QuYm9keS5pZFwiXG4gKiAgICAgfVxuICogICB9LFxuICogICBcInN0ZXBzXCI6IFtcbiAqICAgICB7IFwiaWRcIjogXCJkaXNwYXRjaFwiLCBcInN1YndvcmtmbG93XCI6IFwianMvY3R4LnJlcXVlc3QuYm9keS50eXBlXCIsIFwiaW5wdXRzXCI6IHsgXCJzdHJpcGVFdmVudFwiOiBcImpzL2N0eC5yZXF1ZXN0LmJvZHlcIiB9IH1cbiAqICAgXVxuICogfVxuICogYGBgXG4gKlxuICogKipQaXBlbGluZSAocGVyIGluYm91bmQgcmVxdWVzdCk6KipcbiAqXG4gKiAgIDEuIFJlYWQgcmF3IGJvZHkg4oCUIHZlcmlmaWVycyBNVVNUIHNpZ24gdGhlIGJ5dGVzIHRoYXQgY3Jvc3NlZFxuICogICAgICB0aGUgd2lyZSwgbm90IHRoZSBKU09OLXJlLXN0cmluZ2lmaWVkIGJvZHkgKFN0cmlwZSAvIEdpdEh1YiAvXG4gKiAgICAgIFNsYWNrIGFsbCBzaWduIHJhdyBieXRlcykuXG4gKiAgIDIuIFZlcmlmeSB0aGUgc2lnbmF0dXJlIHZpYSB0aGUgcGVyLXByb3ZpZGVyIHN0cmF0ZWd5XG4gKiAgICAgIChgdmVyaWZpZXJzLnRzYCkuIE9uIGZhaWx1cmUsIHJldHVybiA0MDEgd2l0aCBzdHJ1Y3R1cmVkXG4gKiAgICAgIGB7IGVycm9yLCByZWFzb24sIG1lc3NhZ2UgfWAuXG4gKiAgIDMuIFJlcGxheSBjaGVjazogaWYgYGlkZW1wb3RlbmN5S2V5YCBpcyBjb25maWd1cmVkLCBsb29rIHVwXG4gKiAgICAgIGAod29ya2Zsb3dOYW1lLCBldmVudElkKWAgaW4gdGhlIGlkZW1wb3RlbmN5IGNhY2hlIChzYW1lIHN0b3JlXG4gKiAgICAgIGFzIFRpZXIgMSBzdGVwIGNhY2hpbmcpLiBPbiBoaXQsIHJldHVybiAyMDAgd2l0aFxuICogICAgICBgeyBzdGF0dXM6IFwiZHVwbGljYXRlXCIsIGV2ZW50SWQgfWAgYW5kIERPTidUIHJ1biB0aGUgd29ya2Zsb3cuXG4gKiAgIDQuIEV2ZW50cyBhbGxvd2xpc3Q6IGlmIGBldmVudHM6IFsuLi5dYCBpcyBjb25maWd1cmVkLCBza2lwXG4gKiAgICAgIHdvcmtmbG93IHJ1bnMgd2hvc2UgZXZlbnQgdHlwZSBpc24ndCBpbiB0aGUgbGlzdCDigJQgcmV0dXJuXG4gKiAgICAgIDIwMCB3aXRoIGB7IHN0YXR1czogXCJpZ25vcmVkXCIsIGV2ZW50VHlwZSB9YCBzbyB0aGUgc2VuZGVyXG4gKiAgICAgIGRvZXNuJ3QgcmV0cnkuXG4gKiAgIDUuIFJ1biB0aGUgd29ya2Zsb3cgdGhyb3VnaCBgVHJpZ2dlckJhc2UucnVuYCBzbyBtaWRkbGV3YXJlLFxuICogICAgICB0cmFjaW5nLCByZXRyaWVzLCBjb25jdXJyZW5jeSwgZXRjLiBhcHBseSB1bmlmb3JtbHkuXG4gKiAgIDYuIENhY2hlIHRoZSBldmVudElkIHNvIGEgcmV0cnkgd2l0aGluIHRoZSBUVEwgd2luZG93IHJldHVybnNcbiAqICAgICAgdGhlIGR1cGxpY2F0ZSByZXNwb25zZS5cbiAqXG4gKiAqKkhvbm8gaW50ZWdyYXRpb246KiogaWRlbnRpY2FsIHRvIFdlYlNvY2tldCBhbmQgU1NFIOKAlCBhY2NlcHRzIHRoZVxuICogc2hhcmVkIGBIb25vPGFueSwgYW55LCBhbnk+YCBhcHAgYW5kIGFuIG9wdGlvbmFsIGBIdHRwVHJpZ2dlckxpa2VgXG4gKiBleHBvc2luZyBgYWRkUHJlQ2F0Y2hBbGxIb29rYCBzbyB3ZWJob29rIHJvdXRlcyBtb3VudCBCRUZPUkUgdGhlXG4gKiBsZWdhY3kgYC86d29ya2Zsb3d7Lit9YCBjYXRjaC1hbGwgYW5kIHdpbiBIb25vJ3MgZmlyc3QtbWF0Y2hcbiAqIGRpc3BhdGNoLlxuICpcbiAqIFNlZSBbYWRkaXRpb25hbC10cmlnZ2Vycy1wbGFuLm1keF0oLi4vLi4vLi4vZG9jcy9jL2RldnRvb2xzL2FkZGl0aW9uYWwtdHJpZ2dlcnMtcGxhbi5tZHgjd2ViaG9vay10cmlnZ2VyKVxuICogZm9yIHRoZSBmdWxsIHYwLjcgZGVzaWduLlxuICovXG5cbmltcG9ydCB7XG5cdERlZmF1bHRMb2dnZXIsXG5cdFJ1blRyYWNrZXIsXG5cdHR5cGUgR2xvYmFsT3B0aW9ucyBhcyBSdW5uZXJHbG9iYWxPcHRpb25zLFxuXHRUcmlnZ2VyQmFzZSxcblx0V29ya2Zsb3dSZWdpc3RyeSxcbn0gZnJvbSBcIkBibG9ranMvcnVubmVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHQsIFJlcXVlc3RDb250ZXh0IH0gZnJvbSBcIkBibG9ranMvc2hhcmVkXCI7XG5pbXBvcnQgeyB0eXBlIFNwYW4sIFNwYW5TdGF0dXNDb2RlLCBtZXRyaWNzLCB0cmFjZSB9IGZyb20gXCJAb3BlbnRlbGVtZXRyeS9hcGlcIjtcbmltcG9ydCB0eXBlIHsgSG9ubywgQ29udGV4dCBhcyBIb25vQ29udGV4dCB9IGZyb20gXCJob25vXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSBcInV1aWRcIjtcblxuaW1wb3J0IHsgQlVJTFRJTl9WRVJJRklFUlMsIHR5cGUgVmVyaWZpZXIsIHR5cGUgVmVyaWZ5UmVzdWx0LCBidWlsZEN1c3RvbVZlcmlmaWVyIH0gZnJvbSBcIi4vdmVyaWZpZXJzXCI7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUeXBlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuaW50ZXJmYWNlIFdlYmhvb2tUcmlnZ2VyQ29uZmlnIHtcblx0cHJvdmlkZXI/OiBcImdpdGh1YlwiIHwgXCJzdHJpcGVcIiB8IFwic2xhY2tcIiB8IFwic2hvcGlmeVwiIHwgXCJzdml4XCI7XG5cdHBhdGg/OiBzdHJpbmc7XG5cdGV2ZW50cz86IHN0cmluZ1tdO1xuXHRzZWNyZXRFbnY/OiBzdHJpbmc7XG5cdHNpZ25hdHVyZT86IHtcblx0XHRzY2hlbWU/OiBcImhtYWMtc2hhMjU2XCIgfCBcImhtYWMtc2hhMVwiIHwgXCJobWFjLXNoYTUxMlwiO1xuXHRcdGhlYWRlcjogc3RyaW5nO1xuXHRcdGZvcm1hdD86IHN0cmluZztcblx0XHRzZWNyZXRFbnY6IHN0cmluZztcblx0XHR0b2xlcmFuY2U/OiBudW1iZXI7XG5cdFx0dGltZXN0YW1wSGVhZGVyPzogc3RyaW5nO1xuXHR9O1xuXHR0b2xlcmFuY2U/OiBudW1iZXI7XG5cdGlkZW1wb3RlbmN5S2V5Pzogc3RyaW5nO1xuXHRuYW1lc3BhY2U/OiBzdHJpbmc7XG5cdG1pZGRsZXdhcmU/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIEh0dHBUcmlnZ2VyTGlrZSB7XG5cdGFkZFByZUNhdGNoQWxsSG9vayhjYjogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pOiB2b2lkO1xufVxuXG5jb25zdCBERUZBVUxUX1RPTEVSQU5DRV9TRUMgPSAzMDA7XG5jb25zdCBERUZBVUxUX1JFUExBWV9UVExfTVMgPSA1ICogNjAgKiAxMDAwOyAvLyA1IG1pbiDigJQgbWF0Y2ggU3RyaXBlIC8gU3ZpeCBkZWZhdWx0LlxuY29uc3QgUkVQTEFZX05BTUVTUEFDRSA9IFwiX193ZWJob29rX19cIjtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRyaWdnZXIgY2xhc3Ncbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYmhvb2tUcmlnZ2VyIGV4dGVuZHMgVHJpZ2dlckJhc2Uge1xuXHRwcm90ZWN0ZWQgbm9kZU1hcDogUnVubmVyR2xvYmFsT3B0aW9ucyA9IHt9IGFzIFJ1bm5lckdsb2JhbE9wdGlvbnM7XG5cdHByb3RlY3RlZCByZWFkb25seSBsb2dnZXIgPSBuZXcgRGVmYXVsdExvZ2dlcigpO1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgdHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKFxuXHRcdHByb2Nlc3MuZW52LlBST0pFQ1RfTkFNRSB8fCBcInRyaWdnZXItd2ViaG9vay13b3JrZmxvd1wiLFxuXHRcdHByb2Nlc3MuZW52LlBST0pFQ1RfVkVSU0lPTiB8fCBcIjAuMC4xXCIsXG5cdCk7XG5cblx0cHJpdmF0ZSByZWFkb25seSBtZXRlciA9IG1ldHJpY3MuZ2V0TWV0ZXIoXCJibG9rXCIpO1xuXHRwcml2YXRlIHJlYWRvbmx5IGNvdW50ZXJSZWNlaXZlZCA9IHRoaXMubWV0ZXIuY3JlYXRlQ291bnRlcihcImJsb2tfd2ViaG9va19yZWNlaXZlZF90b3RhbFwiLCB7XG5cdFx0ZGVzY3JpcHRpb246IFwiV2ViaG9vayBkZWxpdmVyaWVzIHJlY2VpdmVkIChjdW11bGF0aXZlKS5cIixcblx0XHR1bml0OiBcIjFcIixcblx0fSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgY291bnRlclJlamVjdGVkID0gdGhpcy5tZXRlci5jcmVhdGVDb3VudGVyKFwiYmxva193ZWJob29rX3JlamVjdGVkX3RvdGFsXCIsIHtcblx0XHRkZXNjcmlwdGlvbjogXCJXZWJob29rIGRlbGl2ZXJpZXMgcmVqZWN0ZWQgKHNpZ25hdHVyZSBmYWlsdXJlLCBhbGxvd2xpc3QgbWlzcywgcmVwbGF5KS5cIixcblx0XHR1bml0OiBcIjFcIixcblx0fSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgY291bnRlckFjY2VwdGVkID0gdGhpcy5tZXRlci5jcmVhdGVDb3VudGVyKFwiYmxva193ZWJob29rX2FjY2VwdGVkX3RvdGFsXCIsIHtcblx0XHRkZXNjcmlwdGlvbjogXCJXZWJob29rIGRlbGl2ZXJpZXMgdGhhdCB0cmlnZ2VyZWQgYSB3b3JrZmxvdyBydW4uXCIsXG5cdFx0dW5pdDogXCIxXCIsXG5cdH0pO1xuXG5cdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogSG9ubydzIGdlbmVyaWMgcHJvcGFnYXRpb25cblx0cHJpdmF0ZSByZWFkb25seSBhcHA6IEhvbm88YW55LCBhbnksIGFueT47XG5cdHByaXZhdGUgcmVhZG9ubHkgaHR0cFRyaWdnZXI6IEh0dHBUcmlnZ2VyTGlrZSB8IG51bGw7XG5cblx0cHJpdmF0ZSB3aXJlZCA9IGZhbHNlO1xuXG5cdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogbWF0Y2hlcyBgYXBwYCBmaWVsZCdzIGFueSBnZW5lcmljXG5cdGNvbnN0cnVjdG9yKGFwcDogSG9ubzxhbnksIGFueSwgYW55PiwgaHR0cFRyaWdnZXI/OiBIdHRwVHJpZ2dlckxpa2UpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuYXBwID0gYXBwO1xuXHRcdHRoaXMuaHR0cFRyaWdnZXIgPSBodHRwVHJpZ2dlciA/PyBudWxsO1xuXHRcdF9zZXRBY3RpdmVXZWJob29rVHJpZ2dlcih0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbmplY3QgdGhlIHJ1bm5lcidzIEdsb2JhbE9wdGlvbnMgKG5vZGVzICsgd29ya2Zsb3dzKS4gQ2FsbGVkIGJ5XG5cdCAqIHRoZSBvcmNoZXN0cmF0b3IgQUZURVIgY29uc3RydWN0aW5nIHRoZSB0cmlnZ2VyIGJ1dCBCRUZPUkVcblx0ICogYGxpc3RlbigpYC4gU2hhcmVzIEh0dHBUcmlnZ2VyJ3Mgbm9kZU1hcCBzbyBwZXItcmVxdWVzdCB3b3JrZmxvd1xuXHQgKiBydW5zIHJlc29sdmUgaGVscGVycyArIHN1Yi13b3JrZmxvd3MgdGhyb3VnaCB0aGUgc2FtZSByZWdpc3RyeS5cblx0ICovXG5cdHNldE5vZGVNYXAobm9kZU1hcDogUnVubmVyR2xvYmFsT3B0aW9ucyk6IHZvaWQge1xuXHRcdHRoaXMubm9kZU1hcCA9IG5vZGVNYXA7XG5cdH1cblxuXHRhc3luYyBsaXN0ZW4oKTogUHJvbWlzZTxudW1iZXI+IHtcblx0XHRjb25zdCBzdGFydFRpbWUgPSB0aGlzLnN0YXJ0Q291bnRlcigpO1xuXHRcdGlmICh0aGlzLndpcmVkKSB7XG5cdFx0XHR0aGlzLmxvZ2dlci5sb2coXCJbYmxva11bd2ViaG9va10gbGlzdGVuKCkgY2FsbGVkIHR3aWNlOyBpZ25vcmluZ1wiKTtcblx0XHRcdHJldHVybiB0aGlzLmVuZENvdW50ZXIoc3RhcnRUaW1lKTtcblx0XHR9XG5cdFx0dGhpcy53aXJlZCA9IHRydWU7XG5cblx0XHRpZiAodGhpcy5odHRwVHJpZ2dlcikge1xuXHRcdFx0dGhpcy5odHRwVHJpZ2dlci5hZGRQcmVDYXRjaEFsbEhvb2soKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnJlZ2lzdGVyUm91dGVzRnJvbVJlZ2lzdHJ5KCk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5yZWdpc3RlclJvdXRlc0Zyb21SZWdpc3RyeSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVuZENvdW50ZXIoc3RhcnRUaW1lKTtcblx0fVxuXG5cdGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy53aXJlZCA9IGZhbHNlO1xuXHRcdGlmIChfZ2V0QWN0aXZlV2ViaG9va1RyaWdnZXIoKSA9PT0gdGhpcykgX3NldEFjdGl2ZVdlYmhvb2tUcmlnZ2VyKG51bGwpO1xuXHRcdHRoaXMuZGVzdHJveU1vbml0b3JpbmcoKTtcblx0XHR0aGlzLmxvZ2dlci5sb2coXCJbYmxva11bd2ViaG9va10gc3RvcHBlZFwiKTtcblx0fVxuXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLyBSb3V0ZSByZWdpc3RyYXRpb25cblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0cHJpdmF0ZSByZWdpc3RlclJvdXRlc0Zyb21SZWdpc3RyeSgpOiB2b2lkIHtcblx0XHRjb25zdCB3b3JrZmxvd3MgPSB0aGlzLmdldFdlYmhvb2tXb3JrZmxvd3MoKTtcblx0XHRpZiAod29ya2Zsb3dzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5sb2dnZXIubG9nKFwiW2Jsb2tdW3dlYmhvb2tdIG5vIHdvcmtmbG93cyB3aXRoIHRyaWdnZXIud2ViaG9vayBmb3VuZFwiKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5sb2dnZXIubG9nKGBbYmxva11bd2ViaG9va10gcmVnaXN0ZXJpbmcgJHt3b3JrZmxvd3MubGVuZ3RofSB3ZWJob29rIHJvdXRlKHMpOmApO1xuXHRcdGZvciAoY29uc3QgZW50cnkgb2Ygd29ya2Zsb3dzKSB7XG5cdFx0XHR0aGlzLnJlZ2lzdGVyV2ViaG9va1JvdXRlKGVudHJ5KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJlZ2lzdGVyV2ViaG9va1JvdXRlKGVudHJ5OiB7IHdvcmtmbG93TmFtZTogc3RyaW5nOyBjb25maWc6IFdlYmhvb2tUcmlnZ2VyQ29uZmlnIH0pOiB2b2lkIHtcblx0XHRjb25zdCB7IHdvcmtmbG93TmFtZSwgY29uZmlnIH0gPSBlbnRyeTtcblx0XHRjb25zdCBwYXRoID0gY29uZmlnLnBhdGggPz8gKGNvbmZpZy5wcm92aWRlciA/IGAvd2ViaG9va3MvJHtjb25maWcucHJvdmlkZXJ9YCA6IGAvd2ViaG9va3MvJHt3b3JrZmxvd05hbWV9YCk7XG5cdFx0Y29uc3QgbGFiZWwgPSBjb25maWcucHJvdmlkZXIgPz8gXCJjdXN0b21cIjtcblx0XHR0aGlzLmxvZ2dlci5sb2coYFtibG9rXVt3ZWJob29rXSAgIFBPU1QgICAgJHtwYXRofSAg4oaQICAke3dvcmtmbG93TmFtZX0gICgke2xhYmVsfSlgKTtcblxuXHRcdHRoaXMuYXBwLnBvc3QocGF0aCwgKGM6IEhvbm9Db250ZXh0KSA9PiB0aGlzLmhhbmRsZVJlcXVlc3QoYywgd29ya2Zsb3dOYW1lLCBwYXRoLCBjb25maWcpKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgaGFuZGxlUmVxdWVzdChcblx0XHRjOiBIb25vQ29udGV4dCxcblx0XHR3b3JrZmxvd05hbWU6IHN0cmluZyxcblx0XHRwYXRoOiBzdHJpbmcsXG5cdFx0Y29uZmlnOiBXZWJob29rVHJpZ2dlckNvbmZpZyxcblx0KTogUHJvbWlzZTxSZXNwb25zZT4ge1xuXHRcdHRoaXMuY291bnRlclJlY2VpdmVkLmFkZCgxLCB7IHdvcmtmbG93X25hbWU6IHdvcmtmbG93TmFtZSB9KTtcblxuXHRcdC8vIDEuIENhcHR1cmUgcmF3IGJvZHkgQkVGT1JFIHBhcnNpbmcg4oCUIHZlcmlmaWVycyBzaWduIHRoZSB3aXJlIGJ5dGVzLlxuXHRcdGNvbnN0IHJhd0JvZHkgPSBhd2FpdCBjLnJlcS50ZXh0KCk7XG5cdFx0bGV0IHBhcnNlZEJvZHk6IHVua25vd24gPSB7fTtcblx0XHRpZiAocmF3Qm9keS5sZW5ndGggPiAwKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRwYXJzZWRCb2R5ID0gSlNPTi5wYXJzZShyYXdCb2R5KSBhcyB1bmtub3duO1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdC8vIE5vbi1KU09OIGJvZHkg4oCUIGxlYXZlIHBhcnNlZCBhcyB0aGUgcmF3IHRleHQuIFNsYWNrXG5cdFx0XHRcdC8vIGNoYWxsZW5nZXMgJiBTaG9waWZ5IGNhbiBwb3N0IG5vbi1KU09OIG9jY2FzaW9uYWxseS5cblx0XHRcdFx0cGFyc2VkQm9keSA9IHJhd0JvZHk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgaGVhZGVycyA9IE9iamVjdC5mcm9tRW50cmllcyhjLnJlcS5yYXcuaGVhZGVycyk7XG5cdFx0Y29uc3QgcGF0aFBhcmFtcyA9IGMucmVxLnBhcmFtKCkgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0XHRjb25zdCBxdWVyeVBhcmFtcyA9IE9iamVjdC5mcm9tRW50cmllcyhuZXcgVVJMKGMucmVxLnVybCkuc2VhcmNoUGFyYW1zKTtcblxuXHRcdC8vIDIuIFBpY2sgdGhlIHZlcmlmaWVyLlxuXHRcdGNvbnN0IHZlcmlmaWVyID0gdGhpcy5yZXNvbHZlVmVyaWZpZXIod29ya2Zsb3dOYW1lLCBjb25maWcpO1xuXHRcdGlmICghdmVyaWZpZXIpIHtcblx0XHRcdHRoaXMuY291bnRlclJlamVjdGVkLmFkZCgxLCB7IHdvcmtmbG93X25hbWU6IHdvcmtmbG93TmFtZSwgcmVhc29uOiBcIm5vX3ZlcmlmaWVyXCIgfSk7XG5cdFx0XHRyZXR1cm4gYy5qc29uKHsgZXJyb3I6IFwiQ29uZmlndXJhdGlvblwiLCByZWFzb246IFwibm9fdmVyaWZpZXJcIiwgbWVzc2FnZTogXCJObyB2ZXJpZmllciBjb25maWd1cmVkXCIgfSwgNTAwKTtcblx0XHR9XG5cblx0XHQvLyAzLiBSZXNvbHZlIHRoZSBzZWNyZXQgZnJvbSB0aGUgZW52IHZhci5cblx0XHRjb25zdCBzZWNyZXRFbnYgPSBjb25maWcuc2VjcmV0RW52ID8/IGNvbmZpZy5zaWduYXR1cmU/LnNlY3JldEVudjtcblx0XHRjb25zdCBzZWNyZXQgPSBzZWNyZXRFbnYgPyAocHJvY2Vzcy5lbnZbc2VjcmV0RW52XSA/PyBcIlwiKSA6IFwiXCI7XG5cblx0XHQvLyA0LiBWZXJpZnkuXG5cdFx0Y29uc3QgdG9sZXJhbmNlU2VjID0gY29uZmlnLnRvbGVyYW5jZSA/PyBjb25maWcuc2lnbmF0dXJlPy50b2xlcmFuY2UgPz8gREVGQVVMVF9UT0xFUkFOQ0VfU0VDO1xuXHRcdGNvbnN0IHJlc3VsdDogVmVyaWZ5UmVzdWx0ID0gdmVyaWZpZXIudmVyaWZ5KHtcblx0XHRcdGhlYWRlcnMsXG5cdFx0XHRyYXdCb2R5LFxuXHRcdFx0cGFyc2VkQm9keSxcblx0XHRcdHNlY3JldCxcblx0XHRcdHRvbGVyYW5jZVNlYyxcblx0XHR9KTtcblxuXHRcdGlmICghcmVzdWx0Lm9rKSB7XG5cdFx0XHR0aGlzLmNvdW50ZXJSZWplY3RlZC5hZGQoMSwgeyB3b3JrZmxvd19uYW1lOiB3b3JrZmxvd05hbWUsIHJlYXNvbjogcmVzdWx0LnJlYXNvbiB9KTtcblx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKFxuXHRcdFx0XHRgW2Jsb2tdW3dlYmhvb2tdICR7d29ya2Zsb3dOYW1lfTogdmVyaWZ5IGZhaWxlZCByZWFzb249JHtyZXN1bHQucmVhc29ufSBtZXNzYWdlPVwiJHtyZXN1bHQubWVzc2FnZX1cImAsXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIGMuanNvbih7IGVycm9yOiBcIlVuYXV0aG9yaXplZFwiLCByZWFzb246IHJlc3VsdC5yZWFzb24sIG1lc3NhZ2U6IHJlc3VsdC5tZXNzYWdlIH0sIDQwMSk7XG5cdFx0fVxuXG5cdFx0Ly8gNS4gRXZlbnRzIGFsbG93bGlzdCDigJQgdmVyaWZpZWQtYnV0LW91dC1vZi1zY29wZSByZXR1cm5zIDIwMCAobm8gcmV0cnkpLlxuXHRcdGlmIChBcnJheS5pc0FycmF5KGNvbmZpZy5ldmVudHMpICYmIGNvbmZpZy5ldmVudHMubGVuZ3RoID4gMCAmJiAhY29uZmlnLmV2ZW50cy5pbmNsdWRlcyhyZXN1bHQuZXZlbnRUeXBlKSkge1xuXHRcdFx0dGhpcy5jb3VudGVyUmVqZWN0ZWQuYWRkKDEsIHsgd29ya2Zsb3dfbmFtZTogd29ya2Zsb3dOYW1lLCByZWFzb246IFwiZXZlbnRfbm90X2FsbG93ZWRcIiB9KTtcblx0XHRcdHJldHVybiBjLmpzb24oeyBzdGF0dXM6IFwiaWdub3JlZFwiLCByZWFzb246IFwiZXZlbnRfbm90X2FsbG93ZWRcIiwgZXZlbnRUeXBlOiByZXN1bHQuZXZlbnRUeXBlIH0sIDIwMCk7XG5cdFx0fVxuXG5cdFx0Ly8gNi4gUmVwbGF5IHByb3RlY3Rpb24gdmlhIHRoZSBpZGVtcG90ZW5jeSBjYWNoZS5cblx0XHRpZiAoY29uZmlnLmlkZW1wb3RlbmN5S2V5ICYmIHJlc3VsdC5ldmVudElkKSB7XG5cdFx0XHRjb25zdCB0cmFja2VyID0gUnVuVHJhY2tlci5nZXRJbnN0YW5jZSgpO1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSB0cmFja2VyLmdldFN0b3JlKCk7XG5cdFx0XHRjb25zdCBjYWNoZWQgPSBzdG9yZS5nZXRJZGVtcG90ZW5jeUNhY2hlKFJFUExBWV9OQU1FU1BBQ0UsIHdvcmtmbG93TmFtZSwgcmVzdWx0LmV2ZW50SWQpO1xuXHRcdFx0aWYgKGNhY2hlZCkge1xuXHRcdFx0XHR0aGlzLmNvdW50ZXJSZWplY3RlZC5hZGQoMSwgeyB3b3JrZmxvd19uYW1lOiB3b3JrZmxvd05hbWUsIHJlYXNvbjogXCJyZXBsYXlcIiB9KTtcblx0XHRcdFx0cmV0dXJuIGMuanNvbihcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRzdGF0dXM6IFwiZHVwbGljYXRlXCIsXG5cdFx0XHRcdFx0XHRldmVudElkOiByZXN1bHQuZXZlbnRJZCxcblx0XHRcdFx0XHRcdGV2ZW50VHlwZTogcmVzdWx0LmV2ZW50VHlwZSxcblx0XHRcdFx0XHRcdGZpcnN0U2VlblJ1bklkOiBjYWNoZWQuc291cmNlUnVuSWQsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQyMDAsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gNy4gVmVyaWZpZWQgKyBuZXcgZXZlbnQg4oCUIGRpc3BhdGNoIHRoZSB3b3JrZmxvdy5cblx0XHR0aGlzLmNvdW50ZXJBY2NlcHRlZC5hZGQoMSwgeyB3b3JrZmxvd19uYW1lOiB3b3JrZmxvd05hbWUgfSk7XG5cdFx0Y29uc3QgcmVxdWVzdElkID0gdXVpZCgpO1xuXHRcdGNvbnN0IGRpc3BhdGNoT3V0Y29tZSA9IGF3YWl0IHRoaXMuZGlzcGF0Y2hXb3JrZmxvdyh7XG5cdFx0XHR3b3JrZmxvd05hbWUsXG5cdFx0XHRwYXRoLFxuXHRcdFx0Y29uZmlnLFxuXHRcdFx0cmVxdWVzdElkLFxuXHRcdFx0aGVhZGVycyxcblx0XHRcdGJvZHk6IHBhcnNlZEJvZHksXG5cdFx0XHRyYXdCb2R5LFxuXHRcdFx0cGF0aFBhcmFtcyxcblx0XHRcdHF1ZXJ5UGFyYW1zLFxuXHRcdFx0ZXZlbnRJZDogcmVzdWx0LmV2ZW50SWQsXG5cdFx0XHRldmVudFR5cGU6IHJlc3VsdC5ldmVudFR5cGUsXG5cdFx0fSk7XG5cblx0XHQvLyA4LiBDYWNoZSBldmVudCBpZCBBRlRFUiBzdWNjZXNzZnVsIGRpc3BhdGNoIHNvIHJldHJpZXMgb24gdGhlXG5cdFx0Ly8gICAgc2FtZSBkZWxpdmVyeSBhcmUgZGVkdXBlZC4gV2UgY2FjaGUgZXZlbiBvbiB3b3JrZmxvdyBmYWlsdXJlXG5cdFx0Ly8gICAg4oCUIHdlYmhvb2sgc2VuZGVycyBzaG91bGQgbm90IHJldHJ5IGRlbGl2ZXJpZXMgdGhleSd2ZVxuXHRcdC8vICAgIGFscmVhZHkgZGVsaXZlcmVkICh0aGUgd29ya2Zsb3cncyBvd24gcmV0cnkgLyBETFEgb3ducyB0aGF0KS5cblx0XHRpZiAoY29uZmlnLmlkZW1wb3RlbmN5S2V5ICYmIHJlc3VsdC5ldmVudElkKSB7XG5cdFx0XHRjb25zdCB0cmFja2VyID0gUnVuVHJhY2tlci5nZXRJbnN0YW5jZSgpO1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSB0cmFja2VyLmdldFN0b3JlKCk7XG5cdFx0XHRzdG9yZS5zZXRJZGVtcG90ZW5jeUNhY2hlKFJFUExBWV9OQU1FU1BBQ0UsIHdvcmtmbG93TmFtZSwgcmVzdWx0LmV2ZW50SWQsIHtcblx0XHRcdFx0ZGF0YTogeyBldmVudElkOiByZXN1bHQuZXZlbnRJZCwgZXZlbnRUeXBlOiByZXN1bHQuZXZlbnRUeXBlIH0sXG5cdFx0XHRcdGNhY2hlZEF0OiBEYXRlLm5vdygpLFxuXHRcdFx0XHRleHBpcmVzQXQ6IERhdGUubm93KCkgKyBERUZBVUxUX1JFUExBWV9UVExfTVMsXG5cdFx0XHRcdHNvdXJjZVJ1bklkOiByZXF1ZXN0SWQsXG5cdFx0XHRcdHNvdXJjZU5vZGVSdW5JZDogcmVxdWVzdElkLFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gOS4gU2hhcGUgdGhlIHJlc3BvbnNlLiBXb3JrZmxvdydzIGBjdHgucmVzcG9uc2VgIGxhbmRzIGluIHRoZVxuXHRcdC8vICAgIGJvZHkgZm9yIHBhcml0eSB3aXRoIEhUVFAgdHJpZ2dlcnMuXG5cdFx0cmV0dXJuIGMuanNvbihcblx0XHRcdHtcblx0XHRcdFx0c3RhdHVzOiBcIm9rXCIsXG5cdFx0XHRcdGV2ZW50SWQ6IHJlc3VsdC5ldmVudElkLFxuXHRcdFx0XHRldmVudFR5cGU6IHJlc3VsdC5ldmVudFR5cGUsXG5cdFx0XHRcdHJ1bklkOiByZXF1ZXN0SWQsXG5cdFx0XHRcdHJlc3BvbnNlOiBkaXNwYXRjaE91dGNvbWUsXG5cdFx0XHR9LFxuXHRcdFx0MjAwLFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVWZXJpZmllcih3b3JrZmxvd05hbWU6IHN0cmluZywgY29uZmlnOiBXZWJob29rVHJpZ2dlckNvbmZpZyk6IFZlcmlmaWVyIHwgbnVsbCB7XG5cdFx0aWYgKGNvbmZpZy5wcm92aWRlcikge1xuXHRcdFx0Y29uc3QgdiA9IEJVSUxUSU5fVkVSSUZJRVJTW2NvbmZpZy5wcm92aWRlcl07XG5cdFx0XHRpZiAoIXYpIHtcblx0XHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoYFtibG9rXVt3ZWJob29rXSAke3dvcmtmbG93TmFtZX06IHVua25vd24gcHJvdmlkZXIgXCIke2NvbmZpZy5wcm92aWRlcn1cImApO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHRcdHJldHVybiB2O1xuXHRcdH1cblx0XHRpZiAoY29uZmlnLnNpZ25hdHVyZSkge1xuXHRcdFx0cmV0dXJuIGJ1aWxkQ3VzdG9tVmVyaWZpZXIoe1xuXHRcdFx0XHRzY2hlbWU6IGNvbmZpZy5zaWduYXR1cmUuc2NoZW1lID8/IFwiaG1hYy1zaGEyNTZcIixcblx0XHRcdFx0aGVhZGVyOiBjb25maWcuc2lnbmF0dXJlLmhlYWRlcixcblx0XHRcdFx0Zm9ybWF0OiBjb25maWcuc2lnbmF0dXJlLmZvcm1hdCA/PyBcIntoZXh9XCIsXG5cdFx0XHRcdHNlY3JldEVudjogY29uZmlnLnNpZ25hdHVyZS5zZWNyZXRFbnYsXG5cdFx0XHRcdHRvbGVyYW5jZTogY29uZmlnLnNpZ25hdHVyZS50b2xlcmFuY2UgPz8gREVGQVVMVF9UT0xFUkFOQ0VfU0VDLFxuXHRcdFx0XHR0aW1lc3RhbXBIZWFkZXI6IGNvbmZpZy5zaWduYXR1cmUudGltZXN0YW1wSGVhZGVyLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vIFdvcmtmbG93IGRpc3BhdGNoXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdHByaXZhdGUgYXN5bmMgZGlzcGF0Y2hXb3JrZmxvdyhvcHRzOiB7XG5cdFx0d29ya2Zsb3dOYW1lOiBzdHJpbmc7XG5cdFx0cGF0aDogc3RyaW5nO1xuXHRcdGNvbmZpZzogV2ViaG9va1RyaWdnZXJDb25maWc7XG5cdFx0cmVxdWVzdElkOiBzdHJpbmc7XG5cdFx0aGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0XHRib2R5OiB1bmtub3duO1xuXHRcdHJhd0JvZHk6IHN0cmluZztcblx0XHRwYXRoUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHRcdHF1ZXJ5UGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHRcdGV2ZW50SWQ6IHN0cmluZztcblx0XHRldmVudFR5cGU6IHN0cmluZztcblx0fSk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGNvbnN0IHsgd29ya2Zsb3dOYW1lLCByZXF1ZXN0SWQsIGhlYWRlcnMsIGJvZHksIHJhd0JvZHksIHBhdGhQYXJhbXMsIHF1ZXJ5UGFyYW1zLCBldmVudElkLCBldmVudFR5cGUgfSA9IG9wdHM7XG5cblx0XHRyZXR1cm4gdGhpcy50cmFjZXIuc3RhcnRBY3RpdmVTcGFuKGB3ZWJob29rOiR7d29ya2Zsb3dOYW1lfWAsIGFzeW5jIChzcGFuOiBTcGFuKSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCByZWdpc3RyeSA9IFdvcmtmbG93UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTtcblx0XHRcdFx0Y29uc3QgZW50cnkgPSByZWdpc3RyeS5nZXQod29ya2Zsb3dOYW1lKTtcblx0XHRcdFx0aWYgKCFlbnRyeSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgW2Jsb2tdW3dlYmhvb2tdIHdvcmtmbG93IFwiJHt3b3JrZmxvd05hbWV9XCIgbm90IGZvdW5kIGluIHJlZ2lzdHJ5YCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YXdhaXQgdGhpcy5jb25maWd1cmF0aW9uLmluaXQod29ya2Zsb3dOYW1lLCB0aGlzLm5vZGVNYXAsIGVudHJ5LndvcmtmbG93KTtcblxuXHRcdFx0XHRjb25zdCBjdHg6IENvbnRleHQgPSB0aGlzLmNyZWF0ZUNvbnRleHQodW5kZWZpbmVkLCB3b3JrZmxvd05hbWUsIHJlcXVlc3RJZCk7XG5cdFx0XHRcdGN0eC5yZXF1ZXN0ID0ge1xuXHRcdFx0XHRcdGJvZHksXG5cdFx0XHRcdFx0cmF3Qm9keSxcblx0XHRcdFx0XHRoZWFkZXJzLFxuXHRcdFx0XHRcdHBhcmFtczogcGF0aFBhcmFtcyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbXMsXG5cdFx0XHRcdH0gYXMgdW5rbm93biBhcyBSZXF1ZXN0Q29udGV4dDtcblxuXHRcdFx0XHQvLyBTdGFtcCB3ZWJob29rIG1ldGFkYXRhIG9udG8gY3R4IHNvIHBvbHltb3JwaGljIGRpc3BhdGNoXG5cdFx0XHRcdC8vIGNhbiByZWFkIG5hbWVzcGFjZSArIGV2ZW50IG1ldGFkYXRhIHVuaWZvcm1seS5cblx0XHRcdFx0KGN0eCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuX3dlYmhvb2sgPSB7XG5cdFx0XHRcdFx0ZXZlbnRJZCxcblx0XHRcdFx0XHRldmVudFR5cGUsXG5cdFx0XHRcdFx0bmFtZXNwYWNlOiBvcHRzLmNvbmZpZy5uYW1lc3BhY2UsXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0YXdhaXQgdGhpcy5hcHBseU1pZGRsZXdhcmVDaGFpbihjdHgsIHRoaXMubm9kZU1hcCk7XG5cdFx0XHRcdGF3YWl0IHRoaXMucnVuKGN0eCk7XG5cblx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJ3b3JrZmxvd19uYW1lXCIsIHdvcmtmbG93TmFtZSk7XG5cdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwiZXZlbnRfaWRcIiwgZXZlbnRJZCk7XG5cdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwiZXZlbnRfdHlwZVwiLCBldmVudFR5cGUpO1xuXHRcdFx0XHRzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuXHRcdFx0XHRyZXR1cm4gY3R4LnJlc3BvbnNlO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdGNvbnN0IG1zZyA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdFx0c3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyIGFzIEVycm9yKTtcblx0XHRcdFx0c3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUiwgbWVzc2FnZTogbXNnIH0pO1xuXHRcdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihgW2Jsb2tdW3dlYmhvb2tdIHdvcmtmbG93ICR7d29ya2Zsb3dOYW1lfSBmYWlsZWQ6ICR7bXNnfWApO1xuXHRcdFx0XHRyZXR1cm4geyBlcnJvcjogbXNnIH07XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRzcGFuLmVuZCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vIEludHJvc3BlY3Rpb25cblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0Z2V0U3RhdHMoKTogeyB3b3JrZmxvd3NSZWdpc3RlcmVkOiBudW1iZXIgfSB7XG5cdFx0cmV0dXJuIHsgd29ya2Zsb3dzUmVnaXN0ZXJlZDogdGhpcy5nZXRXZWJob29rV29ya2Zsb3dzKCkubGVuZ3RoIH07XG5cdH1cblxuXHRwcml2YXRlIGdldFdlYmhvb2tXb3JrZmxvd3MoKTogQXJyYXk8eyB3b3JrZmxvd05hbWU6IHN0cmluZzsgY29uZmlnOiBXZWJob29rVHJpZ2dlckNvbmZpZyB9PiB7XG5cdFx0Y29uc3QgcmVnaXN0cnkgPSBXb3JrZmxvd1JlZ2lzdHJ5LmdldEluc3RhbmNlKCk7XG5cdFx0Y29uc3Qgb3V0OiBBcnJheTx7IHdvcmtmbG93TmFtZTogc3RyaW5nOyBjb25maWc6IFdlYmhvb2tUcmlnZ2VyQ29uZmlnIH0+ID0gW107XG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiByZWdpc3RyeS5saXN0KCkpIHtcblx0XHRcdGNvbnN0IHdmID0gZW50cnkud29ya2Zsb3cgYXMgeyB0cmlnZ2VyPzogeyB3ZWJob29rPzogV2ViaG9va1RyaWdnZXJDb25maWcgfSB9IHwgdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgY2ZnID0gd2Y/LnRyaWdnZXI/LndlYmhvb2s7XG5cdFx0XHRpZiAoIWNmZykgY29udGludWU7XG5cdFx0XHQvLyBTa2lwIGNvbmZpZ3MgbWlzc2luZyBib3RoIHByb3ZpZGVyIEFORCBzaWduYXR1cmUg4oCUIHRoZXkgY2FuJ3Rcblx0XHRcdC8vIHZlcmlmeSBhbnl0aGluZy4gQXV0aG9ycyBnZXQgYSBzdHJ1Y3R1cmVkIGVycm9yIGF0IGJvb3QuXG5cdFx0XHRpZiAoIWNmZy5wcm92aWRlciAmJiAhY2ZnLnNpZ25hdHVyZSkge1xuXHRcdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihcblx0XHRcdFx0XHRgW2Jsb2tdW3dlYmhvb2tdIHdvcmtmbG93IFwiJHtlbnRyeS5uYW1lfVwiIGhhcyB0cmlnZ2VyLndlYmhvb2sgd2l0aCBuZWl0aGVyIFxcYHByb3ZpZGVyXFxgIG5vciBcXGBzaWduYXR1cmVcXGAg4oCUIHNraXBwaW5nLiBBZGQgb25lIHRvIGVuYWJsZSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uLmAsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0b3V0LnB1c2goeyB3b3JrZmxvd05hbWU6IGVudHJ5Lm5hbWUsIGNvbmZpZzogY2ZnIH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gb3V0O1xuXHR9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTaW5nbGV0b24gYWNjZXNzb3IgKG1pcnJvcnMgV1MgLyBTU0UpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5sZXQgYWN0aXZlVHJpZ2dlcjogV2ViaG9va1RyaWdnZXIgfCBudWxsID0gbnVsbDtcblxuZXhwb3J0IGZ1bmN0aW9uIF9zZXRBY3RpdmVXZWJob29rVHJpZ2dlcih0cmlnZ2VyOiBXZWJob29rVHJpZ2dlciB8IG51bGwpOiB2b2lkIHtcblx0YWN0aXZlVHJpZ2dlciA9IHRyaWdnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfZ2V0QWN0aXZlV2ViaG9va1RyaWdnZXIoKTogV2ViaG9va1RyaWdnZXIgfCBudWxsIHtcblx0cmV0dXJuIGFjdGl2ZVRyaWdnZXI7XG59XG5cbmV4cG9ydCB0eXBlIHsgV2ViaG9va1RyaWdnZXJDb25maWcgfTtcbiJdfQ==
356
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2ViaG9va1RyaWdnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvV2ViaG9va1RyaWdnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNERztBQUVILE9BQU8sRUFDTixhQUFhLEVBQ2IsVUFBVSxFQUVWLFdBQVcsRUFDWCxnQkFBZ0IsR0FDaEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQWEsY0FBYyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUvRSxPQUFPLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsQyxPQUFPLEVBQUUsaUJBQWlCLEVBQW9DLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBaUN2RyxNQUFNLHFCQUFxQixHQUFHLEdBQUcsQ0FBQztBQUNsQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsdUNBQXVDO0FBQ3BGLE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDO0FBRXZDLGdGQUFnRjtBQUNoRixnQkFBZ0I7QUFDaEIsZ0ZBQWdGO0FBRWhGLE1BQU0sQ0FBQyxPQUFPLE9BQU8sY0FBZSxTQUFRLFdBQVc7SUFDNUMsT0FBTyxHQUF3QixFQUF5QixDQUFDO0lBQ2hELE1BQU0sR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO0lBQzdCLE1BQU0sR0FBRyxLQUFLLENBQUMsU0FBUyxDQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksSUFBSSwwQkFBMEIsRUFDdEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLElBQUksT0FBTyxDQUN0QyxDQUFDO0lBRWUsS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsZUFBZSxHQUFHLElBQUks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QUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUF3RSxDQUFDO1lBQzFGLE1BQU0sR0FBRyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxHQUFHO2dCQUFFLFNBQVM7WUFDbkIsZ0VBQWdFO1lBQ2hFLDJEQUEyRDtZQUMzRCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2hCLDZCQUE2QixLQUFLLENBQUMsSUFBSSx5SEFBeUgsQ0FDaEssQ0FBQztnQkFDRixTQUFTO1lBQ1YsQ0FBQztZQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDWixDQUFDO0NBQ0Q7QUFFRCxnRkFBZ0Y7QUFDaEYsd0NBQXdDO0FBQ3hDLGdGQUFnRjtBQUVoRixJQUFJLGFBQWEsR0FBMEIsSUFBSSxDQUFDO0FBRWhELE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxPQUE4QjtJQUN0RSxhQUFhLEdBQUcsT0FBTyxDQUFDO0FBQ3pCLENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCO0lBQ3ZDLE9BQU8sYUFBYSxDQUFDO0FBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdlYmhvb2tUcmlnZ2VyIOKAlCB2MC43IFBSIDQg4oCUIEluYm91bmQgd2ViaG9vayB0cmlnZ2VyIHRoYXQgbW91bnRzXG4gKiB2ZXJpZmllZCBQT1NUIHJvdXRlcyBvbiB0aGUgc2hhcmVkIEhvbm8gYXBwLiBPbmUgcm91dGUgcGVyIHdvcmtmbG93XG4gKiB3aG9zZSBgdHJpZ2dlci53ZWJob29rYCBjb25maWcgaXMgcmVnaXN0ZXJlZC5cbiAqXG4gKiAqKkF1dGhvcmluZyBzdXJmYWNlIChidWlsdC1pbiBwcm92aWRlcik6KipcbiAqXG4gKiBgYGBqc29uXG4gKiB7XG4gKiAgIFwibmFtZVwiOiBcInN0cmlwZS1ldmVudHNcIixcbiAqICAgXCJ0cmlnZ2VyXCI6IHtcbiAqICAgICBcIndlYmhvb2tcIjoge1xuICogICAgICAgXCJwcm92aWRlclwiOiBcInN0cmlwZVwiLFxuICogICAgICAgXCJwYXRoXCI6IFwiL3dlYmhvb2tzL3N0cmlwZVwiLFxuICogICAgICAgXCJzZWNyZXRFbnZcIjogXCJTVFJJUEVfV0VCSE9PS19TRUNSRVRcIixcbiAqICAgICAgIFwibmFtZXNwYWNlXCI6IFwic3RyaXBlXCIsXG4gKiAgICAgICBcImlkZW1wb3RlbmN5S2V5XCI6IFwianMvY3R4LnJlcXVlc3QuYm9keS5pZFwiXG4gKiAgICAgfVxuICogICB9LFxuICogICBcInN0ZXBzXCI6IFtcbiAqICAgICB7IFwiaWRcIjogXCJkaXNwYXRjaFwiLCBcInN1YndvcmtmbG93XCI6IFwianMvY3R4LnJlcXVlc3QuYm9keS50eXBlXCIsIFwiaW5wdXRzXCI6IHsgXCJzdHJpcGVFdmVudFwiOiBcImpzL2N0eC5yZXF1ZXN0LmJvZHlcIiB9IH1cbiAqICAgXVxuICogfVxuICogYGBgXG4gKlxuICogKipQaXBlbGluZSAocGVyIGluYm91bmQgcmVxdWVzdCk6KipcbiAqXG4gKiAgIDEuIFJlYWQgcmF3IGJvZHkg4oCUIHZlcmlmaWVycyBNVVNUIHNpZ24gdGhlIGJ5dGVzIHRoYXQgY3Jvc3NlZFxuICogICAgICB0aGUgd2lyZSwgbm90IHRoZSBKU09OLXJlLXN0cmluZ2lmaWVkIGJvZHkgKFN0cmlwZSAvIEdpdEh1YiAvXG4gKiAgICAgIFNsYWNrIGFsbCBzaWduIHJhdyBieXRlcykuXG4gKiAgIDIuIFZlcmlmeSB0aGUgc2lnbmF0dXJlIHZpYSB0aGUgcGVyLXByb3ZpZGVyIHN0cmF0ZWd5XG4gKiAgICAgIChgdmVyaWZpZXJzLnRzYCkuIE9uIGZhaWx1cmUsIHJldHVybiA0MDEgd2l0aCBzdHJ1Y3R1cmVkXG4gKiAgICAgIGB7IGVycm9yLCByZWFzb24sIG1lc3NhZ2UgfWAuXG4gKiAgIDMuIFJlcGxheSBjaGVjazogaWYgYGlkZW1wb3RlbmN5S2V5YCBpcyBjb25maWd1cmVkLCBsb29rIHVwXG4gKiAgICAgIGAod29ya2Zsb3dOYW1lLCBldmVudElkKWAgaW4gdGhlIGlkZW1wb3RlbmN5IGNhY2hlIChzYW1lIHN0b3JlXG4gKiAgICAgIGFzIFRpZXIgMSBzdGVwIGNhY2hpbmcpLiBPbiBoaXQsIHJldHVybiAyMDAgd2l0aFxuICogICAgICBgeyBzdGF0dXM6IFwiZHVwbGljYXRlXCIsIGV2ZW50SWQgfWAgYW5kIERPTidUIHJ1biB0aGUgd29ya2Zsb3cuXG4gKiAgIDQuIEV2ZW50cyBhbGxvd2xpc3Q6IGlmIGBldmVudHM6IFsuLi5dYCBpcyBjb25maWd1cmVkLCBza2lwXG4gKiAgICAgIHdvcmtmbG93IHJ1bnMgd2hvc2UgZXZlbnQgdHlwZSBpc24ndCBpbiB0aGUgbGlzdCDigJQgcmV0dXJuXG4gKiAgICAgIDIwMCB3aXRoIGB7IHN0YXR1czogXCJpZ25vcmVkXCIsIGV2ZW50VHlwZSB9YCBzbyB0aGUgc2VuZGVyXG4gKiAgICAgIGRvZXNuJ3QgcmV0cnkuXG4gKiAgIDUuIFJ1biB0aGUgd29ya2Zsb3cgdGhyb3VnaCBgVHJpZ2dlckJhc2UucnVuYCBzbyBtaWRkbGV3YXJlLFxuICogICAgICB0cmFjaW5nLCByZXRyaWVzLCBjb25jdXJyZW5jeSwgZXRjLiBhcHBseSB1bmlmb3JtbHkuXG4gKiAgIDYuIENhY2hlIHRoZSBldmVudElkIHNvIGEgcmV0cnkgd2l0aGluIHRoZSBUVEwgd2luZG93IHJldHVybnNcbiAqICAgICAgdGhlIGR1cGxpY2F0ZSByZXNwb25zZS5cbiAqXG4gKiAqKkhvbm8gaW50ZWdyYXRpb246KiogaWRlbnRpY2FsIHRvIFdlYlNvY2tldCBhbmQgU1NFIOKAlCBhY2NlcHRzIHRoZVxuICogc2hhcmVkIGBIb25vPGFueSwgYW55LCBhbnk+YCBhcHAgYW5kIGFuIG9wdGlvbmFsIGBIdHRwVHJpZ2dlckxpa2VgXG4gKiBleHBvc2luZyBgYWRkUHJlQ2F0Y2hBbGxIb29rYCBzbyB3ZWJob29rIHJvdXRlcyBtb3VudCBCRUZPUkUgdGhlXG4gKiBsZWdhY3kgYC86d29ya2Zsb3d7Lit9YCBjYXRjaC1hbGwgYW5kIHdpbiBIb25vJ3MgZmlyc3QtbWF0Y2hcbiAqIGRpc3BhdGNoLlxuICpcbiAqIFNlZSBbYWRkaXRpb25hbC10cmlnZ2Vycy1wbGFuLm1keF0oLi4vLi4vLi4vZG9jcy9jL2RldnRvb2xzL2FkZGl0aW9uYWwtdHJpZ2dlcnMtcGxhbi5tZHgjd2ViaG9vay10cmlnZ2VyKVxuICogZm9yIHRoZSBmdWxsIHYwLjcgZGVzaWduLlxuICovXG5cbmltcG9ydCB7XG5cdERlZmF1bHRMb2dnZXIsXG5cdFJ1blRyYWNrZXIsXG5cdHR5cGUgR2xvYmFsT3B0aW9ucyBhcyBSdW5uZXJHbG9iYWxPcHRpb25zLFxuXHRUcmlnZ2VyQmFzZSxcblx0V29ya2Zsb3dSZWdpc3RyeSxcbn0gZnJvbSBcIkBibG9ranMvcnVubmVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHQsIFJlcXVlc3RDb250ZXh0IH0gZnJvbSBcIkBibG9ranMvc2hhcmVkXCI7XG5pbXBvcnQgeyB0eXBlIFNwYW4sIFNwYW5TdGF0dXNDb2RlLCBtZXRyaWNzLCB0cmFjZSB9IGZyb20gXCJAb3BlbnRlbGVtZXRyeS9hcGlcIjtcbmltcG9ydCB0eXBlIHsgSG9ubywgQ29udGV4dCBhcyBIb25vQ29udGV4dCB9IGZyb20gXCJob25vXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSBcInV1aWRcIjtcblxuaW1wb3J0IHsgQlVJTFRJTl9WRVJJRklFUlMsIHR5cGUgVmVyaWZpZXIsIHR5cGUgVmVyaWZ5UmVzdWx0LCBidWlsZEN1c3RvbVZlcmlmaWVyIH0gZnJvbSBcIi4vdmVyaWZpZXJzXCI7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUeXBlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuaW50ZXJmYWNlIFdlYmhvb2tUcmlnZ2VyQ29uZmlnIHtcblx0cHJvdmlkZXI/OiBcImdpdGh1YlwiIHwgXCJzdHJpcGVcIiB8IFwic2xhY2tcIiB8IFwic2hvcGlmeVwiIHwgXCJzdml4XCI7XG5cdHBhdGg/OiBzdHJpbmc7XG5cdGV2ZW50cz86IHN0cmluZ1tdO1xuXHRzZWNyZXRFbnY/OiBzdHJpbmc7XG5cdHNpZ25hdHVyZT86IHtcblx0XHRzY2hlbWU/OiBcImhtYWMtc2hhMjU2XCIgfCBcImhtYWMtc2hhMVwiIHwgXCJobWFjLXNoYTUxMlwiO1xuXHRcdGhlYWRlcjogc3RyaW5nO1xuXHRcdGZvcm1hdD86IHN0cmluZztcblx0XHRzZWNyZXRFbnY6IHN0cmluZztcblx0XHR0b2xlcmFuY2U/OiBudW1iZXI7XG5cdFx0dGltZXN0YW1wSGVhZGVyPzogc3RyaW5nO1xuXHRcdC8qKiBFdmVudC1pZCBzb3VyY2UgZm9yIHJlcGxheSBkZWR1cCDigJQgaGVhZGVyIG5hbWUgKHdpbnMpIOKApiAqL1xuXHRcdGV2ZW50SWRIZWFkZXI/OiBzdHJpbmc7XG5cdFx0LyoqIOKApiBvciBhIGRvdC1wYXRoIGludG8gdGhlIHBhcnNlZCBib2R5IChlLmcuIFwiaWRcIiwgXCJkYXRhLmlkXCIpLiAqL1xuXHRcdGV2ZW50SWRQYXRoPzogc3RyaW5nO1xuXHR9O1xuXHR0b2xlcmFuY2U/OiBudW1iZXI7XG5cdGlkZW1wb3RlbmN5S2V5Pzogc3RyaW5nO1xuXHRuYW1lc3BhY2U/OiBzdHJpbmc7XG5cdG1pZGRsZXdhcmU/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIEh0dHBUcmlnZ2VyTGlrZSB7XG5cdGFkZFByZUNhdGNoQWxsSG9vayhjYjogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pOiB2b2lkO1xufVxuXG5jb25zdCBERUZBVUxUX1RPTEVSQU5DRV9TRUMgPSAzMDA7XG5jb25zdCBERUZBVUxUX1JFUExBWV9UVExfTVMgPSA1ICogNjAgKiAxMDAwOyAvLyA1IG1pbiDigJQgbWF0Y2ggU3RyaXBlIC8gU3ZpeCBkZWZhdWx0LlxuY29uc3QgUkVQTEFZX05BTUVTUEFDRSA9IFwiX193ZWJob29rX19cIjtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRyaWdnZXIgY2xhc3Ncbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYmhvb2tUcmlnZ2VyIGV4dGVuZHMgVHJpZ2dlckJhc2Uge1xuXHRwcm90ZWN0ZWQgbm9kZU1hcDogUnVubmVyR2xvYmFsT3B0aW9ucyA9IHt9IGFzIFJ1bm5lckdsb2JhbE9wdGlvbnM7XG5cdHByb3RlY3RlZCByZWFkb25seSBsb2dnZXIgPSBuZXcgRGVmYXVsdExvZ2dlcigpO1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgdHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKFxuXHRcdHByb2Nlc3MuZW52LlBST0pFQ1RfTkFNRSB8fCBcInRyaWdnZXItd2ViaG9vay13b3JrZmxvd1wiLFxuXHRcdHByb2Nlc3MuZW52LlBST0pFQ1RfVkVSU0lPTiB8fCBcIjAuMC4xXCIsXG5cdCk7XG5cblx0cHJpdmF0ZSByZWFkb25seSBtZXRlciA9IG1ldHJpY3MuZ2V0TWV0ZXIoXCJibG9rXCIpO1xuXHRwcml2YXRlIHJlYWRvbmx5IGNvdW50ZXJSZWNlaXZlZCA9IHRoaXMubWV0ZXIuY3JlYXRlQ291bnRlcihcImJsb2tfd2ViaG9va19yZWNlaXZlZF90b3RhbFwiLCB7XG5cdFx0ZGVzY3JpcHRpb246IFwiV2ViaG9vayBkZWxpdmVyaWVzIHJlY2VpdmVkIChjdW11bGF0aXZlKS5cIixcblx0XHR1bml0OiBcIjFcIixcblx0fSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgY291bnRlclJlamVjdGVkID0gdGhpcy5tZXRlci5jcmVhdGVDb3VudGVyKFwiYmxva193ZWJob29rX3JlamVjdGVkX3RvdGFsXCIsIHtcblx0XHRkZXNjcmlwdGlvbjogXCJXZWJob29rIGRlbGl2ZXJpZXMgcmVqZWN0ZWQgKHNpZ25hdHVyZSBmYWlsdXJlLCBhbGxvd2xpc3QgbWlzcywgcmVwbGF5KS5cIixcblx0XHR1bml0OiBcIjFcIixcblx0fSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgY291bnRlckFjY2VwdGVkID0gdGhpcy5tZXRlci5jcmVhdGVDb3VudGVyKFwiYmxva193ZWJob29rX2FjY2VwdGVkX3RvdGFsXCIsIHtcblx0XHRkZXNjcmlwdGlvbjogXCJXZWJob29rIGRlbGl2ZXJpZXMgdGhhdCB0cmlnZ2VyZWQgYSB3b3JrZmxvdyBydW4uXCIsXG5cdFx0dW5pdDogXCIxXCIsXG5cdH0pO1xuXG5cdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogSG9ubydzIGdlbmVyaWMgcHJvcGFnYXRpb25cblx0cHJpdmF0ZSByZWFkb25seSBhcHA6IEhvbm88YW55LCBhbnksIGFueT47XG5cdHByaXZhdGUgcmVhZG9ubHkgaHR0cFRyaWdnZXI6IEh0dHBUcmlnZ2VyTGlrZSB8IG51bGw7XG5cblx0cHJpdmF0ZSB3aXJlZCA9IGZhbHNlO1xuXG5cdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogbWF0Y2hlcyBgYXBwYCBmaWVsZCdzIGFueSBnZW5lcmljXG5cdGNvbnN0cnVjdG9yKGFwcDogSG9ubzxhbnksIGFueSwgYW55PiwgaHR0cFRyaWdnZXI/OiBIdHRwVHJpZ2dlckxpa2UpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuYXBwID0gYXBwO1xuXHRcdHRoaXMuaHR0cFRyaWdnZXIgPSBodHRwVHJpZ2dlciA/PyBudWxsO1xuXHRcdF9zZXRBY3RpdmVXZWJob29rVHJpZ2dlcih0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbmplY3QgdGhlIHJ1bm5lcidzIEdsb2JhbE9wdGlvbnMgKG5vZGVzICsgd29ya2Zsb3dzKS4gQ2FsbGVkIGJ5XG5cdCAqIHRoZSBvcmNoZXN0cmF0b3IgQUZURVIgY29uc3RydWN0aW5nIHRoZSB0cmlnZ2VyIGJ1dCBCRUZPUkVcblx0ICogYGxpc3RlbigpYC4gU2hhcmVzIEh0dHBUcmlnZ2VyJ3Mgbm9kZU1hcCBzbyBwZXItcmVxdWVzdCB3b3JrZmxvd1xuXHQgKiBydW5zIHJlc29sdmUgaGVscGVycyArIHN1Yi13b3JrZmxvd3MgdGhyb3VnaCB0aGUgc2FtZSByZWdpc3RyeS5cblx0ICovXG5cdHNldE5vZGVNYXAobm9kZU1hcDogUnVubmVyR2xvYmFsT3B0aW9ucyk6IHZvaWQge1xuXHRcdHRoaXMubm9kZU1hcCA9IG5vZGVNYXA7XG5cdH1cblxuXHRhc3luYyBsaXN0ZW4oKTogUHJvbWlzZTxudW1iZXI+IHtcblx0XHRjb25zdCBzdGFydFRpbWUgPSB0aGlzLnN0YXJ0Q291bnRlcigpO1xuXHRcdGlmICh0aGlzLndpcmVkKSB7XG5cdFx0XHR0aGlzLmxvZ2dlci5sb2coXCJbYmxva11bd2ViaG9va10gbGlzdGVuKCkgY2FsbGVkIHR3aWNlOyBpZ25vcmluZ1wiKTtcblx0XHRcdHJldHVybiB0aGlzLmVuZENvdW50ZXIoc3RhcnRUaW1lKTtcblx0XHR9XG5cdFx0dGhpcy53aXJlZCA9IHRydWU7XG5cblx0XHRpZiAodGhpcy5odHRwVHJpZ2dlcikge1xuXHRcdFx0dGhpcy5odHRwVHJpZ2dlci5hZGRQcmVDYXRjaEFsbEhvb2soKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnJlZ2lzdGVyUm91dGVzRnJvbVJlZ2lzdHJ5KCk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5yZWdpc3RlclJvdXRlc0Zyb21SZWdpc3RyeSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVuZENvdW50ZXIoc3RhcnRUaW1lKTtcblx0fVxuXG5cdGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy53aXJlZCA9IGZhbHNlO1xuXHRcdGlmIChfZ2V0QWN0aXZlV2ViaG9va1RyaWdnZXIoKSA9PT0gdGhpcykgX3NldEFjdGl2ZVdlYmhvb2tUcmlnZ2VyKG51bGwpO1xuXHRcdHRoaXMuZGVzdHJveU1vbml0b3JpbmcoKTtcblx0XHR0aGlzLmxvZ2dlci5sb2coXCJbYmxva11bd2ViaG9va10gc3RvcHBlZFwiKTtcblx0fVxuXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLyBSb3V0ZSByZWdpc3RyYXRpb25cblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0cHJpdmF0ZSByZWdpc3RlclJvdXRlc0Zyb21SZWdpc3RyeSgpOiB2b2lkIHtcblx0XHRjb25zdCB3b3JrZmxvd3MgPSB0aGlzLmdldFdlYmhvb2tXb3JrZmxvd3MoKTtcblx0XHRpZiAod29ya2Zsb3dzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5sb2dnZXIubG9nKFwiW2Jsb2tdW3dlYmhvb2tdIG5vIHdvcmtmbG93cyB3aXRoIHRyaWdnZXIud2ViaG9vayBmb3VuZFwiKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5sb2dnZXIubG9nKGBbYmxva11bd2ViaG9va10gcmVnaXN0ZXJpbmcgJHt3b3JrZmxvd3MubGVuZ3RofSB3ZWJob29rIHJvdXRlKHMpOmApO1xuXHRcdGZvciAoY29uc3QgZW50cnkgb2Ygd29ya2Zsb3dzKSB7XG5cdFx0XHR0aGlzLnJlZ2lzdGVyV2ViaG9va1JvdXRlKGVudHJ5KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJlZ2lzdGVyV2ViaG9va1JvdXRlKGVudHJ5OiB7IHdvcmtmbG93TmFtZTogc3RyaW5nOyBjb25maWc6IFdlYmhvb2tUcmlnZ2VyQ29uZmlnIH0pOiB2b2lkIHtcblx0XHRjb25zdCB7IHdvcmtmbG93TmFtZSwgY29uZmlnIH0gPSBlbnRyeTtcblx0XHRjb25zdCBwYXRoID0gY29uZmlnLnBhdGggPz8gKGNvbmZpZy5wcm92aWRlciA/IGAvd2ViaG9va3MvJHtjb25maWcucHJvdmlkZXJ9YCA6IGAvd2ViaG9va3MvJHt3b3JrZmxvd05hbWV9YCk7XG5cdFx0Y29uc3QgbGFiZWwgPSBjb25maWcucHJvdmlkZXIgPz8gXCJjdXN0b21cIjtcblx0XHR0aGlzLmxvZ2dlci5sb2coYFtibG9rXVt3ZWJob29rXSAgIFBPU1QgICAgJHtwYXRofSAg4oaQICAke3dvcmtmbG93TmFtZX0gICgke2xhYmVsfSlgKTtcblxuXHRcdHRoaXMuYXBwLnBvc3QocGF0aCwgKGM6IEhvbm9Db250ZXh0KSA9PiB0aGlzLmhhbmRsZVJlcXVlc3QoYywgd29ya2Zsb3dOYW1lLCBwYXRoLCBjb25maWcpKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgaGFuZGxlUmVxdWVzdChcblx0XHRjOiBIb25vQ29udGV4dCxcblx0XHR3b3JrZmxvd05hbWU6IHN0cmluZyxcblx0XHRwYXRoOiBzdHJpbmcsXG5cdFx0Y29uZmlnOiBXZWJob29rVHJpZ2dlckNvbmZpZyxcblx0KTogUHJvbWlzZTxSZXNwb25zZT4ge1xuXHRcdHRoaXMuY291bnRlclJlY2VpdmVkLmFkZCgxLCB7IHdvcmtmbG93X25hbWU6IHdvcmtmbG93TmFtZSB9KTtcblxuXHRcdC8vIDEuIENhcHR1cmUgcmF3IGJvZHkgQkVGT1JFIHBhcnNpbmcg4oCUIHZlcmlmaWVycyBzaWduIHRoZSB3aXJlIGJ5dGVzLlxuXHRcdGNvbnN0IHJhd0JvZHkgPSBhd2FpdCBjLnJlcS50ZXh0KCk7XG5cdFx0bGV0IHBhcnNlZEJvZHk6IHVua25vd24gPSB7fTtcblx0XHRpZiAocmF3Qm9keS5sZW5ndGggPiAwKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRwYXJzZWRCb2R5ID0gSlNPTi5wYXJzZShyYXdCb2R5KSBhcyB1bmtub3duO1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdC8vIE5vbi1KU09OIGJvZHkg4oCUIGxlYXZlIHBhcnNlZCBhcyB0aGUgcmF3IHRleHQuIFNsYWNrXG5cdFx0XHRcdC8vIGNoYWxsZW5nZXMgJiBTaG9waWZ5IGNhbiBwb3N0IG5vbi1KU09OIG9jY2FzaW9uYWxseS5cblx0XHRcdFx0cGFyc2VkQm9keSA9IHJhd0JvZHk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgaGVhZGVycyA9IE9iamVjdC5mcm9tRW50cmllcyhjLnJlcS5yYXcuaGVhZGVycyk7XG5cdFx0Y29uc3QgcGF0aFBhcmFtcyA9IGMucmVxLnBhcmFtKCkgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0XHRjb25zdCBxdWVyeVBhcmFtcyA9IE9iamVjdC5mcm9tRW50cmllcyhuZXcgVVJMKGMucmVxLnVybCkuc2VhcmNoUGFyYW1zKTtcblxuXHRcdC8vIDIuIFBpY2sgdGhlIHZlcmlmaWVyLlxuXHRcdGNvbnN0IHZlcmlmaWVyID0gdGhpcy5yZXNvbHZlVmVyaWZpZXIod29ya2Zsb3dOYW1lLCBjb25maWcpO1xuXHRcdGlmICghdmVyaWZpZXIpIHtcblx0XHRcdHRoaXMuY291bnRlclJlamVjdGVkLmFkZCgxLCB7IHdvcmtmbG93X25hbWU6IHdvcmtmbG93TmFtZSwgcmVhc29uOiBcIm5vX3ZlcmlmaWVyXCIgfSk7XG5cdFx0XHRyZXR1cm4gYy5qc29uKHsgZXJyb3I6IFwiQ29uZmlndXJhdGlvblwiLCByZWFzb246IFwibm9fdmVyaWZpZXJcIiwgbWVzc2FnZTogXCJObyB2ZXJpZmllciBjb25maWd1cmVkXCIgfSwgNTAwKTtcblx0XHR9XG5cblx0XHQvLyAzLiBSZXNvbHZlIHRoZSBzZWNyZXQgZnJvbSB0aGUgZW52IHZhci5cblx0XHRjb25zdCBzZWNyZXRFbnYgPSBjb25maWcuc2VjcmV0RW52ID8/IGNvbmZpZy5zaWduYXR1cmU/LnNlY3JldEVudjtcblx0XHRjb25zdCBzZWNyZXQgPSBzZWNyZXRFbnYgPyAocHJvY2Vzcy5lbnZbc2VjcmV0RW52XSA/PyBcIlwiKSA6IFwiXCI7XG5cblx0XHQvLyA0LiBWZXJpZnkuXG5cdFx0Y29uc3QgdG9sZXJhbmNlU2VjID0gY29uZmlnLnRvbGVyYW5jZSA/PyBjb25maWcuc2lnbmF0dXJlPy50b2xlcmFuY2UgPz8gREVGQVVMVF9UT0xFUkFOQ0VfU0VDO1xuXHRcdGNvbnN0IHJlc3VsdDogVmVyaWZ5UmVzdWx0ID0gdmVyaWZpZXIudmVyaWZ5KHtcblx0XHRcdGhlYWRlcnMsXG5cdFx0XHRyYXdCb2R5LFxuXHRcdFx0cGFyc2VkQm9keSxcblx0XHRcdHNlY3JldCxcblx0XHRcdHRvbGVyYW5jZVNlYyxcblx0XHR9KTtcblxuXHRcdGlmICghcmVzdWx0Lm9rKSB7XG5cdFx0XHR0aGlzLmNvdW50ZXJSZWplY3RlZC5hZGQoMSwgeyB3b3JrZmxvd19uYW1lOiB3b3JrZmxvd05hbWUsIHJlYXNvbjogcmVzdWx0LnJlYXNvbiB9KTtcblx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKFxuXHRcdFx0XHRgW2Jsb2tdW3dlYmhvb2tdICR7d29ya2Zsb3dOYW1lfTogdmVyaWZ5IGZhaWxlZCByZWFzb249JHtyZXN1bHQucmVhc29ufSBtZXNzYWdlPVwiJHtyZXN1bHQubWVzc2FnZX1cImAsXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIGMuanNvbih7IGVycm9yOiBcIlVuYXV0aG9yaXplZFwiLCByZWFzb246IHJlc3VsdC5yZWFzb24sIG1lc3NhZ2U6IHJlc3VsdC5tZXNzYWdlIH0sIDQwMSk7XG5cdFx0fVxuXG5cdFx0Ly8gNS4gRXZlbnRzIGFsbG93bGlzdCDigJQgdmVyaWZpZWQtYnV0LW91dC1vZi1zY29wZSByZXR1cm5zIDIwMCAobm8gcmV0cnkpLlxuXHRcdGlmIChBcnJheS5pc0FycmF5KGNvbmZpZy5ldmVudHMpICYmIGNvbmZpZy5ldmVudHMubGVuZ3RoID4gMCAmJiAhY29uZmlnLmV2ZW50cy5pbmNsdWRlcyhyZXN1bHQuZXZlbnRUeXBlKSkge1xuXHRcdFx0dGhpcy5jb3VudGVyUmVqZWN0ZWQuYWRkKDEsIHsgd29ya2Zsb3dfbmFtZTogd29ya2Zsb3dOYW1lLCByZWFzb246IFwiZXZlbnRfbm90X2FsbG93ZWRcIiB9KTtcblx0XHRcdHJldHVybiBjLmpzb24oeyBzdGF0dXM6IFwiaWdub3JlZFwiLCByZWFzb246IFwiZXZlbnRfbm90X2FsbG93ZWRcIiwgZXZlbnRUeXBlOiByZXN1bHQuZXZlbnRUeXBlIH0sIDIwMCk7XG5cdFx0fVxuXG5cdFx0Ly8gNi4gUmVwbGF5IHByb3RlY3Rpb24gdmlhIHRoZSBpZGVtcG90ZW5jeSBjYWNoZS5cblx0XHRpZiAoY29uZmlnLmlkZW1wb3RlbmN5S2V5ICYmIHJlc3VsdC5ldmVudElkKSB7XG5cdFx0XHRjb25zdCB0cmFja2VyID0gUnVuVHJhY2tlci5nZXRJbnN0YW5jZSgpO1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSB0cmFja2VyLmdldFN0b3JlKCk7XG5cdFx0XHRjb25zdCBjYWNoZWQgPSBzdG9yZS5nZXRJZGVtcG90ZW5jeUNhY2hlKFJFUExBWV9OQU1FU1BBQ0UsIHdvcmtmbG93TmFtZSwgcmVzdWx0LmV2ZW50SWQpO1xuXHRcdFx0aWYgKGNhY2hlZCkge1xuXHRcdFx0XHR0aGlzLmNvdW50ZXJSZWplY3RlZC5hZGQoMSwgeyB3b3JrZmxvd19uYW1lOiB3b3JrZmxvd05hbWUsIHJlYXNvbjogXCJyZXBsYXlcIiB9KTtcblx0XHRcdFx0cmV0dXJuIGMuanNvbihcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRzdGF0dXM6IFwiZHVwbGljYXRlXCIsXG5cdFx0XHRcdFx0XHRldmVudElkOiByZXN1bHQuZXZlbnRJZCxcblx0XHRcdFx0XHRcdGV2ZW50VHlwZTogcmVzdWx0LmV2ZW50VHlwZSxcblx0XHRcdFx0XHRcdGZpcnN0U2VlblJ1bklkOiBjYWNoZWQuc291cmNlUnVuSWQsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQyMDAsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gNy4gVmVyaWZpZWQgKyBuZXcgZXZlbnQg4oCUIGRpc3BhdGNoIHRoZSB3b3JrZmxvdy5cblx0XHR0aGlzLmNvdW50ZXJBY2NlcHRlZC5hZGQoMSwgeyB3b3JrZmxvd19uYW1lOiB3b3JrZmxvd05hbWUgfSk7XG5cdFx0Y29uc3QgcmVxdWVzdElkID0gdXVpZCgpO1xuXHRcdGNvbnN0IGRpc3BhdGNoT3V0Y29tZSA9IGF3YWl0IHRoaXMuZGlzcGF0Y2hXb3JrZmxvdyh7XG5cdFx0XHR3b3JrZmxvd05hbWUsXG5cdFx0XHRwYXRoLFxuXHRcdFx0Y29uZmlnLFxuXHRcdFx0cmVxdWVzdElkLFxuXHRcdFx0aGVhZGVycyxcblx0XHRcdGJvZHk6IHBhcnNlZEJvZHksXG5cdFx0XHRyYXdCb2R5LFxuXHRcdFx0cGF0aFBhcmFtcyxcblx0XHRcdHF1ZXJ5UGFyYW1zLFxuXHRcdFx0ZXZlbnRJZDogcmVzdWx0LmV2ZW50SWQsXG5cdFx0XHRldmVudFR5cGU6IHJlc3VsdC5ldmVudFR5cGUsXG5cdFx0fSk7XG5cblx0XHQvLyA4LiBDYWNoZSBldmVudCBpZCBBRlRFUiBzdWNjZXNzZnVsIGRpc3BhdGNoIHNvIHJldHJpZXMgb24gdGhlXG5cdFx0Ly8gICAgc2FtZSBkZWxpdmVyeSBhcmUgZGVkdXBlZC4gV2UgY2FjaGUgZXZlbiBvbiB3b3JrZmxvdyBmYWlsdXJlXG5cdFx0Ly8gICAg4oCUIHdlYmhvb2sgc2VuZGVycyBzaG91bGQgbm90IHJldHJ5IGRlbGl2ZXJpZXMgdGhleSd2ZVxuXHRcdC8vICAgIGFscmVhZHkgZGVsaXZlcmVkICh0aGUgd29ya2Zsb3cncyBvd24gcmV0cnkgLyBETFEgb3ducyB0aGF0KS5cblx0XHRpZiAoY29uZmlnLmlkZW1wb3RlbmN5S2V5ICYmIHJlc3VsdC5ldmVudElkKSB7XG5cdFx0XHRjb25zdCB0cmFja2VyID0gUnVuVHJhY2tlci5nZXRJbnN0YW5jZSgpO1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSB0cmFja2VyLmdldFN0b3JlKCk7XG5cdFx0XHRzdG9yZS5zZXRJZGVtcG90ZW5jeUNhY2hlKFJFUExBWV9OQU1FU1BBQ0UsIHdvcmtmbG93TmFtZSwgcmVzdWx0LmV2ZW50SWQsIHtcblx0XHRcdFx0ZGF0YTogeyBldmVudElkOiByZXN1bHQuZXZlbnRJZCwgZXZlbnRUeXBlOiByZXN1bHQuZXZlbnRUeXBlIH0sXG5cdFx0XHRcdGNhY2hlZEF0OiBEYXRlLm5vdygpLFxuXHRcdFx0XHRleHBpcmVzQXQ6IERhdGUubm93KCkgKyBERUZBVUxUX1JFUExBWV9UVExfTVMsXG5cdFx0XHRcdHNvdXJjZVJ1bklkOiByZXF1ZXN0SWQsXG5cdFx0XHRcdHNvdXJjZU5vZGVSdW5JZDogcmVxdWVzdElkLFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gOS4gU2hhcGUgdGhlIHJlc3BvbnNlLiBXb3JrZmxvdydzIGBjdHgucmVzcG9uc2VgIGxhbmRzIGluIHRoZVxuXHRcdC8vICAgIGJvZHkgZm9yIHBhcml0eSB3aXRoIEhUVFAgdHJpZ2dlcnMuXG5cdFx0cmV0dXJuIGMuanNvbihcblx0XHRcdHtcblx0XHRcdFx0c3RhdHVzOiBcIm9rXCIsXG5cdFx0XHRcdGV2ZW50SWQ6IHJlc3VsdC5ldmVudElkLFxuXHRcdFx0XHRldmVudFR5cGU6IHJlc3VsdC5ldmVudFR5cGUsXG5cdFx0XHRcdHJ1bklkOiByZXF1ZXN0SWQsXG5cdFx0XHRcdHJlc3BvbnNlOiBkaXNwYXRjaE91dGNvbWUsXG5cdFx0XHR9LFxuXHRcdFx0MjAwLFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVWZXJpZmllcih3b3JrZmxvd05hbWU6IHN0cmluZywgY29uZmlnOiBXZWJob29rVHJpZ2dlckNvbmZpZyk6IFZlcmlmaWVyIHwgbnVsbCB7XG5cdFx0aWYgKGNvbmZpZy5wcm92aWRlcikge1xuXHRcdFx0Y29uc3QgdiA9IEJVSUxUSU5fVkVSSUZJRVJTW2NvbmZpZy5wcm92aWRlcl07XG5cdFx0XHRpZiAoIXYpIHtcblx0XHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoYFtibG9rXVt3ZWJob29rXSAke3dvcmtmbG93TmFtZX06IHVua25vd24gcHJvdmlkZXIgXCIke2NvbmZpZy5wcm92aWRlcn1cImApO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHRcdHJldHVybiB2O1xuXHRcdH1cblx0XHRpZiAoY29uZmlnLnNpZ25hdHVyZSkge1xuXHRcdFx0cmV0dXJuIGJ1aWxkQ3VzdG9tVmVyaWZpZXIoe1xuXHRcdFx0XHRzY2hlbWU6IGNvbmZpZy5zaWduYXR1cmUuc2NoZW1lID8/IFwiaG1hYy1zaGEyNTZcIixcblx0XHRcdFx0aGVhZGVyOiBjb25maWcuc2lnbmF0dXJlLmhlYWRlcixcblx0XHRcdFx0Zm9ybWF0OiBjb25maWcuc2lnbmF0dXJlLmZvcm1hdCA/PyBcIntoZXh9XCIsXG5cdFx0XHRcdHNlY3JldEVudjogY29uZmlnLnNpZ25hdHVyZS5zZWNyZXRFbnYsXG5cdFx0XHRcdHRvbGVyYW5jZTogY29uZmlnLnNpZ25hdHVyZS50b2xlcmFuY2UgPz8gREVGQVVMVF9UT0xFUkFOQ0VfU0VDLFxuXHRcdFx0XHR0aW1lc3RhbXBIZWFkZXI6IGNvbmZpZy5zaWduYXR1cmUudGltZXN0YW1wSGVhZGVyLFxuXHRcdFx0XHRldmVudElkSGVhZGVyOiBjb25maWcuc2lnbmF0dXJlLmV2ZW50SWRIZWFkZXIsXG5cdFx0XHRcdGV2ZW50SWRQYXRoOiBjb25maWcuc2lnbmF0dXJlLmV2ZW50SWRQYXRoLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vIFdvcmtmbG93IGRpc3BhdGNoXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdHByaXZhdGUgYXN5bmMgZGlzcGF0Y2hXb3JrZmxvdyhvcHRzOiB7XG5cdFx0d29ya2Zsb3dOYW1lOiBzdHJpbmc7XG5cdFx0cGF0aDogc3RyaW5nO1xuXHRcdGNvbmZpZzogV2ViaG9va1RyaWdnZXJDb25maWc7XG5cdFx0cmVxdWVzdElkOiBzdHJpbmc7XG5cdFx0aGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0XHRib2R5OiB1bmtub3duO1xuXHRcdHJhd0JvZHk6IHN0cmluZztcblx0XHRwYXRoUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHRcdHF1ZXJ5UGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHRcdGV2ZW50SWQ6IHN0cmluZztcblx0XHRldmVudFR5cGU6IHN0cmluZztcblx0fSk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGNvbnN0IHsgd29ya2Zsb3dOYW1lLCByZXF1ZXN0SWQsIGhlYWRlcnMsIGJvZHksIHJhd0JvZHksIHBhdGhQYXJhbXMsIHF1ZXJ5UGFyYW1zLCBldmVudElkLCBldmVudFR5cGUgfSA9IG9wdHM7XG5cblx0XHRyZXR1cm4gdGhpcy50cmFjZXIuc3RhcnRBY3RpdmVTcGFuKGB3ZWJob29rOiR7d29ya2Zsb3dOYW1lfWAsIGFzeW5jIChzcGFuOiBTcGFuKSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCByZWdpc3RyeSA9IFdvcmtmbG93UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTtcblx0XHRcdFx0Y29uc3QgZW50cnkgPSByZWdpc3RyeS5nZXQod29ya2Zsb3dOYW1lKTtcblx0XHRcdFx0aWYgKCFlbnRyeSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgW2Jsb2tdW3dlYmhvb2tdIHdvcmtmbG93IFwiJHt3b3JrZmxvd05hbWV9XCIgbm90IGZvdW5kIGluIHJlZ2lzdHJ5YCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YXdhaXQgdGhpcy5jb25maWd1cmF0aW9uLmluaXQod29ya2Zsb3dOYW1lLCB0aGlzLm5vZGVNYXAsIGVudHJ5LndvcmtmbG93KTtcblxuXHRcdFx0XHRjb25zdCBjdHg6IENvbnRleHQgPSB0aGlzLmNyZWF0ZUNvbnRleHQodW5kZWZpbmVkLCB3b3JrZmxvd05hbWUsIHJlcXVlc3RJZCk7XG5cdFx0XHRcdGN0eC5yZXF1ZXN0ID0ge1xuXHRcdFx0XHRcdGJvZHksXG5cdFx0XHRcdFx0cmF3Qm9keSxcblx0XHRcdFx0XHRoZWFkZXJzLFxuXHRcdFx0XHRcdHBhcmFtczogcGF0aFBhcmFtcyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbXMsXG5cdFx0XHRcdH0gYXMgdW5rbm93biBhcyBSZXF1ZXN0Q29udGV4dDtcblxuXHRcdFx0XHQvLyBTdGFtcCB3ZWJob29rIG1ldGFkYXRhIG9udG8gY3R4IHNvIHBvbHltb3JwaGljIGRpc3BhdGNoXG5cdFx0XHRcdC8vIGNhbiByZWFkIG5hbWVzcGFjZSArIGV2ZW50IG1ldGFkYXRhIHVuaWZvcm1seS5cblx0XHRcdFx0KGN0eCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuX3dlYmhvb2sgPSB7XG5cdFx0XHRcdFx0ZXZlbnRJZCxcblx0XHRcdFx0XHRldmVudFR5cGUsXG5cdFx0XHRcdFx0bmFtZXNwYWNlOiBvcHRzLmNvbmZpZy5uYW1lc3BhY2UsXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0YXdhaXQgdGhpcy5hcHBseU1pZGRsZXdhcmVDaGFpbihjdHgsIHRoaXMubm9kZU1hcCk7XG5cdFx0XHRcdGF3YWl0IHRoaXMucnVuKGN0eCk7XG5cblx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJ3b3JrZmxvd19uYW1lXCIsIHdvcmtmbG93TmFtZSk7XG5cdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwiZXZlbnRfaWRcIiwgZXZlbnRJZCk7XG5cdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwiZXZlbnRfdHlwZVwiLCBldmVudFR5cGUpO1xuXHRcdFx0XHRzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuXHRcdFx0XHRyZXR1cm4gY3R4LnJlc3BvbnNlO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdGNvbnN0IG1zZyA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdFx0c3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyIGFzIEVycm9yKTtcblx0XHRcdFx0c3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUiwgbWVzc2FnZTogbXNnIH0pO1xuXHRcdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihgW2Jsb2tdW3dlYmhvb2tdIHdvcmtmbG93ICR7d29ya2Zsb3dOYW1lfSBmYWlsZWQ6ICR7bXNnfWApO1xuXHRcdFx0XHRyZXR1cm4geyBlcnJvcjogbXNnIH07XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRzcGFuLmVuZCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vIEludHJvc3BlY3Rpb25cblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0Z2V0U3RhdHMoKTogeyB3b3JrZmxvd3NSZWdpc3RlcmVkOiBudW1iZXIgfSB7XG5cdFx0cmV0dXJuIHsgd29ya2Zsb3dzUmVnaXN0ZXJlZDogdGhpcy5nZXRXZWJob29rV29ya2Zsb3dzKCkubGVuZ3RoIH07XG5cdH1cblxuXHRwcml2YXRlIGdldFdlYmhvb2tXb3JrZmxvd3MoKTogQXJyYXk8eyB3b3JrZmxvd05hbWU6IHN0cmluZzsgY29uZmlnOiBXZWJob29rVHJpZ2dlckNvbmZpZyB9PiB7XG5cdFx0Y29uc3QgcmVnaXN0cnkgPSBXb3JrZmxvd1JlZ2lzdHJ5LmdldEluc3RhbmNlKCk7XG5cdFx0Y29uc3Qgb3V0OiBBcnJheTx7IHdvcmtmbG93TmFtZTogc3RyaW5nOyBjb25maWc6IFdlYmhvb2tUcmlnZ2VyQ29uZmlnIH0+ID0gW107XG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiByZWdpc3RyeS5saXN0KCkpIHtcblx0XHRcdGNvbnN0IHdmID0gZW50cnkud29ya2Zsb3cgYXMgeyB0cmlnZ2VyPzogeyB3ZWJob29rPzogV2ViaG9va1RyaWdnZXJDb25maWcgfSB9IHwgdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgY2ZnID0gd2Y/LnRyaWdnZXI/LndlYmhvb2s7XG5cdFx0XHRpZiAoIWNmZykgY29udGludWU7XG5cdFx0XHQvLyBTa2lwIGNvbmZpZ3MgbWlzc2luZyBib3RoIHByb3ZpZGVyIEFORCBzaWduYXR1cmUg4oCUIHRoZXkgY2FuJ3Rcblx0XHRcdC8vIHZlcmlmeSBhbnl0aGluZy4gQXV0aG9ycyBnZXQgYSBzdHJ1Y3R1cmVkIGVycm9yIGF0IGJvb3QuXG5cdFx0XHRpZiAoIWNmZy5wcm92aWRlciAmJiAhY2ZnLnNpZ25hdHVyZSkge1xuXHRcdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihcblx0XHRcdFx0XHRgW2Jsb2tdW3dlYmhvb2tdIHdvcmtmbG93IFwiJHtlbnRyeS5uYW1lfVwiIGhhcyB0cmlnZ2VyLndlYmhvb2sgd2l0aCBuZWl0aGVyIFxcYHByb3ZpZGVyXFxgIG5vciBcXGBzaWduYXR1cmVcXGAg4oCUIHNraXBwaW5nLiBBZGQgb25lIHRvIGVuYWJsZSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uLmAsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0b3V0LnB1c2goeyB3b3JrZmxvd05hbWU6IGVudHJ5Lm5hbWUsIGNvbmZpZzogY2ZnIH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gb3V0O1xuXHR9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTaW5nbGV0b24gYWNjZXNzb3IgKG1pcnJvcnMgV1MgLyBTU0UpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5sZXQgYWN0aXZlVHJpZ2dlcjogV2ViaG9va1RyaWdnZXIgfCBudWxsID0gbnVsbDtcblxuZXhwb3J0IGZ1bmN0aW9uIF9zZXRBY3RpdmVXZWJob29rVHJpZ2dlcih0cmlnZ2VyOiBXZWJob29rVHJpZ2dlciB8IG51bGwpOiB2b2lkIHtcblx0YWN0aXZlVHJpZ2dlciA9IHRyaWdnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfZ2V0QWN0aXZlV2ViaG9va1RyaWdnZXIoKTogV2ViaG9va1RyaWdnZXIgfCBudWxsIHtcblx0cmV0dXJuIGFjdGl2ZVRyaWdnZXI7XG59XG5cbmV4cG9ydCB0eXBlIHsgV2ViaG9va1RyaWdnZXJDb25maWcgfTtcbiJdfQ==
@@ -75,6 +75,16 @@ export interface CustomSignatureConfig {
75
75
  secretEnv: string;
76
76
  tolerance: number;
77
77
  timestampHeader?: string;
78
+ /**
79
+ * Where to read the provider's event id from, for replay-protection dedup.
80
+ * `eventIdHeader` takes precedence; otherwise `eventIdPath` reads a
81
+ * dot-separated path from the parsed body (e.g. `"id"`, `"data.id"`).
82
+ * When neither is set the verifier returns `eventId: ""` and webhook-level
83
+ * idempotency is disabled (no key to dedup on) — set one when the provider
84
+ * redelivers (most PSPs do).
85
+ */
86
+ eventIdPath?: string;
87
+ eventIdHeader?: string;
78
88
  }
79
89
  export declare function buildCustomVerifier(config: CustomSignatureConfig): Verifier;
80
90
  export declare const BUILTIN_VERIFIERS: Record<string, Verifier>;
package/dist/verifiers.js CHANGED
@@ -60,6 +60,27 @@ function getEventTypeFromBody(parsedBody, key = "type") {
60
60
  const value = parsedBody[key];
61
61
  return typeof value === "string" ? value : undefined;
62
62
  }
63
+ /**
64
+ * Read a value from a parsed body by dot-separated path (e.g. `"data.id"`,
65
+ * `"resource.id"`). Returns the value coerced to string when it's a string or
66
+ * number, otherwise `undefined`. Used to pull a custom provider's event id out
67
+ * of the payload so webhook replay-protection has a key to dedup on.
68
+ */
69
+ function getByPath(parsedBody, path) {
70
+ if (!path)
71
+ return undefined;
72
+ let cur = parsedBody;
73
+ for (const segment of path.split(".")) {
74
+ if (!cur || typeof cur !== "object")
75
+ return undefined;
76
+ cur = cur[segment];
77
+ }
78
+ if (typeof cur === "string")
79
+ return cur;
80
+ if (typeof cur === "number")
81
+ return String(cur);
82
+ return undefined;
83
+ }
63
84
  // =============================================================================
64
85
  // Built-in providers
65
86
  // =============================================================================
@@ -235,6 +256,7 @@ export function buildCustomVerifier(config) {
235
256
  const algo = config.scheme === "hmac-sha1" ? "sha1" : config.scheme === "hmac-sha512" ? "sha512" : "sha256";
236
257
  const headerLower = config.header.toLowerCase();
237
258
  const tsHeaderLower = config.timestampHeader?.toLowerCase();
259
+ const eventIdHeaderLower = config.eventIdHeader?.toLowerCase();
238
260
  return {
239
261
  verify({ headers, rawBody, parsedBody, secret, toleranceSec }) {
240
262
  if (!secret)
@@ -276,9 +298,18 @@ export function buildCustomVerifier(config) {
276
298
  if (!safeEqualString(sig, expected)) {
277
299
  return { ok: false, reason: "signature_mismatch", message: `${config.header}: signature mismatch` };
278
300
  }
301
+ // Resolve the event id for replay-protection: header wins, then body
302
+ // path, then "" (idempotency disabled — no key to dedup on).
303
+ let eventId = "";
304
+ if (eventIdHeaderLower) {
305
+ eventId = headers[eventIdHeaderLower] ?? "";
306
+ }
307
+ else if (config.eventIdPath) {
308
+ eventId = getByPath(parsedBody, config.eventIdPath) ?? "";
309
+ }
279
310
  return {
280
311
  ok: true,
281
- eventId: "",
312
+ eventId,
282
313
  eventType: getEventTypeFromBody(parsedBody) ?? "unknown",
283
314
  };
284
315
  },
@@ -291,4 +322,4 @@ export const BUILTIN_VERIFIERS = {
291
322
  shopify: shopifyVerifier,
292
323
  svix: svixVerifier,
293
324
  };
294
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZpZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3ZlcmlmaWVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0NHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUF5QzFELE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDO0FBRWxDLFNBQVMsZUFBZSxDQUFDLENBQVMsRUFBRSxDQUFTO0lBQzVDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM5QyxPQUFPLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLElBQWtDLEVBQUUsTUFBYyxFQUFFLElBQVk7SUFDaEYsT0FBTyxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLElBQWtDLEVBQUUsTUFBYyxFQUFFLElBQVk7SUFDbkYsT0FBTyxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsWUFBb0IsRUFBRSxZQUFvQjtJQUNwRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUks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QUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEVBQUUsQ0FBQztZQUNyRyxDQUFDO1lBQ0QsT0FBTztnQkFDTixFQUFFLEVBQUUsSUFBSTtnQkFDUixPQUFPLEVBQUUsRUFBRTtnQkFDWCxTQUFTLEVBQUUsb0JBQW9CLENBQUMsVUFBVSxDQUFDLElBQUksU0FBUzthQUN4RCxDQUFDO1FBQ0gsQ0FBQztLQUNELENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQTZCO0lBQzFELE1BQU0sRUFBRSxjQUFjO0lBQ3RCLE1BQU0sRUFBRSxjQUFjO0lBQ3RCLEtBQUssRUFBRSxhQUFhO0lBQ3BCLE9BQU8sRUFBRSxlQUFlO0lBQ3hCLElBQUksRUFBRSxZQUFZO0NBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdlYmhvb2sgc2lnbmF0dXJlIHZlcmlmaWVycyDigJQgb25lIHN0cmF0ZWd5IHBlciBzdXBwb3J0ZWQgcHJvdmlkZXIuXG4gKlxuICogRWFjaCB2ZXJpZmllciByZWFkcyB0aGUgcmF3IHJlcXVlc3QgYnl0ZXMgKE5PVCB0aGUgSlNPTi1wYXJzZWQgYm9keSlcbiAqIGFuZCB0aGUgcHJvdmlkZXItc3BlY2lmaWMgc2lnbmF0dXJlIGhlYWRlciwgY29tcHV0ZXMgdGhlIGV4cGVjdGVkXG4gKiBITUFDIGFnYWluc3QgYSBzaGFyZWQgc2VjcmV0LCBhbmQgY29uc3RhbnQtdGltZSBjb21wYXJlcy4gT24gbWF0Y2gsXG4gKiByZXR1cm5zIGB7IG9rOiB0cnVlLCBldmVudElkLCBldmVudFR5cGUgfWAuIE9uIG1pc21hdGNoIC8gbWlzc2luZ1xuICogaGVhZGVyIC8gZHJpZnQsIHJldHVybnMgYHsgb2s6IGZhbHNlLCByZWFzb24sIG1lc3NhZ2UgfWAuXG4gKlxuICogQ29uc3RhbnQtdGltZSBjb21wYXJpc29uIHZpYSBgY3J5cHRvLnRpbWluZ1NhZmVFcXVhbGAgaXMgbWFuZGF0b3J5IOKAlFxuICogYSBuYWl2ZSBgPT09YCBjb21wYXJlIGxlYWtzIHRoZSBleHBlY3RlZCBITUFDIGJ5dGUgYnkgYnl0ZSB0aHJvdWdoXG4gKiB0aW1pbmcgdmFyaWFuY2UgYW5kIGEgbmV0d29yay1hZGphY2VudCBhdHRhY2tlciBjYW4gcmVjb3ZlciB0aGVcbiAqIHNlY3JldCBpbiB+MjU2IHJlcXVlc3RzIHBlciBieXRlLlxuICpcbiAqIEJ1aWx0LWluIHByb3ZpZGVycyArIHRoZWlyIHNpZ25hdHVyZSBzaGFwZXM6XG4gKlxuICogICAtICoqZ2l0aHViKio6ICAgIGBYLUh1Yi1TaWduYXR1cmUtMjU2OiBzaGEyNTY9PGhleD5gIG92ZXIgcmF3Qm9keS5cbiAqICAgICAgICAgICAgICAgICAgICBFdmVudCBpZCBmcm9tIGBYLUdpdEh1Yi1EZWxpdmVyeWA7IGV2ZW50IHR5cGVcbiAqICAgICAgICAgICAgICAgICAgICBmcm9tIGBYLUdpdEh1Yi1FdmVudGAgaGVhZGVyLlxuICogICAtICoqc3RyaXBlKio6ICAgIGBTdHJpcGUtU2lnbmF0dXJlOiB0PTx0cz4sdjE9PGhleD5gIG92ZXJcbiAqICAgICAgICAgICAgICAgICAgICBgPHRzPi48cmF3Qm9keT5gIHdpdGggYSA1LW1pbnV0ZSBkcmlmdCB3aW5kb3cuXG4gKiAgICAgICAgICAgICAgICAgICAgRXZlbnQgaWQgKyB0eXBlIGZyb20gYm9keS5pZCAvIGJvZHkudHlwZS5cbiAqICAgLSAqKnNsYWNrKio6ICAgICBgWC1TbGFjay1TaWduYXR1cmU6IHYwPTxoZXg+YCBvdmVyXG4gKiAgICAgICAgICAgICAgICAgICAgYHYwOjxYLVNsYWNrLVJlcXVlc3QtVGltZXN0YW1wPjo8cmF3Qm9keT5gIHdpdGggYVxuICogICAgICAgICAgICAgICAgICAgIDUtbWludXRlIGRyaWZ0IHdpbmRvdy4gRXZlbnQgdHlwZSBmcm9tXG4gKiAgICAgICAgICAgICAgICAgICAgYm9keS5ldmVudC50eXBlOyBldmVudCBpZCBmcm9tIGJvZHkuZXZlbnRfaWQuXG4gKiAgIC0gKipzaG9waWZ5Kio6ICAgYFgtU2hvcGlmeS1IbWFjLVNoYTI1NjogPGJhc2U2ND5gIG92ZXIgcmF3Qm9keS5cbiAqICAgICAgICAgICAgICAgICAgICBFdmVudCB0eXBlIGZyb20gYFgtU2hvcGlmeS1Ub3BpY2A7IGV2ZW50IGlkIGZyb21cbiAqICAgICAgICAgICAgICAgICAgICBgWC1TaG9waWZ5LVdlYmhvb2stSWRgLlxuICogICAtICoqc3ZpeCoqOiAgICAgIFN0YW5kYXJkIFdlYmhvb2tzLiBgd2ViaG9vay1zaWduYXR1cmU6XG4gKiAgICAgICAgICAgICAgICAgICAgdjEsPGJhc2U2ND5gIG92ZXIgYDx3ZWJob29rLWlkPi48d2ViaG9vay10aW1lc3RhbXA+LjxyYXdCb2R5PmBcbiAqICAgICAgICAgICAgICAgICAgICB3aXRoIGEgNS1taW51dGUgZHJpZnQgd2luZG93LiBFdmVudCBpZCBmcm9tXG4gKiAgICAgICAgICAgICAgICAgICAgYHdlYmhvb2staWRgOyBldmVudCB0eXBlIGZyb20gYm9keS50eXBlLlxuICpcbiAqIEN1c3RvbSAodW5rbm93biBwcm92aWRlcikgdmVyaWZpZXIgaXMgYnVpbHQgZHluYW1pY2FsbHkgYnlcbiAqIGBidWlsZEN1c3RvbVZlcmlmaWVyKClgIGZyb20gdGhlIHdvcmtmbG93J3MgYHNpZ25hdHVyZWAgY29uZmlnLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUhtYWMsIHRpbWluZ1NhZmVFcXVhbCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuXG4vKiogU3VjY2Vzc2Z1bCB2ZXJpZmljYXRpb24gcmVzdWx0IOKAlCB3b3JrZmxvdyBtYXkgcHJvY2VlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5T2sge1xuXHRvazogdHJ1ZTtcblx0LyoqIFByb3ZpZGVyLXNwZWNpZmljIGV2ZW50IGlkICh1c2VkIGZvciByZXBsYXktcHJvdGVjdGlvbiBjYWNoZSBrZXkpLiAqL1xuXHRldmVudElkOiBzdHJpbmc7XG5cdC8qKiBQcm92aWRlci1zcGVjaWZpYyBldmVudCB0eXBlICh1c2VkIGZvciB0aGUgYWxsb3dsaXN0IGNoZWNrKS4gKi9cblx0ZXZlbnRUeXBlOiBzdHJpbmc7XG59XG5cbi8qKiBWZXJpZmljYXRpb24gZmFpbHVyZSDigJQgdHJpZ2dlciByZXR1cm5zIDQwMSB3aXRoIHN0cnVjdHVyZWQgcmVhc29uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlFcnJvciB7XG5cdG9rOiBmYWxzZTtcblx0LyoqIFN0YWJsZSBkaXNjcmltaW5hdG9yIOKAlCBsb2cvYWxlcnQgZGFzaGJvYXJkcyBicmFuY2ggb24gdGhpcy4gKi9cblx0cmVhc29uOlxuXHRcdHwgXCJtaXNzaW5nX3NpZ25hdHVyZVwiXG5cdFx0fCBcIm1pc3NpbmdfdGltZXN0YW1wXCJcblx0XHR8IFwibWlzc2luZ19zZWNyZXRcIlxuXHRcdHwgXCJiYWRfZm9ybWF0XCJcblx0XHR8IFwidGltZXN0YW1wX2RyaWZ0XCJcblx0XHR8IFwic2lnbmF0dXJlX21pc21hdGNoXCI7XG5cdC8qKiBIdW1hbi1yZWFkYWJsZSBlcnJvciBtZXNzYWdlLiBTYWZlIHRvIHN1cmZhY2UgdG8gdGhlIHNlbmRlci4gKi9cblx0bWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBWZXJpZnlSZXN1bHQgPSBWZXJpZnlPayB8IFZlcmlmeUVycm9yO1xuXG4vKiogSW5wdXRzIGV2ZXJ5IHZlcmlmaWVyIHJlY2VpdmVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlJbnB1dCB7XG5cdGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdHJhd0JvZHk6IHN0cmluZztcblx0cGFyc2VkQm9keTogdW5rbm93bjtcblx0c2VjcmV0OiBzdHJpbmc7XG5cdHRvbGVyYW5jZVNlYzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmaWVyIHtcblx0dmVyaWZ5KGlucHV0OiBWZXJpZnlJbnB1dCk6IFZlcmlmeVJlc3VsdDtcbn1cblxuY29uc3QgREVGQVVMVF9UT0xFUkFOQ0VfU0VDID0gMzAwO1xuXG5mdW5jdGlvbiBzYWZlRXF1YWxTdHJpbmcoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBib29sZWFuIHtcblx0Y29uc3QgYUJ1ZiA9IEJ1ZmZlci5mcm9tKGEpO1xuXHRjb25zdCBiQnVmID0gQnVmZmVyLmZyb20oYik7XG5cdGlmIChhQnVmLmxlbmd0aCAhPT0gYkJ1Zi5sZW5ndGgpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRpbWluZ1NhZmVFcXVhbChhQnVmLCBiQnVmKTtcbn1cblxuZnVuY3Rpb24gaG1hY0hleChhbGdvOiBcInNoYTI1NlwiIHwgXCJzaGExXCIgfCBcInNoYTUxMlwiLCBzZWNyZXQ6IHN0cmluZywgZGF0YTogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIGNyZWF0ZUhtYWMoYWxnbywgc2VjcmV0KS51cGRhdGUoZGF0YSkuZGlnZXN0KFwiaGV4XCIpO1xufVxuXG5mdW5jdGlvbiBobWFjQmFzZTY0KGFsZ286IFwic2hhMjU2XCIgfCBcInNoYTFcIiB8IFwic2hhNTEyXCIsIHNlY3JldDogc3RyaW5nLCBkYXRhOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gY3JlYXRlSG1hYyhhbGdvLCBzZWNyZXQpLnVwZGF0ZShkYXRhKS5kaWdlc3QoXCJiYXNlNjRcIik7XG59XG5cbmZ1bmN0aW9uIGlzV2l0aGluVG9sZXJhbmNlKHRpbWVzdGFtcFNlYzogbnVtYmVyLCB0b2xlcmFuY2VTZWM6IG51bWJlcik6IGJvb2xlYW4ge1xuXHRjb25zdCBub3dTZWMgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcblx0cmV0dXJuIE1hdGguYWJzKG5vd1NlYyAtIHRpbWVzdGFtcFNlYykgPD0gdG9sZXJhbmNlU2VjO1xufVxuXG5mdW5jdGlvbiBnZXRFdmVudFR5cGVGcm9tQm9keShwYXJzZWRCb2R5OiB1bmtub3duLCBrZXkgPSBcInR5cGVcIik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghcGFyc2VkQm9keSB8fCB0eXBlb2YgcGFyc2VkQm9keSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHVuZGVmaW5lZDtcblx0Y29uc3QgdmFsdWUgPSAocGFyc2VkQm9keSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XTtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQnVpbHQtaW4gcHJvdmlkZXJzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY29uc3QgZ2l0aHViVmVyaWZpZXI6IFZlcmlmaWVyID0ge1xuXHR2ZXJpZnkoeyBoZWFkZXJzLCByYXdCb2R5LCBzZWNyZXQgfSkge1xuXHRcdGlmICghc2VjcmV0KSByZXR1cm4geyBvazogZmFsc2UsIHJlYXNvbjogXCJtaXNzaW5nX3NlY3JldFwiLCBtZXNzYWdlOiBcIkdpdEh1Yjogc2VjcmV0IG5vdCBjb25maWd1cmVkXCIgfTtcblx0XHRjb25zdCBzaWcgPSBoZWFkZXJzW1wieC1odWItc2lnbmF0dXJlLTI1NlwiXTtcblx0XHRpZiAoIXNpZykgcmV0dXJuIHsgb2s6IGZhbHNlLCByZWFzb246IFwibWlzc2luZ19zaWduYXR1cmVcIiwgbWVzc2FnZTogXCJHaXRIdWI6IFgtSHViLVNpZ25hdHVyZS0yNTYgaGVhZGVyIG1pc3NpbmdcIiB9O1xuXHRcdGNvbnN0IGV4cGVjdGVkID0gYHNoYTI1Nj0ke2htYWNIZXgoXCJzaGEyNTZcIiwgc2VjcmV0LCByYXdCb2R5KX1gO1xuXHRcdGlmICghc2FmZUVxdWFsU3RyaW5nKHNpZywgZXhwZWN0ZWQpKSB7XG5cdFx0XHRyZXR1cm4geyBvazogZmFsc2UsIHJlYXNvbjogXCJzaWduYXR1cmVfbWlzbWF0Y2hcIiwgbWVzc2FnZTogXCJHaXRIdWI6IHNpZ25hdHVyZSBtaXNtYXRjaFwiIH07XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRvazogdHJ1ZSxcblx0XHRcdGV2ZW50SWQ6IGhlYWRlcnNbXCJ4LWdpdGh1Yi1kZWxpdmVyeVwiXSA/PyBcIlwiLFxuXHRcdFx0ZXZlbnRUeXBlOiBoZWFkZXJzW1wieC1naXRodWItZXZlbnRcIl0gPz8gXCJ1bmtub3duXCIsXG5cdFx0fTtcblx0fSxcbn07XG5cbmV4cG9ydCBjb25zdCBzdHJpcGVWZXJpZmllcjogVmVyaWZpZXIgPSB7XG5cdHZlcmlmeSh7IGhlYWRlcnMsIHJhd0JvZHksIHBhcnNlZEJvZHksIHNlY3JldCwgdG9sZXJhbmNlU2VjIH0pIHtcblx0XHRpZiAoIXNlY3JldCkgcmV0dXJuIHsgb2s6IGZhbHNlLCByZWFzb246IFwibWlzc2luZ19zZWNyZXRcIiwgbWVzc2FnZTogXCJTdHJpcGU6IHNlY3JldCBub3QgY29uZmlndXJlZFwiIH07XG5cdFx0Y29uc3Qgc2lnID0gaGVhZGVyc1tcInN0cmlwZS1zaWduYXR1cmVcIl07XG5cdFx0aWYgKCFzaWcpIHJldHVybiB7IG9rOiBmYWxzZSwgcmVhc29uOiBcIm1pc3Npbmdfc2lnbmF0dXJlXCIsIG1lc3NhZ2U6IFwiU3RyaXBlOiBTdHJpcGUtU2lnbmF0dXJlIGhlYWRlciBtaXNzaW5nXCIgfTtcblxuXHRcdC8vIEZvcm1hdDogdD0xMjM0NTY3ODkwLHYxPTxoZXg+LHYwPTxoZXg+LC4uLlxuXHRcdGNvbnN0IHBhcnRzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuXHRcdFx0c2lnXG5cdFx0XHRcdC5zcGxpdChcIixcIilcblx0XHRcdFx0Lm1hcCgocCkgPT4gcC50cmltKCkpXG5cdFx0XHRcdC5tYXAoKHApID0+IHtcblx0XHRcdFx0XHRjb25zdCBpZHggPSBwLmluZGV4T2YoXCI9XCIpO1xuXHRcdFx0XHRcdHJldHVybiBpZHggPT09IC0xID8gW3AsIFwiXCJdIDogW3Auc2xpY2UoMCwgaWR4KSwgcC5zbGljZShpZHggKyAxKV07XG5cdFx0XHRcdH0pLFxuXHRcdCk7XG5cdFx0Y29uc3QgdHMgPSBwYXJ0cy50O1xuXHRcdGNvbnN0IHYxID0gcGFydHMudjE7XG5cdFx0aWYgKCF0cyB8fCAhdjEpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG9rOiBmYWxzZSxcblx0XHRcdFx0cmVhc29uOiBcImJhZF9mb3JtYXRcIixcblx0XHRcdFx0bWVzc2FnZTogXCJTdHJpcGU6IHNpZ25hdHVyZSBtaXNzaW5nIHQ9IG9yIHYxPSBjb21wb25lbnRcIixcblx0XHRcdH07XG5cdFx0fVxuXHRcdGNvbnN0IHRzTnVtID0gTnVtYmVyLnBhcnNlSW50KHRzLCAxMCk7XG5cdFx0aWYgKCFOdW1iZXIuaXNGaW5pdGUodHNOdW0pKSB7XG5cdFx0XHRyZXR1cm4geyBvazogZmFsc2UsIHJlYXNvbjogXCJiYWRfZm9ybWF0XCIsIG1lc3NhZ2U6IFwiU3RyaXBlOiB0PSBpcyBub3QgbnVtZXJpY1wiIH07XG5cdFx0fVxuXHRcdGlmICghaXNXaXRoaW5Ub2xlcmFuY2UodHNOdW0sIHRvbGVyYW5jZVNlYyB8fCBERUZBVUxUX1RPTEVSQU5DRV9TRUMpKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRvazogZmFsc2UsXG5cdFx0XHRcdHJlYXNvbjogXCJ0aW1lc3RhbXBfZHJpZnRcIixcblx0XHRcdFx0bWVzc2FnZTogYFN0cmlwZTogdGltZXN0YW1wIGRyaWZ0IGV4Y2VlZHMgJHt0b2xlcmFuY2VTZWMgfHwgREVGQVVMVF9UT0xFUkFOQ0VfU0VDfXMgdG9sZXJhbmNlYCxcblx0XHRcdH07XG5cdFx0fVxuXHRcdGNvbnN0IGV4cGVjdGVkID0gaG1hY0hleChcInNoYTI1NlwiLCBzZWNyZXQsIGAke3RzfS4ke3Jhd0JvZHl9YCk7XG5cdFx0aWYgKCFzYWZlRXF1YWxTdHJpbmcodjEsIGV4cGVjdGVkKSkge1xuXHRcdFx0cmV0dXJuIHsgb2s6IGZhbHNlLCByZWFzb246IFwic2lnbmF0dXJlX21pc21hdGNoXCIsIG1lc3NhZ2U6IFwiU3RyaXBlOiBzaWduYXR1cmUgbWlzbWF0Y2hcIiB9O1xuXHRcdH1cblx0XHRjb25zdCBldmVudElkID0gKHBhcnNlZEJvZHkgYXMgeyBpZD86IHVua25vd24gfSB8IG51bGwpPy5pZDtcblx0XHRjb25zdCBldmVudFR5cGUgPSBnZXRFdmVudFR5cGVGcm9tQm9keShwYXJzZWRCb2R5KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0b2s6IHRydWUsXG5cdFx0XHRldmVudElkOiB0eXBlb2YgZXZlbnRJZCA9PT0gXCJzdHJpbmdcIiA/IGV2ZW50SWQgOiBcIlwiLFxuXHRcdFx0ZXZlbnRUeXBlOiBldmVudFR5cGUgPz8gXCJ1bmtub3duXCIsXG5cdFx0fTtcblx0fSxcbn07XG5cbmV4cG9ydCBjb25zdCBzbGFja1ZlcmlmaWVyOiBWZXJpZmllciA9IHtcblx0dmVyaWZ5KHsgaGVhZGVycywgcmF3Qm9keSwgcGFyc2VkQm9keSwgc2VjcmV0LCB0b2xlcmFuY2VTZWMgfSkge1xuXHRcdGlmICghc2VjcmV0KSByZXR1cm4geyBvazogZmFsc2UsIHJlYXNvbjogXCJtaXNzaW5nX3NlY3JldFwiLCBtZXNzYWdlOiBcIlNsYWNrOiBzZWNyZXQgbm90IGNvbmZpZ3VyZWRcIiB9O1xuXHRcdGNvbnN0IHNpZyA9IGhlYWRlcnNbXCJ4LXNsYWNrLXNpZ25hdHVyZVwiXTtcblx0XHRpZiAoIXNpZykgcmV0dXJuIHsgb2s6IGZhbHNlLCByZWFzb246IFwibWlzc2luZ19zaWduYXR1cmVcIiwgbWVzc2FnZTogXCJTbGFjazogWC1TbGFjay1TaWduYXR1cmUgaGVhZGVyIG1pc3NpbmdcIiB9O1xuXHRcdGNvbnN0IHRzID0gaGVhZGVyc1tcIngtc2xhY2stcmVxdWVzdC10aW1lc3RhbXBcIl07XG5cdFx0aWYgKCF0cykge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0b2s6IGZhbHNlLFxuXHRcdFx0XHRyZWFzb246IFwibWlzc2luZ190aW1lc3RhbXBcIixcblx0XHRcdFx0bWVzc2FnZTogXCJTbGFjazogWC1TbGFjay1SZXF1ZXN0LVRpbWVzdGFtcCBoZWFkZXIgbWlzc2luZ1wiLFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0Y29uc3QgdHNOdW0gPSBOdW1iZXIucGFyc2VJbnQodHMsIDEwKTtcblx0XHRpZiAoIU51bWJlci5pc0Zpbml0ZSh0c051bSkpIHtcblx0XHRcdHJldHVybiB7IG9rOiBmYWxzZSwgcmVhc29uOiBcImJhZF9mb3JtYXRcIiwgbWVzc2FnZTogXCJTbGFjazogdGltZXN0YW1wIGlzIG5vdCBudW1lcmljXCIgfTtcblx0XHR9XG5cdFx0aWYgKCFpc1dpdGhpblRvbGVyYW5jZSh0c051bSwgdG9sZXJhbmNlU2VjIHx8IERFRkFVTFRfVE9MRVJBTkNFX1NFQykpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG9rOiBmYWxzZSxcblx0XHRcdFx0cmVhc29uOiBcInRpbWVzdGFtcF9kcmlmdFwiLFxuXHRcdFx0XHRtZXNzYWdlOiBgU2xhY2s6IHRpbWVzdGFtcCBkcmlmdCBleGNlZWRzICR7dG9sZXJhbmNlU2VjIHx8IERFRkFVTFRfVE9MRVJBTkNFX1NFQ31zIHRvbGVyYW5jZWAsXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRjb25zdCBleHBlY3RlZCA9IGB2MD0ke2htYWNIZXgoXCJzaGEyNTZcIiwgc2VjcmV0LCBgdjA6JHt0c306JHtyYXdCb2R5fWApfWA7XG5cdFx0aWYgKCFzYWZlRXF1YWxTdHJpbmcoc2lnLCBleHBlY3RlZCkpIHtcblx0XHRcdHJldHVybiB7IG9rOiBmYWxzZSwgcmVhc29uOiBcInNpZ25hdHVyZV9taXNtYXRjaFwiLCBtZXNzYWdlOiBcIlNsYWNrOiBzaWduYXR1cmUgbWlzbWF0Y2hcIiB9O1xuXHRcdH1cblx0XHRjb25zdCBldmVudCA9IChwYXJzZWRCb2R5IGFzIHsgZXZlbnQ/OiB7IHR5cGU/OiB1bmtub3duIH07IGV2ZW50X2lkPzogdW5rbm93biB9IHwgbnVsbCkgPz8ge307XG5cdFx0Y29uc3QgZXZlbnRUeXBlID0gdHlwZW9mIGV2ZW50LmV2ZW50Py50eXBlID09PSBcInN0cmluZ1wiID8gZXZlbnQuZXZlbnQudHlwZSA6IFwidW5rbm93blwiO1xuXHRcdGNvbnN0IGV2ZW50SWQgPSB0eXBlb2YgZXZlbnQuZXZlbnRfaWQgPT09IFwic3RyaW5nXCIgPyBldmVudC5ldmVudF9pZCA6IFwiXCI7XG5cdFx0cmV0dXJuIHsgb2s6IHRydWUsIGV2ZW50SWQsIGV2ZW50VHlwZSB9O1xuXHR9LFxufTtcblxuZXhwb3J0IGNvbnN0IHNob3BpZnlWZXJpZmllcjogVmVyaWZpZXIgPSB7XG5cdHZlcmlmeSh7IGhlYWRlcnMsIHJhd0JvZHksIHNlY3JldCB9KSB7XG5cdFx0aWYgKCFzZWNyZXQpIHJldHVybiB7IG9rOiBmYWxzZSwgcmVhc29uOiBcIm1pc3Npbmdfc2VjcmV0XCIsIG1lc3NhZ2U6IFwiU2hvcGlmeTogc2VjcmV0IG5vdCBjb25maWd1cmVkXCIgfTtcblx0XHRjb25zdCBzaWcgPSBoZWFkZXJzW1wieC1zaG9waWZ5LWhtYWMtc2hhMjU2XCJdO1xuXHRcdGlmICghc2lnKSB7XG5cdFx0XHRyZXR1cm4geyBvazogZmFsc2UsIHJlYXNvbjogXCJtaXNzaW5nX3NpZ25hdHVyZVwiLCBtZXNzYWdlOiBcIlNob3BpZnk6IFgtU2hvcGlmeS1IbWFjLVNoYTI1NiBoZWFkZXIgbWlzc2luZ1wiIH07XG5cdFx0fVxuXHRcdGNvbnN0IGV4cGVjdGVkID0gaG1hY0Jhc2U2NChcInNoYTI1NlwiLCBzZWNyZXQsIHJhd0JvZHkpO1xuXHRcdGlmICghc2FmZUVxdWFsU3RyaW5nKHNpZywgZXhwZWN0ZWQpKSB7XG5cdFx0XHRyZXR1cm4geyBvazogZmFsc2UsIHJlYXNvbjogXCJzaWduYXR1cmVfbWlzbWF0Y2hcIiwgbWVzc2FnZTogXCJTaG9waWZ5OiBzaWduYXR1cmUgbWlzbWF0Y2hcIiB9O1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0b2s6IHRydWUsXG5cdFx0XHRldmVudElkOiBoZWFkZXJzW1wieC1zaG9waWZ5LXdlYmhvb2staWRcIl0gPz8gXCJcIixcblx0XHRcdGV2ZW50VHlwZTogaGVhZGVyc1tcIngtc2hvcGlmeS10b3BpY1wiXSA/PyBcInVua25vd25cIixcblx0XHR9O1xuXHR9LFxufTtcblxuZXhwb3J0IGNvbnN0IHN2aXhWZXJpZmllcjogVmVyaWZpZXIgPSB7XG5cdHZlcmlmeSh7IGhlYWRlcnMsIHJhd0JvZHksIHBhcnNlZEJvZHksIHNlY3JldCwgdG9sZXJhbmNlU2VjIH0pIHtcblx0XHRpZiAoIXNlY3JldCkgcmV0dXJuIHsgb2s6IGZhbHNlLCByZWFzb246IFwibWlzc2luZ19zZWNyZXRcIiwgbWVzc2FnZTogXCJTdml4OiBzZWNyZXQgbm90IGNvbmZpZ3VyZWRcIiB9O1xuXHRcdGNvbnN0IHdlYmhvb2tJZCA9IGhlYWRlcnNbXCJ3ZWJob29rLWlkXCJdO1xuXHRcdGNvbnN0IHdlYmhvb2tUcyA9IGhlYWRlcnNbXCJ3ZWJob29rLXRpbWVzdGFtcFwiXTtcblx0XHRjb25zdCB3ZWJob29rU2lnID0gaGVhZGVyc1tcIndlYmhvb2stc2lnbmF0dXJlXCJdO1xuXHRcdGlmICghd2ViaG9va0lkIHx8ICF3ZWJob29rVHMgfHwgIXdlYmhvb2tTaWcpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG9rOiBmYWxzZSxcblx0XHRcdFx0cmVhc29uOiBcIm1pc3Npbmdfc2lnbmF0dXJlXCIsXG5cdFx0XHRcdG1lc3NhZ2U6IFwiU3ZpeC9TdGFuZGFyZCBXZWJob29rczogbWlzc2luZyB3ZWJob29rLWlkLCB3ZWJob29rLXRpbWVzdGFtcCwgb3Igd2ViaG9vay1zaWduYXR1cmUgaGVhZGVyXCIsXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRjb25zdCB0c051bSA9IE51bWJlci5wYXJzZUludCh3ZWJob29rVHMsIDEwKTtcblx0XHRpZiAoIU51bWJlci5pc0Zpbml0ZSh0c051bSkpIHtcblx0XHRcdHJldHVybiB7IG9rOiBmYWxzZSwgcmVhc29uOiBcImJhZF9mb3JtYXRcIiwgbWVzc2FnZTogXCJTdml4OiB3ZWJob29rLXRpbWVzdGFtcCBpcyBub3QgbnVtZXJpY1wiIH07XG5cdFx0fVxuXHRcdGlmICghaXNXaXRoaW5Ub2xlcmFuY2UodHNOdW0sIHRvbGVyYW5jZVNlYyB8fCBERUZBVUxUX1RPTEVSQU5DRV9TRUMpKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRvazogZmFsc2UsXG5cdFx0XHRcdHJlYXNvbjogXCJ0aW1lc3RhbXBfZHJpZnRcIixcblx0XHRcdFx0bWVzc2FnZTogYFN2aXg6IHRpbWVzdGFtcCBkcmlmdCBleGNlZWRzICR7dG9sZXJhbmNlU2VjIHx8IERFRkFVTFRfVE9MRVJBTkNFX1NFQ31zIHRvbGVyYW5jZWAsXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRjb25zdCBzaWduZWQgPSBgJHt3ZWJob29rSWR9LiR7d2ViaG9va1RzfS4ke3Jhd0JvZHl9YDtcblx0XHQvLyBTdHJpcCBvcHRpb25hbCBgd2hzZWNfYCBwcmVmaXggU3ZpeCByZWNvbW1lbmRzIGZvciBzZWNyZXRzLlxuXHRcdGNvbnN0IHJhd1NlY3JldCA9IHNlY3JldC5zdGFydHNXaXRoKFwid2hzZWNfXCIpID8gc2VjcmV0LnNsaWNlKFwid2hzZWNfXCIubGVuZ3RoKSA6IHNlY3JldDtcblx0XHQvLyBTdml4IGVuY29kZXMgdGhlIHNlY3JldCBhcyBiYXNlNjQg4oCUIGRlY29kZSBiZWZvcmUgSE1BQy5cblx0XHRjb25zdCBzZWNyZXRCdWYgPSBCdWZmZXIuZnJvbShyYXdTZWNyZXQsIFwiYmFzZTY0XCIpO1xuXHRcdGNvbnN0IGV4cGVjdGVkID0gY3JlYXRlSG1hYyhcInNoYTI1NlwiLCBzZWNyZXRCdWYpLnVwZGF0ZShzaWduZWQpLmRpZ2VzdChcImJhc2U2NFwiKTtcblx0XHQvLyB3ZWJob29rLXNpZ25hdHVyZSBtYXkgaW5jbHVkZSBtdWx0aXBsZSB2ZXJzaW9uczogYHYxLGJhc2U2NCB2MSxiYXNlNjQgLi4uYFxuXHRcdGNvbnN0IHNpZ3MgPSB3ZWJob29rU2lnLnNwbGl0KFwiIFwiKS5tYXAoKHMpID0+IHtcblx0XHRcdGNvbnN0IGlkeCA9IHMuaW5kZXhPZihcIixcIik7XG5cdFx0XHRyZXR1cm4gaWR4ID09PSAtMSA/IHMgOiBzLnNsaWNlKGlkeCArIDEpO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG1hdGNoZWQgPSBzaWdzLnNvbWUoKHMpID0+IHNhZmVFcXVhbFN0cmluZyhzLCBleHBlY3RlZCkpO1xuXHRcdGlmICghbWF0Y2hlZCkge1xuXHRcdFx0cmV0dXJuIHsgb2s6IGZhbHNlLCByZWFzb246IFwic2lnbmF0dXJlX21pc21hdGNoXCIsIG1lc3NhZ2U6IFwiU3ZpeDogc2lnbmF0dXJlIG1pc21hdGNoXCIgfTtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdG9rOiB0cnVlLFxuXHRcdFx0ZXZlbnRJZDogd2ViaG9va0lkLFxuXHRcdFx0ZXZlbnRUeXBlOiBnZXRFdmVudFR5cGVGcm9tQm9keShwYXJzZWRCb2R5KSA/PyBcInVua25vd25cIixcblx0XHR9O1xuXHR9LFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEN1c3RvbSB2ZXJpZmllciDigJQgYnVpbHQgZnJvbSB0aGUgd29ya2Zsb3cncyBgc2lnbmF0dXJlOiB7IC4uLiB9YCBjb25maWdcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tU2lnbmF0dXJlQ29uZmlnIHtcblx0c2NoZW1lOiBcImhtYWMtc2hhMjU2XCIgfCBcImhtYWMtc2hhMVwiIHwgXCJobWFjLXNoYTUxMlwiO1xuXHRoZWFkZXI6IHN0cmluZztcblx0Zm9ybWF0OiBzdHJpbmc7XG5cdHNlY3JldEVudjogc3RyaW5nO1xuXHR0b2xlcmFuY2U6IG51bWJlcjtcblx0dGltZXN0YW1wSGVhZGVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRDdXN0b21WZXJpZmllcihjb25maWc6IEN1c3RvbVNpZ25hdHVyZUNvbmZpZyk6IFZlcmlmaWVyIHtcblx0Y29uc3QgYWxnbzogXCJzaGEyNTZcIiB8IFwic2hhMVwiIHwgXCJzaGE1MTJcIiA9XG5cdFx0Y29uZmlnLnNjaGVtZSA9PT0gXCJobWFjLXNoYTFcIiA/IFwic2hhMVwiIDogY29uZmlnLnNjaGVtZSA9PT0gXCJobWFjLXNoYTUxMlwiID8gXCJzaGE1MTJcIiA6IFwic2hhMjU2XCI7XG5cdGNvbnN0IGhlYWRlckxvd2VyID0gY29uZmlnLmhlYWRlci50b0xvd2VyQ2FzZSgpO1xuXHRjb25zdCB0c0hlYWRlckxvd2VyID0gY29uZmlnLnRpbWVzdGFtcEhlYWRlcj8udG9Mb3dlckNhc2UoKTtcblxuXHRyZXR1cm4ge1xuXHRcdHZlcmlmeSh7IGhlYWRlcnMsIHJhd0JvZHksIHBhcnNlZEJvZHksIHNlY3JldCwgdG9sZXJhbmNlU2VjIH0pIHtcblx0XHRcdGlmICghc2VjcmV0KSByZXR1cm4geyBvazogZmFsc2UsIHJlYXNvbjogXCJtaXNzaW5nX3NlY3JldFwiLCBtZXNzYWdlOiBgJHtjb25maWcuaGVhZGVyfTogc2VjcmV0IG5vdCBjb25maWd1cmVkYCB9O1xuXHRcdFx0Y29uc3Qgc2lnID0gaGVhZGVyc1toZWFkZXJMb3dlcl07XG5cdFx0XHRpZiAoIXNpZykge1xuXHRcdFx0XHRyZXR1cm4geyBvazogZmFsc2UsIHJlYXNvbjogXCJtaXNzaW5nX3NpZ25hdHVyZVwiLCBtZXNzYWdlOiBgJHtjb25maWcuaGVhZGVyfTogaGVhZGVyIG1pc3NpbmdgIH07XG5cdFx0XHR9XG5cblx0XHRcdGxldCBzaWduZWRTdHJpbmcgPSByYXdCb2R5O1xuXHRcdFx0aWYgKHRzSGVhZGVyTG93ZXIpIHtcblx0XHRcdFx0Y29uc3QgdHMgPSBoZWFkZXJzW3RzSGVhZGVyTG93ZXJdO1xuXHRcdFx0XHRpZiAoIXRzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdG9rOiBmYWxzZSxcblx0XHRcdFx0XHRcdHJlYXNvbjogXCJtaXNzaW5nX3RpbWVzdGFtcFwiLFxuXHRcdFx0XHRcdFx0bWVzc2FnZTogYCR7Y29uZmlnLnRpbWVzdGFtcEhlYWRlcn06IGhlYWRlciBtaXNzaW5nYCxcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHRzTnVtID0gTnVtYmVyLnBhcnNlSW50KHRzLCAxMCk7XG5cdFx0XHRcdGlmICghTnVtYmVyLmlzRmluaXRlKHRzTnVtKSkge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRvazogZmFsc2UsXG5cdFx0XHRcdFx0XHRyZWFzb246IFwiYmFkX2Zvcm1hdFwiLFxuXHRcdFx0XHRcdFx0bWVzc2FnZTogYCR7Y29uZmlnLnRpbWVzdGFtcEhlYWRlcn06IG5vdCBudW1lcmljYCxcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghaXNXaXRoaW5Ub2xlcmFuY2UodHNOdW0sIHRvbGVyYW5jZVNlYyB8fCBjb25maWcudG9sZXJhbmNlKSkge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRvazogZmFsc2UsXG5cdFx0XHRcdFx0XHRyZWFzb246IFwidGltZXN0YW1wX2RyaWZ0XCIsXG5cdFx0XHRcdFx0XHRtZXNzYWdlOiBgVGltZXN0YW1wIGRyaWZ0IGV4Y2VlZHMgJHt0b2xlcmFuY2VTZWMgfHwgY29uZmlnLnRvbGVyYW5jZX1zIHRvbGVyYW5jZWAsXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzaWduZWRTdHJpbmcgPSBgJHt0c30uJHtyYXdCb2R5fWA7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGhleCA9IGhtYWNIZXgoYWxnbywgc2VjcmV0LCBzaWduZWRTdHJpbmcpO1xuXHRcdFx0Y29uc3QgYmFzZTY0ID0gaG1hY0Jhc2U2NChhbGdvLCBzZWNyZXQsIHNpZ25lZFN0cmluZyk7XG5cdFx0XHRjb25zdCBleHBlY3RlZCA9IGNvbmZpZy5mb3JtYXQucmVwbGFjZShcIntoZXh9XCIsIGhleCkucmVwbGFjZShcIntiYXNlNjR9XCIsIGJhc2U2NCk7XG5cblx0XHRcdGlmICghc2FmZUVxdWFsU3RyaW5nKHNpZywgZXhwZWN0ZWQpKSB7XG5cdFx0XHRcdHJldHVybiB7IG9rOiBmYWxzZSwgcmVhc29uOiBcInNpZ25hdHVyZV9taXNtYXRjaFwiLCBtZXNzYWdlOiBgJHtjb25maWcuaGVhZGVyfTogc2lnbmF0dXJlIG1pc21hdGNoYCB9O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0b2s6IHRydWUsXG5cdFx0XHRcdGV2ZW50SWQ6IFwiXCIsXG5cdFx0XHRcdGV2ZW50VHlwZTogZ2V0RXZlbnRUeXBlRnJvbUJvZHkocGFyc2VkQm9keSkgPz8gXCJ1bmtub3duXCIsXG5cdFx0XHR9O1xuXHRcdH0sXG5cdH07XG59XG5cbmV4cG9ydCBjb25zdCBCVUlMVElOX1ZFUklGSUVSUzogUmVjb3JkPHN0cmluZywgVmVyaWZpZXI+ID0ge1xuXHRnaXRodWI6IGdpdGh1YlZlcmlmaWVyLFxuXHRzdHJpcGU6IHN0cmlwZVZlcmlmaWVyLFxuXHRzbGFjazogc2xhY2tWZXJpZmllcixcblx0c2hvcGlmeTogc2hvcGlmeVZlcmlmaWVyLFxuXHRzdml4OiBzdml4VmVyaWZpZXIsXG59O1xuIl19
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZpZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3ZlcmlmaWVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0NHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUF5QzFELE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDO0FBRWxDLFNBQVMsZUFBZSxDQUFDLENBQVMsRUFBRSxDQUFTO0lBQzVDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM5QyxPQUFPLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLElBQWtDLEVBQUUsTUFBYyxFQUFFLElBQVk7SUFDaEYsT0FBTyxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLElBQWtDLEVBQUUsTUFBYyxFQUFFLElBQVk7SUFDbkYsT0FBTyxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsWUFBb0IsRUFBRSxZQUFvQjtJQUNwRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUks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RSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNELENBQUM7WUFDRCxPQUFPO2dCQUNOLEVBQUUsRUFBRSxJQUFJO2dCQUNSLE9BQU87Z0JBQ1AsU0FBUyxFQUFFLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxJQUFJLFNBQVM7YUFDeEQsQ0FBQztRQUNILENBQUM7S0FDRCxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUE2QjtJQUMxRCxNQUFNLEVBQUUsY0FBYztJQUN0QixNQUFNLEVBQUUsY0FBYztJQUN0QixLQUFLLEVBQUUsYUFBYTtJQUNwQixPQUFPLEVBQUUsZUFBZTtJQUN4QixJQUFJLEVBQUUsWUFBWTtDQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXZWJob29rIHNpZ25hdHVyZSB2ZXJpZmllcnMg4oCUIG9uZSBzdHJhdGVneSBwZXIgc3VwcG9ydGVkIHByb3ZpZGVyLlxuICpcbiAqIEVhY2ggdmVyaWZpZXIgcmVhZHMgdGhlIHJhdyByZXF1ZXN0IGJ5dGVzIChOT1QgdGhlIEpTT04tcGFyc2VkIGJvZHkpXG4gKiBhbmQgdGhlIHByb3ZpZGVyLXNwZWNpZmljIHNpZ25hdHVyZSBoZWFkZXIsIGNvbXB1dGVzIHRoZSBleHBlY3RlZFxuICogSE1BQyBhZ2FpbnN0IGEgc2hhcmVkIHNlY3JldCwgYW5kIGNvbnN0YW50LXRpbWUgY29tcGFyZXMuIE9uIG1hdGNoLFxuICogcmV0dXJucyBgeyBvazogdHJ1ZSwgZXZlbnRJZCwgZXZlbnRUeXBlIH1gLiBPbiBtaXNtYXRjaCAvIG1pc3NpbmdcbiAqIGhlYWRlciAvIGRyaWZ0LCByZXR1cm5zIGB7IG9rOiBmYWxzZSwgcmVhc29uLCBtZXNzYWdlIH1gLlxuICpcbiAqIENvbnN0YW50LXRpbWUgY29tcGFyaXNvbiB2aWEgYGNyeXB0by50aW1pbmdTYWZlRXF1YWxgIGlzIG1hbmRhdG9yeSDigJRcbiAqIGEgbmFpdmUgYD09PWAgY29tcGFyZSBsZWFrcyB0aGUgZXhwZWN0ZWQgSE1BQyBieXRlIGJ5IGJ5dGUgdGhyb3VnaFxuICogdGltaW5nIHZhcmlhbmNlIGFuZCBhIG5ldHdvcmstYWRqYWNlbnQgYXR0YWNrZXIgY2FuIHJlY292ZXIgdGhlXG4gKiBzZWNyZXQgaW4gfjI1NiByZXF1ZXN0cyBwZXIgYnl0ZS5cbiAqXG4gKiBCdWlsdC1pbiBwcm92aWRlcnMgKyB0aGVpciBzaWduYXR1cmUgc2hhcGVzOlxuICpcbiAqICAgLSAqKmdpdGh1YioqOiAgICBgWC1IdWItU2lnbmF0dXJlLTI1Njogc2hhMjU2PTxoZXg+YCBvdmVyIHJhd0JvZHkuXG4gKiAgICAgICAgICAgICAgICAgICAgRXZlbnQgaWQgZnJvbSBgWC1HaXRIdWItRGVsaXZlcnlgOyBldmVudCB0eXBlXG4gKiAgICAgICAgICAgICAgICAgICAgZnJvbSBgWC1HaXRIdWItRXZlbnRgIGhlYWRlci5cbiAqICAgLSAqKnN0cmlwZSoqOiAgICBgU3RyaXBlLVNpZ25hdHVyZTogdD08dHM+LHYxPTxoZXg+YCBvdmVyXG4gKiAgICAgICAgICAgICAgICAgICAgYDx0cz4uPHJhd0JvZHk+YCB3aXRoIGEgNS1taW51dGUgZHJpZnQgd2luZG93LlxuICogICAgICAgICAgICAgICAgICAgIEV2ZW50IGlkICsgdHlwZSBmcm9tIGJvZHkuaWQgLyBib2R5LnR5cGUuXG4gKiAgIC0gKipzbGFjayoqOiAgICAgYFgtU2xhY2stU2lnbmF0dXJlOiB2MD08aGV4PmAgb3ZlclxuICogICAgICAgICAgICAgICAgICAgIGB2MDo8WC1TbGFjay1SZXF1ZXN0LVRpbWVzdGFtcD46PHJhd0JvZHk+YCB3aXRoIGFcbiAqICAgICAgICAgICAgICAgICAgICA1LW1pbnV0ZSBkcmlmdCB3aW5kb3cuIEV2ZW50IHR5cGUgZnJvbVxuICogICAgICAgICAgICAgICAgICAgIGJvZHkuZXZlbnQudHlwZTsgZXZlbnQgaWQgZnJvbSBib2R5LmV2ZW50X2lkLlxuICogICAtICoqc2hvcGlmeSoqOiAgIGBYLVNob3BpZnktSG1hYy1TaGEyNTY6IDxiYXNlNjQ+YCBvdmVyIHJhd0JvZHkuXG4gKiAgICAgICAgICAgICAgICAgICAgRXZlbnQgdHlwZSBmcm9tIGBYLVNob3BpZnktVG9waWNgOyBldmVudCBpZCBmcm9tXG4gKiAgICAgICAgICAgICAgICAgICAgYFgtU2hvcGlmeS1XZWJob29rLUlkYC5cbiAqICAgLSAqKnN2aXgqKjogICAgICBTdGFuZGFyZCBXZWJob29rcy4gYHdlYmhvb2stc2lnbmF0dXJlOlxuICogICAgICAgICAgICAgICAgICAgIHYxLDxiYXNlNjQ+YCBvdmVyIGA8d2ViaG9vay1pZD4uPHdlYmhvb2stdGltZXN0YW1wPi48cmF3Qm9keT5gXG4gKiAgICAgICAgICAgICAgICAgICAgd2l0aCBhIDUtbWludXRlIGRyaWZ0IHdpbmRvdy4gRXZlbnQgaWQgZnJvbVxuICogICAgICAgICAgICAgICAgICAgIGB3ZWJob29rLWlkYDsgZXZlbnQgdHlwZSBmcm9tIGJvZHkudHlwZS5cbiAqXG4gKiBDdXN0b20gKHVua25vd24gcHJvdmlkZXIpIHZlcmlmaWVyIGlzIGJ1aWx0IGR5bmFtaWNhbGx5IGJ5XG4gKiBgYnVpbGRDdXN0b21WZXJpZmllcigpYCBmcm9tIHRoZSB3b3JrZmxvdydzIGBzaWduYXR1cmVgIGNvbmZpZy5cbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVIbWFjLCB0aW1pbmdTYWZlRXF1YWwgfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcblxuLyoqIFN1Y2Nlc3NmdWwgdmVyaWZpY2F0aW9uIHJlc3VsdCDigJQgd29ya2Zsb3cgbWF5IHByb2NlZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeU9rIHtcblx0b2s6IHRydWU7XG5cdC8qKiBQcm92aWRlci1zcGVjaWZpYyBldmVudCBpZCAodXNlZCBmb3IgcmVwbGF5LXByb3RlY3Rpb24gY2FjaGUga2V5KS4gKi9cblx0ZXZlbnRJZDogc3RyaW5nO1xuXHQvKiogUHJvdmlkZXItc3BlY2lmaWMgZXZlbnQgdHlwZSAodXNlZCBmb3IgdGhlIGFsbG93bGlzdCBjaGVjaykuICovXG5cdGV2ZW50VHlwZTogc3RyaW5nO1xufVxuXG4vKiogVmVyaWZpY2F0aW9uIGZhaWx1cmUg4oCUIHRyaWdnZXIgcmV0dXJucyA0MDEgd2l0aCBzdHJ1Y3R1cmVkIHJlYXNvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5RXJyb3Ige1xuXHRvazogZmFsc2U7XG5cdC8qKiBTdGFibGUgZGlzY3JpbWluYXRvciDigJQgbG9nL2FsZXJ0IGRhc2hib2FyZHMgYnJhbmNoIG9uIHRoaXMuICovXG5cdHJlYXNvbjpcblx0XHR8IFwibWlzc2luZ19zaWduYXR1cmVcIlxuXHRcdHwgXCJtaXNzaW5nX3RpbWVzdGFtcFwiXG5cdFx0fCBcIm1pc3Npbmdfc2VjcmV0XCJcblx0XHR8IFwiYmFkX2Zvcm1hdFwiXG5cdFx0fCBcInRpbWVzdGFtcF9kcmlmdFwiXG5cdFx0fCBcInNpZ25hdHVyZV9taXNtYXRjaFwiO1xuXHQvKiogSHVtYW4tcmVhZGFibGUgZXJyb3IgbWVzc2FnZS4gU2FmZSB0byBzdXJmYWNlIHRvIHRoZSBzZW5kZXIuICovXG5cdG1lc3NhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgVmVyaWZ5UmVzdWx0ID0gVmVyaWZ5T2sgfCBWZXJpZnlFcnJvcjtcblxuLyoqIElucHV0cyBldmVyeSB2ZXJpZmllciByZWNlaXZlcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5SW5wdXQge1xuXHRoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHRyYXdCb2R5OiBzdHJpbmc7XG5cdHBhcnNlZEJvZHk6IHVua25vd247XG5cdHNlY3JldDogc3RyaW5nO1xuXHR0b2xlcmFuY2VTZWM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZmllciB7XG5cdHZlcmlmeShpbnB1dDogVmVyaWZ5SW5wdXQpOiBWZXJpZnlSZXN1bHQ7XG59XG5cbmNvbnN0IERFRkFVTFRfVE9MRVJBTkNFX1NFQyA9IDMwMDtcblxuZnVuY3Rpb24gc2FmZUVxdWFsU3RyaW5nKGE6IHN0cmluZywgYjogc3RyaW5nKTogYm9vbGVhbiB7XG5cdGNvbnN0IGFCdWYgPSBCdWZmZXIuZnJvbShhKTtcblx0Y29uc3QgYkJ1ZiA9IEJ1ZmZlci5mcm9tKGIpO1xuXHRpZiAoYUJ1Zi5sZW5ndGggIT09IGJCdWYubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0aW1pbmdTYWZlRXF1YWwoYUJ1ZiwgYkJ1Zik7XG59XG5cbmZ1bmN0aW9uIGhtYWNIZXgoYWxnbzogXCJzaGEyNTZcIiB8IFwic2hhMVwiIHwgXCJzaGE1MTJcIiwgc2VjcmV0OiBzdHJpbmcsIGRhdGE6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBjcmVhdGVIbWFjKGFsZ28sIHNlY3JldCkudXBkYXRlKGRhdGEpLmRpZ2VzdChcImhleFwiKTtcbn1cblxuZnVuY3Rpb24gaG1hY0Jhc2U2NChhbGdvOiBcInNoYTI1NlwiIHwgXCJzaGExXCIgfCBcInNoYTUxMlwiLCBzZWNyZXQ6IHN0cmluZywgZGF0YTogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIGNyZWF0ZUhtYWMoYWxnbywgc2VjcmV0KS51cGRhdGUoZGF0YSkuZGlnZXN0KFwiYmFzZTY0XCIpO1xufVxuXG5mdW5jdGlvbiBpc1dpdGhpblRvbGVyYW5jZSh0aW1lc3RhbXBTZWM6IG51bWJlciwgdG9sZXJhbmNlU2VjOiBudW1iZXIpOiBib29sZWFuIHtcblx0Y29uc3Qgbm93U2VjID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG5cdHJldHVybiBNYXRoLmFicyhub3dTZWMgLSB0aW1lc3RhbXBTZWMpIDw9IHRvbGVyYW5jZVNlYztcbn1cblxuZnVuY3Rpb24gZ2V0RXZlbnRUeXBlRnJvbUJvZHkocGFyc2VkQm9keTogdW5rbm93biwga2V5ID0gXCJ0eXBlXCIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIXBhcnNlZEJvZHkgfHwgdHlwZW9mIHBhcnNlZEJvZHkgIT09IFwib2JqZWN0XCIpIHJldHVybiB1bmRlZmluZWQ7XG5cdGNvbnN0IHZhbHVlID0gKHBhcnNlZEJvZHkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV07XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZWFkIGEgdmFsdWUgZnJvbSBhIHBhcnNlZCBib2R5IGJ5IGRvdC1zZXBhcmF0ZWQgcGF0aCAoZS5nLiBgXCJkYXRhLmlkXCJgLFxuICogYFwicmVzb3VyY2UuaWRcImApLiBSZXR1cm5zIHRoZSB2YWx1ZSBjb2VyY2VkIHRvIHN0cmluZyB3aGVuIGl0J3MgYSBzdHJpbmcgb3JcbiAqIG51bWJlciwgb3RoZXJ3aXNlIGB1bmRlZmluZWRgLiBVc2VkIHRvIHB1bGwgYSBjdXN0b20gcHJvdmlkZXIncyBldmVudCBpZCBvdXRcbiAqIG9mIHRoZSBwYXlsb2FkIHNvIHdlYmhvb2sgcmVwbGF5LXByb3RlY3Rpb24gaGFzIGEga2V5IHRvIGRlZHVwIG9uLlxuICovXG5mdW5jdGlvbiBnZXRCeVBhdGgocGFyc2VkQm9keTogdW5rbm93biwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFwYXRoKSByZXR1cm4gdW5kZWZpbmVkO1xuXHRsZXQgY3VyOiB1bmtub3duID0gcGFyc2VkQm9keTtcblx0Zm9yIChjb25zdCBzZWdtZW50IG9mIHBhdGguc3BsaXQoXCIuXCIpKSB7XG5cdFx0aWYgKCFjdXIgfHwgdHlwZW9mIGN1ciAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHVuZGVmaW5lZDtcblx0XHRjdXIgPSAoY3VyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtzZWdtZW50XTtcblx0fVxuXHRpZiAodHlwZW9mIGN1ciA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGN1cjtcblx0aWYgKHR5cGVvZiBjdXIgPT09IFwibnVtYmVyXCIpIHJldHVybiBTdHJpbmcoY3VyKTtcblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEJ1aWx0LWluIHByb3ZpZGVyc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IGdpdGh1YlZlcmlmaWVyOiBWZXJpZmllciA9IHtcblx0dmVyaWZ5KHsgaGVhZGVycywgcmF3Qm9keSwgc2VjcmV0IH0pIHtcblx0XHRpZiAoIXNlY3JldCkgcmV0dXJuIHsgb2s6IGZhbHNlLCByZWFzb246IFwibWlzc2luZ19zZWNyZXRcIiwgbWVzc2FnZTogXCJHaXRIdWI6IHNlY3JldCBub3QgY29uZmlndXJlZFwiIH07XG5cdFx0Y29uc3Qgc2lnID0gaGVhZGVyc1tcIngtaHViLXNpZ25hdHVyZS0yNTZcIl07XG5cdFx0aWYgKCFzaWcpIHJldHVybiB7IG9rOiBmYWxzZSwgcmVhc29uOiBcIm1pc3Npbmdfc2lnbmF0dXJlXCIsIG1lc3NhZ2U6IFwiR2l0SHViOiBYLUh1Yi1TaWduYXR1cmUtMjU2IGhlYWRlciBtaXNzaW5nXCIgfTtcblx0XHRjb25zdCBleHBlY3RlZCA9IGBzaGEyNTY9JHtobWFjSGV4KFwic2hhMjU2XCIsIHNlY3JldCwgcmF3Qm9keSl9YDtcblx0XHRpZiAoIXNhZmVFcXVhbFN0cmluZyhzaWcsIGV4cGVjdGVkKSkge1xuXHRcdFx0cmV0dXJuIHsgb2s6IGZhbHNlLCByZWFzb246IFwic2lnbmF0dXJlX21pc21hdGNoXCIsIG1lc3NhZ2U6IFwiR2l0SHViOiBzaWduYXR1cmUgbWlzbWF0Y2hcIiB9O1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0b2s6IHRydWUsXG5cdFx0XHRldmVudElkOiBoZWFkZXJzW1wieC1naXRodWItZGVsaXZlcnlcIl0gPz8gXCJcIixcblx0XHRcdGV2ZW50VHlwZTogaGVhZGVyc1tcIngtZ2l0aHViLWV2ZW50XCJdID8/IFwidW5rbm93blwiLFxuXHRcdH07XG5cdH0sXG59O1xuXG5leHBvcnQgY29uc3Qgc3RyaXBlVmVyaWZpZXI6IFZlcmlmaWVyID0ge1xuXHR2ZXJpZnkoeyBoZWFkZXJzLCByYXdCb2R5LCBwYXJzZWRCb2R5LCBzZWNyZXQsIHRvbGVyYW5jZVNlYyB9KSB7XG5cdFx0aWYgKCFzZWNyZXQpIHJldHVybiB7IG9rOiBmYWxzZSwgcmVhc29uOiBcIm1pc3Npbmdfc2VjcmV0XCIsIG1lc3NhZ2U6IFwiU3RyaXBlOiBzZWNyZXQgbm90IGNvbmZpZ3VyZWRcIiB9O1xuXHRcdGNvbnN0IHNpZyA9IGhlYWRlcnNbXCJzdHJpcGUtc2lnbmF0dXJlXCJdO1xuXHRcdGlmICghc2lnKSByZXR1cm4geyBvazogZmFsc2UsIHJlYXNvbjogXCJtaXNzaW5nX3NpZ25hdHVyZVwiLCBtZXNzYWdlOiBcIlN0cmlwZTogU3RyaXBlLVNpZ25hdHVyZSBoZWFkZXIgbWlzc2luZ1wiIH07XG5cblx0XHQvLyBGb3JtYXQ6IHQ9MTIzNDU2Nzg5MCx2MT08aGV4Pix2MD08aGV4PiwuLi5cblx0XHRjb25zdCBwYXJ0cyA9IE9iamVjdC5mcm9tRW50cmllcyhcblx0XHRcdHNpZ1xuXHRcdFx0XHQuc3BsaXQoXCIsXCIpXG5cdFx0XHRcdC5tYXAoKHApID0+IHAudHJpbSgpKVxuXHRcdFx0XHQubWFwKChwKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgaWR4ID0gcC5pbmRleE9mKFwiPVwiKTtcblx0XHRcdFx0XHRyZXR1cm4gaWR4ID09PSAtMSA/IFtwLCBcIlwiXSA6IFtwLnNsaWNlKDAsIGlkeCksIHAuc2xpY2UoaWR4ICsgMSldO1xuXHRcdFx0XHR9KSxcblx0XHQpO1xuXHRcdGNvbnN0IHRzID0gcGFydHMudDtcblx0XHRjb25zdCB2MSA9IHBhcnRzLnYxO1xuXHRcdGlmICghdHMgfHwgIXYxKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRvazogZmFsc2UsXG5cdFx0XHRcdHJlYXNvbjogXCJiYWRfZm9ybWF0XCIsXG5cdFx0XHRcdG1lc3NhZ2U6IFwiU3RyaXBlOiBzaWduYXR1cmUgbWlzc2luZyB0PSBvciB2MT0gY29tcG9uZW50XCIsXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRjb25zdCB0c051bSA9IE51bWJlci5wYXJzZUludCh0cywgMTApO1xuXHRcdGlmICghTnVtYmVyLmlzRmluaXRlKHRzTnVtKSkge1xuXHRcdFx0cmV0dXJuIHsgb2s6IGZhbHNlLCByZWFzb246IFwiYmFkX2Zvcm1hdFwiLCBtZXNzYWdlOiBcIlN0cmlwZTogdD0gaXMgbm90IG51bWVyaWNcIiB9O1xuXHRcdH1cblx0XHRpZiAoIWlzV2l0aGluVG9sZXJhbmNlKHRzTnVtLCB0b2xlcmFuY2VTZWMgfHwgREVGQVVMVF9UT0xFUkFOQ0VfU0VDKSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0b2s6IGZhbHNlLFxuXHRcdFx0XHRyZWFzb246IFwidGltZXN0YW1wX2RyaWZ0XCIsXG5cdFx0XHRcdG1lc3NhZ2U6IGBTdHJpcGU6IHRpbWVzdGFtcCBkcmlmdCBleGNlZWRzICR7dG9sZXJhbmNlU2VjIHx8IERFRkFVTFRfVE9MRVJBTkNFX1NFQ31zIHRvbGVyYW5jZWAsXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRjb25zdCBleHBlY3RlZCA9IGhtYWNIZXgoXCJzaGEyNTZcIiwgc2VjcmV0LCBgJHt0c30uJHtyYXdCb2R5fWApO1xuXHRcdGlmICghc2FmZUVxdWFsU3RyaW5nKHYxLCBleHBlY3RlZCkpIHtcblx0XHRcdHJldHVybiB7IG9rOiBmYWxzZSwgcmVhc29uOiBcInNpZ25hdHVyZV9taXNtYXRjaFwiLCBtZXNzYWdlOiBcIlN0cmlwZTogc2lnbmF0dXJlIG1pc21hdGNoXCIgfTtcblx0XHR9XG5cdFx0Y29uc3QgZXZlbnRJZCA9IChwYXJzZWRCb2R5IGFzIHsgaWQ/OiB1bmtub3duIH0gfCBudWxsKT8uaWQ7XG5cdFx0Y29uc3QgZXZlbnRUeXBlID0gZ2V0RXZlbnRUeXBlRnJvbUJvZHkocGFyc2VkQm9keSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG9rOiB0cnVlLFxuXHRcdFx0ZXZlbnRJZDogdHlwZW9mIGV2ZW50SWQgPT09IFwic3RyaW5nXCIgPyBldmVudElkIDogXCJcIixcblx0XHRcdGV2ZW50VHlwZTogZXZlbnRUeXBlID8/IFwidW5rbm93blwiLFxuXHRcdH07XG5cdH0sXG59O1xuXG5leHBvcnQgY29uc3Qgc2xhY2tWZXJpZmllcjogVmVyaWZpZXIgPSB7XG5cdHZlcmlmeSh7IGhlYWRlcnMsIHJhd0JvZHksIHBhcnNlZEJvZHksIHNlY3JldCwgdG9sZXJhbmNlU2VjIH0pIHtcblx0XHRpZiAoIXNlY3JldCkgcmV0dXJuIHsgb2s6IGZhbHNlLCByZWFzb246IFwibWlzc2luZ19zZWNyZXRcIiwgbWVzc2FnZTogXCJTbGFjazogc2VjcmV0IG5vdCBjb25maWd1cmVkXCIgfTtcblx0XHRjb25zdCBzaWcgPSBoZWFkZXJzW1wieC1zbGFjay1zaWduYXR1cmVcIl07XG5cdFx0aWYgKCFzaWcpIHJldHVybiB7IG9rOiBmYWxzZSwgcmVhc29uOiBcIm1pc3Npbmdfc2lnbmF0dXJlXCIsIG1lc3NhZ2U6IFwiU2xhY2s6IFgtU2xhY2stU2lnbmF0dXJlIGhlYWRlciBtaXNzaW5nXCIgfTtcblx0XHRjb25zdCB0cyA9IGhlYWRlcnNbXCJ4LXNsYWNrLXJlcXVlc3QtdGltZXN0YW1wXCJdO1xuXHRcdGlmICghdHMpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG9rOiBmYWxzZSxcblx0XHRcdFx0cmVhc29uOiBcIm1pc3NpbmdfdGltZXN0YW1wXCIsXG5cdFx0XHRcdG1lc3NhZ2U6IFwiU2xhY2s6IFgtU2xhY2stUmVxdWVzdC1UaW1lc3RhbXAgaGVhZGVyIG1pc3NpbmdcIixcblx0XHRcdH07XG5cdFx0fVxuXHRcdGNvbnN0IHRzTnVtID0gTnVtYmVyLnBhcnNlSW50KHRzLCAxMCk7XG5cdFx0aWYgKCFOdW1iZXIuaXNGaW5pdGUodHNOdW0pKSB7XG5cdFx0XHRyZXR1cm4geyBvazogZmFsc2UsIHJlYXNvbjogXCJiYWRfZm9ybWF0XCIsIG1lc3NhZ2U6IFwiU2xhY2s6IHRpbWVzdGFtcCBpcyBub3QgbnVtZXJpY1wiIH07XG5cdFx0fVxuXHRcdGlmICghaXNXaXRoaW5Ub2xlcmFuY2UodHNOdW0sIHRvbGVyYW5jZVNlYyB8fCBERUZBVUxUX1RPTEVSQU5DRV9TRUMpKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRvazogZmFsc2UsXG5cdFx0XHRcdHJlYXNvbjogXCJ0aW1lc3RhbXBfZHJpZnRcIixcblx0XHRcdFx0bWVzc2FnZTogYFNsYWNrOiB0aW1lc3RhbXAgZHJpZnQgZXhjZWVkcyAke3RvbGVyYW5jZVNlYyB8fCBERUZBVUxUX1RPTEVSQU5DRV9TRUN9cyB0b2xlcmFuY2VgLFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0Y29uc3QgZXhwZWN0ZWQgPSBgdjA9JHtobWFjSGV4KFwic2hhMjU2XCIsIHNlY3JldCwgYHYwOiR7dHN9OiR7cmF3Qm9keX1gKX1gO1xuXHRcdGlmICghc2FmZUVxdWFsU3RyaW5nKHNpZywgZXhwZWN0ZWQpKSB7XG5cdFx0XHRyZXR1cm4geyBvazogZmFsc2UsIHJlYXNvbjogXCJzaWduYXR1cmVfbWlzbWF0Y2hcIiwgbWVzc2FnZTogXCJTbGFjazogc2lnbmF0dXJlIG1pc21hdGNoXCIgfTtcblx0XHR9XG5cdFx0Y29uc3QgZXZlbnQgPSAocGFyc2VkQm9keSBhcyB7IGV2ZW50PzogeyB0eXBlPzogdW5rbm93biB9OyBldmVudF9pZD86IHVua25vd24gfSB8IG51bGwpID8/IHt9O1xuXHRcdGNvbnN0IGV2ZW50VHlwZSA9IHR5cGVvZiBldmVudC5ldmVudD8udHlwZSA9PT0gXCJzdHJpbmdcIiA/IGV2ZW50LmV2ZW50LnR5cGUgOiBcInVua25vd25cIjtcblx0XHRjb25zdCBldmVudElkID0gdHlwZW9mIGV2ZW50LmV2ZW50X2lkID09PSBcInN0cmluZ1wiID8gZXZlbnQuZXZlbnRfaWQgOiBcIlwiO1xuXHRcdHJldHVybiB7IG9rOiB0cnVlLCBldmVudElkLCBldmVudFR5cGUgfTtcblx0fSxcbn07XG5cbmV4cG9ydCBjb25zdCBzaG9waWZ5VmVyaWZpZXI6IFZlcmlmaWVyID0ge1xuXHR2ZXJpZnkoeyBoZWFkZXJzLCByYXdCb2R5LCBzZWNyZXQgfSkge1xuXHRcdGlmICghc2VjcmV0KSByZXR1cm4geyBvazogZmFsc2UsIHJlYXNvbjogXCJtaXNzaW5nX3NlY3JldFwiLCBtZXNzYWdlOiBcIlNob3BpZnk6IHNlY3JldCBub3QgY29uZmlndXJlZFwiIH07XG5cdFx0Y29uc3Qgc2lnID0gaGVhZGVyc1tcIngtc2hvcGlmeS1obWFjLXNoYTI1NlwiXTtcblx0XHRpZiAoIXNpZykge1xuXHRcdFx0cmV0dXJuIHsgb2s6IGZhbHNlLCByZWFzb246IFwibWlzc2luZ19zaWduYXR1cmVcIiwgbWVzc2FnZTogXCJTaG9waWZ5OiBYLVNob3BpZnktSG1hYy1TaGEyNTYgaGVhZGVyIG1pc3NpbmdcIiB9O1xuXHRcdH1cblx0XHRjb25zdCBleHBlY3RlZCA9IGhtYWNCYXNlNjQoXCJzaGEyNTZcIiwgc2VjcmV0LCByYXdCb2R5KTtcblx0XHRpZiAoIXNhZmVFcXVhbFN0cmluZyhzaWcsIGV4cGVjdGVkKSkge1xuXHRcdFx0cmV0dXJuIHsgb2s6IGZhbHNlLCByZWFzb246IFwic2lnbmF0dXJlX21pc21hdGNoXCIsIG1lc3NhZ2U6IFwiU2hvcGlmeTogc2lnbmF0dXJlIG1pc21hdGNoXCIgfTtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdG9rOiB0cnVlLFxuXHRcdFx0ZXZlbnRJZDogaGVhZGVyc1tcIngtc2hvcGlmeS13ZWJob29rLWlkXCJdID8/IFwiXCIsXG5cdFx0XHRldmVudFR5cGU6IGhlYWRlcnNbXCJ4LXNob3BpZnktdG9waWNcIl0gPz8gXCJ1bmtub3duXCIsXG5cdFx0fTtcblx0fSxcbn07XG5cbmV4cG9ydCBjb25zdCBzdml4VmVyaWZpZXI6IFZlcmlmaWVyID0ge1xuXHR2ZXJpZnkoeyBoZWFkZXJzLCByYXdCb2R5LCBwYXJzZWRCb2R5LCBzZWNyZXQsIHRvbGVyYW5jZVNlYyB9KSB7XG5cdFx0aWYgKCFzZWNyZXQpIHJldHVybiB7IG9rOiBmYWxzZSwgcmVhc29uOiBcIm1pc3Npbmdfc2VjcmV0XCIsIG1lc3NhZ2U6IFwiU3ZpeDogc2VjcmV0IG5vdCBjb25maWd1cmVkXCIgfTtcblx0XHRjb25zdCB3ZWJob29rSWQgPSBoZWFkZXJzW1wid2ViaG9vay1pZFwiXTtcblx0XHRjb25zdCB3ZWJob29rVHMgPSBoZWFkZXJzW1wid2ViaG9vay10aW1lc3RhbXBcIl07XG5cdFx0Y29uc3Qgd2ViaG9va1NpZyA9IGhlYWRlcnNbXCJ3ZWJob29rLXNpZ25hdHVyZVwiXTtcblx0XHRpZiAoIXdlYmhvb2tJZCB8fCAhd2ViaG9va1RzIHx8ICF3ZWJob29rU2lnKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRvazogZmFsc2UsXG5cdFx0XHRcdHJlYXNvbjogXCJtaXNzaW5nX3NpZ25hdHVyZVwiLFxuXHRcdFx0XHRtZXNzYWdlOiBcIlN2aXgvU3RhbmRhcmQgV2ViaG9va3M6IG1pc3Npbmcgd2ViaG9vay1pZCwgd2ViaG9vay10aW1lc3RhbXAsIG9yIHdlYmhvb2stc2lnbmF0dXJlIGhlYWRlclwiLFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0Y29uc3QgdHNOdW0gPSBOdW1iZXIucGFyc2VJbnQod2ViaG9va1RzLCAxMCk7XG5cdFx0aWYgKCFOdW1iZXIuaXNGaW5pdGUodHNOdW0pKSB7XG5cdFx0XHRyZXR1cm4geyBvazogZmFsc2UsIHJlYXNvbjogXCJiYWRfZm9ybWF0XCIsIG1lc3NhZ2U6IFwiU3ZpeDogd2ViaG9vay10aW1lc3RhbXAgaXMgbm90IG51bWVyaWNcIiB9O1xuXHRcdH1cblx0XHRpZiAoIWlzV2l0aGluVG9sZXJhbmNlKHRzTnVtLCB0b2xlcmFuY2VTZWMgfHwgREVGQVVMVF9UT0xFUkFOQ0VfU0VDKSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0b2s6IGZhbHNlLFxuXHRcdFx0XHRyZWFzb246IFwidGltZXN0YW1wX2RyaWZ0XCIsXG5cdFx0XHRcdG1lc3NhZ2U6IGBTdml4OiB0aW1lc3RhbXAgZHJpZnQgZXhjZWVkcyAke3RvbGVyYW5jZVNlYyB8fCBERUZBVUxUX1RPTEVSQU5DRV9TRUN9cyB0b2xlcmFuY2VgLFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0Y29uc3Qgc2lnbmVkID0gYCR7d2ViaG9va0lkfS4ke3dlYmhvb2tUc30uJHtyYXdCb2R5fWA7XG5cdFx0Ly8gU3RyaXAgb3B0aW9uYWwgYHdoc2VjX2AgcHJlZml4IFN2aXggcmVjb21tZW5kcyBmb3Igc2VjcmV0cy5cblx0XHRjb25zdCByYXdTZWNyZXQgPSBzZWNyZXQuc3RhcnRzV2l0aChcIndoc2VjX1wiKSA/IHNlY3JldC5zbGljZShcIndoc2VjX1wiLmxlbmd0aCkgOiBzZWNyZXQ7XG5cdFx0Ly8gU3ZpeCBlbmNvZGVzIHRoZSBzZWNyZXQgYXMgYmFzZTY0IOKAlCBkZWNvZGUgYmVmb3JlIEhNQUMuXG5cdFx0Y29uc3Qgc2VjcmV0QnVmID0gQnVmZmVyLmZyb20ocmF3U2VjcmV0LCBcImJhc2U2NFwiKTtcblx0XHRjb25zdCBleHBlY3RlZCA9IGNyZWF0ZUhtYWMoXCJzaGEyNTZcIiwgc2VjcmV0QnVmKS51cGRhdGUoc2lnbmVkKS5kaWdlc3QoXCJiYXNlNjRcIik7XG5cdFx0Ly8gd2ViaG9vay1zaWduYXR1cmUgbWF5IGluY2x1ZGUgbXVsdGlwbGUgdmVyc2lvbnM6IGB2MSxiYXNlNjQgdjEsYmFzZTY0IC4uLmBcblx0XHRjb25zdCBzaWdzID0gd2ViaG9va1NpZy5zcGxpdChcIiBcIikubWFwKChzKSA9PiB7XG5cdFx0XHRjb25zdCBpZHggPSBzLmluZGV4T2YoXCIsXCIpO1xuXHRcdFx0cmV0dXJuIGlkeCA9PT0gLTEgPyBzIDogcy5zbGljZShpZHggKyAxKTtcblx0XHR9KTtcblx0XHRjb25zdCBtYXRjaGVkID0gc2lncy5zb21lKChzKSA9PiBzYWZlRXF1YWxTdHJpbmcocywgZXhwZWN0ZWQpKTtcblx0XHRpZiAoIW1hdGNoZWQpIHtcblx0XHRcdHJldHVybiB7IG9rOiBmYWxzZSwgcmVhc29uOiBcInNpZ25hdHVyZV9taXNtYXRjaFwiLCBtZXNzYWdlOiBcIlN2aXg6IHNpZ25hdHVyZSBtaXNtYXRjaFwiIH07XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRvazogdHJ1ZSxcblx0XHRcdGV2ZW50SWQ6IHdlYmhvb2tJZCxcblx0XHRcdGV2ZW50VHlwZTogZ2V0RXZlbnRUeXBlRnJvbUJvZHkocGFyc2VkQm9keSkgPz8gXCJ1bmtub3duXCIsXG5cdFx0fTtcblx0fSxcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDdXN0b20gdmVyaWZpZXIg4oCUIGJ1aWx0IGZyb20gdGhlIHdvcmtmbG93J3MgYHNpZ25hdHVyZTogeyAuLi4gfWAgY29uZmlnXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbVNpZ25hdHVyZUNvbmZpZyB7XG5cdHNjaGVtZTogXCJobWFjLXNoYTI1NlwiIHwgXCJobWFjLXNoYTFcIiB8IFwiaG1hYy1zaGE1MTJcIjtcblx0aGVhZGVyOiBzdHJpbmc7XG5cdGZvcm1hdDogc3RyaW5nO1xuXHRzZWNyZXRFbnY6IHN0cmluZztcblx0dG9sZXJhbmNlOiBudW1iZXI7XG5cdHRpbWVzdGFtcEhlYWRlcj86IHN0cmluZztcblx0LyoqXG5cdCAqIFdoZXJlIHRvIHJlYWQgdGhlIHByb3ZpZGVyJ3MgZXZlbnQgaWQgZnJvbSwgZm9yIHJlcGxheS1wcm90ZWN0aW9uIGRlZHVwLlxuXHQgKiBgZXZlbnRJZEhlYWRlcmAgdGFrZXMgcHJlY2VkZW5jZTsgb3RoZXJ3aXNlIGBldmVudElkUGF0aGAgcmVhZHMgYVxuXHQgKiBkb3Qtc2VwYXJhdGVkIHBhdGggZnJvbSB0aGUgcGFyc2VkIGJvZHkgKGUuZy4gYFwiaWRcImAsIGBcImRhdGEuaWRcImApLlxuXHQgKiBXaGVuIG5laXRoZXIgaXMgc2V0IHRoZSB2ZXJpZmllciByZXR1cm5zIGBldmVudElkOiBcIlwiYCBhbmQgd2ViaG9vay1sZXZlbFxuXHQgKiBpZGVtcG90ZW5jeSBpcyBkaXNhYmxlZCAobm8ga2V5IHRvIGRlZHVwIG9uKSDigJQgc2V0IG9uZSB3aGVuIHRoZSBwcm92aWRlclxuXHQgKiByZWRlbGl2ZXJzIChtb3N0IFBTUHMgZG8pLlxuXHQgKi9cblx0ZXZlbnRJZFBhdGg/OiBzdHJpbmc7XG5cdGV2ZW50SWRIZWFkZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEN1c3RvbVZlcmlmaWVyKGNvbmZpZzogQ3VzdG9tU2lnbmF0dXJlQ29uZmlnKTogVmVyaWZpZXIge1xuXHRjb25zdCBhbGdvOiBcInNoYTI1NlwiIHwgXCJzaGExXCIgfCBcInNoYTUxMlwiID1cblx0XHRjb25maWcuc2NoZW1lID09PSBcImhtYWMtc2hhMVwiID8gXCJzaGExXCIgOiBjb25maWcuc2NoZW1lID09PSBcImhtYWMtc2hhNTEyXCIgPyBcInNoYTUxMlwiIDogXCJzaGEyNTZcIjtcblx0Y29uc3QgaGVhZGVyTG93ZXIgPSBjb25maWcuaGVhZGVyLnRvTG93ZXJDYXNlKCk7XG5cdGNvbnN0IHRzSGVhZGVyTG93ZXIgPSBjb25maWcudGltZXN0YW1wSGVhZGVyPy50b0xvd2VyQ2FzZSgpO1xuXHRjb25zdCBldmVudElkSGVhZGVyTG93ZXIgPSBjb25maWcuZXZlbnRJZEhlYWRlcj8udG9Mb3dlckNhc2UoKTtcblxuXHRyZXR1cm4ge1xuXHRcdHZlcmlmeSh7IGhlYWRlcnMsIHJhd0JvZHksIHBhcnNlZEJvZHksIHNlY3JldCwgdG9sZXJhbmNlU2VjIH0pIHtcblx0XHRcdGlmICghc2VjcmV0KSByZXR1cm4geyBvazogZmFsc2UsIHJlYXNvbjogXCJtaXNzaW5nX3NlY3JldFwiLCBtZXNzYWdlOiBgJHtjb25maWcuaGVhZGVyfTogc2VjcmV0IG5vdCBjb25maWd1cmVkYCB9O1xuXHRcdFx0Y29uc3Qgc2lnID0gaGVhZGVyc1toZWFkZXJMb3dlcl07XG5cdFx0XHRpZiAoIXNpZykge1xuXHRcdFx0XHRyZXR1cm4geyBvazogZmFsc2UsIHJlYXNvbjogXCJtaXNzaW5nX3NpZ25hdHVyZVwiLCBtZXNzYWdlOiBgJHtjb25maWcuaGVhZGVyfTogaGVhZGVyIG1pc3NpbmdgIH07XG5cdFx0XHR9XG5cblx0XHRcdGxldCBzaWduZWRTdHJpbmcgPSByYXdCb2R5O1xuXHRcdFx0aWYgKHRzSGVhZGVyTG93ZXIpIHtcblx0XHRcdFx0Y29uc3QgdHMgPSBoZWFkZXJzW3RzSGVhZGVyTG93ZXJdO1xuXHRcdFx0XHRpZiAoIXRzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdG9rOiBmYWxzZSxcblx0XHRcdFx0XHRcdHJlYXNvbjogXCJtaXNzaW5nX3RpbWVzdGFtcFwiLFxuXHRcdFx0XHRcdFx0bWVzc2FnZTogYCR7Y29uZmlnLnRpbWVzdGFtcEhlYWRlcn06IGhlYWRlciBtaXNzaW5nYCxcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHRzTnVtID0gTnVtYmVyLnBhcnNlSW50KHRzLCAxMCk7XG5cdFx0XHRcdGlmICghTnVtYmVyLmlzRmluaXRlKHRzTnVtKSkge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRvazogZmFsc2UsXG5cdFx0XHRcdFx0XHRyZWFzb246IFwiYmFkX2Zvcm1hdFwiLFxuXHRcdFx0XHRcdFx0bWVzc2FnZTogYCR7Y29uZmlnLnRpbWVzdGFtcEhlYWRlcn06IG5vdCBudW1lcmljYCxcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghaXNXaXRoaW5Ub2xlcmFuY2UodHNOdW0sIHRvbGVyYW5jZVNlYyB8fCBjb25maWcudG9sZXJhbmNlKSkge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRvazogZmFsc2UsXG5cdFx0XHRcdFx0XHRyZWFzb246IFwidGltZXN0YW1wX2RyaWZ0XCIsXG5cdFx0XHRcdFx0XHRtZXNzYWdlOiBgVGltZXN0YW1wIGRyaWZ0IGV4Y2VlZHMgJHt0b2xlcmFuY2VTZWMgfHwgY29uZmlnLnRvbGVyYW5jZX1zIHRvbGVyYW5jZWAsXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzaWduZWRTdHJpbmcgPSBgJHt0c30uJHtyYXdCb2R5fWA7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGhleCA9IGhtYWNIZXgoYWxnbywgc2VjcmV0LCBzaWduZWRTdHJpbmcpO1xuXHRcdFx0Y29uc3QgYmFzZTY0ID0gaG1hY0Jhc2U2NChhbGdvLCBzZWNyZXQsIHNpZ25lZFN0cmluZyk7XG5cdFx0XHRjb25zdCBleHBlY3RlZCA9IGNvbmZpZy5mb3JtYXQucmVwbGFjZShcIntoZXh9XCIsIGhleCkucmVwbGFjZShcIntiYXNlNjR9XCIsIGJhc2U2NCk7XG5cblx0XHRcdGlmICghc2FmZUVxdWFsU3RyaW5nKHNpZywgZXhwZWN0ZWQpKSB7XG5cdFx0XHRcdHJldHVybiB7IG9rOiBmYWxzZSwgcmVhc29uOiBcInNpZ25hdHVyZV9taXNtYXRjaFwiLCBtZXNzYWdlOiBgJHtjb25maWcuaGVhZGVyfTogc2lnbmF0dXJlIG1pc21hdGNoYCB9O1xuXHRcdFx0fVxuXHRcdFx0Ly8gUmVzb2x2ZSB0aGUgZXZlbnQgaWQgZm9yIHJlcGxheS1wcm90ZWN0aW9uOiBoZWFkZXIgd2lucywgdGhlbiBib2R5XG5cdFx0XHQvLyBwYXRoLCB0aGVuIFwiXCIgKGlkZW1wb3RlbmN5IGRpc2FibGVkIOKAlCBubyBrZXkgdG8gZGVkdXAgb24pLlxuXHRcdFx0bGV0IGV2ZW50SWQgPSBcIlwiO1xuXHRcdFx0aWYgKGV2ZW50SWRIZWFkZXJMb3dlcikge1xuXHRcdFx0XHRldmVudElkID0gaGVhZGVyc1tldmVudElkSGVhZGVyTG93ZXJdID8/IFwiXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbmZpZy5ldmVudElkUGF0aCkge1xuXHRcdFx0XHRldmVudElkID0gZ2V0QnlQYXRoKHBhcnNlZEJvZHksIGNvbmZpZy5ldmVudElkUGF0aCkgPz8gXCJcIjtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG9rOiB0cnVlLFxuXHRcdFx0XHRldmVudElkLFxuXHRcdFx0XHRldmVudFR5cGU6IGdldEV2ZW50VHlwZUZyb21Cb2R5KHBhcnNlZEJvZHkpID8/IFwidW5rbm93blwiLFxuXHRcdFx0fTtcblx0XHR9LFxuXHR9O1xufVxuXG5leHBvcnQgY29uc3QgQlVJTFRJTl9WRVJJRklFUlM6IFJlY29yZDxzdHJpbmcsIFZlcmlmaWVyPiA9IHtcblx0Z2l0aHViOiBnaXRodWJWZXJpZmllcixcblx0c3RyaXBlOiBzdHJpcGVWZXJpZmllcixcblx0c2xhY2s6IHNsYWNrVmVyaWZpZXIsXG5cdHNob3BpZnk6IHNob3BpZnlWZXJpZmllcixcblx0c3ZpeDogc3ZpeFZlcmlmaWVyLFxufTtcbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blokjs/trigger-webhook",
3
- "version": "0.6.20",
3
+ "version": "0.7.0",
4
4
  "files": ["dist"],
5
5
  "description": "Webhook trigger for Blok workflows - supports GitHub, Stripe, Shopify, and custom webhooks",
6
6
  "type": "module",
@@ -15,9 +15,9 @@
15
15
  "author": "Deskree Technologies Inc.",
16
16
  "license": "Apache-2.0",
17
17
  "dependencies": {
18
- "@blokjs/helper": "^0.6.20",
19
- "@blokjs/runner": "^0.6.20",
20
- "@blokjs/shared": "^0.6.20",
18
+ "@blokjs/helper": "^0.7.0",
19
+ "@blokjs/runner": "^0.7.0",
20
+ "@blokjs/shared": "^0.7.0",
21
21
  "@opentelemetry/api": "^1.9.0",
22
22
  "hono": "^4.11.7",
23
23
  "uuid": "^11.1.0"