@provoly/dashboard 1.4.23 → 1.4.25

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 (36) hide show
  1. package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +1 -1
  2. package/esm2022/lib/core/model/manifest.interface.mjs +1 -1
  3. package/esm2022/lib/core/store/search/search.actions.mjs +1 -1
  4. package/esm2022/lib/core/store/search/search.effects.mjs +9 -4
  5. package/esm2022/lib/core/store/search/search.service.mjs +1 -1
  6. package/esm2022/lib/dashboard/components/dashboard.component.mjs +8 -26
  7. package/esm2022/lib/dashboard/components/widgets/header/widget-header.component.mjs +1 -1
  8. package/esm2022/lib/dashboard/components/widgets/widget-instanciator/widget-factory.service.mjs +32 -23
  9. package/esm2022/lib/dashboard/filter/components/filter-group/filter-group.component.mjs +4 -6
  10. package/esm2022/lib/dashboard/store/dashboard.actions.mjs +2 -2
  11. package/esm2022/lib/dashboard/store/dashboard.effects.mjs +8 -18
  12. package/esm2022/lib/dashboard/store/manifest-utils.class.mjs +17 -1
  13. package/esm2022/toolbox/components/select-grid-layout/select-grid-layout.component.mjs +1 -1
  14. package/esm2022/widgets/widget-map/interaction/tooltip-manager.class.mjs +3 -2
  15. package/fesm2022/provoly-dashboard-dataset.mjs +1 -1
  16. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  17. package/fesm2022/provoly-dashboard-toolbox.mjs +1 -1
  18. package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
  19. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +2 -1
  20. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  21. package/fesm2022/provoly-dashboard.mjs +108 -109
  22. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  23. package/lib/core/model/manifest.interface.d.ts +7 -0
  24. package/lib/core/store/search/search.actions.d.ts +5 -4
  25. package/lib/core/store/search/search.effects.d.ts +2 -1
  26. package/lib/core/store/search/search.service.d.ts +3 -2
  27. package/lib/dashboard/components/dashboard.component.d.ts +1 -3
  28. package/lib/dashboard/components/widgets/widget-instanciator/widget-factory.service.d.ts +3 -9
  29. package/lib/dashboard/filter/components/filter-group/filter-group.component.d.ts +1 -2
  30. package/lib/dashboard/store/dashboard.actions.d.ts +6 -14
  31. package/lib/dashboard/store/dashboard.effects.d.ts +3 -4
  32. package/lib/dashboard/store/manifest-utils.class.d.ts +2 -1
  33. package/package.json +19 -19
  34. package/search/search-fulltext/store/search-fulltext.effects.d.ts +1 -1
  35. package/search/search-mono-class/store/search-mono-class.effects.d.ts +1 -1
  36. package/search/search-multi-class/store/search-multi-class.effects.d.ts +1 -1
@@ -2,7 +2,7 @@ import { OverlayConfig } from '@angular/cdk/overlay';
2
2
  import { TemplatePortal } from '@angular/cdk/portal';
3
3
  import { Component, EventEmitter, Input, Output, TemplateRef, ViewChild, ViewChildren } from '@angular/core';
4
4
  import equal from 'fast-deep-equal/es6';
5
- import { auditTime, BehaviorSubject, combineLatest, combineLatestWith, debounceTime, delay, distinctUntilChanged, filter, fromEvent, map, of, startWith, switchMap, withLatestFrom } from 'rxjs';
5
+ import { auditTime, BehaviorSubject, combineLatest, combineLatestWith, debounceTime, delay, distinctUntilChanged, filter, fromEvent, map, of, startWith, switchMap } from 'rxjs';
6
6
  import { DashboardGridLayout } from '../../core/model/manifest.interface';
7
7
  import { MIME_TYPE_RESULTSET } from '../../core/model/mimetype-resultset.constant';
8
8
  import { CategoryActions } from '../../core/store/category/category.actions';
@@ -43,9 +43,6 @@ export class DashboardComponent extends SubscriptionnerDirective {
43
43
  set forceModeEdition(mode) {
44
44
  this.forceModeEdition$.next(mode);
45
45
  }
46
- set linkedItems(linkedItems) {
47
- this.linkedItems$.next(linkedItems);
48
- }
49
46
  constructor(store, overlay, viewContainerRef, el) {
50
47
  super();
51
48
  this.store = store;
@@ -88,7 +85,6 @@ export class DashboardComponent extends SubscriptionnerDirective {
88
85
  };
89
86
  this.DashboardGridLayout = DashboardGridLayout;
90
87
  this.layout = DashboardGridLayout.MANUAL;
91
- this.linkedItems$ = new BehaviorSubject(undefined);
92
88
  this.loading$ = this.store.select(DashboardSelectors.loading);
93
89
  this.dataFetching$ = this.store.select(SearchSelectors.searchLoading).pipe(delay(10));
94
90
  this.modeEdition$ = combineLatest([
@@ -127,21 +123,13 @@ export class DashboardComponent extends SubscriptionnerDirective {
127
123
  return wManifest;
128
124
  }), distinctUntilChanged((p, c) => equal(p, c)));
129
125
  this.nonFillerWidgets$ = this.windowManifest$.pipe(map((wManifest) => (wManifest.widgets ?? []).filter((w) => w.type !== 'filler').length));
130
- this.subscriptions.add(this.staticDashboard$.pipe(withLatestFrom(this.linkedItems$)).subscribe(([manifest, linkedItems]) => {
131
- if (!!manifest) {
132
- this.store.dispatch(DashboardActions.assertResultSets({
133
- staticManifest: manifest,
134
- linkedItems
135
- }));
136
- }
137
- }));
138
126
  this.subscriptions.add(combineLatest([
139
127
  this.windowManifest$,
140
128
  this.store.select(DataSourceSelectors.getDataSources),
141
- this.linkedItems$
142
- ]).subscribe(([manifest, datasets, linkedItems]) => {
129
+ this.staticDashboard$
130
+ ]).subscribe(([manifest, datasets, staticManifest]) => {
143
131
  if (datasets.length > 0) {
144
- this.store.dispatch(DashboardActions.assertResultSets({ linkedItems }));
132
+ this.store.dispatch(DashboardActions.assertResultSets({ staticManifest }));
145
133
  }
146
134
  }));
147
135
  this.store.dispatch(FieldActions.load({}));
@@ -497,9 +485,7 @@ export class DashboardComponent extends SubscriptionnerDirective {
497
485
  layout: this.currentlyModifiedManifest?.layout ?? {}
498
486
  };
499
487
  this.movingMouse($event, false);
500
- this.store.dispatch(DashboardActions.assertResultSets({
501
- linkedItems: this.linkedItems
502
- }));
488
+ this.store.dispatch(DashboardActions.assertResultSets({}));
503
489
  }
504
490
  this.clearActions();
505
491
  }
@@ -536,9 +522,7 @@ export class DashboardComponent extends SubscriptionnerDirective {
536
522
  widgets: listWidgetManifests
537
523
  }
538
524
  }));
539
- this.store.dispatch(DashboardActions.assertResultSets({
540
- linkedItems: this.linkedItems
541
- }));
525
+ this.store.dispatch(DashboardActions.assertResultSets({}));
542
526
  $event.preventDefault();
543
527
  $event.stopPropagation();
544
528
  }
@@ -599,7 +583,7 @@ export class DashboardComponent extends SubscriptionnerDirective {
599
583
  }));
600
584
  }
601
585
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DashboardComponent, deps: [{ token: i1.Store }, { token: i2.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
602
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: DashboardComponent, selector: "pry-dashboard", inputs: { staticDashboard: "staticDashboard", forceModeEdition: "forceModeEdition", CloseOnDragOut: "CloseOnDragOut", displayOptions: "displayOptions", noBackground: "noBackground", breakpoint: "breakpoint", linkedItems: "linkedItems" }, outputs: { rowHeight: "rowHeight", rows: "rows" }, viewQueries: [{ propertyName: "templateModal", first: true, predicate: ["templateModal"], descendants: true, read: TemplateRef }, { propertyName: "gridRef", first: true, predicate: ["grid"], descendants: true }, { propertyName: "instanciators", predicate: WidgetInstanciatorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"o-dashboard-edit\" [class.-edit]=\"modeEdition$ | async\">\n <div class=\"o-dashboard-add -rows\">\n <button (click)=\"changeSize('rows', -1)\">\n <pry-icon iconSvg=\"remove\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n <button (click)=\"changeSize('rows', +1)\">\n <pry-icon iconSvg=\"add\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n <p>{{ '@pry.grid.rows' | i18n }}</p>\n </div>\n <div class=\"o-dashboard-add -cols\">\n <p>{{ '@pry.grid.columns' | i18n }}</p>\n <button (click)=\"changeSize('columns', -1)\">\n <pry-icon iconSvg=\"remove\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n <button (click)=\"changeSize('columns', +1)\">\n <pry-icon iconSvg=\"add\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n </div>\n <div\n class=\"o-dashboard-grid\"\n [style.gridTemplateColumns]=\"gridTemplateColumns$ | async\"\n [style.gridTemplateRows]=\"gridTemplateRows$ | async\"\n [style.gridGap]=\"dashboardParams.gridGap + 'px'\"\n #grid\n (mousemove)=\"movingMouse($event)\"\n (drop)=\"dropping($event)\"\n (dragover)=\"dragMove($event)\"\n (dragleave)=\"dragLeave($event)\"\n (dragenter)=\"dragEnter($event)\"\n >\n @for (\n widgetManifest of (windowManifest$ | async)?.widgets || [];\n track trackWidgets(widgetIndex, widgetManifest);\n let widgetIndex = $index\n ) {\n <div\n class=\"o-dashboard-widget\"\n [class.-edited]=\"modeEdition\"\n [style.gridColumn]=\"gridColumn(widgetManifest.layout)\"\n [style.gridRow]=\"gridRow(widgetManifest.layout)\"\n (drop)=\"droppingInWidget($event, widgetIndex)\"\n >\n @if (modeEdition) {\n <div class=\"resize nw-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-nw')\">\n <pry-icon iconSvg=\"north_west\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize sw-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-sw')\">\n <pry-icon iconSvg=\"south_west\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize ne-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-ne')\">\n <pry-icon iconSvg=\"north_east\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize se-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-se')\">\n <pry-icon iconSvg=\"south_east\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize delete\" (mousedown)=\"toggleRemoveConfirm($event, widgetIndex)\">\n <pry-icon iconSvg=\"close\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"move\" draggable=\"true\" (dragstart)=\"dragStart($event, widgetIndex)\">\n <div class=\"move-inside move-{{ widgetManifest.type }}\">\n <span>{{ widgetManifest.title ?? ('@pry.toolbox.' + widgetManifest.type | i18n) }}</span>\n </div>\n </div>\n }\n @if (!modeEdition) {\n <pry-widget-instanciator\n [staticManifest]=\"widgetManifest\"\n [widgetIndex]=\"widgetIndex\"\n ></pry-widget-instanciator>\n }\n </div>\n }\n\n @if (!noBackground) {\n @if (\n {\n noWidgets: (nonFillerWidgets$ | async) === 0,\n globalLoading: loading$ | async,\n fetchLoading: (dataFetching$ | async)?.length ?? 1 > 0\n };\n as data\n ) {\n @if (data.noWidgets) {\n @if (data.globalLoading) {\n <div class=\"no-widget\" [style.grid-area]=\"backgroundArea$ | async\">\n <pry-page-loader></pry-page-loader>\n <span class=\"no-widget__text\">{{ '@pry.widget.target.loading' | i18n }}...</span>\n </div>\n } @else {\n <div class=\"no-widget\" [style.grid-area]=\"backgroundArea$ | async\">\n <img\n class=\"no-widget__search\"\n src=\"../../../assets/svgs/pry_recherche.svg\"\n alt=\"{{\n (layout === DashboardGridLayout.MANUAL\n ? '@pry.widget.target.none_manual'\n : '@pry.widget.target.none_auto'\n ) | i18n\n }}\"\n />\n <span class=\"no-widget__text\">{{\n (layout === DashboardGridLayout.MANUAL\n ? '@pry.widget.target.none_manual'\n : '@pry.widget.target.none_auto'\n ) | i18n\n }}</span>\n </div>\n }\n }\n <div\n class=\"a-page-loader backdrop\"\n [style.display]=\"data.fetchLoading && !data.globalLoading ? 'flex' : 'none'\"\n [style.width.px]=\"(dashboardSize$ | async)?.width\"\n [style.height.px]=\"(dashboardSize$ | async)?.height\"\n >\n <pry-page-loader></pry-page-loader>\n <p>{{ '@pry.widget.target.loading' | i18n }}...</p>\n </div>\n }\n }\n </div>\n</div>\n<pry-context-menu></pry-context-menu>\n\n<ng-template #templateModal>\n <div class=\"o-modal\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"cancelRemoveConfirm()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"m-btn-group\">\n <button type=\"button\" (click)=\"cancelRemoveConfirm()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button type=\"submit\" (click)=\"confirmRemove()\" class=\"a-btn a-btn--primary\">\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i4.PryPageLoaderComponent, selector: "pry-page-loader", inputs: ["image", "imageAltText"] }, { kind: "component", type: i5.WidgetInstanciatorComponent, selector: "pry-widget-instanciator", inputs: ["widgetIndex", "staticManifest", "standalone", "open$"], outputs: ["manifestModified"] }, { kind: "component", type: i6.ContextMenuComponent, selector: "pry-context-menu" }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.I18nPipe, name: "i18n" }] }); }
586
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: DashboardComponent, selector: "pry-dashboard", inputs: { staticDashboard: "staticDashboard", forceModeEdition: "forceModeEdition", CloseOnDragOut: "CloseOnDragOut", displayOptions: "displayOptions", noBackground: "noBackground", breakpoint: "breakpoint" }, outputs: { rowHeight: "rowHeight", rows: "rows" }, viewQueries: [{ propertyName: "templateModal", first: true, predicate: ["templateModal"], descendants: true, read: TemplateRef }, { propertyName: "gridRef", first: true, predicate: ["grid"], descendants: true }, { propertyName: "instanciators", predicate: WidgetInstanciatorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"o-dashboard-edit\" [class.-edit]=\"modeEdition$ | async\">\n <div class=\"o-dashboard-add -rows\">\n <button (click)=\"changeSize('rows', -1)\">\n <pry-icon iconSvg=\"remove\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n <button (click)=\"changeSize('rows', +1)\">\n <pry-icon iconSvg=\"add\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n <p>{{ '@pry.grid.rows' | i18n }}</p>\n </div>\n <div class=\"o-dashboard-add -cols\">\n <p>{{ '@pry.grid.columns' | i18n }}</p>\n <button (click)=\"changeSize('columns', -1)\">\n <pry-icon iconSvg=\"remove\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n <button (click)=\"changeSize('columns', +1)\">\n <pry-icon iconSvg=\"add\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n </div>\n <div\n class=\"o-dashboard-grid\"\n [style.gridTemplateColumns]=\"gridTemplateColumns$ | async\"\n [style.gridTemplateRows]=\"gridTemplateRows$ | async\"\n [style.gridGap]=\"dashboardParams.gridGap + 'px'\"\n #grid\n (mousemove)=\"movingMouse($event)\"\n (drop)=\"dropping($event)\"\n (dragover)=\"dragMove($event)\"\n (dragleave)=\"dragLeave($event)\"\n (dragenter)=\"dragEnter($event)\"\n >\n @for (\n widgetManifest of (windowManifest$ | async)?.widgets || [];\n track trackWidgets(widgetIndex, widgetManifest);\n let widgetIndex = $index\n ) {\n <div\n class=\"o-dashboard-widget\"\n [class.-edited]=\"modeEdition\"\n [style.gridColumn]=\"gridColumn(widgetManifest.layout)\"\n [style.gridRow]=\"gridRow(widgetManifest.layout)\"\n (drop)=\"droppingInWidget($event, widgetIndex)\"\n >\n @if (modeEdition) {\n <div class=\"resize nw-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-nw')\">\n <pry-icon iconSvg=\"north_west\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize sw-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-sw')\">\n <pry-icon iconSvg=\"south_west\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize ne-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-ne')\">\n <pry-icon iconSvg=\"north_east\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize se-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-se')\">\n <pry-icon iconSvg=\"south_east\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize delete\" (mousedown)=\"toggleRemoveConfirm($event, widgetIndex)\">\n <pry-icon iconSvg=\"close\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"move\" draggable=\"true\" (dragstart)=\"dragStart($event, widgetIndex)\">\n <div class=\"move-inside move-{{ widgetManifest.type }}\">\n <span>{{ widgetManifest.title ?? ('@pry.toolbox.' + widgetManifest.type | i18n) }}</span>\n </div>\n </div>\n }\n @if (!modeEdition) {\n <pry-widget-instanciator\n [staticManifest]=\"widgetManifest\"\n [widgetIndex]=\"widgetIndex\"\n ></pry-widget-instanciator>\n }\n </div>\n }\n\n @if (!noBackground) {\n @if (\n {\n noWidgets: (nonFillerWidgets$ | async) === 0,\n globalLoading: loading$ | async,\n fetchLoading: (dataFetching$ | async)?.length ?? 1 > 0\n };\n as data\n ) {\n @if (data.noWidgets) {\n @if (data.globalLoading) {\n <div class=\"no-widget\" [style.grid-area]=\"backgroundArea$ | async\">\n <pry-page-loader></pry-page-loader>\n <span class=\"no-widget__text\">{{ '@pry.widget.target.loading' | i18n }}...</span>\n </div>\n } @else {\n <div class=\"no-widget\" [style.grid-area]=\"backgroundArea$ | async\">\n <img\n class=\"no-widget__search\"\n src=\"../../../assets/svgs/pry_recherche.svg\"\n alt=\"{{\n (layout === DashboardGridLayout.MANUAL\n ? '@pry.widget.target.none_manual'\n : '@pry.widget.target.none_auto'\n ) | i18n\n }}\"\n />\n <span class=\"no-widget__text\">{{\n (layout === DashboardGridLayout.MANUAL\n ? '@pry.widget.target.none_manual'\n : '@pry.widget.target.none_auto'\n ) | i18n\n }}</span>\n </div>\n }\n }\n <div\n class=\"a-page-loader backdrop\"\n [style.display]=\"data.fetchLoading && !data.globalLoading ? 'flex' : 'none'\"\n [style.width.px]=\"(dashboardSize$ | async)?.width\"\n [style.height.px]=\"(dashboardSize$ | async)?.height\"\n >\n <pry-page-loader></pry-page-loader>\n <p>{{ '@pry.widget.target.loading' | i18n }}...</p>\n </div>\n }\n }\n </div>\n</div>\n<pry-context-menu></pry-context-menu>\n\n<ng-template #templateModal>\n <div class=\"o-modal\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"cancelRemoveConfirm()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"m-btn-group\">\n <button type=\"button\" (click)=\"cancelRemoveConfirm()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button type=\"submit\" (click)=\"confirmRemove()\" class=\"a-btn a-btn--primary\">\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i4.PryPageLoaderComponent, selector: "pry-page-loader", inputs: ["image", "imageAltText"] }, { kind: "component", type: i5.WidgetInstanciatorComponent, selector: "pry-widget-instanciator", inputs: ["widgetIndex", "staticManifest", "standalone", "open$"], outputs: ["manifestModified"] }, { kind: "component", type: i6.ContextMenuComponent, selector: "pry-context-menu" }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.I18nPipe, name: "i18n" }] }); }
603
587
  }
604
588
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DashboardComponent, decorators: [{
605
589
  type: Component,
@@ -629,7 +613,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
629
613
  type: Output
630
614
  }], rows: [{
631
615
  type: Output
632
- }], linkedItems: [{
633
- type: Input
634
616
  }] } });
635
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9kYXNoYm9hcmQvY29tcG9uZW50cy9kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvbGliL2Rhc2hib2FyZC9jb21wb25lbnRzL2Rhc2hib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVcsYUFBYSxFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFHTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBRU4sV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBRWIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUNMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osS0FBSyxFQUNMLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sU0FBUyxFQUNULEdBQUcsRUFFSCxFQUFFLEVBQ0YsU0FBUyxFQUNULFNBQVMsRUFDVCxjQUFjLEVBQ2YsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQ0wsbUJBQW1CLEVBSXBCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0NB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Q0Y7U0FDRixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7OEdBdnhCVSxrQkFBa0I7a0dBQWxCLGtCQUFrQixpYkFTTyxXQUFXLGtJQUlqQywyQkFBMkIsdUVDdkYzQyxtak1Bc0pBOzsyRkQ1RWEsa0JBQWtCO2tCQUo5QixTQUFTOytCQUNFLGVBQWU7d0pBWTBCLGFBQWE7c0JBQS9ELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFJTixhQUFhO3NCQUF2RCxZQUFZO3VCQUFDLDJCQUEyQjtnQkFXNUIsZUFBZTtzQkFBM0IsS0FBSztnQkFJTyxnQkFBZ0I7c0JBQTVCLEtBQUs7Z0JBSUcsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRWEsT0FBTztzQkFBekIsU0FBUzt1QkFBQyxNQUFNO2dCQWVSLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBc0JNLFdBQVc7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPdmVybGF5LCBPdmVybGF5Q29uZmlnLCBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0NoZWNrZWQsXG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsL2VzNic7XG5pbXBvcnQge1xuICBhdWRpdFRpbWUsXG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgY29tYmluZUxhdGVzdFdpdGgsXG4gIGRlYm91bmNlVGltZSxcbiAgZGVsYXksXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGZyb21FdmVudCxcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgc3RhcnRXaXRoLFxuICBzd2l0Y2hNYXAsXG4gIHdpdGhMYXRlc3RGcm9tXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGlzcGxheU9wdGlvbnMgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVsL2Rpc3BsYXktb3B0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgRGFzaGJvYXJkR3JpZExheW91dCxcbiAgRGFzaGJvYXJkTWFuaWZlc3QsXG4gIFdpZGdldExheW91dCxcbiAgV2lkZ2V0TWFuaWZlc3Rcbn0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbC9tYW5pZmVzdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTUlNRV9UWVBFX1JFU1VMVFNFVCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWwvbWltZXR5cGUtcmVzdWx0c2V0LmNvbnN0YW50JztcbmltcG9ydCB7IENhdGVnb3J5QWN0aW9ucyB9IGZyb20gJy4uLy4uL2NvcmUvc3RvcmUvY2F0ZWdvcnkvY2F0ZWdvcnkuYWN0aW9ucyc7XG5pbXBvcnQgeyBDbGFzc0FjdGlvbnMgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL2NsYXNzL2NsYXNzLmFjdGlvbnMnO1xuaW1wb3J0IHsgQ29uZmlnQWN0aW9ucyB9IGZyb20gJy4uLy4uL2NvcmUvc3RvcmUvY29uZmlnL2NvbmZpZy5hY3Rpb25zJztcbmltcG9ydCB7IENvbmZpZ1NlbGVjdG9ycyB9IGZyb20gJy4uLy4uL2NvcmUvc3RvcmUvY29uZmlnL2NvbmZpZy5zZWxlY3RvcnMnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZUFjdGlvbnMgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL2RhdGEtc291cmNlL2RhdGEtc291cmNlLmFjdGlvbnMnO1xuaW1wb3J0IHsgRmllbGRBY3Rpb25zIH0gZnJvbSAnLi4vLi4vY29yZS9zdG9yZS9maWVsZC9maWVsZC5hY3Rpb25zJztcbmltcG9ydCB7IFJlbGF0aW9uVHlwZXNBY3Rpb25zIH0gZnJvbSAnLi4vLi4vY29yZS9zdG9yZS9yZWxhdGlvbi10eXBlcy9yZWxhdGlvbi10eXBlcy5hY3Rpb25zJztcbmltcG9ydCB7IFdpZGdldFBsYWNlbWVudFV0aWxzIH0gZnJvbSAnLi4vY29tcG9uZW50cy93aWRnZXRzL3dpZGdldC1wbGFjZW1lbnQvd2lkZ2V0LXBsYWNlbWVudC51dGlscyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRBY3Rpb25zLCBEYXNoYm9hcmRDZWxsUGFyYW1zLCBWaWV3TW9kZSB9IGZyb20gJy4uL3N0b3JlL2Rhc2hib2FyZC5hY3Rpb25zJztcbmltcG9ydCB7XG4gIERFRkFVTFRfQ09MVU1OU19OVU1CRVIsXG4gIERFRkFVTFRfR0FQX1BYLFxuICBERUZBVUxUX1JPV19IRUlHSFRfUFgsXG4gIERFRkFVTFRfUk9XU19OVU1CRVJcbn0gZnJvbSAnLi4vc3RvcmUvZGFzaGJvYXJkLmNvbnRhbnRzJztcbmltcG9ydCB7IERhc2hib2FyZFNlbGVjdG9ycyB9IGZyb20gJy4uL3N0b3JlL2Rhc2hib2FyZC5zZWxlY3RvcnMnO1xuaW1wb3J0IHsgc29sdmVDb2xsaXNpb25zIH0gZnJvbSAnLi9zb2x2ZS1jb2xsaXNpb25zLmZ1bmN0aW9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSB9IGZyb20gJy4vc3Vic2NyaXB0aW9ubmVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBXaWRnZXRJbnN0YW5jaWF0b3JDb21wb25lbnQgfSBmcm9tICcuL3dpZGdldHMvd2lkZ2V0LWluc3RhbmNpYXRvci93aWRnZXQtaW5zdGFuY2lhdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hTZWxlY3RvcnMgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL3NlYXJjaC9zZWFyY2guc2VsZWN0b3JzJztcbmltcG9ydCB7IERhdGFTb3VyY2VTZWxlY3RvcnMgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL2RhdGEtc291cmNlL2RhdGEtc291cmNlLnNlbGVjdG9ycyc7XG5cbmV4cG9ydCBjb25zdCBNSU1FX1RZUEVfV0lER0VUX01BTklGRVNUID0gJ2FwcGxpY2F0aW9uL3dpZGdldC1tYW5pZmVzdCc7XG5leHBvcnQgY29uc3QgTUlNRV9UWVBFX1dJREdFVF9UWVBFID0gJ2FwcGxpY2F0aW9uL3dpZGdldC10eXBlLSc7XG5leHBvcnQgY29uc3QgTUlNRV9UWVBFX1dJREdFVF9TSVpFID0gJ2FwcGxpY2F0aW9uL3dpZGdldC1zaXplLSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1kYXNoYm9hcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEYXNoYm9hcmRDb21wb25lbnQgZXh0ZW5kcyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyVmlld0NoZWNrZWQge1xuICBtYW5pZmVzdDogRGFzaGJvYXJkTWFuaWZlc3QgfCBudWxsID0gbnVsbDtcbiAgd2luZG93TWFuaWZlc3QkOiBPYnNlcnZhYmxlPERhc2hib2FyZE1hbmlmZXN0PjtcbiAgbW9kZUVkaXRpb24gPSBmYWxzZTtcbiAgbW9kZUVkaXRpb24kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBhY3Rpb25UeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHN0YXRpY0Rhc2hib2FyZCQ6IEJlaGF2aW9yU3ViamVjdDxEYXNoYm9hcmRNYW5pZmVzdCB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXNoYm9hcmRNYW5pZmVzdCB8IG51bGw+KG51bGwpO1xuICBzdGFja2VkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBpbmRleEZvclJlbW92YWw6IG51bWJlciA9IC0xO1xuICBAVmlld0NoaWxkKCd0ZW1wbGF0ZU1vZGFsJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSB0ZW1wbGF0ZU1vZGFsITogVGVtcGxhdGVSZWY8YW55PjtcbiAgc2VwYXJhdG9ycyQ6IE9ic2VydmFibGU8V2lkZ2V0TGF5b3V0W10+O1xuICBub25GaWxsZXJXaWRnZXRzJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgQFZpZXdDaGlsZHJlbihXaWRnZXRJbnN0YW5jaWF0b3JDb21wb25lbnQpIGluc3RhbmNpYXRvcnM/OiBRdWVyeUxpc3Q8V2lkZ2V0SW5zdGFuY2lhdG9yQ29tcG9uZW50PjtcbiAgZGF0YUZldGNoaW5nJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG4gIHBhcmFtczogRGFzaGJvYXJkQ2VsbFBhcmFtcyA9IHt9IGFzIERhc2hib2FyZENlbGxQYXJhbXM7XG4gIGZvcmNlTW9kZUVkaXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIF9kYXNoYm9hcmRTaXplJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9Pih7IHdpZHRoOiAzMDAsIGhlaWdodDogMzAwIH0pO1xuICBkYXNoYm9hcmRTaXplJDogT2JzZXJ2YWJsZTx7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0+O1xuXG4gIGdldCB3aWRnZXRzSW5zdGFuY2VzKCkge1xuICAgIHJldHVybiB0aGlzLmluc3RhbmNpYXRvcnM/Lm1hcCgoaW5zdGFuY2lhdG9yKSA9PiBpbnN0YW5jaWF0b3IuaW5zdGFuY2lhdGVkQ29tcG9uZW50Lmluc3RhbmNlKSA/PyBbXTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBzdGF0aWNEYXNoYm9hcmQod2luZG93OiBEYXNoYm9hcmRNYW5pZmVzdCkge1xuICAgIHRoaXMuc3RhdGljRGFzaGJvYXJkJC5uZXh0KHdpbmRvdyk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZm9yY2VNb2RlRWRpdGlvbihtb2RlOiBib29sZWFuKSB7XG4gICAgdGhpcy5mb3JjZU1vZGVFZGl0aW9uJC5uZXh0KG1vZGUpO1xuICB9XG5cbiAgQElucHV0KCkgQ2xvc2VPbkRyYWdPdXQgPSB0cnVlO1xuICBASW5wdXQoKSBkaXNwbGF5T3B0aW9ucz86IERpc3BsYXlPcHRpb25zO1xuICBASW5wdXQoKSBub0JhY2tncm91bmQgPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCdncmlkJykgZ3JpZFJlZiE6IEVsZW1lbnRSZWY7XG4gIHByaXZhdGUgY2FuQ2FsY3VsYXRlVmlldyA9IGZhbHNlO1xuICB0YXJnZXRJbmRleGVzJDogT2JzZXJ2YWJsZTxudW1iZXJbXT47XG4gIGRhc2hib2FyZFBhcmFtczogRGFzaGJvYXJkQ2VsbFBhcmFtcyA9IHtcbiAgICBncmlkV2lkdGg6IDEsXG4gICAgZ3JpZEhlaWdodDogMSxcbiAgICBncmlkR2FwOiBERUZBVUxUX0dBUF9QWCxcbiAgICBjb2x1bW5zOiBERUZBVUxUX0NPTFVNTlNfTlVNQkVSLFxuICAgIGNlbGxXaWR0aDogMSxcbiAgICBjZWxsSGVpZ2h0OiBERUZBVUxUX1JPV19IRUlHSFRfUFgsXG4gICAgcm93czogREVGQVVMVF9ST1dTX05VTUJFUixcbiAgICBvZmZzZXRMZWZ0OiAwLFxuICAgIG9mZnNldFRvcDogMCxcbiAgICBtb2JpbGVNb2RlOiBmYWxzZVxuICB9O1xuICBASW5wdXQoKSBicmVha3BvaW50OiBudW1iZXIgPSAwO1xuICBAT3V0cHV0KCkgcm93SGVpZ2h0ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSByb3dzID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIGN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3Q6IFdpZGdldE1hbmlmZXN0IHwgbnVsbCA9IG51bGw7XG4gIGluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3Q6IFdpZGdldE1hbmlmZXN0W10gPSBbXTtcbiAgbW92ZToge1xuICAgIGluaXRpYWxYOiBudW1iZXI7XG4gICAgaW5pdGlhbFk6IG51bWJlcjtcbiAgICBwcmV2aW91c1g6IG51bWJlcjtcbiAgICBwcmV2aW91c1k6IG51bWJlcjtcbiAgfSA9IHtcbiAgICBpbml0aWFsWDogLTEsXG4gICAgaW5pdGlhbFk6IC0xLFxuICAgIHByZXZpb3VzWDogLTEsXG4gICAgcHJldmlvdXNZOiAtMVxuICB9O1xuICBncmlkVGVtcGxhdGVSb3dzJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBncmlkVGVtcGxhdGVDb2x1bW5zJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBEYXNoYm9hcmRHcmlkTGF5b3V0ID0gRGFzaGJvYXJkR3JpZExheW91dDtcbiAgbGF5b3V0OiBzdHJpbmcgPSBEYXNoYm9hcmRHcmlkTGF5b3V0Lk1BTlVBTDtcbiAgYmFja2dyb3VuZEFyZWEkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIHByaXZhdGUgY29uZmlybVJlbW92ZVJlZj86IE92ZXJsYXlSZWY7XG4gIEFycmF5OiBhbnk7XG5cbiAgQElucHV0KCkgc2V0IGxpbmtlZEl0ZW1zKGxpbmtlZEl0ZW1zOiAoJ2Rlc3RpbmF0aW9uJyB8ICdzb3VyY2UnKVtdKSB7XG4gICAgdGhpcy5saW5rZWRJdGVtcyQubmV4dChsaW5rZWRJdGVtcyk7XG4gIH1cbiAgbGlua2VkSXRlbXMkOiBCZWhhdmlvclN1YmplY3Q8KCdkZXN0aW5hdGlvbicgfCAnc291cmNlJylbXSB8IHVuZGVmaW5lZD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgICgnZGVzdGluYXRpb24nIHwgJ3NvdXJjZScpW10gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlPGFueT4sXG4gICAgcHJpdmF0ZSBvdmVybGF5OiBPdmVybGF5LFxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5sb2FkaW5nJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5sb2FkaW5nKTtcbiAgICB0aGlzLmRhdGFGZXRjaGluZyQgPSB0aGlzLnN0b3JlLnNlbGVjdChTZWFyY2hTZWxlY3RvcnMuc2VhcmNoTG9hZGluZykucGlwZShkZWxheSgxMCkpO1xuICAgIHRoaXMubW9kZUVkaXRpb24kID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuZGFzaGJvYXJkRWRpdGlvbk1vZGUpLFxuICAgICAgdGhpcy5mb3JjZU1vZGVFZGl0aW9uJFxuICAgIF0pLnBpcGUobWFwKChbc3RvcmVNb2RlLCBmb3JjZU1vZGVdKSA9PiAoZm9yY2VNb2RlID09PSB1bmRlZmluZWQgPyBzdG9yZU1vZGUgOiBmb3JjZU1vZGUpKSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMubW9kZUVkaXRpb24kLnN1YnNjcmliZSgobW9kZSkgPT4ge1xuICAgICAgICB0aGlzLm1vZGVFZGl0aW9uID0gbW9kZTtcbiAgICAgICAgaWYgKCFtb2RlKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckFjdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMudGFyZ2V0SW5kZXhlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMudGFyZ2V0VGVuYW50c0luZGV4ZXMpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuZGFzaGJvYXJkQ2VsbFBhcmFtcykuc3Vic2NyaWJlKChwYXJhbXMpID0+ICh0aGlzLmRhc2hib2FyZFBhcmFtcyA9IHBhcmFtcykpXG4gICAgKTtcbiAgICB0aGlzLndpbmRvd01hbmlmZXN0JCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy53aW5kb3dNYW5pZmVzdCkucGlwZShcbiAgICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMuc3RhdGljRGFzaGJvYXJkJCksXG4gICAgICBzd2l0Y2hNYXAoKFt3aW5kb3dNYW5pZmVzdCwgc3RhdGljRGFzaGJvYXJkXSkgPT4gKCFzdGF0aWNEYXNoYm9hcmQgPyBvZih3aW5kb3dNYW5pZmVzdCkgOiBvZihzdGF0aWNEYXNoYm9hcmQpKSksXG4gICAgICBtYXAoKF93TWFuaWZlc3QpID0+IHtcbiAgICAgICAgY29uc3Qgd01hbmlmZXN0ID0gc3RydWN0dXJlZENsb25lKF93TWFuaWZlc3QpO1xuICAgICAgICBpZiAod01hbmlmZXN0LmdyaWQ/LmxheW91dCAmJiB3TWFuaWZlc3QuZ3JpZC5sYXlvdXQgIT09IERhc2hib2FyZEdyaWRMYXlvdXQuTUFOVUFMKSB7XG4gICAgICAgICAgLy8gQ29tcGxldGUgd2l0aCBwbGFjZWhvbGRlcnNcbiAgICAgICAgICBjb25zdCBzaXplID0gV2lkZ2V0UGxhY2VtZW50VXRpbHMuZ2V0TGF5b3V0KHdNYW5pZmVzdC5ncmlkLmxheW91dCk/LnBsYWNlcy5sZW5ndGggPz8gMDtcbiAgICAgICAgICBjb25zdCBwbGFjZXMgPSBXaWRnZXRQbGFjZW1lbnRVdGlscy5wbGFjZW1lbnRPcHRpb25zKFxuICAgICAgICAgICAgeyB0eXBlOiAnZmlsbGVyJywgbGF5b3V0OiB7IHg6IDEsIHk6IDEsIHdpZHRoOiAxLCBoZWlnaHQ6IDEgfSB9LFxuICAgICAgICAgICAgd01hbmlmZXN0LmdyaWQubGF5b3V0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBsZXQgYWRkZWQgPSB0cnVlO1xuICAgICAgICAgIHdoaWxlICh3TWFuaWZlc3Qud2lkZ2V0cy5sZW5ndGggPCBzaXplICYmIGFkZGVkKSB7XG4gICAgICAgICAgICBhZGRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbGFjZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgY29uc3QgcG90ZW50aWFsID0geyAuLi5wbGFjZXNbaV0sIG9wdGlvbnM6IHsgaW5kZXg6IGkgfSB9O1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgd01hbmlmZXN0LndpZGdldHNcbiAgICAgICAgICAgICAgICAgIC5tYXAoKHdpZGdldDogV2lkZ2V0TWFuaWZlc3QpID0+IFdpZGdldFBsYWNlbWVudFV0aWxzLmFyZURpc2pvaW50KHdpZGdldCwgcG90ZW50aWFsKSlcbiAgICAgICAgICAgICAgICAgIC5yZWR1Y2UoKGE6IGJvb2xlYW4sIGI6IGJvb2xlYW4pID0+IGEgJiYgYiwgdHJ1ZSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgd01hbmlmZXN0LndpZGdldHMucHVzaChwb3RlbnRpYWwpO1xuICAgICAgICAgICAgICAgIGFkZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd01hbmlmZXN0O1xuICAgICAgfSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4gZXF1YWwocCwgYykpXG4gICAgKTtcbiAgICB0aGlzLm5vbkZpbGxlcldpZGdldHMkID0gdGhpcy53aW5kb3dNYW5pZmVzdCQucGlwZShcbiAgICAgIG1hcCgod01hbmlmZXN0KSA9PiAod01hbmlmZXN0LndpZGdldHMgPz8gW10pLmZpbHRlcigodykgPT4gdy50eXBlICE9PSAnZmlsbGVyJykubGVuZ3RoKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5zdGF0aWNEYXNoYm9hcmQkLnBpcGUod2l0aExhdGVzdEZyb20odGhpcy5saW5rZWRJdGVtcyQpKS5zdWJzY3JpYmUoKFttYW5pZmVzdCwgbGlua2VkSXRlbXNdKSA9PiB7XG4gICAgICAgIGlmICghIW1hbmlmZXN0KSB7XG4gICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgIERhc2hib2FyZEFjdGlvbnMuYXNzZXJ0UmVzdWx0U2V0cyh7XG4gICAgICAgICAgICAgIHN0YXRpY01hbmlmZXN0OiBtYW5pZmVzdCxcbiAgICAgICAgICAgICAgbGlua2VkSXRlbXNcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLndpbmRvd01hbmlmZXN0JCxcbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGF0YVNvdXJjZVNlbGVjdG9ycy5nZXREYXRhU291cmNlcyksXG4gICAgICAgIHRoaXMubGlua2VkSXRlbXMkXG4gICAgICBdKS5zdWJzY3JpYmUoKFttYW5pZmVzdCwgZGF0YXNldHMsIGxpbmtlZEl0ZW1zXSkgPT4ge1xuICAgICAgICBpZiAoZGF0YXNldHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5hc3NlcnRSZXN1bHRTZXRzKHsgbGlua2VkSXRlbXMgfSkpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKEZpZWxkQWN0aW9ucy5sb2FkKHt9KSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDbGFzc0FjdGlvbnMubG9hZCh7fSkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ2F0ZWdvcnlBY3Rpb25zLmxvYWQoe30pKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuZ2V0TWFwU3R5bGVzKCkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGF0YVNvdXJjZUFjdGlvbnMubG9hZCh7fSkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goUmVsYXRpb25UeXBlc0FjdGlvbnMubG9hZCh7fSkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ29uZmlnQWN0aW9ucy5sb2FkQ3VzdG9taXphdGlvbih7fSkpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxuICAgICAgICAucGlwZShhdWRpdFRpbWUoMTAwKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVWaWV3KCk7XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLndpbmRvd01hbmlmZXN0JCwgdGhpcy5tb2RlRWRpdGlvbiRdKVxuICAgICAgICAucGlwZShhdWRpdFRpbWUoMTAwKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVWaWV3KCk7XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBmcm9tRXZlbnQod2luZG93LCAna2V5ZG93bicpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgoJGV2ZW50OiBFdmVudCkgPT4gJGV2ZW50IGFzIEtleWJvYXJkRXZlbnQpLFxuICAgICAgICAgIGZpbHRlcigoJGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiAkZXZlbnQua2V5ID09PSAnTCcgJiYgJGV2ZW50LmN0cmxLZXkgJiYgJGV2ZW50LnNoaWZ0S2V5KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnRvZ2dsZUVkaXRpb25Nb2RlKHt9KSkpXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBmcm9tRXZlbnQod2luZG93LCAnbW91c2V1cCcpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xlYXJBY3Rpb25zKCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoQ29uZmlnU2VsZWN0b3JzLmJyZWFrcG9pbnQpLnN1YnNjcmliZSgoYnApID0+IHtcbiAgICAgICAgdGhpcy5icmVha3BvaW50ID0gYnA7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy53aW5kb3dNYW5pZmVzdCQuc3Vic2NyaWJlKChtYW5pZmVzdCkgPT4ge1xuICAgICAgICB0aGlzLm1hbmlmZXN0ID0gbWFuaWZlc3Q7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmdyaWRMYXlvdXQpLnN1YnNjcmliZSgobGF5b3V0KSA9PiB7XG4gICAgICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5ncmlkVGVtcGxhdGVSb3dzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMud2luZG93TWFuaWZlc3QkLCB0aGlzLnN0YWNrZWQkXSkucGlwZShcbiAgICAgIG1hcCgoW21hbmlmZXN0LCBzdGFja2VkXSkgPT5cbiAgICAgICAgdGhpcy5nZW5lcmF0ZVJvd3MoXG4gICAgICAgICAgc3RhY2tlZCAmJiB0aGlzLm1hbmlmZXN0XG4gICAgICAgICAgICA/IHRoaXMubWFuaWZlc3Q/LndpZGdldHMubWFwKCh3bSkgPT4gd20ubGF5b3V0LmhlaWdodCkucmVkdWNlKCh3bTEsIHdtMikgPT4gd20xICsgd20yLCAwKVxuICAgICAgICAgICAgOiBtYW5pZmVzdC5ncmlkPy5yb3dzID8/IERFRkFVTFRfUk9XU19OVU1CRVJcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLmdyaWRUZW1wbGF0ZUNvbHVtbnMkID0gY29tYmluZUxhdGVzdChbdGhpcy53aW5kb3dNYW5pZmVzdCQsIHRoaXMuc3RhY2tlZCRdKS5waXBlKFxuICAgICAgbWFwKChbbWFuaWZlc3QsIHN0YWNrZWRdKSA9PiB0aGlzLmdlbmVyYXRlQ29sdW1ucyhzdGFja2VkID8gMSA6IG1hbmlmZXN0LmdyaWQ/LmNvbHVtbnMgfHwgREVGQVVMVF9DT0xVTU5TX05VTUJFUikpXG4gICAgKTtcblxuICAgIHRoaXMuYmFja2dyb3VuZEFyZWEkID0gY29tYmluZUxhdGVzdChbdGhpcy53aW5kb3dNYW5pZmVzdCQsIHRoaXMuc3RhY2tlZCRdKS5waXBlKFxuICAgICAgbWFwKChbbWFuaWZlc3QsIHN0YWNrZWRdKSA9PlxuICAgICAgICAhc3RhY2tlZFxuICAgICAgICAgID8gYDEvMS8keyhtYW5pZmVzdC5ncmlkPy5yb3dzID8/IERFRkFVTFRfUk9XU19OVU1CRVIpICsgMX0vJHtcbiAgICAgICAgICAgICAgKG1hbmlmZXN0LmdyaWQ/LmNvbHVtbnMgPz8gREVGQVVMVF9DT0xVTU5TX05VTUJFUikgKyAxXG4gICAgICAgICAgICB9YFxuICAgICAgICAgIDogYDEvMS8keyhtYW5pZmVzdC5ncmlkPy5jb2x1bW5zID8/IERFRkFVTFRfQ09MVU1OU19OVU1CRVIpICsgMX0vMWBcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zZXBhcmF0b3JzJCA9IHRoaXMuc3RvcmVcbiAgICAgIC5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmdyaWRMYXlvdXQpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChsYXlvdXQpID0+XG4gICAgICAgICAgbGF5b3V0ID09PSBEYXNoYm9hcmRHcmlkTGF5b3V0Lk1BTlVBTCA/IFtdIDogV2lkZ2V0UGxhY2VtZW50VXRpbHMuZ2V0TGF5b3V0KGxheW91dCk/LnBsYWNlcyA/PyBbXVxuICAgICAgICApXG4gICAgICApO1xuXG4gICAgdGhpcy5kYXNoYm9hcmRTaXplJCA9IHRoaXMuX2Rhc2hib2FyZFNpemUkLnBpcGUoXG4gICAgICBzdGFydFdpdGgoe1xuICAgICAgICB3aWR0aDogMzAwLFxuICAgICAgICBoZWlnaHQ6IDMwMFxuICAgICAgfSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4gcC53aWR0aCA9PT0gYy53aWR0aCAmJiBwLmhlaWdodCA9PT0gYy5oZWlnaHQpLFxuICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4gcC53aWR0aCA9PT0gYy53aWR0aCAmJiBwLmhlaWdodCA9PT0gYy5oZWlnaHQpXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVNlbGZTaXplKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5kaXNwbGF5T3B0aW9ucylcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgIERhc2hib2FyZEFjdGlvbnMudXBkYXRlRGlzcGxheU9wdGlvbnMoeyBtb2RlOiBWaWV3TW9kZS5DVVNUT00sIGN1c3RvbURpc3BsYXk6IHRoaXMuZGlzcGxheU9wdGlvbnMgfSlcbiAgICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5jYW5DYWxjdWxhdGVWaWV3ID0gdHJ1ZTtcbiAgfVxuXG4gIHVwZGF0ZVNlbGZTaXplKCkge1xuICAgIGNvbnN0IGJvdW5kaW5nUmVjdCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB0aGlzLl9kYXNoYm9hcmRTaXplJC5uZXh0KHsgd2lkdGg6IGJvdW5kaW5nUmVjdC53aWR0aCwgaGVpZ2h0OiBib3VuZGluZ1JlY3QuaGVpZ2h0IH0pO1xuICB9XG5cbiAgLyoqKlxuICAgKiBNYW5hZ2UgZGlzcGxheVxuICAgKi9cbiAgY2FsY3VsYXRlVmlldygpIHtcbiAgICBpZiAodGhpcy5jYW5DYWxjdWxhdGVWaWV3KSB7XG4gICAgICBsZXQgZWxlbWVudCA9IHRoaXMuZ3JpZFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgd2hpbGUgKGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0ID09PSAwICYmICEhZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdyaWRXaWR0aCA9ICg8SFRNTEVsZW1lbnQ+ZWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICBjb25zdCBtb2JpbGVNb2RlID0gZ3JpZFdpZHRoIDwgdGhpcy5icmVha3BvaW50O1xuICAgICAgdGhpcy5zdGFja2VkJC5uZXh0KHRoaXMuZGFzaGJvYXJkUGFyYW1zLm1vYmlsZU1vZGUgJiYgIXRoaXMubW9kZUVkaXRpb24pO1xuICAgICAgY29uc3Qgcm93cyA9ICF0aGlzLmRpc3BsYXlJc1N0YWNrZWRcbiAgICAgICAgPyAoISF0aGlzLm1hbmlmZXN0ICYmICEhdGhpcy5tYW5pZmVzdC5ncmlkICYmIHRoaXMubWFuaWZlc3QuZ3JpZC5yb3dzKSB8fCBERUZBVUxUX1JPV1NfTlVNQkVSXG4gICAgICAgIDogdGhpcy5tYW5pZmVzdD8ud2lkZ2V0cy5yZWR1Y2UoKHA6IG51bWJlciwgYzogV2lkZ2V0TWFuaWZlc3QpID0+IHAgKyBjLmxheW91dC5oZWlnaHQsIDApID8/IDE7XG5cbiAgICAgIHRoaXMucGFyYW1zID0ge1xuICAgICAgICBncmlkV2lkdGgsXG4gICAgICAgIC8vIENhbGN1bGF0ZSBoZWlnaHQgdG8gcGFyZW50IHRoZSBwYXJlbnQnc1xuICAgICAgICBncmlkSGVpZ2h0OiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCxcbiAgICAgICAgZ3JpZEdhcDogMSxcbiAgICAgICAgY29sdW1uczogKCEhdGhpcy5tYW5pZmVzdCAmJiAhIXRoaXMubWFuaWZlc3QuZ3JpZCAmJiB0aGlzLm1hbmlmZXN0LmdyaWQuY29sdW1ucykgfHwgREVGQVVMVF9DT0xVTU5TX05VTUJFUixcbiAgICAgICAgY2VsbEhlaWdodDogMSxcbiAgICAgICAgcm93cyxcbiAgICAgICAgY2VsbFdpZHRoOiAwLFxuICAgICAgICBvZmZzZXRMZWZ0OiB0aGlzLmdyaWRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0LFxuICAgICAgICBvZmZzZXRUb3A6IHRoaXMuZ3JpZFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcCxcbiAgICAgICAgbW9iaWxlTW9kZVxuICAgICAgfTtcbiAgICAgIHRoaXMucGFyYW1zLmdyaWRHYXAgPVxuICAgICAgICB0aGlzLnBhcmFtcy5yb3dzICogdGhpcy5wYXJhbXMuY2VsbEhlaWdodCA8IHRoaXMucGFyYW1zLmdyaWRIZWlnaHRcbiAgICAgICAgICA/ICEhdGhpcy5tYW5pZmVzdCAmJiAhIXRoaXMubWFuaWZlc3QuZ3JpZFxuICAgICAgICAgICAgPyB0aGlzLm1hbmlmZXN0LmdyaWQuZ2FwIHx8IERFRkFVTFRfR0FQX1BYXG4gICAgICAgICAgICA6IERFRkFVTFRfR0FQX1BYXG4gICAgICAgICAgOiAwO1xuICAgICAgdGhpcy5wYXJhbXMuY2VsbEhlaWdodCA9IE1hdGgubWF4KFxuICAgICAgICAwLFxuICAgICAgICAodGhpcy5wYXJhbXMuZ3JpZEhlaWdodCAtICh0aGlzLnBhcmFtcy5yb3dzIC0gMSkgKiB0aGlzLnBhcmFtcy5ncmlkR2FwKSAvIHRoaXMucGFyYW1zLnJvd3NcbiAgICAgICk7XG4gICAgICB0aGlzLnBhcmFtcy5jZWxsV2lkdGggPVxuICAgICAgICAodGhpcy5wYXJhbXMuZ3JpZFdpZHRoIC0gKHRoaXMucGFyYW1zLmNvbHVtbnMgLSAxKSAqIHRoaXMucGFyYW1zLmdyaWRHYXApIC8gdGhpcy5wYXJhbXMuY29sdW1ucztcblxuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZURhc2hib2FyZFBhcmFtcyh7IHBhcmFtczogdGhpcy5wYXJhbXMgfSkpO1xuXG4gICAgICB0aGlzLnJvd3MubmV4dCh0aGlzLnBhcmFtcy5yb3dzKTtcbiAgICAgIHRoaXMucm93SGVpZ2h0Lm5leHQodGhpcy5wYXJhbXMuY2VsbEhlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRpc3BsYXlJc1N0YWNrZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tlZCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIGdyaWRDb2x1bW4obGF5b3V0OiBXaWRnZXRMYXlvdXQpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmRpc3BsYXlJc1N0YWNrZWQgfHwgIWxheW91dCkge1xuICAgICAgcmV0dXJuICcxIC8gMSc7XG4gICAgfVxuICAgIGlmIChsYXlvdXQud2lkdGggPiAxKSB7XG4gICAgICByZXR1cm4gYCR7TWF0aC5taW4obGF5b3V0LngsIHRoaXMucGFyYW1zLmNvbHVtbnMgLSBsYXlvdXQud2lkdGggKyAxKX0gLyAke01hdGgubWluKFxuICAgICAgICBsYXlvdXQueCArIGxheW91dC53aWR0aCxcbiAgICAgICAgdGhpcy5wYXJhbXMuY29sdW1ucyArIDFcbiAgICAgICl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke2xheW91dC54fWA7XG4gICAgfVxuICB9XG5cbiAgZ3JpZFJvdyhsYXlvdXQ6IFdpZGdldExheW91dCk6IHN0cmluZyB7XG4gICAgaWYgKCFsYXlvdXQpIHtcbiAgICAgIHJldHVybiAnMSc7XG4gICAgfVxuICAgIGlmICh0aGlzLmRpc3BsYXlJc1N0YWNrZWQpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzSGVpZ2h0ID0gdGhpcy5tYW5pZmVzdD8ud2lkZ2V0c1xuICAgICAgICAuZmlsdGVyKCh3bTogV2lkZ2V0TWFuaWZlc3QpID0+ICh3bS5sYXlvdXQueSA9PT0gbGF5b3V0LnkgJiYgd20ubGF5b3V0LnggPCBsYXlvdXQueCkgfHwgd20ubGF5b3V0LnkgPCBsYXlvdXQueSlcbiAgICAgICAgLnJlZHVjZSgocDogbnVtYmVyLCBjOiBXaWRnZXRNYW5pZmVzdCkgPT4gcCArIGMubGF5b3V0LmhlaWdodCwgMSk7XG4gICAgICByZXR1cm4gYCR7cHJldmlvdXNIZWlnaHQgPz8gMX0gLyAkeyhwcmV2aW91c0hlaWdodCA/PyAxKSArIGxheW91dC5oZWlnaHR9YDtcbiAgICB9XG4gICAgaWYgKGxheW91dC5oZWlnaHQgPiAxKSB7XG4gICAgICByZXR1cm4gYCR7TWF0aC5tYXgoMSwgTWF0aC5taW4obGF5b3V0LnksIHRoaXMucGFyYW1zLnJvd3MgLSBsYXlvdXQuaGVpZ2h0ICsgMSkpfSAvICR7TWF0aC5taW4oXG4gICAgICAgIGxheW91dC55ICsgbGF5b3V0LmhlaWdodCxcbiAgICAgICAgdGhpcy5wYXJhbXMucm93cyArIDFcbiAgICAgICl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke2xheW91dC55fWA7XG4gICAgfVxuICB9XG5cbiAgZ2VuZXJhdGVSb3dzKHJvd3M6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIEFycmF5KHJvd3MpLmZpbGwoJzFmcicpLmpvaW4oJyAnKTtcbiAgfVxuXG4gIGdlbmVyYXRlQ29sdW1ucyhjb2x1bW5zOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBBcnJheShjb2x1bW5zKS5maWxsKCcxZnInKS5qb2luKCcgJyk7XG4gIH1cblxuICAvKioqXG4gICAqIERpcmVjdCBhY3Rpb25zIG9uIHdpZGdldHNcbiAgICovXG5cbiAgcmVtb3ZlKGk6IG51bWJlcikge1xuICAgIGNvbnN0IGxpc3RXaWRnZXRNYW5pZmVzdHMgPSBbLi4uKHRoaXMubWFuaWZlc3QgfHwgeyB3aWRnZXRzOiBbXSB9KS53aWRnZXRzXTtcbiAgICBsaXN0V2lkZ2V0TWFuaWZlc3RzLnNwbGljZShpLCAxKS5maWx0ZXIoKHdpZGdldCkgPT4gd2lkZ2V0LnR5cGUgIT09ICdmaWxsZXInKTtcblxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZURhc2hib2FyZE1hbmlmZXN0KHtcbiAgICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgICAuLi50aGlzLm1hbmlmZXN0LFxuICAgICAgICAgIHdpZGdldHM6IGxpc3RXaWRnZXRNYW5pZmVzdHNcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbW92ZUluTmV3V2luZG93KHdpZGdldEluZGV4OiBudW1iZXIsIHRhcmdldEluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMubW92ZVdpZGdldCh7IHdpZGdldEluZGV4LCB0YXJnZXRJbmRleCB9KSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnRvZ2dsZUVkaXRpb25Nb2RlKHsgZm9yY2U6IGZhbHNlIH0pKTtcbiAgfVxuXG4gIG1heGltaXplKHdpZGdldEluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMubWF4aW1pemVXaWRnZXQoeyB3aWRnZXRJbmRleCB9KSk7XG4gIH1cblxuICAvKioqXG4gICAqIE1hbmFnZSBkcmFnIG4gZHJvcCwgbW92ZSwgcmVzaXplXG4gICAqL1xuXG4gIHByZXBhcmVNb2RpZmljYXRpb24oJGV2ZW50OiBNb3VzZUV2ZW50LCBpbmRleE1hbmlmZXN0OiBudW1iZXIpIHtcbiAgICB0aGlzLm1vdmUuaW5pdGlhbFggPSAkZXZlbnQuY2xpZW50WDtcbiAgICB0aGlzLm1vdmUuaW5pdGlhbFkgPSAkZXZlbnQuY2xpZW50WTtcbiAgICB0aGlzLmluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3QgPSBzdHJ1Y3R1cmVkQ2xvbmUoKHRoaXMubWFuaWZlc3QgfHwgeyB3aWRnZXRzOiBbXSB9KS53aWRnZXRzKTtcbiAgICB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QgPSB0aGlzLmluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3Quc3BsaWNlKGluZGV4TWFuaWZlc3QsIDEpWzBdO1xuICAgIC8vIGNvbnNvbGUubG9nKCdwcmVwYXJlJywgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LCB0aGlzLmluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3QpO1xuICB9XG5cbiAgc3RhcnRSZXNpemUoJGV2ZW50OiBNb3VzZUV2ZW50LCBpbmRleE1hbmlmZXN0OiBudW1iZXIsIGRpcmVjdGlvbjogc3RyaW5nKSB7XG4gICAgdGhpcy5hY3Rpb25UeXBlID0gZGlyZWN0aW9uO1xuICAgIHRoaXMucHJlcGFyZU1vZGlmaWNhdGlvbigkZXZlbnQsIGluZGV4TWFuaWZlc3QpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdzdGFydCByZXNpemUnLCB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QsIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCk7XG4gIH1cblxuICBkcmFnU3RhcnQoJGV2ZW50OiBEcmFnRXZlbnQsIGluZGV4TWFuaWZlc3Q6IG51bWJlcikge1xuICAgIHRoaXMuYWN0aW9uVHlwZSA9ICdtb3ZlJztcbiAgICB0aGlzLnByZXBhcmVNb2RpZmljYXRpb24oJGV2ZW50LCBpbmRleE1hbmlmZXN0KTtcbiAgICBEYXNoYm9hcmRDb21wb25lbnQuYWRkVHJhbnNmZXJNYW5pZmVzdE1ldGFkYXRhKCRldmVudCwgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0ID8/ICh7fSBhcyBXaWRnZXRNYW5pZmVzdCkpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdzdGFydCBtb3ZlJywgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LCB0aGlzLmluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3QpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYWRkVHJhbnNmZXJNYW5pZmVzdE1ldGFkYXRhKCRldmVudDogRHJhZ0V2ZW50LCBtYW5pZmVzdDogV2lkZ2V0TWFuaWZlc3QpIHtcbiAgICBpZiAoISEkZXZlbnQgJiYgISEkZXZlbnQuZGF0YVRyYW5zZmVyICYmICEkZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmluY2x1ZGVzKE1JTUVfVFlQRV9XSURHRVRfTUFOSUZFU1QpKSB7XG4gICAgICAkZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoTUlNRV9UWVBFX1dJREdFVF9NQU5JRkVTVCwgSlNPTi5zdHJpbmdpZnkobWFuaWZlc3QpKTtcbiAgICAgICRldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YShNSU1FX1RZUEVfV0lER0VUX1RZUEUgKyBtYW5pZmVzdC50eXBlLCAndW51c2VkJyk7XG4gICAgICAvLyBQYXNzaW5nIHdpZGdldCBzaXplIGFzIGEgbWltZSB0eXBlLCBzbyB0aGF0IHdlIGNhbiBieXBhc3Mgc2VjdXJpdHkgZm9yIHBsYWNlaG9sZGVyIHNpemUgYXQgdGhlIGFycml2YWwgb2YgdGhlIGRyYWdcbiAgICAgICRldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YShcbiAgICAgICAgTUlNRV9UWVBFX1dJREdFVF9TSVpFICsgYCR7bWFuaWZlc3QubGF5b3V0LndpZHRofS0ke21hbmlmZXN0LmxheW91dC5oZWlnaHR9YCxcbiAgICAgICAgJ3VzZWxlc3MnIC8vIGRhdGEgaXMgaW4gdGhlIG1pbWUgdHlwZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBkcmFnRW50ZXIoJGV2ZW50OiBEcmFnRXZlbnQsIGZvcmNlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCB0eXBlcyA9ICgkZXZlbnQuZGF0YVRyYW5zZmVyIHx8IHsgdHlwZXM6IFsnJ10gfSkudHlwZXM7XG5cbiAgICBpZiAodHlwZXMuaW5jbHVkZXMoTUlNRV9UWVBFX1dJREdFVF9NQU5JRkVTVCkpIHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy50b2dnbGVFZGl0aW9uTW9kZSh7IGZvcmNlOiB0cnVlIH0pKTtcbiAgICAgIHRoaXMuYWN0aW9uVHlwZSA9ICdtb3ZlJztcbiAgICB9XG4gIH1cblxuICBjaGVja0ZvckRyYWdFbnRlcigkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdCkge1xuICAgICAgLy8gY3JlYXRlIHBsYWNlaG9sZGVyIGFzIGEgZHJhZyBlbnRlcmVkIHRoZSBjb21wb25lbnQsIGdvIGludG8gZWRpdGlvbiBtb2RlIGFuZCBtb3ZlIGFjdGlvbiBpZiBpdCdzIGEgd2lkZ2V0IGJlaW5nIGRyYWdnZWRcbiAgICAgIGNvbnN0IHR5cGVzID0gKCgkZXZlbnQgYXMgRHJhZ0V2ZW50KS5kYXRhVHJhbnNmZXIgfHwgeyB0eXBlczogWycnXSB9KS50eXBlcztcbiAgICAgIGlmICh0eXBlcy5pbmNsdWRlcyhNSU1FX1RZUEVfV0lER0VUX01BTklGRVNUKSkge1xuICAgICAgICB0aGlzLmFjdGlvblR5cGUgPSAnbW92ZSc7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy50b2dnbGVFZGl0aW9uTW9kZSh7IGZvcmNlOiB0cnVlIH0pKTtcblxuICAgICAgICAvLyBPbiBkcmFnIGVudGVyLCB3ZSBvbmx5IGNhbiBwdXQgYSBwbGFjZWhvbGRlciwgc2luY2UgZm9yIHNlY3VyaXR5IHJlYXNvbnMsIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhLXRyYW5zZmVyIGlzIG5vdCBhdmFpbGFibGVcbiAgICAgICAgdGhpcy5tb3ZlLmluaXRpYWxYID0gdGhpcy5kYXNoYm9hcmRQYXJhbXMub2Zmc2V0TGVmdDtcbiAgICAgICAgdGhpcy5tb3ZlLmluaXRpYWxZID0gdGhpcy5kYXNoYm9hcmRQYXJhbXMub2Zmc2V0VG9wO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmdldFRhcmdldCgkZXZlbnQsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0ID0ge1xuICAgICAgICAgIHR5cGU6ICdwbGFjZWhvbGRlcicsXG4gICAgICAgICAgbGF5b3V0OiB7IHg6IHRhcmdldD8ueCA/PyAwLCB5OiB0YXJnZXQ/LnkgPz8gMCwgd2lkdGg6IDEsIGhlaWdodDogMSB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCA9IHN0cnVjdHVyZWRDbG9uZSgodGhpcy5tYW5pZmVzdCB8fCB7IHdpZGdldHM6IFtdIH0pLndpZGdldHMpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnY3JlYXRlIHBsYWNlaG9sZGVyJywgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LCB0aGlzLmluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3QpO1xuXG4gICAgICAgIC8vIFdlIHBhc3NlZCB3aWRnZXQgc2l6ZSBhcyBhIG1pbWV0eXBlIHNvIHRoYXQgd2UgY2FuIHN0aWxsIHJlYWQgaXQgd2l0aG91dCBzZWN1cml0eSBpc3N1ZXNcbiAgICAgICAgY29uc3Qgd2lkZ2V0U2l6ZU1pbWVUeXBlID0gdHlwZXMuZmluZCgodHlwZSkgPT4gdHlwZS5pbmNsdWRlcyhNSU1FX1RZUEVfV0lER0VUX1NJWkUpKTtcbiAgICAgICAgaWYgKCEhd2lkZ2V0U2l6ZU1pbWVUeXBlKSB7XG4gICAgICAgICAgY29uc3QgW18sIF8yLCB3LCBoXSA9IHdpZGdldFNpemVNaW1lVHlwZS5zcGxpdCgnLScpO1xuICAgICAgICAgIHRoaXMuY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdC5sYXlvdXQud2lkdGggPSBwYXJzZUludCh3LCAxMCk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LmxheW91dC5oZWlnaHQgPSBwYXJzZUludChoLCAxMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVXNlIGdyaWQgc2l6ZVxuICAgICAgICAgIGNvbnN0IGxheW91dCA9IChXaWRnZXRQbGFjZW1lbnRVdGlscy5nZXRMYXlvdXQodGhpcy5sYXlvdXQpPy5wbGFjZXMgPz8gW10pW1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsV2lkZ2V0TWFuaWZlc3RMaXN0Lmxlbmd0aFxuICAgICAgICAgIF0gPz8ge1xuICAgICAgICAgICAgd2lkdGg6IDEsXG4gICAgICAgICAgICBoZWlnaHQ6IDFcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdC5sYXlvdXQud2lkdGggPSBsYXlvdXQud2lkdGg7XG4gICAgICAgICAgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LmxheW91dC5oZWlnaHQgPSBsYXlvdXQuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2UgcGFzc2VkIHRoZSB0eXBlIGFzIGEgaGVhZGVyIG5hbWUgc28gdGhhdCB3ZSBjYW4gc3RpbGwgYWNjZXNzIGl0IHdpdGhvdXQgc2VjdXJpdHkgaXNzdWVzXG4gICAgICAgIGNvbnN0IHdpZGdldFR5cGUgPSB0eXBlcy5maW5kKCh0eXBlKSA9PiB0eXBlLmluY2x1ZGVzKE1JTUVfVFlQRV9XSURHRVRfVFlQRSkpO1xuICAgICAgICBpZiAoISF3aWRnZXRUeXBlKSB7XG4gICAgICAgICAgY29uc3QgW18sIF8yLCB0eXBlXSA9IHdpZGdldFR5cGUuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QudHlwZSA9IHR5cGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXNldCBpbml0aWFsIHBvc2l0aW9uIGZvciB0aGUgb25lIHdlIGp1c3QgY2FsY3VsYXRlZCwgc28gd2UgY2FuIGNvbnRpbnVlIHByb3Blcmx5IG1vdmUgdGhlIHdpZGdldFxuICAgICAgICB0aGlzLm1vdmUuaW5pdGlhbFggPSAkZXZlbnQucGFnZVg7XG4gICAgICAgIHRoaXMubW92ZS5pbml0aWFsWSA9ICRldmVudC5wYWdlWTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRUYXJnZXQoJGV2ZW50OiBNb3VzZUV2ZW50LCBvcHRpbWl6ZSA9IHRydWUpIHtcbiAgICBjb25zdCBkWCA9ICRldmVudC5wYWdlWCAtIHRoaXMubW92ZS5pbml0aWFsWDtcbiAgICBjb25zdCBkWSA9ICRldmVudC5wYWdlWSAtIHRoaXMubW92ZS5pbml0aWFsWTtcblxuICAgIGNvbnN0IHRhcmdldCA9IHtcbiAgICAgIHg6XG4gICAgICAgIGRYID09PSAwXG4gICAgICAgICAgPyAwXG4gICAgICAgICAgOiBNYXRoLnJvdW5kKFxuICAgICAgICAgICAgICAoKGRYIC8gTWF0aC5hYnMoZFgpKSAqIChNYXRoLmFicyhkWCkgLSAwLjUgKiB0aGlzLmRhc2hib2FyZFBhcmFtcy5jZWxsV2lkdGgpKSAvXG4gICAgICAgICAgICAgICAgKHRoaXMuZGFzaGJvYXJkUGFyYW1zLmNlbGxXaWR0aCArIHRoaXMuZGFzaGJvYXJkUGFyYW1zLmdyaWRHYXApXG4gICAgICAgICAgICApLFxuICAgICAgeTpcbiAgICAgICAgZFkgPT09IDBcbiAgICAgICAgICA/IDBcbiAgICAgICAgICA6IE1hdGgucm91bmQoXG4gICAgICAgICAgICAgICgoZFkgLyBNYXRoLmFicyhkWSkpICogKE1hdGguYWJzKGRZKSAtIDAuNSAqIHRoaXMuZGFzaGJvYXJkUGFyYW1zLmNlbGxIZWlnaHQpKSAvXG4gICAgICAgICAgICAgICAgKHRoaXMuZGFzaGJvYXJkUGFyYW1zLmNlbGxIZWlnaHQgKyB0aGlzLmRhc2hib2FyZFBhcmFtcy5ncmlkR2FwKVxuICAgICAgICAgICAgKVxuICAgIH07XG5cbiAgICBpZiAoIW9wdGltaXplIHx8IHRhcmdldC54ICE9PSB0aGlzLm1vdmUucHJldmlvdXNYIHx8IHRhcmdldC55ICE9PSB0aGlzLm1vdmUucHJldmlvdXNZKSB7XG4gICAgICB0aGlzLm1vdmUucHJldmlvdXNYID0gdGFyZ2V0Lng7XG4gICAgICB0aGlzLm1vdmUucHJldmlvdXNZID0gdGFyZ2V0Lnk7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbW92aW5nTW91c2UoJGV2ZW50OiBNb3VzZUV2ZW50LCBvcHRpbWl6ZSA9IHRydWUpIHtcbiAgICBpZiAodGhpcy5tb2RlRWRpdGlvbiAmJiAhIXRoaXMuYWN0aW9uVHlwZSkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5nZXRUYXJnZXQoJGV2ZW50LCBvcHRpbWl6ZSk7XG4gICAgICBpZiAodGFyZ2V0ICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY2hlY2tGb3JEcmFnRW50ZXIoJGV2ZW50KTtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlV2lkZ2V0ID0gc3RydWN0dXJlZENsb25lKHRoaXMuY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdCkhO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy5hY3Rpb25UeXBlKSB7XG4gICAgICAgICAgY2FzZSAncmVzaXplLW53JzpcbiAgICAgICAgICAgIGlmIChjYW5kaWRhdGVXaWRnZXQubGF5b3V0LnggKyB0YXJnZXQueCA+IDAgJiYgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC5oZWlnaHQgLSB0YXJnZXQueSA+IDApIHtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC54ICs9IHRhcmdldC54O1xuICAgICAgICAgICAgICBjYW5kaWRhdGVXaWRnZXQubGF5b3V0LnkgKz0gdGFyZ2V0Lnk7XG4gICAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQud2lkdGggLT0gdGFyZ2V0Lng7XG4gICAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQuaGVpZ2h0IC09IHRhcmdldC55O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncmVzaXplLXN3JzpcbiAgICAgICAgICAgIGlmIChjYW5kaWRhdGVXaWRnZXQubGF5b3V0LndpZHRoIC0gdGFyZ2V0LnggPiAwKSB7XG4gICAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQueCArPSB0YXJnZXQueDtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC53aWR0aCAtPSB0YXJnZXQueDtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC5oZWlnaHQgKz0gdGFyZ2V0Lnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdyZXNpemUtbmUnOlxuICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQuaGVpZ2h0IC0gdGFyZ2V0LnkgPiAwKSB7XG4gICAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQueSArPSB0YXJnZXQueTtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC53aWR0aCArPSB0YXJnZXQueDtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC5oZWlnaHQgLT0gdGFyZ2V0Lnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdyZXNpemUtc2UnOlxuICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC53aWR0aCArPSB0YXJnZXQueDtcbiAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQuaGVpZ2h0ICs9IHRhcmdldC55O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbW92ZSc6XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TWF4WCA9XG4gICAgICAgICAgICAgIE1hdGgubWF4KFxuICAgICAgICAgICAgICAgIHRoaXMubWFuaWZlc3Q/LmdyaWQ/LmNvbHVtbnMgPz8gREVGQVVMVF9DT0xVTU5TX05VTUJFUixcbiAgICAgICAgICAgICAgICAuLi4odGhpcy5tYW5pZmVzdD8ud2lkZ2V0cyA/PyBbXSkubWFwKCh3KSA9PiB3LmxheW91dC53aWR0aCArIHcubGF5b3V0LngpXG4gICAgICAgICAgICAgICkgLVxuICAgICAgICAgICAgICBjYW5kaWRhdGVXaWRnZXQubGF5b3V0LndpZHRoICtcbiAgICAgICAgICAgICAgMTtcbiAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQueCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQueCArIHRhcmdldC54LCBjdXJyZW50TWF4WCkpO1xuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TWF4WSA9XG4gICAgICAgICAgICAgIE1hdGgubWF4KFxuICAgICAgICAgICAgICAgIHRoaXMubWFuaWZlc3Q/LmdyaWQ/LnJvd3MgPz8gREVGQVVMVF9ST1dTX05VTUJFUixcbiAgICAgICAgICAgICAgICAuLi4odGhpcy5tYW5pZmVzdD8ud2lkZ2V0cyA/PyBbXSkubWFwKCh3KSA9PiB3LmxheW91dC5oZWlnaHQgKyB3LmxheW91dC55KVxuICAgICAgICAgICAgICApIC1cbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC5oZWlnaHQgK1xuICAgICAgICAgICAgICAxO1xuICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC55ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY2FuZGlkYXRlV2lkZ2V0LmxheW91dC55ICsgdGFyZ2V0LnksIGN1cnJlbnRNYXhZKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVEYXNoYm9hcmRNYW5pZmVzdCh7XG4gICAgICAgICAgICBtYW5pZmVzdDogc29sdmVDb2xsaXNpb25zKFxuICAgICAgICAgICAgICBjYW5kaWRhdGVXaWRnZXQsXG4gICAgICAgICAgICAgIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCxcbiAgICAgICAgICAgICAgdGhpcy5tYW5pZmVzdCA/PyAoe30gYXMgRGFzaGJvYXJkTWFuaWZlc3QpXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkcmFnTW92ZSgkZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHRoaXMubW92aW5nTW91c2UoJGV2ZW50KTtcbiAgfVxuXG4gIGRyYWdMZWF2ZSgkZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAoJGV2ZW50LmN1cnJlbnRUYXJnZXQuY29udGFpbnMoJGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZXMgPSAoJGV2ZW50LmRhdGFUcmFuc2ZlciB8fCB7IHR5cGVzOiBbJyddIH0pLnR5cGVzO1xuICAgIGlmICh0eXBlcy5pbmNsdWRlcyhNSU1FX1RZUEVfV0lER0VUX01BTklGRVNUKSkge1xuICAgICAgLy8gQXMgdGhlIGRyYWcgaXMgbGVhdmluZyB0aGUgd2luZG93LCBkZWxldGUgdGhlIHdpZGdldCBmcm9tIGl0LCBhbmQgc3RvcCBlZGl0aW9uIG1vZGVcbiAgICAgIGlmICghISRldmVudCAmJiAhISRldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZURhc2hib2FyZE1hbmlmZXN0KHtcbiAgICAgICAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgICAgICAgIC4uLnRoaXMubWFuaWZlc3QsXG4gICAgICAgICAgICAgIHdpZGdldHM6IHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2xlYXJBY3Rpb25zKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZHJvcHBpbmcoJGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKCEhJGV2ZW50ICYmICEhJGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgaWYgKCRldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaW5jbHVkZXMoTUlNRV9UWVBFX1dJREdFVF9NQU5JRkVTVCkpIHtcbiAgICAgICAgLy8gUmVhcnJhbmdlIGRyb3AgdG8gY29ycmVjdCBzaXplLCB0eXBlLCAuLi4sIGFzIGEgcGxhY2Vob2xkZXIgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIG1hbmlmZXN0IGJ5IGRyYWdlbnRlciBldmVudFxuICAgICAgICBjb25zdCBkYXRhVHJhbnNmZXJNYW5pZmVzdCA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgJGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKE1JTUVfVFlQRV9XSURHRVRfTUFOSUZFU1QpXG4gICAgICAgICkgYXMgV2lkZ2V0TWFuaWZlc3Q7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0ID0ge1xuICAgICAgICAgIC4uLmRhdGFUcmFuc2Zlck1hbmlmZXN0LFxuICAgICAgICAgIGxheW91dDogdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0Py5sYXlvdXQgPz8gKHt9IGFzIFdpZGdldExheW91dClcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLm1vdmluZ01vdXNlKCRldmVudCwgZmFsc2UpO1xuXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy5hc3NlcnRSZXN1bHRTZXRzKHtcbiAgICAgICAgICAgIGxpbmtlZEl0ZW1zOiB0aGlzLmxpbmtlZEl0ZW1zXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jbGVhckFjdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckFjdGlvbnMoKSB7XG4gICAgdGhpcy5hY3Rpb25UeXBlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubW92ZS5pbml0aWFsWCA9IDA7XG4gICAgdGhpcy5tb3ZlLmluaXRpYWxZID0gMDtcbiAgICB0aGlzLm1vdmUucHJldmlvdXNYID0gLTE7XG4gICAgdGhpcy5tb3ZlLnByZXZpb3VzWSA9IC0xO1xuICAgIHRoaXMuY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdCA9IG51bGw7XG4gICAgdGhpcy5pbml0aWFsV2lkZ2V0TWFuaWZlc3RMaXN0ID0gW107XG4gIH1cblxuICAvKioqXG4gICAqIE1hbmFnZSBvdGhlciBraW5kcyBvZiBkcm9wcyAoaW5zaWRlIHdpZGdldHMpXG4gICAqL1xuICBkcm9wcGluZ0luV2lkZ2V0KCRldmVudDogRHJhZ0V2ZW50LCBpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKCEhJGV2ZW50ICYmICEhJGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgaWYgKCRldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaW5jbHVkZXMoTUlNRV9UWVBFX1JFU1VMVFNFVCkpIHtcbiAgICAgICAgY29uc3QgbGlzdFdpZGdldE1hbmlmZXN0cyA9IFsuLi4odGhpcy5tYW5pZmVzdCB8fCB7IHdpZGdldHM6IFtdIH0pLndpZGdldHNdO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdFNldE5hbWUgPSAkZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoTUlNRV9UWVBFX1JFU1VMVFNFVCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSZXN1bHRTZXQgPSAoXG4gICAgICAgICAgQXJyYXkuaXNBcnJheShsaXN0V2lkZ2V0TWFuaWZlc3RzW2luZGV4XS5kYXRhc291cmNlKVxuICAgICAgICAgICAgPyBsaXN0V2lkZ2V0TWFuaWZlc3RzW2luZGV4XS5kYXRhc291cmNlXG4gICAgICAgICAgICA6IFtsaXN0V2lkZ2V0TWFuaWZlc3RzW2luZGV4XS5kYXRhc291cmNlXVxuICAgICAgICApIGFzIHN0cmluZ1tdO1xuICAgICAgICBjb25zdCBjdW11bGF0aXZlID0gJGV2ZW50LnNoaWZ0S2V5O1xuICAgICAgICBjb25zdCBuZXdSZXN1bHRTZXQgPSBjdW11bGF0aXZlID8gWy4uLmN1cnJlbnRSZXN1bHRTZXQsIHJlc3VsdFNldE5hbWVdIDogcmVzdWx0U2V0TmFtZTtcblxuICAgICAgICBsaXN0V2lkZ2V0TWFuaWZlc3RzW2luZGV4XSA9IHtcbiAgICAgICAgICAuLi5saXN0V2lkZ2V0TWFuaWZlc3RzW2luZGV4XSxcbiAgICAgICAgICBkYXRhc291cmNlOiBuZXdSZXN1bHRTZXRcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIERhc2hib2FyZEFjdGlvbnMudXBkYXRlRGFzaGJvYXJkTWFuaWZlc3Qoe1xuICAgICAgICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgICAgICAgLi4udGhpcy5tYW5pZmVzdCxcbiAgICAgICAgICAgICAgd2lkZ2V0czogbGlzdFdpZGdldE1hbmlmZXN0c1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy5hc3NlcnRSZXN1bHRTZXRzKHtcbiAgICAgICAgICAgIGxpbmtlZEl0ZW1zOiB0aGlzLmxpbmtlZEl0ZW1zXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0b2dnbGVSZW1vdmVDb25maXJtKCRldmVudD86IE1vdXNlRXZlbnQsIGluZGV4PzogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpcm1SZW1vdmVSZWYpIHtcbiAgICAgIHRoaXMuaW5kZXhGb3JSZW1vdmFsID0gaW5kZXggPz8gLTE7XG4gICAgICB0aGlzLmNvbmZpcm1SZW1vdmVSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKFxuICAgICAgICBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydvLW1vZGFsLXdyYXBwZXInXSxcbiAgICAgICAgICBiYWNrZHJvcENsYXNzOiAnYmFja2Ryb3AnXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDb25maWdBY3Rpb25zLmFkZGluZ092ZXJsYXkoeyBpZDogdGhpcy5jb25zdHJ1Y3Rvci5uYW1lICsgJy1tb2RhbCcgfSkpO1xuICAgICAgdGhpcy5jb25maXJtUmVtb3ZlUmVmLmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKF8pID0+IHRoaXMudG9nZ2xlUmVtb3ZlQ29uZmlybSgpKTtcbiAgICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZi5hdHRhY2gobmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMudGVtcGxhdGVNb2RhbCwgdGhpcy52aWV3Q29udGFpbmVyUmVmKSk7XG4gICAgICBpZiAoJGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZGl2Lm8tbW9kYWwtd3JhcHBlcicpIGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgICBpZiAoISFwYW5lbCkge1xuICAgICAgICAgIHBhbmVsLnN0eWxlLmxlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCAtIHBhbmVsLmNsaWVudFdpZHRoLCAkZXZlbnQuY2xpZW50WCAtIDMwKSkgKyAncHgnO1xuICAgICAgICAgIHBhbmVsLnN0eWxlLnRvcCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHdpbmRvdy5pbm5lckhlaWdodCAtIHBhbmVsLmNsaWVudEhlaWdodCwgJGV2ZW50LmNsaWVudFkgLSAxMCkpICsgJ3B4JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbmZpcm1SZW1vdmVSZWYuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5jb25maXJtUmVtb3ZlUmVmID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDb25maWdBY3Rpb25zLmNsb3NlT3ZlcmxheSh7IGlkOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgKyAnLW1vZGFsJyB9KSk7XG4gICAgfVxuICB9XG5cbiAgY29uZmlybVJlbW92ZSgpIHtcbiAgICB0aGlzLnJlbW92ZSh0aGlzLmluZGV4Rm9yUmVtb3ZhbCk7XG4gICAgdGhpcy5jYW5jZWxSZW1vdmVDb25maXJtKCk7XG4gIH1cblxuICBjYW5jZWxSZW1vdmVDb25maXJtKCkge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ29uZmlnQWN0aW9ucy5jbG9zZU92ZXJsYXkoeyBpZDogdGhpcy5jb25zdHJ1Y3Rvci5uYW1lICsgJy1tb2RhbCcgfSkpO1xuICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZj8uZGlzcG9zZSgpO1xuICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRyYWNrV2lkZ2V0cyhpbmRleDogbnVtYmVyLCB3aWRnZXRNYW5pZmVzdDogV2lkZ2V0TWFuaWZlc3QpIHtcbiAgICByZXR1cm4gaW5kZXggKyAnLScgKyB3aWRnZXRNYW5pZmVzdC50eXBlICsgJy0nICsgSlNPTi5zdHJpbmdpZnkod2lkZ2V0TWFuaWZlc3QubGF5b3V0KTtcbiAgfVxuXG4gIGNoYW5nZVNpemUoZGlyZWN0aW9uOiBzdHJpbmcsIG9mZnNldDogbnVtYmVyKSB7XG4gICAgY29uc3QgbWluUm93cyA9XG4gICAgICAodGhpcy5tYW5pZmVzdD8ud2lkZ2V0cy5tYXAoKHcpID0+IHcubGF5b3V0LmhlaWdodCArIHcubGF5b3V0LnkpLnJlZHVjZSgoYSwgYikgPT4gKGEgPiBiID8gYSA6IGIpLCAyKSA/PyAyKSAtIDE7XG4gICAgY29uc3QgbWluQ29sdW1ucyA9XG4gICAgICAodGhpcy5tYW5pZmVzdD8ud2lkZ2V0cy5tYXAoKHcpID0+IHcubGF5b3V0LndpZHRoICsgdy5sYXlvdXQueCkucmVkdWNlKChhLCBiKSA9PiAoYSA+IGIgPyBhIDogYiksIDIpID8/IDIpIC0gMTtcblxuICAgIGNvbnN0IGZ1dHVyZVNpemUgPSB7XG4gICAgICByb3dzOiBNYXRoLm1heChtaW5Sb3dzLCAodGhpcy5tYW5pZmVzdCEuZ3JpZD8ucm93cyA/PyBERUZBVUxUX1JPV1NfTlVNQkVSKSArIChkaXJlY3Rpb24gPT09ICdyb3dzJyA/IG9mZnNldCA6IDApKSxcbiAgICAgIGNvbHVtbnM6IE1hdGgubWF4KFxuICAgICAgICBtaW5Db2x1bW5zLFxuICAgICAgICAodGhpcy5tYW5pZmVzdCEuZ3JpZD8uY29sdW1ucyA/PyBERUZBVUxUX0NPTFVNTlNfTlVNQkVSKSArIChkaXJlY3Rpb24gPT09ICdjb2x1bW5zJyA/IG9mZnNldCA6IDApXG4gICAgICApXG4gICAgfTtcblxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZURhc2hib2FyZE1hbmlmZXN0KHtcbiAgICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgICAuLi50aGlzLm1hbmlmZXN0ISxcbiAgICAgICAgICBncmlkOiB7XG4gICAgICAgICAgICAuLi4odGhpcy5tYW5pZmVzdD8uZ3JpZCA/PyB7fSksXG4gICAgICAgICAgICAuLi5mdXR1cmVTaXplXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJvLWRhc2hib2FyZC1lZGl0XCIgW2NsYXNzLi1lZGl0XT1cIm1vZGVFZGl0aW9uJCB8IGFzeW5jXCI+XG4gIDxkaXYgY2xhc3M9XCJvLWRhc2hib2FyZC1hZGQgLXJvd3NcIj5cbiAgICA8YnV0dG9uIChjbGljayk9XCJjaGFuZ2VTaXplKCdyb3dzJywgLTEpXCI+XG4gICAgICA8cHJ5LWljb24gaWNvblN2Zz1cInJlbW92ZVwiIFt3aWR0aF09XCIxMlwiIFtoZWlnaHRdPVwiMTJcIj48L3ByeS1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gKGNsaWNrKT1cImNoYW5nZVNpemUoJ3Jvd3MnLCArMSlcIj5cbiAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiYWRkXCIgW3dpZHRoXT1cIjEyXCIgW2hlaWdodF09XCIxMlwiPjwvcHJ5LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPHA+e3sgJ0BwcnkuZ3JpZC5yb3dzJyB8IGkxOG4gfX08L3A+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiby1kYXNoYm9hcmQtYWRkIC1jb2xzXCI+XG4gICAgPHA+e3sgJ0BwcnkuZ3JpZC5jb2x1bW5zJyB8IGkxOG4gfX08L3A+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwiY2hhbmdlU2l6ZSgnY29sdW1ucycsIC0xKVwiPlxuICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJyZW1vdmVcIiBbd2lkdGhdPVwiMTJcIiBbaGVpZ2h0XT1cIjEyXCI+PC9wcnktaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIChjbGljayk9XCJjaGFuZ2VTaXplKCdjb2x1bW5zJywgKzEpXCI+XG4gICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImFkZFwiIFt3aWR0aF09XCIxMlwiIFtoZWlnaHRdPVwiMTJcIj48L3ByeS1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiby1kYXNoYm9hcmQtZ3JpZFwiXG4gICAgW3N0eWxlLmdyaWRUZW1wbGF0ZUNvbHVtbnNdPVwiZ3JpZFRlbXBsYXRlQ29sdW1ucyQgfCBhc3luY1wiXG4gICAgW3N0eWxlLmdyaWRUZW1wbGF0ZVJvd3NdPVwiZ3JpZFRlbXBsYXRlUm93cyQgfCBhc3luY1wiXG4gICAgW3N0eWxlLmdyaWRHYXBdPVwiZGFzaGJvYXJkUGFyYW1zLmdyaWRHYXAgKyAncHgnXCJcbiAgICAjZ3JpZFxuICAgIChtb3VzZW1vdmUpPVwibW92aW5nTW91c2UoJGV2ZW50KVwiXG4gICAgKGRyb3ApPVwiZHJvcHBpbmcoJGV2ZW50KVwiXG4gICAgKGRyYWdvdmVyKT1cImRyYWdNb3ZlKCRldmVudClcIlxuICAgIChkcmFnbGVhdmUpPVwiZHJhZ0xlYXZlKCRldmVudClcIlxuICAgIChkcmFnZW50ZXIpPVwiZHJhZ0VudGVyKCRldmVudClcIlxuICA+XG4gICAgQGZvciAoXG4gICAgICB3aWRnZXRNYW5pZmVzdCBvZiAod2luZG93TWFuaWZlc3QkIHwgYXN5bmMpPy53aWRnZXRzIHx8IFtdO1xuICAgICAgdHJhY2sgdHJhY2tXaWRnZXRzKHdpZGdldEluZGV4LCB3aWRnZXRNYW5pZmVzdCk7XG4gICAgICBsZXQgd2lkZ2V0SW5kZXggPSAkaW5kZXhcbiAgICApIHtcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJvLWRhc2hib2FyZC13aWRnZXRcIlxuICAgICAgICBbY2xhc3MuLWVkaXRlZF09XCJtb2RlRWRpdGlvblwiXG4gICAgICAgIFtzdHlsZS5ncmlkQ29sdW1uXT1cImdyaWRDb2x1bW4od2lkZ2V0TWFuaWZlc3QubGF5b3V0KVwiXG4gICAgICAgIFtzdHlsZS5ncmlkUm93XT1cImdyaWRSb3cod2lkZ2V0TWFuaWZlc3QubGF5b3V0KVwiXG4gICAgICAgIChkcm9wKT1cImRyb3BwaW5nSW5XaWRnZXQoJGV2ZW50LCB3aWRnZXRJbmRleClcIlxuICAgICAgPlxuICAgICAgICBAaWYgKG1vZGVFZGl0aW9uKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlc2l6ZSBudy1yZXNpemVcIiAobW91c2Vkb3duKT1cInN0YXJ0UmVzaXplKCRldmVudCwgd2lkZ2V0SW5kZXgsICdyZXNpemUtbncnKVwiPlxuICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJub3J0aF93ZXN0XCIgW2FuaW1hdGlvbl09XCJmYWxzZVwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlc2l6ZSBzdy1yZXNpemVcIiAobW91c2Vkb3duKT1cInN0YXJ0UmVzaXplKCRldmVudCwgd2lkZ2V0SW5kZXgsICdyZXNpemUtc3cnKVwiPlxuICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJzb3V0aF93ZXN0XCIgW2FuaW1hdGlvbl09XCJmYWxzZVwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlc2l6ZSBuZS1yZXNpemVcIiAobW91c2Vkb3duKT1cInN0YXJ0UmVzaXplKCRldmVudCwgd2lkZ2V0SW5kZXgsICdyZXNpemUtbmUnKVwiPlxuICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJub3J0aF9lYXN0XCIgW2FuaW1hdGlvbl09XCJmYWxzZVwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlc2l6ZSBzZS1yZXNpemVcIiAobW91c2Vkb3duKT1cInN0YXJ0UmVzaXplKCRldmVudCwgd2lkZ2V0SW5kZXgsICdyZXNpemUtc2UnKVwiPlxuICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJzb3V0aF9lYXN0XCIgW2FuaW1hdGlvbl09XCJmYWxzZVwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlc2l6ZSBkZWxldGVcIiAobW91c2Vkb3duKT1cInRvZ2dsZVJlbW92ZUNvbmZpcm0oJGV2ZW50LCB3aWRnZXRJbmRleClcIj5cbiAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiY2xvc2VcIiBbYW5pbWF0aW9uXT1cImZhbHNlXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW92ZVwiIGRyYWdnYWJsZT1cInRydWVcIiAoZHJhZ3N0YXJ0KT1cImRyYWdTdGFydCgkZXZlbnQsIHdpZGdldEluZGV4KVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vdmUtaW5zaWRlIG1vdmUte3sgd2lkZ2V0TWFuaWZlc3QudHlwZSB9fVwiPlxuICAgICAgICAgICAgICA8c3Bhbj57eyB3aWRnZXRNYW5pZmVzdC50aXRsZSA/PyAoJ0BwcnkudG9vbGJveC4nICsgd2lkZ2V0TWFuaWZlc3QudHlwZSB8IGkxOG4pIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICghbW9kZUVkaXRpb24pIHtcbiAgICAgICAgICA8cHJ5LXdpZGdldC1pbnN0YW5jaWF0b3JcbiAgICAgICAgICAgIFtzdGF0aWNNYW5pZmVzdF09XCJ3aWRnZXRNYW5pZmVzdFwiXG4gICAgICAgICAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgICAgICAgID48L3ByeS13aWRnZXQtaW5zdGFuY2lhdG9yPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKCFub0JhY2tncm91bmQpIHtcbiAgICAgIEBpZiAoXG4gICAgICAgIHtcbiAgICAgICAgICBub1dpZGdldHM6IChub25GaWxsZXJXaWRnZXRzJCB8IGFzeW5jKSA9PT0gMCxcbiAgICAgICAgICBnbG9iYWxMb2FkaW5nOiBsb2FkaW5nJCB8IGFzeW5jLFxuICAgICAgICAgIGZldGNoTG9hZGluZzogKGRhdGFGZXRjaGluZyQgfCBhc3luYyk/Lmxlbmd0aCA/PyAxID4gMFxuICAgICAgICB9O1xuICAgICAgICBhcyBkYXRhXG4gICAgICApIHtcbiAgICAgICAgQGlmIChkYXRhLm5vV2lkZ2V0cykge1xuICAgICAgICAgIEBpZiAoZGF0YS5nbG9iYWxMb2FkaW5nKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm8td2lkZ2V0XCIgW3N0eWxlLmdyaWQtYXJlYV09XCJiYWNrZ3JvdW5kQXJlYSQgfCBhc3luY1wiPlxuICAgICAgICAgICAgICA8cHJ5LXBhZ2UtbG9hZGVyPjwvcHJ5LXBhZ2UtbG9hZGVyPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5vLXdpZGdldF9fdGV4dFwiPnt7ICdAcHJ5LndpZGdldC50YXJnZXQubG9hZGluZycgfCBpMThuIH19Li4uPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm8td2lkZ2V0XCIgW3N0eWxlLmdyaWQtYXJlYV09XCJiYWNrZ3JvdW5kQXJlYSQgfCBhc3luY1wiPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJuby13aWRnZXRfX3NlYXJjaFwiXG4gICAgICAgICAgICAgICAgc3JjPVwiLi4vLi4vLi4vYXNzZXRzL3N2Z3MvcHJ5X3JlY2hlcmNoZS5zdmdcIlxuICAgICAgICAgICAgICAgIGFsdD1cInt7XG4gICAgICAgICAgICAgICAgICAobGF5b3V0ID09PSBEYXNoYm9hcmRHcmlkTGF5b3V0Lk1BTlVBTFxuICAgICAgICAgICAgICAgICAgICA/ICdAcHJ5LndpZGdldC50YXJnZXQubm9uZV9tYW51YWwnXG4gICAgICAgICAgICAgICAgICAgIDogJ0Bwcnkud2lkZ2V0LnRhcmdldC5ub25lX2F1dG8nXG4gICAgICAgICAgICAgICAgICApIHwgaTE4blxuICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuby13aWRnZXRfX3RleHRcIj57e1xuICAgICAgICAgICAgICAgIChsYXlvdXQgPT09IERhc2hib2FyZEdyaWRMYXlvdXQuTUFOVUFMXG4gICAgICAgICAgICAgICAgICA/ICdAcHJ5LndpZGdldC50YXJnZXQubm9uZV9tYW51YWwnXG4gICAgICAgICAgICAgICAgICA6ICdAcHJ5LndpZGdldC50YXJnZXQubm9uZV9hdXRvJ1xuICAgICAgICAgICAgICAgICkgfCBpMThuXG4gICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImEtcGFnZS1sb2FkZXIgYmFja2Ryb3BcIlxuICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImRhdGEuZmV0Y2hMb2FkaW5nICYmICFkYXRhLmdsb2JhbExvYWRpbmcgPyAnZmxleCcgOiAnbm9uZSdcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCIoZGFzaGJvYXJkU2l6ZSQgfCBhc3luYyk/LndpZHRoXCJcbiAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIihkYXNoYm9hcmRTaXplJCB8IGFzeW5jKT8uaGVpZ2h0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwcnktcGFnZS1sb2FkZXI+PC9wcnktcGFnZS1sb2FkZXI+XG4gICAgICAgICAgPHA+e3sgJ0Bwcnkud2lkZ2V0LnRhcmdldC5sb2FkaW5nJyB8IGkxOG4gfX0uLi48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIH1cbiAgPC9kaXY+XG48L2Rpdj5cbjxwcnktY29udGV4dC1tZW51PjwvcHJ5LWNvbnRleHQtbWVudT5cblxuPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZU1vZGFsPlxuICA8ZGl2IGNsYXNzPVwiby1tb2RhbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJvLW1vZGFsX190b3BcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLW1vZGFsX190b3BfX3RpdGxlXCI+XG4gICAgICAgIDxoMiBjbGFzcz1cImEtaDJcIiBpZD1cImRpYWxvZ190aXRsZVwiPlxuICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5tb2RhbFRpdGxlJyB8IGkxOG4gfX1cbiAgICAgICAgPC9oMj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm8tbW9kYWxfX3RvcF9fY2xvc2VcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHlcIiAoY2xpY2spPVwiY2FuY2VsUmVtb3ZlQ29uZmlybSgpXCI+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJjbG9zZVwiIFtoZWlnaHRdPVwiMzVcIiBbd2lkdGhdPVwiMzVcIj48L3ByeS1pY29uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS50b29sYm94LmNsb3NlJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm0tYnRuLWdyb3VwXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2FuY2VsUmVtb3ZlQ29uZmlybSgpXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tc2Vjb25kYXJ5XCI+XG4gICAgICAgIHt7ICdAcHJ5LnRvb2xib3gubWFuaWZlc3QuY2xvc2UnIHwgaTE4biB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiAoY2xpY2spPVwiY29uZmlybVJlbW92ZSgpXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiPlxuICAgICAgICB7eyAnQHByeS50b29sYm94Lm1hbmlmZXN0LnZhbGlkYXRlJyB8IGkxOG4gfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
617
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9kYXNoYm9hcmQvY29tcG9uZW50cy9kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvbGliL2Rhc2hib2FyZC9jb21wb25lbnRzL2Rhc2hib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVcsYUFBYSxFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFHTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBRU4sV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBRWIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUNMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osS0FBSyxFQUNMLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sU0FBUyxFQUNULEdBQUcsRUFFSCxFQUFFLEVBQ0YsU0FBUyxFQUNULFNBQVMsRUFDVixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFDTCxtQkFBbUIsRUFJcEIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDckYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBdUIsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0YsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixjQUFjLEVBQ2QscUJBQXFCLEVBQ3JCLG1CQUFtQixFQUNwQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7Ozs7Ozs7Ozs7QUFFekYsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsNkJBQTZCLENBQUM7QUFDdkUsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsMEJBQTBCLENBQUM7QUFDaEUsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsMEJBQTBCLENBQUM7QUFNaEUsTUFBTSxPQUFPLGtCQUFtQixTQUFRLHdCQUF3QjtJQW9COUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0RyxDQUFDO0lBRUQsSUFBYSxlQUFlLENBQUMsTUFBeUI7UUFDcEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBYSxnQkFBZ0IsQ0FBQyxJQUFhO1FBQ3pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQTZDRCxZQUNVLEtBQWlCLEVBQ2pCLE9BQWdCLEVBQ2hCLGdCQUFrQyxFQUNsQyxFQUFjO1FBRXRCLEtBQUssRUFBRSxDQUFDO1FBTEEsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUNqQixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQTlFeEIsYUFBUSxHQUE2QixJQUFJLENBQUM7UUFFMUMsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFHcEIscUJBQWdCLEdBQThDLElBQUksZUFBZSxDQUEyQixJQUFJLENBQUMsQ0FBQztRQUNsSCxhQUFRLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDL0Msb0JBQWUsR0FBVyxDQUFDLENBQUMsQ0FBQztRQU83QixXQUFNLEdBQXdCLEVBQXlCLENBQUM7UUFDeEQsc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQXNCLFNBQVMsQ0FBQyxDQUFDO1FBQ2hFLG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQW9DLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQWVyRyxtQkFBYyxHQUFHLElBQUksQ0FBQztRQUV0QixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUd0QixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFFakMsb0JBQWUsR0FBd0I7WUFDckMsU0FBUyxFQUFFLENBQUM7WUFDWixVQUFVLEVBQUUsQ0FBQztZQUNiLE9BQU8sRUFBRSxjQUFjO1lBQ3ZCLE9BQU8sRUFBRSxzQkFBc0I7WUFDL0IsU0FBUyxFQUFFLENBQUM7WUFDWixVQUFVLEVBQUUscUJBQXFCO1lBQ2pDLElBQUksRUFBRSxtQkFBbUI7WUFDekIsVUFBVSxFQUFFLENBQUM7WUFDYixTQUFTLEVBQUUsQ0FBQztZQUNaLFVBQVUsRUFBRSxLQUFLO1NBQ2xCLENBQUM7UUFDTyxlQUFVLEdBQVcsQ0FBQyxDQUFDO1FBQ3RCLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3ZDLFNBQUksR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzVDLDhCQUF5QixHQUEwQixJQUFJLENBQUM7UUFDeEQsOEJBQXlCLEdBQXFCLEVBQUUsQ0FBQztRQUNqRCxTQUFJLEdBS0E7WUFDRixRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ1osUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNaLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDYixTQUFTLEVBQUUsQ0FBQyxDQUFDO1NBQ2QsQ0FBQztRQUdGLHdCQUFtQixHQUFHLG1CQUFtQixDQUFDO1FBQzFDLFdBQU0sR0FBVyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7UUFZMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEYsSUFBSSxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUM7WUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQUM7WUFDMUQsSUFBSSxDQUFDLGlCQUFpQjtTQUN2QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVGLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDVixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7UUFDRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FDakgsQ0FBQztRQUNGLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUM5RSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFDeEMsU0FBUyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsZUFBZSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFDL0csR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDakIsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlDLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ25GLDZCQUE2QjtnQkFDN0IsTUFBTSxJQUFJLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7Z0JBQ3ZGLE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLGdCQUFnQixDQUNsRCxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQy9ELFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUN0QixDQUFDO2dCQUNGLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDakIsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ2hELEtBQUssR0FBRyxLQUFLLENBQUM7b0JBQ2QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQzt3QkFDdkMsTUFBTSxTQUFTLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQzt3QkFDMUQsSUFDRSxTQUFTLENBQUMsT0FBTzs2QkFDZCxHQUFHLENBQUMsQ0FBQyxNQUFzQixFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDOzZCQUNwRixNQUFNLENBQUMsQ0FBQyxDQUFVLEVBQUUsQ0FBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUNuRCxDQUFDOzRCQUNELFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDOzRCQUNsQyxLQUFLLEdBQUcsSUFBSSxDQUFDOzRCQUNiLE1BQU07d0JBQ1IsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQyxDQUFDLEVBQ0Ysb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQzVDLENBQUM7UUFDRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQ2hELEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FDeEYsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixhQUFhLENBQUM7WUFDWixJQUFJLENBQUMsZUFBZTtZQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUM7WUFDckQsSUFBSSxDQUFDLGdCQUFnQjtTQUN0QixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxFQUFFLEVBQUU7WUFDcEQsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM3RSxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVGLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXpELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQzthQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3BCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNyRCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3BCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQzthQUN6QixJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsTUFBYSxFQUFFLEVBQUUsQ0FBQyxNQUF1QixDQUFDLEVBQy9DLE1BQU0sQ0FBQyxDQUFDLE1BQXFCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUMzRjthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQ2hGLENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUM3RCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNwRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNoRixHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQzFCLElBQUksQ0FBQyxZQUFZLENBQ2YsT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQ3RCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDekYsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLG1CQUFtQixDQUMvQyxDQUNGLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDbkYsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxJQUFJLHNCQUFzQixDQUFDLENBQUMsQ0FDbkgsQ0FBQztRQUVGLElBQUksQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzlFLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FDMUIsQ0FBQyxPQUFPO1lBQ04sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsSUFDckQsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxHQUFHLENBQ3ZELEVBQUU7WUFDSixDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxJQUFJLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQ3RFLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUs7YUFDMUIsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQzthQUNyQyxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDYixNQUFNLEtBQUssbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLElBQUksRUFBRSxDQUNsRyxDQUNGLENBQUM7UUFFSixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUM3QyxTQUFTLENBQUM7WUFDUixLQUFLLEVBQUUsR0FBRztZQUNWLE1BQU0sRUFBRSxHQUFHO1NBQ1osQ0FBQyxFQUNGLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUM1RSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQ2pCLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUM3RSxDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxjQUFjO1lBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUNqQixnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FDckcsQ0FBQztJQUNOLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsY0FBYztRQUNaLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDbkUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYTtRQUNYLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7WUFDekMsT0FBTyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQy9FLE9BQU8sR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQ2xDLENBQUM7WUFFRCxNQUFNLFNBQVMsR0FBaUIsT0FBUSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ3ZFLE1BQU0sVUFBVSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQy9DLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLG1CQUFtQjtnQkFDN0YsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQVMsRUFBRSxDQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWpHLElBQUksQ0FBQyxNQUFNLEdBQUc7Z0JBQ1osU0FBUztnQkFDVCwwQ0FBMEM7Z0JBQzFDLFVBQVUsRUFBRSxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxNQUFNO2dCQUNsRCxPQUFPLEVBQUUsQ0FBQztnQkFDVixPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksc0JBQXNCO2dCQUMxRyxVQUFVLEVBQUUsQ0FBQztnQkFDYixJQUFJO2dCQUNKLFNBQVMsRUFBRSxDQUFDO2dCQUNaLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxVQUFVO2dCQUNqRCxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUztnQkFDL0MsVUFBVTthQUNYLENBQUM7WUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87Z0JBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVTtvQkFDaEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUk7d0JBQ3ZDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksY0FBYzt3QkFDMUMsQ0FBQyxDQUFDLGNBQWM7b0JBQ2xCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDUixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUMvQixDQUFDLEVBQ0QsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzNGLENBQUM7WUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVM7Z0JBQ25CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBRWxHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFckYsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlDLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxVQUFVLENBQUMsTUFBb0I7UUFDN0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNyQyxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUNoRixNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FDeEIsRUFBRSxDQUFDO1FBQ04sQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLE1BQW9CO1FBQzFCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPO2lCQUMxQyxNQUFNLENBQUMsQ0FBQyxFQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7aUJBQzlHLE1BQU0sQ0FBQyxDQUFDLENBQVMsRUFBRSxDQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEUsT0FBTyxHQUFHLGNBQWMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzdFLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEIsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FDM0YsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLENBQ3JCLEVBQUUsQ0FBQztRQUNOLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFZO1FBQ3ZCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFlO1FBQzdCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOztPQUVHO0lBRUgsTUFBTSxDQUFDLENBQVM7UUFDZCxNQUFNLG1CQUFtQixHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1RSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztRQUU5RSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDakIsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUM7WUFDdkMsUUFBUSxFQUFFO2dCQUNSLEdBQUcsSUFBSSxDQUFDLFFBQVE7Z0JBQ2hCLE9BQU8sRUFBRSxtQkFBbUI7YUFDN0I7U0FDRixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxlQUFlLENBQUMsV0FBbUIsRUFBRSxXQUFtQjtRQUN0RCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsUUFBUSxDQUFDLFdBQW1CO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQ7O09BRUc7SUFFSCxtQkFBbUIsQ0FBQyxNQUFrQixFQUFFLGFBQXFCO1FBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUNwQyxJQUFJLENBQUMseUJBQXlCLEdBQUcsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RiwwRkFBMEY7SUFDNUYsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFrQixFQUFFLGFBQXFCLEVBQUUsU0FBaUI7UUFDdEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDNUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNoRCwrRkFBK0Y7SUFDakcsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFpQixFQUFFLGFBQXFCO1FBQ2hELElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDaEQsa0JBQWtCLENBQUMsMkJBQTJCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyx5QkFBeUIsSUFBSyxFQUFxQixDQUFDLENBQUM7UUFDakgsNkZBQTZGO0lBQy9GLENBQUM7SUFFTyxNQUFNLENBQUMsMkJBQTJCLENBQUMsTUFBaUIsRUFBRSxRQUF3QjtRQUNwRixJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMseUJBQXlCLENBQUMsRUFBRSxDQUFDO1lBQ3hHLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNqRixNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzdFLHFIQUFxSDtZQUNySCxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDekIscUJBQXFCLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUM1RSxTQUFTLENBQUMsMkJBQTJCO2FBQ3RDLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFpQixFQUFFLFFBQWlCLEtBQUs7UUFDakQsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV4QixNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDO1FBRTdELElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsTUFBa0I7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1lBQ3BDLDBIQUEwSDtZQUMxSCxNQUFNLEtBQUssR0FBRyxDQUFFLE1BQW9CLENBQUMsWUFBWSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUM1RSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMseUJBQXlCLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztnQkFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUV6RSw4SEFBOEg7Z0JBQzlILElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO2dCQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQztnQkFDcEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzdDLElBQUksQ0FBQyx5QkFBeUIsR0FBRztvQkFDL0IsSUFBSSxFQUFFLGFBQWE7b0JBQ25CLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFO2lCQUN0RSxDQUFDO2dCQUNGLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzdGLHFHQUFxRztnQkFFckcsMkZBQTJGO2dCQUMzRixNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO2dCQUN0RixJQUFJLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUN6QixNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNwRCxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUM5RCxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRSxDQUFDO3FCQUFNLENBQUM7b0JBQ04sZ0JBQWdCO29CQUNoQixNQUFNLE1BQU0sR0FBRyxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUN4RSxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUN0QyxJQUFJO3dCQUNILEtBQUssRUFBRSxDQUFDO3dCQUNSLE1BQU0sRUFBRSxDQUFDO3FCQUNWLENBQUM7b0JBQ0YsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztvQkFDM0QsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDL0QsQ0FBQztnQkFFRCw2RkFBNkY7Z0JBQzdGLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO2dCQUM5RSxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDakIsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDNUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQzdDLENBQUM7Z0JBRUQscUdBQXFHO2dCQUNyRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ3BDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFrQixFQUFFLFFBQVEsR0FBRyxJQUFJO1FBQzNDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDN0MsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUU3QyxNQUFNLE1BQU0sR0FBRztZQUNiLENBQUMsRUFDQyxFQUFFLEtBQUssQ0FBQztnQkFDTixDQUFDLENBQUMsQ0FBQztnQkFDSCxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FDUixDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQzNFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FDbEU7WUFDUCxDQUFDLEVBQ0MsRUFBRSxLQUFLLENBQUM7Z0JBQ04sQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQ1IsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUM1RSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQ25FO1NBQ1IsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdEYsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQy9CLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBa0IsRUFBRSxRQUFRLEdBQUcsSUFBSTtRQUM3QyxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNoRCxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMvQixNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFFLENBQUM7Z0JBRXpFLFFBQVEsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUN4QixLQUFLLFdBQVc7d0JBQ2QsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDOzRCQUM1RixlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDOzRCQUNyQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDOzRCQUNyQyxlQUFlLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDOzRCQUN6QyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUM1QyxDQUFDO3dCQUNELE1BQU07b0JBQ1IsS0FBSyxXQUFXO3dCQUNkLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQzs0QkFDaEQsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQzs0QkFDckMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQzs0QkFDekMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDNUMsQ0FBQzt3QkFDRCxNQUFNO29CQUNSLEtBQUssV0FBVzt3QkFDZCxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7NEJBQ2pELGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUM7NEJBQ3JDLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUM7NEJBQ3pDLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQzVDLENBQUM7d0JBQ0QsTUFBTTtvQkFDUixLQUFLLFdBQVc7d0JBQ2QsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDekMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDMUMsTUFBTTtvQkFDUixLQUFLLE1BQU07d0JBQ1QsTUFBTSxXQUFXLEdBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FDTixJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLElBQUksc0JBQXNCLEVBQ3RELEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQzFFOzRCQUNELGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSzs0QkFDNUIsQ0FBQyxDQUFDO3dCQUNKLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO3dCQUVuRyxNQUFNLFdBQVcsR0FDZixJQUFJLENBQUMsR0FBRyxDQUNOLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxtQkFBbUIsRUFDaEQsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FDM0U7NEJBQ0QsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNOzRCQUM3QixDQUFDLENBQUM7d0JBQ0osZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7d0JBQ25HLE1BQU07Z0JBQ1YsQ0FBQztnQkFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDakIsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUM7b0JBQ3ZDLFFBQVEsRUFBRSxlQUFlLENBQ3ZCLGVBQWUsRUFDZixJQUFJLENBQUMseUJBQXlCLEVBQzlCLElBQUksQ0FBQyxRQUFRLElBQUssRUFBd0IsQ0FDM0M7aUJBQ0YsQ0FBQyxDQUNILENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxRQUFRLENBQUMsTUFBaUI7UUFDeEIsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV4QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBaUI7UUFDekIsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV4QixhQUFhO1FBQ2IsSUFBSSxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUN4RCxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDN0QsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDLEVBQUUsQ0FBQztZQUM5QyxzRkFBc0Y7WUFDdEYsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUNqQixnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQztvQkFDdkMsUUFBUSxFQUFFO3dCQUNSLEdBQUcsSUFBSSxDQUFDLFFBQVE7d0JBQ2hCLE9BQU8sRUFBRSxJQUFJLENBQUMseUJBQXlCO3FCQUN4QztpQkFDRixDQUFDLENBQ0gsQ0FBQztnQkFDRixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLE1BQWlCO1FBQ3hCLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFekIsYUFBYTtRQUNiLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RDLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDLEVBQUUsQ0FBQztnQkFDbEUsZ0hBQWdIO2dCQUNoSCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQ3JDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQ3JDLENBQUM7Z0JBRXBCLElBQUksQ0FBQyx5QkFBeUIsR0FBRztvQkFDL0IsR0FBRyxvQkFBb0I7b0JBQ3ZCLE1BQU0sRUFBRSxJQUFJLENBQUMseUJBQXlCLEVBQUUsTUFBTSxJQUFLLEVBQW1CO2lCQUN2RSxDQUFDO2dCQUVGLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUVoQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdELENBQUM7WUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCLENBQUMsTUFBaUIsRUFBRSxLQUFhO1FBQy9DLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RDLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztnQkFDNUQsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRTVFLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQ3ZFLE1BQU0sZ0JBQWdCLEdBQUcsQ0FDdkIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUM7b0JBQ2xELENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVO29CQUN2QyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FDaEMsQ0FBQztnQkFDZCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO2dCQUNuQyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO2dCQUV2RixtQkFBbUIsQ0FBQyxLQUFLLENBQUMsR0FBRztvQkFDM0IsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7b0JBQzdCLFVBQVUsRUFBRSxZQUFZO2lCQUN6QixDQUFDO2dCQUVGLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUNqQixnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQztvQkFDdkMsUUFBUSxFQUFFO3dCQUNSLEdBQUcsSUFBSSxDQUFDLFFBQVE7d0JBQ2hCLE9BQU8sRUFBRSxtQkFBbUI7cUJBQzdCO2lCQUNGLENBQUMsQ0FDSCxDQUFDO2dCQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNELE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQW1CLEVBQUUsS0FBYztRQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUN6QyxJQUFJLGFBQWEsQ0FBQztnQkFDaEIsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLFVBQVUsRUFBRSxDQUFDLGlCQUFpQixDQUFDO2dCQUMvQixhQUFhLEVBQUUsVUFBVTthQUMxQixDQUFDLENBQ0gsQ0FBQztZQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7WUFDbkYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDNUYsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFtQixDQUFDO2dCQUM5RSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDWixLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO29CQUM1RyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUMvRyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7WUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUYsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQWEsRUFBRSxjQUE4QjtRQUN4RCxPQUFPLEtBQUssR0FBRyxHQUFHLEdBQUcsY0FBYyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELFVBQVUsQ0FBQyxTQUFpQixFQUFFLE1BQWM7UUFDMUMsTUFBTSxPQUFPLEdBQ1gsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsSCxNQUFNLFVBQVUsR0FDZCxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpILE1BQU0sVUFBVSxHQUFHO1lBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFTLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqSCxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FDZixVQUFVLEVBQ1YsQ0FBQyxJQUFJLENBQUMsUUFBUyxDQUFDLElBQUksRUFBRSxPQUFPLElBQUksc0JBQXNCLENBQUMsR0FBRyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ2xHO1NBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUNqQixnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQztZQUN2QyxRQUFRLEVBQUU7Z0JBQ1IsR0FBRyxJQUFJLENBQUMsUUFBUztnQkFDakIsSUFBSSxFQUFFO29CQUNKLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQzlCLEdBQUcsVUFBVTtpQkFDZDthQUNGO1NBQ0YsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOzhHQTN2QlUsa0JBQWtCO2tHQUFsQixrQkFBa0IscVpBU08sV0FBVyxrSUFJakMsMkJBQTJCLHVFQ3RGM0MsbWpNQXNKQTs7MkZEN0VhLGtCQUFrQjtrQkFKOUIsU0FBUzsrQkFDRSxlQUFlO3dKQVkwQixhQUFhO3NCQUEvRCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBSU4sYUFBYTtzQkFBdkQsWUFBWTt1QkFBQywyQkFBMkI7Z0JBVzVCLGVBQWU7c0JBQTNCLEtBQUs7Z0JBSU8sZ0JBQWdCO3NCQUE1QixLQUFLO2dCQUlHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVhLE9BQU87c0JBQXpCLFNBQVM7dUJBQUMsTUFBTTtnQkFlUixVQUFVO3NCQUFsQixLQUFLO2dCQUNJLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheUNvbmZpZywgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbC9lczYnO1xuaW1wb3J0IHtcbiAgYXVkaXRUaW1lLFxuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGNvbWJpbmVMYXRlc3RXaXRoLFxuICBkZWJvdW5jZVRpbWUsXG4gIGRlbGF5LFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlsdGVyLFxuICBmcm9tRXZlbnQsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHN0YXJ0V2l0aCxcbiAgc3dpdGNoTWFwXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGlzcGxheU9wdGlvbnMgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVsL2Rpc3BsYXktb3B0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgRGFzaGJvYXJkR3JpZExheW91dCxcbiAgRGFzaGJvYXJkTWFuaWZlc3QsXG4gIFdpZGdldExheW91dCxcbiAgV2lkZ2V0TWFuaWZlc3Rcbn0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbC9tYW5pZmVzdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTUlNRV9UWVBFX1JFU1VMVFNFVCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWwvbWltZXR5cGUtcmVzdWx0c2V0LmNvbnN0YW50JztcbmltcG9ydCB7IENhdGVnb3J5QWN0aW9ucyB9IGZyb20gJy4uLy4uL2NvcmUvc3RvcmUvY2F0ZWdvcnkvY2F0ZWdvcnkuYWN0aW9ucyc7XG5pbXBvcnQgeyBDbGFzc0FjdGlvbnMgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL2NsYXNzL2NsYXNzLmFjdGlvbnMnO1xuaW1wb3J0IHsgQ29uZmlnQWN0aW9ucyB9IGZyb20gJy4uLy4uL2NvcmUvc3RvcmUvY29uZmlnL2NvbmZpZy5hY3Rpb25zJztcbmltcG9ydCB7IENvbmZpZ1NlbGVjdG9ycyB9IGZyb20gJy4uLy4uL2NvcmUvc3RvcmUvY29uZmlnL2NvbmZpZy5zZWxlY3RvcnMnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZUFjdGlvbnMgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL2RhdGEtc291cmNlL2RhdGEtc291cmNlLmFjdGlvbnMnO1xuaW1wb3J0IHsgRmllbGRBY3Rpb25zIH0gZnJvbSAnLi4vLi4vY29yZS9zdG9yZS9maWVsZC9maWVsZC5hY3Rpb25zJztcbmltcG9ydCB7IFJlbGF0aW9uVHlwZXNBY3Rpb25zIH0gZnJvbSAnLi4vLi4vY29yZS9zdG9yZS9yZWxhdGlvbi10eXBlcy9yZWxhdGlvbi10eXBlcy5hY3Rpb25zJztcbmltcG9ydCB7IFdpZGdldFBsYWNlbWVudFV0aWxzIH0gZnJvbSAnLi4vY29tcG9uZW50cy93aWRnZXRzL3dpZGdldC1wbGFjZW1lbnQvd2lkZ2V0LXBsYWNlbWVudC51dGlscyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRBY3Rpb25zLCBEYXNoYm9hcmRDZWxsUGFyYW1zLCBWaWV3TW9kZSB9IGZyb20gJy4uL3N0b3JlL2Rhc2hib2FyZC5hY3Rpb25zJztcbmltcG9ydCB7XG4gIERFRkFVTFRfQ09MVU1OU19OVU1CRVIsXG4gIERFRkFVTFRfR0FQX1BYLFxuICBERUZBVUxUX1JPV19IRUlHSFRfUFgsXG4gIERFRkFVTFRfUk9XU19OVU1CRVJcbn0gZnJvbSAnLi4vc3RvcmUvZGFzaGJvYXJkLmNvbnRhbnRzJztcbmltcG9ydCB7IERhc2hib2FyZFNlbGVjdG9ycyB9IGZyb20gJy4uL3N0b3JlL2Rhc2hib2FyZC5zZWxlY3RvcnMnO1xuaW1wb3J0IHsgc29sdmVDb2xsaXNpb25zIH0gZnJvbSAnLi9zb2x2ZS1jb2xsaXNpb25zLmZ1bmN0aW9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSB9IGZyb20gJy4vc3Vic2NyaXB0aW9ubmVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBXaWRnZXRJbnN0YW5jaWF0b3JDb21wb25lbnQgfSBmcm9tICcuL3dpZGdldHMvd2lkZ2V0LWluc3RhbmNpYXRvci93aWRnZXQtaW5zdGFuY2lhdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hTZWxlY3RvcnMgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL3NlYXJjaC9zZWFyY2guc2VsZWN0b3JzJztcbmltcG9ydCB7IERhdGFTb3VyY2VTZWxlY3RvcnMgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL2RhdGEtc291cmNlL2RhdGEtc291cmNlLnNlbGVjdG9ycyc7XG5cbmV4cG9ydCBjb25zdCBNSU1FX1RZUEVfV0lER0VUX01BTklGRVNUID0gJ2FwcGxpY2F0aW9uL3dpZGdldC1tYW5pZmVzdCc7XG5leHBvcnQgY29uc3QgTUlNRV9UWVBFX1dJREdFVF9UWVBFID0gJ2FwcGxpY2F0aW9uL3dpZGdldC10eXBlLSc7XG5leHBvcnQgY29uc3QgTUlNRV9UWVBFX1dJREdFVF9TSVpFID0gJ2FwcGxpY2F0aW9uL3dpZGdldC1zaXplLSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1kYXNoYm9hcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEYXNoYm9hcmRDb21wb25lbnQgZXh0ZW5kcyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyVmlld0NoZWNrZWQge1xuICBtYW5pZmVzdDogRGFzaGJvYXJkTWFuaWZlc3QgfCBudWxsID0gbnVsbDtcbiAgd2luZG93TWFuaWZlc3QkOiBPYnNlcnZhYmxlPERhc2hib2FyZE1hbmlmZXN0PjtcbiAgbW9kZUVkaXRpb24gPSBmYWxzZTtcbiAgbW9kZUVkaXRpb24kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBhY3Rpb25UeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHN0YXRpY0Rhc2hib2FyZCQ6IEJlaGF2aW9yU3ViamVjdDxEYXNoYm9hcmRNYW5pZmVzdCB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXNoYm9hcmRNYW5pZmVzdCB8IG51bGw+KG51bGwpO1xuICBzdGFja2VkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBpbmRleEZvclJlbW92YWw6IG51bWJlciA9IC0xO1xuICBAVmlld0NoaWxkKCd0ZW1wbGF0ZU1vZGFsJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSB0ZW1wbGF0ZU1vZGFsITogVGVtcGxhdGVSZWY8YW55PjtcbiAgc2VwYXJhdG9ycyQ6IE9ic2VydmFibGU8V2lkZ2V0TGF5b3V0W10+O1xuICBub25GaWxsZXJXaWRnZXRzJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgQFZpZXdDaGlsZHJlbihXaWRnZXRJbnN0YW5jaWF0b3JDb21wb25lbnQpIGluc3RhbmNpYXRvcnM/OiBRdWVyeUxpc3Q8V2lkZ2V0SW5zdGFuY2lhdG9yQ29tcG9uZW50PjtcbiAgZGF0YUZldGNoaW5nJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG4gIHBhcmFtczogRGFzaGJvYXJkQ2VsbFBhcmFtcyA9IHt9IGFzIERhc2hib2FyZENlbGxQYXJhbXM7XG4gIGZvcmNlTW9kZUVkaXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIF9kYXNoYm9hcmRTaXplJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9Pih7IHdpZHRoOiAzMDAsIGhlaWdodDogMzAwIH0pO1xuICBkYXNoYm9hcmRTaXplJDogT2JzZXJ2YWJsZTx7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0+O1xuXG4gIGdldCB3aWRnZXRzSW5zdGFuY2VzKCkge1xuICAgIHJldHVybiB0aGlzLmluc3RhbmNpYXRvcnM/Lm1hcCgoaW5zdGFuY2lhdG9yKSA9PiBpbnN0YW5jaWF0b3IuaW5zdGFuY2lhdGVkQ29tcG9uZW50Lmluc3RhbmNlKSA/PyBbXTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBzdGF0aWNEYXNoYm9hcmQod2luZG93OiBEYXNoYm9hcmRNYW5pZmVzdCkge1xuICAgIHRoaXMuc3RhdGljRGFzaGJvYXJkJC5uZXh0KHdpbmRvdyk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZm9yY2VNb2RlRWRpdGlvbihtb2RlOiBib29sZWFuKSB7XG4gICAgdGhpcy5mb3JjZU1vZGVFZGl0aW9uJC5uZXh0KG1vZGUpO1xuICB9XG5cbiAgQElucHV0KCkgQ2xvc2VPbkRyYWdPdXQgPSB0cnVlO1xuICBASW5wdXQoKSBkaXNwbGF5T3B0aW9ucz86IERpc3BsYXlPcHRpb25zO1xuICBASW5wdXQoKSBub0JhY2tncm91bmQgPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCdncmlkJykgZ3JpZFJlZiE6IEVsZW1lbnRSZWY7XG4gIHByaXZhdGUgY2FuQ2FsY3VsYXRlVmlldyA9IGZhbHNlO1xuICB0YXJnZXRJbmRleGVzJDogT2JzZXJ2YWJsZTxudW1iZXJbXT47XG4gIGRhc2hib2FyZFBhcmFtczogRGFzaGJvYXJkQ2VsbFBhcmFtcyA9IHtcbiAgICBncmlkV2lkdGg6IDEsXG4gICAgZ3JpZEhlaWdodDogMSxcbiAgICBncmlkR2FwOiBERUZBVUxUX0dBUF9QWCxcbiAgICBjb2x1bW5zOiBERUZBVUxUX0NPTFVNTlNfTlVNQkVSLFxuICAgIGNlbGxXaWR0aDogMSxcbiAgICBjZWxsSGVpZ2h0OiBERUZBVUxUX1JPV19IRUlHSFRfUFgsXG4gICAgcm93czogREVGQVVMVF9ST1dTX05VTUJFUixcbiAgICBvZmZzZXRMZWZ0OiAwLFxuICAgIG9mZnNldFRvcDogMCxcbiAgICBtb2JpbGVNb2RlOiBmYWxzZVxuICB9O1xuICBASW5wdXQoKSBicmVha3BvaW50OiBudW1iZXIgPSAwO1xuICBAT3V0cHV0KCkgcm93SGVpZ2h0ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSByb3dzID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIGN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3Q6IFdpZGdldE1hbmlmZXN0IHwgbnVsbCA9IG51bGw7XG4gIGluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3Q6IFdpZGdldE1hbmlmZXN0W10gPSBbXTtcbiAgbW92ZToge1xuICAgIGluaXRpYWxYOiBudW1iZXI7XG4gICAgaW5pdGlhbFk6IG51bWJlcjtcbiAgICBwcmV2aW91c1g6IG51bWJlcjtcbiAgICBwcmV2aW91c1k6IG51bWJlcjtcbiAgfSA9IHtcbiAgICBpbml0aWFsWDogLTEsXG4gICAgaW5pdGlhbFk6IC0xLFxuICAgIHByZXZpb3VzWDogLTEsXG4gICAgcHJldmlvdXNZOiAtMVxuICB9O1xuICBncmlkVGVtcGxhdGVSb3dzJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBncmlkVGVtcGxhdGVDb2x1bW5zJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBEYXNoYm9hcmRHcmlkTGF5b3V0ID0gRGFzaGJvYXJkR3JpZExheW91dDtcbiAgbGF5b3V0OiBzdHJpbmcgPSBEYXNoYm9hcmRHcmlkTGF5b3V0Lk1BTlVBTDtcbiAgYmFja2dyb3VuZEFyZWEkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIHByaXZhdGUgY29uZmlybVJlbW92ZVJlZj86IE92ZXJsYXlSZWY7XG4gIEFycmF5OiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8YW55PixcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWZcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmxvYWRpbmckID0gdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmxvYWRpbmcpO1xuICAgIHRoaXMuZGF0YUZldGNoaW5nJCA9IHRoaXMuc3RvcmUuc2VsZWN0KFNlYXJjaFNlbGVjdG9ycy5zZWFyY2hMb2FkaW5nKS5waXBlKGRlbGF5KDEwKSk7XG4gICAgdGhpcy5tb2RlRWRpdGlvbiQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5kYXNoYm9hcmRFZGl0aW9uTW9kZSksXG4gICAgICB0aGlzLmZvcmNlTW9kZUVkaXRpb24kXG4gICAgXSkucGlwZShtYXAoKFtzdG9yZU1vZGUsIGZvcmNlTW9kZV0pID0+IChmb3JjZU1vZGUgPT09IHVuZGVmaW5lZCA/IHN0b3JlTW9kZSA6IGZvcmNlTW9kZSkpKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5tb2RlRWRpdGlvbiQuc3Vic2NyaWJlKChtb2RlKSA9PiB7XG4gICAgICAgIHRoaXMubW9kZUVkaXRpb24gPSBtb2RlO1xuICAgICAgICBpZiAoIW1vZGUpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyQWN0aW9ucygpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy50YXJnZXRJbmRleGVzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy50YXJnZXRUZW5hbnRzSW5kZXhlcyk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5kYXNoYm9hcmRDZWxsUGFyYW1zKS5zdWJzY3JpYmUoKHBhcmFtcykgPT4gKHRoaXMuZGFzaGJvYXJkUGFyYW1zID0gcGFyYW1zKSlcbiAgICApO1xuICAgIHRoaXMud2luZG93TWFuaWZlc3QkID0gdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLndpbmRvd01hbmlmZXN0KS5waXBlKFxuICAgICAgY29tYmluZUxhdGVzdFdpdGgodGhpcy5zdGF0aWNEYXNoYm9hcmQkKSxcbiAgICAgIHN3aXRjaE1hcCgoW3dpbmRvd01hbmlmZXN0LCBzdGF0aWNEYXNoYm9hcmRdKSA9PiAoIXN0YXRpY0Rhc2hib2FyZCA/IG9mKHdpbmRvd01hbmlmZXN0KSA6IG9mKHN0YXRpY0Rhc2hib2FyZCkpKSxcbiAgICAgIG1hcCgoX3dNYW5pZmVzdCkgPT4ge1xuICAgICAgICBjb25zdCB3TWFuaWZlc3QgPSBzdHJ1Y3R1cmVkQ2xvbmUoX3dNYW5pZmVzdCk7XG4gICAgICAgIGlmICh3TWFuaWZlc3QuZ3JpZD8ubGF5b3V0ICYmIHdNYW5pZmVzdC5ncmlkLmxheW91dCAhPT0gRGFzaGJvYXJkR3JpZExheW91dC5NQU5VQUwpIHtcbiAgICAgICAgICAvLyBDb21wbGV0ZSB3aXRoIHBsYWNlaG9sZGVyc1xuICAgICAgICAgIGNvbnN0IHNpemUgPSBXaWRnZXRQbGFjZW1lbnRVdGlscy5nZXRMYXlvdXQod01hbmlmZXN0LmdyaWQubGF5b3V0KT8ucGxhY2VzLmxlbmd0aCA/PyAwO1xuICAgICAgICAgIGNvbnN0IHBsYWNlcyA9IFdpZGdldFBsYWNlbWVudFV0aWxzLnBsYWNlbWVudE9wdGlvbnMoXG4gICAgICAgICAgICB7IHR5cGU6ICdmaWxsZXInLCBsYXlvdXQ6IHsgeDogMSwgeTogMSwgd2lkdGg6IDEsIGhlaWdodDogMSB9IH0sXG4gICAgICAgICAgICB3TWFuaWZlc3QuZ3JpZC5sYXlvdXRcbiAgICAgICAgICApO1xuICAgICAgICAgIGxldCBhZGRlZCA9IHRydWU7XG4gICAgICAgICAgd2hpbGUgKHdNYW5pZmVzdC53aWRnZXRzLmxlbmd0aCA8IHNpemUgJiYgYWRkZWQpIHtcbiAgICAgICAgICAgIGFkZGVkID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsYWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBjb25zdCBwb3RlbnRpYWwgPSB7IC4uLnBsYWNlc1tpXSwgb3B0aW9uczogeyBpbmRleDogaSB9IH07XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB3TWFuaWZlc3Qud2lkZ2V0c1xuICAgICAgICAgICAgICAgICAgLm1hcCgod2lkZ2V0OiBXaWRnZXRNYW5pZmVzdCkgPT4gV2lkZ2V0UGxhY2VtZW50VXRpbHMuYXJlRGlzam9pbnQod2lkZ2V0LCBwb3RlbnRpYWwpKVxuICAgICAgICAgICAgICAgICAgLnJlZHVjZSgoYTogYm9vbGVhbiwgYjogYm9vbGVhbikgPT4gYSAmJiBiLCB0cnVlKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB3TWFuaWZlc3Qud2lkZ2V0cy5wdXNoKHBvdGVudGlhbCk7XG4gICAgICAgICAgICAgICAgYWRkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3TWFuaWZlc3Q7XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCBjKSA9PiBlcXVhbChwLCBjKSlcbiAgICApO1xuICAgIHRoaXMubm9uRmlsbGVyV2lkZ2V0cyQgPSB0aGlzLndpbmRvd01hbmlmZXN0JC5waXBlKFxuICAgICAgbWFwKCh3TWFuaWZlc3QpID0+ICh3TWFuaWZlc3Qud2lkZ2V0cyA/PyBbXSkuZmlsdGVyKCh3KSA9PiB3LnR5cGUgIT09ICdmaWxsZXInKS5sZW5ndGgpXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy53aW5kb3dNYW5pZmVzdCQsXG4gICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhdGFTb3VyY2VTZWxlY3RvcnMuZ2V0RGF0YVNvdXJjZXMpLFxuICAgICAgICB0aGlzLnN0YXRpY0Rhc2hib2FyZCRcbiAgICAgIF0pLnN1YnNjcmliZSgoW21hbmlmZXN0LCBkYXRhc2V0cywgc3RhdGljTWFuaWZlc3RdKSA9PiB7XG4gICAgICAgIGlmIChkYXRhc2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLmFzc2VydFJlc3VsdFNldHMoeyBzdGF0aWNNYW5pZmVzdCB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRmllbGRBY3Rpb25zLmxvYWQoe30pKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENsYXNzQWN0aW9ucy5sb2FkKHt9KSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDYXRlZ29yeUFjdGlvbnMubG9hZCh7fSkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ29uZmlnQWN0aW9ucy5nZXRNYXBTdHlsZXMoKSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXRhU291cmNlQWN0aW9ucy5sb2FkKHt9KSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChSZWxhdGlvblR5cGVzQWN0aW9ucy5sb2FkKHt9KSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDb25maWdBY3Rpb25zLmxvYWRDdXN0b21pemF0aW9uKHt9KSk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAgIC5waXBlKGF1ZGl0VGltZSgxMDApKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVZpZXcoKTtcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMud2luZG93TWFuaWZlc3QkLCB0aGlzLm1vZGVFZGl0aW9uJF0pXG4gICAgICAgIC5waXBlKGF1ZGl0VGltZSgxMDApKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVZpZXcoKTtcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGZyb21FdmVudCh3aW5kb3csICdrZXlkb3duJylcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKCgkZXZlbnQ6IEV2ZW50KSA9PiAkZXZlbnQgYXMgS2V5Ym9hcmRFdmVudCksXG4gICAgICAgICAgZmlsdGVyKCgkZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+ICRldmVudC5rZXkgPT09ICdMJyAmJiAkZXZlbnQuY3RybEtleSAmJiAkZXZlbnQuc2hpZnRLZXkpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMudG9nZ2xlRWRpdGlvbk1vZGUoe30pKSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGZyb21FdmVudCh3aW5kb3csICdtb3VzZXVwJykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jbGVhckFjdGlvbnMoKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChDb25maWdTZWxlY3RvcnMuYnJlYWtwb2ludCkuc3Vic2NyaWJlKChicCkgPT4ge1xuICAgICAgICB0aGlzLmJyZWFrcG9pbnQgPSBicDtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLndpbmRvd01hbmlmZXN0JC5zdWJzY3JpYmUoKG1hbmlmZXN0KSA9PiB7XG4gICAgICAgIHRoaXMubWFuaWZlc3QgPSBtYW5pZmVzdDtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuZ3JpZExheW91dCkuc3Vic2NyaWJlKChsYXlvdXQpID0+IHtcbiAgICAgICAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmdyaWRUZW1wbGF0ZVJvd3MkID0gY29tYmluZUxhdGVzdChbdGhpcy53aW5kb3dNYW5pZmVzdCQsIHRoaXMuc3RhY2tlZCRdKS5waXBlKFxuICAgICAgbWFwKChbbWFuaWZlc3QsIHN0YWNrZWRdKSA9PlxuICAgICAgICB0aGlzLmdlbmVyYXRlUm93cyhcbiAgICAgICAgICBzdGFja2VkICYmIHRoaXMubWFuaWZlc3RcbiAgICAgICAgICAgID8gdGhpcy5tYW5pZmVzdD8ud2lkZ2V0cy5tYXAoKHdtKSA9PiB3bS5sYXlvdXQuaGVpZ2h0KS5yZWR1Y2UoKHdtMSwgd20yKSA9PiB3bTEgKyB3bTIsIDApXG4gICAgICAgICAgICA6IG1hbmlmZXN0LmdyaWQ/LnJvd3MgPz8gREVGQVVMVF9ST1dTX05VTUJFUlxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuZ3JpZFRlbXBsYXRlQ29sdW1ucyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLndpbmRvd01hbmlmZXN0JCwgdGhpcy5zdGFja2VkJF0pLnBpcGUoXG4gICAgICBtYXAoKFttYW5pZmVzdCwgc3RhY2tlZF0pID0+IHRoaXMuZ2VuZXJhdGVDb2x1bW5zKHN0YWNrZWQgPyAxIDogbWFuaWZlc3QuZ3JpZD8uY29sdW1ucyB8fCBERUZBVUxUX0NPTFVNTlNfTlVNQkVSKSlcbiAgICApO1xuXG4gICAgdGhpcy5iYWNrZ3JvdW5kQXJlYSQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLndpbmRvd01hbmlmZXN0JCwgdGhpcy5zdGFja2VkJF0pLnBpcGUoXG4gICAgICBtYXAoKFttYW5pZmVzdCwgc3RhY2tlZF0pID0+XG4gICAgICAgICFzdGFja2VkXG4gICAgICAgICAgPyBgMS8xLyR7KG1hbmlmZXN0LmdyaWQ/LnJvd3MgPz8gREVGQVVMVF9ST1dTX05VTUJFUikgKyAxfS8ke1xuICAgICAgICAgICAgICAobWFuaWZlc3QuZ3JpZD8uY29sdW1ucyA/PyBERUZBVUxUX0NPTFVNTlNfTlVNQkVSKSArIDFcbiAgICAgICAgICAgIH1gXG4gICAgICAgICAgOiBgMS8xLyR7KG1hbmlmZXN0LmdyaWQ/LmNvbHVtbnMgPz8gREVGQVVMVF9DT0xVTU5TX05VTUJFUikgKyAxfS8xYFxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnNlcGFyYXRvcnMkID0gdGhpcy5zdG9yZVxuICAgICAgLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuZ3JpZExheW91dClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGxheW91dCkgPT5cbiAgICAgICAgICBsYXlvdXQgPT09IERhc2hib2FyZEdyaWRMYXlvdXQuTUFOVUFMID8gW10gOiBXaWRnZXRQbGFjZW1lbnRVdGlscy5nZXRMYXlvdXQobGF5b3V0KT8ucGxhY2VzID8/IFtdXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICB0aGlzLmRhc2hib2FyZFNpemUkID0gdGhpcy5fZGFzaGJvYXJkU2l6ZSQucGlwZShcbiAgICAgIHN0YXJ0V2l0aCh7XG4gICAgICAgIHdpZHRoOiAzMDAsXG4gICAgICAgIGhlaWdodDogMzAwXG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCBjKSA9PiBwLndpZHRoID09PSBjLndpZHRoICYmIHAuaGVpZ2h0ID09PSBjLmhlaWdodCksXG4gICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCBjKSA9PiBwLndpZHRoID09PSBjLndpZHRoICYmIHAuaGVpZ2h0ID09PSBjLmhlaWdodClcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlU2VsZlNpemUoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmRpc3BsYXlPcHRpb25zKVxuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVEaXNwbGF5T3B0aW9ucyh7IG1vZGU6IFZpZXdNb2RlLkNVU1RPTSwgY3VzdG9tRGlzcGxheTogdGhpcy5kaXNwbGF5T3B0aW9ucyB9KVxuICAgICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmNhbkNhbGN1bGF0ZVZpZXcgPSB0cnVlO1xuICB9XG5cbiAgdXBkYXRlU2VsZlNpemUoKSB7XG4gICAgY29uc3QgYm91bmRpbmdSZWN0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHRoaXMuX2Rhc2hib2FyZFNpemUkLm5leHQoeyB3aWR0aDogYm91bmRpbmdSZWN0LndpZHRoLCBoZWlnaHQ6IGJvdW5kaW5nUmVjdC5oZWlnaHQgfSk7XG4gIH1cblxuICAvKioqXG4gICAqIE1hbmFnZSBkaXNwbGF5XG4gICAqL1xuICBjYWxjdWxhdGVWaWV3KCkge1xuICAgIGlmICh0aGlzLmNhbkNhbGN1bGF0ZVZpZXcpIHtcbiAgICAgIGxldCBlbGVtZW50ID0gdGhpcy5ncmlkUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICB3aGlsZSAoZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgPT09IDAgJiYgISFlbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ3JpZFdpZHRoID0gKDxIVE1MRWxlbWVudD5lbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgIGNvbnN0IG1vYmlsZU1vZGUgPSBncmlkV2lkdGggPCB0aGlzLmJyZWFrcG9pbnQ7XG4gICAgICB0aGlzLnN0YWNrZWQkLm5leHQodGhpcy5kYXNoYm9hcmRQYXJhbXMubW9iaWxlTW9kZSAmJiAhdGhpcy5tb2RlRWRpdGlvbik7XG4gICAgICBjb25zdCByb3dzID0gIXRoaXMuZGlzcGxheUlzU3RhY2tlZFxuICAgICAgICA/ICghIXRoaXMubWFuaWZlc3QgJiYgISF0aGlzLm1hbmlmZXN0LmdyaWQgJiYgdGhpcy5tYW5pZmVzdC5ncmlkLnJvd3MpIHx8IERFRkFVTFRfUk9XU19OVU1CRVJcbiAgICAgICAgOiB0aGlzLm1hbmlmZXN0Py53aWRnZXRzLnJlZHVjZSgocDogbnVtYmVyLCBjOiBXaWRnZXRNYW5pZmVzdCkgPT4gcCArIGMubGF5b3V0LmhlaWdodCwgMCkgPz8gMTtcblxuICAgICAgdGhpcy5wYXJhbXMgPSB7XG4gICAgICAgIGdyaWRXaWR0aCxcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGhlaWdodCB0byBwYXJlbnQgdGhlIHBhcmVudCdzXG4gICAgICAgIGdyaWRIZWlnaHQ6IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0LFxuICAgICAgICBncmlkR2FwOiAxLFxuICAgICAgICBjb2x1bW5zOiAoISF0aGlzLm1hbmlmZXN0ICYmICEhdGhpcy5tYW5pZmVzdC5ncmlkICYmIHRoaXMubWFuaWZlc3QuZ3JpZC5jb2x1bW5zKSB8fCBERUZBVUxUX0NPTFVNTlNfTlVNQkVSLFxuICAgICAgICBjZWxsSGVpZ2h0OiAxLFxuICAgICAgICByb3dzLFxuICAgICAgICBjZWxsV2lkdGg6IDAsXG4gICAgICAgIG9mZnNldExlZnQ6IHRoaXMuZ3JpZFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQsXG4gICAgICAgIG9mZnNldFRvcDogdGhpcy5ncmlkUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wLFxuICAgICAgICBtb2JpbGVNb2RlXG4gICAgICB9O1xuICAgICAgdGhpcy5wYXJhbXMuZ3JpZEdhcCA9XG4gICAgICAgIHRoaXMucGFyYW1zLnJvd3MgKiB0aGlzLnBhcmFtcy5jZWxsSGVpZ2h0IDwgdGhpcy5wYXJhbXMuZ3JpZEhlaWdodFxuICAgICAgICAgID8gISF0aGlzLm1hbmlmZXN0ICYmICEhdGhpcy5tYW5pZmVzdC5ncmlkXG4gICAgICAgICAgICA/IHRoaXMubWFuaWZlc3QuZ3JpZC5nYXAgfHwgREVGQVVMVF9HQVBfUFhcbiAgICAgICAgICAgIDogREVGQVVMVF9HQVBfUFhcbiAgICAgICAgICA6IDA7XG4gICAgICB0aGlzLnBhcmFtcy5jZWxsSGVpZ2h0ID0gTWF0aC5tYXgoXG4gICAgICAgIDAsXG4gICAgICAgICh0aGlzLnBhcmFtcy5ncmlkSGVpZ2h0IC0gKHRoaXMucGFyYW1zLnJvd3MgLSAxKSAqIHRoaXMucGFyYW1zLmdyaWRHYXApIC8gdGhpcy5wYXJhbXMucm93c1xuICAgICAgKTtcbiAgICAgIHRoaXMucGFyYW1zLmNlbGxXaWR0aCA9XG4gICAgICAgICh0aGlzLnBhcmFtcy5ncmlkV2lkdGggLSAodGhpcy5wYXJhbXMuY29sdW1ucyAtIDEpICogdGhpcy5wYXJhbXMuZ3JpZEdhcCkgLyB0aGlzLnBhcmFtcy5jb2x1bW5zO1xuXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMudXBkYXRlRGFzaGJvYXJkUGFyYW1zKHsgcGFyYW1zOiB0aGlzLnBhcmFtcyB9KSk7XG5cbiAgICAgIHRoaXMucm93cy5uZXh0KHRoaXMucGFyYW1zLnJvd3MpO1xuICAgICAgdGhpcy5yb3dIZWlnaHQubmV4dCh0aGlzLnBhcmFtcy5jZWxsSGVpZ2h0KTtcbiAgICB9XG4gIH1cblxuICBnZXQgZGlzcGxheUlzU3RhY2tlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFja2VkJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgZ3JpZENvbHVtbihsYXlvdXQ6IFdpZGdldExheW91dCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZGlzcGxheUlzU3RhY2tlZCB8fCAhbGF5b3V0KSB7XG4gICAgICByZXR1cm4gJzEgLyAxJztcbiAgICB9XG4gICAgaWYgKGxheW91dC53aWR0aCA+IDEpIHtcbiAgICAgIHJldHVybiBgJHtNYXRoLm1pbihsYXlvdXQueCwgdGhpcy5wYXJhbXMuY29sdW1ucyAtIGxheW91dC53aWR0aCArIDEpfSAvICR7TWF0aC5taW4oXG4gICAgICAgIGxheW91dC54ICsgbGF5b3V0LndpZHRoLFxuICAgICAgICB0aGlzLnBhcmFtcy5jb2x1bW5zICsgMVxuICAgICAgKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7bGF5b3V0Lnh9YDtcbiAgICB9XG4gIH1cblxuICBncmlkUm93KGxheW91dDogV2lkZ2V0TGF5b3V0KTogc3RyaW5nIHtcbiAgICBpZiAoIWxheW91dCkge1xuICAgICAgcmV0dXJuICcxJztcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlzcGxheUlzU3RhY2tlZCkge1xuICAgICAgY29uc3QgcHJldmlvdXNIZWlnaHQgPSB0aGlzLm1hbmlmZXN0Py53aWRnZXRzXG4gICAgICAgIC5maWx0ZXIoKHdtOiBXaWRnZXRNYW5pZmVzdCkgPT4gKHdtLmxheW91dC55ID09PSBsYXlvdXQueSAmJiB3bS5sYXlvdXQueCA8IGxheW91dC54KSB8fCB3bS5sYXlvdXQueSA8IGxheW91dC55KVxuICAgICAgICAucmVkdWNlKChwOiBudW1iZXIsIGM6IFdpZGdldE1hbmlmZXN0KSA9PiBwICsgYy5sYXlvdXQuaGVpZ2h0LCAxKTtcbiAgICAgIHJldHVybiBgJHtwcmV2aW91c0hlaWdodCA/PyAxfSAvICR7KHByZXZpb3VzSGVpZ2h0ID8/IDEpICsgbGF5b3V0LmhlaWdodH1gO1xuICAgIH1cbiAgICBpZiAobGF5b3V0LmhlaWdodCA+IDEpIHtcbiAgICAgIHJldHVybiBgJHtNYXRoLm1heCgxLCBNYXRoLm1pbihsYXlvdXQueSwgdGhpcy5wYXJhbXMucm93cyAtIGxheW91dC5oZWlnaHQgKyAxKSl9IC8gJHtNYXRoLm1pbihcbiAgICAgICAgbGF5b3V0LnkgKyBsYXlvdXQuaGVpZ2h0LFxuICAgICAgICB0aGlzLnBhcmFtcy5yb3dzICsgMVxuICAgICAgKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7bGF5b3V0Lnl9YDtcbiAgICB9XG4gIH1cblxuICBnZW5lcmF0ZVJvd3Mocm93czogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQXJyYXkocm93cykuZmlsbCgnMWZyJykuam9pbignICcpO1xuICB9XG5cbiAgZ2VuZXJhdGVDb2x1bW5zKGNvbHVtbnM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIEFycmF5KGNvbHVtbnMpLmZpbGwoJzFmcicpLmpvaW4oJyAnKTtcbiAgfVxuXG4gIC8qKipcbiAgICogRGlyZWN0IGFjdGlvbnMgb24gd2lkZ2V0c1xuICAgKi9cblxuICByZW1vdmUoaTogbnVtYmVyKSB7XG4gICAgY29uc3QgbGlzdFdpZGdldE1hbmlmZXN0cyA9IFsuLi4odGhpcy5tYW5pZmVzdCB8fCB7IHdpZGdldHM6IFtdIH0pLndpZGdldHNdO1xuICAgIGxpc3RXaWRnZXRNYW5pZmVzdHMuc3BsaWNlKGksIDEpLmZpbHRlcigod2lkZ2V0KSA9PiB3aWRnZXQudHlwZSAhPT0gJ2ZpbGxlcicpO1xuXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgIERhc2hib2FyZEFjdGlvbnMudXBkYXRlRGFzaGJvYXJkTWFuaWZlc3Qoe1xuICAgICAgICBtYW5pZmVzdDoge1xuICAgICAgICAgIC4uLnRoaXMubWFuaWZlc3QsXG4gICAgICAgICAgd2lkZ2V0czogbGlzdFdpZGdldE1hbmlmZXN0c1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBtb3ZlSW5OZXdXaW5kb3cod2lkZ2V0SW5kZXg6IG51bWJlciwgdGFyZ2V0SW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5tb3ZlV2lkZ2V0KHsgd2lkZ2V0SW5kZXgsIHRhcmdldEluZGV4IH0pKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMudG9nZ2xlRWRpdGlvbk1vZGUoeyBmb3JjZTogZmFsc2UgfSkpO1xuICB9XG5cbiAgbWF4aW1pemUod2lkZ2V0SW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5tYXhpbWl6ZVdpZGdldCh7IHdpZGdldEluZGV4IH0pKTtcbiAgfVxuXG4gIC8qKipcbiAgICogTWFuYWdlIGRyYWcgbiBkcm9wLCBtb3ZlLCByZXNpemVcbiAgICovXG5cbiAgcHJlcGFyZU1vZGlmaWNhdGlvbigkZXZlbnQ6IE1vdXNlRXZlbnQsIGluZGV4TWFuaWZlc3Q6IG51bWJlcikge1xuICAgIHRoaXMubW92ZS5pbml0aWFsWCA9ICRldmVudC5jbGllbnRYO1xuICAgIHRoaXMubW92ZS5pbml0aWFsWSA9ICRldmVudC5jbGllbnRZO1xuICAgIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCA9IHN0cnVjdHVyZWRDbG9uZSgodGhpcy5tYW5pZmVzdCB8fCB7IHdpZGdldHM6IFtdIH0pLndpZGdldHMpO1xuICAgIHRoaXMuY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdCA9IHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdC5zcGxpY2UoaW5kZXhNYW5pZmVzdCwgMSlbMF07XG4gICAgLy8gY29uc29sZS5sb2coJ3ByZXBhcmUnLCB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QsIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCk7XG4gIH1cblxuICBzdGFydFJlc2l6ZSgkZXZlbnQ6IE1vdXNlRXZlbnQsIGluZGV4TWFuaWZlc3Q6IG51bWJlciwgZGlyZWN0aW9uOiBzdHJpbmcpIHtcbiAgICB0aGlzLmFjdGlvblR5cGUgPSBkaXJlY3Rpb247XG4gICAgdGhpcy5wcmVwYXJlTW9kaWZpY2F0aW9uKCRldmVudCwgaW5kZXhNYW5pZmVzdCk7XG4gICAgLy8gY29uc29sZS5sb2coJ3N0YXJ0IHJlc2l6ZScsIHRoaXMuY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdCwgdGhpcy5pbml0aWFsV2lkZ2V0TWFuaWZlc3RMaXN0KTtcbiAgfVxuXG4gIGRyYWdTdGFydCgkZXZlbnQ6IERyYWdFdmVudCwgaW5kZXhNYW5pZmVzdDogbnVtYmVyKSB7XG4gICAgdGhpcy5hY3Rpb25UeXBlID0gJ21vdmUnO1xuICAgIHRoaXMucHJlcGFyZU1vZGlmaWNhdGlvbigkZXZlbnQsIGluZGV4TWFuaWZlc3QpO1xuICAgIERhc2hib2FyZENvbXBvbmVudC5hZGRUcmFuc2Zlck1hbmlmZXN0TWV0YWRhdGEoJGV2ZW50LCB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QgPz8gKHt9IGFzIFdpZGdldE1hbmlmZXN0KSk7XG4gICAgLy8gY29uc29sZS5sb2coJ3N0YXJ0IG1vdmUnLCB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QsIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhZGRUcmFuc2Zlck1hbmlmZXN0TWV0YWRhdGEoJGV2ZW50OiBEcmFnRXZlbnQsIG1hbmlmZXN0OiBXaWRnZXRNYW5pZmVzdCkge1xuICAgIGlmICghISRldmVudCAmJiAhISRldmVudC5kYXRhVHJhbnNmZXIgJiYgISRldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaW5jbHVkZXMoTUlNRV9UWVBFX1dJREdFVF9NQU5JRkVTVCkpIHtcbiAgICAgICRldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YShNSU1FX1RZUEVfV0lER0VUX01BTklGRVNULCBKU09OLnN0cmluZ2lmeShtYW5pZmVzdCkpO1xuICAgICAgJGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKE1JTUVfVFlQRV9XSURHRVRfVFlQRSArIG1hbmlmZXN0LnR5cGUsICd1bnVzZWQnKTtcbiAgICAgIC8vIFBhc3Npbmcgd2lkZ2V0IHNpemUgYXMgYSBtaW1lIHR5cGUsIHNvIHRoYXQgd2UgY2FuIGJ5cGFzcyBzZWN1cml0eSBmb3IgcGxhY2Vob2xkZXIgc2l6ZSBhdCB0aGUgYXJyaXZhbCBvZiB0aGUgZHJhZ1xuICAgICAgJGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKFxuICAgICAgICBNSU1FX1RZUEVfV0lER0VUX1NJWkUgKyBgJHttYW5pZmVzdC5sYXlvdXQud2lkdGh9LSR7bWFuaWZlc3QubGF5b3V0LmhlaWdodH1gLFxuICAgICAgICAndXNlbGVzcycgLy8gZGF0YSBpcyBpbiB0aGUgbWltZSB0eXBlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGRyYWdFbnRlcigkZXZlbnQ6IERyYWdFdmVudCwgZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IHR5cGVzID0gKCRldmVudC5kYXRhVHJhbnNmZXIgfHwgeyB0eXBlczogWycnXSB9KS50eXBlcztcblxuICAgIGlmICh0eXBlcy5pbmNsdWRlcyhNSU1FX1RZUEVfV0lER0VUX01BTklGRVNUKSkge1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnRvZ2dsZUVkaXRpb25Nb2RlKHsgZm9yY2U6IHRydWUgfSkpO1xuICAgICAgdGhpcy5hY3Rpb25UeXBlID0gJ21vdmUnO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrRm9yRHJhZ0VudGVyKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICghdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0KSB7XG4gICAgICAvLyBjcmVhdGUgcGxhY2Vob2xkZXIgYXMgYSBkcmFnIGVudGVyZWQgdGhlIGNvbXBvbmVudCwgZ28gaW50byBlZGl0aW9uIG1vZGUgYW5kIG1vdmUgYWN0aW9uIGlmIGl0J3MgYSB3aWRnZXQgYmVpbmcgZHJhZ2dlZFxuICAgICAgY29uc3QgdHlwZXMgPSAoKCRldmVudCBhcyBEcmFnRXZlbnQpLmRhdGFUcmFuc2ZlciB8fCB7IHR5cGVzOiBbJyddIH0pLnR5cGVzO1xuICAgICAgaWYgKHR5cGVzLmluY2x1ZGVzKE1JTUVfVFlQRV9XSURHRVRfTUFOSUZFU1QpKSB7XG4gICAgICAgIHRoaXMuYWN0aW9uVHlwZSA9ICdtb3ZlJztcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnRvZ2dsZUVkaXRpb25Nb2RlKHsgZm9yY2U6IHRydWUgfSkpO1xuXG4gICAgICAgIC8vIE9uIGRyYWcgZW50ZXIsIHdlIG9ubHkgY2FuIHB1dCBhIHBsYWNlaG9sZGVyLCBzaW5jZSBmb3Igc2VjdXJpdHkgcmVhc29ucywgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEtdHJhbnNmZXIgaXMgbm90IGF2YWlsYWJsZVxuICAgICAgICB0aGlzLm1vdmUuaW5pdGlhbFggPSB0aGlzLmRhc2hib2FyZFBhcmFtcy5vZmZzZXRMZWZ0O1xuICAgICAgICB0aGlzLm1vdmUuaW5pdGlhbFkgPSB0aGlzLmRhc2hib2FyZFBhcmFtcy5vZmZzZXRUb3A7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZ2V0VGFyZ2V0KCRldmVudCwgZmFsc2UpO1xuICAgICAgICB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QgPSB7XG4gICAgICAgICAgdHlwZTogJ3BsYWNlaG9sZGVyJyxcbiAgICAgICAgICBsYXlvdXQ6IHsgeDogdGFyZ2V0Py54ID8/IDAsIHk6IHRhcmdldD8ueSA/PyAwLCB3aWR0aDogMSwgaGVpZ2h0OiAxIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5pbml0aWFsV2lkZ2V0TWFuaWZlc3RMaXN0ID0gc3RydWN0dXJlZENsb25lKCh0aGlzLm1hbmlmZXN0IHx8IHsgd2lkZ2V0czogW10gfSkud2lkZ2V0cyk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjcmVhdGUgcGxhY2Vob2xkZXInLCB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QsIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCk7XG5cbiAgICAgICAgLy8gV2UgcGFzc2VkIHdpZGdldCBzaXplIGFzIGEgbWltZXR5cGUgc28gdGhhdCB3ZSBjYW4gc3RpbGwgcmVhZCBpdCB3aXRob3V0IHNlY3VyaXR5IGlzc3Vlc1xuICAgICAgICBjb25zdCB3aWRnZXRTaXplTWltZVR5cGUgPSB0eXBlcy5maW5kKCh0eXBlKSA9PiB0eXBlLmluY2x1ZGVzKE1JTUVfVFlQRV9XSURHRVRfU0laRSkpO1xuICAgICAgICBpZiAoISF3aWRnZXRTaXplTWltZVR5cGUpIHtcbiAgICAgICAgICBjb25zdCBbXywgXzIsIHcsIGhdID0gd2lkZ2V0U2l6ZU1pbWVUeXBlLnNwbGl0KCctJyk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LmxheW91dC53aWR0aCA9IHBhcnNlSW50KHcsIDEwKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QubGF5b3V0LmhlaWdodCA9IHBhcnNlSW50KGgsIDEwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBVc2UgZ3JpZCBzaXplXG4gICAgICAgICAgY29uc3QgbGF5b3V0ID0gKFdpZGdldFBsYWNlbWVudFV0aWxzLmdldExheW91dCh0aGlzLmxheW91dCk/LnBsYWNlcyA/PyBbXSlbXG4gICAgICAgICAgICB0aGlzLmluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3QubGVuZ3RoXG4gICAgICAgICAgXSA/PyB7XG4gICAgICAgICAgICB3aWR0aDogMSxcbiAgICAgICAgICAgIGhlaWdodDogMVxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LmxheW91dC53aWR0aCA9IGxheW91dC53aWR0aDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QubGF5b3V0LmhlaWdodCA9IGxheW91dC5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBwYXNzZWQgdGhlIHR5cGUgYXMgYSBoZWFkZXIgbmFtZSBzbyB0aGF0IHdlIGNhbiBzdGlsbCBhY2Nlc3MgaXQgd2l0aG91dCBzZWN1cml0eSBpc3N1ZXNcbiAgICAgICAgY29uc3Qgd2lkZ2V0VHlwZSA9IHR5cGVzLmZpbmQoKHR5cGUpID0+IHR5cGUuaW5jbHVkZXMoTUlNRV9UWVBFX1dJREdFVF9UWVBFKSk7XG4gICAgICAgIGlmICghIXdpZGdldFR5cGUpIHtcbiAgICAgICAgICBjb25zdCBbXywgXzIsIHR5cGVdID0gd2lkZ2V0VHlwZS5zcGxpdCgnLScpO1xuICAgICAgICAgIHRoaXMuY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdC50eXBlID0gdHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlc2V0IGluaXRpYWwgcG9zaXRpb24gZm9yIHRoZSBvbmUgd2UganVzdCBjYWxjdWxhdGVkLCBzbyB3ZSBjYW4gY29udGludWUgcHJvcGVybHkgbW92ZSB0aGUgd2lkZ2V0XG4gICAgICAgIHRoaXMubW92ZS5pbml0aWFsWCA9ICRldmVudC5wYWdlWDtcbiAgICAgICAgdGhpcy5tb3ZlLmluaXRpYWxZID0gJGV2ZW50LnBhZ2VZO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFRhcmdldCgkZXZlbnQ6IE1vdXNlRXZlbnQsIG9wdGltaXplID0gdHJ1ZSkge1xuICAgIGNvbnN0IGRYID0gJGV2ZW50LnBhZ2VYIC0gdGhpcy5tb3ZlLmluaXRpYWxYO1xuICAgIGNvbnN0IGRZID0gJGV2ZW50LnBhZ2VZIC0gdGhpcy5tb3ZlLmluaXRpYWxZO1xuXG4gICAgY29uc3QgdGFyZ2V0ID0ge1xuICAgICAgeDpcbiAgICAgICAgZFggPT09IDBcbiAgICAgICAgICA/IDBcbiAgICAgICAgICA6IE1hdGgucm91bmQoXG4gICAgICAgICAgICAgICgoZFggLyBNYXRoLmFicyhkWCkpICogKE1hdGguYWJzKGRYKSAtIDAuNSAqIHRoaXMuZGFzaGJvYXJkUGFyYW1zLmNlbGxXaWR0aCkpIC9cbiAgICAgICAgICAgICAgICAodGhpcy5kYXNoYm9hcmRQYXJhbXMuY2VsbFdpZHRoICsgdGhpcy5kYXNoYm9hcmRQYXJhbXMuZ3JpZEdhcClcbiAgICAgICAgICAgICksXG4gICAgICB5OlxuICAgICAgICBkWSA9PT0gMFxuICAgICAgICAgID8gMFxuICAgICAgICAgIDogTWF0aC5yb3VuZChcbiAgICAgICAgICAgICAgKChkWSAvIE1hdGguYWJzKGRZKSkgKiAoTWF0aC5hYnMoZFkpIC0gMC41ICogdGhpcy5kYXNoYm9hcmRQYXJhbXMuY2VsbEhlaWdodCkpIC9cbiAgICAgICAgICAgICAgICAodGhpcy5kYXNoYm9hcmRQYXJhbXMuY2VsbEhlaWdodCArIHRoaXMuZGFzaGJvYXJkUGFyYW1zLmdyaWRHYXApXG4gICAgICAgICAgICApXG4gICAgfTtcblxuICAgIGlmICghb3B0aW1pemUgfHwgdGFyZ2V0LnggIT09IHRoaXMubW92ZS5wcmV2aW91c1ggfHwgdGFyZ2V0LnkgIT09IHRoaXMubW92ZS5wcmV2aW91c1kpIHtcbiAgICAgIHRoaXMubW92ZS5wcmV2aW91c1ggPSB0YXJnZXQueDtcbiAgICAgIHRoaXMubW92ZS5wcmV2aW91c1kgPSB0YXJnZXQueTtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBtb3ZpbmdNb3VzZSgkZXZlbnQ6IE1vdXNlRXZlbnQsIG9wdGltaXplID0gdHJ1ZSkge1xuICAgIGlmICh0aGlzLm1vZGVFZGl0aW9uICYmICEhdGhpcy5hY3Rpb25UeXBlKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmdldFRhcmdldCgkZXZlbnQsIG9wdGltaXplKTtcbiAgICAgIGlmICh0YXJnZXQgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jaGVja0ZvckRyYWdFbnRlcigkZXZlbnQpO1xuICAgICAgICBjb25zdCBjYW5kaWRhdGVXaWRnZXQgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0KSE7XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLmFjdGlvblR5cGUpIHtcbiAgICAgICAgICBjYXNlICdyZXNpemUtbncnOlxuICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQueCArIHRhcmdldC54ID4gMCAmJiBjYW5kaWRhdGVXaWRnZXQubGF5b3V0LmhlaWdodCAtIHRhcmdldC55ID4gMCkge1xuICAgICAgICAgICAgICBjYW5kaWRhdGVXaWRnZXQubGF5b3V0LnggKz0gdGFyZ2V0Lng7XG4gICAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQueSArPSB0YXJnZXQueTtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC53aWR0aCAtPSB0YXJnZXQueDtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC5oZWlnaHQgLT0gdGFyZ2V0Lnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdyZXNpemUtc3cnOlxuICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQud2lkdGggLSB0YXJnZXQueCA+IDApIHtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC54ICs9IHRhcmdldC54O1xuICAgICAgICAgICAgICBjYW5kaWRhdGVXaWRnZXQubGF5b3V0LndpZHRoIC09IHRhcmdldC54O1xuICAgICAgICAgICAgICBjYW5kaWRhdGVXaWRnZXQubGF5b3V0LmhlaWdodCArPSB0YXJnZXQueTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3Jlc2l6ZS1uZSc6XG4gICAgICAgICAgICBpZiAoY2FuZGlkYXRlV2lkZ2V0LmxheW91dC5oZWlnaHQgLSB0YXJnZXQueSA+IDApIHtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC55ICs9IHRhcmdldC55O1xuICAgICAgICAgICAgICBjYW5kaWRhdGVXaWRnZXQubGF5b3V0LndpZHRoICs9IHRhcmdldC54O1xuICAgICAgICAgICAgICBjYW5kaWRhdGVXaWRnZXQubGF5b3V0LmhlaWdodCAtPSB0YXJnZXQueTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3Jlc2l6ZS1zZSc6XG4gICAgICAgICAgICBjYW5kaWRhdGVXaWRnZXQubGF5b3V0LndpZHRoICs9IHRhcmdldC54O1xuICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC5oZWlnaHQgKz0gdGFyZ2V0Lnk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdtb3ZlJzpcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRNYXhYID1cbiAgICAgICAgICAgICAgTWF0aC5tYXgoXG4gICAgICAgICAgICAgICAgdGhpcy5tYW5pZmVzdD8uZ3JpZD8uY29sdW1ucyA/PyBERUZBVUxUX0NPTFVNTlNfTlVNQkVSLFxuICAgICAgICAgICAgICAgIC4uLih0aGlzLm1hbmlmZXN0Py53aWRnZXRzID8/IFtdKS5tYXAoKHcpID0+IHcubGF5b3V0LndpZHRoICsgdy5sYXlvdXQueClcbiAgICAgICAgICAgICAgKSAtXG4gICAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQud2lkdGggK1xuICAgICAgICAgICAgICAxO1xuICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC54ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY2FuZGlkYXRlV2lkZ2V0LmxheW91dC54ICsgdGFyZ2V0LngsIGN1cnJlbnRNYXhYKSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRNYXhZID1cbiAgICAgICAgICAgICAgTWF0aC5tYXgoXG4gICAgICAgICAgICAgICAgdGhpcy5tYW5pZmVzdD8uZ3JpZD8ucm93cyA/PyBERUZBVUxUX1JPV1NfTlVNQkVSLFxuICAgICAgICAgICAgICAgIC4uLih0aGlzLm1hbmlmZXN0Py53aWRnZXRzID8/IFtdKS5tYXAoKHcpID0+IHcubGF5b3V0LmhlaWdodCArIHcubGF5b3V0LnkpXG4gICAgICAgICAgICAgICkgLVxuICAgICAgICAgICAgICBjYW5kaWRhdGVXaWRnZXQubGF5b3V0LmhlaWdodCArXG4gICAgICAgICAgICAgIDE7XG4gICAgICAgICAgICBjYW5kaWRhdGVXaWRnZXQubGF5b3V0LnkgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjYW5kaWRhdGVXaWRnZXQubGF5b3V0LnkgKyB0YXJnZXQueSwgY3VycmVudE1heFkpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZURhc2hib2FyZE1hbmlmZXN0KHtcbiAgICAgICAgICAgIG1hbmlmZXN0OiBzb2x2ZUNvbGxpc2lvbnMoXG4gICAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldCxcbiAgICAgICAgICAgICAgdGhpcy5pbml0aWFsV2lkZ2V0TWFuaWZlc3RMaXN0LFxuICAgICAgICAgICAgICB0aGlzLm1hbmlmZXN0ID8/ICh7fSBhcyBEYXNoYm9hcmRNYW5pZmVzdClcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRyYWdNb3ZlKCRldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgdGhpcy5tb3ZpbmdNb3VzZSgkZXZlbnQpO1xuICB9XG5cbiAgZHJhZ0xlYXZlKCRldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmICgkZXZlbnQuY3VycmVudFRhcmdldC5jb250YWlucygkZXZlbnQucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlcyA9ICgkZXZlbnQuZGF0YVRyYW5zZmVyIHx8IHsgdHlwZXM6IFsnJ10gfSkudHlwZXM7XG4gICAgaWYgKHR5cGVzLmluY2x1ZGVzKE1JTUVfVFlQRV9XSURHRVRfTUFOSUZFU1QpKSB7XG4gICAgICAvLyBBcyB0aGUgZHJhZyBpcyBsZWF2aW5nIHRoZSB3aW5kb3csIGRlbGV0ZSB0aGUgd2lkZ2V0IGZyb20gaXQsIGFuZCBzdG9wIGVkaXRpb24gbW9kZVxuICAgICAgaWYgKCEhJGV2ZW50ICYmICEhJGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIERhc2hib2FyZEFjdGlvbnMudXBkYXRlRGFzaGJvYXJkTWFuaWZlc3Qoe1xuICAgICAgICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgICAgICAgLi4udGhpcy5tYW5pZmVzdCxcbiAgICAgICAgICAgICAgd2lkZ2V0czogdGhpcy5pbml0aWFsV2lkZ2V0TWFuaWZlc3RMaXN0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jbGVhckFjdGlvbnMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkcm9wcGluZygkZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAoISEkZXZlbnQgJiYgISEkZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICBpZiAoJGV2ZW50LmRhdGFUcmFuc2Zlci50eXBlcy5pbmNsdWRlcyhNSU1FX1RZUEVfV0lER0VUX01BTklGRVNUKSkge1xuICAgICAgICAvLyBSZWFycmFuZ2UgZHJvcCB0byBjb3JyZWN0IHNpemUsIHR5cGUsIC4uLiwgYXMgYSBwbGFjZWhvbGRlciBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gbWFuaWZlc3QgYnkgZHJhZ2VudGVyIGV2ZW50XG4gICAgICAgIGNvbnN0IGRhdGFUcmFuc2Zlck1hbmlmZXN0ID0gSlNPTi5wYXJzZShcbiAgICAgICAgICAkZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoTUlNRV9UWVBFX1dJREdFVF9NQU5JRkVTVClcbiAgICAgICAgKSBhcyBXaWRnZXRNYW5pZmVzdDtcblxuICAgICAgICB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QgPSB7XG4gICAgICAgICAgLi4uZGF0YVRyYW5zZmVyTWFuaWZlc3QsXG4gICAgICAgICAgbGF5b3V0OiB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3Q/LmxheW91dCA/PyAoe30gYXMgV2lkZ2V0TGF5b3V0KVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMubW92aW5nTW91c2UoJGV2ZW50LCBmYWxzZSk7XG5cbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLmFzc2VydFJlc3VsdFNldHMoe30pKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jbGVhckFjdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckFjdGlvbnMoKSB7XG4gICAgdGhpcy5hY3Rpb25UeXBlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubW92ZS5pbml0aWFsWCA9IDA7XG4gICAgdGhpcy5tb3ZlLmluaXRpYWxZID0gMDtcbiAgICB0aGlzLm1vdmUucHJldmlvdXNYID0gLTE7XG4gICAgdGhpcy5tb3ZlLnByZXZpb3VzWSA9IC0xO1xuICAgIHRoaXMuY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdCA9IG51bGw7XG4gICAgdGhpcy5pbml0aWFsV2lkZ2V0TWFuaWZlc3RMaXN0ID0gW107XG4gIH1cblxuICAvKioqXG4gICAqIE1hbmFnZSBvdGhlciBraW5kcyBvZiBkcm9wcyAoaW5zaWRlIHdpZGdldHMpXG4gICAqL1xuICBkcm9wcGluZ0luV2lkZ2V0KCRldmVudDogRHJhZ0V2ZW50LCBpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKCEhJGV2ZW50ICYmICEhJGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgaWYgKCRldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaW5jbHVkZXMoTUlNRV9UWVBFX1JFU1VMVFNFVCkpIHtcbiAgICAgICAgY29uc3QgbGlzdFdpZGdldE1hbmlmZXN0cyA9IFsuLi4odGhpcy5tYW5pZmVzdCB8fCB7IHdpZGdldHM6IFtdIH0pLndpZGdldHNdO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdFNldE5hbWUgPSAkZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoTUlNRV9UWVBFX1JFU1VMVFNFVCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSZXN1bHRTZXQgPSAoXG4gICAgICAgICAgQXJyYXkuaXNBcnJheShsaXN0V2lkZ2V0TWFuaWZlc3RzW2luZGV4XS5kYXRhc291cmNlKVxuICAgICAgICAgICAgPyBsaXN0V2lkZ2V0TWFuaWZlc3RzW2luZGV4XS5kYXRhc291cmNlXG4gICAgICAgICAgICA6IFtsaXN0V2lkZ2V0TWFuaWZlc3RzW2luZGV4XS5kYXRhc291cmNlXVxuICAgICAgICApIGFzIHN0cmluZ1tdO1xuICAgICAgICBjb25zdCBjdW11bGF0aXZlID0gJGV2ZW50LnNoaWZ0S2V5O1xuICAgICAgICBjb25zdCBuZXdSZXN1bHRTZXQgPSBjdW11bGF0aXZlID8gWy4uLmN1cnJlbnRSZXN1bHRTZXQsIHJlc3VsdFNldE5hbWVdIDogcmVzdWx0U2V0TmFtZTtcblxuICAgICAgICBsaXN0V2lkZ2V0TWFuaWZlc3RzW2luZGV4XSA9IHtcbiAgICAgICAgICAuLi5saXN0V2lkZ2V0TWFuaWZlc3RzW2luZGV4XSxcbiAgICAgICAgICBkYXRhc291cmNlOiBuZXdSZXN1bHRTZXRcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIERhc2hib2FyZEFjdGlvbnMudXBkYXRlRGFzaGJvYXJkTWFuaWZlc3Qoe1xuICAgICAgICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgICAgICAgLi4udGhpcy5tYW5pZmVzdCxcbiAgICAgICAgICAgICAgd2lkZ2V0czogbGlzdFdpZGdldE1hbmlmZXN0c1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5hc3NlcnRSZXN1bHRTZXRzKHt9KSk7XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlUmVtb3ZlQ29uZmlybSgkZXZlbnQ/OiBNb3VzZUV2ZW50LCBpbmRleD86IG51bWJlcikge1xuICAgIGlmICghdGhpcy5jb25maXJtUmVtb3ZlUmVmKSB7XG4gICAgICB0aGlzLmluZGV4Rm9yUmVtb3ZhbCA9IGluZGV4ID8/IC0xO1xuICAgICAgdGhpcy5jb25maXJtUmVtb3ZlUmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZShcbiAgICAgICAgbmV3IE92ZXJsYXlDb25maWcoe1xuICAgICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnby1tb2RhbC13cmFwcGVyJ10sXG4gICAgICAgICAgYmFja2Ryb3BDbGFzczogJ2JhY2tkcm9wJ1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ29uZmlnQWN0aW9ucy5hZGRpbmdPdmVybGF5KHsgaWQ6IHRoaXMuY29uc3RydWN0b3IubmFtZSArICctbW9kYWwnIH0pKTtcbiAgICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKChfKSA9PiB0aGlzLnRvZ2dsZVJlbW92ZUNvbmZpcm0oKSk7XG4gICAgICB0aGlzLmNvbmZpcm1SZW1vdmVSZWYuYXR0YWNoKG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLnRlbXBsYXRlTW9kYWwsIHRoaXMudmlld0NvbnRhaW5lclJlZikpO1xuICAgICAgaWYgKCRldmVudCkge1xuICAgICAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Rpdi5vLW1vZGFsLXdyYXBwZXInKSBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICAgICAgaWYgKCEhcGFuZWwpIHtcbiAgICAgICAgICBwYW5lbC5zdHlsZS5sZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4od2luZG93LmlubmVyV2lkdGggLSBwYW5lbC5jbGllbnRXaWR0aCwgJGV2ZW50LmNsaWVudFggLSAzMCkpICsgJ3B4JztcbiAgICAgICAgICBwYW5lbC5zdHlsZS50b3AgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih3aW5kb3cuaW5uZXJIZWlnaHQgLSBwYW5lbC5jbGllbnRIZWlnaHQsICRldmVudC5jbGllbnRZIC0gMTApKSArICdweCc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25maXJtUmVtb3ZlUmVmLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZiA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ29uZmlnQWN0aW9ucy5jbG9zZU92ZXJsYXkoeyBpZDogdGhpcy5jb25zdHJ1Y3Rvci5uYW1lICsgJy1tb2RhbCcgfSkpO1xuICAgIH1cbiAgfVxuXG4gIGNvbmZpcm1SZW1vdmUoKSB7XG4gICAgdGhpcy5yZW1vdmUodGhpcy5pbmRleEZvclJlbW92YWwpO1xuICAgIHRoaXMuY2FuY2VsUmVtb3ZlQ29uZmlybSgpO1xuICB9XG5cbiAgY2FuY2VsUmVtb3ZlQ29uZmlybSgpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuY2xvc2VPdmVybGF5KHsgaWQ6IHRoaXMuY29uc3RydWN0b3IubmFtZSArICctbW9kYWwnIH0pKTtcbiAgICB0aGlzLmNvbmZpcm1SZW1vdmVSZWY/LmRpc3Bvc2UoKTtcbiAgICB0aGlzLmNvbmZpcm1SZW1vdmVSZWYgPSB1bmRlZmluZWQ7XG4gIH1cblxuICB0cmFja1dpZGdldHMoaW5kZXg6IG51bWJlciwgd2lkZ2V0TWFuaWZlc3Q6IFdpZGdldE1hbmlmZXN0KSB7XG4gICAgcmV0dXJuIGluZGV4ICsgJy0nICsgd2lkZ2V0TWFuaWZlc3QudHlwZSArICctJyArIEpTT04uc3RyaW5naWZ5KHdpZGdldE1hbmlmZXN0LmxheW91dCk7XG4gIH1cblxuICBjaGFuZ2VTaXplKGRpcmVjdGlvbjogc3RyaW5nLCBvZmZzZXQ6IG51bWJlcikge1xuICAgIGNvbnN0IG1pblJvd3MgPVxuICAgICAgKHRoaXMubWFuaWZlc3Q/LndpZGdldHMubWFwKCh3KSA9PiB3LmxheW91dC5oZWlnaHQgKyB3LmxheW91dC55KS5yZWR1Y2UoKGEsIGIpID0+IChhID4gYiA/IGEgOiBiKSwgMikgPz8gMikgLSAxO1xuICAgIGNvbnN0IG1pbkNvbHVtbnMgPVxuICAgICAgKHRoaXMubWFuaWZlc3Q/LndpZGdldHMubWFwKCh3KSA9PiB3LmxheW91dC53aWR0aCArIHcubGF5b3V0LngpLnJlZHVjZSgoYSwgYikgPT4gKGEgPiBiID8gYSA6IGIpLCAyKSA/PyAyKSAtIDE7XG5cbiAgICBjb25zdCBmdXR1cmVTaXplID0ge1xuICAgICAgcm93czogTWF0aC5tYXgobWluUm93cywgKHRoaXMubWFuaWZlc3QhLmdyaWQ/LnJvd3MgPz8gREVGQVVMVF9ST1dTX05VTUJFUikgKyAoZGlyZWN0aW9uID09PSAncm93cycgPyBvZmZzZXQgOiAwKSksXG4gICAgICBjb2x1bW5zOiBNYXRoLm1heChcbiAgICAgICAgbWluQ29sdW1ucyxcbiAgICAgICAgKHRoaXMubWFuaWZlc3QhLmdyaWQ/LmNvbHVtbnMgPz8gREVGQVVMVF9DT0xVTU5TX05VTUJFUikgKyAoZGlyZWN0aW9uID09PSAnY29sdW1ucycgPyBvZmZzZXQgOiAwKVxuICAgICAgKVxuICAgIH07XG5cbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVEYXNoYm9hcmRNYW5pZmVzdCh7XG4gICAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgICAgLi4udGhpcy5tYW5pZmVzdCEsXG4gICAgICAgICAgZ3JpZDoge1xuICAgICAgICAgICAgLi4uKHRoaXMubWFuaWZlc3Q/LmdyaWQgPz8ge30pLFxuICAgICAgICAgICAgLi4uZnV0dXJlU2l6ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiby1kYXNoYm9hcmQtZWRpdFwiIFtjbGFzcy4tZWRpdF09XCJtb2RlRWRpdGlvbiQgfCBhc3luY1wiPlxuICA8ZGl2IGNsYXNzPVwiby1kYXNoYm9hcmQtYWRkIC1yb3dzXCI+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwiY2hhbmdlU2l6ZSgncm93cycsIC0xKVwiPlxuICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJyZW1vdmVcIiBbd2lkdGhdPVwiMTJcIiBbaGVpZ2h0XT1cIjEyXCI+PC9wcnktaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIChjbGljayk9XCJjaGFuZ2VTaXplKCdyb3dzJywgKzEpXCI+XG4gICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImFkZFwiIFt3aWR0aF09XCIxMlwiIFtoZWlnaHRdPVwiMTJcIj48L3ByeS1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAgIDxwPnt7ICdAcHJ5LmdyaWQucm93cycgfCBpMThuIH19PC9wPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm8tZGFzaGJvYXJkLWFkZCAtY29sc1wiPlxuICAgIDxwPnt7ICdAcHJ5LmdyaWQuY29sdW1ucycgfCBpMThuIH19PC9wPlxuICAgIDxidXR0b24gKGNsaWNrKT1cImNoYW5nZVNpemUoJ2NvbHVtbnMnLCAtMSlcIj5cbiAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwicmVtb3ZlXCIgW3dpZHRoXT1cIjEyXCIgW2hlaWdodF09XCIxMlwiPjwvcHJ5LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwiY2hhbmdlU2l6ZSgnY29sdW1ucycsICsxKVwiPlxuICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJhZGRcIiBbd2lkdGhdPVwiMTJcIiBbaGVpZ2h0XT1cIjEyXCI+PC9wcnktaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBjbGFzcz1cIm8tZGFzaGJvYXJkLWdyaWRcIlxuICAgIFtzdHlsZS5ncmlkVGVtcGxhdGVDb2x1bW5zXT1cImdyaWRUZW1wbGF0ZUNvbHVtbnMkIHwgYXN5bmNcIlxuICAgIFtzdHlsZS5ncmlkVGVtcGxhdGVSb3dzXT1cImdyaWRUZW1wbGF0ZVJvd3MkIHwgYXN5bmNcIlxuICAgIFtzdHlsZS5ncmlkR2FwXT1cImRhc2hib2FyZFBhcmFtcy5ncmlkR2FwICsgJ3B4J1wiXG4gICAgI2dyaWRcbiAgICAobW91c2Vtb3ZlKT1cIm1vdmluZ01vdXNlKCRldmVudClcIlxuICAgIChkcm9wKT1cImRyb3BwaW5nKCRldmVudClcIlxuICAgIChkcmFnb3Zlcik9XCJkcmFnTW92ZSgkZXZlbnQpXCJcbiAgICAoZHJhZ2xlYXZlKT1cImRyYWdMZWF2ZSgkZXZlbnQpXCJcbiAgICAoZHJhZ2VudGVyKT1cImRyYWdFbnRlcigkZXZlbnQpXCJcbiAgPlxuICAgIEBmb3IgKFxuICAgICAgd2lkZ2V0TWFuaWZlc3Qgb2YgKHdpbmRvd01hbmlmZXN0JCB8IGFzeW5jKT8ud2lkZ2V0cyB8fCBbXTtcbiAgICAgIHRyYWNrIHRyYWNrV2lkZ2V0cyh3aWRnZXRJbmRleCwgd2lkZ2V0TWFuaWZlc3QpO1xuICAgICAgbGV0IHdpZGdldEluZGV4ID0gJGluZGV4XG4gICAgKSB7XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiby1kYXNoYm9hcmQtd2lkZ2V0XCJcbiAgICAgICAgW2NsYXNzLi1lZGl0ZWRdPVwibW9kZUVkaXRpb25cIlxuICAgICAgICBbc3R5bGUuZ3JpZENvbHVtbl09XCJncmlkQ29sdW1uKHdpZGdldE1hbmlmZXN0LmxheW91dClcIlxuICAgICAgICBbc3R5bGUuZ3JpZFJvd109XCJncmlkUm93KHdpZGdldE1hbmlmZXN0LmxheW91dClcIlxuICAgICAgICAoZHJvcCk9XCJkcm9wcGluZ0luV2lkZ2V0KCRldmVudCwgd2lkZ2V0SW5kZXgpXCJcbiAgICAgID5cbiAgICAgICAgQGlmIChtb2RlRWRpdGlvbikge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXNpemUgbnctcmVzaXplXCIgKG1vdXNlZG93bik9XCJzdGFydFJlc2l6ZSgkZXZlbnQsIHdpZGdldEluZGV4LCAncmVzaXplLW53JylcIj5cbiAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwibm9ydGhfd2VzdFwiIFthbmltYXRpb25dPVwiZmFsc2VcIj48L3ByeS1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXNpemUgc3ctcmVzaXplXCIgKG1vdXNlZG93bik9XCJzdGFydFJlc2l6ZSgkZXZlbnQsIHdpZGdldEluZGV4LCAncmVzaXplLXN3JylcIj5cbiAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwic291dGhfd2VzdFwiIFthbmltYXRpb25dPVwiZmFsc2VcIj48L3ByeS1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXNpemUgbmUtcmVzaXplXCIgKG1vdXNlZG93bik9XCJzdGFydFJlc2l6ZSgkZXZlbnQsIHdpZGdldEluZGV4LCAncmVzaXplLW5lJylcIj5cbiAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwibm9ydGhfZWFzdFwiIFthbmltYXRpb25dPVwiZmFsc2VcIj48L3ByeS1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXNpemUgc2UtcmVzaXplXCIgKG1vdXNlZG93bik9XCJzdGFydFJlc2l6ZSgkZXZlbnQsIHdpZGdldEluZGV4LCAncmVzaXplLXNlJylcIj5cbiAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwic291dGhfZWFzdFwiIFthbmltYXRpb25dPVwiZmFsc2VcIj48L3ByeS1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXNpemUgZGVsZXRlXCIgKG1vdXNlZG93bik9XCJ0b2dnbGVSZW1vdmVDb25maXJtKCRldmVudCwgd2lkZ2V0SW5kZXgpXCI+XG4gICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImNsb3NlXCIgW2FuaW1hdGlvbl09XCJmYWxzZVwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vdmVcIiBkcmFnZ2FibGU9XCJ0cnVlXCIgKGRyYWdzdGFydCk9XCJkcmFnU3RhcnQoJGV2ZW50LCB3aWRnZXRJbmRleClcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb3ZlLWluc2lkZSBtb3ZlLXt7IHdpZGdldE1hbmlmZXN0LnR5cGUgfX1cIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgd2lkZ2V0TWFuaWZlc3QudGl0bGUgPz8gKCdAcHJ5LnRvb2xib3guJyArIHdpZGdldE1hbmlmZXN0LnR5cGUgfCBpMThuKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoIW1vZGVFZGl0aW9uKSB7XG4gICAgICAgICAgPHByeS13aWRnZXQtaW5zdGFuY2lhdG9yXG4gICAgICAgICAgICBbc3RhdGljTWFuaWZlc3RdPVwid2lkZ2V0TWFuaWZlc3RcIlxuICAgICAgICAgICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICAgICAgICA+PC9wcnktd2lkZ2V0LWluc3RhbmNpYXRvcj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmICghbm9CYWNrZ3JvdW5kKSB7XG4gICAgICBAaWYgKFxuICAgICAgICB7XG4gICAgICAgICAgbm9XaWRnZXRzOiAobm9uRmlsbGVyV2lkZ2V0cyQgfCBhc3luYykgPT09IDAsXG4gICAgICAgICAgZ2xvYmFsTG9hZGluZzogbG9hZGluZyQgfCBhc3luYyxcbiAgICAgICAgICBmZXRjaExvYWRpbmc6IChkYXRhRmV0Y2hpbmckIHwgYXN5bmMpPy5sZW5ndGggPz8gMSA+IDBcbiAgICAgICAgfTtcbiAgICAgICAgYXMgZGF0YVxuICAgICAgKSB7XG4gICAgICAgIEBpZiAoZGF0YS5ub1dpZGdldHMpIHtcbiAgICAgICAgICBAaWYgKGRhdGEuZ2xvYmFsTG9hZGluZykge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLXdpZGdldFwiIFtzdHlsZS5ncmlkLWFyZWFdPVwiYmFja2dyb3VuZEFyZWEkIHwgYXN5bmNcIj5cbiAgICAgICAgICAgICAgPHByeS1wYWdlLWxvYWRlcj48L3ByeS1wYWdlLWxvYWRlcj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuby13aWRnZXRfX3RleHRcIj57eyAnQHByeS53aWRnZXQudGFyZ2V0LmxvYWRpbmcnIHwgaTE4biB9fS4uLjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLXdpZGdldFwiIFtzdHlsZS5ncmlkLWFyZWFdPVwiYmFja2dyb3VuZEFyZWEkIHwgYXN5bmNcIj5cbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIGNsYXNzPVwibm8td2lkZ2V0X19zZWFyY2hcIlxuICAgICAgICAgICAgICAgIHNyYz1cIi4uLy4uLy4uL2Fzc2V0cy9zdmdzL3ByeV9yZWNoZXJjaGUuc3ZnXCJcbiAgICAgICAgICAgICAgICBhbHQ9XCJ7e1xuICAgICAgICAgICAgICAgICAgKGxheW91dCA9PT0gRGFzaGJvYXJkR3JpZExheW91dC5NQU5VQUxcbiAgICAgICAgICAgICAgICAgICAgPyAnQHByeS53aWRnZXQudGFyZ2V0Lm5vbmVfbWFudWFsJ1xuICAgICAgICAgICAgICAgICAgICA6ICdAcHJ5LndpZGdldC50YXJnZXQubm9uZV9hdXRvJ1xuICAgICAgICAgICAgICAgICAgKSB8IGkxOG5cbiAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibm8td2lkZ2V0X190ZXh0XCI+e3tcbiAgICAgICAgICAgICAgICAobGF5b3V0ID09PSBEYXNoYm9hcmRHcmlkTGF5b3V0Lk1BTlVBTFxuICAgICAgICAgICAgICAgICAgPyAnQHByeS53aWRnZXQudGFyZ2V0Lm5vbmVfbWFudWFsJ1xuICAgICAgICAgICAgICAgICAgOiAnQHByeS53aWRnZXQudGFyZ2V0Lm5vbmVfYXV0bydcbiAgICAgICAgICAgICAgICApIHwgaTE4blxuICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJhLXBhZ2UtbG9hZGVyIGJhY2tkcm9wXCJcbiAgICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJkYXRhLmZldGNoTG9hZGluZyAmJiAhZGF0YS5nbG9iYWxMb2FkaW5nID8gJ2ZsZXgnIDogJ25vbmUnXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiKGRhc2hib2FyZFNpemUkIHwgYXN5bmMpPy53aWR0aFwiXG4gICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCIoZGFzaGJvYXJkU2l6ZSQgfCBhc3luYyk/LmhlaWdodFwiXG4gICAgICAgID5cbiAgICAgICAgICA8cHJ5LXBhZ2UtbG9hZGVyPjwvcHJ5LXBhZ2UtbG9hZGVyPlxuICAgICAgICAgIDxwPnt7ICdAcHJ5LndpZGdldC50YXJnZXQubG9hZGluZycgfCBpMThuIH19Li4uPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG48cHJ5LWNvbnRleHQtbWVudT48L3ByeS1jb250ZXh0LW1lbnU+XG5cbjxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVNb2RhbD5cbiAgPGRpdiBjbGFzcz1cIm8tbW9kYWxcIj5cbiAgICA8ZGl2IGNsYXNzPVwiby1tb2RhbF9fdG9wXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1tb2RhbF9fdG9wX190aXRsZVwiPlxuICAgICAgICA8aDIgY2xhc3M9XCJhLWgyXCIgaWQ9XCJkaWFsb2dfdGl0bGVcIj5cbiAgICAgICAgICB7eyAnQHByeS53aWRnZXQubW9kYWxUaXRsZScgfCBpMThuIH19XG4gICAgICAgIDwvaDI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLW1vZGFsX190b3BfX2Nsb3NlXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5XCIgKGNsaWNrKT1cImNhbmNlbFJlbW92ZUNvbmZpcm0oKVwiPlxuICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiY2xvc2VcIiBbaGVpZ2h0XT1cIjM1XCIgW3dpZHRoXT1cIjM1XCI+PC9wcnktaWNvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0BwcnkudG9vbGJveC5jbG9zZScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtLWJ0bi1ncm91cFwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbmNlbFJlbW92ZUNvbmZpcm0oKVwiIGNsYXNzPVwiYS1idG4gYS1idG4tLXNlY29uZGFyeVwiPlxuICAgICAgICB7eyAnQHByeS50b29sYm94Lm1hbmlmZXN0LmNsb3NlJyB8IGkxOG4gfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgKGNsaWNrKT1cImNvbmZpcm1SZW1vdmUoKVwiIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIj5cbiAgICAgICAge3sgJ0BwcnkudG9vbGJveC5tYW5pZmVzdC52YWxpZGF0ZScgfCBpMThuIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19