@worktile/planet 17.0.0-next.3 → 17.1.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/README.md +10 -6
- package/application/planet-application-loader.d.ts +5 -0
- package/application/planet-application-loader.d.ts.map +1 -1
- package/component/planet-component-loader.d.ts.map +1 -1
- package/component/plant-component.config.d.ts +4 -0
- package/component/plant-component.config.d.ts.map +1 -1
- package/esm2022/application/planet-application-loader.mjs +10 -5
- package/esm2022/component/planet-component-loader.mjs +3 -2
- package/esm2022/component/plant-component.config.mjs +1 -1
- package/esm2022/planet.mjs +7 -1
- package/fesm2022/worktile-planet.mjs +17 -5
- package/fesm2022/worktile-planet.mjs.map +1 -1
- package/package.json +1 -1
- package/planet.d.ts +4 -0
- package/planet.d.ts.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,25 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
# [17.1.0-next.0](https://github.com/worktile/ngx-planet/compare/17.0.0...17.1.0-next.0) (2024-04-16)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* add projectableNodes for PlantComponentConfig ([2ca3646](https://github.com/worktile/ngx-planet/commit/2ca364684e552bc39f17645225f17c02f62b51a7))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# [17.0.0](https://github.com/worktile/ngx-planet/compare/17.0.0-next.3...17.0.0) (2024-03-17)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
* support index.html as assets manifest and add entry instead of manifest, scripts, styles and resourcePathPrefix ([#308](https://github.com/worktile/ngx-planet/issues/308)) ([0670411](https://github.com/worktile/ngx-planet/commit/067041162ff7908f6cd950338e197847fa562308))
|
|
19
|
+
* support load standalone app #INFR-11810 ([#305](https://github.com/worktile/ngx-planet/issues/305)) ([9a750ad](https://github.com/worktile/ngx-planet/commit/9a750ad15c4c036640ee44861ca1b8698bec7e3a)), closes [#INFR-11810](https://github.com/worktile/ngx-planet/issues/INFR-11810)
|
|
20
|
+
* upgrade ng to 17 ([#302](https://github.com/worktile/ngx-planet/issues/302)) ([acc1525](https://github.com/worktile/ngx-planet/commit/acc152587860f65551fde5c7b73a056d8b543f47))
|
|
21
|
+
* add loading signal for planet ([5034351](https://github.com/worktile/ngx-planet/commit/5034351dd39502faeac1c7a0d8910b8b0652cbc8))
|
|
22
|
+
|
|
23
|
+
|
|
5
24
|
# [17.0.0-next.3](https://github.com/worktile/ngx-planet/compare/17.0.0-next.2...17.0.0-next.3) (2024-03-15)
|
|
6
25
|
|
|
7
26
|
|
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@ APIs consistent with angular style, currently only supports Angular, other frame
|
|
|
15
15
|
|
|
16
16
|
English | [中文文档](https://github.com/worktile/ngx-planet/blob/master/README.zh-CN.md)
|
|
17
17
|
|
|
18
|
-
## Features
|
|
18
|
+
## ✨ Features
|
|
19
19
|
|
|
20
20
|
- Rendering multiple applications at the same time
|
|
21
21
|
- Support two mode, coexist and default that switch to another app and destroy active apps
|
|
@@ -25,6 +25,14 @@ English | [中文文档](https://github.com/worktile/ngx-planet/blob/master/READ
|
|
|
25
25
|
- Cross application component rendering
|
|
26
26
|
- Comprehensive examples include routing configuration, lazy loading and all features
|
|
27
27
|
|
|
28
|
+
## 📖 Documentation
|
|
29
|
+
- [Introduce](http://planet.ngnice.com/guides/intro)
|
|
30
|
+
- [Getting Started](http://planet.ngnice.com/guides/getting-started)
|
|
31
|
+
- [Development and Build](http://planet.ngnice.com/guides/dev-build)
|
|
32
|
+
- [Data shared and Communication](http://planet.ngnice.com/guides/communication)
|
|
33
|
+
- [Cross Application Component rendering](http://planet.ngnice.com/guides/cross-app-comp-rendering)
|
|
34
|
+
- [API References](http://planet.ngnice.com/guides/api)
|
|
35
|
+
|
|
28
36
|
## Alternatives
|
|
29
37
|
|
|
30
38
|
- [single-spa](https://github.com/CanopyTax/single-spa): A javascript front-end framework supports any frameworks.
|
|
@@ -38,13 +46,9 @@ $ npm i @worktile/planet --save
|
|
|
38
46
|
$ yarn add @worktile/planet
|
|
39
47
|
```
|
|
40
48
|
|
|
41
|
-
## Dependencies
|
|
42
|
-
|
|
43
|
-
- `<= 14.0.0` you should install `@angular/cdk`
|
|
44
|
-
|
|
45
49
|
## Demo
|
|
46
50
|
|
|
47
|
-
[Try out our live demo](http://planet.ngnice.com)
|
|
51
|
+
[Try out our live demo](http://planet-examples.ngnice.com)
|
|
48
52
|
|
|
49
53
|

|
|
50
54
|
|
|
@@ -35,9 +35,14 @@ export declare class PlanetApplicationLoader {
|
|
|
35
35
|
private routeChange$;
|
|
36
36
|
private appStatusChange$;
|
|
37
37
|
private appsLoadingStart$;
|
|
38
|
+
private innerLoading;
|
|
38
39
|
get appStatusChange(): Observable<AppStatusChangeEvent>;
|
|
39
40
|
get appsLoadingStart(): Observable<AppsLoadingStartEvent>;
|
|
41
|
+
/**
|
|
42
|
+
* @deprecated please use loading signal
|
|
43
|
+
*/
|
|
40
44
|
loadingDone: boolean;
|
|
45
|
+
loading: import("@angular/core").Signal<boolean>;
|
|
41
46
|
constructor(assetsLoader: AssetsLoader, planetApplicationService: PlanetApplicationService, ngZone: NgZone, router: Router, injector: Injector, applicationRef: ApplicationRef);
|
|
42
47
|
private setAppStatus;
|
|
43
48
|
private getAppStatusChange$;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planet-application-loader.d.ts","sourceRoot":"","sources":["../../../packages/planet/src/application/planet-application-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,EAAE,cAAc,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"planet-application-loader.d.ts","sourceRoot":"","sources":["../../../packages/planet/src/application/planet-application-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAoB,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAM,UAAU,EAAuC,MAAM,MAAM,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAe,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGnG,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAExE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;;AAKzC,oBAAY,iBAAiB;IACzB,aAAa,IAAI;IACjB,YAAY,IAAI;IAChB,aAAa,IAAI;IACjB,YAAY,IAAI;IAChB,MAAM,IAAI;IACV,SAAS,KAAK;CACjB;AAED,MAAM,WAAW,qBAAqB;IAClC,cAAc,EAAE,iBAAiB,EAAE,CAAC;IACpC,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,oBAAoB;IACjC,GAAG,EAAE,iBAAiB,CAAC;IACvB,MAAM,EAAE,iBAAiB,CAAC;CAC7B;AAED,qBAGa,uBAAuB;IAqC5B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,wBAAwB;IAChC,OAAO,CAAC,MAAM;IAtClB,OAAO,CAAC,SAAS,CAAQ;IAEzB,OAAO,CAAC,qBAAqB,CAAqB;IAElD,OAAO,CAAC,OAAO,CAAgB;IAE/B,OAAO,CAAC,wBAAwB,CAAoD;IAEpF,OAAO,CAAC,UAAU,CAAmD;IAErE,OAAO,CAAC,SAAS,CAAiC;IAElD,OAAO,CAAC,YAAY,CAAoC;IAExD,OAAO,CAAC,gBAAgB,CAAuC;IAE/D,OAAO,CAAC,iBAAiB,CAAwC;IAEjE,OAAO,CAAC,YAAY,CAAiB;IAErC,IAAW,eAAe,IAAI,UAAU,CAAC,oBAAoB,CAAC,CAE7D;IAED,IAAW,gBAAgB,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAE/D;IAED;;OAEG;IACI,WAAW,UAAS;IAEpB,OAAO,0CAAkC;gBAGpC,YAAY,EAAE,YAAY,EAC1B,wBAAwB,EAAE,wBAAwB,EAClD,MAAM,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,cAAc;IAqBlC,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,gBAAgB;IA8IxB,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,YAAY;IAiDpB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,UAAU;IAoClB,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,iBAAiB;IASlB,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC;IAOjD;;OAEG;IACI,OAAO,CAAC,KAAK,EAAE,iBAAiB;IAIvC,OAAO,CAAC,eAAe;IAwCvB;;;;OAIG;IACI,OAAO,CAAC,GAAG,EAAE,iBAAiB,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC,oBAAoB,CAAC;yCA7epF,uBAAuB;6CAAvB,uBAAuB;CAgfnC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planet-component-loader.d.ts","sourceRoot":"","sources":["../../../packages/planet/src/component/planet-component-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,cAAc,EACd,WAAW,EACX,MAAM,EAKN,IAAI,EAKP,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE,OAAO,EAAM,UAAU,EAAS,MAAM,MAAM,CAAC;;AAgB7C,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,OAAO,IACjC;IACI,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;CACtB,GACD,IAAI,CAAC,CAAC,CAAC,CAAC;AAEd,qBAGa,qBAAqB;IAU1B,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,MAAM;IACI,OAAO,CAAC,QAAQ;IAZtC,OAAO,KAAK,iBAAiB,GAE5B;IAED,OAAO,KAAK,kBAAkB,GAE7B;gBAGW,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,EAC7B,MAAM,EAAE,MAAM,EACI,QAAQ,EAAE,GAAG;IAG3C,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,kCAAkC;IAkB1C,OAAO,CAAC,eAAe;
|
|
1
|
+
{"version":3,"file":"planet-component-loader.d.ts","sourceRoot":"","sources":["../../../packages/planet/src/component/planet-component-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,cAAc,EACd,WAAW,EACX,MAAM,EAKN,IAAI,EAKP,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE,OAAO,EAAM,UAAU,EAAS,MAAM,MAAM,CAAC;;AAgB7C,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,OAAO,IACjC;IACI,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;CACtB,GACD,IAAI,CAAC,CAAC,CAAC,CAAC;AAEd,qBAGa,qBAAqB;IAU1B,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,MAAM;IACI,OAAO,CAAC,QAAQ;IAZtC,OAAO,KAAK,iBAAiB,GAE5B;IAED,OAAO,KAAK,kBAAkB,GAE7B;gBAGW,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,EAC7B,MAAM,EAAE,MAAM,EACI,QAAQ,EAAE,GAAG;IAG3C,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,kCAAkC;IAkB1C,OAAO,CAAC,eAAe;IAiCvB,+DAA+D;IAC/D,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,wBAAwB;IA0BhC,QAAQ,CAAC,UAAU,EAAE,eAAe,GAAG,eAAe,EAAE;IAMxD,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO,EACjC,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,oBAAoB,CAAC,KAAK,CAAC,GACpC,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;yCAlJ/B,qBAAqB;6CAArB,qBAAqB;CAyKjC"}
|
|
@@ -13,5 +13,9 @@ export declare class PlantComponentConfig<TData = any> {
|
|
|
13
13
|
hostClass?: string;
|
|
14
14
|
/** Data being injected into the child component. */
|
|
15
15
|
initialState?: TData | null;
|
|
16
|
+
/**
|
|
17
|
+
* Projectable nodes
|
|
18
|
+
*/
|
|
19
|
+
projectableNodes?: Node[][];
|
|
16
20
|
}
|
|
17
21
|
//# sourceMappingURL=plant-component.config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plant-component.config.d.ts","sourceRoot":"","sources":["../../../packages/planet/src/component/plant-component.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,UAAU,EAAE,MAAM,eAAe,CAAC;AAE7D,qBAAa,oBAAoB,CAAC,KAAK,GAAG,GAAG;IACzC,4BAA4B;IAC5B,SAAS,EAAE,WAAW,GAAG,UAAU,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC;IACjE;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,YAAY,CAAC,EAAE,KAAK,GAAG,IAAI,CAAQ;
|
|
1
|
+
{"version":3,"file":"plant-component.config.d.ts","sourceRoot":"","sources":["../../../packages/planet/src/component/plant-component.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,UAAU,EAAE,MAAM,eAAe,CAAC;AAE7D,qBAAa,oBAAoB,CAAC,KAAK,GAAG,GAAG;IACzC,4BAA4B;IAC5B,SAAS,EAAE,WAAW,GAAG,UAAU,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC;IACjE;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,YAAY,CAAC,EAAE,KAAK,GAAG,IAAI,CAAQ;IACnC;;OAEG;IACH,gBAAgB,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;CAC/B"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Injectable, NgZone, ApplicationRef, Injector } from '@angular/core';
|
|
1
|
+
import { Injectable, NgZone, ApplicationRef, Injector, signal } from '@angular/core';
|
|
2
2
|
import { of, Subject, forkJoin, from } from 'rxjs';
|
|
3
3
|
import { AssetsLoader } from '../assets-loader';
|
|
4
4
|
import { SwitchModes } from '../planet.class';
|
|
@@ -42,7 +42,12 @@ export class PlanetApplicationLoader {
|
|
|
42
42
|
this.routeChange$ = new Subject();
|
|
43
43
|
this.appStatusChange$ = new Subject();
|
|
44
44
|
this.appsLoadingStart$ = new Subject();
|
|
45
|
+
this.innerLoading = signal(false);
|
|
46
|
+
/**
|
|
47
|
+
* @deprecated please use loading signal
|
|
48
|
+
*/
|
|
45
49
|
this.loadingDone = false;
|
|
50
|
+
this.loading = this.innerLoading.asReadonly();
|
|
46
51
|
if (getApplicationLoader()) {
|
|
47
52
|
throw new Error('PlanetApplicationLoader has been injected in the portal, repeated injection is not allowed');
|
|
48
53
|
}
|
|
@@ -94,6 +99,7 @@ export class PlanetApplicationLoader {
|
|
|
94
99
|
setLoadingDone() {
|
|
95
100
|
this.ngZone.run(() => {
|
|
96
101
|
this.loadingDone = true;
|
|
102
|
+
this.innerLoading.set(false);
|
|
97
103
|
});
|
|
98
104
|
}
|
|
99
105
|
getAppNames(apps) {
|
|
@@ -148,6 +154,7 @@ export class PlanetApplicationLoader {
|
|
|
148
154
|
});
|
|
149
155
|
if (hasAppsNeedLoadingAssets) {
|
|
150
156
|
this.loadingDone = false;
|
|
157
|
+
this.innerLoading.set(true);
|
|
151
158
|
}
|
|
152
159
|
return loadApps$.length > 0 ? forkJoin(loadApps$) : of([]);
|
|
153
160
|
}),
|
|
@@ -178,9 +185,7 @@ export class PlanetApplicationLoader {
|
|
|
178
185
|
debug(`[routeChange] app(${app.name}) is active, do nothings`);
|
|
179
186
|
const appRef = getPlanetApplicationRef(app.name);
|
|
180
187
|
// Backwards compatibility sub app use old version which has not getCurrentRouterStateUrl
|
|
181
|
-
const currentUrl = appRef?.getCurrentRouterStateUrl
|
|
182
|
-
? appRef.getCurrentRouterStateUrl()
|
|
183
|
-
: '';
|
|
188
|
+
const currentUrl = appRef?.getCurrentRouterStateUrl ? appRef.getCurrentRouterStateUrl() : '';
|
|
184
189
|
if (currentUrl !== event.url) {
|
|
185
190
|
appRef?.navigateByUrl(event.url);
|
|
186
191
|
}
|
|
@@ -451,4 +456,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
451
456
|
providedIn: 'root'
|
|
452
457
|
}]
|
|
453
458
|
}], ctorParameters: () => [{ type: i1.AssetsLoader }, { type: i2.PlanetApplicationService }, { type: i0.NgZone }, { type: i3.Router }, { type: i0.Injector }, { type: i0.ApplicationRef }] });
|
|
454
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbmV0LWFwcGxpY2F0aW9uLWxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYW5ldC9zcmMvYXBwbGljYXRpb24vcGxhbmV0LWFwcGxpY2F0aW9uLWxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxFQUFFLEVBQWMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBd0MsV0FBVyxFQUFpQixNQUFNLGlCQUFpQixDQUFDO0FBQ25HLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RyxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVsRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7O0FBQ3ZDLE1BQU0sS0FBSyxHQUFHLFdBQVcs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QUM7WUFDQyxLQUFLLENBQUMsZUFBZSxHQUFHLENBQUMsSUFBSSxnQkFBZ0IsaUJBQWlCLENBQUMsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7WUFDckcsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUNyQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDTCxPQUFPLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QyxDQUFDLENBQUMsQ0FDTCxDQUFDO1FBQ04sQ0FBQzthQUFNLENBQUM7WUFDSixNQUFNLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxnQkFBZ0IsaUJBQWlCLENBQUMsTUFBTSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7WUFDM0csQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RCLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE9BQU8sQ0FBQyxHQUFzQixFQUFFLFNBQW1CO1FBQ3RELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDaEQsQ0FBQzs4R0E5ZlEsdUJBQXVCO2tIQUF2Qix1QkFBdUIsY0FGcEIsTUFBTTs7MkZBRVQsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSwgQXBwbGljYXRpb25SZWYsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvZiwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgZm9ya0pvaW4sIGZyb20sIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFzc2V0c0xvYWRlciB9IGZyb20gJy4uL2Fzc2V0cy1sb2FkZXInO1xuaW1wb3J0IHsgUGxhbmV0QXBwbGljYXRpb24sIFBsYW5ldFJvdXRlckV2ZW50LCBTd2l0Y2hNb2RlcywgUGxhbmV0T3B0aW9ucyB9IGZyb20gJy4uL3BsYW5ldC5jbGFzcyc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHNoYXJlLCBtYXAsIHRhcCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2UsIGZpbHRlciwgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGdldEhUTUxFbGVtZW50LCBjb2VyY2VBcnJheSwgY3JlYXRlRWxlbWVudEJ5VGVtcGxhdGUgfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCB7IFBsYW5ldEFwcGxpY2F0aW9uUmVmIH0gZnJvbSAnLi9wbGFuZXQtYXBwbGljYXRpb24tcmVmJztcbmltcG9ydCB7IFBsYW5ldFBvcnRhbEFwcGxpY2F0aW9uIH0gZnJvbSAnLi9wb3J0YWwtYXBwbGljYXRpb24nO1xuaW1wb3J0IHsgUGxhbmV0QXBwbGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9wbGFuZXQtYXBwbGljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBHbG9iYWxFdmVudERpc3BhdGNoZXIgfSBmcm9tICcuLi9nbG9iYWwtZXZlbnQtZGlzcGF0Y2hlcic7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZ2xvYmFsUGxhbmV0LCBnZXRQbGFuZXRBcHBsaWNhdGlvblJlZiwgZ2V0QXBwbGljYXRpb25Mb2FkZXIgfSBmcm9tICcuLi9nbG9iYWwtcGxhbmV0JztcbmltcG9ydCB7IGNyZWF0ZURlYnVnIH0gZnJvbSAnLi4vZGVidWcnO1xuY29uc3QgZGVidWcgPSBjcmVhdGVEZWJ1ZygnYXBwLWxvYWRlcicpO1xuXG5leHBvcnQgZW51bSBBcHBsaWNhdGlvblN0YXR1cyB7XG4gICAgYXNzZXRzTG9hZGluZyA9IDEsXG4gICAgYXNzZXRzTG9hZGVkID0gMixcbiAgICBib290c3RyYXBwaW5nID0gMyxcbiAgICBib290c3RyYXBwZWQgPSA0LFxuICAgIGFjdGl2ZSA9IDUsXG4gICAgbG9hZEVycm9yID0gMTBcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBzTG9hZGluZ1N0YXJ0RXZlbnQge1xuICAgIHNob3VsZExvYWRBcHBzOiBQbGFuZXRBcHBsaWNhdGlvbltdO1xuICAgIHNob3VsZFVubG9hZEFwcHM6IFBsYW5ldEFwcGxpY2F0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwU3RhdHVzQ2hhbmdlRXZlbnQge1xuICAgIGFwcDogUGxhbmV0QXBwbGljYXRpb247XG4gICAgc3RhdHVzOiBBcHBsaWNhdGlvblN0YXR1cztcbn1cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQbGFuZXRBcHBsaWNhdGlvbkxvYWRlciB7XG4gICAgcHJpdmF0ZSBmaXJzdExvYWQgPSB0cnVlO1xuXG4gICAgcHJpdmF0ZSBzdGFydFJvdXRlQ2hhbmdlRXZlbnQhOiBQbGFuZXRSb3V0ZXJFdmVudDtcblxuICAgIHByaXZhdGUgb3B0aW9uczogUGxhbmV0T3B0aW9ucztcblxuICAgIHByaXZhdGUgaW5Qcm9ncmVzc0FwcEFzc2V0c0xvYWRzID0gbmV3IE1hcDxzdHJpbmcsIE9ic2VydmFibGU8UGxhbmV0QXBwbGljYXRpb24+PigpO1xuXG4gICAgcHJpdmF0ZSBhcHBzU3RhdHVzID0gbmV3IE1hcDxQbGFuZXRBcHBsaWNhdGlvbiwgQXBwbGljYXRpb25TdGF0dXM+KCk7XG5cbiAgICBwcml2YXRlIHBvcnRhbEFwcCA9IG5ldyBQbGFuZXRQb3J0YWxBcHBsaWNhdGlvbigpO1xuXG4gICAgcHJpdmF0ZSByb3V0ZUNoYW5nZSQgPSBuZXcgU3ViamVjdDxQbGFuZXRSb3V0ZXJFdmVudD4oKTtcblxuICAgIHByaXZhdGUgYXBwU3RhdHVzQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PEFwcFN0YXR1c0NoYW5nZUV2ZW50PigpO1xuXG4gICAgcHJpdmF0ZSBhcHBzTG9hZGluZ1N0YXJ0JCA9IG5ldyBTdWJqZWN0PEFwcHNMb2FkaW5nU3RhcnRFdmVudD4oKTtcblxuICAgIHB1YmxpYyBnZXQgYXBwU3RhdHVzQ2hhbmdlKCk6IE9ic2VydmFibGU8QXBwU3RhdHVzQ2hhbmdlRXZlbnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdHVzQ2hhbmdlJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFwcHNMb2FkaW5nU3RhcnQoKTogT2JzZXJ2YWJsZTxBcHBzTG9hZGluZ1N0YXJ0RXZlbnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwc0xvYWRpbmdTdGFydCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGxvYWRpbmdEb25lID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBhc3NldHNMb2FkZXI6IEFzc2V0c0xvYWRlcixcbiAgICAgICAgcHJpdmF0ZSBwbGFuZXRBcHBsaWNhdGlvblNlcnZpY2U6IFBsYW5ldEFwcGxpY2F0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmXG4gICAgKSB7XG4gICAgICAgIGlmIChnZXRBcHBsaWNhdGlvbkxvYWRlcigpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ1BsYW5ldEFwcGxpY2F0aW9uTG9hZGVyIGhhcyBiZWVuIGluamVjdGVkIGluIHRoZSBwb3J0YWwsIHJlcGVhdGVkIGluamVjdGlvbiBpcyBub3QgYWxsb3dlZCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICBzd2l0Y2hNb2RlOiBTd2l0Y2hNb2Rlcy5kZWZhdWx0LFxuICAgICAgICAgICAgZXJyb3JIYW5kbGVyOiAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucG9ydGFsQXBwLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgdGhpcy5wb3J0YWxBcHAuYXBwbGljYXRpb25SZWYgPSBhcHBsaWNhdGlvblJlZjtcbiAgICAgICAgdGhpcy5wb3J0YWxBcHAucm91dGVyID0gcm91dGVyO1xuICAgICAgICB0aGlzLnBvcnRhbEFwcC5pbmplY3RvciA9IGluamVjdG9yO1xuICAgICAgICB0aGlzLnBvcnRhbEFwcC5nbG9iYWxFdmVudERpc3BhdGNoZXIgPSBpbmplY3Rvci5nZXQoR2xvYmFsRXZlbnREaXNwYXRjaGVyKTtcbiAgICAgICAgZ2xvYmFsUGxhbmV0LnBvcnRhbEFwcGxpY2F0aW9uID0gdGhpcy5wb3J0YWxBcHA7XG4gICAgICAgIHRoaXMuc2V0dXBSb3V0ZUNoYW5nZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0QXBwU3RhdHVzKGFwcDogUGxhbmV0QXBwbGljYXRpb24sIHN0YXR1czogQXBwbGljYXRpb25TdGF0dXMpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZyb21TdGF0dXMgPSB0aGlzLmFwcHNTdGF0dXMuZ2V0KGFwcCk7XG4gICAgICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAgICAgICBgYXBwKCR7YXBwLm5hbWV9KSBzdGF0dXMgY2hhbmdlOiAke2Zyb21TdGF0dXMgPyBBcHBsaWNhdGlvblN0YXR1c1tmcm9tU3RhdHVzXSA6ICdlbXB0eSd9ID0+ICR7XG4gICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uU3RhdHVzW3N0YXR1c11cbiAgICAgICAgICAgICAgICB9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuYXBwc1N0YXR1cy5zZXQoYXBwLCBzdGF0dXMpO1xuICAgICAgICAgICAgdGhpcy5hcHBTdGF0dXNDaGFuZ2UkLm5leHQoe1xuICAgICAgICAgICAgICAgIGFwcDogYXBwLFxuICAgICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBcHBTdGF0dXNDaGFuZ2UkKFxuICAgICAgICBhcHA6IFBsYW5ldEFwcGxpY2F0aW9uLFxuICAgICAgICBzdGF0dXMgPSBBcHBsaWNhdGlvblN0YXR1cy5ib290c3RyYXBwZWRcbiAgICApOiBPYnNlcnZhYmxlPFBsYW5ldEFwcGxpY2F0aW9uPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcFN0YXR1c0NoYW5nZS5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQuYXBwID09PSBhcHAgJiYgZXZlbnQuc3RhdHVzID09PSBzdGF0dXM7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwcDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzd2l0Y2hNb2RlSXNDb2V4aXN0KGFwcDogUGxhbmV0QXBwbGljYXRpb24pIHtcbiAgICAgICAgaWYgKGFwcCAmJiBhcHAuc3dpdGNoTW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFwcC5zd2l0Y2hNb2RlID09PSBTd2l0Y2hNb2Rlcy5jb2V4aXN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zd2l0Y2hNb2RlID09PSBTd2l0Y2hNb2Rlcy5jb2V4aXN0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlcnJvckhhbmRsZXIoZXJyb3I6IEVycm9yKSB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZXJyb3JIYW5kbGVyKGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRMb2FkaW5nRG9uZSgpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ0RvbmUgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFwcE5hbWVzKGFwcHM6IFBsYW5ldEFwcGxpY2F0aW9uW10pOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBhcHBzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgPyBgW11gXG4gICAgICAgICAgICA6IGFwcHMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubmFtZTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cFJvdXRlQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLnJvdXRlQ2hhbmdlJFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHgsIHkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh4ICYmIHgudXJsKSA9PT0gKHkgJiYgeS51cmwpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIC8vIFVzaW5nIHN3aXRjaE1hcCBzbyB3ZSBjYW5jZWwgZXhlY3V0aW5nIGxvYWRpbmcgd2hlbiBhIG5ldyBvbmUgY29tZXMgaW5cbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gbmV3IG9ic2VydmFibGUgdXNlIG9mIGFuZCBjYXRjaEVycm9yLFxuICAgICAgICAgICAgICAgICAgICAvLyBpbiBvcmRlciB0byBwcmV2ZW50IHJvdXRlQ2hhbmdlJCBjb21wbGV0ZWQgd2hpY2ggbmV2ZXIgdHJpZ2dlciBuZXcgcm91dGUgY2hhbmdlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihldmVudCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVubG9hZCBhcHBzIGFuZCByZXR1cm4gc2hvdWxkIGxvYWQgYXBwc1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zyhgcm91dGUgY2hhbmdlLCB1cmwgaXM6ICR7ZXZlbnQudXJsfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRSb3V0ZUNoYW5nZUV2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkTG9hZEFwcHMgPSB0aGlzLnBsYW5ldEFwcGxpY2F0aW9uU2VydmljZS5nZXRBcHBzQnlNYXRjaGVkVXJsKGV2ZW50LnVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoYHNob3VsZCBsb2FkIGFwcHM6ICR7dGhpcy5nZXRBcHBOYW1lcyhzaG91bGRMb2FkQXBwcyl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkVW5sb2FkQXBwcyA9IHRoaXMuZ2V0VW5sb2FkQXBwcyhzaG91bGRMb2FkQXBwcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBzTG9hZGluZ1N0YXJ0JC5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkTG9hZEFwcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZFVubG9hZEFwcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVubG9hZEFwcHMoc2hvdWxkVW5sb2FkQXBwcywgZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKGB1bmxvYWQgYXBwczogJHt0aGlzLmdldEFwcE5hbWVzKHNob3VsZFVubG9hZEFwcHMpfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaG91bGRMb2FkQXBwcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9hZCBhcHAgYXNzZXRzIChzdGF0aWMgcmVzb3VyY2VzKVxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKHNob3VsZExvYWRBcHBzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGFzQXBwc05lZWRMb2FkaW5nQXNzZXRzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9hZEFwcHMkID0gc2hvdWxkTG9hZEFwcHMubWFwKGFwcCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcFN0YXR1cyA9IHRoaXMuYXBwc1N0YXR1cy5nZXQoYXBwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWFwcFN0YXR1cyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwU3RhdHVzID09PSBBcHBsaWNhdGlvblN0YXR1cy5hc3NldHNMb2FkaW5nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBTdGF0dXMgPT09IEFwcGxpY2F0aW9uU3RhdHVzLmxvYWRFcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBhcHAoJHthcHAubmFtZX0pIHN0YXR1cyBpcyAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvblN0YXR1c1thcHBTdGF0dXMgYXMgQXBwbGljYXRpb25TdGF0dXNdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgc3RhcnQgbG9hZCBhc3NldHNgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQXBwc05lZWRMb2FkaW5nQXNzZXRzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRMb2FkQXBwQXNzZXRzKGFwcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihhcHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0FwcHNOZWVkTG9hZGluZ0Fzc2V0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdEb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2FkQXBwcyQubGVuZ3RoID4gMCA/IGZvcmtKb2luKGxvYWRBcHBzJCkgOiBvZihbXSBhcyBQbGFuZXRBcHBsaWNhdGlvbltdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQm9vdHN0cmFwIG9yIHNob3cgYXBwc1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKGFwcHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcHMkOiBPYnNlcnZhYmxlPFBsYW5ldEFwcGxpY2F0aW9uPltdID0gYXBwcy5tYXAoYXBwID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGFwcCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcChhcHAgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcFN0YXR1cyA9IHRoaXMuYXBwc1N0YXR1cy5nZXQoYXBwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXBwU3RhdHVzID09PSBBcHBsaWNhdGlvblN0YXR1cy5ib290c3RyYXBwZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgW3JvdXRlQ2hhbmdlXSBhcHAoJHthcHAubmFtZX0pIHN0YXR1cyBpcyBib290c3RyYXBwZWQsIHNob3cgYXBwIGFuZCBhY3RpdmVgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0FwcChhcHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHBSZWYgPSBnZXRQbGFuZXRBcHBsaWNhdGlvblJlZihhcHAubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcFJlZj8ubmF2aWdhdGVCeVVybChldmVudC51cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFwcFN0YXR1cyhhcHAsIEFwcGxpY2F0aW9uU3RhdHVzLmFjdGl2ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZ0RvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGFwcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcHBTdGF0dXMgPT09IEFwcGxpY2F0aW9uU3RhdHVzLmFzc2V0c0xvYWRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBbcm91dGVDaGFuZ2VdIGFwcCgke2FwcC5uYW1lfSkgc3RhdHVzIGlzIGFzc2V0c0xvYWRlZCwgc3RhcnQgYm9vdHN0cmFwcGluZ2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYm9vdHN0cmFwQXBwKGFwcCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoYGFwcCgke2FwcC5uYW1lfSkgYm9vdHN0cmFwcGVkIHN1Y2Nlc3MsIGFjdGl2ZSBpdGApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QXBwU3RhdHVzKGFwcCwgQXBwbGljYXRpb25TdGF0dXMuYWN0aXZlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExvYWRpbmdEb25lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcHBTdGF0dXMgPT09IEFwcGxpY2F0aW9uU3RhdHVzLmFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhgW3JvdXRlQ2hhbmdlXSBhcHAoJHthcHAubmFtZX0pIGlzIGFjdGl2ZSwgZG8gbm90aGluZ3NgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwUmVmID0gZ2V0UGxhbmV0QXBwbGljYXRpb25SZWYoYXBwLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBzdWIgYXBwIHVzZSBvbGQgdmVyc2lvbiB3aGljaCBoYXMgbm90IGdldEN1cnJlbnRSb3V0ZXJTdGF0ZVVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VXJsID0gYXBwUmVmPy5nZXRDdXJyZW50Um91dGVyU3RhdGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYXBwUmVmLmdldEN1cnJlbnRSb3V0ZXJTdGF0ZVVybCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFVybCAhPT0gZXZlbnQudXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBSZWY/Lm5hdmlnYXRlQnlVcmwoZXZlbnQudXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoYXBwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBbcm91dGVDaGFuZ2VdIGFwcCgke2FwcC5uYW1lfSkgc3RhdHVzIGlzICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25TdGF0dXNbYXBwU3RhdHVzIGFzIEFwcGxpY2F0aW9uU3RhdHVzXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwU3RhdHVzQ2hhbmdlJChhcHApLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGFwcCgke2FwcC5uYW1lfSkgc3RhdHVzIGlzIGJvb3RzdHJhcHBlZCBieSBzdWJzY3JpYmUgc3RhdHVzIGNoYW5nZSwgYWN0aXZlIGl0YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBcHBTdGF0dXMoYXBwLCBBcHBsaWNhdGlvblN0YXR1cy5hY3RpdmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0FwcChhcHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXBwcyQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zyhgc3RhcnQgbG9hZCBhbmQgYWN0aXZlIGFwcHM6ICR7dGhpcy5nZXRBcHBOYW1lcyhhcHBzKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YiH5o2i5Yiw5bqU55So5ZCO5Lya5pyJ6Zeq54OB546w6LGh77yM5omA5Lul5L2/55SoIHNldFRpbWVvdXQg5ZCO5ZCv5Yqo5bqU55SoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4YW1wbGU6IHJlZGlyZWN0IHRvIGFwcDEncyBkYXNoYm9hcmQgZnJvbSBwb3J0YWwncyBhYm91dCBwYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGFwcCdzIHJvdXRlIGhhcyByZWRpcmVjdCwgaXQgZG9lc24ndCB3b3JrLCBpdCBvayBqdXN0IGluIHNldFRpbWVvdXQsIEkgZG9uJ3Qga25vdyB3aHkuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86OiByZW1vdmUgaXQsIGl0IGlzIG9rIGluIHZlcnNpb24gQW5ndWxhciA5LnhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDmraTlpITliKTmlq3mmK/lm6DkuLrlpoLmnpzpnZnmgIHotYTmupDliqDovb3lrozmr5Xov5jmnKrlkK/liqjooqvlj5bmtojvvIzov5jmmK/kvJrlkK/liqjkuYvliY3nmoTlupTnlKjvvIzomb3nhLblj6/og73mgKfmr5TovoPlsI/vvIzkvYbmmK/ml6Dms5XmjpLpmaTov5nnp43lj6/og73mgKfvvIzmiYDku6Xlj6rmnInlvZMgRXZlbnQg5piv5pyA5ZCO5LiA5Liq5omN5Lya5ZCv5YqoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGFydFJvdXRlQ2hhbmdlRXZlbnQgPT09IGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcnVuT3V0c2lkZUFuZ3VsYXIgZm9yIGZpeCBlcnJvcjogYEV4cGVjdGVkIHRvIG5vdCBiZSBpbiBBbmd1bGFyIFpvbmUsIGJ1dCBpdCBpcyFgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JrSm9pbihhcHBzJCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZ0RvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5zdXJlUHJlbG9hZEFwcHMoYXBwcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zyhgbm8gYXBwcyBuZWVkIHRvIGJlIGxvYWRlZCwgZW5zdXJlIHByZWxvYWQgYXBwc2ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuc3VyZVByZWxvYWRBcHBzKGFwcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExvYWRpbmdEb25lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBFcnJvciBoYW5kbGVyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhgYXBwcyBsb2FkZXIgZXJyb3I6ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0TG9hZEFwcEFzc2V0cyhhcHA6IFBsYW5ldEFwcGxpY2F0aW9uKTogT2JzZXJ2YWJsZTxQbGFuZXRBcHBsaWNhdGlvbj4ge1xuICAgICAgICBpZiAodGhpcy5pblByb2dyZXNzQXBwQXNzZXRzTG9hZHMuZ2V0KGFwcC5uYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5Qcm9ncmVzc0FwcEFzc2V0c0xvYWRzLmdldChhcHAubmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBsb2FkQXBwJCA9IHRoaXMuYXNzZXRzTG9hZGVyLmxvYWRBcHBBc3NldHMoYXBwKS5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5Qcm9ncmVzc0FwcEFzc2V0c0xvYWRzLmRlbGV0ZShhcHAubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QXBwU3RhdHVzKGFwcCwgQXBwbGljYXRpb25TdGF0dXMuYXNzZXRzTG9hZGVkKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBwO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluUHJvZ3Jlc3NBcHBBc3NldHNMb2Fkcy5kZWxldGUoYXBwLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFwcFN0YXR1cyhhcHAsIEFwcGxpY2F0aW9uU3RhdHVzLmxvYWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHNoYXJlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmluUHJvZ3Jlc3NBcHBBc3NldHNMb2Fkcy5zZXQoYXBwLm5hbWUsIGxvYWRBcHAkKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QXBwU3RhdHVzKGFwcCwgQXBwbGljYXRpb25TdGF0dXMuYXNzZXRzTG9hZGluZyk7XG4gICAgICAgICAgICByZXR1cm4gbG9hZEFwcCQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZGVBcHAocGxhbmV0QXBwOiBQbGFuZXRBcHBsaWNhdGlvbikge1xuICAgICAgICBjb25zdCBhcHBSZWYgPSBnZXRQbGFuZXRBcHBsaWNhdGlvblJlZihwbGFuZXRBcHAubmFtZSk7XG4gICAgICAgIGNvbnN0IGFwcFJvb3RFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihhcHBSZWY/LnNlbGVjdG9yIHx8IChwbGFuZXRBcHAuc2VsZWN0b3IgYXMgc3RyaW5nKSk7XG4gICAgICAgIGlmIChhcHBSb290RWxlbWVudCkge1xuICAgICAgICAgICAgYXBwUm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCdzdHlsZScsICdkaXNwbGF5Om5vbmU7Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dBcHAocGxhbmV0QXBwOiBQbGFuZXRBcHBsaWNhdGlvbikge1xuICAgICAgICBjb25zdCBhcHBSZWYgPSBnZXRQbGFuZXRBcHBsaWNhdGlvblJlZihwbGFuZXRBcHAubmFtZSk7XG4gICAgICAgIGNvbnN0IGFwcFJvb3RFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihhcHBSZWY/LnNlbGVjdG9yIHx8IChwbGFuZXRBcHAuc2VsZWN0b3IgYXMgc3RyaW5nKSk7XG4gICAgICAgIGlmIChhcHBSb290RWxlbWVudCkge1xuICAgICAgICAgICAgYXBwUm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCdzdHlsZScsICcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveUFwcChwbGFuZXRBcHA6IFBsYW5ldEFwcGxpY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFwcFJlZiA9IGdldFBsYW5ldEFwcGxpY2F0aW9uUmVmKHBsYW5ldEFwcC5uYW1lKTtcbiAgICAgICAgaWYgKGFwcFJlZikge1xuICAgICAgICAgICAgYXBwUmVmLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250YWluZXIgPSBnZXRIVE1MRWxlbWVudChwbGFuZXRBcHAuaG9zdFBhcmVudCk7XG4gICAgICAgIGNvbnN0IGFwcFJvb3RFbGVtZW50ID0gY29udGFpbmVyPy5xdWVyeVNlbGVjdG9yKChhcHBSZWYgJiYgYXBwUmVmLnNlbGVjdG9yKSB8fCAocGxhbmV0QXBwLnNlbGVjdG9yIGFzIHN0cmluZykpO1xuICAgICAgICBpZiAoYXBwUm9vdEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lcj8ucmVtb3ZlQ2hpbGQoYXBwUm9vdEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBib290c3RyYXBBcHAoXG4gICAgICAgIGFwcDogUGxhbmV0QXBwbGljYXRpb24sXG4gICAgICAgIGRlZmF1bHRTdGF0dXM6ICdoaWRkZW4nIHwgJ2Rpc3BsYXknID0gJ2Rpc3BsYXknXG4gICAgKTogT2JzZXJ2YWJsZTxQbGFuZXRBcHBsaWNhdGlvblJlZj4ge1xuICAgICAgICBkZWJ1ZyhgYXBwKCR7YXBwLm5hbWV9KSBzdGFydCBib290c3RyYXBwaW5nYCk7XG4gICAgICAgIHRoaXMuc2V0QXBwU3RhdHVzKGFwcCwgQXBwbGljYXRpb25TdGF0dXMuYm9vdHN0cmFwcGluZyk7XG4gICAgICAgIGNvbnN0IGFwcFJlZiA9IGdldFBsYW5ldEFwcGxpY2F0aW9uUmVmKGFwcC5uYW1lKTtcbiAgICAgICAgaWYgKGFwcFJlZiAmJiBhcHBSZWYuYm9vdHN0cmFwKSB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBnZXRIVE1MRWxlbWVudChhcHAuaG9zdFBhcmVudCk7XG4gICAgICAgICAgICBsZXQgYXBwUm9vdEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIGFwcFJvb3RFbGVtZW50ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYXBwUmVmLnNlbGVjdG9yIHx8IGFwcC5zZWxlY3RvciEpITtcbiAgICAgICAgICAgICAgICBpZiAoIWFwcFJvb3RFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcHBSZWYudGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcFJvb3RFbGVtZW50ID0gY3JlYXRlRWxlbWVudEJ5VGVtcGxhdGUoYXBwUmVmLnRlbXBsYXRlKSE7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBSb290RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYXBwLnNlbGVjdG9yISk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXBwUm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCdzdHlsZScsICdkaXNwbGF5Om5vbmU7Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcHAuaG9zdENsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBSb290RWxlbWVudC5jbGFzc0xpc3QuYWRkKC4uLmNvZXJjZUFycmF5KGFwcC5ob3N0Q2xhc3MpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoYXBwLnN0eWxlUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBSb290RWxlbWVudC5jbGFzc0xpc3QuYWRkKC4uLmNvZXJjZUFycmF5KGFwcC5zdHlsZVByZWZpeCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChhcHBSb290RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGFwcFJlZi5ib290c3RyYXAodGhpcy5wb3J0YWxBcHApO1xuICAgICAgICAgICAgLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcHJvbWlzZSBmb3IgYm9vdHN0cmFwXG4gICAgICAgICAgICBpZiAoKHJlc3VsdCBhcyBhbnkpWyd0aGVuJ10pIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmcm9tKHJlc3VsdCkgYXMgT2JzZXJ2YWJsZTxQbGFuZXRBcHBsaWNhdGlvblJlZj47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoYGFwcCgke2FwcC5uYW1lfSkgYm9vdHN0cmFwcGVkIHN1Y2Nlc3MgZm9yICR7ZGVmYXVsdFN0YXR1c31gKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBcHBTdGF0dXMoYXBwLCBBcHBsaWNhdGlvblN0YXR1cy5ib290c3RyYXBwZWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdFN0YXR1cyA9PT0gJ2Rpc3BsYXknICYmIGFwcFJvb3RFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBSb290RWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBwUmVmO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBbJHthcHAubmFtZX1dIG5vdCBmb3VuZCwgbWFrZSBzdXJlIHRoYXQgdGhlIGFwcCBoYXMgdGhlIGNvcnJlY3QgbmFtZSBkZWZpbmVkIHVzZSBkZWZpbmVBcHBsaWNhdGlvbigke2FwcC5uYW1lfSkgYW5kIHJ1bnRpbWVDaHVuayBhbmQgdmVuZG9yQ2h1bmsgYXJlIHNldCB0byB0cnVlLCBkZXRhaWxzIHNlZSBodHRwczovL2dpdGh1Yi5jb20vd29ya3RpbGUvbmd4LXBsYW5ldCN0aHJvdy1lcnJvci1jYW5ub3QtcmVhZC1wcm9wZXJ0eS1jYWxsLW9mLXVuZGVmaW5lZC1hdC1fX3dlYnBhY2tfcmVxdWlyZV9fLWJvb3RzdHJhcDc5YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VW5sb2FkQXBwcyhhY3RpdmVBcHBzOiBQbGFuZXRBcHBsaWNhdGlvbltdKSB7XG4gICAgICAgIGNvbnN0IHVubG9hZEFwcHM6IFBsYW5ldEFwcGxpY2F0aW9uW10gPSBbXTtcbiAgICAgICAgdGhpcy5hcHBzU3RhdHVzLmZvckVhY2goKHZhbHVlLCBhcHApID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gQXBwbGljYXRpb25TdGF0dXMuYWN0aXZlICYmICFhY3RpdmVBcHBzLmZpbmQoaXRlbSA9PiBpdGVtLm5hbWUgPT09IGFwcC5uYW1lKSkge1xuICAgICAgICAgICAgICAgIHVubG9hZEFwcHMucHVzaChhcHApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHVubG9hZEFwcHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1bmxvYWRBcHBzKHNob3VsZFVubG9hZEFwcHM6IFBsYW5ldEFwcGxpY2F0aW9uW10sIGV2ZW50OiBQbGFuZXRSb3V0ZXJFdmVudCkge1xuICAgICAgICBjb25zdCBoaWRlQXBwczogUGxhbmV0QXBwbGljYXRpb25bXSA9IFtdO1xuICAgICAgICBjb25zdCBkZXN0cm95QXBwczogUGxhbmV0QXBwbGljYXRpb25bXSA9IFtdO1xuICAgICAgICBzaG91bGRVbmxvYWRBcHBzLmZvckVhY2goYXBwID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN3aXRjaE1vZGVJc0NvZXhpc3QoYXBwKSkge1xuICAgICAgICAgICAgICAgIGRlYnVnKGBoaWRlIGFwcCgke2FwcC5uYW1lfSkgZm9yIGNvZXhpc3QgbW9kZWApO1xuICAgICAgICAgICAgICAgIGhpZGVBcHBzLnB1c2goYXBwKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBcHAoYXBwKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFwcFN0YXR1cyhhcHAsIEFwcGxpY2F0aW9uU3RhdHVzLmJvb3RzdHJhcHBlZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlc3Ryb3lBcHBzLnB1c2goYXBwKTtcbiAgICAgICAgICAgICAgICAvLyDplIDmr4HkuYvliY3lhYjpmpDol4/vvIzlkKbliJnkvJrlh7rnjrDpl6rng4HvvIzlm6DkuLogZGVzdHJveSDmmK/lu7bov5/miafooYznmoRcbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzplIDmr4HkuI3lu7bov5/miafooYzvvIzkvJrlh7rnjrDliIfmjaLliLDkuLvlupTnlKjnmoTml7blgJnkvJrmnInop4blm77ljaHpob/njrDosaFcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBcHAoYXBwKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFwcFN0YXR1cyhhcHAsIEFwcGxpY2F0aW9uU3RhdHVzLmFzc2V0c0xvYWRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChoaWRlQXBwcy5sZW5ndGggPiAwIHx8IGRlc3Ryb3lBcHBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIOS7juWFtuS7luW6lOeUqOWIh+aNouWIsOS4u+W6lOeUqOeahOaXtuWAmeS8muacieinhuWbvuWNoemhv+eOsOixoe+8jOaJgOS7peWFiOetieS4u+W6lOeUqOa4suafk+WujOavleWQjuWGjeWKoOi9veWFtuS7luW6lOeUqFxuICAgICAgICAgICAgLy8g5q2k5aSE5bCd6K+V5L2/55SoIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkg5bqU55So5LmL6Ze055qE5YiH5o2i5Lya5Ye6546w6Zeq54OBXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBoaWRlQXBwcy5mb3JFYWNoKGFwcCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcFJlZiA9IGdldFBsYW5ldEFwcGxpY2F0aW9uUmVmKGFwcC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFwcFJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwUmVmLm5hdmlnYXRlQnlVcmwoZXZlbnQudXJsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRlc3Ryb3lBcHBzLmZvckVhY2goYXBwID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoYGRlc3Ryb3kgYXBwKCR7YXBwLm5hbWV9KWApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3lBcHAoYXBwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVsb2FkQXBwcyhhY3RpdmVBcHBzPzogUGxhbmV0QXBwbGljYXRpb25bXSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRvUHJlbG9hZEFwcHMgPSB0aGlzLnBsYW5ldEFwcGxpY2F0aW9uU2VydmljZS5nZXRBcHBzVG9QcmVsb2FkKFxuICAgICAgICAgICAgICAgIGFjdGl2ZUFwcHMgPyBhY3RpdmVBcHBzLm1hcChpdGVtID0+IGl0ZW0ubmFtZSkgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkZWJ1Zyhgc3RhcnQgcHJlbG9hZCBhcHBzOiAke3RoaXMuZ2V0QXBwTmFtZXModG9QcmVsb2FkQXBwcyl9YCk7XG4gICAgICAgICAgICBjb25zdCBsb2FkQXBwcyQgPSB0b1ByZWxvYWRBcHBzLm1hcChwcmVsb2FkQXBwID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcmVsb2FkSW50ZXJuYWwocHJlbG9hZEFwcCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZm9ya0pvaW4obG9hZEFwcHMkKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyKGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbnN1cmVQcmVsb2FkQXBwcyhhY3RpdmVBcHBzPzogUGxhbmV0QXBwbGljYXRpb25bXSkge1xuICAgICAgICAvLyBTdGFydCBwcmVsb2FkIGFwcHNcbiAgICAgICAgLy8gU3RhcnQgcHJlbG9hZCB3aGVuIGZpcnN0IHRpbWUgYXBwIGxvYWRlZFxuICAgICAgICBpZiAodGhpcy5maXJzdExvYWQpIHtcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZEFwcHMoYWN0aXZlQXBwcyk7XG4gICAgICAgICAgICB0aGlzLmZpcnN0TG9hZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldE9wdGlvbnMob3B0aW9uczogUGFydGlhbDxQbGFuZXRPcHRpb25zPikge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgICAgICAgICAuLi5vcHRpb25zXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVzZXQgcm91dGUgYnkgY3VycmVudCByb3V0ZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVyb3V0ZShldmVudDogUGxhbmV0Um91dGVyRXZlbnQpIHtcbiAgICAgICAgdGhpcy5yb3V0ZUNoYW5nZSQubmV4dChldmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVsb2FkSW50ZXJuYWwoYXBwOiBQbGFuZXRBcHBsaWNhdGlvbiwgaW1tZWRpYXRlPzogYm9vbGVhbik6IE9ic2VydmFibGU8UGxhbmV0QXBwbGljYXRpb25SZWYgfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuYXBwc1N0YXR1cy5nZXQoYXBwKTtcbiAgICAgICAgaWYgKCFzdGF0dXMgfHwgc3RhdHVzID09PSBBcHBsaWNhdGlvblN0YXR1cy5sb2FkRXJyb3IpIHtcbiAgICAgICAgICAgIGRlYnVnKGBwcmVsb2FkIGFwcCgke2FwcC5uYW1lfSksIHN0YXR1cyBpcyBlbXB0eSwgc3RhcnQgdG8gbG9hZCBhc3NldHNgKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXJ0TG9hZEFwcEFzc2V0cyhhcHApLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoYHByZWxvYWQgYXBwKCR7YXBwLm5hbWV9KSwgYXNzZXRzIGxvYWRlZCwgc3RhcnQgYm9vdHN0cmFwIGFwcCwgaW1tZWRpYXRlOiAkeyEhaW1tZWRpYXRlfWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW1tZWRpYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ib290c3RyYXBBcHAoYXBwLCAnaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJvb3RzdHJhcEFwcChhcHAsICdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRQbGFuZXRBcHBsaWNhdGlvblJlZihhcHAubmFtZSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBbQXBwbGljYXRpb25TdGF0dXMuYXNzZXRzTG9hZGluZywgQXBwbGljYXRpb25TdGF0dXMuYXNzZXRzTG9hZGVkLCBBcHBsaWNhdGlvblN0YXR1cy5ib290c3RyYXBwaW5nXS5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgICBzdGF0dXNcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkZWJ1ZyhgcHJlbG9hZCBhcHAoJHthcHAubmFtZX0pLCBzdGF0dXMgaXMgJHtBcHBsaWNhdGlvblN0YXR1c1tzdGF0dXNdfSwgcmV0dXJuIHVudGlsIGJvb3RzdHJhcHBlZGApO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwU3RhdHVzQ2hhbmdlJChhcHApLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UGxhbmV0QXBwbGljYXRpb25SZWYoYXBwLm5hbWUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYXBwUmVmID0gZ2V0UGxhbmV0QXBwbGljYXRpb25SZWYoYXBwLm5hbWUpO1xuICAgICAgICAgICAgaWYgKCFhcHBSZWYpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7YXBwLm5hbWV9J3Mgc3RhdHVzIGlzICR7QXBwbGljYXRpb25TdGF0dXNbc3RhdHVzXX0sIHBsYW5ldEFwcGxpY2F0aW9uUmVmIGlzIG51bGwuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb2YoYXBwUmVmKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByZWxvYWQgcGxhbmV0IGFwcGxpY2F0aW9uXG4gICAgICogQHBhcmFtIGFwcCBhcHBcbiAgICAgKiBAcGFyYW0gaW1tZWRpYXRlIGJvb3RzdHJhcCBvbiBzdGFibGUgYnkgZGVmYXVsdCwgc2V0dGluZyBpbW1lZGlhdGUgaXMgdHJ1ZSwgaXQgd2lsbCBib290c3RyYXAgaW1tZWRpYXRlXG4gICAgICovXG4gICAgcHVibGljIHByZWxvYWQoYXBwOiBQbGFuZXRBcHBsaWNhdGlvbiwgaW1tZWRpYXRlPzogYm9vbGVhbik6IE9ic2VydmFibGU8UGxhbmV0QXBwbGljYXRpb25SZWY+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlbG9hZEludGVybmFsKGFwcCwgaW1tZWRpYXRlKTtcbiAgICB9XG59XG4iXX0=
|
|
459
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbmV0LWFwcGxpY2F0aW9uLWxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYW5ldC9zcmMvYXBwbGljYXRpb24vcGxhbmV0LWFwcGxpY2F0aW9uLWxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFZLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsRUFBRSxFQUFjLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQXdDLFdBQVcsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUcsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFbEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDOzs7OztBQUN2QyxNQUFNLEtBQUss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QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBOZ1pvbmUsIEFwcGxpY2F0aW9uUmVmLCBJbmplY3RvciwgY29tcHV0ZWQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgb2YsIE9ic2VydmFibGUsIFN1YmplY3QsIGZvcmtKb2luLCBmcm9tLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBc3NldHNMb2FkZXIgfSBmcm9tICcuLi9hc3NldHMtbG9hZGVyJztcbmltcG9ydCB7IFBsYW5ldEFwcGxpY2F0aW9uLCBQbGFuZXRSb3V0ZXJFdmVudCwgU3dpdGNoTW9kZXMsIFBsYW5ldE9wdGlvbnMgfSBmcm9tICcuLi9wbGFuZXQuY2xhc3MnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCBzaGFyZSwgbWFwLCB0YXAsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlLCBmaWx0ZXIsIGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBnZXRIVE1MRWxlbWVudCwgY29lcmNlQXJyYXksIGNyZWF0ZUVsZW1lbnRCeVRlbXBsYXRlIH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgeyBQbGFuZXRBcHBsaWNhdGlvblJlZiB9IGZyb20gJy4vcGxhbmV0LWFwcGxpY2F0aW9uLXJlZic7XG5pbXBvcnQgeyBQbGFuZXRQb3J0YWxBcHBsaWNhdGlvbiB9IGZyb20gJy4vcG9ydGFsLWFwcGxpY2F0aW9uJztcbmltcG9ydCB7IFBsYW5ldEFwcGxpY2F0aW9uU2VydmljZSB9IGZyb20gJy4vcGxhbmV0LWFwcGxpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2xvYmFsRXZlbnREaXNwYXRjaGVyIH0gZnJvbSAnLi4vZ2xvYmFsLWV2ZW50LWRpc3BhdGNoZXInO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGdsb2JhbFBsYW5ldCwgZ2V0UGxhbmV0QXBwbGljYXRpb25SZWYsIGdldEFwcGxpY2F0aW9uTG9hZGVyIH0gZnJvbSAnLi4vZ2xvYmFsLXBsYW5ldCc7XG5pbXBvcnQgeyBjcmVhdGVEZWJ1ZyB9IGZyb20gJy4uL2RlYnVnJztcbmNvbnN0IGRlYnVnID0gY3JlYXRlRGVidWcoJ2FwcC1sb2FkZXInKTtcblxuZXhwb3J0IGVudW0gQXBwbGljYXRpb25TdGF0dXMge1xuICAgIGFzc2V0c0xvYWRpbmcgPSAxLFxuICAgIGFzc2V0c0xvYWRlZCA9IDIsXG4gICAgYm9vdHN0cmFwcGluZyA9IDMsXG4gICAgYm9vdHN0cmFwcGVkID0gNCxcbiAgICBhY3RpdmUgPSA1LFxuICAgIGxvYWRFcnJvciA9IDEwXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwc0xvYWRpbmdTdGFydEV2ZW50IHtcbiAgICBzaG91bGRMb2FkQXBwczogUGxhbmV0QXBwbGljYXRpb25bXTtcbiAgICBzaG91bGRVbmxvYWRBcHBzOiBQbGFuZXRBcHBsaWNhdGlvbltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwcFN0YXR1c0NoYW5nZUV2ZW50IHtcbiAgICBhcHA6IFBsYW5ldEFwcGxpY2F0aW9uO1xuICAgIHN0YXR1czogQXBwbGljYXRpb25TdGF0dXM7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGxhbmV0QXBwbGljYXRpb25Mb2FkZXIge1xuICAgIHByaXZhdGUgZmlyc3RMb2FkID0gdHJ1ZTtcblxuICAgIHByaXZhdGUgc3RhcnRSb3V0ZUNoYW5nZUV2ZW50ITogUGxhbmV0Um91dGVyRXZlbnQ7XG5cbiAgICBwcml2YXRlIG9wdGlvbnM6IFBsYW5ldE9wdGlvbnM7XG5cbiAgICBwcml2YXRlIGluUHJvZ3Jlc3NBcHBBc3NldHNMb2FkcyA9IG5ldyBNYXA8c3RyaW5nLCBPYnNlcnZhYmxlPFBsYW5ldEFwcGxpY2F0aW9uPj4oKTtcblxuICAgIHByaXZhdGUgYXBwc1N0YXR1cyA9IG5ldyBNYXA8UGxhbmV0QXBwbGljYXRpb24sIEFwcGxpY2F0aW9uU3RhdHVzPigpO1xuXG4gICAgcHJpdmF0ZSBwb3J0YWxBcHAgPSBuZXcgUGxhbmV0UG9ydGFsQXBwbGljYXRpb24oKTtcblxuICAgIHByaXZhdGUgcm91dGVDaGFuZ2UkID0gbmV3IFN1YmplY3Q8UGxhbmV0Um91dGVyRXZlbnQ+KCk7XG5cbiAgICBwcml2YXRlIGFwcFN0YXR1c0NoYW5nZSQgPSBuZXcgU3ViamVjdDxBcHBTdGF0dXNDaGFuZ2VFdmVudD4oKTtcblxuICAgIHByaXZhdGUgYXBwc0xvYWRpbmdTdGFydCQgPSBuZXcgU3ViamVjdDxBcHBzTG9hZGluZ1N0YXJ0RXZlbnQ+KCk7XG5cbiAgICBwcml2YXRlIGlubmVyTG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgICBwdWJsaWMgZ2V0IGFwcFN0YXR1c0NoYW5nZSgpOiBPYnNlcnZhYmxlPEFwcFN0YXR1c0NoYW5nZUV2ZW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcFN0YXR1c0NoYW5nZSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhcHBzTG9hZGluZ1N0YXJ0KCk6IE9ic2VydmFibGU8QXBwc0xvYWRpbmdTdGFydEV2ZW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcHNMb2FkaW5nU3RhcnQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHBsZWFzZSB1c2UgbG9hZGluZyBzaWduYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbG9hZGluZ0RvbmUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBsb2FkaW5nID0gdGhpcy5pbm5lckxvYWRpbmcuYXNSZWFkb25seSgpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgYXNzZXRzTG9hZGVyOiBBc3NldHNMb2FkZXIsXG4gICAgICAgIHByaXZhdGUgcGxhbmV0QXBwbGljYXRpb25TZXJ2aWNlOiBQbGFuZXRBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIGFwcGxpY2F0aW9uUmVmOiBBcHBsaWNhdGlvblJlZlxuICAgICkge1xuICAgICAgICBpZiAoZ2V0QXBwbGljYXRpb25Mb2FkZXIoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGFuZXRBcHBsaWNhdGlvbkxvYWRlciBoYXMgYmVlbiBpbmplY3RlZCBpbiB0aGUgcG9ydGFsLCByZXBlYXRlZCBpbmplY3Rpb24gaXMgbm90IGFsbG93ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHN3aXRjaE1vZGU6IFN3aXRjaE1vZGVzLmRlZmF1bHQsXG4gICAgICAgICAgICBlcnJvckhhbmRsZXI6IChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5wb3J0YWxBcHAubmdab25lID0gbmdab25lO1xuICAgICAgICB0aGlzLnBvcnRhbEFwcC5hcHBsaWNhdGlvblJlZiA9IGFwcGxpY2F0aW9uUmVmO1xuICAgICAgICB0aGlzLnBvcnRhbEFwcC5yb3V0ZXIgPSByb3V0ZXI7XG4gICAgICAgIHRoaXMucG9ydGFsQXBwLmluamVjdG9yID0gaW5qZWN0b3I7XG4gICAgICAgIHRoaXMucG9ydGFsQXBwLmdsb2JhbEV2ZW50RGlzcGF0Y2hlciA9IGluamVjdG9yLmdldChHbG9iYWxFdmVudERpc3BhdGNoZXIpO1xuICAgICAgICBnbG9iYWxQbGFuZXQucG9ydGFsQXBwbGljYXRpb24gPSB0aGlzLnBvcnRhbEFwcDtcbiAgICAgICAgdGhpcy5zZXR1cFJvdXRlQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRBcHBTdGF0dXMoYXBwOiBQbGFuZXRBcHBsaWNhdGlvbiwgc3RhdHVzOiBBcHBsaWNhdGlvblN0YXR1cykge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZnJvbVN0YXR1cyA9IHRoaXMuYXBwc1N0YXR1cy5nZXQoYXBwKTtcbiAgICAgICAgICAgIGRlYnVnKFxuICAgICAgICAgICAgICAgIGBhcHAoJHthcHAubmFtZX0pIHN0YXR1cyBjaGFuZ2U6ICR7ZnJvbVN0YXR1cyA/IEFwcGxpY2F0aW9uU3RhdHVzW2Zyb21TdGF0dXNdIDogJ2VtcHR5J30gPT4gJHtBcHBsaWNhdGlvblN0YXR1c1tzdGF0dXNdfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmFwcHNTdGF0dXMuc2V0KGFwcCwgc3RhdHVzKTtcbiAgICAgICAgICAgIHRoaXMuYXBwU3RhdHVzQ2hhbmdlJC5uZXh0KHtcbiAgICAgICAgICAgICAgICBhcHA6IGFwcCxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1c1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QXBwU3RhdHVzQ2hhbmdlJChhcHA6IFBsYW5ldEFwcGxpY2F0aW9uLCBzdGF0dXMgPSBBcHBsaWNhdGlvblN0YXR1cy5ib290c3RyYXBwZWQpOiBPYnNlcnZhYmxlPFBsYW5ldEFwcGxpY2F0aW9uPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcFN0YXR1c0NoYW5nZS5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQuYXBwID09PSBhcHAgJiYgZXZlbnQuc3RhdHVzID09PSBzdGF0dXM7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwcDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzd2l0Y2hNb2RlSXNDb2V4aXN0KGFwcDogUGxhbmV0QXBwbGljYXRpb24pIHtcbiAgICAgICAgaWYgKGFwcCAmJiBhcHAuc3dpdGNoTW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFwcC5zd2l0Y2hNb2RlID09PSBTd2l0Y2hNb2Rlcy5jb2V4aXN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zd2l0Y2hNb2RlID09PSBTd2l0Y2hNb2Rlcy5jb2V4aXN0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlcnJvckhhbmRsZXIoZXJyb3I6IEVycm9yKSB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZXJyb3JIYW5kbGVyKGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRMb2FkaW5nRG9uZSgpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ0RvbmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pbm5lckxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBcHBOYW1lcyhhcHBzOiBQbGFuZXRBcHBsaWNhdGlvbltdKTogc3RyaW5nIHwgc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gYXBwcy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgID8gYFtdYFxuICAgICAgICAgICAgOiBhcHBzLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLm5hbWU7XG4gICAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBSb3V0ZUNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5yb3V0ZUNoYW5nZSRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCh4LCB5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoeCAmJiB4LnVybCkgPT09ICh5ICYmIHkudXJsKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAvLyBVc2luZyBzd2l0Y2hNYXAgc28gd2UgY2FuY2VsIGV4ZWN1dGluZyBsb2FkaW5nIHdoZW4gYSBuZXcgb25lIGNvbWVzIGluXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIG5ldyBvYnNlcnZhYmxlIHVzZSBvZiBhbmQgY2F0Y2hFcnJvcixcbiAgICAgICAgICAgICAgICAgICAgLy8gaW4gb3JkZXIgdG8gcHJldmVudCByb3V0ZUNoYW5nZSQgY29tcGxldGVkIHdoaWNoIG5ldmVyIHRyaWdnZXIgbmV3IHJvdXRlIGNoYW5nZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoZXZlbnQpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB1bmxvYWQgYXBwcyBhbmQgcmV0dXJuIHNob3VsZCBsb2FkIGFwcHNcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoYHJvdXRlIGNoYW5nZSwgdXJsIGlzOiAke2V2ZW50LnVybH1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0Um91dGVDaGFuZ2VFdmVudCA9IGV2ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZExvYWRBcHBzID0gdGhpcy5wbGFuZXRBcHBsaWNhdGlvblNlcnZpY2UuZ2V0QXBwc0J5TWF0Y2hlZFVybChldmVudC51cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKGBzaG91bGQgbG9hZCBhcHBzOiAke3RoaXMuZ2V0QXBwTmFtZXMoc2hvdWxkTG9hZEFwcHMpfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFVubG9hZEFwcHMgPSB0aGlzLmdldFVubG9hZEFwcHMoc2hvdWxkTG9hZEFwcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwc0xvYWRpbmdTdGFydCQubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZExvYWRBcHBzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRVbmxvYWRBcHBzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmxvYWRBcHBzKHNob3VsZFVubG9hZEFwcHMsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhgdW5sb2FkIGFwcHM6ICR7dGhpcy5nZXRBcHBOYW1lcyhzaG91bGRVbmxvYWRBcHBzKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2hvdWxkTG9hZEFwcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvYWQgYXBwIGFzc2V0cyAoc3RhdGljIHJlc291cmNlcylcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcChzaG91bGRMb2FkQXBwcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhhc0FwcHNOZWVkTG9hZGluZ0Fzc2V0cyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvYWRBcHBzJCA9IHNob3VsZExvYWRBcHBzLm1hcChhcHAgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHBTdGF0dXMgPSB0aGlzLmFwcHNTdGF0dXMuZ2V0KGFwcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFhcHBTdGF0dXMgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcFN0YXR1cyA9PT0gQXBwbGljYXRpb25TdGF0dXMuYXNzZXRzTG9hZGluZyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwU3RhdHVzID09PSBBcHBsaWNhdGlvblN0YXR1cy5sb2FkRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYXBwKCR7YXBwLm5hbWV9KSBzdGF0dXMgaXMgJHtBcHBsaWNhdGlvblN0YXR1c1thcHBTdGF0dXMgYXMgQXBwbGljYXRpb25TdGF0dXNdfSwgc3RhcnQgbG9hZCBhc3NldHNgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQXBwc05lZWRMb2FkaW5nQXNzZXRzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRMb2FkQXBwQXNzZXRzKGFwcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihhcHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0FwcHNOZWVkTG9hZGluZ0Fzc2V0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdEb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5uZXJMb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRBcHBzJC5sZW5ndGggPiAwID8gZm9ya0pvaW4obG9hZEFwcHMkKSA6IG9mKFtdIGFzIFBsYW5ldEFwcGxpY2F0aW9uW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBCb290c3RyYXAgb3Igc2hvdyBhcHBzXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoYXBwcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwcyQ6IE9ic2VydmFibGU8UGxhbmV0QXBwbGljYXRpb24+W10gPSBhcHBzLm1hcChhcHAgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoYXBwKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKGFwcCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwU3RhdHVzID0gdGhpcy5hcHBzU3RhdHVzLmdldChhcHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcHBTdGF0dXMgPT09IEFwcGxpY2F0aW9uU3RhdHVzLmJvb3RzdHJhcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhgW3JvdXRlQ2hhbmdlXSBhcHAoJHthcHAubmFtZX0pIHN0YXR1cyBpcyBib290c3RyYXBwZWQsIHNob3cgYXBwIGFuZCBhY3RpdmVgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93QXBwKGFwcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcFJlZiA9IGdldFBsYW5ldEFwcGxpY2F0aW9uUmVmKGFwcC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwUmVmPy5uYXZpZ2F0ZUJ5VXJsKGV2ZW50LnVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QXBwU3RhdHVzKGFwcCwgQXBwbGljYXRpb25TdGF0dXMuYWN0aXZlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkaW5nRG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoYXBwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFwcFN0YXR1cyA9PT0gQXBwbGljYXRpb25TdGF0dXMuYXNzZXRzTG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKGBbcm91dGVDaGFuZ2VdIGFwcCgke2FwcC5uYW1lfSkgc3RhdHVzIGlzIGFzc2V0c0xvYWRlZCwgc3RhcnQgYm9vdHN0cmFwcGluZ2ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ib290c3RyYXBBcHAoYXBwKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhgYXBwKCR7YXBwLm5hbWV9KSBib290c3RyYXBwZWQgc3VjY2VzcywgYWN0aXZlIGl0YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBcHBTdGF0dXMoYXBwLCBBcHBsaWNhdGlvblN0YXR1cy5hY3RpdmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZ0RvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFwcFN0YXR1cyA9PT0gQXBwbGljYXRpb25TdGF0dXMuYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKGBbcm91dGVDaGFuZ2VdIGFwcCgke2FwcC5uYW1lfSkgaXMgYWN0aXZlLCBkbyBub3RoaW5nc2ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHBSZWYgPSBnZXRQbGFuZXRBcHBsaWNhdGlvblJlZihhcHAubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHN1YiBhcHAgdXNlIG9sZCB2ZXJzaW9uIHdoaWNoIGhhcyBub3QgZ2V0Q3VycmVudFJvdXRlclN0YXRlVXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRVcmwgPSBhcHBSZWY/LmdldEN1cnJlbnRSb3V0ZXJTdGF0ZVVybCA/IGFwcFJlZi5nZXRDdXJyZW50Um91dGVyU3RhdGVVcmwoKSA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFVybCAhPT0gZXZlbnQudXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBSZWY/Lm5hdmlnYXRlQnlVcmwoZXZlbnQudXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoYXBwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBbcm91dGVDaGFuZ2VdIGFwcCgke2FwcC5uYW1lfSkgc3RhdHVzIGlzICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25TdGF0dXNbYXBwU3RhdHVzIGFzIEFwcGxpY2F0aW9uU3RhdHVzXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwU3RhdHVzQ2hhbmdlJChhcHApLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhgYXBwKCR7YXBwLm5hbWV9KSBzdGF0dXMgaXMgYm9vdHN0cmFwcGVkIGJ5IHN1YnNjcmliZSBzdGF0dXMgY2hhbmdlLCBhY3RpdmUgaXRgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFwcFN0YXR1cyhhcHAsIEFwcGxpY2F0aW9uU3RhdHVzLmFjdGl2ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93QXBwKGFwcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcHBzJC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKGBzdGFydCBsb2FkIGFuZCBhY3RpdmUgYXBwczogJHt0aGlzLmdldEFwcE5hbWVzKGFwcHMpfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDliIfmjaLliLDlupTnlKjlkI7kvJrmnInpl6rng4HnjrDosaHvvIzmiYDku6Xkvb/nlKggc2V0VGltZW91dCDlkI7lkK/liqjlupTnlKhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhhbXBsZTogcmVkaXJlY3QgdG8gYXBwMSdzIGRhc2hib2FyZCBmcm9tIHBvcnRhbCdzIGFib3V0IHBhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYXBwJ3Mgcm91dGUgaGFzIHJlZGlyZWN0LCBpdCBkb2Vzbid0IHdvcmssIGl0IG9rIGp1c3QgaW4gc2V0VGltZW91dCwgSSBkb24ndCBrbm93IHdoeS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzo6IHJlbW92ZSBpdCwgaXQgaXMgb2sgaW4gdmVyc2lvbiBBbmd1bGFyIDkueFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOatpOWkhOWIpOaWreaYr+WboOS4uuWmguaenOmdmeaAgei1hOa6kOWKoOi9veWujOavlei/mOacquWQr+WKqOiiq+WPlua2iO+8jOi/mOaYr+S8muWQr+WKqOS5i+WJjeeahOW6lOeUqO+8jOiZveeEtuWPr+iDveaAp+avlOi+g+Wwj++8jOS9huaYr+aXoOazleaOkumZpOi/meenjeWPr+iDveaAp++8jOaJgOS7peWPquacieW9kyBFdmVudCDmmK/mnIDlkI7kuIDkuKrmiY3kvJrlkK/liqhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXJ0Um91dGVDaGFuZ2VFdmVudCA9PT0gZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBydW5PdXRzaWRlQW5ndWxhciBmb3IgZml4IGVycm9yOiBgRXhwZWN0ZWQgdG8gbm90IGJlIGluIEFuZ3VsYXIgWm9uZSwgYnV0IGl0IGlzIWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmtKb2luKGFwcHMkKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkaW5nRG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnN1cmVQcmVsb2FkQXBwcyhhcHBzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKGBubyBhcHBzIG5lZWQgdG8gYmUgbG9hZGVkLCBlbnN1cmUgcHJlbG9hZCBhcHBzYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5zdXJlUHJlbG9hZEFwcHMoYXBwcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZ0RvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVycm9yIGhhbmRsZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKGBhcHBzIGxvYWRlciBlcnJvcjogJHtlcnJvcn1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9ySGFuZGxlcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhcnRMb2FkQXBwQXNzZXRzKGFwcDogUGxhbmV0QXBwbGljYXRpb24pOiBPYnNlcnZhYmxlPFBsYW5ldEFwcGxpY2F0aW9uPiB7XG4gICAgICAgIGlmICh0aGlzLmluUHJvZ3Jlc3NBcHBBc3NldHNMb2Fkcy5nZXQoYXBwLm5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pblByb2dyZXNzQXBwQXNzZXRzTG9hZHMuZ2V0KGFwcC5uYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxvYWRBcHAkID0gdGhpcy5hc3NldHNMb2FkZXIubG9hZEFwcEFzc2V0cyhhcHApLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pblByb2dyZXNzQXBwQXNzZXRzTG9hZHMuZGVsZXRlKGFwcC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBcHBTdGF0dXMoYXBwLCBBcHBsaWNhdGlvblN0YXR1cy5hc3NldHNMb2FkZWQpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHA7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5Qcm9ncmVzc0FwcEFzc2V0c0xvYWRzLmRlbGV0ZShhcHAubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QXBwU3RhdHVzKGFwcCwgQXBwbGljYXRpb25TdGF0dXMubG9hZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc2hhcmUoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuaW5Qcm9ncmVzc0FwcEFzc2V0c0xvYWRzLnNldChhcHAubmFtZSwgbG9hZEFwcCQpO1xuICAgICAgICAgICAgdGhpcy5zZXRBcHBTdGF0dXMoYXBwLCBBcHBsaWNhdGlvblN0YXR1cy5hc3NldHNMb2FkaW5nKTtcbiAgICAgICAgICAgIHJldHVybiBsb2FkQXBwJDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGlkZUFwcChwbGFuZXRBcHA6IFBsYW5ldEFwcGxpY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFwcFJlZiA9IGdldFBsYW5ldEFwcGxpY2F0aW9uUmVmKHBsYW5ldEFwcC5uYW1lKTtcbiAgICAgICAgY29uc3QgYXBwUm9vdEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGFwcFJlZj8uc2VsZWN0b3IgfHwgKHBsYW5ldEFwcC5zZWxlY3RvciBhcyBzdHJpbmcpKTtcbiAgICAgICAgaWYgKGFwcFJvb3RFbGVtZW50KSB7XG4gICAgICAgICAgICBhcHBSb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2Rpc3BsYXk6bm9uZTsnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd0FwcChwbGFuZXRBcHA6IFBsYW5ldEFwcGxpY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFwcFJlZiA9IGdldFBsYW5ldEFwcGxpY2F0aW9uUmVmKHBsYW5ldEFwcC5uYW1lKTtcbiAgICAgICAgY29uc3QgYXBwUm9vdEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGFwcFJlZj8uc2VsZWN0b3IgfHwgKHBsYW5ldEFwcC5zZWxlY3RvciBhcyBzdHJpbmcpKTtcbiAgICAgICAgaWYgKGFwcFJvb3RFbGVtZW50KSB7XG4gICAgICAgICAgICBhcHBSb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95QXBwKHBsYW5ldEFwcDogUGxhbmV0QXBwbGljYXRpb24pIHtcbiAgICAgICAgY29uc3QgYXBwUmVmID0gZ2V0UGxhbmV0QXBwbGljYXRpb25SZWYocGxhbmV0QXBwLm5hbWUpO1xuICAgICAgICBpZiAoYXBwUmVmKSB7XG4gICAgICAgICAgICBhcHBSZWYuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGdldEhUTUxFbGVtZW50KHBsYW5ldEFwcC5ob3N0UGFyZW50KTtcbiAgICAgICAgY29uc3QgYXBwUm9vdEVsZW1lbnQgPSBjb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoKGFwcFJlZiAmJiBhcHBSZWYuc2VsZWN0b3IpIHx8IChwbGFuZXRBcHAuc2VsZWN0b3IgYXMgc3RyaW5nKSk7XG4gICAgICAgIGlmIChhcHBSb290RWxlbWVudCkge1xuICAgICAgICAgICAgY29udGFpbmVyPy5yZW1vdmVDaGlsZChhcHBSb290RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJvb3RzdHJhcEFwcChhcHA6IFBsYW5ldEFwcGxpY2F0aW9uLCBkZWZhdWx0U3RhdHVzOiAnaGlkZGVuJyB8ICdkaXNwbGF5JyA9ICdkaXNwbGF5Jyk6IE9ic2VydmFibGU8UGxhbmV0QXBwbGljYXRpb25SZWY+IHtcbiAgICAgICAgZGVidWcoYGFwcCgke2FwcC5uYW1lfSkgc3RhcnQgYm9vdHN0cmFwcGluZ2ApO1xuICAgICAgICB0aGlzLnNldEFwcFN0YXR1cyhhcHAsIEFwcGxpY2F0aW9uU3RhdHVzLmJvb3RzdHJhcHBpbmcpO1xuICAgICAgICBjb25zdCBhcHBSZWYgPSBnZXRQbGFuZXRBcHBsaWNhdGlvblJlZihhcHAubmFtZSk7XG4gICAgICAgIGlmIChhcHBSZWYgJiYgYXBwUmVmLmJvb3RzdHJhcCkge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gZ2V0SFRNTEVsZW1lbnQoYXBwLmhvc3RQYXJlbnQpO1xuICAgICAgICAgICAgbGV0IGFwcFJvb3RFbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICBhcHBSb290RWxlbWVudCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGFwcFJlZi5zZWxlY3RvciB8fCBhcHAuc2VsZWN0b3IhKSE7XG4gICAgICAgICAgICAgICAgaWYgKCFhcHBSb290RWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXBwUmVmLnRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBSb290RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnRCeVRlbXBsYXRlKGFwcFJlZi50ZW1wbGF0ZSkhO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwUm9vdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGFwcC5zZWxlY3RvciEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFwcFJvb3RFbGVtZW50LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnZGlzcGxheTpub25lOycpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXBwLmhvc3RDbGFzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwUm9vdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCguLi5jb2VyY2VBcnJheShhcHAuaG9zdENsYXNzKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGFwcC5zdHlsZVByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwUm9vdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCguLi5jb2VyY2VBcnJheShhcHAuc3R5bGVQcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoYXBwUm9vdEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBhcHBSZWYuYm9vdHN0cmFwKHRoaXMucG9ydGFsQXBwKTtcbiAgICAgICAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHByb21pc2UgZm9yIGJvb3RzdHJhcFxuICAgICAgICAgICAgaWYgKChyZXN1bHQgYXMgYW55KVsndGhlbiddKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnJvbShyZXN1bHQpIGFzIE9ic2VydmFibGU8UGxhbmV0QXBwbGljYXRpb25SZWY+O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnKGBhcHAoJHthcHAubmFtZX0pIGJvb3RzdHJhcHBlZCBzdWNjZXNzIGZvciAke2RlZmF1bHRTdGF0dXN9YCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QXBwU3RhdHVzKGFwcCwgQXBwbGljYXRpb25TdGF0dXMuYm9vdHN0cmFwcGVkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRTdGF0dXMgPT09ICdkaXNwbGF5JyAmJiBhcHBSb290RWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwUm9vdEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwcFJlZjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgWyR7YXBwLm5hbWV9XSBub3QgZm91bmQsIG1ha2Ugc3VyZSB0aGF0IHRoZSBhcHAgaGFzIHRoZSBjb3JyZWN0IG5hbWUgZGVmaW5lZCB1c2UgZGVmaW5lQXBwbGljYXRpb24oJHthcHAubmFtZX0pIGFuZCBydW50aW1lQ2h1bmsgYW5kIHZlbmRvckNodW5rIGFyZSBzZXQgdG8gdHJ1ZSwgZGV0YWlscyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3dvcmt0aWxlL25neC1wbGFuZXQjdGhyb3ctZXJyb3ItY2Fubm90LXJlYWQtcHJvcGVydHktY2FsbC1vZi11bmRlZmluZWQtYXQtX193ZWJwYWNrX3JlcXVpcmVfXy1ib290c3RyYXA3OWBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVubG9hZEFwcHMoYWN0aXZlQXBwczogUGxhbmV0QXBwbGljYXRpb25bXSkge1xuICAgICAgICBjb25zdCB1bmxvYWRBcHBzOiBQbGFuZXRBcHBsaWNhdGlvbltdID0gW107XG4gICAgICAgIHRoaXMuYXBwc1N0YXR1cy5mb3JFYWNoKCh2YWx1ZSwgYXBwKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IEFwcGxpY2F0aW9uU3RhdHVzLmFjdGl2ZSAmJiAhYWN0aXZlQXBwcy5maW5kKGl0ZW0gPT4gaXRlbS5uYW1lID09PSBhcHAubmFtZSkpIHtcbiAgICAgICAgICAgICAgICB1bmxvYWRBcHBzLnB1c2goYXBwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1bmxvYWRBcHBzO1xuICAgIH1cblxuICAgIHByaXZhdGUgdW5sb2FkQXBwcyhzaG91bGRVbmxvYWRBcHBzOiBQbGFuZXRBcHBsaWNhdGlvbltdLCBldmVudDogUGxhbmV0Um91dGVyRXZlbnQpIHtcbiAgICAgICAgY29uc3QgaGlkZUFwcHM6IFBsYW5ldEFwcGxpY2F0aW9uW10gPSBbXTtcbiAgICAgICAgY29uc3QgZGVzdHJveUFwcHM6IFBsYW5ldEFwcGxpY2F0aW9uW10gPSBbXTtcbiAgICAgICAgc2hvdWxkVW5sb2FkQXBwcy5mb3JFYWNoKGFwcCA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zd2l0Y2hNb2RlSXNDb2V4aXN0KGFwcCkpIHtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhgaGlkZSBhcHAoJHthcHAubmFtZX0pIGZvciBjb2V4aXN0IG1vZGVgKTtcbiAgICAgICAgICAgICAgICBoaWRlQXBwcy5wdXNoKGFwcCk7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQXBwKGFwcCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBcHBTdGF0dXMoYXBwLCBBcHBsaWNhdGlvblN0YXR1cy5ib290c3RyYXBwZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZXN0cm95QXBwcy5wdXNoKGFwcCk7XG4gICAgICAgICAgICAgICAgLy8g6ZSA5q+B5LmL5YmN5YWI6ZqQ6JeP77yM5ZCm5YiZ5Lya5Ye6546w6Zeq54OB77yM5Zug5Li6IGRlc3Ryb3kg5piv5bu26L+f5omn6KGM55qEXG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c6ZSA5q+B5LiN5bu26L+f5omn6KGM77yM5Lya5Ye6546w5YiH5o2i5Yiw5Li75bqU55So55qE5pe25YCZ5Lya5pyJ6KeG5Zu+5Y2h6aG/546w6LGhXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQXBwKGFwcCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBcHBTdGF0dXMoYXBwLCBBcHBsaWNhdGlvblN0YXR1cy5hc3NldHNMb2FkZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoaGlkZUFwcHMubGVuZ3RoID4gMCB8fCBkZXN0cm95QXBwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyDku47lhbbku5blupTnlKjliIfmjaLliLDkuLvlupTnlKjnmoTml7blgJnkvJrmnInop4blm77ljaHpob/njrDosaHvvIzmiYDku6XlhYjnrYnkuLvlupTnlKjmuLLmn5Plrozmr5XlkI7lho3liqDovb3lhbbku5blupTnlKhcbiAgICAgICAgICAgIC8vIOatpOWkhOWwneivleS9v+eUqCB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpIOW6lOeUqOS5i+mXtOeahOWIh+aNouS8muWHuueOsOmXqueDgVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaGlkZUFwcHMuZm9yRWFjaChhcHAgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHBSZWYgPSBnZXRQbGFuZXRBcHBsaWNhdGlvblJlZihhcHAubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcHBSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcFJlZi5uYXZpZ2F0ZUJ5VXJsKGV2ZW50LnVybCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBkZXN0cm95QXBwcy5mb3JFYWNoKGFwcCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnKGBkZXN0cm95IGFwcCgke2FwcC5uYW1lfSlgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95QXBwKGFwcCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJlbG9hZEFwcHMoYWN0aXZlQXBwcz86IFBsYW5ldEFwcGxpY2F0aW9uW10pIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0b1ByZWxvYWRBcHBzID0gdGhpcy5wbGFuZXRBcHBsaWNhdGlvblNlcnZpY2UuZ2V0QXBwc1RvUHJlbG9hZChcbiAgICAgICAgICAgICAgICBhY3RpdmVBcHBzID8gYWN0aXZlQXBwcy5tYXAoaXRlbSA9PiBpdGVtLm5hbWUpIDogdW5kZWZpbmVkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZGVidWcoYHN0YXJ0IHByZWxvYWQgYXBwczogJHt0aGlzLmdldEFwcE5hbWVzKHRvUHJlbG9hZEFwcHMpfWApO1xuICAgICAgICAgICAgY29uc3QgbG9hZEFwcHMkID0gdG9QcmVsb2FkQXBwcy5tYXAocHJlbG9hZEFwcCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJlbG9hZEludGVybmFsKHByZWxvYWRBcHApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZvcmtKb2luKGxvYWRBcHBzJCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9ySGFuZGxlcihlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW5zdXJlUHJlbG9hZEFwcHMoYWN0aXZlQXBwcz86IFBsYW5ldEFwcGxpY2F0aW9uW10pIHtcbiAgICAgICAgLy8gU3RhcnQgcHJlbG9hZCBhcHBzXG4gICAgICAgIC8vIFN0YXJ0IHByZWxvYWQgd2hlbiBmaXJzdCB0aW1lIGFwcCBsb2FkZWRcbiAgICAgICAgaWYgKHRoaXMuZmlyc3RMb2FkKSB7XG4gICAgICAgICAgICB0aGlzLnByZWxvYWRBcHBzKGFjdGl2ZUFwcHMpO1xuICAgICAgICAgICAgdGhpcy5maXJzdExvYWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRPcHRpb25zKG9wdGlvbnM6IFBhcnRpYWw8UGxhbmV0T3B0aW9ucz4pIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJlc2V0IHJvdXRlIGJ5IGN1cnJlbnQgcm91dGVyXG4gICAgICovXG4gICAgcHVibGljIHJlcm91dGUoZXZlbnQ6IFBsYW5ldFJvdXRlckV2ZW50KSB7XG4gICAgICAgIHRoaXMucm91dGVDaGFuZ2UkLm5leHQoZXZlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJlbG9hZEludGVybmFsKGFwcDogUGxhbmV0QXBwbGljYXRpb24sIGltbWVkaWF0ZT86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPFBsYW5ldEFwcGxpY2F0aW9uUmVmIHwgbnVsbD4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSB0aGlzLmFwcHNTdGF0dXMuZ2V0KGFwcCk7XG4gICAgICAgIGlmICghc3RhdHVzIHx8IHN0YXR1cyA9PT0gQXBwbGljYXRpb25TdGF0dXMubG9hZEVycm9yKSB7XG4gICAgICAgICAgICBkZWJ1ZyhgcHJlbG9hZCBhcHAoJHthcHAubmFtZX0pLCBzdGF0dXMgaXMgZW1wdHksIHN0YXJ0IHRvIGxvYWQgYXNzZXRzYCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGFydExvYWRBcHBBc3NldHMoYXBwKS5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnKGBwcmVsb2FkIGFwcCgke2FwcC5uYW1lfSksIGFzc2V0cyBsb2FkZWQsIHN0YXJ0IGJvb3RzdHJhcCBhcHAsIGltbWVkaWF0ZTogJHshIWltbWVkaWF0ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGltbWVkaWF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYm9vdHN0cmFwQXBwKGFwcCwgJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ib290c3RyYXBBcHAoYXBwLCAnaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9ySGFuZGxlcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UGxhbmV0QXBwbGljYXRpb25SZWYoYXBwLm5hbWUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKFtBcHBsaWNhdGlvblN0YXR1cy5hc3NldHNMb2FkaW5nLCBBcHBsaWNhdGlvblN0YXR1cy5hc3NldHNMb2FkZWQsIEFwcGxpY2F0aW9uU3RhdHVzLmJvb3RzdHJhcHBpbmddLmluY2x1ZGVzKHN0YXR1cykpIHtcbiAgICAgICAgICAgIGRlYnVnKGBwcmVsb2FkIGFwcCgke2FwcC5uYW1lfSksIHN0YXR1cyBpcyAke0FwcGxpY2F0aW9uU3RhdHVzW3N0YXR1c119LCByZXR1cm4gdW50aWwgYm9vdHN0cmFwcGVkYCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBcHBTdGF0dXNDaGFuZ2UkKGFwcCkucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRQbGFuZXRBcHBsaWNhdGlvblJlZihhcHAubmFtZSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhcHBSZWYgPSBnZXRQbGFuZXRBcHBsaWNhdGlvblJlZihhcHAubmFtZSk7XG4gICAgICAgICAgICBpZiAoIWFwcFJlZikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHthcHAubmFtZX0ncyBzdGF0dXMgaXMgJHtBcHBsaWNhdGlvblN0YXR1c1tzdGF0dXNdfSwgcGxhbmV0QXBwbGljYXRpb25SZWYgaXMgbnVsbC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvZihhcHBSZWYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJlbG9hZCBwbGFuZXQgYXBwbGljYXRpb25cbiAgICAgKiBAcGFyYW0gYXBwIGFwcFxuICAgICAqIEBwYXJhbSBpbW1lZGlhdGUgYm9vdHN0cmFwIG9uIHN0YWJsZSBieSBkZWZhdWx0LCBzZXR0aW5nIGltbWVkaWF0ZSBpcyB0cnVlLCBpdCB3aWxsIGJvb3RzdHJhcCBpbW1lZGlhdGVcbiAgICAgKi9cbiAgICBwdWJsaWMgcHJlbG9hZChhcHA6IFBsYW5ldEFwcGxpY2F0aW9uLCBpbW1lZGlhdGU/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxQbGFuZXRBcHBsaWNhdGlvblJlZj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmVsb2FkSW50ZXJuYWwoYXBwLCBpbW1lZGlhdGUpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -84,7 +84,8 @@ export class PlanetComponentLoader {
|
|
|
84
84
|
const container = this.getContainerElement(config);
|
|
85
85
|
const componentRef = createComponent(component, {
|
|
86
86
|
environmentInjector: environmentInjector,
|
|
87
|
-
elementInjector: injector
|
|
87
|
+
elementInjector: injector,
|
|
88
|
+
projectableNodes: config.projectableNodes
|
|
88
89
|
});
|
|
89
90
|
appRef.attachView(componentRef.hostView);
|
|
90
91
|
const componentRootNode = this.getComponentRootNode(componentRef);
|
|
@@ -168,4 +169,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
168
169
|
type: Inject,
|
|
169
170
|
args: [DOCUMENT]
|
|
170
171
|
}] }] });
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbmV0LWNvbXBvbmVudC1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGFuZXQvc3JjL2NvbXBvbmVudC9wbGFuZXQtY29tcG9uZW50LWxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsVUFBVSxFQUNWLGNBQWMsRUFDZCxXQUFXLEVBQ1gsTUFBTSxFQUVOLE1BQU0sRUFDTixRQUFRLEVBQ1IsZUFBZSxFQUlmLG9CQUFvQixFQUV2QixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sRUFBRSxFQUFFLEVBQWMsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0gsb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDdkIsbUNBQW1DLEVBQ3RDLE1BQU0sa0JBQWtCLENBQUM7O0FBRzFCLE1BQU0scUJBQXFCLEdBQUcsMEJBQTBCLENBQUM7QUFFekQsU0FBUyxlQUFlLENBQUksU0FBNkI7SUFDckQsT0FBTyxPQUFPLFNBQVMsS0FBSyxVQUFVLElBQUksU0FBUyxDQUFDLFdBQVcsS0FBSyxRQUFRLENBQUM7QUFDakYsQ0FBQztBQVlELE1BQU0sT0FBTyxxQkFBcUI7SUFDOUIsSUFBWSxpQkFBaUI7UUFDekIsT0FBTyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFZLGtCQUFrQjtRQUMxQixPQUFPLHFCQUFxQixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELFlBQ1ksY0FB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LENBQUM7UUFDTCxDQUFDLENBQUMsRUFDRixXQUFXLEVBQUUsQ0FDaEIsQ0FBQztRQUNGLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQixPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDOzhHQXZLUSxxQkFBcUIsaUdBYWxCLFFBQVE7a0hBYlgscUJBQXFCLGNBRmxCLE1BQU07OzJGQUVULHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQWNRLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgSW5qZWN0YWJsZSxcbiAgICBBcHBsaWNhdGlvblJlZixcbiAgICBOZ01vZHVsZVJlZixcbiAgICBOZ1pvbmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgY3JlYXRlQ29tcG9uZW50LFxuICAgIFR5cGUsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIEVtYmVkZGVkVmlld1JlZixcbiAgICByZWZsZWN0Q29tcG9uZW50VHlwZSxcbiAgICBFbnZpcm9ubWVudEluamVjdG9yXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGxhbmV0QXBwbGljYXRpb25SZWYgfSBmcm9tICcuLi9hcHBsaWNhdGlvbi9wbGFuZXQtYXBwbGljYXRpb24tcmVmJztcbmltcG9ydCB7IFBsYW5ldENvbXBvbmVudFJlZiB9IGZyb20gJy4vcGxhbmV0LWNvbXBvbmVudC1yZWYnO1xuaW1wb3J0IHsgUGxhbnRDb21wb25lbnRDb25maWcgfSBmcm9tICcuL3BsYW50LWNvbXBvbmVudC5jb25maWcnO1xuaW1wb3J0IHsgY29lcmNlQXJyYXkgfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCB7IG1hcCwgc2hhcmVSZXBsYXksIGRlbGF5V2hlbiB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IG9mLCBPYnNlcnZhYmxlLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBnZXRBcHBsaWNhdGlvbkxvYWRlcixcbiAgICBnZXRBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgZ2V0UGxhbmV0QXBwbGljYXRpb25SZWYsXG4gICAgZ2V0Qm9vdHN0cmFwcGVkUGxhbmV0QXBwbGljYXRpb25SZWZcbn0gZnJvbSAnLi4vZ2xvYmFsLXBsYW5ldCc7XG5pbXBvcnQgeyBOZ1BsYW5ldEFwcGxpY2F0aW9uUmVmIH0gZnJvbSAnLi4vYXBwbGljYXRpb24vbmctcGxhbmV0LWFwcGxpY2F0aW9uLXJlZic7XG5cbmNvbnN0IGNvbXBvbmVudFdyYXBwZXJDbGFzcyA9ICdwbGFuZXQtY29tcG9uZW50LXdyYXBwZXInO1xuXG5mdW5jdGlvbiBpc0NvbXBvbmVudFR5cGU8VD4oY29tcG9uZW50OiBQbGFuZXRDb21wb25lbnQ8VD4pOiBjb21wb25lbnQgaXMgVHlwZTxUPiB7XG4gICAgcmV0dXJuIHR5cGVvZiBjb21wb25lbnQgPT09ICdmdW5jdGlvbicgJiYgY29tcG9uZW50LmNvbnN0cnVjdG9yID09PSBGdW5jdGlvbjtcbn1cblxuZXhwb3J0IHR5cGUgUGxhbmV0Q29tcG9uZW50PFQgPSB1bmtub3duPiA9XG4gICAgfCB7XG4gICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgIGNvbXBvbmVudDogVHlwZTxUPjtcbiAgICAgIH1cbiAgICB8IFR5cGU8VD47XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGxhbmV0Q29tcG9uZW50TG9hZGVyIHtcbiAgICBwcml2YXRlIGdldCBhcHBsaWNhdGlvbkxvYWRlcigpIHtcbiAgICAgICAgcmV0dXJuIGdldEFwcGxpY2F0aW9uTG9hZGVyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgYXBwbGljYXRpb25TZXJ2aWNlKCkge1xuICAgICAgICByZXR1cm4gZ2V0QXBwbGljYXRpb25TZXJ2aWNlKCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgICAgICBwcml2YXRlIG5nTW9kdWxlUmVmOiBOZ01vZHVsZVJlZjxhbnk+LFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBhbnlcbiAgICApIHt9XG5cbiAgICBwcml2YXRlIGdldFBsYW50QXBwUmVmKG5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8UGxhbmV0QXBwbGljYXRpb25SZWY+IHtcbiAgICAgICAgY29uc3QgcGxhbnRBcHBSZWYgPSBnZXRCb290c3RyYXBwZWRQbGFuZXRBcHBsaWNhdGlvblJlZihuYW1lKTtcbiAgICAgICAgaWYgKHBsYW50QXBwUmVmKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YocGxhbnRBcHBSZWYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYXBwID0gdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZ2V0QXBwQnlOYW1lKG5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbGljYXRpb25Mb2FkZXIucHJlbG9hZChhcHAsIHRydWUpLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFBsYW5ldEFwcGxpY2F0aW9uUmVmKG5hbWUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVJbmplY3RvcjxURGF0YT4ocGFyZW50SW5qZWN0b3I6IEluamVjdG9yLCBjb21wb25lbnRSZWY6IFBsYW5ldENvbXBvbmVudFJlZjxURGF0YT4pOiBJbmplY3RvciB7XG4gICAgICAgIHJldHVybiBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBQbGFuZXRDb21wb25lbnRSZWYsXG4gICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiBjb21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcGFyZW50OiBwYXJlbnRJbmplY3RvclxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbnRhaW5lckVsZW1lbnQoY29uZmlnOiBQbGFudENvbXBvbmVudENvbmZpZyk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgaWYgKCFjb25maWcuY29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbmZpZyAnY29udGFpbmVyJyBjYW5ub3QgYmUgbnVsbGApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKChjb25maWcuY29udGFpbmVyIGFzIEVsZW1lbnRSZWYpLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGNvbmZpZy5jb250YWluZXIgYXMgRWxlbWVudFJlZikubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5jb250YWluZXIgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluc2VydENvbXBvbmVudFJvb3ROb2RlVG9Db250YWluZXIoY29udGFpbmVyOiBIVE1MRWxlbWVudCwgY29tcG9uZW50Um9vdE5vZGU6IEhUTUxFbGVtZW50LCBob3N0Q2xhc3M6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzdWJBcHAgPSB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5nZXRBcHBCeU5hbWUodGhpcy5uZ01vZHVsZVJlZi5pbnN0YW5jZS5hcHBOYW1lKTtcbiAgICAgICAgY29tcG9uZW50Um9vdE5vZGUuY2xhc3NMaXN0LmFkZChjb21wb25lbnRXcmFwcGVyQ2xhc3MpO1xuICAgICAgICBjb21wb25lbnRSb290Tm9kZS5zZXRBdHRyaWJ1dGUoJ3BsYW5ldC1pbmxpbmUnLCAnJyk7XG4gICAgICAgIGlmIChob3N0Q2xhc3MpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudFJvb3ROb2RlLmNsYXNzTGlzdC5hZGQoaG9zdENsYXNzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3ViQXBwICYmIHN1YkFwcC5zdHlsZVByZWZpeCkge1xuICAgICAgICAgICAgY29tcG9uZW50Um9vdE5vZGUuY2xhc3NMaXN0LmFkZChzdWJBcHAuc3R5bGVQcmVmaXgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnRhaW5lciDmmK/ms6jph4rliJnlnKjliY3mlrnmj5LlhaXvvIzlkKbliJnlnKjlhYPntKDlhoXpg6jmj5LlhaVcbiAgICAgICAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gOCkge1xuICAgICAgICAgICAgY29udGFpbmVyLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNvbXBvbmVudFJvb3ROb2RlLCBjb250YWluZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGNvbXBvbmVudFJvb3ROb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXR0YWNoQ29tcG9uZW50PFREYXRhPihcbiAgICAgICAgY29tcG9uZW50OiBUeXBlPHVua25vd24+LFxuICAgICAgICBlbnZpcm9ubWVudEluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgICBjb25maWc6IFBsYW50Q29tcG9uZW50Q29uZmlnXG4gICAgKTogUGxhbmV0Q29tcG9uZW50UmVmPFREYXRhPiB7XG4gICAgICAgIGNvbnN0IHBsYW50Q29tcG9uZW50UmVmID0gbmV3IFBsYW5ldENvbXBvbmVudFJlZigpO1xuICAgICAgICBjb25zdCBhcHBSZWYgPSB0aGlzLmFwcGxpY2F0aW9uUmVmO1xuICAgICAgICBjb25zdCBpbmplY3RvciA9IHRoaXMuY3JlYXRlSW5qZWN0b3I8VERhdGE+KGVudmlyb25tZW50SW5qZWN0b3IsIHBsYW50Q29tcG9uZW50UmVmKTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5nZXRDb250YWluZXJFbGVtZW50KGNvbmZpZyk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IGNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQsIHtcbiAgICAgICAgICAgIGVudmlyb25tZW50SW5qZWN0b3I6IGVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgICAgICAgICBlbGVtZW50SW5qZWN0b3I6IGluamVjdG9yXG4gICAgICAgIH0pO1xuICAgICAgICBhcHBSZWYuYXR0YWNoVmlldyhjb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRSb290Tm9kZSA9IHRoaXMuZ2V0Q29tcG9uZW50Um9vdE5vZGUoY29tcG9uZW50UmVmKTtcbiAgICAgICAgdGhpcy5pbnNlcnRDb21wb25lbnRSb290Tm9kZVRvQ29udGFpbmVyKGNvbnRhaW5lciwgY29tcG9uZW50Um9vdE5vZGUsIGNvbmZpZy5ob3N0Q2xhc3MgfHwgY29uZmlnLndyYXBwZXJDbGFzcyk7XG4gICAgICAgIGlmIChjb25maWcuaW5pdGlhbFN0YXRlKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbXBvbmVudFJlZi5pbnN0YW5jZSwgY29uZmlnLmluaXRpYWxTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcGxhbnRDb21wb25lbnRSZWYuY29tcG9uZW50SW5zdGFuY2UgPSBjb21wb25lbnRSZWYuaW5zdGFuY2U7XG4gICAgICAgIHBsYW50Q29tcG9uZW50UmVmLmNvbXBvbmVudFJlZiA9IGNvbXBvbmVudFJlZjtcbiAgICAgICAgcGxhbnRDb21wb25lbnRSZWYuaG9zdEVsZW1lbnQgPSBjb21wb25lbnRSb290Tm9kZTtcbiAgICAgICAgcGxhbnRDb21wb25lbnRSZWYuZGlzcG9zZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChhcHBSZWYudmlld0NvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgIGFwcFJlZi5kZXRhY2hWaWV3KGNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21wb25lbnRSZWY/LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIGNvbXBvbmVudFJvb3ROb2RlLnJlbW92ZSgpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcGxhbnRDb21wb25lbnRSZWY7XG4gICAgfVxuXG4gICAgLyoqIEdldHMgdGhlIHJvb3QgSFRNTEVsZW1lbnQgZm9yIGFuIGluc3RhbnRpYXRlZCBjb21wb25lbnQuICovXG4gICAgcHJpdmF0ZSBnZXRDb21wb25lbnRSb290Tm9kZShjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+KTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gKGNvbXBvbmVudFJlZi5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55Pikucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVnaXN0ZXJDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudE9yQ29tcG9uZW50czogUGxhbmV0Q29tcG9uZW50IHwgUGxhbmV0Q29tcG9uZW50W10pIHtcbiAgICAgICAgY29uc3QgYXBwID0gdGhpcy5uZ01vZHVsZVJlZi5pbnN0YW5jZS5hcHBOYW1lO1xuICAgICAgICB0aGlzLmdldFBsYW50QXBwUmVmKGFwcCkuc3Vic2NyaWJlKChhcHBSZWY6IE5nUGxhbmV0QXBwbGljYXRpb25SZWYpID0+IHtcbiAgICAgICAgICAgIGFwcFJlZi5yZWdpc3RlckNvbXBvbmVudEZhY3RvcnkoKGNvbXBvbmVudE5hbWU6IHN0cmluZywgY29uZmlnOiBQbGFudENvbXBvbmVudENvbmZpZzxhbnk+KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGNvZXJjZUFycmF5KGNvbXBvbmVudE9yQ29tcG9uZW50cyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGxhbmV0Q29tcG9uZW50ID0gY29tcG9uZW50cy5maW5kKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNDb21wb25lbnRUeXBlKGl0ZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJlZmxlY3RDb21wb25lbnRUeXBlKGl0ZW0pLnNlbGVjdG9yLmluY2x1ZGVzKGNvbXBvbmVudE5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGl0ZW0ubmFtZSA9PT0gY29tcG9uZW50TmFtZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocGxhbmV0Q29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5hdHRhY2hDb21wb25lbnQ8YW55PihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NvbXBvbmVudFR5cGUocGxhbmV0Q29tcG9uZW50KSA/IHBsYW5ldENvbXBvbmVudCA6IHBsYW5ldENvbXBvbmVudC5jb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwUmVmLmFwcE1vZHVsZVJlZi5pbmplY3RvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9uZW50UmVmO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgdW5yZWdpc3RlcmVkIGNvbXBvbmVudCAke2NvbXBvbmVudE5hbWV9IGluIGFwcCAke2FwcH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXIoY29tcG9uZW50czogUGxhbmV0Q29tcG9uZW50IHwgUGxhbmV0Q29tcG9uZW50W10pIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZDxUQ29tcCA9IHVua25vd24sIFREYXRhID0gdW5rbm93bj4oXG4gICAgICAgIGFwcDogc3RyaW5nLFxuICAgICAgICBjb21wb25lbnROYW1lOiBzdHJpbmcsXG4gICAgICAgIGNvbmZpZzogUGxhbnRDb21wb25lbnRDb25maWc8VERhdGE+XG4gICAgKTogT2JzZXJ2YWJsZTxQbGFuZXRDb21wb25lbnRSZWY8VENvbXA+PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0UGxhbnRBcHBSZWYoYXBwKS5waXBlKFxuICAgICAgICAgICAgZGVsYXlXaGVuKChhcHBSZWY6IE5nUGxhbmV0QXBwbGljYXRpb25SZWYpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYXBwUmVmLmdldENvbXBvbmVudEZhY3RvcnkoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoJycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEJlY2F1c2UgcmVnaXN0ZXIgdXNlICdzZXRUaW1lb3V0JyxzbyB0aW1lciAyMFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZXIoMjApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKGFwcFJlZiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IGFwcFJlZi5nZXRDb21wb25lbnRGYWN0b3J5KCk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudEZhY3RvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudEZhY3Rvcnk8VERhdGEsIFRDb21wPihjb21wb25lbnROYW1lLCBjb25maWcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHthcHB9J3MgY29tcG9uZW50KCR7Y29tcG9uZW50TmFtZX0pIGlzIG5vdCByZWdpc3RlcmVkYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgpXG4gICAgICAgICk7XG4gICAgICAgIHJlc3VsdC5zdWJzY3JpYmUoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4iXX0=
|
|
172
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbmV0LWNvbXBvbmVudC1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGFuZXQvc3JjL2NvbXBvbmVudC9wbGFuZXQtY29tcG9uZW50LWxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsVUFBVSxFQUNWLGNBQWMsRUFDZCxXQUFXLEVBQ1gsTUFBTSxFQUVOLE1BQU0sRUFDTixRQUFRLEVBQ1IsZUFBZSxFQUlmLG9CQUFvQixFQUV2QixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sRUFBRSxFQUFFLEVBQWMsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0gsb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDdkIsbUNBQW1DLEVBQ3RDLE1BQU0sa0JBQWtCLENBQUM7O0FBRzFCLE1BQU0scUJBQXFCLEdBQUcsMEJBQTBCLENBQUM7QUFFekQsU0FBUyxlQUFlLENBQUksU0FBNkI7SUFDckQsT0FBTyxPQUFPLFNBQVMsS0FBSyxVQUFVLElBQUksU0FBUyxDQUFDLFdBQVcsS0FBSyxRQUFRLENBQUM7QUFDakYsQ0FBQztBQVlELE1BQU0sT0FBTyxxQkFBcUI7SUFDOUIsSUFBWSxpQkFBaUI7UUFDekIsT0FBTyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFZLGtCQUFrQjtRQUMxQixPQUFPLHFCQUFxQixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELFlBQ1ksY0FB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LGdCQUFnQixhQUFhLHFCQUFxQixDQUFDLENBQUM7WUFDOUUsQ0FBQztRQUNMLENBQUMsQ0FBQyxFQUNGLFdBQVcsRUFBRSxDQUNoQixDQUFDO1FBQ0YsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25CLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7OEdBeEtRLHFCQUFxQixpR0FhbEIsUUFBUTtrSEFiWCxxQkFBcUIsY0FGbEIsTUFBTTs7MkZBRVQscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBY1EsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBJbmplY3RhYmxlLFxuICAgIEFwcGxpY2F0aW9uUmVmLFxuICAgIE5nTW9kdWxlUmVmLFxuICAgIE5nWm9uZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBjcmVhdGVDb21wb25lbnQsXG4gICAgVHlwZSxcbiAgICBDb21wb25lbnRSZWYsXG4gICAgRW1iZWRkZWRWaWV3UmVmLFxuICAgIHJlZmxlY3RDb21wb25lbnRUeXBlLFxuICAgIEVudmlyb25tZW50SW5qZWN0b3Jcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQbGFuZXRBcHBsaWNhdGlvblJlZiB9IGZyb20gJy4uL2FwcGxpY2F0aW9uL3BsYW5ldC1hcHBsaWNhdGlvbi1yZWYnO1xuaW1wb3J0IHsgUGxhbmV0Q29tcG9uZW50UmVmIH0gZnJvbSAnLi9wbGFuZXQtY29tcG9uZW50LXJlZic7XG5pbXBvcnQgeyBQbGFudENvbXBvbmVudENvbmZpZyB9IGZyb20gJy4vcGxhbnQtY29tcG9uZW50LmNvbmZpZyc7XG5pbXBvcnQgeyBjb2VyY2VBcnJheSB9IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgbWFwLCBzaGFyZVJlcGxheSwgZGVsYXlXaGVuIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgb2YsIE9ic2VydmFibGUsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIGdldEFwcGxpY2F0aW9uTG9hZGVyLFxuICAgIGdldEFwcGxpY2F0aW9uU2VydmljZSxcbiAgICBnZXRQbGFuZXRBcHBsaWNhdGlvblJlZixcbiAgICBnZXRCb290c3RyYXBwZWRQbGFuZXRBcHBsaWNhdGlvblJlZlxufSBmcm9tICcuLi9nbG9iYWwtcGxhbmV0JztcbmltcG9ydCB7IE5nUGxhbmV0QXBwbGljYXRpb25SZWYgfSBmcm9tICcuLi9hcHBsaWNhdGlvbi9uZy1wbGFuZXQtYXBwbGljYXRpb24tcmVmJztcblxuY29uc3QgY29tcG9uZW50V3JhcHBlckNsYXNzID0gJ3BsYW5ldC1jb21wb25lbnQtd3JhcHBlcic7XG5cbmZ1bmN0aW9uIGlzQ29tcG9uZW50VHlwZTxUPihjb21wb25lbnQ6IFBsYW5ldENvbXBvbmVudDxUPik6IGNvbXBvbmVudCBpcyBUeXBlPFQ+IHtcbiAgICByZXR1cm4gdHlwZW9mIGNvbXBvbmVudCA9PT0gJ2Z1bmN0aW9uJyAmJiBjb21wb25lbnQuY29uc3RydWN0b3IgPT09IEZ1bmN0aW9uO1xufVxuXG5leHBvcnQgdHlwZSBQbGFuZXRDb21wb25lbnQ8VCA9IHVua25vd24+ID1cbiAgICB8IHtcbiAgICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgICAgY29tcG9uZW50OiBUeXBlPFQ+O1xuICAgICAgfVxuICAgIHwgVHlwZTxUPjtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQbGFuZXRDb21wb25lbnRMb2FkZXIge1xuICAgIHByaXZhdGUgZ2V0IGFwcGxpY2F0aW9uTG9hZGVyKCkge1xuICAgICAgICByZXR1cm4gZ2V0QXBwbGljYXRpb25Mb2FkZXIoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBhcHBsaWNhdGlvblNlcnZpY2UoKSB7XG4gICAgICAgIHJldHVybiBnZXRBcHBsaWNhdGlvblNlcnZpY2UoKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBhcHBsaWNhdGlvblJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgICAgIHByaXZhdGUgbmdNb2R1bGVSZWY6IE5nTW9kdWxlUmVmPGFueT4sXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IGFueVxuICAgICkge31cblxuICAgIHByaXZhdGUgZ2V0UGxhbnRBcHBSZWYobmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxQbGFuZXRBcHBsaWNhdGlvblJlZj4ge1xuICAgICAgICBjb25zdCBwbGFudEFwcFJlZiA9IGdldEJvb3RzdHJhcHBlZFBsYW5ldEFwcGxpY2F0aW9uUmVmKG5hbWUpO1xuICAgICAgICBpZiAocGxhbnRBcHBSZWYpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihwbGFudEFwcFJlZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhcHAgPSB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5nZXRBcHBCeU5hbWUobmFtZSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvbkxvYWRlci5wcmVsb2FkKGFwcCwgdHJ1ZSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UGxhbmV0QXBwbGljYXRpb25SZWYobmFtZSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUluamVjdG9yPFREYXRhPihwYXJlbnRJbmplY3RvcjogSW5qZWN0b3IsIGNvbXBvbmVudFJlZjogUGxhbmV0Q29tcG9uZW50UmVmPFREYXRhPik6IEluamVjdG9yIHtcbiAgICAgICAgcmV0dXJuIEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IFBsYW5ldENvbXBvbmVudFJlZixcbiAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6IGNvbXBvbmVudFJlZlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBwYXJlbnQ6IHBhcmVudEluamVjdG9yXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29udGFpbmVyRWxlbWVudChjb25maWc6IFBsYW50Q29tcG9uZW50Q29uZmlnKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBpZiAoIWNvbmZpZy5jb250YWluZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgY29uZmlnICdjb250YWluZXInIGNhbm5vdCBiZSBudWxsYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoKGNvbmZpZy5jb250YWluZXIgYXMgRWxlbWVudFJlZikubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoY29uZmlnLmNvbnRhaW5lciBhcyBFbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLmNvbnRhaW5lciBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5zZXJ0Q29tcG9uZW50Um9vdE5vZGVUb0NvbnRhaW5lcihjb250YWluZXI6IEhUTUxFbGVtZW50LCBjb21wb25lbnRSb290Tm9kZTogSFRNTEVsZW1lbnQsIGhvc3RDbGFzczogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHN1YkFwcCA9IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmdldEFwcEJ5TmFtZSh0aGlzLm5nTW9kdWxlUmVmLmluc3RhbmNlLmFwcE5hbWUpO1xuICAgICAgICBjb21wb25lbnRSb290Tm9kZS5jbGFzc0xpc3QuYWRkKGNvbXBvbmVudFdyYXBwZXJDbGFzcyk7XG4gICAgICAgIGNvbXBvbmVudFJvb3ROb2RlLnNldEF0dHJpYnV0ZSgncGxhbmV0LWlubGluZScsICcnKTtcbiAgICAgICAgaWYgKGhvc3RDbGFzcykge1xuICAgICAgICAgICAgY29tcG9uZW50Um9vdE5vZGUuY2xhc3NMaXN0LmFkZChob3N0Q2xhc3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdWJBcHAgJiYgc3ViQXBwLnN0eWxlUHJlZml4KSB7XG4gICAgICAgICAgICBjb21wb25lbnRSb290Tm9kZS5jbGFzc0xpc3QuYWRkKHN1YkFwcC5zdHlsZVByZWZpeCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29udGFpbmVyIOaYr+azqOmHiuWImeWcqOWJjeaWueaPkuWFpe+8jOWQpuWImeWcqOWFg+e0oOWGhemDqOaPkuWFpVxuICAgICAgICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSA4KSB7XG4gICAgICAgICAgICBjb250YWluZXIucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoY29tcG9uZW50Um9vdE5vZGUsIGNvbnRhaW5lcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoY29tcG9uZW50Um9vdE5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhdHRhY2hDb21wb25lbnQ8VERhdGE+KFxuICAgICAgICBjb21wb25lbnQ6IFR5cGU8dW5rbm93bj4sXG4gICAgICAgIGVudmlyb25tZW50SW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgICAgIGNvbmZpZzogUGxhbnRDb21wb25lbnRDb25maWdcbiAgICApOiBQbGFuZXRDb21wb25lbnRSZWY8VERhdGE+IHtcbiAgICAgICAgY29uc3QgcGxhbnRDb21wb25lbnRSZWYgPSBuZXcgUGxhbmV0Q29tcG9uZW50UmVmKCk7XG4gICAgICAgIGNvbnN0IGFwcFJlZiA9IHRoaXMuYXBwbGljYXRpb25SZWY7XG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gdGhpcy5jcmVhdGVJbmplY3RvcjxURGF0YT4oZW52aXJvbm1lbnRJbmplY3RvciwgcGxhbnRDb21wb25lbnRSZWYpO1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmdldENvbnRhaW5lckVsZW1lbnQoY29uZmlnKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCwge1xuICAgICAgICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogZW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgICAgICAgIGVsZW1lbnRJbmplY3RvcjogaW5qZWN0b3IsXG4gICAgICAgICAgICBwcm9qZWN0YWJsZU5vZGVzOiBjb25maWcucHJvamVjdGFibGVOb2Rlc1xuICAgICAgICB9KTtcbiAgICAgICAgYXBwUmVmLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50Um9vdE5vZGUgPSB0aGlzLmdldENvbXBvbmVudFJvb3ROb2RlKGNvbXBvbmVudFJlZik7XG4gICAgICAgIHRoaXMuaW5zZXJ0Q29tcG9uZW50Um9vdE5vZGVUb0NvbnRhaW5lcihjb250YWluZXIsIGNvbXBvbmVudFJvb3ROb2RlLCBjb25maWcuaG9zdENsYXNzIHx8IGNvbmZpZy53cmFwcGVyQ2xhc3MpO1xuICAgICAgICBpZiAoY29uZmlnLmluaXRpYWxTdGF0ZSkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb21wb25lbnRSZWYuaW5zdGFuY2UsIGNvbmZpZy5pbml0aWFsU3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHBsYW50Q29tcG9uZW50UmVmLmNvbXBvbmVudEluc3RhbmNlID0gY29tcG9uZW50UmVmLmluc3RhbmNlO1xuICAgICAgICBwbGFudENvbXBvbmVudFJlZi5jb21wb25lbnRSZWYgPSBjb21wb25lbnRSZWY7XG4gICAgICAgIHBsYW50Q29tcG9uZW50UmVmLmhvc3RFbGVtZW50ID0gY29tcG9uZW50Um9vdE5vZGU7XG4gICAgICAgIHBsYW50Q29tcG9uZW50UmVmLmRpc3Bvc2UgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXBwUmVmLnZpZXdDb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICBhcHBSZWYuZGV0YWNoVmlldyhjb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcG9uZW50UmVmPy5kZXN0cm95KCk7XG4gICAgICAgICAgICBjb21wb25lbnRSb290Tm9kZS5yZW1vdmUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHBsYW50Q29tcG9uZW50UmVmO1xuICAgIH1cblxuICAgIC8qKiBHZXRzIHRoZSByb290IEhUTUxFbGVtZW50IGZvciBhbiBpbnN0YW50aWF0ZWQgY29tcG9uZW50LiAqL1xuICAgIHByaXZhdGUgZ2V0Q29tcG9uZW50Um9vdE5vZGUoY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55Pik6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIChjb21wb25lbnRSZWYuaG9zdFZpZXcgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pLnJvb3ROb2Rlc1swXSBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnRPckNvbXBvbmVudHM6IFBsYW5ldENvbXBvbmVudCB8IFBsYW5ldENvbXBvbmVudFtdKSB7XG4gICAgICAgIGNvbnN0IGFwcCA9IHRoaXMubmdNb2R1bGVSZWYuaW5zdGFuY2UuYXBwTmFtZTtcbiAgICAgICAgdGhpcy5nZXRQbGFudEFwcFJlZihhcHApLnN1YnNjcmliZSgoYXBwUmVmOiBOZ1BsYW5ldEFwcGxpY2F0aW9uUmVmKSA9PiB7XG4gICAgICAgICAgICBhcHBSZWYucmVnaXN0ZXJDb21wb25lbnRGYWN0b3J5KChjb21wb25lbnROYW1lOiBzdHJpbmcsIGNvbmZpZzogUGxhbnRDb21wb25lbnRDb25maWc8YW55PikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb2VyY2VBcnJheShjb21wb25lbnRPckNvbXBvbmVudHMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsYW5ldENvbXBvbmVudCA9IGNvbXBvbmVudHMuZmluZChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzQ29tcG9uZW50VHlwZShpdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyByZWZsZWN0Q29tcG9uZW50VHlwZShpdGVtKS5zZWxlY3Rvci5pbmNsdWRlcyhjb21wb25lbnROYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtLm5hbWUgPT09IGNvbXBvbmVudE5hbWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHBsYW5ldENvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuYXR0YWNoQ29tcG9uZW50PGFueT4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDb21wb25lbnRUeXBlKHBsYW5ldENvbXBvbmVudCkgPyBwbGFuZXRDb21wb25lbnQgOiBwbGFuZXRDb21wb25lbnQuY29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcFJlZi5hcHBNb2R1bGVSZWYuaW5qZWN0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYHVucmVnaXN0ZXJlZCBjb21wb25lbnQgJHtjb21wb25lbnROYW1lfSBpbiBhcHAgJHthcHB9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyKGNvbXBvbmVudHM6IFBsYW5ldENvbXBvbmVudCB8IFBsYW5ldENvbXBvbmVudFtdKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckNvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxvYWQ8VENvbXAgPSB1bmtub3duLCBURGF0YSA9IHVua25vd24+KFxuICAgICAgICBhcHA6IHN0cmluZyxcbiAgICAgICAgY29tcG9uZW50TmFtZTogc3RyaW5nLFxuICAgICAgICBjb25maWc6IFBsYW50Q29tcG9uZW50Q29uZmlnPFREYXRhPlxuICAgICk6IE9ic2VydmFibGU8UGxhbmV0Q29tcG9uZW50UmVmPFRDb21wPj4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldFBsYW50QXBwUmVmKGFwcCkucGlwZShcbiAgICAgICAgICAgIGRlbGF5V2hlbigoYXBwUmVmOiBOZ1BsYW5ldEFwcGxpY2F0aW9uUmVmKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFwcFJlZi5nZXRDb21wb25lbnRGYWN0b3J5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKCcnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIHJlZ2lzdGVyIHVzZSAnc2V0VGltZW91dCcsc28gdGltZXIgMjBcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVyKDIwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcChhcHBSZWYgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSBhcHBSZWYuZ2V0Q29tcG9uZW50RmFjdG9yeSgpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnRGYWN0b3J5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRGYWN0b3J5PFREYXRhLCBUQ29tcD4oY29tcG9uZW50TmFtZSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7YXBwfSdzIGNvbXBvbmVudCgke2NvbXBvbmVudE5hbWV9KSBpcyBub3QgcmVnaXN0ZXJlZGApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoKVxuICAgICAgICApO1xuICAgICAgICByZXN1bHQuc3Vic2NyaWJlKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuIl19
|
|
@@ -4,4 +4,4 @@ export class PlantComponentConfig {
|
|
|
4
4
|
this.initialState = null;
|
|
5
5
|
}
|
|
6
6
|
}
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbnQtY29tcG9uZW50LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYW5ldC9zcmMvY29tcG9uZW50L3BsYW50LWNvbXBvbmVudC5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLG9CQUFvQjtJQUFqQztRQVlJLG9EQUFvRDtRQUNwRCxpQkFBWSxHQUFrQixJQUFJLENBQUM7SUFLdkMsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmlld0NvbnRhaW5lclJlZiwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY2xhc3MgUGxhbnRDb21wb25lbnRDb25maWc8VERhdGEgPSBhbnk+IHtcbiAgICAvKiogTG9hZCB0YXJnZXQgY29udGFpbmVyICovXG4gICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCB8IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQgfCBhbnk+IHwgQ29tbWVudDtcbiAgICAvKipcbiAgICAgKiBXcmFwcGVyIGNsYXNzIG9mIHBsYW50IGNvbXBvbmVudFxuICAgICAqIEBkZXByZWNhdGVkIHBsZWFzZSB1c2UgaG9zdENsYXNzXG4gICAgICovXG4gICAgd3JhcHBlckNsYXNzPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEhvc3QgY2xhc3Mgb2YgcGxhbnQgY29tcG9uZW50XG4gICAgICovXG4gICAgaG9zdENsYXNzPzogc3RyaW5nO1xuICAgIC8qKiBEYXRhIGJlaW5nIGluamVjdGVkIGludG8gdGhlIGNoaWxkIGNvbXBvbmVudC4gKi9cbiAgICBpbml0aWFsU3RhdGU/OiBURGF0YSB8IG51bGwgPSBudWxsO1xuICAgIC8qKlxuICAgICAqIFByb2plY3RhYmxlIG5vZGVzXG4gICAgICovXG4gICAgcHJvamVjdGFibGVOb2Rlcz86IE5vZGVbXVtdO1xufVxuIl19
|
package/esm2022/planet.mjs
CHANGED
|
@@ -15,9 +15,15 @@ export class Planet {
|
|
|
15
15
|
get planetApplicationService() {
|
|
16
16
|
return getApplicationService();
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* @deprecated please use loading signal
|
|
20
|
+
*/
|
|
18
21
|
get loadingDone() {
|
|
19
22
|
return this.planetApplicationLoader.loadingDone;
|
|
20
23
|
}
|
|
24
|
+
get loading() {
|
|
25
|
+
return this.planetApplicationLoader.loading;
|
|
26
|
+
}
|
|
21
27
|
get appStatusChange() {
|
|
22
28
|
return this.planetApplicationLoader.appStatusChange;
|
|
23
29
|
}
|
|
@@ -88,4 +94,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
88
94
|
}, {
|
|
89
95
|
type: Optional
|
|
90
96
|
}] }] });
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbmV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvcGxhbmV0L3NyYy9wbGFuZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFlLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JFLE9BQU8sRUFBb0MsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsdUJBQXVCLEVBQStDLE1BQU0seUNBQXlDLENBQUM7QUFFL0gsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUUsT0FBTyxFQUNILHdCQUF3QixFQUN4QixvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDeEIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDOzs7QUFLMUMsTUFBTSxPQUFPLE1BQU07SUFDZixJQUFZLHVCQUF1QjtRQUMvQixPQUFPLG9CQUFvQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQVksd0JBQXdCO1FBQ2hDLE9BQU8scUJBQXFCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFdBQVc7UUFDbEIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDO0lBQ3BELENBQUM7SUFFRCxJQUFXLE9BQU87UUFDZCxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN0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YWJsZSwgSW5qZWN0LCBPcHRpb25hbCwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlckV2ZW50LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUGxhbmV0T3B0aW9ucywgUGxhbmV0QXBwbGljYXRpb24sIFBMQU5FVF9BUFBMSUNBVElPTlMgfSBmcm9tICcuL3BsYW5ldC5jbGFzcyc7XG5pbXBvcnQgeyBQbGFuZXRBcHBsaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuL2FwcGxpY2F0aW9uL3BsYW5ldC1hcHBsaWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBsYW5ldEFwcGxpY2F0aW9uTG9hZGVyLCBBcHBzTG9hZGluZ1N0YXJ0RXZlbnQsIEFwcFN0YXR1c0NoYW5nZUV2ZW50IH0gZnJvbSAnLi9hcHBsaWNhdGlvbi9wbGFuZXQtYXBwbGljYXRpb24tbG9hZGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBzdGFydFdpdGgsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICAgIHNldFBvcnRhbEFwcGxpY2F0aW9uRGF0YSxcbiAgICBzZXRBcHBsaWNhdGlvbkxvYWRlcixcbiAgICBzZXRBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgZ2V0QXBwbGljYXRpb25Mb2FkZXIsXG4gICAgZ2V0QXBwbGljYXRpb25TZXJ2aWNlXG59IGZyb20gJy4vZ2xvYmFsLXBsYW5ldCc7XG5pbXBvcnQgeyBzZXREZWJ1Z0ZhY3RvcnkgfSBmcm9tICcuL2RlYnVnJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQbGFuZXQge1xuICAgIHByaXZhdGUgZ2V0IHBsYW5ldEFwcGxpY2F0aW9uTG9hZGVyKCk6IFBsYW5ldEFwcGxpY2F0aW9uTG9hZGVyIHtcbiAgICAgICAgcmV0dXJuIGdldEFwcGxpY2F0aW9uTG9hZGVyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgcGxhbmV0QXBwbGljYXRpb25TZXJ2aWNlKCkge1xuICAgICAgICByZXR1cm4gZ2V0QXBwbGljYXRpb25TZXJ2aWNlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgcGxlYXNlIHVzZSBsb2FkaW5nIHNpZ25hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbG9hZGluZ0RvbmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYW5ldEFwcGxpY2F0aW9uTG9hZGVyLmxvYWRpbmdEb25lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9hZGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGxhbmV0QXBwbGljYXRpb25Mb2FkZXIubG9hZGluZztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFwcFN0YXR1c0NoYW5nZSgpOiBPYnNlcnZhYmxlPEFwcFN0YXR1c0NoYW5nZUV2ZW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYW5ldEFwcGxpY2F0aW9uTG9hZGVyLmFwcFN0YXR1c0NoYW5nZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFwcHNMb2FkaW5nU3RhcnQoKTogT2JzZXJ2YWJsZTxBcHBzTG9hZGluZ1N0YXJ0RXZlbnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGxhbmV0QXBwbGljYXRpb25Mb2FkZXIuYXBwc0xvYWRpbmdTdGFydDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgQEluamVjdChQTEFORVRfQVBQTElDQVRJT05TKSBAT3B0aW9uYWwoKSBwbGFuZXRBcHBsaWNhdGlvbnM6IFBsYW5ldEFwcGxpY2F0aW9uW11cbiAgICApIHtcbiAgICAgICAgaWYgKCF0aGlzLnBsYW5ldEFwcGxpY2F0aW9uTG9hZGVyKSB7XG4gICAgICAgICAgICBzZXRBcHBsaWNhdGlvbkxvYWRlcih0aGlzLmluamVjdG9yLmdldChQbGFuZXRBcHBsaWNhdGlvbkxvYWRlcikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5wbGFuZXRBcHBsaWNhdGlvblNlcnZpY2UpIHtcbiAgICAgICAgICAgIHNldEFwcGxpY2F0aW9uU2VydmljZSh0aGlzLmluamVjdG9yLmdldChQbGFuZXRBcHBsaWNhdGlvblNlcnZpY2UpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwbGFuZXRBcHBsaWNhdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJBcHBzKHBsYW5ldEFwcGxpY2F0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRPcHRpb25zKG9wdGlvbnM6IFBhcnRpYWw8UGxhbmV0T3B0aW9ucz4pIHtcbiAgICAgICAgdGhpcy5wbGFuZXRBcHBsaWNhdGlvbkxvYWRlci5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBpZiAob3B0aW9ucy5kZWJ1Z0ZhY3RvcnkpIHtcbiAgICAgICAgICAgIHNldERlYnVnRmFjdG9yeShvcHRpb25zLmRlYnVnRmFjdG9yeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRQb3J0YWxBcHBEYXRhPFQ+KGRhdGE6IFQpIHtcbiAgICAgICAgc2V0UG9ydGFsQXBwbGljYXRpb25EYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyQXBwPFRFeHRyYT4oYXBwOiBQbGFuZXRBcHBsaWNhdGlvbjxURXh0cmE+KSB7XG4gICAgICAgIHRoaXMucGxhbmV0QXBwbGljYXRpb25TZXJ2aWNlLnJlZ2lzdGVyKGFwcCk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJBcHBzPFRFeHRyYT4oYXBwczogUGxhbmV0QXBwbGljYXRpb248VEV4dHJhPltdKSB7XG4gICAgICAgIHRoaXMucGxhbmV0QXBwbGljYXRpb25TZXJ2aWNlLnJlZ2lzdGVyKGFwcHMpO1xuICAgIH1cblxuICAgIHVucmVnaXN0ZXJBcHAobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucGxhbmV0QXBwbGljYXRpb25TZXJ2aWNlLnVucmVnaXN0ZXIobmFtZSk7XG4gICAgfVxuXG4gICAgZ2V0QXBwcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGxhbmV0QXBwbGljYXRpb25TZXJ2aWNlLmdldEFwcHMoKTtcbiAgICB9XG5cbiAgICBzdGFydCgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSAodGhpcy5yb3V0ZXIuZXZlbnRzIGFzIE9ic2VydmFibGU8Um91dGVyRXZlbnQ+KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZDtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtYXAoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGV2ZW50IGFzIE5hdmlnYXRpb25FbmQpLnVybEFmdGVyUmVkaXJlY3RzIHx8IGV2ZW50LnVybDtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgobG9jYXRpb24ucGF0aG5hbWUpLFxuICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHVybDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGFuZXRBcHBsaWNhdGlvbkxvYWRlci5yZXJvdXRlKHtcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0b3AoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cbn1cbiJdfQ==
|