@asoftwareworld/form-builder-pro
Version:
ASW Form Builder Pro helps you with rapid development and designed web forms which includes several controls. The key feature of Form Builder is to make your content attractive and effective. We can customize our control at run time and preview the same b
164 lines • 23.3 kB
JavaScript
/**
* @license
* Copyright ASW (A Software World) All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file
*/
import { Injectable } from '@angular/core';
import * as i0 from "@angular/core";
export class GoogleMapService {
autocompleteService;
geoCoder;
searchedAddress = [];
latitude;
longitude;
placesService;
setCurrentLocation() {
this.geoCoder = new google.maps.Geocoder();
this.latitude = 31.67431470650697;
this.longitude = 75.64344802329514;
if ('geolocation' in navigator) {
navigator.geolocation.getCurrentPosition((position) => {
this.latitude = position.coords.latitude ? position.coords.latitude : 31.67431470650697;
this.longitude = position.coords.longitude ? position.coords.longitude : 75.64344802329514;
this.getAddress(this.latitude, this.longitude);
});
}
}
getNearestAddress() {
this.placesService = new google.maps.places.PlacesService(document.createElement('div'));
this.setCurrentLocation();
const nearestAddress = [];
return new Promise((resolve, reject) => {
const userLocation = new google.maps.LatLng(this.latitude, this.longitude);
const request = {
location: userLocation,
radius: 1500,
types: ['establishment'],
rankby: 'distance'
};
this.placesService.nearbySearch(request, (options, status) => {
if (status === google.maps.places.PlacesServiceStatus.OK) {
options.map((element) => {
const address = {
id: element.place_id,
label: element.name + ', ' + element.vicinity,
alias: element.name,
addressName: element.vicinity,
latitude: element.geometry.location.lat(),
longitude: element.geometry.location.lng(),
icon: 'https://maps.gstatic.com/consumer/images/icons/2x/place_grey650.png'
};
nearestAddress.push(address);
});
this.searchedAddress = nearestAddress;
resolve(this.searchedAddress);
}
else {
reject(status);
}
});
}).then();
}
getQueryPredictions(query) {
this.autocompleteService = new google.maps.places.AutocompleteService();
const request = {
input: query
};
let resultAddress = [];
return new Promise((resolve, reject) => {
this.autocompleteService.getQueryPredictions(request, (options, status) => {
if (status === google.maps.places.PlacesServiceStatus.OK && options.length > 0) {
options.map((element) => {
const address = {
id: element.place_id,
label: element.structured_formatting.main_text + ', ' + element.structured_formatting.secondary_text,
alias: element.structured_formatting.main_text,
addressName: element.structured_formatting.secondary_text,
icon: 'https://maps.gstatic.com/consumer/images/icons/2x/place_grey650.png'
};
resultAddress.push(address);
});
this.searchedAddress = resultAddress;
resolve(this.searchedAddress);
}
else if (status === google.maps.places.PlacesServiceStatus.ZERO_RESULTS) {
resultAddress = [];
resolve(resultAddress);
}
});
}).then();
}
getAddress(latitude, longitude) {
this.geoCoder = new google.maps.Geocoder();
this.searchedAddress = [];
return new Promise((resolve, reject) => {
this.geoCoder.geocode({
location: {
lat: latitude,
lng: longitude
}
}, (results, status) => {
if (status === google.maps.GeocoderStatus.OK) {
const element = results[0];
const address = {
id: element.place_id,
label: element.formatted_address,
alias: element.formatted_address,
addressName: element.formatted_address,
icon: 'https://maps.gstatic.com/consumer/images/icons/2x/place_grey650.png',
latitude,
longitude
};
this.searchedAddress.push(address);
resolve(this.searchedAddress);
}
else {
reject(status);
}
});
}).then();
}
getDetails(data) {
let lat;
let lng;
return new Promise((resolve, reject) => {
this.placesService.getDetails({ placeId: data.id, fields: ['geometry', 'icon'] }, (details, status) => {
if (status === google.maps.places.PlacesServiceStatus.OK) {
lat = details.geometry.location.lat();
lng = details.geometry.location.lng();
const address = {
id: data.id,
label: data.label,
alias: data.alias,
addressName: data.addressName,
latitude: lat,
longitude: lng,
icon: data.icon
};
resolve(address);
}
else {
reject(status);
}
});
}).then();
}
isLetter(value) {
const letters = /[a-z A-Z]/g;
if (value && value.match(letters)) {
return false;
}
return true;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GoogleMapService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GoogleMapService, providedIn: 'root' });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GoogleMapService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvZm9ybS1jb250cm9sL2dwcy9nb29nbGUtbWFwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFNM0MsTUFBTSxPQUFPLGdCQUFnQjtJQUN6QixtQkFBbUIsQ0FBTTtJQUNqQixRQUFRLENBQU07SUFDdEIsZUFBZSxHQUFVLEVBQUUsQ0FBQztJQUM1QixRQUFRLENBQVU7SUFDbEIsU0FBUyxDQUFVO0lBQ25CLGFBQWEsQ0FBTTtJQUVuQixrQkFBa0I7UUFDZCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFHLGlCQUFpQixDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQWlCLENBQUM7UUFDbkMsSUFBSSxhQUFhLElBQUksU0FBUyxFQUFFLENBQUM7WUFDN0IsU0FBUyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNsRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7Z0JBQ3hGLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDM0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENB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KEEgU29mdHdhcmUgV29ybGQpIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGVcbiAqL1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuZGVjbGFyZSBjb25zdCBnb29nbGU6IGFueTtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBHb29nbGVNYXBTZXJ2aWNlIHtcbiAgICBhdXRvY29tcGxldGVTZXJ2aWNlOiBhbnk7XG4gICAgcHJpdmF0ZSBnZW9Db2RlcjogYW55O1xuICAgIHNlYXJjaGVkQWRkcmVzczogYW55W10gPSBbXTtcbiAgICBsYXRpdHVkZSE6IG51bWJlcjtcbiAgICBsb25naXR1ZGUhOiBudW1iZXI7XG4gICAgcGxhY2VzU2VydmljZTogYW55O1xuXG4gICAgc2V0Q3VycmVudExvY2F0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdlb0NvZGVyID0gbmV3IGdvb2dsZS5tYXBzLkdlb2NvZGVyKCk7XG4gICAgICAgIHRoaXMubGF0aXR1ZGUgPSAzMS42NzQzMTQ3MDY1MDY5NztcbiAgICAgICAgdGhpcy5sb25naXR1ZGUgPSA3NS42NDM0NDgwMjMyOTUxNDtcbiAgICAgICAgaWYgKCdnZW9sb2NhdGlvbicgaW4gbmF2aWdhdG9yKSB7XG4gICAgICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKChwb3NpdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubGF0aXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGUgPyBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGUgOiAzMS42NzQzMTQ3MDY1MDY5NztcbiAgICAgICAgICAgICAgICB0aGlzLmxvbmdpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUgPyBwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlIDogNzUuNjQzNDQ4MDIzMjk1MTQ7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBZGRyZXNzKHRoaXMubGF0aXR1ZGUsIHRoaXMubG9uZ2l0dWRlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0TmVhcmVzdEFkZHJlc3MoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgdGhpcy5wbGFjZXNTZXJ2aWNlID0gbmV3IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZXNTZXJ2aWNlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50TG9jYXRpb24oKTtcbiAgICAgICAgY29uc3QgbmVhcmVzdEFkZHJlc3M6IGFueVtdID0gW107XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1c2VyTG9jYXRpb24gPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKHRoaXMubGF0aXR1ZGUsIHRoaXMubG9uZ2l0dWRlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb246IHVzZXJMb2NhdGlvbixcbiAgICAgICAgICAgICAgICByYWRpdXM6IDE1MDAsXG4gICAgICAgICAgICAgICAgdHlwZXM6IFsnZXN0YWJsaXNobWVudCddLFxuICAgICAgICAgICAgICAgIHJhbmtieTogJ2Rpc3RhbmNlJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMucGxhY2VzU2VydmljZS5uZWFyYnlTZWFyY2gocmVxdWVzdCwgKG9wdGlvbnM6IGFueVtdLCBzdGF0dXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT09IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZXNTZXJ2aWNlU3RhdHVzLk9LKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubWFwKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGRyZXNzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBlbGVtZW50LnBsYWNlX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlbGVtZW50Lm5hbWUgKyAnLCAnICsgZWxlbWVudC52aWNpbml0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhczogZWxlbWVudC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NOYW1lOiBlbGVtZW50LnZpY2luaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhdGl0dWRlOiBlbGVtZW50Lmdlb21ldHJ5LmxvY2F0aW9uLmxhdCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdpdHVkZTogZWxlbWVudC5nZW9tZXRyeS5sb2NhdGlvbi5sbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiAnaHR0cHM6Ly9tYXBzLmdzdGF0aWMuY29tL2NvbnN1bWVyL2ltYWdlcy9pY29ucy8yeC9wbGFjZV9ncmV5NjUwLnBuZydcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBuZWFyZXN0QWRkcmVzcy5wdXNoKGFkZHJlc3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hlZEFkZHJlc3MgPSBuZWFyZXN0QWRkcmVzcztcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNlYXJjaGVkQWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHN0YXR1cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pLnRoZW4oKTtcbiAgICB9XG5cbiAgICBnZXRRdWVyeVByZWRpY3Rpb25zKHF1ZXJ5OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVNlcnZpY2UgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLkF1dG9jb21wbGV0ZVNlcnZpY2UoKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgIGlucHV0OiBxdWVyeVxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzdWx0QWRkcmVzczogYW55W10gPSBbXTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU2VydmljZS5nZXRRdWVyeVByZWRpY3Rpb25zKHJlcXVlc3QsIChvcHRpb25zOiBhbnlbXSwgc3RhdHVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSBnb29nbGUubWFwcy5wbGFjZXMuUGxhY2VzU2VydmljZVN0YXR1cy5PSyAmJiBvcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tYXAoKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkZHJlc3MgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGVsZW1lbnQucGxhY2VfaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGVsZW1lbnQuc3RydWN0dXJlZF9mb3JtYXR0aW5nLm1haW5fdGV4dCArICcsICcgKyBlbGVtZW50LnN0cnVjdHVyZWRfZm9ybWF0dGluZy5zZWNvbmRhcnlfdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhczogZWxlbWVudC5zdHJ1Y3R1cmVkX2Zvcm1hdHRpbmcubWFpbl90ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NOYW1lOiBlbGVtZW50LnN0cnVjdHVyZWRfZm9ybWF0dGluZy5zZWNvbmRhcnlfdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiAnaHR0cHM6Ly9tYXBzLmdzdGF0aWMuY29tL2NvbnN1bWVyL2ltYWdlcy9pY29ucy8yeC9wbGFjZV9ncmV5NjUwLnBuZydcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRBZGRyZXNzLnB1c2goYWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaGVkQWRkcmVzcyA9IHJlc3VsdEFkZHJlc3M7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zZWFyY2hlZEFkZHJlc3MpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSBnb29nbGUubWFwcy5wbGFjZXMuUGxhY2VzU2VydmljZVN0YXR1cy5aRVJPX1JFU1VMVFMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0QWRkcmVzcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdEFkZHJlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KS50aGVuKCk7XG4gICAgfVxuXG4gICAgZ2V0QWRkcmVzcyhsYXRpdHVkZTogbnVtYmVyLCBsb25naXR1ZGU6IG51bWJlcik6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHRoaXMuZ2VvQ29kZXIgPSBuZXcgZ29vZ2xlLm1hcHMuR2VvY29kZXIoKTtcbiAgICAgICAgdGhpcy5zZWFyY2hlZEFkZHJlc3MgPSBbXTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2VvQ29kZXIuZ2VvY29kZShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXQ6IGxhdGl0dWRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG5nOiBsb25naXR1ZGVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKHJlc3VsdHM6IGFueVtdLCBzdGF0dXM6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSBnb29nbGUubWFwcy5HZW9jb2RlclN0YXR1cy5PSykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHJlc3VsdHNbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGRyZXNzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBlbGVtZW50LnBsYWNlX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlbGVtZW50LmZvcm1hdHRlZF9hZGRyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzOiBlbGVtZW50LmZvcm1hdHRlZF9hZGRyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NOYW1lOiBlbGVtZW50LmZvcm1hdHRlZF9hZGRyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICdodHRwczovL21hcHMuZ3N0YXRpYy5jb20vY29uc3VtZXIvaW1hZ2VzL2ljb25zLzJ4L3BsYWNlX2dyZXk2NTAucG5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXRpdHVkZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25naXR1ZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaGVkQWRkcmVzcy5wdXNoKGFkZHJlc3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNlYXJjaGVkQWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3Qoc3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pLnRoZW4oKTtcbiAgICB9XG5cbiAgICBnZXREZXRhaWxzKGRhdGE6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGxldCBsYXQ7XG4gICAgICAgIGxldCBsbmc7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBsYWNlc1NlcnZpY2UuZ2V0RGV0YWlscyh7IHBsYWNlSWQ6IGRhdGEuaWQsIGZpZWxkczogWydnZW9tZXRyeScsICdpY29uJ10gfSwgKGRldGFpbHM6IHsgZ2VvbWV0cnk6IHsgbG9jYXRpb246IHsgbGF0OiAoKSA9PiBhbnk7IGxuZzogKCkgPT4gYW55IH0gfTsgaWNvbjogYW55IH0sIHN0YXR1czogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlc1NlcnZpY2VTdGF0dXMuT0spIHtcbiAgICAgICAgICAgICAgICAgICAgbGF0ID0gZGV0YWlscy5nZW9tZXRyeS5sb2NhdGlvbi5sYXQoKTtcbiAgICAgICAgICAgICAgICAgICAgbG5nID0gZGV0YWlscy5nZW9tZXRyeS5sb2NhdGlvbi5sbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRkcmVzcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGRhdGEubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlhczogZGF0YS5hbGlhcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NOYW1lOiBkYXRhLmFkZHJlc3NOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGF0aXR1ZGU6IGxhdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdpdHVkZTogbG5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogZGF0YS5pY29uXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHN0YXR1cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pLnRoZW4oKTtcbiAgICB9XG5cbiAgICBpc0xldHRlcih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGxldHRlcnMgPSAvW2EteiBBLVpdL2c7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5tYXRjaChsZXR0ZXJzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbiJdfQ==