@rivet-health/design-system 10.1.2 → 10.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/visualization/chart/chart.component.mjs +8 -11
- package/esm2020/lib/visualization/chart/chart.mjs +3 -52
- package/fesm2015/rivet-health-design-system.mjs +8 -59
- package/fesm2015/rivet-health-design-system.mjs.map +1 -1
- package/fesm2020/rivet-health-design-system.mjs +9 -60
- package/fesm2020/rivet-health-design-system.mjs.map +1 -1
- package/lib/visualization/chart/chart.component.d.ts +10 -11
- package/lib/visualization/chart/chart.d.ts +14 -12
- package/package.json +1 -1
|
@@ -41,19 +41,17 @@ export class ChartComponent {
|
|
|
41
41
|
hidden: toggledLegends[y.label] ? !y.hidden : y.hidden,
|
|
42
42
|
})),
|
|
43
43
|
};
|
|
44
|
-
const { ranges, data: binnedData } = Chart.binTimeseriesData(hiddenData, config.timeSeries.interval, config.timeSeries.reducer);
|
|
45
44
|
const viewBox = `0 0 ${width} ${this.HEIGHT}`;
|
|
46
45
|
return {
|
|
47
46
|
viewBox,
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
...Chart.chart(config, binnedData, {
|
|
47
|
+
data: hiddenData,
|
|
48
|
+
...Chart.chart(config, hiddenData, {
|
|
51
49
|
width: width,
|
|
52
50
|
height: this.HEIGHT,
|
|
53
51
|
}),
|
|
54
52
|
};
|
|
55
53
|
}));
|
|
56
|
-
this.empty$ = this.data$.pipe(map(d => d.x.length == 0
|
|
54
|
+
this.empty$ = this.data$.pipe(map(d => d.x.length == 0 || d.ys.length == 0));
|
|
57
55
|
this.hover = null;
|
|
58
56
|
this.chartClicked = new EventEmitter();
|
|
59
57
|
}
|
|
@@ -93,11 +91,10 @@ export class ChartComponent {
|
|
|
93
91
|
mouseleave($event) {
|
|
94
92
|
this.hover = null;
|
|
95
93
|
}
|
|
96
|
-
click(
|
|
94
|
+
click() {
|
|
97
95
|
if (this.hover) {
|
|
98
96
|
this.chartClicked.emit({
|
|
99
|
-
|
|
100
|
-
maxXIndex: ranges[this.hover.xIndex].max,
|
|
97
|
+
xIndex: this.hover.xIndex,
|
|
101
98
|
yIndex: this.hover.yIndex,
|
|
102
99
|
});
|
|
103
100
|
this.hover = null;
|
|
@@ -108,10 +105,10 @@ export class ChartComponent {
|
|
|
108
105
|
}
|
|
109
106
|
}
|
|
110
107
|
ChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
111
|
-
ChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ChartComponent, selector: "riv-chart", inputs: { config: "config", data: "data" }, outputs: { chartClicked: "chartClicked" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<div\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n *ngIf=\"!(empty$ | async); else zeroState\"\n>\n <ng-container *ngIf=\"drawData$ | async; let d\">\n <div\n (mousemove)=\"mousemove($event, d.hover)\"\n (mouseleave)=\"mouseleave($event)\"\n (click)=\"click(
|
|
108
|
+
ChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ChartComponent, selector: "riv-chart", inputs: { config: "config", data: "data" }, outputs: { chartClicked: "chartClicked" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<div\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n *ngIf=\"!(empty$ | async); else zeroState\"\n>\n <ng-container *ngIf=\"drawData$ | async; let d\">\n <div\n (mousemove)=\"mousemove($event, d.hover)\"\n (mouseleave)=\"mouseleave($event)\"\n (click)=\"click()\"\n #container\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.viewBox]=\"d.viewBox\">\n <g *ngFor=\"let tick of d.xTicks\" text-anchor=\"middle\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"tick.x\"\n [attr.x2]=\"tick.x\"\n y1=\"0\"\n [attr.y2]=\"HEIGHT - 16\"\n ></line>\n <text class=\"tick-label\" [attr.x]=\"tick.x\" [attr.y]=\"HEIGHT - 4\">\n {{ tick.label }}\n </text>\n </g>\n <g *ngFor=\"let tick of d.yTicks\">\n <line\n class=\"tick-line\"\n [attr.y1]=\"tick.y\"\n [attr.y2]=\"tick.y\"\n x1=\"0\"\n [attr.x2]=\"width\"\n ></line>\n <text class=\"tick-label\" [attr.y]=\"tick.y - 4\" [attr.x]=\"0\">\n {{ tick.label }}\n </text>\n </g>\n <g *ngIf=\"hover != null\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"hover.x\"\n [attr.x2]=\"hover.x\"\n y1=\"0\"\n [attr.y2]=\"HEIGHT - 16\"\n stroke-width=\"2\"\n stroke-dasharray=\"4\"\n />\n </g>\n <g *ngFor=\"let bar of d.bars; let i = index\">\n <rect\n *ngFor=\"let rect of bar\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"varColor(d.colors, i)\"\n ></rect>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <path\n [attr.d]=\"line\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n fill=\"none\"\n stroke-width=\"2\"\n ></path>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n hover != null &&\n (config.groupedTooltip || i == hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <path [attr.d]=\"area\" [attr.fill]=\"varColor(d.colors, i)\"></path>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n hover != null &&\n (config.groupedTooltip || i == hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n </svg>\n <ng-container *ngIf=\"hover != null\">\n <riv-callout\n [anchor]=\"hover.tooltip.anchor\"\n [isModal]=\"false\"\n [preferredPosition]=\"'center-right'\"\n [theme]=\"'light'\"\n >\n <div class=\"callout-content\">\n <div\n class=\"callout-row\"\n *ngFor=\"let metric of hover.tooltip.metrics\"\n >\n <span class=\"series-label\">\n <riv-legend-item [colorToken]=\"metric.color\"></riv-legend-item>\n <span>{{ metric.label }}</span>\n </span>\n <span>{{ metric.value }}</span>\n </div>\n </div>\n </riv-callout>\n </ng-container>\n </div>\n <legend>\n <riv-legend-item\n *ngFor=\"let item of d.data.ys; let i = index\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </legend>\n </ng-container>\n</div>\n\n<ng-template #zeroState>\n <riv-zero-state [message]=\"config.zeroStateMessage\"></riv-zero-state>\n</ng-template>\n", styles: [".container{-webkit-user-select:none;user-select:none;position:relative;display:flex;flex-direction:column;gap:var(--size-small)}.tick-line{stroke:var(--gray-20)}.tick-label{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);fill:var(--type-light-low-contrast)}.marker{fill:var(--surface-light-0)}.callout-content{pointer-events:none;padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column}.callout-row{display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);&:not(:last-child){border-bottom:var(--border-width) solid var(--border-light)}}.series-label{flex-grow:1;font-weight:var(--font-weight-heavy);display:flex;align-items:center;gap:var(--size-small)}legend{display:flex;flex-wrap:wrap;gap:var(--size-large);justify-content:flex-start;align-items:baseline}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: i3.LegendItemComponent, selector: "riv-legend-item", inputs: ["label", "colorToken", "style", "visibility", "iconTooltip", "clickable", "showCheckWhenClickable"], outputs: ["itemClick"] }, { kind: "directive", type: i4.SizeDirective, selector: "[rivClientSize]", outputs: ["rivClientSize"] }, { kind: "component", type: i5.ZeroStateComponent, selector: "riv-zero-state", inputs: ["message"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
112
109
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ChartComponent, decorators: [{
|
|
113
110
|
type: Component,
|
|
114
|
-
args: [{ selector: 'riv-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n *ngIf=\"!(empty$ | async); else zeroState\"\n>\n <ng-container *ngIf=\"drawData$ | async; let d\">\n <div\n (mousemove)=\"mousemove($event, d.hover)\"\n (mouseleave)=\"mouseleave($event)\"\n (click)=\"click(
|
|
111
|
+
args: [{ selector: 'riv-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n *ngIf=\"!(empty$ | async); else zeroState\"\n>\n <ng-container *ngIf=\"drawData$ | async; let d\">\n <div\n (mousemove)=\"mousemove($event, d.hover)\"\n (mouseleave)=\"mouseleave($event)\"\n (click)=\"click()\"\n #container\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.viewBox]=\"d.viewBox\">\n <g *ngFor=\"let tick of d.xTicks\" text-anchor=\"middle\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"tick.x\"\n [attr.x2]=\"tick.x\"\n y1=\"0\"\n [attr.y2]=\"HEIGHT - 16\"\n ></line>\n <text class=\"tick-label\" [attr.x]=\"tick.x\" [attr.y]=\"HEIGHT - 4\">\n {{ tick.label }}\n </text>\n </g>\n <g *ngFor=\"let tick of d.yTicks\">\n <line\n class=\"tick-line\"\n [attr.y1]=\"tick.y\"\n [attr.y2]=\"tick.y\"\n x1=\"0\"\n [attr.x2]=\"width\"\n ></line>\n <text class=\"tick-label\" [attr.y]=\"tick.y - 4\" [attr.x]=\"0\">\n {{ tick.label }}\n </text>\n </g>\n <g *ngIf=\"hover != null\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"hover.x\"\n [attr.x2]=\"hover.x\"\n y1=\"0\"\n [attr.y2]=\"HEIGHT - 16\"\n stroke-width=\"2\"\n stroke-dasharray=\"4\"\n />\n </g>\n <g *ngFor=\"let bar of d.bars; let i = index\">\n <rect\n *ngFor=\"let rect of bar\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"varColor(d.colors, i)\"\n ></rect>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <path\n [attr.d]=\"line\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n fill=\"none\"\n stroke-width=\"2\"\n ></path>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n hover != null &&\n (config.groupedTooltip || i == hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <path [attr.d]=\"area\" [attr.fill]=\"varColor(d.colors, i)\"></path>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n hover != null &&\n (config.groupedTooltip || i == hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n </svg>\n <ng-container *ngIf=\"hover != null\">\n <riv-callout\n [anchor]=\"hover.tooltip.anchor\"\n [isModal]=\"false\"\n [preferredPosition]=\"'center-right'\"\n [theme]=\"'light'\"\n >\n <div class=\"callout-content\">\n <div\n class=\"callout-row\"\n *ngFor=\"let metric of hover.tooltip.metrics\"\n >\n <span class=\"series-label\">\n <riv-legend-item [colorToken]=\"metric.color\"></riv-legend-item>\n <span>{{ metric.label }}</span>\n </span>\n <span>{{ metric.value }}</span>\n </div>\n </div>\n </riv-callout>\n </ng-container>\n </div>\n <legend>\n <riv-legend-item\n *ngFor=\"let item of d.data.ys; let i = index\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </legend>\n </ng-container>\n</div>\n\n<ng-template #zeroState>\n <riv-zero-state [message]=\"config.zeroStateMessage\"></riv-zero-state>\n</ng-template>\n", styles: [".container{-webkit-user-select:none;user-select:none;position:relative;display:flex;flex-direction:column;gap:var(--size-small)}.tick-line{stroke:var(--gray-20)}.tick-label{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);fill:var(--type-light-low-contrast)}.marker{fill:var(--surface-light-0)}.callout-content{pointer-events:none;padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column}.callout-row{display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);&:not(:last-child){border-bottom:var(--border-width) solid var(--border-light)}}.series-label{flex-grow:1;font-weight:var(--font-weight-heavy);display:flex;align-items:center;gap:var(--size-small)}legend{display:flex;flex-wrap:wrap;gap:var(--size-large);justify-content:flex-start;align-items:baseline}\n"] }]
|
|
115
112
|
}], propDecorators: { container: [{
|
|
116
113
|
type: ViewChild,
|
|
117
114
|
args: ['container']
|
|
@@ -122,4 +119,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
122
119
|
}], chartClicked: [{
|
|
123
120
|
type: Output
|
|
124
121
|
}] } });
|
|
125
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdmlzdWFsaXphdGlvbi9jaGFydC9jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL2NoYXJ0L2NoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsSUFBSSxFQUNKLFNBQVMsRUFDVCxPQUFPLEdBQ1IsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDOzs7Ozs7O0FBUWhDLE1BQU0sT0FBTyxjQUFjO0lBTjNCO1FBU0UsV0FBTSxHQUFHLEdBQUcsQ0FBQztRQUViLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQVFoQyxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQWUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBU2pFLFVBQUssR0FBRyxJQUFJLGVBQWUsQ0FBYTtZQUN0QyxDQUFDLEVBQUUsRUFBRTtZQUNMLEVBQUUsRUFBRSxFQUFFO1NBQ1AsQ0FBQyxDQUFDO1FBYUgsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBRXRDLDBDQUEwQztRQUMxQyw4Q0FBOEM7UUFDOUMsK0NBQStDO1FBQy9DLGdEQUFnRDtRQUNoRCxnQkFBZ0I7UUFDaEIsb0JBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDdkMsSUFBSSxDQUNGLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUNsRCxFQUFFLENBQ0gsRUFDRCxTQUFTLENBQTBCLEVBQUUsQ0FBQyxDQUN2QyxDQUFDO1FBRUYsY0FBUyxHQUFHLGFBQWEsQ0FBQztZQUN4QixJQUFJLENBQUMsTUFBTTtZQUNYLElBQUksQ0FBQyxPQUFPO1lBQ1osSUFBSSxDQUFDLEtBQUs7WUFDVixJQUFJLENBQUMsZUFBZTtTQUNyQixDQUFDLENBQUMsSUFBSSxDQUNMLG9CQUFvQixDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUMvRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxFQUFFLEVBQUU7WUFDNUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO2dCQUNkLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxNQUFNLFVBQVUsR0FBRztnQkFDakIsR0FBRyxJQUFJO2dCQUNQLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3BCLEdBQUcsQ0FBQztvQkFDSixzQ0FBc0M7b0JBQ3RDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO2lCQUN2RCxDQUFDLENBQUM7YUFDSixDQUFDO1lBQ0YsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUMxRCxVQUFVLEVBQ1YsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQzFCLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUMxQixDQUFDO1lBQ0YsTUFBTSxPQUFPLEdBQUcsT0FBTyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzlDLE9BQU87Z0JBQ0wsT0FBTztnQkFDUCxNQUFNO2dCQUNOLElBQUksRUFBRSxVQUFVO2dCQUNoQixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRTtvQkFDakMsS0FBSyxFQUFFLEtBQUs7b0JBQ1osTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2lCQUNwQixDQUFDO2FBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixXQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFeEUsVUFBSyxHQUFtQyxJQUFJLENBQUM7UUFvQjdDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBSTNCLENBQUM7S0FnQk47SUE5SEMsSUFBSSxLQUFLLENBQUMsQ0FBUztRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBR0QsSUFDSSxNQUFNLENBQUMsQ0FBZTtRQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBTUQsSUFDSSxJQUFJLENBQUMsQ0FBYTtRQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQWE7UUFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQTBERCxTQUFTLENBQUMsTUFBa0IsRUFBRSxLQUFrQjtRQUM5QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQTRCLENBQUM7UUFDakUsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFO1lBQ3ZCLE9BQU87U0FDUjtRQUNELE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ2pCLElBQUk7WUFDSixDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSTtZQUM3QixDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRztTQUM3QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQWtCO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ3BCLENBQUM7SUFTRCxLQUFLLENBQUMsTUFBc0M7UUFDMUMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHO2dCQUN4QyxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRztnQkFDeEMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTthQUMxQixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNuQjtJQUNILENBQUM7SUFFRCxRQUFRLENBQUMsTUFBZ0IsRUFBRSxLQUFhO1FBQ3RDLE9BQU8sT0FBTyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2pELENBQUM7OzJHQW5JVSxjQUFjOytGQUFkLGNBQWMsZ1BDM0IzQix1NklBd0lBOzJGRDdHYSxjQUFjO2tCQU4xQixTQUFTOytCQUNFLFdBQVcsbUJBR0osdUJBQXVCLENBQUMsTUFBTTs4QkFHdkIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQWNsQixNQUFNO3NCQURULEtBQUs7Z0JBYUYsSUFBSTtzQkFEUCxLQUFLO2dCQXNGTixZQUFZO3NCQURYLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIG1hcCxcbiAgc2NhbixcbiAgc3RhcnRXaXRoLFxuICBTdWJqZWN0LFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENoYXJ0IH0gZnJvbSAnLi9jaGFydCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jpdi1jaGFydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGFydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoYXJ0LmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENoYXJ0Q29tcG9uZW50IHtcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyPzogRWxlbWVudFJlZjtcblxuICBIRUlHSFQgPSAzMDA7XG5cbiAgd2lkdGgkID0gbmV3IEJlaGF2aW9yU3ViamVjdCgwKTtcbiAgc2V0IHdpZHRoKHc6IG51bWJlcikge1xuICAgIHRoaXMud2lkdGgkLm5leHQodyk7XG4gIH1cbiAgZ2V0IHdpZHRoKCkge1xuICAgIHJldHVybiB0aGlzLndpZHRoJC52YWx1ZTtcbiAgfVxuXG4gIGNvbmZpZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENoYXJ0LkNvbmZpZz4oQ2hhcnQuZGVmYXVsdENvbmZpZyk7XG4gIEBJbnB1dCgpXG4gIHNldCBjb25maWcoYzogQ2hhcnQuQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWckLm5leHQoYyk7XG4gIH1cbiAgZ2V0IGNvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWckLnZhbHVlO1xuICB9XG5cbiAgZGF0YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENoYXJ0LkRhdGE+KHtcbiAgICB4OiBbXSxcbiAgICB5czogW10sXG4gIH0pO1xuICBASW5wdXQoKVxuICBzZXQgZGF0YShkOiBDaGFydC5EYXRhKSB7XG4gICAgdGhpcy5kYXRhJC5uZXh0KGQpO1xuICB9XG4gIGdldCBkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEkLnZhbHVlO1xuICB9XG5cbiAgdG9nZ2xlTGVnZW5kKGxhYmVsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRvZ2dsZUxlZ2VuZCQubmV4dChsYWJlbCk7XG4gIH1cblxuICB0b2dnbGVMZWdlbmQkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIC8vIHRvZ2dsZWRMZWdlbmQkIGlzIGp1c3QgYSBzZXQgb2YgYm9vbGVhblxuICAvLyB2YWx1ZXMgZm9yIHdoaWNoIGxlZ2VuZHMgaGF2ZSBiZWVuIHRvZ2dsZWQuXG4gIC8vIFdlIGRvbid0IGtub3cgaWYgdGhvc2UgbGVnZW5kcyB3aGVyZSBhbHJlYWR5XG4gIC8vIGhpZGRlbiBvciBub3QsIHdlIGp1c3Qga25vdyB3aGV0aGVyIHRoZXkgaGF2ZVxuICAvLyBiZWVuIHRvZ2dsZWQuXG4gIHRvZ2dsZWRMZWdlbmRzJCA9IHRoaXMudG9nZ2xlTGVnZW5kJC5waXBlKFxuICAgIHNjYW48c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oXG4gICAgICAoYWNjLCB2YWx1ZSkgPT4gKHsgLi4uYWNjLCBbdmFsdWVdOiAhYWNjW3ZhbHVlXSB9KSxcbiAgICAgIHt9LFxuICAgICksXG4gICAgc3RhcnRXaXRoPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+Pih7fSksXG4gICk7XG5cbiAgZHJhd0RhdGEkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy53aWR0aCQsXG4gICAgdGhpcy5jb25maWckLFxuICAgIHRoaXMuZGF0YSQsXG4gICAgdGhpcy50b2dnbGVkTGVnZW5kcyQsXG4gIF0pLnBpcGUoXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnJlbnQpID0+IGlzRXF1YWwocHJldiwgY3VycmVudCkpLFxuICAgIG1hcCgoW3dpZHRoLCBjb25maWcsIGRhdGEsIHRvZ2dsZWRMZWdlbmRzXSkgPT4ge1xuICAgICAgaWYgKHdpZHRoID09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBoaWRkZW5EYXRhID0ge1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICB5czogZGF0YS55cy5tYXAoeSA9PiAoe1xuICAgICAgICAgIC4uLnksXG4gICAgICAgICAgLy8gaWYgdG9nZ2xlZCwgZmxpcCB0aGUgaGlkZGVuIGJvb2xlYW5cbiAgICAgICAgICBoaWRkZW46IHRvZ2dsZWRMZWdlbmRzW3kubGFiZWxdID8gIXkuaGlkZGVuIDogeS5oaWRkZW4sXG4gICAgICAgIH0pKSxcbiAgICAgIH07XG4gICAgICBjb25zdCB7IHJhbmdlcywgZGF0YTogYmlubmVkRGF0YSB9ID0gQ2hhcnQuYmluVGltZXNlcmllc0RhdGEoXG4gICAgICAgIGhpZGRlbkRhdGEsXG4gICAgICAgIGNvbmZpZy50aW1lU2VyaWVzLmludGVydmFsLFxuICAgICAgICBjb25maWcudGltZVNlcmllcy5yZWR1Y2VyLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHZpZXdCb3ggPSBgMCAwICR7d2lkdGh9ICR7dGhpcy5IRUlHSFR9YDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZpZXdCb3gsXG4gICAgICAgIHJhbmdlcyxcbiAgICAgICAgZGF0YTogYmlubmVkRGF0YSxcbiAgICAgICAgLi4uQ2hhcnQuY2hhcnQoY29uZmlnLCBiaW5uZWREYXRhLCB7XG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIGhlaWdodDogdGhpcy5IRUlHSFQsXG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICB9KSxcbiAgKTtcblxuICBlbXB0eSQgPSB0aGlzLmRhdGEkLnBpcGUobWFwKGQgPT4gZC54Lmxlbmd0aCA9PSAwICYmIGQueXMubGVuZ3RoID09IDApKTtcblxuICBob3ZlcjogUmV0dXJuVHlwZTxDaGFydC5Ib3Zlcj4gfCBudWxsID0gbnVsbDtcblxuICBtb3VzZW1vdmUoJGV2ZW50OiBNb3VzZUV2ZW50LCBob3ZlcjogQ2hhcnQuSG92ZXIpIHtcbiAgICBjb25zdCBjb250YWluZXJFbCA9IHRoaXMuY29udGFpbmVyPy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmIChjb250YWluZXJFbCA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlY3QgPSBjb250YWluZXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB0aGlzLmhvdmVyID0gaG92ZXIoe1xuICAgICAgcmVjdCxcbiAgICAgIHg6ICRldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0LFxuICAgICAgeTogJGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcCxcbiAgICB9KTtcbiAgfVxuXG4gIG1vdXNlbGVhdmUoJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5ob3ZlciA9IG51bGw7XG4gIH1cblxuICBAT3V0cHV0KClcbiAgY2hhcnRDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgbWluWEluZGV4OiBudW1iZXI7XG4gICAgbWF4WEluZGV4OiBudW1iZXI7XG4gICAgeUluZGV4OiBudW1iZXI7XG4gIH0+KCk7XG5cbiAgY2xpY2socmFuZ2VzOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9W10pIHtcbiAgICBpZiAodGhpcy5ob3Zlcikge1xuICAgICAgdGhpcy5jaGFydENsaWNrZWQuZW1pdCh7XG4gICAgICAgIG1pblhJbmRleDogcmFuZ2VzW3RoaXMuaG92ZXIueEluZGV4XS5taW4sXG4gICAgICAgIG1heFhJbmRleDogcmFuZ2VzW3RoaXMuaG92ZXIueEluZGV4XS5tYXgsXG4gICAgICAgIHlJbmRleDogdGhpcy5ob3Zlci55SW5kZXgsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuaG92ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHZhckNvbG9yKGNvbG9yczogc3RyaW5nW10sIGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYHZhcigke2NvbG9yc1tpbmRleCAlIGNvbG9ycy5sZW5ndGhdfSlgO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiY29udGFpbmVyXCJcbiAgKHJpdkNsaWVudFNpemUpPVwid2lkdGggPSAkZXZlbnQud2lkdGhcIlxuICAqbmdJZj1cIiEoZW1wdHkkIHwgYXN5bmMpOyBlbHNlIHplcm9TdGF0ZVwiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJkcmF3RGF0YSQgfCBhc3luYzsgbGV0IGRcIj5cbiAgICA8ZGl2XG4gICAgICAobW91c2Vtb3ZlKT1cIm1vdXNlbW92ZSgkZXZlbnQsIGQuaG92ZXIpXCJcbiAgICAgIChtb3VzZWxlYXZlKT1cIm1vdXNlbGVhdmUoJGV2ZW50KVwiXG4gICAgICAoY2xpY2spPVwiY2xpY2soZC5yYW5nZXMpXCJcbiAgICAgICNjb250YWluZXJcbiAgICA+XG4gICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBbYXR0ci52aWV3Qm94XT1cImQudmlld0JveFwiPlxuICAgICAgICA8ZyAqbmdGb3I9XCJsZXQgdGljayBvZiBkLnhUaWNrc1wiIHRleHQtYW5jaG9yPVwibWlkZGxlXCI+XG4gICAgICAgICAgPGxpbmVcbiAgICAgICAgICAgIGNsYXNzPVwidGljay1saW5lXCJcbiAgICAgICAgICAgIFthdHRyLngxXT1cInRpY2sueFwiXG4gICAgICAgICAgICBbYXR0ci54Ml09XCJ0aWNrLnhcIlxuICAgICAgICAgICAgeTE9XCIwXCJcbiAgICAgICAgICAgIFthdHRyLnkyXT1cIkhFSUdIVCAtIDE2XCJcbiAgICAgICAgICA+PC9saW5lPlxuICAgICAgICAgIDx0ZXh0IGNsYXNzPVwidGljay1sYWJlbFwiIFthdHRyLnhdPVwidGljay54XCIgW2F0dHIueV09XCJIRUlHSFQgLSA0XCI+XG4gICAgICAgICAgICB7eyB0aWNrLmxhYmVsIH19XG4gICAgICAgICAgPC90ZXh0PlxuICAgICAgICA8L2c+XG4gICAgICAgIDxnICpuZ0Zvcj1cImxldCB0aWNrIG9mIGQueVRpY2tzXCI+XG4gICAgICAgICAgPGxpbmVcbiAgICAgICAgICAgIGNsYXNzPVwidGljay1saW5lXCJcbiAgICAgICAgICAgIFthdHRyLnkxXT1cInRpY2sueVwiXG4gICAgICAgICAgICBbYXR0ci55Ml09XCJ0aWNrLnlcIlxuICAgICAgICAgICAgeDE9XCIwXCJcbiAgICAgICAgICAgIFthdHRyLngyXT1cIndpZHRoXCJcbiAgICAgICAgICA+PC9saW5lPlxuICAgICAgICAgIDx0ZXh0IGNsYXNzPVwidGljay1sYWJlbFwiIFthdHRyLnldPVwidGljay55IC0gNFwiIFthdHRyLnhdPVwiMFwiPlxuICAgICAgICAgICAge3sgdGljay5sYWJlbCB9fVxuICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgPC9nPlxuICAgICAgICA8ZyAqbmdJZj1cImhvdmVyICE9IG51bGxcIj5cbiAgICAgICAgICA8bGluZVxuICAgICAgICAgICAgY2xhc3M9XCJ0aWNrLWxpbmVcIlxuICAgICAgICAgICAgW2F0dHIueDFdPVwiaG92ZXIueFwiXG4gICAgICAgICAgICBbYXR0ci54Ml09XCJob3Zlci54XCJcbiAgICAgICAgICAgIHkxPVwiMFwiXG4gICAgICAgICAgICBbYXR0ci55Ml09XCJIRUlHSFQgLSAxNlwiXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgIHN0cm9rZS1kYXNoYXJyYXk9XCI0XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2c+XG4gICAgICAgIDxnICpuZ0Zvcj1cImxldCBiYXIgb2YgZC5iYXJzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPHJlY3RcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCByZWN0IG9mIGJhclwiXG4gICAgICAgICAgICBbYXR0ci54XT1cInJlY3QueFwiXG4gICAgICAgICAgICBbYXR0ci55XT1cInJlY3QueVwiXG4gICAgICAgICAgICBbYXR0ci53aWR0aF09XCJyZWN0LndpZHRoXCJcbiAgICAgICAgICAgIFthdHRyLmhlaWdodF09XCJyZWN0LmhlaWdodFwiXG4gICAgICAgICAgICBbYXR0ci5maWxsXT1cInZhckNvbG9yKGQuY29sb3JzLCBpKVwiXG4gICAgICAgICAgPjwvcmVjdD5cbiAgICAgICAgPC9nPlxuICAgICAgICA8ZyAqbmdGb3I9XCJsZXQgbGluZSBvZiBkLmxpbmVzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIFthdHRyLmRdPVwibGluZVwiXG4gICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwidmFyQ29sb3IoZC5jb2xvcnMsIGkpXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgID48L3BhdGg+XG4gICAgICAgIDwvZz5cbiAgICAgICAgPGcgKm5nRm9yPVwibGV0IGxpbmUgb2YgZC5saW5lczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwibWFya2VyXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIGhvdmVyICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgKGNvbmZpZy5ncm91cGVkVG9vbHRpcCB8fCBpID09IGhvdmVyLnZpc2libGVZSW5kZXgpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2F0dHIuY3hdPVwiaG92ZXIueFwiXG4gICAgICAgICAgICBbYXR0ci5jeV09XCJob3Zlci55c1tpXVwiXG4gICAgICAgICAgICByPVwiMy41XCJcbiAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInZhckNvbG9yKGQuY29sb3JzLCBpKVwiXG4gICAgICAgICAgPjwvY2lyY2xlPlxuICAgICAgICA8L2c+XG4gICAgICAgIDxnICpuZ0Zvcj1cImxldCBhcmVhIG9mIGQuYXJlYXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8cGF0aCBbYXR0ci5kXT1cImFyZWFcIiBbYXR0ci5maWxsXT1cInZhckNvbG9yKGQuY29sb3JzLCBpKVwiPjwvcGF0aD5cbiAgICAgICAgPC9nPlxuICAgICAgICA8ZyAqbmdGb3I9XCJsZXQgYXJlYSBvZiBkLmFyZWFzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJtYXJrZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgaG92ZXIgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAoY29uZmlnLmdyb3VwZWRUb29sdGlwIHx8IGkgPT0gaG92ZXIudmlzaWJsZVlJbmRleClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbYXR0ci5jeF09XCJob3Zlci54XCJcbiAgICAgICAgICAgIFthdHRyLmN5XT1cImhvdmVyLnlzW2ldXCJcbiAgICAgICAgICAgIHI9XCIzLjVcIlxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwidmFyQ29sb3IoZC5jb2xvcnMsIGkpXCJcbiAgICAgICAgICA+PC9jaXJjbGU+XG4gICAgICAgIDwvZz5cbiAgICAgIDwvc3ZnPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhvdmVyICE9IG51bGxcIj5cbiAgICAgICAgPHJpdi1jYWxsb3V0XG4gICAgICAgICAgW2FuY2hvcl09XCJob3Zlci50b29sdGlwLmFuY2hvclwiXG4gICAgICAgICAgW2lzTW9kYWxdPVwiZmFsc2VcIlxuICAgICAgICAgIFtwcmVmZXJyZWRQb3NpdGlvbl09XCInY2VudGVyLXJpZ2h0J1wiXG4gICAgICAgICAgW3RoZW1lXT1cIidsaWdodCdcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGxvdXQtY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNhbGxvdXQtcm93XCJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG1ldHJpYyBvZiBob3Zlci50b29sdGlwLm1ldHJpY3NcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlcmllcy1sYWJlbFwiPlxuICAgICAgICAgICAgICAgIDxyaXYtbGVnZW5kLWl0ZW0gW2NvbG9yVG9rZW5dPVwibWV0cmljLmNvbG9yXCI+PC9yaXYtbGVnZW5kLWl0ZW0+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgbWV0cmljLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IG1ldHJpYy52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3Jpdi1jYWxsb3V0PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPGxlZ2VuZD5cbiAgICAgIDxyaXYtbGVnZW5kLWl0ZW1cbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZC5kYXRhLnlzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgW2xhYmVsXT1cIml0ZW0ubGFiZWxcIlxuICAgICAgICBbdmlzaWJpbGl0eV09XCJpdGVtLmhpZGRlbiA/ICdoaWRkZW4nIDogJ3Zpc2libGUnXCJcbiAgICAgICAgW2NsaWNrYWJsZV09XCJjb25maWcuYWxsb3dMZWdlbmRUb2dnbGVcIlxuICAgICAgICBbY29sb3JUb2tlbl09XCJjb25maWcuY29sb3JzW2kgJSBjb25maWcuY29sb3JzLmxlbmd0aF1cIlxuICAgICAgICAoaXRlbUNsaWNrKT1cInRvZ2dsZUxlZ2VuZChpdGVtLmxhYmVsKVwiXG4gICAgICA+PC9yaXYtbGVnZW5kLWl0ZW0+XG4gICAgPC9sZWdlbmQ+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjemVyb1N0YXRlPlxuICA8cml2LXplcm8tc3RhdGUgW21lc3NhZ2VdPVwiY29uZmlnLnplcm9TdGF0ZU1lc3NhZ2VcIj48L3Jpdi16ZXJvLXN0YXRlPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdmlzdWFsaXphdGlvbi9jaGFydC9jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL2NoYXJ0L2NoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsSUFBSSxFQUNKLFNBQVMsRUFDVCxPQUFPLEdBQ1IsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDOzs7Ozs7O0FBUWhDLE1BQU0sT0FBTyxjQUFjO0lBTjNCO1FBU0UsV0FBTSxHQUFHLEdBQUcsQ0FBQztRQUViLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQVFoQyxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQWUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBU2pFLFVBQUssR0FBRyxJQUFJLGVBQWUsQ0FBYTtZQUN0QyxDQUFDLEVBQUUsRUFBRTtZQUNMLEVBQUUsRUFBRSxFQUFFO1NBQ1AsQ0FBQyxDQUFDO1FBYUgsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBRXRDLDBDQUEwQztRQUMxQyw4Q0FBOEM7UUFDOUMsK0NBQStDO1FBQy9DLGdEQUFnRDtRQUNoRCxnQkFBZ0I7UUFDaEIsb0JBQWUsR0FBRyxJQUFJ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QUF1QixDQUFDLE1BQU07OEJBR3ZCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFjbEIsTUFBTTtzQkFEVCxLQUFLO2dCQWFGLElBQUk7c0JBRFAsS0FBSztnQkFnRk4sWUFBWTtzQkFEWCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBtYXAsXG4gIHNjYW4sXG4gIHN0YXJ0V2l0aCxcbiAgU3ViamVjdCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDaGFydCB9IGZyb20gJy4vY2hhcnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGFydC5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDaGFydENvbXBvbmVudCB7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lcj86IEVsZW1lbnRSZWY7XG5cbiAgSEVJR0hUID0gMzAwO1xuXG4gIHdpZHRoJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMCk7XG4gIHNldCB3aWR0aCh3OiBudW1iZXIpIHtcbiAgICB0aGlzLndpZHRoJC5uZXh0KHcpO1xuICB9XG4gIGdldCB3aWR0aCgpIHtcbiAgICByZXR1cm4gdGhpcy53aWR0aCQudmFsdWU7XG4gIH1cblxuICBjb25maWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDaGFydC5Db25maWc+KENoYXJ0LmRlZmF1bHRDb25maWcpO1xuICBASW5wdXQoKVxuICBzZXQgY29uZmlnKGM6IENoYXJ0LkNvbmZpZykge1xuICAgIHRoaXMuY29uZmlnJC5uZXh0KGMpO1xuICB9XG4gIGdldCBjb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnJC52YWx1ZTtcbiAgfVxuXG4gIGRhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDaGFydC5EYXRhPih7XG4gICAgeDogW10sXG4gICAgeXM6IFtdLFxuICB9KTtcbiAgQElucHV0KClcbiAgc2V0IGRhdGEoZDogQ2hhcnQuRGF0YSkge1xuICAgIHRoaXMuZGF0YSQubmV4dChkKTtcbiAgfVxuICBnZXQgZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhJC52YWx1ZTtcbiAgfVxuXG4gIHRvZ2dsZUxlZ2VuZChsYWJlbDogc3RyaW5nKSB7XG4gICAgdGhpcy50b2dnbGVMZWdlbmQkLm5leHQobGFiZWwpO1xuICB9XG5cbiAgdG9nZ2xlTGVnZW5kJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICAvLyB0b2dnbGVkTGVnZW5kJCBpcyBqdXN0IGEgc2V0IG9mIGJvb2xlYW5cbiAgLy8gdmFsdWVzIGZvciB3aGljaCBsZWdlbmRzIGhhdmUgYmVlbiB0b2dnbGVkLlxuICAvLyBXZSBkb24ndCBrbm93IGlmIHRob3NlIGxlZ2VuZHMgd2hlcmUgYWxyZWFkeVxuICAvLyBoaWRkZW4gb3Igbm90LCB3ZSBqdXN0IGtub3cgd2hldGhlciB0aGV5IGhhdmVcbiAgLy8gYmVlbiB0b2dnbGVkLlxuICB0b2dnbGVkTGVnZW5kcyQgPSB0aGlzLnRvZ2dsZUxlZ2VuZCQucGlwZShcbiAgICBzY2FuPHN0cmluZywgUmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KFxuICAgICAgKGFjYywgdmFsdWUpID0+ICh7IC4uLmFjYywgW3ZhbHVlXTogIWFjY1t2YWx1ZV0gfSksXG4gICAgICB7fSxcbiAgICApLFxuICAgIHN0YXJ0V2l0aDxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oe30pLFxuICApO1xuXG4gIGRyYXdEYXRhJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMud2lkdGgkLFxuICAgIHRoaXMuY29uZmlnJCxcbiAgICB0aGlzLmRhdGEkLFxuICAgIHRoaXMudG9nZ2xlZExlZ2VuZHMkLFxuICBdKS5waXBlKFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2LCBjdXJyZW50KSA9PiBpc0VxdWFsKHByZXYsIGN1cnJlbnQpKSxcbiAgICBtYXAoKFt3aWR0aCwgY29uZmlnLCBkYXRhLCB0b2dnbGVkTGVnZW5kc10pID0+IHtcbiAgICAgIGlmICh3aWR0aCA9PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgaGlkZGVuRGF0YSA9IHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgeXM6IGRhdGEueXMubWFwKHkgPT4gKHtcbiAgICAgICAgICAuLi55LFxuICAgICAgICAgIC8vIGlmIHRvZ2dsZWQsIGZsaXAgdGhlIGhpZGRlbiBib29sZWFuXG4gICAgICAgICAgaGlkZGVuOiB0b2dnbGVkTGVnZW5kc1t5LmxhYmVsXSA/ICF5LmhpZGRlbiA6IHkuaGlkZGVuLFxuICAgICAgICB9KSksXG4gICAgICB9O1xuICAgICAgY29uc3Qgdmlld0JveCA9IGAwIDAgJHt3aWR0aH0gJHt0aGlzLkhFSUdIVH1gO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmlld0JveCxcbiAgICAgICAgZGF0YTogaGlkZGVuRGF0YSxcbiAgICAgICAgLi4uQ2hhcnQuY2hhcnQoY29uZmlnLCBoaWRkZW5EYXRhLCB7XG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIGhlaWdodDogdGhpcy5IRUlHSFQsXG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICB9KSxcbiAgKTtcblxuICBlbXB0eSQgPSB0aGlzLmRhdGEkLnBpcGUobWFwKGQgPT4gZC54Lmxlbmd0aCA9PSAwIHx8IGQueXMubGVuZ3RoID09IDApKTtcblxuICBob3ZlcjogUmV0dXJuVHlwZTxDaGFydC5Ib3Zlcj4gfCBudWxsID0gbnVsbDtcblxuICBtb3VzZW1vdmUoJGV2ZW50OiBNb3VzZUV2ZW50LCBob3ZlcjogQ2hhcnQuSG92ZXIpIHtcbiAgICBjb25zdCBjb250YWluZXJFbCA9IHRoaXMuY29udGFpbmVyPy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmIChjb250YWluZXJFbCA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlY3QgPSBjb250YWluZXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB0aGlzLmhvdmVyID0gaG92ZXIoe1xuICAgICAgcmVjdCxcbiAgICAgIHg6ICRldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0LFxuICAgICAgeTogJGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcCxcbiAgICB9KTtcbiAgfVxuXG4gIG1vdXNlbGVhdmUoJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5ob3ZlciA9IG51bGw7XG4gIH1cblxuICBAT3V0cHV0KClcbiAgY2hhcnRDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgeEluZGV4OiBudW1iZXI7XG4gICAgeUluZGV4OiBudW1iZXI7XG4gIH0+KCk7XG5cbiAgY2xpY2soKSB7XG4gICAgaWYgKHRoaXMuaG92ZXIpIHtcbiAgICAgIHRoaXMuY2hhcnRDbGlja2VkLmVtaXQoe1xuICAgICAgICB4SW5kZXg6IHRoaXMuaG92ZXIueEluZGV4LFxuICAgICAgICB5SW5kZXg6IHRoaXMuaG92ZXIueUluZGV4LFxuICAgICAgfSk7XG4gICAgICB0aGlzLmhvdmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXJDb2xvcihjb2xvcnM6IHN0cmluZ1tdLCBpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGB2YXIoJHtjb2xvcnNbaW5kZXggJSBjb2xvcnMubGVuZ3RoXX0pYDtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImNvbnRhaW5lclwiXG4gIChyaXZDbGllbnRTaXplKT1cIndpZHRoID0gJGV2ZW50LndpZHRoXCJcbiAgKm5nSWY9XCIhKGVtcHR5JCB8IGFzeW5jKTsgZWxzZSB6ZXJvU3RhdGVcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZHJhd0RhdGEkIHwgYXN5bmM7IGxldCBkXCI+XG4gICAgPGRpdlxuICAgICAgKG1vdXNlbW92ZSk9XCJtb3VzZW1vdmUoJGV2ZW50LCBkLmhvdmVyKVwiXG4gICAgICAobW91c2VsZWF2ZSk9XCJtb3VzZWxlYXZlKCRldmVudClcIlxuICAgICAgKGNsaWNrKT1cImNsaWNrKClcIlxuICAgICAgI2NvbnRhaW5lclxuICAgID5cbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIFthdHRyLnZpZXdCb3hdPVwiZC52aWV3Qm94XCI+XG4gICAgICAgIDxnICpuZ0Zvcj1cImxldCB0aWNrIG9mIGQueFRpY2tzXCIgdGV4dC1hbmNob3I9XCJtaWRkbGVcIj5cbiAgICAgICAgICA8bGluZVxuICAgICAgICAgICAgY2xhc3M9XCJ0aWNrLWxpbmVcIlxuICAgICAgICAgICAgW2F0dHIueDFdPVwidGljay54XCJcbiAgICAgICAgICAgIFthdHRyLngyXT1cInRpY2sueFwiXG4gICAgICAgICAgICB5MT1cIjBcIlxuICAgICAgICAgICAgW2F0dHIueTJdPVwiSEVJR0hUIC0gMTZcIlxuICAgICAgICAgID48L2xpbmU+XG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJ0aWNrLWxhYmVsXCIgW2F0dHIueF09XCJ0aWNrLnhcIiBbYXR0ci55XT1cIkhFSUdIVCAtIDRcIj5cbiAgICAgICAgICAgIHt7IHRpY2subGFiZWwgfX1cbiAgICAgICAgICA8L3RleHQ+XG4gICAgICAgIDwvZz5cbiAgICAgICAgPGcgKm5nRm9yPVwibGV0IHRpY2sgb2YgZC55VGlja3NcIj5cbiAgICAgICAgICA8bGluZVxuICAgICAgICAgICAgY2xhc3M9XCJ0aWNrLWxpbmVcIlxuICAgICAgICAgICAgW2F0dHIueTFdPVwidGljay55XCJcbiAgICAgICAgICAgIFthdHRyLnkyXT1cInRpY2sueVwiXG4gICAgICAgICAgICB4MT1cIjBcIlxuICAgICAgICAgICAgW2F0dHIueDJdPVwid2lkdGhcIlxuICAgICAgICAgID48L2xpbmU+XG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJ0aWNrLWxhYmVsXCIgW2F0dHIueV09XCJ0aWNrLnkgLSA0XCIgW2F0dHIueF09XCIwXCI+XG4gICAgICAgICAgICB7eyB0aWNrLmxhYmVsIH19XG4gICAgICAgICAgPC90ZXh0PlxuICAgICAgICA8L2c+XG4gICAgICAgIDxnICpuZ0lmPVwiaG92ZXIgIT0gbnVsbFwiPlxuICAgICAgICAgIDxsaW5lXG4gICAgICAgICAgICBjbGFzcz1cInRpY2stbGluZVwiXG4gICAgICAgICAgICBbYXR0ci54MV09XCJob3Zlci54XCJcbiAgICAgICAgICAgIFthdHRyLngyXT1cImhvdmVyLnhcIlxuICAgICAgICAgICAgeTE9XCIwXCJcbiAgICAgICAgICAgIFthdHRyLnkyXT1cIkhFSUdIVCAtIDE2XCJcbiAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgc3Ryb2tlLWRhc2hhcnJheT1cIjRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZz5cbiAgICAgICAgPGcgKm5nRm9yPVwibGV0IGJhciBvZiBkLmJhcnM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8cmVjdFxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJlY3Qgb2YgYmFyXCJcbiAgICAgICAgICAgIFthdHRyLnhdPVwicmVjdC54XCJcbiAgICAgICAgICAgIFthdHRyLnldPVwicmVjdC55XCJcbiAgICAgICAgICAgIFthdHRyLndpZHRoXT1cInJlY3Qud2lkdGhcIlxuICAgICAgICAgICAgW2F0dHIuaGVpZ2h0XT1cInJlY3QuaGVpZ2h0XCJcbiAgICAgICAgICAgIFthdHRyLmZpbGxdPVwidmFyQ29sb3IoZC5jb2xvcnMsIGkpXCJcbiAgICAgICAgICA+PC9yZWN0PlxuICAgICAgICA8L2c+XG4gICAgICAgIDxnICpuZ0Zvcj1cImxldCBsaW5lIG9mIGQubGluZXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgW2F0dHIuZF09XCJsaW5lXCJcbiAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJ2YXJDb2xvcihkLmNvbG9ycywgaSlcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgPC9nPlxuICAgICAgICA8ZyAqbmdGb3I9XCJsZXQgbGluZSBvZiBkLmxpbmVzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJtYXJrZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgaG92ZXIgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAoY29uZmlnLmdyb3VwZWRUb29sdGlwIHx8IGkgPT0gaG92ZXIudmlzaWJsZVlJbmRleClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbYXR0ci5jeF09XCJob3Zlci54XCJcbiAgICAgICAgICAgIFthdHRyLmN5XT1cImhvdmVyLnlzW2ldXCJcbiAgICAgICAgICAgIHI9XCIzLjVcIlxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwidmFyQ29sb3IoZC5jb2xvcnMsIGkpXCJcbiAgICAgICAgICA+PC9jaXJjbGU+XG4gICAgICAgIDwvZz5cbiAgICAgICAgPGcgKm5nRm9yPVwibGV0IGFyZWEgb2YgZC5hcmVhczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDxwYXRoIFthdHRyLmRdPVwiYXJlYVwiIFthdHRyLmZpbGxdPVwidmFyQ29sb3IoZC5jb2xvcnMsIGkpXCI+PC9wYXRoPlxuICAgICAgICA8L2c+XG4gICAgICAgIDxnICpuZ0Zvcj1cImxldCBhcmVhIG9mIGQuYXJlYXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cIm1hcmtlclwiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBob3ZlciAhPSBudWxsICYmXG4gICAgICAgICAgICAgIChjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgaSA9PSBob3Zlci52aXNpYmxlWUluZGV4KVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFthdHRyLmN4XT1cImhvdmVyLnhcIlxuICAgICAgICAgICAgW2F0dHIuY3ldPVwiaG92ZXIueXNbaV1cIlxuICAgICAgICAgICAgcj1cIjMuNVwiXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJ2YXJDb2xvcihkLmNvbG9ycywgaSlcIlxuICAgICAgICAgID48L2NpcmNsZT5cbiAgICAgICAgPC9nPlxuICAgICAgPC9zdmc+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaG92ZXIgIT0gbnVsbFwiPlxuICAgICAgICA8cml2LWNhbGxvdXRcbiAgICAgICAgICBbYW5jaG9yXT1cImhvdmVyLnRvb2x0aXAuYW5jaG9yXCJcbiAgICAgICAgICBbaXNNb2RhbF09XCJmYWxzZVwiXG4gICAgICAgICAgW3ByZWZlcnJlZFBvc2l0aW9uXT1cIidjZW50ZXItcmlnaHQnXCJcbiAgICAgICAgICBbdGhlbWVdPVwiJ2xpZ2h0J1wiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbG91dC1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2FsbG91dC1yb3dcIlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbWV0cmljIG9mIGhvdmVyLnRvb2x0aXAubWV0cmljc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VyaWVzLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgPHJpdi1sZWdlbmQtaXRlbSBbY29sb3JUb2tlbl09XCJtZXRyaWMuY29sb3JcIj48L3Jpdi1sZWdlbmQtaXRlbT5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBtZXRyaWMubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgbWV0cmljLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvcml2LWNhbGxvdXQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8bGVnZW5kPlxuICAgICAgPHJpdi1sZWdlbmQtaXRlbVxuICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkLmRhdGEueXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICBbbGFiZWxdPVwiaXRlbS5sYWJlbFwiXG4gICAgICAgIFt2aXNpYmlsaXR5XT1cIml0ZW0uaGlkZGVuID8gJ2hpZGRlbicgOiAndmlzaWJsZSdcIlxuICAgICAgICBbY2xpY2thYmxlXT1cImNvbmZpZy5hbGxvd0xlZ2VuZFRvZ2dsZVwiXG4gICAgICAgIFtjb2xvclRva2VuXT1cImNvbmZpZy5jb2xvcnNbaSAlIGNvbmZpZy5jb2xvcnMubGVuZ3RoXVwiXG4gICAgICAgIChpdGVtQ2xpY2spPVwidG9nZ2xlTGVnZW5kKGl0ZW0ubGFiZWwpXCJcbiAgICAgID48L3Jpdi1sZWdlbmQtaXRlbT5cbiAgICA8L2xlZ2VuZD5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN6ZXJvU3RhdGU+XG4gIDxyaXYtemVyby1zdGF0ZSBbbWVzc2FnZV09XCJjb25maWcuemVyb1N0YXRlTWVzc2FnZVwiPjwvcml2LXplcm8tc3RhdGU+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -4,7 +4,6 @@ import { SmallCurrencyPipe } from '../../format/pipes/small-currency.pipe';
|
|
|
4
4
|
import { CurrencyPipe } from '@angular/common';
|
|
5
5
|
import { scaleLinear, scaleUtc } from 'd3-scale';
|
|
6
6
|
import { area, line } from 'd3-shape';
|
|
7
|
-
import { getTimeInterval } from '../intervals';
|
|
8
7
|
export var Chart;
|
|
9
8
|
(function (Chart) {
|
|
10
9
|
Chart.defaultColorPalette = [
|
|
@@ -211,10 +210,6 @@ export var Chart;
|
|
|
211
210
|
colors: Chart.defaultColorPalette,
|
|
212
211
|
allowLegendToggle: false,
|
|
213
212
|
zeroStateMessage: 'No data to display.',
|
|
214
|
-
timeSeries: {
|
|
215
|
-
interval: 'day',
|
|
216
|
-
reducer: 'sum',
|
|
217
|
-
},
|
|
218
213
|
valueType: 'currency',
|
|
219
214
|
};
|
|
220
215
|
function timeseriesDomain(data) {
|
|
@@ -233,7 +228,7 @@ export var Chart;
|
|
|
233
228
|
const binSize = width / (data.x.length || 1);
|
|
234
229
|
const halfBinSize = binSize / 2;
|
|
235
230
|
const range = [left + halfBinSize, right - halfBinSize];
|
|
236
|
-
return { binSize: binSize * 0.7, range };
|
|
231
|
+
return { binSize: Math.min(binSize * 0.7, 80), range };
|
|
237
232
|
}
|
|
238
233
|
function yRange(dimensions) {
|
|
239
234
|
return [dimensions.height - BOTTOM_PADDING, TOP_PADDING];
|
|
@@ -274,51 +269,6 @@ export var Chart;
|
|
|
274
269
|
visibleIndices,
|
|
275
270
|
};
|
|
276
271
|
}
|
|
277
|
-
// binTimeseriesData reduces the x and y values, either by summing or
|
|
278
|
-
// averaging the original values. It also returns the min and max for
|
|
279
|
-
// each bin.
|
|
280
|
-
function binTimeseriesData(data, interval, reducer) {
|
|
281
|
-
const binMap = new Map();
|
|
282
|
-
const timeInterval = getTimeInterval(interval);
|
|
283
|
-
data.x.forEach((x, index) => {
|
|
284
|
-
const key = timeInterval.floor(new Date(x)).getTime();
|
|
285
|
-
if (!binMap.has(key)) {
|
|
286
|
-
binMap.set(key, []);
|
|
287
|
-
}
|
|
288
|
-
binMap.get(key)?.push(index);
|
|
289
|
-
});
|
|
290
|
-
const newX = Array.from(binMap.keys()).sort((a, b) => a - b);
|
|
291
|
-
const ranges = newX.map(key => {
|
|
292
|
-
const indices = binMap.get(key) ?? [];
|
|
293
|
-
const xs = indices.map(i => data.x[i]);
|
|
294
|
-
return {
|
|
295
|
-
min: indices[xs.indexOf(Math.min(...xs))],
|
|
296
|
-
max: indices[xs.indexOf(Math.max(...xs))],
|
|
297
|
-
};
|
|
298
|
-
});
|
|
299
|
-
const newData = {
|
|
300
|
-
x: newX,
|
|
301
|
-
ys: data.ys.map(y => ({
|
|
302
|
-
...y,
|
|
303
|
-
values: newX.map(key => {
|
|
304
|
-
const indices = binMap.get(key) ?? [];
|
|
305
|
-
return reduce(reducer, indices.map(index => y.values[index]));
|
|
306
|
-
}),
|
|
307
|
-
})),
|
|
308
|
-
};
|
|
309
|
-
return { ranges, data: newData };
|
|
310
|
-
}
|
|
311
|
-
Chart.binTimeseriesData = binTimeseriesData;
|
|
312
|
-
function reduce(reducer, values) {
|
|
313
|
-
if (values.length == 0) {
|
|
314
|
-
return 0;
|
|
315
|
-
}
|
|
316
|
-
const sum = values.reduce((a, b) => a + b, 0);
|
|
317
|
-
if (reducer == 'sum') {
|
|
318
|
-
return sum;
|
|
319
|
-
}
|
|
320
|
-
return sum / values.length;
|
|
321
|
-
}
|
|
322
272
|
function getPipes(valueType) {
|
|
323
273
|
switch (valueType) {
|
|
324
274
|
case 'count': {
|
|
@@ -336,5 +286,6 @@ export var Chart;
|
|
|
336
286
|
}
|
|
337
287
|
}
|
|
338
288
|
}
|
|
289
|
+
Chart.getPipes = getPipes;
|
|
339
290
|
})(Chart || (Chart = {}));
|
|
340
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL2NoYXJ0L2NoYXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxlQUFlLEVBQVksTUFBTSxjQUFjLENBQUM7QUFFekQsTUFBTSxLQUFXLEtBQUssQ0EwZnJCO0FBMWZELFdBQWlCLEtBQUs7SUFDUCx5QkFBbUIsR0FBRztRQUNqQyxhQUFhO1FBQ2IsaUJBQWlCO1FBQ2pCLG1CQUFtQjtRQUNuQixXQUFXO1FBQ1gsV0FBVztRQUNYLFdBQVc7UUFDWCxXQUFXO1FBQ1gsZ0NBQWdDO1FBQ2hDLGlCQUFpQjtRQUNqQixtQkFBbUI7UUFDbkIsV0FBVztRQUNYLFdBQVc7UUFDWCxXQUFXO1FBQ1gsV0FBVztRQUNYLCtCQUErQjtRQUMvQixpQkFBaUI7UUFDakIsbUJBQW1CO1FBQ25CLFdBQVc7UUFDWCxXQUFXO1FBQ1gsV0FBVztRQUNYLFdBQVc7S0FDWixDQUFDO0lBRUYsU0FBZ0IsS0FBSyxDQUFDLE1BQWMsRUFBRSxJQUFVLEVBQUUsVUFBc0I7UUFDdEUsT0FBTyxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU07WUFDMUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxF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QUFFLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQztpQkFDcEMsQ0FBQztZQUNKLEtBQUssWUFBWSxDQUFDLENBQUM7Z0JBQ2pCLE1BQU0sSUFBSSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ2xDLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO2FBQ2pDO1NBQ0Y7SUFDSCxDQUFDO0FBQ0gsQ0FBQyxFQTFmZ0IsS0FBSyxLQUFMLEtBQUssUUEwZnJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTnVtYmVyUGlwZSB9IGZyb20gJy4uLy4uL2Zvcm1hdC9waXBlcy9udW1iZXIucGlwZSc7XG5pbXBvcnQgeyBQZXJjZW50YWdlUGlwZSB9IGZyb20gJy4uLy4uL2Zvcm1hdC9waXBlcy9wZXJjZW50YWdlLnBpcGUnO1xuaW1wb3J0IHsgU21hbGxDdXJyZW5jeVBpcGUgfSBmcm9tICcuLi8uLi9mb3JtYXQvcGlwZXMvc21hbGwtY3VycmVuY3kucGlwZSc7XG5pbXBvcnQgeyBDdXJyZW5jeVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgc2NhbGVMaW5lYXIsIHNjYWxlVXRjIH0gZnJvbSAnZDMtc2NhbGUnO1xuaW1wb3J0IHsgYXJlYSwgbGluZSB9IGZyb20gJ2QzLXNoYXBlJztcbmltcG9ydCB7IGdldFRpbWVJbnRlcnZhbCwgSW50ZXJ2YWwgfSBmcm9tICcuLi9pbnRlcnZhbHMnO1xuXG5leHBvcnQgbmFtZXNwYWNlIENoYXJ0IHtcbiAgZXhwb3J0IGNvbnN0IGRlZmF1bHRDb2xvclBhbGV0dGUgPSBbXG4gICAgLy9CYXNlIGNvbG9yc1xuICAgICctLWJhamEtYmxhc3QtNTAnLFxuICAgICctLXRlYWwtZGlhbW9uZC01MCcsXG4gICAgJy0tZnlyZS01MCcsXG4gICAgJy0tdGFuZy01MCcsXG4gICAgJy0tcHVycC02MCcsXG4gICAgJy0tcm9zaS03MCcsXG4gICAgLy9TaGlmdCBsaWdodGVyIGZyb20gYmFzZSBieSAtMjBcbiAgICAnLS1iYWphLWJsYXN0LTMwJyxcbiAgICAnLS10ZWFsLWRpYW1vbmQtMzAnLFxuICAgICctLWZ5cmUtMzAnLFxuICAgICctLXRhbmctMzAnLFxuICAgICctLXB1cnAtNDAnLFxuICAgICctLXJvc2ktNTAnLFxuICAgIC8vU2hpZnQgZGFya2VyIGZyb20gYmFzZSBieSArMjBcbiAgICAnLS1iYWphLWJsYXN0LTcwJyxcbiAgICAnLS10ZWFsLWRpYW1vbmQtNzAnLFxuICAgICctLWZ5cmUtNzAnLFxuICAgICctLXRhbmctNzAnLFxuICAgICctLXB1cnAtODAnLFxuICAgICctLXJvc2ktOTAnLFxuICBdO1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjaGFydChjb25maWc6IENvbmZpZywgZGF0YTogRGF0YSwgZGltZW5zaW9uczogRGltZW5zaW9ucykge1xuICAgIHJldHVybiBjb25maWcudHlwZSA9PSAnbGluZSdcbiAgICAgID8gbGluZXMoY29uZmlnLCBkYXRhLCBkaW1lbnNpb25zKVxuICAgICAgOiBjb25maWcudHlwZSA9PSAnYXJlYSdcbiAgICAgID8gYXJlYXMoY29uZmlnLCBkYXRhLCBkaW1lbnNpb25zKVxuICAgICAgOiBiYXJzKGNvbmZpZywgZGF0YSwgZGltZW5zaW9ucyk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGxpbmVzKFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIGFsbERhdGE6IERhdGEsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgKTogUmVuZGVyZWRDaGFydCB7XG4gICAgY29uc3QgeyBkYXRhLCB2aXNpYmxlSW5kaWNlcyB9ID0gaGlkZShhbGxEYXRhKTtcbiAgICBjb25zdCB4U2NhbGUgPSBzY2FsZVV0Yyh0aW1lc2VyaWVzRG9tYWluKGRhdGEpLCB4UmFuZ2UoZGltZW5zaW9ucykpO1xuICAgIGNvbnN0IGZvcm1hdCA9IHhTY2FsZS50aWNrRm9ybWF0KCk7XG4gICAgY29uc3QgeFRpY2tzID0geFNjYWxlLnRpY2tzKE1hdGgubWluKDUsIGRhdGEueC5sZW5ndGgpKS5tYXAodGljayA9PiAoe1xuICAgICAgeDogeFNjYWxlKHRpY2spLFxuICAgICAgbGFiZWw6IGZvcm1hdCh0aWNrKSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCB7IHBpcGUsIGZ1bGxQaXBlIH0gPSBnZXRQaXBlcyhjb25maWcudmFsdWVUeXBlKTtcbiAgICBjb25zdCB5U2NhbGUgPSBzY2FsZUxpbmVhcih5RG9tYWluKGRhdGEpLCB5UmFuZ2UoZGltZW5zaW9ucykpO1xuICAgIGNvbnN0IHlUaWNrcyA9IHlTY2FsZS50aWNrcyg1KS5tYXAodGljayA9PiAoe1xuICAgICAgeTogeVNjYWxlKHRpY2spLFxuICAgICAgbGFiZWw6IHBpcGUudHJhbnNmb3JtKHRpY2spLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGNvbG9ycyA9IHZpc2libGVJbmRpY2VzLm1hcChcbiAgICAgIGkgPT4gY29uZmlnLmNvbG9yc1tpICUgY29uZmlnLmNvbG9ycy5sZW5ndGhdLFxuICAgICk7XG4gICAgY29uc3QgaW5kaWNlcyA9IGRhdGEueC5tYXAoKF8sIGkpID0+IGkpO1xuICAgIGNvbnN0IGxpbmVzID0gZGF0YS55cy5tYXAoeSA9PlxuICAgICAgbGluZTxudW1iZXI+KFxuICAgICAgICBpID0+IHhTY2FsZShkYXRhLnhbaV0pLFxuICAgICAgICBpID0+IHlTY2FsZSh5LnZhbHVlc1tpXSksXG4gICAgICApKGluZGljZXMpLFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBob3Zlcihwb3M6IHsgcmVjdDogRE9NUmVjdDsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSkge1xuICAgICAgY29uc3QgeEluZGV4ID0gZmluZE5lYXJlc3RJbmRleChkYXRhLngsIHhTY2FsZS5pbnZlcnQocG9zLngpLmdldFRpbWUoKSk7XG4gICAgICBjb25zdCB4ID0geFNjYWxlKGRhdGEueFt4SW5kZXhdKTtcbiAgICAgIGNvbnN0IHZpc2libGVZSW5kZXggPSBmaW5kTmVhcmVzdEluZGV4KFxuICAgICAgICBkYXRhLnlzLm1hcCh5ID0+IHkudmFsdWVzW3hJbmRleF0pLFxuICAgICAgICB5U2NhbGUuaW52ZXJ0KHBvcy55KSxcbiAgICAgICk7XG4gICAgICBjb25zdCB5SW5kZXggPSB2aXNpYmxlSW5kaWNlc1t2aXNpYmxlWUluZGV4XTtcbiAgICAgIGNvbnN0IHlzID0gZGF0YS55cy5tYXAoeSA9PiB5U2NhbGUoeS52YWx1ZXNbeEluZGV4XSkpO1xuXG4gICAgICBjb25zdCBhbmNob3IgPSBuZXcgRE9NUmVjdChcbiAgICAgICAgcG9zLnJlY3QueCArIHgsXG4gICAgICAgIHBvcy5yZWN0LnkgKyB5c1t2aXNpYmxlWUluZGV4XSxcbiAgICAgICAgOCxcbiAgICAgICAgMCxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4LFxuICAgICAgICB4SW5kZXgsXG4gICAgICAgIHlzLFxuICAgICAgICB5SW5kZXgsXG4gICAgICAgIHZpc2libGVZSW5kZXgsXG4gICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgbWV0cmljczogZGF0YS55c1xuICAgICAgICAgICAgLm1hcCgoeSwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgIGNvbG9yOiBjb2xvcnNbaW5kZXggJSBjb2xvcnMubGVuZ3RoXSxcbiAgICAgICAgICAgICAgbGFiZWw6IHkubGFiZWwsXG4gICAgICAgICAgICAgIHZhbHVlOiBmdWxsUGlwZS50cmFuc2Zvcm0oeS52YWx1ZXNbeEluZGV4XSkgPz8gJy0nLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKChfLCBpKSA9PiBjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgaSA9PSB2aXNpYmxlWUluZGV4KSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgeFRpY2tzLCB5VGlja3MsIGNvbG9ycywgbGluZXMsIGhvdmVyLCBiYXJzOiBbXSwgYXJlYXM6IFtdIH07XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gYXJlYXMoXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgYWxsRGF0YTogRGF0YSxcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICApOiBSZW5kZXJlZENoYXJ0IHtcbiAgICBjb25zdCB7IGRhdGE6IHVuc3RhY2tlZERhdGEsIHZpc2libGVJbmRpY2VzIH0gPSBoaWRlKGFsbERhdGEpO1xuICAgIGNvbnN0IGRhdGEgPSBzdGFjayh1bnN0YWNrZWREYXRhKTtcbiAgICBjb25zdCB4U2NhbGUgPSBzY2FsZVV0Yyh0aW1lc2VyaWVzRG9tYWluKGRhdGEpLCB4UmFuZ2UoZGltZW5zaW9ucykpO1xuICAgIGNvbnN0IGZvcm1hdCA9IHhTY2FsZS50aWNrRm9ybWF0KCk7XG4gICAgY29uc3QgeFRpY2tzID0geFNjYWxlLnRpY2tzKE1hdGgubWluKDUsIGRhdGEueC5sZW5ndGgpKS5tYXAodGljayA9PiAoe1xuICAgICAgeDogeFNjYWxlKHRpY2spLFxuICAgICAgbGFiZWw6IGZvcm1hdCh0aWNrKSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCB7IHBpcGUsIGZ1bGxQaXBlIH0gPSBnZXRQaXBlcyhjb25maWcudmFsdWVUeXBlKTtcbiAgICBjb25zdCB5U2NhbGUgPSBzY2FsZUxpbmVhcih5RG9tYWluKGRhdGEpLCB5UmFuZ2UoZGltZW5zaW9ucykpO1xuICAgIGNvbnN0IHlUaWNrcyA9IHlTY2FsZS50aWNrcyg1KS5tYXAodGljayA9PiAoe1xuICAgICAgeTogeVNjYWxlKHRpY2spLFxuICAgICAgbGFiZWw6IHBpcGUudHJhbnNmb3JtKHRpY2spLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGluZGljZXMgPSBkYXRhLngubWFwKChfLCBpKSA9PiBpKTtcbiAgICBjb25zdCBjb2xvcnMgPSB2aXNpYmxlSW5kaWNlcy5tYXAoXG4gICAgICBpID0+IGNvbmZpZy5jb2xvcnNbaSAlIGNvbmZpZy5jb2xvcnMubGVuZ3RoXSxcbiAgICApO1xuICAgIGNvbnN0IGFyZWFzID0gZGF0YS55cy5tYXAoKHksIHlJbmRleCkgPT5cbiAgICAgIGFyZWE8bnVtYmVyPihcbiAgICAgICAgaSA9PiB4U2NhbGUoZGF0YS54W2ldKSxcbiAgICAgICAgaSA9PiB5U2NhbGUoeUluZGV4ID09IDAgPyAwIDogZGF0YS55c1t5SW5kZXggLSAxXS52YWx1ZXNbaV0pLFxuICAgICAgICBpID0+IHlTY2FsZSh5LnZhbHVlc1tpXSksXG4gICAgICApKGluZGljZXMpLFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBob3Zlcihwb3M6IHsgcmVjdDogRE9NUmVjdDsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSkge1xuICAgICAgY29uc3QgeEluZGV4ID0gZmluZE5lYXJlc3RJbmRleChkYXRhLngsIHhTY2FsZS5pbnZlcnQocG9zLngpLmdldFRpbWUoKSk7XG4gICAgICBjb25zdCB4ID0geFNjYWxlKGRhdGEueFt4SW5kZXhdKTtcbiAgICAgIGNvbnN0IHlWYWx1ZSA9IHlTY2FsZS5pbnZlcnQocG9zLnkpO1xuICAgICAgbGV0IHZpc2libGVZSW5kZXggPSBkYXRhLnlzXG4gICAgICAgIC5tYXAoeSA9PiB5LnZhbHVlc1t4SW5kZXhdKVxuICAgICAgICAuZmluZEluZGV4KHkgPT4geSA+IHlWYWx1ZSk7XG4gICAgICBpZiAodmlzaWJsZVlJbmRleCA9PSAtMSkge1xuICAgICAgICB2aXNpYmxlWUluZGV4ID0gZGF0YS55cy5sZW5ndGggLSAxO1xuICAgICAgfVxuICAgICAgY29uc3QgeUluZGV4ID0gdmlzaWJsZUluZGljZXNbdmlzaWJsZVlJbmRleF07XG4gICAgICBjb25zdCB5cyA9IGRhdGEueXMubWFwKHkgPT4geVNjYWxlKHkudmFsdWVzW3hJbmRleF0pKTtcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSA4O1xuICAgICAgY29uc3QgYW5jaG9yID0gbmV3IERPTVJlY3QoXG4gICAgICAgIHBvcy5yZWN0LnggKyB4LFxuICAgICAgICBwb3MucmVjdC55ICsgeXNbdmlzaWJsZVlJbmRleF0sXG4gICAgICAgIHBhZGRpbmcsXG4gICAgICAgIDAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeCxcbiAgICAgICAgeEluZGV4LFxuICAgICAgICB5cyxcbiAgICAgICAgeUluZGV4LFxuICAgICAgICB2aXNpYmxlWUluZGV4LFxuICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgIG1ldHJpY3M6IHVuc3RhY2tlZERhdGEueXNcbiAgICAgICAgICAgIC5tYXAoKHksIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICBjb2xvcjogY29sb3JzW2luZGV4ICUgY29sb3JzLmxlbmd0aF0sXG4gICAgICAgICAgICAgIGxhYmVsOiB5LmxhYmVsLFxuICAgICAgICAgICAgICB2YWx1ZTogZnVsbFBpcGUudHJhbnNmb3JtKHkudmFsdWVzW3hJbmRleF0pID8/ICctJyxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgLmZpbHRlcigoXywgaSkgPT4gY29uZmlnLmdyb3VwZWRUb29sdGlwIHx8IGkgPT0gdmlzaWJsZVlJbmRleCksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHhUaWNrcywgeVRpY2tzLCBjb2xvcnMsIGFyZWFzLCBsaW5lczogW10sIGhvdmVyLCBiYXJzOiBbXSB9O1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGJhcnMoXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgYWxsRGF0YTogRGF0YSxcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICApOiBSZW5kZXJlZENoYXJ0IHtcbiAgICBjb25zdCB7IGRhdGE6IHVuc3RhY2tlZERhdGEsIHZpc2libGVJbmRpY2VzIH0gPSBoaWRlKGFsbERhdGEpO1xuICAgIGNvbnN0IGRhdGEgPSBzdGFjayh1bnN0YWNrZWREYXRhKTtcbiAgICBjb25zdCB7IHJhbmdlOiB4UmFuZ2UsIGJpblNpemUgfSA9IGJhclhSYW5nZShkaW1lbnNpb25zLCBkYXRhKTtcbiAgICBjb25zdCBoYWxmQmluU2l6ZSA9IGJpblNpemUgLyAyO1xuICAgIGNvbnN0IHhTY2FsZSA9IHNjYWxlVXRjKHRpbWVzZXJpZXNEb21haW4oZGF0YSksIHhSYW5nZSk7XG4gICAgY29uc3QgZm9ybWF0ID0geFNjYWxlLnRpY2tGb3JtYXQoKTtcbiAgICBjb25zdCB4VGlja3MgPSB4U2NhbGUudGlja3MoTWF0aC5taW4oNSwgZGF0YS54Lmxlbmd0aCkpLm1hcCh0aWNrID0+ICh7XG4gICAgICB4OiB4U2NhbGUodGljayksXG4gICAgICBsYWJlbDogZm9ybWF0KHRpY2spLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IHsgcGlwZSwgZnVsbFBpcGUgfSA9IGdldFBpcGVzKGNvbmZpZy52YWx1ZVR5cGUpO1xuICAgIGNvbnN0IHlTY2FsZSA9IHNjYWxlTGluZWFyKHlEb21haW4oZGF0YSksIHlSYW5nZShkaW1lbnNpb25zKSk7XG4gICAgY29uc3QgeVRpY2tzID0geVNjYWxlLnRpY2tzKDUpLm1hcCh0aWNrID0+ICh7XG4gICAgICB5OiB5U2NhbGUodGljayksXG4gICAgICBsYWJlbDogcGlwZS50cmFuc2Zvcm0odGljayksXG4gICAgfSkpO1xuICAgIGNvbnN0IGNvbG9ycyA9IHZpc2libGVJbmRpY2VzLm1hcChcbiAgICAgIGkgPT4gY29uZmlnLmNvbG9yc1tpICUgY29uZmlnLmNvbG9ycy5sZW5ndGhdLFxuICAgICk7XG4gICAgY29uc3QgYmFycyA9IGRhdGEueXMubWFwKCh5LCB5SW5kZXgpID0+XG4gICAgICB5LnZhbHVlcy5tYXAoKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCB5VmFsdWUgPSB5U2NhbGUodmFsdWUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IHhTY2FsZShkYXRhLnhbaW5kZXhdKSAtIGhhbGZCaW5TaXplLFxuICAgICAgICAgIHk6IHlWYWx1ZSxcbiAgICAgICAgICB3aWR0aDogYmluU2l6ZSxcbiAgICAgICAgICBoZWlnaHQ6XG4gICAgICAgICAgICAoeUluZGV4ID09IDBcbiAgICAgICAgICAgICAgPyB5U2NhbGUoMClcbiAgICAgICAgICAgICAgOiB5U2NhbGUoZGF0YS55c1t5SW5kZXggLSAxXS52YWx1ZXNbaW5kZXhdKSkgLSB5VmFsdWUsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgZnVuY3Rpb24gaG92ZXIocG9zOiB7IHJlY3Q6IERPTVJlY3Q7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pIHtcbiAgICAgIGNvbnN0IHhJbmRleCA9IGZpbmROZWFyZXN0SW5kZXgoZGF0YS54LCB4U2NhbGUuaW52ZXJ0KHBvcy54KS5nZXRUaW1lKCkpO1xuICAgICAgY29uc3QgeCA9IHhTY2FsZShkYXRhLnhbeEluZGV4XSk7XG4gICAgICBjb25zdCB5VmFsdWUgPSB5U2NhbGUuaW52ZXJ0KHBvcy55KTtcbiAgICAgIGxldCB2aXNpYmxlWUluZGV4ID0gZGF0YS55c1xuICAgICAgICAubWFwKHkgPT4geS52YWx1ZXNbeEluZGV4XSlcbiAgICAgICAgLmZpbmRJbmRleCh5ID0+IHkgPiB5VmFsdWUpO1xuICAgICAgaWYgKHZpc2libGVZSW5kZXggPT0gLTEpIHtcbiAgICAgICAgdmlzaWJsZVlJbmRleCA9IGRhdGEueXMubGVuZ3RoIC0gMTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHlJbmRleCA9IHZpc2libGVJbmRpY2VzW3Zpc2libGVZSW5kZXhdO1xuICAgICAgY29uc3QgeXMgPSBkYXRhLnlzLm1hcCh5ID0+IHlTY2FsZSh5LnZhbHVlc1t4SW5kZXhdKSk7XG4gICAgICBjb25zdCBwYWRkaW5nID0gODtcbiAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBET01SZWN0KFxuICAgICAgICBwb3MucmVjdC54ICsgYmFyc1t2aXNpYmxlWUluZGV4XVt4SW5kZXhdLnggLSBwYWRkaW5nLFxuICAgICAgICBwb3MucmVjdC55ICsgeXNbdmlzaWJsZVlJbmRleF0sXG4gICAgICAgIGJhcnNbdmlzaWJsZVlJbmRleF1beEluZGV4XS53aWR0aCArIHBhZGRpbmcgKiAyLFxuICAgICAgICAodmlzaWJsZVlJbmRleCA9PSAwID8geVNjYWxlKDApIDogeXNbdmlzaWJsZVlJbmRleCAtIDFdKSAtXG4gICAgICAgICAgeXNbdmlzaWJsZVlJbmRleF0sXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeCxcbiAgICAgICAgeEluZGV4LFxuICAgICAgICB5cyxcbiAgICAgICAgeUluZGV4LFxuICAgICAgICB2aXNpYmxlWUluZGV4LFxuICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgIG1ldHJpY3M6IHVuc3RhY2tlZERhdGEueXNcbiAgICAgICAgICAgIC5tYXAoKHksIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICBjb2xvcjogY29sb3JzW2luZGV4ICUgY29sb3JzLmxlbmd0aF0sXG4gICAgICAgICAgICAgIGxhYmVsOiB5LmxhYmVsLFxuICAgICAgICAgICAgICB2YWx1ZTogZnVsbFBpcGUudHJhbnNmb3JtKHkudmFsdWVzW3hJbmRleF0pID8/ICctJyxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgLmZpbHRlcigoXywgaSkgPT4gY29uZmlnLmdyb3VwZWRUb29sdGlwIHx8IGkgPT0gdmlzaWJsZVlJbmRleCksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHhUaWNrcywgeVRpY2tzLCBjb2xvcnMsIGJhcnMsIGxpbmVzOiBbXSwgYXJlYXM6IFtdLCBob3ZlciB9O1xuICB9XG5cbiAgY29uc3QgTEVGVF9QQURESU5HID0gNDg7XG4gIGNvbnN0IFJJR0hUX1BBRERJTkcgPSAyNDtcbiAgY29uc3QgVE9QX1BBRERJTkcgPSAxMjtcbiAgY29uc3QgQk9UVE9NX1BBRERJTkcgPSAyNDtcblxuICBleHBvcnQgdHlwZSBEYXRhID0ge1xuICAgIHlzOiB7XG4gICAgICBsYWJlbDogc3RyaW5nO1xuICAgICAgaGlkZGVuPzogYm9vbGVhbjtcbiAgICAgIHZhbHVlczogbnVtYmVyW107XG4gICAgfVtdO1xuICAgIHg6IG51bWJlcltdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIERpbWVuc2lvbnMgPSB7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBDb25maWcgPSB7XG4gICAgdHlwZTogJ2xpbmUnIHwgJ2FyZWEnIHwgJ2Jhcic7XG4gICAgZ3JvdXBlZFRvb2x0aXA6IGJvb2xlYW47XG4gICAgY29sb3JzOiBzdHJpbmdbXTtcbiAgICBhbGxvd0xlZ2VuZFRvZ2dsZTogYm9vbGVhbjtcbiAgICB6ZXJvU3RhdGVNZXNzYWdlOiBzdHJpbmc7XG4gICAgdGltZVNlcmllczoge1xuICAgICAgaW50ZXJ2YWw6IEludGVydmFsO1xuICAgICAgcmVkdWNlcjogJ3N1bScgfCAnYXZnJztcbiAgICB9O1xuICAgIHZhbHVlVHlwZTogVmFsdWVUeXBlO1xuICB9O1xuXG4gIGV4cG9ydCBjb25zdCBkZWZhdWx0Q29uZmlnOiBDb25maWcgPSB7XG4gICAgdHlwZTogJ2xpbmUnLFxuICAgIGdyb3VwZWRUb29sdGlwOiB0cnVlLFxuICAgIGNvbG9yczogZGVmYXVsdENvbG9yUGFsZXR0ZSxcbiAgICBhbGxvd0xlZ2VuZFRvZ2dsZTogZmFsc2UsXG4gICAgemVyb1N0YXRlTWVzc2FnZTogJ05vIGRhdGEgdG8gZGlzcGxheS4nLFxuICAgIHRpbWVTZXJpZXM6IHtcbiAgICAgIGludGVydmFsOiAnZGF5JyxcbiAgICAgIHJlZHVjZXI6ICdzdW0nLFxuICAgIH0sXG4gICAgdmFsdWVUeXBlOiAnY3VycmVuY3knLFxuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEFyZWEgPSB7XG4gICAgcGF0aDogc3RyaW5nIHwgbnVsbDtcbiAgICBmaWxsOiBzdHJpbmc7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgWFRpY2sgPSB7XG4gICAgeDogbnVtYmVyO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgWVRpY2sgPSB7XG4gICAgeTogbnVtYmVyO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gIH07XG5cbiAgdHlwZSBSZWN0ID0ge1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBCYXJTZXJpZXMgPSB7XG4gICAgZmlsbDogc3RyaW5nO1xuICAgIHJlY3RzOiBSZWN0W107XG4gIH07XG5cbiAgLy8gSG92ZXIgaXMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmlld3BvcnQgeCBhbmQgeSBhbmQgcmV0dXJucyBhIHJpY2hcbiAgLy8gc2V0IG9mIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdmFsdWVzIGFyZSBiZWluZyBob3ZlcmVkIGFuZCB3aGF0IHRoZSB0b29sdGlwXG4gIC8vIHNob3VsZCBsb29rIGxpa2VcbiAgZXhwb3J0IHR5cGUgSG92ZXIgPSAocG9zOiB7IHJlY3Q6IERPTVJlY3Q7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pID0+IHtcbiAgICAvLyB0aGUgaW5kaWNlcyBpbnRvIHRoZSBkYXRhIG9mIHRoZSBjbG9zZXN0IHBvaW50XG4gICAgeEluZGV4OiBudW1iZXI7XG4gICAgLy8gd2Ugd2FudCB0byBrbm93IHdoaWNoIHZpc2libGUgeSBpbmRleCBpcyBob3ZlcmVkXG4gICAgLy8gYW5kIHdoaWNoIGFjdHVhbCB5IGluZGV4IGlzIGhvdmVyZWRcbiAgICB5SW5kZXg6IG51bWJlcjtcbiAgICB2aXNpYmxlWUluZGV4OiBudW1iZXI7XG5cbiAgICAvLyB0aGUgdmlld3BvcnQgeCBhbmQgeXMgb2YgdGhlIGhvdmVyZWQgaXRlbXNcbiAgICB4OiBudW1iZXI7XG4gICAgeXM6IG51bWJlcltdO1xuXG4gICAgdG9vbHRpcDoge1xuICAgICAgYW5jaG9yOiBET01SZWN0O1xuICAgICAgbWV0cmljczoge1xuICAgICAgICBjb2xvcjogc3RyaW5nO1xuICAgICAgICBsYWJlbDogc3RyaW5nO1xuICAgICAgICB2YWx1ZTogc3RyaW5nO1xuICAgICAgfVtdO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmVuZGVyZWRDaGFydCByZXByZXNlbnRzIGFsbCBvZiB0aGUgcGFydHMgb2YgYSBjaGFydFxuICAvLyB0aGF0IGVuZCB1cCBvbiBzY3JlZW4uIEV2ZXJ5IGNoYXJ0IGhhcyB4IGFuZCB5IHRpY2tzXG4gIC8vIGFuZCBob3ZlciBmdW5jdGlvbmFsaXR5LCBldmVuIHRob3VnaCB0aGV5IG1pZ2h0IGJlXG4gIC8vIGRpZmZlcmVudCBmcm9tIGNoYXJ0IHRvIGNoYXJ0LlxuICB0eXBlIFJlbmRlcmVkQ2hhcnQgPSB7XG4gICAgeFRpY2tzOiBYVGlja1tdO1xuICAgIHlUaWNrczogWVRpY2tbXTtcbiAgICBob3ZlcjogSG92ZXI7XG4gICAgY29sb3JzOiBzdHJpbmdbXTtcbiAgICBsaW5lczogKHN0cmluZyB8IG51bGwpW107XG4gICAgYXJlYXM6IChzdHJpbmcgfCBudWxsKVtdO1xuICAgIGJhcnM6IFJlY3RbXVtdO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHRpbWVzZXJpZXNEb21haW4oZGF0YTogRGF0YSkge1xuICAgIHJldHVybiBbTWF0aC5taW4oLi4uZGF0YS54KSwgTWF0aC5tYXgoLi4uZGF0YS54KV07XG4gIH1cblxuICBmdW5jdGlvbiB5RG9tYWluKGRhdGE6IERhdGEpIHtcbiAgICByZXR1cm4gWzAsIE1hdGgubWF4KC4uLmRhdGEueXMubWFwKHkgPT4gTWF0aC5tYXgoLi4ueS52YWx1ZXMpKSldO1xuICB9XG5cbiAgZnVuY3Rpb24geFJhbmdlKGRpbWVuc2lvbnM6IERpbWVuc2lvbnMpIHtcbiAgICByZXR1cm4gW0xFRlRfUEFERElORywgZGltZW5zaW9ucy53aWR0aCAtIFJJR0hUX1BBRERJTkddO1xuICB9XG5cbiAgZnVuY3Rpb24gYmFyWFJhbmdlKGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsIGRhdGE6IERhdGEpIHtcbiAgICBjb25zdCBsZWZ0ID0gTEVGVF9QQURESU5HO1xuICAgIGNvbnN0IHJpZ2h0ID0gZGltZW5zaW9ucy53aWR0aCAtIFJJR0hUX1BBRERJTkc7XG4gICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgY29uc3QgYmluU2l6ZSA9IHdpZHRoIC8gKGRhdGEueC5sZW5ndGggfHwgMSk7XG4gICAgY29uc3QgaGFsZkJpblNpemUgPSBiaW5TaXplIC8gMjtcbiAgICBjb25zdCByYW5nZSA9IFtsZWZ0ICsgaGFsZkJpblNpemUsIHJpZ2h0IC0gaGFsZkJpblNpemVdO1xuICAgIHJldHVybiB7IGJpblNpemU6IGJpblNpemUgKiAwLjcsIHJhbmdlIH07XG4gIH1cblxuICBmdW5jdGlvbiB5UmFuZ2UoZGltZW5zaW9uczogRGltZW5zaW9ucykge1xuICAgIHJldHVybiBbZGltZW5zaW9ucy5oZWlnaHQgLSBCT1RUT01fUEFERElORywgVE9QX1BBRERJTkddO1xuICB9XG5cbiAgZnVuY3Rpb24gZmluZE5lYXJlc3RJbmRleCh2YWx1ZXM6IG51bWJlcltdLCBpbnB1dDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHZhbHVlcy5yZWR1Y2UoKG5lYXJlc3RJbmRleCwgdmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5hYnModmFsdWUgLSBpbnB1dCkgPCBNYXRoLmFicyh2YWx1ZXNbbmVhcmVzdEluZGV4XSAtIGlucHV0KVxuICAgICAgICA/IGluZGV4XG4gICAgICAgIDogbmVhcmVzdEluZGV4O1xuICAgIH0sIDApO1xuICB9XG5cbiAgLy8gc3RhY2sgcmV0dXJucyBhIG5ldyBkYXRhIHdoZXJlIGVhY2ggc2V0IG9mIHlWYWx1ZXMgaXMgc3RhY2tlZFxuICAvLyBvbiB0b3Agb2YgdGhlIHByZXZpb3VzLlxuICBmdW5jdGlvbiBzdGFjayhkYXRhOiBEYXRhKTogRGF0YSB7XG4gICAgY29uc3Qgc3RhY2tlZDogRGF0YSA9IHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICB5czogZGF0YS55cy5tYXAoeSA9PiAoeyBsYWJlbDogeS5sYWJlbCwgdmFsdWVzOiBbXSB9KSksXG4gICAgfTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueC5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGZyb20gPSAwO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkYXRhLnlzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IHRvID0gZnJvbSArIGRhdGEueXNbal0udmFsdWVzW2ldO1xuICAgICAgICBzdGFja2VkLnlzW2pdLnZhbHVlcy5wdXNoKHRvKTtcbiAgICAgICAgZnJvbSA9IHRvO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RhY2tlZDtcbiAgfVxuXG4gIC8vIGhpZGUgc3RyaXBzIG91dCBoaWRkZW4geSB2YWx1ZXMgd2hpbGUgcmV0YWluaW5nIHRoZSBvcmlnaW5hbCBpbmRpY2VzXG4gIC8vIGZvciB0aGUgcmVtYWluaW5nIHZpc2libGUgdmFsdWVzXG4gIGZ1bmN0aW9uIGhpZGUoZGF0YTogRGF0YSk6IHsgZGF0YTogRGF0YTsgdmlzaWJsZUluZGljZXM6IG51bWJlcltdIH0ge1xuICAgIGNvbnN0IHZpc2libGVJbmRpY2VzID0gZGF0YS55c1xuICAgICAgLm1hcCgoeSwgaSkgPT4gKHsgeSwgaSB9KSlcbiAgICAgIC5maWx0ZXIoKHsgeSB9KSA9PiAheS5oaWRkZW4pXG4gICAgICAubWFwKCh7IGkgfSkgPT4gaSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IHsgLi4uZGF0YSwgeXM6IHZpc2libGVJbmRpY2VzLm1hcChpID0+IGRhdGEueXNbaV0pIH0sXG4gICAgICB2aXNpYmxlSW5kaWNlcyxcbiAgICB9O1xuICB9XG5cbiAgLy8gYmluVGltZXNlcmllc0RhdGEgcmVkdWNlcyB0aGUgeCBhbmQgeSB2YWx1ZXMsIGVpdGhlciBieSBzdW1taW5nIG9yXG4gIC8vIGF2ZXJhZ2luZyB0aGUgb3JpZ2luYWwgdmFsdWVzLiBJdCBhbHNvIHJldHVybnMgdGhlIG1pbiBhbmQgbWF4IGZvclxuICAvLyBlYWNoIGJpbi5cbiAgZXhwb3J0IGZ1bmN0aW9uIGJpblRpbWVzZXJpZXNEYXRhKFxuICAgIGRhdGE6IERhdGEsXG4gICAgaW50ZXJ2YWw6IEludGVydmFsLFxuICAgIHJlZHVjZXI6ICdzdW0nIHwgJ2F2ZycsXG4gICkge1xuICAgIGNvbnN0IGJpbk1hcCA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXJbXT4oKTtcbiAgICBjb25zdCB0aW1lSW50ZXJ2YWwgPSBnZXRUaW1lSW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgIGRhdGEueC5mb3JFYWNoKCh4LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdGltZUludGVydmFsLmZsb29yKG5ldyBEYXRlKHgpKS5nZXRUaW1lKCk7XG4gICAgICBpZiAoIWJpbk1hcC5oYXMoa2V5KSkge1xuICAgICAgICBiaW5NYXAuc2V0KGtleSwgW10pO1xuICAgICAgfVxuICAgICAgYmluTWFwLmdldChrZXkpPy5wdXNoKGluZGV4KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IG5ld1ggPSBBcnJheS5mcm9tKGJpbk1hcC5rZXlzKCkpLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICBjb25zdCByYW5nZXMgPSBuZXdYLm1hcChrZXkgPT4ge1xuICAgICAgY29uc3QgaW5kaWNlcyA9IGJpbk1hcC5nZXQoa2V5KSA/PyBbXTtcbiAgICAgIGNvbnN0IHhzID0gaW5kaWNlcy5tYXAoaSA9PiBkYXRhLnhbaV0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWluOiBpbmRpY2VzW3hzLmluZGV4T2YoTWF0aC5taW4oLi4ueHMpKV0sXG4gICAgICAgIG1heDogaW5kaWNlc1t4cy5pbmRleE9mKE1hdGgubWF4KC4uLnhzKSldLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICBjb25zdCBuZXdEYXRhOiBEYXRhID0ge1xuICAgICAgeDogbmV3WCxcbiAgICAgIHlzOiBkYXRhLnlzLm1hcCh5ID0+ICh7XG4gICAgICAgIC4uLnksXG4gICAgICAgIHZhbHVlczogbmV3WC5tYXAoa2V5ID0+IHtcbiAgICAgICAgICBjb25zdCBpbmRpY2VzID0gYmluTWFwLmdldChrZXkpID8/IFtdO1xuICAgICAgICAgIHJldHVybiByZWR1Y2UoXG4gICAgICAgICAgICByZWR1Y2VyLFxuICAgICAgICAgICAgaW5kaWNlcy5tYXAoaW5kZXggPT4geS52YWx1ZXNbaW5kZXhdKSxcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgIH0pKSxcbiAgICB9O1xuICAgIHJldHVybiB7IHJhbmdlcywgZGF0YTogbmV3RGF0YSB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVkdWNlKHJlZHVjZXI6ICdzdW0nIHwgJ2F2ZycsIHZhbHVlczogbnVtYmVyW10pIHtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY29uc3Qgc3VtID0gdmFsdWVzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xuICAgIGlmIChyZWR1Y2VyID09ICdzdW0nKSB7XG4gICAgICByZXR1cm4gc3VtO1xuICAgIH1cbiAgICByZXR1cm4gc3VtIC8gdmFsdWVzLmxlbmd0aDtcbiAgfVxuXG4gIHR5cGUgVmFsdWVUeXBlID0gJ2NvdW50JyB8ICdjdXJyZW5jeScgfCAncGVyY2VudGFnZSc7XG5cbiAgZnVuY3Rpb24gZ2V0UGlwZXModmFsdWVUeXBlOiBWYWx1ZVR5cGUpIHtcbiAgICBzd2l0Y2ggKHZhbHVlVHlwZSkge1xuICAgICAgY2FzZSAnY291bnQnOiB7XG4gICAgICAgIGNvbnN0IHBpcGUgPSBuZXcgTnVtYmVyUGlwZSgpO1xuICAgICAgICByZXR1cm4geyBwaXBlLCBmdWxsUGlwZTogcGlwZSB9O1xuICAgICAgfVxuICAgICAgY2FzZSAnY3VycmVuY3knOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBpcGU6IG5ldyBTbWFsbEN1cnJlbmN5UGlwZSgpLFxuICAgICAgICAgIGZ1bGxQaXBlOiBuZXcgQ3VycmVuY3lQaXBlKCdlbi11cycpLFxuICAgICAgICB9O1xuICAgICAgY2FzZSAncGVyY2VudGFnZSc6IHtcbiAgICAgICAgY29uc3QgcGlwZSA9IG5ldyBQZXJjZW50YWdlUGlwZSgpO1xuICAgICAgICByZXR1cm4geyBwaXBlLCBmdWxsUGlwZTogcGlwZSB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|
|
291
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL2NoYXJ0L2NoYXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBR3RDLE1BQU0sS0FBVyxLQUFLLENBNGJyQjtBQTViRCxXQUFpQixLQUFLO0lBQ1AseUJBQW1CLEdBQUc7UUFDakMsYUFBYTtRQUNiLGlCQUFpQjtRQUNqQixtQkFBbUI7UUFDbkIsV0FBVztRQUNYLFdBQVc7UUFDWCxXQUFXO1FBQ1gsV0FBVztRQUNYLGdDQUFnQztRQUNoQyxpQkFBaUI7UUFDakIsbUJBQW1CO1FBQ25CLFdBQVc7UUFDWCxXQUFXO1FBQ1gsV0FBVztRQUNYLFdBQVc7UUFDWCwrQkFBK0I7UUFDL0IsaUJBQWlCO1FBQ2pCLG1CQUFtQjtRQUNuQixXQUFXO1FBQ1gsV0FBVztRQUNYLFdBQVc7UUFDWCxXQUFXO0tBQ1osQ0FBQztJQUVGLFNBQWdCLEtBQUssQ0FBQyxNQUFjLEVBQUUsSUFBVSxFQUFFLFVBQXNCO1FBQ3RFLE9BQU8sTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNO1lBQzFCLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUM7WUFDakMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJ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QnZCLENBQUE7QUFDSCxDQUFDLEVBNWJnQixLQUFLLEtBQUwsS0FBSyxRQTRickIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOdW1iZXJQaXBlIH0gZnJvbSAnLi4vLi4vZm9ybWF0L3BpcGVzL251bWJlci5waXBlJztcbmltcG9ydCB7IFBlcmNlbnRhZ2VQaXBlIH0gZnJvbSAnLi4vLi4vZm9ybWF0L3BpcGVzL3BlcmNlbnRhZ2UucGlwZSc7XG5pbXBvcnQgeyBTbWFsbEN1cnJlbmN5UGlwZSB9IGZyb20gJy4uLy4uL2Zvcm1hdC9waXBlcy9zbWFsbC1jdXJyZW5jeS5waXBlJztcbmltcG9ydCB7IEN1cnJlbmN5UGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBzY2FsZUxpbmVhciwgc2NhbGVVdGMgfSBmcm9tICdkMy1zY2FsZSc7XG5pbXBvcnQgeyBhcmVhLCBsaW5lIH0gZnJvbSAnZDMtc2hhcGUnO1xuaW1wb3J0IHsgZ2V0VGltZUludGVydmFsLCBJbnRlcnZhbCB9IGZyb20gJy4uL2ludGVydmFscyc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ2hhcnQge1xuICBleHBvcnQgY29uc3QgZGVmYXVsdENvbG9yUGFsZXR0ZSA9IFtcbiAgICAvL0Jhc2UgY29sb3JzXG4gICAgJy0tYmFqYS1ibGFzdC01MCcsXG4gICAgJy0tdGVhbC1kaWFtb25kLTUwJyxcbiAgICAnLS1meXJlLTUwJyxcbiAgICAnLS10YW5nLTUwJyxcbiAgICAnLS1wdXJwLTYwJyxcbiAgICAnLS1yb3NpLTcwJyxcbiAgICAvL1NoaWZ0IGxpZ2h0ZXIgZnJvbSBiYXNlIGJ5IC0yMFxuICAgICctLWJhamEtYmxhc3QtMzAnLFxuICAgICctLXRlYWwtZGlhbW9uZC0zMCcsXG4gICAgJy0tZnlyZS0zMCcsXG4gICAgJy0tdGFuZy0zMCcsXG4gICAgJy0tcHVycC00MCcsXG4gICAgJy0tcm9zaS01MCcsXG4gICAgLy9TaGlmdCBkYXJrZXIgZnJvbSBiYXNlIGJ5ICsyMFxuICAgICctLWJhamEtYmxhc3QtNzAnLFxuICAgICctLXRlYWwtZGlhbW9uZC03MCcsXG4gICAgJy0tZnlyZS03MCcsXG4gICAgJy0tdGFuZy03MCcsXG4gICAgJy0tcHVycC04MCcsXG4gICAgJy0tcm9zaS05MCcsXG4gIF07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNoYXJ0KGNvbmZpZzogQ29uZmlnLCBkYXRhOiBEYXRhLCBkaW1lbnNpb25zOiBEaW1lbnNpb25zKSB7XG4gICAgcmV0dXJuIGNvbmZpZy50eXBlID09ICdsaW5lJ1xuICAgICAgPyBsaW5lcyhjb25maWcsIGRhdGEsIGRpbWVuc2lvbnMpXG4gICAgICA6IGNvbmZpZy50eXBlID09ICdhcmVhJ1xuICAgICAgPyBhcmVhcyhjb25maWcsIGRhdGEsIGRpbWVuc2lvbnMpXG4gICAgICA6IGJhcnMoY29uZmlnLCBkYXRhLCBkaW1lbnNpb25zKTtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gbGluZXMoXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgYWxsRGF0YTogRGF0YSxcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICApOiBSZW5kZXJlZENoYXJ0IHtcbiAgICBjb25zdCB7IGRhdGEsIHZpc2libGVJbmRpY2VzIH0gPSBoaWRlKGFsbERhdGEpO1xuICAgIGNvbnN0IHhTY2FsZSA9IHNjYWxlVXRjKHRpbWVzZXJpZXNEb21haW4oZGF0YSksIHhSYW5nZShkaW1lbnNpb25zKSk7XG4gICAgY29uc3QgZm9ybWF0ID0geFNjYWxlLnRpY2tGb3JtYXQoKTtcbiAgICBjb25zdCB4VGlja3MgPSB4U2NhbGUudGlja3MoTWF0aC5taW4oNSwgZGF0YS54Lmxlbmd0aCkpLm1hcCh0aWNrID0+ICh7XG4gICAgICB4OiB4U2NhbGUodGljayksXG4gICAgICBsYWJlbDogZm9ybWF0KHRpY2spLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IHsgcGlwZSwgZnVsbFBpcGUgfSA9IGdldFBpcGVzKGNvbmZpZy52YWx1ZVR5cGUpO1xuICAgIGNvbnN0IHlTY2FsZSA9IHNjYWxlTGluZWFyKHlEb21haW4oZGF0YSksIHlSYW5nZShkaW1lbnNpb25zKSk7XG4gICAgY29uc3QgeVRpY2tzID0geVNjYWxlLnRpY2tzKDUpLm1hcCh0aWNrID0+ICh7XG4gICAgICB5OiB5U2NhbGUodGljayksXG4gICAgICBsYWJlbDogcGlwZS50cmFuc2Zvcm0odGljayksXG4gICAgfSkpO1xuXG4gICAgY29uc3QgY29sb3JzID0gdmlzaWJsZUluZGljZXMubWFwKFxuICAgICAgaSA9PiBjb25maWcuY29sb3JzW2kgJSBjb25maWcuY29sb3JzLmxlbmd0aF0sXG4gICAgKTtcbiAgICBjb25zdCBpbmRpY2VzID0gZGF0YS54Lm1hcCgoXywgaSkgPT4gaSk7XG4gICAgY29uc3QgbGluZXMgPSBkYXRhLnlzLm1hcCh5ID0+XG4gICAgICBsaW5lPG51bWJlcj4oXG4gICAgICAgIGkgPT4geFNjYWxlKGRhdGEueFtpXSksXG4gICAgICAgIGkgPT4geVNjYWxlKHkudmFsdWVzW2ldKSxcbiAgICAgICkoaW5kaWNlcyksXG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGhvdmVyKHBvczogeyByZWN0OiBET01SZWN0OyB4OiBudW1iZXI7IHk6IG51bWJlciB9KSB7XG4gICAgICBjb25zdCB4SW5kZXggPSBmaW5kTmVhcmVzdEluZGV4KGRhdGEueCwgeFNjYWxlLmludmVydChwb3MueCkuZ2V0VGltZSgpKTtcbiAgICAgIGNvbnN0IHggPSB4U2NhbGUoZGF0YS54W3hJbmRleF0pO1xuICAgICAgY29uc3QgdmlzaWJsZVlJbmRleCA9IGZpbmROZWFyZXN0SW5kZXgoXG4gICAgICAgIGRhdGEueXMubWFwKHkgPT4geS52YWx1ZXNbeEluZGV4XSksXG4gICAgICAgIHlTY2FsZS5pbnZlcnQocG9zLnkpLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHlJbmRleCA9IHZpc2libGVJbmRpY2VzW3Zpc2libGVZSW5kZXhdO1xuICAgICAgY29uc3QgeXMgPSBkYXRhLnlzLm1hcCh5ID0+IHlTY2FsZSh5LnZhbHVlc1t4SW5kZXhdKSk7XG5cbiAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBET01SZWN0KFxuICAgICAgICBwb3MucmVjdC54ICsgeCxcbiAgICAgICAgcG9zLnJlY3QueSArIHlzW3Zpc2libGVZSW5kZXhdLFxuICAgICAgICA4LFxuICAgICAgICAwLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHgsXG4gICAgICAgIHhJbmRleCxcbiAgICAgICAgeXMsXG4gICAgICAgIHlJbmRleCxcbiAgICAgICAgdmlzaWJsZVlJbmRleCxcbiAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICBtZXRyaWNzOiBkYXRhLnlzXG4gICAgICAgICAgICAubWFwKCh5LCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgY29sb3I6IGNvbG9yc1tpbmRleCAlIGNvbG9ycy5sZW5ndGhdLFxuICAgICAgICAgICAgICBsYWJlbDogeS5sYWJlbCxcbiAgICAgICAgICAgICAgdmFsdWU6IGZ1bGxQaXBlLnRyYW5zZm9ybSh5LnZhbHVlc1t4SW5kZXhdKSA/PyAnLScsXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIC5maWx0ZXIoKF8sIGkpID0+IGNvbmZpZy5ncm91cGVkVG9vbHRpcCB8fCBpID09IHZpc2libGVZSW5kZXgpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB4VGlja3MsIHlUaWNrcywgY29sb3JzLCBsaW5lcywgaG92ZXIsIGJhcnM6IFtdLCBhcmVhczogW10gfTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBhcmVhcyhcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBhbGxEYXRhOiBEYXRhLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IFJlbmRlcmVkQ2hhcnQge1xuICAgIGNvbnN0IHsgZGF0YTogdW5zdGFja2VkRGF0YSwgdmlzaWJsZUluZGljZXMgfSA9IGhpZGUoYWxsRGF0YSk7XG4gICAgY29uc3QgZGF0YSA9IHN0YWNrKHVuc3RhY2tlZERhdGEpO1xuICAgIGNvbnN0IHhTY2FsZSA9IHNjYWxlVXRjKHRpbWVzZXJpZXNEb21haW4oZGF0YSksIHhSYW5nZShkaW1lbnNpb25zKSk7XG4gICAgY29uc3QgZm9ybWF0ID0geFNjYWxlLnRpY2tGb3JtYXQoKTtcbiAgICBjb25zdCB4VGlja3MgPSB4U2NhbGUudGlja3MoTWF0aC5taW4oNSwgZGF0YS54Lmxlbmd0aCkpLm1hcCh0aWNrID0+ICh7XG4gICAgICB4OiB4U2NhbGUodGljayksXG4gICAgICBsYWJlbDogZm9ybWF0KHRpY2spLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IHsgcGlwZSwgZnVsbFBpcGUgfSA9IGdldFBpcGVzKGNvbmZpZy52YWx1ZVR5cGUpO1xuICAgIGNvbnN0IHlTY2FsZSA9IHNjYWxlTGluZWFyKHlEb21haW4oZGF0YSksIHlSYW5nZShkaW1lbnNpb25zKSk7XG4gICAgY29uc3QgeVRpY2tzID0geVNjYWxlLnRpY2tzKDUpLm1hcCh0aWNrID0+ICh7XG4gICAgICB5OiB5U2NhbGUodGljayksXG4gICAgICBsYWJlbDogcGlwZS50cmFuc2Zvcm0odGljayksXG4gICAgfSkpO1xuXG4gICAgY29uc3QgaW5kaWNlcyA9IGRhdGEueC5tYXAoKF8sIGkpID0+IGkpO1xuICAgIGNvbnN0IGNvbG9ycyA9IHZpc2libGVJbmRpY2VzLm1hcChcbiAgICAgIGkgPT4gY29uZmlnLmNvbG9yc1tpICUgY29uZmlnLmNvbG9ycy5sZW5ndGhdLFxuICAgICk7XG4gICAgY29uc3QgYXJlYXMgPSBkYXRhLnlzLm1hcCgoeSwgeUluZGV4KSA9PlxuICAgICAgYXJlYTxudW1iZXI+KFxuICAgICAgICBpID0+IHhTY2FsZShkYXRhLnhbaV0pLFxuICAgICAgICBpID0+IHlTY2FsZSh5SW5kZXggPT0gMCA/IDAgOiBkYXRhLnlzW3lJbmRleCAtIDFdLnZhbHVlc1tpXSksXG4gICAgICAgIGkgPT4geVNjYWxlKHkudmFsdWVzW2ldKSxcbiAgICAgICkoaW5kaWNlcyksXG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGhvdmVyKHBvczogeyByZWN0OiBET01SZWN0OyB4OiBudW1iZXI7IHk6IG51bWJlciB9KSB7XG4gICAgICBjb25zdCB4SW5kZXggPSBmaW5kTmVhcmVzdEluZGV4KGRhdGEueCwgeFNjYWxlLmludmVydChwb3MueCkuZ2V0VGltZSgpKTtcbiAgICAgIGNvbnN0IHggPSB4U2NhbGUoZGF0YS54W3hJbmRleF0pO1xuICAgICAgY29uc3QgeVZhbHVlID0geVNjYWxlLmludmVydChwb3MueSk7XG4gICAgICBsZXQgdmlzaWJsZVlJbmRleCA9IGRhdGEueXNcbiAgICAgICAgLm1hcCh5ID0+IHkudmFsdWVzW3hJbmRleF0pXG4gICAgICAgIC5maW5kSW5kZXgoeSA9PiB5ID4geVZhbHVlKTtcbiAgICAgIGlmICh2aXNpYmxlWUluZGV4ID09IC0xKSB7XG4gICAgICAgIHZpc2libGVZSW5kZXggPSBkYXRhLnlzLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgICBjb25zdCB5SW5kZXggPSB2aXNpYmxlSW5kaWNlc1t2aXNpYmxlWUluZGV4XTtcbiAgICAgIGNvbnN0IHlzID0gZGF0YS55cy5tYXAoeSA9PiB5U2NhbGUoeS52YWx1ZXNbeEluZGV4XSkpO1xuICAgICAgY29uc3QgcGFkZGluZyA9IDg7XG4gICAgICBjb25zdCBhbmNob3IgPSBuZXcgRE9NUmVjdChcbiAgICAgICAgcG9zLnJlY3QueCArIHgsXG4gICAgICAgIHBvcy5yZWN0LnkgKyB5c1t2aXNpYmxlWUluZGV4XSxcbiAgICAgICAgcGFkZGluZyxcbiAgICAgICAgMCxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4LFxuICAgICAgICB4SW5kZXgsXG4gICAgICAgIHlzLFxuICAgICAgICB5SW5kZXgsXG4gICAgICAgIHZpc2libGVZSW5kZXgsXG4gICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgbWV0cmljczogdW5zdGFja2VkRGF0YS55c1xuICAgICAgICAgICAgLm1hcCgoeSwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgIGNvbG9yOiBjb2xvcnNbaW5kZXggJSBjb2xvcnMubGVuZ3RoXSxcbiAgICAgICAgICAgICAgbGFiZWw6IHkubGFiZWwsXG4gICAgICAgICAgICAgIHZhbHVlOiBmdWxsUGlwZS50cmFuc2Zvcm0oeS52YWx1ZXNbeEluZGV4XSkgPz8gJy0nLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKChfLCBpKSA9PiBjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgaSA9PSB2aXNpYmxlWUluZGV4KSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgeFRpY2tzLCB5VGlja3MsIGNvbG9ycywgYXJlYXMsIGxpbmVzOiBbXSwgaG92ZXIsIGJhcnM6IFtdIH07XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gYmFycyhcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBhbGxEYXRhOiBEYXRhLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IFJlbmRlcmVkQ2hhcnQge1xuICAgIGNvbnN0IHsgZGF0YTogdW5zdGFja2VkRGF0YSwgdmlzaWJsZUluZGljZXMgfSA9IGhpZGUoYWxsRGF0YSk7XG4gICAgY29uc3QgZGF0YSA9IHN0YWNrKHVuc3RhY2tlZERhdGEpO1xuICAgIGNvbnN0IHsgcmFuZ2U6IHhSYW5nZSwgYmluU2l6ZSB9ID0gYmFyWFJhbmdlKGRpbWVuc2lvbnMsIGRhdGEpO1xuICAgIGNvbnN0IGhhbGZCaW5TaXplID0gYmluU2l6ZSAvIDI7XG4gICAgY29uc3QgeFNjYWxlID0gc2NhbGVVdGModGltZXNlcmllc0RvbWFpbihkYXRhKSwgeFJhbmdlKTtcbiAgICBjb25zdCBmb3JtYXQgPSB4U2NhbGUudGlja0Zvcm1hdCgpO1xuICAgIGNvbnN0IHhUaWNrcyA9IHhTY2FsZS50aWNrcyhNYXRoLm1pbig1LCBkYXRhLngubGVuZ3RoKSkubWFwKHRpY2sgPT4gKHtcbiAgICAgIHg6IHhTY2FsZSh0aWNrKSxcbiAgICAgIGxhYmVsOiBmb3JtYXQodGljayksXG4gICAgfSkpO1xuXG4gICAgY29uc3QgeyBwaXBlLCBmdWxsUGlwZSB9ID0gZ2V0UGlwZXMoY29uZmlnLnZhbHVlVHlwZSk7XG4gICAgY29uc3QgeVNjYWxlID0gc2NhbGVMaW5lYXIoeURvbWFpbihkYXRhKSwgeVJhbmdlKGRpbWVuc2lvbnMpKTtcbiAgICBjb25zdCB5VGlja3MgPSB5U2NhbGUudGlja3MoNSkubWFwKHRpY2sgPT4gKHtcbiAgICAgIHk6IHlTY2FsZSh0aWNrKSxcbiAgICAgIGxhYmVsOiBwaXBlLnRyYW5zZm9ybSh0aWNrKSxcbiAgICB9KSk7XG4gICAgY29uc3QgY29sb3JzID0gdmlzaWJsZUluZGljZXMubWFwKFxuICAgICAgaSA9PiBjb25maWcuY29sb3JzW2kgJSBjb25maWcuY29sb3JzLmxlbmd0aF0sXG4gICAgKTtcbiAgICBjb25zdCBiYXJzID0gZGF0YS55cy5tYXAoKHksIHlJbmRleCkgPT5cbiAgICAgIHkudmFsdWVzLm1hcCgodmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHlWYWx1ZSA9IHlTY2FsZSh2YWx1ZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeDogeFNjYWxlKGRhdGEueFtpbmRleF0pIC0gaGFsZkJpblNpemUsXG4gICAgICAgICAgeTogeVZhbHVlLFxuICAgICAgICAgIHdpZHRoOiBiaW5TaXplLFxuICAgICAgICAgIGhlaWdodDpcbiAgICAgICAgICAgICh5SW5kZXggPT0gMFxuICAgICAgICAgICAgICA/IHlTY2FsZSgwKVxuICAgICAgICAgICAgICA6IHlTY2FsZShkYXRhLnlzW3lJbmRleCAtIDFdLnZhbHVlc1tpbmRleF0pKSAtIHlWYWx1ZSxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBob3Zlcihwb3M6IHsgcmVjdDogRE9NUmVjdDsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSkge1xuICAgICAgY29uc3QgeEluZGV4ID0gZmluZE5lYXJlc3RJbmRleChkYXRhLngsIHhTY2FsZS5pbnZlcnQocG9zLngpLmdldFRpbWUoKSk7XG4gICAgICBjb25zdCB4ID0geFNjYWxlKGRhdGEueFt4SW5kZXhdKTtcbiAgICAgIGNvbnN0IHlWYWx1ZSA9IHlTY2FsZS5pbnZlcnQocG9zLnkpO1xuICAgICAgbGV0IHZpc2libGVZSW5kZXggPSBkYXRhLnlzXG4gICAgICAgIC5tYXAoeSA9PiB5LnZhbHVlc1t4SW5kZXhdKVxuICAgICAgICAuZmluZEluZGV4KHkgPT4geSA+IHlWYWx1ZSk7XG4gICAgICBpZiAodmlzaWJsZVlJbmRleCA9PSAtMSkge1xuICAgICAgICB2aXNpYmxlWUluZGV4ID0gZGF0YS55cy5sZW5ndGggLSAxO1xuICAgICAgfVxuICAgICAgY29uc3QgeUluZGV4ID0gdmlzaWJsZUluZGljZXNbdmlzaWJsZVlJbmRleF07XG4gICAgICBjb25zdCB5cyA9IGRhdGEueXMubWFwKHkgPT4geVNjYWxlKHkudmFsdWVzW3hJbmRleF0pKTtcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSA4O1xuICAgICAgY29uc3QgYW5jaG9yID0gbmV3IERPTVJlY3QoXG4gICAgICAgIHBvcy5yZWN0LnggKyBiYXJzW3Zpc2libGVZSW5kZXhdW3hJbmRleF0ueCAtIHBhZGRpbmcsXG4gICAgICAgIHBvcy5yZWN0LnkgKyB5c1t2aXNpYmxlWUluZGV4XSxcbiAgICAgICAgYmFyc1t2aXNpYmxlWUluZGV4XVt4SW5kZXhdLndpZHRoICsgcGFkZGluZyAqIDIsXG4gICAgICAgICh2aXNpYmxlWUluZGV4ID09IDAgPyB5U2NhbGUoMCkgOiB5c1t2aXNpYmxlWUluZGV4IC0gMV0pIC1cbiAgICAgICAgICB5c1t2aXNpYmxlWUluZGV4XSxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4LFxuICAgICAgICB4SW5kZXgsXG4gICAgICAgIHlzLFxuICAgICAgICB5SW5kZXgsXG4gICAgICAgIHZpc2libGVZSW5kZXgsXG4gICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgbWV0cmljczogdW5zdGFja2VkRGF0YS55c1xuICAgICAgICAgICAgLm1hcCgoeSwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgIGNvbG9yOiBjb2xvcnNbaW5kZXggJSBjb2xvcnMubGVuZ3RoXSxcbiAgICAgICAgICAgICAgbGFiZWw6IHkubGFiZWwsXG4gICAgICAgICAgICAgIHZhbHVlOiBmdWxsUGlwZS50cmFuc2Zvcm0oeS52YWx1ZXNbeEluZGV4XSkgPz8gJy0nLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKChfLCBpKSA9PiBjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgaSA9PSB2aXNpYmxlWUluZGV4KSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgeFRpY2tzLCB5VGlja3MsIGNvbG9ycywgYmFycywgbGluZXM6IFtdLCBhcmVhczogW10sIGhvdmVyIH07XG4gIH1cblxuICBjb25zdCBMRUZUX1BBRERJTkcgPSA0ODtcbiAgY29uc3QgUklHSFRfUEFERElORyA9IDI0O1xuICBjb25zdCBUT1BfUEFERElORyA9IDEyO1xuICBjb25zdCBCT1RUT01fUEFERElORyA9IDI0O1xuXG4gIGV4cG9ydCB0eXBlIERhdGEgPSB7XG4gICAgeXM6IHtcbiAgICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgICBoaWRkZW4/OiBib29sZWFuO1xuICAgICAgdmFsdWVzOiBudW1iZXJbXTtcbiAgICB9W107XG4gICAgeDogbnVtYmVyW107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgRGltZW5zaW9ucyA9IHtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIENvbmZpZyA9IHtcbiAgICB0eXBlOiAnbGluZScgfCAnYXJlYScgfCAnYmFyJztcbiAgICBncm91cGVkVG9vbHRpcDogYm9vbGVhbjtcbiAgICBjb2xvcnM6IHN0cmluZ1tdO1xuICAgIGFsbG93TGVnZW5kVG9nZ2xlOiBib29sZWFuO1xuICAgIHplcm9TdGF0ZU1lc3NhZ2U6IHN0cmluZztcbiAgICB2YWx1ZVR5cGU6IFZhbHVlVHlwZTtcbiAgfTtcblxuICBleHBvcnQgY29uc3QgZGVmYXVsdENvbmZpZzogQ29uZmlnID0ge1xuICAgIHR5cGU6ICdsaW5lJyxcbiAgICBncm91cGVkVG9vbHRpcDogdHJ1ZSxcbiAgICBjb2xvcnM6IGRlZmF1bHRDb2xvclBhbGV0dGUsXG4gICAgYWxsb3dMZWdlbmRUb2dnbGU6IGZhbHNlLFxuICAgIHplcm9TdGF0ZU1lc3NhZ2U6ICdObyBkYXRhIHRvIGRpc3BsYXkuJyxcbiAgICB2YWx1ZVR5cGU6ICdjdXJyZW5jeScsXG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgQXJlYSA9IHtcbiAgICBwYXRoOiBzdHJpbmcgfCBudWxsO1xuICAgIGZpbGw6IHN0cmluZztcbiAgfTtcblxuICBleHBvcnQgdHlwZSBYVGljayA9IHtcbiAgICB4OiBudW1iZXI7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgfTtcblxuICBleHBvcnQgdHlwZSBZVGljayA9IHtcbiAgICB5OiBudW1iZXI7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgfTtcblxuICB0eXBlIFJlY3QgPSB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEJhclNlcmllcyA9IHtcbiAgICBmaWxsOiBzdHJpbmc7XG4gICAgcmVjdHM6IFJlY3RbXTtcbiAgfTtcblxuICAvLyBIb3ZlciBpcyBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2aWV3cG9ydCB4IGFuZCB5IGFuZCByZXR1cm5zIGEgcmljaFxuICAvLyBzZXQgb2YgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB2YWx1ZXMgYXJlIGJlaW5nIGhvdmVyZWQgYW5kIHdoYXQgdGhlIHRvb2x0aXBcbiAgLy8gc2hvdWxkIGxvb2sgbGlrZVxuICBleHBvcnQgdHlwZSBIb3ZlciA9IChwb3M6IHsgcmVjdDogRE9NUmVjdDsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSkgPT4ge1xuICAgIC8vIHRoZSBpbmRpY2VzIGludG8gdGhlIGRhdGEgb2YgdGhlIGNsb3Nlc3QgcG9pbnRcbiAgICB4SW5kZXg6IG51bWJlcjtcbiAgICAvLyB3ZSB3YW50IHRvIGtub3cgd2hpY2ggdmlzaWJsZSB5IGluZGV4IGlzIGhvdmVyZWRcbiAgICAvLyBhbmQgd2hpY2ggYWN0dWFsIHkgaW5kZXggaXMgaG92ZXJlZFxuICAgIHlJbmRleDogbnVtYmVyO1xuICAgIHZpc2libGVZSW5kZXg6IG51bWJlcjtcblxuICAgIC8vIHRoZSB2aWV3cG9ydCB4IGFuZCB5cyBvZiB0aGUgaG92ZXJlZCBpdGVtc1xuICAgIHg6IG51bWJlcjtcbiAgICB5czogbnVtYmVyW107XG5cbiAgICB0b29sdGlwOiB7XG4gICAgICBhbmNob3I6IERPTVJlY3Q7XG4gICAgICBtZXRyaWNzOiB7XG4gICAgICAgIGNvbG9yOiBzdHJpbmc7XG4gICAgICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgICB9W107XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZW5kZXJlZENoYXJ0IHJlcHJlc2VudHMgYWxsIG9mIHRoZSBwYXJ0cyBvZiBhIGNoYXJ0XG4gIC8vIHRoYXQgZW5kIHVwIG9uIHNjcmVlbi4gRXZlcnkgY2hhcnQgaGFzIHggYW5kIHkgdGlja3NcbiAgLy8gYW5kIGhvdmVyIGZ1bmN0aW9uYWxpdHksIGV2ZW4gdGhvdWdoIHRoZXkgbWlnaHQgYmVcbiAgLy8gZGlmZmVyZW50IGZyb20gY2hhcnQgdG8gY2hhcnQuXG4gIHR5cGUgUmVuZGVyZWRDaGFydCA9IHtcbiAgICB4VGlja3M6IFhUaWNrW107XG4gICAgeVRpY2tzOiBZVGlja1tdO1xuICAgIGhvdmVyOiBIb3ZlcjtcbiAgICBjb2xvcnM6IHN0cmluZ1tdO1xuICAgIGxpbmVzOiAoc3RyaW5nIHwgbnVsbClbXTtcbiAgICBhcmVhczogKHN0cmluZyB8IG51bGwpW107XG4gICAgYmFyczogUmVjdFtdW107XG4gIH07XG5cbiAgZnVuY3Rpb24gdGltZXNlcmllc0RvbWFpbihkYXRhOiBEYXRhKSB7XG4gICAgcmV0dXJuIFtNYXRoLm1pbiguLi5kYXRhLngpLCBNYXRoLm1heCguLi5kYXRhLngpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHlEb21haW4oZGF0YTogRGF0YSkge1xuICAgIHJldHVybiBbMCwgTWF0aC5tYXgoLi4uZGF0YS55cy5tYXAoeSA9PiBNYXRoLm1heCguLi55LnZhbHVlcykpKV07XG4gIH1cblxuICBmdW5jdGlvbiB4UmFuZ2UoZGltZW5zaW9uczogRGltZW5zaW9ucykge1xuICAgIHJldHVybiBbTEVGVF9QQURESU5HLCBkaW1lbnNpb25zLndpZHRoIC0gUklHSFRfUEFERElOR107XG4gIH1cblxuICBmdW5jdGlvbiBiYXJYUmFuZ2UoZGltZW5zaW9uczogRGltZW5zaW9ucywgZGF0YTogRGF0YSkge1xuICAgIGNvbnN0IGxlZnQgPSBMRUZUX1BBRERJTkc7XG4gICAgY29uc3QgcmlnaHQgPSBkaW1lbnNpb25zLndpZHRoIC0gUklHSFRfUEFERElORztcbiAgICBjb25zdCB3aWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgICBjb25zdCBiaW5TaXplID0gd2lkdGggLyAoZGF0YS54Lmxlbmd0aCB8fCAxKTtcbiAgICBjb25zdCBoYWxmQmluU2l6ZSA9IGJpblNpemUgLyAyO1xuICAgIGNvbnN0IHJhbmdlID0gW2xlZnQgKyBoYWxmQmluU2l6ZSwgcmlnaHQgLSBoYWxmQmluU2l6ZV07XG4gICAgcmV0dXJuIHsgYmluU2l6ZTogTWF0aC5taW4oYmluU2l6ZSAqIDAuNywgODApLCByYW5nZSB9O1xuICB9XG5cbiAgZnVuY3Rpb24geVJhbmdlKGRpbWVuc2lvbnM6IERpbWVuc2lvbnMpIHtcbiAgICByZXR1cm4gW2RpbWVuc2lvbnMuaGVpZ2h0IC0gQk9UVE9NX1BBRERJTkcsIFRPUF9QQURESU5HXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmROZWFyZXN0SW5kZXgodmFsdWVzOiBudW1iZXJbXSwgaW5wdXQ6IG51bWJlcikge1xuICAgIHJldHVybiB2YWx1ZXMucmVkdWNlKChuZWFyZXN0SW5kZXgsIHZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIE1hdGguYWJzKHZhbHVlIC0gaW5wdXQpIDwgTWF0aC5hYnModmFsdWVzW25lYXJlc3RJbmRleF0gLSBpbnB1dClcbiAgICAgICAgPyBpbmRleFxuICAgICAgICA6IG5lYXJlc3RJbmRleDtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8vIHN0YWNrIHJldHVybnMgYSBuZXcgZGF0YSB3aGVyZSBlYWNoIHNldCBvZiB5VmFsdWVzIGlzIHN0YWNrZWRcbiAgLy8gb24gdG9wIG9mIHRoZSBwcmV2aW91cy5cbiAgZnVuY3Rpb24gc3RhY2soZGF0YTogRGF0YSk6IERhdGEge1xuICAgIGNvbnN0IHN0YWNrZWQ6IERhdGEgPSB7XG4gICAgICAuLi5kYXRhLFxuICAgICAgeXM6IGRhdGEueXMubWFwKHkgPT4gKHsgbGFiZWw6IHkubGFiZWwsIHZhbHVlczogW10gfSkpLFxuICAgIH07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBmcm9tID0gMDtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZGF0YS55cy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCB0byA9IGZyb20gKyBkYXRhLnlzW2pdLnZhbHVlc1tpXTtcbiAgICAgICAgc3RhY2tlZC55c1tqXS52YWx1ZXMucHVzaCh0byk7XG4gICAgICAgIGZyb20gPSB0bztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0YWNrZWQ7XG4gIH1cblxuICAvLyBoaWRlIHN0cmlwcyBvdXQgaGlkZGVuIHkgdmFsdWVzIHdoaWxlIHJldGFpbmluZyB0aGUgb3JpZ2luYWwgaW5kaWNlc1xuICAvLyBmb3IgdGhlIHJlbWFpbmluZyB2aXNpYmxlIHZhbHVlc1xuICBmdW5jdGlvbiBoaWRlKGRhdGE6IERhdGEpOiB7IGRhdGE6IERhdGE7IHZpc2libGVJbmRpY2VzOiBudW1iZXJbXSB9IHtcbiAgICBjb25zdCB2aXNpYmxlSW5kaWNlcyA9IGRhdGEueXNcbiAgICAgIC5tYXAoKHksIGkpID0+ICh7IHksIGkgfSkpXG4gICAgICAuZmlsdGVyKCh7IHkgfSkgPT4gIXkuaGlkZGVuKVxuICAgICAgLm1hcCgoeyBpIH0pID0+IGkpO1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiB7IC4uLmRhdGEsIHlzOiB2aXNpYmxlSW5kaWNlcy5tYXAoaSA9PiBkYXRhLnlzW2ldKSB9LFxuICAgICAgdmlzaWJsZUluZGljZXMsXG4gICAgfTtcbiAgfVxuXG4gIHR5cGUgVmFsdWVUeXBlID0gJ2NvdW50JyB8ICdjdXJyZW5jeScgfCAncGVyY2VudGFnZSc7XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldFBpcGVzKHZhbHVlVHlwZTogVmFsdWVUeXBlKSB7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgJ2NvdW50Jzoge1xuICAgICAgICBjb25zdCBwaXBlID0gbmV3IE51bWJlclBpcGUoKTtcbiAgICAgICAgcmV0dXJuIHsgcGlwZSwgZnVsbFBpcGU6IHBpcGUgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2N1cnJlbmN5JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwaXBlOiBuZXcgU21hbGxDdXJyZW5jeVBpcGUoKSxcbiAgICAgICAgICBmdWxsUGlwZTogbmV3IEN1cnJlbmN5UGlwZSgnZW4tdXMnKSxcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ3BlcmNlbnRhZ2UnOiB7XG4gICAgICAgIGNvbnN0IHBpcGUgPSBuZXcgUGVyY2VudGFnZVBpcGUoKTtcbiAgICAgICAgcmV0dXJuIHsgcGlwZSwgZnVsbFBpcGU6IHBpcGUgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|