@sabstravtech/obtservices 0.2.2505201645 → 0.2.2506041247
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/base/lib/vendor/classes/carhire-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/classes/management-info-and-valid.d.ts +2 -0
- package/base/lib/vendor/classes/user-favourite.enum.d.ts +1 -0
- package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +2 -0
- package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +2 -1
- package/base/lib/vendor/interfaces/hotel-stars-to-hide.interface.d.ts +7 -0
- package/base/lib/vendor/types/types.d.ts +5 -1
- package/base/sabstravtech-obtservices-base.metadata.json +1 -1
- package/bundles/sabstravtech-obtservices-base.umd.js +285 -190
- package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
- package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +4 -3
- package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +36 -9
- package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +58 -26
- package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +4 -3
- package/esm2015/base/lib/vendor/classes/helpers.js +5 -5
- package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +22 -31
- package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +17 -7
- package/esm2015/base/lib/vendor/classes/user-favourite.enum.js +2 -1
- package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/hotel-stars-to-hide.interface.js +1 -1
- package/esm2015/base/lib/vendor/services/hotel-avallibility.service.js +5 -3
- package/esm2015/base/lib/vendor/services/logon.service.js +6 -3
- package/esm2015/base/lib/vendor/services/search.service.js +25 -14
- package/esm2015/base/lib/vendor/types/types.js +10 -2
- package/fesm2015/sabstravtech-obtservices-base.js +179 -93
- package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,8 +2,8 @@ import { __awaiter } from "tslib";
|
|
|
2
2
|
import moment from 'moment';
|
|
3
3
|
import { BaseEnterpriseSearch } from './base-enterprise';
|
|
4
4
|
import { of, combineLatest, of as observableOf, forkJoin } from 'rxjs';
|
|
5
|
-
import { ServiceType, CarHireTransmission, CarHireClass, CarHireType, DistanceTypes } from '../types/graphql.types';
|
|
6
|
-
import { LocationTypes, DifferentInvokdedUserReasons, ServiceProvider, TravelPolicies } from '../types/types';
|
|
5
|
+
import { ServiceType, CarHireTransmission, CarHireClass, CarHireType, DistanceTypes, LocationType } from '../types/graphql.types';
|
|
6
|
+
import { LocationTypes, DifferentInvokdedUserReasons, ServiceProvider, TravelPolicies, nonEnterpriseCarServices } from '../types/types';
|
|
7
7
|
import { take, map, switchMap } from 'rxjs/operators';
|
|
8
8
|
import { UserFavorurite } from './user-favourite.enum';
|
|
9
9
|
export var SortTypesCar;
|
|
@@ -258,6 +258,13 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
258
258
|
this._cheapestResultPrice = this.updateLowestPrice(results);
|
|
259
259
|
this.averageCo2PerItem = this.helpers.calculateAverageCo2PerItem(results);
|
|
260
260
|
this.results.next(results);
|
|
261
|
+
this.userService.changeUser.subscribe(() => {
|
|
262
|
+
const isEnterpriseCarHire = this.userService.userHasServiceProvider(ServiceType.Car, ServiceProvider.EnterpriseCarHire);
|
|
263
|
+
this.hasNonEnterpriseCarAccess = isEnterpriseCarHire ? nonEnterpriseCarServices.some((provider) => this.userService.userHasServiceProvider(ServiceType.Car, provider)) : true;
|
|
264
|
+
if (!this.hasNonEnterpriseCarAccess) {
|
|
265
|
+
this.checkAndSetDriverAgeAndPickupTime();
|
|
266
|
+
}
|
|
267
|
+
});
|
|
261
268
|
}
|
|
262
269
|
get adults() {
|
|
263
270
|
return this.tempParams.adults;
|
|
@@ -586,7 +593,7 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
586
593
|
}
|
|
587
594
|
checkAndSetDriverAgeAndPickupTime() {
|
|
588
595
|
var _a;
|
|
589
|
-
if (this._delivery || this._collection) {
|
|
596
|
+
if (this._delivery || this._collection || !this.hasNonEnterpriseCarAccess) {
|
|
590
597
|
const minDate = moment(this.helpers.momentRoundMinutes(this.helpers.makeMomentDayTime(), 30)).add(24, 'hours');
|
|
591
598
|
this._minDate = {
|
|
592
599
|
day: minDate.date(),
|
|
@@ -614,7 +621,11 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
614
621
|
this._driverAge = +value;
|
|
615
622
|
}
|
|
616
623
|
resetQuery() {
|
|
617
|
-
this.
|
|
624
|
+
const query = this.searchService.makeCarHireQuery();
|
|
625
|
+
if (!this.hasNonEnterpriseCarAccess) {
|
|
626
|
+
query.driverAge = this.driverAges[0].value;
|
|
627
|
+
}
|
|
628
|
+
this.updateTempParams(query);
|
|
618
629
|
this.estimatedMileage = null;
|
|
619
630
|
this._isValid();
|
|
620
631
|
}
|
|
@@ -670,7 +681,7 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
670
681
|
if ((_a = this.dropoff_datetime) === null || _a === void 0 ? void 0 : _a.isSameOrBefore(this.pickup_datetime, 'minute')) {
|
|
671
682
|
this.addValidationMessage('Dropoff date/time cannot be before or the same as pickup date/time');
|
|
672
683
|
}
|
|
673
|
-
if ((this.delivery || this.collection) && ((_b = this.pickup_datetime) === null || _b === void 0 ? void 0 : _b.isBefore(moment().add(24, 'hours')))) {
|
|
684
|
+
if ((this.delivery || this.collection || !this.hasNonEnterpriseCarAccess) && ((_b = this.pickup_datetime) === null || _b === void 0 ? void 0 : _b.isBefore(moment().add(24, 'hours')))) {
|
|
674
685
|
this.validationMessages.push('Pickup date/time must be at least 24 hours from now');
|
|
675
686
|
}
|
|
676
687
|
if ((_c = this.pickup_datetime) === null || _c === void 0 ? void 0 : _c.isBefore(moment())) {
|
|
@@ -728,6 +739,22 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
728
739
|
dropoffDateTime: options === null || options === void 0 ? void 0 : options.dropoffDateTime,
|
|
729
740
|
class: options === null || options === void 0 ? void 0 : options.class
|
|
730
741
|
};
|
|
742
|
+
this.searchService.getAirportByCode(dropoffDepot.locationCode).pipe(map(result => result)).subscribe(result => {
|
|
743
|
+
var _a, _b;
|
|
744
|
+
if (result.iataMatch) {
|
|
745
|
+
const match = result.iataMatch;
|
|
746
|
+
const test = {
|
|
747
|
+
gateway: match.iata,
|
|
748
|
+
locationType: LocationType.A,
|
|
749
|
+
destination: match.name,
|
|
750
|
+
terminals: match.terminals,
|
|
751
|
+
country: (_a = match.locationDetails) === null || _a === void 0 ? void 0 : _a.country,
|
|
752
|
+
countryCode: (_b = match.locationDetails) === null || _b === void 0 ? void 0 : _b.countryCode
|
|
753
|
+
};
|
|
754
|
+
this.pickup_location = test;
|
|
755
|
+
this.dropoff_location = test;
|
|
756
|
+
}
|
|
757
|
+
});
|
|
731
758
|
return this.gmtSearch(query).pipe(switchMap((result) => {
|
|
732
759
|
if (result.length) {
|
|
733
760
|
const preferredOptions = result.filter(option => option.companyPreferred || option.tmcPreferred);
|
|
@@ -958,7 +985,7 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
958
985
|
query.airport.dropoffCountryCode = this.dropoff_location.countryCode;
|
|
959
986
|
break;
|
|
960
987
|
case LocationTypes.City:
|
|
961
|
-
if (this.delivery || this.collection) {
|
|
988
|
+
if (this.delivery || this.collection || !this.hasNonEnterpriseCarAccess) {
|
|
962
989
|
query.location = {
|
|
963
990
|
dropoffCountryCode: this.cityDropoffDepot.countryCode,
|
|
964
991
|
dropoffPostalCode: this.cityDropoffDepot.locationCode,
|
|
@@ -990,7 +1017,7 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
990
1017
|
// };
|
|
991
1018
|
break;
|
|
992
1019
|
case LocationTypes.Postcode:
|
|
993
|
-
if (this.delivery || this.collection) {
|
|
1020
|
+
if (this.delivery || this.collection || !this.hasNonEnterpriseCarAccess) {
|
|
994
1021
|
query.location = {
|
|
995
1022
|
dropoffCountryCode: this.postcodeDropoff.countryCode,
|
|
996
1023
|
dropoffPostalCode: this.postcodeDropoff.locationCode,
|
|
@@ -1028,7 +1055,7 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1028
1055
|
query.travellers = this.travellers.map(traveller => { return { id: traveller.id }; });
|
|
1029
1056
|
query.collection = this.collection || null;
|
|
1030
1057
|
query.delivery = this.delivery || null;
|
|
1031
|
-
query.driverAge = this.delivery || this.collection ? this.driverAge : null;
|
|
1058
|
+
query.driverAge = this.delivery || this.collection || !this.hasNonEnterpriseCarAccess ? this.driverAge : null;
|
|
1032
1059
|
return this.helpers.removeNulls(query);
|
|
1033
1060
|
}
|
|
1034
1061
|
/**
|
|
@@ -1909,4 +1936,4 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1909
1936
|
}
|
|
1910
1937
|
CarhireEnterpriseSearch.STORAGE_SESSION_PARAMS = 'carhire_params';
|
|
1911
1938
|
CarhireEnterpriseSearch.STORAGE_SESSION_RESULTS = 'carhire_results';
|
|
1912
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyaGlyZS1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9jYXJoaXJlLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHekQsT0FBTyxFQUFjLEVBQUUsRUFBbUIsYUFBYSxFQUFFLEVBQUUsSUFBSSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBVXBHLE9BQU8sRUFRTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixXQUFXLEVBQ1gsYUFBYSxFQVVkLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQU1MLGFBQWEsRUFNYiw0QkFBNEIsRUFFNUIsZUFBZSxFQUNmLGNBQWMsRUFDZixNQUFNLGdCQUFnQixDQUFDO0FBV3hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBV3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxNQUFNLENBQU4sSUFBWSxZQU9YO0FBUEQsV0FBWSxZQUFZO0lBQ3RCLHFDQUFxQixDQUFBO0lBQ3JCLCtCQUFlLENBQUE7SUFDZiw2QkFBYSxDQUFBO0lBQ2IsdUNBQXVCLENBQUE7SUFDdkIsdUNBQXVCLENBQUE7SUFDdkIsb0RBQW9DLENBQUE7QUFDdEMsQ0FBQyxFQVBXLFlBQVksS0FBWixZQUFZLFFBT3ZCO0FBRUQsTUFBTSxPQUFPLHVCQUlYLFNBQVEsb0JBQXlGO0lBOHBCakcsaUNBQWlDO0lBRWpDLFlBQ1UsY0FBNkMsRUFDN0MsZ0NBQThFLEVBQ3RGLE9BQTJC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T0FBTyxhQUFhLENBQUM7U0FDdEI7YUFBTTtZQUNMLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxhQUFhLENBQUMsSUFBSSxFQUFFO2dCQUM1QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2dCQUM3QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQzthQUM3QjtZQUNELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxhQUFhLENBQUMsUUFBUSxFQUFFO2dCQUNoRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7YUFDNUI7WUFDRCxPQUFPLEVBQUUsQ0FBQztTQUNYO0lBQ0gsQ0FBQzs7QUFscEVlLDhDQUFzQixHQUFHLGdCQUFnQixDQUFDO0FBQzFDLCtDQUF1QixHQUFHLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG9mIGFzIG9ic2VydmFibGVPZiwgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENhckhpcmVTb3J0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYXItaGlyZS1zb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBDYXJIaXJlRmlsdGVycyB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2FyLWhpcmUtZmlsdGVycy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2VsZWN0RmlsdGVyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWxlY3QtZmlsdGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBWYWx1ZURpc3BsYXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZhbHVlLWRpc3BsYXknO1xuaW1wb3J0IHsgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzZWFyY2guc2VydmljZSc7XG5pbXBvcnQge1xuICBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcbiAgSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2Vcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XG5pbXBvcnQge1xuICBDYXJIaXJlRGV0YWlsUmVxdWVzdFJlc3BvbnNlLFxuICBDdXJyZW5jeUNvZGUsXG4gIEJhc2tldEl0ZW0sXG4gIENhckhpcmVJbnB1dElkZW50aWZpZXJzLFxuICBDYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eSxcbiAgUXVlcnlTZWFyY2hDYXJIaXJlQXJncyxcbiAgU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMsXG4gIFNlcnZpY2VUeXBlLFxuICBDYXJIaXJlVHJhbnNtaXNzaW9uLFxuICBDYXJIaXJlQ2xhc3MsXG4gIENhckhpcmVUeXBlLFxuICBEaXN0YW5jZVR5cGVzLFxuICBTZWFyY2hDYXJIaXJlUXVlcnlWYXJpYWJsZXMsXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcbiAgQ2FySGlyZUFpcnBvcnRJbnB1dCxcbiAgQ2FySGlyZUFkZHJlc3MsXG4gIENhckhpcmVMb2NhdGlvbklucHV0LFxuICBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMsXG4gIFNlYXJjaEhvdGVsc1F1ZXJ5VmFyaWFibGVzLFxuICBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyxcbiAgTG9jYXRpb25Db2Rlc1xufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcbmltcG9ydCB7XG4gIENhckhpcmVRdW90ZVJlc3VsdCxcbiAgQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXksXG4gIE5nYkRhdGVTdHJ1Y3QsXG4gIE9CVEFpcnBvcnREZXRhaWxzLFxuICBWZW5kb3IsXG4gIExvY2F0aW9uVHlwZXMsXG4gIExvY2F0aW9uRGV0YWlscyxcbiAgQ2FySGlyZURlcG90LFxuICBSZWNlbnRTZWFyY2gsXG4gIFdpdGhpbkRpc3RhbmNlLFxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0LFxuICBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLFxuICBDb3VudHJ5LFxuICBTZXJ2aWNlUHJvdmlkZXIsXG4gIFRyYXZlbFBvbGljaWVzXG59IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcbmltcG9ydCB7IEJhc2VDYXJoaXJlUXVvdGVGZXRjaGVyLCBDYXJIaXJlRmV0Y2hlclR5cGUgfSBmcm9tICcuLi9mZXRjaGVycy9jYXJoaXJlLXF1b3RlLWZldGNoZXInO1xuaW1wb3J0IHtcbiAgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXG4gIENhckhpcmVUZW1wUGFyYW1zXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWNhcmhpcmUtZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlJztcbmltcG9ydCB7XG4gIEJhc2VDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcixcbiAgQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2NhcmhpcmUtYXZhaWxhYmlsaXR5LWRldGFpbC5mZXRjaGVyJztcbmltcG9ydCB7IHRha2UsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSUNhckNsYXNzZXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Nhci1oaXJlLWNsYXNzZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcbmltcG9ydCB7XG4gIENhckhpcmVTZWFyY2hBcmdzLFxuICBJQ2FySGlyZUNpdHksXG4gIElDYXJIaXJlRGVwb3Rcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYXItaGlyZS1zZWFyY2gtYXJnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBVc2VyU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgVHBvcnRJZGVudGlmaWVycyB9IGZyb20gJy4uL2ludGVyZmFjZXMvdHBvcnRJZGVudGlmaWVycy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVXNlckZhdm9ydXJpdGUgfSBmcm9tICcuL3VzZXItZmF2b3VyaXRlLmVudW0nO1xuXG5leHBvcnQgZW51bSBTb3J0VHlwZXNDYXIge1xuICBjaGVhcGVzdCA9ICdjaGVhcGVzdCcsXG4gIGNoYWluID0gJ2NoYWluJyxcbiAgc2l6ZSA9ICdzaXplJyxcbiAgcHJlZmVycmVkID0gJ3ByZWZlcnJlZCcsXG4gIGV4cGVuc2l2ZSA9ICdleHBlbnNpdmUnLFxuICBsb3dlc3RFbWlzc2lvbnMgPSBcImxvd2VzdCBlbWlzc2lvbnNcIlxufVxuXG5leHBvcnQgY2xhc3MgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2g8XG4gICAgQ0hfUSBleHRlbmRzIENhckhpcmVGZXRjaGVyVHlwZSxcbiAgICBDSEFEX1EgZXh0ZW5kcyBDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlclR5cGVcbiAgPlxuICBleHRlbmRzIEJhc2VFbnRlcnByaXNlU2VhcmNoPENhckhpcmVUZW1wUGFyYW1zLCBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSwgQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXk+XG4gIGltcGxlbWVudHMgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2VcbntcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnY2FyaGlyZV9wYXJhbXMnO1xuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAnY2FyaGlyZV9yZXN1bHRzJztcblxuICAvLyAhIC0gSGFyZGNvZGVkIERhdGFcbiAgcHJpdmF0ZSBfY2FyVHlwZUNvZGVzOiBbc3RyaW5nLCBzdHJpbmcsIENhckhpcmVUeXBlXVtdID0gW1xuICAgIFsnQicsICcyLTMgRG9vcicsIENhckhpcmVUeXBlLlR3b1RvVGhyZWVEb29yXSxcbiAgICBbJ0MnLCAnMi80IERvb3InLCBDYXJIaXJlVHlwZS5Ud29PckZvdXJEb29yXSxcbiAgICBbJ0QnLCAnNC01IERvb3InLCBDYXJIaXJlVHlwZS5Gb3VyVG9GaXZlRG9vcl0sXG4gICAgWydXJywgJ1dhZ29uIC8gRXN0YXRlJywgQ2FySGlyZVR5cGUuV2Fnb25PckVzdGF0ZV0sXG4gICAgWydWJywgJ1Bhc3NlbmdlciBWYW4nLCBDYXJIaXJlVHlwZS5QYXNzZW5nZXJWYW5dLFxuICAgIFsnTCcsICdMaW1vdXNpbmUnLCBDYXJIaXJlVHlwZS5MaW1vdXNpbmVdLFxuICAgIFsnUycsICdTcG9ydCcsIENhckhpcmVUeXBlLlNwb3J0XSxcbiAgICBbJ1QnLCAnQ29udmVydGlibGUnLCBDYXJIaXJlVHlwZS5Db252ZXJ0aWJsZV0sXG4gICAgWydGJywgJ1NVVicsIENhckhpcmVUeXBlLlN1dl0sXG4gICAgWydKJywgJ09wZW4gQWlyIEFsbCBUZXJyYWluJywgQ2FySGlyZVR5cGUuT3BlbkFpckFsbFRlcnJhaW5dLFxuICAgIFsnWCcsICdTcGVjaWFsJywgQ2FySGlyZVR5cGUuU3BlY2lhbF0sXG4gICAgWydQJywgJ1BpY2t1cCBSZWd1bGFyIENhYicsIENhckhpcmVUeXBlLlBpY2tVcFJlZ3VsYXJDYWJdLFxuICAgIFsnUScsICdQaWNrdXAgRXh0ZW5kZWQgQ2FiJywgQ2FySGlyZVR5cGUuUGlja1VwRXh0ZW5kZWRDYWJdLFxuICAgIFsnWicsICdTcGVjaWFsIE9mZmVyIENhcicsIENhckhpcmVUeXBlLlNwZWNpYWxPZmZlckNhcl0sXG4gICAgWydFJywgJ0NvdXBlJywgQ2FySGlyZVR5cGUuQ291cGVdLFxuICAgIFsnTScsICdNb25vc3BhY2UgKEV1cm9wZSknLCBDYXJIaXJlVHlwZS5Nb25vc3BhY2VFdXJvcGVhblVzZV0sXG4gICAgWydSJywgJ1JlY3JlYXRpb25hbCBWZWhpY2xlJywgQ2FySGlyZVR5cGUuUmVjcmVhdGlvbmFsVmVoaWNsZV0sXG4gICAgWydIJywgJ01vdG9yIEhvbWUnLCBDYXJIaXJlVHlwZS5Nb3RvckhvbWVdLFxuICAgIFsnWScsICcyLVdoZWVsIFZlaGljbGUnLCBDYXJIaXJlVHlwZS5Ud29XaGVlbFZlaGljbGVdLFxuICAgIFsnTicsICdSb2Fkc3RlcicsIENhckhpcmVUeXBlLlJvYWRzdGVyXSxcbiAgICBbJ0cnLCAnQ3Jvc3NvdmVyJywgQ2FySGlyZVR5cGUuQ3Jvc3NvdmVyXSxcbiAgICBbJ0snLCAnQ29tbWVyY2lhbCBWYW4gT3IgVHJ1Y2snLCBDYXJIaXJlVHlwZS5Db21tZXJjaWFsVmFuT3JUcnVja10sXG4gIF07XG5cbiAgcHJpdmF0ZSBfY2FyQWlyQ29uZGl0aW9uVHlwZXM6IFtzdHJpbmcsIHN0cmluZywgYm9vbGVhbl1bXSA9IFtcbiAgICBbJ0FueScsICdBbnknLCBudWxsXSxcbiAgICBbJ1knLCAnWWVzJywgdHJ1ZV0sXG4gICAgWydOJywgJ05vJywgZmFsc2VdXG4gIF07XG5cbiAgcHJpdmF0ZSBfd2l0aGluRGlzdGFuY2U6IFdpdGhpbkRpc3RhbmNlW10gPSBbXG4gICAgeyBuYW1lOiAnMSBtaWxlJywgdmFsdWU6ICcxJyB9LFxuICAgIHsgbmFtZTogJzIgbWlsZXMnLCB2YWx1ZTogJzInIH0sXG4gICAgeyBuYW1lOiAnNSBtaWxlcycsIHZhbHVlOiAnNScgfSxcbiAgICB7IG5hbWU6ICcxMCBtaWxlcycsIHZhbHVlOiAnMTAnIH0sXG4gICAgeyBuYW1lOiAnMjAgbWlsZXMnLCB2YWx1ZTogJzIwJyB9XG4gIF07XG5cbiAgcHJpdmF0ZSBfY2FyVHJhbnNtaXNzaW9uQ29kZXM6IFtzdHJpbmcsIHN0cmluZywgQ2FySGlyZVRyYW5zbWlzc2lvbl1bXSA9IFtcbiAgICBbJ00nLCAnTWFudWFsJywgQ2FySGlyZVRyYW5zbWlzc2lvbi5NYW51YWxdLFxuICAgIFsnTicsICdNYW51YWwgNC1XaGVlbCBEcml2ZScsIENhckhpcmVUcmFuc21pc3Npb24uTWFudWFsXSxcbiAgICBbJ0MnLCAnTWFudWFsIEFsbC1XaGVlbCBEcml2ZScsIENhckhpcmVUcmFuc21pc3Npb24uTWFudWFsXSxcbiAgICBbJ0EnLCAnQXV0b21hdGljJywgQ2FySGlyZVRyYW5zbWlzc2lvbi5BdXRvXSxcbiAgICBbJ0InLCAnQXV0b21hdGljIDQtV2hlZWwgRHJpdmUnLCBDYXJIaXJlVHJhbnNtaXNzaW9uLkF1dG9dLFxuICAgIFsnRCcsICdBdXRvbWF0aWMgQWxsLSBXaGVlbCBEcml2ZScsIENhckhpcmVUcmFuc21pc3Npb24uQXV0b11cbiAgXTtcblxuICBjYXJoaXJlQ29kZXM6IGFueTtcbiAgcHJpdmF0ZSBfdmVuZG9yczogVmVuZG9yW10gPSBbXG4gICAgeyBjb2RlOiAnLScsIG5hbWU6ICdBbnknIH0sXG4gICAgeyBjb2RlOiAnQUMnLCBuYW1lOiAnQWNlIFJlbnQgQSBDYXInIH0sXG4gICAgeyBjb2RlOiAnQUQnLCBuYW1lOiAnQWR2YW50YWdlIFJlbnQgQSBDYXInIH0sXG4gICAgeyBjb2RlOiAnQUwnLCBuYW1lOiAnQWxhbW8nIH0sXG4gICAgeyBjb2RlOiAnWkknLCBuYW1lOiAnQXZpcycgfSxcbiAgICB7IGNvZGU6ICdBVCcsIG5hbWU6ICdBdGVzYScgfSxcbiAgICB7IGNvZGU6ICdaRCcsIG5hbWU6ICdCdWRnZXQgUmVudCBBIENhcicgfSxcbiAgICB7IGNvZGU6ICdDSScsIG5hbWU6ICdDaXRlciBSZW50IEEgQ2FyJyB9LFxuICAgIHsgY29kZTogJ1pSJywgbmFtZTogJ0RvbGxhciBSZW50IEEgQ2FyJyB9LFxuICAgIHsgY29kZTogJ0RGJywgbmFtZTogJ0RyaXZpbmcgRm9yY2UnIH0sXG4gICAgeyBjb2RlOiAnRVknLCBuYW1lOiAnRWNvbm9teSBSZW50IEEgQ2FyJyB9LFxuICAgIHsgY29kZTogJ0VUJywgbmFtZTogJ0VudGVycHJpc2UnIH0sXG4gICAgeyBjb2RlOiAnRVAnLCBuYW1lOiAnRXVyb3BjYXInIH0sXG4gICAgeyBjb2RlOiAnSU0nLCBuYW1lOiAnRXVyb3BjYXIgU291dGhhZnJpY2EnIH0sXG4gICAgeyBjb2RlOiAnRVonLCBuYW1lOiAnRXogUmVudCBBIENhcicgfSxcbiAgICB7IGNvZGU6ICdGRicsIG5hbWU6ICdGaXJlZmx5JyB9LFxuICAgIHsgY29kZTogJ0ZYJywgbmFtZTogJ0ZveCBSZW50IEEgQ2FyJyB9LFxuICAgIHsgY29kZTogJ0dOJywgbmFtZTogJ0d1ZXJpbiBDYXIgUmVudGFsJyB9LFxuICAgIHsgY29kZTogJ1pFJywgbmFtZTogJ0hlcnR6JyB9LFxuICAgIHsgY29kZTogJ0xNJywgbmFtZTogJ0wgJiBNIENhciBSZW50YWwnIH0sXG4gICAgeyBjb2RlOiAnTEwnLCBuYW1lOiAnTG9jYWxpemEnIH0sXG4gICAgeyBjb2RlOiAnTVcnLCBuYW1lOiAnTWlkd2F5IENhciBSZW50YWwnIH0sXG4gICAgeyBjb2RlOiAnWkwnLCBuYW1lOiAnTmF0aW9uYWwgQ2FyIFJlbnRhbCBTeXN0ZW0nIH0sXG4gICAgeyBjb2RlOiAnTkMnLCBuYW1lOiAnTmV4dGNhcicgfSxcbiAgICB7IGNvZGU6ICdOVScsIG5hbWU6ICdOdSBDYXIgUmVudGFscycgfSxcbiAgICB7IGNvZGU6ICdaQScsIG5hbWU6ICdQYXlsZXNzIENhciBSZW50YWwnIH0sXG4gICAgeyBjb2RlOiAnUFInLCBuYW1lOiAnUHJpY2VsZXNzJyB9LFxuICAgIHsgY29kZTogJ1JXJywgbmFtZTogJ1JlbnQgQSBXcmVjaycgfSxcbiAgICB7IGNvZGU6ICdTWCcsIG5hbWU6ICdTaXh0JyB9LFxuICAgIHsgY29kZTogJ1RFJywgbmFtZTogJ1RlbXBlc3QnIH0sXG4gICAgeyBjb2RlOiAnWEYnLCBuYW1lOiAnVGVzdC1TIENyb3NzIEdhbGlsZW8nIH0sXG4gICAgeyBjb2RlOiAnWEcnLCBuYW1lOiAnVGVzdC1TIENyb3NzIFRybmcnIH0sXG4gICAgeyBjb2RlOiAnWlQnLCBuYW1lOiAnVGhyaWZ0eSBDYXIgUmVudGFsJyB9LFxuICAgIHsgY29kZTogJ1BNJywgbmFtZTogJ1RyYXZlbHBvcnQgVGVzdCBDb2RlJyB9LFxuICAgIHsgY29kZTogJ1NWJywgbmFtZTogJ1UtU2F2ZSBBdXRvIFJlbnRhbCcgfSxcbiAgICB7IGNvZGU6ICdXRicsIG5hbWU6ICdXb29kZm9yZCcgfVxuICBdO1xuXG4gIHByaXZhdGUgX2Nhcl9jbGFzc2VzOiBJQ2FyQ2xhc3Nlc1tdID0gW1xuICAgIHsgY29kZTogJ00nLCBuYW1lOiAnTWluaScsIGtleTogQ2FySGlyZUNsYXNzLk1pbmksIHZhbHVlOiAnMTAnIH0sXG4gICAgeyBjb2RlOiAnTicsIG5hbWU6ICdNaW5pIEVsaXRlJywga2V5OiBDYXJIaXJlQ2xhc3MuTWluaUVsaXRlLCB2YWx1ZTogJzIwJyB9LFxuICAgIHsgY29kZTogJ0UnLCBuYW1lOiAnRWNvbm9teScsIGtleTogQ2FySGlyZUNsYXNzLkVjb25vbXksIHZhbHVlOiAnMzAnIH0sXG4gICAge1xuICAgICAgY29kZTogJ0gnLFxuICAgICAgbmFtZTogJ0Vjb25vbXkgRWxpdGUnLFxuICAgICAga2V5OiBDYXJIaXJlQ2xhc3MuRWNvbm9teUVsaXRlLFxuICAgICAgdmFsdWU6ICc0MCdcbiAgICB9LFxuICAgIHsgY29kZTogJ0MnLCBuYW1lOiAnQ29tcGFjdCcsIGtleTogQ2FySGlyZUNsYXNzLkNvbXBhY3QsIHZhbHVlOiAnNTAnIH0sXG4gICAge1xuICAgICAgY29kZTogJ0QnLFxuICAgICAgbmFtZTogJ0NvbXBhY3QgRWxpdGUnLFxuICAgICAga2V5OiBDYXJIaXJlQ2xhc3MuQ29tcGFjdEVsaXRlLFxuICAgICAgdmFsdWU6ICc2MCdcbiAgICB9LFxuICAgIHtcbiAgICAgIGNvZGU6ICdJJyxcbiAgICAgIG5hbWU6ICdJbnRlcm1lZGlhdGUnLFxuICAgICAga2V5OiBDYXJIaXJlQ2xhc3MuSW50ZXJtZWRpYXRlLFxuICAgICAgdmFsdWU6ICc3MCdcbiAgICB9LFxuICAgIHtcbiAgICAgIGNvZGU6ICdKJyxcbiAgICAgIG5hbWU6ICdJbnRlcm1lZGlhdGUgRWxpdGUnLFxuICAgICAga2V5OiBDYXJIaXJlQ2xhc3MuSW50ZXJtZWRpYXRlRWxpdGUsXG4gICAgICB2YWx1ZTogJzgwJ1xuICAgIH0sXG4gICAgeyBjb2RlOiAnUycsIG5hbWU6ICdTdGFuZGFyZCcsIGtleTogQ2FySGlyZUNsYXNzLlN0YW5kYXJkLCB2YWx1ZTogJzkwJyB9LFxuICAgIHtcbiAgICAgIGNvZGU6ICdSJyxcbiAgICAgIG5hbWU6ICdTdGFuZGFyZCBFbGl0ZScsXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5TdGFuZGFyZEVsaXRlLFxuICAgICAgdmFsdWU6ICcxMDAnXG4gICAgfSxcbiAgICB7IGNvZGU6ICdGJywgbmFtZTogJ0Z1bGwgU2l6ZScsIGtleTogQ2FySGlyZUNsYXNzLkZ1bGxzaXplLCB2YWx1ZTogJzExMCcgfSxcbiAgICB7XG4gICAgICBjb2RlOiAnRycsXG4gICAgICBuYW1lOiAnRnVsbCBTaXplIEVsaXRlJyxcbiAgICAgIGtleTogQ2FySGlyZUNsYXNzLkZ1bGxzaXplRWxpdGUsXG4gICAgICB2YWx1ZTogJzEyMCdcbiAgICB9LFxuICAgIHsgY29kZTogJ1AnLCBuYW1lOiAnUHJlbWl1bScsIGtleTogQ2FySGlyZUNsYXNzLlByZW1pdW0sIHZhbHVlOiAnMTMwJyB9LFxuICAgIHtcbiAgICAgIGNvZGU6ICdVJyxcbiAgICAgIG5hbWU6ICdQcmVtaXVtIEVsaXRlJyxcbiAgICAgIGtleTogQ2FySGlyZUNsYXNzLlByZW1pdW1FbGl0ZSxcbiAgICAgIHZhbHVlOiAnMTQwJ1xuICAgIH0sXG4gICAgeyBjb2RlOiAnTCcsIG5hbWU6ICdMdXh1cnknLCBrZXk6IENhckhpcmVDbGFzcy5MdXh1cnksIHZhbHVlOiAnMTUwJyB9LFxuICAgIHtcbiAgICAgIGNvZGU6ICdXJyxcbiAgICAgIG5hbWU6ICdMdXh1cnkgRWxpdGUnLFxuICAgICAga2V5OiBDYXJIaXJlQ2xhc3MuTHV4dXJ5RWxpdGUsXG4gICAgICB2YWx1ZTogJzE2MCdcbiAgICB9LFxuICAgIHsgY29kZTogJ08nLCBuYW1lOiAnT3ZlcnNpemUnLCBrZXk6IENhckhpcmVDbGFzcy5PdmVyc2l6ZSwgdmFsdWU6ICcxNzAnIH0sXG4gICAgeyBjb2RlOiAnWCcsIG5hbWU6ICdTcGVjaWFsJywga2V5OiBDYXJIaXJlQ2xhc3MuU3BlY2lhbCwgdmFsdWU6ICcxODAnIH1cbiAgXTtcblxuICBwcml2YXRlIF9sb2NhdGlvbl90eXBlcyA9IFtMb2NhdGlvblR5cGVzLkNpdHksIExvY2F0aW9uVHlwZXMuQWlycG9ydCwgTG9jYXRpb25UeXBlcy5Qb3N0Y29kZV07XG5cbiAgcHJpdmF0ZSBjYXJDbGFzc01hcDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHtcbiAgICBtaW5pOiAwLFxuICAgICdtaW5pIGVsaXRlJzogMSxcbiAgICBlY29ub215OiAyLFxuICAgICdlY29ub215IGVsaXRlJzogMyxcbiAgICBjb21wYWN0OiA0LFxuICAgICdjb21wYWN0IHNwZWNpYWwnOiA1LFxuICAgICdjb21wYWN0IGVsaXRlJzogNixcbiAgICBpbnRlcm1lZGlhdGU6IDcsXG4gICAgJ2ludGVybWVkaWF0ZSBlbGl0ZSc6IDgsXG4gICAgc3RhbmRhcmQ6IDksXG4gICAgJ3N0YW5kYXJkIGVsaXRlJzogMTAsXG4gICAgJ2Z1bGxzaXplJzogMTEsXG4gICAgJ2Z1bGwgc2l6ZSc6IDExLFxuICAgICdmdWxsIHNpemUgZWxpdGUnOiAxMixcbiAgICBwcmVtaXVtOiAxMyxcbiAgICAncHJlbWl1bSBlbGl0ZSc6IDE0LFxuICAgIGx1eHVyeTogMTUsXG4gICAgJ2x1eHVyeSBlbGl0ZSc6IDE2LFxuICAgIG92ZXJzaXplOiAxNyxcbiAgICBzcGVjaWFsOiAxOCxcbiAgICB1bnJlY29nbml6ZWQ6IDEwMFxuICB9O1xuICAvLyAhIC0gRW5kIG9mIGhhcmRjb2RlZCBkYXRhXG5cbiAgcHVibGljIHR5cGU6IFNlcnZpY2VUeXBlID0gU2VydmljZVR5cGUuQ2FyO1xuXG4gIHByaXZhdGUgX25nYlBpY2t1cERhdGU6IE5nYkRhdGVTdHJ1Y3Q7XG4gIHByaXZhdGUgX3BpY2t1cFRpbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfbmdiRHJvcG9mZkRhdGU6IE5nYkRhdGVTdHJ1Y3Q7XG4gIHByaXZhdGUgX2Ryb3BvZmZUaW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX3NvcnRpbmdfb3B0aW9uczogQ2FySGlyZVNvcnRbXSA9IFtcbiAgICB7XG4gICAgICB2YWx1ZTogMCxcbiAgICAgIGRpc3BsYXk6ICdDaGVhcGVzdCBGaXJzdCdcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgZGlzcGxheTogJ01vc3QgRXhwZW5zaXZlIEZpcnN0J1xuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6IDIsXG4gICAgICBkaXNwbGF5OiAnUHJlZmVycmVkIEZpcnN0J1xuICAgIH1cbiAgXTtcbiAgcHJpdmF0ZSBfbWluRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKSxcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpXG4gIH07XG5cbiAgcHJpdmF0ZSBfbWluSW5EYXRlOiBOZ2JEYXRlU3RydWN0ID0ge1xuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpLFxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKClcbiAgfTtcblxuICBwcml2YXRlIF9jb2xsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2RlbGl2ZXJ5OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2RyaXZlckFnZTogbnVtYmVyO1xuICB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXTtcbiAgZHJpdmVyQWdlczoge25hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlcn1bXSA9IHRoaXMuaGVscGVycy5nZXRBZ2VzQXJyYXkoMjUsIDEwMCk7XG5cblxuICBnZXQgYWR1bHRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hZHVsdHM7XG4gIH1cblxuICBzZXQgYWR1bHRzKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGNoaWxkcmVuKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbjtcbiAgfVxuXG4gIHNldCBjaGlsZHJlbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGVzdGltYXRlZE1pbGVhZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmVzdGltYXRlZE1pbGVhZ2U7XG4gIH1cblxuICBzZXQgZXN0aW1hdGVkTWlsZWFnZShtaWxhZ2U6IG51bWJlcikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5lc3RpbWF0ZWRNaWxlYWdlID0gbWlsYWdlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBwaWNrdXBUaW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BpY2t1cFRpbWU7XG4gIH1cblxuICBzZXQgcGlja3VwVGltZShuZXd0aW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9waWNrdXBUaW1lID0gbmV3dGltZTtcbiAgICB0aGlzLl91cGRhdGVOZ2JQaWNrdXBEYXRlVGltZSgpO1xuICB9XG5cbiAgZ2V0IGRyb3BvZmZUaW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Ryb3BvZmZUaW1lO1xuICB9XG5cbiAgc2V0IGRyb3BvZmZUaW1lKG5ld3RpbWU6IHN0cmluZykge1xuICAgIHRoaXMuX2Ryb3BvZmZUaW1lID0gbmV3dGltZTtcbiAgICB0aGlzLl91cGRhdGVOZ2JEcm9wb2ZmRGF0ZVRpbWUoKTtcbiAgfVxuXG4gIGdldCBwb3N0Y29kZVBpY2t1cFJhdygpOiBMb2NhdGlvbkRldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucG9zdGNvZGVQaWNrdXBSYXc7XG4gIH1cblxuICBzZXQgcG9zdGNvZGVQaWNrdXBSYXcobmV3UGlja3VwQ291bnRyeTogTG9jYXRpb25EZXRhaWxzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnBvc3Rjb2RlUGlja3VwUmF3ID0gbmV3UGlja3VwQ291bnRyeTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgcG9zdGNvZGVEcm9wb2ZmUmF3KCk6IExvY2F0aW9uRGV0YWlscyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZURyb3BvZmZSYXc7XG4gIH1cblxuICBzZXQgcG9zdGNvZGVEcm9wb2ZmUmF3KG5ld1BpY2t1cENvdW50cnk6IExvY2F0aW9uRGV0YWlscykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZURyb3BvZmZSYXcgPSBuZXdQaWNrdXBDb3VudHJ5O1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjaXR5UGlja3VwRGVwb3QoKTogQ2FySGlyZURlcG90IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNpdHlQaWNrdXBEZXBvdDtcbiAgfVxuXG4gIHNldCBjaXR5UGlja3VwRGVwb3QobmV3UGlja3VwQ291bnRyeTogQ2FySGlyZURlcG90KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmNpdHlQaWNrdXBEZXBvdCA9IG5ld1BpY2t1cENvdW50cnk7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGNpdHlEcm9wb2ZmRGVwb3QoKTogQ2FySGlyZURlcG90IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNpdHlEcm9wb2ZmRGVwb3Q7XG4gIH1cblxuICBzZXQgY2l0eURyb3BvZmZEZXBvdChuZXdQb3N0Q29kZURyb3BvZmY6IENhckhpcmVEZXBvdCkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5jaXR5RHJvcG9mZkRlcG90ID0gbmV3UG9zdENvZGVEcm9wb2ZmO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBwb3N0Y29kZVBpY2t1cCgpOiBDYXJIaXJlRGVwb3Qge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucG9zdGNvZGVQaWNrdXA7XG4gIH1cblxuICBzZXQgcG9zdGNvZGVQaWNrdXAobmV3UGlja3VwQ291bnRyeTogQ2FySGlyZURlcG90KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnBvc3Rjb2RlUGlja3VwID0gbmV3UGlja3VwQ291bnRyeTtcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLnBvc3Rjb2RlUGlja3VwKSB7XG4gICAgICB0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25UeXBlID0gTG9jYXRpb25UeXBlcy5Qb3N0Y29kZTtcbiAgICB9XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IHBvc3Rjb2RlRHJvcG9mZigpOiBDYXJIaXJlRGVwb3Qge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucG9zdGNvZGVEcm9wb2ZmO1xuICB9XG5cbiAgc2V0IHBvc3Rjb2RlRHJvcG9mZihuZXdQb3N0Q29kZURyb3BvZmY6IENhckhpcmVEZXBvdCkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZURyb3BvZmYgPSBuZXdQb3N0Q29kZURyb3BvZmY7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGNpdHlQaWNrdXAoKTogTG9jYXRpb25EZXRhaWxzIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNpdHlQaWNrdXA7XG4gIH1cblxuICBzZXQgY2l0eVBpY2t1cChuZXdQaWNrdXA6IExvY2F0aW9uRGV0YWlscykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5jaXR5UGlja3VwID0gbmV3UGlja3VwO1xuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMuY2l0eVBpY2t1cCkge1xuICAgICAgdGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uVHlwZSA9IExvY2F0aW9uVHlwZXMuQ2l0eTtcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvblR5cGUpO1xuICAgIH1cblxuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjaXR5RHJvcG9mZigpOiBMb2NhdGlvbkRldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2l0eURyb3BvZmY7XG4gIH1cblxuICBzZXQgY2l0eURyb3BvZmYobmV3RHJvcG9mZjogTG9jYXRpb25EZXRhaWxzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmNpdHlEcm9wb2ZmID0gbmV3RHJvcG9mZjtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgbWluRGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcbiAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcbiAgfVxuXG4gIGdldCBtaW5JbkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX21pbkluRGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3RpbWVBcnJheTogVmFsdWVEaXNwbGF5PHN0cmluZz5bXTtcbiAgLy8gLSBHZXR0ZXJzIEFuZCBTZXR0ZXJzIEZvciBWYXJpb3VzIFZhcmlhYmxlc1xuICBnZXQgcGlja3VwX2NvdW50cnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnBpY2t1cF9jb3VudHJ5O1xuICB9XG5cbiAgc2V0IHBpY2t1cF9jb3VudHJ5KG5ld1BpY2t1cENvdW50cnk6IHN0cmluZykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5waWNrdXBfY291bnRyeSA9IG5ld1BpY2t1cENvdW50cnk7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGRyb3BvZmZfY291bnRyeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9jb3VudHJ5O1xuICB9XG5cbiAgc2V0IGRyb3BvZmZfY291bnRyeShuZXdEcm9wb2ZmQ291bnRyeTogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmRyb3BvZmZfY291bnRyeSA9IG5ld0Ryb3BvZmZDb3VudHJ5O1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBwaWNrdXBfbG9jYXRpb24oKTogT0JUQWlycG9ydERldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucGlja3VwX2xvY2F0aW9uO1xuICB9XG5cbiAgc2V0IHBpY2t1cF9sb2NhdGlvbihwaWNrdXBMb2NhdGlvbjogT0JUQWlycG9ydERldGFpbHMpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMucGlja3VwX2xvY2F0aW9uID0gcGlja3VwTG9jYXRpb247XG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcy5waWNrdXBfbG9jYXRpb24pIHtcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvblR5cGUgPSBMb2NhdGlvblR5cGVzLkFpcnBvcnQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmV0dXJuX3RvX3BpY2t1cCkge1xuICAgICAgdGhpcy5kcm9wb2ZmX2xvY2F0aW9uID0gcGlja3VwTG9jYXRpb247XG4gICAgfVxuXG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGRyb3BvZmZfbG9jYXRpb24oKTogT0JUQWlycG9ydERldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9sb2NhdGlvbjtcbiAgfVxuXG4gIHNldCBkcm9wb2ZmX2xvY2F0aW9uKGRyb3BPZmZMb2NhdGlvbjogT0JUQWlycG9ydERldGFpbHMpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9sb2NhdGlvbiA9IGRyb3BPZmZMb2NhdGlvbjtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBzZXQgbmdiUGlja3VwRGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xuICAgIHRoaXMuX25nYlBpY2t1cERhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLl91cGRhdGVOZ2JQaWNrdXBEYXRlVGltZSgpO1xuICB9XG5cbiAgZ2V0IG5nYlBpY2t1cERhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX25nYlBpY2t1cERhdGU7XG4gIH1cblxuICBzZXQgbmdiRHJvcG9mZkRhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcbiAgICB0aGlzLl9uZ2JEcm9wb2ZmRGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuX3VwZGF0ZU5nYkRyb3BvZmZEYXRlVGltZSgpO1xuICB9XG5cbiAgZ2V0IG5nYkRyb3BvZmZEYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIHJldHVybiB0aGlzLl9uZ2JEcm9wb2ZmRGF0ZTtcbiAgfVxuXG4gIC8vIERhdGV0aW1lcyB3aXRoaW4gdGhlIHF1ZXJ5IGl0c2VsZlxuICBnZXQgcGlja3VwX2RhdGV0aW1lKCk6IG1vbWVudC5Nb21lbnQge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucGlja3VwX2RhdGV0aW1lO1xuICB9XG5cbiAgc2V0IHBpY2t1cF9kYXRldGltZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5waWNrdXBfZGF0ZXRpbWUgPSB2YWx1ZTtcbiAgICB0cnkge1xuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmlzVmFsaWQoKSkge1xuICAgICAgICB0aGlzLl9uZ2JQaWNrdXBEYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fcGlja3VwVGltZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdISDptbScpID8gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ0hIOm1tJykgOiAnMDc6MzAnO1xuICAgICAgfVxuICAgICAgdGhpcy5fbWluSW5EYXRlID0ge1xuICAgICAgICBkYXk6IHZhbHVlLmRhdGUoKSxcbiAgICAgICAgbW9udGg6IHZhbHVlLm1vbnRoKCkgKyAxLFxuICAgICAgICB5ZWFyOiB2YWx1ZS55ZWFyKClcbiAgICAgIH07XG5cbiAgICAgIGlmICh2YWx1ZS5pc1NhbWVPckFmdGVyKHRoaXMudGVtcFBhcmFtcy5kcm9wb2ZmX2RhdGV0aW1lKSkge1xuICAgICAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWUgPSBtb21lbnQodmFsdWUpLmFkZCgxLCAnZGF5Jyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG5cbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgZHJvcG9mZl9kYXRldGltZSgpOiBtb21lbnQuTW9tZW50IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmRyb3BvZmZfZGF0ZXRpbWU7XG4gIH1cblxuICBzZXQgZHJvcG9mZl9kYXRldGltZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5kcm9wb2ZmX2RhdGV0aW1lID0gdmFsdWU7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLmlzVmFsaWQoKSkge1xuICAgICAgdGhpcy5fbmdiRHJvcG9mZkRhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xuICAgICAgdGhpcy5fZHJvcG9mZlRpbWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdCgnSEg6bW0nKSA/IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdISDptbScpIDogJzA3OjMwJztcbiAgICB9XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgLy8gIWRhdGUgYW5kIHRpbWUgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSBmb3IgTFVcbiAgcHJpdmF0ZSBfcGlja3VwX2RhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xuXG4gIGdldCBwaWNrdXBfZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcbiAgICByZXR1cm4gdGhpcy5fcGlja3VwX2RhdGU7XG4gIH1cblxuICBzZXQgcGlja3VwX2RhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcbiAgICB0aGlzLl9waWNrdXBfZGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2t1cERhdGVUaW1lKCk7XG4gIH1cblxuICBwcml2YXRlIF9waWNrdXBfdGltZTogc3RyaW5nID0gbnVsbDtcbiAgZ2V0IHBpY2t1cF90aW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BpY2t1cF90aW1lO1xuICB9XG5cbiAgc2V0IHBpY2t1cF90aW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9waWNrdXBfdGltZSA9IHZhbHVlO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2t1cERhdGVUaW1lKCk7XG4gIH1cblxuICBwcml2YXRlIF9kcm9wb2ZmX2RhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xuXG4gIGdldCBkcm9wb2ZmX2RhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX2Ryb3BvZmZfZGF0ZTtcbiAgfVxuXG4gIHNldCBkcm9wb2ZmX2RhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcbiAgICB0aGlzLl9kcm9wb2ZmX2RhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLl91cGRhdGVEcm9wb2ZmRGF0ZVRpbWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Ryb3BvZmZfdGltZTogc3RyaW5nID0gbnVsbDtcbiAgZ2V0IGRyb3BvZmZfdGltZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kcm9wb2ZmX3RpbWU7XG4gIH1cblxuICBzZXQgZHJvcG9mZl90aW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9kcm9wb2ZmX3RpbWUgPSB2YWx1ZTtcbiAgICB0aGlzLl91cGRhdGVEcm9wb2ZmRGF0ZVRpbWUoKTtcbiAgfVxuXG4gIGdldCByZXR1cm5fdG9fcGlja3VwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucmV0dXJuX3RvX3BpY2t1cDtcbiAgfVxuXG4gIHNldCByZXR1cm5fdG9fcGlja3VwKG5ld1ZhbDogYm9vbGVhbikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5fdG9fcGlja3VwID0gbmV3VmFsO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjaG9zZW5WZW5kb3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblZlbmRvcjtcbiAgfVxuXG4gIHNldCBjaG9zZW5WZW5kb3IobmV3VmVuZG9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuVmVuZG9yID0gbmV3VmVuZG9yO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjaG9zZW5EaXN0YW5jZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuRGlzdGFuY2U7XG4gIH1cblxuICBzZXQgY2hvc2VuRGlzdGFuY2UobmV3Q2hvc2VuRGlzdGFuY2U6IHN0cmluZykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5EaXN0YW5jZSA9IG5ld0Nob3NlbkRpc3RhbmNlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjYXJDbGFzcygpOiBDYXJIaXJlQ2xhc3Mge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2FyQ2xhc3M7XG4gIH1cblxuICBzZXQgY2FyQ2xhc3MoY2FyQ2xhc3M6IENhckhpcmVDbGFzcykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5jYXJDbGFzcyA9IGNhckNsYXNzO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjYXJUeXBlKCk6IENhckhpcmVUeXBlIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNhclR5cGU7XG4gIH1cblxuICBzZXQgY2FyVHlwZSh0eXBlOiBDYXJIaXJlVHlwZSkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5jYXJUeXBlID0gdHlwZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgdHJhbnNtaXNzaW9uKCk6IENhckhpcmVUcmFuc21pc3Npb24ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudHJhbnNtaXNzaW9uO1xuICB9XG5cbiAgc2V0IHRyYW5zbWlzc2lvbih0cmFuczogQ2FySGlyZVRyYW5zbWlzc2lvbikge1xuICAgIHRoaXMudGVtcFBhcmFtcy50cmFuc21pc3Npb24gPSB0cmFucztcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgYWlyQ29uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWlyQ29uO1xuICB9XG5cbiAgc2V0IGFpckNvbihuZXdDb246IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWlyQ29uID0gbmV3Q29uO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBsb2NhdGlvblR5cGUoKTogTG9jYXRpb25UeXBlcyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvblR5cGU7XG4gIH1cbiAgc2V0IGxvY2F0aW9uVHlwZSh2YWx1ZTogTG9jYXRpb25UeXBlcykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvblR5cGUgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRpbWVBcnJheSgpIHtcbiAgICB0aGlzLl90aW1lQXJyYXkgPVxuICAgICAgdGhpcy5fdGltZUFycmF5IHx8XG4gICAgICBBcnJheSg5NilcbiAgICAgICAgLmZpbGwoMClcbiAgICAgICAgLm1hcCgoXywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDQpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXG4gICAgICAgICAgICAgICc6JyArXG4gICAgICAgICAgICAgICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXG4gICAgICAgICAgICBkaXNwbGF5OlxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gNClcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcbiAgICAgICAgICAgICAgJzonICtcbiAgICAgICAgICAgICAgKChpbmRleCAlIDQpICogMTUpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl90aW1lQXJyYXk7XG4gIH1cblxuICAvLyAhIC0gVGhlIGJlbG93IHZhbHVlcyBoYXZlIGdldHRlcnMgb25seSAoSS5FIENhbm5vdCBtb2RpZnkpXG5cbiAgZ2V0IGNhckFpckNvbmRpdGlvblR5cGVzKCk6IFtzdHJpbmcsIHN0cmluZywgYm9vbGVhbl1bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhckFpckNvbmRpdGlvblR5cGVzO1xuICB9XG5cbiAgZ2V0IHdpdGhpbkRpc3RhbmNlKCk6IFdpdGhpbkRpc3RhbmNlW10ge1xuICAgIHJldHVybiB0aGlzLl93aXRoaW5EaXN0YW5jZTtcbiAgfVxuXG4gIGdldCBjYXJUcmFuc21pc3Npb25Db2RlcygpOiBbc3RyaW5nLCBzdHJpbmcsIENhckhpcmVUcmFuc21pc3Npb25dW10ge1xuICAgIHJldHVybiB0aGlzLl9jYXJUcmFuc21pc3Npb25Db2RlcztcbiAgfVxuXG4gIGdldCBjYXJUeXBlQ29kZXMoKTogW3N0cmluZywgc3RyaW5nLCBDYXJIaXJlVHlwZV1bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhclR5cGVDb2RlcztcbiAgfVxuXG4gIGdldCB2ZW5kb3JzKCk6IFZlbmRvcltdIHtcbiAgICByZXR1cm4gdGhpcy5fdmVuZG9ycztcbiAgfVxuXG4gIGdldCBzb3J0aW5nT3B0aW9ucygpOiBDYXJIaXJlU29ydFtdIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydGluZ19vcHRpb25zO1xuICB9XG5cbiAgZ2V0IGNvbGxlY3Rpb24oKTpib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY29sbGVjdGlvbjtcbiAgfVxuXG4gIHNldCBjb2xsZWN0aW9uKHZhbHVlOmJvb2xlYW4pIHtcbiAgICB0aGlzLl9jb2xsZWN0aW9uID0gdmFsdWU7XG4gICAgdGhpcy5jaGVja0FuZFNldERyaXZlckFnZUFuZFBpY2t1cFRpbWUoKTtcbiAgfVxuXG4gIGdldCBkZWxpdmVyeSgpOmJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kZWxpdmVyeTtcbiAgfVxuXG4gIHNldCBkZWxpdmVyeSh2YWx1ZTpib29sZWFuKSB7XG4gICAgdGhpcy5fZGVsaXZlcnkgPSB2YWx1ZTtcbiAgICB0aGlzLmNoZWNrQW5kU2V0RHJpdmVyQWdlQW5kUGlja3VwVGltZSgpO1xuICB9XG5cbiAgY2hlY2tBbmRTZXREcml2ZXJBZ2VBbmRQaWNrdXBUaW1lKCkge1xuICAgIGlmICh0aGlzLl9kZWxpdmVyeSB8fCB0aGlzLl9jb2xsZWN0aW9uKSB7XG4gICAgICBjb25zdCBtaW5EYXRlID0gbW9tZW50KHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXModGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKCksIDMwKSkuYWRkKDI0LCAnaG91cnMnKTtcbiAgICAgIHRoaXMuX21pbkRhdGUgPSB7XG4gICAgICAgIGRheTogbWluRGF0ZS5kYXRlKCksXG4gICAgICAgIG1vbnRoOiBtaW5EYXRlLm1vbnRoKCkgKyAxLFxuICAgICAgICB5ZWFyOiBtaW5EYXRlLnllYXIoKVxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLnBpY2t1cF9kYXRldGltZT8uaXNCZWZvcmUobWluRGF0ZSkpIHtcbiAgICAgICAgdGhpcy5waWNrdXBUaW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdFRpbWVDb2xvbihtaW5EYXRlKTtcbiAgICAgICAgdGhpcy5uZ2JQaWNrdXBEYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG1pbkRhdGUpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZHJpdmVyQWdlID0gdGhpcy5kcml2ZXJBZ2VzWzBdLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9taW5EYXRlID0ge1xuICAgICAgICBkYXk6IG1vbWVudCgpLmRhdGUoKSxcbiAgICAgICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxuICAgICAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKClcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRyaXZlckFnZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9kcml2ZXJBZ2U7XG4gIH1cblxuICBzZXQgZHJpdmVyQWdlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9kcml2ZXJBZ2UgPSArdmFsdWU7XG4gIH1cblxuICAvLyAhIC0gRW5kIG9mIGdldHRlcnMgYW5kIHNldHRlcnNcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNhcmhpcmVmZXRjaGVyOiBCYXNlQ2FyaGlyZVF1b3RlRmV0Y2hlcjxDSF9RPixcbiAgICBwcml2YXRlIGNhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyOiBCYXNlQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXI8Q0hBRF9RPixcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxuICAgIHNlYXJjaFNlcnZpY2U6IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZUludGVyZmFjZVxuICApIHtcbiAgICBzdXBlcihzdG9yYWdlU2VydmljZSwgaGVscGVycywgc2VhcmNoU2VydmljZSwgdXNlclNlcnZpY2UpO1xuICAgIGNvbnN0IGRhdGE6IHtcbiAgICAgIHRlbXBQYXJhbXM6IENhckhpcmVUZW1wUGFyYW1zO1xuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiBDYXJIaXJlVGVtcFBhcmFtcztcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oQ2FyaGlyZUVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUykgfHwge1xuICAgICAgdGVtcFBhcmFtczoge30gYXMgQ2FySGlyZVRlbXBQYXJhbXMsXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHt9IGFzIENhckhpcmVUZW1wUGFyYW1zXG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyhzZWFyY2hTZXJ2aWNlLm1ha2VDYXJIaXJlUXVlcnkoZGF0YS50ZW1wUGFyYW1zKSk7XG4gICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gZGF0YS5vcmlnaW5hbFVzZXJTZWFyY2g7XG5cbiAgICAvLyBpZiAodGhpcy51c2VyQ29uZmlnPy5jYXJoaXJlRGVmYXVsdHMpIHtcbiAgICAvLyAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyhzZWFyY2hTZXJ2aWNlLm1ha2VDYXJIaXJlUXVlcnkodGhpcy51c2VyQ29uZmlnLmNhcmhpcmVEZWZhdWx0cykpO1xuICAgIC8vIH1cblxuICAgIHVzZXJTZXJ2aWNlLmZ1bGxVc2VyRGV0YWlscy51c2VyQ29uZmlncy5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAvLyB0aGlzLnVzZXJDb25maWcubmV4dChkYXRhKTtcbiAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgaWYgKGRhdGEgJiYgZGF0YT8uY2FyaGlyZURlZmF1bHRzKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyhzZWFyY2hTZXJ2aWNlLm1ha2VDYXJIaXJlUXVlcnkoZGF0YT8uY2FyaGlyZURlZmF1bHRzPy5jb25maWcpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyB1c2VyU2VydmljZS5zdWJzY3JpYmUoZGF0YT0+e1xuICAgIC8vIHRoaXMudXBkYXRlVGVtcFBhcmFtcyhzZWFyY2hTZXJ2aWNlLm1ha2VDYXJIaXJlUXVlcnkoZGF0YS5jYXJoaXJlRGVmYXVsdHMpKTtcblxuICAgIC8vIH0pXG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcbiAgICAgIHNlYXJjaFNlcnZpY2UudHJhdmVsbGVySW5mb3JtYXRpb24uc3Vic2NyaWJlKCh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSkgPT4ge1xuICAgICAgICB0aGlzLmFkdWx0cyA9IDE7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSAwO1xuICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzPy5zbGljZSgwLCAxKSB8fCBbXTtcbiAgICAgICAgdGhpcy5faXNWYWxpZCgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0cyA9XG4gICAgICBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbUFzTGlzdDxDYXJIaXJlUXVvdGVSZXN1bHRBcnJheT4odGhpcy5yZXN1bHRzU2Vzc2lvbk5hbWUpIHx8IFtdO1xuXG4gICAgdGhpcy5mdWxsUmVzdWx0cyA9IGhlbHBlcnMuY2xvbmUocmVzdWx0cyB8fCBbXSk7XG4gICAgdGhpcy5fY2hlYXBlc3RSZXN1bHRQcmljZSA9IHRoaXMudXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0cyk7XG4gICAgdGhpcy5hdmVyYWdlQ28yUGVySXRlbSA9IHRoaXMuaGVscGVycy5jYWxjdWxhdGVBdmVyYWdlQ28yUGVySXRlbShyZXN1bHRzKTtcbiAgICB0aGlzLnJlc3VsdHMubmV4dChyZXN1bHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPSBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcbiAgcHJvdGVjdGVkIG11bHRpUmVzdWx0c1Nlc3Npb25OYW1lID0gQ2FyaGlyZUVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XG5cbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlQ2FySGlyZVF1ZXJ5KCkpO1xuICAgIHRoaXMuZXN0aW1hdGVkTWlsZWFnZSA9IG51bGw7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcbiAgICBpZiAoIXRoaXMuZG9DaGVja3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLCB7XG4gICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoXG4gICAgfSk7XG5cbiAgICAvLyBnbyBvdmVyIGFuZCBjaGVjayB0aGF0IGFsbCBvZiB0aGUgdmFyaW91cyB2YXJpYWJsZXMgYXJlIGNvcnJlY3RcblxuICAgIC8vIGZpcnN0IG9mIGFsbCBjaGVjayB0aGF0IHdlIGhhdmUgYSB2YWxpZCBsb2NhdGlvblxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XG4gICAgdGhpcy52YWxpZGF0aW9uRmF2b3VyaXRlTWVzc2FnZXMgPSBbXTtcblxuICAgIHN3aXRjaCAodGhpcy5sb2NhdGlvblR5cGUpIHtcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5BaXJwb3J0OlxuICAgICAgICBpZiAoIXRoaXMucGlja3VwX2xvY2F0aW9uIHx8ICF0aGlzLnBpY2t1cF9sb2NhdGlvbi5kZXN0aW5hdGlvbikge1xuICAgICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ1BsZWFzZSBzdXBwbHkgYSBwaWNrdXAgbG9jYXRpb24nLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5kcm9wb2ZmX2xvY2F0aW9uIHx8ICF0aGlzLmRyb3BvZmZfbG9jYXRpb24uZGVzdGluYXRpb24pIHtcbiAgICAgICAgICB0aGlzLmFkZFZhbGlkYXRpb25NZXNzYWdlKCdQbGVhc2Ugc3VwcGx5IGEgZHJvcG9mZiBsb2NhdGlvbicsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkNpdHk6XG4gICAgICAgIGlmICghdGhpcy5jaXR5UGlja3VwKSB7XG4gICAgICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnUGxlYXNlIHN1cHBseSBhIHBpY2t1cCBjaXR5JywgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuY2l0eURyb3BvZmYpIHtcbiAgICAgICAgICB0aGlzLmFkZFZhbGlkYXRpb25NZXNzYWdlKCdQbGVhc2Ugc3VwcGx5IGEgZHJvcG9mZiBjaXR5JywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuUG9zdGNvZGU6XG4gICAgICAgIGlmICghdGhpcy5wb3N0Y29kZVBpY2t1cCkge1xuICAgICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ1BsZWFzZSBzdXBwbHkgYSBwaWNrdXAgZGVwb3QnLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5wb3N0Y29kZURyb3BvZmYpIHtcbiAgICAgICAgICB0aGlzLmFkZFZhbGlkYXRpb25NZXNzYWdlKCdQbGVhc2Ugc3VwcGx5IGEgZHJvcG9mZiBkZXBvdCcsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVzdGltYXRlZE1pbGVhZ2UgJiYgdGhpcy5lc3RpbWF0ZWRNaWxlYWdlIDw9IDApIHtcbiAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ0VzdGltYXRlZCBNaWxhZ2UgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlci4nLCB0cnVlKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaWYgKCF0aGlzLnBpY2t1cF9kYXRldGltZSkge1xuICAgICAgICB0aGlzLmFkZFZhbGlkYXRpb25NZXNzYWdlKCdQbGVhc2Ugc3VwcGx5IGEgcGlja3VwIHRpbWUgYW5kIGRhdGUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmRyb3BvZmZfZGF0ZXRpbWUpIHtcbiAgICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnUGxlYXNlIHN1cHBseSBhIGRyb3Agb2ZmIHRpbWUgYW5kIGRhdGUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZHJvcG9mZl9kYXRldGltZT8uaXNTYW1lT3JCZWZvcmUodGhpcy5waWNrdXBfZGF0ZXRpbWUsICdtaW51dGUnKSkge1xuICAgICAgICB0aGlzLmFkZFZhbGlkYXRpb25NZXNzYWdlKFxuICAgICAgICAgICdEcm9wb2ZmIGRhdGUvdGltZSBjYW5ub3QgYmUgYmVmb3JlIG9yIHRoZSBzYW1lIGFzIHBpY2t1cCBkYXRlL3RpbWUnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICgodGhpcy5kZWxpdmVyeSB8fCB0aGlzLmNvbGxlY3Rpb24pICYmIHRoaXMucGlja3VwX2RhdGV0aW1lPy5pc0JlZm9yZShtb21lbnQoKS5hZGQoMjQsICdob3VycycpKSkge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxuICAgICAgICAgICdQaWNrdXAgZGF0ZS90aW1lIG11c3QgYmUgYXQgbGVhc3QgMjQgaG91cnMgZnJvbSBub3cnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnBpY2t1cF9kYXRldGltZT8uaXNCZWZvcmUobW9tZW50KCkpKSB7XG4gICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ1BpY2t1cCBkYXRlL3RpbWUgbXVzdCBiZSBhZnRlciBwcmVzZW50IGRhdGUvdGltZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5kcm9wb2ZmX2RhdGV0aW1lPy5pc0JlZm9yZShtb21lbnQoKSkpIHtcbiAgICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnRHJvcG9mZiBkYXRlL3RpbWUgbXVzdCBiZSBhZnRlciBwcmVzZW50IGRhdGUvdGltZScpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuXG4gICAgdGhpcy5pc1ZhbGlkLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAwKTtcbiAgICB0aGlzLmlzRmF2b3VyaXRlVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25GYXZvdXJpdGVNZXNzYWdlcy5sZW5ndGggPT09IDApO1xuICAgIHRoaXMubWVzc2FnZXMubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XG4gIH1cblxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xuICAgICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gT2JqZWN0LmZyZWV6ZSh0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy50ZW1wUGFyYW1zKSk7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKENhcmhpcmVFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsIHtcbiAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxuICAgICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVSZWNlbnRTZWFyY2godGhpcy5nZXRSZWNlbnRTZWFyY2hRdWVyeShxdWVyeSkpO1xuICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0U2VhcmNoKFxuICAgICAgICB0aGlzLmNhcmhpcmVmZXRjaGVyLmZldGNoTGlzdCh0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8UXVlcnlTZWFyY2hDYXJIaXJlQXJncz4ocXVlcnkpKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnbXRTZWFyY2gocXVlcnk6IFNlYXJjaENhckhpcmVRdWVyeVZhcmlhYmxlcyk6IE9ic2VydmFibGU8Q2FySGlyZVF1b3RlUmVzdWx0QXJyYXk+IHtcbiAgICByZXR1cm4gdGhpcy5jYXJoaXJlZmV0Y2hlci5mZXRjaExpc3QocXVlcnkpO1xuICB9XG5cbiAgc2VhcmNoQ2FySGlyZURlcG90c0FuZFF1b3RlcyhsYXRpdHVkZTogbnVtYmVyLCBsb25naXR1ZGU6IG51bWJlciwgcmFkaXVzOiBzdHJpbmcsIG9wdGlvbnM/OiBTZWFyY2hDYXJIaXJlUXVlcnlWYXJpYWJsZXMsIGRyb3BvZmZDYXJIaXJlRGVwb3Q/OiBDYXJIaXJlRGVwb3QpOiBPYnNlcnZhYmxlPENhckhpcmVRdW90ZVJlc3VsdEFycmF5PiB7XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5nZXRDYXJIaXJlRGVwb3RzKGxhdGl0dWRlLCBsb25naXR1ZGUsIHJhZGl1cykucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZGVwb3RzOiBDYXJIaXJlRGVwb3RbXSkgPT4ge1xuICAgICAgICBjb25zdCByZWxldmFudERlcG90cyA9IGRlcG90cy5maWx0ZXIoZGVwb3QgPT5cbiAgICAgICAgICAhZHJvcG9mZkNhckhpcmVEZXBvdCAmJiAoIW9wdGlvbnM/LnZlbmRvciB8fCBvcHRpb25zLnZlbmRvciA9PT0gZGVwb3QudmVuZG9yQ29kZSkgfHxcbiAgICAgICAgICBkcm9wb2ZmQ2FySGlyZURlcG90Py52ZW5kb3JDb2RlID09PSBkZXBvdC52ZW5kb3JDb2RlXG4gICAgICAgICk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHJlbGV2YW50RGVwb3RzKTtcbiAgICAgICAgY29uc3Qgc2VhcmNoT2JzZXJ2YWJsZXMgPSByZWxldmFudERlcG90cy5tYXAoKGRlcG90OiBDYXJIaXJlRGVwb3QpID0+IHtcbiAgICAgICAgICBjb25zdCBkcm9wb2ZmRGVwb3Q6IENhckhpcmVEZXBvdCA9IGRyb3BvZmZDYXJIaXJlRGVwb3QgfHwgZGVwb3Q7XG4gICAgICAgICAgY29uc3QgcXVlcnk6IFNlYXJjaENhckhpcmVRdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgICAgICAgIGRlcG90OiB7XG4gICAgICAgICAgICAgIGRyb3BPZmZFeHRlbmRlZExvY2F0aW9uQ29kZTogZHJvcG9mZkRlcG90LmV4dGVuZGVkTG9jYXRpb25Db2RlLFxuICAgICAgICAgICAgICBkcm9wT2ZmTG9jYXRpb25Db2RlOiBkcm9wb2ZmRGVwb3QubG9jYXRpb25Db2RlLFxuICAgICAgICAgICAgICBwaWNrdXBFeHRlbmRlZExvY2F0aW9uQ29kZTogZGVwb3QuZXh0ZW5kZWRMb2NhdGlvbkNvZGUsXG4gICAgICAgICAgICAgIHBpY2t1cExvY2F0aW9uQ29kZTogZGVwb3QubG9jYXRpb25Db2RlLFxuICAgICAgICAgICAgICB2ZW5kb3JDb2RlOiBkZXBvdC52ZW5kb3JDb2RlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWlyY29uOiBvcHRpb25zPy5haXJjb24sXG4gICAgICAgICAgICBlc3RpbWF0ZWREYWlseURpc3RhbmNlOiBvcHRpb25zPy5lc3RpbWF0ZWREYWlseURpc3RhbmNlLCBcbiAgICAgICAgICAgIHRyYW5zbWlzc2lvbjogb3B0aW9ucz8udHJhbnNtaXNzaW9uLCBcbiAgICAgICAgICAgIHR5cGU6IG9wdGlvbnM/LnR5cGUsXG4gICAgICAgICAgICB0cmF2ZWxsZXJzOiB0aGlzLnRyYXZlbGxlcnMubWFwKHRyYXZlbGxlciA9PiB7cmV0dXJuIHtpZDogdHJhdmVsbGVyLmlkfX0pLFxuICAgICAgICAgICAgcGlja3VwRGF0ZVRpbWU6IDxzdHJpbmc+b3B0aW9ucz8ucGlja3VwRGF0ZVRpbWUsIFxuICAgICAgICAgICAgZHJvcG9mZkRhdGVUaW1lOiA8c3RyaW5nPm9wdGlvbnM/LmRyb3BvZmZEYXRlVGltZSxcbiAgICAgICAgICAgIGNsYXNzOiBvcHRpb25zPy5jbGFzc1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ210U2VhcmNoKHF1ZXJ5KS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKChyZXN1bHQ6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJlZmVycmVkT3B0aW9ucyA9IHJlc3VsdC5maWx0ZXIob3B0aW9uID0+IG9wdGlvbi5jb21wYW55UHJlZmVycmVkIHx8IG9wdGlvbi50bWNQcmVmZXJyZWQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9ucyA9IHByZWZlcnJlZE9wdGlvbnMubGVuZ3RoID4gMCA/IHByZWZlcnJlZE9wdGlvbnMgOiBbcmVzdWx0LnJlZHVjZSgobWluLCBvcHRpb24pID0+IG9wdGlvbi5kaXNwbGF5UmVjb3JkLnByaWNlIDwgbWluLmRpc3BsYXlSZWNvcmQucHJpY2UgPyBvcHRpb24gOiBtaW4sIHJlc3VsdFswXSldO1xuICAgICAgICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlT2Yoc2VsZWN0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZU9mKFtdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHNlYXJjaE9ic2VydmFibGVzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBmb3JrSm9pbihzZWFyY2hPYnNlcnZhYmxlcykucGlwZShcbiAgICAgICAgICAgIG1hcChyZXN1bHRzID0+IFtdLmNvbmNhdCguLi5yZXN1bHRzKSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEVudENhcmhpcmVMb2NhdGlvbnNQb3N0Y29kZShjb3VudHJ5Q29kZTpzdHJpbmcscG9zdGNvZGU6c3RyaW5nLHZlbmRvcjpzdHJpbmcpOiBPYnNlcnZhYmxlPExvY2F0aW9uQ29kZXNbXT4ge1xuICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0RW50TG9jYXRpb25zUG9zdGNvZGUoY291bnRyeUNvZGUsIHBvc3Rjb2RlLHZlbmRvcik7XG4gIH1cblxuICBnZXRFbnRDYXJoaXJlTG9jYXRpb25zQ2l0eShjb3VudHJ5Q29kZTpzdHJpbmcsY2l0eTpzdHJpbmcsdmVuZG9yOnN0cmluZyk6IE9ic2VydmFibGU8TG9jYXRpb25Db2Rlc1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5nZXRFbnRMb2NhdGlvbnNDaXR5KGNvdW50cnlDb2RlLCBjaXR5LHZlbmRvcik7XG4gIH1cblxuICBnZXRSZWNlbnRTZWFyY2hRdWVyeShxdWVyeTogUXVlcnlTZWFyY2hDYXJIaXJlQXJncyk6IFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyB7XG4gICAgY29uc3QgcmVjZW50U2VhcmNoUXVlcnk6IENhckhpcmVTZWFyY2hBcmdzID0gdGhpcy51cGRhdGVTZXJjaFF1ZXJ5KHsuLi5xdWVyeX0pO1xuICAgIHJldHVybiB7XG4gICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuQ2FyLFxuICAgICAgc2VhcmNoQXJnczogcmVjZW50U2VhcmNoUXVlcnksXG4gICAgICB0cmF2ZWxEYXRlOiB0aGlzLnBpY2t1cF9kYXRldGltZS5mb3JtYXQoKSxcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzLCB0aGlzLnVzZXJTZXJ2aWNlLmJvYm8/LmlkKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlcmNoUXVlcnkocXVlcnk6IFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3MpOiBDYXJIaXJlU2VhcmNoQXJncyB7XG4gICAgY29uc3Qgc2VhcmNoUXVlcnk6IENhckhpcmVTZWFyY2hBcmdzID0gcXVlcnk7XG4gICAgc3dpdGNoICh0aGlzLmxvY2F0aW9uVHlwZSkge1xuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkNpdHk6XG4gICAgICAgIHNlYXJjaFF1ZXJ5LmNpdHkgPSB7XG4gICAgICAgICAgcGlja3VwTmFtZTogdGhpcy5jaXR5UGlja3VwLm5hbWUsXG4gICAgICAgICAgcGlja3VwQ291bnRyeUNvZGU6IHRoaXMuY2l0eVBpY2t1cC5jb3VudHJ5Q29kZSxcbiAgICAgICAgICBwaWNrdXBDaXR5OiB0aGlzLmNpdHlQaWNrdXAuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBwaWNrdXBMYXRpdHVkZTogdGhpcy5jaXR5UGlja3VwLmxhdGl0dWRlLFxuICAgICAgICAgIHBpY2t1cExvbmdpdHVkZTogdGhpcy5jaXR5UGlja3VwLmxvbmdpdHVkZSxcblxuICAgICAgICAgIGRyb3BPZmZOYW1lOiB0aGlzLmNpdHlEcm9wb2ZmLm5hbWUsXG4gICAgICAgICAgZHJvcG9mZkNvdW50cnlDb2RlOiB0aGlzLmNpdHlEcm9wb2ZmLmNvdW50cnlDb2RlLFxuICAgICAgICAgIGRyb3BvZmZDaXR5OiB0aGlzLmNpdHlEcm9wb2ZmLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgZHJvcE9mZkxhdGl0dWRlOiB0aGlzLmNpdHlEcm9wb2ZmLmxhdGl0dWRlLFxuICAgICAgICAgIGRyb3BPZmZMb25naXR1ZGU6IHRoaXMuY2l0eURyb3BvZmYubG9uZ2l0dWRlLFxuXG4gICAgICAgICAgcGlja3VwQWRkcmVzc0xpbmVzOiB0aGlzLmNpdHlQaWNrdXBEZXBvdC5hZGRyZXNzTGluZXNbMF0sXG4gICAgICAgICAgcGlja3VwQ2l0eU5hbWU6IHRoaXMuY2l0eVBpY2t1cERlcG90LmNpdHlOYW1lLFxuICAgICAgICAgIHBpY2t1cEV4dGVuZGVkTG9jYXRpb25Db2RlOiB0aGlzLmNpdHlQaWNrdXBEZXBvdC5leHRlbmRlZExvY2F0aW9uQ29kZSxcbiAgICAgICAgICBwaWNrdXBMb2NhdGlvbkNvZGU6IHRoaXMuY2l0eVBpY2t1cERlcG90LmxvY2F0aW9uQ29kZSxcbiAgICAgICAgICBwaWNrdXBWZW5kb3I6IHRoaXMuY2l0eVBpY2t1cERlcG90LnZlbmRvcixcbiAgICAgICAgICBwaWNrdXBWZW5kb3JDb2RlOiB0aGlzLmNpdHlQaWNrdXBEZXBvdC52ZW5kb3JDb2RlLFxuICAgICAgICAgIGNob3NlbkRpc3RhbmNlOiB0aGlzLmNob3NlbkRpc3RhbmNlLFxuXG4gICAgICAgICAgZHJvcE9mZkFkZHJlc3NMaW5lczogdGhpcy5jaXR5RHJvcG9mZkRlcG90LmFkZHJlc3NMaW5lc1swXSxcbiAgICAgICAgICBkcm9wT2ZmQ2l0eU5hbWU6IHRoaXMuY2l0eURyb3BvZmZEZXBvdC5jaXR5TmFtZSxcbiAgICAgICAgICBkcm9wT2ZmRXh0ZW5kZWRMb2NhdGlvbkNvZGU6IHRoaXMuY2l0eURyb3BvZmZEZXBvdC5leHRlbmRlZExvY2F0aW9uQ29kZSxcbiAgICAgICAgICBkcm9wT2ZmTG9jYXRpb25Db2RlOiB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QubG9jYXRpb25Db2RlLFxuICAgICAgICAgIGRyb3BPZmZWZW5kb3I6IHRoaXMuY2l0eURyb3BvZmZEZXBvdC52ZW5kb3IsXG4gICAgICAgICAgZHJvcE9mZlZlbmRvckNvZGU6IHRoaXMuY2l0eURyb3BvZmZEZXBvdC52ZW5kb3JDb2RlLFxuICAgICAgICAgIHBpY2t1cExvY2F0aW9uVHlwZTogdGhpcy5jaXR5UGlja3VwRGVwb3QubG9jYXRpb25UeXBlLFxuICAgICAgICAgIGRyb3BvZmZMb2NhdGlvblR5cGU6IHRoaXMuY2l0eURyb3BvZmZEZXBvdC5sb2NhdGlvblR5cGVcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuUG9zdGNvZGU6XG4gICAgICAgIHNlYXJjaFF1ZXJ5LmRlcG90ID0ge1xuICAgICAgICAgIHZlbmRvckNvZGU6IHRoaXMucG9zdGNvZGVQaWNrdXAudmVuZG9yQ29kZSxcbiAgICAgICAgICBwaWNrdXBMb2NhdGlvbkNvZGU6IHRoaXMucG9zdGNvZGVQaWNrdXAubG9jYXRpb25Db2RlLFxuICAgICAgICAgIHBpY2t1cEV4dGVuZGVkTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlUGlja3VwLmV4dGVuZGVkTG9jYXRpb25Db2RlLFxuICAgICAgICAgIHBpY2t1cEFkZHJlc3NMaW5lczogdGhpcy5wb3N0Y29kZVBpY2t1cC5hZGRyZXNzTGluZXNbMF0sXG4gICAgICAgICAgcGlja3VwQ2l0eU5hbWU6IHRoaXMucG9zdGNvZGVQaWNrdXAuY2l0eU5hbWUsXG4gICAgICAgICAgcGlja3VwVmVuZG9yOiB0aGlzLnBvc3Rjb2RlUGlja3VwLnZlbmRvcixcblxuICAgICAgICAgIGRyb3BPZmZMb2NhdGlvbkNvZGU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmLmxvY2F0aW9uQ29kZSxcbiAgICAgICAgICBkcm9wT2ZmRXh0ZW5kZWRMb2NhdGlvbkNvZGU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmLmV4dGVuZGVkTG9jYXRpb25Db2RlLFxuICAgICAgICAgIGRyb3BvZmZBZGRyZXNzTGluZXM6IHRoaXMucG9zdGNvZGVEcm9wb2ZmLmFkZHJlc3NMaW5lc1swXSxcbiAgICAgICAgICBkcm9wb2ZmQ2l0eU5hbWU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmLmNpdHlOYW1lLFxuICAgICAgICAgIGRyb3BvZmZWZW5kb3I6IHRoaXMucG9zdGNvZGVEcm9wb2ZmLnZlbmRvcixcbiAgICAgICAgICBjaG9zZW5EaXN0YW5jZTogdGhpcy5jaG9zZW5EaXN0YW5jZSxcblxuICAgICAgICAgIHBpY2t1cFBvc3RDb2RlOiB0aGlzLnBvc3Rjb2RlUGlja3VwUmF3Lm5hbWUsXG4gICAgICAgICAgcGlja3VwTGF0aXR1ZGU6IHRoaXMucG9zdGNvZGVQaWNrdXBSYXcubGF0aXR1ZGUsXG4gICAgICAgICAgcGlja3VwTG9uZ2l0dWRlOiB0aGlzLnBvc3Rjb2RlUGlja3VwUmF3LmxvbmdpdHVkZSxcblxuICAgICAgICAgIGRyb3BvZmZQb3N0Q29kZTogdGhpcy5wb3N0Y29kZURyb3BvZmZSYXcubmFtZSxcbiAgICAgICAgICBkcm9wb2ZmTGF0aXR1ZGU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmUmF3LmxhdGl0dWRlLFxuICAgICAgICAgIGRyb3BvZmZMb25naXR1ZGU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmUmF3LmxvbmdpdHVkZSxcbiAgICAgICAgICBwaWNrdXBMb2NhdGlvblR5cGU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmLmxvY2F0aW9uVHlwZSxcbiAgICAgICAgICBkcm9wb2ZmTG9jYXRpb25UeXBlOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZi5sb2NhdGlvblR5cGVcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlYXJjaFF1ZXJ5O1xuICB9XG5cbiAgcHVibGljIHN0YXJ0UmVjZW50U2VhcmNoKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XG4gICAgdGhpcy5kcm9wb2ZmX2RhdGV0aW1lID0gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRyb3BvZmZEYXRlVGltZSk7XG4gICAgdGhpcy5waWNrdXBfZGF0ZXRpbWUgPSBtb21lbnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucGlja3VwRGF0ZVRpbWUpO1xuXG4gICAgdGhpcy5hcHBseVNlYXJjaFF1ZXJ5KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGFyYW1zRm9yQ2FyYnlBaXJwb3J0KGFpcnBvcnQ6IENhckhpcmVBaXJwb3J0SW5wdXQsIHN0YXJ0U2VhcmNoOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgIHRoaXMubG9jYXRpb25UeXBlID0gTG9jYXRpb25UeXBlcy5BaXJwb3J0O1xuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRCeUNvZGUoYWlycG9ydC5waWNrdXBDb2RlKSxcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0QnlDb2RlKGFpcnBvcnQuZHJvcG9mZkNvZGUpXG4gICAgXSkuc3Vic2NyaWJlKChbZGVwYXJ0TG9jYXRpb24sIGFycml2ZUxvY2F0aW9uXSkgPT4ge1xuICAgICAgaWYgKGRlcGFydExvY2F0aW9uICYmIGFycml2ZUxvY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuZHJvcG9mZl9sb2NhdGlvbiA9IHtcbiAgICAgICAgICBkZXN0aW5hdGlvbjogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLm5hbWUsXG4gICAgICAgICAgZ2F0ZXdheTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLmlhdGEsXG4gICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2gudGVybWluYWxzKSxcbiAgICAgICAgICBjb3VudHJ5OiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcbiAgICAgICAgICBwb3N0Y29kZTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxuICAgICAgICAgIGNvdW50cnlDb2RlOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGVcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5waWNrdXBfbG9jYXRpb24gPSB7XG4gICAgICAgICAgZGVzdGluYXRpb246IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC5uYW1lLFxuICAgICAgICAgIGdhdGV3YXk6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC5pYXRhLFxuICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFscyksXG4gICAgICAgICAgY291bnRyeTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXG4gICAgICAgICAgcG9zdGNvZGU6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcbiAgICAgICAgICBjb3VudHJ5Q29kZTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5kcm9wb2ZmX2NvdW50cnkgPSB0aGlzLmRyb3BvZmZfbG9jYXRpb24uY291bnRyeUNvZGU7XG4gICAgICAgIHRoaXMucGlja3VwX2NvdW50cnkgPSB0aGlzLnBpY2t1cF9sb2NhdGlvbi5jb3VudHJ5Q29kZTtcbiAgICAgICAgaWYgKHN0YXJ0U2VhcmNoKSB7XG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYXJhbXNGb3JDYXJieUNpdHkoY2l0eTogSUNhckhpcmVDaXR5LCBzdGFydFNlYXJjaDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLmxvY2F0aW9uVHlwZSA9IExvY2F0aW9uVHlwZXMuQ2l0eTtcbiAgICB0aGlzLmNob3NlbkRpc3RhbmNlID0gY2l0eS5jaG9zZW5EaXN0YW5jZSA/PyAnNSc7XG5cbiAgICB0aGlzLmNpdHlQaWNrdXAgPSB7XG4gICAgICBjb3VudHJ5Q29kZTogY2l0eS5waWNrdXBDb3VudHJ5Q29kZSxcbiAgICAgIGlkOiBjaXR5LnBpY2t1cENpdHksXG4gICAgICBuYW1lOiBjaXR5LnBpY2t1cE5hbWUsXG4gICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLkNpdHksXG4gICAgICBsYXRpdHVkZTogY2l0eS5waWNrdXBMYXRpdHVkZSxcbiAgICAgIGxvbmdpdHVkZTogY2l0eS5waWNrdXBMb25naXR1ZGVcbiAgICB9O1xuXG4gICAgdGhpcy5jaXR5RHJvcG9mZiA9IHtcbiAgICAgIGNvdW50cnlDb2RlOiBjaXR5LmRyb3BvZmZDb3VudHJ5Q29kZSxcbiAgICAgIGlkOiBjaXR5LmRyb3BvZmZDaXR5LFxuICAgICAgbmFtZTogY2l0eS5kcm9wT2ZmTmFtZSxcbiAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuQ2l0eSxcbiAgICAgIGxhdGl0dWRlOiBjaXR5LmRyb3BPZmZMYXRpdHVkZSxcbiAgICAgIGxvbmdpdHVkZTogY2l0eS5kcm9wT2ZmTG9uZ2l0dWRlXG4gICAgfTtcblxuICAgIHRoaXMuY2l0eURyb3BvZmZEZXBvdCA9IHtcbiAgICAgIGFkZHJlc3NMaW5lczogW2NpdHkuZHJvcE9mZkFkZHJlc3NMaW5lc10sXG4gICAgICBjaXR5TmFtZTogY2l0eS5kcm9wT2ZmQ2l0eU5hbWUsXG4gICAgICBleHRlbmRlZExvY2F0aW9uQ29kZTogY2l0eS5kcm9wT2ZmRXh0ZW5kZWRMb2NhdGlvbkNvZGUsXG4gICAgICBsb2NhdGlvbkNvZGU6IGNpdHkuZHJvcE9mZkxvY2F0aW9uQ29kZSxcbiAgICAgIHZlbmRvcjogY2l0eS5kcm9wT2ZmVmVuZG9yLFxuICAgICAgdmVuZG9yQ29kZTogY2l0eS5kcm9wT2ZmVmVuZG9yQ29kZVxuICAgIH07XG5cbiAgICB0aGlzLmNpdHlQaWNrdXBEZXBvdCA9IHtcbiAgICAgIGFkZHJlc3NMaW5lczogW2NpdHkucGlja3VwQWRkcmVzc0xpbmVzXSxcbiAgICAgIGNpdHlOYW1lOiBjaXR5LnBpY2t1cENpdHlOYW1lLFxuICAgICAgZXh0ZW5kZWRMb2NhdGlvbkNvZGU6IGNpdHkucGlja3VwRXh0ZW5kZWRMb2NhdGlvbkNvZGUsXG4gICAgICBsb2NhdGlvbkNvZGU6IGNpdHkucGlja3VwTG9jYXRpb25Db2RlLFxuICAgICAgdmVuZG9yOiBjaXR5LnBpY2t1cFZlbmRvcixcbiAgICAgIHZlbmRvckNvZGU6IGNpdHkucGlja3VwVmVuZG9yQ29kZVxuICAgIH07XG5cbiAgICBpZiAoc3RhcnRTZWFyY2gpIHtcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYXJhbXNGb3JDYXJieVBvc3RDb2RlKGRlcG90OiBJQ2FySGlyZURlcG90LCBzdGFydFNlYXJjaDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLmxvY2F0aW9uVHlwZSA9IExvY2F0aW9uVHlwZXMuUG9zdGNvZGU7XG4gICAgdGhpcy5jaG9zZW5EaXN0YW5jZSA9IGRlcG90LmNob3NlbkRpc3RhbmNlID8/ICc1JztcblxuICAgIHRoaXMucG9zdGNvZGVEcm9wb2ZmID0ge1xuICAgICAgYWRkcmVzc0xpbmVzOiBbZGVwb3QuZHJvcG9mZkFkZHJlc3NMaW5lc10sXG4gICAgICB2ZW5kb3JDb2RlOiBkZXBvdC52ZW5kb3JDb2RlLFxuICAgICAgbG9jYXRpb25Db2RlOiBkZXBvdC5kcm9wT2ZmTG9jYXRpb25Db2RlLFxuICAgICAgZXh0ZW5kZWRMb2NhdGlvbkNvZGU6IGRlcG90LmRyb3BPZmZFeHRlbmRlZExvY2F0aW9uQ29kZSxcbiAgICAgIGNpdHlOYW1lOiBkZXBvdC5kcm9wb2ZmQ2l0eU5hbWUsXG4gICAgICB2ZW5kb3I6IGRlcG90LmRyb3BvZmZWZW5kb3JcbiAgICB9O1xuXG4gICAgdGhpcy5wb3N0Y29kZURyb3BvZmZSYXcgPSB7XG4gICAgICBuYW1lOiBkZXBvdC5kcm9wb2ZmUG9zdENvZGUsXG4gICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlLFxuICAgICAgbGF0aXR1ZGU6IGRlcG90LmRyb3BvZmZMYXRpdHVkZSxcbiAgICAgIGxvbmdpdHVkZTogZGVwb3QuZHJvcG9mZkxvbmdpdHVkZVxuICAgIH07XG4gICAgdGhpcy5wb3N0Y29kZVBpY2t1cCA9IHtcbiAgICAgIGFkZHJlc3NMaW5lczogW2RlcG90LnBpY2t1cEFkZHJlc3NMaW5lc10sXG4gICAgICB2ZW5kb3JDb2RlOiBkZXBvdC52ZW5kb3JDb2RlLFxuICAgICAgbG9jYXRpb25Db2RlOiBkZXBvdC5waWNrdXBMb2NhdGlvbkNvZGUsXG4gICAgICBleHRlbmRlZExvY2F0aW9uQ29kZTogZGVwb3QucGlja3VwRXh0ZW5kZWRMb2NhdGlvbkNvZGUsXG4gICAgICBjaXR5TmFtZTogZGVwb3QucGlja3VwQ2l0eU5hbWUsXG4gICAgICB2ZW5kb3I6IGRlcG90LnBpY2t1cFZlbmRvclxuICAgIH07XG5cbiAgICB0aGlzLnBvc3Rjb2RlUGlja3VwUmF3ID0ge1xuICAgICAgbmFtZTogZGVwb3QucGlja3VwUG9zdENvZGUsXG4gICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlLFxuICAgICAgbGF0aXR1ZGU6IGRlcG90LnBpY2t1cExhdGl0dWRlLFxuICAgICAgbG9uZ2l0dWRlOiBkZXBvdC5waWNrdXBMb25naXR1ZGVcbiAgICB9O1xuXG4gICAgaWYgKHN0YXJ0U2VhcmNoKSB7XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNlYXJjaFF1ZXJ5KCk6IFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3Mge1xuICAgIGNvbnN0IHF1ZXJ5OiBRdWVyeVNlYXJjaENhckhpcmVBcmdzID0ge30gYXMgUXVlcnlTZWFyY2hDYXJIaXJlQXJncztcbiAgICBjb25zdCBpc1VzZUttRm9yQ2FySGlyZSA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0KFVzZXJGYXZvcnVyaXRlLnVzZUttRm9yQ2FySGlyZSkgYXMge3ZhbHVlOiBib29sZWFufTtcbiAgICBzd2l0Y2ggKHRoaXMubG9jYXRpb25UeXBlKSB7XG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuQWlycG9ydDpcbiAgICAgICAgdGhpcy5kZWxpdmVyeSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbGxlY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgcXVlcnkuYWlycG9ydCA9IHtcbiAgICAgICAgICBwaWNrdXBDb2RlOiAnJyxcbiAgICAgICAgICBkcm9wb2ZmQ29kZTogJydcbiAgICAgICAgfTtcblxuICAgICAgICBxdWVyeS5haXJwb3J0LnBpY2t1cENvZGUgPSB0aGlzLnBpY2t1cF9sb2NhdGlvbi5nYXRld2F5O1xuICAgICAgICBxdWVyeS5haXJwb3J0LmRyb3BvZmZDb2RlID0gdGhpcy5yZXR1cm5fdG9fcGlja3VwXG4gICAgICAgICAgPyB0aGlzLnBpY2t1cF9sb2NhdGlvbi5nYXRld2F5XG4gICAgICAgICAgOiB0aGlzLmRyb3BvZmZfbG9jYXRpb24uZ2F0ZXdheTtcbiAgICAgICAgcXVlcnkuYWlycG9ydC5waWNrdXBBaXJwb3J0RnVsbE5hbWUgPSB0aGlzLnBpY2t1cF9sb2NhdGlvbi5kZXN0aW5hdGlvbjtcbiAgICAgICAgcXVlcnkuYWlycG9ydC5kcm9wb2ZmQWlycG9ydEZ1bGxOYW1lID0gdGhpcy5yZXR1cm5fdG9fcGlja3VwXG4gICAgICAgICAgPyB0aGlzLnBpY2t1cF9sb2NhdGlvbi5kZXN0aW5hdGlvblxuICAgICAgICAgIDogdGhpcy5kcm9wb2ZmX2xvY2F0aW9uLmRlc3RpbmF0aW9uO1xuICAgICAgICAgIHF1ZXJ5LmFpcnBvcnQucGlja3VwQ291bnRyeUNvZGUgPSB0aGlzLnBpY2t1cF9sb2NhdGlvbi5jb3VudHJ5Q29kZTtcbiAgICAgICAgICBxdWVyeS5haXJwb3J0LmRyb3BvZmZDb3VudHJ5Q29kZSA9IHRoaXMuZHJvcG9mZl9sb2NhdGlvbi5jb3VudHJ5Q29kZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuQ2l0eTpcbiAgICAgICAgaWYgKHRoaXMuZGVsaXZlcnkgfHwgdGhpcy5jb2xsZWN0aW9uKSB7XG4gICAgICAgICAgcXVlcnkubG9jYXRpb24gPSB7XG4gICAgICAgICAgICBkcm9wb2ZmQ291bnRyeUNvZGU6IHRoaXMuY2l0eURyb3BvZmZEZXBvdC5jb3VudHJ5Q29kZSxcbiAgICAgICAgICAgIGRyb3BvZmZQb3N0YWxDb2RlOiB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QubG9jYXRpb25Db2RlLFxuICAgICAgICAgICAgZHJvcE9mZkxvY2F0aW9uQ29kZTp0aGlzLmNpdHlEcm9wb2ZmRGVwb3QuZXh0ZW5kZWRMb2NhdGlvbkNvZGUsXG5cbiAgICAgICAgICAgIHBpY2t1cENvdW50cnlDb2RlOiB0aGlzLmNpdHlQaWNrdXBEZXBvdC5jb3VudHJ5Q29kZSxcbiAgICAgICAgICAgIHBpY2t1cFBvc3RhbENvZGU6IHRoaXMuY2l0eVBpY2t1cERlcG90LmxvY2F0aW9uQ29kZSxcbiAgICAgICAgICAgIHBpY2tVcExvY2F0aW9uQ29kZTogdGhpcy5jaXR5UGlja3VwRGVwb3QuZXh0ZW5kZWRMb2NhdGlvbkNvZGUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlcnkuZGVwb3QgPSB7XG4gICAgICAgICAgdmVuZG9yQ29kZTogdGhpcy5jaXR5UGlja3VwRGVwb3QudmVuZG9yQ29kZSxcbiAgICAgICAgICBwaWNrdXBMb2NhdGlvbkNvZGU6IHRoaXMuY2l0eVBpY2t1cERlcG90LmxvY2F0aW9uQ29kZSxcbiAgICAgICAgICBwaWNrdXBFeHRlbmRlZExvY2F0aW9uQ29kZTogdGhpcy5jaXR5UGlja3VwRGVwb3QuZXh0ZW5kZWRMb2NhdGlvbkNvZGUsXG4gICAgICAgICAgZHJvcE9mZkxvY2F0aW9uQ29kZTogdGhpcy5jaXR5RHJvcG9mZkRlcG90LmxvY2F0aW9uQ29kZSxcbiAgICAgICAgICBkcm9wT2ZmRXh0ZW5kZWRMb2NhdGlvbkNvZGU6IHRoaXMuY2l0eURyb3BvZmZEZXBvdC5leHRlbmRlZExvY2F0aW9uQ29kZSxcbiAgICAgICAgICBwaWNrdXBMb2NhdGlvblR5cGU6IHRoaXMuY2l0eVBpY2t1cERlcG90LmxvY2F0aW9uVHlwZSxcbiAgICAgICAgICBkcm9wb2ZmTG9jYXRpb25UeXBlOiB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QubG9jYXRpb25UeXBlXG4gICAgICAgIH07XG4gICAgICAgIHF1ZXJ5LmxhdGl0dWRlID0gdGhpcy5jaXR5UGlja3VwLmxhdGl0dWRlID8gdGhpcy5jaXR5UGlja3VwLmxhdGl0dWRlIDogMDtcbiAgICAgICAgcXVlcnkubG9uZ2l0dWRlID0gdGhpcy5jaXR5UGlja3VwLmxvbmdpdHVkZSA/IHRoaXMuY2l0eVBpY2t1cC5sb25naXR1ZGUgOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT0xEIHBheWxvYWQgZm9yIGNpdHksIGFza2VkIHRvIGNoYW5nZVxuICAgICAgICAvLyBxdWVyeS5jaXR5ID0ge1xuICAgICAgICAvLyAgIHBpY2t1cENvdW50cnlDb2RlOiB0aGlzLmNpdHlQaWNrdXAuY291bnRyeUNvZGUsXG4gICAgICAgIC8vICAgcGlja3VwQ2l0eTogdGhpcy5jaXR5UGlja3VwLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIC8vICAgZHJvcG9mZkNvdW50cnlDb2RlOiB0aGlzLmNpdHlEcm9wb2ZmLmNvdW50cnlDb2RlLFxuICAgICAgICAvLyAgIGRyb3BvZmZDaXR5OiB0aGlzLmNpdHlEcm9wb2ZmLmlkLnRvU3RyaW5nKClcbiAgICAgICAgLy8gfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuUG9zdGNvZGU6XG4gICAgICAgIGlmICh0aGlzLmRlbGl2ZXJ5IHx8IHRoaXMuY29sbGVjdGlvbikge1xuICAgICAgICAgIHF1ZXJ5LmxvY2F0aW9uID0ge1xuICAgICAgICAgICAgZHJvcG9mZkNvdW50cnlDb2RlOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZi5jb3VudHJ5Q29kZSxcbiAgICAgICAgICAgIGRyb3BvZmZQb3N0YWxDb2RlOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZi5sb2NhdGlvbkNvZGUsXG4gICAgICAgICAgICBkcm9wT2ZmTG9jYXRpb25Db2RlOnRoaXMucG9zdGNvZGVEcm9wb2ZmLmV4dGVuZGVkTG9jYXRpb25Db2RlLFxuXG4gICAgICAgICAgICBwaWNrdXBDb3VudHJ5Q29kZTogdGhpcy5wb3N0Y29kZVBpY2t1cC5jb3VudHJ5Q29kZSxcbiAgICAgICAgICAgIHBpY2t1cFBvc3RhbENvZGU6IHRoaXMucG9zdGNvZGVQaWNrdXAubG9jYXRpb25Db2RlLFxuICAgICAgICAgICAgcGlja1VwTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlUGlja3VwLmV4dGVuZGVkTG9jYXRpb25Db2RlLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5LmRlcG90ID0ge1xuICAgICAgICAgIHZlbmRvckNvZGU6IHRoaXMucG9zdGNvZGVQaWNrdXAudmVuZG9yQ29kZSxcbiAgICAgICAgICBwaWNrdXBMb2NhdGlvbkNvZGU6IHRoaXMucG9zdGNvZGVQaWNrdXAubG9jYXRpb25Db2RlLFxuICAgICAgICAgIHBpY2t1cEV4dGVuZGVkTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlUGlja3VwLmV4dGVuZGVkTG9jYXRpb25Db2RlLFxuICAgICAgICAgIGRyb3BPZmZMb2NhdGlvbkNvZGU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmLmxvY2F0aW9uQ29kZSxcbiAgICAgICAgICBkcm9wT2ZmRXh0ZW5kZWRMb2NhdGlvbkNvZGU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmLmV4dGVuZGVkTG9jYXRpb25Db2RlLFxuICAgICAgICAgIHBpY2t1cExvY2F0aW9uVHlwZTogdGhpcy5wb3N0Y29kZVBpY2t1cC5sb2NhdGlvblR5cGUsXG4gICAgICAgICAgZHJvcG9mZkxvY2F0aW9uVHlwZTogdGhpcy5wb3N0Y29kZURyb3BvZmYubG9jYXRpb25UeXBlXG4gICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHF1ZXJ5LmRyb3BvZmZEYXRlVGltZSA9IHRoaXMuaGVscGVycy5mb3JtYXRHcmFwaFFMRGF0ZVRpbWUodGhpcy5kcm9wb2ZmX2RhdGV0aW1lKTtcbiAgICBxdWVyeS5waWNrdXBEYXRlVGltZSA9IHRoaXMuaGVscGVycy5mb3JtYXRHcmFwaFFMRGF0ZVRpbWUodGhpcy5waWNrdXBfZGF0ZXRpbWUpO1xuICAgIHF1ZXJ5LmFpcmNvbiA9IHRoaXMuYWlyQ29uO1xuXG4gICAgLy8gbm93IGZvciB0aGUgb3B0aW9uYWwgZmllbGRzIC0gbnVsbGlmeSB0aGVzZSBpZiB0aGV5IGFyZSAnLScgKEFueSlcbiAgICBpZiAodGhpcy5sb2NhdGlvblR5cGUgPT09IExvY2F0aW9uVHlwZXMuQWlycG9ydCkge1xuICAgICAgcXVlcnkudmVuZG9yID0gdGhpcy5jaG9zZW5WZW5kb3IgPT09ICctJyA/IG51bGwgOiB0aGlzLmNob3NlblZlbmRvcjtcbiAgICB9XG4gICAgcXVlcnkudHJhbnNtaXNzaW9uID0gdGhpcy50cmFuc21pc3Npb24gfHwgbnVsbDtcbiAgICBxdWVyeS5jbGFzcyA9IHRoaXMuY2FyQ2xhc3MgfHwgbnVsbDtcbiAgICBxdWVyeS50eXBlID0gdGhpcy5jYXJUeXBlIHx8IG51bGw7XG4gICAgcXVlcnkuZXN0aW1hdGVkRGFpbHlEaXN0YW5jZSA9IHRoaXMuZXN0aW1hdGVkTWlsZWFnZSB8fCBudWxsO1xuICAgIHF1ZXJ5LmVzdGltYXRlZERhaWx5RGlzdGFuY2VVbml0cyA9IHRoaXMuZXN0aW1hdGVkTWlsZWFnZSA/IGlzVXNlS21Gb3JDYXJIaXJlPy52YWx1ZSA/IERpc3RhbmNlVHlwZXMuSyA6IERpc3RhbmNlVHlwZXMuTSA6IG51bGw7XG4gICAgcXVlcnkudHJhdmVsbGVycyA9IHRoaXMudHJhdmVsbGVycy5tYXAodHJhdmVsbGVyID0+IHtyZXR1cm4ge2lkOiB0cmF2ZWxsZXIuaWR9fSk7XG4gICAgcXVlcnkuY29sbGVjdGlvbiA9IHRoaXMuY29sbGVjdGlvbiB8fCBudWxsO1xuICAgIHF1ZXJ5LmRlbGl2ZXJ5ID0gdGhpcy5kZWxpdmVyeSB8fCBudWxsO1xuICAgIHF1ZXJ5LmRyaXZlckFnZSA9IHRoaXMuZGVsaXZlcnkgfHwgdGhpcy5jb2xsZWN0aW9uID8gdGhpcy5kcml2ZXJBZ2UgOiBudWxsO1xuICAgIHJldHVybiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8UXVlcnlTZWFyY2hDYXJIaXJlQXJncz4ocXVlcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0b2RvIC0gdHVybiB0aGlzIGludG8gYSBCRSBjYWxsIHRvIGR5bmFtaWNhbGx5IGdldCB0aGUgbGlzdCBvZiBjYXIgY2xhc3Nlc1xuICAgKiBAcmV0dXJucyBhbGwgY2FyIGNsYXNzZXMgYXMgYW4gYXJyYXlcbiAgICovXG4gIGdldENhckNsYXNzZXMoKTogT2JzZXJ2YWJsZTxJQ2FyQ2xhc3Nlc1tdPiB7XG4gICAgcmV0dXJuIG9mKHRoaXMuX2Nhcl9jbGFzc2VzKTtcbiAgfVxuXG4gIGdldExvY2F0aW9uVHlwZXMoKSB7XG4gICAgcmV0dXJuIG9mKHRoaXMuX2xvY2F0aW9uX3R5cGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBmaWx0ZXIgZG93biB0aGUgY2FyIHJlc3VsdHMgYmFzZWQgb24gdXNlciBjaG9zZW4gZmlsdGVyc1xuICAgKi9cbiAgZmlsdGVyUmVzdWx0cyhhcHBsaWVkRmlsdGVyczogQ2FySGlyZUZpbHRlcnMsIHNlbGVjdGVkU29ydDogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IGZ1bGxSZXN1bHRzOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmZ1bGxSZXN1bHRzKTtcblxuICAgIC8vIG5vdyBhcHBseSBmaWx0ZXJzXG4gICAgLy8gcHJpY2UgZmlsdGVyc1xuICAgIGZ1bGxSZXN1bHRzID0gZnVsbFJlc3VsdHMuZmlsdGVyKChyZXN1bHQ6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xuICAgICAgY29uc3QgcHJpY2UgPSB0aGlzLmdldFByaWNlKHJlc3VsdCk7XG5cbiAgICAgIHJldHVybiBwcmljZSA+PSBhcHBsaWVkRmlsdGVycy5taW5QcmljZSAmJiBwcmljZSA8PSBhcHBsaWVkRmlsdGVycy5tYXhQcmljZTtcbiAgICB9KTtcblxuICAgIC8vIGFwcGx5IHRyYW5zbWlzc2lvbiBmaWx0ZXJzXG4gICAgZnVsbFJlc3VsdHMgPSB0aGlzLmZpbHRlckJ5VHJhbnNtaXNzaW9uVHlwZShhcHBsaWVkRmlsdGVycy50cmFuc21pc3Npb25zLCBmdWxsUmVzdWx0cyk7XG5cbiAgICAvLyBjYXIgdHlwZXMgKGNsYXNzKVxuICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5maWx0ZXJCeUNhclR5cGUoYXBwbGllZEZpbHRlcnMudHlwZXMsIGZ1bGxSZXN1bHRzKTtcblxuICAgIC8vIFRyYXZlbCBQb2xpY3lcbiAgICBmdWxsUmVzdWx0cyA9IHRoaXMuZmlsdGVyQnlUcmF2ZWxQb2xpY3koYXBwbGllZEZpbHRlcnMudHJhdmVsUG9saWN5LCBmdWxsUmVzdWx0cyk7XG5cbiAgICAvLyBjb21wYW55XG4gICAgZnVsbFJlc3VsdHMgPSB0aGlzLmZpbHRlckJ5Q29tcGFueShhcHBsaWVkRmlsdGVycy5jb21wYW5pZXMsIGZ1bGxSZXN1bHRzKTtcblxuICAgIC8vIGxhc3RseSBhcHBseSBhbnkgcmVxdWlyZWQgc29ydGluZ1xuICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5zb3J0UmVzdWx0cyhzZWxlY3RlZFNvcnQsIGZ1bGxSZXN1bHRzKTtcbiAgICB0aGlzLnJlc3VsdHMubmV4dChmdWxsUmVzdWx0cyk7XG4gIH1cblxuICBfYXBwbHlGaWx0ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VhcmNoU2VydmljZS5pc0Nsb25pbmcuZ2V0VmFsdWUoKSkge1xuICAgICAgY29uc3QgZmlsdGVyZWRSZXN1bHRzID0gdGhpcy5mdWxsUmVzdWx0cy5maWx0ZXIoKHJlc3VsdDogQ2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHkpID0+IFxuICAgICAgIHJlc3VsdC5pZGVudGlmaWVycy5tYWtlTW9kZWwgPT09IHRoaXMuY2xvbmVkQmFza2V0SXRlbURldGFpbHMuaWRlbnRpZmllcnMubWFrZU1vZGVsXG4gICAgICApO1xuICAgICAgdGhpcy5yZXN1bHRzLm5leHQodGhpcy5oZWxwZXJzLmNsb25lKGZpbHRlcmVkUmVzdWx0cykpO1xuICAgIH0gXG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmNsb25lZEJhc2tldEl0ZW1EZXRhaWxzID0ge307XG4gICAgICB0aGlzLnJlc3VsdHMubmV4dCh0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5mdWxsUmVzdWx0cykpO1xuICAgIH1cbiAgfVxuXG4gIGZpbHRlckJ5Q29tcGFueShcbiAgICBjb21wYW5pZXM6IFNlbGVjdEZpbHRlcltdLFxuICAgIGNhcnM6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5XG4gICk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IGNvbXBhbmllcy5maWx0ZXIoY29tcGFueSA9PiBjb21wYW55LnNlbGVjdGVkKTtcblxuICAgIGlmIChzZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgIGNhcnMgPSBjYXJzLmZpbHRlcigoY2FyOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcbiAgICAgICAgY29uc3QgaGF2ZVNlbGVjdGVkID0gc2VsZWN0ZWQuZmluZChcbiAgICAgICAgICAoc2VsYzogYW55KSA9PlxuICAgICAgICAgICAgc2VsYy52YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09IGNhci5pZGVudGlmaWVycy52ZW5kb3IudG9Mb3dlckNhc2UoKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBoYXZlU2VsZWN0ZWQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FycztcbiAgfVxuXG4gIGZpbHRlckJ5Q2FyVHlwZSh0eXBlczogU2VsZWN0RmlsdGVyW10sIGNhcnM6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xuICAgIC8vIHRoaXMgaXMgYSBmaWx0ZXIgdHlwZSB3aGljaCBhbGxvd3MgbW9yZSB0aGFuIG9uZSB0byBiZSBzZXRcbiAgICAvLyBpZiBub25lIGFyZSBzZXQgYWxsb3cgYWxsIHRocm91Z2hcblxuICAgIGNvbnN0IHNlbGVjdGVkID0gdHlwZXMuZmlsdGVyKHR5cGUgPT4gdHlwZS5zZWxlY3RlZCk7XG5cbiAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICBjYXJzID0gY2Fycy5maWx0ZXIoKGNhcjogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGhhdmVTZWxlY3RlZCA9IHNlbGVjdGVkLmZpbmQoXG4gICAgICAgICAgc2VsYyA9PlxuICAgICAgICAgICAgc2VsYy52YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09IGNhci5kaXNwbGF5UmVjb3JkLnZlaGljbGUuY2xhc3MudG9Mb3dlckNhc2UoKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBoYXZlU2VsZWN0ZWQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FycztcbiAgfVxuXG4gIGZpbHRlckJ5VHJhdmVsUG9saWN5KFxuICAgIHR5cGVzOiBTZWxlY3RGaWx0ZXJbXSxcbiAgICBjYXJzOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheVxuICApOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0eXBlcy5maWx0ZXIodHlwZSA9PiB0eXBlLnNlbGVjdGVkKTtcblxuICAgIGlmIChzZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgIGNhcnMgPSBjYXJzLmZpbHRlcigoY2FyOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcbiAgICAgICAgY29uc3QgcmVxdWlyZXNSZWFzb24gPSBjYXIudW5hdmFpbGFibGVcbiAgICAgICAgICA/IFRyYXZlbFBvbGljaWVzLlVOQVZBSUxBQkxFXG4gICAgICAgICAgOiBjYXIucmVxdWlyZXNSZWFzb25LZXlzLmxlbmd0aFxuICAgICAgICAgID8gVHJhdmVsUG9saWNpZXMuQUxMT1dfV0lUSF9SRUFTT05cbiAgICAgICAgICA6IFRyYXZlbFBvbGljaWVzLklOX1BPTElDWTtcblxuICAgICAgICBjb25zdCBoYXZlU2VsZWN0ZWQgPSBzZWxlY3RlZC5maW5kKFxuICAgICAgICAgIHNlbGMgPT4gc2VsYy52YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09IHJlcXVpcmVzUmVhc29uLnRvTG93ZXJDYXNlKClcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gaGF2ZVNlbGVjdGVkO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjYXJzO1xuICB9XG5cbiAgZmlsdGVyQnlUcmFuc21pc3Npb25UeXBlKFxuICAgIHRyYW5taXNzaW9uczogU2VsZWN0RmlsdGVyW10sXG4gICAgY2FyczogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXlcbiAgKTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xuICAgIGNvbnN0IHNlbGVjdGVkVHJhbnNtaXNzaW9uID0gdHJhbm1pc3Npb25zLmZpbHRlcih0cmFucyA9PiB0cmFucy5zZWxlY3RlZCk7XG5cbiAgICBpZiAoc2VsZWN0ZWRUcmFuc21pc3Npb24ubGVuZ3RoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjYXJzID0gY2Fycy5maWx0ZXIoKGNhcjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PiB7XG4gICAgICAgICAgY29uc3QgdHJhbnMgPSBjYXIuaWRlbnRpZmllcnMudmVoVHlwZVsyXTtcbiAgICAgICAgICBjb25zdCBoYXZlU2VsZWN0ZWQgPSBzZWxlY3RlZFRyYW5zbWlzc2lvbi5maW5kKFxuICAgICAgICAgICAgc2VsYyA9PiBzZWxjLnZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gdHJhbnMudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIGhhdmVTZWxlY3RlZDtcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGArKysgRXJyb3IgZmlsdGVyaW5nIHRyYW5zbWlzc2lvbnM6ICR7ZXJyb3J9ICsrK2ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjYXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNvcnQgdGhlIHJlc3VsdHNcbiAgICogQHBhcmFtIHNlbGVjdGVkU29ydCAtIHRoZSBzb3J0IHdlIGhhdmUgY2hvc2VuXG4gICAqIEBwYXJhbSByZXN1bHRzIC0gb3B0aW9uYWxseSBwYXNzIGluIHRoZSByZXN1bHRzLCBpZiBub3QgcHJvdmlkZWQgLSB1c2VzIGludGVybmFsIHJlc3VsdHMgKG5vdCBmdWxsLCB3b3VsZCBjYXVzZSBpc3N1ZXMpXG4gICAqL1xuICBzb3J0UmVzdWx0cyhzZWxlY3RlZFNvcnQ6IG51bWJlciwgcmVzdWx0cz86IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xuICAgIGxldCBmdWxsUmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzID8gcmVzdWx0cyA6IHRoaXMucmVzdWx0cy52YWx1ZSk7XG5cbiAgICBzd2l0Y2ggKHNlbGVjdGVkU29ydCkge1xuICAgICAgY2FzZSAwOiAvLyBjaGVhcGVzdFxuICAgICAgICAvLyBmdWxsUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLnNvcnQoXG4gICAgICAgIC8vICAgKGE6IENhckhpcmVRdW90ZVJlc3VsdCwgYjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PiB0aGlzLmdldFByaWNlKGEpIC0gdGhpcy5nZXRQcmljZShiKVxuICAgICAgICAvLyApO1xuICAgICAgICBmdWxsUmVzdWx0cyA9IHRoaXMuc29ydENoZWFwZXN0KGZ1bGxSZXN1bHRzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6IC8vIGV4cGVuc2l2ZVxuICAgICAgICAvLyBmdWxsUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLnNvcnQoXG4gICAgICAgIC8vICAgKGE6IENhckhpcmVRdW90ZVJlc3VsdCwgYjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PiB0aGlzLmdldFByaWNlKGIpIC0gdGhpcy5nZXRQcmljZShhKVxuICAgICAgICAvLyApO1xuICAgICAgICBmdWxsUmVzdWx0cyA9IHRoaXMuc29ydEV4cGVuc2l2ZShmdWxsUmVzdWx0cyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOiAvLyBwcmVmZXJyZWQgVE9ET1xuICAgICAgICBmdWxsUmVzdWx0cyA9IHRoaXMuc29ydEJ5UHJlZmVycmVkKGZ1bGxSZXN1bHRzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6IC8vIGJyYW5kXG4gICAgICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5zb3J0QnlCcmFuZChmdWxsUmVzdWx0cyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA0OiAvLyBzaXplXG4gICAgICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5zb3J0QnlTaXplKGZ1bGxSZXN1bHRzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDU6IC8vIExvd2VzdCBFbWlzc2lvbnNcbiAgICAgICAgZnVsbFJlc3VsdHMgPSB0aGlzLnNvcnRCeUNvMihmdWxsUmVzdWx0cyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAvLyBmYWxsYmFjayB0byB3aGF0ZXZlciB3YXMgYmVmb3JlXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoZnVsbFJlc3VsdHMpO1xuICAgIHJldHVybiBmdWxsUmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBzb3J0IHRoZSByZXN1bHRzIGV4cGVuc2l2ZVxuICAgKiBAcGFyYW0gcmVzdWx0cyAtIGZ1bGwgcmVzdWx0cyBmcm9tIHNvcnQgcmVzdWx0cyBmdW5jdGlvblxuICAgKi9cblxuICBzb3J0RXhwZW5zaXZlKHJlc3VsdHM/OiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcbiAgICBjb25zdCBmdWxsUmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzID8gcmVzdWx0cyA6IHRoaXMucmVzdWx0cy52YWx1ZSk7XG4gICAgY29uc3Qgc29ydGVkUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLnNvcnQoXG4gICAgICAoYTogQ2FySGlyZVF1b3RlUmVzdWx0LCBiOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHRoaXMuZ2V0UHJpY2UoYikgLSB0aGlzLmdldFByaWNlKGEpXG4gICAgKTtcbiAgICB0aGlzLnJlc3VsdHMubmV4dChzb3J0ZWRSZXN1bHRzKTtcbiAgICByZXR1cm4gc29ydGVkUmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBzb3J0IHRoZSByZXN1bHRzIGNoZWFwZXN0XG4gICAqIEBwYXJhbSByZXN1bHRzIC0gZnVsbCByZXN1bHRzIGZyb20gc29ydCByZXN1bHRzIGZ1bmN0aW9uXG4gICAqL1xuXG4gIHNvcnRDaGVhcGVzdChyZXN1bHRzPzogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkpOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XG4gICAgY29uc3QgZnVsbFJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUocmVzdWx0cyA/IHJlc3VsdHMgOiB0aGlzLnJlc3VsdHMudmFsdWUpO1xuICAgIGNvbnN0IHNvcnRlZFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5zb3J0KFxuICAgICAgKGE6IENhckhpcmVRdW90ZVJlc3VsdCwgYjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PiB0aGlzLmdldFByaWNlKGEpIC0gdGhpcy5nZXRQcmljZShiKVxuICAgICk7XG4gICAgdGhpcy5yZXN1bHRzLm5leHQoc29ydGVkUmVzdWx0cyk7XG4gICAgcmV0dXJuIHNvcnRlZFJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gc29ydCB0aGUgcmVzdWx0cyBjbzJcbiAgICogQHBhcmFtIHJlc3VsdHMgLSBmdWxsIHJlc3VsdHMgZnJvbSBzb3J0IHJlc3VsdHMgZnVuY3Rpb25cbiAgICovXG5cbiAgc29ydEJ5Q28yKHJlc3VsdHM/OiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcbiAgICBjb25zdCBmdWxsUmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzID8gcmVzdWx0cyA6IHRoaXMucmVzdWx0cy52YWx1ZSk7XG4gICAgY29uc3Qgc29ydGVkUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLnNvcnQoXG4gICAgICAoYTogQ2FySGlyZVF1b3RlUmVzdWx0LCBiOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHRoaXMuZ2V0Q28yKGEpIC0gdGhpcy5nZXRDbzIoYilcbiAgICApO1xuICAgIHRoaXMucmVzdWx0cy5uZXh0KHNvcnRlZFJlc3VsdHMpO1xuICAgIHJldHVybiBzb3J0ZWRSZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNvcnQgdGhlIHJlc3VsdHNcbiAgICogQHBhcmFtIHJlc3VsdHMgLSBmdWxsIHJlc3VsdHMgZnJvbSBzb3J0IHJlc3VsdHMgZnVuY3Rpb25cbiAgICovXG4gIHNvcnRCeVNpemUocmVzdWx0cz86IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xuICAgIGNvbnN0IGZ1bGxSZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdHMgPyByZXN1bHRzIDogdGhpcy5yZXN1bHRzLnZhbHVlKTtcbiAgICBjb25zdCBzb3J0ZWRSZXN1bHRzID0gZnVsbFJlc3VsdHMuc29ydCgoYTogQ2FySGlyZVF1b3RlUmVzdWx0LCBiOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcbiAgICAgIGNvbnN0IGFWYWwgPSB0aGlzLmNhckNsYXNzTWFwW2EuZGlzcGxheVJlY29yZD8udmVoaWNsZT8uY2xhc3M/LnNwbGl0KC8oPz1bQS1aXSkvKS5qb2luKCcgJykudG9Mb3dlckNhc2UoKV0gPz8gdGhpcy5jYXJDbGFzc01hcFsndW5yZWNvZ25pemVkJ107XG4gICAgICBjb25zdCBiVmFsID0gdGhpcy5jYXJDbGFzc01hcFtiLmRpc3BsYXlSZWNvcmQ/LnZlaGljbGU/LmNsYXNzPy5zcGxpdCgvKD89W0EtWl0pLykuam9pbignICcpLnRvTG93ZXJDYXNlKCldID8/IHRoaXMuY2FyQ2xhc3NNYXBbJ3VucmVjb2duaXplZCddO1xuXG4gICAgICByZXR1cm4gYVZhbCAtIGJWYWw7XG4gICAgfSk7XG4gICAgdGhpcy5yZXN1bHRzLm5leHQoc29ydGVkUmVzdWx0cyk7XG4gICAgcmV0dXJuIHNvcnRlZFJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gc29ydCB0aGUgcmVzdWx0c1xuICAgKiBAcGFyYW0gcmVzdWx0cyAtIGZ1bGwgcmVzdWx0cyBmcm9tIHNvcnQgcmVzdWx0cyBmdW5jdGlvblxuICAgKi9cbiAgc29ydEJ5QnJhbmQocmVzdWx0cz86IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xuICAgIGNvbnN0IGZ1bGxSZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdHMgPyByZXN1bHRzIDogdGhpcy5yZXN1bHRzLnZhbHVlKTtcbiAgICBjb25zdCBzb3J0ZWRSZXN1bHRzID0gZnVsbFJlc3VsdHMuc29ydCgoYTogQ2FySGlyZVF1b3RlUmVzdWx0LCBiOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcbiAgICAgIGxldCBicmFuZEEgPSBhLmlkZW50aWZpZXJzLnZlbmRvcjtcbiAgICAgIGxldCBicmFuZEIgPSBiLmlkZW50aWZpZXJzLnZlbmRvcjtcblxuICAgICAgLy8gc3dpdGNoaW5nIGFzIHRoZXNlIHN0cmluZ3MgZG9uJ3QgbWF0Y2ggdGhlIGJyYW5kIG5hbWVcbiAgICAgIHN3aXRjaCAoYnJhbmRBKSB7XG4gICAgICAgIGNhc2UgJ1pFJzpcbiAgICAgICAgICBicmFuZEEgPSAnSEUnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdaSSc6XG4gICAgICAgICAgYnJhbmRBID0gJ0FWJztcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChicmFuZEIpIHtcbiAgICAgICAgY2FzZSAnWkUnOlxuICAgICAgICAgIGJyYW5kQiA9ICdIRSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1pJJzpcbiAgICAgICAgICBicmFuZEIgPSAnQVYnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoYnJhbmRBIDwgYnJhbmRCKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSBpZiAoYnJhbmRBID4gYnJhbmRCKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc3VsdHMubmV4dChzb3J0ZWRSZXN1bHRzKTtcbiAgICByZXR1cm4gc29ydGVkUmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBzb3J0IHRoZSByZXN1bHRzXG4gICAqIEBwYXJhbSByZXN1bHRzIC0gZnVsbCByZXN1bHRzIGZyb20gc29ydCByZXN1bHRzIGZ1bmN0aW9uXG4gICAqL1xuICBzb3J0QnlQcmVmZXJyZWQocmVzdWx0cz86IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xuICAgIGNvbnN0IGZ1bGxSZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdHMgPyByZXN1bHRzIDogdGhpcy5yZXN1bHRzLnZhbHVlKTtcbiAgICBjb25zdCBzb3J0ZWRSZXN1bHRzID0gZnVsbFJlc3VsdHMuc29ydCgoYTogQ2FySGlyZVF1b3RlUmVzdWx0LCBiOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcbiAgICAgIGNvbnN0IGFQcmVmID0gYS50bWNQcmVmZXJyZWQgfHwgYS5jb21wYW55UHJlZmVycmVkIHx8IGEub2ZmaWNlUHJlZmVycmVkID8gMSA6IDA7XG4gICAgICBjb25zdCBiUHJlZiA9IGIudG1jUHJlZmVycmVkIHx8IGIuY29tcGFueVByZWZlcnJlZCB8fCBiLm9mZmljZVByZWZlcnJlZCA/IDEgOiAwO1xuICAgICAgaWYgKGFQcmVmID4gYlByZWYpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIGlmIChhUHJlZiA8IGJQcmVmKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5yZXN1bHRzLm5leHQoc29ydGVkUmVzdWx0cyk7XG4gICAgcmV0dXJuIHNvcnRlZFJlc3VsdHM7XG4gIH1cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCB0aGUgcHJpY2Ugb2YgYSBpbmRpdmlkdWFsIGNhclxuICAgKi9cbiAgZ2V0UHJpY2UoY2FyOiBDYXJIaXJlUXVvdGVSZXN1bHQpOiBudW1iZXIge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gTnVtYmVyKGNhci5kaXNwbGF5UmVjb3JkLmNoYXJnZXNbMF0uYW1vdW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge31cblxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCB0aGUgY28yIG9mIGEgaW5kaXZpZHVhbCBjYXJcbiAgICovXG4gIGdldENvMihjYXI6IENhckhpcmVRdW90ZVJlc3VsdCk6IG51bWJlciB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBOdW1iZXIoY2FyLmNvMlBlckl0ZW0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBnZXRNaW5QcmljZShjYXJzOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGNhcnMucmVkdWNlKChtaW46IG51bWJlciwgY2FyOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcbiAgICAgIGNvbnN0IHByaWNlID0gdGhpcy5nZXRQcmljZShjYXIpO1xuICAgICAgaWYgKHByaWNlIDwgbWluKSB7XG4gICAgICAgIG1pbiA9IHByaWNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1pbjtcbiAgICB9LCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7XG4gIH1cblxuICBnZXRNYXhQcmljZShjYXJzOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGNhcnMucmVkdWNlKChtYXg6IG51bWJlciwgY2FyOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcbiAgICAgIGNvbnN0IHByaWNlID0gdGhpcy5nZXRQcmljZShjYXIpO1xuICAgICAgaWYgKHByaWNlID4gbWF4KSB7XG4gICAgICAgIG1heCA9IHByaWNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1heDtcbiAgICB9LCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUik7XG4gIH1cblxuICB1cGRhdGVTZWFyY2hGcm9tRXhwaXJlZEJhc2tldEl0ZW0oYmFza2V0SXRlbTogQmFza2V0SXRlbSwgc2V0RGF0ZVRpbWU6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgY29uc3Qgc2VhcmNoQ2FySGlyZVF1ZXJ5OiBTZWFyY2hDYXJIaXJlUXVlcnlWYXJpYWJsZXMgPSBiYXNrZXRJdGVtLnNlYXJjaFF1ZXJ5O1xuICAgIGlmIChzZWFyY2hDYXJIaXJlUXVlcnkpIHtcbiAgICAgIGlmIChzZXREYXRlVGltZSkge1xuICAgICAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWUgPSBtb21lbnQoc2VhcmNoQ2FySGlyZVF1ZXJ5LmRyb3BvZmZEYXRlVGltZSk7XG4gICAgICAgIHRoaXMucGlja3VwX2RhdGV0aW1lID0gbW9tZW50KHNlYXJjaENhckhpcmVRdWVyeS5waWNrdXBEYXRlVGltZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFF1ZXJ5RnJvbUJhc2tldEl0ZW0oYmFza2V0SXRlbSk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRUcmF2ZWxsZXJzRnJvbUJhc2tldEl0ZW0oYmFza2V0SXRlbSk7XG4gIH1cblxuICB1cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhwcmV2aW91c0l0ZW1zOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1BSRVBPUFVMQVRJTkcgQ0FSSElSRSBGT1JNJyk7XG4gICAgY29uc3QgZmxpZ2h0SXRlbTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMgPVxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5GbGlnaHRdPy5zZWFyY2hRdWVyeTtcbiAgICBjb25zdCByYWlsSXRlbTogU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzID0gcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5SYWlsXT8uc2VhcmNoUXVlcnk7XG4gICAgY29uc3QgaG90ZWxJdGVtOiBTZWFyY2hIb3RlbHNRdWVyeVZhcmlhYmxlcyA9IHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuUmFpbF0/LnNlYXJjaFF1ZXJ5O1xuICAgIGNvbnN0IGlybEl0ZW06IFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzID1cbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWxdPy5zZWFyY2hRdWVyeTtcbiAgICBpZiAoZmxpZ2h0SXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0ub3V0Qm91bmREYXRlLnRvRGF0ZSgpO1xuICAgICAgICBjb25zdCBlbmREYXRlID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0uaW5ib3VuZERhdGUudG9EYXRlKCk7XG4gICAgICAgIHRoaXMubG9jYXRpb25UeXBlID0gTG9jYXRpb25UeXBlcy5BaXJwb3J0O1xuICAgICAgICB0aGlzLnBpY2t1cF9kYXRldGltZSA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdLm91dEJvdW5kRGF0ZTtcbiAgICAgICAgdGhpcy5kcm9wb2ZmX2RhdGV0aW1lID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0uaW5ib3VuZERhdGU7XG4gICAgICAgIHRoaXMucGlja3VwX2RhdGUgPSB7XG4gICAgICAgICAgZGF5OiBzdGFydERhdGUuZ2V0VVRDRGF0ZSgpLFxuICAgICAgICAgIG1vbnRoOiBzdGFydERhdGUuZ2V0VVRDTW9udGgoKSArIDEsXG4gICAgICAgICAgeWVhcjogc3RhcnREYXRlLmdldFVUQ0Z1bGxZZWFyKClcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kcm9wb2ZmX2RhdGUgPSB7XG4gICAgICAgICAgZGF5OiBlbmREYXRlLmdldFVUQ0RhdGUoKSxcbiAgICAgICAgICBtb250aDogZW5kRGF0ZS5nZXRVVENNb250aCgpICsgMSxcbiAgICAgICAgICB5ZWFyOiBlbmREYXRlLmdldFVUQ0Z1bGxZZWFyKClcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5waWNrdXBfbG9jYXRpb24gPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XVxuICAgICAgICAgIC5hcnJpdmVMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlscztcbiAgICAgICAgdGhpcy5kcm9wb2ZmX2xvY2F0aW9uID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF1cbiAgICAgICAgICAuYXJyaXZlTG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHM7XG4gICAgICAgIHRoaXMucGlja3VwX2NvdW50cnkgPSAoXG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0uYXJyaXZlTG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHNcbiAgICAgICAgKS5jb3VudHJ5Q29kZTtcbiAgICAgICAgdGhpcy5kcm9wb2ZmX2NvdW50cnkgPSAoXG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0uYXJyaXZlTG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHNcbiAgICAgICAgKS5jb3VudHJ5Q29kZTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgY2FyaGlyZSBmcm9tIGZsaWdodCBpdGVtJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyYWlsSXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdLm91dEJvdW5kRGF0ZVRpbWUudG9EYXRlKCk7XG4gICAgICAgIGNvbnN0IGVuZERhdGUgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0uaW5Cb3VuZERhdGVUaW1lLnRvRGF0ZSgpO1xuICAgICAgICB0aGlzLnBpY2t1cF9kYXRldGltZSA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXS5vdXRCb3VuZERhdGVUaW1lO1xuICAgICAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWUgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0uaW5Cb3VuZERhdGVUaW1lO1xuICAgICAgICB0aGlzLnBpY2t1cF9kYXRlID0ge1xuICAgICAgICAgIGRheTogc3RhcnREYXRlLmdldFVUQ0RhdGUoKSxcbiAgICAgICAgICBtb250aDogc3RhcnREYXRlLmdldFVUQ01vbnRoKCkgKyAxLFxuICAgICAgICAgIHllYXI6IHN0YXJ0RGF0ZS5nZXRVVENGdWxsWWVhcigpXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZHJvcG9mZl9kYXRlID0ge1xuICAgICAgICAgIGRheTogZW5kRGF0ZS5nZXRVVENEYXRlKCksXG4gICAgICAgICAgbW9udGg6IGVuZERhdGUuZ2V0VVRDTW9udGgoKSArIDEsXG4gICAgICAgICAgeWVhcjogZW5kRGF0ZS5nZXRVVENGdWxsWWVhcigpXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGNhcmhpcmUgZnJvbSByYWlsIGl0ZW0nKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlybEl0ZW0pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9XG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXS5vdXRCb3VuZERhdGVUaW1lLnRvRGF0ZSgpO1xuICAgICAgICBjb25zdCBlbmREYXRlID1cbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbXG4gICAgICAgICAgICBTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbFxuICAgICAgICAgIF0ucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUudG9EYXRlKCk7XG4gICAgICAgIHRoaXMucGlja3VwX2RhdGV0aW1lID1cbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWxdLm91dEJvdW5kRGF0ZVRpbWU7XG4gICAgICAgIHRoaXMuZHJvcG9mZl9kYXRldGltZSA9XG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXS5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZTtcbiAgICAgICAgdGhpcy5waWNrdXBfZGF0ZSA9IHtcbiAgICAgICAgICBkYXk6IHN0YXJ0RGF0ZS5nZXRVVENEYXRlKCksXG4gICAgICAgICAgbW9udGg6IHN0YXJ0RGF0ZS5nZXRVVENNb250aCgpICsgMSxcbiAgICAgICAgICB5ZWFyOiBzdGFydERhdGUuZ2V0VVRDRnVsbFllYXIoKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRyb3BvZmZfZGF0ZSA9IHtcbiAgICAgICAgICBkYXk6IGVuZERhdGUuZ2V0VVRDRGF0ZSgpLFxuICAgICAgICAgIG1vbnRoOiBlbmREYXRlLmdldFVUQ01vbnRoKCkgKyAxLFxuICAgICAgICAgIHllYXI6IGVuZERhdGUuZ2V0VVRDRnVsbFllYXIoKVxuICAgICAgICB9O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBjYXJoaXJlIGZyb20gaW50ZXJuYXRpb25hbCByYWlsIGl0ZW0nKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhvdGVsSXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkhvdGVsXS5jaGVja2luX2RhdGUudG9EYXRlKCk7XG4gICAgICAgIGNvbnN0IGVuZERhdGUgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdLmNoZWNrb3V0X2RhdGUudG9EYXRlKCk7XG4gICAgICAgIC8vIHRoaXMubG9jYXRpb25UeXBlID0gTG9jYXRpb25UeXBlcy47XG4gICAgICAgIHRoaXMucGlja3VwX2RhdGV0aW1lID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkhvdGVsXS5jaGVja2luX2RhdGU7XG4gICAgICAgIHRoaXMuZHJvcG9mZl9kYXRldGltZSA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Ib3RlbF0uY2hlY2tvdXRfZGF0ZTtcbiAgICAgICAgdGhpcy5waWNrdXBfZGF0ZSA9IHtcbiAgICAgICAgICBkYXk6IHN0YXJ0RGF0ZS5nZXRVVENEYXRlKCksXG4gICAgICAgICAgbW9udGg6IHN0YXJ0RGF0ZS5nZXRVVENNb250aCgpICsgMSxcbiAgICAgICAgICB5ZWFyOiBzdGFydERhdGUuZ2V0VVRDRnVsbFllYXIoKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRyb3BvZmZfZGF0ZSA9IHtcbiAgICAgICAgICBkYXk6IGVuZERhdGUuZ2V0VVRDRGF0ZSgpLFxuICAgICAgICAgIG1vbnRoOiBlbmREYXRlLmdldFVUQ01vbnRoKCkgKyAxLFxuICAgICAgICAgIHllYXI6IGVuZERhdGUuZ2V0VVRDRnVsbFllYXIoKVxuICAgICAgICB9O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBjYXJoaXJlIGZyb20gaG90ZWwgaXRlbScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vICFkYXRlIGFuZCB0aW1lIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgZm9yIExVXG4gIHByaXZhdGUgX3VwZGF0ZVBpY2t1cERhdGVUaW1lKCkge1xuICAgIGlmICh0aGlzLl9waWNrdXBfZGF0ZSAmJiB0aGlzLl9waWNrdXBfdGltZSkge1xuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9waWNrdXBfZGF0ZSwgdGhpcy5fcGlja3VwX3RpbWUpO1xuICAgICAgdGhpcy5waWNrdXBfZGF0ZXRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xuICAgICAgdGhpcy5faXNWYWxpZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZURyb3BvZmZEYXRlVGltZSgpIHtcbiAgICBpZiAodGhpcy5fZHJvcG9mZl9kYXRlICYmIHRoaXMuX2Ryb3BvZmZfdGltZSkge1xuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9kcm9wb2ZmX2RhdGUsIHRoaXMuX2Ryb3BvZmZfdGltZSk7XG4gICAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xuICAgICAgdGhpcy5faXNWYWxpZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZU5nYlBpY2t1cERhdGVUaW1lKCkge1xuICAgIGlmICh0aGlzLl9uZ2JQaWNrdXBEYXRlICYmIHRoaXMuX3BpY2t1cFRpbWUpIHtcbiAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5fbmdiUGlja3VwRGF0ZSwgdGhpcy5fcGlja3VwVGltZSk7XG4gICAgICB0aGlzLnBpY2t1cF9kYXRldGltZSA9IHRpbWUuaXNWYWxpZCgpID8gdGltZSA6IG51bGw7XG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlTmdiRHJvcG9mZkRhdGVUaW1lKCkge1xuICAgIGlmICh0aGlzLl9uZ2JEcm9wb2ZmRGF0ZSAmJiB0aGlzLl9kcm9wb2ZmVGltZSkge1xuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9uZ2JEcm9wb2ZmRGF0ZSwgdGhpcy5fZHJvcG9mZlRpbWUpO1xuICAgICAgdGhpcy5kcm9wb2ZmX2RhdGV0aW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgICB9XG4gIH1cblxuICBpc092ZXJOaWdodCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBvdXR3YXJkRGF5ID0gdGhpcy5waWNrdXBfZGF0ZXRpbWUuZGF0ZSgpO1xuICAgIGNvbnN0IHJldHVybkRheSA9IHRoaXMuZHJvcG9mZl9kYXRldGltZS5kYXRlKCk7XG4gICAgaWYgKHJldHVybkRheSAtIG91dHdhcmREYXkgPj0gMSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogSUNoZWFwZXN0UHJpY2Uge1xuICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IG1pblByaWNlID0gdGhpcy5nZXRNaW5QcmljZShyZXN1bHRzKTtcbiAgICByZXR1cm4ge1xuICAgICAgYW1vdW50OiBtaW5QcmljZSxcbiAgICAgIGN1cnJlbmN5Q29kZTogcmVzdWx0c1swXS5kaXNwbGF5UmVjb3JkLmNoYXJnZXNbMF0uY3VycmVuY3lDb2RlXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgdGhlIGF2YWlsYWJpbGl0eSBkZXRhaWxzIGZvciBhIHBhcnRpY3VsYXIgY2FyIGhpcmUgcmVzdWx0IHVzaW5nIGxvY2F0aW9uRGV0YWlscyBwYXJhbVxuICAgKiBAcGFyYW0gbG9jYXRpb25EZXRhaWxzIC0gZS5nLiB0YWtlbiBmcm9tIHJlc3BvbnNlIGRhdGEgaW4gc2VhcmNoQ2FySGlyZSBxdWVyeVxuICAgKiBAcGFyYW0gaXNMb2FkaW5nIGJlaGF2aW91clN1YmplY3QgZm9yIGhhbmRsaW5nIGxvYWRpbmcgc3Bpbm5lciBzdGF0ZSBvZiByZXF1ZXN0XG4gICAqL1xuICBnZXRDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsKFxuICAgIGxvY2F0aW9uRGV0YWlsczogQ2FySGlyZUlucHV0SWRlbnRpZmllcnMsXG4gICAgaXNMb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cbiAgKTogT2JzZXJ2YWJsZTxDYXJIaXJlRGV0YWlsUmVxdWVzdFJlc3BvbnNlPiB7XG4gICAgaWYgKCFpc0xvYWRpbmcudmFsdWUpIHtcbiAgICAgIGlzTG9hZGluZy5uZXh0KHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlci5mZXRjaExpc3QoeyBsb2NhdGlvbkRldGFpbHMgfSkucGlwZShcbiAgICAgIHRha2UoMSksXG4gICAgICBtYXAoKHJlc3VsdDogQ2FySGlyZURldGFpbFJlcXVlc3RSZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoaXNMb2FkaW5nLnZhbHVlKSB7XG4gICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICBAZGVzYyAtIGZvciBhIGdpdmVuIHJlc3VsdCByZXR1cm4gdGhlIHR5cGUgc3RyaW5nIGZvciB2YW5pdHkgcHVycG9zZXMgZm9yIGEgdmVoaWNsZSAodXRpbGlzaW5nIGNhclR5cGVDb2RlcyBpbiBvYnRzZXJ2aWNlcylcbiAgICBAcGFyYW0gcmVzdWx0IG9mIHR5cGUgc3RyaW5nXG4gICAgQHJldHVybnMgdGhlIGNhciB0eXBlIHN0cmluZyBlLmcuICcyLTMgRG9vcicgaW5zdGVhZCBvZiAnVHdvVG9UaHJlZURvb3InIHJhdyB0eXBlXG4gICoqL1xuICBnZXRDYXJUeXBlRm9yRGlzcGxheShjYXJUeXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVGb3JEaXNwbGF5ID0gdGhpcy5jYXJUeXBlQ29kZXMuZmluZChjYXJUeXBlQ29kZSA9PiBjYXJUeXBlQ29kZVsyXSA9PT0gY2FyVHlwZSk7XG4gICAgaWYgKHR5cGVGb3JEaXNwbGF5KSB7XG4gICAgICByZXR1cm4gdHlwZUZvckRpc3BsYXlbMV07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIGFkZCBjYXIgaGlyZSB0byBiYXNrZXRcbiAgICovXG4gIGFzeW5jIGFkZENhckhpcmVUb0Jhc2tldChcbiAgICBjYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eTogQ2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHksXG4gICAgY2FySGlyZVF1ZXJ5OiBTZWFyY2hDYXJIaXJlUXVlcnlWYXJpYWJsZXMsXG4gICAgaWdub3JlSW52b2tlZDogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGdtdDogYm9vbGVhbiA9IGZhbHNlXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xuICAgIGlmIChjYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eS51bmF2YWlsYWJsZSAmJiAhdGhpcy51c2VyU2VydmljZS5jYW5PdmVycmlkZSgpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID0gYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XG4gICAgaWYgKGJhc2tldCkge1xuICAgICAgY29uc3QgeyBjbzJQZXJJdGVtLCBjbzJQZXJQYXNzZW5nZXIsIGRpc3BsYXlSZWNvcmQsIGlkZW50aWZpZXJzLCBzb3VyY2VJZCB9ID1cbiAgICAgICAgY2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHk7XG5cbiAgICAgIGxldCBjb250YWN0TnVtYmVyID0gJyc7XG5cbiAgICAgIGlmIChjYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eS5zb3VyY2UgPT09ICBTZXJ2aWNlUHJvdmlkZXIuU2FicmVDYXJIaXJlKSB7XG4gICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCB0aGlzLmNhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyXG4gICAgICAgICAgLmZldGNoTGlzdCh7XG4gICAgICAgICAgICBsb2NhdGlvbkRldGFpbHM6IHtcbiAgICAgICAgICAgICAgZHJvcE9mZkRhdGVUaW1lOiBpZGVudGlmaWVycy5kcm9wT2ZmRGF0ZVRpbWUsXG4gICAgICAgICAgICAgIHBpY2tVcERhdGVUaW1lOiBpZGVudGlmaWVycy5waWNrVXBEYXRlVGltZSxcbiAgICAgICAgICAgICAgcGlja1VwRXh0ZW5kZWRMb2NhdGlvbkNvZGU6IGlkZW50aWZpZXJzLnBpY2tVcEV4dGVuZGVkTG9jYXRpb25Db2RlLFxuICAgICAgICAgICAgICBwaWNrVXBMb2NhdGlvbkNvZGU6IGlkZW50aWZpZXJzLnBpY2tVcExvY2F0aW9uQ29kZSxcbiAgICAgICAgICAgICAgcGlja1VwTG9jYXRpb25OYW1lOiBpZGVudGlmaWVycy5waWNrVXBMb2NhdGlvbk5hbWUsXG4gICAgICAgICAgICAgIGxvY2F0b3I6ICcnLFxuICAgICAgICAgICAgICBycGg6ICcnLFxuICAgICAgICAgICAgICB2ZWhUeXBlOiBpZGVudGlmaWVycy52ZWhUeXBlLFxuICAgICAgICAgICAgICB2ZW5kb3I6IGlkZW50aWZpZXJzLnZlbmRvcixcbiAgICAgICAgICAgICAgc2VydmljZTogY2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHkuc291cmNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBtYXAoKHJlc3VsdDogQ2FySGlyZURldGFpbFJlcXVlc3RSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnRvUHJvbWlzZSgpO1xuXG4gICAgICAgIGlmIChpbmZvLmFkZGl0aW9uYWxJbmZvKSB7XG4gICAgICAgICAgaW5mby5hZGRpdGlvbmFsSW5mby5zb21lKGV4dHJhID0+IHtcbiAgICAgICAgICAgIGlmIChleHRyYS5uYW1lID09PSAnQ29udGFjdCBOdW1iZXJzJyAmJiBleHRyYS50ZXh0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgY29udGFjdE51bWJlciA9IGV4dHJhLnRleHRbMF07XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByaWNlID0gcGFyc2VGbG9hdChkaXNwbGF5UmVjb3JkPy5jaGFyZ2VzWzBdPy5hbW91bnQgPz8gJzAnKTtcblxuICAgICAgaWYgKCFkaXNwbGF5UmVjb3JkLnJldHVybkxvY2F0aW9uKSB7XG4gICAgICAgIGlkZW50aWZpZXJzLmRyb3BPZmZMb2NhdGlvbkNvZGUgPSBpZGVudGlmaWVycy5waWNrVXBMb2NhdGlvbkNvZGU7XG4gICAgICAgIGRpc3BsYXlSZWNvcmQucmV0dXJuTG9jYXRpb24gPSBkaXNwbGF5UmVjb3JkLnBpY2t1cExvY2F0aW9uO1xuICAgICAgfVxuXG4gICAgICBsZXQgdHBvcnRJZGVudGlmaWVyczogYW55ID0ge1xuICAgICAgICBhaXJjb246IG51bGwsXG4gICAgICAgIGNhdGVnb3J5OiBudWxsLFxuICAgICAgICBkb29yQ291bnQ6IG51bGwsXG4gICAgICAgIGNsYXNzOiBudWxsLFxuICAgICAgICB0cmFuc21pc3Npb246IG51bGxcbiAgICAgIH07XG5cbiAgICAgIGxldCBlbnRlcnByaXNlSWRlbnRpZmllcnM6IGFueSA9IHtcbiAgICAgICAgZHJpdmVyQWdlOiBudWxsLFxuICAgICAgICBjYXRlZ29yeTogbnVsbCxcbiAgICAgIH1cblxuICAgICAgaWYgKGNhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5LnNvdXJjZSA9PT0gU2VydmljZVByb3ZpZGVyLlRyYXZlbHBvcnRDYXJIaXJlKSB7XG4gICAgICAgICh0cG9ydElkZW50aWZpZXJzLmFpcmNvbiA9IGRpc3BsYXlSZWNvcmQudmVoaWNsZS5haXJjb24pLFxuICAgICAgICAgICh0cG9ydElkZW50aWZpZXJzLmNhdGVnb3J5ID0gaWRlbnRpZmllcnMuY2F0ZWdvcnkpLFxuICAgICAgICAgICh0cG9ydElkZW50aWZpZXJzLmRvb3JDb3VudCA9IGlkZW50aWZpZXJzLmRvb3JDb3VudCksXG4gICAgICAgICAgKHRwb3J0SWRlbnRpZmllcnMuY2xhc3MgPSBkaXNwbGF5UmVjb3JkLnZlaGljbGUuY2xhc3MpLFxuICAgICAgICAgICh0cG9ydElkZW50aWZpZXJzLnRyYW5zbWlzc2lvbiA9IGRpc3BsYXlSZWNvcmQudmVoaWNsZS50cmFuc21pc3Npb24pO1xuICAgICAgfVxuXG4gICAgICBpZihjYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eS5zb3VyY2UgPT09IFNlcnZpY2VQcm92aWRlci5FbnRlcnByaXNlQ2FySGlyZSkge1xuICAgICAgICBlbnRlcnByaXNlSWRlbnRpZmllcnMuZHJpdmVyQWdlID0gY2FySGlyZVF1ZXJ5LmRyaXZlckFnZVxuICAgICAgICBlbnRlcnByaXNlSWRlbnRpZmllcnMuY2F0ZWdvcnkgPSBpZGVudGlmaWVycy5jYXRlZ29yeVxuICAgICAgfVxuICAgICAgY29uc3Qgc2VhcmNoUXVlcnkgPSAgdGhpcy5nZXRTZWFyY2hRdWVyeSgpXG4gICAgICBjb25zdCBwaWNrdXBDb3VudHJ5Q29kZSA9IHNlYXJjaFF1ZXJ5LmFpcnBvcnQgPyBzZWFyY2hRdWVyeS5haXJwb3J0LnBpY2t1cENvdW50cnlDb2RlIDogXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFF1ZXJ5LmNpdHkgPyBzZWFyY2hRdWVyeS5jaXR5LnBpY2t1cENvdW50cnlDb2RlIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoUXVlcnkubG9jYXRpb24/LnBpY2t1cENvdW50cnlDb2RlO1xuICAgICAgY29uc3QgZHJvcG9mZkNvdW50cnlDb2RlID0gc2VhcmNoUXVlcnkuYWlycG9ydCA/IHNlYXJjaFF1ZXJ5LmFpcnBvcnQuZHJvcG9mZkNvdW50cnlDb2RlIDogXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoUXVlcnkuY2l0eSA/IHNlYXJjaFF1ZXJ5LmNpdHkuZHJvcG9mZkNvdW50cnlDb2RlIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hRdWVyeS5sb2NhdGlvbj8uZHJvcG9mZkNvdW50cnlDb2RlO1xuXG5cbiAgICAgIGNvbnN0IHdoYXRIYXBwZW5lZCA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcbiAgICAgICAge1xuICAgICAgICAgIGFkdWx0czogdGhpcy5hZHVsdHMsXG4gICAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXG4gICAgICAgICAgc2VydmljZTogc291cmNlSWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIHBpY2t1cENvdW50cnlDb2RlLFxuICAgICAgICAgICAgZHJvcG9mZkNvdW50cnlDb2RlLFxuICAgICAgICAgICAgbG9jYXRpb25UeXBlOiB0aGlzLmxvY2F0aW9uVHlwZSxcbiAgICAgICAgICAgIHBpY2tVcERhdGV0aW1lOiBkaXNwbGF5UmVjb3JkLnBpY2t1cCxcbiAgICAgICAgICAgIGRyb3BPZmZEYXRldGltZTogZGlzcGxheVJlY29yZC5kcm9wb2ZmLFxuICAgICAgICAgICAgcGlja1VwTG9jYXRpb246IHtcbiAgICAgICAgICAgICAgaWF0YTpcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2F0aW9uVHlwZSA9PT0gTG9jYXRpb25UeXBlcy5BaXJwb3J0ID8gaWRlbnRpZmllcnMucGlja1VwTG9jYXRpb25Db2RlIDogJycsXG4gICAgICAgICAgICAgIG5hbWU6IGRpc3BsYXlSZWNvcmQucGlja3VwTG9jYXRpb24ubmFtZSA/IGRpc3BsYXlSZWNvcmQucGlja3VwTG9jYXRpb24ubmFtZSA6ICcnLFxuICAgICAgICAgICAgICBhZGRyZXNzOiBgJHtkaXNwbGF5UmVjb3JkLnBpY2t1cExvY2F0aW9uLnRvcExpbmV9LCAke2Rpc3BsYXlSZWNvcmQucGlja3VwTG9jYXRpb24uY2l0eX1gLFxuICAgICAgICAgICAgICBwb3N0Y29kZTogZGlzcGxheVJlY29yZC5waWNrdXBMb2NhdGlvbi5wb3N0Q29kZVxuICAgICAgICAgICAgICAgID8gZGlzcGxheVJlY29yZC5waWNrdXBMb2NhdGlvbi5wb3N0Q29kZVxuICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkcm9wT2ZmTG9jYXRpb246IHtcbiAgICAgICAgICAgICAgaWF0YTpcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2F0aW9uVHlwZSA9PT0gTG9jYXRpb25UeXBlcy5BaXJwb3J0ID8gaWRlbnRpZmllcnMuZHJvcE9mZkxvY2F0aW9uQ29kZSA6ICcnLFxuICAgICAgICAgICAgICBuYW1lOiBkaXNwbGF5UmVjb3JkLnJldHVybkxvY2F0aW9uLm5hbWUgPyBkaXNwbGF5UmVjb3JkLnJldHVybkxvY2F0aW9uLm5hbWUgOiAnJyxcbiAgICAgICAgICAgICAgYWRkcmVzczogYCR7ZGlzcGxheVJlY29yZC5yZXR1cm5Mb2NhdGlvbi50b3BMaW5lfSwgJHtkaXNwbGF5UmVjb3JkLnJldHVybkxvY2F0aW9uLmNpdHl9YCxcbiAgICAgICAgICAgICAgcG9zdGNvZGU6IGRpc3BsYXlSZWNvcmQucmV0dXJuTG9jYXRpb24ucG9zdENvZGVcbiAgICAgICAgICAgICAgICA/IGRpc3BsYXlSZWNvcmQucmV0dXJuTG9jYXRpb24ucG9zdENvZGVcbiAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FyOiB7XG4gICAgICAgICAgICAgIHR5cGU6IGRpc3BsYXlSZWNvcmQudmVoaWNsZS50eXBlLFxuICAgICAgICAgICAgICBjbGFzczogZGlzcGxheVJlY29yZC52ZWhpY2xlLmNsYXNzLFxuICAgICAgICAgICAgICBtYW51YWxUcmFuc21pc3Npb246IGRpc3BsYXlSZWNvcmQudmVoaWNsZS50cmFuc21pc3Npb24uaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgQ2FySGlyZVRyYW5zbWlzc2lvbi5NYW51YWxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhcmVJbmZvOiB7XG4gICAgICAgICAgICAgIHRpdGxlOiBjYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eT8uZmFyZUluZm8/LnRpdGxlLFxuICAgICAgICAgICAgICB0eXBlOiBjYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eT8uZmFyZUluZm8/LnR5cGUsXG4gICAgICAgICAgICAgIGNvZGU6IGNhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5Py5mYXJlSW5mbz8uY29kZSxcbiAgICAgICAgICAgICAgc3VwcGxpZXJDb2RlOiBjYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eT8uZmFyZUluZm8/LnN1cHBsaWVyQ29kZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlbmRvck5hbWU6IGRpc3BsYXlSZWNvcmQudmVuZG9yLm5hbWUsXG4gICAgICAgICAgICBpZGVudGlmaWVyczoge1xuICAgICAgICAgICAgICBwaWNrVXBMb2NhdGlvbjogaWRlbnRpZmllcnMucGlja1VwTG9jYXRpb24gPyBpZGVudGlmaWVycy5waWNrVXBMb2NhdGlvbiA6ICcnLFxuICAgICAgICAgICAgICBwaWNrVXBMb2NhdGlvbkNvZGU6IGlkZW50aWZpZXJzLnBpY2tVcExvY2F0aW9uQ29kZVxuICAgICAgICAgICAgICAgID8gaWRlbnRpZmllcnMucGlja1VwTG9jYXRpb25Db2RlXG4gICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgcGlja1VwRXh0ZW5kZWRMb2NhdGlvbkNvZGU6IGlkZW50aWZpZXJzLnBpY2tVcEV4dGVuZGVkTG9jYXRpb25Db2RlXG4gICAgICAgICAgICAgICAgPyBpZGVudGlmaWVycy5waWNrVXBFeHRlbmRlZExvY2F0aW9uQ29kZVxuICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgIHBpY2tVcExvY2F0aW9uTmFtZTogaWRlbnRpZmllcnMucGlja1VwTG9jYXRpb25OYW1lXG4gICAgICAgICAgICAgICAgPyBpZGVudGlmaWVycy5waWNrVXBMb2NhdGlvbk5hbWVcbiAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICBkcm9wT2ZmTG9jYXRpb246IGlkZW50aWZpZXJzLmRyb3BPZmZMb2NhdGlvbiA/IGlkZW50aWZpZXJzLmRyb3BPZmZMb2NhdGlvbiA6ICcnLFxuICAgICAgICAgICAgICBkcm9wT2ZmTG9jYXRpb25Db2RlOiBpZGVudGlmaWVycy5kcm9wT2ZmTG9jYXRpb25Db2RlXG4gICAgICAgICAgICAgICAgPyBpZGVudGlmaWVycy5kcm9wT2ZmTG9jYXRpb25Db2RlXG4gICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlOiBpZGVudGlmaWVycy5kcm9wT2ZmRXh0ZW5kZWRMb2NhdGlvbkNvZGVcbiAgICAgICAgICAgICAgICA/IGlkZW50aWZpZXJzLmRyb3BPZmZFeHRlbmRlZExvY2F0aW9uQ29kZVxuICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgIGRyb3BPZmZMb2NhdGlvbk5hbWU6IGlkZW50aWZpZXJzLmRyb3BPZmZMb2NhdGlvbk5hbWVcbiAgICAgICAgICAgICAgICA/IGlkZW50aWZpZXJzLmRyb3BPZmZMb2NhdGlvbk5hbWVcbiAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICB2ZWhUeXBlOiBpZGVudGlmaWVycy52ZWhUeXBlLFxuICAgICAgICAgICAgICB2ZW5kb3I6IGlkZW50aWZpZXJzLnZlbmRvcixcbiAgICAgICAgICAgICAgY29udGFjdE51bWJlcjogY29udGFjdE51bWJlcixcbiAgICAgICAgICAgICAgbWFrZU1vZGVsOiBpZGVudGlmaWVycy5tYWtlTW9kZWwsXG4gICAgICAgICAgICAgIC8vVFJBVkVMUE9SVCBGSUVMRFNcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IHRwb3J0SWRlbnRpZmllcnMuY2F0ZWdvcnkgfHwgZW50ZXJwcmlzZUlkZW50aWZpZXJzLmNhdGVnb3J5LFxuICAgICAgICAgICAgICBkb29yQ291bnQ6IHRwb3J0SWRlbnRpZmllcnMuZG9vckNvdW50LFxuICAgICAgICAgICAgICBjbGFzczogdHBvcnRJZGVudGlmaWVycy5jbGFzcyA/IHRwb3J0SWRlbnRpZmllcnMuY2xhc3MgOiBudWxsLFxuICAgICAgICAgICAgICBhaXJjb246ICdhaXJjb24nIGluIHRwb3J0SWRlbnRpZmllcnMgPyB0cG9ydElkZW50aWZpZXJzLmFpcmNvbiA6IG51bGwsXG4gICAgICAgICAgICAgIHRyYW5zbWlzc2lvbjogdHBvcnRJZGVudGlmaWVycy50cmFuc21pc3Npb24gPyB0cG9ydElkZW50aWZpZXJzLnRyYW5zbWlzc2lvbiA6IG51bGwsXG4gICAgICAgICAgICAgIC8vRW50ZXJwcmlzZSBjYXIgaGlyZSBmaWVsZHNcbiAgICAgICAgICAgICAgZHJpdmVyQWdlOiBlbnRlcnByaXNlSWRlbnRpZmllcnMuZHJpdmVyQWdlID8gU3RyaW5nKGVudGVycHJpc2VJZGVudGlmaWVycy5kcml2ZXJBZ2UpIDogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJpY2UsXG4gICAgICAgICAgY3VycmVuY3k6IGRpc3BsYXlSZWNvcmQuY2hhcmdlc1swXS5jdXJyZW5jeUNvZGUgYXMgQ3VycmVuY3lDb2RlLFxuICAgICAgICAgIHNlYXJjaFF1ZXJ5OiB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkoPFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3M+Y2FySGlyZVF1ZXJ5KSxcbiAgICAgICAgICBjbzJQZXJJdGVtLFxuICAgICAgICAgIGNvMlBlclBhc3NlbmdlcixcbiAgICAgICAgICBvdXRib3VuZERhdGU6IG5ldyBEYXRlKGRpc3BsYXlSZWNvcmQucGlja3VwKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIGxvd2VzdFByaWNlOiB0aGlzLmNoZWFwZXN0UHJpY2U/LmFtb3VudCB8fCBudWxsLFxuICAgICAgICAgIGxvd2VzdFByaWNlQ3VycmVuY3k6ICh0aGlzLmNoZWFwZXN0UHJpY2U/LmN1cnJlbmN5Q29kZSBhcyBDdXJyZW5jeUNvZGUpIHx8IG51bGwsXG4gICAgICAgICAgbG93ZXN0UHJpY2VEZXRhaWw6ICFnbXQgPyB0aGlzLmNyZWF0ZUxvd2VzdFByaWNlRGV0YWlsKCkgOiBudWxsLFxuICAgICAgICAgIHJlYXNvbktleXM6IGNhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5LnJlcXVpcmVzUmVhc29uS2V5cyxcbiAgICAgICAgICBhZ2VudE92ZXJyb2RlVW5hdmFpbGFibGU6Y2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHkudW5hdmFpbGFibGVcbiAgICAgICAgfSxcbiAgICAgICAgaW50QmFza2V0LFxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcbiAgICAgICAgY2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHkucmVxdWlyZXNSZWFzb25LZXlzLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgaWdub3JlSW52b2tlZFxuICAgICAgKTtcbiAgICAgIGlmICh3aGF0SGFwcGVuZWQgPT09IERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2gpIHtcbiAgICAgICAgdGhpcy5yZXNlYXJjaFdpdGhOZXdVc2VyKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2hhdEhhcHBlbmVkO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsKTtcbiAgfVxuXG4gIHNhdmVTZWFyY2goKTogT2JzZXJ2YWJsZTxTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0PiB7XG4gICAgaWYgKHRoaXMuaXNGYXZvdXJpdGVWYWxpZC52YWx1ZSkge1xuICAgICAgY29uc3QgcXVlcnk6IFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3MgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XG4gICAgICBjb25zdCBmYXZvdXJpdGVTZWFyY2hRdWVyeTogQ2FySGlyZVNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xuICAgICAgY29uc3Qgc2VhcmNoSW5mbyA9IHtcbiAgICAgICAgbmFtZTogYCR7bW9tZW50KCl9YCxcbiAgICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkNhcixcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVGYXZvdXJpdGVTZWFyY2goc2VhcmNoSW5mbyk7XG4gICAgfVxuICB9XG4gIGFzeW5jIGFwcGx5RmF2b3VyaXRlKGZhdjogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5waWNrdXBfZGF0ZXRpbWUgPSBtb21lbnQoKS5zdGFydE9mKCdkYXknKS5hZGQoNywgJ2hvdXJzJykuYWRkKDMwLCAnbWludXRlcycpO1xuICAgIHRoaXMuZHJvcG9mZl9kYXRldGltZSA9IG1vbWVudCh0aGlzLnBpY2t1cF9kYXRldGltZSkuYWRkKDEsICdkYXknKTtcbiAgICB0aGlzLmFwcGx5U2VhcmNoUXVlcnkoZmF2KTtcbiAgfVxuXG4gIGNoZWNrRm9yUHJlZmVycmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucmVzdWx0cy52YWx1ZS5maW5kKFxuICAgICAgcmVzdWx0ID0+IHJlc3VsdC5vZmZpY2VQcmVmZXJyZWQgfHwgcmVzdWx0LnRtY1ByZWZlcnJlZCB8fCByZXN1bHQuY29tcGFueVByZWZlcnJlZFxuICAgICk7XG4gIH1cblxuICBtZXNzYWdlQ29uZmlnQ2hlY2soY29uZmlnOiBhbnksIGlzQ2hlY2tQYXNzOiBib29sZWFuLCBjb3VudHJpZXM6IENvdW50cnlbXSk6IGJvb2xlYW4ge1xuICAgIGlmIChjb25maWcuZHJvcG9mZj8uY291bnRyeSAmJiBpc0NoZWNrUGFzcykge1xuICAgICAgY29uc3QgY29uZmlnRHJvcG9mZj0gY29uZmlnLmRyb3BvZmYuY291bnRyeS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgZHJvcE9mZkNvdW50cnkgPSB0aGlzLmxvY2F0aW9uVHlwZUNvbXBhcmUodGhpcy5sb2NhdGlvblR5cGUsIGZhbHNlLCB0cnVlKT8udG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGRyb3BPZmZDb3VudHJ5Q29kZSA9IGNvdW50cmllcy5maW5kKGNvdW50cnkgPT4gY291bnRyeS5jQ29kZSA9PT0gdGhpcy5kcm9wb2ZmX2NvdW50cnkpO1xuICAgICAgaXNDaGVja1Bhc3MgPSBkcm9wT2ZmQ291bnRyeSA9PT0gY29uZmlnRHJvcG9mZiB8fCBkcm9wT2ZmQ291bnRyeUNvZGUuY05hbWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gY29uZmlnRHJvcG9mZjtcbiAgICAgIGlmKHRoaXMubG9jYXRpb25UeXBlID09PSBMb2NhdGlvblR5cGVzLkFpcnBvcnQgJiYgIWlzQ2hlY2tQYXNzKXtcbiAgICAgICAgaXNDaGVja1Bhc3MgPSB0aGlzLmRyb3BvZmZfY291bnRyeSA9PT0gY29uZmlnLmRyb3BvZmYuY291bnRyeTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbmZpZy5kcm9wb2ZmPy5sb2NhdGlvbiAmJiBpc0NoZWNrUGFzcykge1xuICAgICAgY29uc3QgY29uZmlnRHJvcG9mZkxvY2F0aW9uID0gY29uZmlnLmRyb3BvZmYubG9jYXRpb24udG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGRyb3BPZmZMb2NhdGlvbiA9IHRoaXMubG9jYXRpb25UeXBlQ29tcGFyZSh0aGlzLmxvY2F0aW9uVHlwZSwgdHJ1ZSwgdHJ1ZSk/LnRvTG93ZXJDYXNlKCk7XG4gICAgICBpc0NoZWNrUGFzcyA9IGRyb3BPZmZMb2NhdGlvbiA9PT0gY29uZmlnRHJvcG9mZkxvY2F0aW9uO1xuICAgICAgaWYoIWlzQ2hlY2tQYXNzICYmIGRyb3BPZmZMb2NhdGlvbil7XG4gICAgICAgIGlzQ2hlY2tQYXNzID0gZHJvcE9mZkxvY2F0aW9uLmluY2x1ZGVzKGNvbmZpZ0Ryb3BvZmZMb2NhdGlvbik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb25maWcucGlja3VwPy5jb3VudHJ5ICYmIGlzQ2hlY2tQYXNzKSB7XG4gICAgICBjb25zdCBjb25maWdQaWNrVXAgPSBjb25maWcucGlja3VwLmNvdW50cnkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IHBpY2tDb3VudHJ5ID0gdGhpcy5sb2NhdGlvblR5cGVDb21wYXJlKHRoaXMubG9jYXRpb25UeXBlLCBmYWxzZSk/LnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBwaWNrdXBDb3VudHJ5Q29kZSA9IGNvdW50cmllcy5maW5kKGNvdW50cnkgPT4gY291bnRyeS5jQ29kZSA9PT0gdGhpcy5kcm9wb2ZmX2NvdW50cnkpO1xuICAgICAgaXNDaGVja1Bhc3MgPSBwaWNrQ291bnRyeSA9PT0gY29uZmlnUGlja1VwIHx8IHBpY2t1cENvdW50cnlDb2RlLmNOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IGNvbmZpZ1BpY2tVcDtcbiAgICAgICAgaWYodGhpcy5sb2NhdGlvblR5cGUgPT09IExvY2F0aW9uVHlwZXMuQWlycG9ydCAmJiAhaXNDaGVja1Bhc3Mpe1xuICAgICAgICAgIGlzQ2hlY2tQYXNzID0gdGhpcy5waWNrdXBfY291bnRyeSA9PT0gY29uZmlnLnBpY2t1cC5jb3VudHJ5O1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjb25maWcucGlja3VwPy5sb2NhdGlvbiAmJiBpc0NoZWNrUGFzcykge1xuICAgICAgY29uc3QgY29uZmlnUGlja1VwTG9jYXRpb24gPSBjb25maWcucGlja3VwLmxvY2F0aW9uLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBwaWNrVXBMb2NhdGlvbiA9IHRoaXMubG9jYXRpb25UeXBlQ29tcGFyZSh0aGlzLmxvY2F0aW9uVHlwZSwgdHJ1ZSk/LnRvTG93ZXJDYXNlKCk7XG4gICAgICBpc0NoZWNrUGFzcyA9IHBpY2tVcExvY2F0aW9uID09PSBjb25maWdQaWNrVXBMb2NhdGlvbjtcbiAgICAgIGlmKCFpc0NoZWNrUGFzcyAmJiBwaWNrVXBMb2NhdGlvbil7XG4gICAgICAgIGlzQ2hlY2tQYXNzID0gcGlja1VwTG9jYXRpb24uaW5jbHVkZXMoY29uZmlnUGlja1VwTG9jYXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29uZmlnLnN1cHBsaWVyICYmIGlzQ2hlY2tQYXNzKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZFN1cHBsaWVyID0gdGhpcy5maW5kU2VsZWN0ZWRDYXJTdXBwbGllcih0aGlzLmNob3NlblZlbmRvciwgdGhpcy52ZW5kb3JzKTtcbiAgICAgIGlzQ2hlY2tQYXNzID0gc2VsZWN0ZWRTdXBwbGllci5jb2RlID09PSBjb25maWcuc3VwcGxpZXIgfHwgc2VsZWN0ZWRTdXBwbGllci5uYW1lID09PSBjb25maWcuc3VwcGxpZXIgfHwgY29uZmlnLnN1cHBsaWVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5jaG9zZW5WZW5kb3I/LnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBpc0NoZWNrUGFzcztcbiAgfVxuXG4gIGxvY2F0aW9uVHlwZUNvbXBhcmUobG9jYXRpb25UeXBlOiBMb2NhdGlvblR5cGVzLCBpc0xvY2F0aW9uOiBib29sZWFuLCBpc0Ryb3BvZmYgPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChsb2NhdGlvblR5cGUpIHtcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5BaXJwb3J0OlxuICAgICAgICBpZihpc0xvY2F0aW9uKXtcbiAgICAgICAgICByZXR1cm4gaXNEcm9wb2ZmID8gdGhpcy5kcm9wb2ZmX2xvY2F0aW9uPy5kZXN0aW5hdGlvbiA6IHRoaXMucGlja3VwX2xvY2F0aW9uPy5kZXN0aW5hdGlvbjtcbiAgICAgICAgfSBlbHNle1xuICAgICAgICAgIHJldHVybiBpc0Ryb3BvZmYgPyB0aGlzLmRyb3BvZmZfbG9jYXRpb24/LmNvdW50cnkgOiB0aGlzLnBpY2t1cF9sb2NhdGlvbj8uY291bnRyeTtcbiAgICAgICAgfVxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkNpdHk6XG4gICAgICAgIGlmKGlzTG9jYXRpb24pe1xuICAgICAgICAgIHJldHVybiBpc0Ryb3BvZmYgPyB0aGlzLmNpdHlEcm9wb2ZmPy5uYW1lIDogdGhpcy5jaXR5UGlja3VwPy5uYW1lO1xuICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgcmV0dXJuIGlzRHJvcG9mZiA/IHRoaXMuY2l0eURyb3BvZmY/LmNvdW50cnlDb2RlIDogdGhpcy5jaXR5UGlja3VwPy5jb3VudHJ5Q29kZTtcbiAgICAgICAgfVxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlOlxuICAgICAgICBpZihpc0xvY2F0aW9uKXtcbiAgICAgICAgICByZXR1cm4gaXNEcm9wb2ZmID8gdGhpcy5wb3N0Y29kZURyb3BvZmZSYXc/LmNpdHkgOiB0aGlzLnBvc3Rjb2RlUGlja3VwUmF3Py5jaXR5O1xuICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgcmV0dXJuIGlzRHJvcG9mZiA/IHRoaXMucG9zdGNvZGVEcm9wb2ZmUmF3Py5jb3VudHJ5Q29kZSA6IHRoaXMucG9zdGNvZGVQaWNrdXBSYXc/LmNvdW50cnlDb2RlO1xuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmluZFNlbGVjdGVkQ2FyU3VwcGxpZXIoY2hvc2VuVmVuZG9yOiBzdHJpbmcsIHZlbmRvcnM6IFZlbmRvcltdKSB7XG4gICAgcmV0dXJuIHZlbmRvcnMuZmluZCh2ZW5kb3IgPT4gdmVuZG9yLmNvZGUgPT09IGNob3NlblZlbmRvcik7XG4gIH1cblxuICBjcmVhdGVMb3dlc3RQcmljZURldGFpbCgpOiBhbnkge1xuICAgIGNvbnN0IGNoZWFwZXN0Q2FyID0gdGhpcy5mdWxsUmVzdWx0cz8ucmVkdWNlKChwcmV2OiBhbnksIGN1cnI6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIHByZXYuZGlzcGxheVJlY29yZC5wcmljZSA8IGN1cnIuZGlzcGxheVJlY29yZC5wcmljZSA/IHByZXYgOiBjdXJyO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdHBvcnRJZGVudGlmaWVyczogVHBvcnRJZGVudGlmaWVycyA9IHtcbiAgICAgIGFpcmNvbjogZmFsc2UsXG4gICAgICBjbGFzczogJycsXG4gICAgICB0cmFuc21pc3Npb246ICcnXG4gICAgfTtcblxuICAgIGlmIChjaGVhcGVzdENhci5zb3VyY2UgPT09IFNlcnZpY2VQcm92aWRlci5UcmF2ZWxwb3J0Q2FySGlyZSkge1xuICAgICAgdHBvcnRJZGVudGlmaWVycy5haXJjb24gPSBjaGVhcGVzdENhci5kaXNwbGF5UmVjb3JkLnZlaGljbGUuYWlyY29uO1xuICAgICAgdHBvcnRJZGVudGlmaWVycy5jbGFzcyA9IGNoZWFwZXN0Q2FyLmRpc3BsYXlSZWNvcmQudmVoaWNsZS5jbGFzcztcbiAgICAgIHRwb3J0SWRlbnRpZmllcnMudHJhbnNtaXNzaW9uID0gY2hlYXBlc3RDYXIuZGlzcGxheVJlY29yZC52ZWhpY2xlLnRyYW5zbWlzc2lvbjtcbiAgICB9XG5cbiAgICBjb25zdCBkZXRhaWwgPSB7XG4gICAgICBwaWNrVXBEYXRldGltZTogY2hlYXBlc3RDYXIuZGlzcGxheVJlY29yZC5waWNrdXAsXG4gICAgICBkcm9wT2ZmRGF0ZXRpbWU6IGNoZWFwZXN0Q2FyLmRpc3BsYXlSZWNvcmQuZHJvcG9mZixcbiAgICAgIHBpY2tVcExvY2F0aW9uOiB7XG4gICAgICAgIGlhdGE6XG4gICAgICAgICAgdGhpcy5sb2NhdGlvblR5cGUgPT09IExvY2F0aW9uVHlwZXMuQWlycG9ydFxuICAgICAgICAgICAgPyBjaGVhcGVzdENhci5pZGVudGlmaWVycy5waWNrVXBMb2NhdGlvbkNvZGVcbiAgICAgICAgICAgIDogJycsXG4gICAgICAgIG5hbWU6IGNoZWFwZXN0Q2FyLmRpc3BsYXlSZWNvcmQucGlja3VwTG9jYXRpb24ubmFtZVxuICAgICAgICAgID8gY2hlYXBlc3RDYXIuZGlzcGxheVJlY29yZC5waWNrdXBMb2NhdGlvbi5uYW1lXG4gICAgICAgICAgOiAnJyxcbiAgICAgICAgYWRkcmVzczogYCR7Y2hlYXBlc3RDYXIuZGlzcGxheVJlY29yZC5waWNrdXBMb2NhdGlvbi50b3BMaW5lfSwgJHtjaGVhcGVzdENhci5kaXNwbGF5UmVjb3JkLnBpY2t1cExvY2F0aW9uLmNpdHl9YCxcbiAgICAgICAgcG9zdGNvZGU6IGNoZWFwZXN0Q2FyLmRpc3BsYXlSZWNvcmQucGlja3VwTG9jYXRpb24ucG9zdENvZGVcbiAgICAgICAgICA/IGNoZWFwZXN0Q2FyLmRpc3BsYXlSZWNvcmQucGlja3VwTG9jYXRpb24ucG9zdENvZGVcbiAgICAgICAgICA6ICcnXG4gICAgICB9LFxuICAgICAgZHJvcE9mZkxvY2F0aW9uOiB7XG4gICAgICAgIGlhdGE6XG4gICAgICAgICAgdGhpcy5sb2NhdGlvblR5cGUgPT09IExvY2F0aW9uVHlwZXMuQWlycG9ydFxuICAgICAgICAgICAgPyBjaGVhcGVzdENhci5pZGVudGlmaWVycy5kcm9wT2ZmTG9jYXRpb25Db2RlXG4gICAgICAgICAgICA6ICcnLFxuICAgICAgICBuYW1lOiBjaGVhcGVzdENhci5kaXNwbGF5UmVjb3JkLnJldHVybkxvY2F0aW9uLm5hbWVcbiAgICAgICAgICA/IGNoZWFwZXN0Q2FyLmRpc3BsYXlSZWNvcmQucmV0dXJuTG9jYXRpb24ubmFtZVxuICAgICAgICAgIDogJycsXG4gICAgICAgIGFkZHJlc3M6IGAke2NoZWFwZXN0Q2FyLmRpc3BsYXlSZWNvcmQucmV0dXJuTG9jYXRpb24udG9wTGluZX0sICR7Y2hlYXBlc3RDYXIuZGlzcGxheVJlY29yZC5yZXR1cm5Mb2NhdGlvbi5jaXR5fWAsXG4gICAgICAgIHBvc3Rjb2RlOiBjaGVhcGVzdENhci5kaXNwbGF5UmVjb3JkLnJldHVybkxvY2F0aW9uLnBvc3RDb2RlXG4gICAgICAgICAgPyBjaGVhcGVzdENhci5kaXNwbGF5UmVjb3JkLnJldHVybkxvY2F0aW9uLnBvc3RDb2RlXG4gICAgICAgICAgOiAnJ1xuICAgICAgfSxcbiAgICAgIGNhcjoge1xuICAgICAgICB0eXBlOiBjaGVhcGVzdENhci5kaXNwbGF5UmVjb3JkLnZlaGljbGUudHlwZSxcbiAgICAgICAgbWFudWFsVHJhbnNtaXNzaW9uOiBjaGVhcGVzdENhci5kaXNwbGF5UmVjb3JkLnZlaGljbGUudHJhbnNtaXNzaW9uLmluY2x1ZGVzKFxuICAgICAgICAgIENhckhpcmVUcmFuc21pc3Npb24uTWFudWFsXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICBmYXJlSW5mbzoge1xuICAgICAgICB0aXRsZTogY2hlYXBlc3RDYXI/LmZhcmVJbmZvPy50aXRsZSxcbiAgICAgICAgdHlwZTogY2hlYXBlc3RDYXI/LmZhcmVJbmZvPy50eXBlLFxuICAgICAgICBjb2RlOiBjaGVhcGVzdENhcj8uZmFyZUluZm8/LmNvZGUsXG4gICAgICAgIHN1cHBsaWVyQ29kZTogY2hlYXBlc3RDYXI/LmZhcmVJbmZvPy5zdXBwbGllckNvZGVcbiAgICAgIH0sXG4gICAgICB2ZW5kb3JOYW1lOiBjaGVhcGVzdENhci5kaXNwbGF5UmVjb3JkLnZlbmRvci5uYW1lLFxuICAgICAgaWRlbnRpZmllcnM6IHtcbiAgICAgICAgcGlja1VwTG9jYXRpb246IGNoZWFwZXN0Q2FyLmlkZW50aWZpZXJzLnBpY2tVcExvY2F0aW9uXG4gICAgICAgICAgPyBjaGVhcGVzdENhci5pZGVudGlmaWVycy5waWNrVXBMb2NhdGlvblxuICAgICAgICAgIDogJycsXG4gICAgICAgIHBpY2tVcExvY2F0aW9uQ29kZTogY2hlYXBlc3RDYXIuaWRlbnRpZmllcnMucGlja1VwTG9jYXRpb25Db2RlXG4gICAgICAgICAgPyBjaGVhcGVzdENhci5pZGVudGlmaWVycy5waWNrVXBMb2NhdGlvbkNvZGVcbiAgICAgICAgICA6ICcnLFxuICAgICAgICBwaWNrVXBFeHRlbmRlZExvY2F0aW9uQ29kZTogY2hlYXBlc3RDYXIuaWRlbnRpZmllcnMucGlja1VwRXh0ZW5kZWRMb2NhdGlvbkNvZGVcbiAgICAgICAgICA/IGNoZWFwZXN0Q2FyLmlkZW50aWZpZXJzLnBpY2tVcEV4dGVuZGVkTG9jYXRpb25Db2RlXG4gICAgICAgICAgOiAnJyxcbiAgICAgICAgcGlja1VwTG9jYXRpb25OYW1lOiBjaGVhcGVzdENhci5pZGVudGlmaWVycy5waWNrVXBMb2NhdGlvbk5hbWVcbiAgICAgICAgICA/IGNoZWFwZXN0Q2FyLmlkZW50aWZpZXJzLnBpY2tVcExvY2F0aW9uTmFtZVxuICAgICAgICAgIDogJycsXG4gICAgICAgIGRyb3BPZmZMb2NhdGlvbjogY2hlYXBlc3RDYXIuaWRlbnRpZmllcnMuZHJvcE9mZkxvY2F0aW9uXG4gICAgICAgICAgPyBjaGVhcGVzdENhci5pZGVudGlmaWVycy5kcm9wT2ZmTG9jYXRpb25cbiAgICAgICAgICA6ICcnLFxuICAgICAgICBkcm9wT2ZmTG9jYXRpb25Db2RlOiBjaGVhcGVzdENhci5pZGVudGlmaWVycy5kcm9wT2ZmTG9jYXRpb25Db2RlXG4gICAgICAgICAgPyBjaGVhcGVzdENhci5pZGVudGlmaWVycy5kcm9wT2ZmTG9jYXRpb25Db2RlXG4gICAgICAgICAgOiAnJyxcbiAgICAgICAgZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlOiBjaGVhcGVzdENhci5pZGVudGlmaWVycy5kcm9wT2ZmRXh0ZW5kZWRMb2NhdGlvbkNvZGVcbiAgICAgICAgICA/IGNoZWFwZXN0Q2FyLmlkZW50aWZpZXJzLmRyb3BPZmZFeHRlbmRlZExvY2F0aW9uQ29kZVxuICAgICAgICAgIDogJycsXG4gICAgICAgIGRyb3BPZmZMb2NhdGlvbk5hbWU6IGNoZWFwZXN0Q2FyLmlkZW50aWZpZXJzLmRyb3BPZmZMb2NhdGlvbk5hbWVcbiAgICAgICAgICA/IGNoZWFwZXN0Q2FyLmlkZW50aWZpZXJzLmRyb3BPZmZMb2NhdGlvbk5hbWVcbiAgICAgICAgICA6ICcnLFxuICAgICAgICB2ZWhUeXBlOiBjaGVhcGVzdENhci5pZGVudGlmaWVycy52ZWhUeXBlLFxuICAgICAgICB2ZW5kb3I6IGNoZWFwZXN0Q2FyLmlkZW50aWZpZXJzLnZlbmRvcixcbiAgICAgICAgLy9UUkFWRUxQT1JUIEZJRUxEU1xuICAgICAgICBjbGFzczogdHBvcnRJZGVudGlmaWVycy5jbGFzcyA/IHRwb3J0SWRlbnRpZmllcnMuY2xhc3MgOiBudWxsLFxuICAgICAgICBhaXJjb246ICdhaXJjb24nIGluIHRwb3J0SWRlbnRpZmllcnMgPyB0cG9ydElkZW50aWZpZXJzLmFpcmNvbiA6IG51bGwsXG4gICAgICAgIHRyYW5zbWlzc2lvbjogdHBvcnRJZGVudGlmaWVycy50cmFuc21pc3Npb24gPyB0cG9ydElkZW50aWZpZXJzLnRyYW5zbWlzc2lvbiA6IG51bGxcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGRldGFpbDtcbiAgfVxuXG4gIC8vIFdlIHVzZSB0aGlzIG1ldGhvZCBmb3IgZmVhdHVyZXM6IFJlY2VudFNlYXJjaCwgRmF2b3VyaXRlU2VhcmNoLCBFeHBpcmVkQmFza2V0LCBDb3B5QmFza2V0LCBDbG9uZUJhc2tldFxuICAvLyBOb3RlOiBEbyBub3QgaW5jbHVkZSBkYXRlcyBhbmQgdGF2ZWxsZXJzIGluIHRoaXMgbWV0aG9kXG4gIGFzeW5jIGFwcGx5U2VhcmNoUXVlcnkocXVlcnk6IFNlYXJjaENhckhpcmVRdWVyeVZhcmlhYmxlcywgc3RhcnRTZWFyY2g6IGJvb2xlYW4gPSBmYWxzZSwgY2xvbmVCYXNrZXRJdGVtOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHZlbmRvciwgY2xhc3M6IGNhckNsYXNzLCB0eXBlOiBjYXJUeXBlLCB0cmFuc21pc3Npb24sIGFpcmNvbiwgZXN0aW1hdGVkRGFpbHlEaXN0YW5jZSwgY29sbGVjdGlvbiwgZGVsaXZlcnksIGRyaXZlckFnZSwgY2l0eSwgYWlycG9ydCwgZGVwb3QgfSA9IHF1ZXJ5O1xuICAgIHRoaXMuY2hvc2VuVmVuZG9yID0gdmVuZG9yID8/IChjbG9uZUJhc2tldEl0ZW0gPyB0aGlzLmNsb25lZEJhc2tldEl0ZW1EZXRhaWxzLmlkZW50aWZpZXJzLnZlbmRvciA6ICctJykgYXMgQ2FySGlyZUNsYXNzO1xuICAgIHRoaXMuY2FyQ2xhc3MgPSBjYXJDbGFzcyA/PyAoY2xvbmVCYXNrZXRJdGVtID8gdGhpcy5jbG9uZWRCYXNrZXRJdGVtRGV0YWlscy5jYXIuY2xhc3MgOiAnJykgYXMgQ2FySGlyZUNsYXNzO1xuICAgIHRoaXMuY2FyVHlwZSA9IGNhclR5cGUgPz8gKGNsb25lQmFza2V0SXRlbSA/IHRoaXMuY2xvbmVkQmFza2V0SXRlbURldGFpbHMuY2FyLnR5cGUgOiAnJykgYXMgQ2FySGlyZVR5cGU7XG4gICAgdGhpcy50cmFuc21pc3Npb24gPSB0cmFuc21pc3Npb24gPz8gJycgYXMgQ2FySGlyZVRyYW5zbWlzc2lvbjtcbiAgICB0aGlzLmFpckNvbiA9IGFpcmNvbiA/PyBudWxsO1xuICAgIHRoaXMuZXN0aW1hdGVkTWlsZWFnZSA9IGVzdGltYXRlZERhaWx5RGlzdGFuY2UgPz8gbnVsbDtcbiAgICB0aGlzLmNvbGxlY3Rpb24gPSBjb2xsZWN0aW9uID8/IGZhbHNlO1xuICAgIHRoaXMuZGVsaXZlcnkgPSBkZWxpdmVyeSA/PyBmYWxzZTtcbiAgICB0aGlzLmRyaXZlckFnZSA9IGRyaXZlckFnZSA/PyBudWxsO1xuXG4gICAgaWYgKGNpdHkpIHtcbiAgICAgIHRoaXMuZ2V0UGFyYW1zRm9yQ2FyYnlDaXR5KGNpdHksIHN0YXJ0U2VhcmNoKTtcbiAgICB9IGVsc2UgaWYgKGFpcnBvcnQpIHtcbiAgICAgIHRoaXMuZ2V0UGFyYW1zRm9yQ2FyYnlBaXJwb3J0KGFpcnBvcnQsIHN0YXJ0U2VhcmNoKTtcbiAgICB9IGVsc2UgaWYgKGRlcG90KSB7XG4gICAgICB0aGlzLmdldFBhcmFtc0ZvckNhcmJ5UG9zdENvZGUoZGVwb3QsIHN0YXJ0U2VhcmNoKTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXJDYXJIaXJlRGVwb3RzKGRhdGE6IENhckhpcmVEZXBvdFtdLCBjaXR5TmFtZTogc3RyaW5nLCBpc1Bvc3RDb2RlID0gZmFsc2UpOiBDYXJIaXJlRGVwb3RbXSB7XG4gICAgY29uc3QgYWx0Q2l0eU5hbWVFID0gdGhpcy5oZWxwZXJzLm5vcm1hbGl6ZUNpdHlOYW1lRShjaXR5TmFtZSk7XG4gICAgY29uc3QgYWx0Q2l0eU5hbWUgPSB0aGlzLmhlbHBlcnMubm9ybWFsaXplQ2l0eU5hbWUoY2l0eU5hbWUpO1xuICAgIC8vIGlkZW50aWZ5IHVtbGF1IGFuZCByZXBsYWNlIHdpdGggdWU/P1xuICAgIGNvbnNvbGUubG9nKGArKysgRmlsdGVyaW5nIHRvIGNpdHlOYW1lOiAke2NpdHlOYW1lfSArKytgKTtcbiAgICBpZihpc1Bvc3RDb2RlKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2hvc2VuVmVuZG9yICYmIHRoaXMuY2hvc2VuVmVuZG9yICE9PSAnLScpIHtcbiAgICAgIHJldHVybiBkYXRhLmZpbHRlcigoZGVwbzogQ2FySGlyZURlcG90KSA9PiBkZXBvLnZlbmRvckNvZGUgPT0gdGhpcy5jaG9zZW5WZW5kb3IgJiYgKGRlcG8uY2l0eU5hbWUubGVuZ3RoID4gMyA/IGRlcG8uY2l0eU5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhjaXR5TmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgZGVwby5jaXR5TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGFsdENpdHlOYW1lRS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgZGVwby5jaXR5TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGFsdENpdHlOYW1lLnRvTG93ZXJDYXNlKCkpIDogdHJ1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoKGRlcG86IENhckhpcmVEZXBvdCkgPT4gZGVwby5jaXR5TmFtZS5sZW5ndGggPiAzID8gZGVwby5jaXR5TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGNpdHlOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgZGVwby5jaXR5TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGFsdENpdHlOYW1lRS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgIGRlcG8uY2l0eU5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhhbHRDaXR5TmFtZS50b0xvd2VyQ2FzZSgpKSA6IHRydWUgKTtcbiAgfVxuXG4gIHNvcnRDYXJIaXJlRGVwb3RzKGRhdGE6IENhckhpcmVEZXBvdFtdLCBrZXk6IGtleW9mIENhckhpcmVEZXBvdCA9ICd2ZW5kb3InKTogQ2FySGlyZURlcG90W10ge1xuICAgIGlmIChkYXRhPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNhckhpcmVEZXBvdHMgPSBbLi4uZGF0YV07XG4gICAgICBjYXJIaXJlRGVwb3RzLnNvcnQoKGEsIGIpID0+IChhW2tleV0gPiBiW2tleV0gPyAxIDogLTEpKTtcbiAgICAgIHJldHVybiBjYXJIaXJlRGVwb3RzO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5sb2NhdGlvblR5cGUgPT09IExvY2F0aW9uVHlwZXMuQ2l0eSkge1xuICAgICAgICB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QgPSBudWxsO1xuICAgICAgICB0aGlzLmNpdHlQaWNrdXBEZXBvdCA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5sb2NhdGlvblR5cGUgPT09IExvY2F0aW9uVHlwZXMuUG9zdGNvZGUpIHtcbiAgICAgICAgdGhpcy5wb3N0Y29kZURyb3BvZmYgPSBudWxsO1xuICAgICAgICB0aGlzLnBvc3Rjb2RlUGlja3VwID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cbn0iXX0=
|
|
1939
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyaGlyZS1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9jYXJoaXJlLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHekQsT0FBTyxFQUFjLEVBQUUsRUFBbUIsYUFBYSxFQUFFLEVBQUUsSUFBSSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBVXBHLE9BQU8sRUFRTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixXQUFXLEVBQ1gsYUFBYSxFQVViLFlBQVksRUFDYixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFNTCxhQUFhLEVBTWIsNEJBQTRCLEVBRTVCLGVBQWUsRUFDZixjQUFjLEVBQ2Qsd0JBQXdCLEVBQ3pCLE1BQU0sZ0JBQWdCLENBQUM7QUFXeEIsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFXdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXZELE1BQU0sQ0FBTixJQUFZLFlBT1g7QUFQRCxXQUFZLFlBQVk7SUFDdEIscUNBQXFCLENBQUE7SUFDckIsK0JBQWUsQ0FBQTtJQUNmLDZCQUFhLENBQUE7SUFDYix1Q0FBdUIsQ0FBQTtJQUN2Qix1Q0FBdUIsQ0FBQTtJQUN2QixvREFBb0MsQ0FBQTtBQUN0QyxDQUFDLEVBUFcsWUFBWSxLQUFaLFlBQVksUUFPdkI7QUFFRCxNQUFNLE9BQU8sdUJBSVgsU0FBUSxvQkFBeUY7SUE4cEJqRyxpQ0FBaUM7SUFFakMsWUFDVSxjQUE2QyxF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Q0FBQztZQUNoRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFFLENBQUM7SUFDM0UsQ0FBQztJQUVELGlCQUFpQixDQUFDLElBQW9CLEVBQUUsTUFBMEIsUUFBUTtRQUN4RSxJQUFJLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxNQUFNLEVBQUU7WUFDaEIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ2hDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pELE9BQU8sYUFBYSxDQUFDO1NBQ3RCO2FBQU07WUFDTCxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssYUFBYSxDQUFDLElBQUksRUFBRTtnQkFDNUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7YUFDN0I7WUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssYUFBYSxDQUFDLFFBQVEsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2FBQzVCO1lBQ0QsT0FBTyxFQUFFLENBQUM7U0FDWDtJQUNILENBQUM7O0FBdHJFZSw4Q0FBc0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUMxQywrQ0FBdUIsR0FBRyxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEJhc2VFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi9iYXNlLWVudGVycHJpc2UnO1xuaW1wb3J0IHsgQmFzZVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBvZiBhcyBvYnNlcnZhYmxlT2YsIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDYXJIaXJlU29ydCB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2FyLWhpcmUtc29ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2FySGlyZUZpbHRlcnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Nhci1oaXJlLWZpbHRlcnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNlbGVjdEZpbHRlciB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VsZWN0LWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVmFsdWVEaXNwbGF5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy92YWx1ZS1kaXNwbGF5JztcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWVudGVycHJpc2UtYmFza2V0LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ2FySGlyZURldGFpbFJlcXVlc3RSZXNwb25zZSxcbiAgQ3VycmVuY3lDb2RlLFxuICBCYXNrZXRJdGVtLFxuICBDYXJIaXJlSW5wdXRJZGVudGlmaWVycyxcbiAgQ2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHksXG4gIFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3MsXG4gIFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLFxuICBTZXJ2aWNlVHlwZSxcbiAgQ2FySGlyZVRyYW5zbWlzc2lvbixcbiAgQ2FySGlyZUNsYXNzLFxuICBDYXJIaXJlVHlwZSxcbiAgRGlzdGFuY2VUeXBlcyxcbiAgU2VhcmNoQ2FySGlyZVF1ZXJ5VmFyaWFibGVzLFxuICBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMsXG4gIENhckhpcmVBaXJwb3J0SW5wdXQsXG4gIENhckhpcmVBZGRyZXNzLFxuICBDYXJIaXJlTG9jYXRpb25JbnB1dCxcbiAgU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzLFxuICBTZWFyY2hIb3RlbHNRdWVyeVZhcmlhYmxlcyxcbiAgU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMsXG4gIExvY2F0aW9uQ29kZXMsXG4gIExvY2F0aW9uVHlwZVxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcbmltcG9ydCB7XG4gIENhckhpcmVRdW90ZVJlc3VsdCxcbiAgQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXksXG4gIE5nYkRhdGVTdHJ1Y3QsXG4gIE9CVEFpcnBvcnREZXRhaWxzLFxuICBWZW5kb3IsXG4gIExvY2F0aW9uVHlwZXMsXG4gIExvY2F0aW9uRGV0YWlscyxcbiAgQ2FySGlyZURlcG90LFxuICBSZWNlbnRTZWFyY2gsXG4gIFdpdGhpbkRpc3RhbmNlLFxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0LFxuICBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLFxuICBDb3VudHJ5LFxuICBTZXJ2aWNlUHJvdmlkZXIsXG4gIFRyYXZlbFBvbGljaWVzLFxuICBub25FbnRlcnByaXNlQ2FyU2VydmljZXNcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHsgQmFzZUNhcmhpcmVRdW90ZUZldGNoZXIsIENhckhpcmVGZXRjaGVyVHlwZSB9IGZyb20gJy4uL2ZldGNoZXJzL2NhcmhpcmUtcXVvdGUtZmV0Y2hlcic7XG5pbXBvcnQge1xuICBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZSxcbiAgQ2FySGlyZVRlbXBQYXJhbXNcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JY2FyaGlyZS1lbnRlcnByaXNlLXNlYXJjaCc7XG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xuaW1wb3J0IHtcbiAgQmFzZUNhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyLFxuICBDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FyaGlyZS1hdmFpbGFiaWxpdHktZGV0YWlsLmZldGNoZXInO1xuaW1wb3J0IHsgdGFrZSwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJQ2FyQ2xhc3NlcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2FyLWhpcmUtY2xhc3Nlcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVHJhdmVsbGVyIH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xuaW1wb3J0IHtcbiAgQ2FySGlyZVNlYXJjaEFyZ3MsXG4gIElDYXJIaXJlQ2l0eSxcbiAgSUNhckhpcmVEZXBvdFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL2Nhci1oaXJlLXNlYXJjaC1hcmcuaW50ZXJmYWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBUcG9ydElkZW50aWZpZXJzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy90cG9ydElkZW50aWZpZXJzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBVc2VyRmF2b3J1cml0ZSB9IGZyb20gJy4vdXNlci1mYXZvdXJpdGUuZW51bSc7XG5cbmV4cG9ydCBlbnVtIFNvcnRUeXBlc0NhciB7XG4gIGNoZWFwZXN0ID0gJ2NoZWFwZXN0JyxcbiAgY2hhaW4gPSAnY2hhaW4nLFxuICBzaXplID0gJ3NpemUnLFxuICBwcmVmZXJyZWQgPSAncHJlZmVycmVkJyxcbiAgZXhwZW5zaXZlID0gJ2V4cGVuc2l2ZScsXG4gIGxvd2VzdEVtaXNzaW9ucyA9IFwibG93ZXN0IGVtaXNzaW9uc1wiXG59XG5cbmV4cG9ydCBjbGFzcyBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaDxcbiAgICBDSF9RIGV4dGVuZHMgQ2FySGlyZUZldGNoZXJUeXBlLFxuICAgIENIQURfUSBleHRlbmRzIENhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyVHlwZVxuICA+XG4gIGV4dGVuZHMgQmFzZUVudGVycHJpc2VTZWFyY2g8Q2FySGlyZVRlbXBQYXJhbXMsIENhckhpcmVRdW90ZVJlc3VsdEFycmF5LCBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheT5cbiAgaW1wbGVtZW50cyBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZVxue1xuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyA9ICdjYXJoaXJlX3BhcmFtcyc7XG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdjYXJoaXJlX3Jlc3VsdHMnO1xuXG4gIC8vICEgLSBIYXJkY29kZWQgRGF0YVxuICBwcml2YXRlIF9jYXJUeXBlQ29kZXM6IFtzdHJpbmcsIHN0cmluZywgQ2FySGlyZVR5cGVdW10gPSBbXG4gICAgWydCJywgJzItMyBEb29yJywgQ2FySGlyZVR5cGUuVHdvVG9UaHJlZURvb3JdLFxuICAgIFsnQycsICcyLzQgRG9vcicsIENhckhpcmVUeXBlLlR3b09yRm91ckRvb3JdLFxuICAgIFsnRCcsICc0LTUgRG9vcicsIENhckhpcmVUeXBlLkZvdXJUb0ZpdmVEb29yXSxcbiAgICBbJ1cnLCAnV2Fnb24gLyBFc3RhdGUnLCBDYXJIaXJlVHlwZS5XYWdvbk9yRXN0YXRlXSxcbiAgICBbJ1YnLCAnUGFzc2VuZ2VyIFZhbicsIENhckhpcmVUeXBlLlBhc3NlbmdlclZhbl0sXG4gICAgWydMJywgJ0xpbW91c2luZScsIENhckhpcmVUeXBlLkxpbW91c2luZV0sXG4gICAgWydTJywgJ1Nwb3J0JywgQ2FySGlyZVR5cGUuU3BvcnRdLFxuICAgIFsnVCcsICdDb252ZXJ0aWJsZScsIENhckhpcmVUeXBlLkNvbnZlcnRpYmxlXSxcbiAgICBbJ0YnLCAnU1VWJywgQ2FySGlyZVR5cGUuU3V2XSxcbiAgICBbJ0onLCAnT3BlbiBBaXIgQWxsIFRlcnJhaW4nLCBDYXJIaXJlVHlwZS5PcGVuQWlyQWxsVGVycmFpbl0sXG4gICAgWydYJywgJ1NwZWNpYWwnLCBDYXJIaXJlVHlwZS5TcGVjaWFsXSxcbiAgICBbJ1AnLCAnUGlja3VwIFJlZ3VsYXIgQ2FiJywgQ2FySGlyZVR5cGUuUGlja1VwUmVndWxhckNhYl0sXG4gICAgWydRJywgJ1BpY2t1cCBFeHRlbmRlZCBDYWInLCBDYXJIaXJlVHlwZS5QaWNrVXBFeHRlbmRlZENhYl0sXG4gICAgWydaJywgJ1NwZWNpYWwgT2ZmZXIgQ2FyJywgQ2FySGlyZVR5cGUuU3BlY2lhbE9mZmVyQ2FyXSxcbiAgICBbJ0UnLCAnQ291cGUnLCBDYXJIaXJlVHlwZS5Db3VwZV0sXG4gICAgWydNJywgJ01vbm9zcGFjZSAoRXVyb3BlKScsIENhckhpcmVUeXBlLk1vbm9zcGFjZUV1cm9wZWFuVXNlXSxcbiAgICBbJ1InLCAnUmVjcmVhdGlvbmFsIFZlaGljbGUnLCBDYXJIaXJlVHlwZS5SZWNyZWF0aW9uYWxWZWhpY2xlXSxcbiAgICBbJ0gnLCAnTW90b3IgSG9tZScsIENhckhpcmVUeXBlLk1vdG9ySG9tZV0sXG4gICAgWydZJywgJzItV2hlZWwgVmVoaWNsZScsIENhckhpcmVUeXBlLlR3b1doZWVsVmVoaWNsZV0sXG4gICAgWydOJywgJ1JvYWRzdGVyJywgQ2FySGlyZVR5cGUuUm9hZHN0ZXJdLFxuICAgIFsnRycsICdDcm9zc292ZXInLCBDYXJIaXJlVHlwZS5Dcm9zc292ZXJdLFxuICAgIFsnSycsICdDb21tZXJjaWFsIFZhbiBPciBUcnVjaycsIENhckhpcmVUeXBlLkNvbW1lcmNpYWxWYW5PclRydWNrXSxcbiAgXTtcblxuICBwcml2YXRlIF9jYXJBaXJDb25kaXRpb25UeXBlczogW3N0cmluZywgc3RyaW5nLCBib29sZWFuXVtdID0gW1xuICAgIFsnQW55JywgJ0FueScsIG51bGxdLFxuICAgIFsnWScsICdZZXMnLCB0cnVlXSxcbiAgICBbJ04nLCAnTm8nLCBmYWxzZV1cbiAgXTtcblxuICBwcml2YXRlIF93aXRoaW5EaXN0YW5jZTogV2l0aGluRGlzdGFuY2VbXSA9IFtcbiAgICB7IG5hbWU6ICcxIG1pbGUnLCB2YWx1ZTogJzEnIH0sXG4gICAgeyBuYW1lOiAnMiBtaWxlcycsIHZhbHVlOiAnMicgfSxcbiAgICB7IG5hbWU6ICc1IG1pbGVzJywgdmFsdWU6ICc1JyB9LFxuICAgIHsgbmFtZTogJzEwIG1pbGVzJywgdmFsdWU6ICcxMCcgfSxcbiAgICB7IG5hbWU6ICcyMCBtaWxlcycsIHZhbHVlOiAnMjAnIH1cbiAgXTtcblxuICBwcml2YXRlIF9jYXJUcmFuc21pc3Npb25Db2RlczogW3N0cmluZywgc3RyaW5nLCBDYXJIaXJlVHJhbnNtaXNzaW9uXVtdID0gW1xuICAgIFsnTScsICdNYW51YWwnLCBDYXJIaXJlVHJhbnNtaXNzaW9uLk1hbnVhbF0sXG4gICAgWydOJywgJ01hbnVhbCA0LVdoZWVsIERyaXZlJywgQ2FySGlyZVRyYW5zbWlzc2lvbi5NYW51YWxdLFxuICAgIFsnQycsICdNYW51YWwgQWxsLVdoZWVsIERyaXZlJywgQ2FySGlyZVRyYW5zbWlzc2lvbi5NYW51YWxdLFxuICAgIFsnQScsICdBdXRvbWF0aWMnLCBDYXJIaXJlVHJhbnNtaXNzaW9uLkF1dG9dLFxuICAgIFsnQicsICdBdXRvbWF0aWMgNC1XaGVlbCBEcml2ZScsIENhckhpcmVUcmFuc21pc3Npb24uQXV0b10sXG4gICAgWydEJywgJ0F1dG9tYXRpYyBBbGwtIFdoZWVsIERyaXZlJywgQ2FySGlyZVRyYW5zbWlzc2lvbi5BdXRvXVxuICBdO1xuXG4gIGNhcmhpcmVDb2RlczogYW55O1xuICBwcml2YXRlIF92ZW5kb3JzOiBWZW5kb3JbXSA9IFtcbiAgICB7IGNvZGU6ICctJywgbmFtZTogJ0FueScgfSxcbiAgICB7IGNvZGU6ICdBQycsIG5hbWU6ICdBY2UgUmVudCBBIENhcicgfSxcbiAgICB7IGNvZGU6ICdBRCcsIG5hbWU6ICdBZHZhbnRhZ2UgUmVudCBBIENhcicgfSxcbiAgICB7IGNvZGU6ICdBTCcsIG5hbWU6ICdBbGFtbycgfSxcbiAgICB7IGNvZGU6ICdaSScsIG5hbWU6ICdBdmlzJyB9LFxuICAgIHsgY29kZTogJ0FUJywgbmFtZTogJ0F0ZXNhJyB9LFxuICAgIHsgY29kZTogJ1pEJywgbmFtZTogJ0J1ZGdldCBSZW50IEEgQ2FyJyB9LFxuICAgIHsgY29kZTogJ0NJJywgbmFtZTogJ0NpdGVyIFJlbnQgQSBDYXInIH0sXG4gICAgeyBjb2RlOiAnWlInLCBuYW1lOiAnRG9sbGFyIFJlbnQgQSBDYXInIH0sXG4gICAgeyBjb2RlOiAnREYnLCBuYW1lOiAnRHJpdmluZyBGb3JjZScgfSxcbiAgICB7IGNvZGU6ICdFWScsIG5hbWU6ICdFY29ub215IFJlbnQgQSBDYXInIH0sXG4gICAgeyBjb2RlOiAnRVQnLCBuYW1lOiAnRW50ZXJwcmlzZScgfSxcbiAgICB7IGNvZGU6ICdFUCcsIG5hbWU6ICdFdXJvcGNhcicgfSxcbiAgICB7IGNvZGU6ICdJTScsIG5hbWU6ICdFdXJvcGNhciBTb3V0aGFmcmljYScgfSxcbiAgICB7IGNvZGU6ICdFWicsIG5hbWU6ICdFeiBSZW50IEEgQ2FyJyB9LFxuICAgIHsgY29kZTogJ0ZGJywgbmFtZTogJ0ZpcmVmbHknIH0sXG4gICAgeyBjb2RlOiAnRlgnLCBuYW1lOiAnRm94IFJlbnQgQSBDYXInIH0sXG4gICAgeyBjb2RlOiAnR04nLCBuYW1lOiAnR3VlcmluIENhciBSZW50YWwnIH0sXG4gICAgeyBjb2RlOiAnWkUnLCBuYW1lOiAnSGVydHonIH0sXG4gICAgeyBjb2RlOiAnTE0nLCBuYW1lOiAnTCAmIE0gQ2FyIFJlbnRhbCcgfSxcbiAgICB7IGNvZGU6ICdMTCcsIG5hbWU6ICdMb2NhbGl6YScgfSxcbiAgICB7IGNvZGU6ICdNVycsIG5hbWU6ICdNaWR3YXkgQ2FyIFJlbnRhbCcgfSxcbiAgICB7IGNvZGU6ICdaTCcsIG5hbWU6ICdOYXRpb25hbCBDYXIgUmVudGFsIFN5c3RlbScgfSxcbiAgICB7IGNvZGU6ICdOQycsIG5hbWU6ICdOZXh0Y2FyJyB9LFxuICAgIHsgY29kZTogJ05VJywgbmFtZTogJ051IENhciBSZW50YWxzJyB9LFxuICAgIHsgY29kZTogJ1pBJywgbmFtZTogJ1BheWxlc3MgQ2FyIFJlbnRhbCcgfSxcbiAgICB7IGNvZGU6ICdQUicsIG5hbWU6ICdQcmljZWxlc3MnIH0sXG4gICAgeyBjb2RlOiAnUlcnLCBuYW1lOiAnUmVudCBBIFdyZWNrJyB9LFxuICAgIHsgY29kZTogJ1NYJywgbmFtZTogJ1NpeHQnIH0sXG4gICAgeyBjb2RlOiAnVEUnLCBuYW1lOiAnVGVtcGVzdCcgfSxcbiAgICB7IGNvZGU6ICdYRicsIG5hbWU6ICdUZXN0LVMgQ3Jvc3MgR2FsaWxlbycgfSxcbiAgICB7IGNvZGU6ICdYRycsIG5hbWU6ICdUZXN0LVMgQ3Jvc3MgVHJuZycgfSxcbiAgICB7IGNvZGU6ICdaVCcsIG5hbWU6ICdUaHJpZnR5IENhciBSZW50YWwnIH0sXG4gICAgeyBjb2RlOiAnUE0nLCBuYW1lOiAnVHJhdmVscG9ydCBUZXN0IENvZGUnIH0sXG4gICAgeyBjb2RlOiAnU1YnLCBuYW1lOiAnVS1TYXZlIEF1dG8gUmVudGFsJyB9LFxuICAgIHsgY29kZTogJ1dGJywgbmFtZTogJ1dvb2Rmb3JkJyB9XG4gIF07XG5cbiAgcHJpdmF0ZSBfY2FyX2NsYXNzZXM6IElDYXJDbGFzc2VzW10gPSBbXG4gICAgeyBjb2RlOiAnTScsIG5hbWU6ICdNaW5pJywga2V5OiBDYXJIaXJlQ2xhc3MuTWluaSwgdmFsdWU6ICcxMCcgfSxcbiAgICB7IGNvZGU6ICdOJywgbmFtZTogJ01pbmkgRWxpdGUnLCBrZXk6IENhckhpcmVDbGFzcy5NaW5pRWxpdGUsIHZhbHVlOiAnMjAnIH0sXG4gICAgeyBjb2RlOiAnRScsIG5hbWU6ICdFY29ub215Jywga2V5OiBDYXJIaXJlQ2xhc3MuRWNvbm9teSwgdmFsdWU6ICczMCcgfSxcbiAgICB7XG4gICAgICBjb2RlOiAnSCcsXG4gICAgICBuYW1lOiAnRWNvbm9teSBFbGl0ZScsXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5FY29ub215RWxpdGUsXG4gICAgICB2YWx1ZTogJzQwJ1xuICAgIH0sXG4gICAgeyBjb2RlOiAnQycsIG5hbWU6ICdDb21wYWN0Jywga2V5OiBDYXJIaXJlQ2xhc3MuQ29tcGFjdCwgdmFsdWU6ICc1MCcgfSxcbiAgICB7XG4gICAgICBjb2RlOiAnRCcsXG4gICAgICBuYW1lOiAnQ29tcGFjdCBFbGl0ZScsXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5Db21wYWN0RWxpdGUsXG4gICAgICB2YWx1ZTogJzYwJ1xuICAgIH0sXG4gICAge1xuICAgICAgY29kZTogJ0knLFxuICAgICAgbmFtZTogJ0ludGVybWVkaWF0ZScsXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5JbnRlcm1lZGlhdGUsXG4gICAgICB2YWx1ZTogJzcwJ1xuICAgIH0sXG4gICAge1xuICAgICAgY29kZTogJ0onLFxuICAgICAgbmFtZTogJ0ludGVybWVkaWF0ZSBFbGl0ZScsXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5JbnRlcm1lZGlhdGVFbGl0ZSxcbiAgICAgIHZhbHVlOiAnODAnXG4gICAgfSxcbiAgICB7IGNvZGU6ICdTJywgbmFtZTogJ1N0YW5kYXJkJywga2V5OiBDYXJIaXJlQ2xhc3MuU3RhbmRhcmQsIHZhbHVlOiAnOTAnIH0sXG4gICAge1xuICAgICAgY29kZTogJ1InLFxuICAgICAgbmFtZTogJ1N0YW5kYXJkIEVsaXRlJyxcbiAgICAgIGtleTogQ2FySGlyZUNsYXNzLlN0YW5kYXJkRWxpdGUsXG4gICAgICB2YWx1ZTogJzEwMCdcbiAgICB9LFxuICAgIHsgY29kZTogJ0YnLCBuYW1lOiAnRnVsbCBTaXplJywga2V5OiBDYXJIaXJlQ2xhc3MuRnVsbHNpemUsIHZhbHVlOiAnMTEwJyB9LFxuICAgIHtcbiAgICAgIGNvZGU6ICdHJyxcbiAgICAgIG5hbWU6ICdGdWxsIFNpemUgRWxpdGUnLFxuICAgICAga2V5OiBDYXJIaXJlQ2xhc3MuRnVsbHNpemVFbGl0ZSxcbiAgICAgIHZhbHVlOiAnMTIwJ1xuICAgIH0sXG4gICAgeyBjb2RlOiAnUCcsIG5hbWU6ICdQcmVtaXVtJywga2V5OiBDYXJIaXJlQ2xhc3MuUHJlbWl1bSwgdmFsdWU6ICcxMzAnIH0sXG4gICAge1xuICAgICAgY29kZTogJ1UnLFxuICAgICAgbmFtZTogJ1ByZW1pdW0gRWxpdGUnLFxuICAgICAga2V5OiBDYXJIaXJlQ2xhc3MuUHJlbWl1bUVsaXRlLFxuICAgICAgdmFsdWU6ICcxNDAnXG4gICAgfSxcbiAgICB7IGNvZGU6ICdMJywgbmFtZTogJ0x1eHVyeScsIGtleTogQ2FySGlyZUNsYXNzLkx1eHVyeSwgdmFsdWU6ICcxNTAnIH0sXG4gICAge1xuICAgICAgY29kZTogJ1cnLFxuICAgICAgbmFtZTogJ0x1eHVyeSBFbGl0ZScsXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5MdXh1cnlFbGl0ZSxcbiAgICAgIHZhbHVlOiAnMTYwJ1xuICAgIH0sXG4gICAgeyBjb2RlOiAnTycsIG5hbWU6ICdPdmVyc2l6ZScsIGtleTogQ2FySGlyZUNsYXNzLk92ZXJzaXplLCB2YWx1ZTogJzE3MCcgfSxcbiAgICB7IGNvZGU6ICdYJywgbmFtZTogJ1NwZWNpYWwnLCBrZXk6IENhckhpcmVDbGFzcy5TcGVjaWFsLCB2YWx1ZTogJzE4MCcgfVxuICBdO1xuXG4gIHByaXZhdGUgX2xvY2F0aW9uX3R5cGVzID0gW0xvY2F0aW9uVHlwZXMuQ2l0eSwgTG9jYXRpb25UeXBlcy5BaXJwb3J0LCBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlXTtcblxuICBwcml2YXRlIGNhckNsYXNzTWFwOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge1xuICAgIG1pbmk6IDAsXG4gICAgJ21pbmkgZWxpdGUnOiAxLFxuICAgIGVjb25vbXk6IDIsXG4gICAgJ2Vjb25vbXkgZWxpdGUnOiAzLFxuICAgIGNvbXBhY3Q6IDQsXG4gICAgJ2NvbXBhY3Qgc3BlY2lhbCc6IDUsXG4gICAgJ2NvbXBhY3QgZWxpdGUnOiA2LFxuICAgIGludGVybWVkaWF0ZTogNyxcbiAgICAnaW50ZXJtZWRpYXRlIGVsaXRlJzogOCxcbiAgICBzdGFuZGFyZDogOSxcbiAgICAnc3RhbmRhcmQgZWxpdGUnOiAxMCxcbiAgICAnZnVsbHNpemUnOiAxMSxcbiAgICAnZnVsbCBzaXplJzogMTEsXG4gICAgJ2Z1bGwgc2l6ZSBlbGl0ZSc6IDEyLFxuICAgIHByZW1pdW06IDEzLFxuICAgICdwcmVtaXVtIGVsaXRlJzogMTQsXG4gICAgbHV4dXJ5OiAxNSxcbiAgICAnbHV4dXJ5IGVsaXRlJzogMTYsXG4gICAgb3ZlcnNpemU6IDE3LFxuICAgIHNwZWNpYWw6IDE4LFxuICAgIHVucmVjb2duaXplZDogMTAwXG4gIH07XG4gIC8vICEgLSBFbmQgb2YgaGFyZGNvZGVkIGRhdGFcblxuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5DYXI7XG5cbiAgcHJpdmF0ZSBfbmdiUGlja3VwRGF0ZTogTmdiRGF0ZVN0cnVjdDtcbiAgcHJpdmF0ZSBfcGlja3VwVGltZTogc3RyaW5nO1xuICBwcml2YXRlIF9uZ2JEcm9wb2ZmRGF0ZTogTmdiRGF0ZVN0cnVjdDtcbiAgcHJpdmF0ZSBfZHJvcG9mZlRpbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfc29ydGluZ19vcHRpb25zOiBDYXJIaXJlU29ydFtdID0gW1xuICAgIHtcbiAgICAgIHZhbHVlOiAwLFxuICAgICAgZGlzcGxheTogJ0NoZWFwZXN0IEZpcnN0J1xuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6IDEsXG4gICAgICBkaXNwbGF5OiAnTW9zdCBFeHBlbnNpdmUgRmlyc3QnXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogMixcbiAgICAgIGRpc3BsYXk6ICdQcmVmZXJyZWQgRmlyc3QnXG4gICAgfVxuICBdO1xuICBwcml2YXRlIF9taW5EYXRlOiBOZ2JEYXRlU3RydWN0ID0ge1xuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpLFxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKClcbiAgfTtcblxuICBwcml2YXRlIF9taW5JbkRhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKCksXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKVxuICB9O1xuXG4gIHByaXZhdGUgX2NvbGxlY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZGVsaXZlcnk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZHJpdmVyQWdlOiBudW1iZXI7XG4gIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdO1xuICBkcml2ZXJBZ2VzOiB7bmFtZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyfVtdID0gdGhpcy5oZWxwZXJzLmdldEFnZXNBcnJheSgyNSwgMTAwKTtcbiAgaGFzTm9uRW50ZXJwcmlzZUNhckFjY2VzczogYm9vbGVhbjtcblxuICBnZXQgYWR1bHRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hZHVsdHM7XG4gIH1cblxuICBzZXQgYWR1bHRzKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGNoaWxkcmVuKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbjtcbiAgfVxuXG4gIHNldCBjaGlsZHJlbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGVzdGltYXRlZE1pbGVhZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmVzdGltYXRlZE1pbGVhZ2U7XG4gIH1cblxuICBzZXQgZXN0aW1hdGVkTWlsZWFnZShtaWxhZ2U6IG51bWJlcikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5lc3RpbWF0ZWRNaWxlYWdlID0gbWlsYWdlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBwaWNrdXBUaW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BpY2t1cFRpbWU7XG4gIH1cblxuICBzZXQgcGlja3VwVGltZShuZXd0aW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9waWNrdXBUaW1lID0gbmV3dGltZTtcbiAgICB0aGlzLl91cGRhdGVOZ2JQaWNrdXBEYXRlVGltZSgpO1xuICB9XG5cbiAgZ2V0IGRyb3BvZmZUaW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Ryb3BvZmZUaW1lO1xuICB9XG5cbiAgc2V0IGRyb3BvZmZUaW1lKG5ld3RpbWU6IHN0cmluZykge1xuICAgIHRoaXMuX2Ryb3BvZmZUaW1lID0gbmV3dGltZTtcbiAgICB0aGlzLl91cGRhdGVOZ2JEcm9wb2ZmRGF0ZVRpbWUoKTtcbiAgfVxuXG4gIGdldCBwb3N0Y29kZVBpY2t1cFJhdygpOiBMb2NhdGlvbkRldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucG9zdGNvZGVQaWNrdXBSYXc7XG4gIH1cblxuICBzZXQgcG9zdGNvZGVQaWNrdXBSYXcobmV3UGlja3VwQ291bnRyeTogTG9jYXRpb25EZXRhaWxzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnBvc3Rjb2RlUGlja3VwUmF3ID0gbmV3UGlja3VwQ291bnRyeTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgcG9zdGNvZGVEcm9wb2ZmUmF3KCk6IExvY2F0aW9uRGV0YWlscyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZURyb3BvZmZSYXc7XG4gIH1cblxuICBzZXQgcG9zdGNvZGVEcm9wb2ZmUmF3KG5ld1BpY2t1cENvdW50cnk6IExvY2F0aW9uRGV0YWlscykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZURyb3BvZmZSYXcgPSBuZXdQaWNrdXBDb3VudHJ5O1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjaXR5UGlja3VwRGVwb3QoKTogQ2FySGlyZURlcG90IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNpdHlQaWNrdXBEZXBvdDtcbiAgfVxuXG4gIHNldCBjaXR5UGlja3VwRGVwb3QobmV3UGlja3VwQ291bnRyeTogQ2FySGlyZURlcG90KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmNpdHlQaWNrdXBEZXBvdCA9IG5ld1BpY2t1cENvdW50cnk7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGNpdHlEcm9wb2ZmRGVwb3QoKTogQ2FySGlyZURlcG90IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNpdHlEcm9wb2ZmRGVwb3Q7XG4gIH1cblxuICBzZXQgY2l0eURyb3BvZmZEZXBvdChuZXdQb3N0Q29kZURyb3BvZmY6IENhckhpcmVEZXBvdCkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5jaXR5RHJvcG9mZkRlcG90ID0gbmV3UG9zdENvZGVEcm9wb2ZmO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBwb3N0Y29kZVBpY2t1cCgpOiBDYXJIaXJlRGVwb3Qge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucG9zdGNvZGVQaWNrdXA7XG4gIH1cblxuICBzZXQgcG9zdGNvZGVQaWNrdXAobmV3UGlja3VwQ291bnRyeTogQ2FySGlyZURlcG90KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnBvc3Rjb2RlUGlja3VwID0gbmV3UGlja3VwQ291bnRyeTtcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLnBvc3Rjb2RlUGlja3VwKSB7XG4gICAgICB0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25UeXBlID0gTG9jYXRpb25UeXBlcy5Qb3N0Y29kZTtcbiAgICB9XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IHBvc3Rjb2RlRHJvcG9mZigpOiBDYXJIaXJlRGVwb3Qge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucG9zdGNvZGVEcm9wb2ZmO1xuICB9XG5cbiAgc2V0IHBvc3Rjb2RlRHJvcG9mZihuZXdQb3N0Q29kZURyb3BvZmY6IENhckhpcmVEZXBvdCkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZURyb3BvZmYgPSBuZXdQb3N0Q29kZURyb3BvZmY7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGNpdHlQaWNrdXAoKTogTG9jYXRpb25EZXRhaWxzIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNpdHlQaWNrdXA7XG4gIH1cblxuICBzZXQgY2l0eVBpY2t1cChuZXdQaWNrdXA6IExvY2F0aW9uRGV0YWlscykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5jaXR5UGlja3VwID0gbmV3UGlja3VwO1xuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMuY2l0eVBpY2t1cCkge1xuICAgICAgdGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uVHlwZSA9IExvY2F0aW9uVHlwZXMuQ2l0eTtcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvblR5cGUpO1xuICAgIH1cblxuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjaXR5RHJvcG9mZigpOiBMb2NhdGlvbkRldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2l0eURyb3BvZmY7XG4gIH1cblxuICBzZXQgY2l0eURyb3BvZmYobmV3RHJvcG9mZjogTG9jYXRpb25EZXRhaWxzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmNpdHlEcm9wb2ZmID0gbmV3RHJvcG9mZjtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgbWluRGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcbiAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcbiAgfVxuXG4gIGdldCBtaW5JbkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX21pbkluRGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3RpbWVBcnJheTogVmFsdWVEaXNwbGF5PHN0cmluZz5bXTtcbiAgLy8gLSBHZXR0ZXJzIEFuZCBTZXR0ZXJzIEZvciBWYXJpb3VzIFZhcmlhYmxlc1xuICBnZXQgcGlja3VwX2NvdW50cnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnBpY2t1cF9jb3VudHJ5O1xuICB9XG5cbiAgc2V0IHBpY2t1cF9jb3VudHJ5KG5ld1BpY2t1cENvdW50cnk6IHN0cmluZykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5waWNrdXBfY291bnRyeSA9IG5ld1BpY2t1cENvdW50cnk7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGRyb3BvZmZfY291bnRyeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9jb3VudHJ5O1xuICB9XG5cbiAgc2V0IGRyb3BvZmZfY291bnRyeShuZXdEcm9wb2ZmQ291bnRyeTogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmRyb3BvZmZfY291bnRyeSA9IG5ld0Ryb3BvZmZDb3VudHJ5O1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBwaWNrdXBfbG9jYXRpb24oKTogT0JUQWlycG9ydERldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucGlja3VwX2xvY2F0aW9uO1xuICB9XG5cbiAgc2V0IHBpY2t1cF9sb2NhdGlvbihwaWNrdXBMb2NhdGlvbjogT0JUQWlycG9ydERldGFpbHMpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMucGlja3VwX2xvY2F0aW9uID0gcGlja3VwTG9jYXRpb247XG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcy5waWNrdXBfbG9jYXRpb24pIHtcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvblR5cGUgPSBMb2NhdGlvblR5cGVzLkFpcnBvcnQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmV0dXJuX3RvX3BpY2t1cCkge1xuICAgICAgdGhpcy5kcm9wb2ZmX2xvY2F0aW9uID0gcGlja3VwTG9jYXRpb247XG4gICAgfVxuXG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGRyb3BvZmZfbG9jYXRpb24oKTogT0JUQWlycG9ydERldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9sb2NhdGlvbjtcbiAgfVxuXG4gIHNldCBkcm9wb2ZmX2xvY2F0aW9uKGRyb3BPZmZMb2NhdGlvbjogT0JUQWlycG9ydERldGFpbHMpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9sb2NhdGlvbiA9IGRyb3BPZmZMb2NhdGlvbjtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBzZXQgbmdiUGlja3VwRGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xuICAgIHRoaXMuX25nYlBpY2t1cERhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLl91cGRhdGVOZ2JQaWNrdXBEYXRlVGltZSgpO1xuICB9XG5cbiAgZ2V0IG5nYlBpY2t1cERhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX25nYlBpY2t1cERhdGU7XG4gIH1cblxuICBzZXQgbmdiRHJvcG9mZkRhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcbiAgICB0aGlzLl9uZ2JEcm9wb2ZmRGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuX3VwZGF0ZU5nYkRyb3BvZmZEYXRlVGltZSgpO1xuICB9XG5cbiAgZ2V0IG5nYkRyb3BvZmZEYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIHJldHVybiB0aGlzLl9uZ2JEcm9wb2ZmRGF0ZTtcbiAgfVxuXG4gIC8vIERhdGV0aW1lcyB3aXRoaW4gdGhlIHF1ZXJ5IGl0c2VsZlxuICBnZXQgcGlja3VwX2RhdGV0aW1lKCk6IG1vbWVudC5Nb21lbnQge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucGlja3VwX2RhdGV0aW1lO1xuICB9XG5cbiAgc2V0IHBpY2t1cF9kYXRldGltZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5waWNrdXBfZGF0ZXRpbWUgPSB2YWx1ZTtcbiAgICB0cnkge1xuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmlzVmFsaWQoKSkge1xuICAgICAgICB0aGlzLl9uZ2JQaWNrdXBEYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fcGlja3VwVGltZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdISDptbScpID8gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ0hIOm1tJykgOiAnMDc6MzAnO1xuICAgICAgfVxuICAgICAgdGhpcy5fbWluSW5EYXRlID0ge1xuICAgICAgICBkYXk6IHZhbHVlLmRhdGUoKSxcbiAgICAgICAgbW9udGg6IHZhbHVlLm1vbnRoKCkgKyAxLFxuICAgICAgICB5ZWFyOiB2YWx1ZS55ZWFyKClcbiAgICAgIH07XG5cbiAgICAgIGlmICh2YWx1ZS5pc1NhbWVPckFmdGVyKHRoaXMudGVtcFBhcmFtcy5kcm9wb2ZmX2RhdGV0aW1lKSkge1xuICAgICAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWUgPSBtb21lbnQodmFsdWUpLmFkZCgxLCAnZGF5Jyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG5cbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgZHJvcG9mZl9kYXRldGltZSgpOiBtb21lbnQuTW9tZW50IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmRyb3BvZmZfZGF0ZXRpbWU7XG4gIH1cblxuICBzZXQgZHJvcG9mZl9kYXRldGltZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5kcm9wb2ZmX2RhdGV0aW1lID0gdmFsdWU7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLmlzVmFsaWQoKSkge1xuICAgICAgdGhpcy5fbmdiRHJvcG9mZkRhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xuICAgICAgdGhpcy5fZHJvcG9mZlRpbWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdCgnSEg6bW0nKSA/IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdISDptbScpIDogJzA3OjMwJztcbiAgICB9XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgLy8gIWRhdGUgYW5kIHRpbWUgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSBmb3IgTFVcbiAgcHJpdmF0ZSBfcGlja3VwX2RhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xuXG4gIGdldCBwaWNrdXBfZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcbiAgICByZXR1cm4gdGhpcy5fcGlja3VwX2RhdGU7XG4gIH1cblxuICBzZXQgcGlja3VwX2RhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcbiAgICB0aGlzLl9waWNrdXBfZGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2t1cERhdGVUaW1lKCk7XG4gIH1cblxuICBwcml2YXRlIF9waWNrdXBfdGltZTogc3RyaW5nID0gbnVsbDtcbiAgZ2V0IHBpY2t1cF90aW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BpY2t1cF90aW1lO1xuICB9XG5cbiAgc2V0IHBpY2t1cF90aW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9waWNrdXBfdGltZSA9IHZhbHVlO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2t1cERhdGVUaW1lKCk7XG4gIH1cblxuICBwcml2YXRlIF9kcm9wb2ZmX2RhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xuXG4gIGdldCBkcm9wb2ZmX2RhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX2Ryb3BvZmZfZGF0ZTtcbiAgfVxuXG4gIHNldCBkcm9wb2ZmX2RhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcbiAgICB0aGlzLl9kcm9wb2ZmX2RhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLl91cGRhdGVEcm9wb2ZmRGF0ZVRpbWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Ryb3BvZmZfdGltZTogc3RyaW5nID0gbnVsbDtcbiAgZ2V0IGRyb3BvZmZfdGltZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kcm9wb2ZmX3RpbWU7XG4gIH1cblxuICBzZXQgZHJvcG9mZl90aW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9kcm9wb2ZmX3RpbWUgPSB2YWx1ZTtcbiAgICB0aGlzLl91cGRhdGVEcm9wb2ZmRGF0ZVRpbWUoKTtcbiAgfVxuXG4gIGdldCByZXR1cm5fdG9fcGlja3VwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucmV0dXJuX3RvX3BpY2t1cDtcbiAgfVxuXG4gIHNldCByZXR1cm5fdG9fcGlja3VwKG5ld1ZhbDogYm9vbGVhbikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5fdG9fcGlja3VwID0gbmV3VmFsO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjaG9zZW5WZW5kb3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblZlbmRvcjtcbiAgfVxuXG4gIHNldCBjaG9zZW5WZW5kb3IobmV3VmVuZG9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuVmVuZG9yID0gbmV3VmVuZG9yO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjaG9zZW5EaXN0YW5jZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuRGlzdGFuY2U7XG4gIH1cblxuICBzZXQgY2hvc2VuRGlzdGFuY2UobmV3Q2hvc2VuRGlzdGFuY2U6IHN0cmluZykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5EaXN0YW5jZSA9IG5ld0Nob3NlbkRpc3RhbmNlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjYXJDbGFzcygpOiBDYXJIaXJlQ2xhc3Mge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2FyQ2xhc3M7XG4gIH1cblxuICBzZXQgY2FyQ2xhc3MoY2FyQ2xhc3M6IENhckhpcmVDbGFzcykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5jYXJDbGFzcyA9IGNhckNsYXNzO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjYXJUeXBlKCk6IENhckhpcmVUeXBlIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNhclR5cGU7XG4gIH1cblxuICBzZXQgY2FyVHlwZSh0eXBlOiBDYXJIaXJlVHlwZSkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5jYXJUeXBlID0gdHlwZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgdHJhbnNtaXNzaW9uKCk6IENhckhpcmVUcmFuc21pc3Npb24ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudHJhbnNtaXNzaW9uO1xuICB9XG5cbiAgc2V0IHRyYW5zbWlzc2lvbih0cmFuczogQ2FySGlyZVRyYW5zbWlzc2lvbikge1xuICAgIHRoaXMudGVtcFBhcmFtcy50cmFuc21pc3Npb24gPSB0cmFucztcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgYWlyQ29uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWlyQ29uO1xuICB9XG5cbiAgc2V0IGFpckNvbihuZXdDb246IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWlyQ29uID0gbmV3Q29uO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBsb2NhdGlvblR5cGUoKTogTG9jYXRpb25UeXBlcyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvblR5cGU7XG4gIH1cbiAgc2V0IGxvY2F0aW9uVHlwZSh2YWx1ZTogTG9jYXRpb25UeXBlcykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvblR5cGUgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRpbWVBcnJheSgpIHtcbiAgICB0aGlzLl90aW1lQXJyYXkgPVxuICAgICAgdGhpcy5fdGltZUFycmF5IHx8XG4gICAgICBBcnJheSg5NilcbiAgICAgICAgLmZpbGwoMClcbiAgICAgICAgLm1hcCgoXywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDQpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXG4gICAgICAgICAgICAgICc6JyArXG4gICAgICAgICAgICAgICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXG4gICAgICAgICAgICBkaXNwbGF5OlxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gNClcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcbiAgICAgICAgICAgICAgJzonICtcbiAgICAgICAgICAgICAgKChpbmRleCAlIDQpICogMTUpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl90aW1lQXJyYXk7XG4gIH1cblxuICAvLyAhIC0gVGhlIGJlbG93IHZhbHVlcyBoYXZlIGdldHRlcnMgb25seSAoSS5FIENhbm5vdCBtb2RpZnkpXG5cbiAgZ2V0IGNhckFpckNvbmRpdGlvblR5cGVzKCk6IFtzdHJpbmcsIHN0cmluZywgYm9vbGVhbl1bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhckFpckNvbmRpdGlvblR5cGVzO1xuICB9XG5cbiAgZ2V0IHdpdGhpbkRpc3RhbmNlKCk6IFdpdGhpbkRpc3RhbmNlW10ge1xuICAgIHJldHVybiB0aGlzLl93aXRoaW5EaXN0YW5jZTtcbiAgfVxuXG4gIGdldCBjYXJUcmFuc21pc3Npb25Db2RlcygpOiBbc3RyaW5nLCBzdHJpbmcsIENhckhpcmVUcmFuc21pc3Npb25dW10ge1xuICAgIHJldHVybiB0aGlzLl9jYXJUcmFuc21pc3Npb25Db2RlcztcbiAgfVxuXG4gIGdldCBjYXJUeXBlQ29kZXMoKTogW3N0cmluZywgc3RyaW5nLCBDYXJIaXJlVHlwZV1bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhclR5cGVDb2RlcztcbiAgfVxuXG4gIGdldCB2ZW5kb3JzKCk6IFZlbmRvcltdIHtcbiAgICByZXR1cm4gdGhpcy5fdmVuZG9ycztcbiAgfVxuXG4gIGdldCBzb3J0aW5nT3B0aW9ucygpOiBDYXJIaXJlU29ydFtdIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydGluZ19vcHRpb25zO1xuICB9XG5cbiAgZ2V0IGNvbGxlY3Rpb24oKTpib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY29sbGVjdGlvbjtcbiAgfVxuXG4gIHNldCBjb2xsZWN0aW9uKHZhbHVlOmJvb2xlYW4pIHtcbiAgICB0aGlzLl9jb2xsZWN0aW9uID0gdmFsdWU7XG4gICAgdGhpcy5jaGVja0FuZFNldERyaXZlckFnZUFuZFBpY2t1cFRpbWUoKTtcbiAgfVxuXG4gIGdldCBkZWxpdmVyeSgpOmJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kZWxpdmVyeTtcbiAgfVxuXG4gIHNldCBkZWxpdmVyeSh2YWx1ZTpib29sZWFuKSB7XG4gICAgdGhpcy5fZGVsaXZlcnkgPSB2YWx1ZTtcbiAgICB0aGlzLmNoZWNrQW5kU2V0RHJpdmVyQWdlQW5kUGlja3VwVGltZSgpO1xuICB9XG5cbiAgY2hlY2tBbmRTZXREcml2ZXJBZ2VBbmRQaWNrdXBUaW1lKCkge1xuICAgIGlmICh0aGlzLl9kZWxpdmVyeSB8fCB0aGlzLl9jb2xsZWN0aW9uIHx8ICF0aGlzLmhhc05vbkVudGVycHJpc2VDYXJBY2Nlc3MpIHtcbiAgICAgIGNvbnN0IG1pbkRhdGUgPSBtb21lbnQodGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyh0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoKSwgMzApKS5hZGQoMjQsICdob3VycycpO1xuICAgICAgdGhpcy5fbWluRGF0ZSA9IHtcbiAgICAgICAgZGF5OiBtaW5EYXRlLmRhdGUoKSxcbiAgICAgICAgbW9udGg6IG1pbkRhdGUubW9udGgoKSArIDEsXG4gICAgICAgIHllYXI6IG1pbkRhdGUueWVhcigpXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMucGlja3VwX2RhdGV0aW1lPy5pc0JlZm9yZShtaW5EYXRlKSkge1xuICAgICAgICB0aGlzLnBpY2t1cFRpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKG1pbkRhdGUpO1xuICAgICAgICB0aGlzLm5nYlBpY2t1cERhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobWluRGF0ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLl9kcml2ZXJBZ2UgPSB0aGlzLmRyaXZlckFnZXNbMF0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21pbkRhdGUgPSB7XG4gICAgICAgIGRheTogbW9tZW50KCkuZGF0ZSgpLFxuICAgICAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXG4gICAgICAgIHllYXI6IG1vbWVudCgpLnllYXIoKVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBnZXQgZHJpdmVyQWdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2RyaXZlckFnZTtcbiAgfVxuXG4gIHNldCBkcml2ZXJBZ2UodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2RyaXZlckFnZSA9ICt2YWx1ZTtcbiAgfVxuXG4gIC8vICEgLSBFbmQgb2YgZ2V0dGVycyBhbmQgc2V0dGVyc1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2FyaGlyZWZldGNoZXI6IEJhc2VDYXJoaXJlUXVvdGVGZXRjaGVyPENIX1E+LFxuICAgIHByaXZhdGUgY2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXI6IEJhc2VDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcjxDSEFEX1E+LFxuICAgIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHN0b3JhZ2VTZXJ2aWNlOiBCYXNlU3RvcmFnZVNlcnZpY2UsXG4gICAgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXG4gICAgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlSW50ZXJmYWNlXG4gICkge1xuICAgIHN1cGVyKHN0b3JhZ2VTZXJ2aWNlLCBoZWxwZXJzLCBzZWFyY2hTZXJ2aWNlLCB1c2VyU2VydmljZSk7XG4gICAgY29uc3QgZGF0YToge1xuICAgICAgdGVtcFBhcmFtczogQ2FySGlyZVRlbXBQYXJhbXM7XG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IENhckhpcmVUZW1wUGFyYW1zO1xuICAgIH0gPSBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbShDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TKSB8fCB7XG4gICAgICB0ZW1wUGFyYW1zOiB7fSBhcyBDYXJIaXJlVGVtcFBhcmFtcyxcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDoge30gYXMgQ2FySGlyZVRlbXBQYXJhbXNcbiAgICB9O1xuXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHNlYXJjaFNlcnZpY2UubWFrZUNhckhpcmVRdWVyeShkYXRhLnRlbXBQYXJhbXMpKTtcbiAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBkYXRhLm9yaWdpbmFsVXNlclNlYXJjaDtcblxuICAgIC8vIGlmICh0aGlzLnVzZXJDb25maWc/LmNhcmhpcmVEZWZhdWx0cykge1xuICAgIC8vICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHNlYXJjaFNlcnZpY2UubWFrZUNhckhpcmVRdWVyeSh0aGlzLnVzZXJDb25maWcuY2FyaGlyZURlZmF1bHRzKSk7XG4gICAgLy8gfVxuXG4gICAgdXNlclNlcnZpY2UuZnVsbFVzZXJEZXRhaWxzLnVzZXJDb25maWdzLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIC8vIHRoaXMudXNlckNvbmZpZy5uZXh0KGRhdGEpO1xuICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICBpZiAoZGF0YSAmJiBkYXRhPy5jYXJoaXJlRGVmYXVsdHMpIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHNlYXJjaFNlcnZpY2UubWFrZUNhckhpcmVRdWVyeShkYXRhPy5jYXJoaXJlRGVmYXVsdHM/LmNvbmZpZykpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHVzZXJTZXJ2aWNlLnN1YnNjcmliZShkYXRhPT57XG4gICAgLy8gdGhpcy51cGRhdGVUZW1wUGFyYW1zKHNlYXJjaFNlcnZpY2UubWFrZUNhckhpcmVRdWVyeShkYXRhLmNhcmhpcmVEZWZhdWx0cykpO1xuXG4gICAgLy8gfSlcbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XG4gICAgICAgIHRoaXMuYWR1bHRzID0gMTtcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IDA7XG4gICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM/LnNsaWNlKDAsIDEpIHx8IFtdO1xuICAgICAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHRzID1cbiAgICAgIHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtQXNMaXN0PENhckhpcmVRdW90ZVJlc3VsdEFycmF5Pih0aGlzLnJlc3VsdHNTZXNzaW9uTmFtZSkgfHwgW107XG5cbiAgICB0aGlzLmZ1bGxSZXN1bHRzID0gaGVscGVycy5jbG9uZShyZXN1bHRzIHx8IFtdKTtcbiAgICB0aGlzLl9jaGVhcGVzdFJlc3VsdFByaWNlID0gdGhpcy51cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzKTtcbiAgICB0aGlzLmF2ZXJhZ2VDbzJQZXJJdGVtID0gdGhpcy5oZWxwZXJzLmNhbGN1bGF0ZUF2ZXJhZ2VDbzJQZXJJdGVtKHJlc3VsdHMpO1xuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xuICAgIHRoaXMudXNlclNlcnZpY2UuY2hhbmdlVXNlci5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3QgaXNFbnRlcnByaXNlQ2FySGlyZSA9IHRoaXMudXNlclNlcnZpY2UudXNlckhhc1NlcnZpY2VQcm92aWRlcihTZXJ2aWNlVHlwZS5DYXIsIFNlcnZpY2VQcm92aWRlci5FbnRlcnByaXNlQ2FySGlyZSk7XG4gICAgICB0aGlzLmhhc05vbkVudGVycHJpc2VDYXJBY2Nlc3MgPSBpc0VudGVycHJpc2VDYXJIaXJlID8gIG5vbkVudGVycHJpc2VDYXJTZXJ2aWNlcy5zb21lKChwcm92aWRlcikgPT5cbiAgICAgIHRoaXMudXNlclNlcnZpY2UudXNlckhhc1NlcnZpY2VQcm92aWRlcihTZXJ2aWNlVHlwZS5DYXIsIHByb3ZpZGVyKVxuICAgICkgOiB0cnVlO1xuICAgIGlmKCF0aGlzLmhhc05vbkVudGVycHJpc2VDYXJBY2Nlc3Mpe1xuICAgICAgdGhpcy5jaGVja0FuZFNldERyaXZlckFnZUFuZFBpY2t1cFRpbWUoKTtcbiAgICB9XG4gICAgfSk7XG5cblxuICB9XG5cbiAgcHJvdGVjdGVkIHJlc3VsdHNTZXNzaW9uTmFtZSA9IENhcmhpcmVFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPSBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcblxuICBwcm90ZWN0ZWQgcmVzZXRRdWVyeSgpOiB2b2lkIHtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuc2VhcmNoU2VydmljZS5tYWtlQ2FySGlyZVF1ZXJ5KCk7XG4gICAgaWYoIXRoaXMuaGFzTm9uRW50ZXJwcmlzZUNhckFjY2Vzcyl7XG4gICAgICBxdWVyeS5kcml2ZXJBZ2UgPSB0aGlzLmRyaXZlckFnZXNbMF0udmFsdWU7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyhxdWVyeSk7XG4gICAgdGhpcy5lc3RpbWF0ZWRNaWxlYWdlID0gbnVsbDtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBwcml2YXRlIF9pc1ZhbGlkKCkge1xuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKENhcmhpcmVFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsIHtcbiAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtcyxcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcbiAgICB9KTtcblxuICAgIC8vIGdvIG92ZXIgYW5kIGNoZWNrIHRoYXQgYWxsIG9mIHRoZSB2YXJpb3VzIHZhcmlhYmxlcyBhcmUgY29ycmVjdFxuXG4gICAgLy8gZmlyc3Qgb2YgYWxsIGNoZWNrIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIGxvY2F0aW9uXG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcbiAgICB0aGlzLnZhbGlkYXRpb25GYXZvdXJpdGVNZXNzYWdlcyA9IFtdO1xuXG4gICAgc3dpdGNoICh0aGlzLmxvY2F0aW9uVHlwZSkge1xuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkFpcnBvcnQ6XG4gICAgICAgIGlmICghdGhpcy5waWNrdXBfbG9jYXRpb24gfHwgIXRoaXMucGlja3VwX2xvY2F0aW9uLmRlc3RpbmF0aW9uKSB7XG4gICAgICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnUGxlYXNlIHN1cHBseSBhIHBpY2t1cCBsb2NhdGlvbicsIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmRyb3BvZmZfbG9jYXRpb24gfHwgIXRoaXMuZHJvcG9mZl9sb2NhdGlvbi5kZXN0aW5hdGlvbikge1xuICAgICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ1BsZWFzZSBzdXBwbHkgYSBkcm9wb2ZmIGxvY2F0aW9uJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuQ2l0eTpcbiAgICAgICAgaWYgKCF0aGlzLmNpdHlQaWNrdXApIHtcbiAgICAgICAgICB0aGlzLmFkZFZhbGlkYXRpb25NZXNzYWdlKCdQbGVhc2Ugc3VwcGx5IGEgcGlja3VwIGNpdHknLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5jaXR5RHJvcG9mZikge1xuICAgICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ1BsZWFzZSBzdXBwbHkgYSBkcm9wb2ZmIGNpdHknLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5Qb3N0Y29kZTpcbiAgICAgICAgaWYgKCF0aGlzLnBvc3Rjb2RlUGlja3VwKSB7XG4gICAgICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnUGxlYXNlIHN1cHBseSBhIHBpY2t1cCBkZXBvdCcsIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnBvc3Rjb2RlRHJvcG9mZikge1xuICAgICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ1BsZWFzZSBzdXBwbHkgYSBkcm9wb2ZmIGRlcG90JywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZXN0aW1hdGVkTWlsZWFnZSAmJiB0aGlzLmVzdGltYXRlZE1pbGVhZ2UgPD0gMCkge1xuICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnRXN0aW1hdGVkIE1pbGFnZSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLicsIHRydWUpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAoIXRoaXMucGlja3VwX2RhdGV0aW1lKSB7XG4gICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ1BsZWFzZSBzdXBwbHkgYSBwaWNrdXAgdGltZSBhbmQgZGF0ZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuZHJvcG9mZl9kYXRldGltZSkge1xuICAgICAgICB0aGlzLmFkZFZhbGlkYXRpb25NZXNzYWdlKCdQbGVhc2Ugc3VwcGx5IGEgZHJvcCBvZmYgdGltZSBhbmQgZGF0ZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5kcm9wb2ZmX2RhdGV0aW1lPy5pc1NhbWVPckJlZm9yZSh0aGlzLnBpY2t1cF9kYXRldGltZSwgJ21pbnV0ZScpKSB7XG4gICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoXG4gICAgICAgICAgJ0Ryb3BvZmYgZGF0ZS90aW1lIGNhbm5vdCBiZSBiZWZvcmUgb3IgdGhlIHNhbWUgYXMgcGlja3VwIGRhdGUvdGltZSdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCh0aGlzLmRlbGl2ZXJ5IHx8IHRoaXMuY29sbGVjdGlvbiB8fCAhdGhpcy5oYXNOb25FbnRlcnByaXNlQ2FyQWNjZXNzKSAmJiB0aGlzLnBpY2t1cF9kYXRldGltZT8uaXNCZWZvcmUobW9tZW50KCkuYWRkKDI0LCAnaG91cnMnKSkpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcbiAgICAgICAgICAnUGlja3VwIGRhdGUvdGltZSBtdXN0IGJlIGF0IGxlYXN0IDI0IGhvdXJzIGZyb20gbm93J1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5waWNrdXBfZGF0ZXRpbWU/LmlzQmVmb3JlKG1vbWVudCgpKSkge1xuICAgICAgICB0aGlzLmFkZFZhbGlkYXRpb25NZXNzYWdlKCdQaWNrdXAgZGF0ZS90aW1lIG11c3QgYmUgYWZ0ZXIgcHJlc2VudCBkYXRlL3RpbWUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZHJvcG9mZl9kYXRldGltZT8uaXNCZWZvcmUobW9tZW50KCkpKSB7XG4gICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ0Ryb3BvZmYgZGF0ZS90aW1lIG11c3QgYmUgYWZ0ZXIgcHJlc2VudCBkYXRlL3RpbWUnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge31cblxuICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XG4gICAgdGhpcy5pc0Zhdm91cml0ZVZhbGlkLm5leHQodGhpcy52YWxpZGF0aW9uRmF2b3VyaXRlTWVzc2FnZXMubGVuZ3RoID09PSAwKTtcbiAgICB0aGlzLm1lc3NhZ2VzLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMpO1xuICB9XG5cbiAgc3RhcnRTZWFyY2goKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy5yZXN1bHRzLm5leHQoW10pO1xuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcbiAgICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IE9iamVjdC5mcmVlemUodGhpcy5oZWxwZXJzLmNsb25lKHRoaXMudGVtcFBhcmFtcykpO1xuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLCB7XG4gICAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtcyxcbiAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxuICAgICAgfSk7XG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlUmVjZW50U2VhcmNoKHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnkpKTtcbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaChcbiAgICAgICAgdGhpcy5jYXJoaXJlZmV0Y2hlci5mZXRjaExpc3QodGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3M+KHF1ZXJ5KSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ210U2VhcmNoKHF1ZXJ5OiBTZWFyY2hDYXJIaXJlUXVlcnlWYXJpYWJsZXMpOiBPYnNlcnZhYmxlPENhckhpcmVRdW90ZVJlc3VsdEFycmF5PiB7XG4gICAgcmV0dXJuIHRoaXMuY2FyaGlyZWZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KTtcbiAgfVxuXG4gIHNlYXJjaENhckhpcmVEZXBvdHNBbmRRdW90ZXMobGF0aXR1ZGU6IG51bWJlciwgbG9uZ2l0dWRlOiBudW1iZXIsIHJhZGl1czogc3RyaW5nLCBvcHRpb25zPzogU2VhcmNoQ2FySGlyZVF1ZXJ5VmFyaWFibGVzLCBkcm9wb2ZmQ2FySGlyZURlcG90PzogQ2FySGlyZURlcG90KTogT2JzZXJ2YWJsZTxDYXJIaXJlUXVvdGVSZXN1bHRBcnJheT4ge1xuICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0Q2FySGlyZURlcG90cyhsYXRpdHVkZSwgbG9uZ2l0dWRlLCByYWRpdXMpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGRlcG90czogQ2FySGlyZURlcG90W10pID0+IHtcbiAgICAgICAgY29uc3QgcmVsZXZhbnREZXBvdHMgPSBkZXBvdHMuZmlsdGVyKGRlcG90ID0+XG4gICAgICAgICAgIWRyb3BvZmZDYXJIaXJlRGVwb3QgJiYgKCFvcHRpb25zPy52ZW5kb3IgfHwgb3B0aW9ucy52ZW5kb3IgPT09IGRlcG90LnZlbmRvckNvZGUpIHx8XG4gICAgICAgICAgZHJvcG9mZkNhckhpcmVEZXBvdD8udmVuZG9yQ29kZSA9PT0gZGVwb3QudmVuZG9yQ29kZVxuICAgICAgICApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhyZWxldmFudERlcG90cyk7XG4gICAgICAgIGNvbnN0IHNlYXJjaE9ic2VydmFibGVzID0gcmVsZXZhbnREZXBvdHMubWFwKChkZXBvdDogQ2FySGlyZURlcG90KSA9PiB7XG4gICAgICAgICAgY29uc3QgZHJvcG9mZkRlcG90OiBDYXJIaXJlRGVwb3QgPSBkcm9wb2ZmQ2FySGlyZURlcG90IHx8IGRlcG90O1xuICAgICAgICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hDYXJIaXJlUXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICAgICAgICBkZXBvdDoge1xuICAgICAgICAgICAgICBkcm9wT2ZmRXh0ZW5kZWRMb2NhdGlvbkNvZGU6IGRyb3BvZmZEZXBvdC5leHRlbmRlZExvY2F0aW9uQ29kZSxcbiAgICAgICAgICAgICAgZHJvcE9mZkxvY2F0aW9uQ29kZTogZHJvcG9mZkRlcG90LmxvY2F0aW9uQ29kZSxcbiAgICAgICAgICAgICAgcGlja3VwRXh0ZW5kZWRMb2NhdGlvbkNvZGU6IGRlcG90LmV4dGVuZGVkTG9jYXRpb25Db2RlLFxuICAgICAgICAgICAgICBwaWNrdXBMb2NhdGlvbkNvZGU6IGRlcG90LmxvY2F0aW9uQ29kZSxcbiAgICAgICAgICAgICAgdmVuZG9yQ29kZTogZGVwb3QudmVuZG9yQ29kZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFpcmNvbjogb3B0aW9ucz8uYWlyY29uLFxuICAgICAgICAgICAgZXN0aW1hdGVkRGFpbHlEaXN0YW5jZTogb3B0aW9ucz8uZXN0aW1hdGVkRGFpbHlEaXN0YW5jZSxcbiAgICAgICAgICAgIHRyYW5zbWlzc2lvbjogb3B0aW9ucz8udHJhbnNtaXNzaW9uLFxuICAgICAgICAgICAgdHlwZTogb3B0aW9ucz8udHlwZSxcbiAgICAgICAgICAgIHRyYXZlbGxlcnM6IHRoaXMudHJhdmVsbGVycy5tYXAodHJhdmVsbGVyID0+IHtyZXR1cm4ge2lkOiB0cmF2ZWxsZXIuaWR9fSksXG4gICAgICAgICAgICBwaWNrdXBEYXRlVGltZTogPHN0cmluZz5vcHRpb25zPy5waWNrdXBEYXRlVGltZSxcbiAgICAgICAgICAgIGRyb3BvZmZEYXRlVGltZTogPHN0cmluZz5vcHRpb25zPy5kcm9wb2ZmRGF0ZVRpbWUsXG4gICAgICAgICAgICBjbGFzczogb3B0aW9ucz8uY2xhc3NcbiAgICAgICAgICB9O1xuXG5cbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydEJ5Q29kZSg8c3RyaW5nPmRyb3BvZmZEZXBvdC5sb2NhdGlvbkNvZGUpLnBpcGUoXG4gICAgICAgICAgICBtYXAocmVzdWx0ID0+IHJlc3VsdClcbiAgICAgICAgICApLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5pYXRhTWF0Y2gpIHtcbiAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSByZXN1bHQuaWF0YU1hdGNoO1xuICAgICAgICAgICAgICBjb25zdCB0ZXN0OiBPQlRBaXJwb3J0RGV0YWlscyA9IHtcbiAgICAgICAgICAgICAgICBnYXRld2F5OiA8c3RyaW5nPm1hdGNoLmlhdGEsXG4gICAgICAgICAgICAgICAgbG9jYXRpb25UeXBlOiBMb2NhdGlvblR5cGUuQSxcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbjogbWF0Y2gubmFtZSxcbiAgICAgICAgICAgICAgICB0ZXJtaW5hbHM6IDxhbnk+bWF0Y2gudGVybWluYWxzLFxuICAgICAgICAgICAgICAgIGNvdW50cnk6IDxzdHJpbmc+bWF0Y2gubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxuICAgICAgICAgICAgICAgIGNvdW50cnlDb2RlOiA8c3RyaW5nPm1hdGNoLmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnBpY2t1cF9sb2NhdGlvbiA9IHRlc3Q7XG4gICAgICAgICAgICAgIHRoaXMuZHJvcG9mZl9sb2NhdGlvbiA9IHRlc3Q7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiB0aGlzLmdtdFNlYXJjaChxdWVyeSkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgocmVzdWx0OiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSkgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZWZlcnJlZE9wdGlvbnMgPSByZXN1bHQuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24uY29tcGFueVByZWZlcnJlZCB8fCBvcHRpb24udG1jUHJlZmVycmVkKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbnMgPSBwcmVmZXJyZWRPcHRpb25zLmxlbmd0aCA+IDAgPyBwcmVmZXJyZWRPcHRpb25zIDogW3Jlc3VsdC5yZWR1Y2UoKG1pbiwgb3B0aW9uKSA9PiBvcHRpb24uZGlzcGxheVJlY29yZC5wcmljZSA8IG1pbi5kaXNwbGF5UmVjb3JkLnByaWNlID8gb3B0aW9uIDogbWluLCByZXN1bHRbMF0pXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZU9mKHNlbGVjdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmFibGVPZihbXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChzZWFyY2hPYnNlcnZhYmxlcy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gZm9ya0pvaW4oc2VhcmNoT2JzZXJ2YWJsZXMpLnBpcGUoXG4gICAgICAgICAgICBtYXAocmVzdWx0cyA9PiBbXS5jb25jYXQoLi4ucmVzdWx0cykpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRFbnRDYXJoaXJlTG9jYXRpb25zUG9zdGNvZGUoY291bnRyeUNvZGU6c3RyaW5nLHBvc3Rjb2RlOnN0cmluZyx2ZW5kb3I6c3RyaW5nKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkNvZGVzW10+IHtcbiAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEVudExvY2F0aW9uc1Bvc3Rjb2RlKGNvdW50cnlDb2RlLCBwb3N0Y29kZSx2ZW5kb3IpO1xuICB9XG5cbiAgZ2V0RW50Q2FyaGlyZUxvY2F0aW9uc0NpdHkoY291bnRyeUNvZGU6c3RyaW5nLGNpdHk6c3RyaW5nLHZlbmRvcjpzdHJpbmcpOiBPYnNlcnZhYmxlPExvY2F0aW9uQ29kZXNbXT4ge1xuICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0RW50TG9jYXRpb25zQ2l0eShjb3VudHJ5Q29kZSwgY2l0eSx2ZW5kb3IpO1xuICB9XG5cbiAgZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnk6IFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3MpOiBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMge1xuICAgIGNvbnN0IHJlY2VudFNlYXJjaFF1ZXJ5OiBDYXJIaXJlU2VhcmNoQXJncyA9IHRoaXMudXBkYXRlU2VyY2hRdWVyeSh7Li4ucXVlcnl9KTtcbiAgICByZXR1cm4ge1xuICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkNhcixcbiAgICAgIHNlYXJjaEFyZ3M6IHJlY2VudFNlYXJjaFF1ZXJ5LFxuICAgICAgdHJhdmVsRGF0ZTogdGhpcy5waWNrdXBfZGF0ZXRpbWUuZm9ybWF0KCksXG4gICAgICB0cmF2ZWxsZXJzOiB0aGlzLmhlbHBlcnMuZ2V0VHJhdmVsbGVyc0lkKHRoaXMudHJhdmVsbGVycywgdGhpcy51c2VyU2VydmljZS5ib2JvPy5pZClcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5OiBRdWVyeVNlYXJjaENhckhpcmVBcmdzKTogQ2FySGlyZVNlYXJjaEFyZ3Mge1xuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBDYXJIaXJlU2VhcmNoQXJncyA9IHF1ZXJ5O1xuICAgIHN3aXRjaCAodGhpcy5sb2NhdGlvblR5cGUpIHtcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5DaXR5OlxuICAgICAgICBzZWFyY2hRdWVyeS5jaXR5ID0ge1xuICAgICAgICAgIHBpY2t1cE5hbWU6IHRoaXMuY2l0eVBpY2t1cC5uYW1lLFxuICAgICAgICAgIHBpY2t1cENvdW50cnlDb2RlOiB0aGlzLmNpdHlQaWNrdXAuY291bnRyeUNvZGUsXG4gICAgICAgICAgcGlja3VwQ2l0eTogdGhpcy5jaXR5UGlja3VwLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgcGlja3VwTGF0aXR1ZGU6IHRoaXMuY2l0eVBpY2t1cC5sYXRpdHVkZSxcbiAgICAgICAgICBwaWNrdXBMb25naXR1ZGU6IHRoaXMuY2l0eVBpY2t1cC5sb25naXR1ZGUsXG5cbiAgICAgICAgICBkcm9wT2ZmTmFtZTogdGhpcy5jaXR5RHJvcG9mZi5uYW1lLFxuICAgICAgICAgIGRyb3BvZmZDb3VudHJ5Q29kZTogdGhpcy5jaXR5RHJvcG9mZi5jb3VudHJ5Q29kZSxcbiAgICAgICAgICBkcm9wb2ZmQ2l0eTogdGhpcy5jaXR5RHJvcG9mZi5pZC50b1N0cmluZygpLFxuICAgICAgICAgIGRyb3BPZmZMYXRpdHVkZTogdGhpcy5jaXR5RHJvcG9mZi5sYXRpdHVkZSxcbiAgICAgICAgICBkcm9wT2ZmTG9uZ2l0dWRlOiB0aGlzLmNpdHlEcm9wb2ZmLmxvbmdpdHVkZSxcblxuICAgICAgICAgIHBpY2t1cEFkZHJlc3NMaW5lczogdGhpcy5jaXR5UGlja3VwRGVwb3QuYWRkcmVzc0xpbmVzWzBdLFxuICAgICAgICAgIHBpY2t1cENpdHlOYW1lOiB0aGlzLmNpdHlQaWNrdXBEZXBvdC5jaXR5TmFtZSxcbiAgICAgICAgICBwaWNrdXBFeHRlbmRlZExvY2F0aW9uQ29kZTogdGhpcy5jaXR5UGlja3VwRGVwb3QuZXh0ZW5kZWRMb2NhdGlvbkNvZGUsXG4gICAgICAgICAgcGlja3VwTG9jYXRpb25Db2RlOiB0aGlzLmNpdHlQaWNrdXBEZXBvdC5sb2NhdGlvbkNvZGUsXG4gICAgICAgICAgcGlja3VwVmVuZG9yOiB0aGlzLmNpdHlQaWNrdXBEZXBvdC52ZW5kb3IsXG4gICAgICAgICAgcGlja3VwVmVuZG9yQ29kZTogdGhpcy5jaXR5UGlja3VwRGVwb3QudmVuZG9yQ29kZSxcbiAgICAgICAgICBjaG9zZW5EaXN0YW5jZTogdGhpcy5jaG9zZW5EaXN0YW5jZSxcblxuICAgICAgICAgIGRyb3BPZmZBZGRyZXNzTGluZXM6IHRoaXMuY2l0eURyb3BvZmZEZXBvdC5hZGRyZXNzTGluZXNbMF0sXG4gICAgICAgICAgZHJvcE9mZkNpdHlOYW1lOiB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QuY2l0eU5hbWUsXG4gICAgICAgICAgZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlOiB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QuZXh0ZW5kZWRMb2NhdGlvbkNvZGUsXG4gICAgICAgICAgZHJvcE9mZkxvY2F0aW9uQ29kZTogdGhpcy5jaXR5RHJvcG9mZkRlcG90LmxvY2F0aW9uQ29kZSxcbiAgICAgICAgICBkcm9wT2ZmVmVuZG9yOiB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QudmVuZG9yLFxuICAgICAgICAgIGRyb3BPZmZWZW5kb3JDb2RlOiB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QudmVuZG9yQ29kZSxcbiAgICAgICAgICBwaWNrdXBMb2NhdGlvblR5cGU6IHRoaXMuY2l0eVBpY2t1cERlcG90LmxvY2F0aW9uVHlwZSxcbiAgICAgICAgICBkcm9wb2ZmTG9jYXRpb25UeXBlOiB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QubG9jYXRpb25UeXBlXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlOlxuICAgICAgICBzZWFyY2hRdWVyeS5kZXBvdCA9IHtcbiAgICAgICAgICB2ZW5kb3JDb2RlOiB0aGlzLnBvc3Rjb2RlUGlja3VwLnZlbmRvckNvZGUsXG4gICAgICAgICAgcGlja3VwTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlUGlja3VwLmxvY2F0aW9uQ29kZSxcbiAgICAgICAgICBwaWNrdXBFeHRlbmRlZExvY2F0aW9uQ29kZTogdGhpcy5wb3N0Y29kZVBpY2t1cC5leHRlbmRlZExvY2F0aW9uQ29kZSxcbiAgICAgICAgICBwaWNrdXBBZGRyZXNzTGluZXM6IHRoaXMucG9zdGNvZGVQaWNrdXAuYWRkcmVzc0xpbmVzWzBdLFxuICAgICAgICAgIHBpY2t1cENpdHlOYW1lOiB0aGlzLnBvc3Rjb2RlUGlja3VwLmNpdHlOYW1lLFxuICAgICAgICAgIHBpY2t1cFZlbmRvcjogdGhpcy5wb3N0Y29kZVBpY2t1cC52ZW5kb3IsXG5cbiAgICAgICAgICBkcm9wT2ZmTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZi5sb2NhdGlvbkNvZGUsXG4gICAgICAgICAgZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZi5leHRlbmRlZExvY2F0aW9uQ29kZSxcbiAgICAgICAgICBkcm9wb2ZmQWRkcmVzc0xpbmVzOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZi5hZGRyZXNzTGluZXNbMF0sXG4gICAgICAgICAgZHJvcG9mZkNpdHlOYW1lOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZi5jaXR5TmFtZSxcbiAgICAgICAgICBkcm9wb2ZmVmVuZG9yOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZi52ZW5kb3IsXG4gICAgICAgICAgY2hvc2VuRGlzdGFuY2U6IHRoaXMuY2hvc2VuRGlzdGFuY2UsXG5cbiAgICAgICAgICBwaWNrdXBQb3N0Q29kZTogdGhpcy5wb3N0Y29kZVBpY2t1cFJhdy5uYW1lLFxuICAgICAgICAgIHBpY2t1cExhdGl0dWRlOiB0aGlzLnBvc3Rjb2RlUGlja3VwUmF3LmxhdGl0dWRlLFxuICAgICAgICAgIHBpY2t1cExvbmdpdHVkZTogdGhpcy5wb3N0Y29kZVBpY2t1cFJhdy5sb25naXR1ZGUsXG5cbiAgICAgICAgICBkcm9wb2ZmUG9zdENvZGU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmUmF3Lm5hbWUsXG4gICAgICAgICAgZHJvcG9mZkxhdGl0dWRlOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZlJhdy5sYXRpdHVkZSxcbiAgICAgICAgICBkcm9wb2ZmTG9uZ2l0dWRlOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZlJhdy5sb25naXR1ZGUsXG4gICAgICAgICAgcGlja3VwTG9jYXRpb25UeXBlOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZi5sb2NhdGlvblR5cGUsXG4gICAgICAgICAgZHJvcG9mZkxvY2F0aW9uVHlwZTogdGhpcy5wb3N0Y29kZURyb3BvZmYubG9jYXRpb25UeXBlXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBzZWFyY2hRdWVyeTtcbiAgfVxuXG4gIHB1YmxpYyBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xuICAgIHRoaXMuZHJvcG9mZl9kYXRldGltZSA9IG1vbWVudChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kcm9wb2ZmRGF0ZVRpbWUpO1xuICAgIHRoaXMucGlja3VwX2RhdGV0aW1lID0gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnBpY2t1cERhdGVUaW1lKTtcblxuICAgIHRoaXMuYXBwbHlTZWFyY2hRdWVyeShyZWNlbnRTZWFyY2guc2VhcmNoQXJncywgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGdldFBhcmFtc0ZvckNhcmJ5QWlycG9ydChhaXJwb3J0OiBDYXJIaXJlQWlycG9ydElucHV0LCBzdGFydFNlYXJjaDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLmxvY2F0aW9uVHlwZSA9IExvY2F0aW9uVHlwZXMuQWlycG9ydDtcbiAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0QnlDb2RlKGFpcnBvcnQucGlja3VwQ29kZSksXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydEJ5Q29kZShhaXJwb3J0LmRyb3BvZmZDb2RlKVxuICAgIF0pLnN1YnNjcmliZSgoW2RlcGFydExvY2F0aW9uLCBhcnJpdmVMb2NhdGlvbl0pID0+IHtcbiAgICAgIGlmIChkZXBhcnRMb2NhdGlvbiAmJiBhcnJpdmVMb2NhdGlvbikge1xuICAgICAgICB0aGlzLmRyb3BvZmZfbG9jYXRpb24gPSB7XG4gICAgICAgICAgZGVzdGluYXRpb246IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5uYW1lLFxuICAgICAgICAgIGdhdGV3YXk6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5pYXRhLFxuICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFscyksXG4gICAgICAgICAgY291bnRyeTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXG4gICAgICAgICAgcG9zdGNvZGU6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcbiAgICAgICAgICBjb3VudHJ5Q29kZTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucGlja3VwX2xvY2F0aW9uID0ge1xuICAgICAgICAgIGRlc3RpbmF0aW9uOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2gubmFtZSxcbiAgICAgICAgICBnYXRld2F5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2guaWF0YSxcbiAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMuc2VhcmNoU2VydmljZS5wcm9jZXNzVGVybWluYWxzKGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC50ZXJtaW5hbHMpLFxuICAgICAgICAgIGNvdW50cnk6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxuICAgICAgICAgIHBvc3Rjb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXG4gICAgICAgICAgY291bnRyeUNvZGU6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZHJvcG9mZl9jb3VudHJ5ID0gdGhpcy5kcm9wb2ZmX2xvY2F0aW9uLmNvdW50cnlDb2RlO1xuICAgICAgICB0aGlzLnBpY2t1cF9jb3VudHJ5ID0gdGhpcy5waWNrdXBfbG9jYXRpb24uY291bnRyeUNvZGU7XG4gICAgICAgIGlmIChzdGFydFNlYXJjaCkge1xuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGFyYW1zRm9yQ2FyYnlDaXR5KGNpdHk6IElDYXJIaXJlQ2l0eSwgc3RhcnRTZWFyY2g6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhdGlvblR5cGUgPSBMb2NhdGlvblR5cGVzLkNpdHk7XG4gICAgdGhpcy5jaG9zZW5EaXN0YW5jZSA9IGNpdHkuY2hvc2VuRGlzdGFuY2UgPz8gJzUnO1xuXG4gICAgdGhpcy5jaXR5UGlja3VwID0ge1xuICAgICAgY291bnRyeUNvZGU6IGNpdHkucGlja3VwQ291bnRyeUNvZGUsXG4gICAgICBpZDogY2l0eS5waWNrdXBDaXR5LFxuICAgICAgbmFtZTogY2l0eS5waWNrdXBOYW1lLFxuICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5DaXR5LFxuICAgICAgbGF0aXR1ZGU6IGNpdHkucGlja3VwTGF0aXR1ZGUsXG4gICAgICBsb25naXR1ZGU6IGNpdHkucGlja3VwTG9uZ2l0dWRlXG4gICAgfTtcblxuICAgIHRoaXMuY2l0eURyb3BvZmYgPSB7XG4gICAgICBjb3VudHJ5Q29kZTogY2l0eS5kcm9wb2ZmQ291bnRyeUNvZGUsXG4gICAgICBpZDogY2l0eS5kcm9wb2ZmQ2l0eSxcbiAgICAgIG5hbWU6IGNpdHkuZHJvcE9mZk5hbWUsXG4gICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLkNpdHksXG4gICAgICBsYXRpdHVkZTogY2l0eS5kcm9wT2ZmTGF0aXR1ZGUsXG4gICAgICBsb25naXR1ZGU6IGNpdHkuZHJvcE9mZkxvbmdpdHVkZVxuICAgIH07XG5cbiAgICB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QgPSB7XG4gICAgICBhZGRyZXNzTGluZXM6IFtjaXR5LmRyb3BPZmZBZGRyZXNzTGluZXNdLFxuICAgICAgY2l0eU5hbWU6IGNpdHkuZHJvcE9mZkNpdHlOYW1lLFxuICAgICAgZXh0ZW5kZWRMb2NhdGlvbkNvZGU6IGNpdHkuZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlLFxuICAgICAgbG9jYXRpb25Db2RlOiBjaXR5LmRyb3BPZmZMb2NhdGlvbkNvZGUsXG4gICAgICB2ZW5kb3I6IGNpdHkuZHJvcE9mZlZlbmRvcixcbiAgICAgIHZlbmRvckNvZGU6IGNpdHkuZHJvcE9mZlZlbmRvckNvZGVcbiAgICB9O1xuXG4gICAgdGhpcy5jaXR5UGlja3VwRGVwb3QgPSB7XG4gICAgICBhZGRyZXNzTGluZXM6IFtjaXR5LnBpY2t1cEFkZHJlc3NMaW5lc10sXG4gICAgICBjaXR5TmFtZTogY2l0eS5waWNrdXBDaXR5TmFtZSxcbiAgICAgIGV4dGVuZGVkTG9jYXRpb25Db2RlOiBjaXR5LnBpY2t1cEV4dGVuZGVkTG9jYXRpb25Db2RlLFxuICAgICAgbG9jYXRpb25Db2RlOiBjaXR5LnBpY2t1cExvY2F0aW9uQ29kZSxcbiAgICAgIHZlbmRvcjogY2l0eS5waWNrdXBWZW5kb3IsXG4gICAgICB2ZW5kb3JDb2RlOiBjaXR5LnBpY2t1cFZlbmRvckNvZGVcbiAgICB9O1xuXG4gICAgaWYgKHN0YXJ0U2VhcmNoKSB7XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGFyYW1zRm9yQ2FyYnlQb3N0Q29kZShkZXBvdDogSUNhckhpcmVEZXBvdCwgc3RhcnRTZWFyY2g6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhdGlvblR5cGUgPSBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlO1xuICAgIHRoaXMuY2hvc2VuRGlzdGFuY2UgPSBkZXBvdC5jaG9zZW5EaXN0YW5jZSA/PyAnNSc7XG5cbiAgICB0aGlzLnBvc3Rjb2RlRHJvcG9mZiA9IHtcbiAgICAgIGFkZHJlc3NMaW5lczogW2RlcG90LmRyb3BvZmZBZGRyZXNzTGluZXNdLFxuICAgICAgdmVuZG9yQ29kZTogZGVwb3QudmVuZG9yQ29kZSxcbiAgICAgIGxvY2F0aW9uQ29kZTogZGVwb3QuZHJvcE9mZkxvY2F0aW9uQ29kZSxcbiAgICAgIGV4dGVuZGVkTG9jYXRpb25Db2RlOiBkZXBvdC5kcm9wT2ZmRXh0ZW5kZWRMb2NhdGlvbkNvZGUsXG4gICAgICBjaXR5TmFtZTogZGVwb3QuZHJvcG9mZkNpdHlOYW1lLFxuICAgICAgdmVuZG9yOiBkZXBvdC5kcm9wb2ZmVmVuZG9yXG4gICAgfTtcblxuICAgIHRoaXMucG9zdGNvZGVEcm9wb2ZmUmF3ID0ge1xuICAgICAgbmFtZTogZGVwb3QuZHJvcG9mZlBvc3RDb2RlLFxuICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5Qb3N0Y29kZSxcbiAgICAgIGxhdGl0dWRlOiBkZXBvdC5kcm9wb2ZmTGF0aXR1ZGUsXG4gICAgICBsb25naXR1ZGU6IGRlcG90LmRyb3BvZmZMb25naXR1ZGVcbiAgICB9O1xuICAgIHRoaXMucG9zdGNvZGVQaWNrdXAgPSB7XG4gICAgICBhZGRyZXNzTGluZXM6IFtkZXBvdC5waWNrdXBBZGRyZXNzTGluZXNdLFxuICAgICAgdmVuZG9yQ29kZTogZGVwb3QudmVuZG9yQ29kZSxcbiAgICAgIGxvY2F0aW9uQ29kZTogZGVwb3QucGlja3VwTG9jYXRpb25Db2RlLFxuICAgICAgZXh0ZW5kZWRMb2NhdGlvbkNvZGU6IGRlcG90LnBpY2t1cEV4dGVuZGVkTG9jYXRpb25Db2RlLFxuICAgICAgY2l0eU5hbWU6IGRlcG90LnBpY2t1cENpdHlOYW1lLFxuICAgICAgdmVuZG9yOiBkZXBvdC5waWNrdXBWZW5kb3JcbiAgICB9O1xuXG4gICAgdGhpcy5wb3N0Y29kZVBpY2t1cFJhdyA9IHtcbiAgICAgIG5hbWU6IGRlcG90LnBpY2t1cFBvc3RDb2RlLFxuICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5Qb3N0Y29kZSxcbiAgICAgIGxhdGl0dWRlOiBkZXBvdC5waWNrdXBMYXRpdHVkZSxcbiAgICAgIGxvbmdpdHVkZTogZGVwb3QucGlja3VwTG9uZ2l0dWRlXG4gICAgfTtcblxuICAgIGlmIChzdGFydFNlYXJjaCkge1xuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcbiAgICB9XG4gIH1cblxuICBnZXRTZWFyY2hRdWVyeSgpOiBRdWVyeVNlYXJjaENhckhpcmVBcmdzIHtcbiAgICBjb25zdCBxdWVyeTogUXVlcnlTZWFyY2hDYXJIaXJlQXJncyA9IHt9IGFzIFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3M7XG4gICAgY29uc3QgaXNVc2VLbUZvckNhckhpcmUgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdChVc2VyRmF2b3J1cml0ZS51c2VLbUZvckNhckhpcmUpIGFzIHt2YWx1ZTogYm9vbGVhbn07XG4gICAgc3dpdGNoICh0aGlzLmxvY2F0aW9uVHlwZSkge1xuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkFpcnBvcnQ6XG4gICAgICAgIHRoaXMuZGVsaXZlcnkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uID0gZmFsc2U7XG4gICAgICAgIHF1ZXJ5LmFpcnBvcnQgPSB7XG4gICAgICAgICAgcGlja3VwQ29kZTogJycsXG4gICAgICAgICAgZHJvcG9mZkNvZGU6ICcnXG4gICAgICAgIH07XG5cbiAgICAgICAgcXVlcnkuYWlycG9ydC5waWNrdXBDb2RlID0gdGhpcy5waWNrdXBfbG9jYXRpb24uZ2F0ZXdheTtcbiAgICAgICAgcXVlcnkuYWlycG9ydC5kcm9wb2ZmQ29kZSA9IHRoaXMucmV0dXJuX3RvX3BpY2t1cFxuICAgICAgICAgID8gdGhpcy5waWNrdXBfbG9jYXRpb24uZ2F0ZXdheVxuICAgICAgICAgIDogdGhpcy5kcm9wb2ZmX2xvY2F0aW9uLmdhdGV3YXk7XG4gICAgICAgIHF1ZXJ5LmFpcnBvcnQucGlja3VwQWlycG9ydEZ1bGxOYW1lID0gdGhpcy5waWNrdXBfbG9jYXRpb24uZGVzdGluYXRpb247XG4gICAgICAgIHF1ZXJ5LmFpcnBvcnQuZHJvcG9mZkFpcnBvcnRGdWxsTmFtZSA9IHRoaXMucmV0dXJuX3RvX3BpY2t1cFxuICAgICAgICAgID8gdGhpcy5waWNrdXBfbG9jYXRpb24uZGVzdGluYXRpb25cbiAgICAgICAgICA6IHRoaXMuZHJvcG9mZl9sb2NhdGlvbi5kZXN0aW5hdGlvbjtcbiAgICAgICAgICBxdWVyeS5haXJwb3J0LnBpY2t1cENvdW50cnlDb2RlID0gdGhpcy5waWNrdXBfbG9jYXRpb24uY291bnRyeUNvZGU7XG4gICAgICAgICAgcXVlcnkuYWlycG9ydC5kcm9wb2ZmQ291bnRyeUNvZGUgPSB0aGlzLmRyb3BvZmZfbG9jYXRpb24uY291bnRyeUNvZGU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkNpdHk6XG4gICAgICAgIGlmICh0aGlzLmRlbGl2ZXJ5IHx8IHRoaXMuY29sbGVjdGlvbiB8fCAhdGhpcy5oYXNOb25FbnRlcnByaXNlQ2FyQWNjZXNzKSB7XG4gICAgICAgICAgcXVlcnkubG9jYXRpb24gPSB7XG4gICAgICAgICAgICBkcm9wb2ZmQ291bnRyeUNvZGU6IHRoaXMuY2l0eURyb3BvZmZEZXBvdC5jb3VudHJ5Q29kZSxcbiAgICAgICAgICAgIGRyb3BvZmZQb3N0YWxDb2RlOiB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QubG9jYXRpb25Db2RlLFxuICAgICAgICAgICAgZHJvcE9mZkxvY2F0aW9uQ29kZTp0aGlzLmNpdHlEcm9wb2ZmRGVwb3QuZXh0ZW5kZWRMb2NhdGlvbkNvZGUsXG5cbiAgICAgICAgICAgIHBpY2t1cENvdW50cnlDb2RlOiB0aGlzLmNpdHlQaWNrdXBEZXBvdC5jb3VudHJ5Q29kZSxcbiAgICAgICAgICAgIHBpY2t1cFBvc3RhbENvZGU6IHRoaXMuY2l0eVBpY2t1cERlcG90LmxvY2F0aW9uQ29kZSxcbiAgICAgICAgICAgIHBpY2tVcExvY2F0aW9uQ29kZTogdGhpcy5jaXR5UGlja3VwRGVwb3QuZXh0ZW5kZWRMb2NhdGlvbkNvZGUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlcnkuZGVwb3QgPSB7XG4gICAgICAgICAgdmVuZG9yQ29kZTogdGhpcy5jaXR5UGlja3VwRGVwb3QudmVuZG9yQ29kZSxcbiAgICAgICAgICBwaWNrdXBMb2NhdGlvbkNvZGU6IHRoaXMuY2l0eVBpY2t1cERlcG90LmxvY2F0aW9uQ29kZSxcbiAgICAgICAgICBwaWNrdXBFeHRlbmRlZExvY2F0aW9uQ29kZTogdGhpcy5jaXR5UGlja3VwRGVwb3QuZXh0ZW5kZWRMb2NhdGlvbkNvZGUsXG4gICAgICAgICAgZHJvcE9mZkxvY2F0aW9uQ29kZTogdGhpcy5jaXR5RHJvcG9mZkRlcG90LmxvY2F0aW9uQ29kZSxcbiAgICAgICAgICBkcm9wT2ZmRXh0ZW5kZWRMb2NhdGlvbkNvZGU6IHRoaXMuY2l0eURyb3BvZmZEZXBvdC5leHRlbmRlZExvY2F0aW9uQ29kZSxcbiAgICAgICAgICBwaWNrdXBMb2NhdGlvblR5cGU6IHRoaXMuY2l0eVBpY2t1cERlcG90LmxvY2F0aW9uVHlwZSxcbiAgICAgICAgICBkcm9wb2ZmTG9jYXRpb25UeXBlOiB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QubG9jYXRpb25UeXBlXG4gICAgICAgIH07XG4gICAgICAgIHF1ZXJ5LmxhdGl0dWRlID0gdGhpcy5jaXR5UGlja3VwLmxhdGl0dWRlID8gdGhpcy5jaXR5UGlja3VwLmxhdGl0dWRlIDogMDtcbiAgICAgICAgcXVlcnkubG9uZ2l0dWRlID0gdGhpcy5jaXR5UGlja3VwLmxvbmdpdHVkZSA/IHRoaXMuY2l0eVBpY2t1cC5sb25naXR1ZGUgOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT0xEIHBheWxvYWQgZm9yIGNpdHksIGFza2VkIHRvIGNoYW5nZVxuICAgICAgICAvLyBxdWVyeS5jaXR5ID0ge1xuICAgICAgICAvLyAgIHBpY2t1cENvdW50cnlDb2RlOiB0aGlzLmNpdHlQaWNrdXAuY291bnRyeUNvZGUsXG4gICAgICAgIC8vICAgcGlja3VwQ2l0eTogdGhpcy5jaXR5UGlja3VwLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIC8vICAgZHJvcG9mZkNvdW50cnlDb2RlOiB0aGlzLmNpdHlEcm9wb2ZmLmNvdW50cnlDb2RlLFxuICAgICAgICAvLyAgIGRyb3BvZmZDaXR5OiB0aGlzLmNpdHlEcm9wb2ZmLmlkLnRvU3RyaW5nKClcbiAgICAgICAgLy8gfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuUG9zdGNvZGU6XG4gICAgICAgIGlmICh0aGlzLmRlbGl2ZXJ5IHx8IHRoaXMuY29sbGVjdGlvbiB8fCAhdGhpcy5oYXNOb25FbnRlcnByaXNlQ2FyQWNjZXNzKSB7XG4gICAgICAgICAgcXVlcnkubG9jYXRpb24gPSB7XG4gICAgICAgICAgICBkcm9wb2ZmQ291bnRyeUNvZGU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmLmNvdW50cnlDb2RlLFxuICAgICAgICAgICAgZHJvcG9mZlBvc3RhbENvZGU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmLmxvY2F0aW9uQ29kZSxcbiAgICAgICAgICAgIGRyb3BPZmZMb2NhdGlvbkNvZGU6dGhpcy5wb3N0Y29kZURyb3BvZmYuZXh0ZW5kZWRMb2NhdGlvbkNvZGUsXG5cbiAgICAgICAgICAgIHBpY2t1cENvdW50cnlDb2RlOiB0aGlzLnBvc3Rjb2RlUGlja3VwLmNvdW50cnlDb2RlLFxuICAgICAgICAgICAgcGlja3VwUG9zdGFsQ29kZTogdGhpcy5wb3N0Y29kZVBpY2t1cC5sb2NhdGlvbkNvZGUsXG4gICAgICAgICAgICBwaWNrVXBMb2NhdGlvbkNvZGU6IHRoaXMucG9zdGNvZGVQaWNrdXAuZXh0ZW5kZWRMb2NhdGlvbkNvZGUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlcnkuZGVwb3QgPSB7XG4gICAgICAgICAgdmVuZG9yQ29kZTogdGhpcy5wb3N0Y29kZVBpY2t1cC52ZW5kb3JDb2RlLFxuICAgICAgICAgIHBpY2t1cExvY2F0aW9uQ29kZTogdGhpcy5wb3N0Y29kZVBpY2t1cC5sb2NhdGlvbkNvZGUsXG4gICAgICAgICAgcGlja3VwRXh0ZW5kZWRMb2NhdGlvbkNvZGU6IHRoaXMucG9zdGNvZGVQaWNrdXAuZXh0ZW5kZWRMb2NhdGlvbkNvZGUsXG4gICAgICAgICAgZHJvcE9mZkxvY2F0aW9uQ29kZTogdGhpcy5wb3N0Y29kZURyb3BvZmYubG9jYXRpb25Db2RlLFxuICAgICAgICAgIGRyb3BPZmZFeHRlbmRlZExvY2F0aW9uQ29kZTogdGhpcy5wb3N0Y29kZURyb3BvZmYuZXh0ZW5kZWRMb2NhdGlvbkNvZGUsXG4gICAgICAgICAgcGlja3VwTG9jYXRpb25UeXBlOiB0aGlzLnBvc3Rjb2RlUGlja3VwLmxvY2F0aW9uVHlwZSxcbiAgICAgICAgICBkcm9wb2ZmTG9jYXRpb25UeXBlOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZi5sb2NhdGlvblR5cGVcbiAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcXVlcnkuZHJvcG9mZkRhdGVUaW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdEdyYXBoUUxEYXRlVGltZSh0aGlzLmRyb3BvZmZfZGF0ZXRpbWUpO1xuICAgIHF1ZXJ5LnBpY2t1cERhdGVUaW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdEdyYXBoUUxEYXRlVGltZSh0aGlzLnBpY2t1cF9kYXRldGltZSk7XG4gICAgcXVlcnkuYWlyY29uID0gdGhpcy5haXJDb247XG5cbiAgICAvLyBub3cgZm9yIHRoZSBvcHRpb25hbCBmaWVsZHMgLSBudWxsaWZ5IHRoZXNlIGlmIHRoZXkgYXJlICctJyAoQW55KVxuICAgIGlmICh0aGlzLmxvY2F0aW9uVHlwZSA9PT0gTG9jYXRpb25UeXBlcy5BaXJwb3J0KSB7XG4gICAgICBxdWVyeS52ZW5kb3IgPSB0aGlzLmNob3NlblZlbmRvciA9PT0gJy0nID8gbnVsbCA6IHRoaXMuY2hvc2VuVmVuZG9yO1xuICAgIH1cbiAgICBxdWVyeS50cmFuc21pc3Npb24gPSB0aGlzLnRyYW5zbWlzc2lvbiB8fCBudWxsO1xuICAgIHF1ZXJ5LmNsYXNzID0gdGhpcy5jYXJDbGFzcyB8fCBudWxsO1xuICAgIHF1ZXJ5LnR5cGUgPSB0aGlzLmNhclR5cGUgfHwgbnVsbDtcbiAgICBxdWVyeS5lc3RpbWF0ZWREYWlseURpc3RhbmNlID0gdGhpcy5lc3RpbWF0ZWRNaWxlYWdlIHx8IG51bGw7XG4gICAgcXVlcnkuZXN0aW1hdGVkRGFpbHlEaXN0YW5jZVVuaXRzID0gdGhpcy5lc3RpbWF0ZWRNaWxlYWdlID8gaXNVc2VLbUZvckNhckhpcmU/LnZhbHVlID8gRGlzdGFuY2VUeXBlcy5LIDogRGlzdGFuY2VUeXBlcy5NIDogbnVsbDtcbiAgICBxdWVyeS50cmF2ZWxsZXJzID0gdGhpcy50cmF2ZWxsZXJzLm1hcCh0cmF2ZWxsZXIgPT4ge3JldHVybiB7aWQ6IHRyYXZlbGxlci5pZH19KTtcbiAgICBxdWVyeS5jb2xsZWN0aW9uID0gdGhpcy5jb2xsZWN0aW9uIHx8IG51bGw7XG4gICAgcXVlcnkuZGVsaXZlcnkgPSB0aGlzLmRlbGl2ZXJ5IHx8IG51bGw7XG4gICAgcXVlcnkuZHJpdmVyQWdlID0gdGhpcy5kZWxpdmVyeSB8fCB0aGlzLmNvbGxlY3Rpb24gfHwgIXRoaXMuaGFzTm9uRW50ZXJwcmlzZUNhckFjY2VzcyA/IHRoaXMuZHJpdmVyQWdlIDogbnVsbDtcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3M+KHF1ZXJ5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdG9kbyAtIHR1cm4gdGhpcyBpbnRvIGEgQkUgY2FsbCB0byBkeW5hbWljYWxseSBnZXQgdGhlIGxpc3Qgb2YgY2FyIGNsYXNzZXNcbiAgICogQHJldHVybnMgYWxsIGNhciBjbGFzc2VzIGFzIGFuIGFycmF5XG4gICAqL1xuICBnZXRDYXJDbGFzc2VzKCk6IE9ic2VydmFibGU8SUNhckNsYXNzZXNbXT4ge1xuICAgIHJldHVybiBvZih0aGlzLl9jYXJfY2xhc3Nlcyk7XG4gIH1cblxuICBnZXRMb2NhdGlvblR5cGVzKCkge1xuICAgIHJldHVybiBvZih0aGlzLl9sb2NhdGlvbl90eXBlcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gZmlsdGVyIGRvd24gdGhlIGNhciByZXN1bHRzIGJhc2VkIG9uIHVzZXIgY2hvc2VuIGZpbHRlcnNcbiAgICovXG4gIGZpbHRlclJlc3VsdHMoYXBwbGllZEZpbHRlcnM6IENhckhpcmVGaWx0ZXJzLCBzZWxlY3RlZFNvcnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBmdWxsUmVzdWx0czogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5mdWxsUmVzdWx0cyk7XG5cbiAgICAvLyBub3cgYXBwbHkgZmlsdGVyc1xuICAgIC8vIHByaWNlIGZpbHRlcnNcbiAgICBmdWxsUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLmZpbHRlcigocmVzdWx0OiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcbiAgICAgIGNvbnN0IHByaWNlID0gdGhpcy5nZXRQcmljZShyZXN1bHQpO1xuXG4gICAgICByZXR1cm4gcHJpY2UgPj0gYXBwbGllZEZpbHRlcnMubWluUHJpY2UgJiYgcHJpY2UgPD0gYXBwbGllZEZpbHRlcnMubWF4UHJpY2U7XG4gICAgfSk7XG5cbiAgICAvLyBhcHBseSB0cmFuc21pc3Npb24gZmlsdGVyc1xuICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5maWx0ZXJCeVRyYW5zbWlzc2lvblR5cGUoYXBwbGllZEZpbHRlcnMudHJhbnNtaXNzaW9ucywgZnVsbFJlc3VsdHMpO1xuXG4gICAgLy8gY2FyIHR5cGVzIChjbGFzcylcbiAgICBmdWxsUmVzdWx0cyA9IHRoaXMuZmlsdGVyQnlDYXJUeXBlKGFwcGxpZWRGaWx0ZXJzLnR5cGVzLCBmdWxsUmVzdWx0cyk7XG5cbiAgICAvLyBUcmF2ZWwgUG9saWN5XG4gICAgZnVsbFJlc3VsdHMgPSB0aGlzLmZpbHRlckJ5VHJhdmVsUG9saWN5KGFwcGxpZWRGaWx0ZXJzLnRyYXZlbFBvbGljeSwgZnVsbFJlc3VsdHMpO1xuXG4gICAgLy8gY29tcGFueVxuICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5maWx0ZXJCeUNvbXBhbnkoYXBwbGllZEZpbHRlcnMuY29tcGFuaWVzLCBmdWxsUmVzdWx0cyk7XG5cbiAgICAvLyBsYXN0bHkgYXBwbHkgYW55IHJlcXVpcmVkIHNvcnRpbmdcbiAgICBmdWxsUmVzdWx0cyA9IHRoaXMuc29ydFJlc3VsdHMoc2VsZWN0ZWRTb3J0LCBmdWxsUmVzdWx0cyk7XG4gICAgdGhpcy5yZXN1bHRzLm5leHQoZnVsbFJlc3VsdHMpO1xuICB9XG5cbiAgX2FwcGx5RmlsdGVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlYXJjaFNlcnZpY2UuaXNDbG9uaW5nLmdldFZhbHVlKCkpIHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkUmVzdWx0cyA9IHRoaXMuZnVsbFJlc3VsdHMuZmlsdGVyKChyZXN1bHQ6IENhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5KSA9PlxuICAgICAgIHJlc3VsdC5pZGVudGlmaWVycy5tYWtlTW9kZWwgPT09IHRoaXMuY2xvbmVkQmFza2V0SXRlbURldGFpbHMuaWRlbnRpZmllcnMubWFrZU1vZGVsXG4gICAgICApO1xuICAgICAgdGhpcy5yZXN1bHRzLm5leHQodGhpcy5oZWxwZXJzLmNsb25lKGZpbHRlcmVkUmVzdWx0cykpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuY2xvbmVkQmFza2V0SXRlbURldGFpbHMgPSB7fTtcbiAgICAgIHRoaXMucmVzdWx0cy5uZXh0KHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmZ1bGxSZXN1bHRzKSk7XG4gICAgfVxuICB9XG5cbiAgZmlsdGVyQnlDb21wYW55KFxuICAgIGNvbXBhbmllczogU2VsZWN0RmlsdGVyW10sXG4gICAgY2FyczogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXlcbiAgKTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gY29tcGFuaWVzLmZpbHRlcihjb21wYW55ID0+IGNvbXBhbnkuc2VsZWN0ZWQpO1xuXG4gICAgaWYgKHNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgY2FycyA9IGNhcnMuZmlsdGVyKChjYXI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xuICAgICAgICBjb25zdCBoYXZlU2VsZWN0ZWQgPSBzZWxlY3RlZC5maW5kKFxuICAgICAgICAgIChzZWxjOiBhbnkpID0+XG4gICAgICAgICAgICBzZWxjLnZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gY2FyLmlkZW50aWZpZXJzLnZlbmRvci50b0xvd2VyQ2FzZSgpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGhhdmVTZWxlY3RlZDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBjYXJzO1xuICB9XG5cbiAgZmlsdGVyQnlDYXJUeXBlKHR5cGVzOiBTZWxlY3RGaWx0ZXJbXSwgY2FyczogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkpOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XG4gICAgLy8gdGhpcyBpcyBhIGZpbHRlciB0eXBlIHdoaWNoIGFsbG93cyBtb3JlIHRoYW4gb25lIHRvIGJlIHNldFxuICAgIC8vIGlmIG5vbmUgYXJlIHNldCBhbGxvdyBhbGwgdGhyb3VnaFxuXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0eXBlcy5maWx0ZXIodHlwZSA9PiB0eXBlLnNlbGVjdGVkKTtcblxuICAgIGlmIChzZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgIGNhcnMgPSBjYXJzLmZpbHRlcigoY2FyOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaGF2ZVNlbGVjdGVkID0gc2VsZWN0ZWQuZmluZChcbiAgICAgICAgICBzZWxjID0+XG4gICAgICAgICAgICBzZWxjLnZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gY2FyLmRpc3BsYXlSZWNvcmQudmVoaWNsZS5jbGFzcy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGhhdmVTZWxlY3RlZDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBjYXJzO1xuICB9XG5cbiAgZmlsdGVyQnlUcmF2ZWxQb2xpY3koXG4gICAgdHlwZXM6IFNlbGVjdEZpbHRlcltdLFxuICAgIGNhcnM6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5XG4gICk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHR5cGVzLmZpbHRlcih0eXBlID0+IHR5cGUuc2VsZWN0ZWQpO1xuXG4gICAgaWYgKHNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgY2FycyA9IGNhcnMuZmlsdGVyKChjYXI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xuICAgICAgICBjb25zdCByZXF1aXJlc1JlYXNvbiA9IGNhci51bmF2YWlsYWJsZVxuICAgICAgICAgID8gVHJhdmVsUG9saWNpZXMuVU5BVkFJTEFCTEVcbiAgICAgICAgICA6IGNhci5yZXF1aXJlc1JlYXNvbktleXMubGVuZ3RoXG4gICAgICAgICAgPyBUcmF2ZWxQb2xpY2llcy5BTExPV19XSVRIX1JFQVNPTlxuICAgICAgICAgIDogVHJhdmVsUG9saWNpZXMuSU5fUE9MSUNZO1xuXG4gICAgICAgIGNvbnN0IGhhdmVTZWxlY3RlZCA9IHNlbGVjdGVkLmZpbmQoXG4gICAgICAgICAgc2VsYyA9PiBzZWxjLnZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gcmVxdWlyZXNSZWFzb24udG9Mb3dlckNhc2UoKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBoYXZlU2VsZWN0ZWQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNhcnM7XG4gIH1cblxuICBmaWx0ZXJCeVRyYW5zbWlzc2lvblR5cGUoXG4gICAgdHJhbm1pc3Npb25zOiBTZWxlY3RGaWx0ZXJbXSxcbiAgICBjYXJzOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheVxuICApOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRUcmFuc21pc3Npb24gPSB0cmFubWlzc2lvbnMuZmlsdGVyKHRyYW5zID0+IHRyYW5zLnNlbGVjdGVkKTtcblxuICAgIGlmIChzZWxlY3RlZFRyYW5zbWlzc2lvbi5sZW5ndGgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNhcnMgPSBjYXJzLmZpbHRlcigoY2FyOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcbiAgICAgICAgICBjb25zdCB0cmFucyA9IGNhci5pZGVudGlmaWVycy52ZWhUeXBlWzJdO1xuICAgICAgICAgIGNvbnN0IGhhdmVTZWxlY3RlZCA9IHNlbGVjdGVkVHJhbnNtaXNzaW9uLmZpbmQoXG4gICAgICAgICAgICBzZWxjID0+IHNlbGMudmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSB0cmFucy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gaGF2ZVNlbGVjdGVkO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBFcnJvciBmaWx0ZXJpbmcgdHJhbnNtaXNzaW9uczogJHtlcnJvcn0gKysrYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhcnM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gc29ydCB0aGUgcmVzdWx0c1xuICAgKiBAcGFyYW0gc2VsZWN0ZWRTb3J0IC0gdGhlIHNvcnQgd2UgaGF2ZSBjaG9zZW5cbiAgICogQHBhcmFtIHJlc3VsdHMgLSBvcHRpb25hbGx5IHBhc3MgaW4gdGhlIHJlc3VsdHMsIGlmIG5vdCBwcm92aWRlZCAtIHVzZXMgaW50ZXJuYWwgcmVzdWx0cyAobm90IGZ1bGwsIHdvdWxkIGNhdXNlIGlzc3VlcylcbiAgICovXG4gIHNvcnRSZXN1bHRzKHNlbGVjdGVkU29ydDogbnVtYmVyLCByZXN1bHRzPzogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkpOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XG4gICAgbGV0IGZ1bGxSZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdHMgPyByZXN1bHRzIDogdGhpcy5yZXN1bHRzLnZhbHVlKTtcblxuICAgIHN3aXRjaCAoc2VsZWN0ZWRTb3J0KSB7XG4gICAgICBjYXNlIDA6IC8vIGNoZWFwZXN0XG4gICAgICAgIC8vIGZ1bGxSZXN1bHRzID0gZnVsbFJlc3VsdHMuc29ydChcbiAgICAgICAgLy8gICAoYTogQ2FySGlyZVF1b3RlUmVzdWx0LCBiOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHRoaXMuZ2V0UHJpY2UoYSkgLSB0aGlzLmdldFByaWNlKGIpXG4gICAgICAgIC8vICk7XG4gICAgICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5zb3J0Q2hlYXBlc3QoZnVsbFJlc3VsdHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTogLy8gZXhwZW5zaXZlXG4gICAgICAgIC8vIGZ1bGxSZXN1bHRzID0gZnVsbFJlc3VsdHMuc29ydChcbiAgICAgICAgLy8gICAoYTogQ2FySGlyZVF1b3RlUmVzdWx0LCBiOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHRoaXMuZ2V0UHJpY2UoYikgLSB0aGlzLmdldFByaWNlKGEpXG4gICAgICAgIC8vICk7XG4gICAgICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5zb3J0RXhwZW5zaXZlKGZ1bGxSZXN1bHRzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6IC8vIHByZWZlcnJlZCBUT0RPXG4gICAgICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5zb3J0QnlQcmVmZXJyZWQoZnVsbFJlc3VsdHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzogLy8gYnJhbmRcbiAgICAgICAgZnVsbFJlc3VsdHMgPSB0aGlzLnNvcnRCeUJyYW5kKGZ1bGxSZXN1bHRzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDQ6IC8vIHNpemVcbiAgICAgICAgZnVsbFJlc3VsdHMgPSB0aGlzLnNvcnRCeVNpemUoZnVsbFJlc3VsdHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNTogLy8gTG93ZXN0IEVtaXNzaW9uc1xuICAgICAgICBmdWxsUmVzdWx0cyA9IHRoaXMuc29ydEJ5Q28yKGZ1bGxSZXN1bHRzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIGZhbGxiYWNrIHRvIHdoYXRldmVyIHdhcyBiZWZvcmVcbiAgICB0aGlzLnJlc3VsdHMubmV4dChmdWxsUmVzdWx0cyk7XG4gICAgcmV0dXJuIGZ1bGxSZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNvcnQgdGhlIHJlc3VsdHMgZXhwZW5zaXZlXG4gICAqIEBwYXJhbSByZXN1bHRzIC0gZnVsbCByZXN1bHRzIGZyb20gc29ydCByZXN1bHRzIGZ1bmN0aW9uXG4gICAqL1xuXG4gIHNvcnRFeHBlbnNpdmUocmVzdWx0cz86IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xuICAgIGNvbnN0IGZ1bGxSZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdHMgPyByZXN1bHRzIDogdGhpcy5yZXN1bHRzLnZhbHVlKTtcbiAgICBjb25zdCBzb3J0ZWRSZXN1bHRzID0gZnVsbFJlc3VsdHMuc29ydChcbiAgICAgIChhOiBDYXJIaXJlUXVvdGVSZXN1bHQsIGI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4gdGhpcy5nZXRQcmljZShiKSAtIHRoaXMuZ2V0UHJpY2UoYSlcbiAgICApO1xuICAgIHRoaXMucmVzdWx0cy5uZXh0KHNvcnRlZFJlc3VsdHMpO1xuICAgIHJldHVybiBzb3J0ZWRSZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNvcnQgdGhlIHJlc3VsdHMgY2hlYXBlc3RcbiAgICogQHBhcmFtIHJlc3VsdHMgLSBmdWxsIHJlc3VsdHMgZnJvbSBzb3J0IHJlc3VsdHMgZnVuY3Rpb25cbiAgICovXG5cbiAgc29ydENoZWFwZXN0KHJlc3VsdHM/OiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcbiAgICBjb25zdCBmdWxsUmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzID8gcmVzdWx0cyA6IHRoaXMucmVzdWx0cy52YWx1ZSk7XG4gICAgY29uc3Qgc29ydGVkUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLnNvcnQoXG4gICAgICAoYTogQ2FySGlyZVF1b3RlUmVzdWx0LCBiOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHRoaXMuZ2V0UHJpY2UoYSkgLSB0aGlzLmdldFByaWNlKGIpXG4gICAgKTtcbiAgICB0aGlzLnJlc3VsdHMubmV4dChzb3J0ZWRSZXN1bHRzKTtcbiAgICByZXR1cm4gc29ydGVkUmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBzb3J0IHRoZSByZXN1bHRzIGNvMlxuICAgKiBAcGFyYW0gcmVzdWx0cyAtIGZ1bGwgcmVzdWx0cyBmcm9tIHNvcnQgcmVzdWx0cyBmdW5jdGlvblxuICAgKi9cblxuICBzb3J0QnlDbzIocmVzdWx0cz86IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xuICAgIGNvbnN0IGZ1bGxSZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdHMgPyByZXN1bHRzIDogdGhpcy5yZXN1bHRzLnZhbHVlKTtcbiAgICBjb25zdCBzb3J0ZWRSZXN1bHRzID0gZnVsbFJlc3VsdHMuc29ydChcbiAgICAgIChhOiBDYXJIaXJlUXVvdGVSZXN1bHQsIGI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4gdGhpcy5nZXRDbzIoYSkgLSB0aGlzLmdldENvMihiKVxuICAgICk7XG4gICAgdGhpcy5yZXN1bHRzLm5leHQoc29ydGVkUmVzdWx0cyk7XG4gICAgcmV0dXJuIHNvcnRlZFJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gc29ydCB0aGUgcmVzdWx0c1xuICAgKiBAcGFyYW0gcmVzdWx0cyAtIGZ1bGwgcmVzdWx0cyBmcm9tIHNvcnQgcmVzdWx0cyBmdW5jdGlvblxuICAgKi9cbiAgc29ydEJ5U2l6ZShyZXN1bHRzPzogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkpOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XG4gICAgY29uc3QgZnVsbFJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUocmVzdWx0cyA/IHJlc3VsdHMgOiB0aGlzLnJlc3VsdHMudmFsdWUpO1xuICAgIGNvbnN0IHNvcnRlZFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5zb3J0KChhOiBDYXJIaXJlUXVvdGVSZXN1bHQsIGI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xuICAgICAgY29uc3QgYVZhbCA9IHRoaXMuY2FyQ2xhc3NNYXBbYS5kaXNwbGF5UmVjb3JkPy52ZWhpY2xlPy5jbGFzcz8uc3BsaXQoLyg/PVtBLVpdKS8pLmpvaW4oJyAnKS50b0xvd2VyQ2FzZSgpXSA/PyB0aGlzLmNhckNsYXNzTWFwWyd1bnJlY29nbml6ZWQnXTtcbiAgICAgIGNvbnN0IGJWYWwgPSB0aGlzLmNhckNsYXNzTWFwW2IuZGlzcGxheVJlY29yZD8udmVoaWNsZT8uY2xhc3M/LnNwbGl0KC8oPz1bQS1aXSkvKS5qb2luKCcgJykudG9Mb3dlckNhc2UoKV0gPz8gdGhpcy5jYXJDbGFzc01hcFsndW5yZWNvZ25pemVkJ107XG5cbiAgICAgIHJldHVybiBhVmFsIC0gYlZhbDtcbiAgICB9KTtcbiAgICB0aGlzLnJlc3VsdHMubmV4dChzb3J0ZWRSZXN1bHRzKTtcbiAgICByZXR1cm4gc29ydGVkUmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBzb3J0IHRoZSByZXN1bHRzXG4gICAqIEBwYXJhbSByZXN1bHRzIC0gZnVsbCByZXN1bHRzIGZyb20gc29ydCByZXN1bHRzIGZ1bmN0aW9uXG4gICAqL1xuICBzb3J0QnlCcmFuZChyZXN1bHRzPzogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkpOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XG4gICAgY29uc3QgZnVsbFJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUocmVzdWx0cyA/IHJlc3VsdHMgOiB0aGlzLnJlc3VsdHMudmFsdWUpO1xuICAgIGNvbnN0IHNvcnRlZFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5zb3J0KChhOiBDYXJIaXJlUXVvdGVSZXN1bHQsIGI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xuICAgICAgbGV0IGJyYW5kQSA9IGEuaWRlbnRpZmllcnMudmVuZG9yO1xuICAgICAgbGV0IGJyYW5kQiA9IGIuaWRlbnRpZmllcnMudmVuZG9yO1xuXG4gICAgICAvLyBzd2l0Y2hpbmcgYXMgdGhlc2Ugc3RyaW5ncyBkb24ndCBtYXRjaCB0aGUgYnJhbmQgbmFtZVxuICAgICAgc3dpdGNoIChicmFuZEEpIHtcbiAgICAgICAgY2FzZSAnWkUnOlxuICAgICAgICAgIGJyYW5kQSA9ICdIRSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1pJJzpcbiAgICAgICAgICBicmFuZEEgPSAnQVYnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGJyYW5kQikge1xuICAgICAgICBjYXNlICdaRSc6XG4gICAgICAgICAgYnJhbmRCID0gJ0hFJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnWkknOlxuICAgICAgICAgIGJyYW5kQiA9ICdBVic7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChicmFuZEEgPCBicmFuZEIpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIGlmIChicmFuZEEgPiBicmFuZEIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHNvcnRlZFJlc3VsdHMpO1xuICAgIHJldHVybiBzb3J0ZWRSZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNvcnQgdGhlIHJlc3VsdHNcbiAgICogQHBhcmFtIHJlc3VsdHMgLSBmdWxsIHJlc3VsdHMgZnJvbSBzb3J0IHJlc3VsdHMgZnVuY3Rpb25cbiAgICovXG4gIHNvcnRCeVByZWZlcnJlZChyZXN1bHRzPzogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkpOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XG4gICAgY29uc3QgZnVsbFJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUocmVzdWx0cyA/IHJlc3VsdHMgOiB0aGlzLnJlc3VsdHMudmFsdWUpO1xuICAgIGNvbnN0IHNvcnRlZFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5zb3J0KChhOiBDYXJIaXJlUXVvdGVSZXN1bHQsIGI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xuICAgICAgY29uc3QgYVByZWYgPSBhLnRtY1ByZWZlcnJlZCB8fCBhLmNvbXBhbnlQcmVmZXJyZWQgfHwgYS5vZmZpY2VQcmVmZXJyZWQgPyAxIDogMDtcbiAgICAgIGNvbnN0IGJQcmVmID0gYi50bWNQcmVmZXJyZWQgfHwgYi5jb21wYW55UHJlZmVycmVkIHx8IGIub2ZmaWNlUHJlZmVycmVkID8gMSA6IDA7XG4gICAgICBpZiAoYVByZWYgPiBiUHJlZikge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9IGVsc2UgaWYgKGFQcmVmIDwgYlByZWYpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnJlc3VsdHMubmV4dChzb3J0ZWRSZXN1bHRzKTtcbiAgICByZXR1cm4gc29ydGVkUmVzdWx0cztcbiAgfVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHRoZSBwcmljZSBvZiBhIGluZGl2aWR1YWwgY2FyXG4gICAqL1xuICBnZXRQcmljZShjYXI6IENhckhpcmVRdW90ZVJlc3VsdCk6IG51bWJlciB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBOdW1iZXIoY2FyLmRpc3BsYXlSZWNvcmQuY2hhcmdlc1swXS5hbW91bnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHRoZSBjbzIgb2YgYSBpbmRpdmlkdWFsIGNhclxuICAgKi9cbiAgZ2V0Q28yKGNhcjogQ2FySGlyZVF1b3RlUmVzdWx0KTogbnVtYmVyIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIE51bWJlcihjYXIuY28yUGVySXRlbSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGdldE1pblByaWNlKGNhcnM6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogbnVtYmVyIHtcbiAgICByZXR1cm4gY2Fycy5yZWR1Y2UoKG1pbjogbnVtYmVyLCBjYXI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xuICAgICAgY29uc3QgcHJpY2UgPSB0aGlzLmdldFByaWNlKGNhcik7XG4gICAgICBpZiAocHJpY2UgPCBtaW4pIHtcbiAgICAgICAgbWluID0gcHJpY2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWluO1xuICAgIH0sIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtcbiAgfVxuXG4gIGdldE1heFByaWNlKGNhcnM6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogbnVtYmVyIHtcbiAgICByZXR1cm4gY2Fycy5yZWR1Y2UoKG1heDogbnVtYmVyLCBjYXI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xuICAgICAgY29uc3QgcHJpY2UgPSB0aGlzLmdldFByaWNlKGNhcik7XG4gICAgICBpZiAocHJpY2UgPiBtYXgpIHtcbiAgICAgICAgbWF4ID0gcHJpY2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWF4O1xuICAgIH0sIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSKTtcbiAgfVxuXG4gIHVwZGF0ZVNlYXJjaEZyb21FeHBpcmVkQmFza2V0SXRlbShiYXNrZXRJdGVtOiBCYXNrZXRJdGVtLCBzZXREYXRlVGltZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBjb25zdCBzZWFyY2hDYXJIaXJlUXVlcnk6IFNlYXJjaENhckhpcmVRdWVyeVZhcmlhYmxlcyA9IGJhc2tldEl0ZW0uc2VhcmNoUXVlcnk7XG4gICAgaWYgKHNlYXJjaENhckhpcmVRdWVyeSkge1xuICAgICAgaWYgKHNldERhdGVUaW1lKSB7XG4gICAgICAgIHRoaXMuZHJvcG9mZl9kYXRldGltZSA9IG1vbWVudChzZWFyY2hDYXJIaXJlUXVlcnkuZHJvcG9mZkRhdGVUaW1lKTtcbiAgICAgICAgdGhpcy5waWNrdXBfZGF0ZXRpbWUgPSBtb21lbnQoc2VhcmNoQ2FySGlyZVF1ZXJ5LnBpY2t1cERhdGVUaW1lKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0UXVlcnlGcm9tQmFza2V0SXRlbShiYXNrZXRJdGVtKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZFRyYXZlbGxlcnNGcm9tQmFza2V0SXRlbShiYXNrZXRJdGVtKTtcbiAgfVxuXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKHByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT4pOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnUFJFUE9QVUxBVElORyBDQVJISVJFIEZPUk0nKTtcbiAgICBjb25zdCBmbGlnaHRJdGVtOiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyA9XG4gICAgICBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLkZsaWdodF0/LnNlYXJjaFF1ZXJ5O1xuICAgIGNvbnN0IHJhaWxJdGVtOiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMgPSBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLlJhaWxdPy5zZWFyY2hRdWVyeTtcbiAgICBjb25zdCBob3RlbEl0ZW06IFNlYXJjaEhvdGVsc1F1ZXJ5VmFyaWFibGVzID0gcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5SYWlsXT8uc2VhcmNoUXVlcnk7XG4gICAgY29uc3QgaXJsSXRlbTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMgPVxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbF0/LnNlYXJjaFF1ZXJ5O1xuICAgIGlmIChmbGlnaHRJdGVtKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5vdXRCb3VuZERhdGUudG9EYXRlKCk7XG4gICAgICAgIGNvbnN0IGVuZERhdGUgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5pbmJvdW5kRGF0ZS50b0RhdGUoKTtcbiAgICAgICAgdGhpcy5sb2NhdGlvblR5cGUgPSBMb2NhdGlvblR5cGVzLkFpcnBvcnQ7XG4gICAgICAgIHRoaXMucGlja3VwX2RhdGV0aW1lID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0ub3V0Qm91bmREYXRlO1xuICAgICAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWUgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5pbmJvdW5kRGF0ZTtcbiAgICAgICAgdGhpcy5waWNrdXBfZGF0ZSA9IHtcbiAgICAgICAgICBkYXk6IHN0YXJ0RGF0ZS5nZXRVVENEYXRlKCksXG4gICAgICAgICAgbW9udGg6IHN0YXJ0RGF0ZS5nZXRVVENNb250aCgpICsgMSxcbiAgICAgICAgICB5ZWFyOiBzdGFydERhdGUuZ2V0VVRDRnVsbFllYXIoKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRyb3BvZmZfZGF0ZSA9IHtcbiAgICAgICAgICBkYXk6IGVuZERhdGUuZ2V0VVRDRGF0ZSgpLFxuICAgICAgICAgIG1vbnRoOiBlbmREYXRlLmdldFVUQ01vbnRoKCkgKyAxLFxuICAgICAgICAgIHllYXI6IGVuZERhdGUuZ2V0VVRDRnVsbFllYXIoKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnBpY2t1cF9sb2NhdGlvbiA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdXG4gICAgICAgICAgLmFycml2ZUxvY2F0aW9uIGFzIE9CVEFpcnBvcnREZXRhaWxzO1xuICAgICAgICB0aGlzLmRyb3BvZmZfbG9jYXRpb24gPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XVxuICAgICAgICAgIC5hcnJpdmVMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlscztcbiAgICAgICAgdGhpcy5waWNrdXBfY291bnRyeSA9IChcbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5hcnJpdmVMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlsc1xuICAgICAgICApLmNvdW50cnlDb2RlO1xuICAgICAgICB0aGlzLmRyb3BvZmZfY291bnRyeSA9IChcbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5hcnJpdmVMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlsc1xuICAgICAgICApLmNvdW50cnlDb2RlO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBjYXJoaXJlIGZyb20gZmxpZ2h0IGl0ZW0nKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJhaWxJdGVtKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0ub3V0Qm91bmREYXRlVGltZS50b0RhdGUoKTtcbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXS5pbkJvdW5kRGF0ZVRpbWUudG9EYXRlKCk7XG4gICAgICAgIHRoaXMucGlja3VwX2RhdGV0aW1lID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdLm91dEJvdW5kRGF0ZVRpbWU7XG4gICAgICAgIHRoaXMuZHJvcG9mZl9kYXRldGltZSA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXS5pbkJvdW5kRGF0ZVRpbWU7XG4gICAgICAgIHRoaXMucGlja3VwX2RhdGUgPSB7XG4gICAgICAgICAgZGF5OiBzdGFydERhdGUuZ2V0VVRDRGF0ZSgpLFxuICAgICAgICAgIG1vbnRoOiBzdGFydERhdGUuZ2V0VVRDTW9udGgoKSArIDEsXG4gICAgICAgICAgeWVhcjogc3RhcnREYXRlLmdldFVUQ0Z1bGxZZWFyKClcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kcm9wb2ZmX2RhdGUgPSB7XG4gICAgICAgICAgZGF5OiBlbmREYXRlLmdldFVUQ0RhdGUoKSxcbiAgICAgICAgICBtb250aDogZW5kRGF0ZS5nZXRVVENNb250aCgpICsgMSxcbiAgICAgICAgICB5ZWFyOiBlbmREYXRlLmdldFVUQ0Z1bGxZZWFyKClcbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgY2FyaGlyZSBmcm9tIHJhaWwgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXJsSXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID1cbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWxdLm91dEJvdW5kRGF0ZVRpbWUudG9EYXRlKCk7XG4gICAgICAgIGNvbnN0IGVuZERhdGUgPVxuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tcbiAgICAgICAgICAgIFNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXG4gICAgICAgICAgXS5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZS50b0RhdGUoKTtcbiAgICAgICAgdGhpcy5waWNrdXBfZGF0ZXRpbWUgPVxuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbF0ub3V0Qm91bmREYXRlVGltZTtcbiAgICAgICAgdGhpcy5kcm9wb2ZmX2RhdGV0aW1lID1cbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWxdLnJldHVybkRlcGFydHVyZURhdGVUaW1lO1xuICAgICAgICB0aGlzLnBpY2t1cF9kYXRlID0ge1xuICAgICAgICAgIGRheTogc3RhcnREYXRlLmdldFVUQ0RhdGUoKSxcbiAgICAgICAgICBtb250aDogc3RhcnREYXRlLmdldFVUQ01vbnRoKCkgKyAxLFxuICAgICAgICAgIHllYXI6IHN0YXJ0RGF0ZS5nZXRVVENGdWxsWWVhcigpXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZHJvcG9mZl9kYXRlID0ge1xuICAgICAgICAgIGRheTogZW5kRGF0ZS5nZXRVVENEYXRlKCksXG4gICAgICAgICAgbW9udGg6IGVuZERhdGUuZ2V0VVRDTW9udGgoKSArIDEsXG4gICAgICAgICAgeWVhcjogZW5kRGF0ZS5nZXRVVENGdWxsWWVhcigpXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGNhcmhpcmUgZnJvbSBpbnRlcm5hdGlvbmFsIHJhaWwgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaG90ZWxJdGVtKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdLmNoZWNraW5fZGF0ZS50b0RhdGUoKTtcbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Ib3RlbF0uY2hlY2tvdXRfZGF0ZS50b0RhdGUoKTtcbiAgICAgICAgLy8gdGhpcy5sb2NhdGlvblR5cGUgPSBMb2NhdGlvblR5cGVzLjtcbiAgICAgICAgdGhpcy5waWNrdXBfZGF0ZXRpbWUgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdLmNoZWNraW5fZGF0ZTtcbiAgICAgICAgdGhpcy5kcm9wb2ZmX2RhdGV0aW1lID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkhvdGVsXS5jaGVja291dF9kYXRlO1xuICAgICAgICB0aGlzLnBpY2t1cF9kYXRlID0ge1xuICAgICAgICAgIGRheTogc3RhcnREYXRlLmdldFVUQ0RhdGUoKSxcbiAgICAgICAgICBtb250aDogc3RhcnREYXRlLmdldFVUQ01vbnRoKCkgKyAxLFxuICAgICAgICAgIHllYXI6IHN0YXJ0RGF0ZS5nZXRVVENGdWxsWWVhcigpXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZHJvcG9mZl9kYXRlID0ge1xuICAgICAgICAgIGRheTogZW5kRGF0ZS5nZXRVVENEYXRlKCksXG4gICAgICAgICAgbW9udGg6IGVuZERhdGUuZ2V0VVRDTW9udGgoKSArIDEsXG4gICAgICAgICAgeWVhcjogZW5kRGF0ZS5nZXRVVENGdWxsWWVhcigpXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGNhcmhpcmUgZnJvbSBob3RlbCBpdGVtJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gIWRhdGUgYW5kIHRpbWUgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSBmb3IgTFVcbiAgcHJpdmF0ZSBfdXBkYXRlUGlja3VwRGF0ZVRpbWUoKSB7XG4gICAgaWYgKHRoaXMuX3BpY2t1cF9kYXRlICYmIHRoaXMuX3BpY2t1cF90aW1lKSB7XG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHRoaXMuX3BpY2t1cF9kYXRlLCB0aGlzLl9waWNrdXBfdGltZSk7XG4gICAgICB0aGlzLnBpY2t1cF9kYXRldGltZSA9IHRpbWUuaXNWYWxpZCgpID8gdGltZSA6IG51bGw7XG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlRHJvcG9mZkRhdGVUaW1lKCkge1xuICAgIGlmICh0aGlzLl9kcm9wb2ZmX2RhdGUgJiYgdGhpcy5fZHJvcG9mZl90aW1lKSB7XG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHRoaXMuX2Ryb3BvZmZfZGF0ZSwgdGhpcy5fZHJvcG9mZl90aW1lKTtcbiAgICAgIHRoaXMuZHJvcG9mZl9kYXRldGltZSA9IHRpbWUuaXNWYWxpZCgpID8gdGltZSA6IG51bGw7XG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlTmdiUGlja3VwRGF0ZVRpbWUoKSB7XG4gICAgaWYgKHRoaXMuX25nYlBpY2t1cERhdGUgJiYgdGhpcy5fcGlja3VwVGltZSkge1xuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9uZ2JQaWNrdXBEYXRlLCB0aGlzLl9waWNrdXBUaW1lKTtcbiAgICAgIHRoaXMucGlja3VwX2RhdGV0aW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVOZ2JEcm9wb2ZmRGF0ZVRpbWUoKSB7XG4gICAgaWYgKHRoaXMuX25nYkRyb3BvZmZEYXRlICYmIHRoaXMuX2Ryb3BvZmZUaW1lKSB7XG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHRoaXMuX25nYkRyb3BvZmZEYXRlLCB0aGlzLl9kcm9wb2ZmVGltZSk7XG4gICAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xuICAgICAgdGhpcy5faXNWYWxpZCgpO1xuICAgIH1cbiAgfVxuXG4gIGlzT3Zlck5pZ2h0KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG91dHdhcmREYXkgPSB0aGlzLnBpY2t1cF9kYXRldGltZS5kYXRlKCk7XG4gICAgY29uc3QgcmV0dXJuRGF5ID0gdGhpcy5kcm9wb2ZmX2RhdGV0aW1lLmRhdGUoKTtcbiAgICBpZiAocmV0dXJuRGF5IC0gb3V0d2FyZERheSA+PSAxKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0czogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkpOiBJQ2hlYXBlc3RQcmljZSB7XG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgbWluUHJpY2UgPSB0aGlzLmdldE1pblByaWNlKHJlc3VsdHMpO1xuICAgIHJldHVybiB7XG4gICAgICBhbW91bnQ6IG1pblByaWNlLFxuICAgICAgY3VycmVuY3lDb2RlOiByZXN1bHRzWzBdLmRpc3BsYXlSZWNvcmQuY2hhcmdlc1swXS5jdXJyZW5jeUNvZGVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCB0aGUgYXZhaWxhYmlsaXR5IGRldGFpbHMgZm9yIGEgcGFydGljdWxhciBjYXIgaGlyZSByZXN1bHQgdXNpbmcgbG9jYXRpb25EZXRhaWxzIHBhcmFtXG4gICAqIEBwYXJhbSBsb2NhdGlvbkRldGFpbHMgLSBlLmcuIHRha2VuIGZyb20gcmVzcG9uc2UgZGF0YSBpbiBzZWFyY2hDYXJIaXJlIHF1ZXJ5XG4gICAqIEBwYXJhbSBpc0xvYWRpbmcgYmVoYXZpb3VyU3ViamVjdCBmb3IgaGFuZGxpbmcgbG9hZGluZyBzcGlubmVyIHN0YXRlIG9mIHJlcXVlc3RcbiAgICovXG4gIGdldENhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWwoXG4gICAgbG9jYXRpb25EZXRhaWxzOiBDYXJIaXJlSW5wdXRJZGVudGlmaWVycyxcbiAgICBpc0xvYWRpbmc6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxuICApOiBPYnNlcnZhYmxlPENhckhpcmVEZXRhaWxSZXF1ZXN0UmVzcG9uc2U+IHtcbiAgICBpZiAoIWlzTG9hZGluZy52YWx1ZSkge1xuICAgICAgaXNMb2FkaW5nLm5leHQodHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyLmZldGNoTGlzdCh7IGxvY2F0aW9uRGV0YWlscyB9KS5waXBlKFxuICAgICAgdGFrZSgxKSxcbiAgICAgIG1hcCgocmVzdWx0OiBDYXJIaXJlRGV0YWlsUmVxdWVzdFJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChpc0xvYWRpbmcudmFsdWUpIHtcbiAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgIEBkZXNjIC0gZm9yIGEgZ2l2ZW4gcmVzdWx0IHJldHVybiB0aGUgdHlwZSBzdHJpbmcgZm9yIHZhbml0eSBwdXJwb3NlcyBmb3IgYSB2ZWhpY2xlICh1dGlsaXNpbmcgY2FyVHlwZUNvZGVzIGluIG9idHNlcnZpY2VzKVxuICAgIEBwYXJhbSByZXN1bHQgb2YgdHlwZSBzdHJpbmdcbiAgICBAcmV0dXJucyB0aGUgY2FyIHR5cGUgc3RyaW5nIGUuZy4gJzItMyBEb29yJyBpbnN0ZWFkIG9mICdUd29Ub1RocmVlRG9vcicgcmF3IHR5cGVcbiAgKiovXG4gIGdldENhclR5cGVGb3JEaXNwbGF5KGNhclR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdHlwZUZvckRpc3BsYXkgPSB0aGlzLmNhclR5cGVDb2Rlcy5maW5kKGNhclR5cGVDb2RlID0+IGNhclR5cGVDb2RlWzJdID09PSBjYXJUeXBlKTtcbiAgICBpZiAodHlwZUZvckRpc3BsYXkpIHtcbiAgICAgIHJldHVybiB0eXBlRm9yRGlzcGxheVsxXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gYWRkIGNhciBoaXJlIHRvIGJhc2tldFxuICAgKi9cbiAgYXN5bmMgYWRkQ2FySGlyZVRvQmFza2V0KFxuICAgIGNhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5OiBDYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eSxcbiAgICBjYXJIaXJlUXVlcnk6IFNlYXJjaENhckhpcmVRdWVyeVZhcmlhYmxlcyxcbiAgICBpZ25vcmVJbnZva2VkOiBib29sZWFuID0gZmFsc2UsXG4gICAgZ210OiBib29sZWFuID0gZmFsc2VcbiAgKTogUHJvbWlzZTxEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zPiB7XG4gICAgaWYgKGNhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5LnVuYXZhaWxhYmxlICYmICF0aGlzLnVzZXJTZXJ2aWNlLmNhbk92ZXJyaWRlKCkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWwpO1xuICAgIH1cblxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcbiAgICBpZiAoYmFza2V0KSB7XG4gICAgICBjb25zdCB7IGNvMlBlckl0ZW0sIGNvMlBlclBhc3NlbmdlciwgZGlzcGxheVJlY29yZCwgaWRlbnRpZmllcnMsIHNvdXJjZUlkIH0gPVxuICAgICAgICBjYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eTtcblxuICAgICAgbGV0IGNvbnRhY3ROdW1iZXIgPSAnJztcblxuICAgICAgaWYgKGNhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5LnNvdXJjZSA9PT0gIFNlcnZpY2VQcm92aWRlci5TYWJyZUNhckhpcmUpIHtcbiAgICAgICAgY29uc3QgaW5mbyA9IGF3YWl0IHRoaXMuY2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXJcbiAgICAgICAgICAuZmV0Y2hMaXN0KHtcbiAgICAgICAgICAgIGxvY2F0aW9uRGV0YWlsczoge1xuICAgICAgICAgICAgICBkcm9wT2ZmRGF0ZVRpbWU6IGlkZW50aWZpZXJzLmRyb3BPZmZEYXRlVGltZSxcbiAgICAgICAgICAgICAgcGlja1VwRGF0ZVRpbWU6IGlkZW50aWZpZXJzLnBpY2tVcERhdGVUaW1lLFxuICAgICAgICAgICAgICBwaWNrVXBFeHRlbmRlZExvY2F0aW9uQ29kZTogaWRlbnRpZmllcnMucGlja1VwRXh0ZW5kZWRMb2NhdGlvbkNvZGUsXG4gICAgICAgICAgICAgIHBpY2tVcExvY2F0aW9uQ29kZTogaWRlbnRpZmllcnMucGlja1VwTG9jYXRpb25Db2RlLFxuICAgICAgICAgICAgICBwaWNrVXBMb2NhdGlvbk5hbWU6IGlkZW50aWZpZXJzLnBpY2tVcExvY2F0aW9uTmFtZSxcbiAgICAgICAgICAgICAgbG9jYXRvcjogJycsXG4gICAgICAgICAgICAgIHJwaDogJycsXG4gICAgICAgICAgICAgIHZlaFR5cGU6IGlkZW50aWZpZXJzLnZlaFR5cGUsXG4gICAgICAgICAgICAgIHZlbmRvcjogaWRlbnRpZmllcnMudmVuZG9yLFxuICAgICAgICAgICAgICBzZXJ2aWNlOiBjYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eS5zb3VyY2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgIG1hcCgocmVzdWx0OiBDYXJIaXJlRGV0YWlsUmVxdWVzdFJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICAudG9Qcm9taXNlKCk7XG5cbiAgICAgICAgaWYgKGluZm8uYWRkaXRpb25hbEluZm8pIHtcbiAgICAgICAgICBpbmZvLmFkZGl0aW9uYWxJbmZvLnNvbWUoZXh0cmEgPT4ge1xuICAgICAgICAgICAgaWYgKGV4dHJhLm5hbWUgPT09ICdDb250YWN0IE51bWJlcnMnICYmIGV4dHJhLnRleHQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICBjb250YWN0TnVtYmVyID0gZXh0cmEudGV4dFswXTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJpY2UgPSBwYXJzZUZsb2F0KGRpc3BsYXlSZWNvcmQ/LmNoYXJnZXNbMF0/LmFtb3VudCA/PyAnMCcpO1xuXG4gICAgICBpZiAoIWRpc3BsYXlSZWNvcmQucmV0dXJuTG9jYXRpb24pIHtcbiAgICAgICAgaWRlbnRpZmllcnMuZHJvcE9mZkxvY2F0aW9uQ29kZSA9IGlkZW50aWZpZXJzLnBpY2tVcExvY2F0aW9uQ29kZTtcbiAgICAgICAgZGlzcGxheVJlY29yZC5yZXR1cm5Mb2NhdGlvbiA9IGRpc3BsYXlSZWNvcmQucGlja3VwTG9jYXRpb247XG4gICAgICB9XG5cbiAgICAgIGxldCB0cG9ydElkZW50aWZpZXJzOiBhbnkgPSB7XG4gICAgICAgIGFpcmNvbjogbnVsbCxcbiAgICAgICAgY2F0ZWdvcnk6IG51bGwsXG4gICAgICAgIGRvb3JDb3VudDogbnVsbCxcbiAgICAgICAgY2xhc3M6IG51bGwsXG4gICAgICAgIHRyYW5zbWlzc2lvbjogbnVsbFxuICAgICAgfTtcblxuICAgICAgbGV0IGVudGVycHJpc2VJZGVudGlmaWVyczogYW55ID0ge1xuICAgICAgICBkcml2ZXJBZ2U6IG51bGwsXG4gICAgICAgIGNhdGVnb3J5OiBudWxsLFxuICAgICAgfVxuXG4gICAgICBpZiAoY2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHkuc291cmNlID09PSBTZXJ2aWNlUHJvdmlkZXIuVHJhdmVscG9ydENhckhpcmUpIHtcbiAgICAgICAgKHRwb3J0SWRlbnRpZmllcnMuYWlyY29uID0gZGlzcGxheVJlY29yZC52ZWhpY2xlLmFpcmNvbiksXG4gICAgICAgICAgKHRwb3J0SWRlbnRpZmllcnMuY2F0ZWdvcnkgPSBpZGVudGlmaWVycy5jYXRlZ29yeSksXG4gICAgICAgICAgKHRwb3J0SWRlbnRpZmllcnMuZG9vckNvdW50ID0gaWRlbnRpZmllcnMuZG9vckNvdW50KSxcbiAgICAgICAgICAodHBvcnRJZGVudGlmaWVycy5jbGFzcyA9IGRpc3BsYXlSZWNvcmQudmVoaWNsZS5jbGFzcyksXG4gICAgICAgICAgKHRwb3J0SWRlbnRpZmllcnMudHJhbnNtaXNzaW9uID0gZGlzcGxheVJlY29yZC52ZWhpY2xlLnRyYW5zbWlzc2lvbik7XG4gICAgICB9XG5cbiAgICAgIGlmKGNhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5LnNvdXJjZSA9PT0gU2VydmljZVByb3ZpZGVyLkVudGVycHJpc2VDYXJIaXJlKSB7XG4gICAgICAgIGVudGVycHJpc2VJZGVudGlmaWVycy5kcml2ZXJBZ2UgPSBjYXJIaXJlUXVlcnkuZHJpdmVyQWdlXG4gICAgICAgIGVudGVycHJpc2VJZGVudGlmaWVycy5jYXRlZ29yeSA9IGlkZW50aWZpZXJzLmNhdGVnb3J5XG4gICAgICB9XG4gICAgICBjb25zdCBzZWFyY2hRdWVyeSA9ICB0aGlzLmdldFNlYXJjaFF1ZXJ5KClcbiAgICAgIGNvbnN0IHBpY2t1cENvdW50cnlDb2RlID0gc2VhcmNoUXVlcnkuYWlycG9ydCA/IHNlYXJjaFF1ZXJ5LmFpcnBvcnQucGlja3VwQ291bnRyeUNvZGUgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hRdWVyeS5jaXR5ID8gc2VhcmNoUXVlcnkuY2l0eS5waWNrdXBDb3VudHJ5Q29kZSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFF1ZXJ5LmxvY2F0aW9uPy5waWNrdXBDb3VudHJ5Q29kZTtcbiAgICAgIGNvbnN0IGRyb3BvZmZDb3VudHJ5Q29kZSA9IHNlYXJjaFF1ZXJ5LmFpcnBvcnQgPyBzZWFyY2hRdWVyeS5haXJwb3J0LmRyb3BvZmZDb3VudHJ5Q29kZSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoUXVlcnkuY2l0eSA/IHNlYXJjaFF1ZXJ5LmNpdHkuZHJvcG9mZkNvdW50cnlDb2RlIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hRdWVyeS5sb2NhdGlvbj8uZHJvcG9mZkNvdW50cnlDb2RlO1xuXG5cbiAgICAgIGNvbnN0IHdoYXRIYXBwZW5lZCA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcbiAgICAgICAge1xuICAgICAgICAgIGFkdWx0czogdGhpcy5hZHVsdHMsXG4gICAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXG4gICAgICAgICAgc2VydmljZTogc291cmNlSWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIHBpY2t1cENvdW50cnlDb2RlLFxuICAgICAgICAgICAgZHJvcG9mZkNvdW50cnlDb2RlLFxuICAgICAgICAgICAgbG9jYXRpb25UeXBlOiB0aGlzLmxvY2F0aW9uVHlwZSxcbiAgICAgICAgICAgIHBpY2tVcERhdGV0aW1lOiBkaXNwbGF5UmVjb3JkLnBpY2t1cCxcbiAgICAgICAgICAgIGRyb3BPZmZEYXRldGltZTogZGlzcGxheVJlY29yZC5kcm9wb2ZmLFxuICAgICAgICAgICAgcGlja1VwTG9jYXRpb246IHtcbiAgICAgICAgICAgICAgaWF0YTpcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2F0aW9uVHlwZSA9PT0gTG9jYXRpb25UeXBlcy5BaXJwb3J0ID8gaWRlbnRpZmllcnMucGlja1VwTG9jYXRpb25Db2RlIDogJycsXG4gICAgICAgICAgICAgIG5hbWU6IGRpc3BsYXlSZWNvcmQucGlja3VwTG9jYXRpb24ubmFtZSA/IGRpc3BsYXlSZWNvcmQucGlja3VwTG9jYXRpb24ubmFtZSA6ICcnLFxuICAgICAgICAgICAgICBhZGRyZXNzOiBgJHtkaXNwbGF5UmVjb3JkLnBpY2t1cExvY2F0aW9uLnRvcExpbmV9LCAke2Rpc3BsYXlSZWNvcmQucGlja3VwTG9jYXRpb24uY2l0eX1gLFxuICAgICAgICAgICAgICBwb3N0Y29kZTogZGlzcGxheVJlY29yZC5waWNrdXBMb2NhdGlvbi5wb3N0Q29kZVxuICAgICAgICAgICAgICAgID8gZGlzcGxheVJlY29yZC5waWNrdXBMb2NhdGlvbi5wb3N0Q29kZVxuICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkcm9wT2ZmTG9jYXRpb246IHtcbiAgICAgICAgICAgICAgaWF0YTpcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2F0aW9uVHlwZSA9PT0gTG9jYXRpb25UeXBlcy5BaXJwb3J0ID8gaWRlbnRpZmllcnMuZHJvcE9mZkxvY2F0aW9uQ29kZSA6ICcnLFxuICAgICAgICAgICAgICBuYW1lOiBkaXNwbGF5UmVjb3JkLnJldHVybkxvY2F0aW9uLm5hbWUgPyBkaXNwbGF5UmVjb3JkLnJldHVybkxvY2F0aW9uLm5hbWUgOiAnJyxcbiAgICAgICAgICAgICAgYWRkcmVzczogYCR7ZGlzcGxheVJlY29yZC5yZXR1cm5Mb2NhdGlvbi50b3BMaW5lfSwgJHtkaXNwbGF5UmVjb3JkLnJldHVybkxvY2F0aW9uLmNpdHl9YCxcbiAgICAgICAgICAgICAgcG9zdGNvZGU6IGRpc3BsYXlSZWNvcmQucmV0dXJuTG9jYXRpb24ucG9zdENvZGVcbiAgICAgICAgICAgICAgICA/IGRpc3BsYXlSZWNvcmQucmV0dXJuTG9jYXRpb24ucG9zdENvZGVcbiAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FyOiB7XG4gICAgICAgICAgICAgIHR5cGU6IGRpc3BsYXlSZWNvcmQudmVoaWNsZS50eXBlLFxuICAgICAgICAgICAgICBjbGFzczogZGlzcGxheVJlY29yZC52ZWhpY2xlLmNsYXNzLFxuICAgICAgICAgICAgICBtYW51YWxUcmFuc21pc3Npb246IGRpc3BsYXlSZWNvcmQudmVoaWNsZS50cmFuc21pc3Npb24uaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgQ2FySGlyZVRyYW5zbWlzc2lvbi5NYW51YWxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhcmVJbmZvOiB7XG4gICAgICAgICAgICAgIHRpdGxlOiBjYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eT8uZmFyZUluZm8/LnRpdGxlLFxuICAgICAgICAgICAgICB0eXBlOiBjYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eT8uZmFyZUluZm8/LnR5cGUsXG4gICAgICAgICAgICAgIGNvZGU6IGNhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5Py5mYXJlSW5mbz8uY29kZSxcbiAgICAgICAgICAgICAgc3VwcGxpZXJDb2RlOiBjYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eT8uZmFyZUluZm8/LnN1cHBsaWVyQ29kZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlbmRvck5hbWU6IGRpc3BsYXlSZWNvcmQudmVuZG9yLm5hbWUsXG4gICAgICAgICAgICBpZGVudGlmaWVyczoge1xuICAgICAgICAgICAgICBwaWNrVXBMb2NhdGlvbjogaWRlbnRpZmllcnMucGlja1VwTG9jYXRpb24gPyBpZGVudGlmaWVycy5waWNrVXBMb2NhdGlvbiA6ICcnLFxuICAgICAgICAgICAgICBwaWNrVXBMb2NhdGlvbkNvZGU6IGlkZW50aWZpZXJzLnBpY2tVcExvY2F0aW9uQ29kZVxuICAgICAgICAgICAgICAgID8gaWRlbnRpZmllcnMucGlja1VwTG9jYXRpb25Db2RlXG4gICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgcGlja1VwRXh0ZW5kZWRMb2NhdGlvbkNvZGU6IGlkZW50aWZpZXJzLnBpY2tVcEV4dGVuZGVkTG9jYXRpb25Db2RlXG4gICAgICAgICAgICAgICAgPyBpZGVudGlmaWVycy5waWNrVXBFeHRlbmRlZExvY2F0aW9uQ29kZVxuICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgIHBpY2tVcExvY2F0aW9uTmFtZTogaWRlbnRpZmllcnMucGlja1VwTG9jYXRpb25OYW1lXG4gICAgICAgICAgICAgICAgPyBpZGVudGlmaWVycy5waWNrVXBMb2NhdGlvbk5hbWVcbiAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICBkcm9wT2ZmTG9jYXRpb246IGlkZW50aWZpZXJzLmRyb3BPZmZMb2NhdGlvbiA/IGlkZW50aWZpZXJzLmRyb3BPZmZMb2NhdGlvbiA6ICcnLFxuICAgICAgICAgICAgICBkcm9wT2ZmTG9jYXRpb25Db2RlOiBpZGVudGlmaWVycy5kcm9wT2ZmTG9jYXRpb25Db2RlXG4gICAgICAgICAgICAgICAgPyBpZGVudGlmaWVycy5kcm9wT2ZmTG9jYXRpb25Db2RlXG4gICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlOiBpZGVudGlmaWVycy5kcm9wT2ZmRXh0ZW5kZWRMb2NhdGlvbkNvZGVcbiAgICAgICAgICAgICAgICA/IGlkZW50aWZpZXJzLmRyb3BPZmZFeHRlbmRlZExvY2F0aW9uQ29kZVxuICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgIGRyb3BPZmZMb2NhdGlvbk5hbWU6IGlkZW50aWZpZXJzLmRyb3BPZmZMb2NhdGlvbk5hbWVcbiAgICAgICAgICAgICAgICA/IGlkZW50aWZpZXJzLmRyb3BPZmZMb2NhdGlvbk5hbWVcbiAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICB2ZWhUeXBlOiBpZGVudGlmaWVycy52ZWhUeXBlLFxuICAgICAgICAgICAgICB2ZW5kb3I6IGlkZW50aWZpZXJzLnZlbmRvcixcbiAgICAgICAgICAgICAgY29udGFjdE51bWJlcjogY29udGFjdE51bWJlcixcbiAgICAgICAgICAgICAgbWFrZU1vZGVsOiBpZGVudGlmaWVycy5tYWtlTW9kZWwsXG4gICAgICAgICAgICAgIC8vVFJBVkVMUE9SVCBGSUVMRFNcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IHRwb3J0SWRlbnRpZmllcnMuY2F0ZWdvcnkgfHwgZW50ZXJwcmlzZUlkZW50aWZpZXJzLmNhdGVnb3J5LFxuICAgICAgICAgICAgICBkb29yQ291bnQ6IHRwb3J0SWRlbnRpZmllcnMuZG9vckNvdW50LFxuICAgICAgICAgICAgICBjbGFzczogdHBvcnRJZGVudGlmaWVycy5jbGFzcyA/IHRwb3J0SWRlbnRpZmllcnMuY2xhc3MgOiBudWxsLFxuICAgICAgICAgICAgICBhaXJjb246ICdhaXJjb24nIGluIHRwb3J0SWRlbnRpZmllcnMgPyB0cG9ydElkZW50aWZpZXJzLmFpcmNvbiA6IG51bGwsXG4gICAgICAgICAgICAgIHRyYW5zbWlzc2lvbjogdHBvcnRJZGVudGlmaWVycy50cmFuc21pc3Npb24gPyB0cG9ydElkZW50aWZpZXJzLnRyYW5zbWlzc2lvbiA6IG51bGwsXG4gICAgICAgICAgICAgIC8vRW50ZXJwcmlzZSBjYXIgaGlyZSBmaWVsZHNcbiAgICAgICAgICAgICAgZHJpdmVyQWdlOiBlbnRlcnByaXNlSWRlbnRpZmllcnMuZHJpdmVyQWdlID8gU3RyaW5nKGVudGVycHJpc2VJZGVudGlmaWVycy5kcml2ZXJBZ2UpIDogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJpY2UsXG4gICAgICAgICAgY3VycmVuY3k6IGRpc3BsYXlSZWNvcmQuY2hhcmdlc1swXS5jdXJyZW5jeUNvZGUgYXMgQ3VycmVuY3lDb2RlLFxuICAgICAgICAgIHNlYXJjaFF1ZXJ5OiB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkoPFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3M+Y2FySGlyZVF1ZXJ5KSxcbiAgICAgICAgICBjbzJQZXJJdGVtLFxuICAgICAgICAgIGNvMlBlclBhc3NlbmdlcixcbiAgICAgICAgICBvdXRib3VuZERhdGU6IG5ldyBEYXRlKGRpc3BsYXlSZWNvcmQucGlja3VwKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIGxvd2VzdFByaWNlOiB0aGlzLmNoZWFwZXN0UHJpY2U/LmFtb3VudCB8fCBudWxsLFxuICAgICAgICAgIGxvd2VzdFByaWNlQ3VycmVuY3k6ICh0aGlzLmNoZWFwZXN0UHJpY2U/LmN1cnJlbmN5Q29kZSBhcyBDdXJyZW5jeUNvZGUpIHx8IG51bGwsXG4gICAgICAgICAgbG93ZXN0UHJpY2VEZXRhaWw6ICFnbXQgPyB0aGlzLmNyZWF0ZUxvd2VzdFByaWNlRGV0YWlsKCkgOiBudWxsLFxuICAgICAgICAgIHJlYXNvbktleXM6IGNhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5LnJlcXVpcmVzUmVhc29uS2V5cyxcbiAgICAgICAgICBhZ2VudE92ZXJyb2RlVW5hdmFpbGFibGU6Y2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHkudW5hdmFpbGFibGVcbiAgICAgICAgfSxcbiAgICAgICAgaW50QmFza2V0LFxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcbiAgICAgICAgY2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHkucmVxdWlyZXNSZWFzb25LZXlzLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgaWdub3JlSW52b2tlZFxuICAgICAgKTtcbiAgICAgIGlmICh3aGF0SGFwcGVuZWQgPT09IERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2gpIHtcbiAgICAgICAgdGhpcy5yZXNlYXJjaFdpdGhOZXdVc2VyKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2hhdEhhcHBlbmVkO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsKTtcbiAgfVxuXG4gIHNhdmVTZWFyY2goKTogT2JzZXJ2YWJsZTxTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0PiB7XG4gICAgaWYgKHRoaXMuaXNGYXZvdXJpdGVWYWxpZC52YWx1ZSkge1xuICAgICAgY29uc3QgcXVlcnk6IFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3MgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XG4gICAgICBjb25zdCBmYXZvdXJpdGVTZWFyY2hRdWVyeTogQ2FySGlyZVNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xuICAgICAgY29uc3Qgc2VhcmNoSW5mbyA9IHtcbiAgICAgICAgbmFtZTogYCR7bW9tZW50KCl9YCxcbiAgICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkNhcixcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVGYXZvdXJpdGVTZWFyY2goc2VhcmNoSW5mbyk7XG4gICAgfVxuICB9XG4gIGFzeW5jIGFwcGx5RmF2b3VyaXRlKGZhdjogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5waWNrdXBfZGF0ZXRpbWUgPSBtb21lbnQoKS5zdGFydE9mKCdkYXknKS5hZGQoNywgJ2hvdXJzJykuYWRkKDMwLCAnbWludXRlcycpO1xuICAgIHRoaXMuZHJvcG9mZl9kYXRldGltZSA9IG1vbWVudCh0aGlzLnBpY2t1cF9kYXRldGltZSkuYWRkKDEsICdkYXknKTtcbiAgICB0aGlzLmFwcGx5U2VhcmNoUXVlcnkoZmF2KTtcbiAgfVxuXG4gIGNoZWNrRm9yUHJlZmVycmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucmVzdWx0cy52YWx1ZS5maW5kKFxuICAgICAgcmVzdWx0ID0+IHJlc3VsdC5vZmZpY2VQcmVmZXJyZWQgfHwgcmVzdWx0LnRtY1ByZWZlcnJlZCB8fCByZXN1bHQuY29tcGFueVByZWZlcnJlZFxuICAgICk7XG4gIH1cblxuICBtZXNzYWdlQ29uZmlnQ2hlY2soY29uZmlnOiBhbnksIGlzQ2hlY2tQYXNzOiBib29sZWFuLCBjb3VudHJpZXM6IENvdW50cnlbXSk6IGJvb2xlYW4ge1xuICAgIGlmIChjb25maWcuZHJvcG9mZj8uY291bnRyeSAmJiBpc0NoZWNrUGFzcykge1xuICAgICAgY29uc3QgY29uZmlnRHJvcG9mZj0gY29uZmlnLmRyb3BvZmYuY291bnRyeS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgZHJvcE9mZkNvdW50cnkgPSB0aGlzLmxvY2F0aW9uVHlwZUNvbXBhcmUodGhpcy5sb2NhdGlvblR5cGUsIGZhbHNlLCB0cnVlKT8udG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGRyb3BPZmZDb3VudHJ5Q29kZSA9IGNvdW50cmllcy5maW5kKGNvdW50cnkgPT4gY291bnRyeS5jQ29kZSA9PT0gdGhpcy5kcm9wb2ZmX2NvdW50cnkpO1xuICAgICAgaXNDaGVja1Bhc3MgPSBkcm9wT2ZmQ291bnRyeSA9PT0gY29uZmlnRHJvcG9mZiB8fCBkcm9wT2ZmQ291bnRyeUNvZGUuY05hbWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gY29uZmlnRHJvcG9mZjtcbiAgICAgIGlmKHRoaXMubG9jYXRpb25UeXBlID09PSBMb2NhdGlvblR5cGVzLkFpcnBvcnQgJiYgIWlzQ2hlY2tQYXNzKXtcbiAgICAgICAgaXNDaGVja1Bhc3MgPSB0aGlzLmRyb3BvZmZfY291bnRyeSA9PT0gY29uZmlnLmRyb3BvZmYuY291bnRyeTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbmZpZy5kcm9wb2ZmPy5sb2NhdGlvbiAmJiBpc0NoZWNrUGFzcykge1xuICAgICAgY29uc3QgY29uZmlnRHJvcG9mZkxvY2F0aW9uID0gY29uZmlnLmRyb3BvZmYubG9jYXRpb24udG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGRyb3BPZmZMb2NhdGlvbiA9IHRoaXMubG9jYXRpb25UeXBlQ29tcGFyZSh0aGlzLmxvY2F0aW9uVHlwZSwgdHJ1ZSwgdHJ1ZSk/LnRvTG93ZXJDYXNlKCk7XG4gICAgICBpc0NoZWNrUGFzcyA9IGRyb3BPZmZMb2NhdGlvbiA9PT0gY29uZmlnRHJvcG9mZkxvY2F0aW9uO1xuICAgICAgaWYoIWlzQ2hlY2tQYXNzICYmIGRyb3BPZmZMb2NhdGlvbil7XG4gICAgICAgIGlzQ2hlY2tQYXNzID0gZHJvcE9mZkxvY2F0aW9uLmluY2x1ZGVzKGNvbmZpZ0Ryb3BvZmZMb2NhdGlvbik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb25maWcucGlja3VwPy5jb3VudHJ5ICYmIGlzQ2hlY2tQYXNzKSB7XG4gICAgICBjb25zdCBjb25maWdQaWNrVXAgPSBjb25maWcucGlja3VwLmNvdW50cnkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IHBpY2tDb3VudHJ5ID0gdGhpcy5sb2NhdGlvblR5cGVDb21wYXJlKHRoaXMubG9jYXRpb25UeXBlLCBmYWxzZSk/LnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBwaWNrdXBDb3VudHJ5Q29kZSA9IGNvdW50cmllcy5maW5kKGNvdW50cnkgPT4gY291bnRyeS5jQ29kZSA9PT0gdGhpcy5kcm9wb2ZmX2NvdW50cnkpO1xuICAgICAgaXNDaGVja1Bhc3MgPSBwaWNrQ291bnRyeSA9PT0gY29uZmlnUGlja1VwIHx8IHBpY2t1cENvdW50cnlDb2RlLmNOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IGNvbmZpZ1BpY2tVcDtcbiAgICAgICAgaWYodGhpcy5sb2NhdGlvblR5cGUgPT09IExvY2F0aW9uVHlwZXMuQWlycG9ydCAmJiAhaXNDaGVja1Bhc3Mpe1xuICAgICAgICAgIGlzQ2hlY2tQYXNzID0gdGhpcy5waWNrdXBfY291bnRyeSA9PT0gY29uZmlnLnBpY2t1cC5jb3VudHJ5O1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjb25maWcucGlja3VwPy5sb2NhdGlvbiAmJiBpc0NoZWNrUGFzcykge1xuICAgICAgY29uc3QgY29uZmlnUGlja1VwTG9jYXRpb24gPSBjb25maWcucGlja3VwLmxvY2F0aW9uLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBwaWNrVXBMb2NhdGlvbiA9IHRoaXMubG9jYXRpb25UeXBlQ29tcGFyZSh0aGlzLmxvY2F0aW9uVHlwZSwgdHJ1ZSk/LnRvTG93ZXJDYXNlKCk7XG4gICAgICBpc0NoZWNrUGFzcyA9IHBpY2tVcExvY2F0aW9uID09PSBjb25maWdQaWNrVXBMb2NhdGlvbjtcbiAgICAgIGlmKCFpc0NoZWNrUGFzcyAmJiBwaWNrVXBMb2NhdGlvbil7XG4gICAgICAgIGlzQ2hlY2tQYXNzID0gcGlja1VwTG9jYXRpb24uaW5jbHVkZXMoY29uZmlnUGlja1VwTG9jYXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29uZmlnLnN1cHBsaWVyICYmIGlzQ2hlY2tQYXNzKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZFN1cHBsaWVyID0gdGhpcy5maW5kU2VsZWN0ZWRDYXJTdXBwbGllcih0aGlzLmNob3NlblZlbmRvciwgdGhpcy52ZW5kb3JzKTtcbiAgICAgIGlzQ2hlY2tQYXNzID0gc2VsZWN0ZWRTdXBwbGllci5jb2RlID09PSBjb25maWcuc3VwcGxpZXIgfHwgc2VsZWN0ZWRTdXBwbGllci5uYW1lID09PSBjb25maWcuc3VwcGxpZXIgfHwgY29uZmlnLnN1cHBsaWVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5jaG9zZW5WZW5kb3I/LnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBpc0NoZWNrUGFzcztcbiAgfVxuXG4gIGxvY2F0aW9uVHlwZUNvbXBhcmUobG9jYXRpb25UeXBlOiBMb2NhdGlvblR5cGVzLCBpc0xvY2F0aW9uOiBib29sZWFuLCBpc0Ryb3BvZmYgPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChsb2NhdGlvblR5cGUpIHtcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5BaXJwb3J0OlxuICAgICAgICBpZihpc0xvY2F0aW9uKXtcbiAgICAgICAgICByZXR1cm4gaXNEcm9wb2ZmID8gdGhpcy5kcm9wb2ZmX2xvY2F0aW9uPy5kZXN0aW5hdGlvbiA6IHRoaXMucGlja3VwX2xvY2F0aW9uPy5kZXN0aW5hdGlvbjtcbiAgICAgICAgfSBlbHNle1xuICAgICAgICAgIHJldHVybiBpc0Ryb3BvZmYgPyB0aGlzLmRyb3BvZmZfbG9jYXRpb24/LmNvdW50cnkgOiB0aGlzLnBpY2t1cF9sb2NhdGlvbj8uY291bnRyeTtcbiAgICAgICAgfVxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkNpdHk6XG4gICAgICAgIGlmKGlzTG9jYXRpb24pe1xuICAgICAgICAgIHJldHVybiBpc0Ryb3BvZmYgPyB0aGlzLmNpdHlEcm9wb2ZmPy5uYW1lIDogdGhpcy5jaXR5UGlja3VwPy5uYW1lO1xuICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgcmV0dXJuIGlzRHJvcG9mZiA/IHRoaXMuY2l0eURyb3BvZmY/LmNvdW50cnlDb2RlIDogdGhpcy5jaXR5UGlja3VwPy5jb3VudHJ5Q29kZTtcbiAgICAgICAgfVxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlOlxuICAgICAgICBpZihpc0xvY2F0aW9uKXtcbiAgICAgICAgICByZXR1cm4gaXNEcm9wb2ZmID8gdGhpcy5wb3N0Y29kZURyb3BvZmZSYXc/LmNpdHkgOiB0aGlzLnBvc3Rjb2RlUGlja3VwUmF3Py5jaXR5O1xuICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgcmV0dXJuIGlzRHJvcG9mZiA/IHRoaXMucG9zdGNvZGVEcm9wb2ZmUmF3Py5jb3VudHJ5Q29kZSA6IHRoaXMucG9zdGNvZGVQaWNrdXBSYXc/LmNvdW50cnlDb2RlO1xuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmluZFNlbGVjdGVkQ2FyU3VwcGxpZXIoY2hvc2VuVmVuZG9yOiBzdHJpbmcsIHZlbmRvcnM6IFZlbmRvcltdKSB7XG4gICAgcmV0dXJuIHZlbmRvcnMuZmluZCh2ZW5kb3IgPT4gdmVuZG9yLmNvZGUgPT09IGNob3NlblZlbmRvcik7XG4gIH1cblxuICBjcmVhdGVMb3dlc3RQcmljZURldGFpbCgpOiBhbnkge1xuICAgIGNvbnN0IGNoZWFwZXN0Q2FyID0gdGhpcy5mdWxsUmVzdWx0cz8ucmVkdWNlKChwcmV2OiBhbnksIGN1cnI6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIHByZXYuZGlzcGxheVJlY29yZC5wcmljZSA8IGN1cnIuZGlzcGxheVJlY29yZC5wcmljZSA/IHByZXYgOiBjdXJyO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdHBvcnRJZGVudGlmaWVyczogVHBvcnRJZGVudGlmaWVycyA9IHtcbiAgICAgIGFpcmNvbjogZmFsc2UsXG4gICAgICBjbGFzczogJycsXG4gICAgICB0cmFuc21pc3Npb246ICcnXG4gICAgfTtcblxuICAgIGlmIChjaGVhcGVzdENhci5zb3VyY2UgPT09IFNlcnZpY2VQcm92aWRlci5UcmF2ZWxwb3J0Q2FySGlyZSkge1xuICAgICAgdHBvcnRJZGVudGlmaWVycy5haXJjb24gPSBjaGVhcGVzdENhci5kaXNwbGF5UmVjb3JkLnZlaGljbGUuYWlyY29uO1xuICAgICAgdHBvcnRJZGVudGlmaWVycy5jbGFzcyA9IGNoZWFwZXN0Q2FyLmRpc3BsYXlSZWNvcmQudmVoaWNsZS5jbGFzcztcbiAgICAgIHRwb3J0SWRlbnRpZmllcnMudHJhbnNtaXNzaW9uID0gY2hlYXBlc3RDYXIuZGlzcGxheVJlY29yZC52ZWhpY2xlLnRyYW5zbWlzc2lvbjtcbiAgICB9XG5cbiAgICBjb25zdCBkZXRhaWwgPSB7XG4gICAgICBwaWNrVXBEYXRldGltZTogY2hlYXBlc3RDYXIuZGlzcGxheVJlY29yZC5waWNrdXAsXG4gICAgICBkcm9wT2ZmRGF0ZXRpbWU6IGNoZWFwZXN0Q2FyLmRpc3BsYXlSZWNvcmQuZHJvcG9mZixcbiAgICAgIHBpY2tVcExvY2F0aW9uOiB7XG4gICAgICAgIGlhdGE6XG4gICAgICAgICAgdGhpcy5sb2NhdGlvblR5cGUgPT09IExvY2F0aW9uVHlwZXMuQWlycG9ydFxuICAgICAgICAgICAgPyBjaGVhcGVzdENhci5pZGVudGlmaWVycy5waWNrVXBMb2NhdGlvbkNvZGVcbiAgICAgICAgICAgIDogJycsXG4gICAgICAgIG5hbWU6IGNoZWFwZXN0Q2FyLmRpc3BsYXlSZWNvcmQucGlja3VwTG9jYXRpb24ubmFtZVxuICAgICAgICAgID8gY2hlYXBlc3RDYXIuZGlzcGxheVJlY29yZC5waWNrdXBMb2NhdGlvbi5uYW1lXG4gICAgICAgICAgOiAnJyxcbiAgICAgICAgYWRkcmVzczogYCR7Y2hlYXBlc3RDYXIuZGlzcGxheVJlY29yZC5waWNrdXBMb2NhdGlvbi50b3BMaW5lfSwgJHtjaGVhcGVzdENhci5kaXNwbGF5UmVjb3JkLnBpY2t1cExvY2F0aW9uLmNpdHl9YCxcbiAgICAgICAgcG9zdGNvZGU6IGNoZWFwZXN0Q2FyLmRpc3BsYXlSZWNvcmQucGlja3VwTG9jYXRpb24ucG9zdENvZGVcbiAgICAgICAgICA/IGNoZWFwZXN0Q2FyLmRpc3BsYXlSZWNvcmQucGlja3VwTG9jYXRpb24ucG9zdENvZGVcbiAgICAgICAgICA6ICcnXG4gICAgICB9LFxuICAgICAgZHJvcE9mZkxvY2F0aW9uOiB7XG4gICAgICAgIGlhdGE6XG4gICAgICAgICAgdGhpcy5sb2NhdGlvblR5cGUgPT09IExvY2F0aW9uVHlwZXMuQWlycG9ydFxuICAgICAgICAgICAgPyBjaGVhcGVzdENhci5pZGVudGlmaWVycy5kcm9wT2ZmTG9jYXRpb25Db2RlXG4gICAgICAgICAgICA6ICcnLFxuICAgICAgICBuYW1lOiBjaGVhcGVzdENhci5kaXNwbGF5UmVjb3JkLnJldHVybkxvY2F0aW9uLm5hbWVcbiAgICAgICAgICA/IGNoZWFwZXN0Q2FyLmRpc3BsYXlSZWNvcmQucmV0dXJuTG9jYXRpb24ubmFtZVxuICAgICAgICAgIDogJycsXG4gICAgICAgIGFkZHJlc3M6IGAke2NoZWFwZXN0Q2FyLmRpc3BsYXlSZWNvcmQucmV0dXJuTG9jYXRpb24udG9wTGluZX0sICR7Y2hlYXBlc3RDYXIuZGlzcGxheVJlY29yZC5yZXR1cm5Mb2NhdGlvbi5jaXR5fWAsXG4gICAgICAgIHBvc3Rjb2RlOiBjaGVhcGVzdENhci5kaXNwbGF5UmVjb3JkLnJldHVybkxvY2F0aW9uLnBvc3RDb2RlXG4gICAgICAgICAgPyBjaGVhcGVzdENhci5kaXNwbGF5UmVjb3JkLnJldHVybkxvY2F0aW9uLnBvc3RDb2RlXG4gICAgICAgICAgOiAnJ1xuICAgICAgfSxcbiAgICAgIGNhcjoge1xuICAgICAgICB0eXBlOiBjaGVhcGVzdENhci5kaXNwbGF5UmVjb3JkLnZlaGljbGUudHlwZSxcbiAgICAgICAgbWFudWFsVHJhbnNtaXNzaW9uOiBjaGVhcGVzdENhci5kaXNwbGF5UmVjb3JkLnZlaGljbGUudHJhbnNtaXNzaW9uLmluY2x1ZGVzKFxuICAgICAgICAgIENhckhpcmVUcmFuc21pc3Npb24uTWFudWFsXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICBmYXJlSW5mbzoge1xuICAgICAgICB0aXRsZTogY2hlYXBlc3RDYXI/LmZhcmVJbmZvPy50aXRsZSxcbiAgICAgICAgdHlwZTogY2hlYXBlc3RDYXI/LmZhcmVJbmZvPy50eXBlLFxuICAgICAgICBjb2RlOiBjaGVhcGVzdENhcj8uZmFyZUluZm8/LmNvZGUsXG4gICAgICAgIHN1cHBsaWVyQ29kZTogY2hlYXBlc3RDYXI/LmZhcmVJbmZvPy5zdXBwbGllckNvZGVcbiAgICAgIH0sXG4gICAgICB2ZW5kb3JOYW1lOiBjaGVhcGVzdENhci5kaXNwbGF5UmVjb3JkLnZlbmRvci5uYW1lLFxuICAgICAgaWRlbnRpZmllcnM6IHtcbiAgICAgICAgcGlja1VwTG9jYXRpb246IGNoZWFwZXN0Q2FyLmlkZW50aWZpZXJzLnBpY2tVcExvY2F0aW9uXG4gICAgICAgICAgPyBjaGVhcGVzdENhci5pZGVudGlmaWVycy5waWNrVXBMb2NhdGlvblxuICAgICAgICAgIDogJycsXG4gICAgICAgIHBpY2tVcExvY2F0aW9uQ29kZTogY2hlYXBlc3RDYXIuaWRlbnRpZmllcnMucGlja1VwTG9jYXRpb25Db2RlXG4gICAgICAgICAgPyBjaGVhcGVzdENhci5pZGVudGlmaWVycy5waWNrVXBMb2NhdGlvbkNvZGVcbiAgICAgICAgICA6ICcnLFxuICAgICAgICBwaWNrVXBFeHRlbmRlZExvY2F0aW9uQ29kZTogY2hlYXBlc3RDYXIuaWRlbnRpZmllcnMucGlja1VwRXh0ZW5kZWRMb2NhdGlvbkNvZGVcbiAgICAgICAgICA/IGNoZWFwZXN0Q2FyLmlkZW50aWZpZXJzLnBpY2tVcEV4dGVuZGVkTG9jYXRpb25Db2RlXG4gICAgICAgICAgOiAnJyxcbiAgICAgICAgcGlja1VwTG9jYXRpb25OYW1lOiBjaGVhcGVzdENhci5pZGVudGlmaWVycy5waWNrVXBMb2NhdGlvbk5hbWVcbiAgICAgICAgICA/IGNoZWFwZXN0Q2FyLmlkZW50aWZpZXJzLnBpY2tVcExvY2F0aW9uTmFtZVxuICAgICAgICAgIDogJycsXG4gICAgICAgIGRyb3BPZmZMb2NhdGlvbjogY2hlYXBlc3RDYXIuaWRlbnRpZmllcnMuZHJvcE9mZkxvY2F0aW9uXG4gICAgICAgICAgPyBjaGVhcGVzdENhci5pZGVudGlmaWVycy5kcm9wT2ZmTG9jYXRpb25cbiAgICAgICAgICA6ICcnLFxuICAgICAgICBkcm9wT2ZmTG9jYXRpb25Db2RlOiBjaGVhcGVzdENhci5pZGVudGlmaWVycy5kcm9wT2ZmTG9jYXRpb25Db2RlXG4gICAgICAgICAgPyBjaGVhcGVzdENhci5pZGVudGlmaWVycy5kcm9wT2ZmTG9jYXRpb25Db2RlXG4gICAgICAgICAgOiAnJyxcbiAgICAgICAgZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlOiBjaGVhcGVzdENhci5pZGVudGlmaWVycy5kcm9wT2ZmRXh0ZW5kZWRMb2NhdGlvbkNvZGVcbiAgICAgICAgICA/IGNoZWFwZXN0Q2FyLmlkZW50aWZpZXJzLmRyb3BPZmZFeHRlbmRlZExvY2F0aW9uQ29kZVxuICAgICAgICAgIDogJycsXG4gICAgICAgIGRyb3BPZmZMb2NhdGlvbk5hbWU6IGNoZWFwZXN0Q2FyLmlkZW50aWZpZXJzLmRyb3BPZmZMb2NhdGlvbk5hbWVcbiAgICAgICAgICA/IGNoZWFwZXN0Q2FyLmlkZW50aWZpZXJzLmRyb3BPZmZMb2NhdGlvbk5hbWVcbiAgICAgICAgICA6ICcnLFxuICAgICAgICB2ZWhUeXBlOiBjaGVhcGVzdENhci5pZGVudGlmaWVycy52ZWhUeXBlLFxuICAgICAgICB2ZW5kb3I6IGNoZWFwZXN0Q2FyLmlkZW50aWZpZXJzLnZlbmRvcixcbiAgICAgICAgLy9UUkFWRUxQT1JUIEZJRUxEU1xuICAgICAgICBjbGFzczogdHBvcnRJZGVudGlmaWVycy5jbGFzcyA/IHRwb3J0SWRlbnRpZmllcnMuY2xhc3MgOiBudWxsLFxuICAgICAgICBhaXJjb246ICdhaXJjb24nIGluIHRwb3J0SWRlbnRpZmllcnMgPyB0cG9ydElkZW50aWZpZXJzLmFpcmNvbiA6IG51bGwsXG4gICAgICAgIHRyYW5zbWlzc2lvbjogdHBvcnRJZGVudGlmaWVycy50cmFuc21pc3Npb24gPyB0cG9ydElkZW50aWZpZXJzLnRyYW5zbWlzc2lvbiA6IG51bGxcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGRldGFpbDtcbiAgfVxuXG4gIC8vIFdlIHVzZSB0aGlzIG1ldGhvZCBmb3IgZmVhdHVyZXM6IFJlY2VudFNlYXJjaCwgRmF2b3VyaXRlU2VhcmNoLCBFeHBpcmVkQmFza2V0LCBDb3B5QmFza2V0LCBDbG9uZUJhc2tldFxuICAvLyBOb3RlOiBEbyBub3QgaW5jbHVkZSBkYXRlcyBhbmQgdGF2ZWxsZXJzIGluIHRoaXMgbWV0aG9kXG4gIGFzeW5jIGFwcGx5U2VhcmNoUXVlcnkocXVlcnk6IFNlYXJjaENhckhpcmVRdWVyeVZhcmlhYmxlcywgc3RhcnRTZWFyY2g6IGJvb2xlYW4gPSBmYWxzZSwgY2xvbmVCYXNrZXRJdGVtOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHZlbmRvciwgY2xhc3M6IGNhckNsYXNzLCB0eXBlOiBjYXJUeXBlLCB0cmFuc21pc3Npb24sIGFpcmNvbiwgZXN0aW1hdGVkRGFpbHlEaXN0YW5jZSwgY29sbGVjdGlvbiwgZGVsaXZlcnksIGRyaXZlckFnZSwgY2l0eSwgYWlycG9ydCwgZGVwb3QgfSA9IHF1ZXJ5O1xuICAgIHRoaXMuY2hvc2VuVmVuZG9yID0gdmVuZG9yID8/IChjbG9uZUJhc2tldEl0ZW0gPyB0aGlzLmNsb25lZEJhc2tldEl0ZW1EZXRhaWxzLmlkZW50aWZpZXJzLnZlbmRvciA6ICctJykgYXMgQ2FySGlyZUNsYXNzO1xuICAgIHRoaXMuY2FyQ2xhc3MgPSBjYXJDbGFzcyA/PyAoY2xvbmVCYXNrZXRJdGVtID8gdGhpcy5jbG9uZWRCYXNrZXRJdGVtRGV0YWlscy5jYXIuY2xhc3MgOiAnJykgYXMgQ2FySGlyZUNsYXNzO1xuICAgIHRoaXMuY2FyVHlwZSA9IGNhclR5cGUgPz8gKGNsb25lQmFza2V0SXRlbSA/IHRoaXMuY2xvbmVkQmFza2V0SXRlbURldGFpbHMuY2FyLnR5cGUgOiAnJykgYXMgQ2FySGlyZVR5cGU7XG4gICAgdGhpcy50cmFuc21pc3Npb24gPSB0cmFuc21pc3Npb24gPz8gJycgYXMgQ2FySGlyZVRyYW5zbWlzc2lvbjtcbiAgICB0aGlzLmFpckNvbiA9IGFpcmNvbiA/PyBudWxsO1xuICAgIHRoaXMuZXN0aW1hdGVkTWlsZWFnZSA9IGVzdGltYXRlZERhaWx5RGlzdGFuY2UgPz8gbnVsbDtcbiAgICB0aGlzLmNvbGxlY3Rpb24gPSBjb2xsZWN0aW9uID8/IGZhbHNlO1xuICAgIHRoaXMuZGVsaXZlcnkgPSBkZWxpdmVyeSA/PyBmYWxzZTtcbiAgICB0aGlzLmRyaXZlckFnZSA9IGRyaXZlckFnZSA/PyBudWxsO1xuXG4gICAgaWYgKGNpdHkpIHtcbiAgICAgIHRoaXMuZ2V0UGFyYW1zRm9yQ2FyYnlDaXR5KGNpdHksIHN0YXJ0U2VhcmNoKTtcbiAgICB9IGVsc2UgaWYgKGFpcnBvcnQpIHtcbiAgICAgIHRoaXMuZ2V0UGFyYW1zRm9yQ2FyYnlBaXJwb3J0KGFpcnBvcnQsIHN0YXJ0U2VhcmNoKTtcbiAgICB9IGVsc2UgaWYgKGRlcG90KSB7XG4gICAgICB0aGlzLmdldFBhcmFtc0ZvckNhcmJ5UG9zdENvZGUoZGVwb3QsIHN0YXJ0U2VhcmNoKTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXJDYXJIaXJlRGVwb3RzKGRhdGE6IENhckhpcmVEZXBvdFtdLCBjaXR5TmFtZTogc3RyaW5nLCBpc1Bvc3RDb2RlID0gZmFsc2UpOiBDYXJIaXJlRGVwb3RbXSB7XG4gICAgY29uc3QgYWx0Q2l0eU5hbWVFID0gdGhpcy5oZWxwZXJzLm5vcm1hbGl6ZUNpdHlOYW1lRShjaXR5TmFtZSk7XG4gICAgY29uc3QgYWx0Q2l0eU5hbWUgPSB0aGlzLmhlbHBlcnMubm9ybWFsaXplQ2l0eU5hbWUoY2l0eU5hbWUpO1xuICAgIC8vIGlkZW50aWZ5IHVtbGF1IGFuZCByZXBsYWNlIHdpdGggdWU/P1xuICAgIGNvbnNvbGUubG9nKGArKysgRmlsdGVyaW5nIHRvIGNpdHlOYW1lOiAke2NpdHlOYW1lfSArKytgKTtcbiAgICBpZihpc1Bvc3RDb2RlKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2hvc2VuVmVuZG9yICYmIHRoaXMuY2hvc2VuVmVuZG9yICE9PSAnLScpIHtcbiAgICAgIHJldHVybiBkYXRhLmZpbHRlcigoZGVwbzogQ2FySGlyZURlcG90KSA9PiBkZXBvLnZlbmRvckNvZGUgPT0gdGhpcy5jaG9zZW5WZW5kb3IgJiYgKGRlcG8uY2l0eU5hbWUubGVuZ3RoID4gMyA/IGRlcG8uY2l0eU5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhjaXR5TmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgZGVwby5jaXR5TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGFsdENpdHlOYW1lRS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgZGVwby5jaXR5TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGFsdENpdHlOYW1lLnRvTG93ZXJDYXNlKCkpIDogdHJ1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoKGRlcG86IENhckhpcmVEZXBvdCkgPT4gZGVwby5jaXR5TmFtZS5sZW5ndGggPiAzID8gZGVwby5jaXR5TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGNpdHlOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgZGVwby5jaXR5TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGFsdENpdHlOYW1lRS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgIGRlcG8uY2l0eU5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhhbHRDaXR5TmFtZS50b0xvd2VyQ2FzZSgpKSA6IHRydWUgKTtcbiAgfVxuXG4gIHNvcnRDYXJIaXJlRGVwb3RzKGRhdGE6IENhckhpcmVEZXBvdFtdLCBrZXk6IGtleW9mIENhckhpcmVEZXBvdCA9ICd2ZW5kb3InKTogQ2FySGlyZURlcG90W10ge1xuICAgIGlmIChkYXRhPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNhckhpcmVEZXBvdHMgPSBbLi4uZGF0YV07XG4gICAgICBjYXJIaXJlRGVwb3RzLnNvcnQoKGEsIGIpID0+IChhW2tleV0gPiBiW2tleV0gPyAxIDogLTEpKTtcbiAgICAgIHJldHVybiBjYXJIaXJlRGVwb3RzO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5sb2NhdGlvblR5cGUgPT09IExvY2F0aW9uVHlwZXMuQ2l0eSkge1xuICAgICAgICB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QgPSBudWxsO1xuICAgICAgICB0aGlzLmNpdHlQaWNrdXBEZXBvdCA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5sb2NhdGlvblR5cGUgPT09IExvY2F0aW9uVHlwZXMuUG9zdGNvZGUpIHtcbiAgICAgICAgdGhpcy5wb3N0Y29kZURyb3BvZmYgPSBudWxsO1xuICAgICAgICB0aGlzLnBvc3Rjb2RlUGlja3VwID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|