@eui/components 18.0.1-snapshot-1718060280735 → 18.0.1-snapshot-1718117003984
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.
- package/docs/classes/CustomNodeSelectFnHelper.html +556 -0
- package/docs/components/EuiDatepickerComponent.html +1 -1
- package/docs/components/EuiMenuComponent.html +1 -1
- package/docs/components/EuiNotificationsComponent.html +1 -1
- package/docs/components/EuiTreeComponent.html +19 -0
- package/docs/dependencies.html +1 -1
- package/docs/directives/EuiTreeFormControlDirective.html +1 -1
- package/docs/index.html +1 -1
- package/docs/js/menu-wc.js +9 -6
- package/docs/js/menu-wc_es5.js +1 -1
- package/docs/js/search/search_index.js +2 -2
- package/docs/miscellaneous/typealiases.html +67 -48
- package/esm2022/eui-button/eui-button.component.mjs +2 -2
- package/esm2022/eui-dashboard-card/eui-dashboard-card.component.mjs +2 -2
- package/esm2022/eui-datepicker/eui-datepicker.component.mjs +3 -3
- package/esm2022/eui-discussion-thread/eui-discussion-thread.component.mjs +2 -2
- package/esm2022/eui-input-group/eui-input-group.component.mjs +2 -2
- package/esm2022/eui-menu/eui-menu-item.component.mjs +2 -2
- package/esm2022/eui-menu/eui-menu.component.mjs +3 -3
- package/esm2022/eui-timeline/eui-timeline-item.component.mjs +2 -2
- package/esm2022/eui-timeline/eui-timeline.component.mjs +2 -2
- package/esm2022/eui-tree/eui-tree-form-control.directive.mjs +2 -2
- package/esm2022/eui-tree/eui-tree.component.mjs +46 -24
- package/esm2022/eui-tree/eui-tree.model.mjs +20 -1
- package/esm2022/eui-wizard/eui-wizard-step.component.mjs +2 -2
- package/esm2022/eui-wizard/eui-wizard.component.mjs +2 -2
- package/esm2022/layout/eui-notifications/eui-notifications.component.mjs +3 -3
- package/eui-tree/eui-tree.component.d.ts +5 -2
- package/eui-tree/eui-tree.component.d.ts.map +1 -1
- package/eui-tree/eui-tree.model.d.ts +9 -0
- package/eui-tree/eui-tree.model.d.ts.map +1 -1
- package/fesm2022/eui-components-eui-button.mjs +2 -2
- package/fesm2022/eui-components-eui-button.mjs.map +1 -1
- package/fesm2022/eui-components-eui-dashboard-card.mjs +2 -2
- package/fesm2022/eui-components-eui-dashboard-card.mjs.map +1 -1
- package/fesm2022/eui-components-eui-datepicker.mjs +2 -2
- package/fesm2022/eui-components-eui-datepicker.mjs.map +1 -1
- package/fesm2022/eui-components-eui-discussion-thread.mjs +2 -2
- package/fesm2022/eui-components-eui-discussion-thread.mjs.map +1 -1
- package/fesm2022/eui-components-eui-input-group.mjs +2 -2
- package/fesm2022/eui-components-eui-input-group.mjs.map +1 -1
- package/fesm2022/eui-components-eui-menu.mjs +4 -4
- package/fesm2022/eui-components-eui-menu.mjs.map +1 -1
- package/fesm2022/eui-components-eui-timeline.mjs +4 -4
- package/fesm2022/eui-components-eui-timeline.mjs.map +1 -1
- package/fesm2022/eui-components-eui-tree.mjs +65 -24
- package/fesm2022/eui-components-eui-tree.mjs.map +1 -1
- package/fesm2022/eui-components-eui-wizard.mjs +4 -4
- package/fesm2022/eui-components-eui-wizard.mjs.map +1 -1
- package/fesm2022/eui-components-layout.mjs +2 -2
- package/fesm2022/eui-components-layout.mjs.map +1 -1
- package/package.json +3 -3
@@ -1,7 +1,7 @@
|
|
1
1
|
import { Component, Input, NgModule, ChangeDetectionStrategy, EventEmitter, Output, ViewEncapsulation, HostBinding, booleanAttribute, ViewChild, } from '@angular/core';
|
2
2
|
import { CommonModule } from '@angular/common';
|
3
3
|
import { RouterModule } from '@angular/router';
|
4
|
-
import { EuiTreePagination, } from './eui-tree.model';
|
4
|
+
import { EuiTreePagination, CustomNodeSelectFnHelper, } from './eui-tree.model';
|
5
5
|
import { FormsModule } from '@angular/forms';
|
6
6
|
import { EuiInputCheckboxModule } from '@eui/components/eui-input-checkbox';
|
7
7
|
import { EuiButtonModule } from '@eui/components/eui-button';
|
@@ -148,12 +148,15 @@ export class EuiTreeComponent {
|
|
148
148
|
}
|
149
149
|
}
|
150
150
|
setAllSelection(isChecked) {
|
151
|
+
this.tempSelectionModel = new SelectionModel(true, this.selectionModel.selected, true, (a, b) => a?.path === b?.path);
|
151
152
|
this.setIsCheckedForAll(this.treeDataRunTime, isChecked);
|
153
|
+
this.selectionModel.setSelection(...this.tempSelectionModel.selected);
|
152
154
|
this.changeDetectorRef.markForCheck();
|
153
155
|
}
|
154
156
|
updateTreeItem(givenTreeItem, path) {
|
155
157
|
const treeItem = structuredClone(givenTreeItem);
|
156
158
|
if (treeItem && path) {
|
159
|
+
this.tempSelectionModel = new SelectionModel(true, this.selectionModel.selected, true, (a, b) => a?.path === b?.path);
|
157
160
|
this.setTreeData(path, this.processInputs([treeItem])[0]);
|
158
161
|
const pathArr = path.split('.');
|
159
162
|
const index = parseInt(pathArr.pop(), 10);
|
@@ -167,10 +170,6 @@ export class EuiTreeComponent {
|
|
167
170
|
const itemRecursiveSelectionState = this.calculateItemSelectionRecursiveState(treeItem);
|
168
171
|
this.setRunTimeSelectionRecursiveStateTree(path, itemRecursiveSelectionState);
|
169
172
|
this.syncStateChangesAtPath(path);
|
170
|
-
// Rendering
|
171
|
-
this.changeDetectorRef.detectChanges();
|
172
|
-
this.treeComponentInstance.renderNodeChanges([]);
|
173
|
-
this.treeComponentInstance.renderNodeChanges(this.treeDataRunTime);
|
174
173
|
if (this.cdkTreeControl.isExpanded(treeItemRuntime) && !treeItem.node.isExpanded) {
|
175
174
|
this.cdkTreeControl.toggle(treeItemRuntime);
|
176
175
|
}
|
@@ -181,7 +180,11 @@ export class EuiTreeComponent {
|
|
181
180
|
this.getInitialSelection(this.getRunTimeTreeItem(path)?.children)?.forEach((runTimeItem) => {
|
182
181
|
this.selectTreeItem(this.getRunTimeBackupTreeItem(runTimeItem.path));
|
183
182
|
});
|
183
|
+
this.selectionModel.setSelection(...this.tempSelectionModel.selected);
|
184
|
+
// Rendering
|
184
185
|
this.changeDetectorRef.detectChanges();
|
186
|
+
this.treeComponentInstance.renderNodeChanges([]);
|
187
|
+
this.treeComponentInstance.renderNodeChanges(this.treeDataRunTime);
|
185
188
|
}
|
186
189
|
}
|
187
190
|
onNodeClick(treeRunTimeItem) {
|
@@ -201,9 +204,14 @@ export class EuiTreeComponent {
|
|
201
204
|
const item = this.getTreeItem(path);
|
202
205
|
const runTimeBackupTreeItem = this.getRunTimeBackupTreeItem(path);
|
203
206
|
const renderedRunTimeTreeItem = this.getRunTimeTreeItem(path);
|
204
|
-
const node = item
|
207
|
+
const node = item?.node;
|
208
|
+
this.tempSelectionModel = new SelectionModel(true, this.selectionModel.selected, true, (a, b) => a?.path === b?.path);
|
205
209
|
// console.log(path,item,runTimeTreeItem, renderedRunTimeTreeItem);
|
206
|
-
if (
|
210
|
+
if (this.customNodeSelectFn) {
|
211
|
+
this.customNodeSelectFn(path, evt.target.checked, item, new CustomNodeSelectFnHelper(this));
|
212
|
+
this.selectionModel.setSelection(...this.tempSelectionModel.selected);
|
213
|
+
}
|
214
|
+
else if (!node?.selectConfig?.singleSelect) {
|
207
215
|
node.isSelected = evt.target.checked;
|
208
216
|
node.isIndeterminate = false;
|
209
217
|
// If the node is recursive it sets every children with the change.
|
@@ -242,6 +250,7 @@ export class EuiTreeComponent {
|
|
242
250
|
else {
|
243
251
|
this.changeDetectorRef.detectChanges();
|
244
252
|
}
|
253
|
+
this.selectionModel.setSelection(...this.tempSelectionModel.selected);
|
245
254
|
}
|
246
255
|
else {
|
247
256
|
const prevItem = this.selectionModel.selected[0];
|
@@ -405,6 +414,9 @@ export class EuiTreeComponent {
|
|
405
414
|
});
|
406
415
|
}
|
407
416
|
runScrollListener() {
|
417
|
+
/* if (this.scrollDispatcherSubs) { todo
|
418
|
+
this.scrollDispatcherSubs.unsubscribe();
|
419
|
+
}*/
|
408
420
|
this.scrollDispatcherSubs = this.scrollDispatcher.scrolled().subscribe((scrollable) => {
|
409
421
|
if (scrollable && this.checkIfCurrentScrollable(scrollable)) {
|
410
422
|
const isAtBottom = scrollable?.getElementRef().nativeElement.scrollTop + scrollable?.getElementRef().nativeElement.clientHeight >=
|
@@ -457,19 +469,27 @@ export class EuiTreeComponent {
|
|
457
469
|
getSelectionIndexOfItem(runTimeTreeItem) {
|
458
470
|
return this.selectionModel.selected.findIndex((i) => i?.path === runTimeTreeItem?.path);
|
459
471
|
}
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
472
|
+
// todo re-think about the access from custom on node select helper
|
473
|
+
silentSelect(path, isChecked) {
|
474
|
+
const runtimeBackupTreeItem = this.getRunTimeBackupTreeItem(path);
|
475
|
+
const treeItem = this.getTreeItem(path);
|
476
|
+
const node = treeItem.node;
|
477
|
+
if (node?.selectable) {
|
478
|
+
node.isSelected = isChecked;
|
479
|
+
node.isIndeterminate = false;
|
480
|
+
if (isChecked) {
|
481
|
+
this.tempSelectionModel.select(runtimeBackupTreeItem);
|
482
|
+
}
|
483
|
+
else {
|
484
|
+
this.tempSelectionModel.deselect(runtimeBackupTreeItem);
|
485
|
+
}
|
464
486
|
}
|
465
487
|
}
|
488
|
+
selectTreeItem(runTimeBackupTreeItem) {
|
489
|
+
this.tempSelectionModel.select(runTimeBackupTreeItem);
|
490
|
+
}
|
466
491
|
deselectTreeItem(runTimeTreeItem) {
|
467
|
-
|
468
|
-
if (indexOfItem > -1) {
|
469
|
-
const newSelection = [...this.selectionModel.selected];
|
470
|
-
newSelection.splice(indexOfItem, 1);
|
471
|
-
this.selectionModel.setSelection(...newSelection);
|
472
|
-
}
|
492
|
+
this.tempSelectionModel.deselect(runTimeTreeItem);
|
473
493
|
}
|
474
494
|
createTreeDataRuntime(nodes) {
|
475
495
|
return structuredClone(nodes)?.map((item, index) => {
|
@@ -505,7 +525,7 @@ export class EuiTreeComponent {
|
|
505
525
|
});
|
506
526
|
}
|
507
527
|
const childStates = childrenSelectionRecursive.map((_) => _.selectionRecursiveState);
|
508
|
-
const itemState = this.decideSelectionRecursiveState(childStates, treeItem.node.isSelected, treeItem.node?.selectConfig?.recursive, treeItem.node?.selectConfig?.noAutoSelectParent);
|
528
|
+
const itemState = treeItem.node.selectable ? this.decideSelectionRecursiveState(childStates, treeItem.node.isSelected, treeItem.node?.selectConfig?.recursive, treeItem.node?.selectConfig?.noAutoSelectParent) : undefined;
|
509
529
|
return {
|
510
530
|
selectionRecursiveState: itemState,
|
511
531
|
children: childrenSelectionRecursive,
|
@@ -513,16 +533,16 @@ export class EuiTreeComponent {
|
|
513
533
|
}
|
514
534
|
decideSelectionRecursiveState(childStates = [], isSelected, recursive, noAutoSelectParent) {
|
515
535
|
let itemState = 'indeterminate';
|
516
|
-
if (isSelected && childStates.every((state) => state === 'allSelected')) {
|
536
|
+
if (isSelected && childStates.filter((childStates) => childStates).every((state) => state === 'allSelected')) {
|
517
537
|
itemState = 'allSelected';
|
518
538
|
}
|
519
|
-
else if (!isSelected && childStates.every((state) => state === 'allNotSelected')) {
|
539
|
+
else if (!isSelected && childStates.filter((childStates) => childStates).every((state) => state === 'allNotSelected')) {
|
520
540
|
itemState = 'allNotSelected';
|
521
541
|
}
|
522
|
-
else if (recursive && childStates.every((state) => state === 'allSelected') && !isSelected && !noAutoSelectParent) {
|
542
|
+
else if (recursive && childStates.filter((childStates) => childStates).every((state) => state === 'allSelected') && !isSelected && !noAutoSelectParent) {
|
523
543
|
itemState = 'allSelected';
|
524
544
|
}
|
525
|
-
else if (recursive && childStates.every((state) => state === 'allNotSelected') && isSelected) {
|
545
|
+
else if (recursive && childStates.filter((childStates) => childStates).every((state) => state === 'allNotSelected') && isSelected) {
|
526
546
|
itemState = 'allNotSelected';
|
527
547
|
}
|
528
548
|
return itemState;
|
@@ -827,7 +847,7 @@ export class EuiTreeComponent {
|
|
827
847
|
return scrolled.getElementRef().nativeElement === this.cdkScrollableRef.getElementRef().nativeElement;
|
828
848
|
}
|
829
849
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: EuiTreeComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ScrollDispatcher }], target: i0.ɵɵFactoryTarget.Component }); }
|
830
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.0.2", type: EuiTreeComponent, selector: "eui-tree", inputs: { e2eAttr: "e2eAttr", nodes: "nodes", nodeTemplateRef: "nodeTemplateRef", nodeContentMetadataTemplateRef: "nodeContentMetadataTemplateRef", rightContextMenuTemplateRef: "rightContextMenuTemplateRef", expandedIconClass: "expandedIconClass", collapsedIconClass: "collapsedIconClass", expandedSvgIconClass: "expandedSvgIconClass", collapsedSvgIconClass: "collapsedSvgIconClass", isClickTogglingNode: ["isClickTogglingNode", "isClickTogglingNode", booleanAttribute], isMultiselect: ["isMultiselect", "isMultiselect", booleanAttribute], isSingleSelect: ["isSingleSelect", "isSingleSelect", booleanAttribute], isRecursiveSelection: ["isRecursiveSelection", "isRecursiveSelection", booleanAttribute], isRecursiveParentSelection: ["isRecursiveParentSelection", "isRecursiveParentSelection", booleanAttribute], showUnderlinedLinks: ["showUnderlinedLinks", "showUnderlinedLinks", booleanAttribute], showLines: ["showLines", "showLines", booleanAttribute], autoTranslate: ["autoTranslate", "autoTranslate", booleanAttribute], highlightPath: ["highlightPath", "highlightPath", booleanAttribute] }, outputs: { selectionChange: "selectionChange", nodeClick: "nodeClick", nodeToggle: "nodeToggle" }, host: { properties: { "class": "this.cssClasses", "attr.data-e2e": "this.e2eAttr" } }, viewQueries: [{ propertyName: "cdkScrollableRef", first: true, predicate: ["cdkScrollableRef"], descendants: true, read: CdkScrollable }, { propertyName: "treeComponentInstance", first: true, predicate: ["treeComponentInstance"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"eui-ul-rep eui-tree__wrapper\" cdkScrollable #cdkScrollableRef>\n <cdk-tree\n #treeComponentInstance\n [dataSource]=\"cdkArrayDataSource\"\n [treeControl]=\"cdkTreeControl\"\n [trackBy]=\"trackBy\"\n *ngIf=\"renderTree\"\n class=\"eui-cdk-tree\">\n <!-- There are two states of generic cdk-nested-tree-node declarations.\n First one is without child. No sub rendering.\n -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeRunTimeItemModel\" class=\"eui-cdk-nested-tree-node\">\n <div *ngIf=\"treeRunTimeItemModel\"\n class=\"eui-li-rep eui-tree-node\"\n [class.eui-tree-node--first]=\"treeRunTimeItemModel?.path === '0'\"\n [class.eui-tree-node--last]=\"treeRunTimeItemModel.last\"\n title=\"{{\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div class=\"eui-tree-node-wrapper\"\n (click)=\"onNodeClick(treeRunTimeItemModel)\">\n <div class=\"eui-tree-node-wrapper__container\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeRunTimeItemModel?.path)?.node,\n onSelect: onSelectFn(treeRunTimeItemModel.path),\n id: uid + treeRunTimeItemModel.path,\n path: treeRunTimeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n </div>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node\n *cdkTreeNodeDef=\"let treeRunTimeItemModel; when: hasChild\"\n class=\"eui-cdk-nested-tree-node eui-cdk-nested-tree-node--with-child\">\n <div\n class=\"eui-li-rep eui-tree-node eui-tree-node--with-child\"\n [class.eui-tree-node--first]=\"treeRunTimeItemModel?.path === '0'\"\n [class.eui-tree-node--last]=\"treeRunTimeItemModel.last\"\n *ngIf=\"treeRunTimeItemModel\"\n title=\"{{\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div\n class=\"eui-tree-node-wrapper\">\n <!--Here wraps the node, and listen for node clicks.-->\n <div (click)=\"onNodeClick(treeRunTimeItemModel)\" class=\"eui-tree-node-wrapper__container\">\n <!-- Expand/collapse action button -->\n <button\n euiButton\n euiIconButton\n euiBasicButton\n euiRounded\n euiSizeS\n type=\"button\"\n [attr.aria-label]=\"'Toggle ' + getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\"\n (click)=\"onNodeToggle(treeRunTimeItemModel)\"\n cdkTreeNodeToggle\n class=\"eui-tree-node__button\">\n <eui-icon-svg\n *ngIf=\"!cdkTreeControl.isExpanded(treeRunTimeItemModel) && !collapsedIconClass\"\n [icon]=\"expandedSvgIconClass\"></eui-icon-svg>\n <eui-icon-svg\n *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel) && !expandedIconClass\"\n [icon]=\"collapsedSvgIconClass\"></eui-icon-svg>\n </button>\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeRunTimeItemModel.path)?.node,\n onSelect: onSelectFn(treeRunTimeItemModel.path),\n id: uid + treeRunTimeItemModel.path,\n path: treeRunTimeItemModel.path,\n children: getTreeItem(treeRunTimeItemModel?.path)?.children\n }\">\n </ng-container>\n </div>\n </div>\n <!--uses cdkTreeNodeOutlet to render children nodes, CdkTreeControl is used to control isExpanded state.-->\n <div class=\"eui-ul-rep eui-tree-node\" role=\"group\" *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </div>\n </cdk-nested-tree-node>\n </cdk-tree>\n</div>\n\n<ng-template #nodeTemplateDefault let-node let-onSelect=\"onSelect\" let-id=\"id\" let-path=\"path\">\n <ng-container *ngIf=\"node\">\n <div class=\"eui-tree-node-wrapper__container-left\" [class.eui-tree-node-wrapper__container-left--selected]=\"node?.isSelected\">\n <!--input checkbox area-->\n <input\n euiInputCheckBox\n *ngIf=\"node && node.selectable\"\n type=\"checkbox\"\n id=\"{{ id }}\"\n [checked]=\"!!node?.isSelected\"\n [indeterminate]=\"!!node?.isIndeterminate\"\n (change)=\"onSelect($event)\"\n class=\"eui-u-mr-m\" />\n\n <!--icon area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.iconSvgName\">\n <eui-icon-svg\n icon=\"{{ node?.treeContentBlock?.iconSvgName }}\"\n fillColor=\"{{ node?.treeContentBlock?.iconTypeClass || 'neutral' }}\"\n size=\"s\"\n class=\"eui-u-mr-xs\">\n </eui-icon-svg>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.chips\">\n <eui-chip\n *ngFor=\"let chip of node.treeContentBlock.chips\"\n euiSizeS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-mr-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--badge (typeLabel & typeClass) area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.typeLabel\" [ngSwitch]=\"node?.treeContentBlock?.typeClass\">\n <eui-badge euiSizeM [euiVariant]=\"node?.treeContentBlock?.typeClass || 'primary'\" class=\"eui-u-flex-no-shrink eui-u-mr-xs\">\n {{ node?.treeContentBlock?.typeLabel }}\n </eui-badge>\n </ng-container>\n </div>\n\n <!--label area-->\n <div class=\"eui-tree-node-wrapper__container-middle\">\n <label\n *ngIf=\"!node?.treeContentBlock?.url && !node?.treeContentBlock?.urlExternal\"\n euiLabel\n for=\"{{ id }}\"\n class=\"eui-u-text-truncate eui-u-p-2xs\"\n [class.eui-label--selected]=\"\n highlightPath\n ? getRunTimeSelectionRecursiveState(path)?.selectionRecursiveState === 'indeterminate' || node?.isSelected\n : node?.isSelected\n \"\n [class.eui-u-cursor-pointer]=\"node?.selectable\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </label>\n <label *ngIf=\"node?.treeContentBlock?.url\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-p-2xs\">\n <a\n class=\"eui-u-text-link\"\n [class.eui-u-text-link-standalone]=\"!showUnderlinedLinks\"\n [routerLink]=\"node?.treeContentBlock?.url\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n <label *ngIf=\"node?.treeContentBlock?.urlExternal\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-p-2xs\">\n <a\n class=\"eui-u-text-link-external\"\n [class.eui-u-text-link-external-standalone]=\"!showUnderlinedLinks\"\n href=\"{{ node?.treeContentBlock?.urlExternal }}\"\n target=\"{{ node?.treeContentBlock?.urlExternalTarget || 'blank' }}\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n </div>\n\n <div *ngIf=\"node?.treeContentBlock?.rightContent\" class=\"eui-tree-node-wrapper__container-right\">\n <!--badges area-->\n <ng-container *ngFor=\"let badge of node.treeContentBlock.rightContent?.badges\">\n <eui-badge euiOutline [euiVariant]=\"badge.typeClass || 'secondary'\" class=\"eui-u-ml-xs\">\n <span euiLabel>{{ badge.label }}</span>\n </eui-badge>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngFor=\"let chip of node.treeContentBlock.rightContent?.chips\">\n <eui-chip\n euiSizeS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-ml-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--Context menu-->\n <ng-container *ngIf=\"node.treeContentBlock.rightContent?.contextMenuMetaData && rightContextMenuTemplateRef\">\n <eui-dropdown class=\"eui-u-ml-xs\">\n <button euiButton euiSizeS euiRounded euiIconButton euiBasicButton euiSecondary [attr.aria-label]=\"'Options menu'\">\n <eui-icon-svg icon=\"ellipsis-vertical:sharp\"></eui-icon-svg>\n </button>\n <eui-dropdown-content>\n <ng-template\n [ngTemplateOutlet]=\"rightContextMenuTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.rightContent?.contextMenuMetaData,\n metadata: node?.treeContentBlock?.rightContent?.contextMenuMetaData\n }\">\n </ng-template>\n </eui-dropdown-content>\n </eui-dropdown>\n </ng-container>\n </div>\n\n <!--metadata, uses the help of ng template to generate dynamic expand variable without handling state -->\n <ng-container\n *ngIf=\"node.treeContentBlock?.metadata && nodeContentMetadataTemplateRef\"\n [ngTemplateOutlet]=\"nodeContentMetadataContainer\"\n [ngTemplateOutletContext]=\"{\n $implicit: { expanded: false }\n }\">\n </ng-container>\n <ng-template #nodeContentMetadataContainer let-metaDataContainer>\n <button\n euiButton\n euiBasicButton\n euiIconButton\n euiRounded\n euiSizeS\n type=\"button\"\n aria-label=\"expand collapse tree item\"\n (click)=\"metaDataContainer.expanded = !metaDataContainer.expanded\">\n <eui-icon-svg [icon]=\"metaDataContainer.expanded ? 'chevron-down:sharp' : 'chevron-forward:sharp'\"></eui-icon-svg>\n </button>\n <div *ngIf=\"metaDataContainer.expanded\" class=\"eui-tree-node__metacontent\">\n <!--passing metadata of the node content to provided template-ref:nodeContentMetadataTemplateRef-->\n <ng-template\n [ngTemplateOutlet]=\"nodeContentMetadataTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.metadata,\n metadata: node?.treeContentBlock?.metadata\n }\">\n </ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-template>\n", styles: [".eui-tree{display:flex;overflow-x:hidden;overflow-y:auto;position:relative;width:100%}.eui-tree .eui-tree__wrapper{display:flex;list-style:none;margin:0;overflow-y:auto;padding:var(--eui-s-2xs);position:relative;width:100%}.eui-tree .eui-tree__wrapper::-webkit-scrollbar{display:inherit;height:8px;width:8px;background-color:var(--eui-c-neutral-bg-light)}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-thumb{background-color:var(--eui-c-neutral-lightest);border-radius:5rem}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-thumb:hover{background-color:var(--eui-c-neutral-lighter)}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-track{background-color:var(--eui-c-neutral-bg-light);border-radius:0}.eui-tree .eui-tree__wrapper .eui-cdk-tree{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{display:flex;width:auto}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child){padding-inline-start:var(--eui-s-xl)}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node--with-child{display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node__metacontent{display:flex}.eui-tree .eui-tree__wrapper .eui-tree-node__button{margin-left:calc(-3 * var(--eui-s-2xs));margin-right:var(--eui-s-2xs)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper{align-items:center;display:flex;min-height:var(--eui-s-xl);width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper:hover{background-color:var(--eui-c-neutral-bg-light)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container{align-items:center;display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-left{align-items:center;display:flex;justify-content:flex-start}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-middle{align-items:center;display:flex;justify-content:flex-start;overflow:hidden;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-right{align-items:center;display:flex;justify-content:flex-end;margin-left:auto}.eui-tree:not(.eui-tree--with-children) .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{padding-inline-start:2px}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-ul-rep{padding-inline-start:var(--eui-s-s)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-ul-rep:before{border-left:1px solid var(--eui-c-neutral-lightest);content:\"\";height:calc(100% - var(--eui-s-m) - var(--eui-s-xl));position:absolute;top:var(--eui-s-xl)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-ul-rep:first-child:before{height:calc(100% - var(--eui-s-m) - var(--eui-s-2xs));top:0}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep{padding-inline-start:var(--eui-s-s);position:relative}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep:before:not(.eui-tree-node--first){border-top:1px solid var(--eui-c-neutral-lightest);content:\"\";display:block;height:0;left:0;position:absolute;top:var(--eui-s-m);width:var(--eui-s-xl)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep.eui-tree-node:not(.eui-tree-node--with-child):before{position:relative;left:0;display:inline-flex;width:var(--eui-s-2xl);border-bottom:1px solid var(--eui-c-neutral-lightest);content:\"\";margin-left:calc(-2 * var(--eui-s-l) + var(--eui-s-2xs));top:var(--eui-s-m)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep.eui-tree-node.eui-tree-node--with-child:before{position:absolute;left:calc(1 * var(--eui-s-2xl) + var(--eui-s-2xs));display:inline-flex;width:var(--eui-s-s);border-bottom:1px solid var(--eui-c-neutral-lightest);border-left:1px solid var(--eui-c-neutral-lightest);content:\"\";margin-left:calc(-2 * var(--eui-s-l) + var(--eui-s-2xs));top:var(--eui-s-m)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep.eui-tree-node--last:before{height:auto;top:var(--eui-s-m)}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i4.EuiInputCheckboxComponent, selector: "input[euiInputCheckBox]", inputs: ["indeterminate", "isInvalid", "checked"], outputs: ["indeterminateChange"] }, { kind: "directive", type: i5.CdkNestedTreeNode, selector: "cdk-nested-tree-node", exportAs: ["cdkNestedTreeNode"] }, { kind: "directive", type: i5.CdkTreeNodeDef, selector: "[cdkTreeNodeDef]", inputs: ["cdkTreeNodeDefWhen"] }, { kind: "directive", type: i5.CdkTreeNodeToggle, selector: "[cdkTreeNodeToggle]", inputs: ["cdkTreeNodeToggleRecursive"] }, { kind: "component", type: i5.CdkTree, selector: "cdk-tree", inputs: ["dataSource", "treeControl", "trackBy"], exportAs: ["cdkTree"] }, { kind: "directive", type: i5.CdkTreeNodeOutlet, selector: "[cdkTreeNodeOutlet]" }, { kind: "component", type: i6.EuiButtonComponent, selector: "button[euiButton], a[euiButton]", inputs: ["e2eAttr", "id", "euiBasicButton", "euiButtonCall", "euiBlockButton", "euiIconButton", "euiLineWrap", "isChecked", "euiDisabled"], outputs: ["buttonClick"] }, { kind: "component", type: i7.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "fillColor", "set", "size", "style", "iconUrl", "transform", "euiVariant", "aria-label", "ariaHidden", "focusable", "isLoading", "isInputIcon", "euiStart", "euiEnd"] }, { kind: "component", type: i8.EuiLabelComponent, selector: "label[euiLabel], span[euiLabel], div[euiLabel], a[euiLabel], eui-label, label[euiSublabel], span[euiSublabel], div[euiSublabel], a[euiSublabel], eui-sublabel", inputs: ["euiRequired", "euiReadonly", "euiSublabel"] }, { kind: "component", type: i9.EuiBadgeComponent, selector: "div[euiBadge], span[euiBadge], eui-badge", inputs: ["e2eAttr", "aria-label", "maxCharCount", "charReplacement", "euiIconBadge", "euiDottedBadge"] }, { kind: "component", type: i10.EuiChipComponent, selector: "eui-chip, span[euiChip], li[euiChip]", inputs: ["ariaLabel", "e2eAttr", "euiInternalId", "tooltipMessage", "id", "data", "isChipRemovable", "isSquared", "isFilled"], outputs: ["remove"] }, { kind: "component", type: i11.EuiDropdownComponent, selector: "eui-dropdown", inputs: ["e2eAttr", "tabIndex", "width", "position", "isBlock", "isDropDownRightAligned", "hasClosedOnClickInside", "isLabelUpdatedFromSelectedItem", "isExpandOnHover", "hasTabNavigation", "isRightClickEnabled", "euiDisabled"], outputs: ["expand"] }, { kind: "directive", type: i11.EuiDropdownContentDirective, selector: "eui-dropdown-content" }, { kind: "directive", type: i1.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "pipe", type: i12.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
850
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.0.2", type: EuiTreeComponent, selector: "eui-tree", inputs: { e2eAttr: "e2eAttr", nodes: "nodes", nodeTemplateRef: "nodeTemplateRef", nodeContentMetadataTemplateRef: "nodeContentMetadataTemplateRef", rightContextMenuTemplateRef: "rightContextMenuTemplateRef", customNodeSelectFn: "customNodeSelectFn", expandedIconClass: "expandedIconClass", collapsedIconClass: "collapsedIconClass", expandedSvgIconClass: "expandedSvgIconClass", collapsedSvgIconClass: "collapsedSvgIconClass", isClickTogglingNode: ["isClickTogglingNode", "isClickTogglingNode", booleanAttribute], isMultiselect: ["isMultiselect", "isMultiselect", booleanAttribute], isSingleSelect: ["isSingleSelect", "isSingleSelect", booleanAttribute], isRecursiveSelection: ["isRecursiveSelection", "isRecursiveSelection", booleanAttribute], isRecursiveParentSelection: ["isRecursiveParentSelection", "isRecursiveParentSelection", booleanAttribute], showUnderlinedLinks: ["showUnderlinedLinks", "showUnderlinedLinks", booleanAttribute], showLines: ["showLines", "showLines", booleanAttribute], autoTranslate: ["autoTranslate", "autoTranslate", booleanAttribute], highlightPath: ["highlightPath", "highlightPath", booleanAttribute] }, outputs: { selectionChange: "selectionChange", nodeClick: "nodeClick", nodeToggle: "nodeToggle" }, host: { properties: { "class": "this.cssClasses", "attr.data-e2e": "this.e2eAttr" } }, viewQueries: [{ propertyName: "cdkScrollableRef", first: true, predicate: ["cdkScrollableRef"], descendants: true, read: CdkScrollable }, { propertyName: "treeComponentInstance", first: true, predicate: ["treeComponentInstance"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"eui-ul-rep eui-tree__wrapper\" cdkScrollable #cdkScrollableRef>\n <cdk-tree\n #treeComponentInstance\n [dataSource]=\"cdkArrayDataSource\"\n [treeControl]=\"cdkTreeControl\"\n [trackBy]=\"trackBy\"\n *ngIf=\"renderTree\"\n class=\"eui-cdk-tree\">\n <!-- There are two states of generic cdk-nested-tree-node declarations.\n First one is without child. No sub rendering.\n -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeRunTimeItemModel\" class=\"eui-cdk-nested-tree-node\">\n <div *ngIf=\"treeRunTimeItemModel\"\n class=\"eui-li-rep eui-tree-node\"\n [class.eui-tree-node--first]=\"treeRunTimeItemModel?.path === '0'\"\n [class.eui-tree-node--last]=\"treeRunTimeItemModel.last\"\n title=\"{{\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div class=\"eui-tree-node-wrapper\"\n (click)=\"onNodeClick(treeRunTimeItemModel)\">\n <div class=\"eui-tree-node-wrapper__container\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeRunTimeItemModel?.path)?.node,\n onSelect: onSelectFn(treeRunTimeItemModel.path),\n id: uid + treeRunTimeItemModel.path,\n path: treeRunTimeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n </div>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node\n *cdkTreeNodeDef=\"let treeRunTimeItemModel; when: hasChild\"\n class=\"eui-cdk-nested-tree-node eui-cdk-nested-tree-node--with-child\">\n <div\n class=\"eui-li-rep eui-tree-node eui-tree-node--with-child\"\n [class.eui-tree-node--first]=\"treeRunTimeItemModel?.path === '0'\"\n [class.eui-tree-node--last]=\"treeRunTimeItemModel.last\"\n *ngIf=\"treeRunTimeItemModel\"\n title=\"{{\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div\n class=\"eui-tree-node-wrapper\">\n <!--Here wraps the node, and listen for node clicks.-->\n <div (click)=\"onNodeClick(treeRunTimeItemModel)\" class=\"eui-tree-node-wrapper__container\">\n <!-- Expand/collapse action button -->\n <button\n euiButton\n euiIconButton\n euiBasicButton\n euiRounded\n euiSizeS\n type=\"button\"\n [attr.aria-label]=\"'Toggle ' + getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\"\n (click)=\"onNodeToggle(treeRunTimeItemModel)\"\n cdkTreeNodeToggle\n class=\"eui-tree-node__button\">\n <eui-icon-svg\n *ngIf=\"!cdkTreeControl.isExpanded(treeRunTimeItemModel) && !collapsedIconClass\"\n [icon]=\"expandedSvgIconClass\"></eui-icon-svg>\n <eui-icon-svg\n *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel) && !expandedIconClass\"\n [icon]=\"collapsedSvgIconClass\"></eui-icon-svg>\n </button>\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeRunTimeItemModel.path)?.node,\n onSelect: onSelectFn(treeRunTimeItemModel.path),\n id: uid + treeRunTimeItemModel.path,\n path: treeRunTimeItemModel.path,\n children: getTreeItem(treeRunTimeItemModel?.path)?.children\n }\">\n </ng-container>\n </div>\n </div>\n <!--uses cdkTreeNodeOutlet to render children nodes, CdkTreeControl is used to control isExpanded state.-->\n <div class=\"eui-ul-rep eui-tree-node\" role=\"group\" *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </div>\n </cdk-nested-tree-node>\n </cdk-tree>\n</div>\n\n<ng-template #nodeTemplateDefault let-node let-onSelect=\"onSelect\" let-id=\"id\" let-path=\"path\">\n <ng-container *ngIf=\"node\">\n <div class=\"eui-tree-node-wrapper__container-left\" [class.eui-tree-node-wrapper__container-left--selected]=\"node?.isSelected\">\n <!--input checkbox area-->\n <input\n euiInputCheckBox\n *ngIf=\"node && node.selectable\"\n type=\"checkbox\"\n id=\"{{ id }}\"\n [checked]=\"!!node?.isSelected\"\n [indeterminate]=\"!!node?.isIndeterminate\"\n (change)=\"onSelect($event)\"\n class=\"eui-u-mr-m\" />\n\n <!--icon area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.iconSvgName\">\n <eui-icon-svg\n icon=\"{{ node?.treeContentBlock?.iconSvgName }}\"\n fillColor=\"{{ node?.treeContentBlock?.iconTypeClass || 'neutral' }}\"\n size=\"s\"\n class=\"eui-u-mr-xs\">\n </eui-icon-svg>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.chips\">\n <eui-chip\n *ngFor=\"let chip of node.treeContentBlock.chips\"\n euiSizeS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-mr-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--badge (typeLabel & typeClass) area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.typeLabel\" [ngSwitch]=\"node?.treeContentBlock?.typeClass\">\n <eui-badge euiSizeM [euiVariant]=\"node?.treeContentBlock?.typeClass || 'primary'\" class=\"eui-u-flex-no-shrink eui-u-mr-xs\">\n {{ node?.treeContentBlock?.typeLabel }}\n </eui-badge>\n </ng-container>\n </div>\n\n <!--label area-->\n <div class=\"eui-tree-node-wrapper__container-middle\">\n <label\n *ngIf=\"!node?.treeContentBlock?.url && !node?.treeContentBlock?.urlExternal\"\n euiLabel\n for=\"{{ id }}\"\n class=\"eui-u-text-truncate eui-u-p-2xs\"\n [class.eui-label--selected]=\"\n highlightPath\n ? getRunTimeSelectionRecursiveState(path)?.selectionRecursiveState === 'indeterminate' || node?.isSelected\n : node?.isSelected\n \"\n [class.eui-u-cursor-pointer]=\"node?.selectable\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </label>\n <label *ngIf=\"node?.treeContentBlock?.url\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-p-2xs\">\n <a\n class=\"eui-u-text-link\"\n [class.eui-u-text-link-standalone]=\"!showUnderlinedLinks\"\n [routerLink]=\"node?.treeContentBlock?.url\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n <label *ngIf=\"node?.treeContentBlock?.urlExternal\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-p-2xs\">\n <a\n class=\"eui-u-text-link-external\"\n [class.eui-u-text-link-external-standalone]=\"!showUnderlinedLinks\"\n href=\"{{ node?.treeContentBlock?.urlExternal }}\"\n target=\"{{ node?.treeContentBlock?.urlExternalTarget || 'blank' }}\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n </div>\n\n <div *ngIf=\"node?.treeContentBlock?.rightContent\" class=\"eui-tree-node-wrapper__container-right\">\n <!--badges area-->\n <ng-container *ngFor=\"let badge of node.treeContentBlock.rightContent?.badges\">\n <eui-badge euiOutline [euiVariant]=\"badge.typeClass || 'secondary'\" class=\"eui-u-ml-xs\">\n <span euiLabel>{{ badge.label }}</span>\n </eui-badge>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngFor=\"let chip of node.treeContentBlock.rightContent?.chips\">\n <eui-chip\n euiSizeS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-ml-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--Context menu-->\n <ng-container *ngIf=\"node.treeContentBlock.rightContent?.contextMenuMetaData && rightContextMenuTemplateRef\">\n <eui-dropdown class=\"eui-u-ml-xs\">\n <button euiButton euiSizeS euiRounded euiIconButton euiBasicButton euiSecondary [attr.aria-label]=\"'Options menu'\">\n <eui-icon-svg icon=\"ellipsis-vertical:sharp\"></eui-icon-svg>\n </button>\n <eui-dropdown-content>\n <ng-template\n [ngTemplateOutlet]=\"rightContextMenuTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.rightContent?.contextMenuMetaData,\n metadata: node?.treeContentBlock?.rightContent?.contextMenuMetaData\n }\">\n </ng-template>\n </eui-dropdown-content>\n </eui-dropdown>\n </ng-container>\n </div>\n\n <!--metadata, uses the help of ng template to generate dynamic expand variable without handling state -->\n <ng-container\n *ngIf=\"node.treeContentBlock?.metadata && nodeContentMetadataTemplateRef\"\n [ngTemplateOutlet]=\"nodeContentMetadataContainer\"\n [ngTemplateOutletContext]=\"{\n $implicit: { expanded: false }\n }\">\n </ng-container>\n <ng-template #nodeContentMetadataContainer let-metaDataContainer>\n <button\n euiButton\n euiBasicButton\n euiIconButton\n euiRounded\n euiSizeS\n type=\"button\"\n aria-label=\"expand collapse tree item\"\n (click)=\"metaDataContainer.expanded = !metaDataContainer.expanded\">\n <eui-icon-svg [icon]=\"metaDataContainer.expanded ? 'chevron-down:sharp' : 'chevron-forward:sharp'\"></eui-icon-svg>\n </button>\n <div *ngIf=\"metaDataContainer.expanded\" class=\"eui-tree-node__metacontent\">\n <!--passing metadata of the node content to provided template-ref:nodeContentMetadataTemplateRef-->\n <ng-template\n [ngTemplateOutlet]=\"nodeContentMetadataTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.metadata,\n metadata: node?.treeContentBlock?.metadata\n }\">\n </ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-template>\n", styles: [".eui-tree{display:flex;overflow-x:hidden;overflow-y:auto;position:relative;width:100%}.eui-tree .eui-tree__wrapper{display:flex;list-style:none;margin:0;overflow-y:auto;padding:var(--eui-s-2xs);position:relative;width:100%}.eui-tree .eui-tree__wrapper::-webkit-scrollbar{display:inherit;height:8px;width:8px;background-color:var(--eui-c-neutral-bg-light)}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-thumb{background-color:var(--eui-c-neutral-lightest);border-radius:5rem}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-thumb:hover{background-color:var(--eui-c-neutral-lighter)}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-track{background-color:var(--eui-c-neutral-bg-light);border-radius:0}.eui-tree .eui-tree__wrapper .eui-cdk-tree{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{display:flex;width:auto}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child){padding-inline-start:var(--eui-s-xl)}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node--with-child{display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node__metacontent{display:flex}.eui-tree .eui-tree__wrapper .eui-tree-node__button{margin-left:calc(-3 * var(--eui-s-2xs));margin-right:var(--eui-s-2xs)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper{align-items:center;display:flex;min-height:var(--eui-s-xl);width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper:hover{background-color:var(--eui-c-neutral-bg-light)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container{align-items:center;display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-left{align-items:center;display:flex;justify-content:flex-start}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-middle{align-items:center;display:flex;justify-content:flex-start;overflow:hidden;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-right{align-items:center;display:flex;justify-content:flex-end;margin-left:auto}.eui-tree:not(.eui-tree--with-children) .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{padding-inline-start:2px}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-ul-rep{padding-inline-start:var(--eui-s-s)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-ul-rep:before{border-left:1px solid var(--eui-c-neutral-lightest);content:\"\";height:calc(100% - var(--eui-s-m) - var(--eui-s-xl));position:absolute;top:var(--eui-s-xl)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-ul-rep:first-child:before{height:calc(100% - var(--eui-s-m) - var(--eui-s-2xs));top:0}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep{padding-inline-start:var(--eui-s-s);position:relative}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep:before:not(.eui-tree-node--first){border-top:1px solid var(--eui-c-neutral-lightest);content:\"\";display:block;height:0;left:0;position:absolute;top:var(--eui-s-m);width:var(--eui-s-xl)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep.eui-tree-node:not(.eui-tree-node--with-child):before{position:relative;left:0;display:inline-flex;width:var(--eui-s-2xl);border-bottom:1px solid var(--eui-c-neutral-lightest);content:\"\";margin-left:calc(-2 * var(--eui-s-l) + var(--eui-s-2xs));top:var(--eui-s-m)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep.eui-tree-node.eui-tree-node--with-child:before{position:absolute;left:calc(1 * var(--eui-s-2xl) + var(--eui-s-2xs));display:inline-flex;width:var(--eui-s-s);border-bottom:1px solid var(--eui-c-neutral-lightest);border-left:1px solid var(--eui-c-neutral-lightest);content:\"\";margin-left:calc(-2 * var(--eui-s-l) + var(--eui-s-2xs));top:var(--eui-s-m)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep.eui-tree-node--last:before{height:auto;top:var(--eui-s-m)}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i4.EuiInputCheckboxComponent, selector: "input[euiInputCheckBox]", inputs: ["indeterminate", "isInvalid", "checked"], outputs: ["indeterminateChange"] }, { kind: "directive", type: i5.CdkNestedTreeNode, selector: "cdk-nested-tree-node", exportAs: ["cdkNestedTreeNode"] }, { kind: "directive", type: i5.CdkTreeNodeDef, selector: "[cdkTreeNodeDef]", inputs: ["cdkTreeNodeDefWhen"] }, { kind: "directive", type: i5.CdkTreeNodeToggle, selector: "[cdkTreeNodeToggle]", inputs: ["cdkTreeNodeToggleRecursive"] }, { kind: "component", type: i5.CdkTree, selector: "cdk-tree", inputs: ["dataSource", "treeControl", "trackBy"], exportAs: ["cdkTree"] }, { kind: "directive", type: i5.CdkTreeNodeOutlet, selector: "[cdkTreeNodeOutlet]" }, { kind: "component", type: i6.EuiButtonComponent, selector: "button[euiButton], a[euiButton]", inputs: ["e2eAttr", "id", "euiBasicButton", "euiButtonCall", "euiBlockButton", "euiIconButton", "euiLineWrap", "isChecked", "euiDisabled"], outputs: ["buttonClick"] }, { kind: "component", type: i7.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "fillColor", "set", "size", "style", "iconUrl", "transform", "euiVariant", "aria-label", "ariaHidden", "focusable", "isLoading", "isInputIcon", "euiStart", "euiEnd"] }, { kind: "component", type: i8.EuiLabelComponent, selector: "label[euiLabel], span[euiLabel], div[euiLabel], a[euiLabel], eui-label, label[euiSublabel], span[euiSublabel], div[euiSublabel], a[euiSublabel], eui-sublabel", inputs: ["euiRequired", "euiReadonly", "euiSublabel"] }, { kind: "component", type: i9.EuiBadgeComponent, selector: "div[euiBadge], span[euiBadge], eui-badge", inputs: ["e2eAttr", "aria-label", "maxCharCount", "charReplacement", "euiIconBadge", "euiDottedBadge"] }, { kind: "component", type: i10.EuiChipComponent, selector: "eui-chip, span[euiChip], li[euiChip]", inputs: ["ariaLabel", "e2eAttr", "euiInternalId", "tooltipMessage", "id", "data", "isChipRemovable", "isSquared", "isFilled"], outputs: ["remove"] }, { kind: "component", type: i11.EuiDropdownComponent, selector: "eui-dropdown", inputs: ["e2eAttr", "tabIndex", "width", "position", "isBlock", "isDropDownRightAligned", "hasClosedOnClickInside", "isLabelUpdatedFromSelectedItem", "isExpandOnHover", "hasTabNavigation", "isRightClickEnabled", "euiDisabled"], outputs: ["expand"] }, { kind: "directive", type: i11.EuiDropdownContentDirective, selector: "eui-dropdown-content" }, { kind: "directive", type: i1.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "pipe", type: i12.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
831
851
|
}
|
832
852
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: EuiTreeComponent, decorators: [{
|
833
853
|
type: Component,
|
@@ -848,6 +868,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
848
868
|
type: Input
|
849
869
|
}], rightContextMenuTemplateRef: [{
|
850
870
|
type: Input
|
871
|
+
}], customNodeSelectFn: [{
|
872
|
+
type: Input
|
851
873
|
}], expandedIconClass: [{
|
852
874
|
type: Input
|
853
875
|
}], collapsedIconClass: [{
|
@@ -947,4 +969,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
947
969
|
exports: [EuiTreeComponent],
|
948
970
|
}]
|
949
971
|
}] });
|
950
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsUUFBUSxFQUNSLHVCQUF1QixFQUN2QixZQUFZLEVBQ1osTUFBTSxFQUNOLGlCQUFpQixFQU1qQixXQUFXLEVBRVgsZ0JBQWdCLEVBQ2hCLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFRSCxpQkFBaUIsR0FDcEIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFXLE1BQU0sbUJBQW1CLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFB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Qjt3QkFDakIsZUFBZTtxQkFDbEI7b0JBQ0QsWUFBWSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQ2hDLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO2lCQUM5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LFxuICAgIE5nTW9kdWxlLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBPdXRwdXQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIE9uRGVzdHJveSxcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gICAgU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUsXG4gICAgVHJlZURhdGFNb2RlbCxcbiAgICBUcmVlSXRlbU1vZGVsLFxuICAgIFRyZWVEYXRhUnVuVGltZU1vZGVsLFxuICAgIFRyZWVJdGVtUnVuVGltZU1vZGVsLFxuICAgIFRyZWVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlTW9kZWwsXG4gICAgRXVpVHJlZVNlbGVjdGlvbkNoYW5nZXMsXG4gICAgRXVpVHJlZVBhZ2luYXRpb24sXG59IGZyb20gJy4vZXVpLXRyZWUubW9kZWwnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBFdWlJbnB1dENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1pbnB1dC1jaGVja2JveCc7XG5pbXBvcnQgeyBFdWlCdXR0b25Nb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWJ1dHRvbic7XG5pbXBvcnQgeyBFdWlJY29uTW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1pY29uJztcbmltcG9ydCB7IEV1aUxhYmVsTW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1sYWJlbCc7XG5pbXBvcnQgeyBFdWlCYWRnZU1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktYmFkZ2UnO1xuaW1wb3J0IHsgRXVpQ2hpcE1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktY2hpcCc7XG5pbXBvcnQgeyBFdWlEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktZHJvcGRvd24nO1xuaW1wb3J0IHsgTmVzdGVkVHJlZUNvbnRyb2wsIENka1RyZWVNb2R1bGUsIENka1RyZWUgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XG5pbXBvcnQgeyBBcnJheURhdGFTb3VyY2UsIFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgU2Nyb2xsaW5nTW9kdWxlLCBTY3JvbGxEaXNwYXRjaGVyLCBDZGtTY3JvbGxhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldWktdHJlZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V1aS10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvX2luZGV4LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgcHVibGljIGdldCBjc3NDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENzc0NsYXNzZXMoKTtcbiAgICB9XG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtZTJlJykgQElucHV0KCkgZTJlQXR0ciA9ICdldWktdHJlZSc7XG4gICAgQElucHV0KCkgbm9kZXM6IFRyZWVEYXRhTW9kZWw7XG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgQElucHV0KCkgbm9kZVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIEBJbnB1dCgpIG5vZGVDb250ZW50TWV0YWRhdGFUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBASW5wdXQoKSByaWdodENvbnRleHRNZW51VGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgZXhwYW5kZWRJY29uQ2xhc3M6IHN0cmluZztcbiAgICBASW5wdXQoKSBjb2xsYXBzZWRJY29uQ2xhc3M6IHN0cmluZztcbiAgICBASW5wdXQoKSBleHBhbmRlZFN2Z0ljb25DbGFzcyA9ICdjaGV2cm9uLWZvcndhcmQ6c2hhcnAnO1xuICAgIEBJbnB1dCgpIGNvbGxhcHNlZFN2Z0ljb25DbGFzcyA9ICdjaGV2cm9uLWRvd246c2hhcnAnO1xuXG4gICAgQFZpZXdDaGlsZCgnY2RrU2Nyb2xsYWJsZVJlZicsIHsgcmVhZDogQ2RrU2Nyb2xsYWJsZSB9KSBjZGtTY3JvbGxhYmxlUmVmOiBDZGtTY3JvbGxhYmxlO1xuICAgIEBWaWV3Q2hpbGQoJ3RyZWVDb21wb25lbnRJbnN0YW5jZScpIHB1YmxpYyB0cmVlQ29tcG9uZW50SW5zdGFuY2U6IENka1RyZWU8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+O1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzQ2xpY2tUb2dnbGluZ05vZGUgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNNdWx0aXNlbGVjdCA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc1NpbmdsZVNlbGVjdCA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc1JlY3Vyc2l2ZVNlbGVjdGlvbiA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbiA9IHRydWU7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dVbmRlcmxpbmVkTGlua3MgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd0xpbmVzID0gdHJ1ZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYXV0b1RyYW5zbGF0ZSA9IHRydWU7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGhpZ2hsaWdodFBhdGggPSBmYWxzZTtcblxuICAgIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEV1aVRyZWVTZWxlY3Rpb25DaGFuZ2VzPigpO1xuICAgIEBPdXRwdXQoKSBub2RlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVJdGVtTW9kZWw+KCk7XG4gICAgQE91dHB1dCgpIG5vZGVUb2dnbGUgPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVJdGVtTW9kZWw+KCk7XG4gICAgY2RrQXJyYXlEYXRhU291cmNlOiBBcnJheURhdGFTb3VyY2U8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+O1xuICAgIGNka1RyZWVDb250cm9sOiBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD47XG4gICAgcmVuZGVyVHJlZTogYm9vbGVhbjtcbiAgICBwdWJsaWMgdWlkOiBzdHJpbmcgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDAwKS50b1N0cmluZygpO1xuICAgIHByb3RlY3RlZCBfaXNNdWx0aUxldmVsO1xuICAgIHByaXZhdGUgcHJvY2Vzc2VkTm9kZXM6IFRyZWVEYXRhTW9kZWw7XG4gICAgcHJpdmF0ZSB0cmVlRGF0YVJ1blRpbWU6IFRyZWVEYXRhUnVuVGltZU1vZGVsO1xuICAgIHByaXZhdGUgdHJlZURhdGFSdW5UaW1lQmFja3VwOiBUcmVlRGF0YVJ1blRpbWVNb2RlbDtcbiAgICBwcml2YXRlIHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTogQXJyYXk8VHJlZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVNb2RlbD47XG4gICAgcHJpdmF0ZSBzZWxlY3Rpb25Nb2RlbDogU2VsZWN0aW9uTW9kZWw8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+O1xuICAgIHByaXZhdGUgc2VsZWN0aW9uTW9kZWxTdWJzO1xuICAgIHByaXZhdGUgc2Nyb2xsRGlzcGF0Y2hlclN1YnM7XG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uO1xuICAgIHByaXZhdGUgdHJlZVBhZ2luYXRpb246IEV1aVRyZWVQYWdpbmF0aW9uPFRyZWVJdGVtUnVuVGltZU1vZGVsPjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHNjcm9sbERpc3BhdGNoZXI6IFNjcm9sbERpc3BhdGNoZXIpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0VHJlZSgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ25vZGVzJ10/LmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlc1snbm9kZXMnXT8ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmluaXRUcmVlKCk7XG4gICAgICAgICAgICBpZih0aGlzLnRyZWVDb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZUNvbXBvbmVudEluc3RhbmNlPy5yZW5kZXJOb2RlQ2hhbmdlcyhbXSk7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlQ29tcG9uZW50SW5zdGFuY2U/LnJlbmRlck5vZGVDaGFuZ2VzKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWxTdWJzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclN1YnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFNlbGVjdGlvbigpOiBUcmVlRGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBnZXRQcm9jZXNzZWROb2RlcygpOiBUcmVlRGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkTm9kZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IGFueSB7XG4gICAgICAgIHJldHVybiBpdGVtLnBhdGg7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdHJhY2tCeUNvbnRyb2woaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiBhbnkge1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICBnZXRUcmVlSXRlbShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbU1vZGVsIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgbm9kZUFyciA9IHRoaXMucHJvY2Vzc2VkTm9kZXM7XG4gICAgICAgIGxldCBub2RlO1xuICAgICAgICBpZiAobm9kZUFyciAmJiBBcnJheS5pc0FycmF5KG5vZGVBcnIpKSB7XG4gICAgICAgICAgICBpbmRleEFycj8uZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlQXJyID0gbm9kZUFyciAmJiBub2RlQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlQXJyW3BhdGhJbmRleF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgZXhwYW5kQWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmV4cGFuZEFsbCgpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGV4cGFuZEF0KHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmdldFBhcmVudFBhdGhzKHBhdGgpLnJldmVyc2UoKS5mb3JFYWNoKChwYXJlbnRQYXRoKT0+e1xuICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5leHBhbmQodGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0ocGFyZW50UGF0aCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5leHBhbmQodGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0ocGF0aCkpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBjb2xsYXBzZUFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5jb2xsYXBzZUFsbCgpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGZpbHRlclRlcm0oZmlsdGVySW5wdXQ6IHN0cmluZywgZmlsdGVyS2V5Pzogc3RyaW5nLCBzaG93Q2hpbGRyZW5PZk1hdGNoZWRJdGVtcz86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGZpbHRlcklucHV0ICE9PSAnJyAmJiBmaWx0ZXJJbnB1dCAhPT0gbnVsbCAmJiB0eXBlb2YgZmlsdGVySW5wdXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuZmlsdGVyVHJlZURhdGEoc3RydWN0dXJlZENsb25lKHRoaXMudHJlZURhdGFSdW5UaW1lQmFja3VwKSwgZmlsdGVyS2V5IHx8ICdsYWJlbCcsIGZpbHRlcklucHV0LCBzaG93Q2hpbGRyZW5PZk1hdGNoZWRJdGVtcyk7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuYXBwbHlSdW5UaW1lTGFzdEl0ZW1zKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIHRoaXMuY2RrQXJyYXlEYXRhU291cmNlID0gbmV3IEFycmF5RGF0YVNvdXJjZSh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4sIHsgdHJhY2tCeTogdGhpcy50cmFja0J5Q29udHJvbCB9KTtcbiAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZGF0YU5vZGVzID0gdGhpcy50cmVlRGF0YVJ1blRpbWU7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5leHBhbmRNYXRjaGVkKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIC8vIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cCk7XG4gICAgICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2UodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD4oKG5vZGUpID0+IG5vZGU/LmNoaWxkcmVuLCB7IHRyYWNrQnk6IHRoaXMudHJhY2tCeUNvbnRyb2wgfSk7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRBbGxTZWxlY3Rpb24oaXNDaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0SXNDaGVja2VkRm9yQWxsKHRoaXMudHJlZURhdGFSdW5UaW1lLCBpc0NoZWNrZWQpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHVwZGF0ZVRyZWVJdGVtKGdpdmVuVHJlZUl0ZW06IFRyZWVJdGVtTW9kZWwsIHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCB0cmVlSXRlbSA9IHN0cnVjdHVyZWRDbG9uZShnaXZlblRyZWVJdGVtKTtcbiAgICAgICAgaWYgKHRyZWVJdGVtICYmIHBhdGgpIHtcbiAgICAgICAgdGhpcy5zZXRUcmVlRGF0YShwYXRoLCB0aGlzLnByb2Nlc3NJbnB1dHMoW3RyZWVJdGVtXSlbMF0pO1xuICAgICAgICBjb25zdCBwYXRoQXJyID0gcGF0aC5zcGxpdCgnLicpO1xuICAgICAgICBjb25zdCBpbmRleCA9IHBhcnNlSW50KHBhdGhBcnIucG9wKCksIDEwKTtcbiAgICAgICAgY29uc3QgdHJlZUl0ZW1SdW50aW1lID0gdGhpcy5jYWxjdWxhdGVSdW5UaW1lU3RhdGUodHJlZUl0ZW0sIGluZGV4LCBwYXRoQXJyLmpvaW4oJy4nKSk7XG4gICAgICAgIGlmICh0cmVlSXRlbVJ1bnRpbWU/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0cmVlSXRlbVJ1bnRpbWUuY2hpbGRyZW4gPSB0aGlzLmFwcGx5UnVuVGltZUxhc3RJdGVtcyh0cmVlSXRlbVJ1bnRpbWUuY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0VHJlZURhdGFSdW5UaW1lQmFja3VwKHBhdGgsIHRyZWVJdGVtUnVudGltZSk7XG4gICAgICAgIHRoaXMuc2V0VHJlZURhdGFSdW5UaW1lKHBhdGgsIHRyZWVJdGVtUnVudGltZSk7XG4gICAgICAgIC8vIGl0ZW1SZWN1cnNpdmVTZWxlY3Rpb25TdGF0ZVxuICAgICAgICBjb25zdCBpdGVtUmVjdXJzaXZlU2VsZWN0aW9uU3RhdGUgPSB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSh0cmVlSXRlbSk7XG4gICAgICAgIHRoaXMuc2V0UnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlVHJlZShwYXRoLCBpdGVtUmVjdXJzaXZlU2VsZWN0aW9uU3RhdGUpO1xuICAgICAgICB0aGlzLnN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgocGF0aCk7XG4gICAgICAgIC8vIFJlbmRlcmluZ1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy50cmVlQ29tcG9uZW50SW5zdGFuY2UucmVuZGVyTm9kZUNoYW5nZXMoW10pO1xuICAgICAgICB0aGlzLnRyZWVDb21wb25lbnRJbnN0YW5jZS5yZW5kZXJOb2RlQ2hhbmdlcyh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgIGlmICh0aGlzLmNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZUl0ZW1SdW50aW1lKSAmJiAhdHJlZUl0ZW0ubm9kZS5pc0V4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLnRvZ2dsZSh0cmVlSXRlbVJ1bnRpbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZUl0ZW1SdW50aW1lKSAmJiB0cmVlSXRlbS5ub2RlLmlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZXhwYW5kKHRyZWVJdGVtUnVudGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW5kZXJJbml0aWFsRXhwYW5kKHRoaXMuZ2V0UnVuVGltZVRyZWVJdGVtKHBhdGgpPy5jaGlsZHJlbik7XG4gICAgICAgIHRoaXMuZ2V0SW5pdGlhbFNlbGVjdGlvbih0aGlzLmdldFJ1blRpbWVUcmVlSXRlbShwYXRoKT8uY2hpbGRyZW4pPy5mb3JFYWNoKChydW5UaW1lSXRlbSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RUcmVlSXRlbSh0aGlzLmdldFJ1blRpbWVCYWNrdXBUcmVlSXRlbShydW5UaW1lSXRlbS5wYXRoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTm9kZUNsaWNrKHRyZWVSdW5UaW1lSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub2RlQ2xpY2suZW1pdCh0aGlzLmdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbT8ucGF0aCkpO1xuICAgICAgICBpZiAodGhpcy5pc0NsaWNrVG9nZ2xpbmdOb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLnRvZ2dsZSh0cmVlUnVuVGltZUl0ZW0pO1xuICAgICAgICAgICAgdGhpcy5vbk5vZGVUb2dnbGUodHJlZVJ1blRpbWVJdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTm9kZVRvZ2dsZSh0cmVlUnVuVGltZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtPy5wYXRoKS5ub2RlLmlzRXhwYW5kZWQgPSB0aGlzLmNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZVJ1blRpbWVJdGVtKTtcbiAgICAgICAgdGhpcy5ub2RlVG9nZ2xlLmVtaXQodGhpcy5nZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW0/LnBhdGgpKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBub2RlU2VsZWN0ZWQoZXZ0OiBhbnksIHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRUcmVlSXRlbShwYXRoKTtcbiAgICAgICAgY29uc3QgcnVuVGltZUJhY2t1cFRyZWVJdGVtID0gdGhpcy5nZXRSdW5UaW1lQmFja3VwVHJlZUl0ZW0ocGF0aCk7XG4gICAgICAgIGNvbnN0IHJlbmRlcmVkUnVuVGltZVRyZWVJdGVtID0gdGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0ocGF0aCk7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBpdGVtLm5vZGU7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBhdGgsaXRlbSxydW5UaW1lVHJlZUl0ZW0sIHJlbmRlcmVkUnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgaWYgKCFub2RlPy5zZWxlY3RDb25maWc/LnNpbmdsZVNlbGVjdCkge1xuICAgICAgICAgICAgbm9kZS5pc1NlbGVjdGVkID0gZXZ0LnRhcmdldC5jaGVja2VkO1xuICAgICAgICAgICAgbm9kZS5pc0luZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIElmIHRoZSBub2RlIGlzIHJlY3Vyc2l2ZSBpdCBzZXRzIGV2ZXJ5IGNoaWxkcmVuIHdpdGggdGhlIGNoYW5nZS5cbiAgICAgICAgICAgIGlmIChyZW5kZXJlZFJ1blRpbWVUcmVlSXRlbT8uY2hpbGRyZW4gJiYgcmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlcmVkUnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJc0NoZWNrZWRGb3JBbGwocmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuLCBldnQudGFyZ2V0LmNoZWNrZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGVUcmVlKFxuICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUoc3RydWN0dXJlZENsb25lKHRoaXMuZ2V0VHJlZUl0ZW0ocGF0aCkpKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAocmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuICYmIHJlbmRlcmVkUnVuVGltZVRyZWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID49IDApIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5zZXRJc0NoZWNrZWRGb3JBbGwocmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuLCBldnQudGFyZ2V0LmNoZWNrZWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJ1blN0YXRlQ2hhbmdlc0ZvckFsbChyZW5kZXJlZFJ1blRpbWVUcmVlSXRlbT8uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVDb21wb25lbnRJbnN0YW5jZT8ucmVuZGVyTm9kZUNoYW5nZXMoW10pO1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZUNvbXBvbmVudEluc3RhbmNlPy5yZW5kZXJOb2RlQ2hhbmdlcyh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgocGF0aCk7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRUcmVlSXRlbShwYXRoKS5ub2RlLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFRyZWVJdGVtKHJ1blRpbWVCYWNrdXBUcmVlSXRlbSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RUcmVlSXRlbShydW5UaW1lQmFja3VwVHJlZUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgbm9kZVBhdGhzU2VxID0gdGhpcy5nZXRQYXJlbnRQYXRocyhwYXRoKTtcbiAgICAgICAgICAgIGlmIChub2RlUGF0aHNTZXEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIG5vZGVQYXRoc1NlcS5mb3JFYWNoKChub2RlUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVJdGVtID0gdGhpcy5nZXRUcmVlSXRlbShub2RlUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkU3RhdGVzID0gdGhpcy5nZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUobm9kZVBhdGgpLmNoaWxkcmVuLm1hcCgoXykgPT4gXy5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlY2lkZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkU3RhdGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVJdGVtLm5vZGU/LmlzU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZT8uc2VsZWN0Q29uZmlnPy5ub0F1dG9TZWxlY3RQYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgobm9kZVBhdGgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZJdGVtID0gdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXTtcbiAgICAgICAgICAgIGlmIChldnQudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldkl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUcmVlSXRlbShwcmV2SXRlbS5wYXRoKS5ub2RlLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChwcmV2SXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGl0ZW0ubm9kZS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdChydW5UaW1lQmFja3VwVHJlZUl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtLm5vZGUuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QocnVuVGltZUJhY2t1cFRyZWVJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodFBhdGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZ0LnRhcmdldC5jaGVja2VkICYmIHByZXZJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZJdGVtTm9kZVBhdGhzU2VxID0gdGhpcy5nZXRQYXJlbnRQYXRocyhwcmV2SXRlbS5wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZJdGVtTm9kZVBhdGhzU2VxLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZJdGVtTm9kZVBhdGhzU2VxLmZvckVhY2goKG5vZGVQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShub2RlUGF0aCwgJ2FsbE5vdFNlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKG5vZGVQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVQYXRoc1NlcSA9IHRoaXMuZ2V0UGFyZW50UGF0aHMocGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVQYXRoc1NlcT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBub2RlUGF0aHNTZXEuZm9yRWFjaCgobm9kZVBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUobm9kZVBhdGgsIGV2dC50YXJnZXQuY2hlY2tlZCA/ICdpbmRldGVybWluYXRlJyA6ICdhbGxOb3RTZWxlY3RlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKG5vZGVQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc0NoaWxkID0gKF86IG51bWJlciwgaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiBib29sZWFuID0+ICEhaXRlbT8uY2hpbGRyZW4gJiYgaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+PSAwO1xuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgb25TZWxlY3RGbihwYXRoOiBzdHJpbmcpOiAoZXZ0OiBhbnkpID0+IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5nZXRUcmVlSXRlbShwYXRoKT8ubm9kZT8uc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZVNlbGVjdGVkID0gdGhpcy5ub2RlU2VsZWN0ZWQuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICByZXR1cm4gKGV2dDogYW55KSA9PiBub2RlU2VsZWN0ZWQoZXZ0LCBwYXRoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIHJldHVybiAoZXZ0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybigndHJlZUl0ZW1Nb2RlbC5ub2RlLnNlbGVjdGFibGUgaXMgZmFsc2UsIHlvdSBjYW4gbm90IGltcGxlbWVudCBvblNlbGVjdCcpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgbm9kZUFyciA9IHRoaXMucnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlO1xuICAgICAgICBsZXQgbm9kZTtcbiAgICAgICAgaW5kZXhBcnI/LmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIG5vZGVBcnIgPSBub2RlQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlID0gbm9kZUFycltwYXRoSW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0VHJlZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubm9kZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzTXVsdGlMZXZlbCA9IHRoaXMuY2hlY2tJZk11bHRpTGV2ZWwodGhpcy5ub2Rlcyk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NlZE5vZGVzID0gdGhpcy5wcm9jZXNzSW5wdXRzKHN0cnVjdHVyZWRDbG9uZSh0aGlzLm5vZGVzKSk7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuY3JlYXRlVHJlZURhdGFSdW50aW1lKHRoaXMucHJvY2Vzc2VkTm9kZXMpO1xuICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWUgPSB0aGlzLmFwcGx5UnVuVGltZUxhc3RJdGVtcyh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9IHRoaXMuY3JlYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHRoaXMucHJvY2Vzc2VkTm9kZXMpO1xuICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWVCYWNrdXAgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgLy8gdG9kbyBJdCBzaG91bGQgYmUgY29uZmlndXJhYmxlLCA4MDAsIDIgYW5kIDQwMCBhcmUgaGFyZCBjb2RlZCByaWdodCBub3dcbiAgICAgICAgICAgIGlmICh0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cC5sZW5ndGggPiA4MDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVQYWdpbmF0aW9uID0gbmV3IEV1aVRyZWVQYWdpbmF0aW9uPFRyZWVJdGVtUnVuVGltZU1vZGVsPih0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cCwgMSwgMiwgNDAwKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWdpbmF0ZWREYXRhID0gdGhpcy50cmVlUGFnaW5hdGlvbi5nZXRWaWV3RGF0YSgpLmRhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5jZGtBcnJheURhdGFTb3VyY2UgPSBuZXcgQXJyYXlEYXRhU291cmNlPFRyZWVJdGVtUnVuVGltZU1vZGVsPihwYWdpbmF0ZWREYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdGhpcy50cmFja0J5Q29udHJvbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHBhZ2luYXRlZERhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5ydW5TY3JvbGxMaXN0ZW5lcigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2U8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdGhpcy50cmFja0J5Q29udHJvbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW5kZXJJbml0aWFsRXhwYW5kKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWw8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRJbml0aWFsU2VsZWN0aW9uKHRoaXMudHJlZURhdGFSdW5UaW1lKSxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgIChhLCBiKSA9PiBhPy5wYXRoID09PSBiPy5wYXRoLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbiA9IFsuLi50aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkXT8ubWFwKChpdGVtKSA9PiB0aGlzLmdldFRyZWVJdGVtKGl0ZW0/LnBhdGgpKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsU3Vicy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnMgPSB0aGlzLnNlbGVjdGlvbk1vZGVsLmNoYW5nZWQucGlwZShkZWJvdW5jZVRpbWUoMSkpLnN1YnNjcmliZSgoc2MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25DaGFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZGVkOiBzYy5hZGRlZC5tYXAoKF8pID0+IHRoaXMuZ2V0VHJlZUl0ZW0oXy5wYXRoKSksXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZWQ6IHNjLnJlbW92ZWQubWFwKChfKSA9PiB0aGlzLmdldFRyZWVJdGVtKF8ucGF0aCkpLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsuLi50aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkXS5tYXAoKGl0ZW0pID0+IHRoaXMuZ2V0VHJlZUl0ZW0oaXRlbS5wYXRoKSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24gPSBzZWxlY3Rpb25DaGFuZ2Uuc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoc2VsZWN0aW9uQ2hhbmdlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0lucHV0cyh0cmVlRGF0YTogVHJlZURhdGFNb2RlbCk6IFRyZWVEYXRhTW9kZWwge1xuICAgICAgICBpZiAodGhpcy5pc011bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICB0cmVlRGF0YSA9IHRoaXMub3ZlcnJpZGVUcmVlRGF0YU1vZGVsRm9yU2VsZWN0aW9uKHRyZWVEYXRhLCB0aGlzLmlzUmVjdXJzaXZlU2VsZWN0aW9uLCAhdGhpcy5pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVTZWxlY3QpIHtcbiAgICAgICAgICAgIHRyZWVEYXRhID0gdGhpcy5vdmVycmlkZVRyZWVEYXRhTW9kZWxGb3JTZWxlY3Rpb24odHJlZURhdGEsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyZWVEYXRhO1xuICAgIH1cblxuICAgIHByaXZhdGUgb3ZlcnJpZGVUcmVlRGF0YU1vZGVsRm9yU2VsZWN0aW9uKFxuICAgICAgICBub2RlQXJyOiBUcmVlRGF0YU1vZGVsLFxuICAgICAgICBpc1JlY3Vyc2l2ZTogYm9vbGVhbixcbiAgICAgICAgbm9BdXRvU2VsZWN0UGFyZW50OiBib29sZWFuLFxuICAgICAgICBzaW5nbGVTZWxlY3Q/OiBib29sZWFuLFxuICAgICk6IFRyZWVEYXRhTW9kZWwge1xuICAgICAgICByZXR1cm4gbm9kZUFycj8ubWFwKChpdGVtOiBUcmVlSXRlbU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbm9kZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbS5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdGFibGUgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IGl0ZW0/Lm5vZGU/LnNlbGVjdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpc1NlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzSW5kZXRlcm1pbmF0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RDb25maWc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLm5vZGUuc2VsZWN0Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAhIWlzUmVjdXJzaXZlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vQXV0b1NlbGVjdFBhcmVudDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8ubm9BdXRvU2VsZWN0UGFyZW50ID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBub0F1dG9TZWxlY3RQYXJlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5ub0F1dG9TZWxlY3RQYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU2VsZWN0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5zaW5nbGVTZWxlY3QgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNpbmdsZVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/LnNpbmdsZVNlbGVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLm92ZXJyaWRlVHJlZURhdGFNb2RlbEZvclNlbGVjdGlvbihpdGVtLmNoaWxkcmVuLCBpc1JlY3Vyc2l2ZSwgbm9BdXRvU2VsZWN0UGFyZW50LCBzaW5nbGVTZWxlY3QpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IHR5cGVvZiBpdGVtPy5ub2RlPy5zZWxlY3RhYmxlID09PSAndW5kZWZpbmVkJyA/IHRydWUgOiBpdGVtPy5ub2RlPy5zZWxlY3RhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0Q29uZmlnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbS5ub2RlPy5zZWxlY3RDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU2VsZWN0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5zaW5nbGVTZWxlY3QgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNpbmdsZVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/LnNpbmdsZVNlbGVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBydW5TY3JvbGxMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zY3JvbGxEaXNwYXRjaGVyU3VicyA9IHRoaXMuc2Nyb2xsRGlzcGF0Y2hlci5zY3JvbGxlZCgpLnN1YnNjcmliZSgoc2Nyb2xsYWJsZTogQ2RrU2Nyb2xsYWJsZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHNjcm9sbGFibGUgJiYgdGhpcy5jaGVja0lmQ3VycmVudFNjcm9sbGFibGUoc2Nyb2xsYWJsZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0F0Qm90dG9tID1cbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZT8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wICsgc2Nyb2xsYWJsZT8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0ID49XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGU/LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0F0VG9wID0gc2Nyb2xsYWJsZT8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID09PSAwO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdFbGVtZW50OicsIHRoaXMuY2RrU2Nyb2xsYWJsZVJlZi5nZXRFbGVtZW50UmVmKCkpO1xuICAgICAgICAgICAgICAgIGlmIChpc0F0Qm90dG9tICYmICF0aGlzLnRyZWVQYWdpbmF0aW9uLmlzQXRNYXgoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMudHJlZVBhZ2luYXRpb24ucGFnaW5hdGVOZXh0KCkuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lID0gdGhpcy5hcHBseVJ1blRpbWVMYXN0SXRlbXModGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZGtBcnJheURhdGFTb3VyY2UgPSBuZXcgQXJyYXlEYXRhU291cmNlKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wgPSBuZXcgTmVzdGVkVHJlZUNvbnRyb2w8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KChub2RlKSA9PiBub2RlPy5jaGlsZHJlbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRoaXMudHJhY2tCeUNvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZGF0YU5vZGVzID0gdGhpcy50cmVlRGF0YVJ1blRpbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRBbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsSGVpZ2h0ID0gc2Nyb2xsYWJsZS5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCdib3R0b20nKSArIHNjcm9sbGFibGUubWVhc3VyZVNjcm9sbE9mZnNldCgndG9wJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHNjcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb25Ub1Njcm9sbCA9IHRvdGFsSGVpZ2h0IC0gdmlld3BvcnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlLnNjcm9sbFRvKHsgdG9wOiBwb3NpdGlvblRvU2Nyb2xsIC8gMiB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNBdFRvcCAmJiB0aGlzLnRyZWVQYWdpbmF0aW9uLmdldEN1cnJlbnRTdGFydFBhZ2UoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWUgPSB0aGlzLnRyZWVQYWdpbmF0aW9uLnBhZ2luYXRlUHJldigpLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuYXBwbHlSdW5UaW1lTGFzdEl0ZW1zKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrQXJyYXlEYXRhU291cmNlID0gbmV3IEFycmF5RGF0YVNvdXJjZSh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0aGlzLnRyYWNrQnlDb250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3RhbEhlaWdodCA9IHNjcm9sbGFibGUubWVhc3VyZVNjcm9sbE9mZnNldCgnYm90dG9tJykgKyBzY3JvbGxhYmxlLm1lYXN1cmVTY3JvbGxPZmZzZXQoJ3RvcCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSBzY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uVG9TY3JvbGwgPSB0b3RhbEhlaWdodCAtIHZpZXdwb3J0SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZS5zY3JvbGxUbyh7IHRvcDogcG9zaXRpb25Ub1Njcm9sbCAvIDIgKyB2aWV3cG9ydEhlaWdodCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3Rpb25JbmRleE9mSXRlbShydW5UaW1lVHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQuZmluZEluZGV4KChpKSA9PiBpPy5wYXRoID09PSBydW5UaW1lVHJlZUl0ZW0/LnBhdGgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0VHJlZUl0ZW0ocnVuVGltZUJhY2t1cFRyZWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleE9mSXRlbSA9IHRoaXMuZ2V0U2VsZWN0aW9uSW5kZXhPZkl0ZW0ocnVuVGltZUJhY2t1cFRyZWVJdGVtKTtcbiAgICAgICAgaWYgKGluZGV4T2ZJdGVtID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QocnVuVGltZUJhY2t1cFRyZWVJdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGVzZWxlY3RUcmVlSXRlbShydW5UaW1lVHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZJdGVtID0gdGhpcy5nZXRTZWxlY3Rpb25JbmRleE9mSXRlbShydW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICBpZiAoaW5kZXhPZkl0ZW0gPiAtMSkge1xuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gWy4uLnRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRdO1xuICAgICAgICAgICAgbmV3U2VsZWN0aW9uLnNwbGljZShpbmRleE9mSXRlbSwgMSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnNldFNlbGVjdGlvbiguLi5uZXdTZWxlY3Rpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVUcmVlRGF0YVJ1bnRpbWUobm9kZXM6IFRyZWVEYXRhTW9kZWwpOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIHJldHVybiBzdHJ1Y3R1cmVkQ2xvbmUobm9kZXMpPy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVSdW5UaW1lU3RhdGUoaXRlbSwgaW5kZXgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGx5UnVuVGltZUxhc3RJdGVtcyhpdGVtczogVHJlZURhdGFSdW5UaW1lTW9kZWwpOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIHJldHVybiBpdGVtcz8ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0/LmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbGFzdDogaXRlbXMubGVuZ3RoID09PSBpbmRleCArIDEgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogaXRlbS5jaGlsZHJlbj8ubGVuZ3RoID4gMCA/IHRoaXMuYXBwbHlSdW5UaW1lTGFzdEl0ZW1zKGl0ZW0uY2hpbGRyZW4pIDogaXRlbT8uY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbGFzdDogaXRlbXMubGVuZ3RoID09PSBpbmRleCArIDEgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKG5vZGVzOiBUcmVlRGF0YU1vZGVsKTogQXJyYXk8VHJlZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVNb2RlbD4ge1xuICAgICAgICByZXR1cm4gc3RydWN0dXJlZENsb25lKG5vZGVzKT8ubWFwKChpdGVtKSA9PiB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSh7IC4uLml0ZW0gfSkpO1xuICAgIH1cblxuICAgIC8vIENyZWF0aW5nIHJ1biB0aW1lIHN0YXRlIHdoaWNoIGluY2x1ZGVzIGNoaWxkcmVuIHNlbGVjdGlvbiBzdGF0ZSBmb3Igc2VsZWN0aW9uIHRyZWUuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUodHJlZUl0ZW06IFRyZWVJdGVtTW9kZWwpOiBUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW5TZWxlY3Rpb25SZWN1cnNpdmU6IEFycmF5PFRyZWVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlTW9kZWw+ID0gW107XG4gICAgICAgIGlmICh0cmVlSXRlbS5jaGlsZHJlbiAmJiB0cmVlSXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0cmVlSXRlbS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlblNlbGVjdGlvblJlY3Vyc2l2ZVtpbmRleF0gPSB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShjaGlsZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlsZFN0YXRlcyA9IGNoaWxkcmVuU2VsZWN0aW9uUmVjdXJzaXZlLm1hcCgoXykgPT4gXy5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSk7XG4gICAgICAgIGNvbnN0IGl0ZW1TdGF0ZTogU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPSB0aGlzLmRlY2lkZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKFxuICAgICAgICAgICAgY2hpbGRTdGF0ZXMsXG4gICAgICAgICAgICB0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQsXG4gICAgICAgICAgICB0cmVlSXRlbS5ub2RlPy5zZWxlY3RDb25maWc/LnJlY3Vyc2l2ZSxcbiAgICAgICAgICAgIHRyZWVJdGVtLm5vZGU/LnNlbGVjdENvbmZpZz8ubm9BdXRvU2VsZWN0UGFyZW50LFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGU6IGl0ZW1TdGF0ZSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblNlbGVjdGlvblJlY3Vyc2l2ZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlY2lkZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKFxuICAgICAgICBjaGlsZFN0YXRlczogQXJyYXk8U2VsZWN0aW9uUmVjdXJzaXZlU3RhdGU+ID0gW10sXG4gICAgICAgIGlzU2VsZWN0ZWQ6IGJvb2xlYW4sXG4gICAgICAgIHJlY3Vyc2l2ZTogYm9vbGVhbixcbiAgICAgICAgbm9BdXRvU2VsZWN0UGFyZW50OiBib29sZWFuLFxuICAgICk6IFNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlIHtcbiAgICAgICAgbGV0IGl0ZW1TdGF0ZTogU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPSAnaW5kZXRlcm1pbmF0ZSc7XG4gICAgICAgIGlmIChpc1NlbGVjdGVkICYmIGNoaWxkU3RhdGVzLmV2ZXJ5KChzdGF0ZSkgPT4gc3RhdGUgPT09ICdhbGxTZWxlY3RlZCcpKSB7XG4gICAgICAgICAgICBpdGVtU3RhdGUgPSAnYWxsU2VsZWN0ZWQnO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc1NlbGVjdGVkICYmIGNoaWxkU3RhdGVzLmV2ZXJ5KChzdGF0ZSkgPT4gc3RhdGUgPT09ICdhbGxOb3RTZWxlY3RlZCcpKSB7XG4gICAgICAgICAgICBpdGVtU3RhdGUgPSAnYWxsTm90U2VsZWN0ZWQnO1xuICAgICAgICB9IGVsc2UgaWYgKHJlY3Vyc2l2ZSAmJiBjaGlsZFN0YXRlcy5ldmVyeSgoc3RhdGUpID0+IHN0YXRlID09PSAnYWxsU2VsZWN0ZWQnKSAmJiAhaXNTZWxlY3RlZCAmJiAhbm9BdXRvU2VsZWN0UGFyZW50KSB7XG4gICAgICAgICAgICBpdGVtU3RhdGUgPSAnYWxsU2VsZWN0ZWQnO1xuICAgICAgICB9IGVsc2UgaWYgKHJlY3Vyc2l2ZSAmJiBjaGlsZFN0YXRlcy5ldmVyeSgoc3RhdGUpID0+IHN0YXRlID09PSAnYWxsTm90U2VsZWN0ZWQnKSAmJiBpc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICBpdGVtU3RhdGUgPSAnYWxsTm90U2VsZWN0ZWQnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtU3RhdGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKG5vZGVQYXRoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRyZWVJdGVtID0gdGhpcy5nZXRUcmVlSXRlbShub2RlUGF0aCk7XG4gICAgICAgIGNvbnN0IHJ1blRpbWVCYWNrdXBUcmVlSXRlbSA9IHRoaXMuZ2V0UnVuVGltZUJhY2t1cFRyZWVJdGVtKG5vZGVQYXRoKTtcbiAgICAgICAgY29uc3QgcnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZUl0ZW0gPSB0aGlzLmdldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShub2RlUGF0aCk7XG4gICAgICAgIGlmICh0cmVlSXRlbT8ubm9kZT8uc2VsZWN0YWJsZSAmJiB0cmVlSXRlbS5ub2RlPy5zZWxlY3RDb25maWc/LnJlY3Vyc2l2ZSkge1xuICAgICAgICAgICAgaWYgKCF0cmVlSXRlbS5ub2RlPy5zZWxlY3RDb25maWc/Lm5vQXV0b1NlbGVjdFBhcmVudCkge1xuICAgICAgICAgICAgICAgIHRyZWVJdGVtLm5vZGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRyZWVJdGVtLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVJdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnYWxsU2VsZWN0ZWQnLFxuICAgICAgICAgICAgICAgICAgICBpc0luZGV0ZXJtaW5hdGU6IHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVJdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnaW5kZXRlcm1pbmF0ZScsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udHJlZUl0ZW0ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogdHJlZUl0ZW0ubm9kZS5pc1NlbGVjdGVkICYmIHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVJdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnYWxsU2VsZWN0ZWQnLFxuICAgICAgICAgICAgICAgICAgICBpc0luZGV0ZXJtaW5hdGU6XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlSXRlbS5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9PT0gJ2luZGV0ZXJtaW5hdGUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAoIXRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCAmJiBydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlSXRlbS5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9PT0gJ2FsbFNlbGVjdGVkJyksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRyZWVJdGVtLCB0cmVlSXRlbS5ub2RlLnRyZWVDb250ZW50QmxvY2subGFiZWwsICdpc1NlbGVjdGVkOicgKyB0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQsICdpc0luZGV0ZXJtaW5hdGU6JyArIHRyZWVJdGVtLm5vZGUuaXNJbmRldGVybWluYXRlKTtcbiAgICAgICAgICAgIGlmICh0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgPT09IHRydWUgJiYgIXRoaXMuc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChydW5UaW1lQmFja3VwVHJlZUl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RUcmVlSXRlbShydW5UaW1lQmFja3VwVHJlZUl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgPT09IGZhbHNlICYmIHRoaXMuc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChydW5UaW1lQmFja3VwVHJlZUl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFRyZWVJdGVtKHJ1blRpbWVCYWNrdXBUcmVlSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRyZWVEYXRhKHBhdGg6IHN0cmluZywgaXRlbTogVHJlZUl0ZW1Nb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleEFycjogQXJyYXk8bnVtYmVyPiA9IHRoaXMucmVzb2x2ZVBhdGgocGF0aCk7XG4gICAgICAgIGxldCBpdGVtQXJyID0gdGhpcy5wcm9jZXNzZWROb2RlcztcbiAgICAgICAgaW5kZXhBcnI/LmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnIgPSBpdGVtQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtQXJyW3BhdGhJbmRleF0gPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRyZWVEYXRhUnVuVGltZUJhY2t1cChwYXRoOiBzdHJpbmcsIGl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IGl0ZW1BcnIgPSB0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cDtcbiAgICAgICAgaW5kZXhBcnIuZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgaXRlbUFyciA9IGl0ZW1BcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnJbcGF0aEluZGV4XSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VHJlZURhdGFSdW5UaW1lKHBhdGg6IHN0cmluZywgaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb2xkSXRlbSA9IHRoaXMuZ2V0UnVuVGltZVRyZWVJdGVtKHBhdGgpO1xuICAgICAgICBpZihvbGRJdGVtKXtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGl0ZW0pPy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgb2xkSXRlbVtrZXldID0gaXRlbVtrZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZVRyZWUocGF0aDogc3RyaW5nLCBpdGVtOiBUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IGl0ZW1BcnIgPSB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTtcbiAgICAgICAgaW5kZXhBcnIuZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgaXRlbUFyciA9IGl0ZW1BcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnJbcGF0aEluZGV4XSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHBhdGg6IHN0cmluZywgc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGU6IFNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IGl0ZW1BcnIgPSB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTtcbiAgICAgICAgaW5kZXhBcnIuZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgaXRlbUFyciA9IGl0ZW1BcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnJbcGF0aEluZGV4XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbUFycltwYXRoSW5kZXhdLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldElzQ2hlY2tlZEZvckFsbChub2RlQXJyOiBBcnJheTxUcmVlSXRlbVJ1blRpbWVNb2RlbD4sIGlzQ2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBub2RlQXJyLmZvckVhY2goKHJ1blRpbWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcnVudGltZUJhY2t1cFRyZWVJdGVtID0gdGhpcy5nZXRSdW5UaW1lQmFja3VwVHJlZUl0ZW0ocnVuVGltZUl0ZW0ucGF0aCk7XG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbSA9IHRoaXMuZ2V0VHJlZUl0ZW0ocnVuVGltZUl0ZW0ucGF0aCk7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gdHJlZUl0ZW0ubm9kZTtcbiAgICAgICAgICAgIGlmIChub2RlPy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5pc1NlbGVjdGVkID0gaXNDaGVja2VkO1xuICAgICAgICAgICAgICAgIG5vZGUuaXNJbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFRyZWVJdGVtKHJ1bnRpbWVCYWNrdXBUcmVlSXRlbSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFRyZWVJdGVtKHJ1bnRpbWVCYWNrdXBUcmVlSXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJ1blRpbWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SXNDaGVja2VkRm9yQWxsKG5vZGVBcnJbaW5kZXhdLmNoaWxkcmVuLCBpc0NoZWNrZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJ1blN0YXRlQ2hhbmdlc0ZvckFsbChub2RlQXJyOiBBcnJheTxUcmVlSXRlbVJ1blRpbWVNb2RlbD4pOiB2b2lkIHtcbiAgICAgICAgbm9kZUFycj8uZm9yRWFjaCgocnVuVGltZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAocnVuVGltZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMucnVuU3RhdGVDaGFuZ2VzRm9yQWxsKG5vZGVBcnJbaW5kZXhdLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNTZWxlY3Rpb25BdFBhdGgocnVuVGltZUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN5bmNTZWxlY3Rpb25BdFBhdGgocnVuVGltZVRyZWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICAvLyBJdCBpcyBoZXJlIGZvciB0aGUgZmlsdGVyIGVkZ2UgY2FzZS5cbiAgICAgICAgdGhpcy5zeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKHJ1blRpbWVUcmVlSXRlbS5wYXRoKTtcbiAgICAgICAgLy8gU2V0cyBpc1NlbGVjdGVkIGNoYW5nZSBvbiB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHRoaXMuZ2V0VHJlZUl0ZW0ocnVuVGltZVRyZWVJdGVtLnBhdGgpLm5vZGUuaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RUcmVlSXRlbSh0aGlzLmdldFJ1blRpbWVCYWNrdXBUcmVlSXRlbShydW5UaW1lVHJlZUl0ZW0ucGF0aCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFRyZWVJdGVtKHRoaXMuZ2V0UnVuVGltZUJhY2t1cFRyZWVJdGVtKHJ1blRpbWVUcmVlSXRlbS5wYXRoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc29sdmVQYXRoKHBhdGg6IHN0cmluZyk6IEFycmF5PG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gcGF0aD8uc3BsaXQoJy4nKS5tYXAoKGluZGV4OiBzdHJpbmcpID0+IHBhcnNlSW50KGluZGV4LCAxMCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGFyZW50UGF0aHMocGF0aDogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHBhdGhBcnIgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IGhhc1BhcmVudCA9IHBhdGhBcnIubGVuZ3RoID4gMTtcbiAgICAgICAgLy8gU2V0cyB0aGUgaGFzUGFyZW50IElmIHRoZXJlIGlzIGEgcGFyZW50LCBhbmQgcmVtb3ZlcyB0aGUgbGFzdCBlbGVtZW50IGZvcm0gcGF0aEFyci5cbiAgICAgICAgaWYgKGhhc1BhcmVudCkge1xuICAgICAgICAgICAgcGF0aEFyci5wb3AoKTtcbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZXMgcGFyZW50IHBhdGhcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSBwYXRoQXJyLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIC8vIENyZWF0aW5nIG5vZGUgaW5kZXggc2VxdWVuY2UgZi5lIElmIHBhdGggaXMgJzEuMicgaXQgd2lsbCBiZSBbMSwyXVxuICAgICAgICAgICAgY29uc3Qgbm9kZUluZGV4U2VxID0gcGFyZW50UGF0aC5zcGxpdCgnLicpLm1hcCgoaW5kZXhTdHIpID0+IHBhcnNlSW50KGluZGV4U3RyLCAxMCkpO1xuICAgICAgICAgICAgLy8gQ2FsY3VsYXRpbmcgdGhlIG5vZGUgcGF0aHMgYXJyYXkgdG8gYmUgcmUtY2FsY3VsYXRlZCBmcm9tIGJvdHRvbSB0byB0b3BcbiAgICAgICAgICAgIGNvbnN0IG5vZGVQYXRoc1NlcSA9IFtdO1xuICAgICAgICAgICAgbm9kZUluZGV4U2VxLmZvckVhY2goKG5vZGVJbmRleCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBub2RlUGF0aHNTZXFbaW5kZXhdID0gbm9kZUluZGV4U2VxLnNsaWNlKDAsIGluZGV4ICsgMSkuam9pbignLicpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbm9kZVBhdGhzU2VxLnJldmVyc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlUnVuVGltZVN0YXRlKHRyZWVJdGVtOiBUcmVlSXRlbU1vZGVsLCBpbmRleDogbnVtYmVyLCBwYXJlbnRQYXRoPzogc3RyaW5nKTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwge1xuICAgICAgICBjb25zdCBydW5UaW1lVHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsID0ge1xuICAgICAgICAgICAgcGF0aDogcGFyZW50UGF0aCA/IHBhcmVudFBhdGggKyAnLicgKyBpbmRleCA6IGluZGV4LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRyZWVJdGVtLmNoaWxkcmVuICYmIHRyZWVJdGVtLmNoaWxkcmVuLmxlbmd0aCA+PSAwKSB7XG4gICAgICAgICAgICBydW5UaW1lVHJlZUl0ZW0uY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgIHRyZWVJdGVtLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkLCB0cmVlSXRlbUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgcnVuVGltZVRyZWVJdGVtLmNoaWxkcmVuW3RyZWVJdGVtSW5kZXhdID0gdGhpcy5jYWxjdWxhdGVSdW5UaW1lU3RhdGUoY2hpbGQsIHRyZWVJdGVtSW5kZXgsIHJ1blRpbWVUcmVlSXRlbS5wYXRoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBydW5UaW1lVHJlZUl0ZW07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWx0ZXJUcmVlRGF0YShydW5UaW1lVHJlZURhdGE6IFRyZWVEYXRhUnVuVGltZU1vZGVsLCBrZXkgPSAnbGFiZWwnLCBmaWx0ZXJTdHI6IHN0cmluZywgc2hvd0NoaWxkcmVuOiBib29sZWFuLCBzaG93Pzpib29sZWFuKTogVHJlZURhdGFSdW5UaW1lTW9kZWwge1xuICAgICAgICByZXR1cm4gcnVuVGltZVRyZWVEYXRhLmZpbHRlcigocnVuVGltZUl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldERhdGEgPSB0aGlzLmdldFRyZWVJdGVtKHJ1blRpbWVJdGVtLnBhdGgpLm5vZGUudHJlZUNvbnRlbnRCbG9ja1trZXldO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRhcmdldERhdGEgJiYgdGhpcy5ub3JtYWxpemVkU3RyKHRhcmdldERhdGEpPy5pbmNsdWRlcyh0aGlzLm5vcm1hbGl6ZWRTdHIoZmlsdGVyU3RyKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmKHJ1blRpbWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIHJ1blRpbWVJdGVtLmNoaWxkcmVuID0gdGhpcy5maWx0ZXJUcmVlRGF0YShydW5UaW1lSXRlbS5jaGlsZHJlbiwga2V5LCBmaWx0ZXJTdHIsIHNob3dDaGlsZHJlbiwgc2hvd0NoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihydW5UaW1lSXRlbSx7IG1hdGNoZWQ6IHRydWUgfSlcbiAgICAgICAgICAgICAgICAvLyBydW5UaW1lSXRlbS5tYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocnVuVGltZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcnVuVGltZUl0ZW0uY2hpbGRyZW4gPSB0aGlzLmZpbHRlclRyZWVEYXRhKHJ1blRpbWVJdGVtLmNoaWxkcmVuLCBrZXksIGZpbHRlclN0ciwgc2hvd0NoaWxkcmVuLCBzaG93KTtcbiAgICAgICAgICAgICAgICBydW5UaW1lSXRlbS5jaGlsZHJlbiA9IHJ1blRpbWVJdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDAgPyBydW5UaW1lSXRlbS5jaGlsZHJlbiA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVuVGltZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwIHx8IHNob3c7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaG93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vcm1hbGl6ZWRTdHIoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gc3RyXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJbml0aWFsU2VsZWN0aW9uKG5vZGVzOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCk6IEFycmF5PFRyZWVJdGVtUnVuVGltZU1vZGVsPiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbjogQXJyYXk8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+ID0gW107XG4gICAgICAgIHRoaXMuc2NhblNlbGVjdGlvbihub2Rlcywgc2VsZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNjYW5TZWxlY3Rpb24obm9kZXM6IFRyZWVEYXRhUnVuVGltZU1vZGVsLCBzZWxlY3Rpb246IEFycmF5PFRyZWVJdGVtUnVuVGltZU1vZGVsPik6IHZvaWQge1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChpdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0VHJlZUl0ZW0oaXRlbS5wYXRoKS5ub2RlPy5zZWxlY3RhYmxlICYmIHRoaXMuZ2V0VHJlZUl0ZW0oaXRlbS5wYXRoKS5ub2RlLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24ucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhblNlbGVjdGlvbihpdGVtLmNoaWxkcmVuLCBzZWxlY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckluaXRpYWxFeHBhbmQobm9kZXM6IFRyZWVEYXRhUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKGl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckluaXRpYWxFeHBhbmQoaXRlbS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuZ2V0VHJlZUl0ZW0oaXRlbS5wYXRoKS5ub2RlLmlzRXhwYW5kZWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5nZXRUcmVlSXRlbShpdGVtLnBhdGgpLm5vZGUuaXNFeHBhbmRlZCAmJiAhdGhpcy5jZGtUcmVlQ29udHJvbC5pc0V4cGFuZGVkKGl0ZW0pKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRBdChpdGVtLnBhdGgpO1xuICAgICAgICAgICAgICAgIH1lbHNlIGlmKCF0aGlzLmdldFRyZWVJdGVtKGl0ZW0ucGF0aCkubm9kZS5pc0V4cGFuZGVkICYmICB0aGlzLmNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQoaXRlbSkpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmNvbGxhcHNlKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHBhbmRNYXRjaGVkKG5vZGVzOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChpdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0ubWF0Y2hlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSB0aGlzLmdldFBhcmVudFBhdGhzKGl0ZW0ucGF0aClbMF07XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudFBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmVudFRyZWVJdGVtID0gdGhpcy5nZXRUcmVlSXRlbShwYXJlbnRQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50VHJlZUl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5wYXJlbnRUcmVlSXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wYXJlbnRUcmVlSXRlbS5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRXhwYW5kZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvLyAgbm9kZS5pc0V4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJoZXJlXCIsIHBhcmVudFRyZWVJdGVtLm5vZGUudHJlZUNvbnRlbnRCbG9jay5sYWJlbCwgcGFyZW50UGF0aCwgaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kQXQocGFyZW50UGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRNYXRjaGVkKGl0ZW0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJ1blRpbWVUcmVlSXRlbShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRSdW5UaW1lVHJlZUl0ZW0odGhpcy50cmVlRGF0YVJ1blRpbWUsIHBhdGgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluZFJ1blRpbWVUcmVlSXRlbSh0cmVlRGF0YVJ1blRpbWU6IFRyZWVEYXRhUnVuVGltZU1vZGVsLCBwYXRoKTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwge1xuICAgICAgICBmb3IgKGNvbnN0IHJ1blRpbWVJdGVtIG9mIHRyZWVEYXRhUnVuVGltZSkge1xuICAgICAgICAgICAgaWYgKHJ1blRpbWVJdGVtLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVuVGltZUl0ZW07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJ1blRpbWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5maW5kUnVuVGltZVRyZWVJdGVtKHJ1blRpbWVJdGVtLmNoaWxkcmVuLCBwYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJ1blRpbWVCYWNrdXBUcmVlSXRlbShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IG5vZGVBcnIgPSB0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cDtcbiAgICAgICAgbGV0IG5vZGU7XG4gICAgICAgIGlmIChub2RlQXJyICYmIEFycmF5LmlzQXJyYXkobm9kZUFycikpIHtcbiAgICAgICAgICAgIGluZGV4QXJyPy5mb3JFYWNoKChwYXRoSW5kZXg6IG51bWJlciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVBcnIgPSBub2RlQXJyICYmIG5vZGVBcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGVBcnJbcGF0aEluZGV4XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENzc0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdldWktdHJlZScsXG4gICAgICAgICAgICB0aGlzLmlzTXVsdGlzZWxlY3QgPyAnZXVpLXRyZWUtLW11bHRpc2VsZWN0JyA6ICcnLFxuICAgICAgICAgICAgdGhpcy5faXNNdWx0aUxldmVsID8gJ2V1aS10cmVlLS13aXRoLWNoaWxkcmVuJyA6ICcnLFxuICAgICAgICAgICAgdGhpcy5zaG93TGluZXMgPyAnZXVpLXRyZWUtLXNob3ctbGluZXMnIDogJycsXG4gICAgICAgIF1cbiAgICAgICAgLmpvaW4oJyAnKVxuICAgICAgICAudHJpbSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tJZk11bHRpTGV2ZWwodHJlZTogVHJlZURhdGFNb2RlbCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgaXNNdWx0aUxldmVsID0gZmFsc2U7XG4gICAgICAgIHRyZWUuZm9yRWFjaCgoaXRlbTogVHJlZUl0ZW1Nb2RlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPj0gMCkge1xuICAgICAgICAgICAgICAgIGlzTXVsdGlMZXZlbCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaXNNdWx0aUxldmVsO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tJZkN1cnJlbnRTY3JvbGxhYmxlKHNjcm9sbGVkOiBDZGtTY3JvbGxhYmxlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzY3JvbGxlZC5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudCA9PT0gdGhpcy5jZGtTY3JvbGxhYmxlUmVmLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50O1xuICAgIH1cbn1cblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgUm91dGVyTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgICAgICBFdWlJbnB1dENoZWNrYm94TW9kdWxlLFxuICAgICAgICBDZGtUcmVlTW9kdWxlLFxuICAgICAgICBFdWlCdXR0b25Nb2R1bGUsXG4gICAgICAgIEV1aUljb25Nb2R1bGUsXG4gICAgICAgIEV1aUxhYmVsTW9kdWxlLFxuICAgICAgICBFdWlCYWRnZU1vZHVsZSxcbiAgICAgICAgRXVpQ2hpcE1vZHVsZSxcbiAgICAgICAgRXVpRHJvcGRvd25Nb2R1bGUsXG4gICAgICAgIFNjcm9sbGluZ01vZHVsZSxcbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW0V1aVRyZWVDb21wb25lbnRdLFxuICAgIGV4cG9ydHM6IFtFdWlUcmVlQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgRXVpVHJlZU1vZHVsZSB7fVxuIiwiPGRpdiBjbGFzcz1cImV1aS11bC1yZXAgZXVpLXRyZWVfX3dyYXBwZXJcIiBjZGtTY3JvbGxhYmxlICNjZGtTY3JvbGxhYmxlUmVmPlxuICAgIDxjZGstdHJlZVxuICAgICAgICAjdHJlZUNvbXBvbmVudEluc3RhbmNlXG4gICAgICAgIFtkYXRhU291cmNlXT1cImNka0FycmF5RGF0YVNvdXJjZVwiXG4gICAgICAgIFt0cmVlQ29udHJvbF09XCJjZGtUcmVlQ29udHJvbFwiXG4gICAgICAgIFt0cmFja0J5XT1cInRyYWNrQnlcIlxuICAgICAgICAqbmdJZj1cInJlbmRlclRyZWVcIlxuICAgICAgICBjbGFzcz1cImV1aS1jZGstdHJlZVwiPlxuICAgICAgICA8IS0tIFRoZXJlIGFyZSB0d28gc3RhdGVzIG9mIGdlbmVyaWMgY2RrLW5lc3RlZC10cmVlLW5vZGUgZGVjbGFyYXRpb25zLlxuICAgICAgICBGaXJzdCBvbmUgaXMgd2l0aG91dCBjaGlsZC4gTm8gc3ViIHJlbmRlcmluZy5cbiAgICAgICAgLS0+XG4gICAgICAgIDxjZGstbmVzdGVkLXRyZWUtbm9kZSAqY2RrVHJlZU5vZGVEZWY9XCJsZXQgdHJlZVJ1blRpbWVJdGVtTW9kZWxcIiBjbGFzcz1cImV1aS1jZGstbmVzdGVkLXRyZWUtbm9kZVwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRyZWVSdW5UaW1lSXRlbU1vZGVsXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1saS1yZXAgZXVpLXRyZWUtbm9kZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS10cmVlLW5vZGUtLWZpcnN0XT1cInRyZWVSdW5UaW1lSXRlbU1vZGVsPy5wYXRoID09PSAnMCdcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktdHJlZS1ub2RlLS1sYXN0XT1cInRyZWVSdW5UaW1lSXRlbU1vZGVsLmxhc3RcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3tcbiAgICAgICAgICAgICAgICAgICAgZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy50b29sdGlwTGFiZWwgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbU1vZGVsPy5wYXRoKT8ubm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWxcbiAgICAgICAgICAgICAgICB9fVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktdHJlZS1ub2RlLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTm9kZUNsaWNrKHRyZWVSdW5UaW1lSXRlbU1vZGVsKVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlcnMgbm9kZSBpbiBkZWZhdWx0IG9yIHByb3ZpZGVkIHRlbXBsYXRlJ3MgY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlcyBvblNlbGVjdCB3aXRoIG9uU2VsZWN0Rm4gZm9yIGRldmVsb3BlcnMgdG8gc2VuZCB0aGUgZXZlbnRzIGZyb20gdGhlaXIgY3VzdG9tIGNoZWNrIGV2ZW50cy5cbiAgICAgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVzIGlkIHRvIGJlIHVzZWQgb24gZ2VuZXJpYyB0ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZVRlbXBsYXRlUmVmIHx8IG5vZGVUZW1wbGF0ZURlZmF1bHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdDogb25TZWxlY3RGbih0cmVlUnVuVGltZUl0ZW1Nb2RlbC5wYXRoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHVpZCArIHRyZWVSdW5UaW1lSXRlbU1vZGVsLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHRyZWVSdW5UaW1lSXRlbU1vZGVsLnBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9jZGstbmVzdGVkLXRyZWUtbm9kZT5cbiAgICAgICAgPCEtLSBUaGlzIGlzIHRoZSB0cmVlIG5vZGUgdGVtcGxhdGUgZm9yIGV4cGFuZGFibGUgbm9kZXMgLS0+XG4gICAgICAgIDxjZGstbmVzdGVkLXRyZWUtbm9kZVxuICAgICAgICAgICAgKmNka1RyZWVOb2RlRGVmPVwibGV0IHRyZWVSdW5UaW1lSXRlbU1vZGVsOyB3aGVuOiBoYXNDaGlsZFwiXG4gICAgICAgICAgICBjbGFzcz1cImV1aS1jZGstbmVzdGVkLXRyZWUtbm9kZSBldWktY2RrLW5lc3RlZC10cmVlLW5vZGUtLXdpdGgtY2hpbGRcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1saS1yZXAgZXVpLXRyZWUtbm9kZSBldWktdHJlZS1ub2RlLS13aXRoLWNoaWxkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLXRyZWUtbm9kZS0tZmlyc3RdPVwidHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGggPT09ICcwJ1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS10cmVlLW5vZGUtLWxhc3RdPVwidHJlZVJ1blRpbWVJdGVtTW9kZWwubGFzdFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0cmVlUnVuVGltZUl0ZW1Nb2RlbFwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7e1xuICAgICAgICAgICAgICAgICAgICBnZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW1Nb2RlbD8ucGF0aCk/Lm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnRvb2x0aXBMYWJlbCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbFxuICAgICAgICAgICAgICAgIH19XCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tSGVyZSB3cmFwcyB0aGUgbm9kZSwgYW5kIGxpc3RlbiBmb3Igbm9kZSBjbGlja3MuLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cIm9uTm9kZUNsaWNrKHRyZWVSdW5UaW1lSXRlbU1vZGVsKVwiIGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRXhwYW5kL2NvbGxhcHNlIGFjdGlvbiBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVpQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aUJhc2ljQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVpUm91bmRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aVNpemVTXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInVG9nZ2xlICcgKyBnZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW1Nb2RlbD8ucGF0aCk/Lm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ob2RlVG9nZ2xlKHRyZWVSdW5UaW1lSXRlbU1vZGVsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrVHJlZU5vZGVUb2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS10cmVlLW5vZGVfX2J1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0cmVlUnVuVGltZUl0ZW1Nb2RlbCkgJiYgIWNvbGxhcHNlZEljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImV4cGFuZGVkU3ZnSWNvbkNsYXNzXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZVJ1blRpbWVJdGVtTW9kZWwpICYmICFleHBhbmRlZEljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImNvbGxhcHNlZFN2Z0ljb25DbGFzc1wiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tXG4gICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJzIG5vZGUgaW4gZGVmYXVsdCBvciBwcm92aWRlZCB0ZW1wbGF0ZSdzIGNvbnRleHQuXG4gICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZXMgb25TZWxlY3Qgd2l0aCBvblNlbGVjdEZuIGZvciBkZXZlbG9wZXJzIHRvIHNlbmQgdGhlIGV2ZW50cyBmcm9tIHRoZWlyIGN1c3RvbSBjaGVjayBldmVudHMuXG4gICAgICAgICAgICAgICAgICAgICAgICBQcm92aWRlcyBpZCB0byBiZSB1c2VkIG9uIGdlbmVyaWMgdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVUZW1wbGF0ZVJlZiB8fCBub2RlVGVtcGxhdGVEZWZhdWx0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbU1vZGVsLnBhdGgpPy5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdDogb25TZWxlY3RGbih0cmVlUnVuVGltZUl0ZW1Nb2RlbC5wYXRoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHVpZCArIHRyZWVSdW5UaW1lSXRlbU1vZGVsLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHRyZWVSdW5UaW1lSXRlbU1vZGVsLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBnZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW1Nb2RlbD8ucGF0aCk/LmNoaWxkcmVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS11c2VzIGNka1RyZWVOb2RlT3V0bGV0IHRvIHJlbmRlciBjaGlsZHJlbiBub2RlcywgQ2RrVHJlZUNvbnRyb2wgaXMgdXNlZCB0byBjb250cm9sIGlzRXhwYW5kZWQgc3RhdGUuLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS11bC1yZXAgZXVpLXRyZWUtbm9kZVwiIHJvbGU9XCJncm91cFwiICpuZ0lmPVwiY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0cmVlUnVuVGltZUl0ZW1Nb2RlbClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBjZGtUcmVlTm9kZU91dGxldD48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Nkay1uZXN0ZWQtdHJlZS1ub2RlPlxuICAgIDwvY2RrLXRyZWU+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNub2RlVGVtcGxhdGVEZWZhdWx0IGxldC1ub2RlIGxldC1vblNlbGVjdD1cIm9uU2VsZWN0XCIgbGV0LWlkPVwiaWRcIiBsZXQtcGF0aD1cInBhdGhcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXItbGVmdFwiIFtjbGFzcy5ldWktdHJlZS1ub2RlLXdyYXBwZXJfX2NvbnRhaW5lci1sZWZ0LS1zZWxlY3RlZF09XCJub2RlPy5pc1NlbGVjdGVkXCI+XG4gICAgICAgICAgICA8IS0taW5wdXQgY2hlY2tib3ggYXJlYS0tPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgZXVpSW5wdXRDaGVja0JveFxuICAgICAgICAgICAgICAgICpuZ0lmPVwibm9kZSAmJiBub2RlLnNlbGVjdGFibGVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJ7eyBpZCB9fVwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiISFub2RlPy5pc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCIhIW5vZGU/LmlzSW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS11LW1yLW1cIiAvPlxuXG4gICAgICAgICAgICA8IS0taWNvbiBhcmVhLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8uaWNvblN2Z05hbWVcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJ7eyBub2RlPy50cmVlQ29udGVudEJsb2NrPy5pY29uU3ZnTmFtZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cInt7IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lmljb25UeXBlQ2xhc3MgfHwgJ25ldXRyYWwnIH19XCJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS11LW1yLXhzXCI+XG4gICAgICAgICAgICAgICAgPC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLWNoaXBzIGFyZWEtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy5jaGlwc1wiPlxuICAgICAgICAgICAgICAgIDxldWktY2hpcFxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2hpcCBvZiBub2RlLnRyZWVDb250ZW50QmxvY2suY2hpcHNcIlxuICAgICAgICAgICAgICAgICAgICBldWlTaXplU1xuICAgICAgICAgICAgICAgICAgICBbZXVpVmFyaWFudF09XCJjaGlwLnR5cGVDbGFzcyB8fCAnc2Vjb25kYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgIFtldWlPdXRsaW5lXT1cImNoaXAuaXNPdXRsaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktY2hpcC0tcm91bmRlZCBldWktdS1tYi1ub25lIGV1aS11LW1yLXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGV1aUxhYmVsPnt7IGNoaXAubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9ldWktY2hpcD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tYmFkZ2UgKHR5cGVMYWJlbCAmIHR5cGVDbGFzcykgYXJlYS0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnR5cGVMYWJlbFwiIFtuZ1N3aXRjaF09XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy50eXBlQ2xhc3NcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWJhZGdlIGV1aVNpemVNIFtldWlWYXJpYW50XT1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnR5cGVDbGFzcyB8fCAncHJpbWFyeSdcIiBjbGFzcz1cImV1aS11LWZsZXgtbm8tc2hyaW5rIGV1aS11LW1yLXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnR5cGVMYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvZXVpLWJhZGdlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS1sYWJlbCBhcmVhLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJldWktdHJlZS1ub2RlLXdyYXBwZXJfX2NvbnRhaW5lci1taWRkbGVcIj5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIW5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybCAmJiAhbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsRXh0ZXJuYWxcIlxuICAgICAgICAgICAgICAgIGV1aUxhYmVsXG4gICAgICAgICAgICAgICAgZm9yPVwie3sgaWQgfX1cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXUtdGV4dC10cnVuY2F0ZSBldWktdS1wLTJ4c1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS1sYWJlbC0tc2VsZWN0ZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodFBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZ2V0UnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHBhdGgpPy5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9PT0gJ2luZGV0ZXJtaW5hdGUnIHx8IG5vZGU/LmlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbm9kZT8uaXNTZWxlY3RlZFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS11LWN1cnNvci1wb2ludGVyXT1cIm5vZGU/LnNlbGVjdGFibGVcIj5cbiAgICAgICAgICAgICAgICB7eyBhdXRvVHJhbnNsYXRlID8gKG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIHwgdHJhbnNsYXRlKSA6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIH19XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsXCIgZXVpTGFiZWwgZm9yPVwie3sgaWQgfX1cIiBjbGFzcz1cImV1aS11LXRleHQtdHJ1bmNhdGUgZXVpLXUtcC0yeHNcIj5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS11LXRleHQtbGlua1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktdS10ZXh0LWxpbmstc3RhbmRhbG9uZV09XCIhc2hvd1VuZGVybGluZWRMaW5rc1wiXG4gICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBhdXRvVHJhbnNsYXRlID8gKG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIHwgdHJhbnNsYXRlKSA6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybEV4dGVybmFsXCIgZXVpTGFiZWwgZm9yPVwie3sgaWQgfX1cIiBjbGFzcz1cImV1aS11LXRleHQtdHJ1bmNhdGUgZXVpLXUtcC0yeHNcIj5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS11LXRleHQtbGluay1leHRlcm5hbFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktdS10ZXh0LWxpbmstZXh0ZXJuYWwtc3RhbmRhbG9uZV09XCIhc2hvd1VuZGVybGluZWRMaW5rc1wiXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9XCJ7eyBub2RlPy50cmVlQ29udGVudEJsb2NrPy51cmxFeHRlcm5hbCB9fVwiXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldD1cInt7IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybEV4dGVybmFsVGFyZ2V0IHx8ICdibGFuaycgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgYXV0b1RyYW5zbGF0ZSA/IChub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbCB8IHRyYW5zbGF0ZSkgOiBub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy5yaWdodENvbnRlbnRcIiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyLXJpZ2h0XCI+XG4gICAgICAgICAgICA8IS0tYmFkZ2VzIGFyZWEtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJhZGdlIG9mIG5vZGUudHJlZUNvbnRlbnRCbG9jay5yaWdodENvbnRlbnQ/LmJhZGdlc1wiPlxuICAgICAgICAgICAgICAgIDxldWktYmFkZ2UgZXVpT3V0bGluZSBbZXVpVmFyaWFudF09XCJiYWRnZS50eXBlQ2xhc3MgfHwgJ3NlY29uZGFyeSdcIiBjbGFzcz1cImV1aS11LW1sLXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGV1aUxhYmVsPnt7IGJhZGdlLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZXVpLWJhZGdlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1jaGlwcyBhcmVhLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjaGlwIG9mIG5vZGUudHJlZUNvbnRlbnRCbG9jay5yaWdodENvbnRlbnQ/LmNoaXBzXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1jaGlwXG4gICAgICAgICAgICAgICAgICAgIGV1aVNpemVTXG4gICAgICAgICAgICAgICAgICAgIFtldWlWYXJpYW50XT1cImNoaXAudHlwZUNsYXNzIHx8ICdzZWNvbmRhcnknXCJcbiAgICAgICAgICAgICAgICAgICAgW2V1aU91dGxpbmVdPVwiY2hpcC5pc091dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1jaGlwLS1yb3VuZGVkIGV1aS11LW1iLW5vbmUgZXVpLXUtbWwteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZXVpTGFiZWw+e3sgY2hpcC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2V1aS1jaGlwPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1Db250ZXh0IG1lbnUtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlLnRyZWVDb250ZW50QmxvY2sucmlnaHRDb250ZW50Py5jb250ZXh0TWVudU1ldGFEYXRhICYmIHJpZ2h0Q29udGV4dE1lbnVUZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgICAgICAgIDxldWktZHJvcGRvd24gY2xhc3M9XCJldWktdS1tbC14c1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGV1aUJ1dHRvbiBldWlTaXplUyBldWlSb3VuZGVkIGV1aUljb25CdXR0b24gZXVpQmFzaWNCdXR0b24gZXVpU2Vjb25kYXJ5IFthdHRyLmFyaWEtbGFiZWxdPVwiJ09wdGlvbnMgbWVudSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmcgaWNvbj1cImVsbGlwc2lzLXZlcnRpY2FsOnNoYXJwXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8ZXVpLWRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJyaWdodENvbnRleHRNZW51VGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ucmlnaHRDb250ZW50Py5jb250ZXh0TWVudU1ldGFEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YTogbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ucmlnaHRDb250ZW50Py5jb250ZXh0TWVudU1ldGFEYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9ldWktZHJvcGRvd24tY29udGVudD5cbiAgICAgICAgICAgICAgICA8L2V1aS1kcm9wZG93bj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tbWV0YWRhdGEsIHVzZXMgdGhlIGhlbHAgb2YgbmcgdGVtcGxhdGUgdG8gZ2VuZXJhdGUgZHluYW1pYyBleHBhbmQgdmFyaWFibGUgd2l0aG91dCBoYW5kbGluZyBzdGF0ZSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJub2RlLnRyZWVDb250ZW50QmxvY2s/Lm1ldGFkYXRhICYmIG5vZGVDb250ZW50TWV0YWRhdGFUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlQ29udGVudE1ldGFkYXRhQ29udGFpbmVyXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgJGltcGxpY2l0OiB7IGV4cGFuZGVkOiBmYWxzZSB9XG4gICAgICAgICAgICB9XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI25vZGVDb250ZW50TWV0YWRhdGFDb250YWluZXIgbGV0LW1ldGFEYXRhQ29udGFpbmVyPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGV1aUJ1dHRvblxuICAgICAgICAgICAgICAgIGV1aUJhc2ljQnV0dG9uXG4gICAgICAgICAgICAgICAgZXVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgIGV1aVJvdW5kZWRcbiAgICAgICAgICAgICAgICBldWlTaXplU1xuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJleHBhbmQgY29sbGFwc2UgdHJlZSBpdGVtXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibWV0YURhdGFDb250YWluZXIuZXhwYW5kZWQgPSAhbWV0YURhdGFDb250YWluZXIuZXhwYW5kZWRcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnIFtpY29uXT1cIm1ldGFEYXRhQ29udGFpbmVyLmV4cGFuZGVkID8gJ2NoZXZyb24tZG93bjpzaGFycCcgOiAnY2hldnJvbi1mb3J3YXJkOnNoYXJwJ1wiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibWV0YURhdGFDb250YWluZXIuZXhwYW5kZWRcIiBjbGFzcz1cImV1aS10cmVlLW5vZGVfX21ldGFjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPCEtLXBhc3NpbmcgbWV0YWRhdGEgb2YgdGhlIG5vZGUgY29udGVudCB0byBwcm92aWRlZCB0ZW1wbGF0ZS1yZWY6bm9kZUNvbnRlbnRNZXRhZGF0YVRlbXBsYXRlUmVmLS0+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVDb250ZW50TWV0YWRhdGFUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lm1ldGFkYXRhXG4gICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
|
972
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsUUFBUSxFQUNSLHVCQUF1QixFQUN2QixZQUFZLEVBQ1osTUFBTSxFQUNOLGlCQUFpQixFQU1qQixXQUFXLEVBRVgsZ0JBQWdCLEVBQ2hCLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFRSCxpQkFBaUIsRUFFakIsd0JBQXdCLEdBQzNCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBVyxNQUFNLG1CQUFtQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxF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QWE7OEdBQWIsYUFBYTsrR0FBYixhQUFhLGlCQXQ3QmIsZ0JBQWdCLGFBcTZCckIsWUFBWTtZQUNaLFlBQVk7WUFDWixXQUFXO1lBQ1gsZUFBZTtZQUNmLHNCQUFzQjtZQUN0QixhQUFhO1lBQ2IsZUFBZTtZQUNmLGFBQWE7WUFDYixjQUFjO1lBQ2QsY0FBYztZQUNkLGFBQWE7WUFDYixpQkFBaUI7WUFDakIsZUFBZSxhQWo3QlYsZ0JBQWdCOytHQXM3QmhCLGFBQWEsWUFqQmxCLFlBQVk7WUFDWixZQUFZO1lBQ1osV0FBVztZQUNYLGVBQWU7WUFDZixzQkFBc0I7WUFDdEIsYUFBYTtZQUNiLGVBQWU7WUFDZixhQUFhO1lBQ2IsY0FBYztZQUNkLGNBQWM7WUFDZCxhQUFhO1lBQ2IsaUJBQWlCO1lBQ2pCLGVBQWU7OzJGQUtWLGFBQWE7a0JBbkJ6QixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxlQUFlO3dCQUNmLHNCQUFzQjt3QkFDdEIsYUFBYTt3QkFDYixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsaUJBQWlCO3dCQUNqQixlQUFlO3FCQUNsQjtvQkFDRCxZQUFZLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDaEMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUJBQzlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgTmdNb2R1bGUsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIE91dHB1dCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPbkNoYW5nZXMsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgT25EZXN0cm95LFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgICBTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSxcbiAgICBUcmVlRGF0YU1vZGVsLFxuICAgIFRyZWVJdGVtTW9kZWwsXG4gICAgVHJlZURhdGFSdW5UaW1lTW9kZWwsXG4gICAgVHJlZUl0ZW1SdW5UaW1lTW9kZWwsXG4gICAgVHJlZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVNb2RlbCxcbiAgICBFdWlUcmVlU2VsZWN0aW9uQ2hhbmdlcyxcbiAgICBFdWlUcmVlUGFnaW5hdGlvbixcbiAgICBDdXN0b21Ob2RlU2VsZWN0Rm4sXG4gICAgQ3VzdG9tTm9kZVNlbGVjdEZuSGVscGVyLFxufSBmcm9tICcuL2V1aS10cmVlLm1vZGVsJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRXVpSW5wdXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktaW5wdXQtY2hlY2tib3gnO1xuaW1wb3J0IHsgRXVpQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1idXR0b24nO1xuaW1wb3J0IHsgRXVpSWNvbk1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktaWNvbic7XG5pbXBvcnQgeyBFdWlMYWJlbE1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktbGFiZWwnO1xuaW1wb3J0IHsgRXVpQmFkZ2VNb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWJhZGdlJztcbmltcG9ydCB7IEV1aUNoaXBNb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWNoaXAnO1xuaW1wb3J0IHsgRXVpRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWRyb3Bkb3duJztcbmltcG9ydCB7IE5lc3RlZFRyZWVDb250cm9sLCBDZGtUcmVlTW9kdWxlLCBDZGtUcmVlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xuaW1wb3J0IHsgQXJyYXlEYXRhU291cmNlLCBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFNjcm9sbGluZ01vZHVsZSwgU2Nyb2xsRGlzcGF0Y2hlciwgQ2RrU2Nyb2xsYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZXVpLXRyZWUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ldWktdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3R5bGVzL19pbmRleC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgRXVpVHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICAgIHB1YmxpYyBnZXQgY3NzQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDc3NDbGFzc2VzKCk7XG4gICAgfVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLWUyZScpIEBJbnB1dCgpIGUyZUF0dHIgPSAnZXVpLXRyZWUnO1xuICAgIEBJbnB1dCgpIG5vZGVzOiBUcmVlRGF0YU1vZGVsO1xuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIEBJbnB1dCgpIG5vZGVUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBASW5wdXQoKSBub2RlQ29udGVudE1ldGFkYXRhVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgQElucHV0KCkgcmlnaHRDb250ZXh0TWVudVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBJbnB1dCgpIGN1c3RvbU5vZGVTZWxlY3RGbjogQ3VzdG9tTm9kZVNlbGVjdEZuO1xuICAgIEBJbnB1dCgpIGV4cGFuZGVkSWNvbkNsYXNzOiBzdHJpbmc7XG4gICAgQElucHV0KCkgY29sbGFwc2VkSWNvbkNsYXNzOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZXhwYW5kZWRTdmdJY29uQ2xhc3MgPSAnY2hldnJvbi1mb3J3YXJkOnNoYXJwJztcbiAgICBASW5wdXQoKSBjb2xsYXBzZWRTdmdJY29uQ2xhc3MgPSAnY2hldnJvbi1kb3duOnNoYXJwJztcblxuICAgIEBWaWV3Q2hpbGQoJ2Nka1Njcm9sbGFibGVSZWYnLCB7IHJlYWQ6IENka1Njcm9sbGFibGUgfSkgY2RrU2Nyb2xsYWJsZVJlZjogQ2RrU2Nyb2xsYWJsZTtcbiAgICBAVmlld0NoaWxkKCd0cmVlQ29tcG9uZW50SW5zdGFuY2UnKSBwdWJsaWMgdHJlZUNvbXBvbmVudEluc3RhbmNlOiBDZGtUcmVlPFRyZWVJdGVtUnVuVGltZU1vZGVsPjtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc0NsaWNrVG9nZ2xpbmdOb2RlID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzTXVsdGlzZWxlY3QgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNTaW5nbGVTZWxlY3QgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNSZWN1cnNpdmVTZWxlY3Rpb24gPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24gPSB0cnVlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93VW5kZXJsaW5lZExpbmtzID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dMaW5lcyA9IHRydWU7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGF1dG9UcmFuc2xhdGUgPSB0cnVlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoaWdobGlnaHRQYXRoID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxFdWlUcmVlU2VsZWN0aW9uQ2hhbmdlcz4oKTtcbiAgICBAT3V0cHV0KCkgbm9kZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlSXRlbU1vZGVsPigpO1xuICAgIEBPdXRwdXQoKSBub2RlVG9nZ2xlID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlSXRlbU1vZGVsPigpO1xuICAgIGNka0FycmF5RGF0YVNvdXJjZTogQXJyYXlEYXRhU291cmNlPFRyZWVJdGVtUnVuVGltZU1vZGVsPjtcbiAgICBjZGtUcmVlQ29udHJvbDogTmVzdGVkVHJlZUNvbnRyb2w8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+O1xuICAgIHJlbmRlclRyZWU6IGJvb2xlYW47XG4gICAgcHVibGljIHVpZDogc3RyaW5nID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMDAwMCkudG9TdHJpbmcoKTtcbiAgICBwcm90ZWN0ZWQgX2lzTXVsdGlMZXZlbDtcbiAgICBwcml2YXRlIHByb2Nlc3NlZE5vZGVzOiBUcmVlRGF0YU1vZGVsO1xuICAgIHByaXZhdGUgdHJlZURhdGFSdW5UaW1lOiBUcmVlRGF0YVJ1blRpbWVNb2RlbDtcbiAgICBwcml2YXRlIHRyZWVEYXRhUnVuVGltZUJhY2t1cDogVHJlZURhdGFSdW5UaW1lTW9kZWw7XG4gICAgcHJpdmF0ZSBydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGU6IEFycmF5PFRyZWVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlTW9kZWw+O1xuICAgIHByaXZhdGUgc2VsZWN0aW9uTW9kZWw6IFNlbGVjdGlvbk1vZGVsPFRyZWVJdGVtUnVuVGltZU1vZGVsPjtcbiAgICBwcml2YXRlIHRlbXBTZWxlY3Rpb25Nb2RlbDogU2VsZWN0aW9uTW9kZWw8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+O1xuICAgIHByaXZhdGUgc2VsZWN0aW9uTW9kZWxTdWJzO1xuICAgIHByaXZhdGUgc2Nyb2xsRGlzcGF0Y2hlclN1YnM7XG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uO1xuICAgIHByaXZhdGUgdHJlZVBhZ2luYXRpb246IEV1aVRyZWVQYWdpbmF0aW9uPFRyZWVJdGVtUnVuVGltZU1vZGVsPjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHNjcm9sbERpc3BhdGNoZXI6IFNjcm9sbERpc3BhdGNoZXIpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0VHJlZSgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ25vZGVzJ10/LmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlc1snbm9kZXMnXT8ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmluaXRUcmVlKCk7XG4gICAgICAgICAgICBpZih0aGlzLnRyZWVDb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZUNvbXBvbmVudEluc3RhbmNlPy5yZW5kZXJOb2RlQ2hhbmdlcyhbXSk7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlQ29tcG9uZW50SW5zdGFuY2U/LnJlbmRlck5vZGVDaGFuZ2VzKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWxTdWJzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclN1YnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFNlbGVjdGlvbigpOiBUcmVlRGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBnZXRQcm9jZXNzZWROb2RlcygpOiBUcmVlRGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkTm9kZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IGFueSB7XG4gICAgICAgIHJldHVybiBpdGVtLnBhdGg7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdHJhY2tCeUNvbnRyb2woaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiBhbnkge1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICBnZXRUcmVlSXRlbShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbU1vZGVsIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgbm9kZUFyciA9IHRoaXMucHJvY2Vzc2VkTm9kZXM7XG4gICAgICAgIGxldCBub2RlO1xuICAgICAgICBpZiAobm9kZUFyciAmJiBBcnJheS5pc0FycmF5KG5vZGVBcnIpKSB7XG4gICAgICAgICAgICBpbmRleEFycj8uZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlQXJyID0gbm9kZUFyciAmJiBub2RlQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlQXJyW3BhdGhJbmRleF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgZXhwYW5kQWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmV4cGFuZEFsbCgpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGV4cGFuZEF0KHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmdldFBhcmVudFBhdGhzKHBhdGgpLnJldmVyc2UoKS5mb3JFYWNoKChwYXJlbnRQYXRoKT0+e1xuICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5leHBhbmQodGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0ocGFyZW50UGF0aCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5leHBhbmQodGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0ocGF0aCkpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBjb2xsYXBzZUFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5jb2xsYXBzZUFsbCgpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGZpbHRlclRlcm0oZmlsdGVySW5wdXQ6IHN0cmluZywgZmlsdGVyS2V5Pzogc3RyaW5nLCBzaG93Q2hpbGRyZW5PZk1hdGNoZWRJdGVtcz86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGZpbHRlcklucHV0ICE9PSAnJyAmJiBmaWx0ZXJJbnB1dCAhPT0gbnVsbCAmJiB0eXBlb2YgZmlsdGVySW5wdXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuZmlsdGVyVHJlZURhdGEoc3RydWN0dXJlZENsb25lKHRoaXMudHJlZURhdGFSdW5UaW1lQmFja3VwKSwgZmlsdGVyS2V5IHx8ICdsYWJlbCcsIGZpbHRlcklucHV0LCBzaG93Q2hpbGRyZW5PZk1hdGNoZWRJdGVtcyk7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuYXBwbHlSdW5UaW1lTGFzdEl0ZW1zKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIHRoaXMuY2RrQXJyYXlEYXRhU291cmNlID0gbmV3IEFycmF5RGF0YVNvdXJjZSh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4sIHsgdHJhY2tCeTogdGhpcy50cmFja0J5Q29udHJvbCB9KTtcbiAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZGF0YU5vZGVzID0gdGhpcy50cmVlRGF0YVJ1blRpbWU7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5leHBhbmRNYXRjaGVkKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIC8vIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cCk7XG4gICAgICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2UodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD4oKG5vZGUpID0+IG5vZGU/LmNoaWxkcmVuLCB7IHRyYWNrQnk6IHRoaXMudHJhY2tCeUNvbnRyb2wgfSk7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRBbGxTZWxlY3Rpb24oaXNDaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGVtcFNlbGVjdGlvbk1vZGVsID0gbmV3IFNlbGVjdGlvbk1vZGVsPFRyZWVJdGVtUnVuVGltZU1vZGVsPihcbiAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgIChhLCBiKSA9PiBhPy5wYXRoID09PSBiPy5wYXRoLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNldElzQ2hlY2tlZEZvckFsbCh0aGlzLnRyZWVEYXRhUnVuVGltZSwgaXNDaGVja2VkKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZXRTZWxlY3Rpb24oLi4udGhpcy50ZW1wU2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHVwZGF0ZVRyZWVJdGVtKGdpdmVuVHJlZUl0ZW06IFRyZWVJdGVtTW9kZWwsIHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCB0cmVlSXRlbSA9IHN0cnVjdHVyZWRDbG9uZShnaXZlblRyZWVJdGVtKTtcbiAgICAgICAgaWYgKHRyZWVJdGVtICYmIHBhdGgpIHtcbiAgICAgICAgdGhpcy50ZW1wU2VsZWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWw8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQsXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgKGEsIGIpID0+IGE/LnBhdGggPT09IGI/LnBhdGgsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2V0VHJlZURhdGEocGF0aCwgdGhpcy5wcm9jZXNzSW5wdXRzKFt0cmVlSXRlbV0pWzBdKTtcbiAgICAgICAgY29uc3QgcGF0aEFyciA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBwYXJzZUludChwYXRoQXJyLnBvcCgpLCAxMCk7XG4gICAgICAgIGNvbnN0IHRyZWVJdGVtUnVudGltZSA9IHRoaXMuY2FsY3VsYXRlUnVuVGltZVN0YXRlKHRyZWVJdGVtLCBpbmRleCwgcGF0aEFyci5qb2luKCcuJykpO1xuICAgICAgICBpZiAodHJlZUl0ZW1SdW50aW1lPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdHJlZUl0ZW1SdW50aW1lLmNoaWxkcmVuID0gdGhpcy5hcHBseVJ1blRpbWVMYXN0SXRlbXModHJlZUl0ZW1SdW50aW1lLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFRyZWVEYXRhUnVuVGltZUJhY2t1cChwYXRoLCB0cmVlSXRlbVJ1bnRpbWUpO1xuICAgICAgICB0aGlzLnNldFRyZWVEYXRhUnVuVGltZShwYXRoLCB0cmVlSXRlbVJ1bnRpbWUpO1xuICAgICAgICAvLyBpdGVtUmVjdXJzaXZlU2VsZWN0aW9uU3RhdGVcbiAgICAgICAgY29uc3QgaXRlbVJlY3Vyc2l2ZVNlbGVjdGlvblN0YXRlID0gdGhpcy5jYWxjdWxhdGVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUodHJlZUl0ZW0pO1xuICAgICAgICB0aGlzLnNldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZVRyZWUocGF0aCwgaXRlbVJlY3Vyc2l2ZVNlbGVjdGlvblN0YXRlKTtcbiAgICAgICAgdGhpcy5zeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKHBhdGgpO1xuICAgICAgICBpZiAodGhpcy5jZGtUcmVlQ29udHJvbC5pc0V4cGFuZGVkKHRyZWVJdGVtUnVudGltZSkgJiYgIXRyZWVJdGVtLm5vZGUuaXNFeHBhbmRlZCkge1xuICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC50b2dnbGUodHJlZUl0ZW1SdW50aW1lKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5jZGtUcmVlQ29udHJvbC5pc0V4cGFuZGVkKHRyZWVJdGVtUnVudGltZSkgJiYgdHJlZUl0ZW0ubm9kZS5pc0V4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmV4cGFuZCh0cmVlSXRlbVJ1bnRpbWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVuZGVySW5pdGlhbEV4cGFuZCh0aGlzLmdldFJ1blRpbWVUcmVlSXRlbShwYXRoKT8uY2hpbGRyZW4pO1xuICAgICAgICB0aGlzLmdldEluaXRpYWxTZWxlY3Rpb24odGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0ocGF0aCk/LmNoaWxkcmVuKT8uZm9yRWFjaCgocnVuVGltZUl0ZW0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0VHJlZUl0ZW0odGhpcy5nZXRSdW5UaW1lQmFja3VwVHJlZUl0ZW0ocnVuVGltZUl0ZW0ucGF0aCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZXRTZWxlY3Rpb24oLi4udGhpcy50ZW1wU2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQpO1xuICAgICAgICAvLyBSZW5kZXJpbmdcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMudHJlZUNvbXBvbmVudEluc3RhbmNlLnJlbmRlck5vZGVDaGFuZ2VzKFtdKTtcbiAgICAgICAgdGhpcy50cmVlQ29tcG9uZW50SW5zdGFuY2UucmVuZGVyTm9kZUNoYW5nZXModGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Ob2RlQ2xpY2sodHJlZVJ1blRpbWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5vZGVDbGljay5lbWl0KHRoaXMuZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtPy5wYXRoKSk7XG4gICAgICAgIGlmICh0aGlzLmlzQ2xpY2tUb2dnbGluZ05vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wudG9nZ2xlKHRyZWVSdW5UaW1lSXRlbSk7XG4gICAgICAgICAgICB0aGlzLm9uTm9kZVRvZ2dsZSh0cmVlUnVuVGltZUl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Ob2RlVG9nZ2xlKHRyZWVSdW5UaW1lSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW0/LnBhdGgpLm5vZGUuaXNFeHBhbmRlZCA9IHRoaXMuY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0cmVlUnVuVGltZUl0ZW0pO1xuICAgICAgICB0aGlzLm5vZGVUb2dnbGUuZW1pdCh0aGlzLmdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbT8ucGF0aCkpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIG5vZGVTZWxlY3RlZChldnQ6IGFueSwgcGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldFRyZWVJdGVtKHBhdGgpO1xuICAgICAgICBjb25zdCBydW5UaW1lQmFja3VwVHJlZUl0ZW0gPSB0aGlzLmdldFJ1blRpbWVCYWNrdXBUcmVlSXRlbShwYXRoKTtcbiAgICAgICAgY29uc3QgcmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0gPSB0aGlzLmdldFJ1blRpbWVUcmVlSXRlbShwYXRoKTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGl0ZW0/Lm5vZGU7XG4gICAgICAgIHRoaXMudGVtcFNlbGVjdGlvbk1vZGVsID0gbmV3IFNlbGVjdGlvbk1vZGVsPFRyZWVJdGVtUnVuVGltZU1vZGVsPihcbiAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgIChhLCBiKSA9PiBhPy5wYXRoID09PSBiPy5wYXRoLFxuICAgICAgICApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhwYXRoLGl0ZW0scnVuVGltZVRyZWVJdGVtLCByZW5kZXJlZFJ1blRpbWVUcmVlSXRlbSk7XG4gICAgICAgIGlmKHRoaXMuY3VzdG9tTm9kZVNlbGVjdEZuKXtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tTm9kZVNlbGVjdEZuKHBhdGgsIGV2dC50YXJnZXQuY2hlY2tlZCwgaXRlbSwgbmV3IEN1c3RvbU5vZGVTZWxlY3RGbkhlbHBlcih0aGlzKSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnNldFNlbGVjdGlvbiguLi50aGlzLnRlbXBTZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZCk7XG4gICAgICAgIH0gIGVsc2UgaWYgKCFub2RlPy5zZWxlY3RDb25maWc/LnNpbmdsZVNlbGVjdCkge1xuICAgICAgICAgICAgbm9kZS5pc1NlbGVjdGVkID0gZXZ0LnRhcmdldC5jaGVja2VkO1xuICAgICAgICAgICAgbm9kZS5pc0luZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIElmIHRoZSBub2RlIGlzIHJlY3Vyc2l2ZSBpdCBzZXRzIGV2ZXJ5IGNoaWxkcmVuIHdpdGggdGhlIGNoYW5nZS5cbiAgICAgICAgICAgIGlmIChyZW5kZXJlZFJ1blRpbWVUcmVlSXRlbT8uY2hpbGRyZW4gJiYgcmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlcmVkUnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJc0NoZWNrZWRGb3JBbGwocmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuLCBldnQudGFyZ2V0LmNoZWNrZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGVUcmVlKFxuICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUoc3RydWN0dXJlZENsb25lKHRoaXMuZ2V0VHJlZUl0ZW0ocGF0aCkpKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAocmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuICYmIHJlbmRlcmVkUnVuVGltZVRyZWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID49IDApIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5zZXRJc0NoZWNrZWRGb3JBbGwocmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuLCBldnQudGFyZ2V0LmNoZWNrZWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJ1blN0YXRlQ2hhbmdlc0ZvckFsbChyZW5kZXJlZFJ1blRpbWVUcmVlSXRlbT8uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVDb21wb25lbnRJbnN0YW5jZT8ucmVuZGVyTm9kZUNoYW5nZXMoW10pO1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZUNvbXBvbmVudEluc3RhbmNlPy5yZW5kZXJOb2RlQ2hhbmdlcyh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgocGF0aCk7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRUcmVlSXRlbShwYXRoKS5ub2RlLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFRyZWVJdGVtKHJ1blRpbWVCYWNrdXBUcmVlSXRlbSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RUcmVlSXRlbShydW5UaW1lQmFja3VwVHJlZUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgbm9kZVBhdGhzU2VxID0gdGhpcy5nZXRQYXJlbnRQYXRocyhwYXRoKTtcbiAgICAgICAgICAgIGlmIChub2RlUGF0aHNTZXEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIG5vZGVQYXRoc1NlcS5mb3JFYWNoKChub2RlUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVJdGVtID0gdGhpcy5nZXRUcmVlSXRlbShub2RlUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkU3RhdGVzID0gdGhpcy5nZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUobm9kZVBhdGgpLmNoaWxkcmVuLm1hcCgoXykgPT4gXy5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlY2lkZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkU3RhdGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVJdGVtLm5vZGU/LmlzU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZT8uc2VsZWN0Q29uZmlnPy5ub0F1dG9TZWxlY3RQYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgobm9kZVBhdGgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuc2V0U2VsZWN0aW9uKC4uLnRoaXMudGVtcFNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZJdGVtID0gdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXTtcbiAgICAgICAgICAgIGlmIChldnQudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldkl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUcmVlSXRlbShwcmV2SXRlbS5wYXRoKS5ub2RlLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChwcmV2SXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGl0ZW0ubm9kZS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdChydW5UaW1lQmFja3VwVHJlZUl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtLm5vZGUuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QocnVuVGltZUJhY2t1cFRyZWVJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodFBhdGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZ0LnRhcmdldC5jaGVja2VkICYmIHByZXZJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZJdGVtTm9kZVBhdGhzU2VxID0gdGhpcy5nZXRQYXJlbnRQYXRocyhwcmV2SXRlbS5wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZJdGVtTm9kZVBhdGhzU2VxLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZJdGVtTm9kZVBhdGhzU2VxLmZvckVhY2goKG5vZGVQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShub2RlUGF0aCwgJ2FsbE5vdFNlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKG5vZGVQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVQYXRoc1NlcSA9IHRoaXMuZ2V0UGFyZW50UGF0aHMocGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVQYXRoc1NlcT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBub2RlUGF0aHNTZXEuZm9yRWFjaCgobm9kZVBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUobm9kZVBhdGgsIGV2dC50YXJnZXQuY2hlY2tlZCA/ICdpbmRldGVybWluYXRlJyA6ICdhbGxOb3RTZWxlY3RlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKG5vZGVQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc0NoaWxkID0gKF86IG51bWJlciwgaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiBib29sZWFuID0+ICEhaXRlbT8uY2hpbGRyZW4gJiYgaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+PSAwO1xuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgb25TZWxlY3RGbihwYXRoOiBzdHJpbmcpOiAoZXZ0OiBhbnkpID0+IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5nZXRUcmVlSXRlbShwYXRoKT8ubm9kZT8uc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZVNlbGVjdGVkID0gdGhpcy5ub2RlU2VsZWN0ZWQuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICByZXR1cm4gKGV2dDogYW55KSA9PiBub2RlU2VsZWN0ZWQoZXZ0LCBwYXRoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIHJldHVybiAoZXZ0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybigndHJlZUl0ZW1Nb2RlbC5ub2RlLnNlbGVjdGFibGUgaXMgZmFsc2UsIHlvdSBjYW4gbm90IGltcGxlbWVudCBvblNlbGVjdCcpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgbm9kZUFyciA9IHRoaXMucnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlO1xuICAgICAgICBsZXQgbm9kZTtcbiAgICAgICAgaW5kZXhBcnI/LmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIG5vZGVBcnIgPSBub2RlQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlID0gbm9kZUFycltwYXRoSW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0VHJlZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubm9kZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzTXVsdGlMZXZlbCA9IHRoaXMuY2hlY2tJZk11bHRpTGV2ZWwodGhpcy5ub2Rlcyk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NlZE5vZGVzID0gdGhpcy5wcm9jZXNzSW5wdXRzKHN0cnVjdHVyZWRDbG9uZSh0aGlzLm5vZGVzKSk7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuY3JlYXRlVHJlZURhdGFSdW50aW1lKHRoaXMucHJvY2Vzc2VkTm9kZXMpO1xuICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWUgPSB0aGlzLmFwcGx5UnVuVGltZUxhc3RJdGVtcyh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9IHRoaXMuY3JlYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHRoaXMucHJvY2Vzc2VkTm9kZXMpO1xuICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWVCYWNrdXAgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgLy8gdG9kbyBJdCBzaG91bGQgYmUgY29uZmlndXJhYmxlLCA4MDAsIDIgYW5kIDQwMCBhcmUgaGFyZCBjb2RlZCByaWdodCBub3dcbiAgICAgICAgICAgIGlmICh0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cC5sZW5ndGggPiA4MDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVQYWdpbmF0aW9uID0gbmV3IEV1aVRyZWVQYWdpbmF0aW9uPFRyZWVJdGVtUnVuVGltZU1vZGVsPih0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cCwgMSwgMiwgNDAwKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWdpbmF0ZWREYXRhID0gdGhpcy50cmVlUGFnaW5hdGlvbi5nZXRWaWV3RGF0YSgpLmRhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5jZGtBcnJheURhdGFTb3VyY2UgPSBuZXcgQXJyYXlEYXRhU291cmNlPFRyZWVJdGVtUnVuVGltZU1vZGVsPihwYWdpbmF0ZWREYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdGhpcy50cmFja0J5Q29udHJvbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHBhZ2luYXRlZERhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5ydW5TY3JvbGxMaXN0ZW5lcigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2U8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdGhpcy50cmFja0J5Q29udHJvbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW5kZXJJbml0aWFsRXhwYW5kKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWw8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRJbml0aWFsU2VsZWN0aW9uKHRoaXMudHJlZURhdGFSdW5UaW1lKSxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgIChhLCBiKSA9PiBhPy5wYXRoID09PSBiPy5wYXRoLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbiA9IFsuLi50aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkXT8ubWFwKChpdGVtKSA9PiB0aGlzLmdldFRyZWVJdGVtKGl0ZW0/LnBhdGgpKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsU3Vicy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnMgPSB0aGlzLnNlbGVjdGlvbk1vZGVsLmNoYW5nZWQucGlwZShkZWJvdW5jZVRpbWUoMSkpLnN1YnNjcmliZSgoc2MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25DaGFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZGVkOiBzYy5hZGRlZC5tYXAoKF8pID0+IHRoaXMuZ2V0VHJlZUl0ZW0oXy5wYXRoKSksXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZWQ6IHNjLnJlbW92ZWQubWFwKChfKSA9PiB0aGlzLmdldFRyZWVJdGVtKF8ucGF0aCkpLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsuLi50aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkXS5tYXAoKGl0ZW0pID0+IHRoaXMuZ2V0VHJlZUl0ZW0oaXRlbS5wYXRoKSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24gPSBzZWxlY3Rpb25DaGFuZ2Uuc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoc2VsZWN0aW9uQ2hhbmdlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0lucHV0cyh0cmVlRGF0YTogVHJlZURhdGFNb2RlbCk6IFRyZWVEYXRhTW9kZWwge1xuICAgICAgICBpZiAodGhpcy5pc011bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICB0cmVlRGF0YSA9IHRoaXMub3ZlcnJpZGVUcmVlRGF0YU1vZGVsRm9yU2VsZWN0aW9uKHRyZWVEYXRhLCB0aGlzLmlzUmVjdXJzaXZlU2VsZWN0aW9uLCAhdGhpcy5pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVTZWxlY3QpIHtcbiAgICAgICAgICAgIHRyZWVEYXRhID0gdGhpcy5vdmVycmlkZVRyZWVEYXRhTW9kZWxGb3JTZWxlY3Rpb24odHJlZURhdGEsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyZWVEYXRhO1xuICAgIH1cblxuICAgIHByaXZhdGUgb3ZlcnJpZGVUcmVlRGF0YU1vZGVsRm9yU2VsZWN0aW9uKFxuICAgICAgICBub2RlQXJyOiBUcmVlRGF0YU1vZGVsLFxuICAgICAgICBpc1JlY3Vyc2l2ZTogYm9vbGVhbixcbiAgICAgICAgbm9BdXRvU2VsZWN0UGFyZW50OiBib29sZWFuLFxuICAgICAgICBzaW5nbGVTZWxlY3Q/OiBib29sZWFuLFxuICAgICk6IFRyZWVEYXRhTW9kZWwge1xuICAgICAgICByZXR1cm4gbm9kZUFycj8ubWFwKChpdGVtOiBUcmVlSXRlbU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbm9kZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbS5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdGFibGUgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IGl0ZW0/Lm5vZGU/LnNlbGVjdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpc1NlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzSW5kZXRlcm1pbmF0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RDb25maWc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLm5vZGUuc2VsZWN0Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAhIWlzUmVjdXJzaXZlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vQXV0b1NlbGVjdFBhcmVudDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8ubm9BdXRvU2VsZWN0UGFyZW50ID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBub0F1dG9TZWxlY3RQYXJlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5ub0F1dG9TZWxlY3RQYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU2VsZWN0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5zaW5nbGVTZWxlY3QgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNpbmdsZVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/LnNpbmdsZVNlbGVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLm92ZXJyaWRlVHJlZURhdGFNb2RlbEZvclNlbGVjdGlvbihpdGVtLmNoaWxkcmVuLCBpc1JlY3Vyc2l2ZSwgbm9BdXRvU2VsZWN0UGFyZW50LCBzaW5nbGVTZWxlY3QpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IHR5cGVvZiBpdGVtPy5ub2RlPy5zZWxlY3RhYmxlID09PSAndW5kZWZpbmVkJyA/IHRydWUgOiBpdGVtPy5ub2RlPy5zZWxlY3RhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0Q29uZmlnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbS5ub2RlPy5zZWxlY3RDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU2VsZWN0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5zaW5nbGVTZWxlY3QgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNpbmdsZVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/LnNpbmdsZVNlbGVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBydW5TY3JvbGxMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICAgICAgLyogaWYgKHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclN1YnMpIHsgdG9kb1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxEaXNwYXRjaGVyU3Vicy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9Ki9cbiAgICAgICAgdGhpcy5zY3JvbGxEaXNwYXRjaGVyU3VicyA9IHRoaXMuc2Nyb2xsRGlzcGF0Y2hlci5zY3JvbGxlZCgpLnN1YnNjcmliZSgoc2Nyb2xsYWJsZTogQ2RrU2Nyb2xsYWJsZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHNjcm9sbGFibGUgJiYgdGhpcy5jaGVja0lmQ3VycmVudFNjcm9sbGFibGUoc2Nyb2xsYWJsZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0F0Qm90dG9tID1cbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZT8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wICsgc2Nyb2xsYWJsZT8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0ID49XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGU/LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0F0VG9wID0gc2Nyb2xsYWJsZT8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID09PSAwO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdFbGVtZW50OicsIHRoaXMuY2RrU2Nyb2xsYWJsZVJlZi5nZXRFbGVtZW50UmVmKCkpO1xuICAgICAgICAgICAgICAgIGlmIChpc0F0Qm90dG9tICYmICF0aGlzLnRyZWVQYWdpbmF0aW9uLmlzQXRNYXgoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMudHJlZVBhZ2luYXRpb24ucGFnaW5hdGVOZXh0KCkuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lID0gdGhpcy5hcHBseVJ1blRpbWVMYXN0SXRlbXModGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZGtBcnJheURhdGFTb3VyY2UgPSBuZXcgQXJyYXlEYXRhU291cmNlKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wgPSBuZXcgTmVzdGVkVHJlZUNvbnRyb2w8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KChub2RlKSA9PiBub2RlPy5jaGlsZHJlbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRoaXMudHJhY2tCeUNvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZGF0YU5vZGVzID0gdGhpcy50cmVlRGF0YVJ1blRpbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRBbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsSGVpZ2h0ID0gc2Nyb2xsYWJsZS5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCdib3R0b20nKSArIHNjcm9sbGFibGUubWVhc3VyZVNjcm9sbE9mZnNldCgndG9wJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHNjcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb25Ub1Njcm9sbCA9IHRvdGFsSGVpZ2h0IC0gdmlld3BvcnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlLnNjcm9sbFRvKHsgdG9wOiBwb3NpdGlvblRvU2Nyb2xsIC8gMiB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNBdFRvcCAmJiB0aGlzLnRyZWVQYWdpbmF0aW9uLmdldEN1cnJlbnRTdGFydFBhZ2UoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWUgPSB0aGlzLnRyZWVQYWdpbmF0aW9uLnBhZ2luYXRlUHJldigpLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuYXBwbHlSdW5UaW1lTGFzdEl0ZW1zKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrQXJyYXlEYXRhU291cmNlID0gbmV3IEFycmF5RGF0YVNvdXJjZSh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0aGlzLnRyYWNrQnlDb250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3RhbEhlaWdodCA9IHNjcm9sbGFibGUubWVhc3VyZVNjcm9sbE9mZnNldCgnYm90dG9tJykgKyBzY3JvbGxhYmxlLm1lYXN1cmVTY3JvbGxPZmZzZXQoJ3RvcCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSBzY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uVG9TY3JvbGwgPSB0b3RhbEhlaWdodCAtIHZpZXdwb3J0SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZS5zY3JvbGxUbyh7IHRvcDogcG9zaXRpb25Ub1Njcm9sbCAvIDIgKyB2aWV3cG9ydEhlaWdodCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3Rpb25JbmRleE9mSXRlbShydW5UaW1lVHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQuZmluZEluZGV4KChpKSA9PiBpPy5wYXRoID09PSBydW5UaW1lVHJlZUl0ZW0/LnBhdGgpO1xuICAgIH1cbiAgICAvLyB0b2RvIHJlLXRoaW5rIGFib3V0IHRoZSBhY2Nlc3MgZnJvbSBjdXN0b20gb24gbm9kZSBzZWxlY3QgaGVscGVyXG4gICAgcHJpdmF0ZSBzaWxlbnRTZWxlY3QocGF0aDpzdHJpbmcsIGlzQ2hlY2tlZDogYm9vbGVhbik6IHZvaWR7XG4gICAgICAgIGNvbnN0IHJ1bnRpbWVCYWNrdXBUcmVlSXRlbSA9IHRoaXMuZ2V0UnVuVGltZUJhY2t1cFRyZWVJdGVtKHBhdGgpO1xuICAgICAgICBjb25zdCB0cmVlSXRlbSA9IHRoaXMuZ2V0VHJlZUl0ZW0ocGF0aCk7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0cmVlSXRlbS5ub2RlO1xuICAgICAgICBpZiAobm9kZT8uc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgbm9kZS5pc1NlbGVjdGVkID0gaXNDaGVja2VkO1xuICAgICAgICAgICAgbm9kZS5pc0luZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChpc0NoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBTZWxlY3Rpb25Nb2RlbC5zZWxlY3QocnVudGltZUJhY2t1cFRyZWVJdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wU2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QocnVudGltZUJhY2t1cFRyZWVJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0VHJlZUl0ZW0ocnVuVGltZUJhY2t1cFRyZWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRlbXBTZWxlY3Rpb25Nb2RlbC5zZWxlY3QocnVuVGltZUJhY2t1cFRyZWVJdGVtKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc2VsZWN0VHJlZUl0ZW0ocnVuVGltZVRyZWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRlbXBTZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChydW5UaW1lVHJlZUl0ZW0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlVHJlZURhdGFSdW50aW1lKG5vZGVzOiBUcmVlRGF0YU1vZGVsKTogVHJlZURhdGFSdW5UaW1lTW9kZWwge1xuICAgICAgICByZXR1cm4gc3RydWN0dXJlZENsb25lKG5vZGVzKT8ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlUnVuVGltZVN0YXRlKGl0ZW0sIGluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseVJ1blRpbWVMYXN0SXRlbXMoaXRlbXM6IFRyZWVEYXRhUnVuVGltZU1vZGVsKTogVHJlZURhdGFSdW5UaW1lTW9kZWwge1xuICAgICAgICByZXR1cm4gaXRlbXM/Lm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGxhc3Q6IGl0ZW1zLmxlbmd0aCA9PT0gaW5kZXggKyAxID8gdHJ1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCA+IDAgPyB0aGlzLmFwcGx5UnVuVGltZUxhc3RJdGVtcyhpdGVtLmNoaWxkcmVuKSA6IGl0ZW0/LmNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGxhc3Q6IGl0ZW1zLmxlbmd0aCA9PT0gaW5kZXggKyAxID8gdHJ1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShub2RlczogVHJlZURhdGFNb2RlbCk6IEFycmF5PFRyZWVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIHN0cnVjdHVyZWRDbG9uZShub2Rlcyk/Lm1hcCgoaXRlbSkgPT4gdGhpcy5jYWxjdWxhdGVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUoeyAuLi5pdGVtIH0pKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGluZyBydW4gdGltZSBzdGF0ZSB3aGljaCBpbmNsdWRlcyBjaGlsZHJlbiBzZWxlY3Rpb24gc3RhdGUgZm9yIHNlbGVjdGlvbiB0cmVlLlxuICAgIHByaXZhdGUgY2FsY3VsYXRlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHRyZWVJdGVtOiBUcmVlSXRlbU1vZGVsKTogVHJlZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVNb2RlbCB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuU2VsZWN0aW9uUmVjdXJzaXZlOiBBcnJheTxUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsPiA9IFtdO1xuICAgICAgICBpZiAodHJlZUl0ZW0uY2hpbGRyZW4gJiYgdHJlZUl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdHJlZUl0ZW0uY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5TZWxlY3Rpb25SZWN1cnNpdmVbaW5kZXhdID0gdGhpcy5jYWxjdWxhdGVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUoY2hpbGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hpbGRTdGF0ZXMgPSBjaGlsZHJlblNlbGVjdGlvblJlY3Vyc2l2ZS5tYXAoKF8pID0+IF8uc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUpO1xuICAgICAgICBjb25zdCBpdGVtU3RhdGU6IFNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID0gIHRyZWVJdGVtLm5vZGUuc2VsZWN0YWJsZSA/IHRoaXMuZGVjaWRlU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUoXG4gICAgICAgICAgICBjaGlsZFN0YXRlcyxcbiAgICAgICAgICAgIHRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCxcbiAgICAgICAgICAgIHRyZWVJdGVtLm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlLFxuICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZT8uc2VsZWN0Q29uZmlnPy5ub0F1dG9TZWxlY3RQYXJlbnQsXG4gICAgICAgICkgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTogaXRlbVN0YXRlLFxuICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuU2VsZWN0aW9uUmVjdXJzaXZlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVjaWRlU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUoXG4gICAgICAgIGNoaWxkU3RhdGVzOiBBcnJheTxTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZT4gPSBbXSxcbiAgICAgICAgaXNTZWxlY3RlZDogYm9vbGVhbixcbiAgICAgICAgcmVjdXJzaXZlOiBib29sZWFuLFxuICAgICAgICBub0F1dG9TZWxlY3RQYXJlbnQ6IGJvb2xlYW4sXG4gICAgKTogU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUge1xuICAgICAgICBsZXQgaXRlbVN0YXRlOiBTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9ICdpbmRldGVybWluYXRlJztcbiAgICAgICAgaWYgKGlzU2VsZWN0ZWQgJiYgY2hpbGRTdGF0ZXMuZmlsdGVyKChjaGlsZFN0YXRlcyk9PmNoaWxkU3RhdGVzKS5ldmVyeSgoc3RhdGUpID0+IHN0YXRlID09PSAnYWxsU2VsZWN0ZWQnKSkge1xuICAgICAgICAgICAgaXRlbVN0YXRlID0gJ2FsbFNlbGVjdGVkJztcbiAgICAgICAgfSBlbHNlIGlmICghaXNTZWxlY3RlZCAmJiBjaGlsZFN0YXRlcy5maWx0ZXIoKGNoaWxkU3RhdGVzKT0+Y2hpbGRTdGF0ZXMpLmV2ZXJ5KChzdGF0ZSkgPT4gc3RhdGUgPT09ICdhbGxOb3RTZWxlY3RlZCcpKSB7XG4gICAgICAgICAgICBpdGVtU3RhdGUgPSAnYWxsTm90U2VsZWN0ZWQnO1xuICAgICAgICB9IGVsc2UgaWYgKHJlY3Vyc2l2ZSAmJiBjaGlsZFN0YXRlcy5maWx0ZXIoKGNoaWxkU3RhdGVzKT0+Y2hpbGRTdGF0ZXMpLmV2ZXJ5KChzdGF0ZSkgPT4gc3RhdGUgPT09ICdhbGxTZWxlY3RlZCcpICYmICFpc1NlbGVjdGVkICYmICFub0F1dG9TZWxlY3RQYXJlbnQpIHtcbiAgICAgICAgICAgIGl0ZW1TdGF0ZSA9ICdhbGxTZWxlY3RlZCc7XG4gICAgICAgIH0gZWxzZSBpZiAocmVjdXJzaXZlICYmIGNoaWxkU3RhdGVzLmZpbHRlcigoY2hpbGRTdGF0ZXMpPT5jaGlsZFN0YXRlcykuZXZlcnkoKHN0YXRlKSA9PiBzdGF0ZSA9PT0gJ2FsbE5vdFNlbGVjdGVkJykgJiYgaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgaXRlbVN0YXRlID0gJ2FsbE5vdFNlbGVjdGVkJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbVN0YXRlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3luY1N0YXRlQ2hhbmdlc0F0UGF0aChub2RlUGF0aCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0cmVlSXRlbSA9IHRoaXMuZ2V0VHJlZUl0ZW0obm9kZVBhdGgpO1xuICAgICAgICBjb25zdCBydW5UaW1lQmFja3VwVHJlZUl0ZW0gPSB0aGlzLmdldFJ1blRpbWVCYWNrdXBUcmVlSXRlbShub2RlUGF0aCk7XG4gICAgICAgIGNvbnN0IHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVJdGVtID0gdGhpcy5nZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUobm9kZVBhdGgpO1xuICAgICAgICBpZiAodHJlZUl0ZW0/Lm5vZGU/LnNlbGVjdGFibGUgJiYgdHJlZUl0ZW0ubm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUpIHtcbiAgICAgICAgICAgIGlmICghdHJlZUl0ZW0ubm9kZT8uc2VsZWN0Q29uZmlnPy5ub0F1dG9TZWxlY3RQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICB0cmVlSXRlbS5ub2RlID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi50cmVlSXRlbS5ub2RlLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlSXRlbS5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9PT0gJ2FsbFNlbGVjdGVkJyxcbiAgICAgICAgICAgICAgICAgICAgaXNJbmRldGVybWluYXRlOiBydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlSXRlbS5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9PT0gJ2luZGV0ZXJtaW5hdGUnLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyZWVJdGVtLm5vZGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRyZWVJdGVtLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IHRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCAmJiBydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlSXRlbS5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9PT0gJ2FsbFNlbGVjdGVkJyxcbiAgICAgICAgICAgICAgICAgICAgaXNJbmRldGVybWluYXRlOlxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZUl0ZW0uc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPT09ICdpbmRldGVybWluYXRlJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKCF0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgJiYgcnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZUl0ZW0uc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPT09ICdhbGxTZWxlY3RlZCcpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0cmVlSXRlbSwgdHJlZUl0ZW0ubm9kZS50cmVlQ29udGVudEJsb2NrLmxhYmVsLCAnaXNTZWxlY3RlZDonICsgdHJlZUl0ZW0ubm9kZS5pc1NlbGVjdGVkLCAnaXNJbmRldGVybWluYXRlOicgKyB0cmVlSXRlbS5ub2RlLmlzSW5kZXRlcm1pbmF0ZSk7XG4gICAgICAgICAgICBpZiAodHJlZUl0ZW0ubm9kZS5pc1NlbGVjdGVkID09PSB0cnVlICYmICF0aGlzLnNlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQocnVuVGltZUJhY2t1cFRyZWVJdGVtKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0VHJlZUl0ZW0ocnVuVGltZUJhY2t1cFRyZWVJdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHJlZUl0ZW0ubm9kZS5pc1NlbGVjdGVkID09PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQocnVuVGltZUJhY2t1cFRyZWVJdGVtKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RUcmVlSXRlbShydW5UaW1lQmFja3VwVHJlZUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUcmVlRGF0YShwYXRoOiBzdHJpbmcsIGl0ZW06IFRyZWVJdGVtTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgaXRlbUFyciA9IHRoaXMucHJvY2Vzc2VkTm9kZXM7XG4gICAgICAgIGluZGV4QXJyPy5mb3JFYWNoKChwYXRoSW5kZXg6IG51bWJlciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA8IGluZGV4QXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBpdGVtQXJyID0gaXRlbUFycltwYXRoSW5kZXhdPy5jaGlsZHJlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbUFycltwYXRoSW5kZXhdID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUcmVlRGF0YVJ1blRpbWVCYWNrdXAocGF0aDogc3RyaW5nLCBpdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleEFycjogQXJyYXk8bnVtYmVyPiA9IHRoaXMucmVzb2x2ZVBhdGgocGF0aCk7XG4gICAgICAgIGxldCBpdGVtQXJyID0gdGhpcy50cmVlRGF0YVJ1blRpbWVCYWNrdXA7XG4gICAgICAgIGluZGV4QXJyLmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnIgPSBpdGVtQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtQXJyW3BhdGhJbmRleF0gPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRyZWVEYXRhUnVuVGltZShwYXRoOiBzdHJpbmcsIGl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9sZEl0ZW0gPSB0aGlzLmdldFJ1blRpbWVUcmVlSXRlbShwYXRoKTtcbiAgICAgICAgaWYob2xkSXRlbSl7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhpdGVtKT8uZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIG9sZEl0ZW1ba2V5XSA9IGl0ZW1ba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGVUcmVlKHBhdGg6IHN0cmluZywgaXRlbTogVHJlZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleEFycjogQXJyYXk8bnVtYmVyPiA9IHRoaXMucmVzb2x2ZVBhdGgocGF0aCk7XG4gICAgICAgIGxldCBpdGVtQXJyID0gdGhpcy5ydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGU7XG4gICAgICAgIGluZGV4QXJyLmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnIgPSBpdGVtQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtQXJyW3BhdGhJbmRleF0gPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShwYXRoOiBzdHJpbmcsIHNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlOiBTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleEFycjogQXJyYXk8bnVtYmVyPiA9IHRoaXMucmVzb2x2ZVBhdGgocGF0aCk7XG4gICAgICAgIGxldCBpdGVtQXJyID0gdGhpcy5ydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGU7XG4gICAgICAgIGluZGV4QXJyLmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnIgPSBpdGVtQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtQXJyW3BhdGhJbmRleF0gPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW1BcnJbcGF0aEluZGV4XSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJc0NoZWNrZWRGb3JBbGwobm9kZUFycjogQXJyYXk8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+LCBpc0NoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgbm9kZUFyci5mb3JFYWNoKChydW5UaW1lSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bnRpbWVCYWNrdXBUcmVlSXRlbSA9IHRoaXMuZ2V0UnVuVGltZUJhY2t1cFRyZWVJdGVtKHJ1blRpbWVJdGVtLnBhdGgpO1xuICAgICAgICAgICAgY29uc3QgdHJlZUl0ZW0gPSB0aGlzLmdldFRyZWVJdGVtKHJ1blRpbWVJdGVtLnBhdGgpO1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRyZWVJdGVtLm5vZGU7XG4gICAgICAgICAgICBpZiAobm9kZT8uc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgICAgIG5vZGUuaXNTZWxlY3RlZCA9IGlzQ2hlY2tlZDtcbiAgICAgICAgICAgICAgICBub2RlLmlzSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChpc0NoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RUcmVlSXRlbShydW50aW1lQmFja3VwVHJlZUl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RUcmVlSXRlbShydW50aW1lQmFja3VwVHJlZUl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChydW5UaW1lSXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldElzQ2hlY2tlZEZvckFsbChub2RlQXJyW2luZGV4XS5jaGlsZHJlbiwgaXNDaGVja2VkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBydW5TdGF0ZUNoYW5nZXNGb3JBbGwobm9kZUFycjogQXJyYXk8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KTogdm9pZCB7XG4gICAgICAgIG5vZGVBcnI/LmZvckVhY2goKHJ1blRpbWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgaWYgKHJ1blRpbWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJ1blN0YXRlQ2hhbmdlc0ZvckFsbChub2RlQXJyW2luZGV4XS5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5zeW5jU2VsZWN0aW9uQXRQYXRoKHJ1blRpbWVJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzeW5jU2VsZWN0aW9uQXRQYXRoKHJ1blRpbWVUcmVlSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgLy8gSXQgaXMgaGVyZSBmb3IgdGhlIGZpbHRlciBlZGdlIGNhc2UuXG4gICAgICAgIHRoaXMuc3luY1N0YXRlQ2hhbmdlc0F0UGF0aChydW5UaW1lVHJlZUl0ZW0ucGF0aCk7XG4gICAgICAgIC8vIFNldHMgaXNTZWxlY3RlZCBjaGFuZ2Ugb24gdGhlIGNvbnRyb2wuXG4gICAgICAgIGlmICh0aGlzLmdldFRyZWVJdGVtKHJ1blRpbWVUcmVlSXRlbS5wYXRoKS5ub2RlLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0VHJlZUl0ZW0odGhpcy5nZXRSdW5UaW1lQmFja3VwVHJlZUl0ZW0ocnVuVGltZVRyZWVJdGVtLnBhdGgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RUcmVlSXRlbSh0aGlzLmdldFJ1blRpbWVCYWNrdXBUcmVlSXRlbShydW5UaW1lVHJlZUl0ZW0ucGF0aCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNvbHZlUGF0aChwYXRoOiBzdHJpbmcpOiBBcnJheTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIHBhdGg/LnNwbGl0KCcuJykubWFwKChpbmRleDogc3RyaW5nKSA9PiBwYXJzZUludChpbmRleCwgMTApKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBhcmVudFBhdGhzKHBhdGg6IHN0cmluZyk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICBjb25zdCBwYXRoQXJyID0gcGF0aC5zcGxpdCgnLicpO1xuICAgICAgICBjb25zdCBoYXNQYXJlbnQgPSBwYXRoQXJyLmxlbmd0aCA+IDE7XG4gICAgICAgIC8vIFNldHMgdGhlIGhhc1BhcmVudCBJZiB0aGVyZSBpcyBhIHBhcmVudCwgYW5kIHJlbW92ZXMgdGhlIGxhc3QgZWxlbWVudCBmb3JtIHBhdGhBcnIuXG4gICAgICAgIGlmIChoYXNQYXJlbnQpIHtcbiAgICAgICAgICAgIHBhdGhBcnIucG9wKCk7XG4gICAgICAgICAgICAvLyBDYWxjdWxhdGVzIHBhcmVudCBwYXRoXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gcGF0aEFyci5qb2luKCcuJyk7XG4gICAgICAgICAgICAvLyBDcmVhdGluZyBub2RlIGluZGV4IHNlcXVlbmNlIGYuZSBJZiBwYXRoIGlzICcxLjInIGl0IHdpbGwgYmUgWzEsMl1cbiAgICAgICAgICAgIGNvbnN0IG5vZGVJbmRleFNlcSA9IHBhcmVudFBhdGguc3BsaXQoJy4nKS5tYXAoKGluZGV4U3RyKSA9PiBwYXJzZUludChpbmRleFN0ciwgMTApKTtcbiAgICAgICAgICAgIC8vIENhbGN1bGF0aW5nIHRoZSBub2RlIHBhdGhzIGFycmF5IHRvIGJlIHJlLWNhbGN1bGF0ZWQgZnJvbSBib3R0b20gdG8gdG9wXG4gICAgICAgICAgICBjb25zdCBub2RlUGF0aHNTZXEgPSBbXTtcbiAgICAgICAgICAgIG5vZGVJbmRleFNlcS5mb3JFYWNoKChub2RlSW5kZXgsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgbm9kZVBhdGhzU2VxW2luZGV4XSA9IG5vZGVJbmRleFNlcS5zbGljZSgwLCBpbmRleCArIDEpLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVQYXRoc1NlcS5yZXZlcnNlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZVJ1blRpbWVTdGF0ZSh0cmVlSXRlbTogVHJlZUl0ZW1Nb2RlbCwgaW5kZXg6IG51bWJlciwgcGFyZW50UGF0aD86IHN0cmluZyk6IFRyZWVJdGVtUnVuVGltZU1vZGVsIHtcbiAgICAgICAgY29uc3QgcnVuVGltZVRyZWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCA9IHtcbiAgICAgICAgICAgIHBhdGg6IHBhcmVudFBhdGggPyBwYXJlbnRQYXRoICsgJy4nICsgaW5kZXggOiBpbmRleC50b1N0cmluZygpLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0cmVlSXRlbS5jaGlsZHJlbiAmJiB0cmVlSXRlbS5jaGlsZHJlbi5sZW5ndGggPj0gMCkge1xuICAgICAgICAgICAgcnVuVGltZVRyZWVJdGVtLmNoaWxkcmVuID0gW107XG4gICAgICAgICAgICB0cmVlSXRlbS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCwgdHJlZUl0ZW1JbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIHJ1blRpbWVUcmVlSXRlbS5jaGlsZHJlblt0cmVlSXRlbUluZGV4XSA9IHRoaXMuY2FsY3VsYXRlUnVuVGltZVN0YXRlKGNoaWxkLCB0cmVlSXRlbUluZGV4LCBydW5UaW1lVHJlZUl0ZW0ucGF0aCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcnVuVGltZVRyZWVJdGVtO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmlsdGVyVHJlZURhdGEocnVuVGltZVRyZWVEYXRhOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCwga2V5ID0gJ2xhYmVsJywgZmlsdGVyU3RyOiBzdHJpbmcsIHNob3dDaGlsZHJlbjogYm9vbGVhbiwgc2hvdz86Ym9vbGVhbik6IFRyZWVEYXRhUnVuVGltZU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHJ1blRpbWVUcmVlRGF0YS5maWx0ZXIoKHJ1blRpbWVJdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXREYXRhID0gdGhpcy5nZXRUcmVlSXRlbShydW5UaW1lSXRlbS5wYXRoKS5ub2RlLnRyZWVDb250ZW50QmxvY2tba2V5XTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0YXJnZXREYXRhICYmIHRoaXMubm9ybWFsaXplZFN0cih0YXJnZXREYXRhKT8uaW5jbHVkZXModGhpcy5ub3JtYWxpemVkU3RyKGZpbHRlclN0cikpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZihydW5UaW1lSXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICBydW5UaW1lSXRlbS5jaGlsZHJlbiA9IHRoaXMuZmlsdGVyVHJlZURhdGEocnVuVGltZUl0ZW0uY2hpbGRyZW4sIGtleSwgZmlsdGVyU3RyLCBzaG93Q2hpbGRyZW4sIHNob3dDaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocnVuVGltZUl0ZW0seyBtYXRjaGVkOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgLy8gcnVuVGltZUl0ZW0ubWF0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJ1blRpbWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJ1blRpbWVJdGVtLmNoaWxkcmVuID0gdGhpcy5maWx0ZXJUcmVlRGF0YShydW5UaW1lSXRlbS5jaGlsZHJlbiwga2V5LCBmaWx0ZXJTdHIsIHNob3dDaGlsZHJlbiwgc2hvdyk7XG4gICAgICAgICAgICAgICAgcnVuVGltZUl0ZW0uY2hpbGRyZW4gPSBydW5UaW1lSXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwID8gcnVuVGltZUl0ZW0uY2hpbGRyZW4gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1blRpbWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCB8fCBzaG93O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2hvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub3JtYWxpemVkU3RyKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHN0clxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXG4gICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SW5pdGlhbFNlbGVjdGlvbihub2RlczogVHJlZURhdGFSdW5UaW1lTW9kZWwpOiBBcnJheTxUcmVlSXRlbVJ1blRpbWVNb2RlbD4ge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb246IEFycmF5PFRyZWVJdGVtUnVuVGltZU1vZGVsPiA9IFtdO1xuICAgICAgICB0aGlzLnNjYW5TZWxlY3Rpb24obm9kZXMsIHNlbGVjdGlvbik7XG4gICAgICAgIHJldHVybiBzZWxlY3Rpb247XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzY2FuU2VsZWN0aW9uKG5vZGVzOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCwgc2VsZWN0aW9uOiBBcnJheTxUcmVlSXRlbVJ1blRpbWVNb2RlbD4pOiB2b2lkIHtcbiAgICAgICAgbm9kZXMuZm9yRWFjaCgoaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldFRyZWVJdGVtKGl0ZW0ucGF0aCkubm9kZT8uc2VsZWN0YWJsZSAmJiB0aGlzLmdldFRyZWVJdGVtKGl0ZW0ucGF0aCkubm9kZS5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYW5TZWxlY3Rpb24oaXRlbS5jaGlsZHJlbiwgc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJJbml0aWFsRXhwYW5kKG5vZGVzOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChpdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJJbml0aWFsRXhwYW5kKGl0ZW0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmdldFRyZWVJdGVtKGl0ZW0ucGF0aCkubm9kZS5pc0V4cGFuZGVkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuZ2V0VHJlZUl0ZW0oaXRlbS5wYXRoKS5ub2RlLmlzRXhwYW5kZWQgJiYgIXRoaXMuY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZChpdGVtKSl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kQXQoaXRlbS5wYXRoKTtcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZighdGhpcy5nZXRUcmVlSXRlbShpdGVtLnBhdGgpLm5vZGUuaXNFeHBhbmRlZCAmJiAgdGhpcy5jZGtUcmVlQ29udHJvbC5pc0V4cGFuZGVkKGl0ZW0pKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5jb2xsYXBzZShpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXhwYW5kTWF0Y2hlZChub2RlczogVHJlZURhdGFSdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgbm9kZXMuZm9yRWFjaCgoaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLm1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gdGhpcy5nZXRQYXJlbnRQYXRocyhpdGVtLnBhdGgpWzBdO1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJlbnRUcmVlSXRlbSA9IHRoaXMuZ2V0VHJlZUl0ZW0ocGFyZW50UGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFRyZWVJdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucGFyZW50VHJlZUl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucGFyZW50VHJlZUl0ZW0ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V4cGFuZGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLy8gIG5vZGUuaXNFeHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiaGVyZVwiLCBwYXJlbnRUcmVlSXRlbS5ub2RlLnRyZWVDb250ZW50QmxvY2subGFiZWwsIHBhcmVudFBhdGgsIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEF0KHBhcmVudFBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kTWF0Y2hlZChpdGVtLmNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSdW5UaW1lVHJlZUl0ZW0ocGF0aDogc3RyaW5nKTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwge1xuICAgICAgICByZXR1cm4gdGhpcy5maW5kUnVuVGltZVRyZWVJdGVtKHRoaXMudHJlZURhdGFSdW5UaW1lLCBwYXRoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRSdW5UaW1lVHJlZUl0ZW0odHJlZURhdGFSdW5UaW1lOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCwgcGF0aCk6IFRyZWVJdGVtUnVuVGltZU1vZGVsIHtcbiAgICAgICAgZm9yIChjb25zdCBydW5UaW1lSXRlbSBvZiB0cmVlRGF0YVJ1blRpbWUpIHtcbiAgICAgICAgICAgIGlmIChydW5UaW1lSXRlbS5wYXRoID09PSBwYXRoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1blRpbWVJdGVtO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChydW5UaW1lSXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZFJ1blRpbWVUcmVlSXRlbShydW5UaW1lSXRlbS5jaGlsZHJlbiwgcGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSdW5UaW1lQmFja3VwVHJlZUl0ZW0ocGF0aDogc3RyaW5nKTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwge1xuICAgICAgICBjb25zdCBpbmRleEFycjogQXJyYXk8bnVtYmVyPiA9IHRoaXMucmVzb2x2ZVBhdGgocGF0aCk7XG4gICAgICAgIGxldCBub2RlQXJyID0gdGhpcy50cmVlRGF0YVJ1blRpbWVCYWNrdXA7XG4gICAgICAgIGxldCBub2RlO1xuICAgICAgICBpZiAobm9kZUFyciAmJiBBcnJheS5pc0FycmF5KG5vZGVBcnIpKSB7XG4gICAgICAgICAgICBpbmRleEFycj8uZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlQXJyID0gbm9kZUFyciAmJiBub2RlQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlQXJyW3BhdGhJbmRleF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDc3NDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnZXVpLXRyZWUnLFxuICAgICAgICAgICAgdGhpcy5pc011bHRpc2VsZWN0ID8gJ2V1aS10cmVlLS1tdWx0aXNlbGVjdCcgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuX2lzTXVsdGlMZXZlbCA/ICdldWktdHJlZS0td2l0aC1jaGlsZHJlbicgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuc2hvd0xpbmVzID8gJ2V1aS10cmVlLS1zaG93LWxpbmVzJyA6ICcnLFxuICAgICAgICBdXG4gICAgICAgIC5qb2luKCcgJylcbiAgICAgICAgLnRyaW0oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrSWZNdWx0aUxldmVsKHRyZWU6IFRyZWVEYXRhTW9kZWwpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGlzTXVsdGlMZXZlbCA9IGZhbHNlO1xuICAgICAgICB0cmVlLmZvckVhY2goKGl0ZW06IFRyZWVJdGVtTW9kZWwpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID49IDApIHtcbiAgICAgICAgICAgICAgICBpc011bHRpTGV2ZWwgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGlzTXVsdGlMZXZlbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrSWZDdXJyZW50U2Nyb2xsYWJsZShzY3JvbGxlZDogQ2RrU2Nyb2xsYWJsZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gc2Nyb2xsZWQuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQgPT09IHRoaXMuY2RrU2Nyb2xsYWJsZVJlZi5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudDtcbiAgICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFJvdXRlck1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAgICAgRXVpSW5wdXRDaGVja2JveE1vZHVsZSxcbiAgICAgICAgQ2RrVHJlZU1vZHVsZSxcbiAgICAgICAgRXVpQnV0dG9uTW9kdWxlLFxuICAgICAgICBFdWlJY29uTW9kdWxlLFxuICAgICAgICBFdWlMYWJlbE1vZHVsZSxcbiAgICAgICAgRXVpQmFkZ2VNb2R1bGUsXG4gICAgICAgIEV1aUNoaXBNb2R1bGUsXG4gICAgICAgIEV1aURyb3Bkb3duTW9kdWxlLFxuICAgICAgICBTY3JvbGxpbmdNb2R1bGUsXG4gICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtFdWlUcmVlQ29tcG9uZW50XSxcbiAgICBleHBvcnRzOiBbRXVpVHJlZUNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIEV1aVRyZWVNb2R1bGUge31cbiIsIjxkaXYgY2xhc3M9XCJldWktdWwtcmVwIGV1aS10cmVlX193cmFwcGVyXCIgY2RrU2Nyb2xsYWJsZSAjY2RrU2Nyb2xsYWJsZVJlZj5cbiAgICA8Y2RrLXRyZWVcbiAgICAgICAgI3RyZWVDb21wb25lbnRJbnN0YW5jZVxuICAgICAgICBbZGF0YVNvdXJjZV09XCJjZGtBcnJheURhdGFTb3VyY2VcIlxuICAgICAgICBbdHJlZUNvbnRyb2xdPVwiY2RrVHJlZUNvbnRyb2xcIlxuICAgICAgICBbdHJhY2tCeV09XCJ0cmFja0J5XCJcbiAgICAgICAgKm5nSWY9XCJyZW5kZXJUcmVlXCJcbiAgICAgICAgY2xhc3M9XCJldWktY2RrLXRyZWVcIj5cbiAgICAgICAgPCEtLSBUaGVyZSBhcmUgdHdvIHN0YXRlcyBvZiBnZW5lcmljIGNkay1uZXN0ZWQtdHJlZS1ub2RlIGRlY2xhcmF0aW9ucy5cbiAgICAgICAgRmlyc3Qgb25lIGlzIHdpdGhvdXQgY2hpbGQuIE5vIHN1YiByZW5kZXJpbmcuXG4gICAgICAgIC0tPlxuICAgICAgICA8Y2RrLW5lc3RlZC10cmVlLW5vZGUgKmNka1RyZWVOb2RlRGVmPVwibGV0IHRyZWVSdW5UaW1lSXRlbU1vZGVsXCIgY2xhc3M9XCJldWktY2RrLW5lc3RlZC10cmVlLW5vZGVcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0cmVlUnVuVGltZUl0ZW1Nb2RlbFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktbGktcmVwIGV1aS10cmVlLW5vZGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktdHJlZS1ub2RlLS1maXJzdF09XCJ0cmVlUnVuVGltZUl0ZW1Nb2RlbD8ucGF0aCA9PT0gJzAnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLXRyZWUtbm9kZS0tbGFzdF09XCJ0cmVlUnVuVGltZUl0ZW1Nb2RlbC5sYXN0XCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7XG4gICAgICAgICAgICAgICAgICAgIGdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbU1vZGVsPy5wYXRoKT8ubm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udG9vbHRpcExhYmVsIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW1Nb2RlbD8ucGF0aCk/Lm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsXG4gICAgICAgICAgICAgICAgfX1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk5vZGVDbGljayh0cmVlUnVuVGltZUl0ZW1Nb2RlbClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tXG4gICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJzIG5vZGUgaW4gZGVmYXVsdCBvciBwcm92aWRlZCB0ZW1wbGF0ZSdzIGNvbnRleHQuXG4gICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZXMgb25TZWxlY3Qgd2l0aCBvblNlbGVjdEZuIGZvciBkZXZlbG9wZXJzIHRvIHNlbmQgdGhlIGV2ZW50cyBmcm9tIHRoZWlyIGN1c3RvbSBjaGVjayBldmVudHMuXG4gICAgICAgICAgICAgICAgICAgICAgICBQcm92aWRlcyBpZCB0byBiZSB1c2VkIG9uIGdlbmVyaWMgdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVUZW1wbGF0ZVJlZiB8fCBub2RlVGVtcGxhdGVEZWZhdWx0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbU1vZGVsPy5wYXRoKT8ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3Q6IG9uU2VsZWN0Rm4odHJlZVJ1blRpbWVJdGVtTW9kZWwucGF0aCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB1aWQgKyB0cmVlUnVuVGltZUl0ZW1Nb2RlbC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiB0cmVlUnVuVGltZUl0ZW1Nb2RlbC5wYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvY2RrLW5lc3RlZC10cmVlLW5vZGU+XG4gICAgICAgIDwhLS0gVGhpcyBpcyB0aGUgdHJlZSBub2RlIHRlbXBsYXRlIGZvciBleHBhbmRhYmxlIG5vZGVzIC0tPlxuICAgICAgICA8Y2RrLW5lc3RlZC10cmVlLW5vZGVcbiAgICAgICAgICAgICpjZGtUcmVlTm9kZURlZj1cImxldCB0cmVlUnVuVGltZUl0ZW1Nb2RlbDsgd2hlbjogaGFzQ2hpbGRcIlxuICAgICAgICAgICAgY2xhc3M9XCJldWktY2RrLW5lc3RlZC10cmVlLW5vZGUgZXVpLWNkay1uZXN0ZWQtdHJlZS1ub2RlLS13aXRoLWNoaWxkXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktbGktcmVwIGV1aS10cmVlLW5vZGUgZXVpLXRyZWUtbm9kZS0td2l0aC1jaGlsZFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS10cmVlLW5vZGUtLWZpcnN0XT1cInRyZWVSdW5UaW1lSXRlbU1vZGVsPy5wYXRoID09PSAnMCdcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktdHJlZS1ub2RlLS1sYXN0XT1cInRyZWVSdW5UaW1lSXRlbU1vZGVsLmxhc3RcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwidHJlZVJ1blRpbWVJdGVtTW9kZWxcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3tcbiAgICAgICAgICAgICAgICAgICAgZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy50b29sdGlwTGFiZWwgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbU1vZGVsPy5wYXRoKT8ubm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWxcbiAgICAgICAgICAgICAgICB9fVwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdHJlZS1ub2RlLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLUhlcmUgd3JhcHMgdGhlIG5vZGUsIGFuZCBsaXN0ZW4gZm9yIG5vZGUgY2xpY2tzLi0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJvbk5vZGVDbGljayh0cmVlUnVuVGltZUl0ZW1Nb2RlbClcIiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEV4cGFuZC9jb2xsYXBzZSBhY3Rpb24gYnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldWlCYXNpY0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aVJvdW5kZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldWlTaXplU1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1RvZ2dsZSAnICsgZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTm9kZVRvZ2dsZSh0cmVlUnVuVGltZUl0ZW1Nb2RlbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNka1RyZWVOb2RlVG9nZ2xlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdHJlZS1ub2RlX19idXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZVJ1blRpbWVJdGVtTW9kZWwpICYmICFjb2xsYXBzZWRJY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJleHBhbmRlZFN2Z0ljb25DbGFzc1wiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjZGtUcmVlQ29udHJvbC5pc0V4cGFuZGVkKHRyZWVSdW5UaW1lSXRlbU1vZGVsKSAmJiAhZXhwYW5kZWRJY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJjb2xsYXBzZWRTdmdJY29uQ2xhc3NcIj48L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVxuICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVycyBub2RlIGluIGRlZmF1bHQgb3IgcHJvdmlkZWQgdGVtcGxhdGUncyBjb250ZXh0LlxuICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVzIG9uU2VsZWN0IHdpdGggb25TZWxlY3RGbiBmb3IgZGV2ZWxvcGVycyB0byBzZW5kIHRoZSBldmVudHMgZnJvbSB0aGVpciBjdXN0b20gY2hlY2sgZXZlbnRzLlxuICAgICAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXMgaWQgdG8gYmUgdXNlZCBvbiBnZW5lcmljIHRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlVGVtcGxhdGVSZWYgfHwgbm9kZVRlbXBsYXRlRGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBnZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW1Nb2RlbC5wYXRoKT8ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3Q6IG9uU2VsZWN0Rm4odHJlZVJ1blRpbWVJdGVtTW9kZWwucGF0aCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB1aWQgKyB0cmVlUnVuVGltZUl0ZW1Nb2RlbC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiB0cmVlUnVuVGltZUl0ZW1Nb2RlbC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5jaGlsZHJlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tdXNlcyBjZGtUcmVlTm9kZU91dGxldCB0byByZW5kZXIgY2hpbGRyZW4gbm9kZXMsIENka1RyZWVDb250cm9sIGlzIHVzZWQgdG8gY29udHJvbCBpc0V4cGFuZGVkIHN0YXRlLi0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktdWwtcmVwIGV1aS10cmVlLW5vZGVcIiByb2xlPVwiZ3JvdXBcIiAqbmdJZj1cImNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZVJ1blRpbWVJdGVtTW9kZWwpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgY2RrVHJlZU5vZGVPdXRsZXQ+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9jZGstbmVzdGVkLXRyZWUtbm9kZT5cbiAgICA8L2Nkay10cmVlPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbm9kZVRlbXBsYXRlRGVmYXVsdCBsZXQtbm9kZSBsZXQtb25TZWxlY3Q9XCJvblNlbGVjdFwiIGxldC1pZD1cImlkXCIgbGV0LXBhdGg9XCJwYXRoXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyLWxlZnRcIiBbY2xhc3MuZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXItbGVmdC0tc2VsZWN0ZWRdPVwibm9kZT8uaXNTZWxlY3RlZFwiPlxuICAgICAgICAgICAgPCEtLWlucHV0IGNoZWNrYm94IGFyZWEtLT5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGV1aUlucHV0Q2hlY2tCb3hcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm5vZGUgJiYgbm9kZS5zZWxlY3RhYmxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGlkPVwie3sgaWQgfX1cIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIiEhbm9kZT8uaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiISFub2RlPy5pc0luZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS1tci1tXCIgLz5cblxuICAgICAgICAgICAgPCEtLWljb24gYXJlYS0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lmljb25TdmdOYW1lXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICBpY29uPVwie3sgbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8uaWNvblN2Z05hbWUgfX1cIlxuICAgICAgICAgICAgICAgICAgICBmaWxsQ29sb3I9XCJ7eyBub2RlPy50cmVlQ29udGVudEJsb2NrPy5pY29uVHlwZUNsYXNzIHx8ICduZXV0cmFsJyB9fVwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS1tci14c1wiPlxuICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1jaGlwcyBhcmVhLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8uY2hpcHNcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWNoaXBcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNoaXAgb2Ygbm9kZS50cmVlQ29udGVudEJsb2NrLmNoaXBzXCJcbiAgICAgICAgICAgICAgICAgICAgZXVpU2l6ZVNcbiAgICAgICAgICAgICAgICAgICAgW2V1aVZhcmlhbnRdPVwiY2hpcC50eXBlQ2xhc3MgfHwgJ3NlY29uZGFyeSdcIlxuICAgICAgICAgICAgICAgICAgICBbZXVpT3V0bGluZV09XCJjaGlwLmlzT3V0bGluZVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLWNoaXAtLXJvdW5kZWQgZXVpLXUtbWItbm9uZSBldWktdS1tci14c1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBldWlMYWJlbD57eyBjaGlwLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZXVpLWNoaXA+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLWJhZGdlICh0eXBlTGFiZWwgJiB0eXBlQ2xhc3MpIGFyZWEtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy50eXBlTGFiZWxcIiBbbmdTd2l0Y2hdPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udHlwZUNsYXNzXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1iYWRnZSBldWlTaXplTSBbZXVpVmFyaWFudF09XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy50eXBlQ2xhc3MgfHwgJ3ByaW1hcnknXCIgY2xhc3M9XCJldWktdS1mbGV4LW5vLXNocmluayBldWktdS1tci14c1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyBub2RlPy50cmVlQ29udGVudEJsb2NrPy50eXBlTGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2V1aS1iYWRnZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tbGFiZWwgYXJlYS0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXItbWlkZGxlXCI+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFub2RlPy50cmVlQ29udGVudEJsb2NrPy51cmwgJiYgIW5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybEV4dGVybmFsXCJcbiAgICAgICAgICAgICAgICBldWlMYWJlbFxuICAgICAgICAgICAgICAgIGZvcj1cInt7IGlkIH19XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS11LXRleHQtdHJ1bmNhdGUgZXVpLXUtcC0yeHNcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktbGFiZWwtLXNlbGVjdGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRQYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGdldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShwYXRoKT8uc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPT09ICdpbmRldGVybWluYXRlJyB8fCBub2RlPy5pc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG5vZGU/LmlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktdS1jdXJzb3ItcG9pbnRlcl09XCJub2RlPy5zZWxlY3RhYmxlXCI+XG4gICAgICAgICAgICAgICAge3sgYXV0b1RyYW5zbGF0ZSA/IChub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbCB8IHRyYW5zbGF0ZSkgOiBub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbCB9fVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybFwiIGV1aUxhYmVsIGZvcj1cInt7IGlkIH19XCIgY2xhc3M9XCJldWktdS10ZXh0LXRydW5jYXRlIGV1aS11LXAtMnhzXCI+XG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS10ZXh0LWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLXUtdGV4dC1saW5rLXN0YW5kYWxvbmVdPVwiIXNob3dVbmRlcmxpbmVkTGlua3NcIlxuICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy51cmxcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgYXV0b1RyYW5zbGF0ZSA/IChub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbCB8IHRyYW5zbGF0ZSkgOiBub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy51cmxFeHRlcm5hbFwiIGV1aUxhYmVsIGZvcj1cInt7IGlkIH19XCIgY2xhc3M9XCJldWktdS10ZXh0LXRydW5jYXRlIGV1aS11LXAtMnhzXCI+XG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS10ZXh0LWxpbmstZXh0ZXJuYWxcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLXUtdGV4dC1saW5rLWV4dGVybmFsLXN0YW5kYWxvbmVdPVwiIXNob3dVbmRlcmxpbmVkTGlua3NcIlxuICAgICAgICAgICAgICAgICAgICBocmVmPVwie3sgbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsRXh0ZXJuYWwgfX1cIlxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJ7eyBub2RlPy50cmVlQ29udGVudEJsb2NrPy51cmxFeHRlcm5hbFRhcmdldCB8fCAnYmxhbmsnIH19XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGF1dG9UcmFuc2xhdGUgPyAobm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWwgfCB0cmFuc2xhdGUpIDogbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ucmlnaHRDb250ZW50XCIgY2xhc3M9XCJldWktdHJlZS1ub2RlLXdyYXBwZXJfX2NvbnRhaW5lci1yaWdodFwiPlxuICAgICAgICAgICAgPCEtLWJhZGdlcyBhcmVhLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBiYWRnZSBvZiBub2RlLnRyZWVDb250ZW50QmxvY2sucmlnaHRDb250ZW50Py5iYWRnZXNcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWJhZGdlIGV1aU91dGxpbmUgW2V1aVZhcmlhbnRdPVwiYmFkZ2UudHlwZUNsYXNzIHx8ICdzZWNvbmRhcnknXCIgY2xhc3M9XCJldWktdS1tbC14c1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBldWlMYWJlbD57eyBiYWRnZS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2V1aS1iYWRnZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tY2hpcHMgYXJlYS0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2hpcCBvZiBub2RlLnRyZWVDb250ZW50QmxvY2sucmlnaHRDb250ZW50Py5jaGlwc1wiPlxuICAgICAgICAgICAgICAgIDxldWktY2hpcFxuICAgICAgICAgICAgICAgICAgICBldWlTaXplU1xuICAgICAgICAgICAgICAgICAgICBbZXVpVmFyaWFudF09XCJjaGlwLnR5cGVDbGFzcyB8fCAnc2Vjb25kYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgIFtldWlPdXRsaW5lXT1cImNoaXAuaXNPdXRsaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktY2hpcC0tcm91bmRlZCBldWktdS1tYi1ub25lIGV1aS11LW1sLXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGV1aUxhYmVsPnt7IGNoaXAubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9ldWktY2hpcD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tQ29udGV4dCBtZW51LS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZS50cmVlQ29udGVudEJsb2NrLnJpZ2h0Q29udGVudD8uY29udGV4dE1lbnVNZXRhRGF0YSAmJiByaWdodENvbnRleHRNZW51VGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWRyb3Bkb3duIGNsYXNzPVwiZXVpLXUtbWwteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBldWlCdXR0b24gZXVpU2l6ZVMgZXVpUm91bmRlZCBldWlJY29uQnV0dG9uIGV1aUJhc2ljQnV0dG9uIGV1aVNlY29uZGFyeSBbYXR0ci5hcmlhLWxhYmVsXT1cIidPcHRpb25zIG1lbnUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnIGljb249XCJlbGxpcHNpcy12ZXJ0aWNhbDpzaGFycFwiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGV1aS1kcm9wZG93bi1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicmlnaHRDb250ZXh0TWVudVRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnJpZ2h0Q29udGVudD8uY29udGV4dE1lbnVNZXRhRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnJpZ2h0Q29udGVudD8uY29udGV4dE1lbnVNZXRhRGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZXVpLWRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9ldWktZHJvcGRvd24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLW1ldGFkYXRhLCB1c2VzIHRoZSBoZWxwIG9mIG5nIHRlbXBsYXRlIHRvIGdlbmVyYXRlIGR5bmFtaWMgZXhwYW5kIHZhcmlhYmxlIHdpdGhvdXQgaGFuZGxpbmcgc3RhdGUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwibm9kZS50cmVlQ29udGVudEJsb2NrPy5tZXRhZGF0YSAmJiBub2RlQ29udGVudE1ldGFkYXRhVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZUNvbnRlbnRNZXRhZGF0YUNvbnRhaW5lclwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICRpbXBsaWNpdDogeyBleHBhbmRlZDogZmFsc2UgfVxuICAgICAgICAgICAgfVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub2RlQ29udGVudE1ldGFkYXRhQ29udGFpbmVyIGxldC1tZXRhRGF0YUNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBldWlCdXR0b25cbiAgICAgICAgICAgICAgICBldWlCYXNpY0J1dHRvblxuICAgICAgICAgICAgICAgIGV1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICBldWlSb3VuZGVkXG4gICAgICAgICAgICAgICAgZXVpU2l6ZVNcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiZXhwYW5kIGNvbGxhcHNlIHRyZWUgaXRlbVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1ldGFEYXRhQ29udGFpbmVyLmV4cGFuZGVkID0gIW1ldGFEYXRhQ29udGFpbmVyLmV4cGFuZGVkXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2ZyBbaWNvbl09XCJtZXRhRGF0YUNvbnRhaW5lci5leHBhbmRlZCA/ICdjaGV2cm9uLWRvd246c2hhcnAnIDogJ2NoZXZyb24tZm9yd2FyZDpzaGFycCdcIj48L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1ldGFEYXRhQ29udGFpbmVyLmV4cGFuZGVkXCIgY2xhc3M9XCJldWktdHJlZS1ub2RlX19tZXRhY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDwhLS1wYXNzaW5nIG1ldGFkYXRhIG9mIHRoZSBub2RlIGNvbnRlbnQgdG8gcHJvdmlkZWQgdGVtcGxhdGUtcmVmOm5vZGVDb250ZW50TWV0YWRhdGFUZW1wbGF0ZVJlZi0tPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlQ29udGVudE1ldGFkYXRhVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBub2RlPy50cmVlQ29udGVudEJsb2NrPy5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBub2RlPy50cmVlQ29udGVudEJsb2NrPy5tZXRhZGF0YVxuICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|