@dereekb/dbx-web 9.1.1 → 9.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/mapbox/dereekb-dbx-web-mapbox.mjs +5 -0
- package/esm2020/mapbox/index.mjs +2 -0
- package/esm2020/mapbox/lib/index.mjs +6 -0
- package/esm2020/mapbox/lib/mapbox.mjs +12 -0
- package/esm2020/mapbox/lib/mapbox.module.mjs +30 -0
- package/esm2020/mapbox/lib/mapbox.service.mjs +36 -0
- package/esm2020/mapbox/lib/mapbox.store.map.directive.mjs +50 -0
- package/esm2020/mapbox/lib/mapbox.store.mjs +283 -0
- package/fesm2015/dereekb-dbx-web-mapbox.mjs +415 -0
- package/fesm2015/dereekb-dbx-web-mapbox.mjs.map +1 -0
- package/fesm2020/dereekb-dbx-web-mapbox.mjs +402 -0
- package/fesm2020/dereekb-dbx-web-mapbox.mjs.map +1 -0
- package/mapbox/README.md +6 -0
- package/mapbox/index.d.ts +1 -0
- package/mapbox/lib/index.d.ts +5 -0
- package/mapbox/lib/mapbox.d.ts +59 -0
- package/mapbox/lib/mapbox.module.d.ts +11 -0
- package/mapbox/lib/mapbox.service.d.ts +24 -0
- package/mapbox/lib/mapbox.store.d.ts +114 -0
- package/mapbox/lib/mapbox.store.map.directive.d.ts +18 -0
- package/package.json +11 -3
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyZWVrYi1kYngtd2ViLW1hcGJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC13ZWIvbWFwYm94L3NyYy9kZXJlZWtiLWRieC13ZWItbWFwYm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './lib';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL21hcGJveC9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYic7XG4iXX0=
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './mapbox.module';
|
|
2
|
+
export * from './mapbox.service';
|
|
3
|
+
export * from './mapbox.store.map.directive';
|
|
4
|
+
export * from './mapbox.store';
|
|
5
|
+
export * from './mapbox';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL21hcGJveC9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL21hcGJveC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9tYXBib3guc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL21hcGJveC5zdG9yZS5tYXAuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbWFwYm94LnN0b3JlJztcbmV4cG9ydCAqIGZyb20gJy4vbWFwYm94JztcbiJdfQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const KNOWN_MAPBOX_STYLES = [
|
|
2
|
+
//
|
|
3
|
+
'mapbox://styles/mapbox/streets-v11',
|
|
4
|
+
'mapbox://styles/mapbox/outdoors-v11',
|
|
5
|
+
'mapbox://styles/mapbox/light-v10',
|
|
6
|
+
'mapbox://styles/mapbox/dark-v10',
|
|
7
|
+
'mapbox://styles/mapbox/satellite-v9',
|
|
8
|
+
'mapbox://styles/mapbox/satellite-streets-v11',
|
|
9
|
+
'mapbox://styles/mapbox/navigation-day-v1',
|
|
10
|
+
'mapbox://styles/mapbox/navigation-night-v1'
|
|
11
|
+
];
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi9tYXBib3gvc3JjL2xpYi9tYXBib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQXVCO0lBQ3JELEVBQUU7SUFDRixvQ0FBb0M7SUFDcEMscUNBQXFDO0lBQ3JDLGtDQUFrQztJQUNsQyxpQ0FBaUM7SUFDakMscUNBQXFDO0lBQ3JDLDhDQUE4QztJQUM5QywwQ0FBMEM7SUFDMUMsNENBQTRDO0NBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMYXRMbmdQb2ludCwgTGF0TG5nUG9pbnRJbnB1dCwgTGF0TG5nQm91bmQsIExhdExuZ0JvdW5kSW5wdXQgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCAqIGFzIE1hcGJveEdsIGZyb20gJ21hcGJveC1nbCc7XG5cbmV4cG9ydCB0eXBlIEtub3duTWFwYm94U3R5bGUgPSAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zdHJlZXRzLXYxMScgfCAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9vdXRkb29ycy12MTEnIHwgJ21hcGJveDovL3N0eWxlcy9tYXBib3gvbGlnaHQtdjEwJyB8ICdtYXBib3g6Ly9zdHlsZXMvbWFwYm94L2RhcmstdjEwJyB8ICdtYXBib3g6Ly9zdHlsZXMvbWFwYm94L3NhdGVsbGl0ZS12OScgfCAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zYXRlbGxpdGUtc3RyZWV0cy12MTEnIHwgJ21hcGJveDovL3N0eWxlcy9tYXBib3gvbmF2aWdhdGlvbi1kYXktdjEnIHwgJ21hcGJveDovL3N0eWxlcy9tYXBib3gvbmF2aWdhdGlvbi1uaWdodC12MSc7XG5cbmV4cG9ydCBjb25zdCBLTk9XTl9NQVBCT1hfU1RZTEVTOiBLbm93bk1hcGJveFN0eWxlW10gPSBbXG4gIC8vXG4gICdtYXBib3g6Ly9zdHlsZXMvbWFwYm94L3N0cmVldHMtdjExJyxcbiAgJ21hcGJveDovL3N0eWxlcy9tYXBib3gvb3V0ZG9vcnMtdjExJyxcbiAgJ21hcGJveDovL3N0eWxlcy9tYXBib3gvbGlnaHQtdjEwJyxcbiAgJ21hcGJveDovL3N0eWxlcy9tYXBib3gvZGFyay12MTAnLFxuICAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zYXRlbGxpdGUtdjknLFxuICAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zYXRlbGxpdGUtc3RyZWV0cy12MTEnLFxuICAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9uYXZpZ2F0aW9uLWRheS12MScsXG4gICdtYXBib3g6Ly9zdHlsZXMvbWFwYm94L25hdmlnYXRpb24tbmlnaHQtdjEnXG5dO1xuXG5leHBvcnQgdHlwZSBNYXBib3hab29tTGV2ZWwgPSBudW1iZXI7XG5leHBvcnQgdHlwZSBNYXBib3hQaXRjaCA9IG51bWJlcjtcbmV4cG9ydCB0eXBlIE1hcGJveEJlYXJpbmcgPSBudW1iZXI7XG5cbmV4cG9ydCB0eXBlIERieE1hcGJveENsaWNrRXZlbnQgPSBNYXBib3hHbC5NYXBNb3VzZUV2ZW50ICYgTWFwYm94R2wuRXZlbnREYXRhO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hcGJveFN0eWxlQ29uZmlnIHtcbiAgc3R5bGU6IE1hcGJveEdsLlN0eWxlIHwgc3RyaW5nO1xuICBvcHRpb25zPzoge1xuICAgIGRpZmY/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIGxvY2FsSWRlb2dyYXBoRm9udEZhbWlseT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBib3hGaXRCb3VuZHMge1xuICBib3VuZHM6IExhdExuZ0JvdW5kSW5wdXQ7XG4gIG9wdGlvbnM/OiBtYXBib3hnbC5GaXRCb3VuZHNPcHRpb25zO1xuICBldmVudERhdGE/OiBtYXBib3hnbC5FdmVudERhdGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwYm94SnVtcFRvUG9zaXRpb25PcHRpb25zIGV4dGVuZHMgT21pdDxNYXBib3hHbC5DYW1lcmFPcHRpb25zLCAnY2VudGVyJz4ge1xuICBjZW50ZXI6IExhdExuZ1BvaW50SW5wdXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwYm94SnVtcFRvIHtcbiAgY2VudGVyPzogTGF0TG5nUG9pbnRJbnB1dDtcbiAgdG8/OiBNYXBib3hKdW1wVG9Qb3NpdGlvbk9wdGlvbnM7XG4gIGV2ZW50RGF0YT86IG1hcGJveGdsLkV2ZW50RGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBib3hFYXNlVG9Qb3NpdGlvbk9wdGlvbnMgZXh0ZW5kcyBPbWl0PE1hcGJveEdsLkVhc2VUb09wdGlvbnMsICdjZW50ZXInPiwgTWFwYm94SnVtcFRvUG9zaXRpb25PcHRpb25zIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwYm94RWFzZVRvIHtcbiAgY2VudGVyPzogTGF0TG5nUG9pbnRJbnB1dDtcbiAgdG8/OiBNYXBib3hFYXNlVG9Qb3NpdGlvbk9wdGlvbnM7XG4gIGV2ZW50RGF0YT86IG1hcGJveGdsLkV2ZW50RGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBib3hGbHlUb1Bvc2l0aW9uT3B0aW9ucyBleHRlbmRzIE9taXQ8TWFwYm94R2wuRmx5VG9PcHRpb25zLCAnY2VudGVyJz4sIE1hcGJveEp1bXBUb1Bvc2l0aW9uT3B0aW9ucyB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcGJveEZseVRvIHtcbiAgY2VudGVyPzogTGF0TG5nUG9pbnRJbnB1dDtcbiAgdG8/OiBNYXBib3hGbHlUb1Bvc2l0aW9uT3B0aW9ucztcbiAgZXZlbnREYXRhPzogbWFwYm94Z2wuRXZlbnREYXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcGJveFJvdGF0ZVRvIHtcbiAgYmVhcmluZzogTWFwYm94QmVhcmluZztcbiAgb3B0aW9ucz86IG1hcGJveGdsLkFuaW1hdGlvbk9wdGlvbnM7XG4gIGV2ZW50RGF0YT86IG1hcGJveGdsLkV2ZW50RGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBib3hSZXNldE5vcnRoIHtcbiAgb3B0aW9ucz86IG1hcGJveGdsLkFuaW1hdGlvbk9wdGlvbnM7XG4gIGV2ZW50RGF0YT86IG1hcGJveGdsLkV2ZW50RGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBib3hSZXNldE5vcnRoUGl0Y2gge1xuICBvcHRpb25zPzogbWFwYm94Z2wuQW5pbWF0aW9uT3B0aW9ucztcbiAgZXZlbnREYXRhPzogbWFwYm94Z2wuRXZlbnREYXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcGJveFNuYXBUb05vcnRoIHtcbiAgb3B0aW9ucz86IG1hcGJveGdsLkFuaW1hdGlvbk9wdGlvbnM7XG4gIGV2ZW50RGF0YT86IG1hcGJveGdsLkV2ZW50RGF0YTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { DbxMapboxMapDirective } from './mapbox.store.map.directive';
|
|
4
|
+
import { DbxMapboxConfig } from './mapbox.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class DbxMapboxModule {
|
|
7
|
+
static forRoot(config) {
|
|
8
|
+
return {
|
|
9
|
+
ngModule: DbxMapboxModule,
|
|
10
|
+
providers: [
|
|
11
|
+
{
|
|
12
|
+
provide: DbxMapboxConfig,
|
|
13
|
+
useValue: config
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
DbxMapboxModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxMapboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
20
|
+
DbxMapboxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.2", ngImport: i0, type: DbxMapboxModule, declarations: [DbxMapboxMapDirective], imports: [CommonModule], exports: [DbxMapboxMapDirective] });
|
|
21
|
+
DbxMapboxModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxMapboxModule, imports: [CommonModule] });
|
|
22
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxMapboxModule, decorators: [{
|
|
23
|
+
type: NgModule,
|
|
24
|
+
args: [{
|
|
25
|
+
imports: [CommonModule],
|
|
26
|
+
declarations: [DbxMapboxMapDirective],
|
|
27
|
+
exports: [DbxMapboxMapDirective]
|
|
28
|
+
}]
|
|
29
|
+
}] });
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC13ZWIvbWFwYm94L3NyYy9saWIvbWFwYm94Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQU9uRCxNQUFNLE9BQU8sZUFBZTtJQUMxQixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQXVCO1FBQ3BDLE9BQU87WUFDTCxRQUFRLEVBQUUsZUFBZTtZQUN6QixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsT0FBTyxFQUFFLGVBQWU7b0JBQ3hCLFFBQVEsRUFBRSxNQUFNO2lCQUNqQjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7OzRHQVhVLGVBQWU7NkdBQWYsZUFBZSxpQkFIWCxxQkFBcUIsYUFEMUIsWUFBWSxhQUVaLHFCQUFxQjs2R0FFcEIsZUFBZSxZQUpoQixZQUFZOzJGQUlYLGVBQWU7a0JBTDNCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixZQUFZLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDckMsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUM7aUJBQ2pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEYnhNYXBib3hNYXBEaXJlY3RpdmUgfSBmcm9tICcuL21hcGJveC5zdG9yZS5tYXAuZGlyZWN0aXZlJztcbmltcG9ydCB7IERieE1hcGJveENvbmZpZyB9IGZyb20gJy4vbWFwYm94LnNlcnZpY2UnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgZGVjbGFyYXRpb25zOiBbRGJ4TWFwYm94TWFwRGlyZWN0aXZlXSxcbiAgZXhwb3J0czogW0RieE1hcGJveE1hcERpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgRGJ4TWFwYm94TW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3QoY29uZmlnOiBEYnhNYXBib3hDb25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPERieE1hcGJveE1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogRGJ4TWFwYm94TW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBEYnhNYXBib3hDb25maWcsXG4gICAgICAgICAgdXNlVmFsdWU6IGNvbmZpZ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Injectable, Optional } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class DbxMapboxConfig {
|
|
4
|
+
}
|
|
5
|
+
export const DEFAULT_MAPBOX_STYLE = 'mapbox://styles/mapbox/streets-v11';
|
|
6
|
+
export const DEFAULT_MAPBOX_CENTER = [30.2690138665, -97.7408297965];
|
|
7
|
+
export const DEFAULT_MAPBOX_ZOOM = 12;
|
|
8
|
+
export const DEFAULT_MAPBOX_MAP_STORE_TIMER_REFRESH_PERIOD = 200;
|
|
9
|
+
export class DbxMapboxService {
|
|
10
|
+
constructor(config) {
|
|
11
|
+
this._config = config ?? {};
|
|
12
|
+
}
|
|
13
|
+
get defaultStyle() {
|
|
14
|
+
return this._config.defaultStyle ?? DEFAULT_MAPBOX_STYLE;
|
|
15
|
+
}
|
|
16
|
+
get defaultZoom() {
|
|
17
|
+
return this._config.defaultZoom ?? DEFAULT_MAPBOX_ZOOM;
|
|
18
|
+
}
|
|
19
|
+
get defaultCenter() {
|
|
20
|
+
return this._config.defaultCenter ?? DEFAULT_MAPBOX_CENTER;
|
|
21
|
+
}
|
|
22
|
+
get mapboxMapStoreTimerRefreshPeriod() {
|
|
23
|
+
return this._config.defaultStoreRefreshPeriod ?? DEFAULT_MAPBOX_MAP_STORE_TIMER_REFRESH_PERIOD;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
DbxMapboxService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxMapboxService, deps: [{ token: DbxMapboxConfig, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
27
|
+
DbxMapboxService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxMapboxService, providedIn: 'root' });
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxMapboxService, decorators: [{
|
|
29
|
+
type: Injectable,
|
|
30
|
+
args: [{
|
|
31
|
+
providedIn: 'root'
|
|
32
|
+
}]
|
|
33
|
+
}], ctorParameters: function () { return [{ type: DbxMapboxConfig, decorators: [{
|
|
34
|
+
type: Optional
|
|
35
|
+
}] }]; } });
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL21hcGJveC9zcmMvbGliL21hcGJveC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUtyRCxNQUFNLE9BQU8sZUFBZTtDQUszQjtBQUVELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFxQixvQ0FBb0MsQ0FBQztBQUMzRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBcUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN2RixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBb0IsRUFBRSxDQUFDO0FBQ3ZELE1BQU0sQ0FBQyxNQUFNLDZDQUE2QyxHQUFpQixHQUFHLENBQUM7QUFLL0UsTUFBTSxPQUFPLGdCQUFnQjtJQUczQixZQUF3QixNQUF1QjtRQUM3QyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLElBQUksb0JBQW9CLENBQUM7SUFDM0QsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksbUJBQW1CLENBQUM7SUFDekQsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLElBQUkscUJBQXFCLENBQUM7SUFDN0QsQ0FBQztJQUVELElBQUksZ0NBQWdDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsSUFBSSw2Q0FBNkMsQ0FBQztJQUNqRyxDQUFDOzs2R0FyQlUsZ0JBQWdCLGtCQUdLLGVBQWU7aUhBSHBDLGdCQUFnQixjQUZmLE1BQU07MkZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjswREFJaUMsZUFBZTswQkFBbEMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMYXRMbmdQb2ludElucHV0LCBNaWxsaXNlY29uZHMgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IE1hcGJveE9wdGlvbnMgfSBmcm9tICdtYXBib3gtZ2wnO1xuaW1wb3J0IHsgS25vd25NYXBib3hTdHlsZSwgTWFwYm94Wm9vbUxldmVsIH0gZnJvbSAnLi9tYXBib3gnO1xuXG5leHBvcnQgY2xhc3MgRGJ4TWFwYm94Q29uZmlnIHtcbiAgcmVhZG9ubHkgZGVmYXVsdFN0eWxlPzogTWFwYm94T3B0aW9uc1snc3R5bGUnXTtcbiAgcmVhZG9ubHkgZGVmYXVsdFpvb20/OiBNYXBib3hab29tTGV2ZWw7XG4gIHJlYWRvbmx5IGRlZmF1bHRDZW50ZXI/OiBMYXRMbmdQb2ludElucHV0O1xuICByZWFkb25seSBkZWZhdWx0U3RvcmVSZWZyZXNoUGVyaW9kPzogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9NQVBCT1hfU1RZTEU6IEtub3duTWFwYm94U3R5bGUgPSAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zdHJlZXRzLXYxMSc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9NQVBCT1hfQ0VOVEVSOiBMYXRMbmdQb2ludElucHV0ID0gWzMwLjI2OTAxMzg2NjUsIC05Ny43NDA4Mjk3OTY1XTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX01BUEJPWF9aT09NOiBNYXBib3hab29tTGV2ZWwgPSAxMjtcbmV4cG9ydCBjb25zdCBERUZBVUxUX01BUEJPWF9NQVBfU1RPUkVfVElNRVJfUkVGUkVTSF9QRVJJT0Q6IE1pbGxpc2Vjb25kcyA9IDIwMDtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRGJ4TWFwYm94U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbmZpZzogRGJ4TWFwYm94Q29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIGNvbmZpZzogRGJ4TWFwYm94Q29uZmlnKSB7XG4gICAgdGhpcy5fY29uZmlnID0gY29uZmlnID8/IHt9O1xuICB9XG5cbiAgZ2V0IGRlZmF1bHRTdHlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLmRlZmF1bHRTdHlsZSA/PyBERUZBVUxUX01BUEJPWF9TVFlMRTtcbiAgfVxuXG4gIGdldCBkZWZhdWx0Wm9vbSgpOiBNYXBib3hab29tTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcuZGVmYXVsdFpvb20gPz8gREVGQVVMVF9NQVBCT1hfWk9PTTtcbiAgfVxuXG4gIGdldCBkZWZhdWx0Q2VudGVyKCk6IExhdExuZ1BvaW50SW5wdXQge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcuZGVmYXVsdENlbnRlciA/PyBERUZBVUxUX01BUEJPWF9DRU5URVI7XG4gIH1cblxuICBnZXQgbWFwYm94TWFwU3RvcmVUaW1lclJlZnJlc2hQZXJpb2QoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLmRlZmF1bHRTdG9yZVJlZnJlc2hQZXJpb2QgPz8gREVGQVVMVF9NQVBCT1hfTUFQX1NUT1JFX1RJTUVSX1JFRlJFU0hfUEVSSU9EO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { DbxMapboxService } from './mapbox.service';
|
|
2
|
+
import { DbxMapboxMapStore } from './mapbox.store';
|
|
3
|
+
import { Directive, Host, Optional } from '@angular/core';
|
|
4
|
+
import { MapComponent, MapService } from 'ngx-mapbox-gl';
|
|
5
|
+
import { latLngTuple } from '@dereekb/util';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "ngx-mapbox-gl";
|
|
8
|
+
import * as i2 from "./mapbox.service";
|
|
9
|
+
import * as i3 from "./mapbox.store";
|
|
10
|
+
/**
|
|
11
|
+
* Directive that configures a MapComponent with content from DbxMapboxService. Connects a host MapService to a parent DbxMapboxMapStore if available.
|
|
12
|
+
*/
|
|
13
|
+
export class DbxMapboxMapDirective {
|
|
14
|
+
constructor(
|
|
15
|
+
//
|
|
16
|
+
mapService, mapboxMap, dbxMapboxService, dbxMapboxMapStore) {
|
|
17
|
+
this.mapService = mapService;
|
|
18
|
+
this.mapboxMap = mapboxMap;
|
|
19
|
+
this.dbxMapboxService = dbxMapboxService;
|
|
20
|
+
this.dbxMapboxMapStore = dbxMapboxMapStore;
|
|
21
|
+
}
|
|
22
|
+
ngOnInit() {
|
|
23
|
+
// style must be provided first before the map will load.
|
|
24
|
+
this.mapboxMap.style = this.dbxMapboxService.defaultStyle;
|
|
25
|
+
if (this.dbxMapboxMapStore) {
|
|
26
|
+
this.dbxMapboxMapStore.setMapService(this.mapService);
|
|
27
|
+
this.dbxMapboxMapStore.setCenter(this.dbxMapboxService.defaultCenter);
|
|
28
|
+
this.dbxMapboxMapStore.setZoom(this.dbxMapboxService.defaultZoom);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
this.mapboxMap.zoom = [this.dbxMapboxService.defaultZoom];
|
|
32
|
+
this.mapboxMap.center = latLngTuple(this.dbxMapboxService.defaultCenter);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
DbxMapboxMapDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxMapboxMapDirective, deps: [{ token: i1.MapService, host: true }, { token: i1.MapComponent, host: true }, { token: i2.DbxMapboxService }, { token: i3.DbxMapboxMapStore, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
37
|
+
DbxMapboxMapDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.2", type: DbxMapboxMapDirective, selector: "[dbxMapboxMap]", ngImport: i0 });
|
|
38
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxMapboxMapDirective, decorators: [{
|
|
39
|
+
type: Directive,
|
|
40
|
+
args: [{
|
|
41
|
+
selector: '[dbxMapboxMap]'
|
|
42
|
+
}]
|
|
43
|
+
}], ctorParameters: function () { return [{ type: i1.MapService, decorators: [{
|
|
44
|
+
type: Host
|
|
45
|
+
}] }, { type: i1.MapComponent, decorators: [{
|
|
46
|
+
type: Host
|
|
47
|
+
}] }, { type: i2.DbxMapboxService }, { type: i3.DbxMapboxMapStore, decorators: [{
|
|
48
|
+
type: Optional
|
|
49
|
+
}] }]; } });
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LnN0b3JlLm1hcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL21hcGJveC9zcmMvbGliL21hcGJveC5zdG9yZS5tYXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQUU1Qzs7R0FFRztBQUlILE1BQU0sT0FBTyxxQkFBcUI7SUFDaEM7SUFDRSxFQUFFO0lBQ2UsVUFBc0IsRUFDdEIsU0FBdUIsRUFDL0IsZ0JBQWtDLEVBQ3RCLGlCQUFvQztRQUh4QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDL0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUN0QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBQ3hELENBQUM7SUFFSixRQUFRO1FBQ04seURBQXlEO1FBQ3pELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUM7UUFFMUQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDbkU7YUFBTTtZQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDMUU7SUFDSCxDQUFDOztrSEFyQlUscUJBQXFCO3NHQUFyQixxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFIakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO2lCQUMzQjs7MEJBSUksSUFBSTs7MEJBQ0osSUFBSTs7MEJBRUosUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERieE1hcGJveFNlcnZpY2UgfSBmcm9tICcuL21hcGJveC5zZXJ2aWNlJztcbmltcG9ydCB7IERieE1hcGJveE1hcFN0b3JlIH0gZnJvbSAnLi9tYXBib3guc3RvcmUnO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBIb3N0LCBPbkluaXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXBDb21wb25lbnQsIE1hcFNlcnZpY2UgfSBmcm9tICduZ3gtbWFwYm94LWdsJztcbmltcG9ydCB7IGxhdExuZ1R1cGxlIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5cbi8qKlxuICogRGlyZWN0aXZlIHRoYXQgY29uZmlndXJlcyBhIE1hcENvbXBvbmVudCB3aXRoIGNvbnRlbnQgZnJvbSBEYnhNYXBib3hTZXJ2aWNlLiBDb25uZWN0cyBhIGhvc3QgTWFwU2VydmljZSB0byBhIHBhcmVudCBEYnhNYXBib3hNYXBTdG9yZSBpZiBhdmFpbGFibGUuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tkYnhNYXBib3hNYXBdJ1xufSlcbmV4cG9ydCBjbGFzcyBEYnhNYXBib3hNYXBEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICBjb25zdHJ1Y3RvcihcbiAgICAvL1xuICAgIEBIb3N0KCkgcmVhZG9ubHkgbWFwU2VydmljZTogTWFwU2VydmljZSxcbiAgICBASG9zdCgpIHJlYWRvbmx5IG1hcGJveE1hcDogTWFwQ29tcG9uZW50LFxuICAgIHJlYWRvbmx5IGRieE1hcGJveFNlcnZpY2U6IERieE1hcGJveFNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcmVhZG9ubHkgZGJ4TWFwYm94TWFwU3RvcmU6IERieE1hcGJveE1hcFN0b3JlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBzdHlsZSBtdXN0IGJlIHByb3ZpZGVkIGZpcnN0IGJlZm9yZSB0aGUgbWFwIHdpbGwgbG9hZC5cbiAgICB0aGlzLm1hcGJveE1hcC5zdHlsZSA9IHRoaXMuZGJ4TWFwYm94U2VydmljZS5kZWZhdWx0U3R5bGU7XG5cbiAgICBpZiAodGhpcy5kYnhNYXBib3hNYXBTdG9yZSkge1xuICAgICAgdGhpcy5kYnhNYXBib3hNYXBTdG9yZS5zZXRNYXBTZXJ2aWNlKHRoaXMubWFwU2VydmljZSk7XG4gICAgICB0aGlzLmRieE1hcGJveE1hcFN0b3JlLnNldENlbnRlcih0aGlzLmRieE1hcGJveFNlcnZpY2UuZGVmYXVsdENlbnRlcik7XG4gICAgICB0aGlzLmRieE1hcGJveE1hcFN0b3JlLnNldFpvb20odGhpcy5kYnhNYXBib3hTZXJ2aWNlLmRlZmF1bHRab29tKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYXBib3hNYXAuem9vbSA9IFt0aGlzLmRieE1hcGJveFNlcnZpY2UuZGVmYXVsdFpvb21dO1xuICAgICAgdGhpcy5tYXBib3hNYXAuY2VudGVyID0gbGF0TG5nVHVwbGUodGhpcy5kYnhNYXBib3hTZXJ2aWNlLmRlZmF1bHRDZW50ZXIpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import { cleanup, filterMaybe, onTrueToFalse } from '@dereekb/rxjs';
|
|
2
|
+
import { Inject, Injectable } from '@angular/core';
|
|
3
|
+
import { isSameLatLngBound, isSameLatLngPoint, isWithinLatLngBoundFunction, latLngBoundFunction, latLngPointFunction, overlapsLatLngBoundFunction } from '@dereekb/util';
|
|
4
|
+
import { ComponentStore } from '@ngrx/component-store';
|
|
5
|
+
import { defaultIfEmpty, distinctUntilChanged, filter, map, shareReplay, switchMap, tap, NEVER, of, startWith, interval, first, combineLatest } from 'rxjs';
|
|
6
|
+
import * as MapboxGl from 'mapbox-gl';
|
|
7
|
+
import { DbxMapboxService } from './mapbox.service';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "./mapbox.service";
|
|
10
|
+
/**
|
|
11
|
+
* Store used for retrieving information.
|
|
12
|
+
*/
|
|
13
|
+
export class DbxMapboxMapStore extends ComponentStore {
|
|
14
|
+
constructor(dbxMapboxService) {
|
|
15
|
+
super({
|
|
16
|
+
lifecycleState: 'init',
|
|
17
|
+
moveState: 'init',
|
|
18
|
+
zoomState: 'init',
|
|
19
|
+
rotateState: 'init'
|
|
20
|
+
});
|
|
21
|
+
this.dbxMapboxService = dbxMapboxService;
|
|
22
|
+
this.latLngPoint = latLngPointFunction();
|
|
23
|
+
this.latLngBound = latLngBoundFunction();
|
|
24
|
+
// MARK: Effects
|
|
25
|
+
this.setMapService = this.effect((input) => {
|
|
26
|
+
return input.pipe(switchMap((service) => {
|
|
27
|
+
this._setMapService(service);
|
|
28
|
+
if (!service) {
|
|
29
|
+
return NEVER;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
return service.mapLoaded$.pipe(defaultIfEmpty(undefined), map(() => {
|
|
33
|
+
this._setLifecycleState('idle');
|
|
34
|
+
this._setMoveState('idle');
|
|
35
|
+
this._setZoomState('idle');
|
|
36
|
+
this._setRotateState('idle');
|
|
37
|
+
const map = service.mapInstance;
|
|
38
|
+
const listenerPairs = [];
|
|
39
|
+
function addListener(type, listener) {
|
|
40
|
+
map.on(type, listener);
|
|
41
|
+
listenerPairs.push({ type, listener });
|
|
42
|
+
}
|
|
43
|
+
addListener('idle', () => this._setLifecycleState('idle'));
|
|
44
|
+
addListener('render', () => this._setLifecycleState('render'));
|
|
45
|
+
addListener('error', (x) => {
|
|
46
|
+
this._setError(x.error);
|
|
47
|
+
});
|
|
48
|
+
addListener('movestart', () => this._setMoveState('moving'));
|
|
49
|
+
addListener('moveend', () => this._setMoveState('idle'));
|
|
50
|
+
addListener('zoomstart', () => this._setZoomState('zooming'));
|
|
51
|
+
addListener('zoomend', () => this._setZoomState('idle'));
|
|
52
|
+
addListener('rotatestart', () => this._setRotateState('rotating'));
|
|
53
|
+
addListener('rotateend', () => this._setRotateState('idle'));
|
|
54
|
+
addListener('click', (x) => this._setClickEvent(x));
|
|
55
|
+
addListener('dblclick', (x) => this._setDoubleClickEvent(x));
|
|
56
|
+
const subs = [];
|
|
57
|
+
return {
|
|
58
|
+
service,
|
|
59
|
+
listenerPairs,
|
|
60
|
+
subs
|
|
61
|
+
};
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
}), cleanup(({ service, listenerPairs, subs }) => {
|
|
65
|
+
const map = service.mapInstance;
|
|
66
|
+
if (map) {
|
|
67
|
+
listenerPairs.forEach((x) => {
|
|
68
|
+
map.off(x.type, x.listener);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
subs.forEach((sub) => sub.unsubscribe());
|
|
72
|
+
}));
|
|
73
|
+
});
|
|
74
|
+
this.setStyle = this.effect((input) => {
|
|
75
|
+
return input.pipe(switchMap((style) => {
|
|
76
|
+
return this.mapInstance$.pipe(tap((map) => {
|
|
77
|
+
if (typeof style === 'string') {
|
|
78
|
+
map.setStyle(style);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
map.setStyle(style.style, style.options);
|
|
82
|
+
}
|
|
83
|
+
}));
|
|
84
|
+
}));
|
|
85
|
+
});
|
|
86
|
+
this.setCenter = this.effect((input) => {
|
|
87
|
+
return input.pipe(switchMap((center) => {
|
|
88
|
+
const centerPoint = this.latLngPoint(center);
|
|
89
|
+
return this.mapInstance$.pipe(tap((map) => map.setCenter(centerPoint)));
|
|
90
|
+
}));
|
|
91
|
+
});
|
|
92
|
+
this.setZoom = this.effect((input) => {
|
|
93
|
+
return input.pipe(switchMap((zoom) => {
|
|
94
|
+
return this.mapInstance$.pipe(tap((map) => map.setZoom(zoom)));
|
|
95
|
+
}));
|
|
96
|
+
});
|
|
97
|
+
this.setMinZoom = this.effect((input) => {
|
|
98
|
+
return input.pipe(switchMap((zoom) => {
|
|
99
|
+
return this.mapInstance$.pipe(tap((map) => map.setMinZoom(zoom)));
|
|
100
|
+
}));
|
|
101
|
+
});
|
|
102
|
+
this.setMaxZoom = this.effect((input) => {
|
|
103
|
+
return input.pipe(switchMap((zoom) => {
|
|
104
|
+
return this.mapInstance$.pipe(tap((map) => map.setMaxZoom(zoom)));
|
|
105
|
+
}));
|
|
106
|
+
});
|
|
107
|
+
this.setPitch = this.effect((input) => {
|
|
108
|
+
return input.pipe(switchMap((pitch) => {
|
|
109
|
+
return this.mapInstance$.pipe(tap((map) => map.setPitch(pitch)));
|
|
110
|
+
}));
|
|
111
|
+
});
|
|
112
|
+
this.setMinPitch = this.effect((input) => {
|
|
113
|
+
return input.pipe(switchMap((pitch) => {
|
|
114
|
+
return this.mapInstance$.pipe(tap((map) => map.setMinPitch(pitch)));
|
|
115
|
+
}));
|
|
116
|
+
});
|
|
117
|
+
this.setMaxPitch = this.effect((input) => {
|
|
118
|
+
return input.pipe(switchMap((pitch) => {
|
|
119
|
+
return this.mapInstance$.pipe(tap((map) => map.setMaxPitch(pitch)));
|
|
120
|
+
}));
|
|
121
|
+
});
|
|
122
|
+
this.setBearing = this.effect((input) => {
|
|
123
|
+
return input.pipe(switchMap((bearing) => {
|
|
124
|
+
return this.mapInstance$.pipe(tap((map) => map.setBearing(bearing)));
|
|
125
|
+
}));
|
|
126
|
+
});
|
|
127
|
+
this.rotateTo = this.effect((input) => {
|
|
128
|
+
return input.pipe(switchMap((rotateInput) => {
|
|
129
|
+
const rotate = typeof rotateInput === 'number' ? { bearing: rotateInput } : rotateInput;
|
|
130
|
+
return this.mapInstance$.pipe(tap((map) => map.rotateTo(rotate.bearing, rotate.options, rotate?.eventData)));
|
|
131
|
+
}));
|
|
132
|
+
});
|
|
133
|
+
this.resetNorth = this.effect((input) => {
|
|
134
|
+
return input.pipe(switchMap((reset) => {
|
|
135
|
+
return this.mapInstance$.pipe(tap((map) => map.resetNorth(reset?.options, reset?.eventData)));
|
|
136
|
+
}));
|
|
137
|
+
});
|
|
138
|
+
this.resetNorthPitch = this.effect((input) => {
|
|
139
|
+
return input.pipe(switchMap((reset) => {
|
|
140
|
+
return this.mapInstance$.pipe(tap((map) => map.resetNorthPitch(reset?.options, reset?.eventData)));
|
|
141
|
+
}));
|
|
142
|
+
});
|
|
143
|
+
this.snapToNorth = this.effect((input) => {
|
|
144
|
+
return input.pipe(switchMap((snap) => {
|
|
145
|
+
return this.mapInstance$.pipe(tap((map) => map.snapToNorth(snap?.options, snap?.eventData)));
|
|
146
|
+
}));
|
|
147
|
+
});
|
|
148
|
+
this.fitBounds = this.effect((input) => {
|
|
149
|
+
return input.pipe(switchMap((x) => {
|
|
150
|
+
const bound = this.latLngBound(x.bounds);
|
|
151
|
+
return this.mapInstance$.pipe(tap((map) => map.fitBounds(new MapboxGl.LngLatBounds(bound.sw, bound.ne), x.options, x.eventData)));
|
|
152
|
+
}));
|
|
153
|
+
});
|
|
154
|
+
this.jumpTo = this.effect((input) => {
|
|
155
|
+
return input.pipe(switchMap((x) => {
|
|
156
|
+
const inputCenter = x.center ?? x.to?.center;
|
|
157
|
+
const center = inputCenter ? this.latLngPoint(inputCenter) : undefined;
|
|
158
|
+
return this.mapInstance$.pipe(tap((map) => map.jumpTo({ ...x.to, center }, x.eventData)));
|
|
159
|
+
}));
|
|
160
|
+
});
|
|
161
|
+
this.easeTo = this.effect((input) => {
|
|
162
|
+
return input.pipe(switchMap((x) => {
|
|
163
|
+
const inputCenter = x.center ?? x.to?.center;
|
|
164
|
+
const center = inputCenter ? this.latLngPoint(inputCenter) : undefined;
|
|
165
|
+
return this.mapInstance$.pipe(tap((map) => map.easeTo({ ...x.to, center }, x.eventData)));
|
|
166
|
+
}));
|
|
167
|
+
});
|
|
168
|
+
this.flyTo = this.effect((input) => {
|
|
169
|
+
return input.pipe(switchMap((x) => {
|
|
170
|
+
const inputCenter = x.center ?? x.to?.center;
|
|
171
|
+
const center = inputCenter ? this.latLngPoint(inputCenter) : undefined;
|
|
172
|
+
return this.mapInstance$.pipe(tap((map) => map.flyTo({ ...x.to, center }, x.eventData)));
|
|
173
|
+
}));
|
|
174
|
+
});
|
|
175
|
+
this.resetPitchAndBearing = this.effect((input) => {
|
|
176
|
+
return input.pipe(switchMap(() => {
|
|
177
|
+
return this.mapInstance$.pipe(tap((map) => {
|
|
178
|
+
map.setPitch(0);
|
|
179
|
+
map.setBearing(0);
|
|
180
|
+
}));
|
|
181
|
+
}));
|
|
182
|
+
});
|
|
183
|
+
this.currentMapService$ = this.state$.pipe(map((x) => x.mapService), distinctUntilChanged(), shareReplay(1));
|
|
184
|
+
this.mapService$ = this.currentMapService$.pipe(filterMaybe());
|
|
185
|
+
this.currentMapInstance$ = this.currentMapService$.pipe(switchMap((currentMapService) => {
|
|
186
|
+
if (currentMapService) {
|
|
187
|
+
return currentMapService.mapLoaded$.pipe(defaultIfEmpty(undefined), map(() => currentMapService.mapInstance));
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
return of(undefined);
|
|
191
|
+
}
|
|
192
|
+
}), distinctUntilChanged(), shareReplay(1));
|
|
193
|
+
this.mapInstance$ = this.currentMapInstance$.pipe(filterMaybe());
|
|
194
|
+
this.moveState$ = this.state$.pipe(map((x) => x.moveState), distinctUntilChanged(), shareReplay(1));
|
|
195
|
+
this.lifecycleState$ = this.state$.pipe(map((x) => x.lifecycleState), distinctUntilChanged(), shareReplay(1));
|
|
196
|
+
this.zoomState$ = this.state$.pipe(map((x) => x.zoomState), distinctUntilChanged(), shareReplay(1));
|
|
197
|
+
this.rotateState$ = this.state$.pipe(map((x) => x.rotateState), distinctUntilChanged(), shareReplay(1));
|
|
198
|
+
this.isInitialized$ = this.currentMapInstance$.pipe(switchMap((x) => {
|
|
199
|
+
if (!x) {
|
|
200
|
+
return of(false);
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
return combineLatest([this.moveState$.pipe(map((x) => x === 'idle')), this.lifecycleState$.pipe(map((x) => x === 'idle'))]).pipe(filter(([m, l]) => m && l), first(), map(() => true));
|
|
204
|
+
}
|
|
205
|
+
}), shareReplay(1));
|
|
206
|
+
this.whenInitialized$ = this.isInitialized$.pipe(filter((x) => true), shareReplay(1));
|
|
207
|
+
this.isRendering$ = this.whenInitialized$.pipe(switchMap(() => this.lifecycleState$.pipe(map((x) => x === 'render'), distinctUntilChanged(), shareReplay())));
|
|
208
|
+
this.isMoving$ = this.whenInitialized$.pipe(switchMap(() => this.moveState$.pipe(map((x) => x === 'moving'), distinctUntilChanged(), shareReplay())));
|
|
209
|
+
this.isZooming$ = this.whenInitialized$.pipe(switchMap(() => this.zoomState$.pipe(map((x) => x === 'zooming'), distinctUntilChanged(), shareReplay())));
|
|
210
|
+
this.isRotating$ = this.whenInitialized$.pipe(switchMap(() => this.rotateState$.pipe(map((x) => x === 'rotating'), distinctUntilChanged(), shareReplay())));
|
|
211
|
+
this._movingTimer = this.movingTimer();
|
|
212
|
+
this._renderingTimer = this.lifecycleRenderTimer();
|
|
213
|
+
this.centerNow$ = this.whenInitialized$.pipe(switchMap(() => this.mapInstance$.pipe(switchMap((x) => this._movingTimer.pipe(map(() => this.latLngPoint(x.getCenter())))), shareReplay(1))));
|
|
214
|
+
this.center$ = this.whenInitialized$.pipe(switchMap(() => {
|
|
215
|
+
return this.isMoving$.pipe(onTrueToFalse(), startWith(undefined), switchMap(() => this.centerNow$.pipe(first())), distinctUntilChanged(isSameLatLngPoint), shareReplay(1));
|
|
216
|
+
}));
|
|
217
|
+
this.boundNow$ = this.whenInitialized$.pipe(switchMap(() => this.mapInstance$.pipe(switchMap((x) => this._renderingTimer.pipe(map(() => {
|
|
218
|
+
const bound = x.getBounds();
|
|
219
|
+
return this.latLngBound([bound.getSouthWest(), bound.getNorthEast()]);
|
|
220
|
+
}))), shareReplay(1))));
|
|
221
|
+
this.bound$ = this.whenInitialized$.pipe(switchMap(() => {
|
|
222
|
+
return this.isRendering$.pipe(onTrueToFalse(), startWith(undefined), switchMap((x) => this.boundNow$.pipe(first())), distinctUntilChanged(isSameLatLngBound), shareReplay(1));
|
|
223
|
+
}));
|
|
224
|
+
this.isWithinBoundFunction$ = this.bound$.pipe(map((x) => isWithinLatLngBoundFunction(x)), shareReplay(1));
|
|
225
|
+
this.overlapsBoundFunction$ = this.bound$.pipe(map((x) => overlapsLatLngBoundFunction(x)), shareReplay(1));
|
|
226
|
+
this.zoomNow$ = this.whenInitialized$.pipe(switchMap(() => this.mapInstance$.pipe(switchMap((x) => this._renderingTimer.pipe(map(() => x.getZoom()))), shareReplay(1))));
|
|
227
|
+
this.zoom$ = this.whenInitialized$.pipe(switchMap(() => {
|
|
228
|
+
return this.isZooming$.pipe(onTrueToFalse(), startWith(undefined), switchMap((x) => this.zoomNow$.pipe(first())), distinctUntilChanged(), shareReplay(1));
|
|
229
|
+
}));
|
|
230
|
+
this.pitchNow$ = this.whenInitialized$.pipe(switchMap(() => this.mapInstance$.pipe(switchMap((x) => this._movingTimer.pipe(map(() => x.getPitch()))), shareReplay(1))));
|
|
231
|
+
this.pitch$ = this.whenInitialized$.pipe(switchMap(() => {
|
|
232
|
+
return this.isRotating$.pipe(onTrueToFalse(), startWith(undefined), switchMap((x) => this.pitchNow$.pipe(first())), distinctUntilChanged(), shareReplay(1));
|
|
233
|
+
}));
|
|
234
|
+
this.bearingNow$ = this.whenInitialized$.pipe(switchMap(() => this.mapInstance$.pipe(switchMap((x) => this._movingTimer.pipe(map(() => x.getBearing()))), shareReplay(1))));
|
|
235
|
+
this.bearing$ = this.whenInitialized$.pipe(switchMap(() => {
|
|
236
|
+
return this.isRotating$.pipe(onTrueToFalse(), startWith(undefined), switchMap((x) => this.bearingNow$.pipe(first())), distinctUntilChanged(), shareReplay(1));
|
|
237
|
+
}));
|
|
238
|
+
this.clickEvent$ = this.state$.pipe(map((x) => x.clickEvent));
|
|
239
|
+
this.doubleClickEvent$ = this.state$.pipe(map((x) => x.doubleClickEvent));
|
|
240
|
+
// MARK: State Changes
|
|
241
|
+
this._setMapService = this.updater((state, mapService) => ({ mapService, moveState: 'init', lifecycleState: 'init', zoomState: 'init', rotateState: 'init' }));
|
|
242
|
+
this._setLifecycleState = this.updater((state, lifecycleState) => ({ ...state, lifecycleState }));
|
|
243
|
+
this._setMoveState = this.updater((state, moveState) => ({ ...state, moveState }));
|
|
244
|
+
this._setZoomState = this.updater((state, zoomState) => ({ ...state, zoomState }));
|
|
245
|
+
this._setRotateState = this.updater((state, rotateState) => ({ ...state, rotateState }));
|
|
246
|
+
this._setClickEvent = this.updater((state, clickEvent) => ({ ...state, clickEvent }));
|
|
247
|
+
this._setDoubleClickEvent = this.updater((state, doubleClickEvent) => ({ ...state, doubleClickEvent }));
|
|
248
|
+
this._setError = this.updater((state, error) => ({ ...state, error }));
|
|
249
|
+
}
|
|
250
|
+
// MARK: Accessors
|
|
251
|
+
get timerRefreshPeriod() {
|
|
252
|
+
return this.dbxMapboxService.mapboxMapStoreTimerRefreshPeriod;
|
|
253
|
+
}
|
|
254
|
+
movingTimer(period = this.timerRefreshPeriod) {
|
|
255
|
+
return this.moveState$.pipe(switchMap((x) => {
|
|
256
|
+
if (x === 'moving') {
|
|
257
|
+
return interval(period);
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
return of(0);
|
|
261
|
+
}
|
|
262
|
+
}), shareReplay());
|
|
263
|
+
}
|
|
264
|
+
lifecycleRenderTimer(period = this.timerRefreshPeriod) {
|
|
265
|
+
return this.lifecycleState$.pipe(switchMap((x) => {
|
|
266
|
+
if (x === 'render') {
|
|
267
|
+
return interval(period);
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
return of(0);
|
|
271
|
+
}
|
|
272
|
+
}), shareReplay());
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
DbxMapboxMapStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxMapboxMapStore, deps: [{ token: DbxMapboxService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
276
|
+
DbxMapboxMapStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxMapboxMapStore });
|
|
277
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxMapboxMapStore, decorators: [{
|
|
278
|
+
type: Injectable
|
|
279
|
+
}], ctorParameters: function () { return [{ type: i1.DbxMapboxService, decorators: [{
|
|
280
|
+
type: Inject,
|
|
281
|
+
args: [DbxMapboxService]
|
|
282
|
+
}] }]; } });
|
|
283
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi9tYXBib3gvc3JjL2xpYi9tYXBib3guc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBK0IsMkJBQTJCLEVBQWUsbUJBQW1CLEVBQWlDLG1CQUFtQixFQUFzQywyQkFBMkIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0UixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQWdCLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0TCxPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUV0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBd0NwRDs7R0FFRztBQUVILE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxjQUFtQztJQUl4RSxZQUF1RCxnQkFBa0M7UUFDdkYsS0FBSyxDQUFDO1lBQ0osY0FBYyxFQUFFLE1BQU07WUFDdEIsU0FBUyxFQUFFLE1BQU07WUFDakIsU0FBUyxFQUFFLE1BQU07WUFDakIsV0FBVyxFQUFFLE1BQU07U0FDcEIsQ0FBQyxDQUFDO1FBTmtELHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFIakYsZ0JBQVcsR0FBRyxtQkFBbUIs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OzJGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVU7OzBCQUtJLE1BQU07MkJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xlYW51cCwgZmlsdGVyTWF5YmUsIG9uVHJ1ZVRvRmFsc2UgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1NhbWVMYXRMbmdCb3VuZCwgaXNTYW1lTGF0TG5nUG9pbnQsIElzV2l0aGluTGF0TG5nQm91bmRGdW5jdGlvbiwgaXNXaXRoaW5MYXRMbmdCb3VuZEZ1bmN0aW9uLCBMYXRMbmdCb3VuZCwgbGF0TG5nQm91bmRGdW5jdGlvbiwgTGF0TG5nUG9pbnRJbnB1dCwgTGF0TG5nUG9pbnQsIGxhdExuZ1BvaW50RnVuY3Rpb24sIE1heWJlLCBPdmVybGFwc0xhdExuZ0JvdW5kRnVuY3Rpb24sIG92ZXJsYXBzTGF0TG5nQm91bmRGdW5jdGlvbiB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RvcmUgfSBmcm9tICdAbmdyeC9jb21wb25lbnQtc3RvcmUnO1xuaW1wb3J0IHsgTWFwU2VydmljZSB9IGZyb20gJ25neC1tYXBib3gtZ2wnO1xuaW1wb3J0IHsgZGVmYXVsdElmRW1wdHksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFwLCBORVZFUiwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiwgc3RhcnRXaXRoLCBpbnRlcnZhbCwgZmlyc3QsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIE1hcGJveEdsIGZyb20gJ21hcGJveC1nbCc7XG5pbXBvcnQgeyBEYnhNYXBib3hDbGlja0V2ZW50LCBLbm93bk1hcGJveFN0eWxlLCBNYXBib3hCZWFyaW5nLCBNYXBib3hFYXNlVG8sIE1hcGJveEZpdEJvdW5kcywgTWFwYm94Rmx5VG8sIE1hcGJveEp1bXBUbywgTWFwYm94UmVzZXROb3J0aCwgTWFwYm94UmVzZXROb3J0aFBpdGNoLCBNYXBib3hSb3RhdGVUbywgTWFwYm94U25hcFRvTm9ydGgsIE1hcGJveFN0eWxlQ29uZmlnLCBNYXBib3hab29tTGV2ZWwgfSBmcm9tICcuL21hcGJveCc7XG5pbXBvcnQgeyBEYnhNYXBib3hTZXJ2aWNlIH0gZnJvbSAnLi9tYXBib3guc2VydmljZSc7XG5cbmV4cG9ydCB0eXBlIE1hcGJveE1hcExpZmVjeWNsZVN0YXRlID0gJ2luaXQnIHwgJ2xvYWQnIHwgJ3JlbmRlcicgfCAnaWRsZSc7XG5leHBvcnQgdHlwZSBNYXBib3hNYXBNb3ZlU3RhdGUgPSAnaW5pdCcgfCAnaWRsZScgfCAnbW92aW5nJztcbmV4cG9ydCB0eXBlIE1hcGJveE1hcFpvb21TdGF0ZSA9ICdpbml0JyB8ICdpZGxlJyB8ICd6b29taW5nJztcbmV4cG9ydCB0eXBlIE1hcGJveE1hcFJvdGF0ZVN0YXRlID0gJ2luaXQnIHwgJ2lkbGUnIHwgJ3JvdGF0aW5nJztcblxuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdNYXBib3hMaXN0ZW5lclBhaXIge1xuICB0eXBlOiBzdHJpbmc7XG4gIGxpc3RlbmVyOiAoZXY6IE1hcGJveEdsLkV2ZW50RGF0YSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlZE1hcGJveExpc3RlbmVyUGFpcjxUIGV4dGVuZHMga2V5b2YgTWFwYm94R2wuTWFwRXZlbnRUeXBlPiB7XG4gIHR5cGU6IFQ7XG4gIGxpc3RlbmVyOiAoZXY6IE1hcGJveEdsLk1hcEV2ZW50VHlwZVtUXSAmIE1hcGJveEdsLkV2ZW50RGF0YSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhNYXBib3hTdG9yZVN0YXRlIHtcbiAgLyoqXG4gICAqIEN1cnJlbnQgTWFwU2VydmljZSBiZWluZyB1dGlsaXplZC5cbiAgICovXG4gIG1hcFNlcnZpY2U/OiBNYXliZTxNYXBTZXJ2aWNlPjtcbiAgbGlmZWN5Y2xlU3RhdGU6IE1hcGJveE1hcExpZmVjeWNsZVN0YXRlO1xuICBtb3ZlU3RhdGU6IE1hcGJveE1hcE1vdmVTdGF0ZTtcbiAgem9vbVN0YXRlOiBNYXBib3hNYXBab29tU3RhdGU7XG4gIHJvdGF0ZVN0YXRlOiBNYXBib3hNYXBSb3RhdGVTdGF0ZTtcbiAgLyoqXG4gICAqIExhdGVzdCBjbGljayBldmVudFxuICAgKi9cbiAgY2xpY2tFdmVudD86IE1heWJlPERieE1hcGJveENsaWNrRXZlbnQ+O1xuICAvKipcbiAgICogTGF0ZXN0IGRvdWJsZS1jbGljayBldmVudFxuICAgKi9cbiAgZG91YmxlQ2xpY2tFdmVudD86IE1heWJlPERieE1hcGJveENsaWNrRXZlbnQ+O1xuICAvKipcbiAgICogTGF0ZXN0IGVycm9yXG4gICAqL1xuICBlcnJvcj86IE1heWJlPEVycm9yPjtcbn1cblxuLyoqXG4gKiBTdG9yZSB1c2VkIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGJ4TWFwYm94TWFwU3RvcmUgZXh0ZW5kcyBDb21wb25lbnRTdG9yZTxEYnhNYXBib3hTdG9yZVN0YXRlPiBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgbGF0TG5nUG9pbnQgPSBsYXRMbmdQb2ludEZ1bmN0aW9uKCk7XG4gIHByaXZhdGUgbGF0TG5nQm91bmQgPSBsYXRMbmdCb3VuZEZ1bmN0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChEYnhNYXBib3hTZXJ2aWNlKSBwcml2YXRlIHJlYWRvbmx5IGRieE1hcGJveFNlcnZpY2U6IERieE1hcGJveFNlcnZpY2UpIHtcbiAgICBzdXBlcih7XG4gICAgICBsaWZlY3ljbGVTdGF0ZTogJ2luaXQnLFxuICAgICAgbW92ZVN0YXRlOiAnaW5pdCcsXG4gICAgICB6b29tU3RhdGU6ICdpbml0JyxcbiAgICAgIHJvdGF0ZVN0YXRlOiAnaW5pdCdcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE1BUks6IEVmZmVjdHNcbiAgcmVhZG9ubHkgc2V0TWFwU2VydmljZSA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxNYXBTZXJ2aWNlPj4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoc2VydmljZTogTWF5YmU8TWFwU2VydmljZT4pID0+IHtcbiAgICAgICAgdGhpcy5fc2V0TWFwU2VydmljZShzZXJ2aWNlKTtcblxuICAgICAgICBpZiAoIXNlcnZpY2UpIHtcbiAgICAgICAgICByZXR1cm4gTkVWRVI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHNlcnZpY2UubWFwTG9hZGVkJC5waXBlKFxuICAgICAgICAgICAgZGVmYXVsdElmRW1wdHkodW5kZWZpbmVkKSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX3NldExpZmVjeWNsZVN0YXRlKCdpZGxlJyk7XG4gICAgICAgICAgICAgIHRoaXMuX3NldE1vdmVTdGF0ZSgnaWRsZScpO1xuICAgICAgICAgICAgICB0aGlzLl9zZXRab29tU3RhdGUoJ2lkbGUnKTtcbiAgICAgICAgICAgICAgdGhpcy5fc2V0Um90YXRlU3RhdGUoJ2lkbGUnKTtcblxuICAgICAgICAgICAgICBjb25zdCBtYXAgPSBzZXJ2aWNlLm1hcEluc3RhbmNlO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVyUGFpcnM6IFN0cmluZ01hcGJveExpc3RlbmVyUGFpcltdID0gW107XG5cbiAgICAgICAgICAgICAgZnVuY3Rpb24gYWRkTGlzdGVuZXI8VCBleHRlbmRzIGtleW9mIE1hcGJveEdsLk1hcEV2ZW50VHlwZT4odHlwZTogVCwgbGlzdGVuZXI6IChldjogTWFwYm94R2wuTWFwRXZlbnRUeXBlW1RdICYgTWFwYm94R2wuRXZlbnREYXRhKSA9PiB2b2lkKSB7XG4gICAgICAgICAgICAgICAgbWFwLm9uKHR5cGUsIGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lclBhaXJzLnB1c2goeyB0eXBlLCBsaXN0ZW5lciB9IGFzIFN0cmluZ01hcGJveExpc3RlbmVyUGFpcik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignaWRsZScsICgpID0+IHRoaXMuX3NldExpZmVjeWNsZVN0YXRlKCdpZGxlJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcigncmVuZGVyJywgKCkgPT4gdGhpcy5fc2V0TGlmZWN5Y2xlU3RhdGUoJ3JlbmRlcicpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ2Vycm9yJywgKHgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRFcnJvcih4LmVycm9yKTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ21vdmVzdGFydCcsICgpID0+IHRoaXMuX3NldE1vdmVTdGF0ZSgnbW92aW5nJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignbW92ZWVuZCcsICgpID0+IHRoaXMuX3NldE1vdmVTdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignem9vbXN0YXJ0JywgKCkgPT4gdGhpcy5fc2V0Wm9vbVN0YXRlKCd6b29taW5nJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignem9vbWVuZCcsICgpID0+IHRoaXMuX3NldFpvb21TdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcigncm90YXRlc3RhcnQnLCAoKSA9PiB0aGlzLl9zZXRSb3RhdGVTdGF0ZSgncm90YXRpbmcnKSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdyb3RhdGVlbmQnLCAoKSA9PiB0aGlzLl9zZXRSb3RhdGVTdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignY2xpY2snLCAoeCkgPT4gdGhpcy5fc2V0Q2xpY2tFdmVudCh4KSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdkYmxjbGljaycsICh4KSA9PiB0aGlzLl9zZXREb3VibGVDbGlja0V2ZW50KHgpKTtcblxuICAgICAgICAgICAgICBjb25zdCBzdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2VydmljZSxcbiAgICAgICAgICAgICAgICBsaXN0ZW5lclBhaXJzLFxuICAgICAgICAgICAgICAgIHN1YnNcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjbGVhbnVwKCh7IHNlcnZpY2UsIGxpc3RlbmVyUGFpcnMsIHN1YnMgfSkgPT4ge1xuICAgICAgICBjb25zdCBtYXAgPSBzZXJ2aWNlLm1hcEluc3RhbmNlO1xuXG4gICAgICAgIGlmIChtYXApIHtcbiAgICAgICAgICBsaXN0ZW5lclBhaXJzLmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgICAgIG1hcC5vZmYoeC50eXBlLCB4Lmxpc3RlbmVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1YnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldFN0eWxlID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFN0eWxlQ29uZmlnIHwgS25vd25NYXBib3hTdHlsZSB8IHN0cmluZz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoc3R5bGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIG1hcC5zZXRTdHlsZShzdHlsZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXAuc2V0U3R5bGUoc3R5bGUuc3R5bGUsIHN0eWxlLm9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldENlbnRlciA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludElucHV0PikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChjZW50ZXI6IExhdExuZ1BvaW50SW5wdXQpID0+IHtcbiAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSB0aGlzLmxhdExuZ1BvaW50KGNlbnRlcik7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0Q2VudGVyKGNlbnRlclBvaW50KSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRab29tID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoem9vbTogTWFwYm94Wm9vbUxldmVsKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0Wm9vbSh6b29tKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNaW5ab29tID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoem9vbTogTWFwYm94Wm9vbUxldmVsKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0TWluWm9vbSh6b29tKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNYXhab29tID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoem9vbTogTWFwYm94Wm9vbUxldmVsKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0TWF4Wm9vbSh6b29tKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRQaXRjaCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHBpdGNoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0UGl0Y2gocGl0Y2gpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldE1pblBpdGNoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPG51bWJlcj4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocGl0Y2g6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldE1pblBpdGNoKHBpdGNoKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNYXhQaXRjaCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHBpdGNoOiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRNYXhQaXRjaChwaXRjaCkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0QmVhcmluZyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGJlYXJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRCZWFyaW5nKGJlYXJpbmcpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJvdGF0ZVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEJlYXJpbmcgfCBNYXBib3hSb3RhdGVUbz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocm90YXRlSW5wdXQ6IE1hcGJveEJlYXJpbmcgfCBNYXBib3hSb3RhdGVUbykgPT4ge1xuICAgICAgICBjb25zdCByb3RhdGU6IE1hcGJveFJvdGF0ZVRvID0gdHlwZW9mIHJvdGF0ZUlucHV0ID09PSAnbnVtYmVyJyA/IHsgYmVhcmluZzogcm90YXRlSW5wdXQgfSA6IHJvdGF0ZUlucHV0O1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnJvdGF0ZVRvKHJvdGF0ZS5iZWFyaW5nLCByb3RhdGUub3B0aW9ucywgcm90YXRlPy5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJlc2V0Tm9ydGggPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8TWFwYm94UmVzZXROb3J0aD4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXNldDogTWF5YmU8TWFwYm94UmVzZXROb3J0aD4gfCB2b2lkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAucmVzZXROb3J0aChyZXNldD8ub3B0aW9ucywgcmVzZXQ/LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcmVzZXROb3J0aFBpdGNoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPE1hcGJveFJlc2V0Tm9ydGhQaXRjaD4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXNldDogTWF5YmU8TWFwYm94UmVzZXROb3J0aFBpdGNoPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5yZXNldE5vcnRoUGl0Y2gocmVzZXQ/Lm9wdGlvbnMsIHJlc2V0Py5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNuYXBUb05vcnRoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPE1hcGJveFNuYXBUb05vcnRoPiB8IHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHNuYXA6IE1heWJlPE1hcGJveFNuYXBUb05vcnRoPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zbmFwVG9Ob3J0aChzbmFwPy5vcHRpb25zLCBzbmFwPy5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpdEJvdW5kcyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hGaXRCb3VuZHM+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgY29uc3QgYm91bmQgPSB0aGlzLmxhdExuZ0JvdW5kKHguYm91bmRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5maXRCb3VuZHMobmV3IE1hcGJveEdsLkxuZ0xhdEJvdW5kcyhib3VuZC5zdywgYm91bmQubmUpLCB4Lm9wdGlvbnMsIHguZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBqdW1wVG8gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94SnVtcFRvPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0Q2VudGVyID0geC5jZW50ZXIgPz8geC50bz8uY2VudGVyO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBpbnB1dENlbnRlciA/IHRoaXMubGF0TG5nUG9pbnQoaW5wdXRDZW50ZXIpIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLmp1bXBUbyh7IC4uLngudG8sIGNlbnRlciB9LCB4LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZWFzZVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEVhc2VUbz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dENlbnRlciA9IHguY2VudGVyID8/IHgudG8/LmNlbnRlcjtcbiAgICAgICAgY29uc3QgY2VudGVyID0gaW5wdXRDZW50ZXIgPyB0aGlzLmxhdExuZ1BvaW50KGlucHV0Q2VudGVyKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5lYXNlVG8oeyAuLi54LnRvLCBjZW50ZXIgfSwgeC5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZseVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEZseVRvPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0Q2VudGVyID0geC5jZW50ZXIgPz8geC50bz8uY2VudGVyO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBpbnB1dENlbnRlciA/IHRoaXMubGF0TG5nUG9pbnQoaW5wdXRDZW50ZXIpIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLmZseVRvKHsgLi4ueC50bywgY2VudGVyIH0sIHguZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSByZXNldFBpdGNoQW5kQmVhcmluZyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTx2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIG1hcC5zZXRQaXRjaCgwKTtcbiAgICAgICAgICAgIG1hcC5zZXRCZWFyaW5nKDApO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIC8vIE1BUks6IEFjY2Vzc29yc1xuICBnZXQgdGltZXJSZWZyZXNoUGVyaW9kKCkge1xuICAgIHJldHVybiB0aGlzLmRieE1hcGJveFNlcnZpY2UubWFwYm94TWFwU3RvcmVUaW1lclJlZnJlc2hQZXJpb2Q7XG4gIH1cblxuICBtb3ZpbmdUaW1lcihwZXJpb2QgPSB0aGlzLnRpbWVyUmVmcmVzaFBlcmlvZCkge1xuICAgIHJldHVybiB0aGlzLm1vdmVTdGF0ZSQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeCA9PT0gJ21vdmluZycpIHtcbiAgICAgICAgICByZXR1cm4gaW50ZXJ2YWwocGVyaW9kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb2YoMCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoKVxuICAgICk7XG4gIH1cblxuICBsaWZlY3ljbGVSZW5kZXJUaW1lcihwZXJpb2QgPSB0aGlzLnRpbWVyUmVmcmVzaFBlcmlvZCkge1xuICAgIHJldHVybiB0aGlzLmxpZmVjeWNsZVN0YXRlJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGlmICh4ID09PSAncmVuZGVyJykge1xuICAgICAgICAgIHJldHVybiBpbnRlcnZhbChwZXJpb2QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBvZigwKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSgpXG4gICAgKTtcbiAgfVxuXG4gIHJlYWRvbmx5IGN1cnJlbnRNYXBTZXJ2aWNlJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Lm1hcFNlcnZpY2UpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtYXBTZXJ2aWNlJCA9IHRoaXMuY3VycmVudE1hcFNlcnZpY2UkLnBpcGUoZmlsdGVyTWF5YmUoKSk7XG5cbiAgcmVhZG9ubHkgY3VycmVudE1hcEluc3RhbmNlJDogT2JzZXJ2YWJsZTxNYXliZTxNYXBib3hHbC5NYXA+PiA9IHRoaXMuY3VycmVudE1hcFNlcnZpY2UkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChjdXJyZW50TWFwU2VydmljZTogTWF5YmU8TWFwU2VydmljZT4pID0+IHtcbiAgICAgIGlmIChjdXJyZW50TWFwU2VydmljZSkge1xuICAgICAgICByZXR1cm4gY3VycmVudE1hcFNlcnZpY2UubWFwTG9hZGVkJC5waXBlKFxuICAgICAgICAgIGRlZmF1bHRJZkVtcHR5KHVuZGVmaW5lZCksXG4gICAgICAgICAgbWFwKCgpID0+IGN1cnJlbnRNYXBTZXJ2aWNlLm1hcEluc3RhbmNlKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG1hcEluc3RhbmNlJCA9IHRoaXMuY3VycmVudE1hcEluc3RhbmNlJC5waXBlKGZpbHRlck1heWJlKCkpO1xuXG4gIHJlYWRvbmx5IG1vdmVTdGF0ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5tb3ZlU3RhdGUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBsaWZlY3ljbGVTdGF0ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5saWZlY3ljbGVTdGF0ZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHpvb21TdGF0ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC56b29tU3RhdGUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSByb3RhdGVTdGF0ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5yb3RhdGVTdGF0ZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzSW5pdGlhbGl6ZWQkID0gdGhpcy5jdXJyZW50TWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICBpZiAoIXgpIHtcbiAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFt0aGlzLm1vdmVTdGF0ZSQucGlwZShtYXAoKHgpID0+IHggPT09ICdpZGxlJykpLCB0aGlzLmxpZmVjeWNsZVN0YXRlJC5waXBlKG1hcCgoeCkgPT4geCA9PT0gJ2lkbGUnKSldKS5waXBlKFxuICAgICAgICAgIGZpbHRlcigoW20sIGxdKSA9PiBtICYmIGwpLFxuICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgbWFwKCgpID0+IHRydWUpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB3aGVuSW5pdGlhbGl6ZWQkID0gdGhpcy5pc0luaXRpYWxpemVkJC5waXBlKFxuICAgIGZpbHRlcigoeCkgPT4gdHJ1ZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc1JlbmRlcmluZyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubGlmZWN5Y2xlU3RhdGUkLnBpcGUoXG4gICAgICAgIG1hcCgoeCkgPT4geCA9PT0gJ3JlbmRlcicpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzTW92aW5nJCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tb3ZlU3RhdGUkLnBpcGUoXG4gICAgICAgIG1hcCgoeCkgPT4geCA9PT0gJ21vdmluZycpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzWm9vbWluZyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMuem9vbVN0YXRlJC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+IHggPT09ICd6b29taW5nJyksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNSb3RhdGluZyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMucm90YXRlU3RhdGUkLnBpcGUoXG4gICAgICAgIG1hcCgoeCkgPT4geCA9PT0gJ3JvdGF0aW5nJyksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbW92aW5nVGltZXIgPSB0aGlzLm1vdmluZ1RpbWVyKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlbmRlcmluZ1RpbWVyID0gdGhpcy5saWZlY3ljbGVSZW5kZXJUaW1lcigpO1xuXG4gIHJlYWRvbmx5IGNlbnRlck5vdyQ6IE9ic2VydmFibGU8TGF0TG5nUG9pbnQ+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuX21vdmluZ1RpbWVyLnBpcGUobWFwKCgpID0+IHRoaXMubGF0TG5nUG9pbnQoeC5nZXRDZW50ZXIoKSkpKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGNlbnRlciQ6IE9ic2VydmFibGU8TGF0TG5nUG9pbnQ+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmlzTW92aW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5jZW50ZXJOb3ckLnBpcGUoZmlyc3QoKSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVMYXRMbmdQb2ludCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgYm91bmROb3ckOiBPYnNlcnZhYmxlPExhdExuZ0JvdW5kPiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PlxuICAgICAgICAgIHRoaXMuX3JlbmRlcmluZ1RpbWVyLnBpcGUoXG4gICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBib3VuZCA9IHguZ2V0Qm91bmRzKCk7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmxhdExuZ0JvdW5kKFtib3VuZC5nZXRTb3V0aFdlc3QoKSwgYm91bmQuZ2V0Tm9ydGhFYXN0KCldKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBib3VuZCQ6IE9ic2VydmFibGU8TGF0TG5nQm91bmQ+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmlzUmVuZGVyaW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuYm91bmROb3ckLnBpcGUoZmlyc3QoKSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVMYXRMbmdCb3VuZCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNXaXRoaW5Cb3VuZEZ1bmN0aW9uJDogT2JzZXJ2YWJsZTxJc1dpdGhpbkxhdExuZ0JvdW5kRnVuY3Rpb24+ID0gdGhpcy5ib3VuZCQucGlwZShcbiAgICBtYXAoKHgpID0+IGlzV2l0aGluTGF0TG5nQm91bmRGdW5jdGlvbih4KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBvdmVybGFwc0JvdW5kRnVuY3Rpb24kOiBPYnNlcnZhYmxlPE92ZXJsYXBzTGF0TG5nQm91bmRGdW5jdGlvbj4gPSB0aGlzLmJvdW5kJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gb3ZlcmxhcHNMYXRMbmdCb3VuZEZ1bmN0aW9uKHgpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHpvb21Ob3ckOiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4gdGhpcy5fcmVuZGVyaW5nVGltZXIucGlwZShtYXAoKCkgPT4geC5nZXRab29tKCkgYXMgTWFwYm94Wm9vbUxldmVsKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSB6b29tJDogT2JzZXJ2YWJsZTxNYXBib3hab29tTGV2ZWw+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmlzWm9vbWluZyQucGlwZShcbiAgICAgICAgb25UcnVlVG9GYWxzZSgpLFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLnpvb21Ob3ckLnBpcGUoZmlyc3QoKSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IHBpdGNoTm93JCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLl9tb3ZpbmdUaW1lci5waXBlKG1hcCgoKSA9PiB4LmdldFBpdGNoKCkpKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IHBpdGNoJCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5pc1JvdGF0aW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMucGl0Y2hOb3ckLnBpcGUoZmlyc3QoKSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IGJlYXJpbmdOb3ckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuX21vdmluZ1RpbWVyLnBpcGUobWFwKCgpID0+IHguZ2V0QmVhcmluZygpKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBiZWFyaW5nJCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5pc1JvdGF0aW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuYmVhcmluZ05vdyQucGlwZShmaXJzdCgpKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgY2xpY2tFdmVudCQgPSB0aGlzLnN0YXRlJC5waXBlKG1hcCgoeCkgPT4geC5jbGlja0V2ZW50KSk7XG4gIHJlYWRvbmx5IGRvdWJsZUNsaWNrRXZlbnQkID0gdGhpcy5zdGF0ZSQucGlwZShtYXAoKHgpID0+IHguZG91YmxlQ2xpY2tFdmVudCkpO1xuXG4gIC8vIE1BUks6IFN0YXRlIENoYW5nZXNcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0TWFwU2VydmljZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIG1hcFNlcnZpY2U6IE1heWJlPE1hcFNlcnZpY2U+KSA9PiAoeyBtYXBTZXJ2aWNlLCBtb3ZlU3RhdGU6ICdpbml0JywgbGlmZWN5Y2xlU3RhdGU6ICdpbml0Jywgem9vbVN0YXRlOiAnaW5pdCcsIHJvdGF0ZVN0YXRlOiAnaW5pdCcgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRMaWZlY3ljbGVTdGF0ZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGxpZmVjeWNsZVN0YXRlOiBNYXBib3hNYXBMaWZlY3ljbGVTdGF0ZSkgPT4gKHsgLi4uc3RhdGUsIGxpZmVjeWNsZVN0YXRlIH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0TW92ZVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgbW92ZVN0YXRlOiBNYXBib3hNYXBNb3ZlU3RhdGUpID0+ICh7IC4uLnN0YXRlLCBtb3ZlU3RhdGUgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRab29tU3RhdGUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCB6b29tU3RhdGU6IE1hcGJveE1hcFpvb21TdGF0ZSkgPT4gKHsgLi4uc3RhdGUsIHpvb21TdGF0ZSB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldFJvdGF0ZVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgcm90YXRlU3RhdGU6IE1hcGJveE1hcFJvdGF0ZVN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgcm90YXRlU3RhdGUgfSkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldENsaWNrRXZlbnQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBjbGlja0V2ZW50OiBEYnhNYXBib3hDbGlja0V2ZW50KSA9PiAoeyAuLi5zdGF0ZSwgY2xpY2tFdmVudCB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldERvdWJsZUNsaWNrRXZlbnQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBkb3VibGVDbGlja0V2ZW50OiBEYnhNYXBib3hDbGlja0V2ZW50KSA9PiAoeyAuLi5zdGF0ZSwgZG91YmxlQ2xpY2tFdmVudCB9KSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0RXJyb3IgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBlcnJvcjogRXJyb3IpID0+ICh7IC4uLnN0YXRlLCBlcnJvciB9KSk7XG59XG4iXX0=
|