@bizdoc/core 2.3.40 → 2.3.41
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/esm2022/lib/core/fields/timespan.field.mjs +6 -3
- package/esm2022/lib/cube/accum/accum.component.mjs +4 -3
- package/esm2022/lib/cube/chart/chart.component.mjs +2 -2
- package/esm2022/lib/cube/cube-view.component.mjs +3 -2
- package/esm2022/lib/cube/spreadsheet/spreadsheet.component.mjs +3 -7
- package/esm2022/lib/cube/spreadsheet/{spreadsheet.container.mjs → spreadsheet.container.exp.mjs} +1 -1
- package/esm2022/lib/modules/chart.module.mjs +3 -3
- package/esm2022/lib/notifications/notifications.pane.component.mjs +3 -2
- package/esm2022/lib/reports/cube/performance-wind.component.mjs +273 -0
- package/esm2022/lib/shared.module.mjs +3 -3
- package/esm2022/public-api.mjs +2 -2
- package/fesm2022/bizdoc-core.mjs +193 -107
- package/fesm2022/bizdoc-core.mjs.map +1 -1
- package/lib/core/fields/timespan.field.d.ts +1 -1
- package/lib/notifications/notifications.pane.component.d.ts +1 -1
- package/lib/reports/cube/performance-wind.component.d.ts +86 -0
- package/lib/shared.module.d.ts +2 -2
- package/package.json +1 -1
- package/public-api.d.ts +1 -1
- package/esm2022/lib/reports/cube/role-performance.component.mjs +0 -187
- package/lib/reports/cube/role-performance.component.d.ts +0 -58
- /package/lib/cube/spreadsheet/{spreadsheet.container.d.ts → spreadsheet.container.exp.d.ts} +0 -0
@@ -0,0 +1,273 @@
|
|
1
|
+
import { __decorate } from "tslib";
|
2
|
+
import { Component, ViewChild } from '@angular/core';
|
3
|
+
import { ChartComponent } from '@syncfusion/ej2-angular-charts';
|
4
|
+
import { Workbook } from '@syncfusion/ej2-excel-export';
|
5
|
+
import { Subject, startWith, takeUntil } from 'rxjs';
|
6
|
+
/// <reference path="./node_modules/dayjs/plugin/duration.d.ts" />
|
7
|
+
import dayjs from 'dayjs';
|
8
|
+
import { BizDoc } from '../../core/decorators';
|
9
|
+
import { FONT_FAMILY } from '../../core/colors';
|
10
|
+
import * as i0 from "@angular/core";
|
11
|
+
import * as i1 from "../../core/router";
|
12
|
+
import * as i2 from "../../core/account.service";
|
13
|
+
import * as i3 from "../../core/session.service";
|
14
|
+
import * as i4 from "../../core/translate.service";
|
15
|
+
import * as i5 from "../report-ref";
|
16
|
+
import * as i6 from "@syncfusion/ej2-angular-circulargauge";
|
17
|
+
import * as i7 from "@syncfusion/ej2-angular-charts";
|
18
|
+
import * as i8 from "@syncfusion/ej2-angular-lineargauge";
|
19
|
+
import * as i9 from "../../core/pipes/translate.pipe";
|
20
|
+
let PerformanceWindComponent = class PerformanceWindComponent {
|
21
|
+
constructor(_router, _accounts, _session, _translate, _reportRef) {
|
22
|
+
this._router = _router;
|
23
|
+
this._accounts = _accounts;
|
24
|
+
this._session = _session;
|
25
|
+
this._translate = _translate;
|
26
|
+
this._reportRef = _reportRef;
|
27
|
+
this.margin = { left: 20, right: 20 };
|
28
|
+
this.legendSettings = {
|
29
|
+
position: 'Left',
|
30
|
+
visible: false,
|
31
|
+
//isInversed: this._session.inverse,
|
32
|
+
enablePages: true,
|
33
|
+
enableHighlight: true,
|
34
|
+
};
|
35
|
+
this.tooltip = {
|
36
|
+
enable: true,
|
37
|
+
textStyle: {
|
38
|
+
fontFamily: FONT_FAMILY
|
39
|
+
}
|
40
|
+
};
|
41
|
+
this.titleStyle = {
|
42
|
+
fontFamily: FONT_FAMILY
|
43
|
+
};
|
44
|
+
this.primaryXAxis = { valueType: 'Double' };
|
45
|
+
this.primaryYAxis = {};
|
46
|
+
this.linearTooltip = {
|
47
|
+
enable: true,
|
48
|
+
textStyle: {
|
49
|
+
fontFamily: FONT_FAMILY
|
50
|
+
}
|
51
|
+
};
|
52
|
+
this.linearTitleStyle = {
|
53
|
+
fontFamily: FONT_FAMILY,
|
54
|
+
fontWeight: '300',
|
55
|
+
size: '12px',
|
56
|
+
};
|
57
|
+
this.line = {
|
58
|
+
width: 5
|
59
|
+
};
|
60
|
+
this.majorTicks = {
|
61
|
+
//interval: 20,
|
62
|
+
height: 6, width: 1
|
63
|
+
};
|
64
|
+
this.minorTicks = {
|
65
|
+
//interval: 10,
|
66
|
+
height: 3
|
67
|
+
};
|
68
|
+
this.labelStyle = {
|
69
|
+
font: { size: '0' },
|
70
|
+
format: 'p1',
|
71
|
+
};
|
72
|
+
this.standardMarker = {
|
73
|
+
visible: true,
|
74
|
+
shape: 'Triangle',
|
75
|
+
width: 5,
|
76
|
+
height: 5
|
77
|
+
};
|
78
|
+
this.marker = {
|
79
|
+
visible: true,
|
80
|
+
width: 5,
|
81
|
+
height: 5,
|
82
|
+
shape: 'Pentagon',
|
83
|
+
};
|
84
|
+
this.inverse = this._session.inverse;
|
85
|
+
this.actions = {};
|
86
|
+
this._destroy = new Subject();
|
87
|
+
_session.profile.actions.forEach(a => this.actions[a.name] = a);
|
88
|
+
_session.themeChange.pipe(takeUntil(this._destroy), startWith(_session.theme)).subscribe(t => {
|
89
|
+
this.theme = t.dark ? 'Material3Dark' : 'Material3';
|
90
|
+
this.accentColor = this._session.getAccent(900);
|
91
|
+
this.primeryColor = this._session.getPrimery();
|
92
|
+
this.chart?.refreshAxis();
|
93
|
+
});
|
94
|
+
}
|
95
|
+
onBind(data) {
|
96
|
+
this.records = null;
|
97
|
+
if (!data.length)
|
98
|
+
return;
|
99
|
+
this.durationMax = 0, this.durationMin = 0;
|
100
|
+
let accumStd = 0, stdCount = 0, accumDuration = 0, maxStd = 0, map = {};
|
101
|
+
this.standards = [];
|
102
|
+
data.forEach(e => {
|
103
|
+
let accumStd1 = 0, stdCount1 = 0, accumDuration1 = 0;
|
104
|
+
e.items.forEach(e => {
|
105
|
+
if (e.standardTime) {
|
106
|
+
if (e.standardTime > maxStd)
|
107
|
+
maxStd = e.standardTime;
|
108
|
+
stdCount1++;
|
109
|
+
accumStd1 += e.standardTime;
|
110
|
+
this.standards.push(e);
|
111
|
+
}
|
112
|
+
if (e.duration > this.durationMax)
|
113
|
+
this.durationMax = e.duration;
|
114
|
+
if (e.duration < this.durationMin || this.durationMin === 0)
|
115
|
+
this.durationMin = e.duration;
|
116
|
+
accumDuration1 += e.duration;
|
117
|
+
});
|
118
|
+
const durationAvg = accumDuration1 / data.length, standardAvg = stdCount1 ? accumStd1 / stdCount1 : 0;
|
119
|
+
map[e.userId] = {
|
120
|
+
items: e.items,
|
121
|
+
standardAvg,
|
122
|
+
durationAvg,
|
123
|
+
};
|
124
|
+
accumDuration += durationAvg;
|
125
|
+
if (stdCount1) {
|
126
|
+
stdCount++;
|
127
|
+
accumStd += standardAvg;
|
128
|
+
}
|
129
|
+
});
|
130
|
+
this.standards = this.standards.
|
131
|
+
sort((e1, e2) => e1.standardTime < e2.standardTime ? -1 : 1);
|
132
|
+
this.standardAvg = stdCount ? accumStd / stdCount : 0,
|
133
|
+
this.durationAvg = accumDuration / data.length;
|
134
|
+
this._accounts.getAll(data.map(e => e.userId)).
|
135
|
+
subscribe(users => {
|
136
|
+
this.deviationMax = 0, this.deviationMin = 0;
|
137
|
+
this.records = [];
|
138
|
+
users.forEach(u => {
|
139
|
+
const info = map[u.id], value = Math.round(info.durationAvg /
|
140
|
+
(info.standardAvg || this.durationAvg)), deviation = value > 1 ? (value - 1) * 100 : -value * 100;
|
141
|
+
info.deviation = deviation;
|
142
|
+
if (deviation > this.deviationMax)
|
143
|
+
this.deviationMax = deviation;
|
144
|
+
if (deviation < this.deviationMin || this.deviationMin === 0)
|
145
|
+
this.deviationMin = deviation;
|
146
|
+
this.records.push({
|
147
|
+
name: u.name,
|
148
|
+
...info,
|
149
|
+
deviation
|
150
|
+
});
|
151
|
+
});
|
152
|
+
const colors = this._session.accentPalette;
|
153
|
+
this.palettes = [this.primeryColor,
|
154
|
+
...colors
|
155
|
+
];
|
156
|
+
while (this.records.length > this.palettes.length)
|
157
|
+
this.palettes.push(...colors);
|
158
|
+
this.title = this._translate.get('AverageValue', dayjs.duration(this.durationAvg, 'seconds').format('DD:HH:mm')),
|
159
|
+
this.subTitle = this.standardAvg ?
|
160
|
+
this._translate.get('StandardValue', dayjs.duration(this.standardAvg, 'seconds').format('DD:HH:mm')) : null;
|
161
|
+
});
|
162
|
+
}
|
163
|
+
linearTooltipRender(evt) {
|
164
|
+
const index = evt.axis.pointers.indexOf(evt.pointer);
|
165
|
+
evt.content = this._translate.get(index === 0 ? 'AverageValue' : 'StandardValue', dayjs.duration(evt.pointer.value, 's').format('DD:HH:mm'));
|
166
|
+
}
|
167
|
+
highlight(index) {
|
168
|
+
this.chart.highlightModule.clusterSelection(this.chart, { series: index + 1, point: 0 });
|
169
|
+
}
|
170
|
+
onExport() {
|
171
|
+
const book = new Workbook({
|
172
|
+
worksheets: [
|
173
|
+
{
|
174
|
+
enableRtl: this._session.inverse,
|
175
|
+
name: this._translate.get('SheetN', 1),
|
176
|
+
columns: [
|
177
|
+
{ index: 1, width: 250 },
|
178
|
+
{ index: 2, width: 150 },
|
179
|
+
{ index: 3, width: 150 },
|
180
|
+
],
|
181
|
+
rows: [{
|
182
|
+
index: 1,
|
183
|
+
cells: [{
|
184
|
+
index: 1,
|
185
|
+
type: 'text',
|
186
|
+
value: this._translate.get('Name'),
|
187
|
+
bold: true
|
188
|
+
}, {
|
189
|
+
index: 2,
|
190
|
+
type: 'text',
|
191
|
+
value: this._translate.get('Duration'),
|
192
|
+
bold: true
|
193
|
+
}, {
|
194
|
+
index: 3,
|
195
|
+
type: 'text',
|
196
|
+
value: this._translate.get('Deviation'),
|
197
|
+
bold: true
|
198
|
+
},
|
199
|
+
]
|
200
|
+
}, ...this.records.map((r, i) => ({
|
201
|
+
index: 2 + i,
|
202
|
+
cells: [
|
203
|
+
{
|
204
|
+
type: 'text',
|
205
|
+
index: 1,
|
206
|
+
value: r.name,
|
207
|
+
style: {
|
208
|
+
hAlign: 'left'
|
209
|
+
}
|
210
|
+
},
|
211
|
+
{
|
212
|
+
type: 'text',
|
213
|
+
index: 2,
|
214
|
+
value: dayjs.duration(r.durationAvg, 's').format('DD:HH:mm'),
|
215
|
+
style: {
|
216
|
+
hAlign: 'right',
|
217
|
+
}
|
218
|
+
},
|
219
|
+
{
|
220
|
+
type: 'number',
|
221
|
+
index: 3,
|
222
|
+
value: r.deviation,
|
223
|
+
style: {
|
224
|
+
hAlign: 'right',
|
225
|
+
}
|
226
|
+
}
|
227
|
+
]
|
228
|
+
}))],
|
229
|
+
},
|
230
|
+
],
|
231
|
+
}, 'xlsx');
|
232
|
+
book.save(`${this._reportRef.name}.xlsx`);
|
233
|
+
}
|
234
|
+
tooltipRender(evt) {
|
235
|
+
evt.text = dayjs.duration(evt.data.pointY, 's').format('DD:HH:mm');
|
236
|
+
}
|
237
|
+
labelRender(evt) {
|
238
|
+
switch (evt.axis.name) {
|
239
|
+
case 'primaryYAxis':
|
240
|
+
evt.text = dayjs.duration(evt.value, 's').humanize();
|
241
|
+
break;
|
242
|
+
case 'primaryXAxis':
|
243
|
+
evt.text = dayjs(evt.value * 1000).format('MMM YYYY');
|
244
|
+
break;
|
245
|
+
}
|
246
|
+
}
|
247
|
+
explore(evt) {
|
248
|
+
const { pointIndex, seriesIndex } = evt;
|
249
|
+
if (seriesIndex === 0)
|
250
|
+
return;
|
251
|
+
const { documentId } = this.chart.series[seriesIndex].dataSource[pointIndex];
|
252
|
+
this._router.navigate(['mailbox', 'd', documentId.encodeId()]);
|
253
|
+
}
|
254
|
+
ngOnDestroy() {
|
255
|
+
this._destroy.next();
|
256
|
+
}
|
257
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: PerformanceWindComponent, deps: [{ token: i1.RouterImpl }, { token: i2.AccountService }, { token: i3.SessionService }, { token: i4.TranslateService }, { token: i5.ReportRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
258
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.2", type: PerformanceWindComponent, selector: "ng-component", viewQueries: [{ propertyName: "chart", first: true, predicate: ChartComponent, descendants: true }], ngImport: i0, template: " @if(records) {\r\n<div class=\"row\">\r\n <div class=\"legend\">\r\n @for (r of records; track r; let i = $index) {\r\n <div (mouseover)=\"highlight(i)\">\r\n <ejs-lineargauge style=\"display: block\" background=\"transparent\" orientation=\"Horizontal\" [theme]=\"theme\"\r\n [tooltip]=\"linearTooltip\" width=\"190px\" height=\"45px\" [title]=\"r.name\"\r\n [titleStyle]=\"linearTitleStyle\" (tooltipRender)=\"linearTooltipRender($event)\">\r\n <e-axes>\r\n <e-axis [minimum]='durationMin - 1' [maximum]='durationMax + 1' [minorTicks]=\"minorTicks\" [majorTicks]=\"majorTicks\"\r\n [labelStyle]=\"labelStyle\" [line]=\"line\" format='p1'>\r\n <e-pointers>\r\n <e-pointer [value]=\"r.durationAvg\"\r\n [height]=7\r\n [width]=7\r\n type='Marker'\r\n [color]='accentColor'\r\n position='Outside' [animationDuration]=\"1500\"></e-pointer>\r\n @if(r.standardAvg)\r\n {\r\n <e-pointer markerType='Rectangle'\r\n [value]=\"r.standardAvg\"\r\n position='Cross'\r\n [width]=\"2\"\r\n [height]=\"6\"\r\n [color]=\"primeryColor\"></e-pointer>\r\n }\r\n </e-pointers>\r\n </e-axis>\r\n </e-axes>\r\n </ejs-lineargauge>\r\n </div>\r\n }\r\n </div>\r\n <ejs-chart style=\"flex: 1; display: block\" [theme]=\"theme\"\r\n [margin]=\"margin\"\r\n selectionMode='Series'\r\n [title]=\"title\"\r\n [titleStyle]=\"titleStyle\"\r\n [subTitle]=\"subTitle\"\r\n [subTitleStyle]=\"titleStyle\"\r\n [tooltip]=\"tooltip\"\r\n [enableAnimation]=\"true\"\r\n (tooltipRender)=\"tooltipRender($event)\"\r\n [legendSettings]=\"legendSettings\"\r\n (axisLabelRender)=\"labelRender($event)\"\r\n [palettes]=\"palettes\"\r\n [enableRtl]=\"inverse\"\r\n height='100%'\r\n highlightMode='Series'\r\n (pointClick)=\"explore($event)\">\r\n <e-series-collection>\r\n <e-series [name]=\"'Standard'|translate\"\r\n xName='date'\r\n yName='standardTime'\r\n type='Polar'\r\n drawType='Line'\r\n [marker]=standardMarker\r\n [dataSource]=standards>\r\n </e-series>\r\n @for(r of records; track r)\r\n {\r\n <e-series [dataSource]='r.items'\r\n [name]='r.name'\r\n type='Polar'\r\n drawType='Line'\r\n [marker]=marker\r\n xName='date'\r\n yName='duration'></e-series>\r\n }\r\n </e-series-collection>\r\n </ejs-chart>\r\n</div>\r\n}\r\n", styles: [":host{flex:1;display:flex}.legend{overflow-y:auto;display:flex;flex-wrap:wrap;max-width:400px}\n"], dependencies: [{ kind: "directive", type: i6.PointerDirective, selector: "e-pointers>e-pointer", inputs: ["animation", "border", "cap", "color", "description", "imageUrl", "linearGradient", "markerHeight", "markerShape", "markerWidth", "needleEndWidth", "needleStartWidth", "needleTail", "offset", "pointerWidth", "position", "radialGradient", "radius", "roundedCornerRadius", "text", "textStyle", "type", "value"] }, { kind: "directive", type: i6.PointersDirective, selector: "ej-circulargauge>e-axes>e-axis>e-pointers" }, { kind: "directive", type: i6.AxisDirective, selector: "e-axes>e-axis", inputs: ["annotations", "background", "direction", "endAngle", "hideIntersectingLabel", "labelStyle", "lineStyle", "majorTicks", "maximum", "minimum", "minorTicks", "pointers", "radius", "rangeGap", "ranges", "roundingPlaces", "showLastLabel", "startAndEndRangeGap", "startAngle"] }, { kind: "directive", type: i6.AxesDirective, selector: "ej-circulargauge>e-axes" }, { kind: "component", type: i7.ChartComponent, selector: "ejs-chart", inputs: ["allowExport", "allowMultiSelection", "annotations", "axes", "background", "backgroundImage", "border", "chartArea", "columns", "crosshair", "currencyCode", "dataSource", "description", "enableAnimation", "enableAutoIntervalOnBothAxis", "enableCanvas", "enableExport", "enablePersistence", "enableRtl", "enableSideBySidePlacement", "height", "highlightColor", "highlightMode", "highlightPattern", "indicators", "isMultiSelect", "isTransposed", "legendSettings", "locale", "margin", "palettes", "primaryXAxis", "primaryYAxis", "rangeColorSettings", "rows", "selectedDataIndexes", "selectionMode", "selectionPattern", "series", "subTitle", "subTitleStyle", "tabIndex", "theme", "title", "titleStyle", "tooltip", "useGroupingSeparator", "width", "zoomSettings"], outputs: ["afterExport", "animationComplete", "annotationRender", "axisLabelClick", "axisLabelRender", "axisMultiLabelRender", "axisRangeCalculated", "beforeExport", "beforePrint", "beforeResize", "chartDoubleClick", "chartMouseClick", "chartMouseDown", "chartMouseLeave", "chartMouseMove", "chartMouseUp", "drag", "dragComplete", "dragEnd", "dragStart", "legendClick", "legendRender", "load", "loaded", "multiLevelLabelClick", "onZooming", "pointClick", "pointDoubleClick", "pointMove", "pointRender", "resized", "scrollChanged", "scrollEnd", "scrollStart", "selectionComplete", "seriesRender", "sharedTooltipRender", "textRender", "tooltipRender", "zoomComplete", "dataSourceChange"] }, { kind: "directive", type: i7.SeriesDirective, selector: "e-series-collection>e-series", inputs: ["animation", "bearFillColor", "binInterval", "border", "boxPlotMode", "bullFillColor", "cardinalSplineTension", "close", "colorName", "columnFacet", "columnSpacing", "columnWidth", "columnWidthInPixel", "connector", "cornerRadius", "dashArray", "dataSource", "dragSettings", "drawType", "emptyPointSettings", "enableComplexProperty", "enableSolidCandles", "enableTooltip", "errorBar", "fill", "groupName", "high", "intermediateSumIndexes", "isClosed", "legendImageUrl", "legendShape", "low", "marker", "maxRadius", "minRadius", "name", "negativeFillColor", "nonHighlightStyle", "opacity", "open", "paretoOptions", "pointColorMapping", "query", "segmentAxis", "segments", "selectionStyle", "showMean", "showNormalDistribution", "size", "splineType", "stackingGroup", "step", "sumIndexes", "summaryFillColor", "tooltipFormat", "tooltipMappingName", "trendlines", "type", "unSelectedStyle", "visible", "volume", "width", "xAxisName", "xName", "yAxisName", "yName", "zOrder"] }, { kind: "directive", type: i7.SeriesCollectionDirective, selector: "ej-chart>e-series-collection" }, { kind: "directive", type: i7.AxisDirective, selector: "e-axes>e-axis", inputs: ["border", "coefficient", "columnIndex", "crossesAt", "crossesInAxis", "crosshairTooltip", "description", "desiredIntervals", "edgeLabelPlacement", "enableAutoIntervalOnZooming", "enableScrollbarOnZooming", "enableTrim", "interval", "intervalType", "isIndexed", "isInversed", "labelFormat", "labelIntersectAction", "labelPadding", "labelPlacement", "labelPosition", "labelRotation", "labelStyle", "lineBreakAlignment", "lineStyle", "logBase", "majorGridLines", "majorTickLines", "maximum", "maximumLabelWidth", "maximumLabels", "minimum", "minorGridLines", "minorTickLines", "minorTicksPerInterval", "multiLevelLabels", "name", "opposedPosition", "placeNextToAxisLine", "plotOffset", "plotOffsetBottom", "plotOffsetLeft", "plotOffsetRight", "plotOffsetTop", "rangePadding", "rowIndex", "scrollbarSettings", "skeleton", "skeletonType", "span", "startAngle", "startFromZero", "stripLines", "tabIndex", "tickPosition", "title", "titlePadding", "titleRotation", "titleStyle", "valueType", "visible", "zoomFactor", "zoomPosition"] }, { kind: "directive", type: i7.AxesDirective, selector: "ejs-chart>e-axes" }, { kind: "component", type: i8.LinearGaugeComponent, selector: "ejs-lineargauge", inputs: ["allowImageExport", "allowMargin", "allowPdfExport", "allowPrint", "animationDuration", "annotations", "axes", "background", "border", "container", "description", "edgeLabelPlacement", "enablePersistence", "enableRtl", "format", "height", "locale", "margin", "orientation", "rangePalettes", "tabIndex", "theme", "title", "titleStyle", "tooltip", "useGroupingSeparator", "width"], outputs: ["animationComplete", "annotationRender", "axisLabelRender", "beforePrint", "dragEnd", "dragMove", "dragStart", "gaugeMouseDown", "gaugeMouseLeave", "gaugeMouseMove", "gaugeMouseUp", "load", "loaded", "resized", "tooltipRender", "valueChange"] }, { kind: "directive", type: i8.PointerDirective, selector: "e-pointers>e-pointer", inputs: ["animationDuration", "border", "color", "description", "enableDrag", "height", "imageUrl", "linearGradient", "markerType", "offset", "opacity", "placement", "position", "radialGradient", "roundedCornerRadius", "text", "textStyle", "type", "value", "width"] }, { kind: "directive", type: i8.PointersDirective, selector: "ej-linear-gauge>e-axes>e-axis>e-pointers" }, { kind: "directive", type: i8.AxisDirective, selector: "e-axes>e-axis", inputs: ["isInversed", "labelStyle", "line", "majorTicks", "maximum", "minimum", "minorTicks", "opposedPosition", "pointers", "ranges", "showLastLabel"] }, { kind: "directive", type: i8.AxesDirective, selector: "ej-lineargauge>e-axes" }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] }); }
|
259
|
+
};
|
260
|
+
PerformanceWindComponent = __decorate([
|
261
|
+
BizDoc({
|
262
|
+
selector: 'bizdoc-performance-wind'
|
263
|
+
})
|
264
|
+
], PerformanceWindComponent);
|
265
|
+
export { PerformanceWindComponent };
|
266
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: PerformanceWindComponent, decorators: [{
|
267
|
+
type: Component,
|
268
|
+
args: [{ template: " @if(records) {\r\n<div class=\"row\">\r\n <div class=\"legend\">\r\n @for (r of records; track r; let i = $index) {\r\n <div (mouseover)=\"highlight(i)\">\r\n <ejs-lineargauge style=\"display: block\" background=\"transparent\" orientation=\"Horizontal\" [theme]=\"theme\"\r\n [tooltip]=\"linearTooltip\" width=\"190px\" height=\"45px\" [title]=\"r.name\"\r\n [titleStyle]=\"linearTitleStyle\" (tooltipRender)=\"linearTooltipRender($event)\">\r\n <e-axes>\r\n <e-axis [minimum]='durationMin - 1' [maximum]='durationMax + 1' [minorTicks]=\"minorTicks\" [majorTicks]=\"majorTicks\"\r\n [labelStyle]=\"labelStyle\" [line]=\"line\" format='p1'>\r\n <e-pointers>\r\n <e-pointer [value]=\"r.durationAvg\"\r\n [height]=7\r\n [width]=7\r\n type='Marker'\r\n [color]='accentColor'\r\n position='Outside' [animationDuration]=\"1500\"></e-pointer>\r\n @if(r.standardAvg)\r\n {\r\n <e-pointer markerType='Rectangle'\r\n [value]=\"r.standardAvg\"\r\n position='Cross'\r\n [width]=\"2\"\r\n [height]=\"6\"\r\n [color]=\"primeryColor\"></e-pointer>\r\n }\r\n </e-pointers>\r\n </e-axis>\r\n </e-axes>\r\n </ejs-lineargauge>\r\n </div>\r\n }\r\n </div>\r\n <ejs-chart style=\"flex: 1; display: block\" [theme]=\"theme\"\r\n [margin]=\"margin\"\r\n selectionMode='Series'\r\n [title]=\"title\"\r\n [titleStyle]=\"titleStyle\"\r\n [subTitle]=\"subTitle\"\r\n [subTitleStyle]=\"titleStyle\"\r\n [tooltip]=\"tooltip\"\r\n [enableAnimation]=\"true\"\r\n (tooltipRender)=\"tooltipRender($event)\"\r\n [legendSettings]=\"legendSettings\"\r\n (axisLabelRender)=\"labelRender($event)\"\r\n [palettes]=\"palettes\"\r\n [enableRtl]=\"inverse\"\r\n height='100%'\r\n highlightMode='Series'\r\n (pointClick)=\"explore($event)\">\r\n <e-series-collection>\r\n <e-series [name]=\"'Standard'|translate\"\r\n xName='date'\r\n yName='standardTime'\r\n type='Polar'\r\n drawType='Line'\r\n [marker]=standardMarker\r\n [dataSource]=standards>\r\n </e-series>\r\n @for(r of records; track r)\r\n {\r\n <e-series [dataSource]='r.items'\r\n [name]='r.name'\r\n type='Polar'\r\n drawType='Line'\r\n [marker]=marker\r\n xName='date'\r\n yName='duration'></e-series>\r\n }\r\n </e-series-collection>\r\n </ejs-chart>\r\n</div>\r\n}\r\n", styles: [":host{flex:1;display:flex}.legend{overflow-y:auto;display:flex;flex-wrap:wrap;max-width:400px}\n"] }]
|
269
|
+
}], ctorParameters: () => [{ type: i1.RouterImpl }, { type: i2.AccountService }, { type: i3.SessionService }, { type: i4.TranslateService }, { type: i5.ReportRef }], propDecorators: { chart: [{
|
270
|
+
type: ViewChild,
|
271
|
+
args: [ChartComponent]
|
272
|
+
}] } });
|
273
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyZm9ybWFuY2Utd2luZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL3JlcG9ydHMvY3ViZS9wZXJmb3JtYW5jZS13aW5kLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvcmVwb3J0cy9jdWJlL3BlcmZvcm1hbmNlLXdpbmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWEsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR2hFLE9BQU8sRUFBRSxjQUFjLEVBQXVCLE1BQU0sZ0NBQWdDLENBQUM7QUFDckYsT0FBTyxFQUFFLFFBQVEsRUFBMEIsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckQsa0VBQWtFO0FBQ2xFLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFRL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7Ozs7OztBQVN6QyxJQUFNLHdCQUF3QixHQUE5QixNQUFNLHdCQUF3QjtJQTRFbkMsWUFDVSxPQUFtQixFQUNuQixTQUF5QixFQUN6QixRQUF3QixFQUN4QixVQUE0QixFQUM1QixVQUErQztRQUovQyxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLGNBQVMsR0FBVCxTQUFTLENBQWdCO1FBQ3pCLGFBQVEsR0FBUixRQUFRLENBQWdCO1FBQ3hCLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLGVBQVUsR0FBVixVQUFVLENBQXFDO1FBbkVoRCxXQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUss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LFFBQVEsRUFBRSxDQUFDO2dCQUNyRCxNQUFNO1lBQ1IsS0FBSyxjQUFjO2dCQUNqQixHQUFHLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdEQsTUFBTTtRQUNWLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxDQUFDLEdBQW9CO1FBQzFCLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQ3hDLElBQUksV0FBVyxLQUFLLENBQUM7WUFBRSxPQUFPO1FBRTlCLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFjLENBQUM7UUFFMUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7OEdBeFFVLHdCQUF3QjtrR0FBeEIsd0JBQXdCLDJGQUN4QixjQUFjLGdEQzFCM0IsMCtGQTBFQTs7QURqRGEsd0JBQXdCO0lBSHBDLE1BQU0sQ0FBQztRQUNOLFFBQVEsRUFBRSx5QkFBeUI7S0FDcEMsQ0FBQztHQUNXLHdCQUF3QixDQXlRcEM7OzJGQXpRWSx3QkFBd0I7a0JBUHBDLFNBQVM7O2dNQVFtQixLQUFLO3NCQUEvQixTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElQb2ludEV2ZW50QXJncywgSVRvb2x0aXBSZW5kZXJFdmVudEFyZ3MsIENoYXJ0LCBJQXhpc0xhYmVsUmVuZGVyRXZlbnRBcmdzLCBMZWdlbmRTZXR0aW5nc01vZGVsLCBUb29sdGlwU2V0dGluZ3NNb2RlbCwgdGl0bGVTZXR0aW5nc01vZGVsLCBNYXJnaW5Nb2RlbCwgU2VyaWVzTWFya2VyTW9kZWwgfSBmcm9tICdAc3luY2Z1c2lvbi9lajItY2hhcnRzJztcclxuaW1wb3J0IHsgVG9vbHRpcFNldHRpbmdzTW9kZWwgYXMgVE1vZGVsLCBJVG9vbHRpcFJlbmRlckV2ZW50QXJncyBhcyBJVFJlbmRlckV2ZW50QXJncywgQXhpc01vZGVsLCBUaWNrTW9kZWwsIExhYmVsTW9kZWwsIExpbmVNb2RlbCwgRm9udE1vZGVsLCBMaW5lYXJHYXVnZSB9IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLWxpbmVhcmdhdWdlJztcclxuaW1wb3J0IHsgQ2hhcnRDb21wb25lbnQsIE1hcmtlclNldHRpbmdzTW9kZWwgfSBmcm9tICdAc3luY2Z1c2lvbi9lajItYW5ndWxhci1jaGFydHMnO1xyXG5pbXBvcnQgeyBXb3JrYm9vaywgV29ya3NoZWV0LCBSb3csIENvbHVtbiB9IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1leGNlbC1leHBvcnQnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBzdGFydFdpdGgsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL2R1cmF0aW9uLmQudHNcIiAvPlxyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xyXG5pbXBvcnQgeyBCaXpEb2MgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMnO1xyXG5pbXBvcnQgeyBSZXBvcnRSZWYgfSBmcm9tICcuLi9yZXBvcnQtcmVmJztcclxuaW1wb3J0IHsgUmVwb3J0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS9iYXNlJztcclxuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2FjY291bnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSb3V0ZXJJbXBsIH0gZnJvbSAnLi4vLi4vY29yZS9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBY3Rpb24sIEF4ZXNNYXAgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3RyYW5zbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRk9OVF9GQU1JTFkgfSBmcm9tICcuLi8uLi9jb3JlL2NvbG9ycyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZVVybDogJ3BlcmZvcm1hbmNlLXdpbmQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAncGVyZm9ybWFuY2Utd2luZC5jb21wb25lbnQuc2NzcycsXHJcbn0pXHJcbkBCaXpEb2Moe1xyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLXBlcmZvcm1hbmNlLXdpbmQnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZXJmb3JtYW5jZVdpbmRDb21wb25lbnQgaW1wbGVtZW50cyBSZXBvcnRDb21wb25lbnQ8RGF0YU1vZGVsPiwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKENoYXJ0Q29tcG9uZW50KSBjaGFydDogQ2hhcnQ7XHJcbiAgZHVyYXRpb25Bdmc6IG51bWJlcjtcclxuICBkdXJhdGlvbk1pbjogbnVtYmVyO1xyXG4gIGR1cmF0aW9uTWF4OiBudW1iZXI7XHJcbiAgZGV2aWF0aW9uTWF4OiBudW1iZXI7XHJcbiAgZGV2aWF0aW9uTWluOiBudW1iZXI7XHJcbiAgc3RhbmRhcmRBdmc6IG51bWJlcjtcclxuICByZWNvcmRzOiBSZWNvcmRNb2RlbFtdO1xyXG4gIHN0YW5kYXJkczogSXRlbU1vZGVsW107XHJcbiAgc3ViVGl0bGU6IHN0cmluZztcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIGFjY2VudENvbG9yOiBzdHJpbmc7XHJcbiAgcHJpbWVyeUNvbG9yOiBzdHJpbmc7XHJcbiAgcmVhZG9ubHkgbWFyZ2luID0geyBsZWZ0OiAyMCwgcmlnaHQ6IDIwIH0gYXMgTWFyZ2luTW9kZWw7XHJcbiAgcmVhZG9ubHkgbGVnZW5kU2V0dGluZ3MgPSB7XHJcbiAgICBwb3NpdGlvbjogJ0xlZnQnLFxyXG4gICAgdmlzaWJsZTogZmFsc2UsXHJcbiAgICAgLy9pc0ludmVyc2VkOiB0aGlzLl9zZXNzaW9uLmludmVyc2UsXHJcbiAgICBlbmFibGVQYWdlczogdHJ1ZSxcclxuICAgIGVuYWJsZUhpZ2hsaWdodDogdHJ1ZSxcclxuICB9IGFzIExlZ2VuZFNldHRpbmdzTW9kZWw7XHJcbiAgcmVhZG9ubHkgdG9vbHRpcCA9IHtcclxuICAgIGVuYWJsZTogdHJ1ZSxcclxuICAgIHRleHRTdHlsZToge1xyXG4gICAgICBmb250RmFtaWx5OiBGT05UX0ZBTUlMWVxyXG4gICAgfVxyXG4gIH0gYXMgVG9vbHRpcFNldHRpbmdzTW9kZWw7XHJcbiAgdGhlbWU6ICdNYXRlcmlhbDMnIHwgJ01hdGVyaWFsM0RhcmsnO1xyXG4gIHJlYWRvbmx5IHRpdGxlU3R5bGUgPSB7XHJcbiAgICBmb250RmFtaWx5OiBGT05UX0ZBTUlMWVxyXG4gIH0gYXMgdGl0bGVTZXR0aW5nc01vZGVsO1xyXG4gIHJlYWRvbmx5IHByaW1hcnlYQXhpcyA9IHsgdmFsdWVUeXBlOiAnRG91YmxlJyB9IGFzIEF4aXNNb2RlbDtcclxuICByZWFkb25seSBwcmltYXJ5WUF4aXMgPSB7fSBhcyBBeGlzTW9kZWw7XHJcbiAgcmVhZG9ubHkgbGluZWFyVG9vbHRpcCA9IHtcclxuICAgIGVuYWJsZTogdHJ1ZSxcclxuICAgIHRleHRTdHlsZToge1xyXG4gICAgICBmb250RmFtaWx5OiBGT05UX0ZBTUlMWVxyXG4gICAgfVxyXG4gIH0gYXMgVE1vZGVsO1xyXG4gIHJlYWRvbmx5IGxpbmVhclRpdGxlU3R5bGUgPSB7XHJcbiAgICBmb250RmFtaWx5OiBGT05UX0ZBTUlMWSxcclxuICAgIGZvbnRXZWlnaHQ6ICczMDAnLFxyXG4gICAgc2l6ZTogJzEycHgnLFxyXG4gIH0gYXMgRm9udE1vZGVsO1xyXG4gIHJlYWRvbmx5IGxpbmUgPSB7XHJcbiAgICB3aWR0aDogNVxyXG4gIH0gYXMgTGluZU1vZGVsO1xyXG4gIHJlYWRvbmx5IG1ham9yVGlja3MgPSB7XHJcbiAgICAvL2ludGVydmFsOiAyMCxcclxuICAgIGhlaWdodDogNiwgd2lkdGg6IDFcclxuICB9IGFzIFRpY2tNb2RlbDtcclxuICByZWFkb25seSBtaW5vclRpY2tzID0ge1xyXG4gICAgLy9pbnRlcnZhbDogMTAsXHJcbiAgICBoZWlnaHQ6IDNcclxuICB9IGFzIFRpY2tNb2RlbDtcclxuICByZWFkb25seSBsYWJlbFN0eWxlID0ge1xyXG4gICAgZm9udDogeyBzaXplOiAnMCcgfSxcclxuICAgIGZvcm1hdDogJ3AxJyxcclxuICB9IGFzIExhYmVsTW9kZWw7XHJcbiAgcmVhZG9ubHkgc3RhbmRhcmRNYXJrZXIgPSB7XHJcbiAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgc2hhcGU6ICdUcmlhbmdsZScsXHJcbiAgICB3aWR0aDogNSxcclxuICAgIGhlaWdodDogNVxyXG4gIH0gYXMgTWFya2VyU2V0dGluZ3NNb2RlbDtcclxuICByZWFkb25seSBtYXJrZXIgPSB7XHJcbiAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgd2lkdGg6IDUsXHJcbiAgICBoZWlnaHQ6IDUsXHJcbiAgICBzaGFwZTogJ1BlbnRhZ29uJyxcclxuICB9IGFzIE1hcmtlclNldHRpbmdzTW9kZWw7XHJcbiAgcmVhZG9ubHkgaW52ZXJzZSA9IHRoaXMuX3Nlc3Npb24uaW52ZXJzZTtcclxuICBwcml2YXRlIGFjdGlvbnM6IHsgW25hbWU6IHN0cmluZ106IEFjdGlvbiB9ID0ge307XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcGFsZXR0ZXM6IHN0cmluZ1tdO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXJJbXBsLFxyXG4gICAgcHJpdmF0ZSBfYWNjb3VudHM6IEFjY291bnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9yZXBvcnRSZWY6IFJlcG9ydFJlZjxQZXJmb3JtYW5jZVNldHRpbmdzTW9kZWw+XHJcbiAgKSB7XHJcbiAgICBfc2Vzc2lvbi5wcm9maWxlLmFjdGlvbnMuZm9yRWFjaChhID0+XHJcbiAgICAgIHRoaXMuYWN0aW9uc1thLm5hbWVdID0gYVxyXG4gICAgKTtcclxuICAgIF9zZXNzaW9uLnRoZW1lQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpLCBzdGFydFdpdGgoX3Nlc3Npb24udGhlbWUpKS5zdWJzY3JpYmUodCA9PiB7XHJcbiAgICAgIHRoaXMudGhlbWUgPSB0LmRhcmsgPyAnTWF0ZXJpYWwzRGFyaycgOiAnTWF0ZXJpYWwzJztcclxuICAgICAgdGhpcy5hY2NlbnRDb2xvciA9IHRoaXMuX3Nlc3Npb24uZ2V0QWNjZW50KDkwMCk7XHJcbiAgICAgIHRoaXMucHJpbWVyeUNvbG9yID0gdGhpcy5fc2Vzc2lvbi5nZXRQcmltZXJ5KCk7XHJcbiAgICAgIHRoaXMuY2hhcnQ/LnJlZnJlc2hBeGlzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgb25CaW5kKGRhdGE6IERhdGFNb2RlbFtdKSB7XHJcbiAgICB0aGlzLnJlY29yZHMgPSBudWxsO1xyXG4gICAgaWYgKCFkYXRhLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgdGhpcy5kdXJhdGlvbk1heCA9IDAsIHRoaXMuZHVyYXRpb25NaW4gPSAwO1xyXG4gICAgbGV0IGFjY3VtU3RkID0gMCwgc3RkQ291bnQgPSAwLCBhY2N1bUR1cmF0aW9uID0gMCwgbWF4U3RkID0gMCxcclxuICAgICAgbWFwOiB7XHJcbiAgICAgICAgW3VzZXJJZDogc3RyaW5nXTogUmVjb3JkTW9kZWxcclxuICAgICAgfSA9IHt9O1xyXG4gICAgdGhpcy5zdGFuZGFyZHMgPSBbXTtcclxuICAgIGRhdGEuZm9yRWFjaChlID0+IHtcclxuICAgICAgbGV0IGFjY3VtU3RkMSA9IDAsIHN0ZENvdW50MSA9IDAsIGFjY3VtRHVyYXRpb24xID0gMDtcclxuICAgICAgZS5pdGVtcy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgIGlmIChlLnN0YW5kYXJkVGltZSkge1xyXG4gICAgICAgICAgaWYgKGUuc3RhbmRhcmRUaW1lID4gbWF4U3RkKVxyXG4gICAgICAgICAgICBtYXhTdGQgPSBlLnN0YW5kYXJkVGltZTtcclxuICAgICAgICAgIHN0ZENvdW50MSsrO1xyXG4gICAgICAgICAgYWNjdW1TdGQxICs9IGUuc3RhbmRhcmRUaW1lO1xyXG4gICAgICAgICAgdGhpcy5zdGFuZGFyZHMucHVzaChlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGUuZHVyYXRpb24gPiB0aGlzLmR1cmF0aW9uTWF4KVxyXG4gICAgICAgICAgdGhpcy5kdXJhdGlvbk1heCA9IGUuZHVyYXRpb247XHJcbiAgICAgICAgaWYgKGUuZHVyYXRpb24gPCB0aGlzLmR1cmF0aW9uTWluIHx8IHRoaXMuZHVyYXRpb25NaW4gPT09IDApXHJcbiAgICAgICAgICB0aGlzLmR1cmF0aW9uTWluID0gZS5kdXJhdGlvbjtcclxuICAgICAgICBhY2N1bUR1cmF0aW9uMSArPSBlLmR1cmF0aW9uO1xyXG4gICAgICB9KTtcclxuICAgICAgY29uc3QgZHVyYXRpb25BdmcgPSBhY2N1bUR1cmF0aW9uMSAvIGRhdGEubGVuZ3RoLCBzdGFuZGFyZEF2ZyA9IHN0ZENvdW50MSA/IGFjY3VtU3RkMSAvIHN0ZENvdW50MSA6IDA7XHJcbiAgICAgIG1hcFtlLnVzZXJJZF0gPSB7XHJcbiAgICAgICAgaXRlbXM6IGUuaXRlbXMsXHJcbiAgICAgICAgc3RhbmRhcmRBdmcsXHJcbiAgICAgICAgZHVyYXRpb25BdmcsXHJcbiAgICAgIH07XHJcbiAgICAgIGFjY3VtRHVyYXRpb24gKz0gZHVyYXRpb25Bdmc7XHJcbiAgICAgIGlmIChzdGRDb3VudDEpIHtcclxuICAgICAgICBzdGRDb3VudCsrO1xyXG4gICAgICAgIGFjY3VtU3RkICs9IHN0YW5kYXJkQXZnO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc3RhbmRhcmRzID0gdGhpcy5zdGFuZGFyZHMuXHJcbiAgICAgIHNvcnQoKGUxLCBlMikgPT4gZTEuc3RhbmRhcmRUaW1lIDwgZTIuc3RhbmRhcmRUaW1lID8gLTEgOiAxKTtcclxuICAgIHRoaXMuc3RhbmRhcmRBdmcgPSBzdGRDb3VudCA/IGFjY3VtU3RkIC8gc3RkQ291bnQgOiAwLFxyXG4gICAgICB0aGlzLmR1cmF0aW9uQXZnID0gYWNjdW1EdXJhdGlvbiAvIGRhdGEubGVuZ3RoO1xyXG4gICAgdGhpcy5fYWNjb3VudHMuZ2V0QWxsKGRhdGEubWFwKGUgPT4gZS51c2VySWQpKS5cclxuICAgICAgc3Vic2NyaWJlKHVzZXJzID0+IHtcclxuICAgICAgICB0aGlzLmRldmlhdGlvbk1heCA9IDAsIHRoaXMuZGV2aWF0aW9uTWluID0gMDtcclxuICAgICAgICB0aGlzLnJlY29yZHMgPSBbXTtcclxuICAgICAgICB1c2Vycy5mb3JFYWNoKHUgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaW5mbyA9IG1hcFt1LmlkXSxcclxuICAgICAgICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKGluZm8uZHVyYXRpb25BdmcgL1xyXG4gICAgICAgICAgICAgIChpbmZvLnN0YW5kYXJkQXZnIHx8IHRoaXMuZHVyYXRpb25BdmcpKSxcclxuICAgICAgICAgICAgZGV2aWF0aW9uID0gdmFsdWUgPiAxID8gKHZhbHVlIC0gMSkgKiAxMDAgOiAtIHZhbHVlICogMTAwO1xyXG4gICAgICAgICAgaW5mby5kZXZpYXRpb24gPSBkZXZpYXRpb247XHJcbiAgICAgICAgICBpZiAoZGV2aWF0aW9uID4gdGhpcy5kZXZpYXRpb25NYXgpXHJcbiAgICAgICAgICAgIHRoaXMuZGV2aWF0aW9uTWF4ID0gZGV2aWF0aW9uO1xyXG4gICAgICAgICAgaWYgKGRldmlhdGlvbiA8IHRoaXMuZGV2aWF0aW9uTWluIHx8IHRoaXMuZGV2aWF0aW9uTWluID09PSAwKVxyXG4gICAgICAgICAgICB0aGlzLmRldmlhdGlvbk1pbiA9IGRldmlhdGlvbjtcclxuICAgICAgICAgIHRoaXMucmVjb3Jkcy5wdXNoKHtcclxuICAgICAgICAgICAgbmFtZTogdS5uYW1lLFxyXG4gICAgICAgICAgICAuLi5pbmZvLFxyXG4gICAgICAgICAgICBkZXZpYXRpb25cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNvbG9ycyA9IHRoaXMuX3Nlc3Npb24uYWNjZW50UGFsZXR0ZTtcclxuICAgICAgICB0aGlzLnBhbGV0dGVzID0gW3RoaXMucHJpbWVyeUNvbG9yLFxyXG4gICAgICAgIC4uLmNvbG9yc1xyXG4gICAgICAgIF07XHJcbiAgICAgICAgd2hpbGUgKHRoaXMucmVjb3Jkcy5sZW5ndGggPiB0aGlzLnBhbGV0dGVzLmxlbmd0aClcclxuICAgICAgICAgIHRoaXMucGFsZXR0ZXMucHVzaCguLi5jb2xvcnMpO1xyXG4gICAgICAgIHRoaXMudGl0bGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBdmVyYWdlVmFsdWUnLCBkYXlqcy5kdXJhdGlvbih0aGlzLmR1cmF0aW9uQXZnLCAnc2Vjb25kcycpLmZvcm1hdCgnREQ6SEg6bW0nKSksXHJcbiAgICAgICAgICB0aGlzLnN1YlRpdGxlID0gdGhpcy5zdGFuZGFyZEF2ZyA/XHJcbiAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1N0YW5kYXJkVmFsdWUnLCBkYXlqcy5kdXJhdGlvbih0aGlzLnN0YW5kYXJkQXZnLCAnc2Vjb25kcycpLmZvcm1hdCgnREQ6SEg6bW0nKSkgOiBudWxsO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgbGluZWFyVG9vbHRpcFJlbmRlcihldnQ6IElUUmVuZGVyRXZlbnRBcmdzKSB7XHJcbiAgICBjb25zdCBpbmRleCA9IGV2dC5heGlzLnBvaW50ZXJzLmluZGV4T2YoZXZ0LnBvaW50ZXIpO1xyXG4gICAgZXZ0LmNvbnRlbnQgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KGluZGV4ID09PSAwID8gJ0F2ZXJhZ2VWYWx1ZScgOiAnU3RhbmRhcmRWYWx1ZScsIGRheWpzLmR1cmF0aW9uKGV2dC5wb2ludGVyLnZhbHVlLCAncycpLmZvcm1hdCgnREQ6SEg6bW0nKSk7XHJcbiAgfVxyXG4gIGhpZ2hsaWdodChpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmNoYXJ0LmhpZ2hsaWdodE1vZHVsZS5jbHVzdGVyU2VsZWN0aW9uKHRoaXMuY2hhcnQsIHsgc2VyaWVzOiBpbmRleCArIDEsIHBvaW50OiAwIH0pO1xyXG4gIH1cclxuICBvbkV4cG9ydCgpIHtcclxuICAgIGNvbnN0IGJvb2sgPSBuZXcgV29ya2Jvb2soXHJcbiAgICAgIHtcclxuICAgICAgICB3b3Jrc2hlZXRzOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGVuYWJsZVJ0bDogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlLFxyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLl90cmFuc2xhdGUuZ2V0KCdTaGVldE4nLCAxKSxcclxuICAgICAgICAgICAgY29sdW1uczogW1xyXG4gICAgICAgICAgICAgIHsgaW5kZXg6IDEsIHdpZHRoOiAyNTAgfSBhcyBDb2x1bW4sXHJcbiAgICAgICAgICAgICAgeyBpbmRleDogMiwgd2lkdGg6IDE1MCB9IGFzIENvbHVtbixcclxuICAgICAgICAgICAgICB7IGluZGV4OiAzLCB3aWR0aDogMTUwIH0gYXMgQ29sdW1uLFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICByb3dzOiBbe1xyXG4gICAgICAgICAgICAgIGluZGV4OiAxLFxyXG4gICAgICAgICAgICAgIGNlbGxzOiBbe1xyXG4gICAgICAgICAgICAgICAgaW5kZXg6IDEsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5fdHJhbnNsYXRlLmdldCgnTmFtZScpLFxyXG4gICAgICAgICAgICAgICAgYm9sZDogdHJ1ZVxyXG4gICAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIGluZGV4OiAyLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0R1cmF0aW9uJyksXHJcbiAgICAgICAgICAgICAgICBib2xkOiB0cnVlXHJcbiAgICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgaW5kZXg6IDMsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5fdHJhbnNsYXRlLmdldCgnRGV2aWF0aW9uJyksXHJcbiAgICAgICAgICAgICAgICBib2xkOiB0cnVlXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0gYXMgUm93LCAuLi50aGlzLnJlY29yZHMubWFwKChyLCBpKSA9PiAoXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaW5kZXg6IDIgKyBpLFxyXG4gICAgICAgICAgICAgICAgY2VsbHM6IFtcclxuICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcclxuICAgICAgICAgICAgICAgICAgICBpbmRleDogMSxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogci5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBoQWxpZ246ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcclxuICAgICAgICAgICAgICAgICAgICBpbmRleDogMixcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZGF5anMuZHVyYXRpb24oci5kdXJhdGlvbkF2ZywgJ3MnKS5mb3JtYXQoJ0REOkhIOm1tJyksXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGhBbGlnbjogJ3JpZ2h0JyxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcclxuICAgICAgICAgICAgICAgICAgICBpbmRleDogMyxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogci5kZXZpYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGhBbGlnbjogJ3JpZ2h0JyxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICAgICAgfSBhcyBSb3dcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXSxcclxuICAgICAgICAgIH0gYXMgV29ya3NoZWV0LFxyXG4gICAgICAgIF0sXHJcbiAgICAgIH0sXHJcbiAgICAgICd4bHN4J1xyXG4gICAgKTtcclxuICAgIGJvb2suc2F2ZShgJHt0aGlzLl9yZXBvcnRSZWYubmFtZX0ueGxzeGApO1xyXG4gIH1cclxuICB0b29sdGlwUmVuZGVyKGV2dDogSVRvb2x0aXBSZW5kZXJFdmVudEFyZ3MpIHtcclxuICAgIGV2dC50ZXh0ID0gZGF5anMuZHVyYXRpb24oZXZ0LmRhdGEucG9pbnRZIGFzIGFueSwgJ3MnKS5mb3JtYXQoJ0REOkhIOm1tJyk7XHJcbiAgfVxyXG4gIGxhYmVsUmVuZGVyKGV2dDogSUF4aXNMYWJlbFJlbmRlckV2ZW50QXJncykge1xyXG4gICAgc3dpdGNoIChldnQuYXhpcy5uYW1lKSB7XHJcbiAgICAgIGNhc2UgJ3ByaW1hcnlZQXhpcyc6XHJcbiAgICAgICAgZXZ0LnRleHQgPSBkYXlqcy5kdXJhdGlvbihldnQudmFsdWUsICdzJykuaHVtYW5pemUoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncHJpbWFyeVhBeGlzJzpcclxuICAgICAgICBldnQudGV4dCA9IGRheWpzKGV2dC52YWx1ZSAqIDEwMDApLmZvcm1hdCgnTU1NIFlZWVknKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbiAgZXhwbG9yZShldnQ6IElQb2ludEV2ZW50QXJncykge1xyXG4gICAgY29uc3QgeyBwb2ludEluZGV4LCBzZXJpZXNJbmRleCB9ID0gZXZ0O1xyXG4gICAgaWYgKHNlcmllc0luZGV4ID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgeyBkb2N1bWVudElkIH0gPSB0aGlzLmNoYXJ0LnNlcmllc1tzZXJpZXNJbmRleF0uZGF0YVNvdXJjZVtwb2ludEluZGV4XSBhcyBJdGVtTW9kZWw7XHJcblxyXG4gICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFsnbWFpbGJveCcsICdkJywgZG9jdW1lbnRJZC5lbmNvZGVJZCgpXSk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveS5uZXh0KCk7XHJcbiAgfVxyXG59XHJcblxyXG5pbnRlcmZhY2UgRGF0YU1vZGVsIHtcclxuICB1c2VySWQ6IHN0cmluZztcclxuICBpdGVtczogSXRlbU1vZGVsW107XHJcbn1cclxuaW50ZXJmYWNlIEl0ZW1Nb2RlbCB7XHJcbiAgZG9jdW1lbnRJZDogbnVtYmVyO1xyXG4gIGRhdGU6IG51bWJlcjtcclxuICBzdGFuZGFyZFRpbWU/OiBudW1iZXI7XHJcbiAgZHVyYXRpb246IG51bWJlcjtcclxuICBpc0ZZSTogYm9vbGVhbjtcclxuICBhY3Rpb25JZDogc3RyaW5nO1xyXG59XHJcbmludGVyZmFjZSBSZWNvcmRNb2RlbCB7XHJcbiAgbmFtZT86IHN0cmluZztcclxuICBkdXJhdGlvbkF2ZzogbnVtYmVyO1xyXG4gIHN0YW5kYXJkQXZnPzogbnVtYmVyO1xyXG4gIGRldmlhdGlvbj86IG51bWJlcjtcclxuICBpdGVtczogSXRlbU1vZGVsW107XHJcbn1cclxuXHJcblxyXG5pbnRlcmZhY2UgUGVyZm9ybWFuY2VTZXR0aW5nc01vZGVsIHtcclxuICBjdWJlPzogc3RyaW5nO1xyXG4gIGZpbHRlcnM/OiBBeGVzTWFwO1xyXG59XHJcbiIsIiBAaWYocmVjb3Jkcykge1xyXG48ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgPGRpdiBjbGFzcz1cImxlZ2VuZFwiPlxyXG4gICAgQGZvciAociBvZiByZWNvcmRzOyB0cmFjayByOyBsZXQgaSA9ICRpbmRleCkge1xyXG4gICAgPGRpdiAobW91c2VvdmVyKT1cImhpZ2hsaWdodChpKVwiPlxyXG4gICAgICA8ZWpzLWxpbmVhcmdhdWdlIHN0eWxlPVwiZGlzcGxheTogYmxvY2tcIiBiYWNrZ3JvdW5kPVwidHJhbnNwYXJlbnRcIiBvcmllbnRhdGlvbj1cIkhvcml6b250YWxcIiBbdGhlbWVdPVwidGhlbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImxpbmVhclRvb2x0aXBcIiB3aWR0aD1cIjE5MHB4XCIgaGVpZ2h0PVwiNDVweFwiIFt0aXRsZV09XCJyLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZVN0eWxlXT1cImxpbmVhclRpdGxlU3R5bGVcIiAodG9vbHRpcFJlbmRlcik9XCJsaW5lYXJUb29sdGlwUmVuZGVyKCRldmVudClcIj5cclxuICAgICAgICA8ZS1heGVzPlxyXG4gICAgICAgICAgPGUtYXhpcyBbbWluaW11bV09J2R1cmF0aW9uTWluIC0gMScgW21heGltdW1dPSdkdXJhdGlvbk1heCArIDEnIFttaW5vclRpY2tzXT1cIm1pbm9yVGlja3NcIiBbbWFqb3JUaWNrc109XCJtYWpvclRpY2tzXCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsU3R5bGVdPVwibGFiZWxTdHlsZVwiIFtsaW5lXT1cImxpbmVcIiBmb3JtYXQ9J3AxJz5cclxuICAgICAgICAgICAgPGUtcG9pbnRlcnM+XHJcbiAgICAgICAgICAgICAgPGUtcG9pbnRlciBbdmFsdWVdPVwici5kdXJhdGlvbkF2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaGVpZ2h0XT03XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbd2lkdGhdPTdcclxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J01hcmtlcidcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09J2FjY2VudENvbG9yJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249J091dHNpZGUnIFthbmltYXRpb25EdXJhdGlvbl09XCIxNTAwXCI+PC9lLXBvaW50ZXI+XHJcbiAgICAgICAgICAgICAgQGlmKHIuc3RhbmRhcmRBdmcpXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIDxlLXBvaW50ZXIgbWFya2VyVHlwZT0nUmVjdGFuZ2xlJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInIuc3RhbmRhcmRBdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249J0Nyb3NzJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3dpZHRoXT1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCI2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJwcmltZXJ5Q29sb3JcIj48L2UtcG9pbnRlcj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZS1wb2ludGVycz5cclxuICAgICAgICAgIDwvZS1heGlzPlxyXG4gICAgICAgIDwvZS1heGVzPlxyXG4gICAgICA8L2Vqcy1saW5lYXJnYXVnZT5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG4gIDxlanMtY2hhcnQgc3R5bGU9XCJmbGV4OiAxOyBkaXNwbGF5OiBibG9ja1wiIFt0aGVtZV09XCJ0aGVtZVwiXHJcbiAgICAgICAgICAgICBbbWFyZ2luXT1cIm1hcmdpblwiXHJcbiAgICAgICAgICAgICBzZWxlY3Rpb25Nb2RlPSdTZXJpZXMnXHJcbiAgICAgICAgICAgICBbdGl0bGVdPVwidGl0bGVcIlxyXG4gICAgICAgICAgICAgW3RpdGxlU3R5bGVdPVwidGl0bGVTdHlsZVwiXHJcbiAgICAgICAgICAgICBbc3ViVGl0bGVdPVwic3ViVGl0bGVcIlxyXG4gICAgICAgICAgICAgW3N1YlRpdGxlU3R5bGVdPVwidGl0bGVTdHlsZVwiXHJcbiAgICAgICAgICAgICBbdG9vbHRpcF09XCJ0b29sdGlwXCJcclxuICAgICAgICAgICAgIFtlbmFibGVBbmltYXRpb25dPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAodG9vbHRpcFJlbmRlcik9XCJ0b29sdGlwUmVuZGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgW2xlZ2VuZFNldHRpbmdzXT1cImxlZ2VuZFNldHRpbmdzXCJcclxuICAgICAgICAgICAgIChheGlzTGFiZWxSZW5kZXIpPVwibGFiZWxSZW5kZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICBbcGFsZXR0ZXNdPVwicGFsZXR0ZXNcIlxyXG4gICAgICAgICAgICAgW2VuYWJsZVJ0bF09XCJpbnZlcnNlXCJcclxuICAgICAgICAgICAgIGhlaWdodD0nMTAwJSdcclxuICAgICAgICAgICAgIGhpZ2hsaWdodE1vZGU9J1NlcmllcydcclxuICAgICAgICAgICAgIChwb2ludENsaWNrKT1cImV4cGxvcmUoJGV2ZW50KVwiPlxyXG4gICAgPGUtc2VyaWVzLWNvbGxlY3Rpb24+XHJcbiAgICAgIDxlLXNlcmllcyBbbmFtZV09XCInU3RhbmRhcmQnfHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICB4TmFtZT0nZGF0ZSdcclxuICAgICAgICAgICAgICAgIHlOYW1lPSdzdGFuZGFyZFRpbWUnXHJcbiAgICAgICAgICAgICAgICB0eXBlPSdQb2xhcidcclxuICAgICAgICAgICAgICAgIGRyYXdUeXBlPSdMaW5lJ1xyXG4gICAgICAgICAgICAgICAgW21hcmtlcl09c3RhbmRhcmRNYXJrZXJcclxuICAgICAgICAgICAgICAgIFtkYXRhU291cmNlXT1zdGFuZGFyZHM+XHJcbiAgICAgIDwvZS1zZXJpZXM+XHJcbiAgICAgIEBmb3IociBvZiByZWNvcmRzOyB0cmFjayByKVxyXG4gICAgICB7XHJcbiAgICAgIDxlLXNlcmllcyBbZGF0YVNvdXJjZV09J3IuaXRlbXMnXHJcbiAgICAgICAgICAgICAgICBbbmFtZV09J3IubmFtZSdcclxuICAgICAgICAgICAgICAgIHR5cGU9J1BvbGFyJ1xyXG4gICAgICAgICAgICAgICAgZHJhd1R5cGU9J0xpbmUnXHJcbiAgICAgICAgICAgICAgICBbbWFya2VyXT1tYXJrZXJcclxuICAgICAgICAgICAgICAgIHhOYW1lPSdkYXRlJ1xyXG4gICAgICAgICAgICAgICAgeU5hbWU9J2R1cmF0aW9uJz48L2Utc2VyaWVzPlxyXG4gICAgICB9XHJcbiAgICA8L2Utc2VyaWVzLWNvbGxlY3Rpb24+XHJcbiAgPC9lanMtY2hhcnQ+XHJcbjwvZGl2PlxyXG59XHJcbiJdfQ==
|