@007.surajit2023/agm-markerclusterer
Version:
Angular Google Maps (AGM) extension for markerclusterer support
173 lines (172 loc) • 21.6 kB
JavaScript
import { Directive, EventEmitter, Input, Output } from '@angular/core';
import { InfoWindowManager, MarkerManager } from '@007.surajit2023/agm-core';
import { ClusterManager } from '../services/managers/cluster-manager';
import * as i0 from "@angular/core";
import * as i1 from "../services/managers/cluster-manager";
// tslint:disable: jsdoc-format
/**
* AgmMarkerCluster clusters map marker if they are near together
*
* ### Example
```typescript
import { Component } from '@angular/core';
@Component({
selector: 'my-map-cmp',
styles: [`
agm-map {
height: 300px;
}
`],
template: `
<agm-map [latitude]="lat" [longitude]="lng" [zoom]="zoom">
<agm-marker-cluster>
<agm-marker [latitude]="lat" [longitude]="lng" [label]="'M'">
</agm-marker>
<agm-marker [latitude]="lat2" [longitude]="lng2" [label]="'N'">
</agm-marker>
</agm-marker-cluster>
</agm-map>
`
})
```
*/
// tslint:enable: jsdoc-format
export class AgmMarkerCluster {
constructor(_clusterManager) {
this._clusterManager = _clusterManager;
this.clusterClick = new EventEmitter();
this._observableSubscriptions = [];
}
/** @internal */
ngOnDestroy() {
this._clusterManager.clearMarkers();
this._observableSubscriptions.forEach((s) => s.unsubscribe());
}
/** @internal */
ngOnChanges(changes) {
// tslint:disable: no-string-literal
if (changes['gridSize']) {
this._clusterManager.setGridSize(this);
}
if (changes['maxZoom']) {
this._clusterManager.setMaxZoom(this);
}
if (changes['zoomOnClick']) {
this._clusterManager.setZoomOnClick(this);
}
if (changes['averageCenter']) {
this._clusterManager.setAverageCenter(this);
}
if (changes['minimumClusterSize']) {
this._clusterManager.setMinimumClusterSize(this);
}
if (changes['imagePath']) {
this._clusterManager.setImagePath(this);
}
if (changes['imageExtension']) {
this._clusterManager.setImageExtension(this);
}
if (changes['calculator']) {
this._clusterManager.setCalculator(this);
}
if (changes['styles']) {
this._clusterManager.setStyles(this);
}
if (changes['clusterClass']) {
this._clusterManager.setClusterClass(this);
}
if (changes['enableRetinaIcons']) {
this._clusterManager.setEnableRetinaIcons(this);
}
if (changes['ignoreHidden']) {
this._clusterManager.setIgnoreHidden(this);
}
if (changes['imageSizes']) {
this._clusterManager.setImageSizes(this);
}
if (changes['title']) {
this._clusterManager.setTitle(this);
}
// tslint:enable: no-string-literal
}
_addEventListeners() {
const handlers = [
{
name: 'clusterclick',
handler: () => this.clusterClick.emit(),
},
];
handlers.forEach((obj) => {
const os = this._clusterManager.createClusterEventObservable(obj.name).subscribe(obj.handler);
this._observableSubscriptions.push(os);
});
}
/** @internal */
ngOnInit() {
this._addEventListeners();
this._clusterManager.init({
averageCenter: this.averageCenter,
calculator: this.calculator,
clusterClass: this.clusterClass,
enableRetinaIcons: this.enableRetinaIcons,
gridSize: this.gridSize,
ignoreHidden: this.ignoreHidden,
imageExtension: this.imageExtension,
imagePath: this.imagePath,
imageSizes: this.imageSizes,
maxZoom: this.maxZoom,
minimumClusterSize: this.minimumClusterSize,
styles: this.styles,
title: this.title,
zoomOnClick: this.zoomOnClick,
});
}
}
AgmMarkerCluster.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AgmMarkerCluster, deps: [{ token: i1.ClusterManager }], target: i0.ɵɵFactoryTarget.Directive });
AgmMarkerCluster.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: AgmMarkerCluster, selector: "agm-marker-cluster", inputs: { gridSize: "gridSize", maxZoom: "maxZoom", zoomOnClick: "zoomOnClick", averageCenter: "averageCenter", minimumClusterSize: "minimumClusterSize", styles: "styles", calculator: "calculator", imagePath: "imagePath", imageExtension: "imageExtension", clusterClass: "clusterClass", enableRetinaIcons: "enableRetinaIcons", ignoreHidden: "ignoreHidden", imageSizes: "imageSizes", title: "title" }, outputs: { clusterClick: "clusterClick" }, providers: [
ClusterManager,
{ provide: MarkerManager, useExisting: ClusterManager },
InfoWindowManager,
], usesOnChanges: true, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AgmMarkerCluster, decorators: [{
type: Directive,
args: [{
selector: 'agm-marker-cluster',
providers: [
ClusterManager,
{ provide: MarkerManager, useExisting: ClusterManager },
InfoWindowManager,
],
}]
}], ctorParameters: function () { return [{ type: i1.ClusterManager }]; }, propDecorators: { gridSize: [{
type: Input
}], maxZoom: [{
type: Input
}], zoomOnClick: [{
type: Input
}], averageCenter: [{
type: Input
}], minimumClusterSize: [{
type: Input
}], styles: [{
type: Input
}], calculator: [{
type: Input
}], imagePath: [{
type: Input
}], imageExtension: [{
type: Input
}], clusterClass: [{
type: Input
}], enableRetinaIcons: [{
type: Input
}], ignoreHidden: [{
type: Input
}], imageSizes: [{
type: Input
}], title: [{
type: Input
}], clusterClick: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2VyLWNsdXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9tYXJrZXJjbHVzdGVyZXIvc3JjL2xpYi9kaXJlY3RpdmVzL21hcmtlci1jbHVzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBZ0MsTUFBTSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUluSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHN0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7QUFFdEUsK0JBQStCO0FBQy9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILDhCQUE4QjtBQVM5QixNQUFNLE9BQU8sZ0JBQWdCO0lBNkYzQixZQUFvQixlQUErQjtRQUEvQixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFKekMsaUJBQVksR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUU5RCw2QkFBd0IsR0FBbUIsRUFBRSxDQUFDO0lBRUMsQ0FBQztJQUV4RCxnQkFBZ0I7SUFDaEIsV0FBVztRQUNULElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELGdCQUFnQjtJQUNoQixXQUFXLENBQUMsT0FBd0M7UUFDbEQsb0NBQW9DO1FBQ3BDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDdEIs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LEtBQUs7Z0JBU0csS0FBSztzQkFBYixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IEluZm9XaW5kb3dNYW5hZ2VyLCBNYXJrZXJNYW5hZ2VyIH0gZnJvbSAnQDAwNy5zdXJhaml0MjAyMy9hZ20tY29yZSc7XHJcbmltcG9ydCB7IENsdXN0ZXJJY29uU3R5bGUsIE1hcmtlckNsdXN0ZXJlck9wdGlvbnMgfSBmcm9tICdAZ29vZ2xlL21hcmtlcmNsdXN0ZXJlcnBsdXMnO1xyXG5pbXBvcnQgeyBDYWxjdWxhdG9yIH0gZnJvbSAnQGdvb2dsZS9tYXJrZXJjbHVzdGVyZXJwbHVzL2Rpc3QvbWFya2VyY2x1c3RlcmVyJztcclxuaW1wb3J0IHsgQ2x1c3Rlck1hbmFnZXIgfSBmcm9tICcuLi9zZXJ2aWNlcy9tYW5hZ2Vycy9jbHVzdGVyLW1hbmFnZXInO1xyXG5cclxuLy8gdHNsaW50OmRpc2FibGU6IGpzZG9jLWZvcm1hdFxyXG4vKipcclxuICogQWdtTWFya2VyQ2x1c3RlciBjbHVzdGVycyBtYXAgbWFya2VyIGlmIHRoZXkgYXJlIG5lYXIgdG9nZXRoZXJcclxuICpcclxuICogIyMjIEV4YW1wbGVcclxuYGBgdHlwZXNjcmlwdFxyXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gc2VsZWN0b3I6ICdteS1tYXAtY21wJyxcclxuIHN0eWxlczogW2BcclxuICAgYWdtLW1hcCB7XHJcbiAgICAgaGVpZ2h0OiAzMDBweDtcclxuICAgfVxyXG4gYF0sXHJcbiB0ZW1wbGF0ZTogYFxyXG4gICA8YWdtLW1hcCBbbGF0aXR1ZGVdPVwibGF0XCIgW2xvbmdpdHVkZV09XCJsbmdcIiBbem9vbV09XCJ6b29tXCI+XHJcbiAgICAgPGFnbS1tYXJrZXItY2x1c3Rlcj5cclxuICAgICAgIDxhZ20tbWFya2VyIFtsYXRpdHVkZV09XCJsYXRcIiBbbG9uZ2l0dWRlXT1cImxuZ1wiIFtsYWJlbF09XCInTSdcIj5cclxuICAgICAgIDwvYWdtLW1hcmtlcj5cclxuICAgICAgIDxhZ20tbWFya2VyIFtsYXRpdHVkZV09XCJsYXQyXCIgW2xvbmdpdHVkZV09XCJsbmcyXCIgW2xhYmVsXT1cIidOJ1wiPlxyXG4gICAgICAgPC9hZ20tbWFya2VyPlxyXG4gICAgIDwvYWdtLW1hcmtlci1jbHVzdGVyPlxyXG4gICA8L2FnbS1tYXA+XHJcbiBgXHJcbn0pXHJcbmBgYFxyXG4gKi9cclxuLy8gdHNsaW50OmVuYWJsZToganNkb2MtZm9ybWF0XHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnYWdtLW1hcmtlci1jbHVzdGVyJyxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIENsdXN0ZXJNYW5hZ2VyLFxyXG4gICAgeyBwcm92aWRlOiBNYXJrZXJNYW5hZ2VyLCB1c2VFeGlzdGluZzogQ2x1c3Rlck1hbmFnZXIgfSxcclxuICAgIEluZm9XaW5kb3dNYW5hZ2VyLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZ21NYXJrZXJDbHVzdGVyIGltcGxlbWVudHMgT25EZXN0cm95LCBPbkNoYW5nZXMsIE9uSW5pdCwgTWFya2VyQ2x1c3RlcmVyT3B0aW9ucyB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGdyaWQgc2l6ZSBvZiBhIGNsdXN0ZXIgaW4gcGl4ZWxzXHJcbiAgICovXHJcbiAgQElucHV0KCkgZ3JpZFNpemU6IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG1heGltdW0gem9vbSBsZXZlbCB0aGF0IGEgbWFya2VyIGNhbiBiZSBwYXJ0IG9mIGEgY2x1c3Rlci5cclxuICAgKi9cclxuICBASW5wdXQoKSBtYXhab29tOiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIG9mIGNsaWNraW5nIG9uIGEgY2x1c3RlciBpcyB0byB6b29tIGludG8gaXQuXHJcbiAgICovXHJcbiAgQElucHV0KCkgem9vbU9uQ2xpY2s6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIGNlbnRlciBvZiBlYWNoIGNsdXN0ZXIgc2hvdWxkIGJlIHRoZSBhdmVyYWdlIG9mIGFsbCBtYXJrZXJzIGluIHRoZSBjbHVzdGVyLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGF2ZXJhZ2VDZW50ZXI6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBtaW5pbXVtIG51bWJlciBvZiBtYXJrZXJzIHRvIGJlIGluIGEgY2x1c3RlciBiZWZvcmUgdGhlIG1hcmtlcnMgYXJlIGhpZGRlbiBhbmQgYSBjb3VudCBpcyBzaG93bi5cclxuICAgKi9cclxuICBASW5wdXQoKSBtaW5pbXVtQ2x1c3RlclNpemU6IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogQW4gb2JqZWN0IHRoYXQgaGFzIHN0eWxlIHByb3BlcnRpZXMuXHJcbiAgICovXHJcbiAgQElucHV0KCkgc3R5bGVzOiBDbHVzdGVySWNvblN0eWxlW107XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgZnVuY3Rpb24gdGhhdCBjYWxjdWxhdGVzIHRoZSBjbHVzdGVyIHN0eWxlIGFuZCB0ZXh0IGJhc2VkIG9uIHRoZSBtYXJrZXJzIGluIHRoZSBjbHVzdGVyLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGNhbGN1bGF0b3I6IENhbGN1bGF0b3I7XHJcblxyXG4gIEBJbnB1dCgpIGltYWdlUGF0aDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGltYWdlRXh0ZW5zaW9uOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBDU1MgY2xhc3MgZGVmaW5pbmcgZ2VuZXJhbCBzdHlsZXMgZm9yIHRoZSBjbHVzdGVyIG1hcmtlcnMuXHJcbiAgICogVXNlIHRoaXMgY2xhc3MgdG8gZGVmaW5lIENTUyBzdHlsZXMgdGhhdCBhcmUgbm90IHNldCB1cCBieSB0aGUgY29kZSB0aGF0XHJcbiAgICogcHJvY2Vzc2VzIHRoZSBgc3R5bGVzYCBhcnJheS5cclxuICAgKlxyXG4gICAqIEBkZWZhdWx0VmFsdWUgJ2NsdXN0ZXInXHJcbiAgICovXHJcbiAgQElucHV0KCkgY2x1c3RlckNsYXNzOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdG8gYWxsb3cgdGhlIHVzZSBvZiBjbHVzdGVyIGljb25zIHRoYXQgaGF2ZSBzaXplcyB0aGF0IGFyZSBzb21lXHJcbiAgICogbXVsdGlwbGUgKHR5cGljYWxseSBkb3VibGUpIG9mIHRoZWlyIGFjdHVhbCBkaXNwbGF5IHNpemUuIEljb25zIHN1Y2ggYXNcclxuICAgKiB0aGVzZSBsb29rIGJldHRlciB3aGVuIHZpZXdlZCBvbiBoaWdoLXJlc29sdXRpb24gbW9uaXRvcnMgc3VjaCBhcyBBcHBsZSdzXHJcbiAgICogUmV0aW5hIGRpc3BsYXlzLiBOb3RlOiBpZiB0aGlzIHByb3BlcnR5IGlzIGB0cnVlYCwgc3ByaXRlcyBjYW5ub3QgYmUgdXNlZFxyXG4gICAqIGFzIGNsdXN0ZXIgaWNvbnMuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdFZhbHVlIGZhbHNlXHJcbiAgICovXHJcbiAgQElucHV0KCkgZW5hYmxlUmV0aW5hSWNvbnM6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdG8gaWdub3JlIGhpZGRlbiBtYXJrZXJzIGluIGNsdXN0ZXJzLiBZb3UgbWF5IHdhbnQgdG8gc2V0IHRoaXMgdG9cclxuICAgKiBgdHJ1ZWAgdG8gZW5zdXJlIHRoYXQgaGlkZGVuIG1hcmtlcnMgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgbWFya2VyIGNvdW50XHJcbiAgICogdGhhdCBhcHBlYXJzIG9uIGEgY2x1c3RlciBtYXJrZXIgKHRoaXMgY291bnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBgdGV4dGBcclxuICAgKiBwcm9wZXJ0eSBvZiB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWZhdWx0IGBjYWxjdWxhdG9yYCkuIElmIHNldCB0b1xyXG4gICAqIGB0cnVlYCBhbmQgeW91IGNoYW5nZSB0aGUgdmlzaWJpbGl0eSBvZiBhIG1hcmtlciBiZWluZyBjbHVzdGVyZWQsIGJlIHN1cmVcclxuICAgKiB0byBhbHNvIGNhbGwgYE1hcmtlckNsdXN0ZXJlci5yZXBhaW50KClgLlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHRWYWx1ZSBmYWxzZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGlnbm9yZUhpZGRlbjogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogQW4gYXJyYXkgb2YgbnVtYmVycyBjb250YWluaW5nIHRoZSB3aWR0aHMgb2YgdGhlIGdyb3VwIG9mXHJcbiAgICogYDxpbWFnZVBhdGg+PG4+LjxpbWFnZUV4dGVuc2lvbj5gIGltYWdlIGZpbGVzLiAoVGhlIGltYWdlcyBhcmUgYXNzdW1lZCB0b1xyXG4gICAqIGJlIHNxdWFyZS4pXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdFZhbHVlIFs1MywgNTYsIDY2LCA3OCwgOTBdXHJcbiAgICovXHJcbiAgQElucHV0KCkgaW1hZ2VTaXplczogbnVtYmVyW107XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSB0b29sdGlwIHRvIGRpc3BsYXkgd2hlbiB0aGUgbW91c2UgbW92ZXMgb3ZlciBhIGNsdXN0ZXIgbWFya2VyLlxyXG4gICAqIChBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSBhIGN1c3RvbSBgY2FsY3VsYXRvcmAgZnVuY3Rpb24gdG8gc3BlY2lmeSBhXHJcbiAgICogZGlmZmVyZW50IHRvb2x0aXAgZm9yIGVhY2ggY2x1c3RlciBtYXJrZXIuKVxyXG4gICAqXHJcbiAgICogQGRlZmF1bHRWYWx1ZSAnJ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XHJcblxyXG4gIEBPdXRwdXQoKSBjbHVzdGVyQ2xpY2s6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfb2JzZXJ2YWJsZVN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NsdXN0ZXJNYW5hZ2VyOiBDbHVzdGVyTWFuYWdlcikgeyB9XHJcblxyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuX2NsdXN0ZXJNYW5hZ2VyLmNsZWFyTWFya2VycygpO1xyXG4gICAgdGhpcy5fb2JzZXJ2YWJsZVN1YnNjcmlwdGlvbnMuZm9yRWFjaCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcblxyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiB7IFtrZXk6IHN0cmluZ106IFNpbXBsZUNoYW5nZSB9KSB7XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTogbm8tc3RyaW5nLWxpdGVyYWxcclxuICAgIGlmIChjaGFuZ2VzWydncmlkU2l6ZSddKSB7XHJcbiAgICAgIHRoaXMuX2NsdXN0ZXJNYW5hZ2VyLnNldEdyaWRTaXplKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ21heFpvb20nXSkge1xyXG4gICAgICB0aGlzLl9jbHVzdGVyTWFuYWdlci5zZXRNYXhab29tKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ3pvb21PbkNsaWNrJ10pIHtcclxuICAgICAgdGhpcy5fY2x1c3Rlck1hbmFnZXIuc2V0Wm9vbU9uQ2xpY2sodGhpcyk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snYXZlcmFnZUNlbnRlciddKSB7XHJcbiAgICAgIHRoaXMuX2NsdXN0ZXJNYW5hZ2VyLnNldEF2ZXJhZ2VDZW50ZXIodGhpcyk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snbWluaW11bUNsdXN0ZXJTaXplJ10pIHtcclxuICAgICAgdGhpcy5fY2x1c3Rlck1hbmFnZXIuc2V0TWluaW11bUNsdXN0ZXJTaXplKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2ltYWdlUGF0aCddKSB7XHJcbiAgICAgIHRoaXMuX2NsdXN0ZXJNYW5hZ2VyLnNldEltYWdlUGF0aCh0aGlzKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydpbWFnZUV4dGVuc2lvbiddKSB7XHJcbiAgICAgIHRoaXMuX2NsdXN0ZXJNYW5hZ2VyLnNldEltYWdlRXh0ZW5zaW9uKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2NhbGN1bGF0b3InXSkge1xyXG4gICAgICB0aGlzLl9jbHVzdGVyTWFuYWdlci5zZXRDYWxjdWxhdG9yKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ3N0eWxlcyddKSB7XHJcbiAgICAgIHRoaXMuX2NsdXN0ZXJNYW5hZ2VyLnNldFN0eWxlcyh0aGlzKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydjbHVzdGVyQ2xhc3MnXSkge1xyXG4gICAgICB0aGlzLl9jbHVzdGVyTWFuYWdlci5zZXRDbHVzdGVyQ2xhc3ModGhpcyk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snZW5hYmxlUmV0aW5hSWNvbnMnXSkge1xyXG4gICAgICB0aGlzLl9jbHVzdGVyTWFuYWdlci5zZXRFbmFibGVSZXRpbmFJY29ucyh0aGlzKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydpZ25vcmVIaWRkZW4nXSkge1xyXG4gICAgICB0aGlzLl9jbHVzdGVyTWFuYWdlci5zZXRJZ25vcmVIaWRkZW4odGhpcyk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snaW1hZ2VTaXplcyddKSB7XHJcbiAgICAgIHRoaXMuX2NsdXN0ZXJNYW5hZ2VyLnNldEltYWdlU2l6ZXModGhpcyk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1sndGl0bGUnXSkge1xyXG4gICAgICB0aGlzLl9jbHVzdGVyTWFuYWdlci5zZXRUaXRsZSh0aGlzKTtcclxuICAgIH1cclxuICAgIC8vIHRzbGludDplbmFibGU6IG5vLXN0cmluZy1saXRlcmFsXHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XHJcbiAgICBjb25zdCBoYW5kbGVycyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdjbHVzdGVyY2xpY2snLFxyXG4gICAgICAgIGhhbmRsZXI6ICgpID0+IHRoaXMuY2x1c3RlckNsaWNrLmVtaXQoKSxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgICBoYW5kbGVycy5mb3JFYWNoKChvYmopID0+IHtcclxuICAgICAgY29uc3Qgb3MgPSB0aGlzLl9jbHVzdGVyTWFuYWdlci5jcmVhdGVDbHVzdGVyRXZlbnRPYnNlcnZhYmxlKG9iai5uYW1lKS5zdWJzY3JpYmUob2JqLmhhbmRsZXIpO1xyXG4gICAgICB0aGlzLl9vYnNlcnZhYmxlU3Vic2NyaXB0aW9ucy5wdXNoKG9zKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKTtcclxuICAgIHRoaXMuX2NsdXN0ZXJNYW5hZ2VyLmluaXQoe1xyXG4gICAgICBhdmVyYWdlQ2VudGVyOiB0aGlzLmF2ZXJhZ2VDZW50ZXIsXHJcbiAgICAgIGNhbGN1bGF0b3I6IHRoaXMuY2FsY3VsYXRvcixcclxuICAgICAgY2x1c3RlckNsYXNzOiB0aGlzLmNsdXN0ZXJDbGFzcyxcclxuICAgICAgZW5hYmxlUmV0aW5hSWNvbnM6IHRoaXMuZW5hYmxlUmV0aW5hSWNvbnMsXHJcbiAgICAgIGdyaWRTaXplOiB0aGlzLmdyaWRTaXplLFxyXG4gICAgICBpZ25vcmVIaWRkZW46IHRoaXMuaWdub3JlSGlkZGVuLFxyXG4gICAgICBpbWFnZUV4dGVuc2lvbjogdGhpcy5pbWFnZUV4dGVuc2lvbixcclxuICAgICAgaW1hZ2VQYXRoOiB0aGlzLmltYWdlUGF0aCxcclxuICAgICAgaW1hZ2VTaXplczogdGhpcy5pbWFnZVNpemVzLFxyXG4gICAgICBtYXhab29tOiB0aGlzLm1heFpvb20sXHJcbiAgICAgIG1pbmltdW1DbHVzdGVyU2l6ZTogdGhpcy5taW5pbXVtQ2x1c3RlclNpemUsXHJcbiAgICAgIHN0eWxlczogdGhpcy5zdHlsZXMsXHJcbiAgICAgIHRpdGxlOiB0aGlzLnRpdGxlLFxyXG4gICAgICB6b29tT25DbGljazogdGhpcy56b29tT25DbGljayxcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=