@provoly/dashboard 1.4.19 → 1.4.20

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.
@@ -1,6 +1,6 @@
1
1
  import { OverlayConfig } from '@angular/cdk/overlay';
2
2
  import { TemplatePortal } from '@angular/cdk/portal';
3
- import { Component, EventEmitter, Input, Output, TemplateRef, ViewChild, ViewChildren } from '@angular/core';
3
+ import { Component, EventEmitter, Input, Output, signal, TemplateRef, ViewChild, ViewChildren } from '@angular/core';
4
4
  import equal from 'fast-deep-equal/es6';
5
5
  import { auditTime, BehaviorSubject, combineLatest, combineLatestWith, delay, distinctUntilChanged, filter, fromEvent, map, of, switchMap } from 'rxjs';
6
6
  import { DashboardGridLayout } from '../../core/model/manifest.interface';
@@ -24,13 +24,12 @@ import { DataSourceSelectors } from '../../core/store/data-source/data-source.se
24
24
  import * as i0 from "@angular/core";
25
25
  import * as i1 from "@ngrx/store";
26
26
  import * as i2 from "@angular/cdk/overlay";
27
- import * as i3 from "./widgets/widget-instanciator/widget-factory.service";
28
- import * as i4 from "../../core/components/icon/icon.component";
29
- import * as i5 from "@provoly/dashboard/components/page-loader";
30
- import * as i6 from "./widgets/widget-instanciator/widget-instanciator.component";
31
- import * as i7 from "./context-menu/context-menu.component";
32
- import * as i8 from "@angular/common";
33
- import * as i9 from "../../core/i18n/i18n.pipe";
27
+ import * as i3 from "../../core/components/icon/icon.component";
28
+ import * as i4 from "@provoly/dashboard/components/page-loader";
29
+ import * as i5 from "./widgets/widget-instanciator/widget-instanciator.component";
30
+ import * as i6 from "./context-menu/context-menu.component";
31
+ import * as i7 from "@angular/common";
32
+ import * as i8 from "../../core/i18n/i18n.pipe";
34
33
  export const MIME_TYPE_WIDGET_MANIFEST = 'application/widget-manifest';
35
34
  export const MIME_TYPE_WIDGET_TYPE = 'application/widget-type-';
36
35
  export const MIME_TYPE_WIDGET_SIZE = 'application/widget-size-';
