@koobiq/components 18.37.0 → 18.38.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/core/locales/en-US.d.ts +6 -0
  2. package/core/locales/es-LA.d.ts +6 -0
  3. package/core/locales/formatters.d.ts +1 -0
  4. package/core/locales/locale-service.d.ts +37 -5
  5. package/core/locales/pt-BR.d.ts +6 -0
  6. package/core/locales/ru-RU.d.ts +6 -0
  7. package/core/locales/tk-TM.d.ts +6 -0
  8. package/core/pop-up/pop-up-trigger.d.ts +3 -1
  9. package/core/pop-up/pop-up.d.ts +1 -0
  10. package/core/validation/validation.d.ts +1 -1
  11. package/esm2022/core/locales/en-US.mjs +7 -1
  12. package/esm2022/core/locales/es-LA.mjs +7 -1
  13. package/esm2022/core/locales/formatters.mjs +4 -3
  14. package/esm2022/core/locales/locale-service.mjs +22 -9
  15. package/esm2022/core/locales/pt-BR.mjs +7 -1
  16. package/esm2022/core/locales/ru-RU.mjs +7 -1
  17. package/esm2022/core/locales/tk-TM.mjs +7 -1
  18. package/esm2022/core/pop-up/pop-up-trigger.mjs +1 -1
  19. package/esm2022/core/pop-up/pop-up.mjs +36 -2
  20. package/esm2022/core/validation/validation.mjs +2 -2
  21. package/esm2022/core/version.mjs +2 -2
  22. package/esm2022/dropdown/dropdown-trigger.directive.mjs +3 -2
  23. package/esm2022/filter-bar/filters.mjs +2 -2
  24. package/esm2022/filter-bar/pipes/pipe-date.mjs +2 -2
  25. package/esm2022/filter-bar/pipes/pipe-datetime.mjs +2 -2
  26. package/esm2022/filter-bar/pipes/pipe-text.mjs +2 -2
  27. package/esm2022/input/input-number.mjs +17 -12
  28. package/esm2022/navbar/navbar-brand.component.mjs +105 -0
  29. package/esm2022/navbar/navbar-item.component.mjs +18 -168
  30. package/esm2022/navbar/navbar-toggle.component.mjs +88 -0
  31. package/esm2022/navbar/navbar.component.mjs +2 -2
  32. package/esm2022/navbar/navbar.module.mjs +4 -2
  33. package/esm2022/navbar/public-api.mjs +3 -1
  34. package/esm2022/navbar/vertical-navbar.component.mjs +28 -6
  35. package/esm2022/notification-center/notification-center.mjs +9 -33
  36. package/esm2022/popover/popover.component.mjs +9 -3
  37. package/esm2022/time-range/time-range.mjs +2 -2
  38. package/esm2022/title/title.directive.mjs +9 -2
  39. package/fesm2022/koobiq-components-core.mjs +90 -13
  40. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  41. package/fesm2022/koobiq-components-dropdown.mjs +2 -1
  42. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  43. package/fesm2022/koobiq-components-filter-bar.mjs +4 -4
  44. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  45. package/fesm2022/koobiq-components-input.mjs +16 -11
  46. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  47. package/fesm2022/koobiq-components-navbar.mjs +789 -739
  48. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  49. package/fesm2022/koobiq-components-notification-center.mjs +8 -32
  50. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  51. package/fesm2022/koobiq-components-popover.mjs +8 -2
  52. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  53. package/fesm2022/koobiq-components-time-range.mjs +1 -1
  54. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  55. package/fesm2022/koobiq-components-title.mjs +8 -1
  56. package/fesm2022/koobiq-components-title.mjs.map +1 -1
  57. package/input/input-number.d.ts +3 -3
  58. package/navbar/_navbar-item_vertical.scss +44 -53
  59. package/navbar/_navbar-theme.scss +14 -35
  60. package/navbar/navbar-brand.component.d.ts +39 -0
  61. package/navbar/navbar-brand.scss +78 -48
  62. package/navbar/navbar-divider.scss +1 -1
  63. package/navbar/navbar-item.component.d.ts +4 -36
  64. package/navbar/navbar-toggle.component.d.ts +23 -0
  65. package/navbar/navbar-toggle.scss +64 -0
  66. package/navbar/navbar-tokens.scss +1 -0
  67. package/navbar/navbar.module.d.ts +8 -6
  68. package/navbar/public-api.d.ts +2 -0
  69. package/navbar/vertical-navbar.component.d.ts +20 -2
  70. package/navbar/vertical-navbar.scss +14 -10
  71. package/notification-center/notification-center.d.ts +12 -9
  72. package/package.json +4 -4
  73. package/popover/popover.component.d.ts +8 -1
  74. package/schematics/ng-add/index.js +2 -2
  75. package/title/title.directive.d.ts +2 -0
@@ -95,6 +95,7 @@ export class KbqNotificationCenterComponent extends KbqPopUp {
95
95
  if (this.offset !== null && state) {
96
96
  applyPopupMargins(this.renderer, this.elementRef.nativeElement, this.prefix, `${this.offset.toString()}px`);
97
97
  }
98
+ this.setStickPosition();
98
99
  });
99
100
  this.service.changes.subscribe(() => this.changeDetectorRef.markForCheck());
100
101
  this.switcher.focus();
@@ -218,44 +219,15 @@ export class KbqNotificationCenterTrigger extends KbqPopUpTrigger {
218
219
  this.trigger = `${PopUpTriggers.Click}, ${PopUpTriggers.Keydown}`;
219
220
  /** @docs-private */
220
221
  this.originSelector = '.kbq-notification-center';
221
- this.hideIfNotInViewPort = () => {
222
- if (!this.scrollable)
223
- return;
224
- const rect = this.elementRef.nativeElement.getBoundingClientRect();
225
- const containerRect = this.scrollable.getElementRef().nativeElement.getBoundingClientRect();
226
- if (!(rect.bottom >= containerRect.top &&
227
- rect.right >= containerRect.left &&
228
- rect.top <= containerRect.bottom &&
229
- rect.left <= containerRect.right)) {
230
- this.hide();
231
- }
232
- };
233
222
  this.updatePlacementPriority(['right', 'rightBottom', 'rightTop']);
234
223
  }
