raain-app 3.2.2 → 3.2.5
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/CHANGELOG.md +15 -0
- package/esm2020/raain-configuration/raain-configuration.component.mjs +28 -6
- package/esm2020/raain-map/raain-map.component.mjs +4 -1
- package/esm2020/tools/CompareManager.mjs +1 -1
- package/fesm2015/raain-app.mjs +38 -12
- package/fesm2015/raain-app.mjs.map +1 -1
- package/fesm2020/raain-app.mjs +30 -5
- package/fesm2020/raain-app.mjs.map +1 -1
- package/package.json +3 -3
- package/raain-configuration/raain-configuration.component.d.ts +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [3.2.5] - 2026-03-28
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- [RAD-204] Skeleton loaders sur la liste des rain zones et les cartes de détail — animation pulse fluide, disparition smooth au chargement
|
|
15
|
+
- [RAD-206] Button feedback press states sur tous les boutons (scale/opacity < 100ms), désactivation pendant les appels API, feedback sur ion-item et ion-fab-button
|
|
16
|
+
|
|
17
|
+
## [3.2.3] - 2026-03-11
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- [RAD-192] Updated configuration component and CompareManager
|
|
22
|
+
|
|
23
|
+
## [3.2.2] - 2026-03-03
|
|
24
|
+
|
|
10
25
|
## [3.2.1] - 2026-03-02
|
|
11
26
|
|
|
12
27
|
### Changed
|
|
@@ -10,8 +10,13 @@ export class RaainConfigurationComponent {
|
|
|
10
10
|
this.minPoint = { x: 0, y: 0 };
|
|
11
11
|
this.maxPoint = { x: 300, y: 100 };
|
|
12
12
|
this.logStyle = false;
|
|
13
|
+
this.readonly = false;
|
|
14
|
+
this.createTimer = null;
|
|
13
15
|
this.onSizeChanged = () => { };
|
|
14
16
|
this.onDrag = (e) => {
|
|
17
|
+
if (this.readonly) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
15
20
|
this.changedPoints.emit(this.points);
|
|
16
21
|
};
|
|
17
22
|
}
|
|
@@ -41,7 +46,7 @@ export class RaainConfigurationComponent {
|
|
|
41
46
|
return;
|
|
42
47
|
}
|
|
43
48
|
this.created = true;
|
|
44
|
-
let inputs = new ConfigurationElementInput(this.points, this.minPoint, this.maxPoint, false, [], this.onDrag);
|
|
49
|
+
let inputs = new ConfigurationElementInput(this.points, this.minPoint, this.maxPoint, false, [], this.onDrag, this.readonly);
|
|
45
50
|
if (this.logStyle) {
|
|
46
51
|
const confTransparency = 0.3;
|
|
47
52
|
inputs = new ConfigurationElementInput(this.points, this.minPoint, this.maxPoint, true, [
|
|
@@ -110,21 +115,36 @@ export class RaainConfigurationComponent {
|
|
|
110
115
|
yStart: Math.log10(300),
|
|
111
116
|
yEnd: Math.log10(500),
|
|
112
117
|
},
|
|
113
|
-
], this.onDrag);
|
|
118
|
+
], this.onDrag, this.readonly);
|
|
114
119
|
}
|
|
115
120
|
this.ngZone.runOutsideAngular(() => {
|
|
116
|
-
setTimeout(() => {
|
|
121
|
+
this.createTimer = setTimeout(() => {
|
|
122
|
+
this.createTimer = null;
|
|
117
123
|
const factory = new ElementsFactory();
|
|
118
124
|
this.configurationElement = factory.createConfiguration(this.canvasElement.nativeElement, inputs);
|
|
119
125
|
}, 10);
|
|
120
126
|
});
|
|
121
127
|
}
|
|
122
128
|
async delete() {
|
|
129
|
+
if (this.createTimer) {
|
|
130
|
+
clearTimeout(this.createTimer);
|
|
131
|
+
this.createTimer = null;
|
|
132
|
+
}
|
|
123
133
|
this.configurationElement?.chart?.destroy();
|
|
124
134
|
this.created = false;
|
|
125
135
|
}
|
|
126
136
|
async change(changes) {
|
|
127
|
-
//
|
|
137
|
+
// Fast path: update chart data in-place when only points changed
|
|
138
|
+
if (this.configurationElement?.chart &&
|
|
139
|
+
changes.points &&
|
|
140
|
+
Object.keys(changes).length === 1) {
|
|
141
|
+
const chart = this.configurationElement.chart;
|
|
142
|
+
chart.data.datasets.forEach((ds) => {
|
|
143
|
+
ds.data = this.points;
|
|
144
|
+
});
|
|
145
|
+
chart.update('none');
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
128
148
|
await this.delete();
|
|
129
149
|
this.create();
|
|
130
150
|
}
|
|
@@ -148,7 +168,7 @@ export class RaainConfigurationComponent {
|
|
|
148
168
|
}
|
|
149
169
|
}
|
|
150
170
|
RaainConfigurationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainConfigurationComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
151
|
-
RaainConfigurationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainConfigurationComponent, selector: "raain-configuration", inputs: { points: "points", currentHeight: "currentHeight", currentWidth: "currentWidth", minPoint: "minPoint", maxPoint: "maxPoint", logStyle: "logStyle" }, outputs: { changedPoints: "changedPoints" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["canvasElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-xs=\"10\">\n <div [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n <ion-col size-xs=\"2\">\n <ion-button (click)=\"reset(2)\" color=\"light\" shape=\"round\" size=\"small\">2</ion-button>\n <br>\n <ion-button (click)=\"reset(4)\" color=\"light\" shape=\"round\" size=\"small\">4</ion-button>\n <br>\n <ion-button (click)=\"reset(6)\" color=\"light\" shape=\"round\" size=\"small\">6</ion-button>\n <br>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#canvas-container{position:relative;width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }] });
|
|
171
|
+
RaainConfigurationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainConfigurationComponent, selector: "raain-configuration", inputs: { points: "points", currentHeight: "currentHeight", currentWidth: "currentWidth", minPoint: "minPoint", maxPoint: "maxPoint", logStyle: "logStyle", readonly: "readonly" }, outputs: { changedPoints: "changedPoints" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["canvasElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-xs=\"10\">\n <div [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n <ion-col size-xs=\"2\">\n <ion-button (click)=\"reset(2)\" color=\"light\" shape=\"round\" size=\"small\">2</ion-button>\n <br>\n <ion-button (click)=\"reset(4)\" color=\"light\" shape=\"round\" size=\"small\">4</ion-button>\n <br>\n <ion-button (click)=\"reset(6)\" color=\"light\" shape=\"round\" size=\"small\">6</ion-button>\n <br>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#canvas-container{position:relative;width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }] });
|
|
152
172
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainConfigurationComponent, decorators: [{
|
|
153
173
|
type: Component,
|
|
154
174
|
args: [{ selector: 'raain-configuration', template: "<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-xs=\"10\">\n <div [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n <ion-col size-xs=\"2\">\n <ion-button (click)=\"reset(2)\" color=\"light\" shape=\"round\" size=\"small\">2</ion-button>\n <br>\n <ion-button (click)=\"reset(4)\" color=\"light\" shape=\"round\" size=\"small\">4</ion-button>\n <br>\n <ion-button (click)=\"reset(6)\" color=\"light\" shape=\"round\" size=\"small\">6</ion-button>\n <br>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#canvas-container{position:relative;width:100%;height:100%}\n"] }]
|
|
@@ -166,6 +186,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
166
186
|
type: Input
|
|
167
187
|
}], logStyle: [{
|
|
168
188
|
type: Input
|
|
189
|
+
}], readonly: [{
|
|
190
|
+
type: Input
|
|
169
191
|
}], canvasElement: [{
|
|
170
192
|
type: ViewChild,
|
|
171
193
|
args: ['canvasElement']
|
|
@@ -173,4 +195,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
173
195
|
type: HostListener,
|
|
174
196
|
args: ['window:resize', ['$event']]
|
|
175
197
|
}] } });
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFhaW4tY29uZmlndXJhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9zaGFyZWQvcmFhaW4tY29uZmlndXJhdGlvbi9yYWFpbi1jb25maWd1cmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3NyYy9jb3JlL3NoYXJlZC9yYWFpbi1jb25maWd1cmF0aW9uL3JhYWluLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDSCxnQkFBZ0IsRUFFaEIseUJBQXlCLEVBQ3pCLGVBQWUsRUFDZixLQUFLLEdBQ1IsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQzs7O0FBT2pDLE1BQU0sT0FBTywyQkFBMkI7SUE4QnBDLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBekIzQixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFTN0MsYUFBUSxHQUFXLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7UUFHaEMsYUFBUSxHQUFXLEVBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFDLENBQUM7UUFHcEMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQVdwQixJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FB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ekIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzt5SEF0TVEsMkJBQTJCOzZHQUEzQiwyQkFBMkIseWNDNUJ4Qyw2bkJBaUJBOzRGRFdhLDJCQUEyQjtrQkFMdkMsU0FBUzsrQkFDSSxxQkFBcUI7NkZBTXhCLE1BQU07c0JBRFosS0FBSztnQkFJQyxhQUFhO3NCQURuQixNQUFNO2dCQUlBLGFBQWE7c0JBRG5CLEtBQUs7Z0JBSUMsWUFBWTtzQkFEbEIsS0FBSztnQkFJQyxRQUFRO3NCQURkLEtBQUs7Z0JBSUMsUUFBUTtzQkFEZCxLQUFLO2dCQUlDLFFBQVE7c0JBRGQsS0FBSztnQkFJSSxhQUFhO3NCQUR0QixTQUFTO3VCQUFDLGVBQWU7Z0JBc0NsQixRQUFRO3NCQURmLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQ2hhcnRTY2FsZUNvbG9ycyxcbiAgICBDb25maWd1cmF0aW9uRWxlbWVudCxcbiAgICBDb25maWd1cmF0aW9uRWxlbWVudElucHV0LFxuICAgIEVsZW1lbnRzRmFjdG9yeSxcbiAgICBUb29scyxcbn0gZnJvbSAncmFhaW4tdWknO1xuaW1wb3J0IHtYWVR5cGV9IGZyb20gJy4uL3h5dHlwZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncmFhaW4tY29uZmlndXJhdGlvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3JhYWluLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3JhYWluLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUmFhaW5Db25maWd1cmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBvaW50czogWFlUeXBlW107XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY2hhbmdlZFBvaW50cyA9IG5ldyBFdmVudEVtaXR0ZXI8WFlUeXBlW10+KCk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjdXJyZW50SGVpZ2h0OiBudW1iZXI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjdXJyZW50V2lkdGg6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG1pblBvaW50OiBYWVR5cGUgPSB7eDogMCwgeTogMH07XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtYXhQb2ludDogWFlUeXBlID0ge3g6IDMwMCwgeTogMTAwfTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvZ1N0eWxlID0gZmFsc2U7XG5cbiAgICBAVmlld0NoaWxkKCdjYW52YXNFbGVtZW50JylcbiAgICBwcm90ZWN0ZWQgY2FudmFzRWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvbkVsZW1lbnQ6IENvbmZpZ3VyYXRpb25FbGVtZW50O1xuICAgIHByaXZhdGUgb25EcmFnO1xuICAgIHByaXZhdGUgb25TaXplQ2hhbmdlZDtcbiAgICBwcml2YXRlIGNyZWF0ZWQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5nWm9uZTogTmdab25lKSB7XG4gICAgICAgIHRoaXMub25TaXplQ2hhbmdlZCA9ICgpID0+IHt9O1xuICAgICAgICB0aGlzLm9uRHJhZyA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFBvaW50cy5lbWl0KHRoaXMucG9pbnRzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNyZWF0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hhbmdlKGNoYW5nZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZWxldGUoKTtcbiAgICB9XG5cbiAgICBhc3luYyByZXNldChjb3VudCA9IDQpIHtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gW107XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY291bnQ7IGMrKykge1xuICAgICAgICAgICAgcG9pbnRzLnB1c2gobmV3IFhZVHlwZSgoYyArIDEpICogMTAsIChjICsgMSkgKiAwLjEpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcbiAgICAgICAgYXdhaXQgdGhpcy5kZWxldGUoKTtcbiAgICAgICAgdGhpcy5jcmVhdGUoKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgICBwcml2YXRlIG9uUmVzaXplKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVNYXBTaXplKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmNyZWF0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNyZWF0ZWQgPSB0cnVlO1xuXG4gICAgICAgIGxldCBpbnB1dHMgPSBuZXcgQ29uZmlndXJhdGlvbkVsZW1lbnRJbnB1dChcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLFxuICAgICAgICAgICAgdGhpcy5taW5Qb2ludCxcbiAgICAgICAgICAgIHRoaXMubWF4UG9pbnQsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgdGhpcy5vbkRyYWdcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMubG9nU3R5bGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZUcmFuc3BhcmVuY3kgPSAwLjM7XG4gICAgICAgICAgICBpbnB1dHMgPSBuZXcgQ29uZmlndXJhdGlvbkVsZW1lbnRJbnB1dChcbiAgICAgICAgICAgICAgICB0aGlzLnBvaW50cyxcbiAgICAgICAgICAgICAgICB0aGlzLm1pblBvaW50LFxuICAgICAgICAgICAgICAgIHRoaXMubWF4UG9pbnQsXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBUb29scy5nZXRUcmFuc3BhcmVuY3koQ2hhcnRTY2FsZUNvbG9yc1snMCddLCBjb25mVHJhbnNwYXJlbmN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgwLjEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgwLjQpLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzAuNCddLCBjb25mVHJhbnNwYXJlbmN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgwLjQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgxKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFRvb2xzLmdldFRyYW5zcGFyZW5jeShDaGFydFNjYWxlQ29sb3JzWycxJ10sIGNvbmZUcmFuc3BhcmVuY3kpLFxuICAgICAgICAgICAgICAgICAgICAgICAgeVN0YXJ0OiBNYXRoLmxvZzEwKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgzKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFRvb2xzLmdldFRyYW5zcGFyZW5jeShDaGFydFNjYWxlQ29sb3JzWyczJ10sIGNvbmZUcmFuc3BhcmVuY3kpLFxuICAgICAgICAgICAgICAgICAgICAgICAgeVN0YXJ0OiBNYXRoLmxvZzEwKDMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgxMCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBUb29scy5nZXRUcmFuc3BhcmVuY3koQ2hhcnRTY2FsZUNvbG9yc1snMTAnXSwgY29uZlRyYW5zcGFyZW5jeSksXG4gICAgICAgICAgICAgICAgICAgICAgICB5U3RhcnQ6IE1hdGgubG9nMTAoMTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgyMCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBUb29scy5nZXRUcmFuc3BhcmVuY3koQ2hhcnRTY2FsZUNvbG9yc1snMjAnXSwgY29uZlRyYW5zcGFyZW5jeSksXG4gICAgICAgICAgICAgICAgICAgICAgICB5U3RhcnQ6IE1hdGgubG9nMTAoMjApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgzMCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBUb29scy5nZXRUcmFuc3BhcmVuY3koQ2hhcnRTY2FsZUNvbG9yc1snMzAnXSwgY29uZlRyYW5zcGFyZW5jeSksXG4gICAgICAgICAgICAgICAgICAgICAgICB5U3RhcnQ6IE1hdGgubG9nMTAoMzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCg1MCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBUb29scy5nZXRUcmFuc3BhcmVuY3koQ2hhcnRTY2FsZUNvbG9yc1snNTAnXSwgY29uZlRyYW5zcGFyZW5jeSksXG4gICAgICAgICAgICAgICAgICAgICAgICB5U3RhcnQ6IE1hdGgubG9nMTAoNTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgxMDApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzEwMCddLCBjb25mVHJhbnNwYXJlbmN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgxMDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgxNTApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzE1MCddLCBjb25mVHJhbnNwYXJlbmN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgxNTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgyMDApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzIwMCddLCBjb25mVHJhbnNwYXJlbmN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgyMDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgyNTApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzI1MCddLCBjb25mVHJhbnNwYXJlbmN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgyNTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgzMDApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzMwMCddLCBjb25mVHJhbnNwYXJlbmN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgzMDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCg1MDApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgdGhpcy5vbkRyYWdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmYWN0b3J5ID0gbmV3IEVsZW1lbnRzRmFjdG9yeSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbkVsZW1lbnQgPSBmYWN0b3J5LmNyZWF0ZUNvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzRWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBpbnB1dHNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSwgMTApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGRlbGV0ZSgpIHtcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uRWxlbWVudD8uY2hhcnQ/LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5jcmVhdGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjaGFuZ2UoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnY2hhbmdlZCcsIGNoYW5nZXMpO1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZSgpO1xuICAgICAgICB0aGlzLmNyZWF0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTWFwU2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWFwRGl2V2lkdGggPSB0aGlzLmNhbnZhc0VsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlPy5wYXJlbnROb2RlWydjbGllbnRXaWR0aCddO1xuICAgICAgICBjb25zdCBwYWRkaW5nID0gMjA7XG4gICAgICAgIGxldCBjdXJyZW50V2lkdGggPVxuICAgICAgICAgICAgbWFwRGl2V2lkdGggfHxcbiAgICAgICAgICAgIHdpbmRvdy5pbm5lcldpZHRoIHx8XG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHxcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRIZWlnaHQgPVxuICAgICAgICAgICAgdGhpcy5jdXJyZW50SGVpZ2h0IHx8XG4gICAgICAgICAgICB3aW5kb3cuaW5uZXJIZWlnaHQgfHxcbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfHxcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0O1xuICAgICAgICBjdXJyZW50V2lkdGggLT0gcGFkZGluZztcbiAgICAgICAgdGhpcy5jdXJyZW50V2lkdGggPSBjdXJyZW50V2lkdGg7XG4gICAgICAgIHRoaXMuY3VycmVudEhlaWdodCA9IGN1cnJlbnRIZWlnaHQ7XG5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25TaXplQ2hhbmdlZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8aW9uLWdyaWQ+XG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sIGlkPVwiY29sLWNvbnRhaW5lclwiIHNpemUteHM9XCIxMFwiPlxuICAgICAgPGRpdiBbc3R5bGUuaGVpZ2h0LnB4XT1cImN1cnJlbnRIZWlnaHRcIiBpZD1cImNhbnZhcy1jb250YWluZXJcIj5cbiAgICAgICAgPGNhbnZhcyAjY2FudmFzRWxlbWVudD48L2NhbnZhcz5cbiAgICAgIDwvZGl2PlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbCBzaXplLXhzPVwiMlwiPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInJlc2V0KDIpXCIgY29sb3I9XCJsaWdodFwiIHNoYXBlPVwicm91bmRcIiBzaXplPVwic21hbGxcIj4yPC9pb24tYnV0dG9uPlxuICAgICAgPGJyPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInJlc2V0KDQpXCIgY29sb3I9XCJsaWdodFwiIHNoYXBlPVwicm91bmRcIiBzaXplPVwic21hbGxcIj40PC9pb24tYnV0dG9uPlxuICAgICAgPGJyPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInJlc2V0KDYpXCIgY29sb3I9XCJsaWdodFwiIHNoYXBlPVwicm91bmRcIiBzaXplPVwic21hbGxcIj42PC9pb24tYnV0dG9uPlxuICAgICAgPGJyPlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuPC9pb24tZ3JpZD5cbiJdfQ==
|
|
198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFhaW4tY29uZmlndXJhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9zaGFyZWQvcmFhaW4tY29uZmlndXJhdGlvbi9yYWFpbi1jb25maWd1cmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3NyYy9jb3JlL3NoYXJlZC9yYWFpbi1jb25maWd1cmF0aW9uL3JhYWluLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDSCxnQkFBZ0IsRUFFaEIseUJBQXlCLEVBQ3pCLGVBQWUsRUFDZixLQUFLLEdBQ1IsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQzs7O0FBT2pDLE1BQU0sT0FBTywyQkFBMkI7SUFrQ3BDLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBN0IzQixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFTN0MsYUFBUSxHQUFXLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7UUFHaEMsYUFBUSxHQUFXLEVBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFDLENBQUM7UUFHcEMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUdqQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBU2hCLGdCQUFXLEdBQVEsSUFBSSxDQUFDO1FBRzVCLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUNyQixJQUFJ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QURkLEtBQUs7Z0JBSUMsUUFBUTtzQkFEZCxLQUFLO2dCQUlDLFFBQVE7c0JBRGQsS0FBSztnQkFJQyxRQUFRO3NCQURkLEtBQUs7Z0JBSUksYUFBYTtzQkFEdEIsU0FBUzt1QkFBQyxlQUFlO2dCQTBDbEIsUUFBUTtzQkFEZixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIENoYXJ0U2NhbGVDb2xvcnMsXG4gICAgQ29uZmlndXJhdGlvbkVsZW1lbnQsXG4gICAgQ29uZmlndXJhdGlvbkVsZW1lbnRJbnB1dCxcbiAgICBFbGVtZW50c0ZhY3RvcnksXG4gICAgVG9vbHMsXG59IGZyb20gJ3JhYWluLXVpJztcbmltcG9ydCB7WFlUeXBlfSBmcm9tICcuLi94eXR5cGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3JhYWluLWNvbmZpZ3VyYXRpb24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9yYWFpbi1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9yYWFpbi1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFJhYWluQ29uZmlndXJhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0NoZWNrZWQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwb2ludHM6IFhZVHlwZVtdO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNoYW5nZWRQb2ludHMgPSBuZXcgRXZlbnRFbWl0dGVyPFhZVHlwZVtdPigpO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY3VycmVudEhlaWdodDogbnVtYmVyO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY3VycmVudFdpZHRoOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtaW5Qb2ludDogWFlUeXBlID0ge3g6IDAsIHk6IDB9O1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbWF4UG9pbnQ6IFhZVHlwZSA9IHt4OiAzMDAsIHk6IDEwMH07XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsb2dTdHlsZSA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgPSBmYWxzZTtcblxuICAgIEBWaWV3Q2hpbGQoJ2NhbnZhc0VsZW1lbnQnKVxuICAgIHByb3RlY3RlZCBjYW52YXNFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgcHJpdmF0ZSBjb25maWd1cmF0aW9uRWxlbWVudDogQ29uZmlndXJhdGlvbkVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBvbkRyYWc7XG4gICAgcHJpdmF0ZSBvblNpemVDaGFuZ2VkO1xuICAgIHByaXZhdGUgY3JlYXRlZDtcbiAgICBwcml2YXRlIGNyZWF0ZVRpbWVyOiBhbnkgPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSkge1xuICAgICAgICB0aGlzLm9uU2l6ZUNoYW5nZWQgPSAoKSA9PiB7fTtcbiAgICAgICAgdGhpcy5vbkRyYWcgPSAoZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFBvaW50cy5lbWl0KHRoaXMucG9pbnRzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNyZWF0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hhbmdlKGNoYW5nZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZWxldGUoKTtcbiAgICB9XG5cbiAgICBhc3luYyByZXNldChjb3VudCA9IDQpIHtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gW107XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY291bnQ7IGMrKykge1xuICAgICAgICAgICAgcG9pbnRzLnB1c2gobmV3IFhZVHlwZSgoYyArIDEpICogMTAsIChjICsgMSkgKiAwLjEpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcbiAgICAgICAgYXdhaXQgdGhpcy5kZWxldGUoKTtcbiAgICAgICAgdGhpcy5jcmVhdGUoKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgICBwcml2YXRlIG9uUmVzaXplKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVNYXBTaXplKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmNyZWF0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNyZWF0ZWQgPSB0cnVlO1xuXG4gICAgICAgIGxldCBpbnB1dHMgPSBuZXcgQ29uZmlndXJhdGlvbkVsZW1lbnRJbnB1dChcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLFxuICAgICAgICAgICAgdGhpcy5taW5Qb2ludCxcbiAgICAgICAgICAgIHRoaXMubWF4UG9pbnQsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgdGhpcy5vbkRyYWcsXG4gICAgICAgICAgICB0aGlzLnJlYWRvbmx5XG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLmxvZ1N0eWxlKSB7XG4gICAgICAgICAgICBjb25zdCBjb25mVHJhbnNwYXJlbmN5ID0gMC4zO1xuICAgICAgICAgICAgaW5wdXRzID0gbmV3IENvbmZpZ3VyYXRpb25FbGVtZW50SW5wdXQoXG4gICAgICAgICAgICAgICAgdGhpcy5wb2ludHMsXG4gICAgICAgICAgICAgICAgdGhpcy5taW5Qb2ludCxcbiAgICAgICAgICAgICAgICB0aGlzLm1heFBvaW50LFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzAnXSwgY29uZlRyYW5zcGFyZW5jeSksXG4gICAgICAgICAgICAgICAgICAgICAgICB5U3RhcnQ6IE1hdGgubG9nMTAoMC4xKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlFbmQ6IE1hdGgubG9nMTAoMC40KSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFRvb2xzLmdldFRyYW5zcGFyZW5jeShDaGFydFNjYWxlQ29sb3JzWycwLjQnXSwgY29uZlRyYW5zcGFyZW5jeSksXG4gICAgICAgICAgICAgICAgICAgICAgICB5U3RhcnQ6IE1hdGgubG9nMTAoMC40KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlFbmQ6IE1hdGgubG9nMTAoMSksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBUb29scy5nZXRUcmFuc3BhcmVuY3koQ2hhcnRTY2FsZUNvbG9yc1snMSddLCBjb25mVHJhbnNwYXJlbmN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlFbmQ6IE1hdGgubG9nMTAoMyksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBUb29scy5nZXRUcmFuc3BhcmVuY3koQ2hhcnRTY2FsZUNvbG9yc1snMyddLCBjb25mVHJhbnNwYXJlbmN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlFbmQ6IE1hdGgubG9nMTAoMTApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzEwJ10sIGNvbmZUcmFuc3BhcmVuY3kpLFxuICAgICAgICAgICAgICAgICAgICAgICAgeVN0YXJ0OiBNYXRoLmxvZzEwKDEwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlFbmQ6IE1hdGgubG9nMTAoMjApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzIwJ10sIGNvbmZUcmFuc3BhcmVuY3kpLFxuICAgICAgICAgICAgICAgICAgICAgICAgeVN0YXJ0OiBNYXRoLmxvZzEwKDIwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlFbmQ6IE1hdGgubG9nMTAoMzApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzMwJ10sIGNvbmZUcmFuc3BhcmVuY3kpLFxuICAgICAgICAgICAgICAgICAgICAgICAgeVN0YXJ0OiBNYXRoLmxvZzEwKDMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlFbmQ6IE1hdGgubG9nMTAoNTApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzUwJ10sIGNvbmZUcmFuc3BhcmVuY3kpLFxuICAgICAgICAgICAgICAgICAgICAgICAgeVN0YXJ0OiBNYXRoLmxvZzEwKDUwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlFbmQ6IE1hdGgubG9nMTAoMTAwKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFRvb2xzLmdldFRyYW5zcGFyZW5jeShDaGFydFNjYWxlQ29sb3JzWycxMDAnXSwgY29uZlRyYW5zcGFyZW5jeSksXG4gICAgICAgICAgICAgICAgICAgICAgICB5U3RhcnQ6IE1hdGgubG9nMTAoMTAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlFbmQ6IE1hdGgubG9nMTAoMTUwKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFRvb2xzLmdldFRyYW5zcGFyZW5jeShDaGFydFNjYWxlQ29sb3JzWycxNTAnXSwgY29uZlRyYW5zcGFyZW5jeSksXG4gICAgICAgICAgICAgICAgICAgICAgICB5U3RhcnQ6IE1hdGgubG9nMTAoMTUwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlFbmQ6IE1hdGgubG9nMTAoMjAwKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFRvb2xzLmdldFRyYW5zcGFyZW5jeShDaGFydFNjYWxlQ29sb3JzWycyMDAnXSwgY29uZlRyYW5zcGFyZW5jeSksXG4gICAgICAgICAgICAgICAgICAgICAgICB5U3RhcnQ6IE1hdGgubG9nMTAoMjAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlFbmQ6IE1hdGgubG9nMTAoMjUwKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFRvb2xzLmdldFRyYW5zcGFyZW5jeShDaGFydFNjYWxlQ29sb3JzWycyNTAnXSwgY29uZlRyYW5zcGFyZW5jeSksXG4gICAgICAgICAgICAgICAgICAgICAgICB5U3RhcnQ6IE1hdGgubG9nMTAoMjUwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlFbmQ6IE1hdGgubG9nMTAoMzAwKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFRvb2xzLmdldFRyYW5zcGFyZW5jeShDaGFydFNjYWxlQ29sb3JzWyczMDAnXSwgY29uZlRyYW5zcGFyZW5jeSksXG4gICAgICAgICAgICAgICAgICAgICAgICB5U3RhcnQ6IE1hdGgubG9nMTAoMzAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlFbmQ6IE1hdGgubG9nMTAoNTAwKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHRoaXMub25EcmFnLFxuICAgICAgICAgICAgICAgIHRoaXMucmVhZG9ubHlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVUaW1lciA9IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3QgZmFjdG9yeSA9IG5ldyBFbGVtZW50c0ZhY3RvcnkoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25FbGVtZW50ID0gZmFjdG9yeS5jcmVhdGVDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbnZhc0VsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBkZWxldGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmNyZWF0ZVRpbWVyKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5jcmVhdGVUaW1lcik7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVRpbWVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25FbGVtZW50Py5jaGFydD8uZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmNyZWF0ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNoYW5nZShjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIC8vIEZhc3QgcGF0aDogdXBkYXRlIGNoYXJ0IGRhdGEgaW4tcGxhY2Ugd2hlbiBvbmx5IHBvaW50cyBjaGFuZ2VkXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbkVsZW1lbnQ/LmNoYXJ0ICYmXG4gICAgICAgICAgICBjaGFuZ2VzLnBvaW50cyAmJlxuICAgICAgICAgICAgT2JqZWN0LmtleXMoY2hhbmdlcykubGVuZ3RoID09PSAxXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgY2hhcnQgPSB0aGlzLmNvbmZpZ3VyYXRpb25FbGVtZW50LmNoYXJ0O1xuICAgICAgICAgICAgY2hhcnQuZGF0YS5kYXRhc2V0cy5mb3JFYWNoKChkczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgZHMuZGF0YSA9IHRoaXMucG9pbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjaGFydC51cGRhdGUoJ25vbmUnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZSgpO1xuICAgICAgICB0aGlzLmNyZWF0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTWFwU2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWFwRGl2V2lkdGggPSB0aGlzLmNhbnZhc0VsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlPy5wYXJlbnROb2RlWydjbGllbnRXaWR0aCddO1xuICAgICAgICBjb25zdCBwYWRkaW5nID0gMjA7XG4gICAgICAgIGxldCBjdXJyZW50V2lkdGggPVxuICAgICAgICAgICAgbWFwRGl2V2lkdGggfHxcbiAgICAgICAgICAgIHdpbmRvdy5pbm5lcldpZHRoIHx8XG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHxcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRIZWlnaHQgPVxuICAgICAgICAgICAgdGhpcy5jdXJyZW50SGVpZ2h0IHx8XG4gICAgICAgICAgICB3aW5kb3cuaW5uZXJIZWlnaHQgfHxcbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfHxcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0O1xuICAgICAgICBjdXJyZW50V2lkdGggLT0gcGFkZGluZztcbiAgICAgICAgdGhpcy5jdXJyZW50V2lkdGggPSBjdXJyZW50V2lkdGg7XG4gICAgICAgIHRoaXMuY3VycmVudEhlaWdodCA9IGN1cnJlbnRIZWlnaHQ7XG5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25TaXplQ2hhbmdlZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8aW9uLWdyaWQ+XG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sIGlkPVwiY29sLWNvbnRhaW5lclwiIHNpemUteHM9XCIxMFwiPlxuICAgICAgPGRpdiBbc3R5bGUuaGVpZ2h0LnB4XT1cImN1cnJlbnRIZWlnaHRcIiBpZD1cImNhbnZhcy1jb250YWluZXJcIj5cbiAgICAgICAgPGNhbnZhcyAjY2FudmFzRWxlbWVudD48L2NhbnZhcz5cbiAgICAgIDwvZGl2PlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbCBzaXplLXhzPVwiMlwiPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInJlc2V0KDIpXCIgY29sb3I9XCJsaWdodFwiIHNoYXBlPVwicm91bmRcIiBzaXplPVwic21hbGxcIj4yPC9pb24tYnV0dG9uPlxuICAgICAgPGJyPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInJlc2V0KDQpXCIgY29sb3I9XCJsaWdodFwiIHNoYXBlPVwicm91bmRcIiBzaXplPVwic21hbGxcIj40PC9pb24tYnV0dG9uPlxuICAgICAgPGJyPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInJlc2V0KDYpXCIgY29sb3I9XCJsaWdodFwiIHNoYXBlPVwicm91bmRcIiBzaXplPVwic21hbGxcIj42PC9pb24tYnV0dG9uPlxuICAgICAgPGJyPlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuPC9pb24tZ3JpZD5cbiJdfQ==
|
|
@@ -223,6 +223,9 @@ export class RaainMapComponent {
|
|
|
223
223
|
}
|
|
224
224
|
possibleNewDefaultDate = this.defaultDate;
|
|
225
225
|
}
|
|
226
|
+
if (changes.coordinates && this.mapElement?.mapLeaflet && this.coordinates) {
|
|
227
|
+
this.mapElement.mapLeaflet.setView([this.coordinates.lat, this.coordinates.lng], 10);
|
|
228
|
+
}
|
|
226
229
|
if (changes.markers && this.mapElement?.markersLayer) {
|
|
227
230
|
const { allMarkers } = this.buildMarkersConfig();
|
|
228
231
|
const markersProduced = this.mapElement.updateMarkers(allMarkers);
|
|
@@ -646,4 +649,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
646
649
|
type: HostListener,
|
|
647
650
|
args: ['window:resize', ['$event']]
|
|
648
651
|
}] } });
|
|
649
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFhaW4tbWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL3NoYXJlZC9yYWFpbi1tYXAvcmFhaW4tbWFwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3NyYy9jb3JlL3NoYXJlZC9yYWFpbi1tYXAvcmFhaW4tbWFwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCxTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTNDLE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsZUFBZSxFQUdmLFNBQVMsRUFDVCxZQUFZLEVBRVosaUJBQWlCLEdBRXBCLE1BQU0sVUFBVSxDQUFDOzs7Ozs7QUFRbEIsTUFBTSxPQUFPLGlCQUFpQjtJQXlGMUIsWUFDcUIsTUFBYyxFQUNkLE9BQWdCLEVBQ2hCLEdBQXNCO1FBRnRCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBNUVwQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBRW5CLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUV4Qiw0QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFFaEMsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFFdEIsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFFckIsZ0NBQTJCLEdBQUcsRUFBRSxDQUFDO1FBRWpDLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFJbEIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFJeEIsbUJBQWMsR0FBVyxFQUFFLENBQUM7UUFXNUIsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO1FBRy9DLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUd2QyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQWtCdkMsd0JBQW1CLEdBQWdCLEVBQUUsQ0FBQztRQXFCMUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRWQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBRXJCLE1BQU0sUUFBUSxHQUFxQixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtRQUNoRSxNQUFNLFVBQVUsR0FBcUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQywrREFBK0Q7UUFDOUcsTUFBTSxTQUFTLEdBQXFCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sV0FBVyxHQUFxQixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMvQyxNQUFNLFdBQVcsR0FBcUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLG9FQUFvRTtRQUVwSCxJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ2pCLE1BQU0sRUFBRSxJQUFJLFlBQVksQ0FBQztnQkFDckIsSUFBSSxFQUFFLGtGQUFrRjtnQkFDeEYsUUFBUTtnQkFDUixVQUFVO2FBQ2IsQ0FBQztZQUNGLGVBQWUsRUFBRSxJQUFJLFlBQVksQ0FBQztnQkFDOUIsSUFBSSxFQUFFLHVGQUF1RjtnQkFDN0YsUUFBUTtnQkFDUixVQUFVO2dCQUNWLFdBQVc7YUFDZCxDQUFDO1lBQ0YsY0FBYyxFQUFFLElBQUksWUFBWSxDQUFDO2dCQUM3QixJQUFJLEVBQUUsOEZBQThGO2dCQUNwRyxRQUFRO2dCQUNSLFVBQVU7Z0JBQ1YsV0FBVzthQUNkLENBQUM7WUFDRixNQUFNLEVBQUUsSUFBSSxZQUFZLENBQUM7Z0JBQ3JCLElBQUksRUFBRSxnRkFBZ0Y7Z0JBQ3RGLFFBQVE7Z0JBQ1IsVUFBVTtnQkFDVixXQUFXO2FBQ2QsQ0FBQztZQUNGLGNBQWMsRUFBRSxJQUFJLFlBQVksQ0FBQztnQkFDN0IsSUFBSSxFQUFFLGdGQUFnRjtnQkFDdEYsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLFVBQVUsRUFBRSxXQUFXO2dCQUN2QixXQUFXO2FBQ2QsQ0FBQztZQUNGLE9BQU8sRUFBRSxJQUFJLFlBQVksQ0FBQztnQkFDdEIsSUFBSSxFQUFFLGtGQUFrRjtnQkFDeEYsUUFBUTtnQkFDUixVQUFVO2dCQUNWLFdBQVc7YUFDZCxDQUFDO1lBQ0YsTUFBTSxFQUFFLElBQUksWUFBWSxDQUFDO2dCQUNyQixJQUFJLEVBQUUsaUZBQWlGO2dCQUN2RixRQUFRO2dCQUNSLFVBQVU7Z0JBQ1YsV0FBVzthQUNkLENBQUM7U0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVNLGtCQUFrQjtRQUNyQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVNLFdBQVcsQ0FBQyxPQUFzQjtRQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFTSxhQUFhLENBQUMsS0FBSyxHQUFHLEtBQUs7UUFDOUIsSUFDSSxDQUFDLElBQUksQ0FBQyxrQkFBa0I7WUFDeEIsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFDMUU7WUFDRSxPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU0sSUFBSTtRQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN4RCxPQUFPO1NBQ1Y7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsVUFBVTtZQUNYLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNO2dCQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUMvQixDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUV4RCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzlDO0lBQ0wsQ0FBQztJQUVNLFFBQVE7UUFDWCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDeEQsT0FBTztTQUNWO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUV4RCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTSxJQUFJO1FBQ1AsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxJQUFJO1FBQ1AsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVNLGlCQUFpQjtRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRTtZQUNoRSxPQUFPO1NBQ1Y7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDckU7YUFBTTtZQUNILElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzFFO0lBQ0wsQ0FBQztJQUVNLHNCQUFzQjtRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRTtZQUNoRSxPQUFPO1NBQ1Y7UUFFRCxtREFBbUQ7UUFDbkQsTUFBTSxFQUFDLFVBQVUsRUFBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQy9DLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xFLElBQUksZUFBZSxFQUFFLE1BQU0sRUFBRTtZQUN6QixJQUFJLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDN0MsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdkUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDckU7U0FDSjtJQUNMLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRTtZQUM5QixPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDL0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDaEQsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRTtnQkFDekIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLGNBQWM7YUFDaEc7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxpQkFBaUI7UUFDcEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDakQsQ0FBQztJQUVPLE1BQU07UUFDVixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzdCLElBQUksT0FBTyxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFcEIsTUFBTSxFQUFDLFVBQVUsRUFBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRS9DLE1BQU0sT0FBTyxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQy9CLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDcEMsSUFBSSxDQUFDLGNBQWMsRUFBRTtvQkFDakIsT0FBTztpQkFDVjtnQkFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUU7b0JBQzlELG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7b0JBQzdDLE9BQU8sRUFBRSxVQUFVO2lCQUN0QixDQUFDLENBQUM7Z0JBRUgsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUVuQixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQy9FLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDbEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUN4RSxNQUFNLE1BQU0sR0FBaUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsQ0FDMUQsTUFBTSxDQUFDLFVBQVUsRUFDakIsTUFBTSxDQUFDLFVBQVUsQ0FDcEIsQ0FBQztnQkFFRixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzVDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLE1BQU07UUFDVixJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzVCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUM7UUFDcEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztRQUNwQyxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBRWxDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVPLE1BQU0sQ0FBQyxPQUFzQjtRQUNqQyxJQUFJLHNCQUE0QixDQUFDO1FBRWpDLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtZQUNyQixJQUNJLElBQUksQ0FBQyxhQUFhLENBQ2QsT0FBTyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQ2hDLE9BQU8sQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUNwQyxFQUNIO2dCQUNFLE9BQU87YUFDVjtZQUNELHNCQUFzQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7U0FDN0M7UUFFRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUU7WUFDbEQsTUFBTSxFQUFDLFVBQVUsRUFBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQy9DLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xFLElBQUksZUFBZSxFQUFFLE1BQU0sRUFBRTtnQkFDekIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUN2RSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDckU7YUFDSjtTQUNKO1FBRUQsSUFDSSxPQUFPLENBQUMsT0FBTztZQUNmLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYztZQUM1QixJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUMzQztZQUNFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDM0Q7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLG1CQUFtQixFQUFFO1lBQ2hELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUMxQjtRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxjQUFjLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUN0RCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDcEI7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsY0FBYyxJQUFJLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRTtZQUNwRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMvRCxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDMUM7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU8sU0FBUztRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNoQyxPQUFPO1NBQ1Y7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMvRCxNQUFNLFdBQVcsR0FBVyxNQUFNLEVBQUUscUJBQXFCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFNUYsSUFBSSxXQUFXLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxFQUFFO1lBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUN6RSxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsY0FBYyxPQUFPLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztTQUNwSDthQUFNO1lBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7U0FDekI7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFckMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxNQUFXO1FBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzdELElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2FBQzlCO1lBQ0QsT0FBTztTQUNWO1FBRUQsa0NBQWtDO1FBQ2xDLE1BQU0sYUFBYSxHQUNmLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBMkIsRUFBRSxFQUFFLENBQ3pFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDZixHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ3pCLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDekIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO1NBQ2pCLENBQUMsQ0FBQyxDQUNOLElBQUksRUFBRSxDQUFDO1FBRVosSUFBSSxDQUFDLG1CQUFtQixHQUFHLGFBQWEsQ0FBQztRQUN6QyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRU8sbUJBQW1CO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFO1lBQ2hFLE9BQU87U0FDVjtRQUVELE1BQU0sRUFBQyxVQUFVLEVBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMvQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRSxJQUFJLGVBQWUsRUFBRSxNQUFNLEVBQUU7WUFDekIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzdDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3ZFLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3JFO1NBQ0o7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsV0FBa0I7UUFDdkMsd0JBQXdCO1FBQ3hCLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7WUFDOUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDOUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUN4QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ25DO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7U0FDM0Y7UUFFRCx3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN4RCxPQUFPO1NBQ1Y7UUFFRCxvQkFBb0I7UUFDcEIsSUFDSSxXQUFXO1lBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDbkY7WUFDRSxJQUFJLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQztTQUNqQztRQUNELElBQ0ksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUN2RjtZQUNFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQztRQUVELElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzFCLFNBQVMsR0FBRyxJQUFJLENBQUM7U0FDcEI7UUFDRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXBELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQywyQkFBMkIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ2xFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFDO1FBRWxGLElBQUksU0FBUyxFQUFFO1lBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QjtJQUNMLENBQUM7SUFFTyxrQkFBa0I7UUFDdEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ25DLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ3JELE1BQU07YUFDVDtZQUNELEtBQUssRUFBRSxDQUFDO1NBQ1g7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU8sTUFBTSxDQUFDLEdBQVE7UUFDbkIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUN2QixNQUFNLE1BQU0sR0FBaUIsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsQ0FDMUQsTUFBTSxDQUFDLFVBQVUsRUFDakIsTUFBTSxDQUFDLFVBQVUsQ0FDcEIsQ0FBQztRQUNGLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU8sU0FBUyxDQUFDLEdBQVE7UUFDdEIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUN2QixNQUFNLE1BQU0sR0FBaUIsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsQ0FDMUQsTUFBTSxDQUFDLFVBQVUsRUFDakIsTUFBTSxDQUFDLFVBQVUsQ0FDcEIsQ0FBQztRQUNGLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU8scUJBQXFCLENBQ3pCLGVBQXFFLEVBQ3JFLE1BQVcsRUFDWCxJQUFZO1FBRVosMkRBQTJEO1FBQzNELElBQUksQ0FBQyxZQUFZLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQztRQUMxQyxJQUFJLENBQUMsYUFBYSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUM7UUFFNUMsNkRBQTZEO1FBQzdELGtGQUFrRjtRQUNsRiwrQ0FBK0M7SUFDbkQsQ0FBQztJQUVPLHFCQUFxQixDQUN6QixNQUFXLEVBQ1gsZUFBZ0QsRUFDaEQsSUFBWTtRQUVaLG9EQUFvRDtRQUNwRCxNQUFNLGtCQUFrQixHQUFHLFlBQVksQ0FBQyxDQUFDLFNBQVM7UUFDbEQsTUFBTSxjQUFjLEdBQ2hCLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUUxQixPQUFPO1lBQ0gsY0FBYztZQUNkLGNBQWMsRUFBRSxDQUFDLEdBQUcsY0FBYztZQUNsQyxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxNQUFNO1NBQ25FLENBQUM7SUFDTixDQUFDO0lBRU8sY0FBYyxDQUFDLEdBQXlDO1FBQzVELE1BQU0sR0FBRyxHQUFXLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxNQUFNLEdBQUcsR0FBVyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFOUMsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQ2hCLElBQUksUUFBUSxHQUFHLEdBQUcsRUFDZCxRQUFRLEdBQUcsR0FBRyxFQUNkLFNBQVMsR0FBRyxHQUFHLEVBQ2YsU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUM1QixNQUFNLGFBQWEsR0FBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBOEIsQ0FBQyxNQUFNLENBQ25GLENBQUMsQ0FBb0IsRUFBRSxFQUFFO2dCQUNyQixPQUFPLENBQ0gsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUc7b0JBQ3ZCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJO29CQUN2QixDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRztvQkFDdkIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FDMUIsQ0FBQztZQUNOLENBQUMsQ0FDSixDQUFDO1lBRUYsSUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDNUIsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3RELFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN2RCxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkQsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pELFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVEO2lCQUFNO2dCQUNILHdEQUF3RDthQUMzRDtTQUNKO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ2pCLGdGQUFnRjtZQUNoRiw2RUFBNkU7WUFDN0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxhQUFhLEdBQUcsNkJBQTZCLEdBQUcseUJBQXlCLEtBQUssRUFBRSxDQUFDO1lBQy9GLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sVUFBVSxDQUFDLEdBQVE7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRTtZQUMvQixPQUFPO1NBQ1Y7UUFFRCxJQUFJLGFBQXdCLENBQUM7UUFDN0IsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNyQyxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFO2dCQUN4QyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUN0QixNQUFNO2FBQ1Q7U0FDSjtRQUVELElBQUksYUFBYSxFQUFFO1lBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDcEIsSUFBSSxTQUFTLENBQ1QsYUFBYSxDQUFDLEdBQUcsRUFDakIsYUFBYSxDQUFDLEdBQUcsRUFDakIsU0FBUyxFQUNULGFBQWEsQ0FBQyxFQUFFLEVBQ2hCLGFBQWEsQ0FBQyxJQUFJLEVBQ2xCLGFBQWEsQ0FBQyxLQUFLLENBQ3RCLENBQ0osQ0FBQztTQUNMO2FBQU07WUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDcEIsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUMvRSxDQUFDO1NBQ0w7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQVEsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFHTyxRQUFRLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVPLGFBQWE7UUFDakIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2RixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxZQUFZLEdBQ1osV0FBVztZQUNYLE1BQU0sQ0FBQyxVQUFVO1lBQ2pCLFFBQVEsQ0FBQyxlQUFlLENBQUMsV0FBVztZQUNwQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUM5QixNQUFNLGFBQWEsR0FDZixJQUFJLENBQUMsYUFBYTtZQUNsQixNQUFNLENBQUMsV0FBVztZQUNsQixRQUFRLENBQUMsZUFBZSxDQUFDLFlBQVk7WUFDckMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDL0IsWUFBWSxJQUFJLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUVuQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDakIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGVBQWU7UUFDbkIsSUFDSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLE1BQU07WUFDNUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUM1RDtZQUNFLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RGO1FBRUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxXQUFXLENBQUMsT0FBd0IsRUFBRSxLQUFhO1FBQ3ZELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxhQUFhLEVBQUU7WUFDckMsT0FBTztTQUNWO1FBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMxQyxPQUFPLEVBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsV0FBVyxDQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFDakMsSUFBSSxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUN6RCxDQUFDO0lBQ04sQ0FBQztJQUVPLFdBQVc7UUFDZixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUM7U0FDdkM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssa0JBQWtCO1FBQ3RCLE1BQU0sVUFBVSxHQUE2RDtZQUN6RSxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFDO1lBQ2xGO2dCQUNJLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsSUFBSSxFQUFFO2dCQUMvQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjO2FBQ2xEO1lBQ0Q7Z0JBQ0ksV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsZUFBZSxJQUFJLEVBQUU7Z0JBQ2hELFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWU7YUFDbkQ7WUFDRCxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFDO1lBQ2xGO2dCQUNJLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsSUFBSSxFQUFFO2dCQUMvQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjO2FBQ2xEO1lBQ0Qsa0ZBQWtGO1NBQ3JGLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNyRSxVQUFVLENBQUMsSUFBSSxDQUFDO2dCQUNaLFdBQVcsRUFBRSxJQUFJLENBQUMsbUJBQW1CO2dCQUNyQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjO2FBQ2xELENBQUMsQ0FBQztTQUNOO1FBRUQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDdkIsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUU7Z0JBQzdDLGlFQUFpRTtnQkFDakUsaUVBQWlFO2dCQUNqRSxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO2dCQUM5QyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ25CLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7Z0JBRXBCLGtEQUFrRDtnQkFDbEQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO2dCQUNwRixNQUFNLElBQUksR0FDTixPQUFPO29CQUNQLENBQUMsQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQztnQkFDakYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFbEMsVUFBVSxDQUFDLElBQUksQ0FBQztvQkFDWixXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUM7b0JBQ3JCLFlBQVksRUFBRSxJQUFJLFlBQVksQ0FBQzt3QkFDM0IsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJO3dCQUM1QyxLQUFLLEVBQUUsUUFBUTt3QkFDZixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsVUFBVSxFQUFFLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDO3dCQUN4QyxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVc7d0JBQzFELGFBQWEsRUFBRSxNQUFNLENBQUMsR0FBRzt3QkFDekIsU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTO3FCQUN6RCxDQUFDO2lCQUNMLENBQUMsQ0FBQzthQUNOO1NBQ0o7UUFDRCxPQUFPLEVBQUMsVUFBVSxFQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssYUFBYSxDQUFDLEtBQW9CLEVBQUUsS0FBb0I7UUFDNUQsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNsQixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUNELE1BQU0sVUFBVSxHQUFHLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzRixNQUFNLFVBQVUsR0FBRyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0YsT0FBTyxVQUFVLEtBQUssVUFBVSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLGVBQWUsQ0FBQyxPQUFlLEVBQUUsSUFBVTtRQUMvQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ25CLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssc0JBQXNCLENBQUMsT0FBYztRQUN6QyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1YsT0FBTztTQUNWO1FBQ0QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssZ0JBQWdCLENBQUMsS0FBYTtRQUNsQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxxQkFBcUI7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbEIsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQzs7K0dBdHlCUSxpQkFBaUI7bUdBQWpCLGlCQUFpQixvOEJDcEM5QixtbkhBOEVBOzRGRDFDYSxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0ksV0FBVzttSkFNZCxXQUFXO3NCQURqQixLQUFLO2dCQUdDLE9BQU87c0JBRGIsS0FBSztnQkFXQyxtQkFBbUI7c0JBRHpCLEtBQUs7Z0JBR0MsUUFBUTtzQkFEZCxLQUFLO2dCQUdDLFdBQVc7c0JBRGpCLEtBQUs7Z0JBR0MsZ0JBQWdCO3NCQUR0QixLQUFLO2dCQUdDLHVCQUF1QjtzQkFEN0IsS0FBSztnQkFHQyxjQUFjO3NCQURwQixLQUFLO2dCQUdDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBR0MsMkJBQTJCO3NCQURqQyxLQUFLO2dCQUdDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBR0MsYUFBYTtzQkFEbkIsS0FBSztnQkFPQyxjQUFjO3NCQURwQixLQUFLO2dCQUdDLFdBQVc7c0JBRGpCLEtBQUs7Z0JBSUMsU0FBUztzQkFEZixLQUFLO2dCQUdDLEtBQUs7c0JBRFgsS0FBSztnQkFLQyxjQUFjO3NCQURwQixNQUFNO2dCQUlBLFdBQVc7c0JBRGpCLE1BQU07Z0JBSUEsVUFBVTtzQkFEaEIsTUFBTTtnQkFnQkcsU0FBUztzQkFEbEIsU0FBUzt1QkFBQyxZQUFZO2dCQUdiLGNBQWM7c0JBRHZCLFNBQVM7dUJBQUMsYUFBYTtnQkFtaUJoQixRQUFRO3NCQURmLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q2FydGVzaWFuVG9vbHN9IGZyb20gJ3JhYWluLW1vZGVsJztcbmltcG9ydCB7TGF0TG5nQm91bmRzfSBmcm9tICdsZWFmbGV0JztcbmltcG9ydCB7XG4gICAgQ2FydGVzaWFuTWFwVmFsdWUsXG4gICAgQ2hhcnRTY2FsZUNvbG9ycyxcbiAgICBFbGVtZW50c0ZhY3RvcnksXG4gICAgRnJhbWVDb250YWluZXIsXG4gICAgTWFwRWxlbWVudCxcbiAgICBNYXBMYXRMbmcsXG4gICAgUmFhaW5EaXZJY29uLFxuICAgIFNjYWxlRWxlbWVudCxcbiAgICBTY2FsZUVsZW1lbnRJbnB1dCxcbiAgICBUaW1lZnJhbWVDb250YWluZXJzLFxufSBmcm9tICdyYWFpbi11aSc7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJy4uL3N0b3JhZ2Uuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncmFhaW4tbWFwJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcmFhaW4tbWFwLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9yYWFpbi1tYXAuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUmFhaW5NYXBDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY29vcmRpbmF0ZXM/OiBNYXBMYXRMbmc7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbWFya2Vycz86IHtcbiAgICAgICAgZ2F1Z2VzPzogTWFwTGF0TG5nW107XG4gICAgICAgIHNlbGVjdGVkR2F1Z2VzPzogTWFwTGF0TG5nW107XG4gICAgICAgIHBpeGVscz86IE1hcExhdExuZ1tdO1xuICAgICAgICBib3JkZXJzPzogTWFwTGF0TG5nW107XG4gICAgICAgIHNwZWVkcz86IE1hcExhdExuZ1tdO1xuICAgICAgICBnYXVnZXNJbkNvbXBhcmU/OiBNYXBMYXRMbmdbXTtcbiAgICAgICAgcGl4ZWxzU29sdXRpb24/OiBNYXBMYXRMbmdbXTtcbiAgICB9O1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRpbWVmcmFtZUNvbnRhaW5lcnM/OiBUaW1lZnJhbWVDb250YWluZXJzO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGF1dG9wbGF5ID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd01hcmtlcnMgPSB0cnVlO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dTcGVlZE1hcmtlcnMgPSB0cnVlO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dWaXNpYmxlUGl4ZWxNYXJrZXJzID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd05hdmlnYXRpb24gPSB0cnVlO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dEYXRlUmFuZ2UgPSB0cnVlO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGN1bXVsYXRpdmVEdXJhdGlvbkluTWludXRlcyA9IDYwO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNjYWxlTGFiZWwgPSAnbW0nO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGN1cnJlbnRIZWlnaHQ6IG51bWJlcjtcblxuICAgIHB1YmxpYyBzaG93TWFwU2V0dGluZ3MgPSBmYWxzZTtcbiAgICBwdWJsaWMgY3VycmVudFdpZHRoOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0aW1lZnJhbWVEYXRlczogRGF0ZVtdID0gW107XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGVmYXVsdERhdGU/OiBEYXRlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc3VtVmFsdWVzPzogQ2FydGVzaWFuTWFwVmFsdWVbXTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzdW1Gbj86IChjYXJ0ZXNpYW5NYXBWYWx1ZXM6IENhcnRlc2lhbk1hcFZhbHVlW10pID0+IG51bWJlcjtcbiAgICBwdWJsaWMgc3VtUmVzdWx0OiBzdHJpbmc7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgc2VsZWN0ZWRNYXJrZXIgPSBuZXcgRXZlbnRFbWl0dGVyPE1hcExhdExuZz4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjaGFuZ2VkRGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjaGFuZ2VkU3VtID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBwdWJsaWMgYWxwaGE6IG51bWJlcjtcbiAgICBwdWJsaWMgbWNUZXh0O1xuICAgIHB1YmxpYyBuZXh0RGF0ZTogRGF0ZTtcbiAgICBwdWJsaWMgcG9zc2libGVOYW1lczogc3RyaW5nW107XG4gICAgcHVibGljIHBvc3NpYmxlRGF0ZXM6IERhdGVbXTtcbiAgICBwdWJsaWMgZGF0ZVRvU2hvdzogRGF0ZTtcbiAgICBwdWJsaWMgZGF0ZVRvU2hvd0FzU3RyaW5nOiBzdHJpbmc7XG4gICAgcHVibGljIHRpbWVmcmFtZU5hbWVUb1Nob3c6IHN0cmluZztcbiAgICBwdWJsaWMgcGl4ZWxzQ291bnQ6IG51bWJlcjtcbiAgICBwdWJsaWMgY3VtdWxhdGl2ZURhdGVGcm9tOiBEYXRlO1xuICAgIHByb3RlY3RlZCBjdXJyZW50RnJhbWVDb250YWluZXI6IEZyYW1lQ29udGFpbmVyO1xuICAgIHByb3RlY3RlZCBjYXJ0ZXNpYW5Ub29sczogQ2FydGVzaWFuVG9vbHM7XG4gICAgQFZpZXdDaGlsZCgncHJpbWFyeU1hcCcpXG4gICAgcHJvdGVjdGVkIG1hcERpdlJlZjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdjYW52YXNTY2FsZScpXG4gICAgcHJvdGVjdGVkIHNjYWxlQ2FudmFzUmVmOiBFbGVtZW50UmVmO1xuICAgIHByaXZhdGUgdmlzaWJsZVBpeGVsTWFya2VyczogTWFwTGF0TG5nW10gPSBbXTtcbiAgICBwcml2YXRlIG1hcEVsZW1lbnQ6IE1hcEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBzY2FsZUVsZW1lbnQ6IFNjYWxlRWxlbWVudDtcblxuICAgIHByaXZhdGUgb25TaXplQ2hhbmdlZDtcbiAgICBwcml2YXRlIGNyZWF0ZWQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSByYWFpbkRpdkljb25zOiB7XG4gICAgICAgIGdhdWdlczogUmFhaW5EaXZJY29uO1xuICAgICAgICBzZWxlY3RlZEdhdWdlczogUmFhaW5EaXZJY29uO1xuICAgICAgICBwaXhlbHM6IFJhYWluRGl2SWNvbjtcbiAgICAgICAgYm9yZGVyczogUmFhaW5EaXZJY29uO1xuICAgICAgICBzcGVlZHM6IFJhYWluRGl2SWNvbjtcbiAgICAgICAgZ2F1Z2VzSW5Db21wYXJlOiBSYWFpbkRpdkljb247XG4gICAgICAgIHBpeGVsc1NvbHV0aW9uOiBSYWFpbkRpdkljb247XG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICAgICkge1xuICAgICAgICB0aGlzLmRlbGV0ZSgpO1xuXG4gICAgICAgIHRoaXMuY2FydGVzaWFuVG9vbHMgPSBuZXcgQ2FydGVzaWFuVG9vbHMoKTtcbiAgICAgICAgdGhpcy5waXhlbHNDb3VudCA9IDE7XG5cbiAgICAgICAgY29uc3QgaWNvblNpemU6IFtudW1iZXIsIG51bWJlcl0gPSBbNDAsIDQwXTsgLy8gc2l6ZSBvZiB0aGUgaWNvblxuICAgICAgICBjb25zdCBpY29uQW5jaG9yOiBbbnVtYmVyLCBudW1iZXJdID0gWzIwLCAyMF07IC8vIHBvaW50IG9mIHRoZSBpY29uIHdoaWNoIHdpbGwgY29ycmVzcG9uZCB0byBtYXJrZXIncyBsb2NhdGlvblxuICAgICAgICBjb25zdCBwaXhlbFNpemU6IFtudW1iZXIsIG51bWJlcl0gPSBbNDEsIDQxXTtcbiAgICAgICAgY29uc3QgcGl4ZWxBbmNob3I6IFtudW1iZXIsIG51bWJlcl0gPSBbMjAsIDIwXTtcbiAgICAgICAgY29uc3QgcG9wdXBBbmNob3I6IFtudW1iZXIsIG51bWJlcl0gPSBbMCwgLTIwXTsgLy8gcG9pbnQgZnJvbSB3aGljaCB0aGUgcG9wdXAgc2hvdWxkIG9wZW4gcmVsYXRpdmUgdG8gdGhlIGljb25BbmNob3JcblxuICAgICAgICB0aGlzLnJhYWluRGl2SWNvbnMgPSB7XG4gICAgICAgICAgICBnYXVnZXM6IG5ldyBSYWFpbkRpdkljb24oe1xuICAgICAgICAgICAgICAgIGh0bWw6ICc8aW1nIHNyYz1cIi4vYXNzZXRzL21hcHMvbWFya2VyLXBsdXZpby5wbmdcIiBzdHlsZT1cIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7XCIgLz4nLFxuICAgICAgICAgICAgICAgIGljb25TaXplLFxuICAgICAgICAgICAgICAgIGljb25BbmNob3IsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGdhdWdlc0luQ29tcGFyZTogbmV3IFJhYWluRGl2SWNvbih7XG4gICAgICAgICAgICAgICAgaHRtbDogJzxpbWcgc3JjPVwiLi9hc3NldHMvbWFwcy9tYXJrZXItcGx1dmlvLWRpYWcucG5nXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlO1wiIC8+JyxcbiAgICAgICAgICAgICAgICBpY29uU2l6ZSxcbiAgICAgICAgICAgICAgICBpY29uQW5jaG9yLFxuICAgICAgICAgICAgICAgIHBvcHVwQW5jaG9yLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzZWxlY3RlZEdhdWdlczogbmV3IFJhYWluRGl2SWNvbih7XG4gICAgICAgICAgICAgICAgaHRtbDogJzxpbWcgc3JjPVwiLi9hc3NldHMvbWFwcy9tYXJrZXItcGx1dmlvLWRpYWctc2VsZWN0LnBuZ1wiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTtcIiAvPicsXG4gICAgICAgICAgICAgICAgaWNvblNpemUsXG4gICAgICAgICAgICAgICAgaWNvbkFuY2hvcixcbiAgICAgICAgICAgICAgICBwb3B1cEFuY2hvcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcGl4ZWxzOiBuZXcgUmFhaW5EaXZJY29uKHtcbiAgICAgICAgICAgICAgICBodG1sOiAnPGltZyBzcmM9XCIuL2Fzc2V0cy9tYXBzL21hcmtlci1yYWluLnBuZ1wiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTtcIiAvPicsXG4gICAgICAgICAgICAgICAgaWNvblNpemUsXG4gICAgICAgICAgICAgICAgaWNvbkFuY2hvcixcbiAgICAgICAgICAgICAgICBwb3B1cEFuY2hvcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcGl4ZWxzU29sdXRpb246IG5ldyBSYWFpbkRpdkljb24oe1xuICAgICAgICAgICAgICAgIGh0bWw6ICc8aW1nIHNyYz1cIi4vYXNzZXRzL21hcHMvbWFya2VyLXJhaW4ucG5nXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlO1wiIC8+JyxcbiAgICAgICAgICAgICAgICBpY29uU2l6ZTogcGl4ZWxTaXplLFxuICAgICAgICAgICAgICAgIGljb25BbmNob3I6IHBpeGVsQW5jaG9yLFxuICAgICAgICAgICAgICAgIHBvcHVwQW5jaG9yLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBib3JkZXJzOiBuZXcgUmFhaW5EaXZJY29uKHtcbiAgICAgICAgICAgICAgICBodG1sOiAnPGltZyBzcmM9XCIuL2Fzc2V0cy9tYXBzL21hcmtlci1zaGFkb3cucG5nXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlO1wiIC8+JyxcbiAgICAgICAgICAgICAgICBpY29uU2l6ZSxcbiAgICAgICAgICAgICAgICBpY29uQW5jaG9yLFxuICAgICAgICAgICAgICAgIHBvcHVwQW5jaG9yLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzcGVlZHM6IG5ldyBSYWFpbkRpdkljb24oe1xuICAgICAgICAgICAgICAgIGh0bWw6ICc8aW1nIHNyYz1cIi4vYXNzZXRzL21hcHMvbWFya2VyLXNwZWVkLnN2Z1wiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTtcIiAvPicsXG4gICAgICAgICAgICAgICAgaWNvblNpemUsXG4gICAgICAgICAgICAgICAgaWNvbkFuY2hvcixcbiAgICAgICAgICAgICAgICBwb3B1cEFuY2hvcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3JlYXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGFuZ2UoY2hhbmdlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93VGltZWZyYW1lKGZvcmNlID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuZGF0ZVRvU2hvd0FzU3RyaW5nIHx8XG4gICAgICAgICAgICAoIWZvcmNlICYmIHRoaXMuYXJlRGF0ZXNFcXVhbCh0aGlzLmRhdGVUb1Nob3dBc1N0cmluZywgdGhpcy5kYXRlVG9TaG93KSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRhdGVUb1Nob3cgPSBuZXcgRGF0ZSh0aGlzLmRhdGVUb1Nob3dBc1N0cmluZyk7XG4gICAgICAgIHRoaXMuY2hhbmdlZERhdGUuZW1pdCh0aGlzLmRhdGVUb1Nob3cpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZXh0KCkge1xuICAgICAgICBpZiAoIXRoaXMucG9zc2libGVEYXRlcyB8fCB0aGlzLnBvc3NpYmxlRGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0RGF0ZVRvU2hvd0luZGV4KCk7XG4gICAgICAgIHRoaXMuZGF0ZVRvU2hvdyA9XG4gICAgICAgICAgICBpbmRleCArIDEgPCB0aGlzLnBvc3NpYmxlRGF0ZXMubGVuZ3RoXG4gICAgICAgICAgICAgICAgPyB0aGlzLnBvc3NpYmxlRGF0ZXNbaW5kZXggKyAxXVxuICAgICAgICAgICAgICAgIDogdGhpcy5wb3NzaWJsZURhdGVzWzBdO1xuICAgICAgICB0aGlzLmRhdGVUb1Nob3dBc1N0cmluZyA9IHRoaXMuZGF0ZVRvU2hvdy50b0lTT1N0cmluZygpO1xuXG4gICAgICAgIHRoaXMuc2hvd1RpbWVmcmFtZSh0cnVlKTtcbiAgICAgICAgaWYgKHRoaXMuYXV0b3BsYXkpIHtcbiAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMubmV4dCgpLCAyMDAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBwcmV2aW91cygpIHtcbiAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgIGlmICghdGhpcy5wb3NzaWJsZURhdGVzIHx8IHRoaXMucG9zc2libGVEYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXREYXRlVG9TaG93SW5kZXgoKTtcbiAgICAgICAgdGhpcy5kYXRlVG9TaG93ID0gaW5kZXggPiAwID8gdGhpcy5wb3NzaWJsZURhdGVzW2luZGV4IC0gMV0gOiB0aGlzLnBvc3NpYmxlRGF0ZXNbMF07XG4gICAgICAgIHRoaXMuZGF0ZVRvU2hvd0FzU3RyaW5nID0gdGhpcy5kYXRlVG9TaG93LnRvSVNPU3RyaW5nKCk7XG5cbiAgICAgICAgdGhpcy5zaG93VGltZWZyYW1lKHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwbGF5KCkge1xuICAgICAgICB0aGlzLmF1dG9wbGF5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0b3AoKSB7XG4gICAgICAgIHRoaXMuYXV0b3BsYXkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2hhbmdlU2hvd01hcmtlcnMoKSB7XG4gICAgICAgIGlmICghdGhpcy5tYXBFbGVtZW50Py5tYXJrZXJzTGF5ZXIgfHwgIXRoaXMubWFwRWxlbWVudD8ubWFwTGVhZmxldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvd01hcmtlcnMpIHtcbiAgICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5tYXJrZXJzTGF5ZXIuYWRkVG9NYXAodGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNMYXllci5yZW1vdmVGcm9tTWFwKHRoaXMubWFwRWxlbWVudC5tYXBMZWFmbGV0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjaGFuZ2VTaG93U3BlZWRNYXJrZXJzKCkge1xuICAgICAgICBpZiAoIXRoaXMubWFwRWxlbWVudD8ubWFya2Vyc0xheWVyIHx8ICF0aGlzLm1hcEVsZW1lbnQ/Lm1hcExlYWZsZXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlYnVpbGQgbWFya2VycyB3aXRoIGN1cnJlbnQgdmlzaWJpbGl0eSBzZXR0aW5nc1xuICAgICAgICBjb25zdCB7YWxsTWFya2Vyc30gPSB0aGlzLmJ1aWxkTWFya2Vyc0NvbmZpZygpO1xuICAgICAgICBjb25zdCBtYXJrZXJzUHJvZHVjZWQgPSB0aGlzLm1hcEVsZW1lbnQudXBkYXRlTWFya2VycyhhbGxNYXJrZXJzKTtcbiAgICAgICAgaWYgKG1hcmtlcnNQcm9kdWNlZD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmJpbmRNYXJrZXJzQ2xpY2tFdmVudHMobWFya2Vyc1Byb2R1Y2VkKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dNYXJrZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNMYXllci5yZW1vdmVGcm9tTWFwKHRoaXMubWFwRWxlbWVudC5tYXBMZWFmbGV0KTtcbiAgICAgICAgICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFya2Vyc0xheWVyLmFkZFRvTWFwKHRoaXMubWFwRWxlbWVudC5tYXBMZWFmbGV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjaGFuZ2VBbHBoYSgpIHtcbiAgICAgICAgdGhpcy5zdG9yYWdlLnNldCgncmFhaW4tbWFwLWFscGhhJywgdGhpcy5hbHBoYSk7XG4gICAgICAgIGlmICghdGhpcy5tYXBFbGVtZW50Py5tYXBMZWFmbGV0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1hcEVsZW1lbnQuYWxwaGEgPSAwLjMgKyB0aGlzLmFscGhhICogMC43O1xuICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldC5lYWNoTGF5ZXIoKGxheWVyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChsYXllci5fY29udGFpbmVyPy5zdHlsZSkge1xuICAgICAgICAgICAgICAgIGxheWVyLl9jb250YWluZXIuc3R5bGUuZmlsdGVyID0gYGJyaWdodG5lc3MoJHsoMTAgLSB0aGlzLmFscGhhICogMTApICogMTB9JSlgOyAvLyBpbnZlcnQoMSkgP1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlTWFwU2V0dGluZ3MoKSB7XG4gICAgICAgIHRoaXMuc2hvd01hcFNldHRpbmdzID0gIXRoaXMuc2hvd01hcFNldHRpbmdzO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlKCkge1xuICAgICAgICBjb25zdCBjcmVhdGVkID0gdGhpcy5jcmVhdGVkO1xuICAgICAgICBpZiAoY3JlYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3JlYXRlZCA9IHRydWU7XG5cbiAgICAgICAgY29uc3Qge2FsbE1hcmtlcnN9ID0gdGhpcy5idWlsZE1hcmtlcnNDb25maWcoKTtcblxuICAgICAgICBjb25zdCBmYWN0b3J5ID0gbmV3IEVsZW1lbnRzRmFjdG9yeSh0aGlzLmNvb3JkaW5hdGVzLCB0cnVlKTtcbiAgICAgICAgdGhpcy5jcmVhdGVTY2FsZShmYWN0b3J5LCB0aGlzLnNjYWxlTGFiZWwpO1xuXG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWRPdXRzaWRlID0gdGhpcy5jcmVhdGVkO1xuICAgICAgICAgICAgICAgIGlmICghY3JlYXRlZE91dHNpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMubWFwRWxlbWVudCA9IGZhY3RvcnkuY3JlYXRlTWFwKHRoaXMubWFwRGl2UmVmLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZWZyYW1lQ29udGFpbmVyczogdGhpcy50aW1lZnJhbWVDb250YWluZXJzLFxuICAgICAgICAgICAgICAgICAgICBtYXJrZXJzOiBhbGxNYXJrZXJzLFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VBbHBoYSgpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQ/Lm9uKCdtb3VzZW1vdmUnLCAoZXZ0KSA9PiB0aGlzLm9uTWFwTW91c2VNb3ZlKGV2dCkpO1xuICAgICAgICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5tYXBMZWFmbGV0Py5vbignem9vbScsIChldnQpID0+IHRoaXMub25ab29tKGV2dCkpO1xuICAgICAgICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5tYXBMZWFmbGV0Py5vbignbW92ZWVuZCcsIChldnQpID0+IHRoaXMub25Nb3ZlRW5kKGV2dCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kczogTGF0TG5nQm91bmRzID0gdGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQuZ2V0Qm91bmRzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5waXhlbHNDb3VudCA9IHRoaXMuY2FydGVzaWFuVG9vbHMuaG93TWFueVBpeGVsc0luRWFydGhNYXAoXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kcy5fc291dGhXZXN0LFxuICAgICAgICAgICAgICAgICAgICBib3VuZHMuX25vcnRoRWFzdFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRNYXJrZXJzQ2xpY2tFdmVudHModGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNQcm9kdWNlZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vblNpemVDaGFuZ2VkID0gKCkgPT4gdGhpcy51cGRhdGVMYXllckRpbWVuc2lvbnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU1hcFNpemUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZU5hdmlnYXRpb24odGhpcy5kZWZhdWx0RGF0ZSk7XG4gICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlbGV0ZSgpIHtcbiAgICAgICAgdGhpcy5tYXBFbGVtZW50Py5tYXBMZWFmbGV0Py5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5tYXBFbGVtZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm1jVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLm5leHREYXRlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnBvc3NpYmxlTmFtZXMgPSBbXTtcbiAgICAgICAgdGhpcy5wb3NzaWJsZURhdGVzID0gW107XG4gICAgICAgIHRoaXMudGltZWZyYW1lTmFtZVRvU2hvdyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5kYXRlVG9TaG93ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmRhdGVUb1Nob3dBc1N0cmluZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5jdW11bGF0aXZlRGF0ZUZyb20gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMub25TaXplQ2hhbmdlZCA9ICgpID0+IHt9O1xuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZUNvbnRhaW5lciA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5jcmVhdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWxwaGEgPSB0aGlzLnN0b3JhZ2UuZ2V0KCdyYWFpbi1tYXAtYWxwaGEnLCAwLjQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hhbmdlKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgbGV0IHBvc3NpYmxlTmV3RGVmYXVsdERhdGU6IERhdGU7XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuZGVmYXVsdERhdGUpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmFyZURhdGVzRXF1YWwoXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZXMuZGVmYXVsdERhdGUuY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLmRlZmF1bHREYXRlLnByZXZpb3VzVmFsdWVcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwb3NzaWJsZU5ld0RlZmF1bHREYXRlID0gdGhpcy5kZWZhdWx0RGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLm1hcmtlcnMgJiYgdGhpcy5tYXBFbGVtZW50Py5tYXJrZXJzTGF5ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHthbGxNYXJrZXJzfSA9IHRoaXMuYnVpbGRNYXJrZXJzQ29uZmlnKCk7XG4gICAgICAgICAgICBjb25zdCBtYXJrZXJzUHJvZHVjZWQgPSB0aGlzLm1hcEVsZW1lbnQudXBkYXRlTWFya2VycyhhbGxNYXJrZXJzKTtcbiAgICAgICAgICAgIGlmIChtYXJrZXJzUHJvZHVjZWQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYmluZE1hcmtlcnNDbGlja0V2ZW50cyhtYXJrZXJzUHJvZHVjZWQpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNob3dNYXJrZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5tYXJrZXJzTGF5ZXIucmVtb3ZlRnJvbU1hcCh0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5tYXJrZXJzTGF5ZXIuYWRkVG9NYXAodGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNoYW5nZXMubWFya2VycyAmJlxuICAgICAgICAgICAgdGhpcy5tYXJrZXJzPy5zZWxlY3RlZEdhdWdlcyAmJlxuICAgICAgICAgICAgdGhpcy5tYXJrZXJzPy5zZWxlY3RlZEdhdWdlcy5sZW5ndGggPT09IDFcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEdhdWdlID0gdGhpcy5tYXJrZXJzLnNlbGVjdGVkR2F1Z2VzWzBdO1xuICAgICAgICAgICAgdGhpcy5tYXBFbGVtZW50Py5tYXBMZWFmbGV0Py5zZXRWaWV3KHNlbGVjdGVkR2F1Z2UsIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1hcEVsZW1lbnQgJiYgY2hhbmdlcy50aW1lZnJhbWVDb250YWluZXJzKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRpbWVmcmFtZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubWFwRWxlbWVudD8uY29tcG9zaXRlTGF5ZXIgJiYgY2hhbmdlcy5zdW1WYWx1ZXMpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3VtKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tYXBFbGVtZW50Py5jb21wb3NpdGVMYXllciAmJiBjaGFuZ2VzLnNob3dWaXNpYmxlUGl4ZWxNYXJrZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBkcmF3ZXIgPSB0aGlzLm1hcEVsZW1lbnQuY29tcG9zaXRlTGF5ZXIuZ2V0Rmlyc3REcmF3ZXIoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZVBpeGVsTWFya2VycyhkcmF3ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jaGFuZ2VOYXZpZ2F0aW9uKHBvc3NpYmxlTmV3RGVmYXVsdERhdGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU3VtKCkge1xuICAgICAgICBpZiAoIXRoaXMuc3VtVmFsdWVzIHx8ICF0aGlzLnN1bUZuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkcmF3ZXIgPSB0aGlzLm1hcEVsZW1lbnQuY29tcG9zaXRlTGF5ZXIuZ2V0Rmlyc3REcmF3ZXIoKTtcbiAgICAgICAgY29uc3Qgc3VtT2ZQaXhlbHM6IG51bWJlciA9IGRyYXdlcj8uZ2V0RXhlY09mV2luZG93UG9pbnRzKHRoaXMuc3VtVmFsdWVzLCB0aGlzLnN1bUZuKSA/PyAtMTtcblxuICAgICAgICBpZiAoc3VtT2ZQaXhlbHMgPj0gMCAmJiB0aGlzLnBpeGVsc0NvdW50ID4gMCkge1xuICAgICAgICAgICAgY29uc3QgYXZlcmFnZSA9IE1hdGgucm91bmQoKHN1bU9mUGl4ZWxzIC8gdGhpcy5waXhlbHNDb3VudCkgKiAxMDApIC8gMTAwO1xuICAgICAgICAgICAgdGhpcy5zdW1SZXN1bHQgPSBgJHtNYXRoLnJvdW5kKHN1bU9mUGl4ZWxzKX1tbSAoYXZnIG9mICR7YXZlcmFnZX1tbSBmb3IgJHtNYXRoLnJvdW5kKHRoaXMucGl4ZWxzQ291bnQpfSBwaXhlbHMpYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3VtUmVzdWx0ID0gJ05BJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZWRTdW0uZW1pdCh0aGlzLnN1bVJlc3VsdCk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlUGl4ZWxNYXJrZXJzKGRyYXdlcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVWaXNpYmxlUGl4ZWxNYXJrZXJzKGRyYXdlcjogYW55KSB7XG4gICAgICAgIGlmICghdGhpcy5zaG93VmlzaWJsZVBpeGVsTWFya2VycyB8fCAhZHJhd2VyIHx8ICF0aGlzLnN1bVZhbHVlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMudmlzaWJsZVBpeGVsTWFya2Vycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpYmxlUGl4ZWxNYXJrZXJzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoTWFya2Vyc0xheWVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFeHRyYWN0IHZpc2libGUgcGl4ZWwgcG9zaXRpb25zXG4gICAgICAgIGNvbnN0IHZpc2libGVQaXhlbHM6IE1hcExhdExuZ1tdID1cbiAgICAgICAgICAgIGRyYXdlci5nZXRFeGVjT2ZXaW5kb3dQb2ludHModGhpcy5zdW1WYWx1ZXMsICh2YWx1ZXM6IENhcnRlc2lhbk1hcFZhbHVlW10pID0+XG4gICAgICAgICAgICAgICAgdmFsdWVzLm1hcCgodikgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgbGF0OiAodi5sYXQgKyB2LmxhdDIpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgbG5nOiAodi5sbmcgKyB2LmxuZzIpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHYudmFsdWUsXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICApID8/IFtdO1xuXG4gICAgICAgIHRoaXMudmlzaWJsZVBpeGVsTWFya2VycyA9IHZpc2libGVQaXhlbHM7XG4gICAgICAgIHRoaXMucmVmcmVzaE1hcmtlcnNMYXllcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVmcmVzaE1hcmtlcnNMYXllcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLm1hcEVsZW1lbnQ/Lm1hcmtlcnNMYXllciB8fCAhdGhpcy5tYXBFbGVtZW50Py5tYXBMZWFmbGV0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7YWxsTWFya2Vyc30gPSB0aGlzLmJ1aWxkTWFya2Vyc0NvbmZpZygpO1xuICAgICAgICBjb25zdCBtYXJrZXJzUHJvZHVjZWQgPSB0aGlzLm1hcEVsZW1lbnQudXBkYXRlTWFya2VycyhhbGxNYXJrZXJzKTtcbiAgICAgICAgaWYgKG1hcmtlcnNQcm9kdWNlZD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmJpbmRNYXJrZXJzQ2xpY2tFdmVudHMobWFya2Vyc1Byb2R1Y2VkKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dNYXJrZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNMYXllci5yZW1vdmVGcm9tTWFwKHRoaXMubWFwRWxlbWVudC5tYXBMZWFmbGV0KTtcbiAgICAgICAgICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFya2Vyc0xheWVyLmFkZFRvTWFwKHRoaXMubWFwRWxlbWVudC5tYXBMZWFmbGV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2hhbmdlTmF2aWdhdGlvbihkZWZhdWx0RGF0ZT86IERhdGUpIHtcbiAgICAgICAgLy8gdXBkYXRlIHBvc3NpYmxlIG5hbWVzXG4gICAgICAgIGlmICh0aGlzLnRpbWVmcmFtZUNvbnRhaW5lcnM/LmNvbnRhaW5lcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5wb3NzaWJsZU5hbWVzID0gW107XG4gICAgICAgICAgICB0aGlzLnRpbWVmcmFtZUNvbnRhaW5lcnMuY29udGFpbmVycy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucG9zc2libGVOYW1lcy5pbmRleE9mKGMubmFtZSkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9zc2libGVOYW1lcy5wdXNoKGMubmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnRpbWVmcmFtZU5hbWVUb1Nob3cgPSB0aGlzLnBvc3NpYmxlTmFtZXMubGVuZ3RoID4gMCA/IHRoaXMucG9zc2libGVOYW1lc1swXSA6IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgcG9zc2libGUgZGF0ZXNcbiAgICAgICAgdGhpcy5wb3NzaWJsZURhdGVzID0gdGhpcy50aW1lZnJhbWVEYXRlcztcbiAgICAgICAgaWYgKCF0aGlzLnBvc3NpYmxlRGF0ZXMgfHwgdGhpcy5wb3NzaWJsZURhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXBkYXRlIGRhdGVUb1Nob3dcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGVmYXVsdERhdGUgJiZcbiAgICAgICAgICAgIHRoaXMucG9zc2libGVEYXRlcy5maWx0ZXIoKGQpID0+IHRoaXMuYXJlRGF0ZXNFcXVhbChkLCBkZWZhdWx0RGF0ZSkpLmxlbmd0aCA9PT0gMVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRvU2hvdyA9IGRlZmF1bHREYXRlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmRhdGVUb1Nob3cgJiZcbiAgICAgICAgICAgIHRoaXMucG9zc2libGVEYXRlcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICB0aGlzLnBvc3NpYmxlRGF0ZXMuZmlsdGVyKChkKSA9PiB0aGlzLmFyZURhdGVzRXF1YWwoZCwgdGhpcy5kYXRlVG9TaG93KSkubGVuZ3RoICE9PSAxXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5kYXRlVG9TaG93ID0gdGhpcy5wb3NzaWJsZURhdGVzWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZpcnN0SW5pdCA9IGZhbHNlO1xuICAgICAgICBpZiAoIXRoaXMuZGF0ZVRvU2hvd0FzU3RyaW5nKSB7XG4gICAgICAgICAgICBmaXJzdEluaXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0ZVRvU2hvd0FzU3RyaW5nID0gdGhpcy5kYXRlVG9TaG93LnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIHRoaXMuY3VtdWxhdGl2ZURhdGVGcm9tID0gbmV3IERhdGUodGhpcy5kYXRlVG9TaG93KTtcblxuICAgICAgICBjb25zdCBkdXJhdGlvbkluTXMgPSB0aGlzLmN1bXVsYXRpdmVEdXJhdGlvbkluTWludXRlcyAqIDYwICogMTAwMDtcbiAgICAgICAgdGhpcy5jdW11bGF0aXZlRGF0ZUZyb20uc2V0VGltZSh0aGlzLmN1bXVsYXRpdmVEYXRlRnJvbS5nZXRUaW1lKCkgLSBkdXJhdGlvbkluTXMpO1xuXG4gICAgICAgIGlmIChmaXJzdEluaXQpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1RpbWVmcmFtZSh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGF0ZVRvU2hvd0luZGV4KCk6IG51bWJlciB7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgZGF0ZSBvZiB0aGlzLnBvc3NpYmxlRGF0ZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFyZURhdGVJU09FcXVhbCh0aGlzLmRhdGVUb1Nob3dBc1N0cmluZywgZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIHByaXZhdGUgb25ab29tKGV2dDogYW55KSB7XG4gICAgICAgIGNvbnN0IG1hcCA9IGV2dC50YXJnZXQ7XG4gICAgICAgIGNvbnN0IGJvdW5kczogTGF0TG5nQm91bmRzID0gbWFwLmdldEJvdW5kcygpO1xuICAgICAgICB0aGlzLnBpeGVsc0NvdW50ID0gdGhpcy5jYXJ0ZXNpYW5Ub29scy5ob3dNYW55UGl4ZWxzSW5FYXJ0aE1hcChcbiAgICAgICAgICAgIGJvdW5kcy5fc291dGhXZXN0LFxuICAgICAgICAgICAgYm91bmRzLl9ub3J0aEVhc3RcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy51cGRhdGVTdW0oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uTW92ZUVuZChldnQ6IGFueSkge1xuICAgICAgICBjb25zdCBtYXAgPSBldnQudGFyZ2V0O1xuICAgICAgICBjb25zdCBib3VuZHM6IExhdExuZ0JvdW5kcyA9IG1hcC5nZXRCb3VuZHMoKTtcbiAgICAgICAgdGhpcy5waXhlbHNDb3VudCA9IHRoaXMuY2FydGVzaWFuVG9vbHMuaG93TWFueVBpeGVsc0luRWFydGhNYXAoXG4gICAgICAgICAgICBib3VuZHMuX3NvdXRoV2VzdCxcbiAgICAgICAgICAgIGJvdW5kcy5fbm9ydGhFYXN0XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudXBkYXRlU3VtKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVBdmFpbGFibGVQaXhlbHMoXG4gICAgICAgIGF2YWlsYWJsZVBpeGVsczoge3dpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyOyB0b3RhbFBpeGVsczogbnVtYmVyfSxcbiAgICAgICAgYm91bmRzOiBhbnksXG4gICAgICAgIHpvb206IG51bWJlclxuICAgICkge1xuICAgICAgICAvLyBVcGRhdGUgeW91ciBjb21wb25lbnQgcHJvcGVydGllcyBvciBwZXJmb3JtIGNhbGN1bGF0aW9uc1xuICAgICAgICB0aGlzLmN1cnJlbnRXaWR0aCA9IGF2YWlsYWJsZVBpeGVscy53aWR0aDtcbiAgICAgICAgdGhpcy5jdXJyZW50SGVpZ2h0ID0gYXZhaWxhYmxlUGl4ZWxzLmhlaWdodDtcblxuICAgICAgICAvLyBZb3UgY2FuIGFsc28gY2FsY3VsYXRlIHBpeGVsIGRlbnNpdHkgb3Igb3RoZXIgbWV0cmljcyBoZXJlXG4gICAgICAgIC8vIGNvbnN0IHBpeGVsRGVuc2l0eSA9IHRoaXMuY2FsY3VsYXRlUGl4ZWxEZW5zaXR5KGJvdW5kcywgYXZhaWxhYmxlUGl4ZWxzLCB6b29tKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1BpeGVsIGRlbnNpdHk6JywgcGl4ZWxEZW5zaXR5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZVBpeGVsRGVuc2l0eShcbiAgICAgICAgYm91bmRzOiBhbnksXG4gICAgICAgIGF2YWlsYWJsZVBpeGVsczoge3dpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyfSxcbiAgICAgICAgem9vbTogbnVtYmVyXG4gICAgKSB7XG4gICAgICAgIC8vIENhbGN1bGF0ZSBob3cgbWFueSBtZXRlcnMgcGVyIHBpeGVsIChhcHByb3hpbWF0ZSlcbiAgICAgICAgY29uc3QgZWFydGhDaXJjdW1mZXJlbmNlID0gNDAwNzUwMTYuNjg2OyAvLyBtZXRlcnNcbiAgICAgICAgY29uc3QgbWV0ZXJzUGVyUGl4ZWwgPVxuICAgICAgICAgICAgKGVhcnRoQ2lyY3VtZmVyZW5jZSAqIE1hdGguY29zKChib3VuZHMuZ2V0Q2VudGVyKCkubGF0ICogTWF0aC5QSSkgLyAxODApKSAvXG4gICAgICAgICAgICBNYXRoLnBvdygyLCB6b29tICsgOCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1ldGVyc1BlclBpeGVsLFxuICAgICAgICAgICAgcGl4ZWxzUGVyTWV0ZXI6IDEgLyBtZXRlcnNQZXJQaXhlbCxcbiAgICAgICAgICAgIHRvdGFsVmlzaWJsZUFyZWE6IGF2YWlsYWJsZVBpeGVscy53aWR0aCAqIGF2YWlsYWJsZVBpeGVscy5oZWlnaHQsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbk1hcE1vdXNlTW92ZShldnQ6IHtsYXRsbmc6IHtsYXQ6IG51bWJlcjsgbG5nOiBudW1iZXJ9fSk6IHZvaWQge1xuICAgICAgICBjb25zdCBsYXQ6IHN0cmluZyA9IGV2dC5sYXRsbmcubGF0LnRvRml4ZWQoMyk7XG4gICAgICAgIGNvbnN0IGxuZzogc3RyaW5nID0gZXZ0LmxhdGxuZy5sbmcudG9GaXhlZCgzKTtcblxuICAgICAgICBsZXQgdmFsdWUgPSBOYU47XG4gICAgICAgIGxldCB2YWx1ZUxhdCA9IE5hTixcbiAgICAgICAgICAgIHZhbHVlTG5nID0gTmFOLFxuICAgICAgICAgICAgdmFsdWVMYXQyID0gTmFOLFxuICAgICAgICAgICAgdmFsdWVMbmcyID0gTmFOO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50RnJhbWVDb250YWluZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlU2VsZWN0ZWQgPSAodGhpcy5jdXJyZW50RnJhbWVDb250YWluZXIudmFsdWVzIGFzIENhcnRlc2lhbk1hcFZhbHVlW10pLmZpbHRlcihcbiAgICAgICAgICAgICAgICAodjogQ2FydGVzaWFuTWFwVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHYubGF0IDw9IGV2dC5sYXRsbmcubGF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBldnQubGF0bG5nLmxhdCA8IHYubGF0MiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdi5sbmcgPD0gZXZ0LmxhdGxuZy5sbmcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2dC5sYXRsbmcubG5nIDwgdi5sbmcyXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlU2VsZWN0ZWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnJvdW5kVG8zRGVjaW1hbHModmFsdWVTZWxlY3RlZFswXS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgdmFsdWVMYXQgPSB0aGlzLnJvdW5kVG8zRGVjaW1hbHModmFsdWVTZWxlY3RlZFswXS5sYXQpO1xuICAgICAgICAgICAgICAgIHZhbHVlTG5nID0gdGhpcy5yb3VuZFRvM0RlY2ltYWxzKHZhbHVlU2VsZWN0ZWRbMF0ubG5nKTtcbiAgICAgICAgICAgICAgICB2YWx1ZUxhdDIgPSB0aGlzLnJvdW5kVG8zRGVjaW1hbHModmFsdWVTZWxlY3RlZFswXS5sYXQyKTtcbiAgICAgICAgICAgICAgICB2YWx1ZUxuZzIgPSB0aGlzLnJvdW5kVG8zRGVjaW1hbHModmFsdWVTZWxlY3RlZFswXS5sbmcyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS53YXJuKCd2YWx1ZVNlbGVjdGVkIGlzc3VlID8nLCB2YWx1ZVNlbGVjdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAvLyB0aGlzLm1jVGV4dCA9IGBMYXRpdHVkZTogJHtsYXR9ICZuYnNwOyAmbmJzcDsgTG9uZ2l0dWRlOiAke2xuZ30gJm5ic3A7ICZuYnNwO1xuICAgICAgICAgICAgLy8gICAgVmFsdWU6IFske3ZhbHVlTGF0fSAke3ZhbHVlTG5nfSB8ICR7dmFsdWVMYXQyfSAke3ZhbHVlTG5nMn1dICR7dmFsdWV9YDtcbiAgICAgICAgICAgIHRoaXMubWNUZXh0ID0gYExhdGl0dWRlOiAke2xhdH0gJm5ic3A7ICZuYnNwOyBMb25naXR1ZGU6ICR7bG5nfSAmbmJzcDsgJm5ic3A7IFZhbHVlOiAke3ZhbHVlfWA7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbk1hcENsaWNrKGV2dDogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5tYXJrZXJzPy5nYXVnZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNlbGVjdGVkR2F1Z2U6IE1hcExhdExuZztcbiAgICAgICAgZm9yIChjb25zdCBnYXVnZSBvZiB0aGlzLm1hcmtlcnMuZ2F1Z2VzKSB7XG4gICAgICAgICAgICBpZiAoZ2F1Z2UuaWQgPT09IGV2dD8udGFyZ2V0Py5vcHRpb25zPy5hbHQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEdhdWdlID0gZ2F1Z2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VsZWN0ZWRHYXVnZSkge1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJzLnNlbGVjdGVkR2F1Z2VzID0gW3NlbGVjdGVkR2F1Z2VdO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1hcmtlci5lbWl0KFxuICAgICAgICAgICAgICAgIG5ldyBNYXBMYXRMbmcoXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkR2F1Z2UubGF0LFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEdhdWdlLmxuZyxcbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEdhdWdlLmlkLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEdhdWdlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkR2F1Z2UudmFsdWVcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1hcmtlci5lbWl0KFxuICAgICAgICAgICAgICAgIG5ldyBNYXBMYXRMbmcoZXZ0LmxhdGxuZz8ubGF0LCBldnQubGF0bG5nPy5sbmcsIHVuZGVmaW5lZCwgZXZ0LmlkLCBldnQubmFtZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoYW5nZSh7bWFya2VyczogWydjaGFuZ2VkJ119IGFzIGFueSk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gICAgcHJpdmF0ZSBvblJlc2l6ZShldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlTWFwU2l6ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTWFwU2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWFwRGl2V2lkdGggPSB0aGlzLm1hcERpdlJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGU/LnBhcmVudE5vZGVbJ2NsaWVudFdpZHRoJ107XG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSAyMTtcbiAgICAgICAgbGV0IGN1cnJlbnRXaWR0aCA9XG4gICAgICAgICAgICBtYXBEaXZXaWR0aCB8fFxuICAgICAgICAgICAgd2luZG93LmlubmVyV2lkdGggfHxcbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fFxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDtcbiAgICAgICAgY29uc3QgY3VycmVudEhlaWdodCA9XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRIZWlnaHQgfHxcbiAgICAgICAgICAgIHdpbmRvdy5pbm5lckhlaWdodCB8fFxuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCB8fFxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQ7XG4gICAgICAgIGN1cnJlbnRXaWR0aCAtPSBwYWRkaW5nO1xuICAgICAgICB0aGlzLmN1cnJlbnRXaWR0aCA9IGN1cnJlbnRXaWR0aDtcbiAgICAgICAgdGhpcy5jdXJyZW50SGVpZ2h0ID0gY3VycmVudEhlaWdodDtcblxuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblNpemVDaGFuZ2VkKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVGltZWZyYW1lKCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnRpbWVmcmFtZUNvbnRhaW5lcnM/LmNvbnRhaW5lcnM/Lmxlbmd0aCAmJlxuICAgICAgICAgICAgdGhpcy50aW1lZnJhbWVDb250YWluZXJzPy5jb250YWluZXJzWzBdPy50aW1lZnJhbWU/Lmxlbmd0aFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMubWFwRWxlbWVudC51cGRhdGVNYXBUaW1lZnJhbWUodGhpcy50aW1lZnJhbWVDb250YWluZXJzKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEZyYW1lQ29udGFpbmVyID0gdGhpcy50aW1lZnJhbWVDb250YWluZXJzPy5jb250YWluZXJzWzBdPy50aW1lZnJhbWVbMF07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoYW5nZUFscGhhKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVTY2FsZShmYWN0b3J5OiBFbGVtZW50c0ZhY3RvcnksIGxhYmVsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5kZWxldGVTY2FsZSgpO1xuICAgICAgICBpZiAoIXRoaXMuc2NhbGVDYW52YXNSZWY/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhDaGFydFNjYWxlQ29sb3JzKTtcbiAgICAgICAgZW50cmllcy5zb3J0KChhLCBiKSA9PiBwYXJzZUZsb2F0KGFbMF0pIC0gcGFyc2VGbG9hdChiWzBdKSk7XG4gICAgICAgIGNvbnN0IHNvcnRlZE1hcCA9IG5ldyBNYXAoZW50cmllcyk7XG4gICAgICAgIGNvbnN0IHNvcnRlZEFycmF5ID0gWy4uLnNvcnRlZE1hcC5lbnRyaWVzKCldO1xuICAgICAgICBjb25zdCBzY2FsZUNvbG9ycyA9IHNvcnRlZEFycmF5Lm1hcCgoZW50cnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7Y29sb3I6IGVudHJ5WzFdfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNjYWxlTGFiZWxzID0gc29ydGVkQXJyYXkubWFwKChlbnRyeSkgPT4gZW50cnlbMF0pO1xuICAgICAgICB0aGlzLnNjYWxlRWxlbWVudCA9IGZhY3RvcnkuY3JlYXRlU2NhbGUoXG4gICAgICAgICAgICB0aGlzLnNjYWxlQ2FudmFzUmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBuZXcgU2NhbGVFbGVtZW50SW5wdXQoc2NhbGVDb2xvcnMsIHNjYWxlTGFiZWxzLCBsYWJlbClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlbGV0ZVNjYWxlKCkge1xuICAgICAgICBpZiAodGhpcy5zY2FsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGVFbGVtZW50Py5jaGFydD8uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIHRoZSBtYXJrZXJzIGNvbmZpZ3VyYXRpb24gYXJyYXkgZm9yIHRoZSBtYXBcbiAgICAgKiBAcmV0dXJucyBBcnJheSBvZiBtYXJrZXIgY29uZmlndXJhdGlvbnMgd2l0aCBpY29ucyBhbmQgcG9zaXRpb25zXG4gICAgICovXG4gICAgcHJpdmF0ZSBidWlsZE1hcmtlcnNDb25maWcoKSB7XG4gICAgICAgIGNvbnN0IGFsbE1hcmtlcnM6IHtpY29uc0xhdExuZzogTWFwTGF0TG5nW107IHJhYWluRGl2SWNvbjogUmFhaW5EaXZJY29ufVtdID0gW1xuICAgICAgICAgICAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnM/LmdhdWdlcyA/PyBbXSwgcmFhaW5EaXZJY29uOiB0aGlzLnJhYWluRGl2SWNvbnMuZ2F1Z2VzfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzPy5zZWxlY3RlZEdhdWdlcyA/PyBbXSxcbiAgICAgICAgICAgICAgICByYWFpbkRpdkljb246IHRoaXMucmFhaW5EaXZJY29ucy5zZWxlY3RlZEdhdWdlcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycz8uZ2F1Z2VzSW5Db21wYXJlID8/IFtdLFxuICAgICAgICAgICAgICAgIHJhYWluRGl2SWNvbjogdGhpcy5yYWFpbkRpdkljb25zLmdhdWdlc0luQ29tcGFyZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7aWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycz8ucGl4ZWxzID8/IFtdLCByYWFpbkRpdkljb246IHRoaXMucmFhaW5EaXZJY29ucy5waXhlbHN9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnM/LnBpeGVsc1NvbHV0aW9uID8/IFtdLFxuICAgICAgICAgICAgICAgIHJhYWluRGl2SWNvbjogdGhpcy5yYWFpbkRpdkljb25zLnBpeGVsc1NvbHV0aW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzPy5ib3JkZXJzLCByYWFpbkRpdkljb246IHRoaXMucmFhaW5EaXZJY29ucy5ib3JkZXJzfSxcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAodGhpcy5zaG93VmlzaWJsZVBpeGVsTWFya2VycyAmJiB0aGlzLnZpc2libGVQaXhlbE1hcmtlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYWxsTWFya2Vycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpY29uc0xhdExuZzogdGhpcy52aXNpYmxlUGl4ZWxNYXJrZXJzLFxuICAgICAgICAgICAgICAgIHJhYWluRGl2SWNvbjogdGhpcy5yYWFpbkRpdkljb25zLnBpeGVsc1NvbHV0aW9uLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zaG93U3BlZWRNYXJrZXJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1hcmtlciBvZiB0aGlzLm1hcmtlcnM/LnNwZWVkcyA/PyBbXSkge1xuICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBkeW5hbWljIHNpemUgYmFzZWQgb24gc3BlZWQgKG1hcmtlci52YWx1ZSBpcyBpbiBtL3MpXG4gICAgICAgICAgICAgICAgLy8gQmFzZSBzaXplOiAyMHB4LCBzY2FsZSB1cCB3aXRoIHNwZWVkICh0eXBpY2FsIHJhbmdlOiAxLTIwIG0vcylcbiAgICAgICAgICAgICAgICBjb25zdCBzcGVlZEluTWV0ZXJzUGVyU2VjID0gbWFya2VyLnZhbHVlID8/IDU7XG4gICAgICAgICAgICAgICAgY29uc3QgbWluU2l6ZSA9IDIwO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heFNpemUgPSA2MDtcbiAgICAgICAgICAgICAgICBjb25zdCBtaW5TcGVlZCA9IDE7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4U3BlZWQgPSAyMDtcblxuICAgICAgICAgICAgICAgIC8vIExpbmVhciBpbnRlcnBvbGF0aW9uOiBzaXplIGluY3JlYXNlcyB3aXRoIHNwZWVkXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFNwZWVkID0gTWF0aC5tYXgobWluU3BlZWQsIE1hdGgubWluKG1heFNwZWVkLCBzcGVlZEluTWV0ZXJzUGVyU2VjKSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6ZSA9XG4gICAgICAgICAgICAgICAgICAgIG1pblNpemUgK1xuICAgICAgICAgICAgICAgICAgICAoKG5vcm1hbGl6ZWRTcGVlZCAtIG1pblNwZWVkKSAvIChtYXhTcGVlZCAtIG1pblNwZWVkKSkgKiAobWF4U2l6ZSAtIG1pblNpemUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGljb25TaXplID0gTWF0aC5yb3VuZChzaXplKTtcblxuICAgICAgICAgICAgICAgIGFsbE1hcmtlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGljb25zTGF0TG5nOiBbbWFya2VyXSxcbiAgICAgICAgICAgICAgICAgICAgcmFhaW5EaXZJY29uOiBuZXcgUmFhaW5EaXZJY29uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWw6IHRoaXMucmFhaW5EaXZJY29ucy5zcGVlZHMub3B0aW9ucy5odG1sLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGljb25TaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBpY29uU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFtpY29uU2l6ZSAvIDIsIGljb25TaXplIC8gMl0sIC8vIENlbnRlciB0aGUgaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXBBbmNob3I6IHRoaXMucmFhaW5EaXZJY29ucy5zcGVlZHMub3B0aW9ucy5wb3B1cEFuY2hvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uQW5nbGU6IG1hcmtlci5hbHQsIC8vIFVzZSBhbHQgcHJvcGVydHkgZm9yIGF6aW11dGgvZGlyZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IHRoaXMucmFhaW5EaXZJY29ucy5zcGVlZHMub3B0aW9ucy5jbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7YWxsTWFya2Vyc307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcGFyZSB0d28gZGF0ZXMgZm9yIGVxdWFsaXR5IHVzaW5nIHRoZWlyIHRpbWVzdGFtcHNcbiAgICAgKiBAcGFyYW0gZGF0ZTEgRmlyc3QgZGF0ZSAoRGF0ZSBvciBzdHJpbmcpXG4gICAgICogQHBhcmFtIGRhdGUyIFNlY29uZCBkYXRlIChEYXRlIG9yIHN0cmluZylcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGRhdGVzIGFyZSBlcXVhbFxuICAgICAqL1xuICAgIHByaXZhdGUgYXJlRGF0ZXNFcXVhbChkYXRlMTogRGF0ZSB8IHN0cmluZywgZGF0ZTI6IERhdGUgfCBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFkYXRlMSB8fCAhZGF0ZTIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0aW1lc3RhbXAxID0gdHlwZW9mIGRhdGUxID09PSAnc3RyaW5nJyA/IG5ldyBEYXRlKGRhdGUxKS5nZXRUaW1lKCkgOiBkYXRlMS5nZXRUaW1lKCk7XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcDIgPSB0eXBlb2YgZGF0ZTIgPT09ICdzdHJpbmcnID8gbmV3IERhdGUoZGF0ZTIpLmdldFRpbWUoKSA6IGRhdGUyLmdldFRpbWUoKTtcbiAgICAgICAgcmV0dXJuIHRpbWVzdGFtcDEgPT09IHRpbWVzdGFtcDI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcGFyZSBhbiBJU08gZGF0ZSBzdHJpbmcgd2l0aCBhIERhdGUgb2JqZWN0IChjb21wYXJpbmcgZmlyc3QgMTkgY2hhcmFjdGVycylcbiAgICAgKiBAcGFyYW0gZGF0ZUlTTyBJU08gZGF0ZSBzdHJpbmdcbiAgICAgKiBAcGFyYW0gZGF0ZSBEYXRlIG9iamVjdFxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgZGF0ZXMgbWF0Y2ggKHVwIHRvIHNlY29uZHMgcHJlY2lzaW9uKVxuICAgICAqL1xuICAgIHByaXZhdGUgYXJlRGF0ZUlTT0VxdWFsKGRhdGVJU086IHN0cmluZywgZGF0ZTogRGF0ZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWRhdGVJU08gfHwgIWRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0ZUlTTy5zdWJzdHJpbmcoMCwgMTkpID09PSBkYXRlLnRvSVNPU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDE5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGNsaWNrIGV2ZW50IGhhbmRsZXJzIHRvIG1hcmtlcnNcbiAgICAgKiBAcGFyYW0gbWFya2VycyBBcnJheSBvZiBtYXJrZXIgb2JqZWN0cyB0byBiaW5kIGV2ZW50cyB0b1xuICAgICAqL1xuICAgIHByaXZhdGUgYmluZE1hcmtlcnNDbGlja0V2ZW50cyhtYXJrZXJzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBpZiAoIW1hcmtlcnMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBtYXJrZXJzLmZvckVhY2goKG0pID0+IG0ub24oJ2NsaWNrJywgKGV2dCkgPT4gdGhpcy5vbk1hcENsaWNrKGV2dCkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSb3VuZCBhIG51bWJlciB0byAzIGRlY2ltYWwgcGxhY2VzXG4gICAgICogQHBhcmFtIHZhbHVlIE51bWJlciB0byByb3VuZFxuICAgICAqIEByZXR1cm5zIFJvdW5kZWQgbnVtYmVyXG4gICAgICovXG4gICAgcHJpdmF0ZSByb3VuZFRvM0RlY2ltYWxzKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIDEwMDApIC8gMTAwMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgbGF5ZXIgZGltZW5zaW9ucyBhbmQgaW52YWxpZGF0ZSBtYXAgc2l6ZVxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlTGF5ZXJEaW1lbnNpb25zKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMubWFwRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWFwRWxlbWVudC5tYXJrZXJzTGF5ZXI/LnNldEN1cnJlbnRXaWR0aCh0aGlzLmN1cnJlbnRXaWR0aCk7XG4gICAgICAgIHRoaXMubWFwRWxlbWVudC5tYXJrZXJzTGF5ZXI/LnNldEN1cnJlbnRIZWlnaHQodGhpcy5jdXJyZW50SGVpZ2h0KTtcbiAgICAgICAgdGhpcy5tYXBFbGVtZW50LmNvbXBvc2l0ZUxheWVyPy5zZXRDdXJyZW50V2lkdGgodGhpcy5jdXJyZW50V2lkdGgpO1xuICAgICAgICB0aGlzLm1hcEVsZW1lbnQuY29tcG9zaXRlTGF5ZXI/LnNldEN1cnJlbnRIZWlnaHQodGhpcy5jdXJyZW50SGVpZ2h0KTtcbiAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQ/LmludmFsaWRhdGVTaXplKHthbmltYXRlOiB0cnVlfSk7XG4gICAgfVxufVxuIiwiPGlvbi1ncmlkPlxuXG4gICAgPGlvbi1yb3cgY2xhc3M9XCJpb24tYWxpZ24taXRlbXMtY2VudGVyIGlvbi1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgaWQ9XCJtYXAtbmF2LXJvd1wiPlxuICAgICAgICA8aW9uLWljb24gKGNsaWNrKT1cInByZXZpb3VzKClcIiAqbmdJZj1cInNob3dOYXZpZ2F0aW9uXCIgY2xhc3M9XCJuYXYtaWNvblwiIGNvbG9yPVwibWVkaXVtXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJjaGV2cm9uLWJhY2stY2lyY2xlXCI+PC9pb24taWNvbj5cblxuICAgICAgICA8aW9uLWxhYmVsICpuZ0lmPVwic2hvd0RhdGVSYW5nZVwiIGNsYXNzPVwicGVyaW9kLWJyYWNrZXRcIj5bPC9pb24tbGFiZWw+XG5cbiAgICAgICAgPGlvbi1sYWJlbCAqbmdJZj1cInNob3dEYXRlUmFuZ2UgJiYgdGltZWZyYW1lQ29udGFpbmVycz8uY29udGFpbmVycz8ubGVuZ3RoXCIgY2xhc3M9XCJkYXRlLWxhYmVsXCI+XG4gICAgICAgICAgICB7eyBjdW11bGF0aXZlRGF0ZUZyb20gfCBkYXRlOid5eXl5LU1NLWRkIEhIOm1tJyB9fVxuICAgICAgICA8L2lvbi1sYWJlbD5cblxuICAgICAgICA8aW9uLWxhYmVsICpuZ0lmPVwic2hvd0RhdGVSYW5nZVwiPiZuYnNwOyAmbmJzcDs8L2lvbi1sYWJlbD5cblxuICAgICAgICA8aW9uLXNlbGVjdCAoaW9uRGlzbWlzcyk9XCJzaG93VGltZWZyYW1lKClcIiAqbmdJZj1cInRpbWVmcmFtZUNvbnRhaW5lcnM/LmNvbnRhaW5lcnM/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZGF0ZVRvU2hvd0FzU3RyaW5nXCIgaW50ZXJmYWNlPVwicG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGVyaW9kXCIgdmFsdWU9XCJ7e2RhdGVUb1Nob3dBc1N0cmluZ319XCI+XG4gICAgICAgICAgICA8aW9uLXNlbGVjdC1vcHRpb24gKm5nRm9yPVwibGV0IGRhdGVUb1NlbGVjdCBvZiBwb3NzaWJsZURhdGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInt7ZGF0ZVRvU2VsZWN0LnRvSVNPU3RyaW5nKCl9fVwiPlxuICAgICAgICAgICAgICAgIHt7IGRhdGVUb1NlbGVjdCB8IGRhdGU6J3l5eXktTU0tZGQgSEg6bW0nIH19XG4gICAgICAgICAgICA8L2lvbi1zZWxlY3Qtb3B0aW9uPlxuICAgICAgICA8L2lvbi1zZWxlY3Q+XG5cbiAgICAgICAgPGlvbi1sYWJlbCAqbmdJZj1cInNob3dEYXRlUmFuZ2VcIiBjbGFzcz1cInBlcmlvZC1icmFja2V0XCI+WzwvaW9uLWxhYmVsPlxuXG4gICAgICAgIDxpb24taWNvbiAoY2xpY2spPVwibmV4dCgpXCIgKm5nSWY9XCJzaG93TmF2aWdhdGlvblwiIGNsYXNzPVwibmF2LWljb25cIiBjb2xvcj1cIm1lZGl1bVwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwiY2hldnJvbi1mb3J3YXJkLWNpcmNsZVwiPjwvaW9uLWljb24+XG4gICAgPC9pb24tcm93PlxuXG4gICAgPGlvbi1yb3c+XG4gICAgICAgIDxpb24tY29sIHNpemUtbGc9XCIxMFwiIHNpemUteHM9XCIxMlwiPlxuICAgICAgICAgICAgPGRpdiBbc3R5bGUuaGVpZ2h0LnB4XT1cImN1cnJlbnRIZWlnaHRcIiBpZD1cIm1hcC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2ICNwcmltYXJ5TWFwIGlkPVwibWFwLWRpdlwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24taGlkZS14bC1kb3duXCIgc2l6ZS1sZz1cIjJcIj5cbiAgICAgICAgICAgIDxkaXYgW3N0eWxlLmhlaWdodC5weF09XCJjdXJyZW50SGVpZ2h0XCIgW3N0eWxlLndpZHRoLnB4XT1cIjYwXCI+XG4gICAgICAgICAgICAgICAgPGNhbnZhcyAjY2FudmFzU2NhbGU+PC9jYW52YXM+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9pb24tY29sPlxuICAgIDwvaW9uLXJvdz5cblxuICAgIDxpb24tcm93IGNsYXNzPVwiaW9uLWFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8aW9uLWNvbCBzaXplLXhzPVwiM1wiPlxuICAgICAgICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInRvZ2dsZU1hcFNldHRpbmdzKClcIiBjb2xvcj1cIm1lZGl1bVwiIGZpbGw9XCJjbGVhclwiIGlkPVwibWFwLXNldHRpbmdzLXRvZ2dsZVwiPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwibWFwLW91dGxpbmVcIiBzbG90PVwic3RhcnRcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBbbmFtZV09XCJzaG93TWFwU2V0dGluZ3MgPyAnY2hldnJvbi1kb3duJyA6ICdjaGV2cm9uLWZvcndhcmQnXCIgc2xvdD1cImVuZFwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24taGlkZS1zbS1kb3duXCIgc2l6ZS1zbT1cIjdcIj5cbiAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwibWNUZXh0XCI+PC9zcGFuPlxuICAgICAgICA8L2lvbi1jb2w+XG5cbiAgICA8L2lvbi1yb3c+XG5cbiAgICA8aW9uLXJvdyAqbmdJZj1cInNob3dNYXBTZXR0aW5nc1wiIGlkPVwibWFwLXNldHRpbmdzXCI+XG4gICAgICAgIDxpb24tY29sIHNpemU9XCIxMlwiPlxuICAgICAgICAgICAgPGlvbi1saXN0IGxpbmVzPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgIDxpb24taXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbD5PcGFjaXR5PC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tcmFuZ2UgKGlvbkNoYW5nZSk9XCJjaGFuZ2VBbHBoYSgpXCIgWyhuZ01vZGVsKV09XCJhbHBoYVwiIFttYXhdPVwiMVwiIFttaW5dPVwiMC4yXCIgW3NuYXBzXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGVwXT1cIjAuMlwiIFt0aWNrc109XCJ0cnVlXCIgY2xhc3M9XCJzZXR0aW5ncy1yYW5nZVwiIGNvbG9yPVwibWVkaXVtXCIgc2xvdD1cImVuZFwiPjwvaW9uLXJhbmdlPlxuICAgICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgPGlvbi1pdGVtPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPkdhdWdlczwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLXRvZ2dsZSAoaW9uQ2hhbmdlKT1cImNoYW5nZVNob3dNYXJrZXJzKClcIiBbKG5nTW9kZWwpXT1cInNob3dNYXJrZXJzXCIgW2NoZWNrZWRdPVwic2hvd01hcmtlcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cIm1lZGl1bVwiIHNsb3Q9XCJlbmRcIj48L2lvbi10b2dnbGU+XG4gICAgICAgICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICAgICAgICA8aW9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWw+U3BlZWRzPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tdG9nZ2xlIChpb25DaGFuZ2UpPVwiY2hhbmdlU2hvd1NwZWVkTWFya2VycygpXCIgWyhuZ01vZGVsKV09XCJzaG93U3BlZWRNYXJrZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2hvd1NwZWVkTWFya2Vyc1wiIGNvbG9yPVwibWVkaXVtXCIgc2xvdD1cImVuZFwiPjwvaW9uLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICAgICAgPC9pb24tbGlzdD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgIDwvaW9uLXJvdz5cblxuPC9pb24tZ3JpZD5cbiJdfQ==
|
|
652
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFhaW4tbWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL3NoYXJlZC9yYWFpbi1tYXAvcmFhaW4tbWFwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3NyYy9jb3JlL3NoYXJlZC9yYWFpbi1tYXAvcmFhaW4tbWFwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCxTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTNDLE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsZUFBZSxFQUdmLFNBQVMsRUFDVCxZQUFZLEVBRVosaUJBQWlCLEdBRXBCLE1BQU0sVUFBVSxDQUFDOzs7Ozs7QUFRbEIsTUFBTSxPQUFPLGlCQUFpQjtJQXlGMUIsWUFDcUIsTUFBYyxFQUNkLE9BQWdCLEVBQ2hCLEdBQXNCO1FBRnRCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBNUVwQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBRW5CLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUV4Qiw0QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFFaEMsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFFdEIsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFFckIsZ0NBQTJCLEdBQUcsRUFBRSxDQUFDO1FBRWpDLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFJbEIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFJeEIsbUJBQWMsR0FBVyxFQUFFLENBQUM7UUFXNUIsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO1FBRy9DLGdC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S0FBSztnQkFHQyxLQUFLO3NCQURYLEtBQUs7Z0JBS0MsY0FBYztzQkFEcEIsTUFBTTtnQkFJQSxXQUFXO3NCQURqQixNQUFNO2dCQUlBLFVBQVU7c0JBRGhCLE1BQU07Z0JBZ0JHLFNBQVM7c0JBRGxCLFNBQVM7dUJBQUMsWUFBWTtnQkFHYixjQUFjO3NCQUR2QixTQUFTO3VCQUFDLGFBQWE7Z0JBdWlCaEIsUUFBUTtzQkFEZixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NhcnRlc2lhblRvb2xzfSBmcm9tICdyYWFpbi1tb2RlbCc7XG5pbXBvcnQge0xhdExuZ0JvdW5kc30gZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQge1xuICAgIENhcnRlc2lhbk1hcFZhbHVlLFxuICAgIENoYXJ0U2NhbGVDb2xvcnMsXG4gICAgRWxlbWVudHNGYWN0b3J5LFxuICAgIEZyYW1lQ29udGFpbmVyLFxuICAgIE1hcEVsZW1lbnQsXG4gICAgTWFwTGF0TG5nLFxuICAgIFJhYWluRGl2SWNvbixcbiAgICBTY2FsZUVsZW1lbnQsXG4gICAgU2NhbGVFbGVtZW50SW5wdXQsXG4gICAgVGltZWZyYW1lQ29udGFpbmVycyxcbn0gZnJvbSAncmFhaW4tdWknO1xuaW1wb3J0IHtTdG9yYWdlfSBmcm9tICcuLi9zdG9yYWdlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3JhYWluLW1hcCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3JhYWluLW1hcC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcmFhaW4tbWFwLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFJhYWluTWFwQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvb3JkaW5hdGVzPzogTWFwTGF0TG5nO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG1hcmtlcnM/OiB7XG4gICAgICAgIGdhdWdlcz86IE1hcExhdExuZ1tdO1xuICAgICAgICBzZWxlY3RlZEdhdWdlcz86IE1hcExhdExuZ1tdO1xuICAgICAgICBwaXhlbHM/OiBNYXBMYXRMbmdbXTtcbiAgICAgICAgYm9yZGVycz86IE1hcExhdExuZ1tdO1xuICAgICAgICBzcGVlZHM/OiBNYXBMYXRMbmdbXTtcbiAgICAgICAgZ2F1Z2VzSW5Db21wYXJlPzogTWFwTGF0TG5nW107XG4gICAgICAgIHBpeGVsc1NvbHV0aW9uPzogTWFwTGF0TG5nW107XG4gICAgfTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0aW1lZnJhbWVDb250YWluZXJzPzogVGltZWZyYW1lQ29udGFpbmVycztcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhdXRvcGxheSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dNYXJrZXJzID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93U3BlZWRNYXJrZXJzID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93VmlzaWJsZVBpeGVsTWFya2VycyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dOYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93RGF0ZVJhbmdlID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjdW11bGF0aXZlRHVyYXRpb25Jbk1pbnV0ZXMgPSA2MDtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzY2FsZUxhYmVsID0gJ21tJztcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjdXJyZW50SGVpZ2h0OiBudW1iZXI7XG5cbiAgICBwdWJsaWMgc2hvd01hcFNldHRpbmdzID0gZmFsc2U7XG4gICAgcHVibGljIGN1cnJlbnRXaWR0aDogbnVtYmVyO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGltZWZyYW1lRGF0ZXM6IERhdGVbXSA9IFtdO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRlZmF1bHREYXRlPzogRGF0ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHN1bVZhbHVlcz86IENhcnRlc2lhbk1hcFZhbHVlW107XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc3VtRm4/OiAoY2FydGVzaWFuTWFwVmFsdWVzOiBDYXJ0ZXNpYW5NYXBWYWx1ZVtdKSA9PiBudW1iZXI7XG4gICAgcHVibGljIHN1bVJlc3VsdDogc3RyaW5nO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkTWFya2VyID0gbmV3IEV2ZW50RW1pdHRlcjxNYXBMYXRMbmc+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY2hhbmdlZERhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY2hhbmdlZFN1bSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgcHVibGljIGFscGhhOiBudW1iZXI7XG4gICAgcHVibGljIG1jVGV4dDtcbiAgICBwdWJsaWMgbmV4dERhdGU6IERhdGU7XG4gICAgcHVibGljIHBvc3NpYmxlTmFtZXM6IHN0cmluZ1tdO1xuICAgIHB1YmxpYyBwb3NzaWJsZURhdGVzOiBEYXRlW107XG4gICAgcHVibGljIGRhdGVUb1Nob3c6IERhdGU7XG4gICAgcHVibGljIGRhdGVUb1Nob3dBc1N0cmluZzogc3RyaW5nO1xuICAgIHB1YmxpYyB0aW1lZnJhbWVOYW1lVG9TaG93OiBzdHJpbmc7XG4gICAgcHVibGljIHBpeGVsc0NvdW50OiBudW1iZXI7XG4gICAgcHVibGljIGN1bXVsYXRpdmVEYXRlRnJvbTogRGF0ZTtcbiAgICBwcm90ZWN0ZWQgY3VycmVudEZyYW1lQ29udGFpbmVyOiBGcmFtZUNvbnRhaW5lcjtcbiAgICBwcm90ZWN0ZWQgY2FydGVzaWFuVG9vbHM6IENhcnRlc2lhblRvb2xzO1xuICAgIEBWaWV3Q2hpbGQoJ3ByaW1hcnlNYXAnKVxuICAgIHByb3RlY3RlZCBtYXBEaXZSZWY6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnY2FudmFzU2NhbGUnKVxuICAgIHByb3RlY3RlZCBzY2FsZUNhbnZhc1JlZjogRWxlbWVudFJlZjtcbiAgICBwcml2YXRlIHZpc2libGVQaXhlbE1hcmtlcnM6IE1hcExhdExuZ1tdID0gW107XG4gICAgcHJpdmF0ZSBtYXBFbGVtZW50OiBNYXBFbGVtZW50O1xuICAgIHByaXZhdGUgc2NhbGVFbGVtZW50OiBTY2FsZUVsZW1lbnQ7XG5cbiAgICBwcml2YXRlIG9uU2l6ZUNoYW5nZWQ7XG4gICAgcHJpdmF0ZSBjcmVhdGVkO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmFhaW5EaXZJY29uczoge1xuICAgICAgICBnYXVnZXM6IFJhYWluRGl2SWNvbjtcbiAgICAgICAgc2VsZWN0ZWRHYXVnZXM6IFJhYWluRGl2SWNvbjtcbiAgICAgICAgcGl4ZWxzOiBSYWFpbkRpdkljb247XG4gICAgICAgIGJvcmRlcnM6IFJhYWluRGl2SWNvbjtcbiAgICAgICAgc3BlZWRzOiBSYWFpbkRpdkljb247XG4gICAgICAgIGdhdWdlc0luQ29tcGFyZTogUmFhaW5EaXZJY29uO1xuICAgICAgICBwaXhlbHNTb2x1dGlvbjogUmFhaW5EaXZJY29uO1xuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBzdG9yYWdlOiBTdG9yYWdlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgICApIHtcbiAgICAgICAgdGhpcy5kZWxldGUoKTtcblxuICAgICAgICB0aGlzLmNhcnRlc2lhblRvb2xzID0gbmV3IENhcnRlc2lhblRvb2xzKCk7XG4gICAgICAgIHRoaXMucGl4ZWxzQ291bnQgPSAxO1xuXG4gICAgICAgIGNvbnN0IGljb25TaXplOiBbbnVtYmVyLCBudW1iZXJdID0gWzQwLCA0MF07IC8vIHNpemUgb2YgdGhlIGljb25cbiAgICAgICAgY29uc3QgaWNvbkFuY2hvcjogW251bWJlciwgbnVtYmVyXSA9IFsyMCwgMjBdOyAvLyBwb2ludCBvZiB0aGUgaWNvbiB3aGljaCB3aWxsIGNvcnJlc3BvbmQgdG8gbWFya2VyJ3MgbG9jYXRpb25cbiAgICAgICAgY29uc3QgcGl4ZWxTaXplOiBbbnVtYmVyLCBudW1iZXJdID0gWzQxLCA0MV07XG4gICAgICAgIGNvbnN0IHBpeGVsQW5jaG9yOiBbbnVtYmVyLCBudW1iZXJdID0gWzIwLCAyMF07XG4gICAgICAgIGNvbnN0IHBvcHVwQW5jaG9yOiBbbnVtYmVyLCBudW1iZXJdID0gWzAsIC0yMF07IC8vIHBvaW50IGZyb20gd2hpY2ggdGhlIHBvcHVwIHNob3VsZCBvcGVuIHJlbGF0aXZlIHRvIHRoZSBpY29uQW5jaG9yXG5cbiAgICAgICAgdGhpcy5yYWFpbkRpdkljb25zID0ge1xuICAgICAgICAgICAgZ2F1Z2VzOiBuZXcgUmFhaW5EaXZJY29uKHtcbiAgICAgICAgICAgICAgICBodG1sOiAnPGltZyBzcmM9XCIuL2Fzc2V0cy9tYXBzL21hcmtlci1wbHV2aW8ucG5nXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlO1wiIC8+JyxcbiAgICAgICAgICAgICAgICBpY29uU2l6ZSxcbiAgICAgICAgICAgICAgICBpY29uQW5jaG9yLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBnYXVnZXNJbkNvbXBhcmU6IG5ldyBSYWFpbkRpdkljb24oe1xuICAgICAgICAgICAgICAgIGh0bWw6ICc8aW1nIHNyYz1cIi4vYXNzZXRzL21hcHMvbWFya2VyLXBsdXZpby1kaWFnLnBuZ1wiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTtcIiAvPicsXG4gICAgICAgICAgICAgICAgaWNvblNpemUsXG4gICAgICAgICAgICAgICAgaWNvbkFuY2hvcixcbiAgICAgICAgICAgICAgICBwb3B1cEFuY2hvcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc2VsZWN0ZWRHYXVnZXM6IG5ldyBSYWFpbkRpdkljb24oe1xuICAgICAgICAgICAgICAgIGh0bWw6ICc8aW1nIHNyYz1cIi4vYXNzZXRzL21hcHMvbWFya2VyLXBsdXZpby1kaWFnLXNlbGVjdC5wbmdcIiBzdHlsZT1cIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7XCIgLz4nLFxuICAgICAgICAgICAgICAgIGljb25TaXplLFxuICAgICAgICAgICAgICAgIGljb25BbmNob3IsXG4gICAgICAgICAgICAgICAgcG9wdXBBbmNob3IsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHBpeGVsczogbmV3IFJhYWluRGl2SWNvbih7XG4gICAgICAgICAgICAgICAgaHRtbDogJzxpbWcgc3JjPVwiLi9hc3NldHMvbWFwcy9tYXJrZXItcmFpbi5wbmdcIiBzdHlsZT1cIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7XCIgLz4nLFxuICAgICAgICAgICAgICAgIGljb25TaXplLFxuICAgICAgICAgICAgICAgIGljb25BbmNob3IsXG4gICAgICAgICAgICAgICAgcG9wdXBBbmNob3IsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHBpeGVsc1NvbHV0aW9uOiBuZXcgUmFhaW5EaXZJY29uKHtcbiAgICAgICAgICAgICAgICBodG1sOiAnPGltZyBzcmM9XCIuL2Fzc2V0cy9tYXBzL21hcmtlci1yYWluLnBuZ1wiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTtcIiAvPicsXG4gICAgICAgICAgICAgICAgaWNvblNpemU6IHBpeGVsU2l6ZSxcbiAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBwaXhlbEFuY2hvcixcbiAgICAgICAgICAgICAgICBwb3B1cEFuY2hvcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgYm9yZGVyczogbmV3IFJhYWluRGl2SWNvbih7XG4gICAgICAgICAgICAgICAgaHRtbDogJzxpbWcgc3JjPVwiLi9hc3NldHMvbWFwcy9tYXJrZXItc2hhZG93LnBuZ1wiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTtcIiAvPicsXG4gICAgICAgICAgICAgICAgaWNvblNpemUsXG4gICAgICAgICAgICAgICAgaWNvbkFuY2hvcixcbiAgICAgICAgICAgICAgICBwb3B1cEFuY2hvcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc3BlZWRzOiBuZXcgUmFhaW5EaXZJY29uKHtcbiAgICAgICAgICAgICAgICBodG1sOiAnPGltZyBzcmM9XCIuL2Fzc2V0cy9tYXBzL21hcmtlci1zcGVlZC5zdmdcIiBzdHlsZT1cIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7XCIgLz4nLFxuICAgICAgICAgICAgICAgIGljb25TaXplLFxuICAgICAgICAgICAgICAgIGljb25BbmNob3IsXG4gICAgICAgICAgICAgICAgcG9wdXBBbmNob3IsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNyZWF0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hhbmdlKGNoYW5nZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZWxldGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd1RpbWVmcmFtZShmb3JjZSA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmRhdGVUb1Nob3dBc1N0cmluZyB8fFxuICAgICAgICAgICAgKCFmb3JjZSAmJiB0aGlzLmFyZURhdGVzRXF1YWwodGhpcy5kYXRlVG9TaG93QXNTdHJpbmcsIHRoaXMuZGF0ZVRvU2hvdykpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRlVG9TaG93ID0gbmV3IERhdGUodGhpcy5kYXRlVG9TaG93QXNTdHJpbmcpO1xuICAgICAgICB0aGlzLmNoYW5nZWREYXRlLmVtaXQodGhpcy5kYXRlVG9TaG93KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmV4dCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBvc3NpYmxlRGF0ZXMgfHwgdGhpcy5wb3NzaWJsZURhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldERhdGVUb1Nob3dJbmRleCgpO1xuICAgICAgICB0aGlzLmRhdGVUb1Nob3cgPVxuICAgICAgICAgICAgaW5kZXggKyAxIDwgdGhpcy5wb3NzaWJsZURhdGVzLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gdGhpcy5wb3NzaWJsZURhdGVzW2luZGV4ICsgMV1cbiAgICAgICAgICAgICAgICA6IHRoaXMucG9zc2libGVEYXRlc1swXTtcbiAgICAgICAgdGhpcy5kYXRlVG9TaG93QXNTdHJpbmcgPSB0aGlzLmRhdGVUb1Nob3cudG9JU09TdHJpbmcoKTtcblxuICAgICAgICB0aGlzLnNob3dUaW1lZnJhbWUodHJ1ZSk7XG4gICAgICAgIGlmICh0aGlzLmF1dG9wbGF5KSB7XG4gICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLm5leHQoKSwgMjAwMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcHJldmlvdXMoKSB7XG4gICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICBpZiAoIXRoaXMucG9zc2libGVEYXRlcyB8fCB0aGlzLnBvc3NpYmxlRGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0RGF0ZVRvU2hvd0luZGV4KCk7XG4gICAgICAgIHRoaXMuZGF0ZVRvU2hvdyA9IGluZGV4ID4gMCA/IHRoaXMucG9zc2libGVEYXRlc1tpbmRleCAtIDFdIDogdGhpcy5wb3NzaWJsZURhdGVzWzBdO1xuICAgICAgICB0aGlzLmRhdGVUb1Nob3dBc1N0cmluZyA9IHRoaXMuZGF0ZVRvU2hvdy50b0lTT1N0cmluZygpO1xuXG4gICAgICAgIHRoaXMuc2hvd1RpbWVmcmFtZSh0cnVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGxheSgpIHtcbiAgICAgICAgdGhpcy5hdXRvcGxheSA9IHRydWU7XG4gICAgICAgIHRoaXMubmV4dCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdG9wKCkge1xuICAgICAgICB0aGlzLmF1dG9wbGF5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGNoYW5nZVNob3dNYXJrZXJzKCkge1xuICAgICAgICBpZiAoIXRoaXMubWFwRWxlbWVudD8ubWFya2Vyc0xheWVyIHx8ICF0aGlzLm1hcEVsZW1lbnQ/Lm1hcExlYWZsZXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNob3dNYXJrZXJzKSB7XG4gICAgICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFya2Vyc0xheWVyLmFkZFRvTWFwKHRoaXMubWFwRWxlbWVudC5tYXBMZWFmbGV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5tYXJrZXJzTGF5ZXIucmVtb3ZlRnJvbU1hcCh0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2hhbmdlU2hvd1NwZWVkTWFya2VycygpIHtcbiAgICAgICAgaWYgKCF0aGlzLm1hcEVsZW1lbnQ/Lm1hcmtlcnNMYXllciB8fCAhdGhpcy5tYXBFbGVtZW50Py5tYXBMZWFmbGV0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZWJ1aWxkIG1hcmtlcnMgd2l0aCBjdXJyZW50IHZpc2liaWxpdHkgc2V0dGluZ3NcbiAgICAgICAgY29uc3Qge2FsbE1hcmtlcnN9ID0gdGhpcy5idWlsZE1hcmtlcnNDb25maWcoKTtcbiAgICAgICAgY29uc3QgbWFya2Vyc1Byb2R1Y2VkID0gdGhpcy5tYXBFbGVtZW50LnVwZGF0ZU1hcmtlcnMoYWxsTWFya2Vycyk7XG4gICAgICAgIGlmIChtYXJrZXJzUHJvZHVjZWQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5iaW5kTWFya2Vyc0NsaWNrRXZlbnRzKG1hcmtlcnNQcm9kdWNlZCk7XG4gICAgICAgICAgICBpZiAodGhpcy5zaG93TWFya2Vycykge1xuICAgICAgICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5tYXJrZXJzTGF5ZXIucmVtb3ZlRnJvbU1hcCh0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNMYXllci5hZGRUb01hcCh0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2hhbmdlQWxwaGEoKSB7XG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoJ3JhYWluLW1hcC1hbHBoYScsIHRoaXMuYWxwaGEpO1xuICAgICAgICBpZiAoIXRoaXMubWFwRWxlbWVudD8ubWFwTGVhZmxldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tYXBFbGVtZW50LmFscGhhID0gMC4zICsgdGhpcy5hbHBoYSAqIDAuNztcbiAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQuZWFjaExheWVyKChsYXllcjogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAobGF5ZXIuX2NvbnRhaW5lcj8uc3R5bGUpIHtcbiAgICAgICAgICAgICAgICBsYXllci5fY29udGFpbmVyLnN0eWxlLmZpbHRlciA9IGBicmlnaHRuZXNzKCR7KDEwIC0gdGhpcy5hbHBoYSAqIDEwKSAqIDEwfSUpYDsgLy8gaW52ZXJ0KDEpID9cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZU1hcFNldHRpbmdzKCkge1xuICAgICAgICB0aGlzLnNob3dNYXBTZXR0aW5ncyA9ICF0aGlzLnNob3dNYXBTZXR0aW5ncztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZSgpIHtcbiAgICAgICAgY29uc3QgY3JlYXRlZCA9IHRoaXMuY3JlYXRlZDtcbiAgICAgICAgaWYgKGNyZWF0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNyZWF0ZWQgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHthbGxNYXJrZXJzfSA9IHRoaXMuYnVpbGRNYXJrZXJzQ29uZmlnKCk7XG5cbiAgICAgICAgY29uc3QgZmFjdG9yeSA9IG5ldyBFbGVtZW50c0ZhY3RvcnkodGhpcy5jb29yZGluYXRlcywgdHJ1ZSk7XG4gICAgICAgIHRoaXMuY3JlYXRlU2NhbGUoZmFjdG9yeSwgdGhpcy5zY2FsZUxhYmVsKTtcblxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjcmVhdGVkT3V0c2lkZSA9IHRoaXMuY3JlYXRlZDtcbiAgICAgICAgICAgICAgICBpZiAoIWNyZWF0ZWRPdXRzaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLm1hcEVsZW1lbnQgPSBmYWN0b3J5LmNyZWF0ZU1hcCh0aGlzLm1hcERpdlJlZi5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVmcmFtZUNvbnRhaW5lcnM6IHRoaXMudGltZWZyYW1lQ29udGFpbmVycyxcbiAgICAgICAgICAgICAgICAgICAgbWFya2VyczogYWxsTWFya2VycyxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlQWxwaGEoKTtcblxuICAgICAgICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5tYXBMZWFmbGV0Py5vbignbW91c2Vtb3ZlJywgKGV2dCkgPT4gdGhpcy5vbk1hcE1vdXNlTW92ZShldnQpKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldD8ub24oJ3pvb20nLCAoZXZ0KSA9PiB0aGlzLm9uWm9vbShldnQpKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldD8ub24oJ21vdmVlbmQnLCAoZXZ0KSA9PiB0aGlzLm9uTW92ZUVuZChldnQpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZHM6IExhdExuZ0JvdW5kcyA9IHRoaXMubWFwRWxlbWVudC5tYXBMZWFmbGV0LmdldEJvdW5kcygpO1xuICAgICAgICAgICAgICAgIHRoaXMucGl4ZWxzQ291bnQgPSB0aGlzLmNhcnRlc2lhblRvb2xzLmhvd01hbnlQaXhlbHNJbkVhcnRoTWFwKFxuICAgICAgICAgICAgICAgICAgICBib3VuZHMuX3NvdXRoV2VzdCxcbiAgICAgICAgICAgICAgICAgICAgYm91bmRzLl9ub3J0aEVhc3RcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kTWFya2Vyc0NsaWNrRXZlbnRzKHRoaXMubWFwRWxlbWVudC5tYXJrZXJzUHJvZHVjZWQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25TaXplQ2hhbmdlZCA9ICgpID0+IHRoaXMudXBkYXRlTGF5ZXJEaW1lbnNpb25zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVNYXBTaXplKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VOYXZpZ2F0aW9uKHRoaXMuZGVmYXVsdERhdGUpO1xuICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWxldGUoKSB7XG4gICAgICAgIHRoaXMubWFwRWxlbWVudD8ubWFwTGVhZmxldD8ucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMubWFwRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5tY1RleHQgPSAnJztcbiAgICAgICAgdGhpcy5uZXh0RGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5wb3NzaWJsZU5hbWVzID0gW107XG4gICAgICAgIHRoaXMucG9zc2libGVEYXRlcyA9IFtdO1xuICAgICAgICB0aGlzLnRpbWVmcmFtZU5hbWVUb1Nob3cgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZGF0ZVRvU2hvdyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5kYXRlVG9TaG93QXNTdHJpbmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuY3VtdWxhdGl2ZURhdGVGcm9tID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm9uU2l6ZUNoYW5nZWQgPSAoKSA9PiB7fTtcbiAgICAgICAgdGhpcy5jdXJyZW50RnJhbWVDb250YWluZXIgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuY3JlYXRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFscGhhID0gdGhpcy5zdG9yYWdlLmdldCgncmFhaW4tbWFwLWFscGhhJywgMC40KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoYW5nZShjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGxldCBwb3NzaWJsZU5ld0RlZmF1bHREYXRlOiBEYXRlO1xuXG4gICAgICAgIGlmIChjaGFuZ2VzLmRlZmF1bHREYXRlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5hcmVEYXRlc0VxdWFsKFxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLmRlZmF1bHREYXRlLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy5kZWZhdWx0RGF0ZS5wcmV2aW91c1ZhbHVlXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcG9zc2libGVOZXdEZWZhdWx0RGF0ZSA9IHRoaXMuZGVmYXVsdERhdGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5jb29yZGluYXRlcyAmJiB0aGlzLm1hcEVsZW1lbnQ/Lm1hcExlYWZsZXQgJiYgdGhpcy5jb29yZGluYXRlcykge1xuICAgICAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQuc2V0VmlldyhbdGhpcy5jb29yZGluYXRlcy5sYXQsIHRoaXMuY29vcmRpbmF0ZXMubG5nXSwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMubWFya2VycyAmJiB0aGlzLm1hcEVsZW1lbnQ/Lm1hcmtlcnNMYXllcikge1xuICAgICAgICAgICAgY29uc3Qge2FsbE1hcmtlcnN9ID0gdGhpcy5idWlsZE1hcmtlcnNDb25maWcoKTtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtlcnNQcm9kdWNlZCA9IHRoaXMubWFwRWxlbWVudC51cGRhdGVNYXJrZXJzKGFsbE1hcmtlcnMpO1xuICAgICAgICAgICAgaWYgKG1hcmtlcnNQcm9kdWNlZD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kTWFya2Vyc0NsaWNrRXZlbnRzKG1hcmtlcnNQcm9kdWNlZCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd01hcmtlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNMYXllci5yZW1vdmVGcm9tTWFwKHRoaXMubWFwRWxlbWVudC5tYXBMZWFmbGV0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNMYXllci5hZGRUb01hcCh0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY2hhbmdlcy5tYXJrZXJzICYmXG4gICAgICAgICAgICB0aGlzLm1hcmtlcnM/LnNlbGVjdGVkR2F1Z2VzICYmXG4gICAgICAgICAgICB0aGlzLm1hcmtlcnM/LnNlbGVjdGVkR2F1Z2VzLmxlbmd0aCA9PT0gMVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkR2F1Z2UgPSB0aGlzLm1hcmtlcnMuc2VsZWN0ZWRHYXVnZXNbMF07XG4gICAgICAgICAgICB0aGlzLm1hcEVsZW1lbnQ/Lm1hcExlYWZsZXQ/LnNldFZpZXcoc2VsZWN0ZWRHYXVnZSwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubWFwRWxlbWVudCAmJiBjaGFuZ2VzLnRpbWVmcmFtZUNvbnRhaW5lcnMpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGltZWZyYW1lKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tYXBFbGVtZW50Py5jb21wb3NpdGVMYXllciAmJiBjaGFuZ2VzLnN1bVZhbHVlcykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdW0oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1hcEVsZW1lbnQ/LmNvbXBvc2l0ZUxheWVyICYmIGNoYW5nZXMuc2hvd1Zpc2libGVQaXhlbE1hcmtlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRyYXdlciA9IHRoaXMubWFwRWxlbWVudC5jb21wb3NpdGVMYXllci5nZXRGaXJzdERyYXdlcigpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlUGl4ZWxNYXJrZXJzKGRyYXdlcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoYW5nZU5hdmlnYXRpb24ocG9zc2libGVOZXdEZWZhdWx0RGF0ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVTdW0oKSB7XG4gICAgICAgIGlmICghdGhpcy5zdW1WYWx1ZXMgfHwgIXRoaXMuc3VtRm4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRyYXdlciA9IHRoaXMubWFwRWxlbWVudC5jb21wb3NpdGVMYXllci5nZXRGaXJzdERyYXdlcigpO1xuICAgICAgICBjb25zdCBzdW1PZlBpeGVsczogbnVtYmVyID0gZHJhd2VyPy5nZXRFeGVjT2ZXaW5kb3dQb2ludHModGhpcy5zdW1WYWx1ZXMsIHRoaXMuc3VtRm4pID8/IC0xO1xuXG4gICAgICAgIGlmIChzdW1PZlBpeGVscyA+PSAwICYmIHRoaXMucGl4ZWxzQ291bnQgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBhdmVyYWdlID0gTWF0aC5yb3VuZCgoc3VtT2ZQaXhlbHMgLyB0aGlzLnBpeGVsc0NvdW50KSAqIDEwMCkgLyAxMDA7XG4gICAgICAgICAgICB0aGlzLnN1bVJlc3VsdCA9IGAke01hdGgucm91bmQoc3VtT2ZQaXhlbHMpfW1tIChhdmcgb2YgJHthdmVyYWdlfW1tIGZvciAke01hdGgucm91bmQodGhpcy5waXhlbHNDb3VudCl9IHBpeGVscylgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdW1SZXN1bHQgPSAnTkEnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlZFN1bS5lbWl0KHRoaXMuc3VtUmVzdWx0KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVQaXhlbE1hcmtlcnMoZHJhd2VyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVZpc2libGVQaXhlbE1hcmtlcnMoZHJhd2VyOiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNob3dWaXNpYmxlUGl4ZWxNYXJrZXJzIHx8ICFkcmF3ZXIgfHwgIXRoaXMuc3VtVmFsdWVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy52aXNpYmxlUGl4ZWxNYXJrZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2libGVQaXhlbE1hcmtlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hNYXJrZXJzTGF5ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEV4dHJhY3QgdmlzaWJsZSBwaXhlbCBwb3NpdGlvbnNcbiAgICAgICAgY29uc3QgdmlzaWJsZVBpeGVsczogTWFwTGF0TG5nW10gPVxuICAgICAgICAgICAgZHJhd2VyLmdldEV4ZWNPZldpbmRvd1BvaW50cyh0aGlzLnN1bVZhbHVlcywgKHZhbHVlczogQ2FydGVzaWFuTWFwVmFsdWVbXSkgPT5cbiAgICAgICAgICAgICAgICB2YWx1ZXMubWFwKCh2KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBsYXQ6ICh2LmxhdCArIHYubGF0MikgLyAyLFxuICAgICAgICAgICAgICAgICAgICBsbmc6ICh2LmxuZyArIHYubG5nMikgLyAyLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdi52YWx1ZSxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICkgPz8gW107XG5cbiAgICAgICAgdGhpcy52aXNpYmxlUGl4ZWxNYXJrZXJzID0gdmlzaWJsZVBpeGVscztcbiAgICAgICAgdGhpcy5yZWZyZXNoTWFya2Vyc0xheWVyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWZyZXNoTWFya2Vyc0xheWVyKCkge1xuICAgICAgICBpZiAoIXRoaXMubWFwRWxlbWVudD8ubWFya2Vyc0xheWVyIHx8ICF0aGlzLm1hcEVsZW1lbnQ/Lm1hcExlYWZsZXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHthbGxNYXJrZXJzfSA9IHRoaXMuYnVpbGRNYXJrZXJzQ29uZmlnKCk7XG4gICAgICAgIGNvbnN0IG1hcmtlcnNQcm9kdWNlZCA9IHRoaXMubWFwRWxlbWVudC51cGRhdGVNYXJrZXJzKGFsbE1hcmtlcnMpO1xuICAgICAgICBpZiAobWFya2Vyc1Byb2R1Y2VkPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYmluZE1hcmtlcnNDbGlja0V2ZW50cyhtYXJrZXJzUHJvZHVjZWQpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd01hcmtlcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFya2Vyc0xheWVyLnJlbW92ZUZyb21NYXAodGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQpO1xuICAgICAgICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5tYXJrZXJzTGF5ZXIuYWRkVG9NYXAodGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGFuZ2VOYXZpZ2F0aW9uKGRlZmF1bHREYXRlPzogRGF0ZSkge1xuICAgICAgICAvLyB1cGRhdGUgcG9zc2libGUgbmFtZXNcbiAgICAgICAgaWYgKHRoaXMudGltZWZyYW1lQ29udGFpbmVycz8uY29udGFpbmVycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnBvc3NpYmxlTmFtZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMudGltZWZyYW1lQ29udGFpbmVycy5jb250YWluZXJzLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wb3NzaWJsZU5hbWVzLmluZGV4T2YoYy5uYW1lKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3NzaWJsZU5hbWVzLnB1c2goYy5uYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudGltZWZyYW1lTmFtZVRvU2hvdyA9IHRoaXMucG9zc2libGVOYW1lcy5sZW5ndGggPiAwID8gdGhpcy5wb3NzaWJsZU5hbWVzWzBdIDogbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVwZGF0ZSBwb3NzaWJsZSBkYXRlc1xuICAgICAgICB0aGlzLnBvc3NpYmxlRGF0ZXMgPSB0aGlzLnRpbWVmcmFtZURhdGVzO1xuICAgICAgICBpZiAoIXRoaXMucG9zc2libGVEYXRlcyB8fCB0aGlzLnBvc3NpYmxlRGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgZGF0ZVRvU2hvd1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBkZWZhdWx0RGF0ZSAmJlxuICAgICAgICAgICAgdGhpcy5wb3NzaWJsZURhdGVzLmZpbHRlcigoZCkgPT4gdGhpcy5hcmVEYXRlc0VxdWFsKGQsIGRlZmF1bHREYXRlKSkubGVuZ3RoID09PSAxXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5kYXRlVG9TaG93ID0gZGVmYXVsdERhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuZGF0ZVRvU2hvdyAmJlxuICAgICAgICAgICAgdGhpcy5wb3NzaWJsZURhdGVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIHRoaXMucG9zc2libGVEYXRlcy5maWx0ZXIoKGQpID0+IHRoaXMuYXJlRGF0ZXNFcXVhbChkLCB0aGlzLmRhdGVUb1Nob3cpKS5sZW5ndGggIT09IDFcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUb1Nob3cgPSB0aGlzLnBvc3NpYmxlRGF0ZXNbMF07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmlyc3RJbml0ID0gZmFsc2U7XG4gICAgICAgIGlmICghdGhpcy5kYXRlVG9TaG93QXNTdHJpbmcpIHtcbiAgICAgICAgICAgIGZpcnN0SW5pdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRlVG9TaG93QXNTdHJpbmcgPSB0aGlzLmRhdGVUb1Nob3cudG9JU09TdHJpbmcoKTtcbiAgICAgICAgdGhpcy5jdW11bGF0aXZlRGF0ZUZyb20gPSBuZXcgRGF0ZSh0aGlzLmRhdGVUb1Nob3cpO1xuXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uSW5NcyA9IHRoaXMuY3VtdWxhdGl2ZUR1cmF0aW9uSW5NaW51dGVzICogNjAgKiAxMDAwO1xuICAgICAgICB0aGlzLmN1bXVsYXRpdmVEYXRlRnJvbS5zZXRUaW1lKHRoaXMuY3VtdWxhdGl2ZURhdGVGcm9tLmdldFRpbWUoKSAtIGR1cmF0aW9uSW5Ncyk7XG5cbiAgICAgICAgaWYgKGZpcnN0SW5pdCkge1xuICAgICAgICAgICAgdGhpcy5zaG93VGltZWZyYW1lKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREYXRlVG9TaG93SW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBkYXRlIG9mIHRoaXMucG9zc2libGVEYXRlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXJlRGF0ZUlTT0VxdWFsKHRoaXMuZGF0ZVRvU2hvd0FzU3RyaW5nLCBkYXRlKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblpvb20oZXZ0OiBhbnkpIHtcbiAgICAgICAgY29uc3QgbWFwID0gZXZ0LnRhcmdldDtcbiAgICAgICAgY29uc3QgYm91bmRzOiBMYXRMbmdCb3VuZHMgPSBtYXAuZ2V0Qm91bmRzKCk7XG4gICAgICAgIHRoaXMucGl4ZWxzQ291bnQgPSB0aGlzLmNhcnRlc2lhblRvb2xzLmhvd01hbnlQaXhlbHNJbkVhcnRoTWFwKFxuICAgICAgICAgICAgYm91bmRzLl9zb3V0aFdlc3QsXG4gICAgICAgICAgICBib3VuZHMuX25vcnRoRWFzdFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnVwZGF0ZVN1bSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25Nb3ZlRW5kKGV2dDogYW55KSB7XG4gICAgICAgIGNvbnN0IG1hcCA9IGV2dC50YXJnZXQ7XG4gICAgICAgIGNvbnN0IGJvdW5kczogTGF0TG5nQm91bmRzID0gbWFwLmdldEJvdW5kcygpO1xuICAgICAgICB0aGlzLnBpeGVsc0NvdW50ID0gdGhpcy5jYXJ0ZXNpYW5Ub29scy5ob3dNYW55UGl4ZWxzSW5FYXJ0aE1hcChcbiAgICAgICAgICAgIGJvdW5kcy5fc291dGhXZXN0LFxuICAgICAgICAgICAgYm91bmRzLl9ub3J0aEVhc3RcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy51cGRhdGVTdW0oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUF2YWlsYWJsZVBpeGVscyhcbiAgICAgICAgYXZhaWxhYmxlUGl4ZWxzOiB7d2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXI7IHRvdGFsUGl4ZWxzOiBudW1iZXJ9LFxuICAgICAgICBib3VuZHM6IGFueSxcbiAgICAgICAgem9vbTogbnVtYmVyXG4gICAgKSB7XG4gICAgICAgIC8vIFVwZGF0ZSB5b3VyIGNvbXBvbmVudCBwcm9wZXJ0aWVzIG9yIHBlcmZvcm0gY2FsY3VsYXRpb25zXG4gICAgICAgIHRoaXMuY3VycmVudFdpZHRoID0gYXZhaWxhYmxlUGl4ZWxzLndpZHRoO1xuICAgICAgICB0aGlzLmN1cnJlbnRIZWlnaHQgPSBhdmFpbGFibGVQaXhlbHMuaGVpZ2h0O1xuXG4gICAgICAgIC8vIFlvdSBjYW4gYWxzbyBjYWxjdWxhdGUgcGl4ZWwgZGVuc2l0eSBvciBvdGhlciBtZXRyaWNzIGhlcmVcbiAgICAgICAgLy8gY29uc3QgcGl4ZWxEZW5zaXR5ID0gdGhpcy5jYWxjdWxhdGVQaXhlbERlbnNpdHkoYm91bmRzLCBhdmFpbGFibGVQaXhlbHMsIHpvb20pO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnUGl4ZWwgZGVuc2l0eTonLCBwaXhlbERlbnNpdHkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlUGl4ZWxEZW5zaXR5KFxuICAgICAgICBib3VuZHM6IGFueSxcbiAgICAgICAgYXZhaWxhYmxlUGl4ZWxzOiB7d2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXJ9LFxuICAgICAgICB6b29tOiBudW1iZXJcbiAgICApIHtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGhvdyBtYW55IG1ldGVycyBwZXIgcGl4ZWwgKGFwcHJveGltYXRlKVxuICAgICAgICBjb25zdCBlYXJ0aENpcmN1bWZlcmVuY2UgPSA0MDA3NTAxNi42ODY7IC8vIG1ldGVyc1xuICAgICAgICBjb25zdCBtZXRlcnNQZXJQaXhlbCA9XG4gICAgICAgICAgICAoZWFydGhDaXJjdW1mZXJlbmNlICogTWF0aC5jb3MoKGJvdW5kcy5nZXRDZW50ZXIoKS5sYXQgKiBNYXRoLlBJKSAvIDE4MCkpIC9cbiAgICAgICAgICAgIE1hdGgucG93KDIsIHpvb20gKyA4KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWV0ZXJzUGVyUGl4ZWwsXG4gICAgICAgICAgICBwaXhlbHNQZXJNZXRlcjogMSAvIG1ldGVyc1BlclBpeGVsLFxuICAgICAgICAgICAgdG90YWxWaXNpYmxlQXJlYTogYXZhaWxhYmxlUGl4ZWxzLndpZHRoICogYXZhaWxhYmxlUGl4ZWxzLmhlaWdodCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uTWFwTW91c2VNb3ZlKGV2dDoge2xhdGxuZzoge2xhdDogbnVtYmVyOyBsbmc6IG51bWJlcn19KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxhdDogc3RyaW5nID0gZXZ0LmxhdGxuZy5sYXQudG9GaXhlZCgzKTtcbiAgICAgICAgY29uc3QgbG5nOiBzdHJpbmcgPSBldnQubGF0bG5nLmxuZy50b0ZpeGVkKDMpO1xuXG4gICAgICAgIGxldCB2YWx1ZSA9IE5hTjtcbiAgICAgICAgbGV0IHZhbHVlTGF0ID0gTmFOLFxuICAgICAgICAgICAgdmFsdWVMbmcgPSBOYU4sXG4gICAgICAgICAgICB2YWx1ZUxhdDIgPSBOYU4sXG4gICAgICAgICAgICB2YWx1ZUxuZzIgPSBOYU47XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRGcmFtZUNvbnRhaW5lcikge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVTZWxlY3RlZCA9ICh0aGlzLmN1cnJlbnRGcmFtZUNvbnRhaW5lci52YWx1ZXMgYXMgQ2FydGVzaWFuTWFwVmFsdWVbXSkuZmlsdGVyKFxuICAgICAgICAgICAgICAgICh2OiBDYXJ0ZXNpYW5NYXBWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgdi5sYXQgPD0gZXZ0LmxhdGxuZy5sYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2dC5sYXRsbmcubGF0IDwgdi5sYXQyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB2LmxuZyA8PSBldnQubGF0bG5nLmxuZyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LmxhdGxuZy5sbmcgPCB2LmxuZzJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAodmFsdWVTZWxlY3RlZC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucm91bmRUbzNEZWNpbWFscyh2YWx1ZVNlbGVjdGVkWzBdLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB2YWx1ZUxhdCA9IHRoaXMucm91bmRUbzNEZWNpbWFscyh2YWx1ZVNlbGVjdGVkWzBdLmxhdCk7XG4gICAgICAgICAgICAgICAgdmFsdWVMbmcgPSB0aGlzLnJvdW5kVG8zRGVjaW1hbHModmFsdWVTZWxlY3RlZFswXS5sbmcpO1xuICAgICAgICAgICAgICAgIHZhbHVlTGF0MiA9IHRoaXMucm91bmRUbzNEZWNpbWFscyh2YWx1ZVNlbGVjdGVkWzBdLmxhdDIpO1xuICAgICAgICAgICAgICAgIHZhbHVlTG5nMiA9IHRoaXMucm91bmRUbzNEZWNpbWFscyh2YWx1ZVNlbGVjdGVkWzBdLmxuZzIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLndhcm4oJ3ZhbHVlU2VsZWN0ZWQgaXNzdWUgPycsIHZhbHVlU2VsZWN0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMubWNUZXh0ID0gYExhdGl0dWRlOiAke2xhdH0gJm5ic3A7ICZuYnNwOyBMb25naXR1ZGU6ICR7bG5nfSAmbmJzcDsgJm5ic3A7XG4gICAgICAgICAgICAvLyAgICBWYWx1ZTogWyR7dmFsdWVMYXR9ICR7dmFsdWVMbmd9IHwgJHt2YWx1ZUxhdDJ9ICR7dmFsdWVMbmcyfV0gJHt2YWx1ZX1gO1xuICAgICAgICAgICAgdGhpcy5tY1RleHQgPSBgTGF0aXR1ZGU6ICR7bGF0fSAmbmJzcDsgJm5ic3A7IExvbmdpdHVkZTogJHtsbmd9ICZuYnNwOyAmbmJzcDsgVmFsdWU6ICR7dmFsdWV9YDtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uTWFwQ2xpY2soZXZ0OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm1hcmtlcnM/LmdhdWdlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2VsZWN0ZWRHYXVnZTogTWFwTGF0TG5nO1xuICAgICAgICBmb3IgKGNvbnN0IGdhdWdlIG9mIHRoaXMubWFya2Vycy5nYXVnZXMpIHtcbiAgICAgICAgICAgIGlmIChnYXVnZS5pZCA9PT0gZXZ0Py50YXJnZXQ/Lm9wdGlvbnM/LmFsdCkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkR2F1Z2UgPSBnYXVnZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWxlY3RlZEdhdWdlKSB7XG4gICAgICAgICAgICB0aGlzLm1hcmtlcnMuc2VsZWN0ZWRHYXVnZXMgPSBbc2VsZWN0ZWRHYXVnZV07XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWFya2VyLmVtaXQoXG4gICAgICAgICAgICAgICAgbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRHYXVnZS5sYXQsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkR2F1Z2UubG5nLFxuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkR2F1Z2UuaWQsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkR2F1Z2UubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRHYXVnZS52YWx1ZVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWFya2VyLmVtaXQoXG4gICAgICAgICAgICAgICAgbmV3IE1hcExhdExuZyhldnQubGF0bG5nPy5sYXQsIGV2dC5sYXRsbmc/LmxuZywgdW5kZWZpbmVkLCBldnQuaWQsIGV2dC5uYW1lKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hhbmdlKHttYXJrZXJzOiBbJ2NoYW5nZWQnXX0gYXMgYW55KTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgICBwcml2YXRlIG9uUmVzaXplKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGVNYXBTaXplKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVNYXBTaXplKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBtYXBEaXZXaWR0aCA9IHRoaXMubWFwRGl2UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZT8ucGFyZW50Tm9kZVsnY2xpZW50V2lkdGgnXTtcbiAgICAgICAgY29uc3QgcGFkZGluZyA9IDIxO1xuICAgICAgICBsZXQgY3VycmVudFdpZHRoID1cbiAgICAgICAgICAgIG1hcERpdldpZHRoIHx8XG4gICAgICAgICAgICB3aW5kb3cuaW5uZXJXaWR0aCB8fFxuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIHx8XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoO1xuICAgICAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID1cbiAgICAgICAgICAgIHRoaXMuY3VycmVudEhlaWdodCB8fFxuICAgICAgICAgICAgd2luZG93LmlubmVySGVpZ2h0IHx8XG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0IHx8XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodDtcbiAgICAgICAgY3VycmVudFdpZHRoIC09IHBhZGRpbmc7XG4gICAgICAgIHRoaXMuY3VycmVudFdpZHRoID0gY3VycmVudFdpZHRoO1xuICAgICAgICB0aGlzLmN1cnJlbnRIZWlnaHQgPSBjdXJyZW50SGVpZ2h0O1xuXG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uU2l6ZUNoYW5nZWQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVUaW1lZnJhbWUoKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMudGltZWZyYW1lQ29udGFpbmVycz8uY29udGFpbmVycz8ubGVuZ3RoICYmXG4gICAgICAgICAgICB0aGlzLnRpbWVmcmFtZUNvbnRhaW5lcnM/LmNvbnRhaW5lcnNbMF0/LnRpbWVmcmFtZT8ubGVuZ3RoXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5tYXBFbGVtZW50LnVwZGF0ZU1hcFRpbWVmcmFtZSh0aGlzLnRpbWVmcmFtZUNvbnRhaW5lcnMpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50RnJhbWVDb250YWluZXIgPSB0aGlzLnRpbWVmcmFtZUNvbnRhaW5lcnM/LmNvbnRhaW5lcnNbMF0/LnRpbWVmcmFtZVswXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hhbmdlQWxwaGEoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVNjYWxlKGZhY3Rvcnk6IEVsZW1lbnRzRmFjdG9yeSwgbGFiZWw6IHN0cmluZykge1xuICAgICAgICB0aGlzLmRlbGV0ZVNjYWxlKCk7XG4gICAgICAgIGlmICghdGhpcy5zY2FsZUNhbnZhc1JlZj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKENoYXJ0U2NhbGVDb2xvcnMpO1xuICAgICAgICBlbnRyaWVzLnNvcnQoKGEsIGIpID0+IHBhcnNlRmxvYXQoYVswXSkgLSBwYXJzZUZsb2F0KGJbMF0pKTtcbiAgICAgICAgY29uc3Qgc29ydGVkTWFwID0gbmV3IE1hcChlbnRyaWVzKTtcbiAgICAgICAgY29uc3Qgc29ydGVkQXJyYXkgPSBbLi4uc29ydGVkTWFwLmVudHJpZXMoKV07XG4gICAgICAgIGNvbnN0IHNjYWxlQ29sb3JzID0gc29ydGVkQXJyYXkubWFwKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtjb2xvcjogZW50cnlbMV19O1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc2NhbGVMYWJlbHMgPSBzb3J0ZWRBcnJheS5tYXAoKGVudHJ5KSA9PiBlbnRyeVswXSk7XG4gICAgICAgIHRoaXMuc2NhbGVFbGVtZW50ID0gZmFjdG9yeS5jcmVhdGVTY2FsZShcbiAgICAgICAgICAgIHRoaXMuc2NhbGVDYW52YXNSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIG5ldyBTY2FsZUVsZW1lbnRJbnB1dChzY2FsZUNvbG9ycywgc2NhbGVMYWJlbHMsIGxhYmVsKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVsZXRlU2NhbGUoKSB7XG4gICAgICAgIGlmICh0aGlzLnNjYWxlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5zY2FsZUVsZW1lbnQ/LmNoYXJ0Py5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWlsZHMgdGhlIG1hcmtlcnMgY29uZmlndXJhdGlvbiBhcnJheSBmb3IgdGhlIG1hcFxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIG1hcmtlciBjb25maWd1cmF0aW9ucyB3aXRoIGljb25zIGFuZCBwb3NpdGlvbnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGJ1aWxkTWFya2Vyc0NvbmZpZygpIHtcbiAgICAgICAgY29uc3QgYWxsTWFya2Vyczoge2ljb25zTGF0TG5nOiBNYXBMYXRMbmdbXTsgcmFhaW5EaXZJY29uOiBSYWFpbkRpdkljb259W10gPSBbXG4gICAgICAgICAgICB7aWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycz8uZ2F1Z2VzID8/IFtdLCByYWFpbkRpdkljb246IHRoaXMucmFhaW5EaXZJY29ucy5nYXVnZXN9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnM/LnNlbGVjdGVkR2F1Z2VzID8/IFtdLFxuICAgICAgICAgICAgICAgIHJhYWluRGl2SWNvbjogdGhpcy5yYWFpbkRpdkljb25zLnNlbGVjdGVkR2F1Z2VzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzPy5nYXVnZXNJbkNvbXBhcmUgPz8gW10sXG4gICAgICAgICAgICAgICAgcmFhaW5EaXZJY29uOiB0aGlzLnJhYWluRGl2SWNvbnMuZ2F1Z2VzSW5Db21wYXJlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzPy5waXhlbHMgPz8gW10sIHJhYWluRGl2SWNvbjogdGhpcy5yYWFpbkRpdkljb25zLnBpeGVsc30sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycz8ucGl4ZWxzU29sdXRpb24gPz8gW10sXG4gICAgICAgICAgICAgICAgcmFhaW5EaXZJY29uOiB0aGlzLnJhYWluRGl2SWNvbnMucGl4ZWxzU29sdXRpb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8ge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnM/LmJvcmRlcnMsIHJhYWluRGl2SWNvbjogdGhpcy5yYWFpbkRpdkljb25zLmJvcmRlcnN9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmICh0aGlzLnNob3dWaXNpYmxlUGl4ZWxNYXJrZXJzICYmIHRoaXMudmlzaWJsZVBpeGVsTWFya2Vycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhbGxNYXJrZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGljb25zTGF0TG5nOiB0aGlzLnZpc2libGVQaXhlbE1hcmtlcnMsXG4gICAgICAgICAgICAgICAgcmFhaW5EaXZJY29uOiB0aGlzLnJhYWluRGl2SWNvbnMucGl4ZWxzU29sdXRpb24sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNob3dTcGVlZE1hcmtlcnMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbWFya2VyIG9mIHRoaXMubWFya2Vycz8uc3BlZWRzID8/IFtdKSB7XG4gICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGR5bmFtaWMgc2l6ZSBiYXNlZCBvbiBzcGVlZCAobWFya2VyLnZhbHVlIGlzIGluIG0vcylcbiAgICAgICAgICAgICAgICAvLyBCYXNlIHNpemU6IDIwcHgsIHNjYWxlIHVwIHdpdGggc3BlZWQgKHR5cGljYWwgcmFuZ2U6IDEtMjAgbS9zKVxuICAgICAgICAgICAgICAgIGNvbnN0IHNwZWVkSW5NZXRlcnNQZXJTZWMgPSBtYXJrZXIudmFsdWUgPz8gNTtcbiAgICAgICAgICAgICAgICBjb25zdCBtaW5TaXplID0gMjA7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4U2l6ZSA9IDYwO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pblNwZWVkID0gMTtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXhTcGVlZCA9IDIwO1xuXG4gICAgICAgICAgICAgICAgLy8gTGluZWFyIGludGVycG9sYXRpb246IHNpemUgaW5jcmVhc2VzIHdpdGggc3BlZWRcbiAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkU3BlZWQgPSBNYXRoLm1heChtaW5TcGVlZCwgTWF0aC5taW4obWF4U3BlZWQsIHNwZWVkSW5NZXRlcnNQZXJTZWMpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXplID1cbiAgICAgICAgICAgICAgICAgICAgbWluU2l6ZSArXG4gICAgICAgICAgICAgICAgICAgICgobm9ybWFsaXplZFNwZWVkIC0gbWluU3BlZWQpIC8gKG1heFNwZWVkIC0gbWluU3BlZWQpKSAqIChtYXhTaXplIC0gbWluU2l6ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaWNvblNpemUgPSBNYXRoLnJvdW5kKHNpemUpO1xuXG4gICAgICAgICAgICAgICAgYWxsTWFya2Vycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbnNMYXRMbmc6IFttYXJrZXJdLFxuICAgICAgICAgICAgICAgICAgICByYWFpbkRpdkljb246IG5ldyBSYWFpbkRpdkljb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbDogdGhpcy5yYWFpbkRpdkljb25zLnNwZWVkcy5vcHRpb25zLmh0bWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogaWNvblNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGljb25TaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogW2ljb25TaXplIC8gMiwgaWNvblNpemUgLyAyXSwgLy8gQ2VudGVyIHRoZSBpY29uXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3B1cEFuY2hvcjogdGhpcy5yYWFpbkRpdkljb25zLnNwZWVkcy5vcHRpb25zLnBvcHVwQW5jaG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb25BbmdsZTogbWFya2VyLmFsdCwgLy8gVXNlIGFsdCBwcm9wZXJ0eSBmb3IgYXppbXV0aC9kaXJlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogdGhpcy5yYWFpbkRpdkljb25zLnNwZWVkcy5vcHRpb25zLmNsYXNzTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHthbGxNYXJrZXJzfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wYXJlIHR3byBkYXRlcyBmb3IgZXF1YWxpdHkgdXNpbmcgdGhlaXIgdGltZXN0YW1wc1xuICAgICAqIEBwYXJhbSBkYXRlMSBGaXJzdCBkYXRlIChEYXRlIG9yIHN0cmluZylcbiAgICAgKiBAcGFyYW0gZGF0ZTIgU2Vjb25kIGRhdGUgKERhdGUgb3Igc3RyaW5nKVxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgZGF0ZXMgYXJlIGVxdWFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBhcmVEYXRlc0VxdWFsKGRhdGUxOiBEYXRlIHwgc3RyaW5nLCBkYXRlMjogRGF0ZSB8IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWRhdGUxIHx8ICFkYXRlMikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcDEgPSB0eXBlb2YgZGF0ZTEgPT09ICdzdHJpbmcnID8gbmV3IERhdGUoZGF0ZTEpLmdldFRpbWUoKSA6IGRhdGUxLmdldFRpbWUoKTtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wMiA9IHR5cGVvZiBkYXRlMiA9PT0gJ3N0cmluZycgPyBuZXcgRGF0ZShkYXRlMikuZ2V0VGltZSgpIDogZGF0ZTIuZ2V0VGltZSgpO1xuICAgICAgICByZXR1cm4gdGltZXN0YW1wMSA9PT0gdGltZXN0YW1wMjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wYXJlIGFuIElTTyBkYXRlIHN0cmluZyB3aXRoIGEgRGF0ZSBvYmplY3QgKGNvbXBhcmluZyBmaXJzdCAxOSBjaGFyYWN0ZXJzKVxuICAgICAqIEBwYXJhbSBkYXRlSVNPIElTTyBkYXRlIHN0cmluZ1xuICAgICAqIEBwYXJhbSBkYXRlIERhdGUgb2JqZWN0XG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiBkYXRlcyBtYXRjaCAodXAgdG8gc2Vjb25kcyBwcmVjaXNpb24pXG4gICAgICovXG4gICAgcHJpdmF0ZSBhcmVEYXRlSVNPRXF1YWwoZGF0ZUlTTzogc3RyaW5nLCBkYXRlOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghZGF0ZUlTTyB8fCAhZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlSVNPLnN1YnN0cmluZygwLCAxOSkgPT09IGRhdGUudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJpbmQgY2xpY2sgZXZlbnQgaGFuZGxlcnMgdG8gbWFya2Vyc1xuICAgICAqIEBwYXJhbSBtYXJrZXJzIEFycmF5IG9mIG1hcmtlciBvYmplY3RzIHRvIGJpbmQgZXZlbnRzIHRvXG4gICAgICovXG4gICAgcHJpdmF0ZSBiaW5kTWFya2Vyc0NsaWNrRXZlbnRzKG1hcmtlcnM6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGlmICghbWFya2Vycykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG1hcmtlcnMuZm9yRWFjaCgobSkgPT4gbS5vbignY2xpY2snLCAoZXZ0KSA9PiB0aGlzLm9uTWFwQ2xpY2soZXZ0KSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJvdW5kIGEgbnVtYmVyIHRvIDMgZGVjaW1hbCBwbGFjZXNcbiAgICAgKiBAcGFyYW0gdmFsdWUgTnVtYmVyIHRvIHJvdW5kXG4gICAgICogQHJldHVybnMgUm91bmRlZCBudW1iZXJcbiAgICAgKi9cbiAgICBwcml2YXRlIHJvdW5kVG8zRGVjaW1hbHModmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogMTAwMCkgLyAxMDAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBsYXllciBkaW1lbnNpb25zIGFuZCBpbnZhbGlkYXRlIG1hcCBzaXplXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVMYXllckRpbWVuc2lvbnMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5tYXBFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNMYXllcj8uc2V0Q3VycmVudFdpZHRoKHRoaXMuY3VycmVudFdpZHRoKTtcbiAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNMYXllcj8uc2V0Q3VycmVudEhlaWdodCh0aGlzLmN1cnJlbnRIZWlnaHQpO1xuICAgICAgICB0aGlzLm1hcEVsZW1lbnQuY29tcG9zaXRlTGF5ZXI/LnNldEN1cnJlbnRXaWR0aCh0aGlzLmN1cnJlbnRXaWR0aCk7XG4gICAgICAgIHRoaXMubWFwRWxlbWVudC5jb21wb3NpdGVMYXllcj8uc2V0Q3VycmVudEhlaWdodCh0aGlzLmN1cnJlbnRIZWlnaHQpO1xuICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldD8uaW52YWxpZGF0ZVNpemUoe2FuaW1hdGU6IHRydWV9KTtcbiAgICB9XG59XG4iLCI8aW9uLWdyaWQ+XG5cbiAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1hbGlnbi1pdGVtcy1jZW50ZXIgaW9uLWp1c3RpZnktY29udGVudC1jZW50ZXJcIiBpZD1cIm1hcC1uYXYtcm93XCI+XG4gICAgICAgIDxpb24taWNvbiAoY2xpY2spPVwicHJldmlvdXMoKVwiICpuZ0lmPVwic2hvd05hdmlnYXRpb25cIiBjbGFzcz1cIm5hdi1pY29uXCIgY29sb3I9XCJtZWRpdW1cIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cImNoZXZyb24tYmFjay1jaXJjbGVcIj48L2lvbi1pY29uPlxuXG4gICAgICAgIDxpb24tbGFiZWwgKm5nSWY9XCJzaG93RGF0ZVJhbmdlXCIgY2xhc3M9XCJwZXJpb2QtYnJhY2tldFwiPls8L2lvbi1sYWJlbD5cblxuICAgICAgICA8aW9uLWxhYmVsICpuZ0lmPVwic2hvd0RhdGVSYW5nZSAmJiB0aW1lZnJhbWVDb250YWluZXJzPy5jb250YWluZXJzPy5sZW5ndGhcIiBjbGFzcz1cImRhdGUtbGFiZWxcIj5cbiAgICAgICAgICAgIHt7IGN1bXVsYXRpdmVEYXRlRnJvbSB8IGRhdGU6J3l5eXktTU0tZGQgSEg6bW0nIH19XG4gICAgICAgIDwvaW9uLWxhYmVsPlxuXG4gICAgICAgIDxpb24tbGFiZWwgKm5nSWY9XCJzaG93RGF0ZVJhbmdlXCI+Jm5ic3A7ICZuYnNwOzwvaW9uLWxhYmVsPlxuXG4gICAgICAgIDxpb24tc2VsZWN0IChpb25EaXNtaXNzKT1cInNob3dUaW1lZnJhbWUoKVwiICpuZ0lmPVwidGltZWZyYW1lQ29udGFpbmVycz8uY29udGFpbmVycz8ubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRlVG9TaG93QXNTdHJpbmdcIiBpbnRlcmZhY2U9XCJwb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQZXJpb2RcIiB2YWx1ZT1cInt7ZGF0ZVRvU2hvd0FzU3RyaW5nfX1cIj5cbiAgICAgICAgICAgIDxpb24tc2VsZWN0LW9wdGlvbiAqbmdGb3I9XCJsZXQgZGF0ZVRvU2VsZWN0IG9mIHBvc3NpYmxlRGF0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3tkYXRlVG9TZWxlY3QudG9JU09TdHJpbmcoKX19XCI+XG4gICAgICAgICAgICAgICAge3sgZGF0ZVRvU2VsZWN0IHwgZGF0ZToneXl5eS1NTS1kZCBISDptbScgfX1cbiAgICAgICAgICAgIDwvaW9uLXNlbGVjdC1vcHRpb24+XG4gICAgICAgIDwvaW9uLXNlbGVjdD5cblxuICAgICAgICA8aW9uLWxhYmVsICpuZ0lmPVwic2hvd0RhdGVSYW5nZVwiIGNsYXNzPVwicGVyaW9kLWJyYWNrZXRcIj5bPC9pb24tbGFiZWw+XG5cbiAgICAgICAgPGlvbi1pY29uIChjbGljayk9XCJuZXh0KClcIiAqbmdJZj1cInNob3dOYXZpZ2F0aW9uXCIgY2xhc3M9XCJuYXYtaWNvblwiIGNvbG9yPVwibWVkaXVtXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJjaGV2cm9uLWZvcndhcmQtY2lyY2xlXCI+PC9pb24taWNvbj5cbiAgICA8L2lvbi1yb3c+XG5cbiAgICA8aW9uLXJvdz5cbiAgICAgICAgPGlvbi1jb2wgc2l6ZS1sZz1cIjEwXCIgc2l6ZS14cz1cIjEyXCI+XG4gICAgICAgICAgICA8ZGl2IFtzdHlsZS5oZWlnaHQucHhdPVwiY3VycmVudEhlaWdodFwiIGlkPVwibWFwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgI3ByaW1hcnlNYXAgaWQ9XCJtYXAtZGl2XCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi1oaWRlLXhsLWRvd25cIiBzaXplLWxnPVwiMlwiPlxuICAgICAgICAgICAgPGRpdiBbc3R5bGUuaGVpZ2h0LnB4XT1cImN1cnJlbnRIZWlnaHRcIiBbc3R5bGUud2lkdGgucHhdPVwiNjBcIj5cbiAgICAgICAgICAgICAgICA8Y2FudmFzICNjYW52YXNTY2FsZT48L2NhbnZhcz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgPC9pb24tcm93PlxuXG4gICAgPGlvbi1yb3cgY2xhc3M9XCJpb24tYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxpb24tY29sIHNpemUteHM9XCIzXCI+XG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlTWFwU2V0dGluZ3MoKVwiIGNvbG9yPVwibWVkaXVtXCIgZmlsbD1cImNsZWFyXCIgaWQ9XCJtYXAtc2V0dGluZ3MtdG9nZ2xlXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJtYXAtb3V0bGluZVwiIHNsb3Q9XCJzdGFydFwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cInNob3dNYXBTZXR0aW5ncyA/ICdjaGV2cm9uLWRvd24nIDogJ2NoZXZyb24tZm9yd2FyZCdcIiBzbG90PVwiZW5kXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi1oaWRlLXNtLWRvd25cIiBzaXplLXNtPVwiN1wiPlxuICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJtY1RleHRcIj48L3NwYW4+XG4gICAgICAgIDwvaW9uLWNvbD5cblxuICAgIDwvaW9uLXJvdz5cblxuICAgIDxpb24tcm93ICpuZ0lmPVwic2hvd01hcFNldHRpbmdzXCIgaWQ9XCJtYXAtc2V0dGluZ3NcIj5cbiAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjEyXCI+XG4gICAgICAgICAgICA8aW9uLWxpc3QgbGluZXM9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1pdGVtPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPk9wYWNpdHk8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1yYW5nZSAoaW9uQ2hhbmdlKT1cImNoYW5nZUFscGhhKClcIiBbKG5nTW9kZWwpXT1cImFscGhhXCIgW21heF09XCIxXCIgW21pbl09XCIwLjJcIiBbc25hcHNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0ZXBdPVwiMC4yXCIgW3RpY2tzXT1cInRydWVcIiBjbGFzcz1cInNldHRpbmdzLXJhbmdlXCIgY29sb3I9XCJtZWRpdW1cIiBzbG90PVwiZW5kXCI+PC9pb24tcmFuZ2U+XG4gICAgICAgICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICAgICAgICA8aW9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWw+R2F1Z2VzPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tdG9nZ2xlIChpb25DaGFuZ2UpPVwiY2hhbmdlU2hvd01hcmtlcnMoKVwiIFsobmdNb2RlbCldPVwic2hvd01hcmtlcnNcIiBbY2hlY2tlZF09XCJzaG93TWFya2Vyc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwibWVkaXVtXCIgc2xvdD1cImVuZFwiPjwvaW9uLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICAgICAgICAgIDxpb24taXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbD5TcGVlZHM8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi10b2dnbGUgKGlvbkNoYW5nZSk9XCJjaGFuZ2VTaG93U3BlZWRNYXJrZXJzKClcIiBbKG5nTW9kZWwpXT1cInNob3dTcGVlZE1hcmtlcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzaG93U3BlZWRNYXJrZXJzXCIgY29sb3I9XCJtZWRpdW1cIiBzbG90PVwiZW5kXCI+PC9pb24tdG9nZ2xlPlxuICAgICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgICAgICA8L2lvbi1saXN0PlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgPC9pb24tcm93PlxuXG48L2lvbi1ncmlkPlxuIl19
|