@c8y/ngx-components 1021.0.4 → 1021.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/branding/shared/data/store-branding.service.mjs +2 -2
- package/esm2022/location/location.component.mjs +1 -1
- package/esm2022/map/map.component.mjs +23 -21
- package/esm2022/sensor-phone/sensor-phone-modal/sensor-phone-modal.component.mjs +3 -3
- package/esm2022/sub-assets/location/asset-location.component.mjs +1 -1
- package/esm2022/tracking/tracking.component.mjs +2 -2
- package/esm2022/widgets/implementations/cockpit-welcome/welcome.component.mjs +3 -3
- package/esm2022/widgets/implementations/map/map-widget-config.component.mjs +7 -3
- package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-location.mjs +1 -1
- package/fesm2022/c8y-ngx-components-location.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-map.mjs +22 -20
- package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs +2 -2
- package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-tracking.mjs +1 -1
- package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs +2 -2
- package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +6 -2
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
- package/locales/locales.pot +1 -1
- package/map/map.component.d.ts +8 -6
- package/map/map.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/widgets/implementations/map/map-widget-config.component.d.ts +2 -2
- package/widgets/implementations/map/map-widget-config.component.d.ts.map +1 -1
|
@@ -227,7 +227,7 @@ export class StoreBrandingService {
|
|
|
227
227
|
* If no branding was found (e.g. status 404), an error is thrown.
|
|
228
228
|
*/
|
|
229
229
|
async getBrandingOptionsForVersion(version) {
|
|
230
|
-
const url = `/apps/public/public-options${version ? `@${version}` : ''}/${this.fileNames.options}`;
|
|
230
|
+
const url = `/apps/public/public-options${version ? `@${version}` : ''}/${this.fileNames.options}?nocache=${new Date().getTime()}`;
|
|
231
231
|
const response = await this.fetch.fetch(url);
|
|
232
232
|
if (response.status !== 200) {
|
|
233
233
|
throw Error(`Unexpected status code: ${response.status}`);
|
|
@@ -337,4 +337,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
337
337
|
type: Injectable,
|
|
338
338
|
args: [{ providedIn: 'root' }]
|
|
339
339
|
}], ctorParameters: () => [{ type: i1.ApplicationService }, { type: i1.InventoryService }, { type: i1.InventoryBinaryService }, { type: i2.ZipService }, { type: i1.FetchClient }, { type: i3.BrandingVersionService }, { type: i2.AppStateService }, { type: i4.StaticAssetsService }, { type: i2.ThemeSwitcherService }] });
|
|
340
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtYnJhbmRpbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2JyYW5kaW5nL3NoYXJlZC9kYXRhL3N0b3JlLWJyYW5kaW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGVBQWUsRUFDZixXQUFXLEVBSVgsc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUNqQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RixPQUFPLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBdUIsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RixPQUFPLEVBQWUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7O0FBMkIxRjs7R0FFRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFnQi9CLFlBQ1Usa0JBQXNDLEVBQ3RDLFNBQTJCLEVBQzNCLE1BQThCLEVBQzlCLEdBQWUsRUFDZixLQUFrQixFQUNsQixzQkFBOEMsRUFDOUMsUUFBeUIsRUFDekIsWUFBaUMsRUFDakMsYUFBbUM7UUFSbkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixXQUFNLEdBQU4sTUFBTSxDQUF3QjtRQUM5QixRQUFHLEdBQUgsR0FBRyxDQUFZO1FBQ2YsVUFBSyxHQUFMLEtBQUssQ0FBYTtRQUNsQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxrQkFBYSxHQUFiLGFBQWEsQ0FBc0I7UUF4QnBDLGNBQVMsR0FBRztZQUNuQixPQUFPLEVBQUUsY0FBYztZQUN2QixRQUFRLEVBQUUsaUJBQWlCO1lBQzNCLGFBQWEsRUFBRSxvQkFBb0I7U0FDM0IsQ0FBQztRQUNGLG1CQUFjLEdBQUc7WUFDeEIsSUFBSSxFQUFFLGdCQUFnQjtZQUN0QixXQUFXLEVBQUUsZ0JBQWdCO1lBQzdCLEdBQUcsRUFBRSxvQkFBb0I7WUFDekIsV0FBVyxFQUFFLDZEQUE2RDtZQUMxRSxhQUFhLEVBQUUsSUFBSTtZQUNuQixJQUFJLEVBQUUsZUFBZSxDQUFDLE1BQU07WUFDNUIsWUFBWSxFQUFFLHVCQUF1QixDQUFDLE1BQU07U0FDYixDQUFDO1FBQ2xDLG1DQUE4QixHQUFHLElBQUksZUFBZSxDQUFPLElBQUksQ0FBQyxDQUFDO0lBVzlELENBQUM7SUFFSjs7T0FFRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsZUFBNkIsRUFBRSxHQUFrQjtRQUNsRSxNQUFNLGFBQWEsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7UUFDaEUsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDeEMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQztRQUN4QyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxvQkFBb0IsQ0FDeEIsR0FBa0I7UUFFbEIsTUFBTSxhQUFhLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQixPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDcEQsQ0FBQztRQUNELE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JGLElBQUksY0FBYyxHQUNoQixRQUFRO1lBQ04sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FDdkIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGlDQUFpQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDN0UsT0FBTztvQkFDTCxRQUFRLEVBQUUsU0FBUztvQkFDbkIsSUFBSSxFQUFFLElBQUk7b0JBQ1YsRUFBRSxFQUFFLEdBQUcsQ0FBQyxRQUFRO29CQUNoQixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87b0JBQ3BCLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUU7b0JBQ3BCLGdCQUFnQixFQUFFLGFBQWE7aUJBQ2hDLENBQUM7WUFDSixDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDaEQsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztRQUNILENBQUMsQ0FBQztZQUNGLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsUUFBUSxJQUFJLGFBQWEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMvQyxjQUFjLEdBQUc7Z0JBQ2Y7b0JBQ0UsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsRUFBRSxFQUFFLGFBQWEsQ0FBQyxlQUFlO29CQUNqQyxPQUFPLEVBQUUsV0FBVztvQkFDcEIsUUFBUSxFQUFFLENBQUM7b0JBQ1gsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQztvQkFDM0IsZ0JBQWdCLEVBQUUsYUFBYTtpQkFDaEM7YUFDRixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLDZCQUE2QixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLHVCQUF1QjtRQUMzQixNQUFNLFlBQVksR0FBMkIsRUFBRSxDQUFDO1FBQ2hELE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFVLENBQUM7UUFDdkQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1FBQzlDLEtBQUssTUFBTSxLQUFLLElBQUksbUJBQW1CLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9DLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQyxNQUFNLGVBQWUsR0FBRztnQkFDdEIseUJBQXlCO2dCQUN6QixnQkFBZ0I7YUFDK0IsQ0FBQztZQUNsRCxNQUFNLE1BQU0sR0FBRyxrQkFBa0I7aUJBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxNQUFhLENBQUMsQ0FBQztpQkFDMUQsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUNwQixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUN4RCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ2pFLE1BQU0sTUFBTSxHQUFHLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7b0JBQ3RDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDL0IsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQztnQkFDRCxJQUFJLEtBQUssR0FBb0IsV0FBVyxJQUFJLGdCQUFnQixDQUFDO2dCQUM3RCxJQUFJLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxHQUFVLENBQUMsRUFBRSxDQUFDO29CQUM1QyxJQUFJLENBQUM7d0JBQ0gsS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDbkUsQ0FBQztvQkFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO3dCQUNYLE9BQU8sQ0FBQyxJQUFJLENBQ1YsK0JBQStCLEdBQUcsa0NBQWtDLEtBQUssR0FBRyxFQUM1RSxDQUFDLENBQ0YsQ0FBQzt3QkFDRixPQUFPLElBQUksQ0FBQztvQkFDZCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNsRCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDVCxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRXpDLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLDBDQUEwQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FDYixRQUFnQixFQUNoQixXQUFtQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWE7UUFFL0MsT0FBTyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3JELFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUN0QyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQ3hDLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGtCQUFrQixDQUFDLGFBQTRCO1FBQ25ELGFBQWEsR0FBRyxhQUFhLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7UUFDcEUsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLDZCQUE2QixDQUFDLFFBQXdCO1FBQzFELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QixPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBQ0QsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ25ELEdBQUcsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUN4QixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQztRQUNILE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM1QixNQUFNLGtCQUFrQixHQUN0QixRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUssRUFBcUIsQ0FBQztZQUN4RSxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLGtCQUFrQixDQUFDO1lBQ2xELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUNoQixJQUFpQixFQUNqQixPQUFlLEVBQ2YsT0FBaUIsRUFBRSxFQUNuQixnQkFBK0I7UUFNL0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLGtCQUFrQixPQUFPLE1BQU0sQ0FBQyxDQUFDO1FBQzdGLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBRTdFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCO2FBQ25ELE1BQU0sQ0FBQyxhQUFhLENBQUM7YUFDckIsd0JBQXdCLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDOUQsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDO2dCQUNuQyxFQUFFLEVBQUUsYUFBYSxDQUFDLEVBQUU7Z0JBQ3BCLGVBQWUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUU7YUFDdEMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLHFCQUFxQixDQUFDLE9BQWUsRUFBRSxhQUE0QjtRQUN2RSxhQUFhLEdBQUcsYUFBYSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLGFBQWEsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLDhCQUE4QixDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsVUFBK0IsRUFBRTtRQUNwRCxPQUFPLENBQUMsV0FBVyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0MsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO1lBQ25DLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUU7WUFDdkUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQzdGLENBQUMsQ0FBQztRQUNILE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQ2YsT0FBZSxFQUNmLFVBQStCLEVBQUUsRUFDakMsT0FBaUIsRUFBRSxFQUNuQixnQkFBK0I7UUFNL0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRS9DLE9BQU8sTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxPQUFnQjtRQUNqRCxNQUFNLEdBQUcsR0FBRyw4QkFBOEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuRyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdDLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUM1QixNQUFNLEtBQUssQ0FBQywyQkFBMkIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RDLE9BQU8sT0FBOEIsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsb0JBQW9CLENBQ3hCLFFBQTZCLEVBQzdCLGNBQXNCLEVBQ3RCLHVCQUFpQyxFQUFFLEVBQ25DLFVBQW1CO1FBRW5CLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDdkQsTUFBTSxjQUFjLEdBQUcsVUFBVTtZQUMvQixDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLDRCQUE0QixDQUFDLFVBQVUsQ0FBQztZQUN0RSxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXRFLE1BQU0sU0FBUyxHQUFHLG9CQUFvQixDQUFDO1FBQ3ZDLGlDQUFpQztRQUNqQyw4SUFBOEk7UUFDOUksMEpBQTBKO1FBQzFKLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDOUUsQ0FBQztRQUNELE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ2xFLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNYLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7b0JBQ3pCLE1BQU0sQ0FBQyxDQUFDO2dCQUNWLENBQUM7WUFDSCxDQUFDO1lBQ0QsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsYUFBYSxFQUFFLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMvRixDQUFDO1FBRUQsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxZQUFxQztRQUtwRixJQUFJLHdCQUE2QyxDQUFDO1FBQ2xELElBQUksZ0JBQWdCLEdBQXdCLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUM7WUFDSCx3QkFBd0IsR0FBRyxNQUFNLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1lBQ3JFLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLElBQUksQ0FBQywyRUFBMkUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvRixDQUFDO1FBRUQsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQix3QkFBd0IsR0FBRyx3QkFBd0IsSUFBSSxFQUFFLENBQUM7WUFDMUQsTUFBTSxlQUFlLEdBQUcsd0JBQXdCLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQztZQUN2RSxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM3Qyx3QkFBd0IsQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1FBQzdELENBQUM7UUFFRCxJQUFJLHdCQUF3QixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDO2dCQUNILE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMzRix3QkFBd0IsR0FBRyxJQUFJLENBQUMsc0NBQXNDLENBQ3BFLHdCQUF3QixFQUN4QixTQUFTLEVBQ1QsU0FBUyxDQUNWLENBQUM7WUFDSixDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLHlEQUF5RCxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdFLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBRTdELE1BQU0sbUJBQW1CLEdBQUcsU0FBUyxDQUFDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FDbkMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLDRCQUE0QixDQUFDLG1CQUFtQixDQUFDLEVBQzdFLHdCQUF3QixJQUFJLEVBQUUsRUFDOUIsQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLENBQUMsRUFDL0IsZ0JBQWdCLENBQ2pCLENBQUM7UUFFRixNQUFNLG9CQUFvQixHQUFHLFVBQVUsQ0FBQztRQUN4QyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQ3BCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyw0QkFBNEIsQ0FBQyxvQkFBb0IsQ0FBQyxFQUM5RSxnQkFBZ0IsRUFDaEIsQ0FBQyxvQkFBb0IsQ0FBQyxFQUN0QixnQkFBZ0IsQ0FDakIsQ0FBQztRQUVGLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsc0NBQXNDLENBQ3BDLFFBQTZCLEVBQzdCLFNBQXdCLEVBQ3hCLFNBQXdCO1FBRXhCLElBQUksb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRCxLQUFLLE1BQU0sUUFBUSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsRixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3JCLFNBQVM7WUFDWCxDQUFDO1lBQ0Qsd0RBQXdEO1lBQ3hELElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzNDLFNBQVM7WUFDWCxDQUFDO1lBRUQsOERBQThEO1lBQzlELG9CQUFvQixHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5RixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVPLEtBQUssQ0FBQyxtQkFBbUI7UUFDL0IsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RixJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFN0YsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVPLEtBQUssQ0FBQyxzQkFBc0I7UUFDbEMsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2hGLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQzs4R0E3WVUsb0JBQW9CO2tIQUFwQixvQkFBb0IsY0FEUCxNQUFNOzsyRkFDbkIsb0JBQW9CO2tCQURoQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5LFxuICBBcHBsaWNhdGlvblR5cGUsXG4gIEZldGNoQ2xpZW50LFxuICBJQXBwbGljYXRpb24sXG4gIElBcHBsaWNhdGlvbkJpbmFyeSxcbiAgSU1hbmFnZWRPYmplY3QsXG4gIEludmVudG9yeUJpbmFyeVNlcnZpY2UsXG4gIEludmVudG9yeVNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlLCBUaGVtZVN3aXRjaGVyU2VydmljZSwgWmlwU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgZGVmZXIsIEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIHVuaXEgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQnJhbmRpbmdWZXJzaW9uU2VydmljZSB9IGZyb20gJy4vYnJhbmRpbmctdmVyc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEJyYW5kaW5nT3B0aW9uc0pzb24sIGFsbEJyYW5kaW5nQ1NTVmFycywgbnVtYmVyQnJhbmRpbmdWYXJzIH0gZnJvbSAnLi9icmFuZGluZy50eXBlJztcbmltcG9ydCB7IFN0YXRpY0Fzc2V0LCBTdGF0aWNBc3NldHNTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9zdGF0aWMtYXNzZXRzL2RhdGEnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJyYW5kVmVyc2lvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgcmV2aXNpb246IG51bWJlcjtcbiAgdmVyc2lvbjogc3RyaW5nO1xuICB0YWdzOiBzdHJpbmdbXTtcbiAgb3duZXI/OiBzdHJpbmc7XG4gIGxhc3RVcGRhdGVkPzogc3RyaW5nO1xuICBwdWJsaWNPcHRpb25zQXBwPzogSUFwcGxpY2F0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJyYW5kaW5nRmlsZURldGFpbHMge1xuICBmaWxlTmFtZTogc3RyaW5nO1xuICBibG9iOiBCbG9iO1xuICBqc29uQ29udGVudD86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCcmFuZGluZ0ZpbGVEZXRhaWxzTGVnYWN5IHtcbiAgcGF0aDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBibG9iPzogQmxvYjtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgdXJsV3JhcHBlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBTZXJ2aWNlIHRvIGxvYWQgYW5kIHN0b3JlIHRoZSBicmFuZGluZyBvZiB0aGUgdGVuYW50LlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFN0b3JlQnJhbmRpbmdTZXJ2aWNlIHtcbiAgcmVhZG9ubHkgZmlsZU5hbWVzID0ge1xuICAgIG9wdGlvbnM6ICdvcHRpb25zLmpzb24nLFxuICAgIG1hbmlmZXN0OiAnY3VtdWxvY2l0eS5qc29uJyxcbiAgICBleHBvcnRaaXBOYW1lOiAncHVibGljLW9wdGlvbnMuemlwJ1xuICB9IGFzIGNvbnN0O1xuICByZWFkb25seSBtYW5pZmVzdFZhbHVlcyA9IHtcbiAgICBuYW1lOiAncHVibGljLW9wdGlvbnMnLFxuICAgIGNvbnRleHRQYXRoOiAncHVibGljLW9wdGlvbnMnLFxuICAgIGtleTogJ3B1YmxpYy1vcHRpb25zLWtleScsXG4gICAgZGVzY3JpcHRpb246ICdBcHBsaWNhdGlvbiBjb250YWluaW5nIHN0YXRpYyBhc3NldHMgdXNlZCBieSBlLmcuIGJyYW5kaW5nLicsXG4gICAgbm9BcHBTd2l0Y2hlcjogdHJ1ZSxcbiAgICB0eXBlOiBBcHBsaWNhdGlvblR5cGUuSE9TVEVELFxuICAgIGF2YWlsYWJpbGl0eTogQXBwbGljYXRpb25BdmFpbGFiaWxpdHkuU0hBUkVEXG4gIH0gYXMgY29uc3Qgc2F0aXNmaWVzIElBcHBsaWNhdGlvbjtcbiAgcmVmcmVzaFRyaWdnZXJCcmFuZGluZ1ZhcmlhbnRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDx2b2lkPihudWxsKTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvblNlcnZpY2U6IEFwcGxpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGludmVudG9yeTogSW52ZW50b3J5U2VydmljZSxcbiAgICBwcml2YXRlIGJpbmFyeTogSW52ZW50b3J5QmluYXJ5U2VydmljZSxcbiAgICBwcml2YXRlIHppcDogWmlwU2VydmljZSxcbiAgICBwcml2YXRlIGZldGNoOiBGZXRjaENsaWVudCxcbiAgICBwcml2YXRlIGJyYW5kaW5nVmVyc2lvblNlcnZpY2U6IEJyYW5kaW5nVmVyc2lvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RhdGljQXNzZXRzOiBTdGF0aWNBc3NldHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGhlbWVTd2l0Y2hlcjogVGhlbWVTd2l0Y2hlclNlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBgbGF0ZXN0YCB0YWcgb24gdGhlIHByb3ZpZGVkIGJyYW5kaW5nIHZlcnNpb24uIE1ha2luZyBpdCB0aGUgZ2xvYmFsIGFjdGl2ZSBicmFuZGluZy5cbiAgICovXG4gIGFzeW5jIG1hcmtBc0FjdGl2ZShicmFuZGluZ1ZlcnNpb246IEJyYW5kVmVyc2lvbiwgYXBwPzogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcHVibGljT3B0aW9ucyA9IGFwcCB8fCAoYXdhaXQgdGhpcy5nZXRQdWJsaWNPcHRpb25zQXBwKCkpO1xuICAgIGNvbnN0IHRhZ3MgPSBicmFuZGluZ1ZlcnNpb24udGFncyB8fCBbXTtcbiAgICBjb25zdCB2ZXJzaW9uID0gYnJhbmRpbmdWZXJzaW9uLnZlcnNpb247XG4gICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2Uuc2V0UGFja2FnZVZlcnNpb25UYWcocHVibGljT3B0aW9ucywgdmVyc2lvbiwgWy4uLnRhZ3MsICdsYXRlc3QnXSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYnJhbmRpbmdzIG9mIHRoZSB0ZW5hbnQuXG4gICAqIElmIG5vIHB1YmxpYyBvcHRpb25zIGFwcCBpcyBmb3VuZCwgcHVibGljT3B0aW9ucyB3aWxsIGJlIHVuZGVmaW5lZCBhbmQgdmFyaWFudHMgYW4gZW1wdHkgYXJyYXkuXG4gICAqIEZvciBvbGQgYnJhbmRpbmdzIChjcmVhdGVkIHdpdGhvdXQgdmVyc2lvbmluZykgYSBkZWZhdWx0IHZlcnNpb24gaXMgcmV0dXJuZWQuXG4gICAqL1xuICBhc3luYyBsb2FkQnJhbmRpbmdWYXJpYW50cyhcbiAgICBhcHA/OiBJQXBwbGljYXRpb25cbiAgKTogUHJvbWlzZTx7IHB1YmxpY09wdGlvbnM6IElBcHBsaWNhdGlvbiB8IHVuZGVmaW5lZDsgdmFyaWFudHM6IEJyYW5kVmVyc2lvbltdIH0+IHtcbiAgICBjb25zdCBwdWJsaWNPcHRpb25zID0gYXBwIHx8IChhd2FpdCB0aGlzLmdldFB1YmxpY09wdGlvbnNBcHAoKSk7XG4gICAgaWYgKCFwdWJsaWNPcHRpb25zKSB7XG4gICAgICByZXR1cm4geyBwdWJsaWNPcHRpb25zOiB1bmRlZmluZWQsIHZhcmlhbnRzOiBbXSB9O1xuICAgIH1cbiAgICBjb25zdCB7IGRhdGE6IHZlcnNpb25zIH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0VmVyc2lvbnMocHVibGljT3B0aW9ucyk7XG4gICAgbGV0IG1hcHBlZFZlcnNpb25zOiBCcmFuZFZlcnNpb25bXSA9XG4gICAgICB2ZXJzaW9uc1xuICAgICAgICA/Lm1hcCh0bXAgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IG5hbWUsIGl0ZXJhdGlvbiB9ID1cbiAgICAgICAgICAgICAgdGhpcy5icmFuZGluZ1ZlcnNpb25TZXJ2aWNlLnNwbGl0QnJhbmRpbmdJbnRvTmFtZUFuZEl0ZXJhdGlvbih0bXAudmVyc2lvbik7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICByZXZpc2lvbjogaXRlcmF0aW9uLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpZDogdG1wLmJpbmFyeUlkLFxuICAgICAgICAgICAgICB2ZXJzaW9uOiB0bXAudmVyc2lvbixcbiAgICAgICAgICAgICAgdGFnczogdG1wLnRhZ3MgfHwgW10sXG4gICAgICAgICAgICAgIHB1YmxpY09wdGlvbnNBcHA6IHB1YmxpY09wdGlvbnNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gcGFyc2UgdmVyc2lvbicsIHRtcCwgZSk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgPy5maWx0ZXIoQm9vbGVhbikgfHwgW107XG4gICAgaWYgKCF2ZXJzaW9ucyAmJiBwdWJsaWNPcHRpb25zLmFjdGl2ZVZlcnNpb25JZCkge1xuICAgICAgbWFwcGVkVmVyc2lvbnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnZGVmYXVsdCcsXG4gICAgICAgICAgaWQ6IHB1YmxpY09wdGlvbnMuYWN0aXZlVmVyc2lvbklkLFxuICAgICAgICAgIHZlcnNpb246ICdkZWZhdWx0LTEnLFxuICAgICAgICAgIHJldmlzaW9uOiAxLFxuICAgICAgICAgIHRhZ3M6IFsnbGF0ZXN0JywgJ2RlZmF1bHQnXSxcbiAgICAgICAgICBwdWJsaWNPcHRpb25zQXBwOiBwdWJsaWNPcHRpb25zXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuXG4gICAgY29uc3QgdmFyaWFudHMgPSBhd2FpdCB0aGlzLmdldE1ldGFkYXRhT2ZCcmFuZGluZ0JpbmFyaWVzKG1hcHBlZFZlcnNpb25zKTtcbiAgICByZXR1cm4geyBwdWJsaWNPcHRpb25zLCB2YXJpYW50cyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFdpbGwgY3JlYXRlIGEgdGhlIGluaXRpYWwgYnJhbmRpbmcgYmFzZWQgb24gdGhlIGN1cnJlbnRseSBhcHBsaWVkIENTUyB2YXJpYWJsZXMuXG4gICAqL1xuICBhc3luYyBnZXRTdGFydGVkVXNpbmdCcmFuZGluZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhbGxWYXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBjb25zdCB0aGVtZVRvUmV0cmlldmVWYXJzID0gWydsaWdodCcsICdkYXJrJ10gYXMgY29uc3Q7XG4gICAgY29uc3QgdW5yZXRyaWV2YWJsZVZhcnMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgdGhlbWUgb2YgdGhlbWVUb1JldHJpZXZlVmFycykge1xuICAgICAgdGhpcy50aGVtZVN3aXRjaGVyLnRlbXBvcmFyeUNoYW5nZVRoZW1lKHRoZW1lKTtcbiAgICAgIGNvbnN0IHN0eWxlcyA9IGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSk7XG4gICAgICBjb25zdCB2YXJpYWJsZXNUb1NraXAgPSBbXG4gICAgICAgICduYXZpZ2F0b3ItcGxhdGZvcm0tbG9nbycsXG4gICAgICAgICdicmFuZC1sb2dvLWltZydcbiAgICAgIF0gc2F0aXNmaWVzICh0eXBlb2YgYWxsQnJhbmRpbmdDU1NWYXJzKVtudW1iZXJdW107XG4gICAgICBjb25zdCB2YWx1ZXMgPSBhbGxCcmFuZGluZ0NTU1ZhcnNcbiAgICAgICAgLmZpbHRlcihjc3NWYXIgPT4gIXZhcmlhYmxlc1RvU2tpcC5pbmNsdWRlcyhjc3NWYXIgYXMgYW55KSlcbiAgICAgICAgLnJlZHVjZSgocHJldiwga2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgZGlyZWN0VmFsdWUgPSBzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShgLS0ke2tleX1gKTtcbiAgICAgICAgICBjb25zdCBjOHlQcmVmaXhlZFZhbHVlID0gc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoYC0tYzh5LSR7a2V5fWApO1xuICAgICAgICAgIGNvbnN0IG5ld0tleSA9IHRoZW1lID09PSAnbGlnaHQnID8ga2V5IDogYGRhcmstJHtrZXl9YDtcbiAgICAgICAgICBpZiAoIWRpcmVjdFZhbHVlICYmICFjOHlQcmVmaXhlZFZhbHVlKSB7XG4gICAgICAgICAgICB1bnJldHJpZXZhYmxlVmFycy5wdXNoKG5ld0tleSk7XG4gICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgPSBkaXJlY3RWYWx1ZSB8fCBjOHlQcmVmaXhlZFZhbHVlO1xuICAgICAgICAgIGlmIChudW1iZXJCcmFuZGluZ1ZhcnMuaW5jbHVkZXMoa2V5IGFzIGFueSkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyLnBhcnNlRmxvYXQodmFsdWUucmVwbGFjZSgvW0EtWmEtel0vZywgJycpLnRyaW0oKSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICBgRmFpbGVkIHRvIHBhcnNlIG51bWJlciBmb3IgXCIke2tleX1cIiB2YWx1ZSB0aGF0IGZhaWxlZCB0byBwYXJzZTogXCIke3ZhbHVlfVwiYCxcbiAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihwcmV2LCB7IFtuZXdLZXldOiB2YWx1ZSB9KTtcbiAgICAgICAgfSwge30pO1xuICAgICAgT2JqZWN0LmFzc2lnbihhbGxWYXJpYWJsZXMsIHZhbHVlcyk7XG4gICAgfVxuICAgIHRoaXMudGhlbWVTd2l0Y2hlci5yZXNldFRlbXBvcmFyeVRoZW1lKCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jcmVhdGVQdWJsaWNPcHRpb25zQXBwRnJvbUluaGVyaXRlZE9wdGlvbnMoYWxsVmFyaWFibGVzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0WmlwRm9yQmluYXJ5KFxuICAgIGJpbmFyeUlkOiBzdHJpbmcsXG4gICAgZmlsZU5hbWU6IHN0cmluZyA9IHRoaXMuZmlsZU5hbWVzLmV4cG9ydFppcE5hbWVcbiAgKTogT2JzZXJ2YWJsZTxGaWxlPiB7XG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IHRoaXMuYmluYXJ5LmRvd25sb2FkKGJpbmFyeUlkKSkucGlwZShcbiAgICAgIHN3aXRjaE1hcChyZXNwb25zZSA9PiByZXNwb25zZS5ibG9iKCkpLFxuICAgICAgbWFwKGJsb2IgPT4gbmV3IEZpbGUoW2Jsb2JdLCBmaWxlTmFtZSkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBwdWJsaWMgb3B0aW9ucyBhcHAgYW5kIHRoZXJlZm9yZSBhbGwgYnJhbmRpbmdzLlxuICAgKiBUaGUgcHVibGljIG9wdGlvbnMgYXBwIGNhbiBiZSBvcHRpb25hbGx5IHByb3ZpZGVkIHRvIGF2b2lkIGFub3RoZXIgcmVxdWVzdCBmb3IgaXQuXG4gICAqL1xuICBhc3luYyBkZWxldGVBbGxCcmFuZGluZ3MocHVibGljT3B0aW9ucz86IElBcHBsaWNhdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIHB1YmxpY09wdGlvbnMgPSBwdWJsaWNPcHRpb25zIHx8IChhd2FpdCB0aGlzLmdldFB1YmxpY09wdGlvbnNBcHAoKSk7XG4gICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlKHB1YmxpY09wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuaGFuY2VzIHRoZSBwcm92aWRlZCBicmFuZGluZyB2ZXJzaW9ucyB3aXRoIG1ldGFkYXRhIGZyb20gdGhlIGxpbmtlZCBiaW5hcmllcy5cbiAgICogSXQgd2lsbCBhZGQgdGhlIG93bmVyIGFuZCBsYXN0VXBkYXRlZCBmaWVsZHMgdG8gdGhlIHZlcnNpb25zLlxuICAgKiBUaGUgcHJvdmlkZWQgYXJyYXkgaXMgYWx0ZXJlZC5cbiAgICovXG4gIGFzeW5jIGdldE1ldGFkYXRhT2ZCcmFuZGluZ0JpbmFyaWVzKHZlcnNpb25zOiBCcmFuZFZlcnNpb25bXSk6IFByb21pc2U8QnJhbmRWZXJzaW9uW10+IHtcbiAgICBjb25zdCBiaW5hcnlJZHMgPSB1bmlxKHZlcnNpb25zLm1hcCh0bXAgPT4gdG1wLmlkKSk7XG4gICAgaWYgKCFiaW5hcnlJZHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbnM7XG4gICAgfVxuICAgIGNvbnN0IHsgZGF0YTogbWV0YWRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5Lmxpc3Qoe1xuICAgICAgaWRzOiBiaW5hcnlJZHMuam9pbignLCcpLFxuICAgICAgcGFnZVNpemU6IDIwMDBcbiAgICB9KTtcbiAgICByZXR1cm4gdmVyc2lvbnMubWFwKHZlcnNpb24gPT4ge1xuICAgICAgY29uc3QgbWV0YWRhdGFGb3JWZXJzaW9uID1cbiAgICAgICAgbWV0YWRhdGEuZmluZCh0bXAgPT4gdG1wLmlkID09PSB2ZXJzaW9uLmlkKSB8fCAoe30gYXMgSU1hbmFnZWRPYmplY3QpO1xuICAgICAgY29uc3QgeyBvd25lciwgbGFzdFVwZGF0ZWQgfSA9IG1ldGFkYXRhRm9yVmVyc2lvbjtcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHZlcnNpb24sIHsgb3duZXIsIGxhc3RVcGRhdGVkIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRoZSBwcm92aWRlZCBicmFuZGluZyBhcyBhIG5ldyB2ZXJzaW9uIGZvciB0aGUgcHVibGljIG9wdGlvbnMgYXBwLlxuICAgKiBUaGUgcHVibGljIG9wdGlvbnMgYXBwIGNhbiBiZSBvcHRpb25hbGx5IHByb3ZpZGVkIHRvIGF2b2lkIGFub3RoZXIgcmVxdWVzdCBmb3IgaXQuXG4gICAqL1xuICBhc3luYyBzYXZlQnJhbmRpbmcoXG4gICAgYmxvYjogQmxvYiB8IEZpbGUsXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICAgIHRhZ3M6IHN0cmluZ1tdID0gW10sXG4gICAgcHVibGljT3B0aW9uc0FwcD86IElBcHBsaWNhdGlvblxuICApOiBQcm9taXNlPHtcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgYmluYXJ5OiBJQXBwbGljYXRpb25CaW5hcnk7XG4gICAgdGFnczogc3RyaW5nW107XG4gIH0+IHtcbiAgICBjb25zdCBmaWxlID0gYmxvYiBpbnN0YW5jZW9mIEZpbGUgPyBibG9iIDogbmV3IEZpbGUoW2Jsb2JdLCBgcHVibGljLW9wdGlvbnMtJHt2ZXJzaW9ufS56aXBgKTtcbiAgICBjb25zdCBwdWJsaWNPcHRpb25zID0gcHVibGljT3B0aW9uc0FwcCB8fCAoYXdhaXQgdGhpcy5nZXRQdWJsaWNPcHRpb25zQXBwKCkpO1xuXG4gICAgY29uc3QgeyBkYXRhOiBiaW5hcnkgfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlXG4gICAgICAuYmluYXJ5KHB1YmxpY09wdGlvbnMpXG4gICAgICAudXBsb2FkQXBwbGljYXRpb25WZXJzaW9uKGZpbGUsIHZlcnNpb24sIHRhZ3MpO1xuICAgIGlmICghcHVibGljT3B0aW9ucy5hY3RpdmVWZXJzaW9uSWQgfHwgdGFncy5pbmNsdWRlcygnbGF0ZXN0JykpIHtcbiAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnVwZGF0ZSh7XG4gICAgICAgIGlkOiBwdWJsaWNPcHRpb25zLmlkLFxuICAgICAgICBhY3RpdmVWZXJzaW9uSWQ6IGAke2JpbmFyeS5iaW5hcnlJZH1gXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5yZWZyZXNoVHJpZ2dlckJyYW5kaW5nVmFyaWFudHMubmV4dCgpO1xuICAgIHJldHVybiB7IHZlcnNpb24sIGJpbmFyeSwgdGFncyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBicmFuZGluZyB2ZXJzaW9uIGZyb20gdGhlIHB1YmxpYyBvcHRpb25zIGFwcC5cbiAgICogVGhlIHB1YmxpYyBvcHRpb25zIGFwcCBjYW4gYmUgb3B0aW9uYWxseSBwcm92aWRlZCB0byBhdm9pZCBhbm90aGVyIHJlcXVlc3QgZm9yIGl0LlxuICAgKi9cbiAgYXN5bmMgZGVsZXRlQnJhbmRpbmdWZXJzaW9uKHZlcnNpb246IHN0cmluZywgcHVibGljT3B0aW9ucz86IElBcHBsaWNhdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIHB1YmxpY09wdGlvbnMgPSBwdWJsaWNPcHRpb25zIHx8IChhd2FpdCB0aGlzLmdldFB1YmxpY09wdGlvbnNBcHAoKSk7XG4gICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlVmVyc2lvblBhY2thZ2UocHVibGljT3B0aW9ucywgeyB2ZXJzaW9uIH0pO1xuICAgIHRoaXMucmVmcmVzaFRyaWdnZXJCcmFuZGluZ1ZhcmlhbnRzLm5leHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBibG9iIG9mIGEgemlwIGZpbGUgY29udGFpbmluZyB0aGUgcHJvdmlkZWQgYnJhbmRpbmcgb3B0aW9ucyAob3B0aW9ucy5qc29uKSBhbmQgdGhlIG1hbmlmZXN0IChjdW11bG9jaXR5Lmpzb24pLlxuICAgKi9cbiAgYXN5bmMgZ2V0QnJhbmRpbmdaaXAoY29udGVudDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KTogUHJvbWlzZTxCbG9iPiB7XG4gICAgY29udGVudC5sYXN0VXBkYXRlZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICBjb25zdCBjb250ZW50QXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShjb250ZW50KTtcbiAgICBjb25zdCB6aXAgPSBhd2FpdCB0aGlzLnppcC5jcmVhdGVaaXAoW1xuICAgICAgeyBmaWxlTmFtZTogdGhpcy5maWxlTmFtZXMub3B0aW9ucywgYmxvYjogbmV3IEJsb2IoW2NvbnRlbnRBc1N0cmluZ10pIH0sXG4gICAgICB7IGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lcy5tYW5pZmVzdCwgYmxvYjogbmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KHRoaXMubWFuaWZlc3RWYWx1ZXMpXSkgfVxuICAgIF0pO1xuICAgIHJldHVybiB6aXA7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBicmFuZGluZyB2ZXJzaW9uIHRvIHRoZSBwdWJsaWMgb3B0aW9ucyBhcHAuXG4gICAqIFRoZSBwdWJsaWMgb3B0aW9ucyBhcHAgY2FuIGJlIG9wdGlvbmFsbHkgcHJvdmlkZWQgdG8gYXZvaWQgYW5vdGhlciByZXF1ZXN0IGZvciBpdC5cbiAgICovXG4gIGFzeW5jIGFkZEJyYW5kaW5nKFxuICAgIHZlcnNpb246IHN0cmluZyxcbiAgICBjb250ZW50OiBCcmFuZGluZ09wdGlvbnNKc29uID0ge30sXG4gICAgdGFnczogc3RyaW5nW10gPSBbXSxcbiAgICBwdWJsaWNPcHRpb25zQXBwPzogSUFwcGxpY2F0aW9uXG4gICk6IFByb21pc2U8e1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICBiaW5hcnk6IElBcHBsaWNhdGlvbkJpbmFyeTtcbiAgICB0YWdzOiBzdHJpbmdbXTtcbiAgfT4ge1xuICAgIGNvbnN0IHppcCA9IGF3YWl0IHRoaXMuZ2V0QnJhbmRpbmdaaXAoY29udGVudCk7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5zYXZlQnJhbmRpbmcoemlwLCB2ZXJzaW9uLCB0YWdzLCBwdWJsaWNPcHRpb25zQXBwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBicmFuZGluZyBvcHRpb25zIGZvciB0aGUgcHJvdmlkZWQgdmVyc2lvbi5cbiAgICogSWYgbm8gYnJhbmRpbmcgd2FzIGZvdW5kIChlLmcuIHN0YXR1cyA0MDQpLCBhbiBlcnJvciBpcyB0aHJvd24uXG4gICAqL1xuICBhc3luYyBnZXRCcmFuZGluZ09wdGlvbnNGb3JWZXJzaW9uKHZlcnNpb24/OiBzdHJpbmcpOiBQcm9taXNlPEJyYW5kaW5nT3B0aW9uc0pzb24+IHtcbiAgICBjb25zdCB1cmwgPSBgL2FwcHMvcHVibGljL3B1YmxpYy1vcHRpb25zJHt2ZXJzaW9uID8gYEAke3ZlcnNpb259YCA6ICcnfS8ke3RoaXMuZmlsZU5hbWVzLm9wdGlvbnN9YDtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2guZmV0Y2godXJsKTtcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgIHRocm93IEVycm9yKGBVbmV4cGVjdGVkIHN0YXR1cyBjb2RlOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIHJldHVybiBjb250ZW50IGFzIEJyYW5kaW5nT3B0aW9uc0pzb247XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgYSBuZXcgaXRlcmF0aW9uIG9mIGFuIGFscmVhZHkgZXhpc3RpbmcgYnJhbmRpbmcuXG4gICAqL1xuICBhc3luYyBzYXZlRXhpc3RpbmdCcmFuZGluZyhcbiAgICBicmFuZGluZzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBjdXJyZW50VmVyc2lvbjogc3RyaW5nLFxuICAgIHRhZ3NPZkN1cnJlbnRWZXJzaW9uOiBzdHJpbmdbXSA9IFtdLFxuICAgIG5ld1ZlcnNpb24/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBwdWJsaWNPcHRpb25zID0gYXdhaXQgdGhpcy5nZXRQdWJsaWNPcHRpb25zQXBwKCk7XG4gICAgY29uc3QgdmVyc2lvblRvQmVTZXQgPSBuZXdWZXJzaW9uXG4gICAgICA/IHRoaXMuYnJhbmRpbmdWZXJzaW9uU2VydmljZS5jcmVhdGVJbml0aWFsQnJhbmRpbmdWZXJzaW9uKG5ld1ZlcnNpb24pXG4gICAgICA6IHRoaXMuYnJhbmRpbmdWZXJzaW9uU2VydmljZS5idW1wQnJhbmRpbmdJdGVyYXRpb24oY3VycmVudFZlcnNpb24pO1xuXG4gICAgY29uc3QgZmluYWxUYWdzID0gdGFnc09mQ3VycmVudFZlcnNpb247XG4gICAgLy8gb25seSBhcHBseSBsYXRlc3QgdGFnIGRpcmVjdGx5XG4gICAgLy8gdGhlcmUgc2VlbXMgdG8gYmUgc29tZSBzcGVjaWFsIGhhbmRsaW5nIGZvciB0aGUgbGF0ZXN0IHRhZyBpbiB0aGUgYmFja2VuZCwgdGhhdCBhbGxvd3MgdG8gZGlyZWN0bHkgbW92ZSBpdCB3aGlsZSB1cGxvYWRpbmcgdGhlIG5ldyB2ZXJzaW9uLlxuICAgIC8vIGZvciBhbGwgb3RoZXIgdGFncyB0aGlzIHJlc3VsdHMgaW4gYSA0MDkgY29uZmxpY3QuIFdlIHRoZXJlZm9yZSBuZWVkIHRvIGZpcnN0IGRlbGV0ZSB0aGUgb2xkIHZlcnNpb24sIGJlZm9yZSBzZXR0aW5nIHRoZSBvdGhlciB0YWdzIG9uIHRoZSBuZXcgdmVyc2lvbi5cbiAgICBpZiAoIW5ld1ZlcnNpb24pIHtcbiAgICAgIHRhZ3NPZkN1cnJlbnRWZXJzaW9uID0gdGFnc09mQ3VycmVudFZlcnNpb24uZmlsdGVyKHRhZyA9PiB0YWcgPT09ICdsYXRlc3QnKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5hZGRCcmFuZGluZyh2ZXJzaW9uVG9CZVNldCwgYnJhbmRpbmcsIHRhZ3NPZkN1cnJlbnRWZXJzaW9uLCBwdWJsaWNPcHRpb25zKTtcbiAgICBpZiAoIW5ld1ZlcnNpb24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlQnJhbmRpbmdWZXJzaW9uKGN1cnJlbnRWZXJzaW9uLCBwdWJsaWNPcHRpb25zKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUucmVzLnN0YXR1cyAhPT0gNDA0KSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2Uuc2V0UGFja2FnZVZlcnNpb25UYWcocHVibGljT3B0aW9ucywgdmVyc2lvblRvQmVTZXQsIGZpbmFsVGFncyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcnNpb25Ub0JlU2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbWJpbmVzIGN1cnJlbnQgYnJhbmRpbmcgb3B0aW9ucyB3aXRoIHRoZSBwcm92aWRlZCBicmFuZGluZyB2YXJpYWJsZXMgYW5kIGNyZWF0ZXMgYSBuZXcgcHVibGljIG9wdGlvbnMgYXBwLlxuICAgKiBBbnkgYXNzZXRzIGluIHRoZSBicmFuZGluZyB3aWxsIGJlIGNsb25lZC5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZVB1YmxpY09wdGlvbnNBcHBGcm9tSW5oZXJpdGVkT3B0aW9ucyhicmFuZGluZ1ZhcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTx7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGJpbmFyeTogSUFwcGxpY2F0aW9uQmluYXJ5O1xuICAgIHRhZ3M6IHN0cmluZ1tdO1xuICB9PiB7XG4gICAgbGV0IGN1cnJlbnRseUFwcGxpZWRCcmFuZGluZzogQnJhbmRpbmdPcHRpb25zSnNvbjtcbiAgICBsZXQgZmFsbEJhY2tCcmFuZGluZzogQnJhbmRpbmdPcHRpb25zSnNvbiA9IHt9O1xuICAgIHRyeSB7XG4gICAgICBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcgPSBhd2FpdCB0aGlzLmdldEJyYW5kaW5nT3B0aW9uc0ZvclZlcnNpb24oKTtcbiAgICAgIGZhbGxCYWNrQnJhbmRpbmcgPSBjbG9uZURlZXAoY3VycmVudGx5QXBwbGllZEJyYW5kaW5nKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBnZXQgY3VycmVudGx5IGFwcGxpZWQgYnJhbmRpbmcsIHByb2NlZWRpbmcgd2l0aCBlbXB0eSBicmFuZGluZy4nLCBlKTtcbiAgICB9XG5cbiAgICBpZiAoYnJhbmRpbmdWYXJzKSB7XG4gICAgICBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcgPSBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcgfHwge307XG4gICAgICBjb25zdCBicmFuZGluZ0Nzc1ZhcnMgPSBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcuYnJhbmRpbmdDc3NWYXJzIHx8IHt9O1xuICAgICAgT2JqZWN0LmFzc2lnbihicmFuZGluZ0Nzc1ZhcnMsIGJyYW5kaW5nVmFycyk7XG4gICAgICBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcuYnJhbmRpbmdDc3NWYXJzID0gYnJhbmRpbmdDc3NWYXJzO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgb2xkQXNzZXRzLCBuZXdBc3NldHMgfSA9IGF3YWl0IHRoaXMuc3RhdGljQXNzZXRzLmNsb25lQXNzZXRzSW50b1RlbmFudCgnYnJhbmRpbmcnKTtcbiAgICAgICAgY3VycmVudGx5QXBwbGllZEJyYW5kaW5nID0gdGhpcy5yZXBsYWNlQnJhbmRpbmdBc3NldHNJbkJyYW5kaW5nT3B0aW9ucyhcbiAgICAgICAgICBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcsXG4gICAgICAgICAgb2xkQXNzZXRzLFxuICAgICAgICAgIG5ld0Fzc2V0c1xuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byByZWxvY2F0ZSBicmFuZGluZyBhc3NldHMgaW50byBjdXJyZW50IHRlbmFudC4nLCBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwdWJsaWNPcHRpb25zQXBwID0gYXdhaXQgdGhpcy5jcmVhdGVQdWJsaWNPcHRpb25zQXBwKCk7XG5cbiAgICBjb25zdCBkZWZhdWx0QnJhbmRpbmdOYW1lID0gYGRlZmF1bHRgO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYWRkQnJhbmRpbmcoXG4gICAgICB0aGlzLmJyYW5kaW5nVmVyc2lvblNlcnZpY2UuY3JlYXRlSW5pdGlhbEJyYW5kaW5nVmVyc2lvbihkZWZhdWx0QnJhbmRpbmdOYW1lKSxcbiAgICAgIGN1cnJlbnRseUFwcGxpZWRCcmFuZGluZyB8fCB7fSxcbiAgICAgIFsnbGF0ZXN0JywgZGVmYXVsdEJyYW5kaW5nTmFtZV0sXG4gICAgICBwdWJsaWNPcHRpb25zQXBwXG4gICAgKTtcblxuICAgIGNvbnN0IGZhbGxiYWNrQnJhbmRpbmdOYW1lID0gYGZhbGxiYWNrYDtcbiAgICBhd2FpdCB0aGlzLmFkZEJyYW5kaW5nKFxuICAgICAgdGhpcy5icmFuZGluZ1ZlcnNpb25TZXJ2aWNlLmNyZWF0ZUluaXRpYWxCcmFuZGluZ1ZlcnNpb24oZmFsbGJhY2tCcmFuZGluZ05hbWUpLFxuICAgICAgZmFsbEJhY2tCcmFuZGluZyxcbiAgICAgIFtmYWxsYmFja0JyYW5kaW5nTmFtZV0sXG4gICAgICBwdWJsaWNPcHRpb25zQXBwXG4gICAgKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIGFzc2V0cyBpbiB0aGUgYnJhbmRpbmcgb3B0aW9ucyB3aXRoIHRoZSBuZXcgYXNzZXRzLlxuICAgKiBHb2VzIHRocm91Z2ggdGhlIHByb3ZpZGVkIGBvbGRBc3NldHNgIGFuZCByZXBsYWNlcyB0aGVpciBvY2N1cnJlbmNlcyBpbiB0aGUgYnJhbmRpbmcgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBgbmV3QXNzZXRzYCBlbnRyeSBzaGFyaW5nIHRoZSBzYW1lIGZpbGVOYW1lLlxuICAgKiBSZXR1cm5zIHRoZSB1cGRhdGVkIGJyYW5kaW5nIG9wdGlvbnMuXG4gICAqL1xuICByZXBsYWNlQnJhbmRpbmdBc3NldHNJbkJyYW5kaW5nT3B0aW9ucyhcbiAgICBicmFuZGluZzogQnJhbmRpbmdPcHRpb25zSnNvbixcbiAgICBvbGRBc3NldHM6IFN0YXRpY0Fzc2V0W10sXG4gICAgbmV3QXNzZXRzOiBTdGF0aWNBc3NldFtdXG4gICk6IEJyYW5kaW5nT3B0aW9uc0pzb24ge1xuICAgIGxldCBicmFuZGluZ0FzSlNPTlN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGJyYW5kaW5nKTtcbiAgICBmb3IgKGNvbnN0IG9sZEFzc2V0IG9mIG9sZEFzc2V0cykge1xuICAgICAgY29uc3QgbmV3TG9jYXRlZEFzc2V0ID0gbmV3QXNzZXRzLmZpbmQodG1wID0+IHRtcC5maWxlTmFtZSA9PT0gb2xkQXNzZXQuZmlsZU5hbWUpO1xuICAgICAgaWYgKCFuZXdMb2NhdGVkQXNzZXQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgcGF0aCBpcyB0aGUgc2FtZSwgd2UgZG9uJ3QgbmVlZCB0byByZXBsYWNlIGl0LlxuICAgICAgaWYgKG9sZEFzc2V0LnBhdGggPT09IG5ld0xvY2F0ZWRBc3NldC5wYXRoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiB1c2UgcHJvcGVyIHJlcGxhY2VBbGwgb25jZSBpdCdzIGF2YWlsYWJsZSB3aXRoIGVzMjAyMVxuICAgICAgYnJhbmRpbmdBc0pTT05TdHJpbmcgPSBicmFuZGluZ0FzSlNPTlN0cmluZy5zcGxpdChvbGRBc3NldC5wYXRoKS5qb2luKG5ld0xvY2F0ZWRBc3NldC5wYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoYnJhbmRpbmdBc0pTT05TdHJpbmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRQdWJsaWNPcHRpb25zQXBwKCkge1xuICAgIGxldCB7IGRhdGE6IGFwcHMgfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3RCeU5hbWUodGhpcy5tYW5pZmVzdFZhbHVlcy5uYW1lKTtcbiAgICBhcHBzID0gYXBwcy5maWx0ZXIoYXBwID0+IGFwcC5vd25lcj8udGVuYW50Py5pZCA9PT0gdGhpcy5hcHBTdGF0ZS5jdXJyZW50VGVuYW50LnZhbHVlPy5uYW1lKTtcblxuICAgIHJldHVybiBhcHBzWzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVQdWJsaWNPcHRpb25zQXBwKCkge1xuICAgIGNvbnN0IHsgZGF0YTogYXBwIH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5jcmVhdGUodGhpcy5tYW5pZmVzdFZhbHVlcyk7XG4gICAgcmV0dXJuIGFwcDtcbiAgfVxufVxuIl19
|
|
340
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtYnJhbmRpbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2JyYW5kaW5nL3NoYXJlZC9kYXRhL3N0b3JlLWJyYW5kaW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGVBQWUsRUFDZixXQUFXLEVBSVgsc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUNqQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RixPQUFPLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBdUIsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RixPQUFPLEVBQWUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7O0FBMkIxRjs7R0FFRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFnQi9CLFlBQ1Usa0JBQXNDLEVBQ3RDLFNBQTJCLEVBQzNCLE1BQThCLEVBQzlCLEdBQWUsRUFDZixLQUFrQixFQUNsQixzQkFBOEMsRUFDOUMsUUFBeUIsRUFDekIsWUFBaUMsRUFDakMsYUFBbUM7UUFSbkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxjQUFT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QW9CLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlGLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU8sS0FBSyxDQUFDLG1CQUFtQjtRQUMvQixJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hGLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU3RixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRU8sS0FBSyxDQUFDLHNCQUFzQjtRQUNsQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEYsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDOzhHQTdZVSxvQkFBb0I7a0hBQXBCLG9CQUFvQixjQURQLE1BQU07OzJGQUNuQixvQkFBb0I7a0JBRGhDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25BdmFpbGFiaWxpdHksXG4gIEFwcGxpY2F0aW9uVHlwZSxcbiAgRmV0Y2hDbGllbnQsXG4gIElBcHBsaWNhdGlvbixcbiAgSUFwcGxpY2F0aW9uQmluYXJ5LFxuICBJTWFuYWdlZE9iamVjdCxcbiAgSW52ZW50b3J5QmluYXJ5U2VydmljZSxcbiAgSW52ZW50b3J5U2VydmljZVxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UsIFRoZW1lU3dpdGNoZXJTZXJ2aWNlLCBaaXBTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBkZWZlciwgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGNsb25lRGVlcCwgdW5pcSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCcmFuZGluZ1ZlcnNpb25TZXJ2aWNlIH0gZnJvbSAnLi9icmFuZGluZy12ZXJzaW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQnJhbmRpbmdPcHRpb25zSnNvbiwgYWxsQnJhbmRpbmdDU1NWYXJzLCBudW1iZXJCcmFuZGluZ1ZhcnMgfSBmcm9tICcuL2JyYW5kaW5nLnR5cGUnO1xuaW1wb3J0IHsgU3RhdGljQXNzZXQsIFN0YXRpY0Fzc2V0c1NlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL3N0YXRpYy1hc3NldHMvZGF0YSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnJhbmRWZXJzaW9uIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICByZXZpc2lvbjogbnVtYmVyO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIHRhZ3M6IHN0cmluZ1tdO1xuICBvd25lcj86IHN0cmluZztcbiAgbGFzdFVwZGF0ZWQ/OiBzdHJpbmc7XG4gIHB1YmxpY09wdGlvbnNBcHA/OiBJQXBwbGljYXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnJhbmRpbmdGaWxlRGV0YWlscyB7XG4gIGZpbGVOYW1lOiBzdHJpbmc7XG4gIGJsb2I6IEJsb2I7XG4gIGpzb25Db250ZW50PzogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJyYW5kaW5nRmlsZURldGFpbHNMZWdhY3kge1xuICBwYXRoOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGJsb2I/OiBCbG9iO1xuICBmaWxlTmFtZTogc3RyaW5nO1xuICB1cmxXcmFwcGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFNlcnZpY2UgdG8gbG9hZCBhbmQgc3RvcmUgdGhlIGJyYW5kaW5nIG9mIHRoZSB0ZW5hbnQuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgU3RvcmVCcmFuZGluZ1NlcnZpY2Uge1xuICByZWFkb25seSBmaWxlTmFtZXMgPSB7XG4gICAgb3B0aW9uczogJ29wdGlvbnMuanNvbicsXG4gICAgbWFuaWZlc3Q6ICdjdW11bG9jaXR5Lmpzb24nLFxuICAgIGV4cG9ydFppcE5hbWU6ICdwdWJsaWMtb3B0aW9ucy56aXAnXG4gIH0gYXMgY29uc3Q7XG4gIHJlYWRvbmx5IG1hbmlmZXN0VmFsdWVzID0ge1xuICAgIG5hbWU6ICdwdWJsaWMtb3B0aW9ucycsXG4gICAgY29udGV4dFBhdGg6ICdwdWJsaWMtb3B0aW9ucycsXG4gICAga2V5OiAncHVibGljLW9wdGlvbnMta2V5JyxcbiAgICBkZXNjcmlwdGlvbjogJ0FwcGxpY2F0aW9uIGNvbnRhaW5pbmcgc3RhdGljIGFzc2V0cyB1c2VkIGJ5IGUuZy4gYnJhbmRpbmcuJyxcbiAgICBub0FwcFN3aXRjaGVyOiB0cnVlLFxuICAgIHR5cGU6IEFwcGxpY2F0aW9uVHlwZS5IT1NURUQsXG4gICAgYXZhaWxhYmlsaXR5OiBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eS5TSEFSRURcbiAgfSBhcyBjb25zdCBzYXRpc2ZpZXMgSUFwcGxpY2F0aW9uO1xuICByZWZyZXNoVHJpZ2dlckJyYW5kaW5nVmFyaWFudHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHZvaWQ+KG51bGwpO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uU2VydmljZTogQXBwbGljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5OiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgYmluYXJ5OiBJbnZlbnRvcnlCaW5hcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgemlwOiBaaXBTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmV0Y2g6IEZldGNoQ2xpZW50LFxuICAgIHByaXZhdGUgYnJhbmRpbmdWZXJzaW9uU2VydmljZTogQnJhbmRpbmdWZXJzaW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdGF0aWNBc3NldHM6IFN0YXRpY0Fzc2V0c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB0aGVtZVN3aXRjaGVyOiBUaGVtZVN3aXRjaGVyU2VydmljZVxuICApIHt9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGBsYXRlc3RgIHRhZyBvbiB0aGUgcHJvdmlkZWQgYnJhbmRpbmcgdmVyc2lvbi4gTWFraW5nIGl0IHRoZSBnbG9iYWwgYWN0aXZlIGJyYW5kaW5nLlxuICAgKi9cbiAgYXN5bmMgbWFya0FzQWN0aXZlKGJyYW5kaW5nVmVyc2lvbjogQnJhbmRWZXJzaW9uLCBhcHA/OiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwdWJsaWNPcHRpb25zID0gYXBwIHx8IChhd2FpdCB0aGlzLmdldFB1YmxpY09wdGlvbnNBcHAoKSk7XG4gICAgY29uc3QgdGFncyA9IGJyYW5kaW5nVmVyc2lvbi50YWdzIHx8IFtdO1xuICAgIGNvbnN0IHZlcnNpb24gPSBicmFuZGluZ1ZlcnNpb24udmVyc2lvbjtcbiAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5zZXRQYWNrYWdlVmVyc2lvblRhZyhwdWJsaWNPcHRpb25zLCB2ZXJzaW9uLCBbLi4udGFncywgJ2xhdGVzdCddKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBicmFuZGluZ3Mgb2YgdGhlIHRlbmFudC5cbiAgICogSWYgbm8gcHVibGljIG9wdGlvbnMgYXBwIGlzIGZvdW5kLCBwdWJsaWNPcHRpb25zIHdpbGwgYmUgdW5kZWZpbmVkIGFuZCB2YXJpYW50cyBhbiBlbXB0eSBhcnJheS5cbiAgICogRm9yIG9sZCBicmFuZGluZ3MgKGNyZWF0ZWQgd2l0aG91dCB2ZXJzaW9uaW5nKSBhIGRlZmF1bHQgdmVyc2lvbiBpcyByZXR1cm5lZC5cbiAgICovXG4gIGFzeW5jIGxvYWRCcmFuZGluZ1ZhcmlhbnRzKFxuICAgIGFwcD86IElBcHBsaWNhdGlvblxuICApOiBQcm9taXNlPHsgcHVibGljT3B0aW9uczogSUFwcGxpY2F0aW9uIHwgdW5kZWZpbmVkOyB2YXJpYW50czogQnJhbmRWZXJzaW9uW10gfT4ge1xuICAgIGNvbnN0IHB1YmxpY09wdGlvbnMgPSBhcHAgfHwgKGF3YWl0IHRoaXMuZ2V0UHVibGljT3B0aW9uc0FwcCgpKTtcbiAgICBpZiAoIXB1YmxpY09wdGlvbnMpIHtcbiAgICAgIHJldHVybiB7IHB1YmxpY09wdGlvbnM6IHVuZGVmaW5lZCwgdmFyaWFudHM6IFtdIH07XG4gICAgfVxuICAgIGNvbnN0IHsgZGF0YTogdmVyc2lvbnMgfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3RWZXJzaW9ucyhwdWJsaWNPcHRpb25zKTtcbiAgICBsZXQgbWFwcGVkVmVyc2lvbnM6IEJyYW5kVmVyc2lvbltdID1cbiAgICAgIHZlcnNpb25zXG4gICAgICAgID8ubWFwKHRtcCA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmFtZSwgaXRlcmF0aW9uIH0gPVxuICAgICAgICAgICAgICB0aGlzLmJyYW5kaW5nVmVyc2lvblNlcnZpY2Uuc3BsaXRCcmFuZGluZ0ludG9OYW1lQW5kSXRlcmF0aW9uKHRtcC52ZXJzaW9uKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHJldmlzaW9uOiBpdGVyYXRpb24sXG4gICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgIGlkOiB0bXAuYmluYXJ5SWQsXG4gICAgICAgICAgICAgIHZlcnNpb246IHRtcC52ZXJzaW9uLFxuICAgICAgICAgICAgICB0YWdzOiB0bXAudGFncyB8fCBbXSxcbiAgICAgICAgICAgICAgcHVibGljT3B0aW9uc0FwcDogcHVibGljT3B0aW9uc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBwYXJzZSB2ZXJzaW9uJywgdG1wLCBlKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICA/LmZpbHRlcihCb29sZWFuKSB8fCBbXTtcbiAgICBpZiAoIXZlcnNpb25zICYmIHB1YmxpY09wdGlvbnMuYWN0aXZlVmVyc2lvbklkKSB7XG4gICAgICBtYXBwZWRWZXJzaW9ucyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdkZWZhdWx0JyxcbiAgICAgICAgICBpZDogcHVibGljT3B0aW9ucy5hY3RpdmVWZXJzaW9uSWQsXG4gICAgICAgICAgdmVyc2lvbjogJ2RlZmF1bHQtMScsXG4gICAgICAgICAgcmV2aXNpb246IDEsXG4gICAgICAgICAgdGFnczogWydsYXRlc3QnLCAnZGVmYXVsdCddLFxuICAgICAgICAgIHB1YmxpY09wdGlvbnNBcHA6IHB1YmxpY09wdGlvbnNcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9XG5cbiAgICBjb25zdCB2YXJpYW50cyA9IGF3YWl0IHRoaXMuZ2V0TWV0YWRhdGFPZkJyYW5kaW5nQmluYXJpZXMobWFwcGVkVmVyc2lvbnMpO1xuICAgIHJldHVybiB7IHB1YmxpY09wdGlvbnMsIHZhcmlhbnRzIH07XG4gIH1cblxuICAvKipcbiAgICogV2lsbCBjcmVhdGUgYSB0aGUgaW5pdGlhbCBicmFuZGluZyBiYXNlZCBvbiB0aGUgY3VycmVudGx5IGFwcGxpZWQgQ1NTIHZhcmlhYmxlcy5cbiAgICovXG4gIGFzeW5jIGdldFN0YXJ0ZWRVc2luZ0JyYW5kaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGFsbFZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGNvbnN0IHRoZW1lVG9SZXRyaWV2ZVZhcnMgPSBbJ2xpZ2h0JywgJ2RhcmsnXSBhcyBjb25zdDtcbiAgICBjb25zdCB1bnJldHJpZXZhYmxlVmFycyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCB0aGVtZSBvZiB0aGVtZVRvUmV0cmlldmVWYXJzKSB7XG4gICAgICB0aGlzLnRoZW1lU3dpdGNoZXIudGVtcG9yYXJ5Q2hhbmdlVGhlbWUodGhlbWUpO1xuICAgICAgY29uc3Qgc3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KTtcbiAgICAgIGNvbnN0IHZhcmlhYmxlc1RvU2tpcCA9IFtcbiAgICAgICAgJ25hdmlnYXRvci1wbGF0Zm9ybS1sb2dvJyxcbiAgICAgICAgJ2JyYW5kLWxvZ28taW1nJ1xuICAgICAgXSBzYXRpc2ZpZXMgKHR5cGVvZiBhbGxCcmFuZGluZ0NTU1ZhcnMpW251bWJlcl1bXTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGFsbEJyYW5kaW5nQ1NTVmFyc1xuICAgICAgICAuZmlsdGVyKGNzc1ZhciA9PiAhdmFyaWFibGVzVG9Ta2lwLmluY2x1ZGVzKGNzc1ZhciBhcyBhbnkpKVxuICAgICAgICAucmVkdWNlKChwcmV2LCBrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCBkaXJlY3RWYWx1ZSA9IHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKGAtLSR7a2V5fWApO1xuICAgICAgICAgIGNvbnN0IGM4eVByZWZpeGVkVmFsdWUgPSBzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShgLS1jOHktJHtrZXl9YCk7XG4gICAgICAgICAgY29uc3QgbmV3S2V5ID0gdGhlbWUgPT09ICdsaWdodCcgPyBrZXkgOiBgZGFyay0ke2tleX1gO1xuICAgICAgICAgIGlmICghZGlyZWN0VmFsdWUgJiYgIWM4eVByZWZpeGVkVmFsdWUpIHtcbiAgICAgICAgICAgIHVucmV0cmlldmFibGVWYXJzLnB1c2gobmV3S2V5KTtcbiAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgdmFsdWU6IHN0cmluZyB8IG51bWJlciA9IGRpcmVjdFZhbHVlIHx8IGM4eVByZWZpeGVkVmFsdWU7XG4gICAgICAgICAgaWYgKG51bWJlckJyYW5kaW5nVmFycy5pbmNsdWRlcyhrZXkgYXMgYW55KSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZS5yZXBsYWNlKC9bQS1aYS16XS9nLCAnJykudHJpbSgpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgIGBGYWlsZWQgdG8gcGFyc2UgbnVtYmVyIGZvciBcIiR7a2V5fVwiIHZhbHVlIHRoYXQgZmFpbGVkIHRvIHBhcnNlOiBcIiR7dmFsdWV9XCJgLFxuICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHByZXYsIHsgW25ld0tleV06IHZhbHVlIH0pO1xuICAgICAgICB9LCB7fSk7XG4gICAgICBPYmplY3QuYXNzaWduKGFsbFZhcmlhYmxlcywgdmFsdWVzKTtcbiAgICB9XG4gICAgdGhpcy50aGVtZVN3aXRjaGVyLnJlc2V0VGVtcG9yYXJ5VGhlbWUoKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNyZWF0ZVB1YmxpY09wdGlvbnNBcHBGcm9tSW5oZXJpdGVkT3B0aW9ucyhhbGxWYXJpYWJsZXMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihlKTtcbiAgICB9XG4gIH1cblxuICBnZXRaaXBGb3JCaW5hcnkoXG4gICAgYmluYXJ5SWQ6IHN0cmluZyxcbiAgICBmaWxlTmFtZTogc3RyaW5nID0gdGhpcy5maWxlTmFtZXMuZXhwb3J0WmlwTmFtZVxuICApOiBPYnNlcnZhYmxlPEZpbGU+IHtcbiAgICByZXR1cm4gZGVmZXIoKCkgPT4gdGhpcy5iaW5hcnkuZG93bmxvYWQoYmluYXJ5SWQpKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlLmJsb2IoKSksXG4gICAgICBtYXAoYmxvYiA9PiBuZXcgRmlsZShbYmxvYl0sIGZpbGVOYW1lKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHB1YmxpYyBvcHRpb25zIGFwcCBhbmQgdGhlcmVmb3JlIGFsbCBicmFuZGluZ3MuXG4gICAqIFRoZSBwdWJsaWMgb3B0aW9ucyBhcHAgY2FuIGJlIG9wdGlvbmFsbHkgcHJvdmlkZWQgdG8gYXZvaWQgYW5vdGhlciByZXF1ZXN0IGZvciBpdC5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZUFsbEJyYW5kaW5ncyhwdWJsaWNPcHRpb25zPzogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcHVibGljT3B0aW9ucyA9IHB1YmxpY09wdGlvbnMgfHwgKGF3YWl0IHRoaXMuZ2V0UHVibGljT3B0aW9uc0FwcCgpKTtcbiAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZWxldGUocHVibGljT3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRW5oYW5jZXMgdGhlIHByb3ZpZGVkIGJyYW5kaW5nIHZlcnNpb25zIHdpdGggbWV0YWRhdGEgZnJvbSB0aGUgbGlua2VkIGJpbmFyaWVzLlxuICAgKiBJdCB3aWxsIGFkZCB0aGUgb3duZXIgYW5kIGxhc3RVcGRhdGVkIGZpZWxkcyB0byB0aGUgdmVyc2lvbnMuXG4gICAqIFRoZSBwcm92aWRlZCBhcnJheSBpcyBhbHRlcmVkLlxuICAgKi9cbiAgYXN5bmMgZ2V0TWV0YWRhdGFPZkJyYW5kaW5nQmluYXJpZXModmVyc2lvbnM6IEJyYW5kVmVyc2lvbltdKTogUHJvbWlzZTxCcmFuZFZlcnNpb25bXT4ge1xuICAgIGNvbnN0IGJpbmFyeUlkcyA9IHVuaXEodmVyc2lvbnMubWFwKHRtcCA9PiB0bXAuaWQpKTtcbiAgICBpZiAoIWJpbmFyeUlkcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB2ZXJzaW9ucztcbiAgICB9XG4gICAgY29uc3QgeyBkYXRhOiBtZXRhZGF0YSB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkubGlzdCh7XG4gICAgICBpZHM6IGJpbmFyeUlkcy5qb2luKCcsJyksXG4gICAgICBwYWdlU2l6ZTogMjAwMFxuICAgIH0pO1xuICAgIHJldHVybiB2ZXJzaW9ucy5tYXAodmVyc2lvbiA9PiB7XG4gICAgICBjb25zdCBtZXRhZGF0YUZvclZlcnNpb24gPVxuICAgICAgICBtZXRhZGF0YS5maW5kKHRtcCA9PiB0bXAuaWQgPT09IHZlcnNpb24uaWQpIHx8ICh7fSBhcyBJTWFuYWdlZE9iamVjdCk7XG4gICAgICBjb25zdCB7IG93bmVyLCBsYXN0VXBkYXRlZCB9ID0gbWV0YWRhdGFGb3JWZXJzaW9uO1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24odmVyc2lvbiwgeyBvd25lciwgbGFzdFVwZGF0ZWQgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgdGhlIHByb3ZpZGVkIGJyYW5kaW5nIGFzIGEgbmV3IHZlcnNpb24gZm9yIHRoZSBwdWJsaWMgb3B0aW9ucyBhcHAuXG4gICAqIFRoZSBwdWJsaWMgb3B0aW9ucyBhcHAgY2FuIGJlIG9wdGlvbmFsbHkgcHJvdmlkZWQgdG8gYXZvaWQgYW5vdGhlciByZXF1ZXN0IGZvciBpdC5cbiAgICovXG4gIGFzeW5jIHNhdmVCcmFuZGluZyhcbiAgICBibG9iOiBCbG9iIHwgRmlsZSxcbiAgICB2ZXJzaW9uOiBzdHJpbmcsXG4gICAgdGFnczogc3RyaW5nW10gPSBbXSxcbiAgICBwdWJsaWNPcHRpb25zQXBwPzogSUFwcGxpY2F0aW9uXG4gICk6IFByb21pc2U8e1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICBiaW5hcnk6IElBcHBsaWNhdGlvbkJpbmFyeTtcbiAgICB0YWdzOiBzdHJpbmdbXTtcbiAgfT4ge1xuICAgIGNvbnN0IGZpbGUgPSBibG9iIGluc3RhbmNlb2YgRmlsZSA/IGJsb2IgOiBuZXcgRmlsZShbYmxvYl0sIGBwdWJsaWMtb3B0aW9ucy0ke3ZlcnNpb259LnppcGApO1xuICAgIGNvbnN0IHB1YmxpY09wdGlvbnMgPSBwdWJsaWNPcHRpb25zQXBwIHx8IChhd2FpdCB0aGlzLmdldFB1YmxpY09wdGlvbnNBcHAoKSk7XG5cbiAgICBjb25zdCB7IGRhdGE6IGJpbmFyeSB9ID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2VcbiAgICAgIC5iaW5hcnkocHVibGljT3B0aW9ucylcbiAgICAgIC51cGxvYWRBcHBsaWNhdGlvblZlcnNpb24oZmlsZSwgdmVyc2lvbiwgdGFncyk7XG4gICAgaWYgKCFwdWJsaWNPcHRpb25zLmFjdGl2ZVZlcnNpb25JZCB8fCB0YWdzLmluY2x1ZGVzKCdsYXRlc3QnKSkge1xuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UudXBkYXRlKHtcbiAgICAgICAgaWQ6IHB1YmxpY09wdGlvbnMuaWQsXG4gICAgICAgIGFjdGl2ZVZlcnNpb25JZDogYCR7YmluYXJ5LmJpbmFyeUlkfWBcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnJlZnJlc2hUcmlnZ2VyQnJhbmRpbmdWYXJpYW50cy5uZXh0KCk7XG4gICAgcmV0dXJuIHsgdmVyc2lvbiwgYmluYXJ5LCB0YWdzIH07XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIGJyYW5kaW5nIHZlcnNpb24gZnJvbSB0aGUgcHVibGljIG9wdGlvbnMgYXBwLlxuICAgKiBUaGUgcHVibGljIG9wdGlvbnMgYXBwIGNhbiBiZSBvcHRpb25hbGx5IHByb3ZpZGVkIHRvIGF2b2lkIGFub3RoZXIgcmVxdWVzdCBmb3IgaXQuXG4gICAqL1xuICBhc3luYyBkZWxldGVCcmFuZGluZ1ZlcnNpb24odmVyc2lvbjogc3RyaW5nLCBwdWJsaWNPcHRpb25zPzogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcHVibGljT3B0aW9ucyA9IHB1YmxpY09wdGlvbnMgfHwgKGF3YWl0IHRoaXMuZ2V0UHVibGljT3B0aW9uc0FwcCgpKTtcbiAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZWxldGVWZXJzaW9uUGFja2FnZShwdWJsaWNPcHRpb25zLCB7IHZlcnNpb24gfSk7XG4gICAgdGhpcy5yZWZyZXNoVHJpZ2dlckJyYW5kaW5nVmFyaWFudHMubmV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGJsb2Igb2YgYSB6aXAgZmlsZSBjb250YWluaW5nIHRoZSBwcm92aWRlZCBicmFuZGluZyBvcHRpb25zIChvcHRpb25zLmpzb24pIGFuZCB0aGUgbWFuaWZlc3QgKGN1bXVsb2NpdHkuanNvbikuXG4gICAqL1xuICBhc3luYyBnZXRCcmFuZGluZ1ppcChjb250ZW50OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pOiBQcm9taXNlPEJsb2I+IHtcbiAgICBjb250ZW50Lmxhc3RVcGRhdGVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgIGNvbnN0IGNvbnRlbnRBc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGNvbnRlbnQpO1xuICAgIGNvbnN0IHppcCA9IGF3YWl0IHRoaXMuemlwLmNyZWF0ZVppcChbXG4gICAgICB7IGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lcy5vcHRpb25zLCBibG9iOiBuZXcgQmxvYihbY29udGVudEFzU3RyaW5nXSkgfSxcbiAgICAgIHsgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWVzLm1hbmlmZXN0LCBibG9iOiBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkodGhpcy5tYW5pZmVzdFZhbHVlcyldKSB9XG4gICAgXSk7XG4gICAgcmV0dXJuIHppcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGJyYW5kaW5nIHZlcnNpb24gdG8gdGhlIHB1YmxpYyBvcHRpb25zIGFwcC5cbiAgICogVGhlIHB1YmxpYyBvcHRpb25zIGFwcCBjYW4gYmUgb3B0aW9uYWxseSBwcm92aWRlZCB0byBhdm9pZCBhbm90aGVyIHJlcXVlc3QgZm9yIGl0LlxuICAgKi9cbiAgYXN5bmMgYWRkQnJhbmRpbmcoXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICAgIGNvbnRlbnQ6IEJyYW5kaW5nT3B0aW9uc0pzb24gPSB7fSxcbiAgICB0YWdzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHB1YmxpY09wdGlvbnNBcHA/OiBJQXBwbGljYXRpb25cbiAgKTogUHJvbWlzZTx7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGJpbmFyeTogSUFwcGxpY2F0aW9uQmluYXJ5O1xuICAgIHRhZ3M6IHN0cmluZ1tdO1xuICB9PiB7XG4gICAgY29uc3QgemlwID0gYXdhaXQgdGhpcy5nZXRCcmFuZGluZ1ppcChjb250ZW50KTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnNhdmVCcmFuZGluZyh6aXAsIHZlcnNpb24sIHRhZ3MsIHB1YmxpY09wdGlvbnNBcHApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGJyYW5kaW5nIG9wdGlvbnMgZm9yIHRoZSBwcm92aWRlZCB2ZXJzaW9uLlxuICAgKiBJZiBubyBicmFuZGluZyB3YXMgZm91bmQgKGUuZy4gc3RhdHVzIDQwNCksIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICovXG4gIGFzeW5jIGdldEJyYW5kaW5nT3B0aW9uc0ZvclZlcnNpb24odmVyc2lvbj86IHN0cmluZyk6IFByb21pc2U8QnJhbmRpbmdPcHRpb25zSnNvbj4ge1xuICAgIGNvbnN0IHVybCA9IGAvYXBwcy9wdWJsaWMvcHVibGljLW9wdGlvbnMke3ZlcnNpb24gPyBgQCR7dmVyc2lvbn1gIDogJyd9LyR7dGhpcy5maWxlTmFtZXMub3B0aW9uc30/bm9jYWNoZT0ke25ldyBEYXRlKCkuZ2V0VGltZSgpfWA7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoLmZldGNoKHVybCk7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICB0aHJvdyBFcnJvcihgVW5leHBlY3RlZCBzdGF0dXMgY29kZTogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICByZXR1cm4gY29udGVudCBhcyBCcmFuZGluZ09wdGlvbnNKc29uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGEgbmV3IGl0ZXJhdGlvbiBvZiBhbiBhbHJlYWR5IGV4aXN0aW5nIGJyYW5kaW5nLlxuICAgKi9cbiAgYXN5bmMgc2F2ZUV4aXN0aW5nQnJhbmRpbmcoXG4gICAgYnJhbmRpbmc6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgY3VycmVudFZlcnNpb246IHN0cmluZyxcbiAgICB0YWdzT2ZDdXJyZW50VmVyc2lvbjogc3RyaW5nW10gPSBbXSxcbiAgICBuZXdWZXJzaW9uPzogc3RyaW5nXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgcHVibGljT3B0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0UHVibGljT3B0aW9uc0FwcCgpO1xuICAgIGNvbnN0IHZlcnNpb25Ub0JlU2V0ID0gbmV3VmVyc2lvblxuICAgICAgPyB0aGlzLmJyYW5kaW5nVmVyc2lvblNlcnZpY2UuY3JlYXRlSW5pdGlhbEJyYW5kaW5nVmVyc2lvbihuZXdWZXJzaW9uKVxuICAgICAgOiB0aGlzLmJyYW5kaW5nVmVyc2lvblNlcnZpY2UuYnVtcEJyYW5kaW5nSXRlcmF0aW9uKGN1cnJlbnRWZXJzaW9uKTtcblxuICAgIGNvbnN0IGZpbmFsVGFncyA9IHRhZ3NPZkN1cnJlbnRWZXJzaW9uO1xuICAgIC8vIG9ubHkgYXBwbHkgbGF0ZXN0IHRhZyBkaXJlY3RseVxuICAgIC8vIHRoZXJlIHNlZW1zIHRvIGJlIHNvbWUgc3BlY2lhbCBoYW5kbGluZyBmb3IgdGhlIGxhdGVzdCB0YWcgaW4gdGhlIGJhY2tlbmQsIHRoYXQgYWxsb3dzIHRvIGRpcmVjdGx5IG1vdmUgaXQgd2hpbGUgdXBsb2FkaW5nIHRoZSBuZXcgdmVyc2lvbi5cbiAgICAvLyBmb3IgYWxsIG90aGVyIHRhZ3MgdGhpcyByZXN1bHRzIGluIGEgNDA5IGNvbmZsaWN0LiBXZSB0aGVyZWZvcmUgbmVlZCB0byBmaXJzdCBkZWxldGUgdGhlIG9sZCB2ZXJzaW9uLCBiZWZvcmUgc2V0dGluZyB0aGUgb3RoZXIgdGFncyBvbiB0aGUgbmV3IHZlcnNpb24uXG4gICAgaWYgKCFuZXdWZXJzaW9uKSB7XG4gICAgICB0YWdzT2ZDdXJyZW50VmVyc2lvbiA9IHRhZ3NPZkN1cnJlbnRWZXJzaW9uLmZpbHRlcih0YWcgPT4gdGFnID09PSAnbGF0ZXN0Jyk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuYWRkQnJhbmRpbmcodmVyc2lvblRvQmVTZXQsIGJyYW5kaW5nLCB0YWdzT2ZDdXJyZW50VmVyc2lvbiwgcHVibGljT3B0aW9ucyk7XG4gICAgaWYgKCFuZXdWZXJzaW9uKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZUJyYW5kaW5nVmVyc2lvbihjdXJyZW50VmVyc2lvbiwgcHVibGljT3B0aW9ucyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChlLnJlcy5zdGF0dXMgIT09IDQwNCkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnNldFBhY2thZ2VWZXJzaW9uVGFnKHB1YmxpY09wdGlvbnMsIHZlcnNpb25Ub0JlU2V0LCBmaW5hbFRhZ3MpO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJzaW9uVG9CZVNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21iaW5lcyBjdXJyZW50IGJyYW5kaW5nIG9wdGlvbnMgd2l0aCB0aGUgcHJvdmlkZWQgYnJhbmRpbmcgdmFyaWFibGVzIGFuZCBjcmVhdGVzIGEgbmV3IHB1YmxpYyBvcHRpb25zIGFwcC5cbiAgICogQW55IGFzc2V0cyBpbiB0aGUgYnJhbmRpbmcgd2lsbCBiZSBjbG9uZWQuXG4gICAqL1xuICBhc3luYyBjcmVhdGVQdWJsaWNPcHRpb25zQXBwRnJvbUluaGVyaXRlZE9wdGlvbnMoYnJhbmRpbmdWYXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8e1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICBiaW5hcnk6IElBcHBsaWNhdGlvbkJpbmFyeTtcbiAgICB0YWdzOiBzdHJpbmdbXTtcbiAgfT4ge1xuICAgIGxldCBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmc6IEJyYW5kaW5nT3B0aW9uc0pzb247XG4gICAgbGV0IGZhbGxCYWNrQnJhbmRpbmc6IEJyYW5kaW5nT3B0aW9uc0pzb24gPSB7fTtcbiAgICB0cnkge1xuICAgICAgY3VycmVudGx5QXBwbGllZEJyYW5kaW5nID0gYXdhaXQgdGhpcy5nZXRCcmFuZGluZ09wdGlvbnNGb3JWZXJzaW9uKCk7XG4gICAgICBmYWxsQmFja0JyYW5kaW5nID0gY2xvbmVEZWVwKGN1cnJlbnRseUFwcGxpZWRCcmFuZGluZyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gZ2V0IGN1cnJlbnRseSBhcHBsaWVkIGJyYW5kaW5nLCBwcm9jZWVkaW5nIHdpdGggZW1wdHkgYnJhbmRpbmcuJywgZSk7XG4gICAgfVxuXG4gICAgaWYgKGJyYW5kaW5nVmFycykge1xuICAgICAgY3VycmVudGx5QXBwbGllZEJyYW5kaW5nID0gY3VycmVudGx5QXBwbGllZEJyYW5kaW5nIHx8IHt9O1xuICAgICAgY29uc3QgYnJhbmRpbmdDc3NWYXJzID0gY3VycmVudGx5QXBwbGllZEJyYW5kaW5nLmJyYW5kaW5nQ3NzVmFycyB8fCB7fTtcbiAgICAgIE9iamVjdC5hc3NpZ24oYnJhbmRpbmdDc3NWYXJzLCBicmFuZGluZ1ZhcnMpO1xuICAgICAgY3VycmVudGx5QXBwbGllZEJyYW5kaW5nLmJyYW5kaW5nQ3NzVmFycyA9IGJyYW5kaW5nQ3NzVmFycztcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudGx5QXBwbGllZEJyYW5kaW5nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IG9sZEFzc2V0cywgbmV3QXNzZXRzIH0gPSBhd2FpdCB0aGlzLnN0YXRpY0Fzc2V0cy5jbG9uZUFzc2V0c0ludG9UZW5hbnQoJ2JyYW5kaW5nJyk7XG4gICAgICAgIGN1cnJlbnRseUFwcGxpZWRCcmFuZGluZyA9IHRoaXMucmVwbGFjZUJyYW5kaW5nQXNzZXRzSW5CcmFuZGluZ09wdGlvbnMoXG4gICAgICAgICAgY3VycmVudGx5QXBwbGllZEJyYW5kaW5nLFxuICAgICAgICAgIG9sZEFzc2V0cyxcbiAgICAgICAgICBuZXdBc3NldHNcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gcmVsb2NhdGUgYnJhbmRpbmcgYXNzZXRzIGludG8gY3VycmVudCB0ZW5hbnQuJywgZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHVibGljT3B0aW9uc0FwcCA9IGF3YWl0IHRoaXMuY3JlYXRlUHVibGljT3B0aW9uc0FwcCgpO1xuXG4gICAgY29uc3QgZGVmYXVsdEJyYW5kaW5nTmFtZSA9IGBkZWZhdWx0YDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFkZEJyYW5kaW5nKFxuICAgICAgdGhpcy5icmFuZGluZ1ZlcnNpb25TZXJ2aWNlLmNyZWF0ZUluaXRpYWxCcmFuZGluZ1ZlcnNpb24oZGVmYXVsdEJyYW5kaW5nTmFtZSksXG4gICAgICBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcgfHwge30sXG4gICAgICBbJ2xhdGVzdCcsIGRlZmF1bHRCcmFuZGluZ05hbWVdLFxuICAgICAgcHVibGljT3B0aW9uc0FwcFxuICAgICk7XG5cbiAgICBjb25zdCBmYWxsYmFja0JyYW5kaW5nTmFtZSA9IGBmYWxsYmFja2A7XG4gICAgYXdhaXQgdGhpcy5hZGRCcmFuZGluZyhcbiAgICAgIHRoaXMuYnJhbmRpbmdWZXJzaW9uU2VydmljZS5jcmVhdGVJbml0aWFsQnJhbmRpbmdWZXJzaW9uKGZhbGxiYWNrQnJhbmRpbmdOYW1lKSxcbiAgICAgIGZhbGxCYWNrQnJhbmRpbmcsXG4gICAgICBbZmFsbGJhY2tCcmFuZGluZ05hbWVdLFxuICAgICAgcHVibGljT3B0aW9uc0FwcFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoZSBhc3NldHMgaW4gdGhlIGJyYW5kaW5nIG9wdGlvbnMgd2l0aCB0aGUgbmV3IGFzc2V0cy5cbiAgICogR29lcyB0aHJvdWdoIHRoZSBwcm92aWRlZCBgb2xkQXNzZXRzYCBhbmQgcmVwbGFjZXMgdGhlaXIgb2NjdXJyZW5jZXMgaW4gdGhlIGJyYW5kaW5nIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgYG5ld0Fzc2V0c2AgZW50cnkgc2hhcmluZyB0aGUgc2FtZSBmaWxlTmFtZS5cbiAgICogUmV0dXJucyB0aGUgdXBkYXRlZCBicmFuZGluZyBvcHRpb25zLlxuICAgKi9cbiAgcmVwbGFjZUJyYW5kaW5nQXNzZXRzSW5CcmFuZGluZ09wdGlvbnMoXG4gICAgYnJhbmRpbmc6IEJyYW5kaW5nT3B0aW9uc0pzb24sXG4gICAgb2xkQXNzZXRzOiBTdGF0aWNBc3NldFtdLFxuICAgIG5ld0Fzc2V0czogU3RhdGljQXNzZXRbXVxuICApOiBCcmFuZGluZ09wdGlvbnNKc29uIHtcbiAgICBsZXQgYnJhbmRpbmdBc0pTT05TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShicmFuZGluZyk7XG4gICAgZm9yIChjb25zdCBvbGRBc3NldCBvZiBvbGRBc3NldHMpIHtcbiAgICAgIGNvbnN0IG5ld0xvY2F0ZWRBc3NldCA9IG5ld0Fzc2V0cy5maW5kKHRtcCA9PiB0bXAuZmlsZU5hbWUgPT09IG9sZEFzc2V0LmZpbGVOYW1lKTtcbiAgICAgIGlmICghbmV3TG9jYXRlZEFzc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIHBhdGggaXMgdGhlIHNhbWUsIHdlIGRvbid0IG5lZWQgdG8gcmVwbGFjZSBpdC5cbiAgICAgIGlmIChvbGRBc3NldC5wYXRoID09PSBuZXdMb2NhdGVkQXNzZXQucGF0aCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVE9ETzogdXNlIHByb3BlciByZXBsYWNlQWxsIG9uY2UgaXQncyBhdmFpbGFibGUgd2l0aCBlczIwMjFcbiAgICAgIGJyYW5kaW5nQXNKU09OU3RyaW5nID0gYnJhbmRpbmdBc0pTT05TdHJpbmcuc3BsaXQob2xkQXNzZXQucGF0aCkuam9pbihuZXdMb2NhdGVkQXNzZXQucGF0aCk7XG4gICAgfVxuICAgIHJldHVybiBKU09OLnBhcnNlKGJyYW5kaW5nQXNKU09OU3RyaW5nKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UHVibGljT3B0aW9uc0FwcCgpIHtcbiAgICBsZXQgeyBkYXRhOiBhcHBzIH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0QnlOYW1lKHRoaXMubWFuaWZlc3RWYWx1ZXMubmFtZSk7XG4gICAgYXBwcyA9IGFwcHMuZmlsdGVyKGFwcCA9PiBhcHAub3duZXI/LnRlbmFudD8uaWQgPT09IHRoaXMuYXBwU3RhdGUuY3VycmVudFRlbmFudC52YWx1ZT8ubmFtZSk7XG5cbiAgICByZXR1cm4gYXBwc1swXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlUHVibGljT3B0aW9uc0FwcCgpIHtcbiAgICBjb25zdCB7IGRhdGE6IGFwcCB9ID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuY3JlYXRlKHRoaXMubWFuaWZlc3RWYWx1ZXMpO1xuICAgIHJldHVybiBhcHA7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -130,7 +130,7 @@ export class LocationComponent {
|
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
132
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: LocationComponent, deps: [{ token: i1.ContextRouteService }, { token: i2.ActivatedRoute }, { token: i3.InventoryService }, { token: i1.Permissions }, { token: i1.OptionsService }, { token: i1.AlertService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
133
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: LocationComponent, selector: "c8y-location", viewQueries: [{ propertyName: "map", first: true, predicate: MapComponent, descendants: true }], ngImport: i0, template: "<c8y-action-bar-item placement=\"right\">\n <button\n class=\"btn btn-link c8y-realtime\"\n title=\"{{ 'Toggle realtime' | translate }}\"\n type=\"button\"\n (click)=\"toggleRealtime()\"\n >\n <span\n class=\"c8y-pulse\"\n [ngClass]=\"{ active: config.realtime, inactive: !config.realtime }\"\n ></span>\n <span translate>Realtime</span>\n </button>\n</c8y-action-bar-item>\n<c8y-action-bar-item placement=\"right\">\n <button\n class=\"btn btn-clean\"\n title=\"{{ 'Center`verb`' | translate }}\"\n (click)=\"centerMap()\"\n >\n <i [c8yIcon]=\"'target1'\"></i>\n <span translate>Center`verb`</span>\n </button>\n</c8y-action-bar-item>\n\n<div class=\"card card--grid content-fullpage d-grid grid__col--8-4--md\">\n <div\n class=\"bg-white p-relative\"\n style=\"min-height: 30vh\"\n >\n <c8y-map\n [assets]=\"[position]\"\n [config]=\"config\"\n (onRealtimeUpdate)=\"positionChanged($event)\"\n ></c8y-map>\n </div>\n\n <form\n class=\"d-flex d-col bg-inherit content-fullpage bg-gray-white\"\n #positionForm=\"ngForm\"\n (ngSubmit)=\"save()\"\n >\n <div class=\"card-header large-padding separator sticky-top\">\n <span\n class=\"card-title\"\n translate\n >\n Device location\n </span>\n </div>\n <div class=\"inner-scroll\">\n <div\n class=\"m-16\"\n *ngIf=\"!isEdit\"\n >\n <div class=\"p-b-40\">\n <div\n class=\"text-bold\"\n translate\n >\n Latitude (\u00B0)\n </div>\n {{ position.c8y_Position.lat }}\n </div>\n <div class=\"p-b-40\">\n <div\n class=\"text-bold\"\n translate\n >\n Longitude (\u00B0)\n </div>\n {{ position.c8y_Position.lng }}\n </div>\n <div class=\"p-b-40\">\n <div\n class=\"text-bold\"\n translate\n >\n Altitude (m)\n </div>\n {{ position.c8y_Position.alt }}\n </div>\n </div>\n <div\n class=\"m-16\"\n *ngIf=\"isEdit\"\n >\n <c8y-form-group>\n <label\n for=\"lat\"\n translate\n >\n Latitude (\u00B0)\n </label>\n\n <input\n class=\"form-control\"\n [title]=\"'Latitude (\u00B0)' | translate\"\n id=\"lat\"\n name=\"lat\"\n type=\"number\"\n required\n min=\"-90\"\n max=\"90\"\n (blur)=\"updateMarkerPosition()\"\n [(ngModel)]=\"position.c8y_Position.lat\"\n />\n <c8y-messages>\n <c8y-message\n name=\"min\"\n [text]=\"'The minimum latitude value is -90\u00B0.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"max\"\n [text]=\"'The maximum latitude value is 90\u00B0.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n <c8y-form-group>\n <label\n for=\"lat\"\n translate\n >\n Longitude (\u00B0)\n </label>\n\n <input\n class=\"form-control\"\n [title]=\"'Longitude (\u00B0)' | translate\"\n id=\"lng\"\n name=\"lng\"\n type=\"number\"\n required\n min=\"-180\"\n max=\"180\"\n (blur)=\"updateMarkerPosition()\"\n [(ngModel)]=\"position.c8y_Position.lng\"\n />\n <c8y-messages>\n <c8y-message\n name=\"min\"\n [text]=\"'The minimum longitude value is -180\u00B0.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"max\"\n [text]=\"'The maximum longitude value is 180\u00B0.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n <c8y-form-group>\n <label\n for=\"alt\"\n translate\n >\n Altitude (m)\n </label>\n\n <input\n class=\"form-control\"\n [title]=\"'Altitude (m)' | translate\"\n id=\"alt\"\n name=\"alt\"\n type=\"number\"\n [(ngModel)]=\"position.c8y_Position.alt\"\n />\n </c8y-form-group>\n </div>\n\n <form\n class=\"card-block bg-level-1\"\n #addressSearch=\"ngForm\"\n novalidate\n (submit)=\"searchAddress(addressSearchTerm)\"\n *ngIf=\"isEdit && !hideAddressSearchFeature\"\n >\n <div class=\"form-group\">\n <label\n for=\"searchAddress\"\n translate\n >\n Find lat/long by address\n </label>\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n id=\"searchAddress\"\n name=\"addressSearchTerm\"\n type=\"text\"\n [placeholder]=\"'e.g. Speditionstra\u00DFe 13, D\u00FCsseldorf`LOCALIZE`' | translate\"\n [(ngModel)]=\"addressSearchTerm\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n [title]=\"'Search' | translate\"\n type=\"submit\"\n >\n <i\n class=\"dlt-c8y-icon-search\"\n c8y-icon=\"search\"\n ></i>\n </button>\n </span>\n </div>\n </div>\n </form>\n </div>\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n [title]=\"'Edit location' | translate\"\n type=\"button\"\n *ngIf=\"canEdit && !isEdit\"\n (click)=\"edit()\"\n translate\n >\n Edit location\n </button>\n <button\n class=\"btn btn-default\"\n [title]=\"'Cancel' | translate\"\n type=\"button\"\n (click)=\"cancel()\"\n *ngIf=\"isEdit\"\n translate\n >\n Cancel\n </button>\n <button\n class=\"btn btn-primary\"\n [title]=\"'Save' | translate\"\n type=\"submit\"\n *ngIf=\"isEdit\"\n translate\n [disabled]=\"!positionForm.valid\"\n >\n Save\n </button>\n </div>\n </form>\n</div>\n", dependencies: [{ kind: "component", type: i4.MapComponent, selector: "c8y-map", inputs: ["config", "assets", "polyline$", "polylineOptions"], outputs: ["onMove", "onMoveEnd", "onZoomStart", "onZoomEnd", "onRealtimeUpdate", "onInit"] }, { kind: "component", type: i1.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.MinValidationDirective, selector: "[min]", inputs: ["min"] }, { kind: "directive", type: i1.MaxValidationDirective, selector: "[max]", inputs: ["max"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i6.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i6.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i1.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i1.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i1.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: i1.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }] }); }
|
|
133
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: LocationComponent, selector: "c8y-location", viewQueries: [{ propertyName: "map", first: true, predicate: MapComponent, descendants: true }], ngImport: i0, template: "<c8y-action-bar-item placement=\"right\">\n <button\n class=\"btn btn-link c8y-realtime\"\n title=\"{{ 'Toggle realtime' | translate }}\"\n type=\"button\"\n (click)=\"toggleRealtime()\"\n >\n <span\n class=\"c8y-pulse\"\n [ngClass]=\"{ active: config.realtime, inactive: !config.realtime }\"\n ></span>\n <span translate>Realtime</span>\n </button>\n</c8y-action-bar-item>\n<c8y-action-bar-item placement=\"right\">\n <button\n class=\"btn btn-clean\"\n title=\"{{ 'Center`verb`' | translate }}\"\n (click)=\"centerMap()\"\n >\n <i [c8yIcon]=\"'target1'\"></i>\n <span translate>Center`verb`</span>\n </button>\n</c8y-action-bar-item>\n\n<div class=\"card card--grid content-fullpage d-grid grid__col--8-4--md\">\n <div\n class=\"bg-white p-relative\"\n style=\"min-height: 30vh\"\n >\n <c8y-map\n [assets]=\"[position]\"\n [config]=\"config\"\n (onRealtimeUpdate)=\"positionChanged($event)\"\n ></c8y-map>\n </div>\n\n <form\n class=\"d-flex d-col bg-inherit content-fullpage bg-gray-white\"\n #positionForm=\"ngForm\"\n (ngSubmit)=\"save()\"\n >\n <div class=\"card-header large-padding separator sticky-top\">\n <span\n class=\"card-title\"\n translate\n >\n Device location\n </span>\n </div>\n <div class=\"inner-scroll\">\n <div\n class=\"m-16\"\n *ngIf=\"!isEdit\"\n >\n <div class=\"p-b-40\">\n <div\n class=\"text-bold\"\n translate\n >\n Latitude (\u00B0)\n </div>\n {{ position.c8y_Position.lat }}\n </div>\n <div class=\"p-b-40\">\n <div\n class=\"text-bold\"\n translate\n >\n Longitude (\u00B0)\n </div>\n {{ position.c8y_Position.lng }}\n </div>\n <div class=\"p-b-40\">\n <div\n class=\"text-bold\"\n translate\n >\n Altitude (m)\n </div>\n {{ position.c8y_Position.alt }}\n </div>\n </div>\n <div\n class=\"m-16\"\n *ngIf=\"isEdit\"\n >\n <c8y-form-group>\n <label\n for=\"lat\"\n translate\n >\n Latitude (\u00B0)\n </label>\n\n <input\n class=\"form-control\"\n [title]=\"'Latitude (\u00B0)' | translate\"\n id=\"lat\"\n name=\"lat\"\n type=\"number\"\n required\n min=\"-90\"\n max=\"90\"\n (blur)=\"updateMarkerPosition()\"\n [(ngModel)]=\"position.c8y_Position.lat\"\n />\n <c8y-messages>\n <c8y-message\n name=\"min\"\n [text]=\"'The minimum latitude value is -90\u00B0.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"max\"\n [text]=\"'The maximum latitude value is 90\u00B0.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n <c8y-form-group>\n <label\n for=\"lat\"\n translate\n >\n Longitude (\u00B0)\n </label>\n\n <input\n class=\"form-control\"\n [title]=\"'Longitude (\u00B0)' | translate\"\n id=\"lng\"\n name=\"lng\"\n type=\"number\"\n required\n min=\"-180\"\n max=\"180\"\n (blur)=\"updateMarkerPosition()\"\n [(ngModel)]=\"position.c8y_Position.lng\"\n />\n <c8y-messages>\n <c8y-message\n name=\"min\"\n [text]=\"'The minimum longitude value is -180\u00B0.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"max\"\n [text]=\"'The maximum longitude value is 180\u00B0.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n <c8y-form-group>\n <label\n for=\"alt\"\n translate\n >\n Altitude (m)\n </label>\n\n <input\n class=\"form-control\"\n [title]=\"'Altitude (m)' | translate\"\n id=\"alt\"\n name=\"alt\"\n type=\"number\"\n [(ngModel)]=\"position.c8y_Position.alt\"\n />\n </c8y-form-group>\n </div>\n\n <form\n class=\"card-block bg-level-1\"\n #addressSearch=\"ngForm\"\n novalidate\n (submit)=\"searchAddress(addressSearchTerm)\"\n *ngIf=\"isEdit && !hideAddressSearchFeature\"\n >\n <div class=\"form-group\">\n <label\n for=\"searchAddress\"\n translate\n >\n Find lat/long by address\n </label>\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n id=\"searchAddress\"\n name=\"addressSearchTerm\"\n type=\"text\"\n [placeholder]=\"'e.g. Speditionstra\u00DFe 13, D\u00FCsseldorf`LOCALIZE`' | translate\"\n [(ngModel)]=\"addressSearchTerm\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n [title]=\"'Search' | translate\"\n type=\"submit\"\n >\n <i\n class=\"dlt-c8y-icon-search\"\n c8y-icon=\"search\"\n ></i>\n </button>\n </span>\n </div>\n </div>\n </form>\n </div>\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n [title]=\"'Edit location' | translate\"\n type=\"button\"\n *ngIf=\"canEdit && !isEdit\"\n (click)=\"edit()\"\n translate\n >\n Edit location\n </button>\n <button\n class=\"btn btn-default\"\n [title]=\"'Cancel' | translate\"\n type=\"button\"\n (click)=\"cancel()\"\n *ngIf=\"isEdit\"\n translate\n >\n Cancel\n </button>\n <button\n class=\"btn btn-primary\"\n [title]=\"'Save' | translate\"\n type=\"submit\"\n *ngIf=\"isEdit\"\n translate\n [disabled]=\"!positionForm.valid\"\n >\n Save\n </button>\n </div>\n </form>\n</div>\n", dependencies: [{ kind: "component", type: i4.MapComponent, selector: "c8y-map", inputs: ["config", "assets", "polyline$", "polylineOptions"], outputs: ["onRealtimeUpdate", "onMove", "onMoveEnd", "onZoomStart", "onZoomEnd", "onMap", "onInit"] }, { kind: "component", type: i1.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.MinValidationDirective, selector: "[min]", inputs: ["min"] }, { kind: "directive", type: i1.MaxValidationDirective, selector: "[max]", inputs: ["max"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i6.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i6.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i1.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i1.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i1.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: i1.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }] }); }
|
|
134
134
|
}
|
|
135
135
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: LocationComponent, decorators: [{
|
|
136
136
|
type: Component,
|
|
@@ -2,12 +2,13 @@ import { Component, ContentChild, ElementRef, EventEmitter, Inject, Input, Outpu
|
|
|
2
2
|
import { DatePipe, GeoService, gettext, ManagedObjectRealtimeService, sortByPriority } from '@c8y/ngx-components';
|
|
3
3
|
import { TranslateService } from '@ngx-translate/core';
|
|
4
4
|
import { flatten, isEmpty, isUndefined, remove } from 'lodash-es';
|
|
5
|
-
import { combineLatest, fromEvent, NEVER, Observable, Subject } from 'rxjs';
|
|
6
|
-
import { first, map, scan, takeUntil } from 'rxjs/operators';
|
|
5
|
+
import { BehaviorSubject, combineLatest, fromEvent, NEVER, Observable, Subject } from 'rxjs';
|
|
6
|
+
import { filter, first, map, scan, switchMap, takeUntil } from 'rxjs/operators';
|
|
7
7
|
import { MapPopupDirective } from './map-popup.directive';
|
|
8
8
|
import { getC8yMarker, MAP_DEFAULT_CONFIG, MAP_TILE_LAYER } from './map.model';
|
|
9
9
|
import { MapService } from './map.service';
|
|
10
10
|
import { isNull, every } from 'lodash-es';
|
|
11
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
11
12
|
import * as i0 from "@angular/core";
|
|
12
13
|
import * as i1 from "@c8y/ngx-components";
|
|
13
14
|
import * as i2 from "./map.service";
|
|
@@ -32,13 +33,11 @@ export class MapComponent {
|
|
|
32
33
|
this.isInit = false;
|
|
33
34
|
this.config = {};
|
|
34
35
|
this.polyline$ = NEVER;
|
|
35
|
-
this.onMove = new EventEmitter();
|
|
36
|
-
this.onMoveEnd = new EventEmitter();
|
|
37
|
-
this.onZoomStart = new EventEmitter();
|
|
38
|
-
this.onZoomEnd = new EventEmitter();
|
|
39
36
|
this.onRealtimeUpdate = new EventEmitter();
|
|
37
|
+
this.onMap = new BehaviorSubject(null);
|
|
40
38
|
this.onInit = new EventEmitter();
|
|
41
39
|
this.unsubscribeTrigger$ = new Subject();
|
|
40
|
+
this.initOutputs();
|
|
42
41
|
}
|
|
43
42
|
startRealtime() {
|
|
44
43
|
if (!this.assets || (Array.isArray(this.assets) && this.assets.length > 1)) {
|
|
@@ -198,6 +197,18 @@ export class MapComponent {
|
|
|
198
197
|
this.unsubscribeTrigger$.next();
|
|
199
198
|
this.stopRealtime();
|
|
200
199
|
}
|
|
200
|
+
initOutputs() {
|
|
201
|
+
const getMapEventObservable = eventName => {
|
|
202
|
+
return this.onMap.pipe(filter(map => !!map), switchMap(map => fromEvent(map, eventName)), takeUntilDestroyed());
|
|
203
|
+
};
|
|
204
|
+
const dragStart$ = getMapEventObservable('dragstart');
|
|
205
|
+
const move$ = getMapEventObservable('move');
|
|
206
|
+
const dragEnd$ = getMapEventObservable('dragend');
|
|
207
|
+
this.onMove = dragStart$.pipe(switchMap(() => move$.pipe(takeUntil(dragEnd$))), takeUntil(this.unsubscribeTrigger$));
|
|
208
|
+
this.onMoveEnd = getMapEventObservable('moveend');
|
|
209
|
+
this.onZoomEnd = getMapEventObservable('zoomend');
|
|
210
|
+
this.onZoomStart = getMapEventObservable('zoomstart');
|
|
211
|
+
}
|
|
201
212
|
initMap(layers, defaultConfig) {
|
|
202
213
|
const defaultOptions = {
|
|
203
214
|
center: this.config.center || defaultConfig.center,
|
|
@@ -211,18 +222,7 @@ export class MapComponent {
|
|
|
211
222
|
this.map.attributionControl.setPrefix('');
|
|
212
223
|
this.addLayers(layers);
|
|
213
224
|
this.handleMobile();
|
|
214
|
-
|
|
215
|
-
.pipe(takeUntil(this.unsubscribeTrigger$))
|
|
216
|
-
.subscribe(event => this.onMoveEnd.emit(event));
|
|
217
|
-
fromEvent(this.map, 'move')
|
|
218
|
-
.pipe(takeUntil(this.unsubscribeTrigger$))
|
|
219
|
-
.subscribe(event => this.onMove.emit(event));
|
|
220
|
-
fromEvent(this.map, 'zoomend')
|
|
221
|
-
.pipe(takeUntil(this.unsubscribeTrigger$))
|
|
222
|
-
.subscribe(event => this.onZoomEnd.emit(event));
|
|
223
|
-
fromEvent(this.map, 'zoomstart')
|
|
224
|
-
.pipe(takeUntil(this.unsubscribeTrigger$))
|
|
225
|
-
.subscribe(event => this.onZoomStart.emit(event));
|
|
225
|
+
this.onMap.next(this.map);
|
|
226
226
|
this.isInit = true;
|
|
227
227
|
this.onInit.emit(this.leaflet);
|
|
228
228
|
}
|
|
@@ -387,7 +387,7 @@ export class MapComponent {
|
|
|
387
387
|
}
|
|
388
388
|
}
|
|
389
389
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: MapComponent, deps: [{ token: i1.ManagedObjectRealtimeService }, { token: i2.MapService }, { token: MAP_TILE_LAYER }, { token: MAP_DEFAULT_CONFIG }, { token: i3.TranslateService }, { token: i1.GeoService }, { token: i1.DatePipe }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
390
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: MapComponent, selector: "c8y-map", inputs: { config: "config", assets: "assets", polyline$: "polyline$", polylineOptions: "polylineOptions" }, outputs: { onMove: "onMove", onMoveEnd: "onMoveEnd", onZoomStart: "onZoomStart", onZoomEnd: "onZoomEnd",
|
|
390
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: MapComponent, selector: "c8y-map", inputs: { config: "config", assets: "assets", polyline$: "polyline$", polylineOptions: "polylineOptions" }, outputs: { onRealtimeUpdate: "onRealtimeUpdate", onMove: "onMove", onMoveEnd: "onMoveEnd", onZoomStart: "onZoomStart", onZoomEnd: "onZoomEnd", onMap: "onMap", onInit: "onInit" }, providers: [ManagedObjectRealtimeService], queries: [{ propertyName: "popup", first: true, predicate: MapPopupDirective, descendants: true }], viewQueries: [{ propertyName: "mapElement", first: true, predicate: ["map"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"c8y-map\">\n <div #map></div>\n</div>\n<ng-content></ng-content>\n" }); }
|
|
391
391
|
}
|
|
392
392
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: MapComponent, decorators: [{
|
|
393
393
|
type: Component,
|
|
@@ -412,6 +412,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
412
412
|
type: Input
|
|
413
413
|
}], polylineOptions: [{
|
|
414
414
|
type: Input
|
|
415
|
+
}], onRealtimeUpdate: [{
|
|
416
|
+
type: Output
|
|
415
417
|
}], onMove: [{
|
|
416
418
|
type: Output
|
|
417
419
|
}], onMoveEnd: [{
|
|
@@ -420,9 +422,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
420
422
|
type: Output
|
|
421
423
|
}], onZoomEnd: [{
|
|
422
424
|
type: Output
|
|
423
|
-
}],
|
|
425
|
+
}], onMap: [{
|
|
424
426
|
type: Output
|
|
425
427
|
}], onInit: [{
|
|
426
428
|
type: Output
|
|
427
429
|
}] } });
|
|
428
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL21hcC9tYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vbWFwL21hcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUdOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQ0wsUUFBUSxFQUNSLFVBQVUsRUFDVixPQUFPLEVBQ1AsNEJBQTRCLEVBQzVCLGNBQWMsRUFDZixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBR0wsWUFBWSxFQUVaLGtCQUFrQixFQUNsQixjQUFjLEVBRWYsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQzs7Ozs7O0FBTzFDLE1BQU0sT0FBTyxZQUFZO0lBeUR2QixZQUNZLGlCQUErQyxFQUMvQyxVQUFzQixFQUNFLE9BQW1DLEVBRTNELGNB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QztZQUNqQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDOzhHQWhlVSxZQUFZLHdGQTREYixjQUFjLGFBQ2Qsa0JBQWtCO2tHQTdEakIsWUFBWSxpVEFGWixDQUFDLDRCQUE0QixDQUFDLDZEQXVCM0IsaUJBQWlCLHdLQ2pFakMsa0ZBSUE7OzJGRHdDYSxZQUFZO2tCQUx4QixTQUFTOytCQUNFLFNBQVMsYUFFUixDQUFDLDRCQUE0QixDQUFDOzswQkE4RHRDLE1BQU07MkJBQUMsY0FBYzs7MEJBQ3JCLE1BQU07MkJBQUMsa0JBQWtCO3dIQTFDNUIsVUFBVTtzQkFEVCxTQUFTO3VCQUFDLEtBQUs7Z0JBSWhCLEtBQUs7c0JBREosWUFBWTt1QkFBQyxpQkFBaUI7Z0JBSS9CLE1BQU07c0JBREwsS0FBSztnQkFJTixNQUFNO3NCQURMLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLGVBQWU7c0JBRGQsS0FBSztnQkFJTixNQUFNO3NCQURMLE1BQU07Z0JBSVAsU0FBUztzQkFEUixNQUFNO2dCQUlQLFdBQVc7c0JBRFYsTUFBTTtnQkFJUCxTQUFTO3NCQURSLE1BQU07Z0JBSVAsZ0JBQWdCO3NCQURmLE1BQU07Z0JBSVAsTUFBTTtzQkFETCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2UsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElFdmVudCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB0eXBlIHsgTWFwRGVmYXVsdENvbmZpZywgTWFwVGlsZUxheWVyIH0gZnJvbSAnQGM4eS9vcHRpb25zJztcbmltcG9ydCB7XG4gIERhdGVQaXBlLFxuICBHZW9TZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBNYW5hZ2VkT2JqZWN0UmVhbHRpbWVTZXJ2aWNlLFxuICBzb3J0QnlQcmlvcml0eVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB0eXBlICogYXMgTCBmcm9tICdsZWFmbGV0JztcbmltcG9ydCB7IGZsYXR0ZW4sIGlzRW1wdHksIGlzVW5kZWZpbmVkLCByZW1vdmUgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZnJvbUV2ZW50LCBORVZFUiwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdCwgbWFwLCBzY2FuLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNYXBQb3B1cERpcmVjdGl2ZSB9IGZyb20gJy4vbWFwLXBvcHVwLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1xuICBDOHlNYXJrZXIsXG4gIEM4eU1hcmtlckF0dHJpYnV0ZXMsXG4gIGdldEM4eU1hcmtlcixcbiAgTWFwQ29uZmlnLFxuICBNQVBfREVGQVVMVF9DT05GSUcsXG4gIE1BUF9USUxFX0xBWUVSLFxuICBQb3NpdGlvbk1hbmFnZWRPYmplY3Rcbn0gZnJvbSAnLi9tYXAubW9kZWwnO1xuaW1wb3J0IHsgTWFwU2VydmljZSB9IGZyb20gJy4vbWFwLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNOdWxsLCBldmVyeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1tYXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFwLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbTWFuYWdlZE9iamVjdFJlYWx0aW1lU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgTWFwQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFRoZSBsZWFmbGV0IG1hcCBvYmplY3QuXG4gICAqL1xuICBtYXA6IEwuTWFwO1xuICAvKipcbiAgICogVGhlIG1hcmtlcnMgcGxhY2VkIG9uIHRoZSBtYXAuXG4gICAqL1xuICBtYXJrZXJzOiBBcnJheTxDOHlNYXJrZXIgfCBMLk1hcmtlcj4gPSBbXTtcbiAgLyoqXG4gICAqIFRoZSBsZWFmbGV0IHJlcHJlc2VudGF0aW9uIHVzZWQuXG4gICAqL1xuICBsZWFmbGV0OiB0eXBlb2YgTDtcbiAgLyoqXG4gICAqIFRlbGxzIGlmIHRoZSBtYXAgd2FzIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4gICAqL1xuICBpc0luaXQgPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCdtYXAnKVxuICBtYXBFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gIEBDb250ZW50Q2hpbGQoTWFwUG9wdXBEaXJlY3RpdmUpXG4gIHBvcHVwOiBNYXBQb3B1cERpcmVjdGl2ZTtcblxuICBASW5wdXQoKVxuICBjb25maWc6IE1hcENvbmZpZyA9IHt9O1xuXG4gIEBJbnB1dCgpXG4gIGFzc2V0czogUG9zaXRpb25NYW5hZ2VkT2JqZWN0IHwgUG9zaXRpb25NYW5hZ2VkT2JqZWN0W107XG5cbiAgQElucHV0KClcbiAgcG9seWxpbmUkOiBPYnNlcnZhYmxlPEwuTGF0TG5nRXhwcmVzc2lvbltdIHwgTC5MYXRMbmdFeHByZXNzaW9uW11bXT4gPSBORVZFUjtcblxuICBASW5wdXQoKVxuICBwb2x5bGluZU9wdGlvbnM6IEwuUG9seWxpbmVPcHRpb25zO1xuXG4gIEBPdXRwdXQoKVxuICBvbk1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPEwuTGVhZmxldEV2ZW50PigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbk1vdmVFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPEwuTGVhZmxldEV2ZW50PigpO1xuXG4gIEBPdXRwdXQoKVxuICBvblpvb21TdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8TC5MZWFmbGV0RXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uWm9vbUVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8TC5MZWFmbGV0RXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uUmVhbHRpbWVVcGRhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPFBvc2l0aW9uTWFuYWdlZE9iamVjdD4oKTtcblxuICBAT3V0cHV0KClcbiAgb25Jbml0ID0gbmV3IEV2ZW50RW1pdHRlcjx0eXBlb2YgTD4oKTtcblxuICBwcm90ZWN0ZWQgcmVhbHRpbWVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIHVuc3Vic2NyaWJlVHJpZ2dlciQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBtb1JlYWx0aW1lU2VydmljZTogTWFuYWdlZE9iamVjdFJlYWx0aW1lU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgbWFwU2VydmljZTogTWFwU2VydmljZSxcbiAgICBASW5qZWN0KE1BUF9USUxFX0xBWUVSKSBwcm90ZWN0ZWQgbGF5ZXJzJDogT2JzZXJ2YWJsZTxNYXBUaWxlTGF5ZXJbXT4sXG4gICAgQEluamVjdChNQVBfREVGQVVMVF9DT05GSUcpXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRDb25maWckOiBPYnNlcnZhYmxlPE1hcERlZmF1bHRDb25maWc+LFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBnZW86IEdlb1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGRhdGVQaXBlOiBEYXRlUGlwZVxuICApIHt9XG5cbiAgc3RhcnRSZWFsdGltZSgpIHtcbiAgICBpZiAoIXRoaXMuYXNzZXRzIHx8IChBcnJheS5pc0FycmF5KHRoaXMuYXNzZXRzKSAmJiB0aGlzLmFzc2V0cy5sZW5ndGggPiAxKSkge1xuICAgICAgdGhpcy5jb25maWcucmVhbHRpbWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc3RvcFJlYWx0aW1lKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFzc2V0ID0gQXJyYXkuaXNBcnJheSh0aGlzLmFzc2V0cykgPyB0aGlzLmFzc2V0c1swXSA6IHRoaXMuYXNzZXRzO1xuICAgIHRoaXMucmVhbHRpbWVTdWJzY3JpcHRpb24gPSB0aGlzLm1vUmVhbHRpbWVTZXJ2aWNlXG4gICAgICAub25VcGRhdGUkKGFzc2V0KVxuICAgICAgLnN1YnNjcmliZSgoYXNzZXQ6IFBvc2l0aW9uTWFuYWdlZE9iamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBtYXJrZXIgPSB0aGlzLmZpbmRNYXJrZXIoYXNzZXQuaWQpO1xuICAgICAgICBjb25zdCBpY29uID0gdGhpcy5nZXRBc3NldEljb24oYXNzZXQpO1xuICAgICAgICBtYXJrZXIuc2V0SWNvbihpY29uKTtcbiAgICAgICAgbWFya2VyLnNldExhdExuZyh0aGlzLmdlby5nZXRMYXRMb25nKGFzc2V0KSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuYXNzZXRzKSkge1xuICAgICAgICAgIHRoaXMuYXNzZXRzWzBdID0gYXNzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hc3NldHMgPSBhc3NldDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1vdmVUb1Bvc2l0aW9uT2ZNbyhhc3NldCk7XG4gICAgICAgIHRoaXMub25SZWFsdGltZVVwZGF0ZS5lbWl0KGFzc2V0KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbW92ZVRvUG9zaXRpb25PZk1vKHBvc2l0aW9uczogUG9zaXRpb25NYW5hZ2VkT2JqZWN0IHwgUG9zaXRpb25NYW5hZ2VkT2JqZWN0W10pIHtcbiAgICBjb25zdCBwb3NpdGlvbiA9IEFycmF5LmlzQXJyYXkocG9zaXRpb25zKSA/IHBvc2l0aW9uc1swXSA6IHBvc2l0aW9ucztcbiAgICBpZiAodGhpcy5jb25maWcuZm9sbG93KSB7XG4gICAgICB0aGlzLm1hcC5zZXRWaWV3KFtwb3NpdGlvbi5jOHlfUG9zaXRpb24ubGF0LCBwb3NpdGlvbi5jOHlfUG9zaXRpb24ubG5nXSk7XG4gICAgfVxuICB9XG5cbiAgc3RvcFJlYWx0aW1lKCkge1xuICAgIGlmICh0aGlzLnJlYWx0aW1lU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnJlYWx0aW1lU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgZmluZE1hcmtlcihtb09ySWQ6IHN0cmluZyB8IElFdmVudCB8IFBvc2l0aW9uTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IGdldElkID0gbW9PcklkID0+ICh0eXBlb2YgbW9PcklkID09PSAnc3RyaW5nJyA/IG1vT3JJZCA6IG1vT3JJZD8uaWQpO1xuICAgIHJldHVybiB0aGlzLm1hcmtlcnMuZmluZChcbiAgICAgIChtYXJrZXI6IEM4eU1hcmtlcikgPT5cbiAgICAgICAgbWFya2VyLmFzc2V0Py5pZCA9PT0gZ2V0SWQobW9PcklkKSB8fCBtYXJrZXIuZXZlbnQ/LmlkID09PSBnZXRJZChtb09ySWQpXG4gICAgKTtcbiAgfVxuXG4gIGFkZE1hcmtlclRvTWFwKG1hcmtlcjogQzh5TWFya2VyIHwgTC5NYXJrZXIpIHtcbiAgICB0aGlzLm1hcmtlcnMucHVzaChtYXJrZXIpO1xuICAgIG1hcmtlci5hZGRUbyh0aGlzLm1hcCk7XG4gIH1cblxuICBnZXRBc3NldE1hcmtlcihhc3NldDogUG9zaXRpb25NYW5hZ2VkT2JqZWN0KSB7XG4gICAgaWYgKCFhc3NldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGljb24gPSB0aGlzLmdldEFzc2V0SWNvbihhc3NldCk7XG4gICAgY29uc3QgbGVhZmxldE1hcmtlciA9IHRoaXMubGVhZmxldC5tYXJrZXIodGhpcy5nZW8uZ2V0TGF0TG9uZyhhc3NldCksIHtcbiAgICAgIGljb25cbiAgICB9KTtcbiAgICBjb25zdCBtYXJrZXIgPSBnZXRDOHlNYXJrZXIobGVhZmxldE1hcmtlciwgYXNzZXQpO1xuICAgIHRoaXMuYmluZFBvcHVwKG1hcmtlciwgYXNzZXQpO1xuXG4gICAgcmV0dXJuIG1hcmtlcjtcbiAgfVxuXG4gIGdldFRyYWNraW5nTWFya2VyKGV2ZW50OiBJRXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaWNvbiA9IHRoaXMuZ2V0VHJhY2tpbmdJY29uKCk7XG4gICAgY29uc3QgbGVhZmxldE1hcmtlciA9IHRoaXMubGVhZmxldC5tYXJrZXIodGhpcy5nZW8uZ2V0TGF0TG9uZyhldmVudCksIHsgaWNvbiB9KTtcbiAgICBjb25zdCBtYXJrZXIgPSBnZXRDOHlNYXJrZXIobGVhZmxldE1hcmtlciwgbnVsbCwgZXZlbnQpO1xuICAgIHRoaXMuYmluZFBvcHVwKG1hcmtlciwgZXZlbnQpO1xuXG4gICAgcmV0dXJuIG1hcmtlcjtcbiAgfVxuXG4gIGdldEFzc2V0SWNvbihhc3NldDogUG9zaXRpb25NYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgYXNzZXRUeXBlSWNvbiA9IHRoaXMuY29uZmlnLmljb24gfHwgYXNzZXQuaWNvbj8ubmFtZTtcbiAgICBjb25zdCBzdGF0dXMgPSBNYXBTZXJ2aWNlLmdldFN0YXR1cyhhc3NldCk7XG4gICAgY29uc3QgY29sb3IgPSB0aGlzLmNvbmZpZy5jb2xvciA/IGBzdHlsZT0nY29sb3I6ICR7dGhpcy5jb25maWcuY29sb3J9OydgIDogJyc7XG4gICAgY29uc3QgaWNvbiA9IHRoaXMubGVhZmxldC5kaXZJY29uKHtcbiAgICAgIGh0bWw6IGA8ZGl2IGNsYXNzPVwiZGx0LWM4eS1pY29uLW1hcmtlciBpY29uLTN4ICR7c3RhdHVzfVwiICR7Y29sb3J9PjxpIGNsYXNzPVwiZGx0LWM4eS1pY29uLSR7XG4gICAgICAgIGFzc2V0VHlwZUljb24gfHwgJ2RhdGEtdHJhbnNmZXInXG4gICAgICB9XCIgLz48L2Rpdj5gLFxuICAgICAgY2xhc3NOYW1lOiAnYzh5LW1hcC1tYXJrZXItaWNvbicsXG4gICAgICAvLyBpY29uQW5jaG9yIGlzIHVzZWQgdG8gc2V0IHRoZSBtYXJrZXIgYWNjdXJhdGVseSBvbiBjbGlja1xuICAgICAgaWNvbkFuY2hvcjogWzgsIDhdXG4gICAgfSk7XG4gICAgcmV0dXJuIGljb247XG4gIH1cblxuICBnZXRUcmFja2luZ0ljb24oKSB7XG4gICAgY29uc3QgaWNvbiA9IHRoaXMubGVhZmxldC5kaXZJY29uKHtcbiAgICAgIGh0bWw6IGA8ZGl2IGNsYXNzPVwiZGx0LWM4eS1pY29uLW1hcmtlciBpY29uLTN4IHRleHQtbXV0ZWRcIj48L2Rpdj5gLFxuICAgICAgY2xhc3NOYW1lOiAnYzh5LW1hcC1tYXJrZXItaWNvbicsXG4gICAgICAvLyBpY29uQW5jaG9yIGlzIHVzZWQgdG8gc2V0IHRoZSBtYXJrZXIgYWNjdXJhdGVseSBvbiBjbGlja1xuICAgICAgaWNvbkFuY2hvcjogWzgsIDhdXG4gICAgfSk7XG4gICAgcmV0dXJuIGljb247XG4gIH1cblxuICByZW1vdmVNYXJrZXIobWFya2VyOiBDOHlNYXJrZXIgfCBMLk1hcmtlcikge1xuICAgIGlmIChtYXJrZXIpIHtcbiAgICAgIG1hcmtlci5yZW1vdmUoKTtcbiAgICAgIHJlbW92ZSh0aGlzLm1hcmtlcnMsIG0gPT4gbSA9PT0gbWFya2VyKTtcbiAgICB9XG4gIH1cblxuICBjbGVhck1hcmtlcnMoZnJhZ21lbnQ/OiBDOHlNYXJrZXJBdHRyaWJ1dGVzKSB7XG4gICAgY29uc3QgbWF0Y2hpbmdNYXJrZXJzID0gbWFya2VyID0+ICFmcmFnbWVudCB8fCAhIW1hcmtlcltmcmFnbWVudF07XG4gICAgdGhpcy5tYXJrZXJzLmZpbHRlcihtYXRjaGluZ01hcmtlcnMpLmZvckVhY2gobWFya2VyID0+IG1hcmtlci5yZW1vdmUoKSk7XG4gICAgdGhpcy5tYXJrZXJzID0gdGhpcy5tYXJrZXJzLmZpbHRlcihtYXJrZXIgPT4gIW1hdGNoaW5nTWFya2VycyhtYXJrZXIpKTtcbiAgfVxuXG4gIHJlZnJlc2hNYXJrZXJzKCkge1xuICAgIHRoaXMuY2xlYXJNYXJrZXJzKCk7XG4gICAgbGV0IGFzc2V0czogUG9zaXRpb25NYW5hZ2VkT2JqZWN0W10gPSBbXTtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuYXNzZXRzKSkge1xuICAgICAgYXNzZXRzID0gQXJyYXkuaXNBcnJheSh0aGlzLmFzc2V0cykgPyB0aGlzLmFzc2V0cyA6IFt0aGlzLmFzc2V0c107XG4gICAgfVxuICAgIGFzc2V0cy5mb3JFYWNoKGFzc2V0ID0+IHtcbiAgICAgIGNvbnN0IG1hcmtlciA9IHRoaXMuZ2V0QXNzZXRNYXJrZXIoYXNzZXQpO1xuICAgICAgdGhpcy5hZGRNYXJrZXJUb01hcChtYXJrZXIpO1xuICAgIH0pO1xuICAgIGlmICghdGhpcy5jb25maWcuY2VudGVyKSB7XG4gICAgICB0aGlzLnpvb21Ub0JvdW5kKGFzc2V0cyk7XG4gICAgfVxuICAgIHRoaXMudG9nZ2xlQ29udHJvbHMoKTtcbiAgfVxuXG4gIGNlbnRlcigpIHtcbiAgICB0aGlzLm1hcD8uc2V0Vmlldyh0aGlzLmNvbmZpZy5jZW50ZXIpO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICBpZiAodGhpcy5pc0luaXQpIHtcbiAgICAgIHRoaXMucmVmcmVzaE1hcmtlcnMoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMubGVhZmxldCA9IGF3YWl0IHRoaXMubWFwU2VydmljZS5nZXRMZWFmbGV0KCk7XG4gICAgY29uc3QgaW5pdGlhbGl6ZWQkID0gY29tYmluZUxhdGVzdChbdGhpcy5sYXllcnMkLCB0aGlzLmRlZmF1bHRDb25maWckXSkucGlwZShcbiAgICAgIGZpcnN0KCksXG4gICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZVRyaWdnZXIkKVxuICAgICk7XG5cbiAgICBpbml0aWFsaXplZCQuc3Vic2NyaWJlKChbbGF5ZXJzLCBkZWZhdWx0Q29uZmlnXSkgPT4ge1xuICAgICAgdGhpcy5pbml0TWFwKGxheWVycywgZGVmYXVsdENvbmZpZyk7XG4gICAgICB0aGlzLnJlZnJlc2hNYXJrZXJzKCk7XG4gICAgfSk7XG5cbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnBvbHlsaW5lJCwgaW5pdGlhbGl6ZWQkXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKFtleHByZXNzaW9uc10pID0+IHRoaXMubGVhZmxldC5wb2x5bGluZShleHByZXNzaW9ucywgdGhpcy5wb2x5bGluZU9wdGlvbnMpKSxcbiAgICAgICAgc2Nhbigob2xkUG9seWxpbmUsIG5ld1BvbHlsaW5lKSA9PiB7XG4gICAgICAgICAgaWYgKCEhb2xkUG9seWxpbmUpIHtcbiAgICAgICAgICAgIHRoaXMubWFwLnJlbW92ZUxheWVyKG9sZFBvbHlsaW5lKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCEhbmV3UG9seWxpbmUpIHtcbiAgICAgICAgICAgIG5ld1BvbHlsaW5lLmFkZFRvKHRoaXMubWFwKTtcbiAgICAgICAgICAgIHRoaXMuZml0Qm91bmRzKG5ld1BvbHlsaW5lLmdldEJvdW5kcygpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbmV3UG9seWxpbmU7XG4gICAgICAgIH0sIG51bGwpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZVRyaWdnZXIkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubWFwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmFzc2V0cz8uY3VycmVudFZhbHVlICYmICFjaGFuZ2VzLmFzc2V0cz8uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMucmVmcmVzaE1hcmtlcnMoKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5jb25maWc/LmN1cnJlbnRWYWx1ZSAmJiAhY2hhbmdlcy5jb25maWc/LmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLmNoYW5nZUNvbmZpZyhjaGFuZ2VzLmNvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudW5zdWJzY3JpYmVBbGxMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1bnN1YnNjcmliZUFsbExpc3RlbmVycygpIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlVHJpZ2dlciQubmV4dCgpO1xuICAgIHRoaXMuc3RvcFJlYWx0aW1lKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdE1hcChsYXllcnM6IE1hcFRpbGVMYXllcltdLCBkZWZhdWx0Q29uZmlnOiBNYXBDb25maWcpOiB2b2lkIHtcbiAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIGNlbnRlcjogdGhpcy5jb25maWcuY2VudGVyIHx8IGRlZmF1bHRDb25maWcuY2VudGVyLFxuICAgICAgem9vbVNuYXA6IDAsXG4gICAgICB6b29tOiB0aGlzLmNvbmZpZy56b29tTGV2ZWwgfHwgZGVmYXVsdENvbmZpZy56b29tTGV2ZWxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMubWFwKSB7XG4gICAgICB0aGlzLm1hcC5yZW1vdmUoKTtcbiAgICB9XG4gICAgdGhpcy5tYXAgPSB0aGlzLmxlYWZsZXQubWFwKHRoaXMubWFwRWxlbWVudC5uYXRpdmVFbGVtZW50LCBkZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLm1hcC5hdHRyaWJ1dGlvbkNvbnRyb2wuc2V0UHJlZml4KCcnKTtcblxuICAgIHRoaXMuYWRkTGF5ZXJzKGxheWVycyk7XG5cbiAgICB0aGlzLmhhbmRsZU1vYmlsZSgpO1xuXG4gICAgZnJvbUV2ZW50PEwuTGVhZmxldEV2ZW50Pih0aGlzLm1hcCwgJ21vdmVlbmQnKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVUcmlnZ2VyJCkpXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMub25Nb3ZlRW5kLmVtaXQoZXZlbnQpKTtcblxuICAgIGZyb21FdmVudDxMLkxlYWZsZXRFdmVudD4odGhpcy5tYXAsICdtb3ZlJylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlVHJpZ2dlciQpKVxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB0aGlzLm9uTW92ZS5lbWl0KGV2ZW50KSk7XG5cbiAgICBmcm9tRXZlbnQ8TC5MZWFmbGV0RXZlbnQ+KHRoaXMubWFwLCAnem9vbWVuZCcpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZVRyaWdnZXIkKSlcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5vblpvb21FbmQuZW1pdChldmVudCkpO1xuXG4gICAgZnJvbUV2ZW50PEwuTGVhZmxldEV2ZW50Pih0aGlzLm1hcCwgJ3pvb21zdGFydCcpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZVRyaWdnZXIkKSlcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5vblpvb21TdGFydC5lbWl0KGV2ZW50KSk7XG5cbiAgICB0aGlzLmlzSW5pdCA9IHRydWU7XG4gICAgdGhpcy5vbkluaXQuZW1pdCh0aGlzLmxlYWZsZXQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZU1vYmlsZSgpIHtcbiAgICAvLyBhZGRpbmcgZXZlbnQgbGlzdGVuZXIgdG8gZG8gbW9iaWxlIDIgZmluZ2VyIHNjcm9sbGluZ1xuICAgIGlmICh0aGlzLmxlYWZsZXQuQnJvd3Nlci5tb2JpbGUpIHtcbiAgICAgIGNvbnN0IHRvdWNoTXNnID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnVXNlIHR3byBmaW5nZXJzIHRvIG1vdmUgdGhlIG1hcC4nKSk7XG4gICAgICB0aGlzLm1hcC5kcmFnZ2luZy5kaXNhYmxlKCk7XG4gICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLm1hcC5nZXRDb250YWluZXIoKTtcbiAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2RhdGEtdG91Y2gtd2FybmluZy1jb250ZW50JywgdG91Y2hNc2cpO1xuICAgICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBldmVudCA9PiB0aGlzLmhhbmRsZVRvdWNoKGV2ZW50KSk7XG4gICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgZXZlbnQgPT4gdGhpcy5oYW5kbGVUb3VjaChldmVudCkpO1xuICAgICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgZXZlbnQgPT4gdGhpcy5oYW5kbGVUb3VjaChldmVudCkpO1xuICAgICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoY2FuY2VsJywgZXZlbnQgPT4gdGhpcy5oYW5kbGVUb3VjaChldmVudCkpO1xuICAgICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZlbnQgPT4gdGhpcy5oYW5kbGVUb3VjaChldmVudCkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhZGRMYXllcnMobGF5ZXJzOiBNYXBUaWxlTGF5ZXJbXSkge1xuICAgIGNvbnN0IGZsYXR0ZW5MYXllcnM6IE1hcFRpbGVMYXllcltdID0gZmxhdHRlbihsYXllcnMpO1xuICAgIGNvbnN0IGJhc2VMYXllcnM6IEwuQ29udHJvbC5MYXllcnNPYmplY3QgPSB7fTtcbiAgICBjb25zdCBvdmVybGF5czogTC5Db250cm9sLkxheWVyc09iamVjdCA9IHt9O1xuICAgIGxldCBmaXJzdExheWVyID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIHNvcnRCeVByaW9yaXR5KGZsYXR0ZW5MYXllcnMpKSB7XG4gICAgICBjb25zdCBvYmplY3RUb0FkZFRvID0gbGF5ZXIuaXNPdmVybGF5ID8gb3ZlcmxheXMgOiBiYXNlTGF5ZXJzO1xuICAgICAgaWYgKG9iamVjdFRvQWRkVG9bbGF5ZXIubGFiZWxdKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0aWxlcyA9IHRoaXMubGVhZmxldC50aWxlTGF5ZXIobGF5ZXIubGF5ZXJVcmwsIGxheWVyLm9wdGlvbnMpO1xuICAgICAgaWYgKCFsYXllci5pc092ZXJsYXkgJiYgZmlyc3RMYXllcikge1xuICAgICAgICBmaXJzdExheWVyID0gZmFsc2U7XG4gICAgICAgIHRpbGVzLmFkZFRvKHRoaXMubWFwKTtcbiAgICAgIH1cbiAgICAgIG9iamVjdFRvQWRkVG9bbGF5ZXIubGFiZWxdID0gdGlsZXM7XG4gICAgfVxuICAgIGlmIChmbGF0dGVuTGF5ZXJzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMubGVhZmxldC5jb250cm9sLmxheWVycyhiYXNlTGF5ZXJzLCBvdmVybGF5cywgeyBwb3NpdGlvbjogJ2JvdHRvbWxlZnQnIH0pLmFkZFRvKHRoaXMubWFwKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY2hhbmdlQ29uZmlnKGNoYW5nZTogU2ltcGxlQ2hhbmdlKSB7XG4gICAgaWYgKHRoaXMuaGFzQ2hhbmdlZChjaGFuZ2UsICd6b29tTGV2ZWwnKSkge1xuICAgICAgdGhpcy5tYXAuc2V0Wm9vbSh0aGlzLmNvbmZpZy56b29tTGV2ZWwpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0NoYW5nZWQoY2hhbmdlLCAnY2VudGVyJykgJiYgZXZlcnkoY2hhbmdlLmN1cnJlbnRWYWx1ZS5jZW50ZXIsIHAgPT4gIWlzTnVsbChwKSkpIHtcbiAgICAgIHRoaXMubWFwLnNldFZpZXcoY2hhbmdlLmN1cnJlbnRWYWx1ZS5jZW50ZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0NoYW5nZWQoY2hhbmdlLCAnaWNvbicpIHx8IHRoaXMuaGFzQ2hhbmdlZChjaGFuZ2UsICdjb2xvcicpKSB7XG4gICAgICB0aGlzLnJlZnJlc2hNYXJrZXJzKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzQ2hhbmdlZChjaGFuZ2UsICdyZWFsdGltZScpICYmIGNoYW5nZS5jdXJyZW50VmFsdWUucmVhbHRpbWUpIHtcbiAgICAgIHRoaXMuc3RhcnRSZWFsdGltZSgpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2UuY3VycmVudFZhbHVlLnJlYWx0aW1lID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5zdG9wUmVhbHRpbWUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNDaGFuZ2VkKGNoYW5nZSwgJ2ZvbGxvdycpKSB7XG4gICAgICB0aGlzLm1vdmVUb1Bvc2l0aW9uT2ZNbyh0aGlzLmFzc2V0cyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzQ2hhbmdlZChjaGFuZ2UsICdkaXNhYmxlUGFuJykgfHwgdGhpcy5oYXNDaGFuZ2VkKGNoYW5nZSwgJ2Rpc2FibGVab29tJykpIHtcbiAgICAgIHRoaXMudG9nZ2xlQ29udHJvbHMoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFzQ2hhbmdlZChjaGFuZ2U6IFNpbXBsZUNoYW5nZSwgcHJvcDoga2V5b2YgTWFwQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNoYW5nZS5jdXJyZW50VmFsdWVbcHJvcF0gIT09IGNoYW5nZS5wcmV2aW91c1ZhbHVlW3Byb3BdO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZUNvbnRyb2xzKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5kaXNhYmxlWm9vbSkge1xuICAgICAgdGhpcy5tYXAucmVtb3ZlQ29udHJvbCh0aGlzLm1hcC56b29tQ29udHJvbCk7XG4gICAgICB0aGlzLm1hcC5zY3JvbGxXaGVlbFpvb20uZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1hcC5hZGRDb250cm9sKHRoaXMubWFwLnpvb21Db250cm9sKTtcbiAgICAgIHRoaXMubWFwLnNjcm9sbFdoZWVsWm9vbS5lbmFibGUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnLmRpc2FibGVQYW4pIHtcbiAgICAgIHRoaXMubWFwLmRyYWdnaW5nLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYXAuZHJhZ2dpbmcuZW5hYmxlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVUb3VjaChlOiBFdmVudCkge1xuICAgIC8vIERpc3JlZ2FyZCB0b3VjaCBldmVudHMgb24gdGhlIG1pbmltYXAgaWYgcHJlc2VudFxuICAgIGNvbnN0IGlnbm9yZUxpc3QgPSBbXG4gICAgICAnbGVhZmxldC1jb250cm9sLW1pbmltYXAnLFxuICAgICAgJ2xlYWZsZXQtaW50ZXJhY3RpdmUnLFxuICAgICAgJ2xlYWZsZXQtcG9wdXAtY29udGVudCcsXG4gICAgICAnbGVhZmxldC1wb3B1cC1jb250ZW50LXdyYXBwZXInLFxuICAgICAgJ2xlYWZsZXQtcG9wdXAtY2xvc2UtYnV0dG9uJyxcbiAgICAgICdsZWFmbGV0LWNvbnRyb2wtem9vbS1pbicsXG4gICAgICAnbGVhZmxldC1jb250cm9sLXpvb20tb3V0J1xuICAgIF07XG5cbiAgICBsZXQgaWdub3JlRWxlbWVudCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWdub3JlTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMubGVhZmxldC5Eb21VdGlsLmhhc0NsYXNzKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50LCBpZ25vcmVMaXN0W2ldKSkge1xuICAgICAgICBpZ25vcmVFbGVtZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLm1hcC5nZXRDb250YWluZXIoKTtcbiAgICBpZiAoaWdub3JlRWxlbWVudCkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmxlYWZsZXQuRG9tVXRpbC5oYXNDbGFzcyhlLnRhcmdldCBhcyBIVE1MRWxlbWVudCwgJ2xlYWZsZXQtaW50ZXJhY3RpdmUnKSAmJlxuICAgICAgICBlLnR5cGUgPT09ICd0b3VjaG1vdmUnICYmXG4gICAgICAgIChlIGFzIFRvdWNoRXZlbnQpLnRvdWNoZXMubGVuZ3RoID09PSAxXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5sZWFmbGV0LkRvbVV0aWwuYWRkQ2xhc3MoY29udGFpbmVyLCAndG91Y2gtd2FybmluZycpO1xuICAgICAgICB0aGlzLm1hcC5kcmFnZ2luZy5kaXNhYmxlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxlYWZsZXQuRG9tVXRpbC5yZW1vdmVDbGFzcyhjb250YWluZXIsICd0b3VjaC13YXJuaW5nJyk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGUudHlwZSAhPT0gJ3RvdWNobW92ZScgJiYgZS50eXBlICE9PSAndG91Y2hzdGFydCcpIHtcbiAgICAgIHRoaXMubGVhZmxldC5Eb21VdGlsLnJlbW92ZUNsYXNzKGNvbnRhaW5lciwgJ3RvdWNoLXdhcm5pbmcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKChlIGFzIFRvdWNoRXZlbnQpLnRvdWNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmxlYWZsZXQuRG9tVXRpbC5hZGRDbGFzcyhjb250YWluZXIsICd0b3VjaC13YXJuaW5nJyk7XG4gICAgICB0aGlzLm1hcC5kcmFnZ2luZy5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWFwLmRyYWdnaW5nLmVuYWJsZSgpO1xuICAgICAgdGhpcy5sZWFmbGV0LkRvbVV0aWwucmVtb3ZlQ2xhc3MoY29udGFpbmVyLCAndG91Y2gtd2FybmluZycpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgem9vbVRvQm91bmQoYXNzZXRzOiBQb3NpdGlvbk1hbmFnZWRPYmplY3RbXSkge1xuICAgIGlmIChpc0VtcHR5KGFzc2V0cykpIHJldHVybjtcblxuICAgIGNvbnN0IGJvdW5kczogW251bWJlciwgbnVtYmVyXVtdID0gYXNzZXRzLm1hcChhc3NldCA9PiBbXG4gICAgICBhc3NldC5jOHlfUG9zaXRpb24ubGF0LFxuICAgICAgYXNzZXQuYzh5X1Bvc2l0aW9uLmxuZ1xuICAgIF0pO1xuICAgIGlmIChhc3NldHMubGVuZ3RoID4gMSkge1xuICAgICAgdGhpcy5tYXAuZmx5VG9Cb3VuZHMoYm91bmRzLCB7IGFuaW1hdGU6IGZhbHNlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm1hcC5mbHlUbyhcbiAgICAgIFthc3NldHNbMF0uYzh5X1Bvc2l0aW9uLmxhdCwgYXNzZXRzWzBdLmM4eV9Qb3NpdGlvbi5sbmddLFxuICAgICAgdGhpcy5tYXAub3B0aW9ucy56b29tLFxuICAgICAge1xuICAgICAgICBhbmltYXRlOiBmYWxzZVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZpdEJvdW5kcyhib3VuZHM6IEwuTGF0TG5nQm91bmRzKSB7XG4gICAgaWYgKGJvdW5kcz8uaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLm1hcC5maXRCb3VuZHMoYm91bmRzLCB0aGlzLmNvbmZpZy5maXRCb3VuZHNPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJpbmRQb3B1cChtYXJrZXI6IEM4eU1hcmtlciwgY29udGV4dDogUG9zaXRpb25NYW5hZ2VkT2JqZWN0IHwgSUV2ZW50KSB7XG4gICAgaWYgKHRoaXMucG9wdXApIHtcbiAgICAgIG1hcmtlci5vbignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIHRoaXMucG9wdXAudmlld0NvbnRhaW5lci5jbGVhcigpO1xuICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy5wb3B1cC52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnBvcHVwLnRlbXBsYXRlLCB7XG4gICAgICAgICAgJGltcGxpY2l0OiBjb250ZXh0XG4gICAgICAgIH0pO1xuICAgICAgICB2aWV3LmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgbWFya2VyXG4gICAgICAgICAgLnVuYmluZFBvcHVwKClcbiAgICAgICAgICAuYmluZFBvcHVwKHRoaXMucG9wdXAuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnByZXZpb3VzU2libGluZywge1xuICAgICAgICAgICAgb2Zmc2V0OiBbLTMsIC00MF0sXG4gICAgICAgICAgICBtYXhXaWR0aDogMTQwLFxuICAgICAgICAgICAgYXV0b1BhbjogdHJ1ZSxcbiAgICAgICAgICAgIGNsb3NlQnV0dG9uOiBmYWxzZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLm9wZW5Qb3B1cCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYzh5LW1hcFwiPlxuICA8ZGl2ICNtYXA+PC9kaXY+XG48L2Rpdj5cbjxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiJdfQ==
|
|
430
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL21hcC9tYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vbWFwL21hcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUdOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQ0wsUUFBUSxFQUNSLFVBQVUsRUFDVixPQUFPLEVBQ1AsNEJBQTRCLEVBQzVCLGNBQWMsRUFDZixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbEUsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsU0FBUyxFQUNULEtBQUssRUFDTCxVQUFVLEVBQ1YsT0FBTyxFQUVSLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUdMLFlBQVksRUFFWixrQkFBa0IsRUFDbEIsY0FBYyxFQUVmLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7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SUFBSTtvQkFDYixXQUFXLEVBQUUsS0FBSztpQkFDbkIsQ0FBQztxQkFDRCxTQUFTLEVBQUUsQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDOzhHQS9lVSxZQUFZLHdGQStEYixjQUFjLGFBQ2Qsa0JBQWtCO2tHQWhFakIsWUFBWSxpVUFGWixDQUFDLDRCQUE0QixDQUFDLDZEQXVCM0IsaUJBQWlCLHdLQzFFakMsa0ZBSUE7OzJGRGlEYSxZQUFZO2tCQUx4QixTQUFTOytCQUNFLFNBQVMsYUFFUixDQUFDLDRCQUE0QixDQUFDOzswQkFpRXRDLE1BQU07MkJBQUMsY0FBYzs7MEJBQ3JCLE1BQU07MkJBQUMsa0JBQWtCO3dIQTdDNUIsVUFBVTtzQkFEVCxTQUFTO3VCQUFDLEtBQUs7Z0JBSWhCLEtBQUs7c0JBREosWUFBWTt1QkFBQyxpQkFBaUI7Z0JBSS9CLE1BQU07c0JBREwsS0FBSztnQkFJTixNQUFNO3NCQURMLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLGVBQWU7c0JBRGQsS0FBSztnQkFJTixnQkFBZ0I7c0JBRGYsTUFBTTtnQkFJUCxNQUFNO3NCQURMLE1BQU07Z0JBSVAsU0FBUztzQkFEUixNQUFNO2dCQUlQLFdBQVc7c0JBRFYsTUFBTTtnQkFJUCxTQUFTO3NCQURSLE1BQU07Z0JBSVAsS0FBSztzQkFESixNQUFNO2dCQUlQLE1BQU07c0JBREwsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJRXZlbnQgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7IE1hcERlZmF1bHRDb25maWcsIE1hcFRpbGVMYXllciB9IGZyb20gJ0BjOHkvb3B0aW9ucyc7XG5pbXBvcnQge1xuICBEYXRlUGlwZSxcbiAgR2VvU2VydmljZSxcbiAgZ2V0dGV4dCxcbiAgTWFuYWdlZE9iamVjdFJlYWx0aW1lU2VydmljZSxcbiAgc29ydEJ5UHJpb3JpdHlcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgdHlwZSAqIGFzIEwgZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgeyBmbGF0dGVuLCBpc0VtcHR5LCBpc1VuZGVmaW5lZCwgcmVtb3ZlIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZnJvbUV2ZW50LFxuICBORVZFUixcbiAgT2JzZXJ2YWJsZSxcbiAgU3ViamVjdCxcbiAgU3Vic2NyaXB0aW9uXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBmaXJzdCwgbWFwLCBzY2FuLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1hcFBvcHVwRGlyZWN0aXZlIH0gZnJvbSAnLi9tYXAtcG9wdXAuZGlyZWN0aXZlJztcbmltcG9ydCB7XG4gIEM4eU1hcmtlcixcbiAgQzh5TWFya2VyQXR0cmlidXRlcyxcbiAgZ2V0Qzh5TWFya2VyLFxuICBNYXBDb25maWcsXG4gIE1BUF9ERUZBVUxUX0NPTkZJRyxcbiAgTUFQX1RJTEVfTEFZRVIsXG4gIFBvc2l0aW9uTWFuYWdlZE9iamVjdFxufSBmcm9tICcuL21hcC5tb2RlbCc7XG5pbXBvcnQgeyBNYXBTZXJ2aWNlIH0gZnJvbSAnLi9tYXAuc2VydmljZSc7XG5pbXBvcnQgeyBpc051bGwsIGV2ZXJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LW1hcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXAuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtNYW5hZ2VkT2JqZWN0UmVhbHRpbWVTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBNYXBDb21wb25lbnQge1xuICAvKipcbiAgICogVGhlIGxlYWZsZXQgbWFwIG9iamVjdC5cbiAgICovXG4gIG1hcDogTC5NYXA7XG4gIC8qKlxuICAgKiBUaGUgbWFya2VycyBwbGFjZWQgb24gdGhlIG1hcC5cbiAgICovXG4gIG1hcmtlcnM6IEFycmF5PEM4eU1hcmtlciB8IEwuTWFya2VyPiA9IFtdO1xuICAvKipcbiAgICogVGhlIGxlYWZsZXQgcmVwcmVzZW50YXRpb24gdXNlZC5cbiAgICovXG4gIGxlYWZsZXQ6IHR5cGVvZiBMO1xuICAvKipcbiAgICogVGVsbHMgaWYgdGhlIG1hcCB3YXMgYWxyZWFkeSBpbml0aWFsaXplZC5cbiAgICovXG4gIGlzSW5pdCA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ21hcCcpXG4gIG1hcEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgQENvbnRlbnRDaGlsZChNYXBQb3B1cERpcmVjdGl2ZSlcbiAgcG9wdXA6IE1hcFBvcHVwRGlyZWN0aXZlO1xuXG4gIEBJbnB1dCgpXG4gIGNvbmZpZzogTWFwQ29uZmlnID0ge307XG5cbiAgQElucHV0KClcbiAgYXNzZXRzOiBQb3NpdGlvbk1hbmFnZWRPYmplY3QgfCBQb3NpdGlvbk1hbmFnZWRPYmplY3RbXTtcblxuICBASW5wdXQoKVxuICBwb2x5bGluZSQ6IE9ic2VydmFibGU8TC5MYXRMbmdFeHByZXNzaW9uW10gfCBMLkxhdExuZ0V4cHJlc3Npb25bXVtdPiA9IE5FVkVSO1xuXG4gIEBJbnB1dCgpXG4gIHBvbHlsaW5lT3B0aW9uczogTC5Qb2x5bGluZU9wdGlvbnM7XG5cbiAgQE91dHB1dCgpXG4gIG9uUmVhbHRpbWVVcGRhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPFBvc2l0aW9uTWFuYWdlZE9iamVjdD4oKTtcblxuICBAT3V0cHV0KClcbiAgb25Nb3ZlOiBPYnNlcnZhYmxlPEwuTGVhZmxldEV2ZW50PjtcblxuICBAT3V0cHV0KClcbiAgb25Nb3ZlRW5kOiBPYnNlcnZhYmxlPEwuTGVhZmxldEV2ZW50PjtcblxuICBAT3V0cHV0KClcbiAgb25ab29tU3RhcnQ6IE9ic2VydmFibGU8TC5MZWFmbGV0RXZlbnQ+O1xuXG4gIEBPdXRwdXQoKVxuICBvblpvb21FbmQ6IE9ic2VydmFibGU8TC5MZWFmbGV0RXZlbnQ+O1xuXG4gIEBPdXRwdXQoKVxuICBvbk1hcCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TC5NYXAgfCBudWxsPihudWxsKTtcblxuICBAT3V0cHV0KClcbiAgb25Jbml0ID0gbmV3IEV2ZW50RW1pdHRlcjx0eXBlb2YgTD4oKTtcblxuICBwcm90ZWN0ZWQgcmVhbHRpbWVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIHVuc3Vic2NyaWJlVHJpZ2dlciQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBtb1JlYWx0aW1lU2VydmljZTogTWFuYWdlZE9iamVjdFJlYWx0aW1lU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgbWFwU2VydmljZTogTWFwU2VydmljZSxcbiAgICBASW5qZWN0KE1BUF9USUxFX0xBWUVSKSBwcm90ZWN0ZWQgbGF5ZXJzJDogT2JzZXJ2YWJsZTxNYXBUaWxlTGF5ZXJbXT4sXG4gICAgQEluamVjdChNQVBfREVGQVVMVF9DT05GSUcpXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRDb25maWckOiBPYnNlcnZhYmxlPE1hcERlZmF1bHRDb25maWc+LFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBnZW86IEdlb1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGRhdGVQaXBlOiBEYXRlUGlwZVxuICApIHtcbiAgICB0aGlzLmluaXRPdXRwdXRzKCk7XG4gIH1cblxuICBzdGFydFJlYWx0aW1lKCkge1xuICAgIGlmICghdGhpcy5hc3NldHMgfHwgKEFycmF5LmlzQXJyYXkodGhpcy5hc3NldHMpICYmIHRoaXMuYXNzZXRzLmxlbmd0aCA+IDEpKSB7XG4gICAgICB0aGlzLmNvbmZpZy5yZWFsdGltZSA9IGZhbHNlO1xuICAgICAgdGhpcy5zdG9wUmVhbHRpbWUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYXNzZXQgPSBBcnJheS5pc0FycmF5KHRoaXMuYXNzZXRzKSA/IHRoaXMuYXNzZXRzWzBdIDogdGhpcy5hc3NldHM7XG4gICAgdGhpcy5yZWFsdGltZVN1YnNjcmlwdGlvbiA9IHRoaXMubW9SZWFsdGltZVNlcnZpY2VcbiAgICAgIC5vblVwZGF0ZSQoYXNzZXQpXG4gICAgICAuc3Vic2NyaWJlKChhc3NldDogUG9zaXRpb25NYW5hZ2VkT2JqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IG1hcmtlciA9IHRoaXMuZmluZE1hcmtlcihhc3NldC5pZCk7XG4gICAgICAgIGNvbnN0IGljb24gPSB0aGlzLmdldEFzc2V0SWNvbihhc3NldCk7XG4gICAgICAgIG1hcmtlci5zZXRJY29uKGljb24pO1xuICAgICAgICBtYXJrZXIuc2V0TGF0TG5nKHRoaXMuZ2VvLmdldExhdExvbmcoYXNzZXQpKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5hc3NldHMpKSB7XG4gICAgICAgICAgdGhpcy5hc3NldHNbMF0gPSBhc3NldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFzc2V0cyA9IGFzc2V0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW92ZVRvUG9zaXRpb25PZk1vKGFzc2V0KTtcbiAgICAgICAgdGhpcy5vblJlYWx0aW1lVXBkYXRlLmVtaXQoYXNzZXQpO1xuICAgICAgfSk7XG4gIH1cblxuICBtb3ZlVG9Qb3NpdGlvbk9mTW8ocG9zaXRpb25zOiBQb3NpdGlvbk1hbmFnZWRPYmplY3QgfCBQb3NpdGlvbk1hbmFnZWRPYmplY3RbXSkge1xuICAgIGNvbnN0IHBvc2l0aW9uID0gQXJyYXkuaXNBcnJheShwb3NpdGlvbnMpID8gcG9zaXRpb25zWzBdIDogcG9zaXRpb25zO1xuICAgIGlmICh0aGlzLmNvbmZpZy5mb2xsb3cpIHtcbiAgICAgIHRoaXMubWFwLnNldFZpZXcoW3Bvc2l0aW9uLmM4eV9Qb3NpdGlvbi5sYXQsIHBvc2l0aW9uLmM4eV9Qb3NpdGlvbi5sbmddKTtcbiAgICB9XG4gIH1cblxuICBzdG9wUmVhbHRpbWUoKSB7XG4gICAgaWYgKHRoaXMucmVhbHRpbWVTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucmVhbHRpbWVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBmaW5kTWFya2VyKG1vT3JJZDogc3RyaW5nIHwgSUV2ZW50IHwgUG9zaXRpb25NYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgZ2V0SWQgPSBtb09ySWQgPT4gKHR5cGVvZiBtb09ySWQgPT09ICdzdHJpbmcnID8gbW9PcklkIDogbW9PcklkPy5pZCk7XG4gICAgcmV0dXJuIHRoaXMubWFya2Vycy5maW5kKFxuICAgICAgKG1hcmtlcjogQzh5TWFya2VyKSA9PlxuICAgICAgICBtYXJrZXIuYXNzZXQ/LmlkID09PSBnZXRJZChtb09ySWQpIHx8IG1hcmtlci5ldmVudD8uaWQgPT09IGdldElkKG1vT3JJZClcbiAgICApO1xuICB9XG5cbiAgYWRkTWFya2VyVG9NYXAobWFya2VyOiBDOHlNYXJrZXIgfCBMLk1hcmtlcikge1xuICAgIHRoaXMubWFya2Vycy5wdXNoKG1hcmtlcik7XG4gICAgbWFya2VyLmFkZFRvKHRoaXMubWFwKTtcbiAgfVxuXG4gIGdldEFzc2V0TWFya2VyKGFzc2V0OiBQb3NpdGlvbk1hbmFnZWRPYmplY3QpIHtcbiAgICBpZiAoIWFzc2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaWNvbiA9IHRoaXMuZ2V0QXNzZXRJY29uKGFzc2V0KTtcbiAgICBjb25zdCBsZWFmbGV0TWFya2VyID0gdGhpcy5sZWFmbGV0Lm1hcmtlcih0aGlzLmdlby5nZXRMYXRMb25nKGFzc2V0KSwge1xuICAgICAgaWNvblxuICAgIH0pO1xuICAgIGNvbnN0IG1hcmtlciA9IGdldEM4eU1hcmtlcihsZWFmbGV0TWFya2VyLCBhc3NldCk7XG4gICAgdGhpcy5iaW5kUG9wdXAobWFya2VyLCBhc3NldCk7XG5cbiAgICByZXR1cm4gbWFya2VyO1xuICB9XG5cbiAgZ2V0VHJhY2tpbmdNYXJrZXIoZXZlbnQ6IElFdmVudCkge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpY29uID0gdGhpcy5nZXRUcmFja2luZ0ljb24oKTtcbiAgICBjb25zdCBsZWFmbGV0TWFya2VyID0gdGhpcy5sZWFmbGV0Lm1hcmtlcih0aGlzLmdlby5nZXRMYXRMb25nKGV2ZW50KSwgeyBpY29uIH0pO1xuICAgIGNvbnN0IG1hcmtlciA9IGdldEM4eU1hcmtlcihsZWFmbGV0TWFya2VyLCBudWxsLCBldmVudCk7XG4gICAgdGhpcy5iaW5kUG9wdXAobWFya2VyLCBldmVudCk7XG5cbiAgICByZXR1cm4gbWFya2VyO1xuICB9XG5cbiAgZ2V0QXNzZXRJY29uKGFzc2V0OiBQb3NpdGlvbk1hbmFnZWRPYmplY3QpIHtcbiAgICBjb25zdCBhc3NldFR5cGVJY29uID0gdGhpcy5jb25maWcuaWNvbiB8fCBhc3NldC5pY29uPy5uYW1lO1xuICAgIGNvbnN0IHN0YXR1cyA9IE1hcFNlcnZpY2UuZ2V0U3RhdHVzKGFzc2V0KTtcbiAgICBjb25zdCBjb2xvciA9IHRoaXMuY29uZmlnLmNvbG9yID8gYHN0eWxlPSdjb2xvcjogJHt0aGlzLmNvbmZpZy5jb2xvcn07J2AgOiAnJztcbiAgICBjb25zdCBpY29uID0gdGhpcy5sZWFmbGV0LmRpdkljb24oe1xuICAgICAgaHRtbDogYDxkaXYgY2xhc3M9XCJkbHQtYzh5LWljb24tbWFya2VyIGljb24tM3ggJHtzdGF0dXN9XCIgJHtjb2xvcn0+PGkgY2xhc3M9XCJkbHQtYzh5LWljb24tJHtcbiAgICAgICAgYXNzZXRUeXBlSWNvbiB8fCAnZGF0YS10cmFuc2ZlcidcbiAgICAgIH1cIiAvPjwvZGl2PmAsXG4gICAgICBjbGFzc05hbWU6ICdjOHktbWFwLW1hcmtlci1pY29uJyxcbiAgICAgIC8vIGljb25BbmNob3IgaXMgdXNlZCB0byBzZXQgdGhlIG1hcmtlciBhY2N1cmF0ZWx5IG9uIGNsaWNrXG4gICAgICBpY29uQW5jaG9yOiBbOCwgOF1cbiAgICB9KTtcbiAgICByZXR1cm4gaWNvbjtcbiAgfVxuXG4gIGdldFRyYWNraW5nSWNvbigpIHtcbiAgICBjb25zdCBpY29uID0gdGhpcy5sZWFmbGV0LmRpdkljb24oe1xuICAgICAgaHRtbDogYDxkaXYgY2xhc3M9XCJkbHQtYzh5LWljb24tbWFya2VyIGljb24tM3ggdGV4dC1tdXRlZFwiPjwvZGl2PmAsXG4gICAgICBjbGFzc05hbWU6ICdjOHktbWFwLW1hcmtlci1pY29uJyxcbiAgICAgIC8vIGljb25BbmNob3IgaXMgdXNlZCB0byBzZXQgdGhlIG1hcmtlciBhY2N1cmF0ZWx5IG9uIGNsaWNrXG4gICAgICBpY29uQW5jaG9yOiBbOCwgOF1cbiAgICB9KTtcbiAgICByZXR1cm4gaWNvbjtcbiAgfVxuXG4gIHJlbW92ZU1hcmtlcihtYXJrZXI6IEM4eU1hcmtlciB8IEwuTWFya2VyKSB7XG4gICAgaWYgKG1hcmtlcikge1xuICAgICAgbWFya2VyLnJlbW92ZSgpO1xuICAgICAgcmVtb3ZlKHRoaXMubWFya2VycywgbSA9PiBtID09PSBtYXJrZXIpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyTWFya2VycyhmcmFnbWVudD86IEM4eU1hcmtlckF0dHJpYnV0ZXMpIHtcbiAgICBjb25zdCBtYXRjaGluZ01hcmtlcnMgPSBtYXJrZXIgPT4gIWZyYWdtZW50IHx8ICEhbWFya2VyW2ZyYWdtZW50XTtcbiAgICB0aGlzLm1hcmtlcnMuZmlsdGVyKG1hdGNoaW5nTWFya2VycykuZm9yRWFjaChtYXJrZXIgPT4gbWFya2VyLnJlbW92ZSgpKTtcbiAgICB0aGlzLm1hcmtlcnMgPSB0aGlzLm1hcmtlcnMuZmlsdGVyKG1hcmtlciA9PiAhbWF0Y2hpbmdNYXJrZXJzKG1hcmtlcikpO1xuICB9XG5cbiAgcmVmcmVzaE1hcmtlcnMoKSB7XG4gICAgdGhpcy5jbGVhck1hcmtlcnMoKTtcbiAgICBsZXQgYXNzZXRzOiBQb3NpdGlvbk1hbmFnZWRPYmplY3RbXSA9IFtdO1xuICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5hc3NldHMpKSB7XG4gICAgICBhc3NldHMgPSBBcnJheS5pc0FycmF5KHRoaXMuYXNzZXRzKSA/IHRoaXMuYXNzZXRzIDogW3RoaXMuYXNzZXRzXTtcbiAgICB9XG4gICAgYXNzZXRzLmZvckVhY2goYXNzZXQgPT4ge1xuICAgICAgY29uc3QgbWFya2VyID0gdGhpcy5nZXRBc3NldE1hcmtlcihhc3NldCk7XG4gICAgICB0aGlzLmFkZE1hcmtlclRvTWFwKG1hcmtlcik7XG4gICAgfSk7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5jZW50ZXIpIHtcbiAgICAgIHRoaXMuem9vbVRvQm91bmQoYXNzZXRzKTtcbiAgICB9XG4gICAgdGhpcy50b2dnbGVDb250cm9scygpO1xuICB9XG5cbiAgY2VudGVyKCkge1xuICAgIHRoaXMubWFwPy5zZXRWaWV3KHRoaXMuY29uZmlnLmNlbnRlcik7XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIGlmICh0aGlzLmlzSW5pdCkge1xuICAgICAgdGhpcy5yZWZyZXNoTWFya2VycygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5sZWFmbGV0ID0gYXdhaXQgdGhpcy5tYXBTZXJ2aWNlLmdldExlYWZsZXQoKTtcbiAgICBjb25zdCBpbml0aWFsaXplZCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmxheWVycyQsIHRoaXMuZGVmYXVsdENvbmZpZyRdKS5waXBlKFxuICAgICAgZmlyc3QoKSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlVHJpZ2dlciQpXG4gICAgKTtcblxuICAgIGluaXRpYWxpemVkJC5zdWJzY3JpYmUoKFtsYXllcnMsIGRlZmF1bHRDb25maWddKSA9PiB7XG4gICAgICB0aGlzLmluaXRNYXAobGF5ZXJzLCBkZWZhdWx0Q29uZmlnKTtcbiAgICAgIHRoaXMucmVmcmVzaE1hcmtlcnMoKTtcbiAgICB9KTtcblxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMucG9seWxpbmUkLCBpbml0aWFsaXplZCRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoW2V4cHJlc3Npb25zXSkgPT4gdGhpcy5sZWFmbGV0LnBvbHlsaW5lKGV4cHJlc3Npb25zLCB0aGlzLnBvbHlsaW5lT3B0aW9ucykpLFxuICAgICAgICBzY2FuKChvbGRQb2x5bGluZSwgbmV3UG9seWxpbmUpID0+IHtcbiAgICAgICAgICBpZiAoISFvbGRQb2x5bGluZSkge1xuICAgICAgICAgICAgdGhpcy5tYXAucmVtb3ZlTGF5ZXIob2xkUG9seWxpbmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoISFuZXdQb2x5bGluZSkge1xuICAgICAgICAgICAgbmV3UG9seWxpbmUuYWRkVG8odGhpcy5tYXApO1xuICAgICAgICAgICAgdGhpcy5maXRCb3VuZHMobmV3UG9seWxpbmUuZ2V0Qm91bmRzKCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXdQb2x5bGluZTtcbiAgICAgICAgfSwgbnVsbCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlVHJpZ2dlciQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tYXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuYXNzZXRzPy5jdXJyZW50VmFsdWUgJiYgIWNoYW5nZXMuYXNzZXRzPy5maXJzdENoYW5nZSkge1xuICAgICAgdGhpcy5yZWZyZXNoTWFya2VycygpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLmNvbmZpZz8uY3VycmVudFZhbHVlICYmICFjaGFuZ2VzLmNvbmZpZz8uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMuY2hhbmdlQ29uZmlnKGNoYW5nZXMuY29uZmlnKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bnN1YnNjcmliZUFsbExpc3RlbmVycygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVuc3Vic2NyaWJlQWxsTGlzdGVuZXJzKCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmVUcmlnZ2VyJC5uZXh0KCk7XG4gICAgdGhpcy5zdG9wUmVhbHRpbWUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0T3V0cHV0cygpIHtcbiAgICBjb25zdCBnZXRNYXBFdmVudE9ic2VydmFibGUgPSBldmVudE5hbWUgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMub25NYXAucGlwZShcbiAgICAgICAgZmlsdGVyKG1hcCA9PiAhIW1hcCksXG4gICAgICAgIHN3aXRjaE1hcChtYXAgPT4gZnJvbUV2ZW50PEwuTGVhZmxldEV2ZW50PihtYXAsIGV2ZW50TmFtZSkpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKVxuICAgICAgKTtcbiAgICB9O1xuICAgIGNvbnN0IGRyYWdTdGFydCQgPSBnZXRNYXBFdmVudE9ic2VydmFibGUoJ2RyYWdzdGFydCcpO1xuICAgIGNvbnN0IG1vdmUkID0gZ2V0TWFwRXZlbnRPYnNlcnZhYmxlKCdtb3ZlJyk7XG4gICAgY29uc3QgZHJhZ0VuZCQgPSBnZXRNYXBFdmVudE9ic2VydmFibGUoJ2RyYWdlbmQnKTtcblxuICAgIHRoaXMub25Nb3ZlID0gZHJhZ1N0YXJ0JC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IG1vdmUkLnBpcGUodGFrZVVudGlsKGRyYWdFbmQkKSkpLFxuICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVUcmlnZ2VyJClcbiAgICApO1xuXG4gICAgdGhpcy5vbk1vdmVFbmQgPSBnZXRNYXBFdmVudE9ic2VydmFibGUoJ21vdmVlbmQnKTtcblxuICAgIHRoaXMub25ab29tRW5kID0gZ2V0TWFwRXZlbnRPYnNlcnZhYmxlKCd6b29tZW5kJyk7XG5cbiAgICB0aGlzLm9uWm9vbVN0YXJ0ID0gZ2V0TWFwRXZlbnRPYnNlcnZhYmxlKCd6b29tc3RhcnQnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0TWFwKGxheWVyczogTWFwVGlsZUxheWVyW10sIGRlZmF1bHRDb25maWc6IE1hcENvbmZpZyk6IHZvaWQge1xuICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgY2VudGVyOiB0aGlzLmNvbmZpZy5jZW50ZXIgfHwgZGVmYXVsdENvbmZpZy5jZW50ZXIsXG4gICAgICB6b29tU25hcDogMCxcbiAgICAgIHpvb206IHRoaXMuY29uZmlnLnpvb21MZXZlbCB8fCBkZWZhdWx0Q29uZmlnLnpvb21MZXZlbFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5tYXApIHtcbiAgICAgIHRoaXMubWFwLnJlbW92ZSgpO1xuICAgIH1cbiAgICB0aGlzLm1hcCA9IHRoaXMubGVhZmxldC5tYXAodGhpcy5tYXBFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIGRlZmF1bHRPcHRpb25zKTtcblxuICAgIHRoaXMubWFwLmF0dHJpYnV0aW9uQ29udHJvbC5zZXRQcmVmaXgoJycpO1xuXG4gICAgdGhpcy5hZGRMYXllcnMobGF5ZXJzKTtcblxuICAgIHRoaXMuaGFuZGxlTW9iaWxlKCk7XG5cbiAgICB0aGlzLm9uTWFwLm5leHQodGhpcy5tYXApO1xuXG4gICAgdGhpcy5pc0luaXQgPSB0cnVlO1xuICAgIHRoaXMub25Jbml0LmVtaXQodGhpcy5sZWFmbGV0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVNb2JpbGUoKSB7XG4gICAgLy8gYWRkaW5nIGV2ZW50IGxpc3RlbmVyIHRvIGRvIG1vYmlsZSAyIGZpbmdlciBzY3JvbGxpbmdcbiAgICBpZiAodGhpcy5sZWFmbGV0LkJyb3dzZXIubW9iaWxlKSB7XG4gICAgICBjb25zdCB0b3VjaE1zZyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ1VzZSB0d28gZmluZ2VycyB0byBtb3ZlIHRoZSBtYXAuJykpO1xuICAgICAgdGhpcy5tYXAuZHJhZ2dpbmcuZGlzYWJsZSgpO1xuICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5tYXAuZ2V0Q29udGFpbmVyKCk7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdkYXRhLXRvdWNoLXdhcm5pbmctY29udGVudCcsIHRvdWNoTXNnKTtcbiAgICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgZXZlbnQgPT4gdGhpcy5oYW5kbGVUb3VjaChldmVudCkpO1xuICAgICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIGV2ZW50ID0+IHRoaXMuaGFuZGxlVG91Y2goZXZlbnQpKTtcbiAgICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIGV2ZW50ID0+IHRoaXMuaGFuZGxlVG91Y2goZXZlbnQpKTtcbiAgICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIGV2ZW50ID0+IHRoaXMuaGFuZGxlVG91Y2goZXZlbnQpKTtcbiAgICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50ID0+IHRoaXMuaGFuZGxlVG91Y2goZXZlbnQpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkTGF5ZXJzKGxheWVyczogTWFwVGlsZUxheWVyW10pIHtcbiAgICBjb25zdCBmbGF0dGVuTGF5ZXJzOiBNYXBUaWxlTGF5ZXJbXSA9IGZsYXR0ZW4obGF5ZXJzKTtcbiAgICBjb25zdCBiYXNlTGF5ZXJzOiBMLkNvbnRyb2wuTGF5ZXJzT2JqZWN0ID0ge307XG4gICAgY29uc3Qgb3ZlcmxheXM6IEwuQ29udHJvbC5MYXllcnNPYmplY3QgPSB7fTtcbiAgICBsZXQgZmlyc3RMYXllciA9IHRydWU7XG4gICAgZm9yIChjb25zdCBsYXllciBvZiBzb3J0QnlQcmlvcml0eShmbGF0dGVuTGF5ZXJzKSkge1xuICAgICAgY29uc3Qgb2JqZWN0VG9BZGRUbyA9IGxheWVyLmlzT3ZlcmxheSA/IG92ZXJsYXlzIDogYmFzZUxheWVycztcbiAgICAgIGlmIChvYmplY3RUb0FkZFRvW2xheWVyLmxhYmVsXSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGlsZXMgPSB0aGlzLmxlYWZsZXQudGlsZUxheWVyKGxheWVyLmxheWVyVXJsLCBsYXllci5vcHRpb25zKTtcbiAgICAgIGlmICghbGF5ZXIuaXNPdmVybGF5ICYmIGZpcnN0TGF5ZXIpIHtcbiAgICAgICAgZmlyc3RMYXllciA9IGZhbHNlO1xuICAgICAgICB0aWxlcy5hZGRUbyh0aGlzLm1hcCk7XG4gICAgICB9XG4gICAgICBvYmplY3RUb0FkZFRvW2xheWVyLmxhYmVsXSA9IHRpbGVzO1xuICAgIH1cbiAgICBpZiAoZmxhdHRlbkxheWVycy5sZW5ndGggPiAxKSB7XG4gICAgICB0aGlzLmxlYWZsZXQuY29udHJvbC5sYXllcnMoYmFzZUxheWVycywgb3ZlcmxheXMsIHsgcG9zaXRpb246ICdib3R0b21sZWZ0JyB9KS5hZGRUbyh0aGlzLm1hcCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGNoYW5nZUNvbmZpZyhjaGFuZ2U6IFNpbXBsZUNoYW5nZSkge1xuICAgIGlmICh0aGlzLmhhc0NoYW5nZWQoY2hhbmdlLCAnem9vbUxldmVsJykpIHtcbiAgICAgIHRoaXMubWFwLnNldFpvb20odGhpcy5jb25maWcuem9vbUxldmVsKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNDaGFuZ2VkKGNoYW5nZSwgJ2NlbnRlcicpICYmIGV2ZXJ5KGNoYW5nZS5jdXJyZW50VmFsdWUuY2VudGVyLCBwID0+ICFpc051bGwocCkpKSB7XG4gICAgICB0aGlzLm1hcC5zZXRWaWV3KGNoYW5nZS5jdXJyZW50VmFsdWUuY2VudGVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNDaGFuZ2VkKGNoYW5nZSwgJ2ljb24nKSB8fCB0aGlzLmhhc0NoYW5nZWQoY2hhbmdlLCAnY29sb3InKSkge1xuICAgICAgdGhpcy5yZWZyZXNoTWFya2VycygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0NoYW5nZWQoY2hhbmdlLCAncmVhbHRpbWUnKSAmJiBjaGFuZ2UuY3VycmVudFZhbHVlLnJlYWx0aW1lKSB7XG4gICAgICB0aGlzLnN0YXJ0UmVhbHRpbWUoKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlLmN1cnJlbnRWYWx1ZS5yZWFsdGltZSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuc3RvcFJlYWx0aW1lKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzQ2hhbmdlZChjaGFuZ2UsICdmb2xsb3cnKSkge1xuICAgICAgdGhpcy5tb3ZlVG9Qb3NpdGlvbk9mTW8odGhpcy5hc3NldHMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0NoYW5nZWQoY2hhbmdlLCAnZGlzYWJsZVBhbicpIHx8IHRoaXMuaGFzQ2hhbmdlZChjaGFuZ2UsICdkaXNhYmxlWm9vbScpKSB7XG4gICAgICB0aGlzLnRvZ2dsZUNvbnRyb2xzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhc0NoYW5nZWQoY2hhbmdlOiBTaW1wbGVDaGFuZ2UsIHByb3A6IGtleW9mIE1hcENvbmZpZykge1xuICAgIHJldHVybiBjaGFuZ2UuY3VycmVudFZhbHVlW3Byb3BdICE9PSBjaGFuZ2UucHJldmlvdXNWYWx1ZVtwcm9wXTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVDb250cm9scygpIHtcbiAgICBpZiAodGhpcy5jb25maWcuZGlzYWJsZVpvb20pIHtcbiAgICAgIHRoaXMubWFwLnJlbW92ZUNvbnRyb2wodGhpcy5tYXAuem9vbUNvbnRyb2wpO1xuICAgICAgdGhpcy5tYXAuc2Nyb2xsV2hlZWxab29tLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYXAuYWRkQ29udHJvbCh0aGlzLm1hcC56b29tQ29udHJvbCk7XG4gICAgICB0aGlzLm1hcC5zY3JvbGxXaGVlbFpvb20uZW5hYmxlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbmZpZy5kaXNhYmxlUGFuKSB7XG4gICAgICB0aGlzLm1hcC5kcmFnZ2luZy5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWFwLmRyYWdnaW5nLmVuYWJsZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVG91Y2goZTogRXZlbnQpIHtcbiAgICAvLyBEaXNyZWdhcmQgdG91Y2ggZXZlbnRzIG9uIHRoZSBtaW5pbWFwIGlmIHByZXNlbnRcbiAgICBjb25zdCBpZ25vcmVMaXN0ID0gW1xuICAgICAgJ2xlYWZsZXQtY29udHJvbC1taW5pbWFwJyxcbiAgICAgICdsZWFmbGV0LWludGVyYWN0aXZlJyxcbiAgICAgICdsZWFmbGV0LXBvcHVwLWNvbnRlbnQnLFxuICAgICAgJ2xlYWZsZXQtcG9wdXAtY29udGVudC13cmFwcGVyJyxcbiAgICAgICdsZWFmbGV0LXBvcHVwLWNsb3NlLWJ1dHRvbicsXG4gICAgICAnbGVhZmxldC1jb250cm9sLXpvb20taW4nLFxuICAgICAgJ2xlYWZsZXQtY29udHJvbC16b29tLW91dCdcbiAgICBdO1xuXG4gICAgbGV0IGlnbm9yZUVsZW1lbnQgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlnbm9yZUxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmxlYWZsZXQuRG9tVXRpbC5oYXNDbGFzcyhlLnRhcmdldCBhcyBIVE1MRWxlbWVudCwgaWdub3JlTGlzdFtpXSkpIHtcbiAgICAgICAgaWdub3JlRWxlbWVudCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5tYXAuZ2V0Q29udGFpbmVyKCk7XG4gICAgaWYgKGlnbm9yZUVsZW1lbnQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5sZWFmbGV0LkRvbVV0aWwuaGFzQ2xhc3MoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQsICdsZWFmbGV0LWludGVyYWN0aXZlJykgJiZcbiAgICAgICAgZS50eXBlID09PSAndG91Y2htb3ZlJyAmJlxuICAgICAgICAoZSBhcyBUb3VjaEV2ZW50KS50b3VjaGVzLmxlbmd0aCA9PT0gMVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMubGVhZmxldC5Eb21VdGlsLmFkZENsYXNzKGNvbnRhaW5lciwgJ3RvdWNoLXdhcm5pbmcnKTtcbiAgICAgICAgdGhpcy5tYXAuZHJhZ2dpbmcuZGlzYWJsZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sZWFmbGV0LkRvbVV0aWwucmVtb3ZlQ2xhc3MoY29udGFpbmVyLCAndG91Y2gtd2FybmluZycpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChlLnR5cGUgIT09ICd0b3VjaG1vdmUnICYmIGUudHlwZSAhPT0gJ3RvdWNoc3RhcnQnKSB7XG4gICAgICB0aGlzLmxlYWZsZXQuRG9tVXRpbC5yZW1vdmVDbGFzcyhjb250YWluZXIsICd0b3VjaC13YXJuaW5nJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgoZSBhcyBUb3VjaEV2ZW50KS50b3VjaGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5sZWFmbGV0LkRvbVV0aWwuYWRkQ2xhc3MoY29udGFpbmVyLCAndG91Y2gtd2FybmluZycpO1xuICAgICAgdGhpcy5tYXAuZHJhZ2dpbmcuZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1hcC5kcmFnZ2luZy5lbmFibGUoKTtcbiAgICAgIHRoaXMubGVhZmxldC5Eb21VdGlsLnJlbW92ZUNsYXNzKGNvbnRhaW5lciwgJ3RvdWNoLXdhcm5pbmcnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHpvb21Ub0JvdW5kKGFzc2V0czogUG9zaXRpb25NYW5hZ2VkT2JqZWN0W10pIHtcbiAgICBpZiAoaXNFbXB0eShhc3NldHMpKSByZXR1cm47XG5cbiAgICBjb25zdCBib3VuZHM6IFtudW1iZXIsIG51bWJlcl1bXSA9IGFzc2V0cy5tYXAoYXNzZXQgPT4gW1xuICAgICAgYXNzZXQuYzh5X1Bvc2l0aW9uLmxhdCxcbiAgICAgIGFzc2V0LmM4eV9Qb3NpdGlvbi5sbmdcbiAgICBdKTtcbiAgICBpZiAoYXNzZXRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMubWFwLmZseVRvQm91bmRzKGJvdW5kcywgeyBhbmltYXRlOiBmYWxzZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5tYXAuZmx5VG8oXG4gICAgICBbYXNzZXRzWzBdLmM4eV9Qb3NpdGlvbi5sYXQsIGFzc2V0c1swXS5jOHlfUG9zaXRpb24ubG5nXSxcbiAgICAgIHRoaXMubWFwLm9wdGlvbnMuem9vbSxcbiAgICAgIHtcbiAgICAgICAgYW5pbWF0ZTogZmFsc2VcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmaXRCb3VuZHMoYm91bmRzOiBMLkxhdExuZ0JvdW5kcykge1xuICAgIGlmIChib3VuZHM/LmlzVmFsaWQoKSkge1xuICAgICAgdGhpcy5tYXAuZml0Qm91bmRzKGJvdW5kcywgdGhpcy5jb25maWcuZml0Qm91bmRzT3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBiaW5kUG9wdXAobWFya2VyOiBDOHlNYXJrZXIsIGNvbnRleHQ6IFBvc2l0aW9uTWFuYWdlZE9iamVjdCB8IElFdmVudCkge1xuICAgIGlmICh0aGlzLnBvcHVwKSB7XG4gICAgICBtYXJrZXIub24oJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICB0aGlzLnBvcHVwLnZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICAgICAgY29uc3QgdmlldyA9IHRoaXMucG9wdXAudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5wb3B1cC50ZW1wbGF0ZSwge1xuICAgICAgICAgICRpbXBsaWNpdDogY29udGV4dFxuICAgICAgICB9KTtcbiAgICAgICAgdmlldy5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIG1hcmtlclxuICAgICAgICAgIC51bmJpbmRQb3B1cCgpXG4gICAgICAgICAgLmJpbmRQb3B1cCh0aGlzLnBvcHVwLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wcmV2aW91c1NpYmxpbmcsIHtcbiAgICAgICAgICAgIG9mZnNldDogWy0zLCAtNDBdLFxuICAgICAgICAgICAgbWF4V2lkdGg6IDE0MCxcbiAgICAgICAgICAgIGF1dG9QYW46IHRydWUsXG4gICAgICAgICAgICBjbG9zZUJ1dHRvbjogZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5vcGVuUG9wdXAoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImM4eS1tYXBcIj5cbiAgPGRpdiAjbWFwPjwvZGl2PlxuPC9kaXY+XG48bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4iXX0=
|