@provoly/dashboard 1.4.0 → 1.4.2
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/store/search/search.service.mjs +10 -4
- package/esm2022/widgets/widget-map/component/widget-map.component.mjs +3 -3
- package/esm2022/widgets/widget-map/interaction/tooltip-manager.class.mjs +51 -54
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +52 -55
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
- package/fesm2022/provoly-dashboard.mjs +9 -3
- package/fesm2022/provoly-dashboard.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/components/_m-tooltip.scss +0 -6
- package/widgets/widget-map/interaction/tooltip-manager.class.d.ts +4 -2
|
@@ -5,8 +5,10 @@ import { TOOLTIP_PADDING } from '../component/widget-map.component';
|
|
|
5
5
|
export class TooltipManager {
|
|
6
6
|
constructor() {
|
|
7
7
|
this.classicFeatures$ = new BehaviorSubject([]);
|
|
8
|
-
this.tooltipIndex = 0;
|
|
9
8
|
this.tooltipNumber = 0;
|
|
9
|
+
this.tooltipDisplayedIndex$ = new BehaviorSubject(0);
|
|
10
|
+
this.previous = '-';
|
|
11
|
+
this.previousPromise = undefined;
|
|
10
12
|
}
|
|
11
13
|
init(tooltipFactoryService, injector, store, subscriptions, widgetSize$, displayHeader$, map, popup, popupContent, interactionManager, parent) {
|
|
12
14
|
this.tooltipFactoryService = tooltipFactoryService;
|
|
@@ -18,11 +20,10 @@ export class TooltipManager {
|
|
|
18
20
|
this.popup = popup;
|
|
19
21
|
this.interactionManager = interactionManager;
|
|
20
22
|
this.wmsFeatures$ = this.store.select(DashboardSelectors.wmsFeatures(this.parent.id));
|
|
21
|
-
subscriptions.add(combineLatest([this.wmsFeatures$, this.classicFeatures$])
|
|
23
|
+
subscriptions.add(combineLatest([this.wmsFeatures$, this.classicFeatures$, this.tooltipDisplayedIndex$])
|
|
22
24
|
.pipe(debounceTime(50), withLatestFrom(widgetSize$, displayHeader$))
|
|
23
|
-
.subscribe(([[wmsFeatures, classicFeatures], size, header]) => {
|
|
25
|
+
.subscribe(([[wmsFeatures, classicFeatures, tooltipIndex], size, header]) => {
|
|
24
26
|
if (map) {
|
|
25
|
-
this.tooltipIndex = 0;
|
|
26
27
|
if (this.popupOverlay !== null) {
|
|
27
28
|
this.clearTooltip();
|
|
28
29
|
}
|
|
@@ -32,17 +33,10 @@ export class TooltipManager {
|
|
|
32
33
|
});
|
|
33
34
|
this.map.addOverlay(this.popupOverlay);
|
|
34
35
|
this.popupContent.clear();
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
classicFeatures.forEach((value) => {
|
|
40
|
-
componentPromises.push(this.generateTooltip(value.values));
|
|
41
|
-
});
|
|
42
|
-
Promise.all(componentPromises).then((promises) => {
|
|
43
|
-
const realComponents = promises.filter((component) => !!component);
|
|
44
|
-
this.tooltipNumber = realComponents.length;
|
|
45
|
-
if (realComponents.length <= 0) {
|
|
36
|
+
const allTooltipValues = [...wmsFeatures, ...classicFeatures.map((cf) => cf.values)];
|
|
37
|
+
this.generateTooltip(allTooltipValues[tooltipIndex]).then((component) => {
|
|
38
|
+
this.tooltipNumber = allTooltipValues.length;
|
|
39
|
+
if (!component) {
|
|
46
40
|
popup.nativeElement.hidden = true;
|
|
47
41
|
this.popupOverlay?.setPosition([-9999999999, -9999999999]);
|
|
48
42
|
}
|
|
@@ -53,17 +47,17 @@ export class TooltipManager {
|
|
|
53
47
|
height: 200 + (header ? WIDGET_HEADER_HEIGHT.value : 0) + TOOLTIP_PADDING,
|
|
54
48
|
width: 300 + TOOLTIP_PADDING
|
|
55
49
|
};
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
pixel[0]
|
|
50
|
+
if (!this.calculatedTooltipPosition) {
|
|
51
|
+
let pixel = this.tooltipEvent?.pixel;
|
|
52
|
+
if (!!pixel && pixel[0] + rect.width > size.width) {
|
|
53
|
+
pixel[0] = size.width - rect.width;
|
|
54
|
+
}
|
|
55
|
+
if (!!pixel && pixel[1] + rect.height > size.height) {
|
|
56
|
+
pixel[1] = size.height - rect.height;
|
|
57
|
+
}
|
|
58
|
+
this.calculatedTooltipPosition = this.map.getCoordinateFromPixel(pixel ?? [0, 0]);
|
|
59
59
|
}
|
|
60
|
-
|
|
61
|
-
pixel[1] = size.height - rect.height;
|
|
62
|
-
}
|
|
63
|
-
setTimeout(() => {
|
|
64
|
-
this.tooltipMove(0);
|
|
65
|
-
}, 10);
|
|
66
|
-
this.popupOverlay?.setPosition(this.map.getCoordinateFromPixel(pixel ?? [0, 0]));
|
|
60
|
+
this.popupOverlay?.setPosition(this.calculatedTooltipPosition);
|
|
67
61
|
}
|
|
68
62
|
});
|
|
69
63
|
}
|
|
@@ -98,6 +92,7 @@ export class TooltipManager {
|
|
|
98
92
|
this.getFeatureFromServer(wmsLayers, event.coordinate);
|
|
99
93
|
}
|
|
100
94
|
this.tooltipEvent = event;
|
|
95
|
+
this.calculatedTooltipPosition = undefined;
|
|
101
96
|
};
|
|
102
97
|
if (this.parent.optionsCopy.tooltipMode !== TooltipMode.NONE) {
|
|
103
98
|
this.parent.map.un('singleclick', popupListener);
|
|
@@ -105,21 +100,33 @@ export class TooltipManager {
|
|
|
105
100
|
}
|
|
106
101
|
}
|
|
107
102
|
generateTooltip(value) {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
103
|
+
if (value) {
|
|
104
|
+
if (this.previous !== JSON.stringify(value)) {
|
|
105
|
+
this.previous = JSON.stringify(value);
|
|
106
|
+
this.previousPromise = new Promise((resolve) => {
|
|
107
|
+
const component$ = this.tooltipFactoryService.generateTooltip(value.oClass, this.injector, this.popupContent);
|
|
108
|
+
this.previousTooltipSub?.unsubscribe();
|
|
109
|
+
this.previousTooltipSub = component$.subscribe((component) => {
|
|
110
|
+
if (component) {
|
|
111
|
+
if (this.previousTooltip) {
|
|
112
|
+
this.previousTooltip.destroy();
|
|
113
|
+
}
|
|
114
|
+
component.instance.data.item = value;
|
|
115
|
+
component.instance.popup = this.popup;
|
|
116
|
+
resolve(component);
|
|
117
|
+
}
|
|
118
|
+
resolve(null);
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
return this.previousPromise;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
return this.previousPromise;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
return Promise.resolve(null);
|
|
129
|
+
}
|
|
123
130
|
}
|
|
124
131
|
clearTooltip(empty = false) {
|
|
125
132
|
if (this.popupOverlay)
|
|
@@ -134,22 +141,12 @@ export class TooltipManager {
|
|
|
134
141
|
}
|
|
135
142
|
tooltipMove(number) {
|
|
136
143
|
if (this.tooltipCanMove(number)) {
|
|
137
|
-
this.
|
|
138
|
-
this.tooltipIndex = this.tooltipIndex + number;
|
|
139
|
-
this.setStyleAsync(this.tooltipIndex, 'block');
|
|
144
|
+
this.tooltipDisplayedIndex$.next(this.tooltipDisplayedIndex$.getValue() + number);
|
|
140
145
|
}
|
|
141
146
|
}
|
|
142
|
-
setStyleAsync(idx, value) {
|
|
143
|
-
setTimeout(() => {
|
|
144
|
-
const targetContainer = this.popupContent.get(idx);
|
|
145
|
-
if (targetContainer) {
|
|
146
|
-
// @ts-ignore
|
|
147
|
-
targetContainer.rootNodes[0].style.display = value;
|
|
148
|
-
}
|
|
149
|
-
}, 100);
|
|
150
|
-
}
|
|
151
147
|
tooltipCanMove(number) {
|
|
152
|
-
return this.
|
|
148
|
+
return (this.tooltipDisplayedIndex$.getValue() + number >= 0 &&
|
|
149
|
+
this.tooltipDisplayedIndex$.getValue() + number < this.tooltipNumber);
|
|
153
150
|
}
|
|
154
151
|
getFeatureFromServer(wmsLayers, pixel) {
|
|
155
152
|
for (const layer of wmsLayers) {
|
|
@@ -188,4 +185,4 @@ export class TooltipManager {
|
|
|
188
185
|
this.previousTooltip?.destroy();
|
|
189
186
|
}
|
|
190
187
|
}
|
|
191
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC1tYW5hZ2VyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtbWFwL2ludGVyYWN0aW9uL3Rvb2x0aXAtbWFuYWdlci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUlsQixXQUFXLEVBQ1gsb0JBQW9CLEVBQ3JCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUE0QixjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUcsT0FBTyxFQUFFLE9BQU8sRUFBd0IsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRTVELE9BQU8sRUFBRSxlQUFlLEVBQXNCLE1BQU0sbUNBQW1DLENBQUM7QUFJeEYsTUFBTSxPQUFPLGNBQWM7SUFBM0I7UUFLRSxxQkFBZ0IsR0FBeUIsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUQsaUJBQVksR0FBRyxDQUFDLENBQUM7UUFLakIsa0JBQWEsR0FBRyxDQUFDLENBQUM7SUFrTzNCLENBQUM7SUExTkMsSUFBSSxDQUNGLHFCQUE0QyxFQUM1QyxRQUFrQixFQUNsQixLQUFZLEVBQ1osYUFBMkIsRUFDM0IsV0FBNkIsRUFDN0IsY0FBOEQsRUFDOUQsR0FBUSxFQUNSLEtBQWlCLEVBQ2pCLFlBQThCLEVBQzlCLGtCQUFzQyxFQUN0QyxNQUEwQjtRQUUxQixJQUFJLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUM7UUFDbkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLEdB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QUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUU7d0JBQzdDLFdBQVcsRUFBRSxLQUFLO3dCQUNsQixXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO3FCQUM1QixDQUFDLENBQ0gsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsZUFBZSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ2xDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpeGVsIH0gZnJvbSAnb2wvcGl4ZWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmLCBJbmplY3RvciwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmFzZVRvb2x0aXBDb21wb25lbnQsXG4gIERhc2hib2FyZEFjdGlvbnMsXG4gIERhc2hib2FyZFNlbGVjdG9ycyxcbiAgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zLFxuICBTaXplLFxuICBUb29sdGlwRmFjdG9yeVNlcnZpY2UsXG4gIFRvb2x0aXBNb2RlLFxuICBXSURHRVRfSEVBREVSX0hFSUdIVFxufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBkZWJvdW5jZVRpbWUsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZlYXR1cmUsIE1hcCwgTWFwQnJvd3NlckV2ZW50LCBPdmVybGF5IH0gZnJvbSAnb2wnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBUT09MVElQX1BBRERJTkcsIFdpZGdldE1hcENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudC93aWRnZXQtbWFwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbk1hbmFnZXIgfSBmcm9tICcuL2ludGVyYWN0aW9uLW1hbmFnZXIuY2xhc3MnO1xuaW1wb3J0IHsgTGF5ZXIgfSBmcm9tICdvbC9sYXllcic7XG5cbmV4cG9ydCBjbGFzcyBUb29sdGlwTWFuYWdlciB7XG4gIHByaXZhdGUgdG9vbHRpcEZhY3RvcnlTZXJ2aWNlITogVG9vbHRpcEZhY3RvcnlTZXJ2aWNlO1xuICBwcml2YXRlIGluamVjdG9yITogSW5qZWN0b3I7XG4gIHByaXZhdGUgc3RvcmUhOiBTdG9yZTtcbiAgd21zRmVhdHVyZXMkITogT2JzZXJ2YWJsZTxhbnlbXT47XG4gIGNsYXNzaWNGZWF0dXJlcyQ6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG4gIHB1YmxpYyB0b29sdGlwSW5kZXggPSAwO1xuICBwb3B1cE92ZXJsYXk/OiBPdmVybGF5O1xuICBtYXAhOiBNYXA7XG4gIHBvcHVwITogRWxlbWVudFJlZjtcbiAgcG9wdXBDb250ZW50ITogVmlld0NvbnRhaW5lclJlZjtcbiAgcHVibGljIHRvb2x0aXBOdW1iZXIgPSAwO1xuICBpbnRlcmFjdGlvbk1hbmFnZXIhOiBJbnRlcmFjdGlvbk1hbmFnZXI7XG4gIHByZXZpb3VzVG9vbHRpcD86IENvbXBvbmVudFJlZjxCYXNlVG9vbHRpcENvbXBvbmVudD47XG4gIHByZXZpb3VzVG9vbHRpcFN1Yj86IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIHRvb2x0aXBFdmVudD86IE1hcEJyb3dzZXJFdmVudDxNb3VzZUV2ZW50PjtcbiAgcGFyZW50ITogV2lkZ2V0TWFwQ29tcG9uZW50O1xuICBpbnRlcmFjdGlvblBvcHVwT3ZlcmxheSE6IE92ZXJsYXk7XG5cbiAgaW5pdChcbiAgICB0b29sdGlwRmFjdG9yeVNlcnZpY2U6IFRvb2x0aXBGYWN0b3J5U2VydmljZSxcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgc3RvcmU6IFN0b3JlLFxuICAgIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbixcbiAgICB3aWRnZXRTaXplJDogT2JzZXJ2YWJsZTxTaXplPixcbiAgICBkaXNwbGF5SGVhZGVyJDogT2JzZXJ2YWJsZTxib29sZWFuIHwgeyBbcDogc3RyaW5nXTogYm9vbGVhbiB9PixcbiAgICBtYXA6IE1hcCxcbiAgICBwb3B1cDogRWxlbWVudFJlZixcbiAgICBwb3B1cENvbnRlbnQ6IFZpZXdDb250YWluZXJSZWYsXG4gICAgaW50ZXJhY3Rpb25NYW5hZ2VyOiBJbnRlcmFjdGlvbk1hbmFnZXIsXG4gICAgcGFyZW50OiBXaWRnZXRNYXBDb21wb25lbnRcbiAgKSB7XG4gICAgdGhpcy50b29sdGlwRmFjdG9yeVNlcnZpY2UgPSB0b29sdGlwRmFjdG9yeVNlcnZpY2U7XG4gICAgdGhpcy5pbmplY3RvciA9IGluamVjdG9yO1xuICAgIHRoaXMuc3RvcmUgPSBzdG9yZTtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB0aGlzLm1hcCA9IG1hcDtcbiAgICB0aGlzLnBvcHVwQ29udGVudCA9IHBvcHVwQ29udGVudDtcbiAgICB0aGlzLnBvcHVwID0gcG9wdXA7XG4gICAgdGhpcy5pbnRlcmFjdGlvbk1hbmFnZXIgPSBpbnRlcmFjdGlvbk1hbmFnZXI7XG4gICAgdGhpcy53bXNGZWF0dXJlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMud21zRmVhdHVyZXModGhpcy5wYXJlbnQuaWQpKTtcblxuICAgIHN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy53bXNGZWF0dXJlcyQsIHRoaXMuY2xhc3NpY0ZlYXR1cmVzJF0pXG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MCksIHdpdGhMYXRlc3RGcm9tKHdpZGdldFNpemUkLCBkaXNwbGF5SGVhZGVyJCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKFtbd21zRmVhdHVyZXMsIGNsYXNzaWNGZWF0dXJlc10sIHNpemUsIGhlYWRlcl0pID0+IHtcbiAgICAgICAgICBpZiAobWFwKSB7XG4gICAgICAgICAgICB0aGlzLnRvb2x0aXBJbmRleCA9IDA7XG4gICAgICAgICAgICBpZiAodGhpcy5wb3B1cE92ZXJsYXkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgdGhpcy5jbGVhclRvb2x0aXAoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucG9wdXBPdmVybGF5ID0gbmV3IE92ZXJsYXkoe1xuICAgICAgICAgICAgICBlbGVtZW50OiBwb3B1cC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICBvZmZzZXQ6IFs5LCA5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLm1hcC5hZGRPdmVybGF5KHRoaXMucG9wdXBPdmVybGF5KTtcbiAgICAgICAgICAgIHRoaXMucG9wdXBDb250ZW50LmNsZWFyKCk7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRQcm9taXNlcyA9IFtdIGFzIFByb21pc2U8Q29tcG9uZW50UmVmPEJhc2VUb29sdGlwQ29tcG9uZW50PiB8IG51bGw+W107XG4gICAgICAgICAgICB3bXNGZWF0dXJlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICBjb21wb25lbnRQcm9taXNlcy5wdXNoKHRoaXMuZ2VuZXJhdGVUb29sdGlwKHZhbHVlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNsYXNzaWNGZWF0dXJlcy5mb3JFYWNoKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudFByb21pc2VzLnB1c2godGhpcy5nZW5lcmF0ZVRvb2x0aXAodmFsdWUudmFsdWVzKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgUHJvbWlzZS5hbGwoY29tcG9uZW50UHJvbWlzZXMpLnRoZW4oKHByb21pc2VzKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlYWxDb21wb25lbnRzID0gcHJvbWlzZXMuZmlsdGVyKChjb21wb25lbnQpID0+ICEhY29tcG9uZW50KTtcbiAgICAgICAgICAgICAgdGhpcy50b29sdGlwTnVtYmVyID0gcmVhbENvbXBvbmVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICBpZiAocmVhbENvbXBvbmVudHMubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgICAgICBwb3B1cC5uYXRpdmVFbGVtZW50LmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cE92ZXJsYXk/LnNldFBvc2l0aW9uKFstOTk5OTk5OTk5OSwgLTk5OTk5OTk5OTldKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwb3B1cC5uYXRpdmVFbGVtZW50LmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIERvIG5vdCBnbyBvdXRzaWRlIHRoZSBtYXBcbiAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0ge1xuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAyMDAgKyAoaGVhZGVyID8gV0lER0VUX0hFQURFUl9IRUlHSFQudmFsdWUgOiAwKSArIFRPT0xUSVBfUEFERElORyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMDAgKyBUT09MVElQX1BBRERJTkdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGxldCBwaXhlbCA9IHRoaXMudG9vbHRpcEV2ZW50Py5waXhlbDtcbiAgICAgICAgICAgICAgICBpZiAoISFwaXhlbCAmJiBwaXhlbFswXSArIHJlY3Qud2lkdGggPiBzaXplLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgICBwaXhlbFswXSA9IHNpemUud2lkdGggLSByZWN0LndpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoISFwaXhlbCAmJiBwaXhlbFsxXSArIHJlY3QuaGVpZ2h0ID4gc2l6ZS5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgIHBpeGVsWzFdID0gc2l6ZS5oZWlnaHQgLSByZWN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXBNb3ZlKDApO1xuICAgICAgICAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwT3ZlcmxheT8uc2V0UG9zaXRpb24odGhpcy5tYXAuZ2V0Q29vcmRpbmF0ZUZyb21QaXhlbChwaXhlbCA/PyBbMCwgMF0pKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZm9yY2VDbG9zZU1hcFRvb2x0aXAnLCAoKSA9PiB7XG4gICAgICB0aGlzLmNsZWFyVG9vbHRpcCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRPdmVybGF5T25JbnRlcmFjdGlvbigpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIGFkZE92ZXJsYXlPbkludGVyYWN0aW9uKCkge1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvblBvcHVwT3ZlcmxheSkge1xuICAgICAgdGhpcy5pbnRlcmFjdGlvblBvcHVwT3ZlcmxheSA9IG5ldyBPdmVybGF5KHtcbiAgICAgICAgZWxlbWVudDogdGhpcy5wb3B1cC5uYXRpdmVFbGVtZW50LFxuICAgICAgICBvZmZzZXQ6IFs5LCA5XVxuICAgICAgfSk7XG4gICAgICB0aGlzLm1hcC5hZGRPdmVybGF5KHRoaXMuaW50ZXJhY3Rpb25Qb3B1cE92ZXJsYXkpO1xuICAgIH1cblxuICAgIGNvbnN0IHBvcHVwTGlzdGVuZXIgPSAoZXZlbnQ6IE1hcEJyb3dzZXJFdmVudDxNb3VzZUV2ZW50PikgPT4ge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5tYXAuZ2V0RmVhdHVyZXNBdFBpeGVsKGV2ZW50LnBpeGVsLCB7IGhpdFRvbGVyYW5jZTogNSB9KTtcbiAgICAgIGNvbnN0IHZhbHVlc1RvRGlzcGxheSA9IFsuLi5uZXcgU2V0KHZhbHVlcy5tYXAoKHZhbHVlKSA9PiB2YWx1ZS5nZXQoJ2lkJykpLmZpbHRlcigoaWQpID0+ICEhaWQpKV1cbiAgICAgICAgLm1hcCgoaWQpID0+IHZhbHVlcy5maW5kKCh2YWx1ZSkgPT4gdmFsdWUuZ2V0KCdpZCcpID09PSBpZCkpXG4gICAgICAgIC5tYXAoKHZhbHVlKSA9PiAoe1xuICAgICAgICAgIG9DbGFzczogdmFsdWU/LmdldCgnb0NsYXNzJyksXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IGV2ZW50LmNvb3JkaW5hdGUsXG4gICAgICAgICAgdmFsdWVzOlxuICAgICAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBGZWF0dXJlID8gdmFsdWUuZ2V0S2V5cygpLnJlZHVjZSgocCwgYykgPT4gKHsgLi4ucCwgW2NdOiB2YWx1ZT8uZ2V0KGMpIH0pLCB7fSkgOiB1bmRlZmluZWRcbiAgICAgICAgfSkpXG4gICAgICAgIC5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZS5vQ2xhc3MpO1xuICAgICAgdGhpcy5jbGFzc2ljRmVhdHVyZXMkLm5leHQodmFsdWVzVG9EaXNwbGF5KTtcbiAgICAgIGNvbnN0IHdtc0xheWVycyA9IHRoaXMucGFyZW50LmdldFdNU0xheWVycygpO1xuICAgICAgaWYgKHdtc0xheWVycykge1xuICAgICAgICB0aGlzLmdldEZlYXR1cmVGcm9tU2VydmVyKHdtc0xheWVycywgZXZlbnQuY29vcmRpbmF0ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnRvb2x0aXBFdmVudCA9IGV2ZW50O1xuICAgIH07XG5cbiAgICBpZiAodGhpcy5wYXJlbnQub3B0aW9uc0NvcHkudG9vbHRpcE1vZGUgIT09IFRvb2x0aXBNb2RlLk5PTkUpIHtcbiAgICAgIHRoaXMucGFyZW50Lm1hcC51bignc2luZ2xlY2xpY2snLCBwb3B1cExpc3RlbmVyKTtcbiAgICAgIHRoaXMucGFyZW50Lm1hcC5vbignc2luZ2xlY2xpY2snLCBwb3B1cExpc3RlbmVyKTtcbiAgICB9XG4gIH1cblxuICBnZW5lcmF0ZVRvb2x0aXAodmFsdWU6IHtcbiAgICBvQ2xhc3M6IHN0cmluZztcbiAgICBjb29yZGluYXRlczogUGl4ZWw7XG4gICAgdmFsdWVzOiBhbnk7XG4gIH0pOiBQcm9taXNlPENvbXBvbmVudFJlZjxCYXNlVG9vbHRpcENvbXBvbmVudD4gfCBudWxsPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBjb21wb25lbnQkID0gdGhpcy50b29sdGlwRmFjdG9yeVNlcnZpY2UuZ2VuZXJhdGVUb29sdGlwKHZhbHVlLm9DbGFzcywgdGhpcy5pbmplY3RvciwgdGhpcy5wb3B1cENvbnRlbnQpO1xuICAgICAgdGhpcy5wcmV2aW91c1Rvb2x0aXBTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLnByZXZpb3VzVG9vbHRpcFN1YiA9IGNvbXBvbmVudCQuc3Vic2NyaWJlKChjb21wb25lbnQpID0+IHtcbiAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgIGlmICh0aGlzLnByZXZpb3VzVG9vbHRpcCkge1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c1Rvb2x0aXAuZGVzdHJveSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb21wb25lbnQuaW5zdGFuY2UuZGF0YS5pdGVtID0gdmFsdWU7XG4gICAgICAgICAgY29tcG9uZW50Lmluc3RhbmNlLnBvcHVwID0gdGhpcy5wb3B1cDtcbiAgICAgICAgICByZXNvbHZlKGNvbXBvbmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNsZWFyVG9vbHRpcChlbXB0eSA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMucG9wdXBPdmVybGF5KSB0aGlzLm1hcD8ucmVtb3ZlT3ZlcmxheSh0aGlzLnBvcHVwT3ZlcmxheSk7XG4gICAgdGhpcy5wb3B1cENvbnRlbnQ/LmNsZWFyKCk7XG4gICAgdGhpcy5wcmV2aW91c1Rvb2x0aXA/LmRlc3Ryb3koKTtcbiAgICB0aGlzLnByZXZpb3VzVG9vbHRpcFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICBpZiAoZW1wdHkpIHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5yZXNldFdtc0ZlYXR1cmVzKHsgY29tcG9uZW50SWQ6IHRoaXMucGFyZW50LmlkIH0pKTtcbiAgICAgIHRoaXMuY2xhc3NpY0ZlYXR1cmVzJC5uZXh0KFtdKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9vbHRpcE1vdmUobnVtYmVyOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy50b29sdGlwQ2FuTW92ZShudW1iZXIpKSB7XG4gICAgICB0aGlzLnNldFN0eWxlQXN5bmModGhpcy50b29sdGlwSW5kZXgsICdub25lJyk7XG4gICAgICB0aGlzLnRvb2x0aXBJbmRleCA9IHRoaXMudG9vbHRpcEluZGV4ICsgbnVtYmVyO1xuICAgICAgdGhpcy5zZXRTdHlsZUFzeW5jKHRoaXMudG9vbHRpcEluZGV4LCAnYmxvY2snKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFN0eWxlQXN5bmMoaWR4OiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldENvbnRhaW5lciA9IHRoaXMucG9wdXBDb250ZW50LmdldChpZHgpO1xuICAgICAgaWYgKHRhcmdldENvbnRhaW5lcikge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRhcmdldENvbnRhaW5lci5yb290Tm9kZXNbMF0uc3R5bGUuZGlzcGxheSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0sIDEwMCk7XG4gIH1cblxuICBwdWJsaWMgdG9vbHRpcENhbk1vdmUobnVtYmVyOiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy50b29sdGlwSW5kZXggKyBudW1iZXIgPj0gMCAmJiB0aGlzLnRvb2x0aXBJbmRleCArIG51bWJlciA8IHRoaXMudG9vbHRpcE51bWJlcjtcbiAgfVxuXG4gIGdldEZlYXR1cmVGcm9tU2VydmVyKHdtc0xheWVyczogTGF5ZXI8YW55PltdLCBwaXhlbDogUGl4ZWwpIHtcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIHdtc0xheWVycykge1xuICAgICAgbGV0IHVybCA9IGxheWVyXG4gICAgICAgIC5nZXRTb3VyY2UoKVxuICAgICAgICAuZ2V0RmVhdHVyZUluZm9VcmwocGl4ZWwsIHRoaXMubWFwLmdldFZpZXcoKS5nZXRSZXNvbHV0aW9uKCksIHRoaXMubWFwLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKCksIHtcbiAgICAgICAgICBJTkZPX0ZPUk1BVDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgIEZFQVRVUkVfQ09VTlQ6IDEwLFxuICAgICAgICAgIC4uLmxheWVyLmdldFByb3BlcnRpZXMoKVsnZ2V0RmVhdHVyZUluZm9BZGRpdGlvbmFsUGFyYW1ldGVycyddXG4gICAgICAgIH0pO1xuICAgICAgaWYgKFxuICAgICAgICAoXG4gICAgICAgICAgdGhpcy5wYXJlbnQub3B0aW9uc0NvcHkubGF5ZXJzPy5maW5kKChsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbC50aXRsZSA9PT0gbGF5ZXIuZ2V0UHJvcGVydGllcygpWyd0aXRsZSddO1xuICAgICAgICAgIH0pIGFzIE1hcEdlb1NlcnZlckxheWVyT3B0aW9uc1xuICAgICAgICApPy5nZXRXZnNGZWF0dXJlc0ZvclRvb2x0aXBzXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLmdldFdmc0ZlYXR1cmVzRm9yUG9pbnRTdGFja1Rvb2x0aXBzKHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIG9DbGFzczogbGF5ZXIuZ2V0UHJvcGVydGllcygpWydvQ2xhc3MnXSA/PyAnJyxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBwaXhlbCxcbiAgICAgICAgICAgIGNvbXBvbmVudElkOiB0aGlzLnBhcmVudC5pZFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodXJsICYmIHVybC5pbmRleE9mKCdJPS0xJykgPT09IC0xICYmIHVybC5pbmRleE9mKCdKPS0xJykgPT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgIERhc2hib2FyZEFjdGlvbnMuZ2V0V21zRmVhdHVyZXMoe1xuICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgIG9DbGFzczogbGF5ZXIuZ2V0UHJvcGVydGllcygpWydvQ2xhc3MnXSA/PyAnJyxcbiAgICAgICAgICAgICAgY29vcmRpbmF0ZXM6IHBpeGVsLFxuICAgICAgICAgICAgICBjb21wb25lbnRJZDogdGhpcy5wYXJlbnQuaWRcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnJlc2V0V21zRmVhdHVyZXMoeyBjb21wb25lbnRJZDogdGhpcy5wYXJlbnQuaWQgfSkpO1xuICAgIHRoaXMucHJldmlvdXNUb29sdGlwU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucHJldmlvdXNUb29sdGlwPy5kZXN0cm95KCk7XG4gIH1cbn1cbiJdfQ==
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC1tYW5hZ2VyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtbWFwL2ludGVyYWN0aW9uL3Rvb2x0aXAtbWFuYWdlci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUlsQixXQUFXLEVBQ1gsb0JBQW9CLEVBQ3JCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUE0QixjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUcsT0FBTyxFQUFFLE9BQU8sRUFBd0IsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRTVELE9BQU8sRUFBRSxlQUFlLEVBQXNCLE1BQU0sbUNBQW1DLENBQUM7QUFLeEYsTUFBTSxPQUFPLGNBQWM7SUFBM0I7UUFLRSxxQkFBZ0IsR0FBeUIsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFLMUQsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFPekIsMkJBQXNCLEdBQUcsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFtSGhELGFBQVEsR0FBRyxHQUFHLENBQUM7UUFDZixvQkFBZSxHQUFrQixTQUFTLENBQUM7SUFzRzdDLENBQUM7SUF2TkMsSUFBSSxDQUNGLHFCQUE0QyxFQUM1QyxRQUFrQixFQUNsQixLQUFZLEVBQ1osYUFBMkIsRUFDM0IsV0FBNkIsRUFDN0IsY0FBOEQsRUFDOUQsR0FBUSxFQUNSLEtBQWlCLEVBQ2pCLFlBQThCLEVBQzlCLGtCQUFzQyxFQUN0QyxNQUEwQjtRQUUxQixJQUFJLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUM7UUFDbkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFD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O1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsZUFBZSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ2xDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpeGVsIH0gZnJvbSAnb2wvcGl4ZWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmLCBJbmplY3RvciwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmFzZVRvb2x0aXBDb21wb25lbnQsXG4gIERhc2hib2FyZEFjdGlvbnMsXG4gIERhc2hib2FyZFNlbGVjdG9ycyxcbiAgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zLFxuICBTaXplLFxuICBUb29sdGlwRmFjdG9yeVNlcnZpY2UsXG4gIFRvb2x0aXBNb2RlLFxuICBXSURHRVRfSEVBREVSX0hFSUdIVFxufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBkZWJvdW5jZVRpbWUsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZlYXR1cmUsIE1hcCwgTWFwQnJvd3NlckV2ZW50LCBPdmVybGF5IH0gZnJvbSAnb2wnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBUT09MVElQX1BBRERJTkcsIFdpZGdldE1hcENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudC93aWRnZXQtbWFwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbk1hbmFnZXIgfSBmcm9tICcuL2ludGVyYWN0aW9uLW1hbmFnZXIuY2xhc3MnO1xuaW1wb3J0IHsgTGF5ZXIgfSBmcm9tICdvbC9sYXllcic7XG5pbXBvcnQgeyBDb29yZGluYXRlIH0gZnJvbSAnb2wvY29vcmRpbmF0ZSc7XG5cbmV4cG9ydCBjbGFzcyBUb29sdGlwTWFuYWdlciB7XG4gIHByaXZhdGUgdG9vbHRpcEZhY3RvcnlTZXJ2aWNlITogVG9vbHRpcEZhY3RvcnlTZXJ2aWNlO1xuICBwcml2YXRlIGluamVjdG9yITogSW5qZWN0b3I7XG4gIHByaXZhdGUgc3RvcmUhOiBTdG9yZTtcbiAgd21zRmVhdHVyZXMkITogT2JzZXJ2YWJsZTxhbnlbXT47XG4gIGNsYXNzaWNGZWF0dXJlcyQ6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG4gIHBvcHVwT3ZlcmxheT86IE92ZXJsYXk7XG4gIG1hcCE6IE1hcDtcbiAgcG9wdXAhOiBFbGVtZW50UmVmO1xuICBwb3B1cENvbnRlbnQhOiBWaWV3Q29udGFpbmVyUmVmO1xuICBwdWJsaWMgdG9vbHRpcE51bWJlciA9IDA7XG4gIGludGVyYWN0aW9uTWFuYWdlciE6IEludGVyYWN0aW9uTWFuYWdlcjtcbiAgcHJldmlvdXNUb29sdGlwPzogQ29tcG9uZW50UmVmPEJhc2VUb29sdGlwQ29tcG9uZW50PjtcbiAgcHJldmlvdXNUb29sdGlwU3ViPzogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgdG9vbHRpcEV2ZW50PzogTWFwQnJvd3NlckV2ZW50PE1vdXNlRXZlbnQ+O1xuICBwYXJlbnQhOiBXaWRnZXRNYXBDb21wb25lbnQ7XG4gIGludGVyYWN0aW9uUG9wdXBPdmVybGF5ITogT3ZlcmxheTtcbiAgdG9vbHRpcERpc3BsYXllZEluZGV4JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMCk7XG4gIHByaXZhdGUgY2FsY3VsYXRlZFRvb2x0aXBQb3NpdGlvbj86IENvb3JkaW5hdGU7XG5cbiAgaW5pdChcbiAgICB0b29sdGlwRmFjdG9yeVNlcnZpY2U6IFRvb2x0aXBGYWN0b3J5U2VydmljZSxcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgc3RvcmU6IFN0b3JlLFxuICAgIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbixcbiAgICB3aWRnZXRTaXplJDogT2JzZXJ2YWJsZTxTaXplPixcbiAgICBkaXNwbGF5SGVhZGVyJDogT2JzZXJ2YWJsZTxib29sZWFuIHwgeyBbcDogc3RyaW5nXTogYm9vbGVhbiB9PixcbiAgICBtYXA6IE1hcCxcbiAgICBwb3B1cDogRWxlbWVudFJlZixcbiAgICBwb3B1cENvbnRlbnQ6IFZpZXdDb250YWluZXJSZWYsXG4gICAgaW50ZXJhY3Rpb25NYW5hZ2VyOiBJbnRlcmFjdGlvbk1hbmFnZXIsXG4gICAgcGFyZW50OiBXaWRnZXRNYXBDb21wb25lbnRcbiAgKSB7XG4gICAgdGhpcy50b29sdGlwRmFjdG9yeVNlcnZpY2UgPSB0b29sdGlwRmFjdG9yeVNlcnZpY2U7XG4gICAgdGhpcy5pbmplY3RvciA9IGluamVjdG9yO1xuICAgIHRoaXMuc3RvcmUgPSBzdG9yZTtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB0aGlzLm1hcCA9IG1hcDtcbiAgICB0aGlzLnBvcHVwQ29udGVudCA9IHBvcHVwQ29udGVudDtcbiAgICB0aGlzLnBvcHVwID0gcG9wdXA7XG4gICAgdGhpcy5pbnRlcmFjdGlvbk1hbmFnZXIgPSBpbnRlcmFjdGlvbk1hbmFnZXI7XG4gICAgdGhpcy53bXNGZWF0dXJlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMud21zRmVhdHVyZXModGhpcy5wYXJlbnQuaWQpKTtcblxuICAgIHN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy53bXNGZWF0dXJlcyQsIHRoaXMuY2xhc3NpY0ZlYXR1cmVzJCwgdGhpcy50b29sdGlwRGlzcGxheWVkSW5kZXgkXSlcbiAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDUwKSwgd2l0aExhdGVzdEZyb20od2lkZ2V0U2l6ZSQsIGRpc3BsYXlIZWFkZXIkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoW1t3bXNGZWF0dXJlcywgY2xhc3NpY0ZlYXR1cmVzLCB0b29sdGlwSW5kZXhdLCBzaXplLCBoZWFkZXJdKSA9PiB7XG4gICAgICAgICAgaWYgKG1hcCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucG9wdXBPdmVybGF5ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJUb29sdGlwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBvcHVwT3ZlcmxheSA9IG5ldyBPdmVybGF5KHtcbiAgICAgICAgICAgICAgZWxlbWVudDogcG9wdXAubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgb2Zmc2V0OiBbOSwgOV1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5tYXAuYWRkT3ZlcmxheSh0aGlzLnBvcHVwT3ZlcmxheSk7XG4gICAgICAgICAgICB0aGlzLnBvcHVwQ29udGVudC5jbGVhcigpO1xuICAgICAgICAgICAgY29uc3QgYWxsVG9vbHRpcFZhbHVlcyA9IFsuLi53bXNGZWF0dXJlcywgLi4uY2xhc3NpY0ZlYXR1cmVzLm1hcCgoY2Y6IGFueSkgPT4gY2YudmFsdWVzKV07XG5cbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVUb29sdGlwKGFsbFRvb2x0aXBWYWx1ZXNbdG9vbHRpcEluZGV4XSkudGhlbigoY29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudG9vbHRpcE51bWJlciA9IGFsbFRvb2x0aXBWYWx1ZXMubGVuZ3RoO1xuICAgICAgICAgICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIHBvcHVwLm5hdGl2ZUVsZW1lbnQuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwT3ZlcmxheT8uc2V0UG9zaXRpb24oWy05OTk5OTk5OTk5LCAtOTk5OTk5OTk5OV0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBvcHVwLm5hdGl2ZUVsZW1lbnQuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gRG8gbm90IGdvIG91dHNpZGUgdGhlIG1hcFxuICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwMCArIChoZWFkZXIgPyBXSURHRVRfSEVBREVSX0hFSUdIVC52YWx1ZSA6IDApICsgVE9PTFRJUF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwMCArIFRPT0xUSVBfUEFERElOR1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNhbGN1bGF0ZWRUb29sdGlwUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgIGxldCBwaXhlbCA9IHRoaXMudG9vbHRpcEV2ZW50Py5waXhlbDtcbiAgICAgICAgICAgICAgICAgIGlmICghIXBpeGVsICYmIHBpeGVsWzBdICsgcmVjdC53aWR0aCA+IHNpemUud2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcGl4ZWxbMF0gPSBzaXplLndpZHRoIC0gcmVjdC53aWR0aDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmICghIXBpeGVsICYmIHBpeGVsWzFdICsgcmVjdC5oZWlnaHQgPiBzaXplLmhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBwaXhlbFsxXSA9IHNpemUuaGVpZ2h0IC0gcmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZWRUb29sdGlwUG9zaXRpb24gPSB0aGlzLm1hcC5nZXRDb29yZGluYXRlRnJvbVBpeGVsKHBpeGVsID8/IFswLCAwXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucG9wdXBPdmVybGF5Py5zZXRQb3NpdGlvbih0aGlzLmNhbGN1bGF0ZWRUb29sdGlwUG9zaXRpb24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb3JjZUNsb3NlTWFwVG9vbHRpcCcsICgpID0+IHtcbiAgICAgIHRoaXMuY2xlYXJUb29sdGlwKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZE92ZXJsYXlPbkludGVyYWN0aW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgYWRkT3ZlcmxheU9uSW50ZXJhY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uUG9wdXBPdmVybGF5KSB7XG4gICAgICB0aGlzLmludGVyYWN0aW9uUG9wdXBPdmVybGF5ID0gbmV3IE92ZXJsYXkoe1xuICAgICAgICBlbGVtZW50OiB0aGlzLnBvcHVwLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIG9mZnNldDogWzksIDldXG4gICAgICB9KTtcbiAgICAgIHRoaXMubWFwLmFkZE92ZXJsYXkodGhpcy5pbnRlcmFjdGlvblBvcHVwT3ZlcmxheSk7XG4gICAgfVxuXG4gICAgY29uc3QgcG9wdXBMaXN0ZW5lciA9IChldmVudDogTWFwQnJvd3NlckV2ZW50PE1vdXNlRXZlbnQ+KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLm1hcC5nZXRGZWF0dXJlc0F0UGl4ZWwoZXZlbnQucGl4ZWwsIHsgaGl0VG9sZXJhbmNlOiA1IH0pO1xuICAgICAgY29uc3QgdmFsdWVzVG9EaXNwbGF5ID0gWy4uLm5ldyBTZXQodmFsdWVzLm1hcCgodmFsdWUpID0+IHZhbHVlLmdldCgnaWQnKSkuZmlsdGVyKChpZCkgPT4gISFpZCkpXVxuICAgICAgICAubWFwKChpZCkgPT4gdmFsdWVzLmZpbmQoKHZhbHVlKSA9PiB2YWx1ZS5nZXQoJ2lkJykgPT09IGlkKSlcbiAgICAgICAgLm1hcCgodmFsdWUpID0+ICh7XG4gICAgICAgICAgb0NsYXNzOiB2YWx1ZT8uZ2V0KCdvQ2xhc3MnKSxcbiAgICAgICAgICBjb29yZGluYXRlczogZXZlbnQuY29vcmRpbmF0ZSxcbiAgICAgICAgICB2YWx1ZXM6XG4gICAgICAgICAgICB2YWx1ZSBpbnN0YW5jZW9mIEZlYXR1cmUgPyB2YWx1ZS5nZXRLZXlzKCkucmVkdWNlKChwLCBjKSA9PiAoeyAuLi5wLCBbY106IHZhbHVlPy5nZXQoYykgfSksIHt9KSA6IHVuZGVmaW5lZFxuICAgICAgICB9KSlcbiAgICAgICAgLmZpbHRlcigodmFsdWUpID0+IHZhbHVlLm9DbGFzcyk7XG4gICAgICB0aGlzLmNsYXNzaWNGZWF0dXJlcyQubmV4dCh2YWx1ZXNUb0Rpc3BsYXkpO1xuICAgICAgY29uc3Qgd21zTGF5ZXJzID0gdGhpcy5wYXJlbnQuZ2V0V01TTGF5ZXJzKCk7XG4gICAgICBpZiAod21zTGF5ZXJzKSB7XG4gICAgICAgIHRoaXMuZ2V0RmVhdHVyZUZyb21TZXJ2ZXIod21zTGF5ZXJzLCBldmVudC5jb29yZGluYXRlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9vbHRpcEV2ZW50ID0gZXZlbnQ7XG4gICAgICB0aGlzLmNhbGN1bGF0ZWRUb29sdGlwUG9zaXRpb24gPSB1bmRlZmluZWQ7XG4gICAgfTtcblxuICAgIGlmICh0aGlzLnBhcmVudC5vcHRpb25zQ29weS50b29sdGlwTW9kZSAhPT0gVG9vbHRpcE1vZGUuTk9ORSkge1xuICAgICAgdGhpcy5wYXJlbnQubWFwLnVuKCdzaW5nbGVjbGljaycsIHBvcHVwTGlzdGVuZXIpO1xuICAgICAgdGhpcy5wYXJlbnQubWFwLm9uKCdzaW5nbGVjbGljaycsIHBvcHVwTGlzdGVuZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByZXZpb3VzID0gJy0nO1xuICBwcmV2aW91c1Byb21pc2U/OiBQcm9taXNlPGFueT4gPSB1bmRlZmluZWQ7XG5cbiAgZ2VuZXJhdGVUb29sdGlwKHZhbHVlOiB7XG4gICAgb0NsYXNzOiBzdHJpbmc7XG4gICAgY29vcmRpbmF0ZXM6IFBpeGVsO1xuICAgIHZhbHVlczogYW55O1xuICB9KTogUHJvbWlzZTxDb21wb25lbnRSZWY8QmFzZVRvb2x0aXBDb21wb25lbnQ+IHwgbnVsbD4ge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMucHJldmlvdXMgIT09IEpTT04uc3RyaW5naWZ5KHZhbHVlKSkge1xuICAgICAgICB0aGlzLnByZXZpb3VzID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICB0aGlzLnByZXZpb3VzUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50JCA9IHRoaXMudG9vbHRpcEZhY3RvcnlTZXJ2aWNlLmdlbmVyYXRlVG9vbHRpcCh2YWx1ZS5vQ2xhc3MsIHRoaXMuaW5qZWN0b3IsIHRoaXMucG9wdXBDb250ZW50KTtcbiAgICAgICAgICB0aGlzLnByZXZpb3VzVG9vbHRpcFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB0aGlzLnByZXZpb3VzVG9vbHRpcFN1YiA9IGNvbXBvbmVudCQuc3Vic2NyaWJlKChjb21wb25lbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMucHJldmlvdXNUb29sdGlwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c1Rvb2x0aXAuZGVzdHJveSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5pbnN0YW5jZS5kYXRhLml0ZW0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgY29tcG9uZW50Lmluc3RhbmNlLnBvcHVwID0gdGhpcy5wb3B1cDtcbiAgICAgICAgICAgICAgcmVzb2x2ZShjb21wb25lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXZpb3VzUHJvbWlzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXZpb3VzUHJvbWlzZSE7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNsZWFyVG9vbHRpcChlbXB0eSA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMucG9wdXBPdmVybGF5KSB0aGlzLm1hcD8ucmVtb3ZlT3ZlcmxheSh0aGlzLnBvcHVwT3ZlcmxheSk7XG4gICAgdGhpcy5wb3B1cENvbnRlbnQ/LmNsZWFyKCk7XG4gICAgdGhpcy5wcmV2aW91c1Rvb2x0aXA/LmRlc3Ryb3koKTtcbiAgICB0aGlzLnByZXZpb3VzVG9vbHRpcFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICBpZiAoZW1wdHkpIHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5yZXNldFdtc0ZlYXR1cmVzKHsgY29tcG9uZW50SWQ6IHRoaXMucGFyZW50LmlkIH0pKTtcbiAgICAgIHRoaXMuY2xhc3NpY0ZlYXR1cmVzJC5uZXh0KFtdKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9vbHRpcE1vdmUobnVtYmVyOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy50b29sdGlwQ2FuTW92ZShudW1iZXIpKSB7XG4gICAgICB0aGlzLnRvb2x0aXBEaXNwbGF5ZWRJbmRleCQubmV4dCh0aGlzLnRvb2x0aXBEaXNwbGF5ZWRJbmRleCQuZ2V0VmFsdWUoKSArIG51bWJlcik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRvb2x0aXBDYW5Nb3ZlKG51bWJlcjogbnVtYmVyKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudG9vbHRpcERpc3BsYXllZEluZGV4JC5nZXRWYWx1ZSgpICsgbnVtYmVyID49IDAgJiZcbiAgICAgIHRoaXMudG9vbHRpcERpc3BsYXllZEluZGV4JC5nZXRWYWx1ZSgpICsgbnVtYmVyIDwgdGhpcy50b29sdGlwTnVtYmVyXG4gICAgKTtcbiAgfVxuXG4gIGdldEZlYXR1cmVGcm9tU2VydmVyKHdtc0xheWVyczogTGF5ZXI8YW55PltdLCBwaXhlbDogUGl4ZWwpIHtcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIHdtc0xheWVycykge1xuICAgICAgbGV0IHVybCA9IGxheWVyXG4gICAgICAgIC5nZXRTb3VyY2UoKVxuICAgICAgICAuZ2V0RmVhdHVyZUluZm9VcmwocGl4ZWwsIHRoaXMubWFwLmdldFZpZXcoKS5nZXRSZXNvbHV0aW9uKCksIHRoaXMubWFwLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKCksIHtcbiAgICAgICAgICBJTkZPX0ZPUk1BVDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgIEZFQVRVUkVfQ09VTlQ6IDEwLFxuICAgICAgICAgIC4uLmxheWVyLmdldFByb3BlcnRpZXMoKVsnZ2V0RmVhdHVyZUluZm9BZGRpdGlvbmFsUGFyYW1ldGVycyddXG4gICAgICAgIH0pO1xuICAgICAgaWYgKFxuICAgICAgICAoXG4gICAgICAgICAgdGhpcy5wYXJlbnQub3B0aW9uc0NvcHkubGF5ZXJzPy5maW5kKChsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbC50aXRsZSA9PT0gbGF5ZXIuZ2V0UHJvcGVydGllcygpWyd0aXRsZSddO1xuICAgICAgICAgIH0pIGFzIE1hcEdlb1NlcnZlckxheWVyT3B0aW9uc1xuICAgICAgICApPy5nZXRXZnNGZWF0dXJlc0ZvclRvb2x0aXBzXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLmdldFdmc0ZlYXR1cmVzRm9yUG9pbnRTdGFja1Rvb2x0aXBzKHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIG9DbGFzczogbGF5ZXIuZ2V0UHJvcGVydGllcygpWydvQ2xhc3MnXSA/PyAnJyxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBwaXhlbCxcbiAgICAgICAgICAgIGNvbXBvbmVudElkOiB0aGlzLnBhcmVudC5pZFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodXJsICYmIHVybC5pbmRleE9mKCdJPS0xJykgPT09IC0xICYmIHVybC5pbmRleE9mKCdKPS0xJykgPT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgIERhc2hib2FyZEFjdGlvbnMuZ2V0V21zRmVhdHVyZXMoe1xuICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgIG9DbGFzczogbGF5ZXIuZ2V0UHJvcGVydGllcygpWydvQ2xhc3MnXSA/PyAnJyxcbiAgICAgICAgICAgICAgY29vcmRpbmF0ZXM6IHBpeGVsLFxuICAgICAgICAgICAgICBjb21wb25lbnRJZDogdGhpcy5wYXJlbnQuaWRcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnJlc2V0V21zRmVhdHVyZXMoeyBjb21wb25lbnRJZDogdGhpcy5wYXJlbnQuaWQgfSkpO1xuICAgIHRoaXMucHJldmlvdXNUb29sdGlwU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucHJldmlvdXNUb29sdGlwPy5kZXN0cm95KCk7XG4gIH1cbn1cbiJdfQ==
|