@@ -44,12 +43,12 @@ export class DashboardComponent extends SubscriptionnerDirective {
44
43
  set forceModeEdition(mode) {
45
44
  this.forceModeEdition$.next(mode);
46
45
  }
47
- constructor(store, overlay, viewContainerRef, widgetFactoryService) {
46
+ constructor(store, overlay, viewContainerRef, el) {
48
47
  super();
49
48
  this.store = store;
50
49
  this.overlay = overlay;
51
50
  this.viewContainerRef = viewContainerRef;
52
- this.widgetFactoryService = widgetFactoryService;
51
+ this.el = el;
53
52
  this.manifest = null;
54
53
  this.modeEdition = false;
55
54
  this.staticDashboard$ = new BehaviorSubject(null);
@@ -57,6 +56,8 @@ export class DashboardComponent extends SubscriptionnerDirective {
57
56
  this.indexForRemoval = -1;
58
57
  this.params = {};
59
58
  this.forceModeEdition$ = new BehaviorSubject(undefined);
59
+ this.width = signal(10);
60
+ this.height = signal(10);
60
61
  this.CloseOnDragOut = true;
61
62
  this.noBackground = false;
62
63
  this.canCalculateView = false;
@@ -181,9 +182,15 @@ export class DashboardComponent extends SubscriptionnerDirective {
181
182
  ngOnInit() {
182
183
  if (this.displayOptions)
183
184
  this.store.dispatch(DashboardActions.updateDisplayOptions({ mode: ViewMode.CUSTOM, customDisplay: this.displayOptions }));
185
+ this.updateSelfSize();
184
186
  }
185
187
  ngAfterViewInit() {
186
188
  this.canCalculateView = true;
189
+ this.updateSelfSize();
190
+ }
191
+ updateSelfSize() {
192
+ this.width.set(this.el.nativeElement.clientWidth);
193
+ this.height.set(this.el.nativeElement.clientHeight);
187
194
  }
188
195
  /***
189
196
  * Manage display
@@ -574,13 +581,13 @@ export class DashboardComponent extends SubscriptionnerDirective {
574
581
  }
575
582
  }));
576
583
  }
577
- 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: i3.WidgetFactoryService }], target: i0.ɵɵFactoryTarget.Component }); }
578
- 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 || []; track trackWidgets(widgetIndex,\n widgetManifest); let widgetIndex = $index) {\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 noWidgets: (nonFillerWidgets$ | async) === 0,\n globalLoading: loading$ | async,\n fetchLoading: (dataFetching$ | async)?.length ?? 1 > 0\n }; as data) {\n @if (data.noWidgets) {\n @if (data.globalLoading) {\n <div\n class=\"no-widget\"\n [style.grid-area]=\"backgroundArea$ | async\"\n >\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]=\"params.gridWidth\"\n [style.height.px]=\"params.gridHeight\"\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: i4.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i5.PryPageLoaderComponent, selector: "pry-page-loader", inputs: ["image", "imageAltText"] }, { kind: "component", type: i6.WidgetInstanciatorComponent, selector: "pry-widget-instanciator", inputs: ["widgetIndex", "staticManifest", "standalone", "open$"], outputs: ["manifestModified"] }, { kind: "component", type: i7.ContextMenuComponent, selector: "pry-context-menu" }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.I18nPipe, name: "i18n" }] }); }
584
+ 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 }); }
585
+ 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]=\"width()\"\n [style.height.px]=\"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" }] }); }
579
586
  }
580
587
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DashboardComponent, decorators: [{
581
588
  type: Component,
582
- args: [{ selector: 'pry-dashboard', 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 || []; track trackWidgets(widgetIndex,\n widgetManifest); let widgetIndex = $index) {\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 noWidgets: (nonFillerWidgets$ | async) === 0,\n globalLoading: loading$ | async,\n fetchLoading: (dataFetching$ | async)?.length ?? 1 > 0\n }; as data) {\n @if (data.noWidgets) {\n @if (data.globalLoading) {\n <div\n class=\"no-widget\"\n [style.grid-area]=\"backgroundArea$ | async\"\n >\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]=\"params.gridWidth\"\n [style.height.px]=\"params.gridHeight\"\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" }]
583
- }], ctorParameters: () => [{ type: i1.Store }, { type: i2.Overlay }, { type: i0.ViewContainerRef }, { type: i3.WidgetFactoryService }], propDecorators: { templateModal: [{
589
+ args: [{ selector: 'pry-dashboard', 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]=\"width()\"\n [style.height.px]=\"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" }]
590
+ }], ctorParameters: () => [{ type: i1.Store }, { type: i2.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }], propDecorators: { templateModal: [{
584
591
  type: ViewChild,
585
592
  args: ['templateModal', { read: TemplateRef }]
586
593
  }], instanciators: [{
@@ -606,4 +613,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
606
613
  }], rows: [{
607
614
  type: Output
608
615
  }] } });
609
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9kYXNoYm9hcmQvY29tcG9uZW50cy9kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvbGliL2Rhc2hib2FyZC9jb21wb25lbnRzL2Rhc2hib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVcsYUFBYSxFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBRU4sV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBRWIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUNMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixLQUFLLEVBQ0wsb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixTQUFTLEVBQ1QsR0FBRyxFQUVILEVBQUUsRUFDRixTQUFTLEVBQ1YsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQ0wsbUJBQW1CLEVBSXBCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUs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QkFJTixhQUFhO3NCQUF2RCxZQUFZO3VCQUFDLDJCQUEyQjtnQkFTNUIsZUFBZTtzQkFBM0IsS0FBSztnQkFJTyxnQkFBZ0I7c0JBQTVCLEtBQUs7Z0JBSUcsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRWEsT0FBTztzQkFBekIsU0FBUzt1QkFBQyxNQUFNO2dCQWVSLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPdmVybGF5LCBPdmVybGF5Q29uZmlnLCBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsL2VzNic7XG5pbXBvcnQge1xuICBhdWRpdFRpbWUsXG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgY29tYmluZUxhdGVzdFdpdGgsXG4gIGRlbGF5LFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlsdGVyLFxuICBmcm9tRXZlbnQsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHN3aXRjaE1hcFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERpc3BsYXlPcHRpb25zIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbC9kaXNwbGF5LW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIERhc2hib2FyZEdyaWRMYXlvdXQsXG4gIERhc2hib2FyZE1hbmlmZXN0LFxuICBXaWRnZXRMYXlvdXQsXG4gIFdpZGdldE1hbmlmZXN0XG59IGZyb20gJy4uLy4uL2NvcmUvbW9kZWwvbWFuaWZlc3QuaW50ZXJmYWNlJztcbmltcG9ydCB7IE1JTUVfVFlQRV9SRVNVTFRTRVQgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVsL21pbWV0eXBlLXJlc3VsdHNldC5jb25zdGFudCc7XG5pbXBvcnQgeyBDYXRlZ29yeUFjdGlvbnMgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL2NhdGVnb3J5L2NhdGVnb3J5LmFjdGlvbnMnO1xuaW1wb3J0IHsgQ2xhc3NBY3Rpb25zIH0gZnJvbSAnLi4vLi4vY29yZS9zdG9yZS9jbGFzcy9jbGFzcy5hY3Rpb25zJztcbmltcG9ydCB7IENvbmZpZ0FjdGlvbnMgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL2NvbmZpZy9jb25maWcuYWN0aW9ucyc7XG5pbXBvcnQgeyBDb25maWdTZWxlY3RvcnMgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL2NvbmZpZy9jb25maWcuc2VsZWN0b3JzJztcbmltcG9ydCB7IERhdGFTb3VyY2VBY3Rpb25zIH0gZnJvbSAnLi4vLi4vY29yZS9zdG9yZS9kYXRhLXNvdXJjZS9kYXRhLXNvdXJjZS5hY3Rpb25zJztcbmltcG9ydCB7IEZpZWxkQWN0aW9ucyB9IGZyb20gJy4uLy4uL2NvcmUvc3RvcmUvZmllbGQvZmllbGQuYWN0aW9ucyc7XG5pbXBvcnQgeyBSZWxhdGlvblR5cGVzQWN0aW9ucyB9IGZyb20gJy4uLy4uL2NvcmUvc3RvcmUvcmVsYXRpb24tdHlwZXMvcmVsYXRpb24tdHlwZXMuYWN0aW9ucyc7XG5pbXBvcnQgeyBXaWRnZXRQbGFjZW1lbnRVdGlscyB9IGZyb20gJy4uL2NvbXBvbmVudHMvd2lkZ2V0cy93aWRnZXQtcGxhY2VtZW50L3dpZGdldC1wbGFjZW1lbnQudXRpbHMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQWN0aW9ucywgRGFzaGJvYXJkQ2VsbFBhcmFtcywgVmlld01vZGUgfSBmcm9tICcuLi9zdG9yZS9kYXNoYm9hcmQuYWN0aW9ucyc7XG5pbXBvcnQge1xuICBERUZBVUxUX0NPTFVNTlNfTlVNQkVSLFxuICBERUZBVUxUX0dBUF9QWCxcbiAgREVGQVVMVF9ST1dfSEVJR0hUX1BYLFxuICBERUZBVUxUX1JPV1NfTlVNQkVSXG59IGZyb20gJy4uL3N0b3JlL2Rhc2hib2FyZC5jb250YW50cyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRTZWxlY3RvcnMgfSBmcm9tICcuLi9zdG9yZS9kYXNoYm9hcmQuc2VsZWN0b3JzJztcbmltcG9ydCB7IHNvbHZlQ29sbGlzaW9ucyB9IGZyb20gJy4vc29sdmUtY29sbGlzaW9ucy5mdW5jdGlvbic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUgfSBmcm9tICcuL3N1YnNjcmlwdGlvbm5lci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgV2lkZ2V0SW5zdGFuY2lhdG9yQ29tcG9uZW50IH0gZnJvbSAnLi93aWRnZXRzL3dpZGdldC1pbnN0YW5jaWF0b3Ivd2lkZ2V0LWluc3RhbmNpYXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VhcmNoU2VsZWN0b3JzIH0gZnJvbSAnLi4vLi4vY29yZS9zdG9yZS9zZWFyY2gvc2VhcmNoLnNlbGVjdG9ycyc7XG5pbXBvcnQgeyBEYXRhU291cmNlU2VsZWN0b3JzIH0gZnJvbSAnLi4vLi4vY29yZS9zdG9yZS9kYXRhLXNvdXJjZS9kYXRhLXNvdXJjZS5zZWxlY3RvcnMnO1xuaW1wb3J0IHsgV2lkZ2V0RmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuL3dpZGdldHMvd2lkZ2V0LWluc3RhbmNpYXRvci93aWRnZXQtZmFjdG9yeS5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IE1JTUVfVFlQRV9XSURHRVRfTUFOSUZFU1QgPSAnYXBwbGljYXRpb24vd2lkZ2V0LW1hbmlmZXN0JztcbmV4cG9ydCBjb25zdCBNSU1FX1RZUEVfV0lER0VUX1RZUEUgPSAnYXBwbGljYXRpb24vd2lkZ2V0LXR5cGUtJztcbmV4cG9ydCBjb25zdCBNSU1FX1RZUEVfV0lER0VUX1NJWkUgPSAnYXBwbGljYXRpb24vd2lkZ2V0LXNpemUtJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LWRhc2hib2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERhc2hib2FyZENvbXBvbmVudCBleHRlbmRzIFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIG1hbmlmZXN0OiBEYXNoYm9hcmRNYW5pZmVzdCB8IG51bGwgPSBudWxsO1xuICB3aW5kb3dNYW5pZmVzdCQ6IE9ic2VydmFibGU8RGFzaGJvYXJkTWFuaWZlc3Q+O1xuICBtb2RlRWRpdGlvbiA9IGZhbHNlO1xuICBtb2RlRWRpdGlvbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGFjdGlvblR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgc3RhdGljRGFzaGJvYXJkJDogQmVoYXZpb3JTdWJqZWN0PERhc2hib2FyZE1hbmlmZXN0IHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhc2hib2FyZE1hbmlmZXN0IHwgbnVsbD4obnVsbCk7XG4gIHN0YWNrZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGluZGV4Rm9yUmVtb3ZhbDogbnVtYmVyID0gLTE7XG4gIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlTW9kYWwnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIHRlbXBsYXRlTW9kYWwhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBzZXBhcmF0b3JzJDogT2JzZXJ2YWJsZTxXaWRnZXRMYXlvdXRbXT47XG4gIG5vbkZpbGxlcldpZGdldHMkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIGxvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBAVmlld0NoaWxkcmVuKFdpZGdldEluc3RhbmNpYXRvckNvbXBvbmVudCkgaW5zdGFuY2lhdG9ycz86IFF1ZXJ5TGlzdDxXaWRnZXRJbnN0YW5jaWF0b3JDb21wb25lbnQ+O1xuICBkYXRhRmV0Y2hpbmckOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcbiAgcGFyYW1zOiBEYXNoYm9hcmRDZWxsUGFyYW1zID0ge30gYXMgRGFzaGJvYXJkQ2VsbFBhcmFtcztcbiAgZm9yY2VNb2RlRWRpdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgZ2V0IHdpZGdldHNJbnN0YW5jZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFuY2lhdG9ycz8ubWFwKChpbnN0YW5jaWF0b3IpID0+IGluc3RhbmNpYXRvci5pbnN0YW5jaWF0ZWRDb21wb25lbnQuaW5zdGFuY2UpID8/IFtdO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHN0YXRpY0Rhc2hib2FyZCh3aW5kb3c6IERhc2hib2FyZE1hbmlmZXN0KSB7XG4gICAgdGhpcy5zdGF0aWNEYXNoYm9hcmQkLm5leHQod2luZG93KTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBmb3JjZU1vZGVFZGl0aW9uKG1vZGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmZvcmNlTW9kZUVkaXRpb24kLm5leHQobW9kZSk7XG4gIH1cblxuICBASW5wdXQoKSBDbG9zZU9uRHJhZ091dCA9IHRydWU7XG4gIEBJbnB1dCgpIGRpc3BsYXlPcHRpb25zPzogRGlzcGxheU9wdGlvbnM7XG4gIEBJbnB1dCgpIG5vQmFja2dyb3VuZCA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ2dyaWQnKSBncmlkUmVmITogRWxlbWVudFJlZjtcbiAgcHJpdmF0ZSBjYW5DYWxjdWxhdGVWaWV3ID0gZmFsc2U7XG4gIHRhcmdldEluZGV4ZXMkOiBPYnNlcnZhYmxlPG51bWJlcltdPjtcbiAgZGFzaGJvYXJkUGFyYW1zOiBEYXNoYm9hcmRDZWxsUGFyYW1zID0ge1xuICAgIGdyaWRXaWR0aDogMSxcbiAgICBncmlkSGVpZ2h0OiAxLFxuICAgIGdyaWRHYXA6IERFRkFVTFRfR0FQX1BYLFxuICAgIGNvbHVtbnM6IERFRkFVTFRfQ09MVU1OU19OVU1CRVIsXG4gICAgY2VsbFdpZHRoOiAxLFxuICAgIGNlbGxIZWlnaHQ6IERFRkFVTFRfUk9XX0hFSUdIVF9QWCxcbiAgICByb3dzOiBERUZBVUxUX1JPV1NfTlVNQkVSLFxuICAgIG9mZnNldExlZnQ6IDAsXG4gICAgb2Zmc2V0VG9wOiAwLFxuICAgIG1vYmlsZU1vZGU6IGZhbHNlXG4gIH07XG4gIEBJbnB1dCgpIGJyZWFrcG9pbnQ6IG51bWJlciA9IDA7XG4gIEBPdXRwdXQoKSByb3dIZWlnaHQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHJvd3MgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdDogV2lkZ2V0TWFuaWZlc3QgfCBudWxsID0gbnVsbDtcbiAgaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdDogV2lkZ2V0TWFuaWZlc3RbXSA9IFtdO1xuICBtb3ZlOiB7XG4gICAgaW5pdGlhbFg6IG51bWJlcjtcbiAgICBpbml0aWFsWTogbnVtYmVyO1xuICAgIHByZXZpb3VzWDogbnVtYmVyO1xuICAgIHByZXZpb3VzWTogbnVtYmVyO1xuICB9ID0ge1xuICAgIGluaXRpYWxYOiAtMSxcbiAgICBpbml0aWFsWTogLTEsXG4gICAgcHJldmlvdXNYOiAtMSxcbiAgICBwcmV2aW91c1k6IC0xXG4gIH07XG4gIGdyaWRUZW1wbGF0ZVJvd3MkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGdyaWRUZW1wbGF0ZUNvbHVtbnMkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIERhc2hib2FyZEdyaWRMYXlvdXQgPSBEYXNoYm9hcmRHcmlkTGF5b3V0O1xuICBsYXlvdXQ6IHN0cmluZyA9IERhc2hib2FyZEdyaWRMYXlvdXQuTUFOVUFMO1xuICBiYWNrZ3JvdW5kQXJlYSQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgcHJpdmF0ZSBjb25maXJtUmVtb3ZlUmVmPzogT3ZlcmxheVJlZjtcbiAgQXJyYXk6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZTxhbnk+LFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSB3aWRnZXRGYWN0b3J5U2VydmljZTogV2lkZ2V0RmFjdG9yeVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmxvYWRpbmckID0gdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmxvYWRpbmcpO1xuICAgIHRoaXMuZGF0YUZldGNoaW5nJCA9IHRoaXMuc3RvcmUuc2VsZWN0KFNlYXJjaFNlbGVjdG9ycy5zZWFyY2hMb2FkaW5nKS5waXBlKGRlbGF5KDEwKSk7XG4gICAgdGhpcy5tb2RlRWRpdGlvbiQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5kYXNoYm9hcmRFZGl0aW9uTW9kZSksXG4gICAgICB0aGlzLmZvcmNlTW9kZUVkaXRpb24kXG4gICAgXSkucGlwZShtYXAoKFtzdG9yZU1vZGUsIGZvcmNlTW9kZV0pID0+IChmb3JjZU1vZGUgPT09IHVuZGVmaW5lZCA/IHN0b3JlTW9kZSA6IGZvcmNlTW9kZSkpKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5tb2RlRWRpdGlvbiQuc3Vic2NyaWJlKChtb2RlKSA9PiB7XG4gICAgICAgIHRoaXMubW9kZUVkaXRpb24gPSBtb2RlO1xuICAgICAgICBpZiAoIW1vZGUpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyQWN0aW9ucygpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy50YXJnZXRJbmRleGVzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy50YXJnZXRUZW5hbnRzSW5kZXhlcyk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5kYXNoYm9hcmRDZWxsUGFyYW1zKS5zdWJzY3JpYmUoKHBhcmFtcykgPT4gKHRoaXMuZGFzaGJvYXJkUGFyYW1zID0gcGFyYW1zKSlcbiAgICApO1xuICAgIHRoaXMud2luZG93TWFuaWZlc3QkID0gdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLndpbmRvd01hbmlmZXN0KS5waXBlKFxuICAgICAgY29tYmluZUxhdGVzdFdpdGgodGhpcy5zdGF0aWNEYXNoYm9hcmQkKSxcbiAgICAgIHN3aXRjaE1hcCgoW3dpbmRvd01hbmlmZXN0LCBzdGF0aWNEYXNoYm9hcmRdKSA9PiAoIXN0YXRpY0Rhc2hib2FyZCA/IG9mKHdpbmRvd01hbmlmZXN0KSA6IG9mKHN0YXRpY0Rhc2hib2FyZCkpKSxcbiAgICAgIG1hcCgoX3dNYW5pZmVzdCkgPT4ge1xuICAgICAgICBjb25zdCB3TWFuaWZlc3QgPSBzdHJ1Y3R1cmVkQ2xvbmUoX3dNYW5pZmVzdCk7XG4gICAgICAgIGlmICh3TWFuaWZlc3QuZ3JpZD8ubGF5b3V0ICYmIHdNYW5pZmVzdC5ncmlkLmxheW91dCAhPT0gRGFzaGJvYXJkR3JpZExheW91dC5NQU5VQUwpIHtcbiAgICAgICAgICAvLyBDb21wbGV0ZSB3aXRoIHBsYWNlaG9sZGVyc1xuICAgICAgICAgIGNvbnN0IHNpemUgPSBXaWRnZXRQbGFjZW1lbnRVdGlscy5nZXRMYXlvdXQod01hbmlmZXN0LmdyaWQubGF5b3V0KT8ucGxhY2VzLmxlbmd0aCA/PyAwO1xuICAgICAgICAgIGNvbnN0IHBsYWNlcyA9IFdpZGdldFBsYWNlbWVudFV0aWxzLnBsYWNlbWVudE9wdGlvbnMoXG4gICAgICAgICAgICB7IHR5cGU6ICdmaWxsZXInLCBsYXlvdXQ6IHsgeDogMSwgeTogMSwgd2lkdGg6IDEsIGhlaWdodDogMSB9IH0sXG4gICAgICAgICAgICB3TWFuaWZlc3QuZ3JpZC5sYXlvdXRcbiAgICAgICAgICApO1xuICAgICAgICAgIGxldCBhZGRlZCA9IHRydWU7XG4gICAgICAgICAgd2hpbGUgKHdNYW5pZmVzdC53aWRnZXRzLmxlbmd0aCA8IHNpemUgJiYgYWRkZWQpIHtcbiAgICAgICAgICAgIGFkZGVkID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsYWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBjb25zdCBwb3RlbnRpYWwgPSB7IC4uLnBsYWNlc1tpXSwgb3B0aW9uczogeyBpbmRleDogaSB9IH07XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB3TWFuaWZlc3Qud2lkZ2V0c1xuICAgICAgICAgICAgICAgICAgLm1hcCgod2lkZ2V0OiBXaWRnZXRNYW5pZmVzdCkgPT4gV2lkZ2V0UGxhY2VtZW50VXRpbHMuYXJlRGlzam9pbnQod2lkZ2V0LCBwb3RlbnRpYWwpKVxuICAgICAgICAgICAgICAgICAgLnJlZHVjZSgoYTogYm9vbGVhbiwgYjogYm9vbGVhbikgPT4gYSAmJiBiLCB0cnVlKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB3TWFuaWZlc3Qud2lkZ2V0cy5wdXNoKHBvdGVudGlhbCk7XG4gICAgICAgICAgICAgICAgYWRkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3TWFuaWZlc3Q7XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCBjKSA9PiBlcXVhbChwLCBjKSlcbiAgICApO1xuICAgIHRoaXMubm9uRmlsbGVyV2lkZ2V0cyQgPSB0aGlzLndpbmRvd01hbmlmZXN0JC5waXBlKFxuICAgICAgbWFwKCh3TWFuaWZlc3QpID0+ICh3TWFuaWZlc3Qud2lkZ2V0cyA/PyBbXSkuZmlsdGVyKCh3KSA9PiB3LnR5cGUgIT09ICdmaWxsZXInKS5sZW5ndGgpXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnN0YXRpY0Rhc2hib2FyZCQuc3Vic2NyaWJlKChtYW5pZmVzdCkgPT4ge1xuICAgICAgICBpZiAoISFtYW5pZmVzdCkge1xuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLmFzc2VydFJlc3VsdFNldHMoe1xuICAgICAgICAgICAgICBzdGF0aWNNYW5pZmVzdDogbWFuaWZlc3RcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMud2luZG93TWFuaWZlc3QkLCB0aGlzLnN0b3JlLnNlbGVjdChEYXRhU291cmNlU2VsZWN0b3JzLmdldERhdGFTb3VyY2VzKV0pLnN1YnNjcmliZShcbiAgICAgICAgKFttYW5pZmVzdCwgZGF0YXNldHNdKSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGFzZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5hc3NlcnRSZXN1bHRTZXRzKHt9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRmllbGRBY3Rpb25zLmxvYWQoe30pKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENsYXNzQWN0aW9ucy5sb2FkKHt9KSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDYXRlZ29yeUFjdGlvbnMubG9hZCh7fSkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ29uZmlnQWN0aW9ucy5nZXRNYXBTdHlsZXMoKSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXRhU291cmNlQWN0aW9ucy5sb2FkKHt9KSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChSZWxhdGlvblR5cGVzQWN0aW9ucy5sb2FkKHt9KSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDb25maWdBY3Rpb25zLmxvYWRDdXN0b21pemF0aW9uKHt9KSk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAgIC5waXBlKGF1ZGl0VGltZSgxMDApKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVZpZXcoKTtcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMud2luZG93TWFuaWZlc3QkLCB0aGlzLm1vZGVFZGl0aW9uJF0pXG4gICAgICAgIC5waXBlKGF1ZGl0VGltZSgxMDApKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVZpZXcoKTtcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGZyb21FdmVudCh3aW5kb3csICdrZXlkb3duJylcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKCgkZXZlbnQ6IEV2ZW50KSA9PiAkZXZlbnQgYXMgS2V5Ym9hcmRFdmVudCksXG4gICAgICAgICAgZmlsdGVyKCgkZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+ICRldmVudC5rZXkgPT09ICdMJyAmJiAkZXZlbnQuY3RybEtleSAmJiAkZXZlbnQuc2hpZnRLZXkpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMudG9nZ2xlRWRpdGlvbk1vZGUoe30pKSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGZyb21FdmVudCh3aW5kb3csICdtb3VzZXVwJykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jbGVhckFjdGlvbnMoKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChDb25maWdTZWxlY3RvcnMuYnJlYWtwb2ludCkuc3Vic2NyaWJlKChicCkgPT4ge1xuICAgICAgICB0aGlzLmJyZWFrcG9pbnQgPSBicDtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLndpbmRvd01hbmlmZXN0JC5zdWJzY3JpYmUoKG1hbmlmZXN0KSA9PiB7XG4gICAgICAgIHRoaXMubWFuaWZlc3QgPSBtYW5pZmVzdDtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuZ3JpZExheW91dCkuc3Vic2NyaWJlKChsYXlvdXQpID0+IHtcbiAgICAgICAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmdyaWRUZW1wbGF0ZVJvd3MkID0gY29tYmluZUxhdGVzdChbdGhpcy53aW5kb3dNYW5pZmVzdCQsIHRoaXMuc3RhY2tlZCRdKS5waXBlKFxuICAgICAgbWFwKChbbWFuaWZlc3QsIHN0YWNrZWRdKSA9PlxuICAgICAgICB0aGlzLmdlbmVyYXRlUm93cyhcbiAgICAgICAgICBzdGFja2VkICYmIHRoaXMubWFuaWZlc3RcbiAgICAgICAgICAgID8gdGhpcy5tYW5pZmVzdD8ud2lkZ2V0cy5tYXAoKHdtKSA9PiB3bS5sYXlvdXQuaGVpZ2h0KS5yZWR1Y2UoKHdtMSwgd20yKSA9PiB3bTEgKyB3bTIsIDApXG4gICAgICAgICAgICA6IG1hbmlmZXN0LmdyaWQ/LnJvd3MgPz8gREVGQVVMVF9ST1dTX05VTUJFUlxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuZ3JpZFRlbXBsYXRlQ29sdW1ucyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLndpbmRvd01hbmlmZXN0JCwgdGhpcy5zdGFja2VkJF0pLnBpcGUoXG4gICAgICBtYXAoKFttYW5pZmVzdCwgc3RhY2tlZF0pID0+IHRoaXMuZ2VuZXJhdGVDb2x1bW5zKHN0YWNrZWQgPyAxIDogbWFuaWZlc3QuZ3JpZD8uY29sdW1ucyB8fCBERUZBVUxUX0NPTFVNTlNfTlVNQkVSKSlcbiAgICApO1xuXG4gICAgdGhpcy5iYWNrZ3JvdW5kQXJlYSQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLndpbmRvd01hbmlmZXN0JCwgdGhpcy5zdGFja2VkJF0pLnBpcGUoXG4gICAgICBtYXAoKFttYW5pZmVzdCwgc3RhY2tlZF0pID0+XG4gICAgICAgICFzdGFja2VkXG4gICAgICAgICAgPyBgMS8xLyR7KG1hbmlmZXN0LmdyaWQ/LnJvd3MgPz8gREVGQVVMVF9ST1dTX05VTUJFUikgKyAxfS8ke1xuICAgICAgICAgICAgICAobWFuaWZlc3QuZ3JpZD8uY29sdW1ucyA/PyBERUZBVUxUX0NPTFVNTlNfTlVNQkVSKSArIDFcbiAgICAgICAgICAgIH1gXG4gICAgICAgICAgOiBgMS8xLyR7KG1hbmlmZXN0LmdyaWQ/LmNvbHVtbnMgPz8gREVGQVVMVF9DT0xVTU5TX05VTUJFUikgKyAxfS8xYFxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnNlcGFyYXRvcnMkID0gdGhpcy5zdG9yZVxuICAgICAgLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuZ3JpZExheW91dClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGxheW91dCkgPT5cbiAgICAgICAgICBsYXlvdXQgPT09IERhc2hib2FyZEdyaWRMYXlvdXQuTUFOVUFMID8gW10gOiBXaWRnZXRQbGFjZW1lbnRVdGlscy5nZXRMYXlvdXQobGF5b3V0KT8ucGxhY2VzID8/IFtdXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5kaXNwbGF5T3B0aW9ucylcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgIERhc2hib2FyZEFjdGlvbnMudXBkYXRlRGlzcGxheU9wdGlvbnMoeyBtb2RlOiBWaWV3TW9kZS5DVVNUT00sIGN1c3RvbURpc3BsYXk6IHRoaXMuZGlzcGxheU9wdGlvbnMgfSlcbiAgICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5jYW5DYWxjdWxhdGVWaWV3ID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKipcbiAgICogTWFuYWdlIGRpc3BsYXlcbiAgICovXG5cbiAgY2FsY3VsYXRlVmlldygpIHtcbiAgICBpZiAodGhpcy5jYW5DYWxjdWxhdGVWaWV3KSB7XG4gICAgICBsZXQgZWxlbWVudCA9IHRoaXMuZ3JpZFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgd2hpbGUgKGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0ID09PSAwICYmICEhZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdyaWRXaWR0aCA9ICg8SFRNTEVsZW1lbnQ+ZWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICBjb25zdCBtb2JpbGVNb2RlID0gZ3JpZFdpZHRoIDwgdGhpcy5icmVha3BvaW50O1xuICAgICAgdGhpcy5zdGFja2VkJC5uZXh0KHRoaXMuZGFzaGJvYXJkUGFyYW1zLm1vYmlsZU1vZGUgJiYgIXRoaXMubW9kZUVkaXRpb24pO1xuICAgICAgY29uc3Qgcm93cyA9ICF0aGlzLmRpc3BsYXlJc1N0YWNrZWRcbiAgICAgICAgPyAoISF0aGlzLm1hbmlmZXN0ICYmICEhdGhpcy5tYW5pZmVzdC5ncmlkICYmIHRoaXMubWFuaWZlc3QuZ3JpZC5yb3dzKSB8fCBERUZBVUxUX1JPV1NfTlVNQkVSXG4gICAgICAgIDogdGhpcy5tYW5pZmVzdD8ud2lkZ2V0cy5yZWR1Y2UoKHA6IG51bWJlciwgYzogV2lkZ2V0TWFuaWZlc3QpID0+IHAgKyBjLmxheW91dC5oZWlnaHQsIDApID8/IDE7XG5cbiAgICAgIHRoaXMucGFyYW1zID0ge1xuICAgICAgICBncmlkV2lkdGgsXG4gICAgICAgIC8vIENhbGN1bGF0ZSBoZWlnaHQgdG8gcGFyZW50IHRoZSBwYXJlbnQnc1xuICAgICAgICBncmlkSGVpZ2h0OiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCxcbiAgICAgICAgZ3JpZEdhcDogMSxcbiAgICAgICAgY29sdW1uczogKCEhdGhpcy5tYW5pZmVzdCAmJiAhIXRoaXMubWFuaWZlc3QuZ3JpZCAmJiB0aGlzLm1hbmlmZXN0LmdyaWQuY29sdW1ucykgfHwgREVGQVVMVF9DT0xVTU5TX05VTUJFUixcbiAgICAgICAgY2VsbEhlaWdodDogMSxcbiAgICAgICAgcm93cyxcbiAgICAgICAgY2VsbFdpZHRoOiAwLFxuICAgICAgICBvZmZzZXRMZWZ0OiB0aGlzLmdyaWRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0LFxuICAgICAgICBvZmZzZXRUb3A6IHRoaXMuZ3JpZFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcCxcbiAgICAgICAgbW9iaWxlTW9kZVxuICAgICAgfTtcbiAgICAgIHRoaXMucGFyYW1zLmdyaWRHYXAgPVxuICAgICAgICB0aGlzLnBhcmFtcy5yb3dzICogdGhpcy5wYXJhbXMuY2VsbEhlaWdodCA8IHRoaXMucGFyYW1zLmdyaWRIZWlnaHRcbiAgICAgICAgICA/ICEhdGhpcy5tYW5pZmVzdCAmJiAhIXRoaXMubWFuaWZlc3QuZ3JpZFxuICAgICAgICAgICAgPyB0aGlzLm1hbmlmZXN0LmdyaWQuZ2FwIHx8IERFRkFVTFRfR0FQX1BYXG4gICAgICAgICAgICA6IERFRkFVTFRfR0FQX1BYXG4gICAgICAgICAgOiAwO1xuICAgICAgdGhpcy5wYXJhbXMuY2VsbEhlaWdodCA9IE1hdGgubWF4KFxuICAgICAgICAwLFxuICAgICAgICAodGhpcy5wYXJhbXMuZ3JpZEhlaWdodCAtICh0aGlzLnBhcmFtcy5yb3dzIC0gMSkgKiB0aGlzLnBhcmFtcy5ncmlkR2FwKSAvIHRoaXMucGFyYW1zLnJvd3NcbiAgICAgICk7XG4gICAgICB0aGlzLnBhcmFtcy5jZWxsV2lkdGggPVxuICAgICAgICAodGhpcy5wYXJhbXMuZ3JpZFdpZHRoIC0gKHRoaXMucGFyYW1zLmNvbHVtbnMgLSAxKSAqIHRoaXMucGFyYW1zLmdyaWRHYXApIC8gdGhpcy5wYXJhbXMuY29sdW1ucztcblxuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZURhc2hib2FyZFBhcmFtcyh7IHBhcmFtczogdGhpcy5wYXJhbXMgfSkpO1xuXG4gICAgICB0aGlzLnJvd3MubmV4dCh0aGlzLnBhcmFtcy5yb3dzKTtcbiAgICAgIHRoaXMucm93SGVpZ2h0Lm5leHQodGhpcy5wYXJhbXMuY2VsbEhlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRpc3BsYXlJc1N0YWNrZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tlZCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIGdyaWRDb2x1bW4obGF5b3V0OiBXaWRnZXRMYXlvdXQpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmRpc3BsYXlJc1N0YWNrZWQgfHwgIWxheW91dCkge1xuICAgICAgcmV0dXJuICcxIC8gMSc7XG4gICAgfVxuICAgIGlmIChsYXlvdXQud2lkdGggPiAxKSB7XG4gICAgICByZXR1cm4gYCR7TWF0aC5taW4obGF5b3V0LngsIHRoaXMucGFyYW1zLmNvbHVtbnMgLSBsYXlvdXQud2lkdGggKyAxKX0gLyAke01hdGgubWluKFxuICAgICAgICBsYXlvdXQueCArIGxheW91dC53aWR0aCxcbiAgICAgICAgdGhpcy5wYXJhbXMuY29sdW1ucyArIDFcbiAgICAgICl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke2xheW91dC54fWA7XG4gICAgfVxuICB9XG5cbiAgZ3JpZFJvdyhsYXlvdXQ6IFdpZGdldExheW91dCk6IHN0cmluZyB7XG4gICAgaWYgKCFsYXlvdXQpIHtcbiAgICAgIHJldHVybiAnMSc7XG4gICAgfVxuICAgIGlmICh0aGlzLmRpc3BsYXlJc1N0YWNrZWQpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzSGVpZ2h0ID0gdGhpcy5tYW5pZmVzdD8ud2lkZ2V0c1xuICAgICAgICAuZmlsdGVyKCh3bTogV2lkZ2V0TWFuaWZlc3QpID0+ICh3bS5sYXlvdXQueSA9PT0gbGF5b3V0LnkgJiYgd20ubGF5b3V0LnggPCBsYXlvdXQueCkgfHwgd20ubGF5b3V0LnkgPCBsYXlvdXQueSlcbiAgICAgICAgLnJlZHVjZSgocDogbnVtYmVyLCBjOiBXaWRnZXRNYW5pZmVzdCkgPT4gcCArIGMubGF5b3V0LmhlaWdodCwgMSk7XG4gICAgICByZXR1cm4gYCR7cHJldmlvdXNIZWlnaHQgPz8gMX0gLyAkeyhwcmV2aW91c0hlaWdodCA/PyAxKSArIGxheW91dC5oZWlnaHR9YDtcbiAgICB9XG4gICAgaWYgKGxheW91dC5oZWlnaHQgPiAxKSB7XG4gICAgICByZXR1cm4gYCR7TWF0aC5tYXgoMSwgTWF0aC5taW4obGF5b3V0LnksIHRoaXMucGFyYW1zLnJvd3MgLSBsYXlvdXQuaGVpZ2h0ICsgMSkpfSAvICR7TWF0aC5taW4oXG4gICAgICAgIGxheW91dC55ICsgbGF5b3V0LmhlaWdodCxcbiAgICAgICAgdGhpcy5wYXJhbXMucm93cyArIDFcbiAgICAgICl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke2xheW91dC55fWA7XG4gICAgfVxuICB9XG5cbiAgZ2VuZXJhdGVSb3dzKHJvd3M6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIEFycmF5KHJvd3MpLmZpbGwoJzFmcicpLmpvaW4oJyAnKTtcbiAgfVxuXG4gIGdlbmVyYXRlQ29sdW1ucyhjb2x1bW5zOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBBcnJheShjb2x1bW5zKS5maWxsKCcxZnInKS5qb2luKCcgJyk7XG4gIH1cblxuICAvKioqXG4gICAqIERpcmVjdCBhY3Rpb25zIG9uIHdpZGdldHNcbiAgICovXG5cbiAgcmVtb3ZlKGk6IG51bWJlcikge1xuICAgIGNvbnN0IGxpc3RXaWRnZXRNYW5pZmVzdHMgPSBbLi4uKHRoaXMubWFuaWZlc3QgfHwgeyB3aWRnZXRzOiBbXSB9KS53aWRnZXRzXTtcbiAgICBsaXN0V2lkZ2V0TWFuaWZlc3RzLnNwbGljZShpLCAxKS5maWx0ZXIoKHdpZGdldCkgPT4gd2lkZ2V0LnR5cGUgIT09ICdmaWxsZXInKTtcblxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZURhc2hib2FyZE1hbmlmZXN0KHtcbiAgICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgICAuLi50aGlzLm1hbmlmZXN0LFxuICAgICAgICAgIHdpZGdldHM6IGxpc3RXaWRnZXRNYW5pZmVzdHNcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbW92ZUluTmV3V2luZG93KHdpZGdldEluZGV4OiBudW1iZXIsIHRhcmdldEluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMubW92ZVdpZGdldCh7IHdpZGdldEluZGV4LCB0YXJnZXRJbmRleCB9KSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnRvZ2dsZUVkaXRpb25Nb2RlKHsgZm9yY2U6IGZhbHNlIH0pKTtcbiAgfVxuXG4gIG1heGltaXplKHdpZGdldEluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMubWF4aW1pemVXaWRnZXQoeyB3aWRnZXRJbmRleCB9KSk7XG4gIH1cblxuICAvKioqXG4gICAqIE1hbmFnZSBkcmFnIG4gZHJvcCwgbW92ZSwgcmVzaXplXG4gICAqL1xuXG4gIHByZXBhcmVNb2RpZmljYXRpb24oJGV2ZW50OiBNb3VzZUV2ZW50LCBpbmRleE1hbmlmZXN0OiBudW1iZXIpIHtcbiAgICB0aGlzLm1vdmUuaW5pdGlhbFggPSAkZXZlbnQuY2xpZW50WDtcbiAgICB0aGlzLm1vdmUuaW5pdGlhbFkgPSAkZXZlbnQuY2xpZW50WTtcbiAgICB0aGlzLmluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3QgPSBzdHJ1Y3R1cmVkQ2xvbmUoKHRoaXMubWFuaWZlc3QgfHwgeyB3aWRnZXRzOiBbXSB9KS53aWRnZXRzKTtcbiAgICB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QgPSB0aGlzLmluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3Quc3BsaWNlKGluZGV4TWFuaWZlc3QsIDEpWzBdO1xuICAgIC8vIGNvbnNvbGUubG9nKCdwcmVwYXJlJywgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LCB0aGlzLmluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3QpO1xuICB9XG5cbiAgc3RhcnRSZXNpemUoJGV2ZW50OiBNb3VzZUV2ZW50LCBpbmRleE1hbmlmZXN0OiBudW1iZXIsIGRpcmVjdGlvbjogc3RyaW5nKSB7XG4gICAgdGhpcy5hY3Rpb25UeXBlID0gZGlyZWN0aW9uO1xuICAgIHRoaXMucHJlcGFyZU1vZGlmaWNhdGlvbigkZXZlbnQsIGluZGV4TWFuaWZlc3QpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdzdGFydCByZXNpemUnLCB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QsIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCk7XG4gIH1cblxuICBkcmFnU3RhcnQoJGV2ZW50OiBEcmFnRXZlbnQsIGluZGV4TWFuaWZlc3Q6IG51bWJlcikge1xuICAgIHRoaXMuYWN0aW9uVHlwZSA9ICdtb3ZlJztcbiAgICB0aGlzLnByZXBhcmVNb2RpZmljYXRpb24oJGV2ZW50LCBpbmRleE1hbmlmZXN0KTtcbiAgICBEYXNoYm9hcmRDb21wb25lbnQuYWRkVHJhbnNmZXJNYW5pZmVzdE1ldGFkYXRhKCRldmVudCwgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0ID8/ICh7fSBhcyBXaWRnZXRNYW5pZmVzdCkpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdzdGFydCBtb3ZlJywgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LCB0aGlzLmluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3QpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYWRkVHJhbnNmZXJNYW5pZmVzdE1ldGFkYXRhKCRldmVudDogRHJhZ0V2ZW50LCBtYW5pZmVzdDogV2lkZ2V0TWFuaWZlc3QpIHtcbiAgICBpZiAoISEkZXZlbnQgJiYgISEkZXZlbnQuZGF0YVRyYW5zZmVyICYmICEkZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmluY2x1ZGVzKE1JTUVfVFlQRV9XSURHRVRfTUFOSUZFU1QpKSB7XG4gICAgICAkZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoTUlNRV9UWVBFX1dJREdFVF9NQU5JRkVTVCwgSlNPTi5zdHJpbmdpZnkobWFuaWZlc3QpKTtcbiAgICAgICRldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YShNSU1FX1RZUEVfV0lER0VUX1RZUEUgKyBtYW5pZmVzdC50eXBlLCAndW51c2VkJyk7XG4gICAgICAvLyBQYXNzaW5nIHdpZGdldCBzaXplIGFzIGEgbWltZSB0eXBlLCBzbyB0aGF0IHdlIGNhbiBieXBhc3Mgc2VjdXJpdHkgZm9yIHBsYWNlaG9sZGVyIHNpemUgYXQgdGhlIGFycml2YWwgb2YgdGhlIGRyYWdcbiAgICAgICRldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YShcbiAgICAgICAgTUlNRV9UWVBFX1dJREdFVF9TSVpFICsgYCR7bWFuaWZlc3QubGF5b3V0LndpZHRofS0ke21hbmlmZXN0LmxheW91dC5oZWlnaHR9YCxcbiAgICAgICAgJ3VzZWxlc3MnIC8vIGRhdGEgaXMgaW4gdGhlIG1pbWUgdHlwZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBkcmFnRW50ZXIoJGV2ZW50OiBEcmFnRXZlbnQsIGZvcmNlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCB0eXBlcyA9ICgkZXZlbnQuZGF0YVRyYW5zZmVyIHx8IHsgdHlwZXM6IFsnJ10gfSkudHlwZXM7XG5cbiAgICBpZiAodHlwZXMuaW5jbHVkZXMoTUlNRV9UWVBFX1dJREdFVF9NQU5JRkVTVCkpIHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy50b2dnbGVFZGl0aW9uTW9kZSh7IGZvcmNlOiB0cnVlIH0pKTtcbiAgICAgIHRoaXMuYWN0aW9uVHlwZSA9ICdtb3ZlJztcbiAgICB9XG4gIH1cblxuICBjaGVja0ZvckRyYWdFbnRlcigkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdCkge1xuICAgICAgLy8gY3JlYXRlIHBsYWNlaG9sZGVyIGFzIGEgZHJhZyBlbnRlcmVkIHRoZSBjb21wb25lbnQsIGdvIGludG8gZWRpdGlvbiBtb2RlIGFuZCBtb3ZlIGFjdGlvbiBpZiBpdCdzIGEgd2lkZ2V0IGJlaW5nIGRyYWdnZWRcbiAgICAgIGNvbnN0IHR5cGVzID0gKCgkZXZlbnQgYXMgRHJhZ0V2ZW50KS5kYXRhVHJhbnNmZXIgfHwgeyB0eXBlczogWycnXSB9KS50eXBlcztcbiAgICAgIGlmICh0eXBlcy5pbmNsdWRlcyhNSU1FX1RZUEVfV0lER0VUX01BTklGRVNUKSkge1xuICAgICAgICB0aGlzLmFjdGlvblR5cGUgPSAnbW92ZSc7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy50b2dnbGVFZGl0aW9uTW9kZSh7IGZvcmNlOiB0cnVlIH0pKTtcblxuICAgICAgICAvLyBPbiBkcmFnIGVudGVyLCB3ZSBvbmx5IGNhbiBwdXQgYSBwbGFjZWhvbGRlciwgc2luY2UgZm9yIHNlY3VyaXR5IHJlYXNvbnMsIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhLXRyYW5zZmVyIGlzIG5vdCBhdmFpbGFibGVcbiAgICAgICAgdGhpcy5tb3ZlLmluaXRpYWxYID0gdGhpcy5kYXNoYm9hcmRQYXJhbXMub2Zmc2V0TGVmdDtcbiAgICAgICAgdGhpcy5tb3ZlLmluaXRpYWxZID0gdGhpcy5kYXNoYm9hcmRQYXJhbXMub2Zmc2V0VG9wO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmdldFRhcmdldCgkZXZlbnQsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0ID0ge1xuICAgICAgICAgIHR5cGU6ICdwbGFjZWhvbGRlcicsXG4gICAgICAgICAgbGF5b3V0OiB7IHg6IHRhcmdldD8ueCA/PyAwLCB5OiB0YXJnZXQ/LnkgPz8gMCwgd2lkdGg6IDEsIGhlaWdodDogMSB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCA9IHN0cnVjdHVyZWRDbG9uZSgodGhpcy5tYW5pZmVzdCB8fCB7IHdpZGdldHM6IFtdIH0pLndpZGdldHMpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnY3JlYXRlIHBsYWNlaG9sZGVyJywgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LCB0aGlzLmluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3QpO1xuXG4gICAgICAgIC8vIFdlIHBhc3NlZCB3aWRnZXQgc2l6ZSBhcyBhIG1pbWV0eXBlIHNvIHRoYXQgd2UgY2FuIHN0aWxsIHJlYWQgaXQgd2l0aG91dCBzZWN1cml0eSBpc3N1ZXNcbiAgICAgICAgY29uc3Qgd2lkZ2V0U2l6ZU1pbWVUeXBlID0gdHlwZXMuZmluZCgodHlwZSkgPT4gdHlwZS5pbmNsdWRlcyhNSU1FX1RZUEVfV0lER0VUX1NJWkUpKTtcbiAgICAgICAgaWYgKCEhd2lkZ2V0U2l6ZU1pbWVUeXBlKSB7XG4gICAgICAgICAgY29uc3QgW18sIF8yLCB3LCBoXSA9IHdpZGdldFNpemVNaW1lVHlwZS5zcGxpdCgnLScpO1xuICAgICAgICAgIHRoaXMuY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdC5sYXlvdXQud2lkdGggPSBwYXJzZUludCh3LCAxMCk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LmxheW91dC5oZWlnaHQgPSBwYXJzZUludChoLCAxMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVXNlIGdyaWQgc2l6ZVxuICAgICAgICAgIGNvbnN0IGxheW91dCA9IChXaWRnZXRQbGFjZW1lbnRVdGlscy5nZXRMYXlvdXQodGhpcy5sYXlvdXQpPy5wbGFjZXMgPz8gW10pW1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsV2lkZ2V0TWFuaWZlc3RMaXN0Lmxlbmd0aFxuICAgICAgICAgIF0gPz8ge1xuICAgICAgICAgICAgd2lkdGg6IDEsXG4gICAgICAgICAgICBoZWlnaHQ6IDFcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdC5sYXlvdXQud2lkdGggPSBsYXlvdXQud2lkdGg7XG4gICAgICAgICAgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LmxheW91dC5oZWlnaHQgPSBsYXlvdXQuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2UgcGFzc2VkIHRoZSB0eXBlIGFzIGEgaGVhZGVyIG5hbWUgc28gdGhhdCB3ZSBjYW4gc3RpbGwgYWNjZXNzIGl0IHdpdGhvdXQgc2VjdXJpdHkgaXNzdWVzXG4gICAgICAgIGNvbnN0IHdpZGdldFR5cGUgPSB0eXBlcy5maW5kKCh0eXBlKSA9PiB0eXBlLmluY2x1ZGVzKE1JTUVfVFlQRV9XSURHRVRfVFlQRSkpO1xuICAgICAgICBpZiAoISF3aWRnZXRUeXBlKSB7XG4gICAgICAgICAgY29uc3QgW18sIF8yLCB0eXBlXSA9IHdpZGdldFR5cGUuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QudHlwZSA9IHR5cGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXNldCBpbml0aWFsIHBvc2l0aW9uIGZvciB0aGUgb25lIHdlIGp1c3QgY2FsY3VsYXRlZCwgc28gd2UgY2FuIGNvbnRpbnVlIHByb3Blcmx5IG1vdmUgdGhlIHdpZGdldFxuICAgICAgICB0aGlzLm1vdmUuaW5pdGlhbFggPSAkZXZlbnQucGFnZVg7XG4gICAgICAgIHRoaXMubW92ZS5pbml0aWFsWSA9ICRldmVudC5wYWdlWTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRUYXJnZXQoJGV2ZW50OiBNb3VzZUV2ZW50LCBvcHRpbWl6ZSA9IHRydWUpIHtcbiAgICBjb25zdCBkWCA9ICRldmVudC5wYWdlWCAtIHRoaXMubW92ZS5pbml0aWFsWDtcbiAgICBjb25zdCBkWSA9ICRldmVudC5wYWdlWSAtIHRoaXMubW92ZS5pbml0aWFsWTtcblxuICAgIGNvbnN0IHRhcmdldCA9IHtcbiAgICAgIHg6XG4gICAgICAgIGRYID09PSAwXG4gICAgICAgICAgPyAwXG4gICAgICAgICAgOiBNYXRoLnJvdW5kKFxuICAgICAgICAgICAgICAoKGRYIC8gTWF0aC5hYnMoZFgpKSAqIChNYXRoLmFicyhkWCkgLSAwLjUgKiB0aGlzLmRhc2hib2FyZFBhcmFtcy5jZWxsV2lkdGgpKSAvXG4gICAgICAgICAgICAgICAgKHRoaXMuZGFzaGJvYXJkUGFyYW1zLmNlbGxXaWR0aCArIHRoaXMuZGFzaGJvYXJkUGFyYW1zLmdyaWRHYXApXG4gICAgICAgICAgICApLFxuICAgICAgeTpcbiAgICAgICAgZFkgPT09IDBcbiAgICAgICAgICA/IDBcbiAgICAgICAgICA6IE1hdGgucm91bmQoXG4gICAgICAgICAgICAgICgoZFkgLyBNYXRoLmFicyhkWSkpICogKE1hdGguYWJzKGRZKSAtIDAuNSAqIHRoaXMuZGFzaGJvYXJkUGFyYW1zLmNlbGxIZWlnaHQpKSAvXG4gICAgICAgICAgICAgICAgKHRoaXMuZGFzaGJvYXJkUGFyYW1zLmNlbGxIZWlnaHQgKyB0aGlzLmRhc2hib2FyZFBhcmFtcy5ncmlkR2FwKVxuICAgICAgICAgICAgKVxuICAgIH07XG5cbiAgICBpZiAoIW9wdGltaXplIHx8IHRhcmdldC54ICE9PSB0aGlzLm1vdmUucHJldmlvdXNYIHx8IHRhcmdldC55ICE9PSB0aGlzLm1vdmUucHJldmlvdXNZKSB7XG4gICAgICB0aGlzLm1vdmUucHJldmlvdXNYID0gdGFyZ2V0Lng7XG4gICAgICB0aGlzLm1vdmUucHJldmlvdXNZID0gdGFyZ2V0Lnk7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbW92aW5nTW91c2UoJGV2ZW50OiBNb3VzZUV2ZW50LCBvcHRpbWl6ZSA9IHRydWUpIHtcbiAgICBpZiAodGhpcy5tb2RlRWRpdGlvbiAmJiAhIXRoaXMuYWN0aW9uVHlwZSkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5nZXRUYXJnZXQoJGV2ZW50LCBvcHRpbWl6ZSk7XG4gICAgICBpZiAodGFyZ2V0ICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY2hlY2tGb3JEcmFnRW50ZXIoJGV2ZW50KTtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlV2lkZ2V0ID0gc3RydWN0dXJlZENsb25lKHRoaXMuY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdCkhO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy5hY3Rpb25UeXBlKSB7XG4gICAgICAgICAgY2FzZSAncmVzaXplLW53JzpcbiAgICAgICAgICAgIGlmIChjYW5kaWRhdGVXaWRnZXQubGF5b3V0LnggKyB0YXJnZXQueCA+IDAgJiYgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC5oZWlnaHQgLSB0YXJnZXQueSA+IDApIHtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC54ICs9IHRhcmdldC54O1xuICAgICAgICAgICAgICBjYW5kaWRhdGVXaWRnZXQubGF5b3V0LnkgKz0gdGFyZ2V0Lnk7XG4gICAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQud2lkdGggLT0gdGFyZ2V0Lng7XG4gICAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQuaGVpZ2h0IC09IHRhcmdldC55O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncmVzaXplLXN3JzpcbiAgICAgICAgICAgIGlmIChjYW5kaWRhdGVXaWRnZXQubGF5b3V0LndpZHRoIC0gdGFyZ2V0LnggPiAwKSB7XG4gICAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQueCArPSB0YXJnZXQueDtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC53aWR0aCAtPSB0YXJnZXQueDtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC5oZWlnaHQgKz0gdGFyZ2V0Lnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdyZXNpemUtbmUnOlxuICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQuaGVpZ2h0IC0gdGFyZ2V0LnkgPiAwKSB7XG4gICAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQueSArPSB0YXJnZXQueTtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC53aWR0aCArPSB0YXJnZXQueDtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC5oZWlnaHQgLT0gdGFyZ2V0Lnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdyZXNpemUtc2UnOlxuICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC53aWR0aCArPSB0YXJnZXQueDtcbiAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQuaGVpZ2h0ICs9IHRhcmdldC55O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbW92ZSc6XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TWF4WCA9XG4gICAgICAgICAgICAgIE1hdGgubWF4KFxuICAgICAgICAgICAgICAgIHRoaXMubWFuaWZlc3Q/LmdyaWQ/LmNvbHVtbnMgPz8gREVGQVVMVF9DT0xVTU5TX05VTUJFUixcbiAgICAgICAgICAgICAgICAuLi4odGhpcy5tYW5pZmVzdD8ud2lkZ2V0cyA/PyBbXSkubWFwKCh3KSA9PiB3LmxheW91dC53aWR0aCArIHcubGF5b3V0LngpXG4gICAgICAgICAgICAgICkgLVxuICAgICAgICAgICAgICBjYW5kaWRhdGVXaWRnZXQubGF5b3V0LndpZHRoICtcbiAgICAgICAgICAgICAgMTtcbiAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQueCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQueCArIHRhcmdldC54LCBjdXJyZW50TWF4WCkpO1xuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TWF4WSA9XG4gICAgICAgICAgICAgIE1hdGgubWF4KFxuICAgICAgICAgICAgICAgIHRoaXMubWFuaWZlc3Q/LmdyaWQ/LnJvd3MgPz8gREVGQVVMVF9ST1dTX05VTUJFUixcbiAgICAgICAgICAgICAgICAuLi4odGhpcy5tYW5pZmVzdD8ud2lkZ2V0cyA/PyBbXSkubWFwKCh3KSA9PiB3LmxheW91dC5oZWlnaHQgKyB3LmxheW91dC55KVxuICAgICAgICAgICAgICApIC1cbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC5oZWlnaHQgK1xuICAgICAgICAgICAgICAxO1xuICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC55ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY2FuZGlkYXRlV2lkZ2V0LmxheW91dC55ICsgdGFyZ2V0LnksIGN1cnJlbnRNYXhZKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVEYXNoYm9hcmRNYW5pZmVzdCh7XG4gICAgICAgICAgICBtYW5pZmVzdDogc29sdmVDb2xsaXNpb25zKFxuICAgICAgICAgICAgICBjYW5kaWRhdGVXaWRnZXQsXG4gICAgICAgICAgICAgIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCxcbiAgICAgICAgICAgICAgdGhpcy5tYW5pZmVzdCA/PyAoe30gYXMgRGFzaGJvYXJkTWFuaWZlc3QpXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkcmFnTW92ZSgkZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHRoaXMubW92aW5nTW91c2UoJGV2ZW50KTtcbiAgfVxuXG4gIGRyYWdMZWF2ZSgkZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAoJGV2ZW50LmN1cnJlbnRUYXJnZXQuY29udGFpbnMoJGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZXMgPSAoJGV2ZW50LmRhdGFUcmFuc2ZlciB8fCB7IHR5cGVzOiBbJyddIH0pLnR5cGVzO1xuICAgIGlmICh0eXBlcy5pbmNsdWRlcyhNSU1FX1RZUEVfV0lER0VUX01BTklGRVNUKSkge1xuICAgICAgLy8gQXMgdGhlIGRyYWcgaXMgbGVhdmluZyB0aGUgd2luZG93LCBkZWxldGUgdGhlIHdpZGdldCBmcm9tIGl0LCBhbmQgc3RvcCBlZGl0aW9uIG1vZGVcbiAgICAgIGlmICghISRldmVudCAmJiAhISRldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZURhc2hib2FyZE1hbmlmZXN0KHtcbiAgICAgICAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgICAgICAgIC4uLnRoaXMubWFuaWZlc3QsXG4gICAgICAgICAgICAgIHdpZGdldHM6IHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2xlYXJBY3Rpb25zKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZHJvcHBpbmcoJGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKCEhJGV2ZW50ICYmICEhJGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgaWYgKCRldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaW5jbHVkZXMoTUlNRV9UWVBFX1dJREdFVF9NQU5JRkVTVCkpIHtcbiAgICAgICAgLy8gUmVhcnJhbmdlIGRyb3AgdG8gY29ycmVjdCBzaXplLCB0eXBlLCAuLi4sIGFzIGEgcGxhY2Vob2xkZXIgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIG1hbmlmZXN0IGJ5IGRyYWdlbnRlciBldmVudFxuICAgICAgICBjb25zdCBkYXRhVHJhbnNmZXJNYW5pZmVzdCA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgJGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKE1JTUVfVFlQRV9XSURHRVRfTUFOSUZFU1QpXG4gICAgICAgICkgYXMgV2lkZ2V0TWFuaWZlc3Q7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0ID0ge1xuICAgICAgICAgIC4uLmRhdGFUcmFuc2Zlck1hbmlmZXN0LFxuICAgICAgICAgIGxheW91dDogdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0Py5sYXlvdXQgPz8gKHt9IGFzIFdpZGdldExheW91dClcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLm1vdmluZ01vdXNlKCRldmVudCwgZmFsc2UpO1xuXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5hc3NlcnRSZXN1bHRTZXRzKHt9KSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2xlYXJBY3Rpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJBY3Rpb25zKCkge1xuICAgIHRoaXMuYWN0aW9uVHlwZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm1vdmUuaW5pdGlhbFggPSAwO1xuICAgIHRoaXMubW92ZS5pbml0aWFsWSA9IDA7XG4gICAgdGhpcy5tb3ZlLnByZXZpb3VzWCA9IC0xO1xuICAgIHRoaXMubW92ZS5wcmV2aW91c1kgPSAtMTtcbiAgICB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QgPSBudWxsO1xuICAgIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCA9IFtdO1xuICB9XG5cbiAgLyoqKlxuICAgKiBNYW5hZ2Ugb3RoZXIga2luZHMgb2YgZHJvcHMgKGluc2lkZSB3aWRnZXRzKVxuICAgKi9cbiAgZHJvcHBpbmdJbldpZGdldCgkZXZlbnQ6IERyYWdFdmVudCwgaW5kZXg6IG51bWJlcikge1xuICAgIGlmICghISRldmVudCAmJiAhISRldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgIGlmICgkZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmluY2x1ZGVzKE1JTUVfVFlQRV9SRVNVTFRTRVQpKSB7XG4gICAgICAgIGNvbnN0IGxpc3RXaWRnZXRNYW5pZmVzdHMgPSBbLi4uKHRoaXMubWFuaWZlc3QgfHwgeyB3aWRnZXRzOiBbXSB9KS53aWRnZXRzXTtcblxuICAgICAgICBjb25zdCByZXN1bHRTZXROYW1lID0gJGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKE1JTUVfVFlQRV9SRVNVTFRTRVQpO1xuICAgICAgICBjb25zdCBjdXJyZW50UmVzdWx0U2V0ID0gKFxuICAgICAgICAgIEFycmF5LmlzQXJyYXkobGlzdFdpZGdldE1hbmlmZXN0c1tpbmRleF0uZGF0YXNvdXJjZSlcbiAgICAgICAgICAgID8gbGlzdFdpZGdldE1hbmlmZXN0c1tpbmRleF0uZGF0YXNvdXJjZVxuICAgICAgICAgICAgOiBbbGlzdFdpZGdldE1hbmlmZXN0c1tpbmRleF0uZGF0YXNvdXJjZV1cbiAgICAgICAgKSBhcyBzdHJpbmdbXTtcbiAgICAgICAgY29uc3QgY3VtdWxhdGl2ZSA9ICRldmVudC5zaGlmdEtleTtcbiAgICAgICAgY29uc3QgbmV3UmVzdWx0U2V0ID0gY3VtdWxhdGl2ZSA/IFsuLi5jdXJyZW50UmVzdWx0U2V0LCByZXN1bHRTZXROYW1lXSA6IHJlc3VsdFNldE5hbWU7XG5cbiAgICAgICAgbGlzdFdpZGdldE1hbmlmZXN0c1tpbmRleF0gPSB7XG4gICAgICAgICAgLi4ubGlzdFdpZGdldE1hbmlmZXN0c1tpbmRleF0sXG4gICAgICAgICAgZGF0YXNvdXJjZTogbmV3UmVzdWx0U2V0XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZURhc2hib2FyZE1hbmlmZXN0KHtcbiAgICAgICAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgICAgICAgIC4uLnRoaXMubWFuaWZlc3QsXG4gICAgICAgICAgICAgIHdpZGdldHM6IGxpc3RXaWRnZXRNYW5pZmVzdHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuYXNzZXJ0UmVzdWx0U2V0cyh7fSkpO1xuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVJlbW92ZUNvbmZpcm0oJGV2ZW50PzogTW91c2VFdmVudCwgaW5kZXg/OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlybVJlbW92ZVJlZikge1xuICAgICAgdGhpcy5pbmRleEZvclJlbW92YWwgPSBpbmRleCA/PyAtMTtcbiAgICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoXG4gICAgICAgIG5ldyBPdmVybGF5Q29uZmlnKHtcbiAgICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ28tbW9kYWwtd3JhcHBlciddLFxuICAgICAgICAgIGJhY2tkcm9wQ2xhc3M6ICdiYWNrZHJvcCdcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuYWRkaW5nT3ZlcmxheSh7IGlkOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgKyAnLW1vZGFsJyB9KSk7XG4gICAgICB0aGlzLmNvbmZpcm1SZW1vdmVSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoXykgPT4gdGhpcy50b2dnbGVSZW1vdmVDb25maXJtKCkpO1xuICAgICAgdGhpcy5jb25maXJtUmVtb3ZlUmVmLmF0dGFjaChuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy50ZW1wbGF0ZU1vZGFsLCB0aGlzLnZpZXdDb250YWluZXJSZWYpKTtcbiAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdkaXYuby1tb2RhbC13cmFwcGVyJykgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICAgIGlmICghIXBhbmVsKSB7XG4gICAgICAgICAgcGFuZWwuc3R5bGUubGVmdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHdpbmRvdy5pbm5lcldpZHRoIC0gcGFuZWwuY2xpZW50V2lkdGgsICRldmVudC5jbGllbnRYIC0gMzApKSArICdweCc7XG4gICAgICAgICAgcGFuZWwuc3R5bGUudG9wID0gTWF0aC5tYXgoMCwgTWF0aC5taW4od2luZG93LmlubmVySGVpZ2h0IC0gcGFuZWwuY2xpZW50SGVpZ2h0LCAkZXZlbnQuY2xpZW50WSAtIDEwKSkgKyAncHgnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZi5kaXNwb3NlKCk7XG4gICAgICB0aGlzLmNvbmZpcm1SZW1vdmVSZWYgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuY2xvc2VPdmVybGF5KHsgaWQ6IHRoaXMuY29uc3RydWN0b3IubmFtZSArICctbW9kYWwnIH0pKTtcbiAgICB9XG4gIH1cblxuICBjb25maXJtUmVtb3ZlKCkge1xuICAgIHRoaXMucmVtb3ZlKHRoaXMuaW5kZXhGb3JSZW1vdmFsKTtcbiAgICB0aGlzLmNhbmNlbFJlbW92ZUNvbmZpcm0oKTtcbiAgfVxuXG4gIGNhbmNlbFJlbW92ZUNvbmZpcm0oKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDb25maWdBY3Rpb25zLmNsb3NlT3ZlcmxheSh7IGlkOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgKyAnLW1vZGFsJyB9KSk7XG4gICAgdGhpcy5jb25maXJtUmVtb3ZlUmVmPy5kaXNwb3NlKCk7XG4gICAgdGhpcy5jb25maXJtUmVtb3ZlUmVmID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdHJhY2tXaWRnZXRzKGluZGV4OiBudW1iZXIsIHdpZGdldE1hbmlmZXN0OiBXaWRnZXRNYW5pZmVzdCkge1xuICAgIHJldHVybiBpbmRleCArICctJyArIHdpZGdldE1hbmlmZXN0LnR5cGUgKyAnLScgKyBKU09OLnN0cmluZ2lmeSh3aWRnZXRNYW5pZmVzdC5sYXlvdXQpO1xuICB9XG5cbiAgY2hhbmdlU2l6ZShkaXJlY3Rpb246IHN0cmluZywgb2Zmc2V0OiBudW1iZXIpIHtcbiAgICBjb25zdCBtaW5Sb3dzID1cbiAgICAgICh0aGlzLm1hbmlmZXN0Py53aWRnZXRzLm1hcCgodykgPT4gdy5sYXlvdXQuaGVpZ2h0ICsgdy5sYXlvdXQueSkucmVkdWNlKChhLCBiKSA9PiAoYSA+IGIgPyBhIDogYiksIDIpID8/IDIpIC0gMTtcbiAgICBjb25zdCBtaW5Db2x1bW5zID1cbiAgICAgICh0aGlzLm1hbmlmZXN0Py53aWRnZXRzLm1hcCgodykgPT4gdy5sYXlvdXQud2lkdGggKyB3LmxheW91dC54KS5yZWR1Y2UoKGEsIGIpID0+IChhID4gYiA/IGEgOiBiKSwgMikgPz8gMikgLSAxO1xuXG4gICAgY29uc3QgZnV0dXJlU2l6ZSA9IHtcbiAgICAgIHJvd3M6IE1hdGgubWF4KG1pblJvd3MsICh0aGlzLm1hbmlmZXN0IS5ncmlkPy5yb3dzID8/IERFRkFVTFRfUk9XU19OVU1CRVIpICsgKGRpcmVjdGlvbiA9PT0gJ3Jvd3MnID8gb2Zmc2V0IDogMCkpLFxuICAgICAgY29sdW1uczogTWF0aC5tYXgoXG4gICAgICAgIG1pbkNvbHVtbnMsXG4gICAgICAgICh0aGlzLm1hbmlmZXN0IS5ncmlkPy5jb2x1bW5zID8/IERFRkFVTFRfQ09MVU1OU19OVU1CRVIpICsgKGRpcmVjdGlvbiA9PT0gJ2NvbHVtbnMnID8gb2Zmc2V0IDogMClcbiAgICAgIClcbiAgICB9O1xuXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgIERhc2hib2FyZEFjdGlvbnMudXBkYXRlRGFzaGJvYXJkTWFuaWZlc3Qoe1xuICAgICAgICBtYW5pZmVzdDoge1xuICAgICAgICAgIC4uLnRoaXMubWFuaWZlc3QhLFxuICAgICAgICAgIGdyaWQ6IHtcbiAgICAgICAgICAgIC4uLih0aGlzLm1hbmlmZXN0Py5ncmlkID8/IHt9KSxcbiAgICAgICAgICAgIC4uLmZ1dHVyZVNpemVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm8tZGFzaGJvYXJkLWVkaXRcIiBbY2xhc3MuLWVkaXRdPVwibW9kZUVkaXRpb24kIHwgYXN5bmNcIj5cbiAgPGRpdiBjbGFzcz1cIm8tZGFzaGJvYXJkLWFkZCAtcm93c1wiPlxuICAgIDxidXR0b24gKGNsaWNrKT1cImNoYW5nZVNpemUoJ3Jvd3MnLCAtMSlcIj5cbiAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwicmVtb3ZlXCIgW3dpZHRoXT1cIjEyXCIgW2hlaWdodF09XCIxMlwiPjwvcHJ5LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwiY2hhbmdlU2l6ZSgncm93cycsICsxKVwiPlxuICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJhZGRcIiBbd2lkdGhdPVwiMTJcIiBbaGVpZ2h0XT1cIjEyXCI+PC9wcnktaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8cD57eyAnQHByeS5ncmlkLnJvd3MnIHwgaTE4biB9fTwvcD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJvLWRhc2hib2FyZC1hZGQgLWNvbHNcIj5cbiAgICA8cD57eyAnQHByeS5ncmlkLmNvbHVtbnMnIHwgaTE4biB9fTwvcD5cbiAgICA8YnV0dG9uIChjbGljayk9XCJjaGFuZ2VTaXplKCdjb2x1bW5zJywgLTEpXCI+XG4gICAgICA8cHJ5LWljb24gaWNvblN2Zz1cInJlbW92ZVwiIFt3aWR0aF09XCIxMlwiIFtoZWlnaHRdPVwiMTJcIj48L3ByeS1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gKGNsaWNrKT1cImNoYW5nZVNpemUoJ2NvbHVtbnMnLCArMSlcIj5cbiAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiYWRkXCIgW3dpZHRoXT1cIjEyXCIgW2hlaWdodF09XCIxMlwiPjwvcHJ5LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJvLWRhc2hib2FyZC1ncmlkXCJcbiAgICBbc3R5bGUuZ3JpZFRlbXBsYXRlQ29sdW1uc109XCJncmlkVGVtcGxhdGVDb2x1bW5zJCB8IGFzeW5jXCJcbiAgICBbc3R5bGUuZ3JpZFRlbXBsYXRlUm93c109XCJncmlkVGVtcGxhdGVSb3dzJCB8IGFzeW5jXCJcbiAgICBbc3R5bGUuZ3JpZEdhcF09XCJkYXNoYm9hcmRQYXJhbXMuZ3JpZEdhcCArICdweCdcIlxuICAgICNncmlkXG4gICAgKG1vdXNlbW92ZSk9XCJtb3ZpbmdNb3VzZSgkZXZlbnQpXCJcbiAgICAoZHJvcCk9XCJkcm9wcGluZygkZXZlbnQpXCJcbiAgICAoZHJhZ292ZXIpPVwiZHJhZ01vdmUoJGV2ZW50KVwiXG4gICAgKGRyYWdsZWF2ZSk9XCJkcmFnTGVhdmUoJGV2ZW50KVwiXG4gICAgKGRyYWdlbnRlcik9XCJkcmFnRW50ZXIoJGV2ZW50KVwiXG4gICAgPlxuICAgIEBmb3IgKFxuICAgICAgd2lkZ2V0TWFuaWZlc3Qgb2YgKHdpbmRvd01hbmlmZXN0JCB8IGFzeW5jKT8ud2lkZ2V0cyB8fCBbXTsgdHJhY2sgdHJhY2tXaWRnZXRzKHdpZGdldEluZGV4LFxuICAgICAgd2lkZ2V0TWFuaWZlc3QpOyBsZXQgd2lkZ2V0SW5kZXggPSAkaW5kZXgpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJvLWRhc2hib2FyZC13aWRnZXRcIlxuICAgICAgICBbY2xhc3MuLWVkaXRlZF09XCJtb2RlRWRpdGlvblwiXG4gICAgICAgIFtzdHlsZS5ncmlkQ29sdW1uXT1cImdyaWRDb2x1bW4od2lkZ2V0TWFuaWZlc3QubGF5b3V0KVwiXG4gICAgICAgIFtzdHlsZS5ncmlkUm93XT1cImdyaWRSb3cod2lkZ2V0TWFuaWZlc3QubGF5b3V0KVwiXG4gICAgICAgIChkcm9wKT1cImRyb3BwaW5nSW5XaWRnZXQoJGV2ZW50LCB3aWRnZXRJbmRleClcIlxuICAgICAgICA+XG4gICAgICAgIEBpZiAobW9kZUVkaXRpb24pIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplIG53LXJlc2l6ZVwiIChtb3VzZWRvd24pPVwic3RhcnRSZXNpemUoJGV2ZW50LCB3aWRnZXRJbmRleCwgJ3Jlc2l6ZS1udycpXCI+XG4gICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cIm5vcnRoX3dlc3RcIiBbYW5pbWF0aW9uXT1cImZhbHNlXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplIHN3LXJlc2l6ZVwiIChtb3VzZWRvd24pPVwic3RhcnRSZXNpemUoJGV2ZW50LCB3aWRnZXRJbmRleCwgJ3Jlc2l6ZS1zdycpXCI+XG4gICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cInNvdXRoX3dlc3RcIiBbYW5pbWF0aW9uXT1cImZhbHNlXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplIG5lLXJlc2l6ZVwiIChtb3VzZWRvd24pPVwic3RhcnRSZXNpemUoJGV2ZW50LCB3aWRnZXRJbmRleCwgJ3Jlc2l6ZS1uZScpXCI+XG4gICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cIm5vcnRoX2Vhc3RcIiBbYW5pbWF0aW9uXT1cImZhbHNlXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplIHNlLXJlc2l6ZVwiIChtb3VzZWRvd24pPVwic3RhcnRSZXNpemUoJGV2ZW50LCB3aWRnZXRJbmRleCwgJ3Jlc2l6ZS1zZScpXCI+XG4gICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cInNvdXRoX2Vhc3RcIiBbYW5pbWF0aW9uXT1cImZhbHNlXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplIGRlbGV0ZVwiIChtb3VzZWRvd24pPVwidG9nZ2xlUmVtb3ZlQ29uZmlybSgkZXZlbnQsIHdpZGdldEluZGV4KVwiPlxuICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJjbG9zZVwiIFthbmltYXRpb25dPVwiZmFsc2VcIj48L3ByeS1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb3ZlXCIgZHJhZ2dhYmxlPVwidHJ1ZVwiIChkcmFnc3RhcnQpPVwiZHJhZ1N0YXJ0KCRldmVudCwgd2lkZ2V0SW5kZXgpXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW92ZS1pbnNpZGUgbW92ZS17eyB3aWRnZXRNYW5pZmVzdC50eXBlIH19XCI+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHdpZGdldE1hbmlmZXN0LnRpdGxlID8/ICgnQHByeS50b29sYm94LicgKyB3aWRnZXRNYW5pZmVzdC50eXBlIHwgaTE4bikgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKCFtb2RlRWRpdGlvbikge1xuICAgICAgICAgIDxwcnktd2lkZ2V0LWluc3RhbmNpYXRvclxuICAgICAgICAgICAgW3N0YXRpY01hbmlmZXN0XT1cIndpZGdldE1hbmlmZXN0XCJcbiAgICAgICAgICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgICAgICAgPjwvcHJ5LXdpZGdldC1pbnN0YW5jaWF0b3I+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAoIW5vQmFja2dyb3VuZCkge1xuICAgICAgQGlmICh7XG4gICAgICAgIG5vV2lkZ2V0czogKG5vbkZpbGxlcldpZGdldHMkIHwgYXN5bmMpID09PSAwLFxuICAgICAgICBnbG9iYWxMb2FkaW5nOiBsb2FkaW5nJCB8IGFzeW5jLFxuICAgICAgICBmZXRjaExvYWRpbmc6IChkYXRhRmV0Y2hpbmckIHwgYXN5bmMpPy5sZW5ndGggPz8gMSA+IDBcbiAgICAgICAgfTsgYXMgZGF0YSkge1xuICAgICAgICBAaWYgKGRhdGEubm9XaWRnZXRzKSB7XG4gICAgICAgICAgQGlmIChkYXRhLmdsb2JhbExvYWRpbmcpIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJuby13aWRnZXRcIlxuICAgICAgICAgICAgICBbc3R5bGUuZ3JpZC1hcmVhXT1cImJhY2tncm91bmRBcmVhJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cHJ5LXBhZ2UtbG9hZGVyPjwvcHJ5LXBhZ2UtbG9hZGVyPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5vLXdpZGdldF9fdGV4dFwiPnt7ICdAcHJ5LndpZGdldC50YXJnZXQubG9hZGluZycgfCBpMThuIH19Li4uPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm8td2lkZ2V0XCIgW3N0eWxlLmdyaWQtYXJlYV09XCJiYWNrZ3JvdW5kQXJlYSQgfCBhc3luY1wiPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJuby13aWRnZXRfX3NlYXJjaFwiXG4gICAgICAgICAgICAgICAgc3JjPVwiLi4vLi4vLi4vYXNzZXRzL3N2Z3MvcHJ5X3JlY2hlcmNoZS5zdmdcIlxuICAgICAgICAgICAgICAgIGFsdD1cInt7XG4gICAgICAgICAgICAgICAgICAobGF5b3V0ID09PSBEYXNoYm9hcmRHcmlkTGF5b3V0Lk1BTlVBTFxuICAgICAgICAgICAgICAgICAgICA/ICdAcHJ5LndpZGdldC50YXJnZXQubm9uZV9tYW51YWwnXG4gICAgICAgICAgICAgICAgICAgIDogJ0Bwcnkud2lkZ2V0LnRhcmdldC5ub25lX2F1dG8nXG4gICAgICAgICAgICAgICAgICApIHwgaTE4blxuICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5vLXdpZGdldF9fdGV4dFwiPnt7XG4gICAgICAgICAgICAgICAgKGxheW91dCA9PT0gRGFzaGJvYXJkR3JpZExheW91dC5NQU5VQUxcbiAgICAgICAgICAgICAgICA/ICdAcHJ5LndpZGdldC50YXJnZXQubm9uZV9tYW51YWwnXG4gICAgICAgICAgICAgICAgOiAnQHByeS53aWRnZXQudGFyZ2V0Lm5vbmVfYXV0bydcbiAgICAgICAgICAgICAgICApIHwgaTE4blxuICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJhLXBhZ2UtbG9hZGVyIGJhY2tkcm9wXCJcbiAgICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJkYXRhLmZldGNoTG9hZGluZyAmJiAhZGF0YS5nbG9iYWxMb2FkaW5nID8gJ2ZsZXgnIDogJ25vbmUnXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicGFyYW1zLmdyaWRXaWR0aFwiXG4gICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJwYXJhbXMuZ3JpZEhlaWdodFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDxwcnktcGFnZS1sb2FkZXI+PC9wcnktcGFnZS1sb2FkZXI+XG4gICAgICAgICAgPHA+e3sgJ0Bwcnkud2lkZ2V0LnRhcmdldC5sb2FkaW5nJyB8IGkxOG4gfX0uLi48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIH1cbiAgPC9kaXY+XG48L2Rpdj5cbjxwcnktY29udGV4dC1tZW51PjwvcHJ5LWNvbnRleHQtbWVudT5cblxuPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZU1vZGFsPlxuICA8ZGl2IGNsYXNzPVwiby1tb2RhbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJvLW1vZGFsX190b3BcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLW1vZGFsX190b3BfX3RpdGxlXCI+XG4gICAgICAgIDxoMiBjbGFzcz1cImEtaDJcIiBpZD1cImRpYWxvZ190aXRsZVwiPlxuICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5tb2RhbFRpdGxlJyB8IGkxOG4gfX1cbiAgICAgICAgPC9oMj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm8tbW9kYWxfX3RvcF9fY2xvc2VcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHlcIiAoY2xpY2spPVwiY2FuY2VsUmVtb3ZlQ29uZmlybSgpXCI+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJjbG9zZVwiIFtoZWlnaHRdPVwiMzVcIiBbd2lkdGhdPVwiMzVcIj48L3ByeS1pY29uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS50b29sYm94LmNsb3NlJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm0tYnRuLWdyb3VwXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2FuY2VsUmVtb3ZlQ29uZmlybSgpXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tc2Vjb25kYXJ5XCI+XG4gICAgICAgIHt7ICdAcHJ5LnRvb2xib3gubWFuaWZlc3QuY2xvc2UnIHwgaTE4biB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiAoY2xpY2spPVwiY29uZmlybVJlbW92ZSgpXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiPlxuICAgICAgICB7eyAnQHByeS50b29sYm94Lm1hbmlmZXN0LnZhbGlkYXRlJyB8IGkxOG4gfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
616
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9kYXNoYm9hcmQvY29tcG9uZW50cy9kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvbGliL2Rhc2hib2FyZC9jb21wb25lbnRzL2Rhc2hib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVcsYUFBYSxFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBRU4sTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUViLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sS0FBSyxNQUFNLHFCQUFxQixDQUFDO0FBQ3hDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsS0FBSyxFQUNMLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sU0FBUyxFQUNULEdBQUcsRUFFSCxFQUFFLEVBQ0YsU0FBUyxFQUNWLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUNMLG1CQUFtQixFQUlwQixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZFLE9BQU8s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LEdBQUcsSUFBSSxDQUFDLFFBQVM7Z0JBQ2pCLElBQUksRUFBRTtvQkFDSixHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO29CQUM5QixHQUFHLFVBQVU7aUJBQ2Q7YUFDRjtTQUNGLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs4R0F6dkJVLGtCQUFrQjtrR0FBbEIsa0JBQWtCLHFaQVNPLFdBQVcsa0lBSWpDLDJCQUEyQix1RUNwRjNDLG1nTUFzSkE7OzJGRC9FYSxrQkFBa0I7a0JBSjlCLFNBQVM7K0JBQ0UsZUFBZTt3SkFZMEIsYUFBYTtzQkFBL0QsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUlOLGFBQWE7c0JBQXZELFlBQVk7dUJBQUMsMkJBQTJCO2dCQVc1QixlQUFlO3NCQUEzQixLQUFLO2dCQUlPLGdCQUFnQjtzQkFBNUIsS0FBSztnQkFJRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFYSxPQUFPO3NCQUF6QixTQUFTO3VCQUFDLE1BQU07Z0JBZVIsVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBzaWduYWwsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbC9lczYnO1xuaW1wb3J0IHtcbiAgYXVkaXRUaW1lLFxuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGNvbWJpbmVMYXRlc3RXaXRoLFxuICBkZWxheSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgZnJvbUV2ZW50LFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBzd2l0Y2hNYXBcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEaXNwbGF5T3B0aW9ucyB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWwvZGlzcGxheS1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBEYXNoYm9hcmRHcmlkTGF5b3V0LFxuICBEYXNoYm9hcmRNYW5pZmVzdCxcbiAgV2lkZ2V0TGF5b3V0LFxuICBXaWRnZXRNYW5pZmVzdFxufSBmcm9tICcuLi8uLi9jb3JlL21vZGVsL21hbmlmZXN0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBNSU1FX1RZUEVfUkVTVUxUU0VUIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbC9taW1ldHlwZS1yZXN1bHRzZXQuY29uc3RhbnQnO1xuaW1wb3J0IHsgQ2F0ZWdvcnlBY3Rpb25zIH0gZnJvbSAnLi4vLi4vY29yZS9zdG9yZS9jYXRlZ29yeS9jYXRlZ29yeS5hY3Rpb25zJztcbmltcG9ydCB7IENsYXNzQWN0aW9ucyB9IGZyb20gJy4uLy4uL2NvcmUvc3RvcmUvY2xhc3MvY2xhc3MuYWN0aW9ucyc7XG5pbXBvcnQgeyBDb25maWdBY3Rpb25zIH0gZnJvbSAnLi4vLi4vY29yZS9zdG9yZS9jb25maWcvY29uZmlnLmFjdGlvbnMnO1xuaW1wb3J0IHsgQ29uZmlnU2VsZWN0b3JzIH0gZnJvbSAnLi4vLi4vY29yZS9zdG9yZS9jb25maWcvY29uZmlnLnNlbGVjdG9ycyc7XG5pbXBvcnQgeyBEYXRhU291cmNlQWN0aW9ucyB9IGZyb20gJy4uLy4uL2NvcmUvc3RvcmUvZGF0YS1zb3VyY2UvZGF0YS1zb3VyY2UuYWN0aW9ucyc7XG5pbXBvcnQgeyBGaWVsZEFjdGlvbnMgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL2ZpZWxkL2ZpZWxkLmFjdGlvbnMnO1xuaW1wb3J0IHsgUmVsYXRpb25UeXBlc0FjdGlvbnMgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL3JlbGF0aW9uLXR5cGVzL3JlbGF0aW9uLXR5cGVzLmFjdGlvbnMnO1xuaW1wb3J0IHsgV2lkZ2V0UGxhY2VtZW50VXRpbHMgfSBmcm9tICcuLi9jb21wb25lbnRzL3dpZGdldHMvd2lkZ2V0LXBsYWNlbWVudC93aWRnZXQtcGxhY2VtZW50LnV0aWxzJztcbmltcG9ydCB7IERhc2hib2FyZEFjdGlvbnMsIERhc2hib2FyZENlbGxQYXJhbXMsIFZpZXdNb2RlIH0gZnJvbSAnLi4vc3RvcmUvZGFzaGJvYXJkLmFjdGlvbnMnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9DT0xVTU5TX05VTUJFUixcbiAgREVGQVVMVF9HQVBfUFgsXG4gIERFRkFVTFRfUk9XX0hFSUdIVF9QWCxcbiAgREVGQVVMVF9ST1dTX05VTUJFUlxufSBmcm9tICcuLi9zdG9yZS9kYXNoYm9hcmQuY29udGFudHMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkU2VsZWN0b3JzIH0gZnJvbSAnLi4vc3RvcmUvZGFzaGJvYXJkLnNlbGVjdG9ycyc7XG5pbXBvcnQgeyBzb2x2ZUNvbGxpc2lvbnMgfSBmcm9tICcuL3NvbHZlLWNvbGxpc2lvbnMuZnVuY3Rpb24nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9ubmVyRGlyZWN0aXZlIH0gZnJvbSAnLi9zdWJzY3JpcHRpb25uZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IFdpZGdldEluc3RhbmNpYXRvckNvbXBvbmVudCB9IGZyb20gJy4vd2lkZ2V0cy93aWRnZXQtaW5zdGFuY2lhdG9yL3dpZGdldC1pbnN0YW5jaWF0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IFNlYXJjaFNlbGVjdG9ycyB9IGZyb20gJy4uLy4uL2NvcmUvc3RvcmUvc2VhcmNoL3NlYXJjaC5zZWxlY3RvcnMnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZVNlbGVjdG9ycyB9IGZyb20gJy4uLy4uL2NvcmUvc3RvcmUvZGF0YS1zb3VyY2UvZGF0YS1zb3VyY2Uuc2VsZWN0b3JzJztcblxuZXhwb3J0IGNvbnN0IE1JTUVfVFlQRV9XSURHRVRfTUFOSUZFU1QgPSAnYXBwbGljYXRpb24vd2lkZ2V0LW1hbmlmZXN0JztcbmV4cG9ydCBjb25zdCBNSU1FX1RZUEVfV0lER0VUX1RZUEUgPSAnYXBwbGljYXRpb24vd2lkZ2V0LXR5cGUtJztcbmV4cG9ydCBjb25zdCBNSU1FX1RZUEVfV0lER0VUX1NJWkUgPSAnYXBwbGljYXRpb24vd2lkZ2V0LXNpemUtJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LWRhc2hib2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERhc2hib2FyZENvbXBvbmVudCBleHRlbmRzIFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIG1hbmlmZXN0OiBEYXNoYm9hcmRNYW5pZmVzdCB8IG51bGwgPSBudWxsO1xuICB3aW5kb3dNYW5pZmVzdCQ6IE9ic2VydmFibGU8RGFzaGJvYXJkTWFuaWZlc3Q+O1xuICBtb2RlRWRpdGlvbiA9IGZhbHNlO1xuICBtb2RlRWRpdGlvbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGFjdGlvblR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgc3RhdGljRGFzaGJvYXJkJDogQmVoYXZpb3JTdWJqZWN0PERhc2hib2FyZE1hbmlmZXN0IHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhc2hib2FyZE1hbmlmZXN0IHwgbnVsbD4obnVsbCk7XG4gIHN0YWNrZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGluZGV4Rm9yUmVtb3ZhbDogbnVtYmVyID0gLTE7XG4gIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlTW9kYWwnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIHRlbXBsYXRlTW9kYWwhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBzZXBhcmF0b3JzJDogT2JzZXJ2YWJsZTxXaWRnZXRMYXlvdXRbXT47XG4gIG5vbkZpbGxlcldpZGdldHMkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIGxvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBAVmlld0NoaWxkcmVuKFdpZGdldEluc3RhbmNpYXRvckNvbXBvbmVudCkgaW5zdGFuY2lhdG9ycz86IFF1ZXJ5TGlzdDxXaWRnZXRJbnN0YW5jaWF0b3JDb21wb25lbnQ+O1xuICBkYXRhRmV0Y2hpbmckOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcbiAgcGFyYW1zOiBEYXNoYm9hcmRDZWxsUGFyYW1zID0ge30gYXMgRGFzaGJvYXJkQ2VsbFBhcmFtcztcbiAgZm9yY2VNb2RlRWRpdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHdpZHRoID0gc2lnbmFsKDEwKTtcbiAgaGVpZ2h0ID0gc2lnbmFsKDEwKTtcblxuICBnZXQgd2lkZ2V0c0luc3RhbmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW5jaWF0b3JzPy5tYXAoKGluc3RhbmNpYXRvcikgPT4gaW5zdGFuY2lhdG9yLmluc3RhbmNpYXRlZENvbXBvbmVudC5pbnN0YW5jZSkgPz8gW107XG4gIH1cblxuICBASW5wdXQoKSBzZXQgc3RhdGljRGFzaGJvYXJkKHdpbmRvdzogRGFzaGJvYXJkTWFuaWZlc3QpIHtcbiAgICB0aGlzLnN0YXRpY0Rhc2hib2FyZCQubmV4dCh3aW5kb3cpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZvcmNlTW9kZUVkaXRpb24obW9kZTogYm9vbGVhbikge1xuICAgIHRoaXMuZm9yY2VNb2RlRWRpdGlvbiQubmV4dChtb2RlKTtcbiAgfVxuXG4gIEBJbnB1dCgpIENsb3NlT25EcmFnT3V0ID0gdHJ1ZTtcbiAgQElucHV0KCkgZGlzcGxheU9wdGlvbnM/OiBEaXNwbGF5T3B0aW9ucztcbiAgQElucHV0KCkgbm9CYWNrZ3JvdW5kID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnZ3JpZCcpIGdyaWRSZWYhOiBFbGVtZW50UmVmO1xuICBwcml2YXRlIGNhbkNhbGN1bGF0ZVZpZXcgPSBmYWxzZTtcbiAgdGFyZ2V0SW5kZXhlcyQ6IE9ic2VydmFibGU8bnVtYmVyW10+O1xuICBkYXNoYm9hcmRQYXJhbXM6IERhc2hib2FyZENlbGxQYXJhbXMgPSB7XG4gICAgZ3JpZFdpZHRoOiAxLFxuICAgIGdyaWRIZWlnaHQ6IDEsXG4gICAgZ3JpZEdhcDogREVGQVVMVF9HQVBfUFgsXG4gICAgY29sdW1uczogREVGQVVMVF9DT0xVTU5TX05VTUJFUixcbiAgICBjZWxsV2lkdGg6IDEsXG4gICAgY2VsbEhlaWdodDogREVGQVVMVF9ST1dfSEVJR0hUX1BYLFxuICAgIHJvd3M6IERFRkFVTFRfUk9XU19OVU1CRVIsXG4gICAgb2Zmc2V0TGVmdDogMCxcbiAgICBvZmZzZXRUb3A6IDAsXG4gICAgbW9iaWxlTW9kZTogZmFsc2VcbiAgfTtcbiAgQElucHV0KCkgYnJlYWtwb2ludDogbnVtYmVyID0gMDtcbiAgQE91dHB1dCgpIHJvd0hlaWdodCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgcm93cyA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBjdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0OiBXaWRnZXRNYW5pZmVzdCB8IG51bGwgPSBudWxsO1xuICBpbml0aWFsV2lkZ2V0TWFuaWZlc3RMaXN0OiBXaWRnZXRNYW5pZmVzdFtdID0gW107XG4gIG1vdmU6IHtcbiAgICBpbml0aWFsWDogbnVtYmVyO1xuICAgIGluaXRpYWxZOiBudW1iZXI7XG4gICAgcHJldmlvdXNYOiBudW1iZXI7XG4gICAgcHJldmlvdXNZOiBudW1iZXI7XG4gIH0gPSB7XG4gICAgaW5pdGlhbFg6IC0xLFxuICAgIGluaXRpYWxZOiAtMSxcbiAgICBwcmV2aW91c1g6IC0xLFxuICAgIHByZXZpb3VzWTogLTFcbiAgfTtcbiAgZ3JpZFRlbXBsYXRlUm93cyQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgZ3JpZFRlbXBsYXRlQ29sdW1ucyQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgRGFzaGJvYXJkR3JpZExheW91dCA9IERhc2hib2FyZEdyaWRMYXlvdXQ7XG4gIGxheW91dDogc3RyaW5nID0gRGFzaGJvYXJkR3JpZExheW91dC5NQU5VQUw7XG4gIGJhY2tncm91bmRBcmVhJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBwcml2YXRlIGNvbmZpcm1SZW1vdmVSZWY/OiBPdmVybGF5UmVmO1xuICBBcnJheTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlPGFueT4sXG4gICAgcHJpdmF0ZSBvdmVybGF5OiBPdmVybGF5LFxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5sb2FkaW5nJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5sb2FkaW5nKTtcbiAgICB0aGlzLmRhdGFGZXRjaGluZyQgPSB0aGlzLnN0b3JlLnNlbGVjdChTZWFyY2hTZWxlY3RvcnMuc2VhcmNoTG9hZGluZykucGlwZShkZWxheSgxMCkpO1xuICAgIHRoaXMubW9kZUVkaXRpb24kID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuZGFzaGJvYXJkRWRpdGlvbk1vZGUpLFxuICAgICAgdGhpcy5mb3JjZU1vZGVFZGl0aW9uJFxuICAgIF0pLnBpcGUobWFwKChbc3RvcmVNb2RlLCBmb3JjZU1vZGVdKSA9PiAoZm9yY2VNb2RlID09PSB1bmRlZmluZWQgPyBzdG9yZU1vZGUgOiBmb3JjZU1vZGUpKSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMubW9kZUVkaXRpb24kLnN1YnNjcmliZSgobW9kZSkgPT4ge1xuICAgICAgICB0aGlzLm1vZGVFZGl0aW9uID0gbW9kZTtcbiAgICAgICAgaWYgKCFtb2RlKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckFjdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMudGFyZ2V0SW5kZXhlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMudGFyZ2V0VGVuYW50c0luZGV4ZXMpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuZGFzaGJvYXJkQ2VsbFBhcmFtcykuc3Vic2NyaWJlKChwYXJhbXMpID0+ICh0aGlzLmRhc2hib2FyZFBhcmFtcyA9IHBhcmFtcykpXG4gICAgKTtcbiAgICB0aGlzLndpbmRvd01hbmlmZXN0JCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy53aW5kb3dNYW5pZmVzdCkucGlwZShcbiAgICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMuc3RhdGljRGFzaGJvYXJkJCksXG4gICAgICBzd2l0Y2hNYXAoKFt3aW5kb3dNYW5pZmVzdCwgc3RhdGljRGFzaGJvYXJkXSkgPT4gKCFzdGF0aWNEYXNoYm9hcmQgPyBvZih3aW5kb3dNYW5pZmVzdCkgOiBvZihzdGF0aWNEYXNoYm9hcmQpKSksXG4gICAgICBtYXAoKF93TWFuaWZlc3QpID0+IHtcbiAgICAgICAgY29uc3Qgd01hbmlmZXN0ID0gc3RydWN0dXJlZENsb25lKF93TWFuaWZlc3QpO1xuICAgICAgICBpZiAod01hbmlmZXN0LmdyaWQ/LmxheW91dCAmJiB3TWFuaWZlc3QuZ3JpZC5sYXlvdXQgIT09IERhc2hib2FyZEdyaWRMYXlvdXQuTUFOVUFMKSB7XG4gICAgICAgICAgLy8gQ29tcGxldGUgd2l0aCBwbGFjZWhvbGRlcnNcbiAgICAgICAgICBjb25zdCBzaXplID0gV2lkZ2V0UGxhY2VtZW50VXRpbHMuZ2V0TGF5b3V0KHdNYW5pZmVzdC5ncmlkLmxheW91dCk/LnBsYWNlcy5sZW5ndGggPz8gMDtcbiAgICAgICAgICBjb25zdCBwbGFjZXMgPSBXaWRnZXRQbGFjZW1lbnRVdGlscy5wbGFjZW1lbnRPcHRpb25zKFxuICAgICAgICAgICAgeyB0eXBlOiAnZmlsbGVyJywgbGF5b3V0OiB7IHg6IDEsIHk6IDEsIHdpZHRoOiAxLCBoZWlnaHQ6IDEgfSB9LFxuICAgICAgICAgICAgd01hbmlmZXN0LmdyaWQubGF5b3V0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBsZXQgYWRkZWQgPSB0cnVlO1xuICAgICAgICAgIHdoaWxlICh3TWFuaWZlc3Qud2lkZ2V0cy5sZW5ndGggPCBzaXplICYmIGFkZGVkKSB7XG4gICAgICAgICAgICBhZGRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbGFjZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgY29uc3QgcG90ZW50aWFsID0geyAuLi5wbGFjZXNbaV0sIG9wdGlvbnM6IHsgaW5kZXg6IGkgfSB9O1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgd01hbmlmZXN0LndpZGdldHNcbiAgICAgICAgICAgICAgICAgIC5tYXAoKHdpZGdldDogV2lkZ2V0TWFuaWZlc3QpID0+IFdpZGdldFBsYWNlbWVudFV0aWxzLmFyZURpc2pvaW50KHdpZGdldCwgcG90ZW50aWFsKSlcbiAgICAgICAgICAgICAgICAgIC5yZWR1Y2UoKGE6IGJvb2xlYW4sIGI6IGJvb2xlYW4pID0+IGEgJiYgYiwgdHJ1ZSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgd01hbmlmZXN0LndpZGdldHMucHVzaChwb3RlbnRpYWwpO1xuICAgICAgICAgICAgICAgIGFkZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd01hbmlmZXN0O1xuICAgICAgfSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4gZXF1YWwocCwgYykpXG4gICAgKTtcbiAgICB0aGlzLm5vbkZpbGxlcldpZGdldHMkID0gdGhpcy53aW5kb3dNYW5pZmVzdCQucGlwZShcbiAgICAgIG1hcCgod01hbmlmZXN0KSA9PiAod01hbmlmZXN0LndpZGdldHMgPz8gW10pLmZpbHRlcigodykgPT4gdy50eXBlICE9PSAnZmlsbGVyJykubGVuZ3RoKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5zdGF0aWNEYXNoYm9hcmQkLnN1YnNjcmliZSgobWFuaWZlc3QpID0+IHtcbiAgICAgICAgaWYgKCEhbWFuaWZlc3QpIHtcbiAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy5hc3NlcnRSZXN1bHRTZXRzKHtcbiAgICAgICAgICAgICAgc3RhdGljTWFuaWZlc3Q6IG1hbmlmZXN0XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLndpbmRvd01hbmlmZXN0JCwgdGhpcy5zdG9yZS5zZWxlY3QoRGF0YVNvdXJjZVNlbGVjdG9ycy5nZXREYXRhU291cmNlcyldKS5zdWJzY3JpYmUoXG4gICAgICAgIChbbWFuaWZlc3QsIGRhdGFzZXRzXSkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhc2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuYXNzZXJ0UmVzdWx0U2V0cyh7fSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKEZpZWxkQWN0aW9ucy5sb2FkKHt9KSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDbGFzc0FjdGlvbnMubG9hZCh7fSkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ2F0ZWdvcnlBY3Rpb25zLmxvYWQoe30pKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuZ2V0TWFwU3R5bGVzKCkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGF0YVNvdXJjZUFjdGlvbnMubG9hZCh7fSkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goUmVsYXRpb25UeXBlc0FjdGlvbnMubG9hZCh7fSkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ29uZmlnQWN0aW9ucy5sb2FkQ3VzdG9taXphdGlvbih7fSkpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxuICAgICAgICAucGlwZShhdWRpdFRpbWUoMTAwKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVWaWV3KCk7XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLndpbmRvd01hbmlmZXN0JCwgdGhpcy5tb2RlRWRpdGlvbiRdKVxuICAgICAgICAucGlwZShhdWRpdFRpbWUoMTAwKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVWaWV3KCk7XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBmcm9tRXZlbnQod2luZG93LCAna2V5ZG93bicpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgoJGV2ZW50OiBFdmVudCkgPT4gJGV2ZW50IGFzIEtleWJvYXJkRXZlbnQpLFxuICAgICAgICAgIGZpbHRlcigoJGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiAkZXZlbnQua2V5ID09PSAnTCcgJiYgJGV2ZW50LmN0cmxLZXkgJiYgJGV2ZW50LnNoaWZ0S2V5KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnRvZ2dsZUVkaXRpb25Nb2RlKHt9KSkpXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBmcm9tRXZlbnQod2luZG93LCAnbW91c2V1cCcpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xlYXJBY3Rpb25zKCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoQ29uZmlnU2VsZWN0b3JzLmJyZWFrcG9pbnQpLnN1YnNjcmliZSgoYnApID0+IHtcbiAgICAgICAgdGhpcy5icmVha3BvaW50ID0gYnA7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy53aW5kb3dNYW5pZmVzdCQuc3Vic2NyaWJlKChtYW5pZmVzdCkgPT4ge1xuICAgICAgICB0aGlzLm1hbmlmZXN0ID0gbWFuaWZlc3Q7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmdyaWRMYXlvdXQpLnN1YnNjcmliZSgobGF5b3V0KSA9PiB7XG4gICAgICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5ncmlkVGVtcGxhdGVSb3dzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMud2luZG93TWFuaWZlc3QkLCB0aGlzLnN0YWNrZWQkXSkucGlwZShcbiAgICAgIG1hcCgoW21hbmlmZXN0LCBzdGFja2VkXSkgPT5cbiAgICAgICAgdGhpcy5nZW5lcmF0ZVJvd3MoXG4gICAgICAgICAgc3RhY2tlZCAmJiB0aGlzLm1hbmlmZXN0XG4gICAgICAgICAgICA/IHRoaXMubWFuaWZlc3Q/LndpZGdldHMubWFwKCh3bSkgPT4gd20ubGF5b3V0LmhlaWdodCkucmVkdWNlKCh3bTEsIHdtMikgPT4gd20xICsgd20yLCAwKVxuICAgICAgICAgICAgOiBtYW5pZmVzdC5ncmlkPy5yb3dzID8/IERFRkFVTFRfUk9XU19OVU1CRVJcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLmdyaWRUZW1wbGF0ZUNvbHVtbnMkID0gY29tYmluZUxhdGVzdChbdGhpcy53aW5kb3dNYW5pZmVzdCQsIHRoaXMuc3RhY2tlZCRdKS5waXBlKFxuICAgICAgbWFwKChbbWFuaWZlc3QsIHN0YWNrZWRdKSA9PiB0aGlzLmdlbmVyYXRlQ29sdW1ucyhzdGFja2VkID8gMSA6IG1hbmlmZXN0LmdyaWQ/LmNvbHVtbnMgfHwgREVGQVVMVF9DT0xVTU5TX05VTUJFUikpXG4gICAgKTtcblxuICAgIHRoaXMuYmFja2dyb3VuZEFyZWEkID0gY29tYmluZUxhdGVzdChbdGhpcy53aW5kb3dNYW5pZmVzdCQsIHRoaXMuc3RhY2tlZCRdKS5waXBlKFxuICAgICAgbWFwKChbbWFuaWZlc3QsIHN0YWNrZWRdKSA9PlxuICAgICAgICAhc3RhY2tlZFxuICAgICAgICAgID8gYDEvMS8keyhtYW5pZmVzdC5ncmlkPy5yb3dzID8/IERFRkFVTFRfUk9XU19OVU1CRVIpICsgMX0vJHtcbiAgICAgICAgICAgICAgKG1hbmlmZXN0LmdyaWQ/LmNvbHVtbnMgPz8gREVGQVVMVF9DT0xVTU5TX05VTUJFUikgKyAxXG4gICAgICAgICAgICB9YFxuICAgICAgICAgIDogYDEvMS8keyhtYW5pZmVzdC5ncmlkPy5jb2x1bW5zID8/IERFRkFVTFRfQ09MVU1OU19OVU1CRVIpICsgMX0vMWBcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zZXBhcmF0b3JzJCA9IHRoaXMuc3RvcmVcbiAgICAgIC5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmdyaWRMYXlvdXQpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChsYXlvdXQpID0+XG4gICAgICAgICAgbGF5b3V0ID09PSBEYXNoYm9hcmRHcmlkTGF5b3V0Lk1BTlVBTCA/IFtdIDogV2lkZ2V0UGxhY2VtZW50VXRpbHMuZ2V0TGF5b3V0KGxheW91dCk/LnBsYWNlcyA/PyBbXVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZGlzcGxheU9wdGlvbnMpXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZURpc3BsYXlPcHRpb25zKHsgbW9kZTogVmlld01vZGUuQ1VTVE9NLCBjdXN0b21EaXNwbGF5OiB0aGlzLmRpc3BsYXlPcHRpb25zIH0pXG4gICAgICApO1xuICAgIHRoaXMudXBkYXRlU2VsZlNpemUoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmNhbkNhbGN1bGF0ZVZpZXcgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlU2VsZlNpemUoKTtcbiAgfVxuXG4gIHVwZGF0ZVNlbGZTaXplKCkge1xuICAgIHRoaXMud2lkdGguc2V0KHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCk7XG4gICAgdGhpcy5oZWlnaHQuc2V0KHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQpO1xuICB9XG5cbiAgLyoqKlxuICAgKiBNYW5hZ2UgZGlzcGxheVxuICAgKi9cbiAgY2FsY3VsYXRlVmlldygpIHtcbiAgICBpZiAodGhpcy5jYW5DYWxjdWxhdGVWaWV3KSB7XG4gICAgICBsZXQgZWxlbWVudCA9IHRoaXMuZ3JpZFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgd2hpbGUgKGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0ID09PSAwICYmICEhZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdyaWRXaWR0aCA9ICg8SFRNTEVsZW1lbnQ+ZWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICBjb25zdCBtb2JpbGVNb2RlID0gZ3JpZFdpZHRoIDwgdGhpcy5icmVha3BvaW50O1xuICAgICAgdGhpcy5zdGFja2VkJC5uZXh0KHRoaXMuZGFzaGJvYXJkUGFyYW1zLm1vYmlsZU1vZGUgJiYgIXRoaXMubW9kZUVkaXRpb24pO1xuICAgICAgY29uc3Qgcm93cyA9ICF0aGlzLmRpc3BsYXlJc1N0YWNrZWRcbiAgICAgICAgPyAoISF0aGlzLm1hbmlmZXN0ICYmICEhdGhpcy5tYW5pZmVzdC5ncmlkICYmIHRoaXMubWFuaWZlc3QuZ3JpZC5yb3dzKSB8fCBERUZBVUxUX1JPV1NfTlVNQkVSXG4gICAgICAgIDogdGhpcy5tYW5pZmVzdD8ud2lkZ2V0cy5yZWR1Y2UoKHA6IG51bWJlciwgYzogV2lkZ2V0TWFuaWZlc3QpID0+IHAgKyBjLmxheW91dC5oZWlnaHQsIDApID8/IDE7XG5cbiAgICAgIHRoaXMucGFyYW1zID0ge1xuICAgICAgICBncmlkV2lkdGgsXG4gICAgICAgIC8vIENhbGN1bGF0ZSBoZWlnaHQgdG8gcGFyZW50IHRoZSBwYXJlbnQnc1xuICAgICAgICBncmlkSGVpZ2h0OiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCxcbiAgICAgICAgZ3JpZEdhcDogMSxcbiAgICAgICAgY29sdW1uczogKCEhdGhpcy5tYW5pZmVzdCAmJiAhIXRoaXMubWFuaWZlc3QuZ3JpZCAmJiB0aGlzLm1hbmlmZXN0LmdyaWQuY29sdW1ucykgfHwgREVGQVVMVF9DT0xVTU5TX05VTUJFUixcbiAgICAgICAgY2VsbEhlaWdodDogMSxcbiAgICAgICAgcm93cyxcbiAgICAgICAgY2VsbFdpZHRoOiAwLFxuICAgICAgICBvZmZzZXRMZWZ0OiB0aGlzLmdyaWRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0LFxuICAgICAgICBvZmZzZXRUb3A6IHRoaXMuZ3JpZFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcCxcbiAgICAgICAgbW9iaWxlTW9kZVxuICAgICAgfTtcbiAgICAgIHRoaXMucGFyYW1zLmdyaWRHYXAgPVxuICAgICAgICB0aGlzLnBhcmFtcy5yb3dzICogdGhpcy5wYXJhbXMuY2VsbEhlaWdodCA8IHRoaXMucGFyYW1zLmdyaWRIZWlnaHRcbiAgICAgICAgICA/ICEhdGhpcy5tYW5pZmVzdCAmJiAhIXRoaXMubWFuaWZlc3QuZ3JpZFxuICAgICAgICAgICAgPyB0aGlzLm1hbmlmZXN0LmdyaWQuZ2FwIHx8IERFRkFVTFRfR0FQX1BYXG4gICAgICAgICAgICA6IERFRkFVTFRfR0FQX1BYXG4gICAgICAgICAgOiAwO1xuICAgICAgdGhpcy5wYXJhbXMuY2VsbEhlaWdodCA9IE1hdGgubWF4KFxuICAgICAgICAwLFxuICAgICAgICAodGhpcy5wYXJhbXMuZ3JpZEhlaWdodCAtICh0aGlzLnBhcmFtcy5yb3dzIC0gMSkgKiB0aGlzLnBhcmFtcy5ncmlkR2FwKSAvIHRoaXMucGFyYW1zLnJvd3NcbiAgICAgICk7XG4gICAgICB0aGlzLnBhcmFtcy5jZWxsV2lkdGggPVxuICAgICAgICAodGhpcy5wYXJhbXMuZ3JpZFdpZHRoIC0gKHRoaXMucGFyYW1zLmNvbHVtbnMgLSAxKSAqIHRoaXMucGFyYW1zLmdyaWRHYXApIC8gdGhpcy5wYXJhbXMuY29sdW1ucztcblxuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZURhc2hib2FyZFBhcmFtcyh7IHBhcmFtczogdGhpcy5wYXJhbXMgfSkpO1xuXG4gICAgICB0aGlzLnJvd3MubmV4dCh0aGlzLnBhcmFtcy5yb3dzKTtcbiAgICAgIHRoaXMucm93SGVpZ2h0Lm5leHQodGhpcy5wYXJhbXMuY2VsbEhlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRpc3BsYXlJc1N0YWNrZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tlZCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIGdyaWRDb2x1bW4obGF5b3V0OiBXaWRnZXRMYXlvdXQpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmRpc3BsYXlJc1N0YWNrZWQgfHwgIWxheW91dCkge1xuICAgICAgcmV0dXJuICcxIC8gMSc7XG4gICAgfVxuICAgIGlmIChsYXlvdXQud2lkdGggPiAxKSB7XG4gICAgICByZXR1cm4gYCR7TWF0aC5taW4obGF5b3V0LngsIHRoaXMucGFyYW1zLmNvbHVtbnMgLSBsYXlvdXQud2lkdGggKyAxKX0gLyAke01hdGgubWluKFxuICAgICAgICBsYXlvdXQueCArIGxheW91dC53aWR0aCxcbiAgICAgICAgdGhpcy5wYXJhbXMuY29sdW1ucyArIDFcbiAgICAgICl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke2xheW91dC54fWA7XG4gICAgfVxuICB9XG5cbiAgZ3JpZFJvdyhsYXlvdXQ6IFdpZGdldExheW91dCk6IHN0cmluZyB7XG4gICAgaWYgKCFsYXlvdXQpIHtcbiAgICAgIHJldHVybiAnMSc7XG4gICAgfVxuICAgIGlmICh0aGlzLmRpc3BsYXlJc1N0YWNrZWQpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzSGVpZ2h0ID0gdGhpcy5tYW5pZmVzdD8ud2lkZ2V0c1xuICAgICAgICAuZmlsdGVyKCh3bTogV2lkZ2V0TWFuaWZlc3QpID0+ICh3bS5sYXlvdXQueSA9PT0gbGF5b3V0LnkgJiYgd20ubGF5b3V0LnggPCBsYXlvdXQueCkgfHwgd20ubGF5b3V0LnkgPCBsYXlvdXQueSlcbiAgICAgICAgLnJlZHVjZSgocDogbnVtYmVyLCBjOiBXaWRnZXRNYW5pZmVzdCkgPT4gcCArIGMubGF5b3V0LmhlaWdodCwgMSk7XG4gICAgICByZXR1cm4gYCR7cHJldmlvdXNIZWlnaHQgPz8gMX0gLyAkeyhwcmV2aW91c0hlaWdodCA/PyAxKSArIGxheW91dC5oZWlnaHR9YDtcbiAgICB9XG4gICAgaWYgKGxheW91dC5oZWlnaHQgPiAxKSB7XG4gICAgICByZXR1cm4gYCR7TWF0aC5tYXgoMSwgTWF0aC5taW4obGF5b3V0LnksIHRoaXMucGFyYW1zLnJvd3MgLSBsYXlvdXQuaGVpZ2h0ICsgMSkpfSAvICR7TWF0aC5taW4oXG4gICAgICAgIGxheW91dC55ICsgbGF5b3V0LmhlaWdodCxcbiAgICAgICAgdGhpcy5wYXJhbXMucm93cyArIDFcbiAgICAgICl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke2xheW91dC55fWA7XG4gICAgfVxuICB9XG5cbiAgZ2VuZXJhdGVSb3dzKHJvd3M6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIEFycmF5KHJvd3MpLmZpbGwoJzFmcicpLmpvaW4oJyAnKTtcbiAgfVxuXG4gIGdlbmVyYXRlQ29sdW1ucyhjb2x1bW5zOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBBcnJheShjb2x1bW5zKS5maWxsKCcxZnInKS5qb2luKCcgJyk7XG4gIH1cblxuICAvKioqXG4gICAqIERpcmVjdCBhY3Rpb25zIG9uIHdpZGdldHNcbiAgICovXG5cbiAgcmVtb3ZlKGk6IG51bWJlcikge1xuICAgIGNvbnN0IGxpc3RXaWRnZXRNYW5pZmVzdHMgPSBbLi4uKHRoaXMubWFuaWZlc3QgfHwgeyB3aWRnZXRzOiBbXSB9KS53aWRnZXRzXTtcbiAgICBsaXN0V2lkZ2V0TWFuaWZlc3RzLnNwbGljZShpLCAxKS5maWx0ZXIoKHdpZGdldCkgPT4gd2lkZ2V0LnR5cGUgIT09ICdmaWxsZXInKTtcblxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZURhc2hib2FyZE1hbmlmZXN0KHtcbiAgICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgICAuLi50aGlzLm1hbmlmZXN0LFxuICAgICAgICAgIHdpZGdldHM6IGxpc3RXaWRnZXRNYW5pZmVzdHNcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbW92ZUluTmV3V2luZG93KHdpZGdldEluZGV4OiBudW1iZXIsIHRhcmdldEluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMubW92ZVdpZGdldCh7IHdpZGdldEluZGV4LCB0YXJnZXRJbmRleCB9KSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnRvZ2dsZUVkaXRpb25Nb2RlKHsgZm9yY2U6IGZhbHNlIH0pKTtcbiAgfVxuXG4gIG1heGltaXplKHdpZGdldEluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMubWF4aW1pemVXaWRnZXQoeyB3aWRnZXRJbmRleCB9KSk7XG4gIH1cblxuICAvKioqXG4gICAqIE1hbmFnZSBkcmFnIG4gZHJvcCwgbW92ZSwgcmVzaXplXG4gICAqL1xuXG4gIHByZXBhcmVNb2RpZmljYXRpb24oJGV2ZW50OiBNb3VzZUV2ZW50LCBpbmRleE1hbmlmZXN0OiBudW1iZXIpIHtcbiAgICB0aGlzLm1vdmUuaW5pdGlhbFggPSAkZXZlbnQuY2xpZW50WDtcbiAgICB0aGlzLm1vdmUuaW5pdGlhbFkgPSAkZXZlbnQuY2xpZW50WTtcbiAgICB0aGlzLmluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3QgPSBzdHJ1Y3R1cmVkQ2xvbmUoKHRoaXMubWFuaWZlc3QgfHwgeyB3aWRnZXRzOiBbXSB9KS53aWRnZXRzKTtcbiAgICB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QgPSB0aGlzLmluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3Quc3BsaWNlKGluZGV4TWFuaWZlc3QsIDEpWzBdO1xuICAgIC8vIGNvbnNvbGUubG9nKCdwcmVwYXJlJywgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LCB0aGlzLmluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3QpO1xuICB9XG5cbiAgc3RhcnRSZXNpemUoJGV2ZW50OiBNb3VzZUV2ZW50LCBpbmRleE1hbmlmZXN0OiBudW1iZXIsIGRpcmVjdGlvbjogc3RyaW5nKSB7XG4gICAgdGhpcy5hY3Rpb25UeXBlID0gZGlyZWN0aW9uO1xuICAgIHRoaXMucHJlcGFyZU1vZGlmaWNhdGlvbigkZXZlbnQsIGluZGV4TWFuaWZlc3QpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdzdGFydCByZXNpemUnLCB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QsIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCk7XG4gIH1cblxuICBkcmFnU3RhcnQoJGV2ZW50OiBEcmFnRXZlbnQsIGluZGV4TWFuaWZlc3Q6IG51bWJlcikge1xuICAgIHRoaXMuYWN0aW9uVHlwZSA9ICdtb3ZlJztcbiAgICB0aGlzLnByZXBhcmVNb2RpZmljYXRpb24oJGV2ZW50LCBpbmRleE1hbmlmZXN0KTtcbiAgICBEYXNoYm9hcmRDb21wb25lbnQuYWRkVHJhbnNmZXJNYW5pZmVzdE1ldGFkYXRhKCRldmVudCwgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0ID8/ICh7fSBhcyBXaWRnZXRNYW5pZmVzdCkpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdzdGFydCBtb3ZlJywgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LCB0aGlzLmluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3QpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYWRkVHJhbnNmZXJNYW5pZmVzdE1ldGFkYXRhKCRldmVudDogRHJhZ0V2ZW50LCBtYW5pZmVzdDogV2lkZ2V0TWFuaWZlc3QpIHtcbiAgICBpZiAoISEkZXZlbnQgJiYgISEkZXZlbnQuZGF0YVRyYW5zZmVyICYmICEkZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmluY2x1ZGVzKE1JTUVfVFlQRV9XSURHRVRfTUFOSUZFU1QpKSB7XG4gICAgICAkZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoTUlNRV9UWVBFX1dJREdFVF9NQU5JRkVTVCwgSlNPTi5zdHJpbmdpZnkobWFuaWZlc3QpKTtcbiAgICAgICRldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YShNSU1FX1RZUEVfV0lER0VUX1RZUEUgKyBtYW5pZmVzdC50eXBlLCAndW51c2VkJyk7XG4gICAgICAvLyBQYXNzaW5nIHdpZGdldCBzaXplIGFzIGEgbWltZSB0eXBlLCBzbyB0aGF0IHdlIGNhbiBieXBhc3Mgc2VjdXJpdHkgZm9yIHBsYWNlaG9sZGVyIHNpemUgYXQgdGhlIGFycml2YWwgb2YgdGhlIGRyYWdcbiAgICAgICRldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YShcbiAgICAgICAgTUlNRV9UWVBFX1dJREdFVF9TSVpFICsgYCR7bWFuaWZlc3QubGF5b3V0LndpZHRofS0ke21hbmlmZXN0LmxheW91dC5oZWlnaHR9YCxcbiAgICAgICAgJ3VzZWxlc3MnIC8vIGRhdGEgaXMgaW4gdGhlIG1pbWUgdHlwZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBkcmFnRW50ZXIoJGV2ZW50OiBEcmFnRXZlbnQsIGZvcmNlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCB0eXBlcyA9ICgkZXZlbnQuZGF0YVRyYW5zZmVyIHx8IHsgdHlwZXM6IFsnJ10gfSkudHlwZXM7XG5cbiAgICBpZiAodHlwZXMuaW5jbHVkZXMoTUlNRV9UWVBFX1dJREdFVF9NQU5JRkVTVCkpIHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy50b2dnbGVFZGl0aW9uTW9kZSh7IGZvcmNlOiB0cnVlIH0pKTtcbiAgICAgIHRoaXMuYWN0aW9uVHlwZSA9ICdtb3ZlJztcbiAgICB9XG4gIH1cblxuICBjaGVja0ZvckRyYWdFbnRlcigkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdCkge1xuICAgICAgLy8gY3JlYXRlIHBsYWNlaG9sZGVyIGFzIGEgZHJhZyBlbnRlcmVkIHRoZSBjb21wb25lbnQsIGdvIGludG8gZWRpdGlvbiBtb2RlIGFuZCBtb3ZlIGFjdGlvbiBpZiBpdCdzIGEgd2lkZ2V0IGJlaW5nIGRyYWdnZWRcbiAgICAgIGNvbnN0IHR5cGVzID0gKCgkZXZlbnQgYXMgRHJhZ0V2ZW50KS5kYXRhVHJhbnNmZXIgfHwgeyB0eXBlczogWycnXSB9KS50eXBlcztcbiAgICAgIGlmICh0eXBlcy5pbmNsdWRlcyhNSU1FX1RZUEVfV0lER0VUX01BTklGRVNUKSkge1xuICAgICAgICB0aGlzLmFjdGlvblR5cGUgPSAnbW92ZSc7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy50b2dnbGVFZGl0aW9uTW9kZSh7IGZvcmNlOiB0cnVlIH0pKTtcblxuICAgICAgICAvLyBPbiBkcmFnIGVudGVyLCB3ZSBvbmx5IGNhbiBwdXQgYSBwbGFjZWhvbGRlciwgc2luY2UgZm9yIHNlY3VyaXR5IHJlYXNvbnMsIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhLXRyYW5zZmVyIGlzIG5vdCBhdmFpbGFibGVcbiAgICAgICAgdGhpcy5tb3ZlLmluaXRpYWxYID0gdGhpcy5kYXNoYm9hcmRQYXJhbXMub2Zmc2V0TGVmdDtcbiAgICAgICAgdGhpcy5tb3ZlLmluaXRpYWxZID0gdGhpcy5kYXNoYm9hcmRQYXJhbXMub2Zmc2V0VG9wO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmdldFRhcmdldCgkZXZlbnQsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0ID0ge1xuICAgICAgICAgIHR5cGU6ICdwbGFjZWhvbGRlcicsXG4gICAgICAgICAgbGF5b3V0OiB7IHg6IHRhcmdldD8ueCA/PyAwLCB5OiB0YXJnZXQ/LnkgPz8gMCwgd2lkdGg6IDEsIGhlaWdodDogMSB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCA9IHN0cnVjdHVyZWRDbG9uZSgodGhpcy5tYW5pZmVzdCB8fCB7IHdpZGdldHM6IFtdIH0pLndpZGdldHMpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnY3JlYXRlIHBsYWNlaG9sZGVyJywgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LCB0aGlzLmluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3QpO1xuXG4gICAgICAgIC8vIFdlIHBhc3NlZCB3aWRnZXQgc2l6ZSBhcyBhIG1pbWV0eXBlIHNvIHRoYXQgd2UgY2FuIHN0aWxsIHJlYWQgaXQgd2l0aG91dCBzZWN1cml0eSBpc3N1ZXNcbiAgICAgICAgY29uc3Qgd2lkZ2V0U2l6ZU1pbWVUeXBlID0gdHlwZXMuZmluZCgodHlwZSkgPT4gdHlwZS5pbmNsdWRlcyhNSU1FX1RZUEVfV0lER0VUX1NJWkUpKTtcbiAgICAgICAgaWYgKCEhd2lkZ2V0U2l6ZU1pbWVUeXBlKSB7XG4gICAgICAgICAgY29uc3QgW18sIF8yLCB3LCBoXSA9IHdpZGdldFNpemVNaW1lVHlwZS5zcGxpdCgnLScpO1xuICAgICAgICAgIHRoaXMuY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdC5sYXlvdXQud2lkdGggPSBwYXJzZUludCh3LCAxMCk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LmxheW91dC5oZWlnaHQgPSBwYXJzZUludChoLCAxMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVXNlIGdyaWQgc2l6ZVxuICAgICAgICAgIGNvbnN0IGxheW91dCA9IChXaWRnZXRQbGFjZW1lbnRVdGlscy5nZXRMYXlvdXQodGhpcy5sYXlvdXQpPy5wbGFjZXMgPz8gW10pW1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsV2lkZ2V0TWFuaWZlc3RMaXN0Lmxlbmd0aFxuICAgICAgICAgIF0gPz8ge1xuICAgICAgICAgICAgd2lkdGg6IDEsXG4gICAgICAgICAgICBoZWlnaHQ6IDFcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdC5sYXlvdXQud2lkdGggPSBsYXlvdXQud2lkdGg7XG4gICAgICAgICAgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LmxheW91dC5oZWlnaHQgPSBsYXlvdXQuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2UgcGFzc2VkIHRoZSB0eXBlIGFzIGEgaGVhZGVyIG5hbWUgc28gdGhhdCB3ZSBjYW4gc3RpbGwgYWNjZXNzIGl0IHdpdGhvdXQgc2VjdXJpdHkgaXNzdWVzXG4gICAgICAgIGNvbnN0IHdpZGdldFR5cGUgPSB0eXBlcy5maW5kKCh0eXBlKSA9PiB0eXBlLmluY2x1ZGVzKE1JTUVfVFlQRV9XSURHRVRfVFlQRSkpO1xuICAgICAgICBpZiAoISF3aWRnZXRUeXBlKSB7XG4gICAgICAgICAgY29uc3QgW18sIF8yLCB0eXBlXSA9IHdpZGdldFR5cGUuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QudHlwZSA9IHR5cGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXNldCBpbml0aWFsIHBvc2l0aW9uIGZvciB0aGUgb25lIHdlIGp1c3QgY2FsY3VsYXRlZCwgc28gd2UgY2FuIGNvbnRpbnVlIHByb3Blcmx5IG1vdmUgdGhlIHdpZGdldFxuICAgICAgICB0aGlzLm1vdmUuaW5pdGlhbFggPSAkZXZlbnQucGFnZVg7XG4gICAgICAgIHRoaXMubW92ZS5pbml0aWFsWSA9ICRldmVudC5wYWdlWTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRUYXJnZXQoJGV2ZW50OiBNb3VzZUV2ZW50LCBvcHRpbWl6ZSA9IHRydWUpIHtcbiAgICBjb25zdCBkWCA9ICRldmVudC5wYWdlWCAtIHRoaXMubW92ZS5pbml0aWFsWDtcbiAgICBjb25zdCBkWSA9ICRldmVudC5wYWdlWSAtIHRoaXMubW92ZS5pbml0aWFsWTtcblxuICAgIGNvbnN0IHRhcmdldCA9IHtcbiAgICAgIHg6XG4gICAgICAgIGRYID09PSAwXG4gICAgICAgICAgPyAwXG4gICAgICAgICAgOiBNYXRoLnJvdW5kKFxuICAgICAgICAgICAgICAoKGRYIC8gTWF0aC5hYnMoZFgpKSAqIChNYXRoLmFicyhkWCkgLSAwLjUgKiB0aGlzLmRhc2hib2FyZFBhcmFtcy5jZWxsV2lkdGgpKSAvXG4gICAgICAgICAgICAgICAgKHRoaXMuZGFzaGJvYXJkUGFyYW1zLmNlbGxXaWR0aCArIHRoaXMuZGFzaGJvYXJkUGFyYW1zLmdyaWRHYXApXG4gICAgICAgICAgICApLFxuICAgICAgeTpcbiAgICAgICAgZFkgPT09IDBcbiAgICAgICAgICA/IDBcbiAgICAgICAgICA6IE1hdGgucm91bmQoXG4gICAgICAgICAgICAgICgoZFkgLyBNYXRoLmFicyhkWSkpICogKE1hdGguYWJzKGRZKSAtIDAuNSAqIHRoaXMuZGFzaGJvYXJkUGFyYW1zLmNlbGxIZWlnaHQpKSAvXG4gICAgICAgICAgICAgICAgKHRoaXMuZGFzaGJvYXJkUGFyYW1zLmNlbGxIZWlnaHQgKyB0aGlzLmRhc2hib2FyZFBhcmFtcy5ncmlkR2FwKVxuICAgICAgICAgICAgKVxuICAgIH07XG5cbiAgICBpZiAoIW9wdGltaXplIHx8IHRhcmdldC54ICE9PSB0aGlzLm1vdmUucHJldmlvdXNYIHx8IHRhcmdldC55ICE9PSB0aGlzLm1vdmUucHJldmlvdXNZKSB7XG4gICAgICB0aGlzLm1vdmUucHJldmlvdXNYID0gdGFyZ2V0Lng7XG4gICAgICB0aGlzLm1vdmUucHJldmlvdXNZID0gdGFyZ2V0Lnk7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbW92aW5nTW91c2UoJGV2ZW50OiBNb3VzZUV2ZW50LCBvcHRpbWl6ZSA9IHRydWUpIHtcbiAgICBpZiAodGhpcy5tb2RlRWRpdGlvbiAmJiAhIXRoaXMuYWN0aW9uVHlwZSkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5nZXRUYXJnZXQoJGV2ZW50LCBvcHRpbWl6ZSk7XG4gICAgICBpZiAodGFyZ2V0ICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY2hlY2tGb3JEcmFnRW50ZXIoJGV2ZW50KTtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlV2lkZ2V0ID0gc3RydWN0dXJlZENsb25lKHRoaXMuY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdCkhO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy5hY3Rpb25UeXBlKSB7XG4gICAgICAgICAgY2FzZSAncmVzaXplLW53JzpcbiAgICAgICAgICAgIGlmIChjYW5kaWRhdGVXaWRnZXQubGF5b3V0LnggKyB0YXJnZXQueCA+IDAgJiYgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC5oZWlnaHQgLSB0YXJnZXQueSA+IDApIHtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC54ICs9IHRhcmdldC54O1xuICAgICAgICAgICAgICBjYW5kaWRhdGVXaWRnZXQubGF5b3V0LnkgKz0gdGFyZ2V0Lnk7XG4gICAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQud2lkdGggLT0gdGFyZ2V0Lng7XG4gICAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQuaGVpZ2h0IC09IHRhcmdldC55O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncmVzaXplLXN3JzpcbiAgICAgICAgICAgIGlmIChjYW5kaWRhdGVXaWRnZXQubGF5b3V0LndpZHRoIC0gdGFyZ2V0LnggPiAwKSB7XG4gICAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQueCArPSB0YXJnZXQueDtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC53aWR0aCAtPSB0YXJnZXQueDtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC5oZWlnaHQgKz0gdGFyZ2V0Lnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdyZXNpemUtbmUnOlxuICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQuaGVpZ2h0IC0gdGFyZ2V0LnkgPiAwKSB7XG4gICAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQueSArPSB0YXJnZXQueTtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC53aWR0aCArPSB0YXJnZXQueDtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC5oZWlnaHQgLT0gdGFyZ2V0Lnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdyZXNpemUtc2UnOlxuICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC53aWR0aCArPSB0YXJnZXQueDtcbiAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQuaGVpZ2h0ICs9IHRhcmdldC55O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbW92ZSc6XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TWF4WCA9XG4gICAgICAgICAgICAgIE1hdGgubWF4KFxuICAgICAgICAgICAgICAgIHRoaXMubWFuaWZlc3Q/LmdyaWQ/LmNvbHVtbnMgPz8gREVGQVVMVF9DT0xVTU5TX05VTUJFUixcbiAgICAgICAgICAgICAgICAuLi4odGhpcy5tYW5pZmVzdD8ud2lkZ2V0cyA/PyBbXSkubWFwKCh3KSA9PiB3LmxheW91dC53aWR0aCArIHcubGF5b3V0LngpXG4gICAgICAgICAgICAgICkgLVxuICAgICAgICAgICAgICBjYW5kaWRhdGVXaWRnZXQubGF5b3V0LndpZHRoICtcbiAgICAgICAgICAgICAgMTtcbiAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQueCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQueCArIHRhcmdldC54LCBjdXJyZW50TWF4WCkpO1xuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TWF4WSA9XG4gICAgICAgICAgICAgIE1hdGgubWF4KFxuICAgICAgICAgICAgICAgIHRoaXMubWFuaWZlc3Q/LmdyaWQ/LnJvd3MgPz8gREVGQVVMVF9ST1dTX05VTUJFUixcbiAgICAgICAgICAgICAgICAuLi4odGhpcy5tYW5pZmVzdD8ud2lkZ2V0cyA/PyBbXSkubWFwKCh3KSA9PiB3LmxheW91dC5oZWlnaHQgKyB3LmxheW91dC55KVxuICAgICAgICAgICAgICApIC1cbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC5oZWlnaHQgK1xuICAgICAgICAgICAgICAxO1xuICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC55ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY2FuZGlkYXRlV2lkZ2V0LmxheW91dC55ICsgdGFyZ2V0LnksIGN1cnJlbnRNYXhZKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVEYXNoYm9hcmRNYW5pZmVzdCh7XG4gICAgICAgICAgICBtYW5pZmVzdDogc29sdmVDb2xsaXNpb25zKFxuICAgICAgICAgICAgICBjYW5kaWRhdGVXaWRnZXQsXG4gICAgICAgICAgICAgIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCxcbiAgICAgICAgICAgICAgdGhpcy5tYW5pZmVzdCA/PyAoe30gYXMgRGFzaGJvYXJkTWFuaWZlc3QpXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkcmFnTW92ZSgkZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHRoaXMubW92aW5nTW91c2UoJGV2ZW50KTtcbiAgfVxuXG4gIGRyYWdMZWF2ZSgkZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAoJGV2ZW50LmN1cnJlbnRUYXJnZXQuY29udGFpbnMoJGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZXMgPSAoJGV2ZW50LmRhdGFUcmFuc2ZlciB8fCB7IHR5cGVzOiBbJyddIH0pLnR5cGVzO1xuICAgIGlmICh0eXBlcy5pbmNsdWRlcyhNSU1FX1RZUEVfV0lER0VUX01BTklGRVNUKSkge1xuICAgICAgLy8gQXMgdGhlIGRyYWcgaXMgbGVhdmluZyB0aGUgd2luZG93LCBkZWxldGUgdGhlIHdpZGdldCBmcm9tIGl0LCBhbmQgc3RvcCBlZGl0aW9uIG1vZGVcbiAgICAgIGlmICghISRldmVudCAmJiAhISRldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZURhc2hib2FyZE1hbmlmZXN0KHtcbiAgICAgICAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgICAgICAgIC4uLnRoaXMubWFuaWZlc3QsXG4gICAgICAgICAgICAgIHdpZGdldHM6IHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2xlYXJBY3Rpb25zKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZHJvcHBpbmcoJGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKCEhJGV2ZW50ICYmICEhJGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgaWYgKCRldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaW5jbHVkZXMoTUlNRV9UWVBFX1dJREdFVF9NQU5JRkVTVCkpIHtcbiAgICAgICAgLy8gUmVhcnJhbmdlIGRyb3AgdG8gY29ycmVjdCBzaXplLCB0eXBlLCAuLi4sIGFzIGEgcGxhY2Vob2xkZXIgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIG1hbmlmZXN0IGJ5IGRyYWdlbnRlciBldmVudFxuICAgICAgICBjb25zdCBkYXRhVHJhbnNmZXJNYW5pZmVzdCA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgJGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKE1JTUVfVFlQRV9XSURHRVRfTUFOSUZFU1QpXG4gICAgICAgICkgYXMgV2lkZ2V0TWFuaWZlc3Q7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0ID0ge1xuICAgICAgICAgIC4uLmRhdGFUcmFuc2Zlck1hbmlmZXN0LFxuICAgICAgICAgIGxheW91dDogdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0Py5sYXlvdXQgPz8gKHt9IGFzIFdpZGdldExheW91dClcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLm1vdmluZ01vdXNlKCRldmVudCwgZmFsc2UpO1xuXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5hc3NlcnRSZXN1bHRTZXRzKHt9KSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2xlYXJBY3Rpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJBY3Rpb25zKCkge1xuICAgIHRoaXMuYWN0aW9uVHlwZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm1vdmUuaW5pdGlhbFggPSAwO1xuICAgIHRoaXMubW92ZS5pbml0aWFsWSA9IDA7XG4gICAgdGhpcy5tb3ZlLnByZXZpb3VzWCA9IC0xO1xuICAgIHRoaXMubW92ZS5wcmV2aW91c1kgPSAtMTtcbiAgICB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QgPSBudWxsO1xuICAgIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCA9IFtdO1xuICB9XG5cbiAgLyoqKlxuICAgKiBNYW5hZ2Ugb3RoZXIga2luZHMgb2YgZHJvcHMgKGluc2lkZSB3aWRnZXRzKVxuICAgKi9cbiAgZHJvcHBpbmdJbldpZGdldCgkZXZlbnQ6IERyYWdFdmVudCwgaW5kZXg6IG51bWJlcikge1xuICAgIGlmICghISRldmVudCAmJiAhISRldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgIGlmICgkZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmluY2x1ZGVzKE1JTUVfVFlQRV9SRVNVTFRTRVQpKSB7XG4gICAgICAgIGNvbnN0IGxpc3RXaWRnZXRNYW5pZmVzdHMgPSBbLi4uKHRoaXMubWFuaWZlc3QgfHwgeyB3aWRnZXRzOiBbXSB9KS53aWRnZXRzXTtcblxuICAgICAgICBjb25zdCByZXN1bHRTZXROYW1lID0gJGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKE1JTUVfVFlQRV9SRVNVTFRTRVQpO1xuICAgICAgICBjb25zdCBjdXJyZW50UmVzdWx0U2V0ID0gKFxuICAgICAgICAgIEFycmF5LmlzQXJyYXkobGlzdFdpZGdldE1hbmlmZXN0c1tpbmRleF0uZGF0YXNvdXJjZSlcbiAgICAgICAgICAgID8gbGlzdFdpZGdldE1hbmlmZXN0c1tpbmRleF0uZGF0YXNvdXJjZVxuICAgICAgICAgICAgOiBbbGlzdFdpZGdldE1hbmlmZXN0c1tpbmRleF0uZGF0YXNvdXJjZV1cbiAgICAgICAgKSBhcyBzdHJpbmdbXTtcbiAgICAgICAgY29uc3QgY3VtdWxhdGl2ZSA9ICRldmVudC5zaGlmdEtleTtcbiAgICAgICAgY29uc3QgbmV3UmVzdWx0U2V0ID0gY3VtdWxhdGl2ZSA/IFsuLi5jdXJyZW50UmVzdWx0U2V0LCByZXN1bHRTZXROYW1lXSA6IHJlc3VsdFNldE5hbWU7XG5cbiAgICAgICAgbGlzdFdpZGdldE1hbmlmZXN0c1tpbmRleF0gPSB7XG4gICAgICAgICAgLi4ubGlzdFdpZGdldE1hbmlmZXN0c1tpbmRleF0sXG4gICAgICAgICAgZGF0YXNvdXJjZTogbmV3UmVzdWx0U2V0XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZURhc2hib2FyZE1hbmlmZXN0KHtcbiAgICAgICAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgICAgICAgIC4uLnRoaXMubWFuaWZlc3QsXG4gICAgICAgICAgICAgIHdpZGdldHM6IGxpc3RXaWRnZXRNYW5pZmVzdHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuYXNzZXJ0UmVzdWx0U2V0cyh7fSkpO1xuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVJlbW92ZUNvbmZpcm0oJGV2ZW50PzogTW91c2VFdmVudCwgaW5kZXg/OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlybVJlbW92ZVJlZikge1xuICAgICAgdGhpcy5pbmRleEZvclJlbW92YWwgPSBpbmRleCA/PyAtMTtcbiAgICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoXG4gICAgICAgIG5ldyBPdmVybGF5Q29uZmlnKHtcbiAgICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ28tbW9kYWwtd3JhcHBlciddLFxuICAgICAgICAgIGJhY2tkcm9wQ2xhc3M6ICdiYWNrZHJvcCdcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuYWRkaW5nT3ZlcmxheSh7IGlkOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgKyAnLW1vZGFsJyB9KSk7XG4gICAgICB0aGlzLmNvbmZpcm1SZW1vdmVSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoXykgPT4gdGhpcy50b2dnbGVSZW1vdmVDb25maXJtKCkpO1xuICAgICAgdGhpcy5jb25maXJtUmVtb3ZlUmVmLmF0dGFjaChuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy50ZW1wbGF0ZU1vZGFsLCB0aGlzLnZpZXdDb250YWluZXJSZWYpKTtcbiAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdkaXYuby1tb2RhbC13cmFwcGVyJykgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICAgIGlmICghIXBhbmVsKSB7XG4gICAgICAgICAgcGFuZWwuc3R5bGUubGVmdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHdpbmRvdy5pbm5lcldpZHRoIC0gcGFuZWwuY2xpZW50V2lkdGgsICRldmVudC5jbGllbnRYIC0gMzApKSArICdweCc7XG4gICAgICAgICAgcGFuZWwuc3R5bGUudG9wID0gTWF0aC5tYXgoMCwgTWF0aC5taW4od2luZG93LmlubmVySGVpZ2h0IC0gcGFuZWwuY2xpZW50SGVpZ2h0LCAkZXZlbnQuY2xpZW50WSAtIDEwKSkgKyAncHgnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZi5kaXNwb3NlKCk7XG4gICAgICB0aGlzLmNvbmZpcm1SZW1vdmVSZWYgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuY2xvc2VPdmVybGF5KHsgaWQ6IHRoaXMuY29uc3RydWN0b3IubmFtZSArICctbW9kYWwnIH0pKTtcbiAgICB9XG4gIH1cblxuICBjb25maXJtUmVtb3ZlKCkge1xuICAgIHRoaXMucmVtb3ZlKHRoaXMuaW5kZXhGb3JSZW1vdmFsKTtcbiAgICB0aGlzLmNhbmNlbFJlbW92ZUNvbmZpcm0oKTtcbiAgfVxuXG4gIGNhbmNlbFJlbW92ZUNvbmZpcm0oKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDb25maWdBY3Rpb25zLmNsb3NlT3ZlcmxheSh7IGlkOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgKyAnLW1vZGFsJyB9KSk7XG4gICAgdGhpcy5jb25maXJtUmVtb3ZlUmVmPy5kaXNwb3NlKCk7XG4gICAgdGhpcy5jb25maXJtUmVtb3ZlUmVmID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdHJhY2tXaWRnZXRzKGluZGV4OiBudW1iZXIsIHdpZGdldE1hbmlmZXN0OiBXaWRnZXRNYW5pZmVzdCkge1xuICAgIHJldHVybiBpbmRleCArICctJyArIHdpZGdldE1hbmlmZXN0LnR5cGUgKyAnLScgKyBKU09OLnN0cmluZ2lmeSh3aWRnZXRNYW5pZmVzdC5sYXlvdXQpO1xuICB9XG5cbiAgY2hhbmdlU2l6ZShkaXJlY3Rpb246IHN0cmluZywgb2Zmc2V0OiBudW1iZXIpIHtcbiAgICBjb25zdCBtaW5Sb3dzID1cbiAgICAgICh0aGlzLm1hbmlmZXN0Py53aWRnZXRzLm1hcCgodykgPT4gdy5sYXlvdXQuaGVpZ2h0ICsgdy5sYXlvdXQueSkucmVkdWNlKChhLCBiKSA9PiAoYSA+IGIgPyBhIDogYiksIDIpID8/IDIpIC0gMTtcbiAgICBjb25zdCBtaW5Db2x1bW5zID1cbiAgICAgICh0aGlzLm1hbmlmZXN0Py53aWRnZXRzLm1hcCgodykgPT4gdy5sYXlvdXQud2lkdGggKyB3LmxheW91dC54KS5yZWR1Y2UoKGEsIGIpID0+IChhID4gYiA/IGEgOiBiKSwgMikgPz8gMikgLSAxO1xuXG4gICAgY29uc3QgZnV0dXJlU2l6ZSA9IHtcbiAgICAgIHJvd3M6IE1hdGgubWF4KG1pblJvd3MsICh0aGlzLm1hbmlmZXN0IS5ncmlkPy5yb3dzID8/IERFRkFVTFRfUk9XU19OVU1CRVIpICsgKGRpcmVjdGlvbiA9PT0gJ3Jvd3MnID8gb2Zmc2V0IDogMCkpLFxuICAgICAgY29sdW1uczogTWF0aC5tYXgoXG4gICAgICAgIG1pbkNvbHVtbnMsXG4gICAgICAgICh0aGlzLm1hbmlmZXN0IS5ncmlkPy5jb2x1bW5zID8/IERFRkFVTFRfQ09MVU1OU19OVU1CRVIpICsgKGRpcmVjdGlvbiA9PT0gJ2NvbHVtbnMnID8gb2Zmc2V0IDogMClcbiAgICAgIClcbiAgICB9O1xuXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgIERhc2hib2FyZEFjdGlvbnMudXBkYXRlRGFzaGJvYXJkTWFuaWZlc3Qoe1xuICAgICAgICBtYW5pZmVzdDoge1xuICAgICAgICAgIC4uLnRoaXMubWFuaWZlc3QhLFxuICAgICAgICAgIGdyaWQ6IHtcbiAgICAgICAgICAgIC4uLih0aGlzLm1hbmlmZXN0Py5ncmlkID8/IHt9KSxcbiAgICAgICAgICAgIC4uLmZ1dHVyZVNpemVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm8tZGFzaGJvYXJkLWVkaXRcIiBbY2xhc3MuLWVkaXRdPVwibW9kZUVkaXRpb24kIHwgYXN5bmNcIj5cbiAgPGRpdiBjbGFzcz1cIm8tZGFzaGJvYXJkLWFkZCAtcm93c1wiPlxuICAgIDxidXR0b24gKGNsaWNrKT1cImNoYW5nZVNpemUoJ3Jvd3MnLCAtMSlcIj5cbiAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwicmVtb3ZlXCIgW3dpZHRoXT1cIjEyXCIgW2hlaWdodF09XCIxMlwiPjwvcHJ5LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwiY2hhbmdlU2l6ZSgncm93cycsICsxKVwiPlxuICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJhZGRcIiBbd2lkdGhdPVwiMTJcIiBbaGVpZ2h0XT1cIjEyXCI+PC9wcnktaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8cD57eyAnQHByeS5ncmlkLnJvd3MnIHwgaTE4biB9fTwvcD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJvLWRhc2hib2FyZC1hZGQgLWNvbHNcIj5cbiAgICA8cD57eyAnQHByeS5ncmlkLmNvbHVtbnMnIHwgaTE4biB9fTwvcD5cbiAgICA8YnV0dG9uIChjbGljayk9XCJjaGFuZ2VTaXplKCdjb2x1bW5zJywgLTEpXCI+XG4gICAgICA8cHJ5LWljb24gaWNvblN2Zz1cInJlbW92ZVwiIFt3aWR0aF09XCIxMlwiIFtoZWlnaHRdPVwiMTJcIj48L3ByeS1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gKGNsaWNrKT1cImNoYW5nZVNpemUoJ2NvbHVtbnMnLCArMSlcIj5cbiAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiYWRkXCIgW3dpZHRoXT1cIjEyXCIgW2hlaWdodF09XCIxMlwiPjwvcHJ5LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJvLWRhc2hib2FyZC1ncmlkXCJcbiAgICBbc3R5bGUuZ3JpZFRlbXBsYXRlQ29sdW1uc109XCJncmlkVGVtcGxhdGVDb2x1bW5zJCB8IGFzeW5jXCJcbiAgICBbc3R5bGUuZ3JpZFRlbXBsYXRlUm93c109XCJncmlkVGVtcGxhdGVSb3dzJCB8IGFzeW5jXCJcbiAgICBbc3R5bGUuZ3JpZEdhcF09XCJkYXNoYm9hcmRQYXJhbXMuZ3JpZEdhcCArICdweCdcIlxuICAgICNncmlkXG4gICAgKG1vdXNlbW92ZSk9XCJtb3ZpbmdNb3VzZSgkZXZlbnQpXCJcbiAgICAoZHJvcCk9XCJkcm9wcGluZygkZXZlbnQpXCJcbiAgICAoZHJhZ292ZXIpPVwiZHJhZ01vdmUoJGV2ZW50KVwiXG4gICAgKGRyYWdsZWF2ZSk9XCJkcmFnTGVhdmUoJGV2ZW50KVwiXG4gICAgKGRyYWdlbnRlcik9XCJkcmFnRW50ZXIoJGV2ZW50KVwiXG4gID5cbiAgICBAZm9yIChcbiAgICAgIHdpZGdldE1hbmlmZXN0IG9mICh3aW5kb3dNYW5pZmVzdCQgfCBhc3luYyk/LndpZGdldHMgfHwgW107XG4gICAgICB0cmFjayB0cmFja1dpZGdldHMod2lkZ2V0SW5kZXgsIHdpZGdldE1hbmlmZXN0KTtcbiAgICAgIGxldCB3aWRnZXRJbmRleCA9ICRpbmRleFxuICAgICkge1xuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIm8tZGFzaGJvYXJkLXdpZGdldFwiXG4gICAgICAgIFtjbGFzcy4tZWRpdGVkXT1cIm1vZGVFZGl0aW9uXCJcbiAgICAgICAgW3N0eWxlLmdyaWRDb2x1bW5dPVwiZ3JpZENvbHVtbih3aWRnZXRNYW5pZmVzdC5sYXlvdXQpXCJcbiAgICAgICAgW3N0eWxlLmdyaWRSb3ddPVwiZ3JpZFJvdyh3aWRnZXRNYW5pZmVzdC5sYXlvdXQpXCJcbiAgICAgICAgKGRyb3ApPVwiZHJvcHBpbmdJbldpZGdldCgkZXZlbnQsIHdpZGdldEluZGV4KVwiXG4gICAgICA+XG4gICAgICAgIEBpZiAobW9kZUVkaXRpb24pIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplIG53LXJlc2l6ZVwiIChtb3VzZWRvd24pPVwic3RhcnRSZXNpemUoJGV2ZW50LCB3aWRnZXRJbmRleCwgJ3Jlc2l6ZS1udycpXCI+XG4gICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cIm5vcnRoX3dlc3RcIiBbYW5pbWF0aW9uXT1cImZhbHNlXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplIHN3LXJlc2l6ZVwiIChtb3VzZWRvd24pPVwic3RhcnRSZXNpemUoJGV2ZW50LCB3aWRnZXRJbmRleCwgJ3Jlc2l6ZS1zdycpXCI+XG4gICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cInNvdXRoX3dlc3RcIiBbYW5pbWF0aW9uXT1cImZhbHNlXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplIG5lLXJlc2l6ZVwiIChtb3VzZWRvd24pPVwic3RhcnRSZXNpemUoJGV2ZW50LCB3aWRnZXRJbmRleCwgJ3Jlc2l6ZS1uZScpXCI+XG4gICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cIm5vcnRoX2Vhc3RcIiBbYW5pbWF0aW9uXT1cImZhbHNlXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplIHNlLXJlc2l6ZVwiIChtb3VzZWRvd24pPVwic3RhcnRSZXNpemUoJGV2ZW50LCB3aWRnZXRJbmRleCwgJ3Jlc2l6ZS1zZScpXCI+XG4gICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cInNvdXRoX2Vhc3RcIiBbYW5pbWF0aW9uXT1cImZhbHNlXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplIGRlbGV0ZVwiIChtb3VzZWRvd24pPVwidG9nZ2xlUmVtb3ZlQ29uZmlybSgkZXZlbnQsIHdpZGdldEluZGV4KVwiPlxuICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJjbG9zZVwiIFthbmltYXRpb25dPVwiZmFsc2VcIj48L3ByeS1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb3ZlXCIgZHJhZ2dhYmxlPVwidHJ1ZVwiIChkcmFnc3RhcnQpPVwiZHJhZ1N0YXJ0KCRldmVudCwgd2lkZ2V0SW5kZXgpXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW92ZS1pbnNpZGUgbW92ZS17eyB3aWRnZXRNYW5pZmVzdC50eXBlIH19XCI+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHdpZGdldE1hbmlmZXN0LnRpdGxlID8/ICgnQHByeS50b29sYm94LicgKyB3aWRnZXRNYW5pZmVzdC50eXBlIHwgaTE4bikgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKCFtb2RlRWRpdGlvbikge1xuICAgICAgICAgIDxwcnktd2lkZ2V0LWluc3RhbmNpYXRvclxuICAgICAgICAgICAgW3N0YXRpY01hbmlmZXN0XT1cIndpZGdldE1hbmlmZXN0XCJcbiAgICAgICAgICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgICAgICAgPjwvcHJ5LXdpZGdldC1pbnN0YW5jaWF0b3I+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAoIW5vQmFja2dyb3VuZCkge1xuICAgICAgQGlmIChcbiAgICAgICAge1xuICAgICAgICAgIG5vV2lkZ2V0czogKG5vbkZpbGxlcldpZGdldHMkIHwgYXN5bmMpID09PSAwLFxuICAgICAgICAgIGdsb2JhbExvYWRpbmc6IGxvYWRpbmckIHwgYXN5bmMsXG4gICAgICAgICAgZmV0Y2hMb2FkaW5nOiAoZGF0YUZldGNoaW5nJCB8IGFzeW5jKT8ubGVuZ3RoID8/IDEgPiAwXG4gICAgICAgIH07XG4gICAgICAgIGFzIGRhdGFcbiAgICAgICkge1xuICAgICAgICBAaWYgKGRhdGEubm9XaWRnZXRzKSB7XG4gICAgICAgICAgQGlmIChkYXRhLmdsb2JhbExvYWRpbmcpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuby13aWRnZXRcIiBbc3R5bGUuZ3JpZC1hcmVhXT1cImJhY2tncm91bmRBcmVhJCB8IGFzeW5jXCI+XG4gICAgICAgICAgICAgIDxwcnktcGFnZS1sb2FkZXI+PC9wcnktcGFnZS1sb2FkZXI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibm8td2lkZ2V0X190ZXh0XCI+e3sgJ0Bwcnkud2lkZ2V0LnRhcmdldC5sb2FkaW5nJyB8IGkxOG4gfX0uLi48L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuby13aWRnZXRcIiBbc3R5bGUuZ3JpZC1hcmVhXT1cImJhY2tncm91bmRBcmVhJCB8IGFzeW5jXCI+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm5vLXdpZGdldF9fc2VhcmNoXCJcbiAgICAgICAgICAgICAgICBzcmM9XCIuLi8uLi8uLi9hc3NldHMvc3Zncy9wcnlfcmVjaGVyY2hlLnN2Z1wiXG4gICAgICAgICAgICAgICAgYWx0PVwie3tcbiAgICAgICAgICAgICAgICAgIChsYXlvdXQgPT09IERhc2hib2FyZEdyaWRMYXlvdXQuTUFOVUFMXG4gICAgICAgICAgICAgICAgICAgID8gJ0Bwcnkud2lkZ2V0LnRhcmdldC5ub25lX21hbnVhbCdcbiAgICAgICAgICAgICAgICAgICAgOiAnQHByeS53aWRnZXQudGFyZ2V0Lm5vbmVfYXV0bydcbiAgICAgICAgICAgICAgICAgICkgfCBpMThuXG4gICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5vLXdpZGdldF9fdGV4dFwiPnt7XG4gICAgICAgICAgICAgICAgKGxheW91dCA9PT0gRGFzaGJvYXJkR3JpZExheW91dC5NQU5VQUxcbiAgICAgICAgICAgICAgICAgID8gJ0Bwcnkud2lkZ2V0LnRhcmdldC5ub25lX21hbnVhbCdcbiAgICAgICAgICAgICAgICAgIDogJ0Bwcnkud2lkZ2V0LnRhcmdldC5ub25lX2F1dG8nXG4gICAgICAgICAgICAgICAgKSB8IGkxOG5cbiAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiYS1wYWdlLWxvYWRlciBiYWNrZHJvcFwiXG4gICAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwiZGF0YS5mZXRjaExvYWRpbmcgJiYgIWRhdGEuZ2xvYmFsTG9hZGluZyA/ICdmbGV4JyA6ICdub25lJ1wiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIndpZHRoKClcIlxuICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiaGVpZ2h0KClcIlxuICAgICAgICA+XG4gICAgICAgICAgPHByeS1wYWdlLWxvYWRlcj48L3ByeS1wYWdlLWxvYWRlcj5cbiAgICAgICAgICA8cD57eyAnQHByeS53aWRnZXQudGFyZ2V0LmxvYWRpbmcnIHwgaTE4biB9fS4uLjwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuPHByeS1jb250ZXh0LW1lbnU+PC9wcnktY29udGV4dC1tZW51PlxuXG48bmctdGVtcGxhdGUgI3RlbXBsYXRlTW9kYWw+XG4gIDxkaXYgY2xhc3M9XCJvLW1vZGFsXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8tbW9kYWxfX3RvcFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm8tbW9kYWxfX3RvcF9fdGl0bGVcIj5cbiAgICAgICAgPGgyIGNsYXNzPVwiYS1oMlwiIGlkPVwiZGlhbG9nX3RpdGxlXCI+XG4gICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1vZGFsVGl0bGUnIHwgaTE4biB9fVxuICAgICAgICA8L2gyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1tb2RhbF9fdG9wX19jbG9zZVwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiIChjbGljayk9XCJjYW5jZWxSZW1vdmVDb25maXJtKClcIj5cbiAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImNsb3NlXCIgW2hlaWdodF09XCIzNVwiIFt3aWR0aF09XCIzNVwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LnRvb2xib3guY2xvc2UnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibS1idG4tZ3JvdXBcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjYW5jZWxSZW1vdmVDb25maXJtKClcIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1zZWNvbmRhcnlcIj5cbiAgICAgICAge3sgJ0BwcnkudG9vbGJveC5tYW5pZmVzdC5jbG9zZScgfCBpMThuIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIChjbGljayk9XCJjb25maXJtUmVtb3ZlKClcIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCI+XG4gICAgICAgIHt7ICdAcHJ5LnRvb2xib3gubWFuaWZlc3QudmFsaWRhdGUnIHwgaTE4biB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==