235
- ngOnInit() {
236
- super.ngOnInit();
237
- this.scrollable
238
- ?.elementScrolled()
239
- .pipe(takeUntilDestroyed(this.destroyRef))
240
- .subscribe(this.hideIfNotInViewPort);
241
- }
242
224
  ngAfterContentInit() {
243
- if (this.closeOnScroll === null) {
244
- this.scrollDispatcher.scrolled().subscribe((scrollable) => {
245
- if (!scrollable?.getElementRef().nativeElement.classList.contains('kbq-hide-nested-popup'))
246
- return;
247
- const parentRects = scrollable.getElementRef().nativeElement.getBoundingClientRect();
248
- const childRects = this.elementRef.nativeElement.getBoundingClientRect();
249
- if (childRects.bottom < parentRects.top || childRects.top > parentRects.bottom) {
250
- this.hide();
251
- }
252
- });
253
- }
254
225
  this.visibleChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((visible) => {
255
226
  if (visible) {
256
227
  // eslint-disable-next-line rxjs/no-nested-subscribe
257
228
  this.preventClosingByInnerScrollSubscription = this.closingActions().subscribe((event) => {
258
- if (event['scrollDispatcher']) {
229
+ if (event && event['scrollDispatcher']) {
230
+ this.instance.setStickPosition();
259
231
  event['kbqPopoverPreventHide'] = true;
260
232
  event['type'] = 'click';
261
233
  }
@@ -311,7 +283,7 @@ export class KbqNotificationCenterTrigger extends KbqPopUpTrigger {
311
283
  return merge(this.overlayRef.outsidePointerEvents(), this.overlayRef.backdropClick(), this.scrollDispatcher.scrolled());
312
284
  }
313
285
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqNotificationCenterTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
314
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.14", type: KbqNotificationCenterTrigger, isStandalone: true, selector: "[kbqNotificationCenterTrigger]", inputs: { placement: ["kbqNotificationCenterPlacement", "placement"], backdropClass: "backdropClass", panelClass: ["kbqNotificationCenterPanelClass", "panelClass"], offset: ["offset", "offset", numberAttribute], popoverMode: ["popoverMode", "popoverMode", booleanAttribute], popoverHeight: "popoverHeight", disabled: ["disabled", "disabled", booleanAttribute] }, outputs: { placementChange: "kbqPlacementChange", visibleChange: "kbqVisibleChange" }, host: { properties: { "class.kbq-notification-center_open": "isOpen", "class.kbq-active": "hasClickTrigger && isOpen" } }, exportAs: ["kbqNotificationCenterTrigger"], usesInheritance: true, ngImport: i0 }); }
286
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.14", type: KbqNotificationCenterTrigger, isStandalone: true, selector: "[kbqNotificationCenterTrigger]", inputs: { placement: ["kbqNotificationCenterPlacement", "placement"], backdropClass: "backdropClass", panelClass: ["kbqNotificationCenterPanelClass", "panelClass"], offset: ["offset", "offset", numberAttribute], popoverMode: ["popoverMode", "popoverMode", booleanAttribute], popoverHeight: "popoverHeight", disabled: ["disabled", "disabled", booleanAttribute], stickToWindow: "stickToWindow", container: "container" }, outputs: { placementChange: "kbqPlacementChange", visibleChange: "kbqVisibleChange" }, host: { properties: { "class.kbq-notification-center_open": "isOpen", "class.kbq-active": "hasClickTrigger && isOpen" } }, exportAs: ["kbqNotificationCenterTrigger"], usesInheritance: true, ngImport: i0 }); }
315
287
  }
316
288
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqNotificationCenterTrigger, decorators: [{
317
289
  type: Directive,
@@ -343,6 +315,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
343
315
  }], disabled: [{
344
316
  type: Input,
345
317
  args: [{ transform: booleanAttribute }]
318
+ }], stickToWindow: [{
319
+ type: Input
320
+ }], container: [{
321
+ type: Input
346
322
  }], placementChange: [{
347
323
  type: Output,
348
324
  args: ['kbqPlacementChange']
@@ -350,4 +326,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
350
326
  type: Output,
351
327
  args: ['kbqVisibleChange']
352
328
  }] } });
353
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWNlbnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uLWNlbnRlci9ub3RpZmljYXRpb24tY2VudGVyLnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9ub3RpZmljYXRpb24tY2VudGVyL25vdGlmaWNhdGlvbi1jZW50ZXIuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBR0gsT0FBTyxFQUdWLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGNBQWMsRUFDZCxLQUFLLEVBRUwsTUFBTSxFQUdOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixlQUFlLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZFLE9BQU8sRUFDSCxXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLFFBQVEsRUFDUixlQUFlLEVBQ2YsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixVQUFVLEVBQ1YsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixjQUFjLEVBQ2pCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFF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b0JBQW9CO0lBQ3BCLGNBQWM7UUFDVixPQUFPLEtBQUssQ0FDUixJQUFJLENBQUMsVUFBVyxDQUFDLG9CQUFvQixFQUFFLEVBQ3ZDLElBQUksQ0FBQyxVQUFXLENBQUMsYUFBYSxFQUFFLEVBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FDbkMsQ0FBQztJQUNOLENBQUM7a0lBM05RLDRCQUE0QjtzSEFBNUIsNEJBQTRCLG9RQTBDakIsZUFBZSwrQ0FHZixnQkFBZ0Isc0VBK0JoQixnQkFBZ0I7OzRGQTVFM0IsNEJBQTRCO2tCQVR4QyxTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsZ0NBQWdDO29CQUMxQyxRQUFRLEVBQUUsOEJBQThCO29CQUN4QyxJQUFJLEVBQUU7d0JBQ0Ysc0NBQXNDLEVBQUUsUUFBUTt3QkFDaEQsb0JBQW9CLEVBQUUsMkJBQTJCO3FCQUNwRDtpQkFDSjt3REFrQzRDLFNBQVM7c0JBQWpELEtBQUs7dUJBQUMsZ0NBQWdDO2dCQUc5QixhQUFhO3NCQUFyQixLQUFLO2dCQUdvQyxVQUFVO3NCQUFuRCxLQUFLO3VCQUFDLGlDQUFpQztnQkFHRCxNQUFNO3NCQUE1QyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFJakMsV0FBVztzQkFEZCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQWdCbEMsYUFBYTtzQkFEaEIsS0FBSztnQkFpQkYsUUFBUTtzQkFEWCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQW1CQyxlQUFlO3NCQUFyRCxNQUFNO3VCQUFDLG9CQUFvQjtnQkFHUyxhQUFhO3NCQUFqRCxNQUFNO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICAgIENka1Njcm9sbGFibGUsXG4gICAgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LFxuICAgIE92ZXJsYXksXG4gICAgT3ZlcmxheUNvbmZpZyxcbiAgICBTY3JvbGxTdHJhdGVneVxufSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERpcmVjdGl2ZSxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0aW9uVG9rZW4sXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBUeXBlLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIGluamVjdCxcbiAgICBudW1iZXJBdHRyaWJ1dGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBLYnFCYWRnZU1vZHVsZSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9iYWRnZSc7XG5pbXBvcnQgeyBLYnFCdXR0b24sIEticUJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHtcbiAgICBEYXRlQWRhcHRlcixcbiAgICBLQlFfTE9DQUxFX1NFUlZJQ0UsXG4gICAgS2JxUG9wVXAsXG4gICAgS2JxUG9wVXBUcmlnZ2VyLFxuICAgIFBPU0lUSU9OX1RPX0NTU19NQVAsXG4gICAgUG9wVXBQbGFjZW1lbnRzLFxuICAgIFBvcFVwU2l6ZXMsXG4gICAgUG9wVXBUcmlnZ2VycyxcbiAgICBhcHBseVBvcHVwTWFyZ2lucyxcbiAgICBydVJVTG9jYWxlRGF0YVxufSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvY29yZSc7XG5pbXBvcnQgeyBLYnFEaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2RpdmlkZXInO1xuaW1wb3J0IHsgS2JxRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHsgS2JxSWNvbk1vZHVsZSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9pY29uJztcbmltcG9ydCB7IEticUxvYWRlck92ZXJsYXlNb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvbG9hZGVyLW92ZXJsYXknO1xuaW1wb3J0IHsgS2JxU2Nyb2xsYmFyLCBLYnFTY3JvbGxiYXJNb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvc2Nyb2xsYmFyJztcbmltcG9ydCB7IEticVRvb2xUaXBNb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvdG9vbHRpcCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBLYnFOb3RpZmljYXRpb25DZW50ZXJBbmltYXRpb25zIH0gZnJvbSAnLi9ub3RpZmljYXRpb24tY2VudGVyLWFuaW1hdGlvbnMnO1xuaW1wb3J0IHsgS2JxTm90aWZpY2F0aW9uQ2VudGVyU2VydmljZSB9IGZyb20gJy4vbm90aWZpY2F0aW9uLWNlbnRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEticU5vdGlmaWNhdGlvbkl0ZW1Db21wb25lbnQgfSBmcm9tICcuL25vdGlmaWNhdGlvbi1pdGVtJztcblxuY29uc3QgZGVmYXVsdE9mZnNldFggPSA4O1xuXG4vKipkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2Ygbm90aWZpY2F0aW9uLWNlbnRlciAqL1xuZXhwb3J0IGNvbnN0IEtCUV9OT1RJRklDQVRJT05fQ0VOVEVSX0RFRkFVTFRfQ09ORklHVVJBVElPTiA9IHJ1UlVMb2NhbGVEYXRhLm5vdGlmaWNhdGlvbkNlbnRlcjtcblxuLyoqIEluamVjdGlvbiBUb2tlbiBmb3IgcHJvdmlkaW5nIGNvbmZpZ3VyYXRpb24gb2Ygbm90aWZpY2F0aW9uLWNlbnRlciAqL1xuZXhwb3J0IGNvbnN0IEtCUV9OT1RJRklDQVRJT05fQ0VOVEVSX0NPTkZJR1VSQVRJT04gPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ0ticU5vdGlmaWNhdGlvbkNlbnRlckNvbmZpZ3VyYXRpb24nKTtcblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBjb25zdCBLQlFfTk9USUZJQ0FUSU9OX0NFTlRFUl9TQ1JPTExfU1RSQVRFR1kgPSBuZXcgSW5qZWN0aW9uVG9rZW48KCkgPT4gU2Nyb2xsU3RyYXRlZ3k+KFxuICAgICdrYnEtbm90aWZpY2F0aW9uLWNlbnRlci1zY3JvbGwtc3RyYXRlZ3knXG4pO1xuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGticU5vdGlmaWNhdGlvbkNlbnRlclNjcm9sbFN0cmF0ZWd5RmFjdG9yeShvdmVybGF5OiBPdmVybGF5KTogKCkgPT4gU2Nyb2xsU3RyYXRlZ3kge1xuICAgIHJldHVybiAoKSA9PiBvdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbih7IHNjcm9sbFRocm90dGxlOiAyMCB9KTtcbn1cblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBjb25zdCBLQlFfTk9USUZJQ0FUSU9OX0NFTlRFUl9TQ1JPTExfU1RSQVRFR1lfRkFDVE9SWV9QUk9WSURFUiA9IHtcbiAgICBwcm92aWRlOiBLQlFfTk9USUZJQ0FUSU9OX0NFTlRFUl9TQ1JPTExfU1RSQVRFR1ksXG4gICAgZGVwczogW092ZXJsYXldLFxuICAgIHVzZUZhY3Rvcnk6IGticU5vdGlmaWNhdGlvbkNlbnRlclNjcm9sbFN0cmF0ZWd5RmFjdG9yeVxufTtcblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdrYnEtbm90aWZpY2F0aW9uLWNlbnRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL25vdGlmaWNhdGlvbi1jZW50ZXIuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbm90aWZpY2F0aW9uLWNlbnRlci5zY3NzJ10sXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ticS1ub3RpZmljYXRpb24tY2VudGVyJyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtbm90aWZpY2F0aW9uLWNlbnRlcl9wb3BvdmVyXSc6ICdwb3BvdmVyTW9kZScsXG4gICAgICAgICcoa2V5ZG93bi5lc2NhcGUpJzogJ2VzY2FwZUhhbmRsZXIoKSdcbiAgICB9LFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBLYnFJY29uTW9kdWxlLFxuICAgICAgICBLYnFCYWRnZU1vZHVsZSxcbiAgICAgICAgS2JxU2Nyb2xsYmFyTW9kdWxlLFxuICAgICAgICBLYnFCdXR0b25Nb2R1bGUsXG4gICAgICAgIEticURpdmlkZXJNb2R1bGUsXG4gICAgICAgIEticURyb3Bkb3duTW9kdWxlLFxuICAgICAgICBLYnFUb29sVGlwTW9kdWxlLFxuICAgICAgICBBc3luY1BpcGUsXG4gICAgICAgIEticU5vdGlmaWNhdGlvbkl0ZW1Db21wb25lbnQsXG4gICAgICAgIEticUxvYWRlck92ZXJsYXlNb2R1bGVcbiAgICBdLFxuICAgIGFuaW1hdGlvbnM6IFtLYnFOb3RpZmljYXRpb25DZW50ZXJBbmltYXRpb25zLnN0YXRlXVxufSlcbmV4cG9ydCBjbGFzcyBLYnFOb3RpZmljYXRpb25DZW50ZXJDb21wb25lbnQgZXh0ZW5kcyBLYnFQb3BVcCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBsb2NhbGVTZXJ2aWNlID0gaW5qZWN0KEtCUV9MT0NBTEVfU0VSVklDRSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkYXRlQWRhcHRlciA9IGluamVjdChEYXRlQWRhcHRlcik7XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VydmljZSA9IGluamVjdChLYnFOb3RpZmljYXRpb25DZW50ZXJTZXJ2aWNlKTtcblxuICAgIEBWaWV3Q2hpbGQoS2JxU2Nyb2xsYmFyKSBwcml2YXRlIHNjcm9sbENvbnRhaW5lcjogS2JxU2Nyb2xsYmFyO1xuXG4gICAgcmVhZG9ubHkgZXh0ZXJuYWxDb25maWd1cmF0aW9uID0gaW5qZWN0KEtCUV9OT1RJRklDQVRJT05fQ0VOVEVSX0NPTkZJR1VSQVRJT04sIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgICBjb25maWd1cmF0aW9uO1xuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcm90ZWN0ZWQgcG9wb3Zlck1vZGU6IGJvb2xlYW47XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHByb3RlY3RlZCBpc1RvcE92ZXJmbG93OiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcm90ZWN0ZWQgaXNCb3R0b21PdmVyZmxvdzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIGxvY2FsaXplZCBkYXRhXG4gICAgICogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGdldCBsb2NhbGVEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcHJlZml4ID0gJ2ticS1ub3RpZmljYXRpb24tY2VudGVyJztcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHRyaWdnZXI6IEticU5vdGlmaWNhdGlvbkNlbnRlclRyaWdnZXI7XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBpc1RyYXBGb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQFZpZXdDaGlsZCgnbm90aWZpY2F0aW9uU3dpdGNoZXInKSBzd2l0Y2hlcjogS2JxQnV0dG9uO1xuXG4gICAgZ2V0IHBvcG92ZXJIZWlnaHQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcG92ZXJIZWlnaHQ7XG4gICAgfVxuXG4gICAgc2V0IHBvcG92ZXJIZWlnaHQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9wb3BvdmVySGVpZ2h0ID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcG9wb3ZlckhlaWdodDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5sb2NhbGVTZXJ2aWNlPy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSh0aGlzLnVwZGF0ZUxvY2FsZVBhcmFtcyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmxvY2FsZVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdERlZmF1bHRQYXJhbXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLnN1YnNjcmliZSgoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9mZnNldCAhPT0gbnVsbCAmJiBzdGF0ZSkge1xuICAgICAgICAgICAgICAgIGFwcGx5UG9wdXBNYXJnaW5zKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVmaXgsXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMub2Zmc2V0IS50b1N0cmluZygpfXB4YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKTtcblxuICAgICAgICB0aGlzLnN3aXRjaGVyLmZvY3VzKCk7XG5cbiAgICAgICAgc2V0VGltZW91dCh0aGlzLmNoZWNrT3ZlcmZsb3cpO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgdXBkYXRlQ2xhc3NNYXAocGxhY2VtZW50OiBzdHJpbmcsIGN1c3RvbUNsYXNzOiBzdHJpbmcsIHNpemU6IFBvcFVwU2l6ZXMpIHtcbiAgICAgICAgc3VwZXIudXBkYXRlQ2xhc3NNYXAocGxhY2VtZW50LCBjdXN0b21DbGFzcywgeyBbYCR7dGhpcy5wcmVmaXh9XyR7c2l6ZX1gXTogISFzaXplIH0pO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgdXBkYXRlVHJhcEZvY3VzKGlzVHJhcEZvY3VzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNUcmFwRm9jdXMgPSBpc1RyYXBGb2N1cztcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGVzY2FwZUhhbmRsZXIoKSB7XG4gICAgICAgIHRoaXMuaGlkZSgwKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2hlY2tPdmVyZmxvdyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgbmF0aXZlRWxlbWVudCA9IHRoaXMuc2Nyb2xsQ29udGFpbmVyLmNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIG9mZnNldEhlaWdodCwgc2Nyb2xsSGVpZ2h0IH0gPSBuYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIHRoaXMuaXNUb3BPdmVyZmxvdyA9IHNjcm9sbFRvcCA+IDA7XG5cbiAgICAgICAgdGhpcy5pc0JvdHRvbU92ZXJmbG93ID0gc2Nyb2xsVG9wICsgb2Zmc2V0SGVpZ2h0IDwgc2Nyb2xsSGVpZ2h0O1xuXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgdXBkYXRlTG9jYWxlUGFyYW1zID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSB0aGlzLmV4dGVybmFsQ29uZmlndXJhdGlvbiB8fCB0aGlzLmxvY2FsZVNlcnZpY2U/LmdldFBhcmFtcygnbm90aWZpY2F0aW9uQ2VudGVyJyk7XG5cbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBpbml0RGVmYXVsdFBhcmFtcygpIHtcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gS0JRX05PVElGSUNBVElPTl9DRU5URVJfREVGQVVMVF9DT05GSUdVUkFUSU9OO1xuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ1trYnFOb3RpZmljYXRpb25DZW50ZXJUcmlnZ2VyXScsXG4gICAgZXhwb3J0QXM6ICdrYnFOb3RpZmljYXRpb25DZW50ZXJUcmlnZ2VyJyxcbiAgICBob3N0OiB7XG4gICAgICAgICdbY2xhc3Mua2JxLW5vdGlmaWNhdGlvbi1jZW50ZXJfb3Blbl0nOiAnaXNPcGVuJyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtYWN0aXZlXSc6ICdoYXNDbGlja1RyaWdnZXIgJiYgaXNPcGVuJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgS2JxTm90aWZpY2F0aW9uQ2VudGVyVHJpZ2dlclxuICAgIGV4dGVuZHMgS2JxUG9wVXBUcmlnZ2VyPEticU5vdGlmaWNhdGlvbkNlbnRlckNvbXBvbmVudD5cbiAgICBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uSW5pdFxue1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcHJvdGVjdGVkIHNjcm9sbFN0cmF0ZWd5OiAoKSA9PiBTY3JvbGxTdHJhdGVneSA9IGluamVjdChLQlFfTk9USUZJQ0FUSU9OX0NFTlRFUl9TQ1JPTExfU1RSQVRFR1kpO1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlcnZpY2UgPSBpbmplY3QoS2JxTm90aWZpY2F0aW9uQ2VudGVyU2VydmljZSk7XG5cbiAgICAvLyBub3QgdXNlZFxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgYXJyb3c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGN1c3RvbUNsYXNzOiBzdHJpbmc7XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcml2YXRlIGhhc0JhY2tkcm9wOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcml2YXRlIHNpemU6IFBvcFVwU2l6ZXMgPSBQb3BVcFNpemVzLk1lZGl1bTtcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGNvbnRlbnQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBoZWFkZXI6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBmb290ZXI6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcml2YXRlIGNsb3NlT25TY3JvbGw6IG51bGw7XG5cbiAgICAvKiogTnVtYmVyIG9mIHVucmVhZCBub3RpZmljYXRpb25zICovXG4gICAgZ2V0IHVucmVhZEl0ZW1zQ291bnRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS51bnJlYWRJdGVtc0NvdW50ZXI7XG4gICAgfVxuXG4gICAgLyoqIFBsYWNlbWVudCBvZiBwb3BVcCAqL1xuICAgIEBJbnB1dCgna2JxTm90aWZpY2F0aW9uQ2VudGVyUGxhY2VtZW50JykgcGxhY2VtZW50OiBQb3BVcFBsYWNlbWVudHMgPSBQb3BVcFBsYWNlbWVudHMuUmlnaHQ7XG5cbiAgICAvKiogQ2xhc3MgdGhhdCB3aWxsIGJlIHVzZWQgaW4gdGhlIGJhY2tncm91bmQgKi9cbiAgICBASW5wdXQoKSBiYWNrZHJvcENsYXNzOiBzdHJpbmcgPSAnY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AnO1xuXG4gICAgLyoqIENsYXNzIHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSBwYW5lbCAqL1xuICAgIEBJbnB1dCgna2JxTm90aWZpY2F0aW9uQ2VudGVyUGFuZWxDbGFzcycpIHBhbmVsQ2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBPZmZzZXQgb2YgcG9wVXAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBvZmZzZXQ6IG51bWJlciB8IG51bGwgPSBkZWZhdWx0T2Zmc2V0WDtcblxuICAgIC8qKiBVc2UgcG9wb3ZlciBvciBub3QgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBnZXQgcG9wb3Zlck1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wb3BvdmVyTW9kZTtcbiAgICB9XG5cbiAgICBzZXQgcG9wb3Zlck1vZGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fcG9wb3Zlck1vZGUgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLnBsYWNlbWVudCA9IFBvcFVwUGxhY2VtZW50cy5Cb3R0b207XG4gICAgICAgIHRoaXMudXBkYXRlUGxhY2VtZW50UHJpb3JpdHkoWydib3R0b21DZW50ZXInLCAnYm90dG9tTGVmdCcsICdib3R0b21SaWdodCddKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wb3BvdmVyTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFNldCBoZWlnaHQgb2YgcG9wb3Zlci4gRGVmYXVsdCBpcyBjYWxjKDEwMHZoIC0gNDhweCkuIDQ4cHggLSBoZWlnaHQgb2YgbmF2YmFyICovXG4gICAgQElucHV0KClcbiAgICBnZXQgcG9wb3ZlckhlaWdodCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9wb3ZlckhlaWdodDtcbiAgICB9XG5cbiAgICBzZXQgcG9wb3ZlckhlaWdodCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJIZWlnaHQgPSB2YWx1ZTtcblxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8ucG9wb3ZlckhlaWdodCkge1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5wb3BvdmVySGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9wb3BvdmVySGVpZ2h0OiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgdHJpZ2dlciBpcyBkaXNhYmxlZC4gKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBzZXQgZGlzYWJsZWQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuXG4gICAgICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGdldCBoYXNDbGlja1RyaWdnZXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyaWdnZXIuaW5jbHVkZXMoUG9wVXBUcmlnZ2Vycy5DbGljayk7XG4gICAgfVxuXG4gICAgLyoqIEVtaXRzIGEgY2hhbmdlIGV2ZW50IHdoZW5ldmVyIHRoZSBwbGFjZW1lbnQgc3RhdGUgY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KCdrYnFQbGFjZW1lbnRDaGFuZ2UnKSByZWFkb25seSBwbGFjZW1lbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKiogRW1pdHMgYSBjaGFuZ2UgZXZlbnQgd2hlbmV2ZXIgdGhlIHZpc2libGUgc3RhdGUgY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KCdrYnFWaXNpYmxlQ2hhbmdlJykgcmVhZG9ubHkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgdHJpZ2dlcjogc3RyaW5nID0gYCR7UG9wVXBUcmlnZ2Vycy5DbGlja30sICR7UG9wVXBUcmlnZ2Vycy5LZXlkb3dufWA7XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHByb3RlY3RlZCBvcmlnaW5TZWxlY3RvciA9ICcua2JxLW5vdGlmaWNhdGlvbi1jZW50ZXInO1xuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IG92ZXJsYXlDb25maWcoKTogT3ZlcmxheUNvbmZpZyB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRQYW5lbENsYXNzID0gJ2ticS1ub3RpZmljYXRpb24tY2VudGVyX19wYW5lbCc7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6IHRoaXMucGFuZWxDbGFzcyA/IFtkZWZhdWx0UGFuZWxDbGFzcywgdGhpcy5wYW5lbENsYXNzXSA6IGRlZmF1bHRQYW5lbENsYXNzLFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IHRoaXMuaGFzQmFja2Ryb3AsXG4gICAgICAgICAgICBiYWNrZHJvcENsYXNzOiB0aGlzLmJhY2tkcm9wQ2xhc3NcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHByb3RlY3RlZCBwcmV2ZW50Q2xvc2luZ0J5SW5uZXJTY3JvbGxTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlUGxhY2VtZW50UHJpb3JpdHkoWydyaWdodCcsICdyaWdodEJvdHRvbScsICdyaWdodFRvcCddKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICB0aGlzLnNjcm9sbGFibGVcbiAgICAgICAgICAgID8uZWxlbWVudFNjcm9sbGVkKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLmhpZGVJZk5vdEluVmlld1BvcnQpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VPblNjcm9sbCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKCkuc3Vic2NyaWJlKChzY3JvbGxhYmxlOiBDZGtTY3JvbGxhYmxlIHwgdm9pZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghc2Nyb2xsYWJsZT8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdrYnEtaGlkZS1uZXN0ZWQtcG9wdXAnKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50UmVjdHMgPSBzY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkUmVjdHMgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgICAgICAgIGlmIChjaGlsZFJlY3RzLmJvdHRvbSA8IHBhcmVudFJlY3RzLnRvcCB8fCBjaGlsZFJlY3RzLnRvcCA+IHBhcmVudFJlY3RzLmJvdHRvbSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHZpc2libGU6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMvbm8tbmVzdGVkLXN1YnNjcmliZVxuICAgICAgICAgICAgICAgIHRoaXMucHJldmVudENsb3NpbmdCeUlubmVyU2Nyb2xsU3Vic2NyaXB0aW9uID0gdGhpcy5jbG9zaW5nQWN0aW9ucygpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50WydzY3JvbGxEaXNwYXRjaGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50WydrYnFQb3BvdmVyUHJldmVudEhpZGUnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudFsndHlwZSddID0gJ2NsaWNrJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZlbnRDbG9zaW5nQnlJbm5lclNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICB1cGRhdGVEYXRhKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHJldHVybjtcblxuICAgICAgICB0aGlzLmluc3RhbmNlLmhlYWRlciA9IHRoaXMuaGVhZGVyO1xuICAgICAgICB0aGlzLmluc3RhbmNlLmNvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UuYXJyb3cgPSB0aGlzLmFycm93O1xuICAgICAgICB0aGlzLmluc3RhbmNlLm9mZnNldCA9IHRoaXMub2Zmc2V0O1xuICAgICAgICB0aGlzLmluc3RhbmNlLmZvb3RlciA9IHRoaXMuZm9vdGVyO1xuICAgICAgICB0aGlzLmluc3RhbmNlLnBvcG92ZXJNb2RlID0gdGhpcy5wb3BvdmVyTW9kZTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5wb3BvdmVySGVpZ2h0ID0gdGhpcy5wb3BvdmVySGVpZ2h0O1xuXG4gICAgICAgIHRoaXMuaW5zdGFuY2UudXBkYXRlVHJhcEZvY3VzKHRoaXMudHJpZ2dlciAhPT0gUG9wVXBUcmlnZ2Vycy5Gb2N1cyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFVwZGF0ZXMgdGhlIGN1cnJlbnQgcG9zaXRpb24uXG4gICAgICpcbiAgICAgKiBAZG9jcy1wcml2YXRlICovXG4gICAgdXBkYXRlUG9zaXRpb24ocmVhcHBseVBvc2l0aW9uOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5jcmVhdGVPdmVybGF5KCk7XG5cbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSAodGhpcy5vdmVybGF5UmVmLmdldENvbmZpZygpLnBvc2l0aW9uU3RyYXRlZ3kgYXMgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5KVxuICAgICAgICAgICAgLndpdGhQb3NpdGlvbnModGhpcy5nZXRBZGp1c3RlZFBvc2l0aW9ucygpKVxuICAgICAgICAgICAgLndpdGhQdXNoKHRydWUpO1xuXG4gICAgICAgIGlmIChyZWFwcGx5UG9zaXRpb24pIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcG9zaXRpb24ucmVhcHBseUxhc3RQb3NpdGlvbigpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgZ2V0T3ZlcmxheUhhbmRsZUNvbXBvbmVudFR5cGUoKTogVHlwZTxLYnFOb3RpZmljYXRpb25DZW50ZXJDb21wb25lbnQ+IHtcbiAgICAgICAgcmV0dXJuIEticU5vdGlmaWNhdGlvbkNlbnRlckNvbXBvbmVudDtcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHVwZGF0ZUNsYXNzTWFwKG5ld1BsYWNlbWVudDogc3RyaW5nID0gdGhpcy5wbGFjZW1lbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5pbnN0YW5jZS51cGRhdGVDbGFzc01hcChQT1NJVElPTl9UT19DU1NfTUFQW25ld1BsYWNlbWVudF0sIHRoaXMuY3VzdG9tQ2xhc3MsIHRoaXMuc2l6ZSk7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBjbG9zaW5nQWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIG1lcmdlKFxuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmIS5vdXRzaWRlUG9pbnRlckV2ZW50cygpLFxuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmIS5iYWNrZHJvcENsaWNrKCksXG4gICAgICAgICAgICB0aGlzLnNjcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGlkZUlmTm90SW5WaWV3UG9ydCA9ICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnNjcm9sbGFibGUpIHJldHVybjtcblxuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSB0aGlzLnNjcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICByZWN0LmJvdHRvbSA+PSBjb250YWluZXJSZWN0LnRvcCAmJlxuICAgICAgICAgICAgICAgIHJlY3QucmlnaHQgPj0gY29udGFpbmVyUmVjdC5sZWZ0ICYmXG4gICAgICAgICAgICAgICAgcmVjdC50b3AgPD0gY29udGFpbmVyUmVjdC5ib3R0b20gJiZcbiAgICAgICAgICAgICAgICByZWN0LmxlZnQgPD0gY29udGFpbmVyUmVjdC5yaWdodFxuICAgICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJrYnEtbm90aWZpY2F0aW9uLWNlbnRlci1oZWFkZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwia2JxLW5vdGlmaWNhdGlvbi1jZW50ZXItdGl0bGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImticS1ub3RpZmljYXRpb24tY2VudGVyLXRpdGxlX190ZXh0XCI+e3sgbG9jYWxlRGF0YS5ub3RpZmljYXRpb25zIH19PC9kaXY+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICNub3RpZmljYXRpb25Td2l0Y2hlclxuICAgICAgICAgICAgI2Ryb3Bkb3duVHJpZ2dlcj1cImticURyb3Bkb3duVHJpZ2dlclwiXG4gICAgICAgICAgICBrYnEtYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImticS1ub3RpZmljYXRpb24tY2VudGVyLXRpdGxlX19idXR0b25cIlxuICAgICAgICAgICAgW2ticURyb3Bkb3duVHJpZ2dlckZvcl09XCJub3RpZmljYXRpb25Td2l0Y2hlckRyb3Bkb3duXCJcbiAgICAgICAgICAgIFtrYnFUb29sdGlwXT1cInNlcnZpY2Uuc2lsZW50TW9kZS52YWx1ZSA/IGxvY2FsZURhdGEuZG9Ob3REaXN0dXJiIDogbG9jYWxlRGF0YS5zaG93UG9wVXBOb3RpZmljYXRpb25zXCJcbiAgICAgICAgICAgIFtrYnFUb29sdGlwQXJyb3ddPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2ticVRvb2x0aXBPZmZzZXRdPVwiNFwiXG4gICAgICAgICAgICBba2JxVG9vbHRpcERpc2FibGVkXT1cImRyb3Bkb3duVHJpZ2dlci5vcGVuZWRcIlxuICAgICAgICAgICAgW2ticVN0eWxlXT1cIid0cmFuc3BhcmVudCdcIlxuICAgICAgICAgICAgW2NvbG9yXT1cIidjb250cmFzdCdcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aSBrYnEtaWNvbj1cInt7IHNlcnZpY2Uuc2lsZW50TW9kZS52YWx1ZSA/ICdrYnEtYmVsbC1zbGFzaF8xNicgOiAna2JxLWJlbGxfMTYnIH19XCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwia2JxLW5vdGlmaWNhdGlvbi1jZW50ZXItdG9vbGJhclwiPlxuICAgICAgICBAaWYgKCFzZXJ2aWNlLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBrYnEtYnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJrYnEtbm90aWZpY2F0aW9uLWNlbnRlci10b29sYmFyX19idXR0b25cIlxuICAgICAgICAgICAgICAgIFtrYnFTdHlsZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgICAgICBbY29sb3JdPVwiJ2NvbnRyYXN0J1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlcnZpY2UucmVtb3ZlQWxsKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGticS1pY29uPVwia2JxLXRyYXNoXzE2XCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxrYnEtZGl2aWRlciBbdmVydGljYWxdPVwidHJ1ZVwiIC8+XG4gICAgICAgIH1cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBrYnEtYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImticS1ub3RpZmljYXRpb24tY2VudGVyLXRvb2xiYXJfX2J1dHRvblwiXG4gICAgICAgICAgICBba2JxU3R5bGVdPVwiJ3RyYW5zcGFyZW50J1wiXG4gICAgICAgICAgICBbY29sb3JdPVwiJ2NvbnRyYXN0J1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGlkZSgwKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpIGticS1pY29uPVwia2JxLXhtYXJrXzE2XCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2XG4gICAga2JxLXNjcm9sbGJhclxuICAgIGNsYXNzPVwia2JxLW5vdGlmaWNhdGlvbi1jZW50ZXItY29udGFpbmVyXCJcbiAgICBbY2xhc3Mua2JxLW5vdGlmaWNhdGlvbi1jZW50ZXJfYm90dG9tLW92ZXJmbG93XT1cImlzQm90dG9tT3ZlcmZsb3dcIlxuICAgIChvblNjcm9sbCk9XCJjaGVja092ZXJmbG93KClcIlxuPlxuICAgIEBpZiAoIXNlcnZpY2UuZXJyb3JNb2RlLnZhbHVlKSB7XG4gICAgICAgIEBpZiAoIXNlcnZpY2UubG9hZGluZ01vZGUudmFsdWUpIHtcbiAgICAgICAgICAgIEBmb3IgKGdyb3VwIG9mIHNlcnZpY2UuZ3JvdXBlZEl0ZW1zIHwgYXN5bmM7IHRyYWNrIGdyb3VwKSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImticS1ub3RpZmljYXRpb24tY2VudGVyLXN1Yi1oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Mua2JxLW5vdGlmaWNhdGlvbi1jZW50ZXJfdG9wLW92ZXJmbG93XT1cImlzVG9wT3ZlcmZsb3dcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImticS1ub3RpZmljYXRpb24tY2VudGVyLXN1Yi1oZWFkZXJfX2RhdGVcIj57eyBncm91cC50aXRsZSB9fTwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGticS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwia2JxLW5vdGlmaWNhdGlvbi1jZW50ZXItc3ViLWhlYWRlcl9fYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtrYnFTdHlsZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCInY29udHJhc3QnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtrYnFUb29sdGlwXT1cImxvY2FsZURhdGEucmVtb3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtrYnFUb29sdGlwQXJyb3ddPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlcnZpY2UucmVtb3ZlR3JvdXAoZ3JvdXApXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkga2JxLWljb249XCJrYnEtdHJhc2hfMTZcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBncm91cC5pdGVtczsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICA8a2JxLW5vdGlmaWNhdGlvbi1pdGVtIFtkYXRhXT1cIml0ZW1cIiAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gQGVtcHR5IHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLW5vdGlmaWNhdGlvbi1jZW50ZXItZW1wdHktY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGticS1pY29uLWl0ZW09XCJrYnEtYmVsbF8xNlwiIFtiaWddPVwidHJ1ZVwiIFtjb2xvcl09XCInY29udHJhc3QtZmFkZSdcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIHt7IGxvY2FsZURhdGEubm9Ob3RpZmljYXRpb25zIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGticS1sb2FkZXItb3ZlcmxheSBbdHJhbnNwYXJlbnRdPVwidHJ1ZVwiIC8+XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImticS1ub3RpZmljYXRpb24tY2VudGVyLWVycm9yLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGkga2JxLWljb24taXRlbT1cImticS1iZWxsXzE2XCIgW2JpZ109XCJ0cnVlXCIgW2NvbG9yXT1cIidlcnJvcidcIiBbZmFkZV09XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAge3sgbG9jYWxlRGF0YS5mYWlsZWRUb0xvYWROb3RpZmljYXRpb25zIH19XG4gICAgICAgICAgICA8YnV0dG9uIGticS1idXR0b24gW2ticVN0eWxlXT1cIid0cmFuc3BhcmVudCdcIiBbY29sb3JdPVwiJ3RoZW1lJ1wiIChjbGljayk9XCJzZXJ2aWNlLm9uUmVsb2FkLmVtaXQoKVwiPlxuICAgICAgICAgICAgICAgIHt7IGxvY2FsZURhdGEucmVwZWF0IH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuPC9kaXY+XG5cbjxrYnEtZHJvcGRvd24gI25vdGlmaWNhdGlvblN3aXRjaGVyRHJvcGRvd249XCJrYnFEcm9wZG93blwiPlxuICAgIDxidXR0b24ga2JxLWRyb3Bkb3duLWl0ZW0gKGNsaWNrKT1cInNlcnZpY2Uuc2V0U2lsZW50TW9kZShmYWxzZSlcIj5cbiAgICAgICAgPGkga2JxLWljb249XCJ7eyAhc2VydmljZS5zaWxlbnRNb2RlLnZhbHVlID8gJ2ticS1jaXJjbGUteHNfMTYnIDogJycgfX1cIiBbc3R5bGUubWluLXdpZHRoLnB4XT1cIjE2XCI+PC9pPlxuICAgICAgICB7eyBsb2NhbGVEYXRhLnNob3dQb3BVcE5vdGlmaWNhdGlvbnMgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIGticS1kcm9wZG93bi1pdGVtIChjbGljayk9XCJzZXJ2aWNlLnNldFNpbGVudE1vZGUodHJ1ZSlcIj5cbiAgICAgICAgPGkga2JxLWljb249XCJ7eyBzZXJ2aWNlLnNpbGVudE1vZGUudmFsdWUgPyAna2JxLWNpcmNsZS14c18xNicgOiAnJyB9fVwiIFtzdHlsZS5taW4td2lkdGgucHhdPVwiMTZcIj48L2k+XG4gICAgICAgIHt7IGxvY2FsZURhdGEuZG9Ob3REaXN0dXJiIH19XG4gICAgPC9idXR0b24+XG48L2ticS1kcm9wZG93bj5cbiJdfQ==
329
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWNlbnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uLWNlbnRlci9ub3RpZmljYXRpb24tY2VudGVyLnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9ub3RpZmljYXRpb24tY2VudGVyL25vdGlmaWNhdGlvbi1jZW50ZXIuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQXFDLE9BQU8sRUFBaUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNqSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUdILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osY0FBYyxFQUNkLEtBQUssRUFDTCxNQUFNLEVBR04sU0FBUyxFQUNULGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsTUFBTSxFQUNOLGVBQWUsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkUsT0FBTyxFQUNILFdBQVcsRUFDWCxrQkFBa0IsRUFDbEIsUUFBUSxFQUNSLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLFVBQVUsRUFDVixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDakIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVB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ZUFBZSwrQ0FHZixnQkFBZ0Isc0VBK0JoQixnQkFBZ0I7OzRGQTFFM0IsNEJBQTRCO2tCQVR4QyxTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsZ0NBQWdDO29CQUMxQyxRQUFRLEVBQUUsOEJBQThCO29CQUN4QyxJQUFJLEVBQUU7d0JBQ0Ysc0NBQXNDLEVBQUUsUUFBUTt3QkFDaEQsb0JBQW9CLEVBQUUsMkJBQTJCO3FCQUNwRDtpQkFDSjt3REFnQzRDLFNBQVM7c0JBQWpELEtBQUs7dUJBQUMsZ0NBQWdDO2dCQUc5QixhQUFhO3NCQUFyQixLQUFLO2dCQUdvQyxVQUFVO3NCQUFuRCxLQUFLO3VCQUFDLGlDQUFpQztnQkFHRCxNQUFNO3NCQUE1QyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFJakMsV0FBVztzQkFEZCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQWdCbEMsYUFBYTtzQkFEaEIsS0FBSztnQkFpQkYsUUFBUTtzQkFEWCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQWlCN0IsYUFBYTtzQkFBckIsS0FBSztnQkFRRyxTQUFTO3NCQUFqQixLQUFLO2dCQVFpQyxlQUFlO3NCQUFyRCxNQUFNO3VCQUFDLG9CQUFvQjtnQkFHUyxhQUFhO3NCQUFqRCxNQUFNO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3ksIE92ZXJsYXksIE92ZXJsYXlDb25maWcsIFNjcm9sbFN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBEaXJlY3RpdmUsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdGlvblRva2VuLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBUeXBlLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIGluamVjdCxcbiAgICBudW1iZXJBdHRyaWJ1dGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBLYnFCYWRnZU1vZHVsZSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9iYWRnZSc7XG5pbXBvcnQgeyBLYnFCdXR0b24sIEticUJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHtcbiAgICBEYXRlQWRhcHRlcixcbiAgICBLQlFfTE9DQUxFX1NFUlZJQ0UsXG4gICAgS2JxUG9wVXAsXG4gICAgS2JxUG9wVXBUcmlnZ2VyLFxuICAgIFBPU0lUSU9OX1RPX0NTU19NQVAsXG4gICAgUG9wVXBQbGFjZW1lbnRzLFxuICAgIFBvcFVwU2l6ZXMsXG4gICAgUG9wVXBUcmlnZ2VycyxcbiAgICBhcHBseVBvcHVwTWFyZ2lucyxcbiAgICBydVJVTG9jYWxlRGF0YVxufSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvY29yZSc7XG5pbXBvcnQgeyBLYnFEaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2RpdmlkZXInO1xuaW1wb3J0IHsgS2JxRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHsgS2JxSWNvbk1vZHVsZSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9pY29uJztcbmltcG9ydCB7IEticUxvYWRlck92ZXJsYXlNb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvbG9hZGVyLW92ZXJsYXknO1xuaW1wb3J0IHsgS2JxU2Nyb2xsYmFyLCBLYnFTY3JvbGxiYXJNb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvc2Nyb2xsYmFyJztcbmltcG9ydCB7IEticVRvb2xUaXBNb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvdG9vbHRpcCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBLYnFOb3RpZmljYXRpb25DZW50ZXJBbmltYXRpb25zIH0gZnJvbSAnLi9ub3RpZmljYXRpb24tY2VudGVyLWFuaW1hdGlvbnMnO1xuaW1wb3J0IHsgS2JxTm90aWZpY2F0aW9uQ2VudGVyU2VydmljZSB9IGZyb20gJy4vbm90aWZpY2F0aW9uLWNlbnRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEticU5vdGlmaWNhdGlvbkl0ZW1Db21wb25lbnQgfSBmcm9tICcuL25vdGlmaWNhdGlvbi1pdGVtJztcblxuY29uc3QgZGVmYXVsdE9mZnNldFggPSA4O1xuXG4vKipkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2Ygbm90aWZpY2F0aW9uLWNlbnRlciAqL1xuZXhwb3J0IGNvbnN0IEtCUV9OT1RJRklDQVRJT05fQ0VOVEVSX0RFRkFVTFRfQ09ORklHVVJBVElPTiA9IHJ1UlVMb2NhbGVEYXRhLm5vdGlmaWNhdGlvbkNlbnRlcjtcblxuLyoqIEluamVjdGlvbiBUb2tlbiBmb3IgcHJvdmlkaW5nIGNvbmZpZ3VyYXRpb24gb2Ygbm90aWZpY2F0aW9uLWNlbnRlciAqL1xuZXhwb3J0IGNvbnN0IEtCUV9OT1RJRklDQVRJT05fQ0VOVEVSX0NPTkZJR1VSQVRJT04gPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ0ticU5vdGlmaWNhdGlvbkNlbnRlckNvbmZpZ3VyYXRpb24nKTtcblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBjb25zdCBLQlFfTk9USUZJQ0FUSU9OX0NFTlRFUl9TQ1JPTExfU1RSQVRFR1kgPSBuZXcgSW5qZWN0aW9uVG9rZW48KCkgPT4gU2Nyb2xsU3RyYXRlZ3k+KFxuICAgICdrYnEtbm90aWZpY2F0aW9uLWNlbnRlci1zY3JvbGwtc3RyYXRlZ3knXG4pO1xuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGticU5vdGlmaWNhdGlvbkNlbnRlclNjcm9sbFN0cmF0ZWd5RmFjdG9yeShvdmVybGF5OiBPdmVybGF5KTogKCkgPT4gU2Nyb2xsU3RyYXRlZ3kge1xuICAgIHJldHVybiAoKSA9PiBvdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbih7IHNjcm9sbFRocm90dGxlOiAyMCB9KTtcbn1cblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBjb25zdCBLQlFfTk9USUZJQ0FUSU9OX0NFTlRFUl9TQ1JPTExfU1RSQVRFR1lfRkFDVE9SWV9QUk9WSURFUiA9IHtcbiAgICBwcm92aWRlOiBLQlFfTk9USUZJQ0FUSU9OX0NFTlRFUl9TQ1JPTExfU1RSQVRFR1ksXG4gICAgZGVwczogW092ZXJsYXldLFxuICAgIHVzZUZhY3Rvcnk6IGticU5vdGlmaWNhdGlvbkNlbnRlclNjcm9sbFN0cmF0ZWd5RmFjdG9yeVxufTtcblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdrYnEtbm90aWZpY2F0aW9uLWNlbnRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL25vdGlmaWNhdGlvbi1jZW50ZXIuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbm90aWZpY2F0aW9uLWNlbnRlci5zY3NzJ10sXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ticS1ub3RpZmljYXRpb24tY2VudGVyJyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtbm90aWZpY2F0aW9uLWNlbnRlcl9wb3BvdmVyXSc6ICdwb3BvdmVyTW9kZScsXG4gICAgICAgICcoa2V5ZG93bi5lc2NhcGUpJzogJ2VzY2FwZUhhbmRsZXIoKSdcbiAgICB9LFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBLYnFJY29uTW9kdWxlLFxuICAgICAgICBLYnFCYWRnZU1vZHVsZSxcbiAgICAgICAgS2JxU2Nyb2xsYmFyTW9kdWxlLFxuICAgICAgICBLYnFCdXR0b25Nb2R1bGUsXG4gICAgICAgIEticURpdmlkZXJNb2R1bGUsXG4gICAgICAgIEticURyb3Bkb3duTW9kdWxlLFxuICAgICAgICBLYnFUb29sVGlwTW9kdWxlLFxuICAgICAgICBBc3luY1BpcGUsXG4gICAgICAgIEticU5vdGlmaWNhdGlvbkl0ZW1Db21wb25lbnQsXG4gICAgICAgIEticUxvYWRlck92ZXJsYXlNb2R1bGVcbiAgICBdLFxuICAgIGFuaW1hdGlvbnM6IFtLYnFOb3RpZmljYXRpb25DZW50ZXJBbmltYXRpb25zLnN0YXRlXVxufSlcbmV4cG9ydCBjbGFzcyBLYnFOb3RpZmljYXRpb25DZW50ZXJDb21wb25lbnQgZXh0ZW5kcyBLYnFQb3BVcCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBsb2NhbGVTZXJ2aWNlID0gaW5qZWN0KEtCUV9MT0NBTEVfU0VSVklDRSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkYXRlQWRhcHRlciA9IGluamVjdChEYXRlQWRhcHRlcik7XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VydmljZSA9IGluamVjdChLYnFOb3RpZmljYXRpb25DZW50ZXJTZXJ2aWNlKTtcblxuICAgIEBWaWV3Q2hpbGQoS2JxU2Nyb2xsYmFyKSBwcml2YXRlIHNjcm9sbENvbnRhaW5lcjogS2JxU2Nyb2xsYmFyO1xuXG4gICAgcmVhZG9ubHkgZXh0ZXJuYWxDb25maWd1cmF0aW9uID0gaW5qZWN0KEtCUV9OT1RJRklDQVRJT05fQ0VOVEVSX0NPTkZJR1VSQVRJT04sIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgICBjb25maWd1cmF0aW9uO1xuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcm90ZWN0ZWQgcG9wb3Zlck1vZGU6IGJvb2xlYW47XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHByb3RlY3RlZCBpc1RvcE92ZXJmbG93OiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcm90ZWN0ZWQgaXNCb3R0b21PdmVyZmxvdzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIGxvY2FsaXplZCBkYXRhXG4gICAgICogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGdldCBsb2NhbGVEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcHJlZml4ID0gJ2ticS1ub3RpZmljYXRpb24tY2VudGVyJztcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHRyaWdnZXI6IEticU5vdGlmaWNhdGlvbkNlbnRlclRyaWdnZXI7XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBpc1RyYXBGb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQFZpZXdDaGlsZCgnbm90aWZpY2F0aW9uU3dpdGNoZXInKSBzd2l0Y2hlcjogS2JxQnV0dG9uO1xuXG4gICAgZ2V0IHBvcG92ZXJIZWlnaHQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcG92ZXJIZWlnaHQ7XG4gICAgfVxuXG4gICAgc2V0IHBvcG92ZXJIZWlnaHQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9wb3BvdmVySGVpZ2h0ID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcG9wb3ZlckhlaWdodDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5sb2NhbGVTZXJ2aWNlPy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSh0aGlzLnVwZGF0ZUxvY2FsZVBhcmFtcyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmxvY2FsZVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdERlZmF1bHRQYXJhbXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLnN1YnNjcmliZSgoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9mZnNldCAhPT0gbnVsbCAmJiBzdGF0ZSkge1xuICAgICAgICAgICAgICAgIGFwcGx5UG9wdXBNYXJnaW5zKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVmaXgsXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMub2Zmc2V0IS50b1N0cmluZygpfXB4YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0U3RpY2tQb3NpdGlvbigpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNlcnZpY2UuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSk7XG5cbiAgICAgICAgdGhpcy5zd2l0Y2hlci5mb2N1cygpO1xuXG4gICAgICAgIHNldFRpbWVvdXQodGhpcy5jaGVja092ZXJmbG93KTtcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHVwZGF0ZUNsYXNzTWFwKHBsYWNlbWVudDogc3RyaW5nLCBjdXN0b21DbGFzczogc3RyaW5nLCBzaXplOiBQb3BVcFNpemVzKSB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZUNsYXNzTWFwKHBsYWNlbWVudCwgY3VzdG9tQ2xhc3MsIHsgW2Ake3RoaXMucHJlZml4fV8ke3NpemV9YF06ICEhc2l6ZSB9KTtcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHVwZGF0ZVRyYXBGb2N1cyhpc1RyYXBGb2N1czogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmlzVHJhcEZvY3VzID0gaXNUcmFwRm9jdXM7XG4gICAgfVxuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBlc2NhcGVIYW5kbGVyKCkge1xuICAgICAgICB0aGlzLmhpZGUoMCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNoZWNrT3ZlcmZsb3cgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQgPSB0aGlzLnNjcm9sbENvbnRhaW5lci5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBvZmZzZXRIZWlnaHQsIHNjcm9sbEhlaWdodCB9ID0gbmF0aXZlRWxlbWVudDtcblxuICAgICAgICB0aGlzLmlzVG9wT3ZlcmZsb3cgPSBzY3JvbGxUb3AgPiAwO1xuXG4gICAgICAgIHRoaXMuaXNCb3R0b21PdmVyZmxvdyA9IHNjcm9sbFRvcCArIG9mZnNldEhlaWdodCA8IHNjcm9sbEhlaWdodDtcblxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHVwZGF0ZUxvY2FsZVBhcmFtcyA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gdGhpcy5leHRlcm5hbENvbmZpZ3VyYXRpb24gfHwgdGhpcy5sb2NhbGVTZXJ2aWNlPy5nZXRQYXJhbXMoJ25vdGlmaWNhdGlvbkNlbnRlcicpO1xuXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgaW5pdERlZmF1bHRQYXJhbXMoKSB7XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IEtCUV9OT1RJRklDQVRJT05fQ0VOVEVSX0RFRkFVTFRfQ09ORklHVVJBVElPTjtcbiAgICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdba2JxTm90aWZpY2F0aW9uQ2VudGVyVHJpZ2dlcl0nLFxuICAgIGV4cG9ydEFzOiAna2JxTm90aWZpY2F0aW9uQ2VudGVyVHJpZ2dlcicsXG4gICAgaG9zdDoge1xuICAgICAgICAnW2NsYXNzLmticS1ub3RpZmljYXRpb24tY2VudGVyX29wZW5dJzogJ2lzT3BlbicsXG4gICAgICAgICdbY2xhc3Mua2JxLWFjdGl2ZV0nOiAnaGFzQ2xpY2tUcmlnZ2VyICYmIGlzT3BlbidcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEticU5vdGlmaWNhdGlvbkNlbnRlclRyaWdnZXJcbiAgICBleHRlbmRzIEticVBvcFVwVHJpZ2dlcjxLYnFOb3RpZmljYXRpb25DZW50ZXJDb21wb25lbnQ+XG4gICAgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0XG57XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcm90ZWN0ZWQgc2Nyb2xsU3RyYXRlZ3k6ICgpID0+IFNjcm9sbFN0cmF0ZWd5ID0gaW5qZWN0KEtCUV9OT1RJRklDQVRJT05fQ0VOVEVSX1NDUk9MTF9TVFJBVEVHWSk7XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VydmljZSA9IGluamVjdChLYnFOb3RpZmljYXRpb25DZW50ZXJTZXJ2aWNlKTtcblxuICAgIC8vIG5vdCB1c2VkXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBhcnJvdzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgY3VzdG9tQ2xhc3M6IHN0cmluZztcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHByaXZhdGUgaGFzQmFja2Ryb3A6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHByaXZhdGUgc2l6ZTogUG9wVXBTaXplcyA9IFBvcFVwU2l6ZXMuTWVkaXVtO1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgY29udGVudDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGhlYWRlcjogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGZvb3Rlcjogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBOdW1iZXIgb2YgdW5yZWFkIG5vdGlmaWNhdGlvbnMgKi9cbiAgICBnZXQgdW5yZWFkSXRlbXNDb3VudGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLnVucmVhZEl0ZW1zQ291bnRlcjtcbiAgICB9XG5cbiAgICAvKiogUGxhY2VtZW50IG9mIHBvcFVwICovXG4gICAgQElucHV0KCdrYnFOb3RpZmljYXRpb25DZW50ZXJQbGFjZW1lbnQnKSBwbGFjZW1lbnQ6IFBvcFVwUGxhY2VtZW50cyA9IFBvcFVwUGxhY2VtZW50cy5SaWdodDtcblxuICAgIC8qKiBDbGFzcyB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgYmFja2dyb3VuZCAqL1xuICAgIEBJbnB1dCgpIGJhY2tkcm9wQ2xhc3M6IHN0cmluZyA9ICdjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCc7XG5cbiAgICAvKiogQ2xhc3MgdGhhdCB3aWxsIGJlIHVzZWQgaW4gdGhlIHBhbmVsICovXG4gICAgQElucHV0KCdrYnFOb3RpZmljYXRpb25DZW50ZXJQYW5lbENsYXNzJykgcGFuZWxDbGFzczogc3RyaW5nO1xuXG4gICAgLyoqIE9mZnNldCBvZiBwb3BVcCAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIG9mZnNldDogbnVtYmVyIHwgbnVsbCA9IGRlZmF1bHRPZmZzZXRYO1xuXG4gICAgLyoqIFVzZSBwb3BvdmVyIG9yIG5vdCAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIGdldCBwb3BvdmVyTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcG92ZXJNb2RlO1xuICAgIH1cblxuICAgIHNldCBwb3BvdmVyTW9kZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9wb3BvdmVyTW9kZSA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMucGxhY2VtZW50ID0gUG9wVXBQbGFjZW1lbnRzLkJvdHRvbTtcbiAgICAgICAgdGhpcy51cGRhdGVQbGFjZW1lbnRQcmlvcml0eShbJ2JvdHRvbUNlbnRlcicsICdib3R0b21MZWZ0JywgJ2JvdHRvbVJpZ2h0J10pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3BvcG92ZXJNb2RlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogU2V0IGhlaWdodCBvZiBwb3BvdmVyLiBEZWZhdWx0IGlzIGNhbGMoMTAwdmggLSA0OHB4KS4gNDhweCAtIGhlaWdodCBvZiBuYXZiYXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBwb3BvdmVySGVpZ2h0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wb3BvdmVySGVpZ2h0O1xuICAgIH1cblxuICAgIHNldCBwb3BvdmVySGVpZ2h0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fcG9wb3ZlckhlaWdodCA9IHZhbHVlO1xuXG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlPy5wb3BvdmVySGVpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLnBvcG92ZXJIZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3BvcG92ZXJIZWlnaHQ6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIHRoZSB0cmlnZ2VyIGlzIGRpc2FibGVkLiAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIHNldCBkaXNhYmxlZCh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZGl0aW9uYWxseSBwb3NpdGlvbnMgdGhlIGVsZW1lbnQgcmVsYXRpdmUgdG8gdGhlIHdpbmRvdyBzaWRlIChUb3AsIFJpZ2h0LCBCb3R0b20gYW5kIExlZnQpLlxuICAgICAqIElmIGNvbnRhaW5lciBpcyBzcGVjaWZpZWQsIHRoZSBwb3NpdGlvbmluZyB3aWxsIGJlIHJlbGF0aXZlIHRvIGl0LlxuICAgICAqICovXG4gICAgQElucHV0KCkgc3RpY2tUb1dpbmRvdzpcbiAgICAgICAgfCBQb3BVcFBsYWNlbWVudHMuVG9wXG4gICAgICAgIHwgUG9wVXBQbGFjZW1lbnRzLlJpZ2h0XG4gICAgICAgIHwgUG9wVXBQbGFjZW1lbnRzLkJvdHRvbVxuICAgICAgICB8IFBvcFVwUGxhY2VtZW50cy5MZWZ0XG4gICAgICAgIHwgc3RyaW5nO1xuXG4gICAgLyoqIENvbnRhaW5lciBmb3IgYWRkaXRpb25hbCBwb3NpdGlvbmluZywgdXNlZCB3aXRoIHN0aWNrVG9XaW5kb3cgKi9cbiAgICBASW5wdXQoKSBjb250YWluZXI6IEhUTUxFbGVtZW50O1xuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBnZXQgaGFzQ2xpY2tUcmlnZ2VyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50cmlnZ2VyLmluY2x1ZGVzKFBvcFVwVHJpZ2dlcnMuQ2xpY2spO1xuICAgIH1cblxuICAgIC8qKiBFbWl0cyBhIGNoYW5nZSBldmVudCB3aGVuZXZlciB0aGUgcGxhY2VtZW50IHN0YXRlIGNoYW5nZXMuICovXG4gICAgQE91dHB1dCgna2JxUGxhY2VtZW50Q2hhbmdlJykgcmVhZG9ubHkgcGxhY2VtZW50Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqIEVtaXRzIGEgY2hhbmdlIGV2ZW50IHdoZW5ldmVyIHRoZSB2aXNpYmxlIHN0YXRlIGNoYW5nZXMuICovXG4gICAgQE91dHB1dCgna2JxVmlzaWJsZUNoYW5nZScpIHJlYWRvbmx5IHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHRyaWdnZXI6IHN0cmluZyA9IGAke1BvcFVwVHJpZ2dlcnMuQ2xpY2t9LCAke1BvcFVwVHJpZ2dlcnMuS2V5ZG93bn1gO1xuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcm90ZWN0ZWQgb3JpZ2luU2VsZWN0b3IgPSAnLmticS1ub3RpZmljYXRpb24tY2VudGVyJztcblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcHJvdGVjdGVkIGdldCBvdmVybGF5Q29uZmlnKCk6IE92ZXJsYXlDb25maWcge1xuICAgICAgICBjb25zdCBkZWZhdWx0UGFuZWxDbGFzcyA9ICdrYnEtbm90aWZpY2F0aW9uLWNlbnRlcl9fcGFuZWwnO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwYW5lbENsYXNzOiB0aGlzLnBhbmVsQ2xhc3MgPyBbZGVmYXVsdFBhbmVsQ2xhc3MsIHRoaXMucGFuZWxDbGFzc10gOiBkZWZhdWx0UGFuZWxDbGFzcyxcbiAgICAgICAgICAgIGhhc0JhY2tkcm9wOiB0aGlzLmhhc0JhY2tkcm9wLFxuICAgICAgICAgICAgYmFja2Ryb3BDbGFzczogdGhpcy5iYWNrZHJvcENsYXNzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcm90ZWN0ZWQgcHJldmVudENsb3NpbmdCeUlubmVyU2Nyb2xsU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVBsYWNlbWVudFByaW9yaXR5KFsncmlnaHQnLCAncmlnaHRCb3R0b20nLCAncmlnaHRUb3AnXSk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpc2libGVDaGFuZ2UucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCh2aXNpYmxlOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICBpZiAodmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByeGpzL25vLW5lc3RlZC1zdWJzY3JpYmVcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZlbnRDbG9zaW5nQnlJbm5lclNjcm9sbFN1YnNjcmlwdGlvbiA9IHRoaXMuY2xvc2luZ0FjdGlvbnMoKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudCAmJiBldmVudFsnc2Nyb2xsRGlzcGF0Y2hlciddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLnNldFN0aWNrUG9zaXRpb24oKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRbJ2ticVBvcG92ZXJQcmV2ZW50SGlkZSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Wyd0eXBlJ10gPSAnY2xpY2snO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmVudENsb3NpbmdCeUlubmVyU2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHVwZGF0ZURhdGEoKSB7XG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuaW5zdGFuY2UuaGVhZGVyID0gdGhpcy5oZWFkZXI7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UuY29udGVudCA9IHRoaXMuY29udGVudDtcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5hcnJvdyA9IHRoaXMuYXJyb3c7XG4gICAgICAgIHRoaXMuaW5zdGFuY2Uub2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UuZm9vdGVyID0gdGhpcy5mb290ZXI7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UucG9wb3Zlck1vZGUgPSB0aGlzLnBvcG92ZXJNb2RlO1xuICAgICAgICB0aGlzLmluc3RhbmNlLnBvcG92ZXJIZWlnaHQgPSB0aGlzLnBvcG92ZXJIZWlnaHQ7XG5cbiAgICAgICAgdGhpcy5pbnN0YW5jZS51cGRhdGVUcmFwRm9jdXModGhpcy50cmlnZ2VyICE9PSBQb3BVcFRyaWdnZXJzLkZvY3VzKTtcblxuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24odHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogVXBkYXRlcyB0aGUgY3VycmVudCBwb3NpdGlvbi5cbiAgICAgKlxuICAgICAqIEBkb2NzLXByaXZhdGUgKi9cbiAgICB1cGRhdGVQb3NpdGlvbihyZWFwcGx5UG9zaXRpb246IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLmNyZWF0ZU92ZXJsYXkoKTtcblxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9ICh0aGlzLm92ZXJsYXlSZWYuZ2V0Q29uZmlnKCkucG9zaXRpb25TdHJhdGVneSBhcyBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kpXG4gICAgICAgICAgICAud2l0aFBvc2l0aW9ucyh0aGlzLmdldEFkanVzdGVkUG9zaXRpb25zKCkpXG4gICAgICAgICAgICAud2l0aFB1c2godHJ1ZSk7XG5cbiAgICAgICAgaWYgKHJlYXBwbHlQb3NpdGlvbikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBwb3NpdGlvbi5yZWFwcGx5TGFzdFBvc2l0aW9uKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBnZXRPdmVybGF5SGFuZGxlQ29tcG9uZW50VHlwZSgpOiBUeXBlPEticU5vdGlmaWNhdGlvbkNlbnRlckNvbXBvbmVudD4ge1xuICAgICAgICByZXR1cm4gS2JxTm90aWZpY2F0aW9uQ2VudGVyQ29tcG9uZW50O1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgdXBkYXRlQ2xhc3NNYXAobmV3UGxhY2VtZW50OiBzdHJpbmcgPSB0aGlzLnBsYWNlbWVudCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHJldHVybjtcblxuICAgICAgICB0aGlzLmluc3RhbmNlLnVwZGF0ZUNsYXNzTWFwKFBPU0lUSU9OX1RPX0NTU19NQVBbbmV3UGxhY2VtZW50XSwgdGhpcy5jdXN0b21DbGFzcywgdGhpcy5zaXplKTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGNsb3NpbmdBY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gbWVyZ2UoXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYhLm91dHNpZGVQb2ludGVyRXZlbnRzKCksXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYhLmJhY2tkcm9wQ2xpY2soKSxcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsRGlzcGF0Y2hlci5zY3JvbGxlZCgpXG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImticS1ub3RpZmljYXRpb24tY2VudGVyLWhlYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJrYnEtbm90aWZpY2F0aW9uLWNlbnRlci10aXRsZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLW5vdGlmaWNhdGlvbi1jZW50ZXItdGl0bGVfX3RleHRcIj57eyBsb2NhbGVEYXRhLm5vdGlmaWNhdGlvbnMgfX08L2Rpdj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgI25vdGlmaWNhdGlvblN3aXRjaGVyXG4gICAgICAgICAgICAjZHJvcGRvd25UcmlnZ2VyPVwia2JxRHJvcGRvd25UcmlnZ2VyXCJcbiAgICAgICAgICAgIGticS1idXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwia2JxLW5vdGlmaWNhdGlvbi1jZW50ZXItdGl0bGVfX2J1dHRvblwiXG4gICAgICAgICAgICBba2JxRHJvcGRvd25UcmlnZ2VyRm9yXT1cIm5vdGlmaWNhdGlvblN3aXRjaGVyRHJvcGRvd25cIlxuICAgICAgICAgICAgW2ticVRvb2x0aXBdPVwic2VydmljZS5zaWxlbnRNb2RlLnZhbHVlID8gbG9jYWxlRGF0YS5kb05vdERpc3R1cmIgOiBsb2NhbGVEYXRhLnNob3dQb3BVcE5vdGlmaWNhdGlvbnNcIlxuICAgICAgICAgICAgW2ticVRvb2x0aXBBcnJvd109XCJmYWxzZVwiXG4gICAgICAgICAgICBba2JxVG9vbHRpcE9mZnNldF09XCI0XCJcbiAgICAgICAgICAgIFtrYnFUb29sdGlwRGlzYWJsZWRdPVwiZHJvcGRvd25UcmlnZ2VyLm9wZW5lZFwiXG4gICAgICAgICAgICBba2JxU3R5bGVdPVwiJ3RyYW5zcGFyZW50J1wiXG4gICAgICAgICAgICBbY29sb3JdPVwiJ2NvbnRyYXN0J1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpIGticS1pY29uPVwie3sgc2VydmljZS5zaWxlbnRNb2RlLnZhbHVlID8gJ2ticS1iZWxsLXNsYXNoXzE2JyA6ICdrYnEtYmVsbF8xNicgfX1cIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJrYnEtbm90aWZpY2F0aW9uLWNlbnRlci10b29sYmFyXCI+XG4gICAgICAgIEBpZiAoIXNlcnZpY2UuaXNFbXB0eSkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGticS1idXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImticS1ub3RpZmljYXRpb24tY2VudGVyLXRvb2xiYXJfX2J1dHRvblwiXG4gICAgICAgICAgICAgICAgW2ticVN0eWxlXT1cIid0cmFuc3BhcmVudCdcIlxuICAgICAgICAgICAgICAgIFtjb2xvcl09XCInY29udHJhc3QnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VydmljZS5yZW1vdmVBbGwoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGkga2JxLWljb249XCJrYnEtdHJhc2hfMTZcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPGticS1kaXZpZGVyIFt2ZXJ0aWNhbF09XCJ0cnVlXCIgLz5cbiAgICAgICAgfVxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGticS1idXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwia2JxLW5vdGlmaWNhdGlvbi1jZW50ZXItdG9vbGJhcl9fYnV0dG9uXCJcbiAgICAgICAgICAgIFtrYnFTdHlsZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCInY29udHJhc3QnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJoaWRlKDApXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGkga2JxLWljb249XCJrYnEteG1hcmtfMTZcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXZcbiAgICBrYnEtc2Nyb2xsYmFyXG4gICAgY2xhc3M9XCJrYnEtbm90aWZpY2F0aW9uLWNlbnRlci1jb250YWluZXJcIlxuICAgIFtjbGFzcy5rYnEtbm90aWZpY2F0aW9uLWNlbnRlcl9ib3R0b20tb3ZlcmZsb3ddPVwiaXNCb3R0b21PdmVyZmxvd1wiXG4gICAgKG9uU2Nyb2xsKT1cImNoZWNrT3ZlcmZsb3coKVwiXG4+XG4gICAgQGlmICghc2VydmljZS5lcnJvck1vZGUudmFsdWUpIHtcbiAgICAgICAgQGlmICghc2VydmljZS5sb2FkaW5nTW9kZS52YWx1ZSkge1xuICAgICAgICAgICAgQGZvciAoZ3JvdXAgb2Ygc2VydmljZS5ncm91cGVkSXRlbXMgfCBhc3luYzsgdHJhY2sgZ3JvdXApIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwia2JxLW5vdGlmaWNhdGlvbi1jZW50ZXItc3ViLWhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5rYnEtbm90aWZpY2F0aW9uLWNlbnRlcl90b3Atb3ZlcmZsb3ddPVwiaXNUb3BPdmVyZmxvd1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLW5vdGlmaWNhdGlvbi1jZW50ZXItc3ViLWhlYWRlcl9fZGF0ZVwiPnt7IGdyb3VwLnRpdGxlIH19PC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAga2JxLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJrYnEtbm90aWZpY2F0aW9uLWNlbnRlci1zdWItaGVhZGVyX19idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ticVN0eWxlXT1cIid0cmFuc3BhcmVudCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cIidjb250cmFzdCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ticVRvb2x0aXBdPVwibG9jYWxlRGF0YS5yZW1vdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ticVRvb2x0aXBBcnJvd109XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VydmljZS5yZW1vdmVHcm91cChncm91cClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBrYnEtaWNvbj1cImticS10cmFzaF8xNlwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGdyb3VwLml0ZW1zOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIDxrYnEtbm90aWZpY2F0aW9uLWl0ZW0gW2RhdGFdPVwiaXRlbVwiIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBAZW1wdHkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrYnEtbm90aWZpY2F0aW9uLWNlbnRlci1lbXB0eS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkga2JxLWljb24taXRlbT1cImticS1iZWxsXzE2XCIgW2JpZ109XCJ0cnVlXCIgW2NvbG9yXT1cIidjb250cmFzdC1mYWRlJ1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAge3sgbG9jYWxlRGF0YS5ub05vdGlmaWNhdGlvbnMgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8a2JxLWxvYWRlci1vdmVybGF5IFt0cmFuc3BhcmVudF09XCJ0cnVlXCIgLz5cbiAgICAgICAgfVxuICAgIH0gQGVsc2Uge1xuICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLW5vdGlmaWNhdGlvbi1jZW50ZXItZXJyb3ItY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8aSBrYnEtaWNvbi1pdGVtPVwia2JxLWJlbGxfMTZcIiBbYmlnXT1cInRydWVcIiBbY29sb3JdPVwiJ2Vycm9yJ1wiIFtmYWRlXT1cInRydWVcIj48L2k+XG4gICAgICAgICAgICB7eyBsb2NhbGVEYXRhLmZhaWxlZFRvTG9hZE5vdGlmaWNhdGlvbnMgfX1cbiAgICAgICAgICAgIDxidXR0b24ga2JxLWJ1dHRvbiBba2JxU3R5bGVdPVwiJ3RyYW5zcGFyZW50J1wiIFtjb2xvcl09XCIndGhlbWUnXCIgKGNsaWNrKT1cInNlcnZpY2Uub25SZWxvYWQuZW1pdCgpXCI+XG4gICAgICAgICAgICAgICAge3sgbG9jYWxlRGF0YS5yZXBlYXQgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG48L2Rpdj5cblxuPGticS1kcm9wZG93biAjbm90aWZpY2F0aW9uU3dpdGNoZXJEcm9wZG93bj1cImticURyb3Bkb3duXCI+XG4gICAgPGJ1dHRvbiBrYnEtZHJvcGRvd24taXRlbSAoY2xpY2spPVwic2VydmljZS5zZXRTaWxlbnRNb2RlKGZhbHNlKVwiPlxuICAgICAgICA8aSBrYnEtaWNvbj1cInt7ICFzZXJ2aWNlLnNpbGVudE1vZGUudmFsdWUgPyAna2JxLWNpcmNsZS14c18xNicgOiAnJyB9fVwiIFtzdHlsZS5taW4td2lkdGgucHhdPVwiMTZcIj48L2k+XG4gICAgICAgIHt7IGxvY2FsZURhdGEuc2hvd1BvcFVwTm90aWZpY2F0aW9ucyB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24ga2JxLWRyb3Bkb3duLWl0ZW0gKGNsaWNrKT1cInNlcnZpY2Uuc2V0U2lsZW50TW9kZSh0cnVlKVwiPlxuICAgICAgICA8aSBrYnEtaWNvbj1cInt7IHNlcnZpY2Uuc2lsZW50TW9kZS52YWx1ZSA/ICdrYnEtY2lyY2xlLXhzXzE2JyA6ICcnIH19XCIgW3N0eWxlLm1pbi13aWR0aC5weF09XCIxNlwiPjwvaT5cbiAgICAgICAge3sgbG9jYWxlRGF0YS5kb05vdERpc3R1cmIgfX1cbiAgICA8L2J1dHRvbj5cbjwva2JxLWRyb3Bkb3duPlxuIl19
@@ -38,6 +38,7 @@ export class KbqPopoverComponent extends KbqPopUp {
38
38
  this.visibleChange.subscribe((state) => {
39
39
  if (this.offset !== null && state) {
40
40
  applyPopupMargins(this.renderer, this.elementRef.nativeElement, this.prefix, `${this.offset.toString()}px`);
41
+ this.setStickPosition();
41
42
  }
42
43
  });
43
44
  }
@@ -47,7 +48,7 @@ export class KbqPopoverComponent extends KbqPopUp {
47
48
  checkContentOverflow(contentElement) {
48
49
  const { scrollTop, offsetHeight, scrollHeight } = contentElement;
49
50
  this.isContentTopOverflow = scrollTop > 0;
50
- this.isContentBottomOverflow = scrollTop + offsetHeight < scrollHeight;
51
+ this.isContentBottomOverflow = Math.round(scrollTop + offsetHeight) < scrollHeight;
51
52
  super.detectChanges();
52
53
  }
53
54
  updateClassMap(placement, customClass, size) {
@@ -324,7 +325,7 @@ export class KbqPopoverTrigger extends KbqPopUpTrigger {
324
325
  return merge(...this.closingActionsForClick(), this.closeOnScroll ? this.scrollDispatcher.scrolled() : NEVER);
325
326
  }
326
327
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqPopoverTrigger, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
327
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.14", type: KbqPopoverTrigger, selector: "[kbqPopover]", inputs: { preventClose: ["kbqPopoverPreventClose", "preventClose", booleanAttribute], defaultPaddings: ["defaultPaddings", "defaultPaddings", booleanAttribute], popoverVisible: ["kbqPopoverVisible", "popoverVisible"], popoverPlacement: ["kbqPopoverPlacement", "popoverPlacement"], popoverPlacementPriority: ["kbqPopoverPlacementPriority", "popoverPlacementPriority"], hasBackdrop: "hasBackdrop", header: ["kbqPopoverHeader", "header"], content: ["kbqPopoverContent", "content"], footer: ["kbqPopoverFooter", "footer"], disabled: ["kbqPopoverDisabled", "disabled"], trigger: ["kbqTrigger", "trigger"], size: ["kbqPopoverSize", "size"], customClass: ["kbqPopoverClass", "customClass"], context: ["kbqPopoverContext", "context"], hasCloseButton: "hasCloseButton", closeOnScroll: "closeOnScroll", backdropClass: "backdropClass", arrow: ["kbqPopoverArrow", "arrow", booleanAttribute], offset: ["kbqPopoverOffset", "offset", numberAttribute], leaveDelay: ["kbqLeaveDelay", "leaveDelay", numberAttribute] }, outputs: { placementChange: "kbqPopoverPlacementChange", visibleChange: "kbqPopoverVisibleChange" }, host: { listeners: { "keydown": "keydownHandler($event)", "touchend": "touchendHandler()" }, properties: { "class.kbq-popover_open": "isOpen", "class.kbq-active": "hasClickTrigger && isOpen" } }, exportAs: ["kbqPopover"], usesInheritance: true, ngImport: i0 }); }
328
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.14", type: KbqPopoverTrigger, selector: "[kbqPopover]", inputs: { preventClose: ["kbqPopoverPreventClose", "preventClose", booleanAttribute], defaultPaddings: ["defaultPaddings", "defaultPaddings", booleanAttribute], popoverVisible: ["kbqPopoverVisible", "popoverVisible"], popoverPlacement: ["kbqPopoverPlacement", "popoverPlacement"], popoverPlacementPriority: ["kbqPopoverPlacementPriority", "popoverPlacementPriority"], stickToWindow: ["kbqPopoverStickToWindow", "stickToWindow"], container: "container", hasBackdrop: "hasBackdrop", header: ["kbqPopoverHeader", "header"], content: ["kbqPopoverContent", "content"], footer: ["kbqPopoverFooter", "footer"], disabled: ["kbqPopoverDisabled", "disabled"], trigger: ["kbqTrigger", "trigger"], size: ["kbqPopoverSize", "size"], customClass: ["kbqPopoverClass", "customClass"], context: ["kbqPopoverContext", "context"], hasCloseButton: "hasCloseButton", closeOnScroll: "closeOnScroll", backdropClass: "backdropClass", arrow: ["kbqPopoverArrow", "arrow", booleanAttribute], offset: ["kbqPopoverOffset", "offset", numberAttribute], leaveDelay: ["kbqLeaveDelay", "leaveDelay", numberAttribute] }, outputs: { placementChange: "kbqPopoverPlacementChange", visibleChange: "kbqPopoverVisibleChange" }, host: { listeners: { "keydown": "keydownHandler($event)", "touchend": "touchendHandler()" }, properties: { "class.kbq-popover_open": "isOpen", "class.kbq-active": "hasClickTrigger && isOpen" } }, exportAs: ["kbqPopover"], usesInheritance: true, ngImport: i0 }); }
328
329
  }
329
330
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqPopoverTrigger, decorators: [{
330
331
  type: Directive,
@@ -353,6 +354,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
353
354
  }], popoverPlacementPriority: [{
354
355
  type: Input,
355
356
  args: ['kbqPopoverPlacementPriority']
357
+ }], stickToWindow: [{
358
+ type: Input,
359
+ args: ['kbqPopoverStickToWindow']
360
+ }], container: [{
361
+ type: Input
356
362
  }], hasBackdrop: [{
357
363
  type: Input
358
364
  }], header: [{
@@ -401,4 +407,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
401
407
  type: Output,
402
408
  args: ['kbqPopoverVisibleChange']
403
409
  }] } });
404
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUdILE9BQU8sRUFHVixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLGNBQWMsRUFDZCxLQUFLLEVBRUwsTUFBTSxFQUdOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixlQUFlLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsUUFBUSxFQUNSLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLFVBQVUsRUFDVixhQUFhLEVBQ2IsaUJBQWlCLEVBQ3BCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7OztBQUU1RCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUM7QUFjekMsTUFBTSxP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c0JBQXJCLEtBQUs7Z0JBRzRELEtBQUs7c0JBQXRFLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUVFLE1BQU07c0JBQXZFLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFHRCxVQUFVO3NCQUF4RSxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQUVmLGVBQWU7c0JBQTVELE1BQU07dUJBQUMsMkJBQTJCO2dCQUVTLGFBQWE7c0JBQXhELE1BQU07dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrVHJhcEZvY3VzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gICAgQ2RrU2Nyb2xsYWJsZSxcbiAgICBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3ksXG4gICAgT3ZlcmxheSxcbiAgICBPdmVybGF5Q29uZmlnLFxuICAgIFNjcm9sbFN0cmF0ZWd5XG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0aW9uVG9rZW4sXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBUeXBlLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIGluamVjdCxcbiAgICBudW1iZXJBdHRyaWJ1dGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1xuICAgIEticUNvbXBvbmVudENvbG9ycyxcbiAgICBLYnFQb3BVcCxcbiAgICBLYnFQb3BVcFRyaWdnZXIsXG4gICAgUE9TSVRJT05fVE9fQ1NTX01BUCxcbiAgICBQb3BVcFBsYWNlbWVudHMsXG4gICAgUG9wVXBTaXplcyxcbiAgICBQb3BVcFRyaWdnZXJzLFxuICAgIGFwcGx5UG9wdXBNYXJnaW5zXG59IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9jb3JlJztcbmltcG9ydCB7IE5FVkVSLCBmcm9tRXZlbnQsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBrYnFQb3BvdmVyQW5pbWF0aW9ucyB9IGZyb20gJy4vcG9wb3Zlci1hbmltYXRpb25zJztcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRPZmZzZXRZV2l0aEFycm93ID0gODtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdrYnEtcG9wb3Zlci1jb21wb25lbnQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9wb3BvdmVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICBzdHlsZVVybHM6IFsnLi9wb3BvdmVyLnNjc3MnLCAnLi9wb3BvdmVyLXRva2Vucy5zY3NzJ10sXG4gICAgaG9zdDoge1xuICAgICAgICAnKGtleWRvd24uZXNjKSc6ICdvbkVzY2FwZSgpJ1xuICAgIH0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBhbmltYXRpb25zOiBba2JxUG9wb3ZlckFuaW1hdGlvbnMucG9wb3ZlclN0YXRlXVxufSlcbmV4cG9ydCBjbGFzcyBLYnFQb3BvdmVyQ29tcG9uZW50IGV4dGVuZHMgS2JxUG9wVXAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgICBwcmVmaXggPSAna2JxLXBvcG92ZXInO1xuXG4gICAgaGVhZGVyOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIGZvb3Rlcjogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIHRyaWdnZXI6IEticVBvcG92ZXJUcmlnZ2VyO1xuXG4gICAgaXNUcmFwRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBoYXNDbG9zZUJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQFZpZXdDaGlsZCgncG9wb3ZlckNvbnRlbnQnKSBwb3BvdmVyQ29udGVudDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gICAgQFZpZXdDaGlsZCgncG9wb3ZlcicpIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZChDZGtUcmFwRm9jdXMpIGNka1RyYXBGb2N1czogQ2RrVHJhcEZvY3VzO1xuXG4gICAgcHJpdmF0ZSBkZWJvdW5jZVRpbWUgPSAxNTtcbiAgICBpc0NvbnRlbnRUb3BPdmVyZmxvdzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlzQ29udGVudEJvdHRvbU92ZXJmbG93OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5wb3BvdmVyQ29udGVudCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuY2hlY2tDb250ZW50T3ZlcmZsb3codGhpcy5wb3BvdmVyQ29udGVudC5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICBmcm9tRXZlbnQodGhpcy5wb3BvdmVyQ29udGVudC5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJylcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZSksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQ29udGVudE92ZXJmbG93KGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNka1RyYXBGb2N1cy5mb2N1c1RyYXAuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpO1xuICAgICAgICB0aGlzLnZpc2libGVDaGFuZ2Uuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub2Zmc2V0ICE9PSBudWxsICYmIHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgYXBwbHlQb3B1cE1hcmdpbnMoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZWZpeCxcbiAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5vZmZzZXQhLnRvU3RyaW5nKCl9cHhgXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25Db250ZW50Q2hhbmdlKCkge1xuICAgICAgICB0aGlzLmNoZWNrQ29udGVudE92ZXJmbG93KHRoaXMucG9wb3ZlckNvbnRlbnQubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgY2hlY2tDb250ZW50T3ZlcmZsb3coY29udGVudEVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBvZmZzZXRIZWlnaHQsIHNjcm9sbEhlaWdodCB9ID0gY29udGVudEVsZW1lbnQ7XG5cbiAgICAgICAgdGhpcy5pc0NvbnRlbnRUb3BPdmVyZmxvdyA9IHNjcm9sbFRvcCA+IDA7XG5cbiAgICAgICAgdGhpcy5pc0NvbnRlbnRCb3R0b21PdmVyZmxvdyA9IHNjcm9sbFRvcCArIG9mZnNldEhlaWdodCA8IHNjcm9sbEhlaWdodDtcblxuICAgICAgICBzdXBlci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlQ2xhc3NNYXAocGxhY2VtZW50OiBzdHJpbmcsIGN1c3RvbUNsYXNzOiBzdHJpbmcsIHNpemU6IFBvcFVwU2l6ZXMpIHtcbiAgICAgICAgc3VwZXIudXBkYXRlQ2xhc3NNYXAocGxhY2VtZW50LCBjdXN0b21DbGFzcywgeyBbYCR7dGhpcy5wcmVmaXh9XyR7c2l6ZX1gXTogISFzaXplIH0pO1xuICAgIH1cblxuICAgIHVwZGF0ZVRyYXBGb2N1cyhpc1RyYXBGb2N1czogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmlzVHJhcEZvY3VzID0gaXNUcmFwRm9jdXM7XG4gICAgfVxuXG4gICAgb25Fc2NhcGUoKSB7XG4gICAgICAgIHRoaXMuaGlkZSgwKTtcblxuICAgICAgICB0aGlzLnRyaWdnZXIuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29tcG9uZW50Q29sb3JzID0gS2JxQ29tcG9uZW50Q29sb3JzO1xufVxuXG5leHBvcnQgY29uc3QgS0JRX1BPUE9WRVJfU0NST0xMX1NUUkFURUdZID0gbmV3IEluamVjdGlvblRva2VuPCgpID0+IFNjcm9sbFN0cmF0ZWd5Pigna2JxLXBvcG92ZXItc2Nyb2xsLXN0cmF0ZWd5Jyk7XG5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5leHBvcnQgZnVuY3Rpb24ga2JxUG9wb3ZlclNjcm9sbFN0cmF0ZWd5RmFjdG9yeShvdmVybGF5OiBPdmVybGF5KTogKCkgPT4gU2Nyb2xsU3RyYXRlZ3kge1xuICAgIHJldHVybiAoKSA9PiBvdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbih7IHNjcm9sbFRocm90dGxlOiAyMCB9KTtcbn1cblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBjb25zdCBLQlFfUE9QT1ZFUl9TQ1JPTExfU1RSQVRFR1lfRkFDVE9SWV9QUk9WSURFUiA9IHtcbiAgICBwcm92aWRlOiBLQlFfUE9QT1ZFUl9TQ1JPTExfU1RSQVRFR1ksXG4gICAgZGVwczogW092ZXJsYXldLFxuICAgIHVzZUZhY3Rvcnk6IGticVBvcG92ZXJTY3JvbGxTdHJhdGVneUZhY3Rvcnlcbn07XG5cbi8qKiBDcmVhdGVzIGFuIGVycm9yIHRvIGJlIHRocm93biBpZiB0aGUgdXNlciBzdXBwbGllZCBhbiBpbnZhbGlkIHBvcG92ZXIgcG9zaXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2JxUG9wb3ZlckludmFsaWRQb3NpdGlvbkVycm9yKHBvc2l0aW9uOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gRXJyb3IoYEticVBvcG92ZXIgcG9zaXRpb24gXCIke3Bvc2l0aW9ufVwiIGlzIGludmFsaWQuYCk7XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2ticVBvcG92ZXJdJyxcbiAgICBleHBvcnRBczogJ2ticVBvcG92ZXInLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy5rYnEtcG9wb3Zlcl9vcGVuXSc6ICdpc09wZW4nLFxuICAgICAgICAnW2NsYXNzLmticS1hY3RpdmVdJzogJ2hhc0NsaWNrVHJpZ2dlciAmJiBpc09wZW4nLFxuICAgICAgICAnKGtleWRvd24pJzogJ2tleWRvd25IYW5kbGVyKCRldmVudCknLFxuICAgICAgICAnKHRvdWNoZW5kKSc6ICd0b3VjaGVuZEhhbmRsZXIoKSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEticVBvcG92ZXJUcmlnZ2VyIGV4dGVuZHMgS2JxUG9wVXBUcmlnZ2VyPEticVBvcG92ZXJDb21wb25lbnQ+IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25Jbml0IHtcbiAgICBwcm90ZWN0ZWQgc2Nyb2xsU3RyYXRlZ3k6ICgpID0+IFNjcm9sbFN0cmF0ZWd5ID0gaW5qZWN0KEtCUV9QT1BPVkVSX1NDUk9MTF9TVFJBVEVHWSk7XG5cbiAgICAvKiogcHJldmVudHMgY2xvc3VyZSBieSBhbnkgZXZlbnQgKi9cbiAgICBASW5wdXQoeyBhbGlhczogJ2ticVBvcG92ZXJQcmV2ZW50Q2xvc2UnLCB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgb3ZlcnJpZGUgcHJldmVudENsb3NlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogZGlzYWJsZXMgZGVmYXVsdCBwYWRkaW5nIGZvciBhbGwgcG9wb3ZlciBlbGVtZW50cyAoaGVhZGVyLCBjb250ZW50IGFuZCBmb290ZXIpICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGRlZmF1bHRQYWRkaW5ncyA9IHRydWU7XG5cbiAgICBASW5wdXQoJ2ticVBvcG92ZXJWaXNpYmxlJylcbiAgICBnZXQgcG9wb3ZlclZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpc2libGU7XG4gICAgfVxuXG4gICAgc2V0IHBvcG92ZXJWaXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZVZpc2libGUodmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgna2JxUG9wb3ZlclBsYWNlbWVudCcpXG4gICAgZ2V0IHBvcG92ZXJQbGFjZW1lbnQoKTogUG9wVXBQbGFjZW1lbnRzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGxhY2VtZW50O1xuICAgIH1cblxuICAgIHNldCBwb3BvdmVyUGxhY2VtZW50KHZhbHVlOiBQb3BVcFBsYWNlbWVudHMpIHtcbiAgICAgICAgc3VwZXIudXBkYXRlUGxhY2VtZW50KHZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoJ2ticVBvcG92ZXJQbGFjZW1lbnRQcmlvcml0eScpXG4gICAgZ2V0IHBvcG92ZXJQbGFjZW1lbnRQcmlvcml0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGxhY2VtZW50UHJpb3JpdHk7XG4gICAgfVxuXG4gICAgc2V0IHBvcG92ZXJQbGFjZW1lbnRQcmlvcml0eSh2YWx1ZSkge1xuICAgICAgICBzdXBlci51cGRhdGVQbGFjZW1lbnRQcmlvcml0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgaGFzQmFja2Ryb3AoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNCYWNrZHJvcDtcbiAgICB9XG5cbiAgICBzZXQgaGFzQmFja2Ryb3AodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5faGFzQmFja2Ryb3AgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2hhc0JhY2tkcm9wOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoJ2ticVBvcG92ZXJIZWFkZXInKVxuICAgIGdldCBoZWFkZXIoKTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWFkZXI7XG4gICAgfVxuXG4gICAgc2V0IGhlYWRlcih2YWx1ZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pikge1xuICAgICAgICB0aGlzLl9oZWFkZXIgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLnVwZGF0ZURhdGEoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oZWFkZXI6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBASW5wdXQoJ2ticVBvcG92ZXJDb250ZW50JylcbiAgICBnZXQgY29udGVudCgpOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnQ7XG4gICAgfVxuXG4gICAgc2V0IGNvbnRlbnQodmFsdWU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICAgICAgdGhpcy5fY29udGVudCA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMudXBkYXRlRGF0YSgpO1xuICAgIH1cblxuICAgIEBJbnB1dCgna2JxUG9wb3ZlckZvb3RlcicpXG4gICAgZ2V0IGZvb3RlcigpOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zvb3RlcjtcbiAgICB9XG5cbiAgICBzZXQgZm9vdGVyKHZhbHVlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgICAgIHRoaXMuX2Zvb3RlciA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMudXBkYXRlRGF0YSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Zvb3Rlcjogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBJbnB1dCgna2JxUG9wb3ZlckRpc2FibGVkJylcbiAgICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBzZXQgZGlzYWJsZWQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuXG4gICAgICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoJ2ticVRyaWdnZXInKVxuICAgIGdldCB0cmlnZ2VyKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl90cmlnZ2VyO1xuICAgIH1cblxuICAgIHNldCB0cmlnZ2VyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl90cmlnZ2VyID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRyaWdnZXIuaW5jbHVkZXMoUG9wVXBUcmlnZ2Vycy5Ib3ZlcikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVXaXRoVGltZW91dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5sZWF2ZURlbGF5ID0gdGhpcy5sZWF2ZURlbGF5ID8/IDUwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIgPSBgJHtQb3BVcFRyaWdnZXJzLkNsaWNrfSwgJHtQb3BVcFRyaWdnZXJzLktleWRvd259YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5pdExpc3RlbmVycygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3RyaWdnZXI6IHN0cmluZyA9IGAke1BvcFVwVHJpZ2dlcnMuQ2xpY2t9LCAke1BvcFVwVHJpZ2dlcnMuS2V5ZG93bn1gO1xuXG4gICAgQElucHV0KCdrYnFQb3BvdmVyU2l6ZScpXG4gICAgZ2V0IHNpemUoKTogUG9wVXBTaXplcyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplO1xuICAgIH1cblxuICAgIHNldCBzaXplKHZhbHVlOiBQb3BVcFNpemVzKSB7XG4gICAgICAgIGlmIChbUG9wVXBTaXplcy5TbWFsbCwgUG9wVXBTaXplcy5NZWRpdW0sIFBvcFVwU2l6ZXMuTGFyZ2VdLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5fc2l6ZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNsYXNzTWFwKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zaXplID0gUG9wVXBTaXplcy5NZWRpdW07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9zaXplOiBQb3BVcFNpemVzID0gUG9wVXBTaXplcy5NZWRpdW07XG5cbiAgICBASW5wdXQoJ2ticVBvcG92ZXJDbGFzcycpXG4gICAgZ2V0IGN1c3RvbUNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VzdG9tQ2xhc3M7XG4gICAgfVxuXG4gICAgc2V0IGN1c3RvbUNsYXNzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY3VzdG9tQ2xhc3MgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUNsYXNzTWFwKCk7XG4gICAgfVxuXG4gICAgLyoqIENvbnRleHQgZm9yIHBvcG92ZXIgdGVtcGxhdGVzIChrYnFQb3BvdmVySGVhZGVyLCBrYnFQb3BvdmVyQ29udGVudCBhbmQga2JxUG9wb3ZlckZvb3RlcikuICovXG4gICAgQElucHV0KCdrYnFQb3BvdmVyQ29udGV4dCcpXG4gICAgZ2V0IGNvbnRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0O1xuICAgIH1cblxuICAgIHNldCBjb250ZXh0KGN0eCkge1xuICAgICAgICB0aGlzLl9jb250ZXh0ID0gY3R4O1xuICAgICAgICB0aGlzLnVwZGF0ZURhdGEoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jb250ZXh0OiB1bmtub3duID0gbnVsbDtcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGhhc0Nsb3NlQnV0dG9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzQ2xvc2VCdXR0b247XG4gICAgfVxuICAgIHNldCBoYXNDbG9zZUJ1dHRvbih2YWx1ZSkge1xuICAgICAgICB0aGlzLl9oYXNDbG9zZUJ1dHRvbiA9IHZhbHVlO1xuICAgICAgICB0aGlzLnVwZGF0ZURhdGEoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaGFzQ2xvc2VCdXR0b24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIHRoZSBiZWhhdmlvciBvZiBjbG9zaW5nIHRoZSBjb21wb25lbnQgb24gc2Nyb2xsLlxuICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXG4gICAgICogVXNlIENsb3NlU2Nyb2xsU3RyYXRlZ3kgYXMgYWx0ZXJuYXRpdmVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBjbG9zZU9uU2Nyb2xsKCk6IGJvb2xlYW4gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb3NlT25TY3JvbGw7XG4gICAgfVxuXG4gICAgc2V0IGNsb3NlT25TY3JvbGwodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fY2xvc2VPblNjcm9sbCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2xvc2VPblNjcm9sbDogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuXG4gICAgZ2V0IGhhc0NsaWNrVHJpZ2dlcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJpZ2dlci5pbmNsdWRlcyhQb3BVcFRyaWdnZXJzLkNsaWNrKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBiYWNrZHJvcENsYXNzOiBzdHJpbmcgPSAnY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AnO1xuXG4gICAgLy8gQFRPRE8gYWRkIHJlYWxpemF0aW9uIGZvciBhcnJvdyAoI0RTLTI1MTQpXG4gICAgQElucHV0KHsgYWxpYXM6ICdrYnFQb3BvdmVyQXJyb3cnLCB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYXJyb3c6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KHsgYWxpYXM6ICdrYnFQb3BvdmVyT2Zmc2V0JywgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgb2Zmc2V0OiBudW1iZXIgfCBudWxsID0gZGVmYXVsdE9mZnNldFlXaXRoQXJyb3c7XG5cbiAgICAvKiogRGVsYXkgYmVmb3JlIGNsb3NpbmcgaW4gbWlsbGlzZWNvbmRzLiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3Iga2JxVHJpZ2dlcj1Qb3BVcFRyaWdnZXJzLkhvdmVyIGlzIDUwMCBtcy4gKi9cbiAgICBASW5wdXQoeyBhbGlhczogJ2ticUxlYXZlRGVsYXknLCB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBsZWF2ZURlbGF5OiBudW1iZXI7XG5cbiAgICBAT3V0cHV0KCdrYnFQb3BvdmVyUGxhY2VtZW50Q2hhbmdlJykgcmVhZG9ubHkgcGxhY2VtZW50Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgna2JxUG9wb3ZlclZpc2libGVDaGFuZ2UnKSByZWFkb25seSB2aXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgcHJvdGVjdGVkIG9yaWdpblNlbGVjdG9yID0gJy5rYnEtcG9wb3Zlcic7XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IG92ZXJsYXlDb25maWcoKTogT3ZlcmxheUNvbmZpZyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwYW5lbENsYXNzOiAna2JxLXBvcG92ZXJfX3BhbmVsJyxcbiAgICAgICAgICAgIGhhc0JhY2tkcm9wOiB0aGlzLmhhc0JhY2tkcm9wLFxuICAgICAgICAgICAgYmFja2Ryb3BDbGFzczogdGhpcy5iYWNrZHJvcENsYXNzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAgICAgdGhpcy5zY3JvbGxhYmxlXG4gICAgICAgICAgICA/LmVsZW1lbnRTY3JvbGxlZCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy5oaWRlSWZOb3RJblZpZXdQb3J0KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlT25TY3JvbGwgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsRGlzcGF0Y2hlci5zY3JvbGxlZCgpLnN1YnNjcmliZSgoc2Nyb2xsYWJsZTogQ2RrU2Nyb2xsYWJsZSB8IHZvaWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXNjcm9sbGFibGU/LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygna2JxLWhpZGUtbmVzdGVkLXBvcHVwJykpIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFJlY3RzID0gc2Nyb2xsYWJsZS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFJlY3RzID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRSZWN0cy5ib3R0b20gPCBwYXJlbnRSZWN0cy50b3AgfHwgY2hpbGRSZWN0cy50b3AgPiBwYXJlbnRSZWN0cy5ib3R0b20pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVEYXRhKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHJldHVybjtcblxuICAgICAgICB0aGlzLmluc3RhbmNlLmhlYWRlciA9IHRoaXMuaGVhZGVyO1xuICAgICAgICB0aGlzLmluc3RhbmNlLmNvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UuY29udGV4dCA9IHRoaXMuY29udGV4dCAmJiB7ICRpbXBsaWNpdDogdGhpcy5jb250ZXh0IH07XG4gICAgICAgIHRoaXMuaW5zdGFuY2UuYXJyb3cgPSB0aGlzLmFycm93O1xuICAgICAgICB0aGlzLmluc3RhbmNlLm9mZnNldCA9IHRoaXMub2Zmc2V0O1xuICAgICAgICB0aGlzLmluc3RhbmNlLmZvb3RlciA9IHRoaXMuZm9vdGVyO1xuICAgICAgICB0aGlzLmluc3RhbmNlLmhhc0Nsb3NlQnV0dG9uID0gdGhpcy5oYXNDbG9zZUJ1dHRvbjtcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5kZWZhdWx0UGFkZGluZ3MgPSB0aGlzLmRlZmF1bHRQYWRkaW5ncztcblxuICAgICAgICB0aGlzLmluc3RhbmNlLnVwZGF0ZVRyYXBGb2N1cyh0aGlzLnRyaWdnZXIgIT09IFBvcFVwVHJpZ2dlcnMuRm9jdXMpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbih0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBVcGRhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCBwb3BvdmVyLiAqL1xuICAgIHVwZGF0ZVBvc2l0aW9uKHJlYXBwbHlQb3NpdGlvbjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IHRoaXMuY3JlYXRlT3ZlcmxheSgpO1xuXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gKHRoaXMub3ZlcmxheVJlZi5nZXRDb25maWcoKS5wb3NpdGlvblN0cmF0ZWd5IGFzIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSlcbiAgICAgICAgICAgIC53aXRoUG9zaXRpb25zKHRoaXMuZ2V0QWRqdXN0ZWRQb3NpdGlvbnMoKSlcbiAgICAgICAgICAgIC53aXRoUHVzaCh0cnVlKTtcblxuICAgICAgICBpZiAocmVhcHBseVBvc2l0aW9uKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHBvc2l0aW9uLnJlYXBwbHlMYXN0UG9zaXRpb24oKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRPdmVybGF5SGFuZGxlQ29tcG9uZW50VHlwZSgpOiBUeXBlPEticVBvcG92ZXJDb21wb25lbnQ+IHtcbiAgICAgICAgcmV0dXJuIEticVBvcG92ZXJDb21wb25lbnQ7XG4gICAgfVxuXG4gICAgdXBkYXRlQ2xhc3NNYXAobmV3UGxhY2VtZW50OiBzdHJpbmcgPSB0aGlzLnBsYWNlbWVudCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5zdGFuY2UudXBkYXRlQ2xhc3NNYXAoUE9TSVRJT05fVE9fQ1NTX01BUFtuZXdQbGFjZW1lbnRdLCB0aGlzLmN1c3RvbUNsYXNzLCB0aGlzLnNpemUpO1xuICAgICAgICB0aGlzLmluc3RhbmNlLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGNsb3NpbmdBY3Rpb25zRm9yQ2xpY2soKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NsaWNrVHJpZ2dlcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdENsb3NpbmdBY3Rpb25zKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgZGVmYXVsdENsb3NpbmdBY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmIS5iYWNrZHJvcENsaWNrKCksXG4gICAgICAgICAgICB0aGlzLmhhc0JhY2tkcm9wID8gTkVWRVIgOiB0aGlzLm92ZXJsYXlSZWYhLm91dHNpZGVQb2ludGVyRXZlbnRzKClcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBjbG9zaW5nQWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIG1lcmdlKC4uLnRoaXMuY2xvc2luZ0FjdGlvbnNGb3JDbGljaygpLCB0aGlzLmNsb3NlT25TY3JvbGwgPyB0aGlzLnNjcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQoKSA6IE5FVkVSKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZGVJZk5vdEluVmlld1BvcnQgPSAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zY3JvbGxhYmxlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gdGhpcy5zY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgcmVjdC5ib3R0b20gPj0gY29udGFpbmVyUmVjdC50b3AgJiZcbiAgICAgICAgICAgICAgICByZWN0LnJpZ2h0ID49IGNvbnRhaW5lclJlY3QubGVmdCAmJlxuICAgICAgICAgICAgICAgIHJlY3QudG9wIDw9IGNvbnRhaW5lclJlY3QuYm90dG9tICYmXG4gICAgICAgICAgICAgICAgcmVjdC5sZWZ0IDw9IGNvbnRhaW5lclJlY3QucmlnaHRcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgfVxuICAgIH07XG59XG4iLCI8ZGl2XG4gICAgI3BvcG92ZXJcbiAgICBjbGFzcz1cImticS1wb3BvdmVyXCJcbiAgICBbY2xhc3Mua2JxLXBvcG92ZXJfYXJyb3dsZXNzXT1cIiFhcnJvd1wiXG4gICAgW2Nka1RyYXBGb2N1c109XCJpc1RyYXBGb2N1c1wiXG4gICAgW25nQ2xhc3NdPVwiY2xhc3NNYXBcIlxuICAgIFtAc3RhdGVdPVwidmlzaWJpbGl0eVwiXG4gICAgKEBzdGF0ZS5kb25lKT1cImFuaW1hdGlvbkRvbmUoJGV2ZW50KVwiXG4gICAgKEBzdGF0ZS5zdGFydCk9XCJhbmltYXRpb25TdGFydCgpXCJcbj5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwia2JxLXBvcG92ZXJfX2NvbnRhaW5lclwiXG4gICAgICAgIFtjbGFzcy5rYnEtcG9wb3Zlcl9fY29udGFpbmVyX3dpdGgtZm9vdGVyXT1cImZvb3RlclwiXG4gICAgICAgIFtjbGFzcy5rYnEtcG9wb3Zlcl9fY29udGFpbmVyX3dpdGgtaGVhZGVyXT1cImhlYWRlclwiXG4gICAgPlxuICAgICAgICBAaWYgKGhlYWRlcikge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwia2JxLXBvcG92ZXJfX2hlYWRlclwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmticS1wb3BvdmVyX19oZWFkZXJfZGVmYXVsdC1wYWRkaW5nc109XCJkZWZhdWx0UGFkZGluZ3NcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5rYnEtcG9wb3Zlcl9faGVhZGVyX3RvcC1vdmVyZmxvd109XCJpc0NvbnRlbnRUb3BPdmVyZmxvd1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmticS1wb3BvdmVyX19oZWFkZXJfd2l0aC1jbG9zZS1idXR0b25dPVwiaGFzQ2xvc2VCdXR0b25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBpZiAoaXNUZW1wbGF0ZVJlZihoZWFkZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiJGFueShoZWFkZXIpXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImNvbnRleHRcIiAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKCFpc1RlbXBsYXRlUmVmKGhlYWRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImticS1wb3BvdmVyX19oZWFkZXItdGV4dFwiPnt7IGhlYWRlciB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChjb250ZW50KSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgI3BvcG92ZXJDb250ZW50XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJrYnEtcG9wb3Zlcl9fY29udGVudCBrYnEtc2Nyb2xsYmFyXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Mua2JxLXBvcG92ZXJfX2NvbnRlbnRfZGVmYXVsdC1wYWRkaW5nc109XCJkZWZhdWx0UGFkZGluZ3NcIlxuICAgICAgICAgICAgICAgIChjZGtPYnNlcnZlQ29udGVudCk9XCJvbkNvbnRlbnRDaGFuZ2UoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGlmIChoYXNDbG9zZUJ1dHRvbiAmJiAhaGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrYnEtcG9wb3Zlcl9fY2xvc2UtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNsb3NlQnV0dG9uXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoaXNUZW1wbGF0ZVJlZihjb250ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIiRhbnkoY29udGVudClcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiY29udGV4dFwiIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoIWlzVGVtcGxhdGVSZWYoY29udGVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdj57eyBjb250ZW50IH19PC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKGZvb3Rlcikge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwia2JxLXBvcG92ZXJfX2Zvb3RlclwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmticS1wb3BvdmVyX19mb290ZXJfZGVmYXVsdC1wYWRkaW5nc109XCJkZWZhdWx0UGFkZGluZ3NcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5rYnEtcG9wb3Zlcl9fZm9vdGVyX2JvdHRvbS1vdmVyZmxvd109XCJpc0NvbnRlbnRCb3R0b21PdmVyZmxvd1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGlmIChpc1RlbXBsYXRlUmVmKGZvb3RlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCIkYW55KGZvb3RlcilcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiY29udGV4dFwiIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoIWlzVGVtcGxhdGVSZWYoZm9vdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7IGZvb3RlciB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKGhhc0Nsb3NlQnV0dG9uICYmIGhlYWRlcikge1xuICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLXBvcG92ZXJfX2Nsb3NlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjbG9zZUJ1dHRvblwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDxuZy10ZW1wbGF0ZSAjY2xvc2VCdXR0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJrYnEtcG9wb3Zlcl9fY2xvc2VcIj5cbiAgICAgICAgICAgIDxidXR0b24ga2JxLWJ1dHRvbiBjbGFzcz1cImticS1idXR0b25fdHJhbnNwYXJlbnRcIiBbY29sb3JdPVwiY29tcG9uZW50Q29sb3JzLkNvbnRyYXN0XCIgKGNsaWNrKT1cImhpZGUoMClcIj5cbiAgICAgICAgICAgICAgICA8aSBrYnEtaWNvbj1cImticS14bWFya18xNlwiIFtjb2xvcl09XCJjb21wb25lbnRDb2xvcnMuQ29udHJhc3RcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIEBpZiAoYXJyb3cpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImticS1wb3BvdmVyX19hcnJvd1wiPjwvZGl2PlxuICAgIH1cbjwvZGl2PlxuIl19
410
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUdILE9BQU8sRUFHVixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLGNBQWMsRUFDZCxLQUFLLEVBRUwsTUFBTSxFQUdOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixlQUFlLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsUUFBUSxFQUNSLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLFVBQVUsRUFDVixhQUFhLEVBQ2IsaUJBQWlCLEVBQ3BCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7OztBQUU1RCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUM7QUFjekMsTUFBTSxP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c0JBRGQsS0FBSzt1QkFBQyxpQkFBaUI7Z0JBYXBCLE9BQU87c0JBRFYsS0FBSzt1QkFBQyxtQkFBbUI7Z0JBYXRCLGNBQWM7c0JBRGpCLEtBQUs7Z0JBZ0JGLGFBQWE7c0JBRGhCLEtBQUs7Z0JBZUcsYUFBYTtzQkFBckIsS0FBSztnQkFHNEQsS0FBSztzQkFBdEUsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBRUUsTUFBTTtzQkFBdkUsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQUdELFVBQVU7c0JBQXhFLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUU7Z0JBRWYsZUFBZTtzQkFBNUQsTUFBTTt1QkFBQywyQkFBMkI7Z0JBRVMsYUFBYTtzQkFBeEQsTUFBTTt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtUcmFwRm9jdXMgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgICBDZGtTY3JvbGxhYmxlLFxuICAgIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSxcbiAgICBPdmVybGF5LFxuICAgIE92ZXJsYXlDb25maWcsXG4gICAgU2Nyb2xsU3RyYXRlZ3lcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3Rpb25Ub2tlbixcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFR5cGUsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgaW5qZWN0LFxuICAgIG51bWJlckF0dHJpYnV0ZVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7XG4gICAgS2JxQ29tcG9uZW50Q29sb3JzLFxuICAgIEticVBvcFVwLFxuICAgIEticVBvcFVwVHJpZ2dlcixcbiAgICBQT1NJVElPTl9UT19DU1NfTUFQLFxuICAgIFBvcFVwUGxhY2VtZW50cyxcbiAgICBQb3BVcFNpemVzLFxuICAgIFBvcFVwVHJpZ2dlcnMsXG4gICAgYXBwbHlQb3B1cE1hcmdpbnNcbn0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2NvcmUnO1xuaW1wb3J0IHsgTkVWRVIsIGZyb21FdmVudCwgbWVyZ2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGticVBvcG92ZXJBbmltYXRpb25zIH0gZnJvbSAnLi9wb3BvdmVyLWFuaW1hdGlvbnMnO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdE9mZnNldFlXaXRoQXJyb3cgPSA4O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ticS1wb3BvdmVyLWNvbXBvbmVudCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICAgIHN0eWxlVXJsczogWycuL3BvcG92ZXIuc2NzcycsICcuL3BvcG92ZXItdG9rZW5zLnNjc3MnXSxcbiAgICBob3N0OiB7XG4gICAgICAgICcoa2V5ZG93bi5lc2MpJzogJ29uRXNjYXBlKCknXG4gICAgfSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGFuaW1hdGlvbnM6IFtrYnFQb3BvdmVyQW5pbWF0aW9ucy5wb3BvdmVyU3RhdGVdXG59KVxuZXhwb3J0IGNsYXNzIEticVBvcG92ZXJDb21wb25lbnQgZXh0ZW5kcyBLYnFQb3BVcCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAgIHByZWZpeCA9ICdrYnEtcG9wb3Zlcic7XG5cbiAgICBoZWFkZXI6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG4gICAgZm9vdGVyOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgdHJpZ2dlcjogS2JxUG9wb3ZlclRyaWdnZXI7XG5cbiAgICBpc1RyYXBGb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGhhc0Nsb3NlQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBAVmlld0NoaWxkKCdwb3BvdmVyQ29udGVudCcpIHBvcG92ZXJDb250ZW50OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgICBAVmlld0NoaWxkKCdwb3BvdmVyJykgZWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKENka1RyYXBGb2N1cykgY2RrVHJhcEZvY3VzOiBDZGtUcmFwRm9jdXM7XG5cbiAgICBwcml2YXRlIGRlYm91bmNlVGltZSA9IDE1O1xuICAgIGlzQ29udGVudFRvcE92ZXJmbG93OiBib29sZWFuID0gZmFsc2U7XG4gICAgaXNDb250ZW50Qm90dG9tT3ZlcmZsb3c6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBvcG92ZXJDb250ZW50KSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5jaGVja0NvbnRlbnRPdmVyZmxvdyh0aGlzLnBvcG92ZXJDb250ZW50Lm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgIGZyb21FdmVudCh0aGlzLnBvcG92ZXJDb250ZW50Lm5hdGl2ZUVsZW1lbnQsICdzY3JvbGwnKVxuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tDb250ZW50T3ZlcmZsb3coZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY2RrVHJhcEZvY3VzLmZvY3VzVHJhcC5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCk7XG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5zdWJzY3JpYmUoKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vZmZzZXQgIT09IG51bGwgJiYgc3RhdGUpIHtcbiAgICAgICAgICAgICAgICBhcHBseVBvcHVwTWFyZ2lucyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlcixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJlZml4LFxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLm9mZnNldCEudG9TdHJpbmcoKX1weGBcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGlja1Bvc2l0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uQ29udGVudENoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5jaGVja0NvbnRlbnRPdmVyZmxvdyh0aGlzLnBvcG92ZXJDb250ZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIGNoZWNrQ29udGVudE92ZXJmbG93KGNvbnRlbnRFbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgb2Zmc2V0SGVpZ2h0LCBzY3JvbGxIZWlnaHQgfSA9IGNvbnRlbnRFbGVtZW50O1xuXG4gICAgICAgIHRoaXMuaXNDb250ZW50VG9wT3ZlcmZsb3cgPSBzY3JvbGxUb3AgPiAwO1xuXG4gICAgICAgIHRoaXMuaXNDb250ZW50Qm90dG9tT3ZlcmZsb3cgPSBNYXRoLnJvdW5kKHNjcm9sbFRvcCArIG9mZnNldEhlaWdodCkgPCBzY3JvbGxIZWlnaHQ7XG5cbiAgICAgICAgc3VwZXIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHVwZGF0ZUNsYXNzTWFwKHBsYWNlbWVudDogc3RyaW5nLCBjdXN0b21DbGFzczogc3RyaW5nLCBzaXplOiBQb3BVcFNpemVzKSB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZUNsYXNzTWFwKHBsYWNlbWVudCwgY3VzdG9tQ2xhc3MsIHsgW2Ake3RoaXMucHJlZml4fV8ke3NpemV9YF06ICEhc2l6ZSB9KTtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFwRm9jdXMoaXNUcmFwRm9jdXM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1RyYXBGb2N1cyA9IGlzVHJhcEZvY3VzO1xuICAgIH1cblxuICAgIG9uRXNjYXBlKCkge1xuICAgICAgICB0aGlzLmhpZGUoMCk7XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbXBvbmVudENvbG9ycyA9IEticUNvbXBvbmVudENvbG9ycztcbn1cblxuZXhwb3J0IGNvbnN0IEtCUV9QT1BPVkVSX1NDUk9MTF9TVFJBVEVHWSA9IG5ldyBJbmplY3Rpb25Ub2tlbjwoKSA9PiBTY3JvbGxTdHJhdGVneT4oJ2ticS1wb3BvdmVyLXNjcm9sbC1zdHJhdGVneScpO1xuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGticVBvcG92ZXJTY3JvbGxTdHJhdGVneUZhY3Rvcnkob3ZlcmxheTogT3ZlcmxheSk6ICgpID0+IFNjcm9sbFN0cmF0ZWd5IHtcbiAgICByZXR1cm4gKCkgPT4gb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oeyBzY3JvbGxUaHJvdHRsZTogMjAgfSk7XG59XG5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5leHBvcnQgY29uc3QgS0JRX1BPUE9WRVJfU0NST0xMX1NUUkFURUdZX0ZBQ1RPUllfUFJPVklERVIgPSB7XG4gICAgcHJvdmlkZTogS0JRX1BPUE9WRVJfU0NST0xMX1NUUkFURUdZLFxuICAgIGRlcHM6IFtPdmVybGF5XSxcbiAgICB1c2VGYWN0b3J5OiBrYnFQb3BvdmVyU2Nyb2xsU3RyYXRlZ3lGYWN0b3J5XG59O1xuXG4vKiogQ3JlYXRlcyBhbiBlcnJvciB0byBiZSB0aHJvd24gaWYgdGhlIHVzZXIgc3VwcGxpZWQgYW4gaW52YWxpZCBwb3BvdmVyIHBvc2l0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEticVBvcG92ZXJJbnZhbGlkUG9zaXRpb25FcnJvcihwb3NpdGlvbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIEVycm9yKGBLYnFQb3BvdmVyIHBvc2l0aW9uIFwiJHtwb3NpdGlvbn1cIiBpcyBpbnZhbGlkLmApO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1trYnFQb3BvdmVyXScsXG4gICAgZXhwb3J0QXM6ICdrYnFQb3BvdmVyJyxcbiAgICBob3N0OiB7XG4gICAgICAgICdbY2xhc3Mua2JxLXBvcG92ZXJfb3Blbl0nOiAnaXNPcGVuJyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtYWN0aXZlXSc6ICdoYXNDbGlja1RyaWdnZXIgJiYgaXNPcGVuJyxcbiAgICAgICAgJyhrZXlkb3duKSc6ICdrZXlkb3duSGFuZGxlcigkZXZlbnQpJyxcbiAgICAgICAgJyh0b3VjaGVuZCknOiAndG91Y2hlbmRIYW5kbGVyKCknXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBLYnFQb3BvdmVyVHJpZ2dlciBleHRlbmRzIEticVBvcFVwVHJpZ2dlcjxLYnFQb3BvdmVyQ29tcG9uZW50PiBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uSW5pdCB7XG4gICAgcHJvdGVjdGVkIHNjcm9sbFN0cmF0ZWd5OiAoKSA9PiBTY3JvbGxTdHJhdGVneSA9IGluamVjdChLQlFfUE9QT1ZFUl9TQ1JPTExfU1RSQVRFR1kpO1xuXG4gICAgLyoqIHByZXZlbnRzIGNsb3N1cmUgYnkgYW55IGV2ZW50ICovXG4gICAgQElucHV0KHsgYWxpYXM6ICdrYnFQb3BvdmVyUHJldmVudENsb3NlJywgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIG92ZXJyaWRlIHByZXZlbnRDbG9zZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIGRpc2FibGVzIGRlZmF1bHQgcGFkZGluZyBmb3IgYWxsIHBvcG92ZXIgZWxlbWVudHMgKGhlYWRlciwgY29udGVudCBhbmQgZm9vdGVyKSAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBkZWZhdWx0UGFkZGluZ3MgPSB0cnVlO1xuXG4gICAgQElucHV0KCdrYnFQb3BvdmVyVmlzaWJsZScpXG4gICAgZ2V0IHBvcG92ZXJWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlO1xuICAgIH1cblxuICAgIHNldCBwb3BvdmVyVmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBzdXBlci51cGRhdGVWaXNpYmxlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoJ2ticVBvcG92ZXJQbGFjZW1lbnQnKVxuICAgIGdldCBwb3BvdmVyUGxhY2VtZW50KCk6IFBvcFVwUGxhY2VtZW50cyB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYWNlbWVudDtcbiAgICB9XG5cbiAgICBzZXQgcG9wb3ZlclBsYWNlbWVudCh2YWx1ZTogUG9wVXBQbGFjZW1lbnRzKSB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZVBsYWNlbWVudCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KCdrYnFQb3BvdmVyUGxhY2VtZW50UHJpb3JpdHknKVxuICAgIGdldCBwb3BvdmVyUGxhY2VtZW50UHJpb3JpdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYWNlbWVudFByaW9yaXR5O1xuICAgIH1cblxuICAgIHNldCBwb3BvdmVyUGxhY2VtZW50UHJpb3JpdHkodmFsdWUpIHtcbiAgICAgICAgc3VwZXIudXBkYXRlUGxhY2VtZW50UHJpb3JpdHkodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZGl0aW9uYWxseSBwb3NpdGlvbnMgdGhlIGVsZW1lbnQgcmVsYXRpdmUgdG8gdGhlIHdpbmRvdyBzaWRlIChUb3AsIFJpZ2h0LCBCb3R0b20gYW5kIExlZnQpLlxuICAgICAqIElmIGNvbnRhaW5lciBpcyBzcGVjaWZpZWQsIHRoZSBwb3NpdGlvbmluZyB3aWxsIGJlIHJlbGF0aXZlIHRvIGl0LlxuICAgICAqICovXG4gICAgQElucHV0KCdrYnFQb3BvdmVyU3RpY2tUb1dpbmRvdycpIHN0aWNrVG9XaW5kb3c6XG4gICAgICAgIHwgUG9wVXBQbGFjZW1lbnRzLlRvcFxuICAgICAgICB8IFBvcFVwUGxhY2VtZW50cy5SaWdodFxuICAgICAgICB8IFBvcFVwUGxhY2VtZW50cy5Cb3R0b21cbiAgICAgICAgfCBQb3BVcFBsYWNlbWVudHMuTGVmdFxuICAgICAgICB8IHN0cmluZztcblxuICAgIC8qKiBDb250YWluZXIgZm9yIGFkZGl0aW9uYWwgcG9zaXRpb25pbmcsIHVzZWQgd2l0aCBrYnFQb3BvdmVyU3RpY2tUb1dpbmRvdyAqL1xuICAgIEBJbnB1dCgpIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBoYXNCYWNrZHJvcCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0JhY2tkcm9wO1xuICAgIH1cblxuICAgIHNldCBoYXNCYWNrZHJvcCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9oYXNCYWNrZHJvcCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaGFzQmFja2Ryb3A6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgna2JxUG9wb3ZlckhlYWRlcicpXG4gICAgZ2V0IGhlYWRlcigpOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlYWRlcjtcbiAgICB9XG5cbiAgICBzZXQgaGVhZGVyKHZhbHVlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgICAgIHRoaXMuX2hlYWRlciA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMudXBkYXRlRGF0YSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2hlYWRlcjogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBJbnB1dCgna2JxUG9wb3ZlckNvbnRlbnQnKVxuICAgIGdldCBjb250ZW50KCk6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudDtcbiAgICB9XG5cbiAgICBzZXQgY29udGVudCh2YWx1ZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pikge1xuICAgICAgICB0aGlzLl9jb250ZW50ID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy51cGRhdGVEYXRhKCk7XG4gICAgfVxuXG4gICAgQElucHV0KCdrYnFQb3BvdmVyRm9vdGVyJylcbiAgICBnZXQgZm9vdGVyKCk6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9vdGVyO1xuICAgIH1cblxuICAgIHNldCBmb290ZXIodmFsdWU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICAgICAgdGhpcy5fZm9vdGVyID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy51cGRhdGVEYXRhKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZm9vdGVyOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQElucHV0KCdrYnFQb3BvdmVyRGlzYWJsZWQnKVxuICAgIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIHNldCBkaXNhYmxlZCh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgna2JxVHJpZ2dlcicpXG4gICAgZ2V0IHRyaWdnZXIoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyaWdnZXI7XG4gICAgfVxuXG4gICAgc2V0IHRyaWdnZXIodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJpZ2dlci5pbmNsdWRlcyhQb3BVcFRyaWdnZXJzLkhvdmVyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZVdpdGhUaW1lb3V0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxlYXZlRGVsYXkgPSB0aGlzLmxlYXZlRGVsYXkgPz8gNTAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdHJpZ2dlciA9IGAke1BvcFVwVHJpZ2dlcnMuQ2xpY2t9LCAke1BvcFVwVHJpZ2dlcnMuS2V5ZG93bn1gO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbml0TGlzdGVuZXJzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdHJpZ2dlcjogc3RyaW5nID0gYCR7UG9wVXBUcmlnZ2Vycy5DbGlja30sICR7UG9wVXBUcmlnZ2Vycy5LZXlkb3dufWA7XG5cbiAgICBASW5wdXQoJ2ticVBvcG92ZXJTaXplJylcbiAgICBnZXQgc2l6ZSgpOiBQb3BVcFNpemVzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gICAgfVxuXG4gICAgc2V0IHNpemUodmFsdWU6IFBvcFVwU2l6ZXMpIHtcbiAgICAgICAgaWYgKFtQb3BVcFNpemVzLlNtYWxsLCBQb3BVcFNpemVzLk1lZGl1bSwgUG9wVXBTaXplcy5MYXJnZV0uaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLl9zaXplID0gdmFsdWU7XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2xhc3NNYXAoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3NpemUgPSBQb3BVcFNpemVzLk1lZGl1bTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3NpemU6IFBvcFVwU2l6ZXMgPSBQb3BVcFNpemVzLk1lZGl1bTtcblxuICAgIEBJbnB1dCgna2JxUG9wb3ZlckNsYXNzJylcbiAgICBnZXQgY3VzdG9tQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXN0b21DbGFzcztcbiAgICB9XG5cbiAgICBzZXQgY3VzdG9tQ2xhc3ModmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9jdXN0b21DbGFzcyA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMudXBkYXRlQ2xhc3NNYXAoKTtcbiAgICB9XG5cbiAgICAvKiogQ29udGV4dCBmb3IgcG9wb3ZlciB0ZW1wbGF0ZXMgKGticVBvcG92ZXJIZWFkZXIsIGticVBvcG92ZXJDb250ZW50IGFuZCBrYnFQb3BvdmVyRm9vdGVyKS4gKi9cbiAgICBASW5wdXQoJ2ticVBvcG92ZXJDb250ZXh0JylcbiAgICBnZXQgY29udGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHQ7XG4gICAgfVxuXG4gICAgc2V0IGNvbnRleHQoY3R4KSB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQgPSBjdHg7XG4gICAgICAgIHRoaXMudXBkYXRlRGF0YSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NvbnRleHQ6IHVua25vd24gPSBudWxsO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgaGFzQ2xvc2VCdXR0b24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNDbG9zZUJ1dHRvbjtcbiAgICB9XG4gICAgc2V0IGhhc0Nsb3NlQnV0dG9uKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2hhc0Nsb3NlQnV0dG9uID0gdmFsdWU7XG4gICAgICAgIHRoaXMudXBkYXRlRGF0YSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9oYXNDbG9zZUJ1dHRvbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgdGhlIGJlaGF2aW9yIG9mIGNsb3NpbmcgdGhlIGNvbXBvbmVudCBvbiBzY3JvbGwuXG4gICAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICAgKiBVc2UgQ2xvc2VTY3JvbGxTdHJhdGVneSBhcyBhbHRlcm5hdGl2ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGNsb3NlT25TY3JvbGwoKTogYm9vbGVhbiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xvc2VPblNjcm9sbDtcbiAgICB9XG5cbiAgICBzZXQgY2xvc2VPblNjcm9sbCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9jbG9zZU9uU2Nyb2xsID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jbG9zZU9uU2Nyb2xsOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG5cbiAgICBnZXQgaGFzQ2xpY2tUcmlnZ2VyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50cmlnZ2VyLmluY2x1ZGVzKFBvcFVwVHJpZ2dlcnMuQ2xpY2spO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGJhY2tkcm9wQ2xhc3M6IHN0cmluZyA9ICdjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCc7XG5cbiAgICAvLyBAVE9ETyBhZGQgcmVhbGl6YXRpb24gZm9yIGFycm93ICgjRFMtMjUxNClcbiAgICBASW5wdXQoeyBhbGlhczogJ2ticVBvcG92ZXJBcnJvdycsIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBhcnJvdzogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBASW5wdXQoeyBhbGlhczogJ2ticVBvcG92ZXJPZmZzZXQnLCB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBvZmZzZXQ6IG51bWJlciB8IG51bGwgPSBkZWZhdWx0T2Zmc2V0WVdpdGhBcnJvdztcblxuICAgIC8qKiBEZWxheSBiZWZvcmUgY2xvc2luZyBpbiBtaWxsaXNlY29uZHMuIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBrYnFUcmlnZ2VyPVBvcFVwVHJpZ2dlcnMuSG92ZXIgaXMgNTAwIG1zLiAqL1xuICAgIEBJbnB1dCh7IGFsaWFzOiAna2JxTGVhdmVEZWxheScsIHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIGxlYXZlRGVsYXk6IG51bWJlcjtcblxuICAgIEBPdXRwdXQoJ2ticVBvcG92ZXJQbGFjZW1lbnRDaGFuZ2UnKSByZWFkb25seSBwbGFjZW1lbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KCdrYnFQb3BvdmVyVmlzaWJsZUNoYW5nZScpIHJlYWRvbmx5IHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBwcm90ZWN0ZWQgb3JpZ2luU2VsZWN0b3IgPSAnLmticS1wb3BvdmVyJztcblxuICAgIHByb3RlY3RlZCBnZXQgb3ZlcmxheUNvbmZpZygpOiBPdmVybGF5Q29uZmlnIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdrYnEtcG9wb3Zlcl9fcGFuZWwnLFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IHRoaXMuaGFzQmFja2Ryb3AsXG4gICAgICAgICAgICBiYWNrZHJvcENsYXNzOiB0aGlzLmJhY2tkcm9wQ2xhc3NcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICB0aGlzLnNjcm9sbGFibGVcbiAgICAgICAgICAgID8uZWxlbWVudFNjcm9sbGVkKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLmhpZGVJZk5vdEluVmlld1BvcnQpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VPblNjcm9sbCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKCkuc3Vic2NyaWJlKChzY3JvbGxhYmxlOiBDZGtTY3JvbGxhYmxlIHwgdm9pZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghc2Nyb2xsYWJsZT8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdrYnEtaGlkZS1uZXN0ZWQtcG9wdXAnKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50UmVjdHMgPSBzY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkUmVjdHMgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgICAgICAgIGlmIChjaGlsZFJlY3RzLmJvdHRvbSA8IHBhcmVudFJlY3RzLnRvcCB8fCBjaGlsZFJlY3RzLnRvcCA+IHBhcmVudFJlY3RzLmJvdHRvbSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZURhdGEoKSB7XG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuaW5zdGFuY2UuaGVhZGVyID0gdGhpcy5oZWFkZXI7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UuY29udGVudCA9IHRoaXMuY29udGVudDtcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5jb250ZXh0ID0gdGhpcy5jb250ZXh0ICYmIHsgJGltcGxpY2l0OiB0aGlzLmNvbnRleHQgfTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5hcnJvdyA9IHRoaXMuYXJyb3c7XG4gICAgICAgIHRoaXMuaW5zdGFuY2Uub2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UuZm9vdGVyID0gdGhpcy5mb290ZXI7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UuaGFzQ2xvc2VCdXR0b24gPSB0aGlzLmhhc0Nsb3NlQnV0dG9uO1xuICAgICAgICB0aGlzLmluc3RhbmNlLmRlZmF1bHRQYWRkaW5ncyA9IHRoaXMuZGVmYXVsdFBhZGRpbmdzO1xuXG4gICAgICAgIHRoaXMuaW5zdGFuY2UudXBkYXRlVHJhcEZvY3VzKHRoaXMudHJpZ2dlciAhPT0gUG9wVXBUcmlnZ2Vycy5Gb2N1cyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFVwZGF0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IHBvcG92ZXIuICovXG4gICAgdXBkYXRlUG9zaXRpb24ocmVhcHBseVBvc2l0aW9uOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5jcmVhdGVPdmVybGF5KCk7XG5cbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSAodGhpcy5vdmVybGF5UmVmLmdldENvbmZpZygpLnBvc2l0aW9uU3RyYXRlZ3kgYXMgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5KVxuICAgICAgICAgICAgLndpdGhQb3NpdGlvbnModGhpcy5nZXRBZGp1c3RlZFBvc2l0aW9ucygpKVxuICAgICAgICAgICAgLndpdGhQdXNoKHRydWUpO1xuXG4gICAgICAgIGlmIChyZWFwcGx5UG9zaXRpb24pIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcG9zaXRpb24ucmVhcHBseUxhc3RQb3NpdGlvbigpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldE92ZXJsYXlIYW5kbGVDb21wb25lbnRUeXBlKCk6IFR5cGU8S2JxUG9wb3ZlckNvbXBvbmVudD4ge1xuICAgICAgICByZXR1cm4gS2JxUG9wb3ZlckNvbXBvbmVudDtcbiAgICB9XG5cbiAgICB1cGRhdGVDbGFzc01hcChuZXdQbGFjZW1lbnQ6IHN0cmluZyA9IHRoaXMucGxhY2VtZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnN0YW5jZS51cGRhdGVDbGFzc01hcChQT1NJVElPTl9UT19DU1NfTUFQW25ld1BsYWNlbWVudF0sIHRoaXMuY3VzdG9tQ2xhc3MsIHRoaXMuc2l6ZSk7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgY2xvc2luZ0FjdGlvbnNGb3JDbGljaygpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2xpY2tUcmlnZ2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0Q2xvc2luZ0FjdGlvbnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBkZWZhdWx0Q2xvc2luZ0FjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYhLmJhY2tkcm9wQ2xpY2soKSxcbiAgICAgICAgICAgIHRoaXMuaGFzQmFja2Ryb3AgPyBORVZFUiA6IHRoaXMub3ZlcmxheVJlZiEub3V0c2lkZVBvaW50ZXJFdmVudHMoKVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGNsb3NpbmdBY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gbWVyZ2UoLi4udGhpcy5jbG9zaW5nQWN0aW9uc0ZvckNsaWNrKCksIHRoaXMuY2xvc2VPblNjcm9sbCA/IHRoaXMuc2Nyb2xsRGlzcGF0Y2hlci5zY3JvbGxlZCgpIDogTkVWRVIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGlkZUlmTm90SW5WaWV3UG9ydCA9ICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnNjcm9sbGFibGUpIHJldHVybjtcblxuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSB0aGlzLnNjcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICByZWN0LmJvdHRvbSA+PSBjb250YWluZXJSZWN0LnRvcCAmJlxuICAgICAgICAgICAgICAgIHJlY3QucmlnaHQgPj0gY29udGFpbmVyUmVjdC5sZWZ0ICYmXG4gICAgICAgICAgICAgICAgcmVjdC50b3AgPD0gY29udGFpbmVyUmVjdC5ib3R0b20gJiZcbiAgICAgICAgICAgICAgICByZWN0LmxlZnQgPD0gY29udGFpbmVyUmVjdC5yaWdodFxuICAgICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbiIsIjxkaXZcbiAgICAjcG9wb3ZlclxuICAgIGNsYXNzPVwia2JxLXBvcG92ZXJcIlxuICAgIFtjbGFzcy5rYnEtcG9wb3Zlcl9hcnJvd2xlc3NdPVwiIWFycm93XCJcbiAgICBbY2RrVHJhcEZvY3VzXT1cImlzVHJhcEZvY3VzXCJcbiAgICBbbmdDbGFzc109XCJjbGFzc01hcFwiXG4gICAgW0BzdGF0ZV09XCJ2aXNpYmlsaXR5XCJcbiAgICAoQHN0YXRlLmRvbmUpPVwiYW5pbWF0aW9uRG9uZSgkZXZlbnQpXCJcbiAgICAoQHN0YXRlLnN0YXJ0KT1cImFuaW1hdGlvblN0YXJ0KClcIlxuPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJrYnEtcG9wb3Zlcl9fY29udGFpbmVyXCJcbiAgICAgICAgW2NsYXNzLmticS1wb3BvdmVyX19jb250YWluZXJfd2l0aC1mb290ZXJdPVwiZm9vdGVyXCJcbiAgICAgICAgW2NsYXNzLmticS1wb3BvdmVyX19jb250YWluZXJfd2l0aC1oZWFkZXJdPVwiaGVhZGVyXCJcbiAgICA+XG4gICAgICAgIEBpZiAoaGVhZGVyKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJrYnEtcG9wb3Zlcl9faGVhZGVyXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Mua2JxLXBvcG92ZXJfX2hlYWRlcl9kZWZhdWx0LXBhZGRpbmdzXT1cImRlZmF1bHRQYWRkaW5nc1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmticS1wb3BvdmVyX19oZWFkZXJfdG9wLW92ZXJmbG93XT1cImlzQ29udGVudFRvcE92ZXJmbG93XCJcbiAgICAgICAgICAgICAgICBbY2xhc3Mua2JxLXBvcG92ZXJfX2hlYWRlcl93aXRoLWNsb3NlLWJ1dHRvbl09XCJoYXNDbG9zZUJ1dHRvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGlmIChpc1RlbXBsYXRlUmVmKGhlYWRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCIkYW55KGhlYWRlcilcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiY29udGV4dFwiIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoIWlzVGVtcGxhdGVSZWYoaGVhZGVyKSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLXBvcG92ZXJfX2hlYWRlci10ZXh0XCI+e3sgaGVhZGVyIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAjcG9wb3ZlckNvbnRlbnRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImticS1wb3BvdmVyX19jb250ZW50IGticS1zY3JvbGxiYXJcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5rYnEtcG9wb3Zlcl9fY29udGVudF9kZWZhdWx0LXBhZGRpbmdzXT1cImRlZmF1bHRQYWRkaW5nc1wiXG4gICAgICAgICAgICAgICAgKGNka09ic2VydmVDb250ZW50KT1cIm9uQ29udGVudENoYW5nZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYgKGhhc0Nsb3NlQnV0dG9uICYmICFoZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImticS1wb3BvdmVyX19jbG9zZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2xvc2VCdXR0b25cIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChpc1RlbXBsYXRlUmVmKGNvbnRlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiJGFueShjb250ZW50KVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJjb250ZXh0XCIgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmICghaXNUZW1wbGF0ZVJlZihjb250ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7IGNvbnRlbnQgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoZm9vdGVyKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJrYnEtcG9wb3Zlcl9fZm9vdGVyXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Mua2JxLXBvcG92ZXJfX2Zvb3Rlcl9kZWZhdWx0LXBhZGRpbmdzXT1cImRlZmF1bHRQYWRkaW5nc1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmticS1wb3BvdmVyX19mb290ZXJfYm90dG9tLW92ZXJmbG93XT1cImlzQ29udGVudEJvdHRvbU92ZXJmbG93XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYgKGlzVGVtcGxhdGVSZWYoZm9vdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIiRhbnkoZm9vdGVyKVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJjb250ZXh0XCIgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmICghaXNUZW1wbGF0ZVJlZihmb290ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+e3sgZm9vdGVyIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoaGFzQ2xvc2VCdXR0b24gJiYgaGVhZGVyKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJrYnEtcG9wb3Zlcl9fY2xvc2UtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNsb3NlQnV0dG9uXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPG5nLXRlbXBsYXRlICNjbG9zZUJ1dHRvbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImticS1wb3BvdmVyX19jbG9zZVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBrYnEtYnV0dG9uIGNsYXNzPVwia2JxLWJ1dHRvbl90cmFuc3BhcmVudFwiIFtjb2xvcl09XCJjb21wb25lbnRDb2xvcnMuQ29udHJhc3RcIiAoY2xpY2spPVwiaGlkZSgwKVwiPlxuICAgICAgICAgICAgICAgIDxpIGticS1pY29uPVwia2JxLXhtYXJrXzE2XCIgW2NvbG9yXT1cImNvbXBvbmVudENvbG9ycy5Db250cmFzdFwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgQGlmIChhcnJvdykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLXBvcG92ZXJfX2Fycm93XCI+PC9kaXY+XG4gICAgfVxuPC9kaXY+XG4iXX0=