@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
|
@@ -373,7 +373,7 @@ export class BaseEnterpriseSearchService {
|
|
|
373
373
|
// : airport;
|
|
374
374
|
// })
|
|
375
375
|
.map((airport) => {
|
|
376
|
-
var _a, _b, _c, _d;
|
|
376
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
377
377
|
return {
|
|
378
378
|
destination: airport.name,
|
|
379
379
|
gateway: airport.iata,
|
|
@@ -381,7 +381,9 @@ export class BaseEnterpriseSearchService {
|
|
|
381
381
|
country: (_a = airport === null || airport === void 0 ? void 0 : airport.locationDetails) === null || _a === void 0 ? void 0 : _a.country,
|
|
382
382
|
postcode: (_b = airport === null || airport === void 0 ? void 0 : airport.locationDetails) === null || _b === void 0 ? void 0 : _b.postcode,
|
|
383
383
|
countryCode: (_c = airport === null || airport === void 0 ? void 0 : airport.locationDetails) === null || _c === void 0 ? void 0 : _c.countryCode,
|
|
384
|
-
locationType: (_d = airport === null || airport === void 0 ? void 0 : airport.locationDetails) === null || _d === void 0 ? void 0 : _d.locationType
|
|
384
|
+
locationType: (_d = airport === null || airport === void 0 ? void 0 : airport.locationDetails) === null || _d === void 0 ? void 0 : _d.locationType,
|
|
385
|
+
latitude: (_f = (_e = airport === null || airport === void 0 ? void 0 : airport.locationDetails) === null || _e === void 0 ? void 0 : _e.coordinates) === null || _f === void 0 ? void 0 : _f.latitude,
|
|
386
|
+
longitude: (_h = (_g = airport === null || airport === void 0 ? void 0 : airport.locationDetails) === null || _g === void 0 ? void 0 : _g.coordinates) === null || _h === void 0 ? void 0 : _h.longitude
|
|
385
387
|
};
|
|
386
388
|
}));
|
|
387
389
|
}
|
|
@@ -422,7 +424,9 @@ export class BaseEnterpriseSearchService {
|
|
|
422
424
|
return {
|
|
423
425
|
name: result.destination,
|
|
424
426
|
type: LocationTypes.Airport,
|
|
425
|
-
airport: result
|
|
427
|
+
airport: result,
|
|
428
|
+
latitude: result.latitude,
|
|
429
|
+
longitude: result.longitude
|
|
426
430
|
};
|
|
427
431
|
});
|
|
428
432
|
};
|
|
@@ -602,13 +606,16 @@ export class BaseEnterpriseSearchService {
|
|
|
602
606
|
return results
|
|
603
607
|
? results
|
|
604
608
|
.map((result) => {
|
|
609
|
+
var _a, _b, _c, _d;
|
|
605
610
|
if (!euOnly ||
|
|
606
611
|
result.locationDetails.countryCode !== 'GB' ||
|
|
607
612
|
result.stationCode === 'STP') {
|
|
608
613
|
return {
|
|
609
614
|
type: LocationTypes.TrainStation,
|
|
610
615
|
name: result.name,
|
|
611
|
-
railstation: result
|
|
616
|
+
railstation: result,
|
|
617
|
+
latitude: (_b = (_a = result.locationDetails) === null || _a === void 0 ? void 0 : _a.coordinates) === null || _b === void 0 ? void 0 : _b.latitude,
|
|
618
|
+
longitude: (_d = (_c = result.locationDetails) === null || _c === void 0 ? void 0 : _c.coordinates) === null || _d === void 0 ? void 0 : _d.longitude
|
|
612
619
|
};
|
|
613
620
|
}
|
|
614
621
|
})
|
|
@@ -2083,7 +2090,7 @@ export class BaseEnterpriseSearchService {
|
|
|
2083
2090
|
return this.getTrainlineSearchConfigFetcher.fetchOne();
|
|
2084
2091
|
}
|
|
2085
2092
|
simultaneousSearchesCheck(ignoreChosen = false) {
|
|
2086
|
-
var _a, _b, _c, _d;
|
|
2093
|
+
var _a, _b, _c, _d, _e, _f;
|
|
2087
2094
|
return __awaiter(this, void 0, void 0, function* () {
|
|
2088
2095
|
const search_objects_copy = this.helpers.clone(this.init_search_objects());
|
|
2089
2096
|
if (this.userService.canBook(ServiceType.Flight) && this.searches[ServiceType.Flight]) {
|
|
@@ -2109,25 +2116,29 @@ export class BaseEnterpriseSearchService {
|
|
|
2109
2116
|
(!this.search_objects[ServiceType.Rail].chosen || ignoreChosen)) {
|
|
2110
2117
|
let trainlineConfig = '';
|
|
2111
2118
|
const hasTLEnabled = this.userService.userHasServiceProvider(ServiceType.Rail, ServiceProvider.Trainline);
|
|
2112
|
-
|
|
2119
|
+
const flightSearchQuery = this.searches[ServiceType.Flight];
|
|
2120
|
+
const outCc = (_b = flightSearchQuery.departLocation) === null || _b === void 0 ? void 0 : _b.countryCode;
|
|
2121
|
+
const inCc = (_c = flightSearchQuery.arriveLocation) === null || _c === void 0 ? void 0 : _c.countryCode;
|
|
2122
|
+
const notUKRail = outCc !== 'GB' && inCc !== 'GB';
|
|
2123
|
+
if (hasTLEnabled && notUKRail) {
|
|
2113
2124
|
trainlineConfig = yield this.getTrainlineSearchConfig().toPromise();
|
|
2114
2125
|
}
|
|
2115
2126
|
if (yield this.searches[ServiceType.Flight].canBeRailSearched(this.searches[ServiceType.Flight].chosenSearchType, trainlineConfig)) {
|
|
2116
2127
|
// console.log('+++ Can be rail searched +++');
|
|
2117
|
-
if (trainlineConfig && hasTLEnabled) {
|
|
2128
|
+
if (trainlineConfig && trainlineConfig !== 'UK_only' && hasTLEnabled) { // and not a UK search
|
|
2118
2129
|
// do a specific trainline one
|
|
2119
|
-
yield this.searches[ServiceType.Rail].generateQueryFromFlightQueryTrainline(
|
|
2130
|
+
yield this.searches[ServiceType.Rail].generateQueryFromFlightQueryTrainline(flightSearchQuery.getSearchQuery(), flightSearchQuery.outboundSameSearchTrainlineStations, flightSearchQuery.inboundSameSearchTrainlineStations, flightSearchQuery.departLocation, flightSearchQuery.arriveLocation);
|
|
2120
2131
|
}
|
|
2121
2132
|
else {
|
|
2122
|
-
yield this.searches[ServiceType.Rail].generateQueryFromFlightQuery(
|
|
2133
|
+
yield this.searches[ServiceType.Rail].generateQueryFromFlightQuery(flightSearchQuery.getSearchQuery());
|
|
2123
2134
|
}
|
|
2124
2135
|
console.log(this.searches[ServiceType.Rail]);
|
|
2125
|
-
|
|
2136
|
+
flightSearchQuery.railFromFlightSearchPerformed = true;
|
|
2126
2137
|
this.search_objects[ServiceType.Rail].priority = this.search_objects.FLIGHT.priority;
|
|
2127
2138
|
this.search_objects[ServiceType.Rail].resultUrl = this.search_objects.FLIGHT.resultUrl;
|
|
2128
2139
|
}
|
|
2129
2140
|
}
|
|
2130
|
-
if (((
|
|
2141
|
+
if (((_d = this.search_objects[ServiceType.Flight]) === null || _d === void 0 ? void 0 : _d.chosen) &&
|
|
2131
2142
|
this.userService.canBook(ServiceType.Eurostar) &&
|
|
2132
2143
|
(!this.search_objects[ServiceType.Eurostar].chosen || ignoreChosen)) {
|
|
2133
2144
|
if (this.searches[ServiceType.Flight].canBeEuroSearched()) {
|
|
@@ -2137,9 +2148,9 @@ export class BaseEnterpriseSearchService {
|
|
|
2137
2148
|
this.search_objects[ServiceType.Eurostar].resultUrl = this.search_objects.FLIGHT.resultUrl;
|
|
2138
2149
|
}
|
|
2139
2150
|
}
|
|
2140
|
-
if ((
|
|
2151
|
+
if ((_e = this.search_objects[ServiceType.Flight]) === null || _e === void 0 ? void 0 : _e.chosen) {
|
|
2141
2152
|
this.searches[ServiceType.Flight].hotelFromFlightSearchPerformed =
|
|
2142
|
-
(
|
|
2153
|
+
(_f = this.search_objects[ServiceType.Hotel]) === null || _f === void 0 ? void 0 : _f.chosen;
|
|
2143
2154
|
}
|
|
2144
2155
|
});
|
|
2145
2156
|
}
|
|
@@ -2394,4 +2405,4 @@ export class BaseEnterpriseSearchService {
|
|
|
2394
2405
|
}
|
|
2395
2406
|
}
|
|
2396
2407
|
BaseEnterpriseSearchService.SESSION_TRAVELLER = 'search_travellers';
|
|
2397
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYnRzZXJ2aWNlcy9iYXNlL3NyYy9saWIvdmVuZG9yL3NlcnZpY2VzL3NlYXJjaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLFNBQVMsTUFBTSx3QkFBd0IsQ0FBQztBQUMvQyxPQUFPLDJCQUEyQixNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzVFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRS9FLE9BQU8sS0FBSyxZQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzdGLE9BQU8sRUFBYSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQVN4RSxPQUFPLEVBTUwsYUFBYSxFQWlDYixlQUFlLEVBS2hC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STtZQUNKLFFBQVE7U0FDVCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsdUJBQXVCLENBQ3JCLHNCQUFnRDtRQUVoRCxPQUFPLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxTQUFTLENBQUM7WUFDbEQsZUFBZSxFQUFFLHNCQUFzQjtTQUN4QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWE7UUFDekIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDO1lBQ3pDLEtBQUssRUFBRSxLQUFLO1NBQ2IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxhQUFrQyxFQUFFLFlBQXFCLEtBQUs7UUFDdEUsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELGtCQUFrQjtRQUVoQixxREFBcUQ7UUFDckQsT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUMsU0FBUyxFQUFFLENBQUE7SUFDbkQsQ0FBQzs7QUFsbkdNLDZDQUFpQixHQUFXLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAsIHRha2UsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IENvdW50cmllcyBmcm9tICcuLi9kYXRhL2NvdW50cmllcy5qc29uJztcbmltcG9ydCBDb3VudHJpZXNXaXRob3V0UG9zdGFsQ29kZXMgZnJvbSAnLi4vZGF0YS9jb3VudHJpZXMtd2l0aG91dC1wb3N0YWwtY29kZXMuanNvbic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCYXNlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4uL2NsYXNzZXMvYmFzZS1lbnRlcnByaXNlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFBhcmtpbmdFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9wYXJraW5nLWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7IFNlYXJjaE9iamVjdCwgU2VhcmNoT2JqZWN0cyB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VhcmNoLW9iamVjdHMuaW50ZXJmYWNlJztcbmltcG9ydCAqIGFzIGdyYXBocWxUeXBlcyBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcbmltcG9ydCB7IExvdW5nZXNFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9sb3VuZ2VzLWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7IEhvdGVsRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4uL2NsYXNzZXMvaG90ZWwtZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2NhcmhpcmUtZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaCwgVGltZVdpbmRvdyB9IGZyb20gJy4uL2NsYXNzZXMvZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7IENhYkhpcmVFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9jYWJoaXJlLWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7IFJhaWxFbnRlcnByaXNlU2VhcmNoLCBSYWlsU2VhcmNoQ3JpdGVyaWEgfSBmcm9tICcuLi9jbGFzc2VzL3JhaWwtZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgVHJhdmVsbGVyLCBUcmF2ZWxsZXJPYmplY3QgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuLi9jbGFzc2VzL2hlbHBlcnMnO1xuaW1wb3J0IHsgQmFzZUhvdGVsQXZhbGliaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi9ob3RlbC1hdmFsbGliaWxpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlRW52aXJvbm1lbnQgfSBmcm9tICcuLi9jbGFzc2VzL2Vudmlyb21lbnQnO1xuaW1wb3J0IHtcbiAgQmFzZVNlYXJjaFBvc3Rjb2RlRmV0Y2hlcixcbiAgU2VhcmNoUG9zdGNvZGVzUXVvdGVGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtcG9zdGNvZGVzLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQWRkcmVzc0Zvcm0sXG4gIEFpcnBvcnRTZWFyY2hSZXN1bHRzLFxuICBDYXJIaXJlRGVwb3RSZXN1bHRBcnJheSxcbiAgQ291bnRyeUNvZGUsXG4gIExvY2F0aW9uRGV0YWlscyxcbiAgTG9jYXRpb25UeXBlcyxcbiAgT0JUQWlycG9ydERldGFpbHMsXG4gIFJhaWxBaXJwb3J0LFxuICBSb3V0ZXIsXG4gIFNlYXJjaENpdGllc1Jlc3VsdCxcbiAgU2VhcmNoQ2l0aWVzUmVzdWx0QXJyYXksXG4gIFNlYXJjaFBvc3Rjb2Rlc1Jlc3VsdEFycmF5LFxuICBTZWFyY2hSYWlsU3RhdGlvbnNSZXN1bHQsXG4gIFNlYXJjaFJhaWxTdGF0aW9uc1Jlc3VsdEFycmF5LFxuICBUZXJtaW5hbHNUeXBlLFxuICBHZXRVc2VyQ29tcGFueU9mZmljZXNSZXN1bHRBcnJheSxcbiAgU2VhcmNoSG90ZWxDaGFpbnNSZXN1bHRBcnJheSxcbiAgU2VhcmNoSG90ZWxDaGFpbnNSZXN1bHQsXG4gIEFpcmxpbmVzU2VhcmNoUmVzdWx0LFxuICBPQlRBaXJsaW5lc0RldGFpbHMsXG4gIEdldFVzZXJSZWNlbnRTZWFyY2hlc1Jlc3VsdEFycmF5LFxuICBHZXRVc2VyUmVjZW50U2VhcmNoZXNSZXN1bHQsXG4gIFJlY2VudFNlYXJjaCxcbiAgR2V0VXNlclJlY2VudEJvbHRTZWFyY2hlc1Jlc3VsdEFycmF5LFxuICBHZXRVc2VyUmVjZW50Qm9sdFNlYXJjaGVzUmVzdWx0LFxuICBCb2x0U2VhcmNoLFxuICBHZXRGbGlnaHRGYXJlUnVsZXNSZXN1bHRBcnJheSxcbiAgU2VhcmNoUmFpbExpdmVEZXBhcnR1cmVzUmVzdWx0LFxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0LFxuICBHZXRVc2VyRmF2b3VyaXRlU2VhcmNoZXNSZXN1bHRBcnJheSxcbiAgR2V0SG90ZWxDaGFpbnNSZXN1bHRBcnJheSxcbiAgR2V0SG90ZWxDaGFpbnNSZXN1bHQsXG4gIGdldFJhaWxQcm92aWRlcnNSZXN1bHQsXG4gIGdldFJhaWxQcm92aWRlcnNSZXN1bHRBcnJheSxcbiAgR2V0QWxsQWlybGluZXNSZXN1bHQsXG4gIEdldEFsbEFpcmxpbmVzUmVzdWx0QXJyYXksXG4gIEdldENhckhpcmVQcm92aWRlcnNSZXN1bHQsXG4gIEdldENhckhpcmVQcm92aWRlcnNSZXN1bHRBcnJheSxcbiAgU2VydmljZVByb3ZpZGVyLFxuICBHZXRGbGlnaHRCcmFuZGVkRmFyZXNSZXN1bHRBcnJheSxcbiAgT0JUUmFpbFF1b3RlUmVzdWx0LFxuICBHdXRGb3JtUHJldmlvdXNWYWx1ZSxcbiAgUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2Vcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHtcbiAgQmFzZVNlYXJjaFJhaWxTdGF0aW9uc0ZldGNoZXIsXG4gIFNlYXJjaFJhaWxTdGF0aW9uc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1yYWlsLXN0YXRpb25zLmZldGNoZXInO1xuaW1wb3J0IHsgQmFzZUxvdW5nZVF1b3RlRmV0Y2hlciwgTG91bmdlUXVvdGVGZXRjaGVyVHlwZSB9IGZyb20gJy4uL2ZldGNoZXJzL2xvdW5nZS1xdW90ZS5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VQYXJraW5nUXVvdGVGZXRjaGVyLFxuICBQYXJraW5nUXVvdGVGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9wYXJraW5nLXF1b3RlLWZldGNoZXInO1xuaW1wb3J0IHsgQmFzZUZsaWdodFF1b3RlRmV0Y2hlciwgRmxpZ2h0UXVvdGVGZXRjaGVyVHlwZSB9IGZyb20gJy4uL2ZldGNoZXJzL2ZsaWdodC1xdW90ZS5mZXRjaGVyJztcbmltcG9ydCB7IEJhc2VIb3RlbFF1b3RlRmV0Y2hlciwgSG90ZWxRdW90ZUZldGNoZXJUeXBlIH0gZnJvbSAnLi4vZmV0Y2hlcnMvaG90ZWwtcXVvdGUtZmV0Y2hlcic7XG5pbXBvcnQgeyBCYXNlQ2FyaGlyZVF1b3RlRmV0Y2hlciwgQ2FySGlyZUZldGNoZXJUeXBlIH0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FyaGlyZS1xdW90ZS1mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcixcbiAgQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2NhcmhpcmUtYXZhaWxhYmlsaXR5LWRldGFpbC5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VDYWJoaXJlUXVvdGVGZXRjaGVyLFxuICBDYWJoaXJlUXVvdGVGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9jYWJoaXJlLXF1b3RlLWZldGNoZXInO1xuaW1wb3J0IHsgQmFzZVJhaWxRdW90ZUZldGNoZXIsIFJhaWxRdW90ZUZldGNoZXJUeXBlIH0gZnJvbSAnLi4vZmV0Y2hlcnMvcmFpbC1xdW90ZS1mZXRjaGVyJztcbmltcG9ydCB7IEJhc2VJcmxRdW90ZUZldGNoZXIsIElybFF1b3RlRmV0Y2hlclR5cGUgfSBmcm9tICcuLi9mZXRjaGVycy9pcmwtcXVvdGUtZmV0Y2hlcic7XG5pbXBvcnQgeyBSZWdFeHBzIH0gZnJvbSAnLi4vbW9kZWxzL3JlZ2V4cC5tb2RlbCc7XG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSwgU2VhcmNoUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQmFzZVNlYXJjaEFpcnBvcnRzRmV0Y2hlcixcbiAgU2VhcmNoQWlycG9ydHNRdW90ZUZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1haXJwb3J0cy1mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VTZWFyY2hBaXJsaW5lc0ZldGNoZXIsXG4gIFNlYXJjaEFpcmxpbmVzUXVvdGVGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtYWlybGluZXMuZmV0Y2hlcic7XG5pbXBvcnQgeyBVc2VyU2VydmljZUludGVyZmFjZSwgVXNlclNlcnZpY2VzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEJhc2VTZWFyY2hDaXR5RmV0Y2hlcixcbiAgU2VhcmNoQ2l0aWVzUXVvdGVGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtY2l0aWVzLmZldGNoZXInO1xuaW1wb3J0IHsgQWJzdHJhY3RIdHRwQ2FsbFNlcnZpY2UgfSBmcm9tICcuL2h0dHAtY2FsbC5zZXJ2aWNlJztcbmltcG9ydCB7IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XG5pbXBvcnQgeyBIb3RlbEF2YWxpbmlsaXR5RmV0Y2hlclR5cGUgfSBmcm9tICcuLi9mZXRjaGVycy9ob3RlbC1hdmFsaWFiaWxpdHktZmV0Y2hlcic7XG5pbXBvcnQge1xuICBCYXNlU2F2ZVVzZXJBZGRyZXNzVXBkYXRlcixcbiAgU2F2ZVVzZXJBZGRyZXNzVXBkYXRlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2F2ZS11c2VyLWFkZHJlc3MudXBkYXRlcic7XG5pbXBvcnQge1xuICBCYXNlRWRpdFVzZXJBZGRyZXNzVXBkYXRlcixcbiAgRWRpdFVzZXJBZGRyZXNzVXBkYXRlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvZWRpdC11c2VyLWFkZHJlc3MudXBkYXRlcic7XG5pbXBvcnQge1xuICBCYXNlVXNlckFkZHJlc3Nlc0ZldGNoZXIsXG4gIFVzZXJBZGRyZXNzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvdXNlci1hZGRyZXNzZXMuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRVc2VyQ29tcGFueU9mZmljZXNGZXRjaGVyLFxuICBHZXRVc2VyQ29tcGFueU9mZmljZXNRdW90ZUZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC11c2VyLWNvbXBhbnktb2ZmaWNlcy5mZXRjaGVyJztcblxuaW1wb3J0IHsgQmFzZUdldE9mZmljZXNGZXRjaGVyLCBHZXRPZmZpY2VzUXVvdGVGZXRjaGVyVHlwZSB9IGZyb20gJy4uL2ZldGNoZXJzL2dldC1vZmZpY2VzLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlU2VhcmNoSG90ZWxDaGFpbnNGZXRjaGVyLFxuICBTZWFyY2hIb3RlbENoYWluc1F1b3RlRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWhvdGVsLWNoYWlucy5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VHZXRDb25mZXJtYVJvb21JbWFnZXNGZXRjaGVyLFxuICBHZXRDb25mZXJtYVJvb21JbWFnZXNRdW90ZUZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1jb25mZXJtYS1yb29tLWltYWdlcy5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VWYWxpZGF0ZUlzUG9zdGNvZGVWYWxpZFRlc3RlcixcbiAgVmFsaWRhdGVJc1Bvc3Rjb2RlVmFsaWRUeXBlXG59IGZyb20gJy4uL3Rlc3RlcnMvcG9zdGNvZGUtdmFsaWRhdGUudGVzdGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZVNlYXJjaERlcG90RmV0Y2hlcixcbiAgU2VhcmNoRGVwb3RRdW90ZUZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1kZXBvdHMuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRSYWlsU3RhdGlvbkZldGNoZXIsXG4gIEdldFJhaWxTdGF0aW9uRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXJhaWwtc3RhdGlvbi5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZVNlYXJjaElybFN0YXRpb25zRmV0Y2hlcixcbiAgU2VhcmNoSXJsU3RhdGlvbnNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtaXJsLXN0YXRpb25zLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlU2VhcmNoQ29uZmVybWFRdWlja2xpc3RGZXRjaGVyLFxuICBDb25mZXJtYVF1aWNrbGlzdEZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2NvbmZlcm1hLXF1aWNrbGlzdC5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUdldEZsaWdodEV4dHJhc09wdGlvbnNGZXRjaGVyLFxuICBHZXRGbGlnaHRFeHRyYXNPcHRpb25zVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtZmxpZ2h0LWV4dHJhcy1vcHRpb25zLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlRGVsZXRlVXNlckFkZHJlc3NVcGRhdGVyLFxuICBEZWxldGVVc2VyQWRkcmVzc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3JlbW92ZS11c2VyLWFkZHJlc3MtdXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VEZWxldGVSZWNlbnRTZWFyY2hVcGRhdGVyLFxuICBEZWxldGVSZWNlbnRTZWFyY2hGZXRjaGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9yZW1vdmUtcmVjZW50LXNlYXJjaC11cGRhdGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZVNhdmVSZWNlbnRTZWFyY2hVcGRhdGVyLFxuICBTYXZlUmVjZW50U2VhcmNoRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2F2ZS1yZWNlbnQtc2VhcmNoLXVwZGF0ZXInO1xuXG5pbXBvcnQge1xuICBCYXNlU2F2ZVJlY2VudEJvbHRTZWFyY2hVcGRhdGVyLFxuICBTYXZlUmVjZW50Qm9sdFNlYXJjaFVwZGF0ZXJUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3NhdmUtcmVjZW50LWJvbHQtc2VhcmNoLXVwZGF0ZXInO1xuXG5pbXBvcnQge1xuICBCYXNlU2F2ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXIsXG4gIFNhdmVGYXZvdXJpdGVTZWFyY2hGZXRjaGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9zYXZlLWZhdm91cml0ZS1zZWFyY2gtdXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRSYWlsTGl2ZURlcGFydHVyZXNGZXRjaGVyLFxuICBHZXRSYWlsTGl2ZURlcGFydHVyZXNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmFpbC1saXZlLWRlcGFydHVyZXMuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VDb252ZXJ0Q3VycmVuY3lGZXRjaGVyLFxuICBDb252ZXJ0Q3VycmVuY3lGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9jb252ZXJ0LWN1cnJlbmN5LmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0Q3VycmVuY3lDb252ZXJzaW9uUmF0ZXNGZXRjaGVyLFxuICBHZXRDdXJyZW5jeUNvbnZlcnNpb25SYXRlc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1jdXJyZW5jeS1jb252ZXJzaW9uLXJhdGVzLmZldGNoZXInO1xuXG5pbXBvcnQgeyBIb3RlbFRlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lob3RlbC1lbnRlcnByaXNlLXNlYXJjaCc7XG5pbXBvcnQgeyBSYWlsVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXJhaWwtZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgRmxpZ2h0VGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWZsaWdodC1lbnRlcnByaXNlLXNlYXJjaCc7XG5pbXBvcnQgeyBMb3VuZ2VzVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWxvdW5nZXMtZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgUGFya2luZ1RlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lwYXJraW5nLWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7IENhYkhpcmVUZW1wUGFyYW1zLCBUYXhpRm9ybU1vZGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0ljYWJoaXJlLWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7IENhckhpcmVUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JY2FyaGlyZS1lbnRlcnByaXNlLXNlYXJjaCc7XG5pbXBvcnQge1xuICBCYXNlR2V0VXNlckNhcmJvbkFsbG93YW5jZUZldGNoZXIsXG4gIEdldFVzZXJDYXJib25BbGxvd2FuY2VUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC11c2VyLWN1cnJlbnQtY2FyYm9uLWFsbG93YW5jZS5mZXRjaGVyJztcbmltcG9ydCB7IEJhc2VXZWJUb2tlblNlcnZpY2UgfSBmcm9tICcuL3dlYnRva2VuLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQmFzZUdldFJpc2tBbGVydHNGZXRjaGVyLFxuICBHZXRSaXNrQWxlcnRzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXJpc2stYWxlcnRzLmZldGNoZXInO1xuaW1wb3J0IHsgSXJsVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWlybC1lbnRlcnByaXNlLXNlYXJjaCc7XG5pbXBvcnQgeyBJUkxFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9pcmwtZW50ZXJwcmlzZS1zZWFyY2gnO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0VXNlclJlY2VudFNlYXJjaGVzRmV0Y2hlcixcbiAgR2V0VXNlclJlY2VudFNlYXJjaGVzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXVzZXItcmVjZW50LXNlYXJjaGVzLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0VXNlclJlY2VudEJvbHRTZWFyY2hlc0ZldGNoZXIsXG4gIEdldFVzZXJSZWNlbnRCb2x0U2VhcmNoZXNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtdXNlci1yZWNlbnQtYm9sdC1zZWFyY2hlcy5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUdldFJhaWxjYXJkc0ZldGNoZXIsXG4gIEdldFJhaWxDYXJkc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1yYWlsLWNhcmRzLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0Q292aWRNaWNyb3NpdGVUb2tlbkZldGNoZXIsXG4gIEdldENvdmlkTWljcm9zaXRlVG9rZW5GZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtY292aWQtbWljcm9zaXRlLXRva2VuLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlRXVyb3N0YXJRdW90ZUZldGNoZXIsXG4gIEV1cm9zdGFyUXVvdGVGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9ldXJvc3Rhci1xdW90ZS5mZXRjaGVyJztcbmltcG9ydCB7IEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4uL2NsYXNzZXMvZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgRXVyb3N0YXJUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IEV1cm9TdGF0aW9ucyBmcm9tICcuLi9kYXRhL2V1cm8tc3RhdGlvbnMuanNvbic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgQmFzZVNlYXJjaFVzZXJzQ2FuQm9va0ZvckZldGNoZXIsXG4gIFNlYXJjaFVzZXJDYW5Cb29rRm9yRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLXVzZXJzLWNhbi1ib29rLWZvci1mZXRjaGVyJztcbmltcG9ydCB7IEV1cm9zdGFyU2VhcmNoVHlwZSB9IGZyb20gJy4uL2NsYXNzZXMvZXVyb3N0YXItc2VhcmNoLXR5cGUuZW51bSc7XG5pbXBvcnQge1xuICBCYXNlSXJsRGlzY291bnRDYXJkRmV0Y2hlcixcbiAgSXJsRGlzY291bnRDYXJkRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaXJsLWRpc2NvdW50LWNhcmQtZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRGbGlnaHRGYXJlUnVsZXNGZXRjaGVyLFxuICBHZXRGbGlnaHRGYXJlUnVsZXNUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2ZsaWdodC1mYXJlLXJ1bGVzLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldEZsaWdodFNlYXRNYXBGZXRjaGVyLFxuICBHZXRGbGlnaHRTZWF0TWFwVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtZmxpZ2h0LXNlYXQtbWFwLWZldGNoZXInO1xuaW1wb3J0IHtcbiAgQXBwbHlIb3RlbFJ1bGVzRmV0Y2hlclR5cGUsXG4gIEJhc2VIb3RlbFJ1bGVzRmV0Y2hlclxufSBmcm9tICcuLi9mZXRjaGVycy9hcHBseS1KSVQtaG90ZWwtcnVsZXMuZmV0Y2hlcic7XG5pbXBvcnQge1xuICBBcHBseUppdEZsaWdodFJ1bGVzVHlwZSxcbiAgQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyXG59IGZyb20gJy4uL2ZldGNoZXJzL2FwcGx5LWppdC1mbGlnaHQtcnVsZXMnO1xuaW1wb3J0IHsgQmFzZU1vZGFsT3BlbmVyU2VydmljZSB9IGZyb20gJy4vbW9kYWwtb3BlbmVyLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQmFzZUdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc0ZldGNoZXIsXG4gIEdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC11c2VyLWZhdm91cml0ZS1zZWFyY2hlcy5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VEZWxldGVGYXZvdXJpdGVTZWFyY2hVcGRhdGVyLFxuICBEZWxldGVGYXZvdXJpdGVTZWFyY2hGZXRjaGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9yZW1vdmUtZmF2b3VyaXRlLXNlYXJjaC11cGRhdGVyJztcbmltcG9ydCB7IEJhc2VFbWFpbEJhc2tldEZldGNoZXIsIEVtYWlsQmFza2V0RmV0Y2hlclR5cGUgfSBmcm9tICcuLi9mZXRjaGVycy9lbWFpbC1iYXNrZXQuZmV0Y2hlcic7XG5pbXBvcnQgeyBGYXN0VHJhY2tUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZmFzdC10cmFjay1lbnRlcnByaXNlLXNlYXJjaCc7XG5pbXBvcnQgeyBGYXN0VHJhY2tFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9mYXN0LXRyYWNrLWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7XG4gIEJhc2VGYXN0VHJhY2tRdW90ZUZldGNoZXIsXG4gIEZhc3RUcmFja1F1b3RlRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZmFzdC10cmFjay1xdW90ZS5mZXRjaGVyJztcbmltcG9ydCB7IE1vZGFsVHlwZXMgfSBmcm9tICcuLi9jbGFzc2VzL21vZGFsLXR5cGVzLmVudW0nO1xuaW1wb3J0IHtcbiAgQmFzZVNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlcixcbiAgU2VuZE9mZmxpbmVOb3RpZmljYXRpb25GZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9zZW5kLW9mZmxpbmUtbm90aWZpY2F0aW9uLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldEhvdGVsQ2hhaW5zRmV0Y2hlcixcbiAgR2V0SG90ZWxDaGFpbnNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtaG90ZWwtY2hhaW5zLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldFJhaWxQcm92aWRlcnNGZXRjaGVyLFxuICBHZXRSYWlsUHJvdmlkZXJzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXJhaWwtcHJvdmlkZXJzLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldEFsbEFpcmxpbmVzRmV0Y2hlcixcbiAgR2V0QWxsQWlybGluZXNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtYWxsLWFpcmxpbmVzLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldENhckhpcmVQcm92aWRlcnNGZXRjaGVyLFxuICBHZXRDYXJIaXJlUHJvdmlkZXJzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWNhci1oaXJlLXByb3ZpZGVycy5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VHZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyLFxuICBHZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtaXJsLXN1cHBsaWVyLXN0YXRpb24uZmV0Y2hlcic7XG5pbXBvcnQgeyBGZXJyeVRlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lmZXJyeS1lbnRlcnByaXNlLXNlYXJjaCc7XG5pbXBvcnQgeyBGZXJyeUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2ZlcnJ5LWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7XG4gIEJhc2VFbWFpbEZlcnJ5Qm9va2luZ0ZldGNoZXIsXG4gIEVtYWlsRmVycnlCb29raW5nRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZW1haWwtZmVycnktYm9raW5nLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUVtYWlsQXBhcnRtZW50Qm9va2luZ0ZldGNoZXIsXG4gIEVtYWlsQXBhcnRtZW50Qm9va2luZ0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2VtYWlsLWFwYXJ0bWVudC1ib29raW5nLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUVtYWlsTWVldGluZ1Jvb21Cb29raW5nRmV0Y2hlcixcbiAgRW1haWxNZWV0aW5nUm9vbUJvb2tpbmdGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9lbWFpbC1tZWV0aW5nLXJvb20tYm9va2luZy5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEFkZHJlc3MsXG4gIEFpckF2YWlsYWJpbHR5UmVzdWx0LFxuICBBaXJwb3J0LFxuICBDdXJyZW5jeUNvZGUsXG4gIEN1cnJlbmN5UmF0ZXMsXG4gIEZsaWdodEl0aW5lcmFyeSxcbiAgRmxpZ2h0UGFzc2VuZ2VyT2JqZWN0LFxuICBHZXRHbXRJdGluZXJhcnlPcHRpb25zUmVzdWx0LFxuICBHdXRTdWdnZXN0ZWRDaXR5LFxuICBHdXRTdWdnZXN0ZWRMb2NhdGlvbnMsXG4gIEdldFBsYWNlQXV0b2NvbXBsZXRlUmVzdWx0LFxuICBHbXRJdGluZXJhcnlBaXJwb3J0T3B0aW9uLFxuICBHbXRJdGluZXJhcnlSYWlsU3RhdGlvbk9wdGlvbixcbiAgR210TG9jYXRpb24sXG4gIEd1dFVzZXIsXG4gIEZsaWdodFNlYXRNYXBSZXN1bHQsXG4gIEhvdGVsRGV0YWlsc1Jlc3VsdCxcbiAgSW5wdXRGbGlnaHRKb3VybmV5LFxuICBQbGFjZUxvY2F0aW9uLFxuICBQb3N0Y29kZURldGFpbHMsXG4gIFByZWZlcnJlZFRyYW5zcG9ydEh1YixcbiAgUmFpbEpvdXJuZXlFeGNoYW5nZSxcbiAgUmFpbEpvdXJuZXlPcHRpb25zLFxuICBSYWlsU3RhdGlvbixcbiAgU2VydmljZSxcbiAgU2VydmljZVR5cGUsXG4gIFRyYW5zcG9ydFR5cGUsXG4gIERhdGFBcmdzLFxuICBSb3V0ZUhhcHB5UmVzdWx0cyxcbiAgSG90ZWxSYXRpbmdJZGVudGlmaWVycyxcbiAgR2V0TXVsdGlwbGVIb3RlbFJhdGluZ1Jlc3BvbnNlLFxuICBQaG9uZVR5cGUsXG4gIEFkZHJlc3NJbnB1dCxcbiAgTG9jYXRpb25Db2RlcyxcbiAgUGxhY2VDYXRlZ29yeSxcbiAgRmVycnlQb3J0LFxuICBCYW5uZXJEaXNwbGF5VGFyZ2V0LFxuICBCYW5uZXIsXG4gIEZsaWdodEpvdXJuZXksXG4gIEZsaWdodFVwc2VsbE9mZmVyc1Jlc3VsdCxcbiAgU2VhcmNoVXNlckNhbkJvb2tGb3JRdWVyeVZhcmlhYmxlcyxcbiAgRGl2aXNpb24sXG4gIFNlYXNvblRpY2tldERlbGl2ZXJ5VHlwZVxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcbmltcG9ydCB7IFVzZXJGYXZvcnVyaXRlIH0gZnJvbSAnLi4vY2xhc3Nlcy91c2VyLWZhdm91cml0ZS5lbnVtJztcbmltcG9ydCB7IEVybVRyYXZlbGxlclR5cGUgfSBmcm9tICcuLi9jbGFzc2VzL2VybS10cmF2ZWxsZXItdHlwZS5lbnVtJztcblxuaW1wb3J0IHtcbiAgQmFzZUdlbmVyYXRlQmFza2V0UGRmRmV0Y2hlcixcbiAgR2VuZXJhdGVCYXNrZXRQZGZGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZW5lcmF0ZS1iYXNrZXQtcGRmLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldFJlcXVlc3RlZEhvdGVsVXBkYXRlRmV0Y2hlcixcbiAgR2V0UmVxdWVzdGVkSG90ZWxVcGRhdGVGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmVxdWVzdGVkLWhvdGVsLXVwZGF0ZS5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUdldEhvdGVsRGV0YWlsc0ZldGNoZXIsXG4gIEdldEhvdGVsRGV0YWlsc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1ob3RlbC1kZXRhaWxzLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldEZsaWdodEJyYW5kZWRGYXJlc0ZldGNoZXIsXG4gIEdldEZsaWdodEJyYW5kZWRGYXJlc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1mbGlnaHQtYnJhbmRlZC1mYXJlcy5mZXRjaGVyJztcbmltcG9ydCB7IFVzZXJEYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy91c2VyLmRhdGEnO1xuaW1wb3J0IHsgRmxpZ2h0UGFzc2VuZ2VyVHlwZSwgQm9va2VyVHlwZSB9IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xuXG5pbXBvcnQgeyBCYXNlR2V0U2VydmljZUZldGNoZXIsIEdldFNlcnZpY2VGZXRjaGVyVHlwZSB9IGZyb20gJy4uL2ZldGNoZXJzL2dldC1zZXJ2aWNlLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldFJhaWxTdGF0aW9uSW5mb0ZldGNoZXIsXG4gIEdldFJhaWxTdGF0aW9uSW5mb0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1yYWlsLXN0YXRpb24taW5mby5mZXRjaGVyJztcbmltcG9ydCB7IElSYWlsU3RhdGlvbkluZm9ybWF0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JcmFpbC1zdGF0aW9uLWluZm9ybWF0aW9uLmludGVyZmFjZSc7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRUcmFpbmxpbmVTZWFyY2hDb25maWdGZXRjaGVyLFxuICBHZXRUcmFpbmxpbmVTZWFyY2hDb25maWdGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtdHJhaW5saW5lLXNlYXJjaC1jb25maWcuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VTZWFyY2hSYWlsSW53YXJkRmV0Y2hlcixcbiAgU2VhcmNoUmFpbElud2FyZEZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1yYWlsLWlud2FyZC5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZVJhaWxTZWFyY2hFeGNoYW5nZUZldGNoZXIsXG4gIFJhaWxTZWFyY2hFeGNoYW5nZUZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1yYWlsLXNlYXJjaC1leGNoYW5nZS5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUNyZWF0ZUl0aW5lcmFyeUV4Y2hhbmdlVXBkYXRlcixcbiAgQ3JlYXRlSXRpbmVyYXJ5RXhjaGFuZ2VVcGRhdGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9jcmVhdGUtcmFpbC1pdGluZXJhcnktZXhjaGFuZ2UtdXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2V1cGRhdGVET0JVcGRhdGVyLFxuICB1cGRhdGVET0JVcGRhdGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy91cGRhdGUtZG9iLnVwZGF0ZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0QWlyQXZhaWxhYmlsaXR5RmV0Y2hlcixcbiAgR2V0QWlyQXZhaWxiaWxpdHlGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtYWlyLWF2YWlsYWJpbHR5LmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0RmxpZ2h0QXROZXdDbGFzc0ZldGNoZXIsXG4gIEdldEZsaWdodEF0TmV3Q2xhc3NGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtZmxpZ2h0LWF0LW5ldy1jbGFzcy5mZXRjaGVyJztcbmltcG9ydCB7IFxuICBCYXNlR2V0RmxpZ2h0VXBzZWxsT2ZmZXJzRmV0Y2hlciwgXG4gIEdldEZsaWdodFVwc2VsbE9mZmVyc0ZldGNoZXJUeXBlIH0gXG5mcm9tICcuLi9mZXRjaGVycy9nZXQtZmxpZ2h0LXVwc2VsbC1vZmZlcnMuZmV0Y2hlcic7XG5pbXBvcnQge1xuICBCYXNlRmxpZ2h0U2VhcmNoRXhjaGFuZ2VGZXRjaGVyLFxuICBGbGlnaHRTZWFyY2hFeGNoYW5nZUZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1mbGlnaHQtc2VhcmNoLWV4Y2hhbmdlLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUZsaWdodEV4Y2hhbmdlRGV0YWlsc0ZldGNoZXIsXG4gIEZsaWdodEV4Y2hhbmdlRGV0YWlsc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1mbGlnaHQtZXhjaGFuZ2UtZGV0YWlscy5mZXRjaGVyJztcbmltcG9ydCB7IEFwYXJ0bWVudFRlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lhcGFydG1lbnQtZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgQXBhcnRtZW50RW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4uL2NsYXNzZXMvYXBhcnRtZW50LWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7XG4gIEJhc2VTdWdnZXN0UGxhY2VzRmV0Y2hlcixcbiAgU3VnZ2VzdFBsYWNlc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL3N1Z2dlc3QtcGxhY2VzLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldExhdExvbkZyb21IZXJlSWRGZXRjaGVyLFxuICBHZXRMYXRMb25Gcm9tSGVyZUlkRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWxhdC1sb24tZnJvbS1oZXJlLWlkLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldEdtdEl0aW5lcmFyeU9wdGlvbnNGZXRjaGVyLFxuICBHZXRHbXRJdGluZXJhcnlPcHRpb25zRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LUdNVC1pdGluZXJhcnktb3B0aW9ucy5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VHZXRHdXRDaXR5U3VnZ2VzdGlvbnNGZXRjaGVyLFxuICBHZXRHdXRDaXR5U3VnZ2VzdGlvbnNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtR1VULWNpdHktc3VnZ2VzdGlvbnMuZmV0Y2hlcic7XG5pbXBvcnQge1xuICBCYXNlR2V0R3V0TG9jYXRpb25TdWdnZXN0aW9uc0ZldGNoZXIsXG4gIEdldEd1dExvY2F0aW9uU3VnZ2VzdGlvbnNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtR1VULWxvY2F0aW9uLXN1Z2dlc3Rpb25zLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldFJvdXRlSGFwcHlGZXRjaGVyLFxuICBHZXRSb3V0ZUhhcHB5RmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXJvdXRlLWhhcHB5LmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldEVudExvY2F0aW9uQnlQb3N0Y29kZSxcbiAgR2V0RW50TG9jYXRpb25CeVBvc3Rjb2RlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1lbnQtbG9jYXRpb24tYnktcG9zdGNvZGUuZmV0Y2hlcic7XG5pbXBvcnQge1xuICBCYXNlR2V0RW50TG9jYXRpb25CeUNpdHksXG4gIEdldEVudExvY2F0aW9uQnlDaXR5XG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1lbnQtbG9jYXRpb24tYnktY2l0eS5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VHZXRNdWx0aXBsZUhvdGVsUmF0aW5nRmV0Y2hlcixcbiAgR2V0TXVsdGlwbGVIb3RlbFJhdGluZ0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1tdWx0aXBsZS1ob3RlbC1yYXRpbmcuZmV0Y2hlcic7XG5pbXBvcnQge1xuICBCYXNlR2V0RmVycnlQb3J0c0ZldGNoZXIsXG4gIEdldEZlcnJ5UG9ydHNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtZmVycnktcG9ydHMuZmV0Y2hlcic7XG5pbXBvcnQgeyBCYXNlR2V0QmFubmVyRmV0Y2hlciwgR2V0QmFubmVyRmV0Y2hlclR5cGUgfSBmcm9tICcuLi9mZXRjaGVycy9nZXQtYmFubmVyLmZldGNoZXInO1xuaW1wb3J0IHsgU2Vhc29uVGlja2V0c1RlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzZWFzb24tdGlja2V0cy1lbnRlcnByaXNlLXNlYXJjaCc7XG5pbXBvcnQgeyBTZWFzb25UaWNrZXRzRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4uL2NsYXNzZXMvc2Vhc29uLXRpY2tldC1lbnRlcnByaXNlLXNlYXJjaCc7XG5pbXBvcnQge1xuICBCYXNlRW1haWxTZWFzb25UaWNrZXRCb29raW5nRmV0Y2hlcixcbiAgRW1haWxTZWFzb25UaWNrZXRCb29raW5nRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZW1haWwtc2Vhc29uLXRpY2tldHMtYm9raW5nLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldE9mZmljZURpdmlzaW9uc0ZldGNoZXIsXG4gIEdldE9mZmljZURpdmlzaW9uc1F1b3RlRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LW9mZmljZS1kaXZpc2lvbnMuZmV0Y2hlcic7XG5pbXBvcnQgeyBNZWV0aW5nUm9vbVRlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0ltZWV0aW5nLXJvb20tZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgTWVldGluZ1Jvb21FbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9tZWV0aW5nLXJvb20tZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgQmFza2V0RGV0YWlscyB9IGZyb20gJy4vZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlVXBkYXRlRmxpZ2h0U2VhdE1hcFVwZGF0ZXIsIFVwZGF0ZUZsaWdodFNlYXRNYXBUeXBlIH0gZnJvbSAnLi4vdXBkYXRlcnMvdXBkYXRlLWZsaWdodC1zZWF0LW1hcC51cGRhdGVyJztcbmltcG9ydCB7IEJhc2VEZWxldGVBbGxSZWNlbnRTZWFyY2hlc1VwZGF0ZXIsIERlbGV0ZUFsbFJlY2VudFNlYXJjaGVzVXBkYXRlclR5cGUgfSBmcm9tICcuLi91cGRhdGVycy9kZWxldGUtYWxsLXJlY2VudC1zZWFyY2hlcy11cGRhdGVyJztcblxuZXhwb3J0IGxldCBNQVhfVFJBVkVMTEVSUyA9IDg7XG5cbmV4cG9ydCBlbnVtIFRyYXZlbGxlclNlYXJjaFR5cGVzIHtcbiAgZW1haWwgPSAnZW1haWwnLFxuICBuYW1lID0gJ25hbWUnLFxuICBlbXBsb3llZU51bWJlciA9ICdlbXBsb3llZU51bWJlcidcbn1cblxuaW50ZXJmYWNlIEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdEludGVyZmFjZSB7XG4gIGhpZ2hlc3Q6IG51bWJlcjtcbiAgY3VycmVudEl0ZW06IFNlYXJjaE9iamVjdDtcbn1cbmV4cG9ydCBjbGFzcyBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2U8XG4gIFNQX1EgZXh0ZW5kcyBTZWFyY2hQb3N0Y29kZXNRdW90ZUZldGNoZXJUeXBlLFxuICBTUl9RIGV4dGVuZHMgU2VhcmNoUmFpbFN0YXRpb25zRmV0Y2hlclR5cGUsXG4gIFNMX1EgZXh0ZW5kcyBMb3VuZ2VRdW90ZUZldGNoZXJUeXBlLFxuICBTUEFfUSBleHRlbmRzIFBhcmtpbmdRdW90ZUZldGNoZXJUeXBlLFxuICBTRkxfUSBleHRlbmRzIEZsaWdodFF1b3RlRmV0Y2hlclR5cGUsXG4gIFNIT19RIGV4dGVuZHMgSG90ZWxRdW90ZUZldGNoZXJUeXBlLFxuICBTQ0hfUSBleHRlbmRzIENhckhpcmVGZXRjaGVyVHlwZSxcbiAgQ0hBRF9RIGV4dGVuZHMgQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXJUeXBlLFxuICBTVEhfUSBleHRlbmRzIENhYmhpcmVRdW90ZUZldGNoZXJUeXBlLFxuICBTQV9RIGV4dGVuZHMgU2VhcmNoQWlycG9ydHNRdW90ZUZldGNoZXJUeXBlLFxuICBTQUxfUSBleHRlbmRzIFNlYXJjaEFpcmxpbmVzUXVvdGVGZXRjaGVyVHlwZSxcbiAgSEFfUSBleHRlbmRzIEhvdGVsQXZhbGluaWxpdHlGZXRjaGVyVHlwZSxcbiAgU0NfUSBleHRlbmRzIFNlYXJjaENpdGllc1F1b3RlRmV0Y2hlclR5cGUsXG4gIFNSQV9RIGV4dGVuZHMgUmFpbFF1b3RlRmV0Y2hlclR5cGUsXG4gIFNJX1EgZXh0ZW5kcyBJcmxRdW90ZUZldGNoZXJUeXBlLFxuICBTVUFfUSBleHRlbmRzIFNhdmVVc2VyQWRkcmVzc1VwZGF0ZXJUeXBlLFxuICBFVUFfUSBleHRlbmRzIEVkaXRVc2VyQWRkcmVzc1VwZGF0ZXJUeXBlLFxuICBTVV9RIGV4dGVuZHMgVXNlckFkZHJlc3NGZXRjaGVyVHlwZSxcbiAgR1VDT19RIGV4dGVuZHMgR2V0VXNlckNvbXBhbnlPZmZpY2VzUXVvdGVGZXRjaGVyVHlwZSxcbiAgU0hDX1EgZXh0ZW5kcyBTZWFyY2hIb3RlbENoYWluc1F1b3RlRmV0Y2hlclR5cGUsXG4gIEdDUklfUSBleHRlbmRzIEdldENvbmZlcm1hUm9vbUltYWdlc1F1b3RlRmV0Y2hlclR5cGUsXG4gIElQVl9RIGV4dGVuZHMgVmFsaWRhdGVJc1Bvc3Rjb2RlVmFsaWRUeXBlLFxuICBTRF9RIGV4dGVuZHMgU2VhcmNoRGVwb3RRdW90ZUZldGNoZXJUeXBlLFxuICBHUlNJX1EgZXh0ZW5kcyBHZXRSYWlsU3RhdGlvbkluZm9GZXRjaGVyVHlwZSxcbiAgR1JTX1EgZXh0ZW5kcyBHZXRSYWlsU3RhdGlvbkZldGNoZXJUeXBlLFxuICBHSVNTRl9RIGV4dGVuZHMgR2V0SXJsU3VwcGxpZXJTdGF0aW9uRmV0Y2hlclR5cGUsXG4gIERVQV9RIGV4dGVuZHMgRGVsZXRlVXNlckFkZHJlc3NGZXRjaGVyVHlwZSxcbiAgRFJTX1EgZXh0ZW5kcyBEZWxldGVSZWNlbnRTZWFyY2hGZXRjaGVyVHlwZSxcbiAgU1JTX1EgZXh0ZW5kcyBTYXZlUmVjZW50U2VhcmNoRmV0Y2hlclR5cGUsXG4gIFVDQV9RIGV4dGVuZHMgR2V0VXNlckNhcmJvbkFsbG93YW5jZVR5cGUsXG4gIFNGU19RIGV4dGVuZHMgU2F2ZUZhdm91cml0ZVNlYXJjaEZldGNoZXJUeXBlLFxuICBHUkFfUSBleHRlbmRzIEdldFJpc2tBbGVydHNGZXRjaGVyVHlwZSxcbiAgUUxfUSBleHRlbmRzIENvbmZlcm1hUXVpY2tsaXN0RmV0Y2hlclR5cGUsXG4gIEdVUlNGX1EgZXh0ZW5kcyBHZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyVHlwZSxcbiAgR1JDRl9RIGV4dGVuZHMgR2V0UmFpbENhcmRzRmV0Y2hlclR5cGUsXG4gIEdDTVRGX1EgZXh0ZW5kcyBHZXRDb3ZpZE1pY3Jvc2l0ZVRva2VuRmV0Y2hlclR5cGUsXG4gIFNFX1EgZXh0ZW5kcyBFdXJvc3RhclF1b3RlRmV0Y2hlclR5cGUsXG4gIFNVQ0JGIGV4dGVuZHMgU2VhcmNoVXNlckNhbkJvb2tGb3JGZXRjaGVyVHlwZSxcbiAgU0lTX1EgZXh0ZW5kcyBTZWFyY2hJcmxTdGF0aW9uc0ZldGNoZXJUeXBlLFxuICBHSURGX1EgZXh0ZW5kcyBJcmxEaXNjb3VudENhcmRGZXRjaGVyVHlwZSxcbiAgR0ZGUl9RIGV4dGVuZHMgR2V0RmxpZ2h0RmFyZVJ1bGVzVHlwZSxcbiAgR0ZTTV9RIGV4dGVuZHMgR2V0RmxpZ2h0U2VhdE1hcFR5cGUsXG4gIEdSTERfRiBleHRlbmRzIEdldFJhaWxMaXZlRGVwYXJ0dXJlc0ZldGNoZXJUeXBlLFxuICBBSFJfUSBleHRlbmRzIEFwcGx5SG90ZWxSdWxlc0ZldGNoZXJUeXBlLFxuICBBRlJfUSBleHRlbmRzIEFwcGx5Sml0RmxpZ2h0UnVsZXNUeXBlLFxuICBHVUZTRl9RIGV4dGVuZHMgR2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlclR5cGUsXG4gIERGU19RIGV4dGVuZHMgRGVsZXRlRmF2b3VyaXRlU2VhcmNoRmV0Y2hlclR5cGUsXG4gIEVCX0YgZXh0ZW5kcyBFbWFpbEJhc2tldEZldGNoZXJUeXBlLFxuICBGVFFfUSBleHRlbmRzIEZhc3RUcmFja1F1b3RlRmV0Y2hlclR5cGUsXG4gIFNPTl9RIGV4dGVuZHMgU2VuZE9mZmxpbmVOb3RpZmljYXRpb25GZXRjaGVyVHlwZSxcbiAgR0hUX1EgZXh0ZW5kcyBHZXRIb3RlbENoYWluc0ZldGNoZXJUeXBlLFxuICBHUlBfUSBleHRlbmRzIEdldFJhaWxQcm92aWRlcnNGZXRjaGVyVHlwZSxcbiAgR0FBX1EgZXh0ZW5kcyBHZXRBbGxBaXJsaW5lc0ZldGNoZXJUeXBlLFxuICBHQ0hQX1EgZXh0ZW5kcyBHZXRDYXJIaXJlUHJvdmlkZXJzRmV0Y2hlclR5cGUsXG4gIEdCUF9GIGV4dGVuZHMgR2VuZXJhdGVCYXNrZXRQZGZGZXRjaGVyVHlwZSxcbiAgRUZCX0YgZXh0ZW5kcyBFbWFpbEZlcnJ5Qm9va2luZ0ZldGNoZXJUeXBlLFxuICBHRkVPX0YgZXh0ZW5kcyBHZXRGbGlnaHRFeHRyYXNPcHRpb25zVHlwZSxcbiAgR1JIVV9GIGV4dGVuZHMgR2V0UmVxdWVzdGVkSG90ZWxVcGRhdGVGZXRjaGVyVHlwZSxcbiAgQ0NfRiBleHRlbmRzIENvbnZlcnRDdXJyZW5jeUZldGNoZXJUeXBlLFxuICBHQ1JfRiBleHRlbmRzIEdldEN1cnJlbmN5Q29udmVyc2lvblJhdGVzRmV0Y2hlclR5cGUsXG4gIEdIRF9GIGV4dGVuZHMgR2V0SG90ZWxEZXRhaWxzRmV0Y2hlclR5cGUsXG4gIEdTX1EgZXh0ZW5kcyBHZXRTZXJ2aWNlRmV0Y2hlclR5cGUsXG4gIEdGQkZfRiBleHRlbmRzIEdldEZsaWdodEJyYW5kZWRGYXJlc0ZldGNoZXJUeXBlLFxuICBHVFNDX0YgZXh0ZW5kcyBHZXRUcmFpbmxpbmVTZWFyY2hDb25maWdGZXRjaGVyVHlwZSxcbiAgU1JJX0YgZXh0ZW5kcyBTZWFyY2hSYWlsSW53YXJkRmV0Y2hlclR5cGUsXG4gIFJTRV9GIGV4dGVuZHMgUmFpbFNlYXJjaEV4Y2hhbmdlRmV0Y2hlclR5cGUsXG4gIENJRV9RIGV4dGVuZHMgQ3JlYXRlSXRpbmVyYXJ5RXhjaGFuZ2VVcGRhdGVyVHlwZSxcbiAgR0FBVl9RIGV4dGVuZHMgR2V0QWlyQXZhaWxiaWxpdHlGZXRjaGVyVHlwZSxcbiAgR0ZBTkNfUSBleHRlbmRzIEdldEZsaWdodEF0TmV3Q2xhc3NGZXRjaGVyVHlwZSxcbiAgR0ZVT19RIGV4dGVuZHMgR2V0RmxpZ2h0VXBzZWxsT2ZmZXJzRmV0Y2hlclR5cGUsXG4gIEdPX0YgZXh0ZW5kcyBHZXRPZmZpY2VzUXVvdGVGZXRjaGVyVHlwZSxcbiAgRlNFX0YgZXh0ZW5kcyBGbGlnaHRTZWFyY2hFeGNoYW5nZUZldGNoZXJUeXBlLFxuICBGRURfRiBleHRlbmRzIEZsaWdodEV4Y2hhbmdlRGV0YWlsc0ZldGNoZXJUeXBlLFxuICBFQUJfRiBleHRlbmRzIEVtYWlsQXBhcnRtZW50Qm9va2luZ0ZldGNoZXJUeXBlLFxuICBFU1RCX0YgZXh0ZW5kcyBFbWFpbFNlYXNvblRpY2tldEJvb2tpbmdGZXRjaGVyVHlwZSxcbiAgU1BfRiBleHRlbmRzIFN1Z2dlc3RQbGFjZXNGZXRjaGVyVHlwZSxcbiAgR0xMRkhJX0YgZXh0ZW5kcyBHZXRMYXRMb25Gcm9tSGVyZUlkRmV0Y2hlclR5cGUsXG4gIEdNVElPX0YgZXh0ZW5kcyBHZXRHbXRJdGluZXJhcnlPcHRpb25zRmV0Y2hlclR5cGUsXG4gIEdVVENTX0YgZXh0ZW5kcyBHZXRHdXRDaXR5U3VnZ2VzdGlvbnNGZXRjaGVyVHlwZSxcbiAgR1VUTFNfRiBleHRlbmRzIEdldEd1dExvY2F0aW9uU3VnZ2VzdGlvbnNGZXRjaGVyVHlwZSxcbiAgR1JIX0YgZXh0ZW5kcyBHZXRSb3V0ZUhhcHB5RmV0Y2hlclR5cGUsXG4gIEdNSFJfRiBleHRlbmRzIEdldE11bHRpcGxlSG90ZWxSYXRpbmdGZXRjaGVyVHlwZSxcbiAgRU1SQl9GIGV4dGVuZHMgRW1haWxNZWV0aW5nUm9vbUJvb2tpbmdGZXRjaGVyVHlwZSxcbiAgR0VMUF9GIGV4dGVuZHMgR2V0RW50TG9jYXRpb25CeVBvc3Rjb2RlLFxuICBHRUxDX0YgZXh0ZW5kcyBHZXRFbnRMb2NhdGlvbkJ5Q2l0eSxcbiAgR1JCU19GIGV4dGVuZHMgR2V0VXNlclJlY2VudEJvbHRTZWFyY2hlc0ZldGNoZXJUeXBlLFxuICBTUkJTX1EgZXh0ZW5kcyBTYXZlUmVjZW50Qm9sdFNlYXJjaFVwZGF0ZXJUeXBlLFxuICBHRlBfRiBleHRlbmRzIEdldEZlcnJ5UG9ydHNGZXRjaGVyVHlwZSxcbiAgR0JfRiBleHRlbmRzIEdldEJhbm5lckZldGNoZXJUeXBlLFxuICBVR0RfVSBleHRlbmRzIHVwZGF0ZURPQlVwZGF0ZXJUeXBlLFxuICBVRlNfVSBleHRlbmRzIFVwZGF0ZUZsaWdodFNlYXRNYXBUeXBlLFxuICBEQVJTX0YgZXh0ZW5kcyBEZWxldGVBbGxSZWNlbnRTZWFyY2hlc1VwZGF0ZXJUeXBlLFxuICBHQ0RfRiBleHRlbmRzIEdldE9mZmljZURpdmlzaW9uc1F1b3RlRmV0Y2hlclR5cGVcbj4gaW1wbGVtZW50cyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZVxue1xuICBzdGF0aWMgU0VTU0lPTl9UUkFWRUxMRVI6IHN0cmluZyA9ICdzZWFyY2hfdHJhdmVsbGVycyc7XG5cbiAgc2VhcmNoZXM6IFNlYXJjaFBhcmFtcztcbiAgdHJhdmVsbGVyX2Vycm9yID0gZmFsc2U7XG4gIHRyYXZlbGxlckluZm9ybWF0aW9uOiBCZWhhdmlvclN1YmplY3Q8VHJhdmVsbGVyW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUcmF2ZWxsZXJbXT4oW10pO1xuICBlcnJvcnM6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSk7XG4gIHNlYXJjaExvYWRpbmdEb25lOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgYm9sdFNlYXJjaFJlc3VsdHNTZXJ2aWNlVHlwZXM6IEJlaGF2aW9yU3ViamVjdDxTZXJ2aWNlVHlwZVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VydmljZVR5cGVbXT4oW10pO1xuICBib2x0U2VhcmNoU2VydmljZVR5cGVzOiBCZWhhdmlvclN1YmplY3Q8U2VydmljZVR5cGU+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZXJ2aWNlVHlwZT4obnVsbCk7XG4gIHNlYXJjaFRpbWVkT3V0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgbmV3U2VhcmNoU3RhcnRlZDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGdldHRpbmdGbGlnaHRDbGFzc2VzOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVwcmljaW5nRmxpZ2h0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcGVyZm9ybUJvbHRTZWFyY2hGcm9tUmVjZW50Qm9sdFNlYXJjaDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG5cbiAgaXNHdXRNZWV0aW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgbG9hZGluZ0RhdGU6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBndXRUcmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSA9IFtdO1xuICBndXRGb3JtUHJldmlvdXNWYWx1ZTogR3V0Rm9ybVByZXZpb3VzVmFsdWVbXSA9IFtdO1xuICBpc0Nsb25pbmc6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGZpcnN0TG9hZCA9IHRydWU7XG4gIF9zZWFyY2hPYmplY3RzRGVmYXVsdDogU2VhcmNoT2JqZWN0cztcbiAgc2VhcmNoX29iamVjdHM6IFNlYXJjaE9iamVjdHM7XG4gIGhpZ2hlc3Rfc2VhcmNoX3ByaW9yaXR5ID0gODtcbiAgc2hvd19lcnJvcnMgPSBmYWxzZTtcbiAgdHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuICBzZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xuICBzZWFyY2hfYWlycG9ydF9sb2FkaW5nID0gZmFsc2U7XG4gIGFsbFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgc2VhcmNoZXNTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIGpyZlJlZmVyZW5jZTogc3RyaW5nO1xuICBwcml2YXRlIHNlbGVjdGVkVHJhdmVsbGVyczogVHJhdmVsbGVyW10gPSBbXTtcbiAgc2VsZWN0ZWRQbGFjZXM6IGFueSA9IFtdO1xuICBjb3VudHJpZXMgPSBDb3VudHJpZXM7XG4gIGNvdW50cmllc1dpdGhvdXRQb3N0YWxDb2RlcyA9IENvdW50cmllc1dpdGhvdXRQb3N0YWxDb2RlcztcbiAgZXVyb3N0YXRpb25zOiB7IGdhdGV3YXk6IHN0cmluZzsgZGVzdGluYXRpb246IHN0cmluZywgY291bnRyeUNvZGU6IHN0cmluZyB9W10gPSBfLnRvQXJyYXkoRXVyb1N0YXRpb25zKTtcbiAgc3NvQ2FsbCA9IHRydWU7XG4gIHNpbXVsdGFuZW91c0hvdGVsU2VhcmNoUmVxdWVzdGVkID0gZmFsc2U7XG4gIGlzRmF2b3JpdGVzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgaXNGYXZvdXJpdGVTZWFyY2ggPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZXJtVHJhdmVsbGVyVHlwZTogRXJtVHJhdmVsbGVyVHlwZSA9IEVybVRyYXZlbGxlclR5cGUuTm9uZTtcblxuICBnZXQgZXJtVHJhdmVsbGVyVHlwZSgpOiBFcm1UcmF2ZWxsZXJUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fZXJtVHJhdmVsbGVyVHlwZTtcbiAgfVxuXG4gIHNldCBlcm1UcmF2ZWxsZXJUeXBlKHR5cGU6IEVybVRyYXZlbGxlclR5cGUpIHtcbiAgICB0aGlzLl9lcm1UcmF2ZWxsZXJUeXBlID0gdHlwZTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmVybVRyYXZlbGxlclR5cGUgPT09IEVybVRyYXZlbGxlclR5cGUuSm9pbmVyIHx8XG4gICAgICB0aGlzLmVybVRyYXZlbGxlclR5cGUgPT09IEVybVRyYXZlbGxlclR5cGUuTGVhdmVyXG4gICAgKSB7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKCdzZWFyY2hfRVJNX3RyYXZlbGxlcl90eXBlJywgdGhpcy5lcm1UcmF2ZWxsZXJUeXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5yZW1vdmVTZXNzaW9uSXRlbSgnc2VhcmNoX0VSTV90cmF2ZWxsZXJfdHlwZScpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3Bob25lVHlwZXMgPSBbUGhvbmVUeXBlLkxhbmRsaW5lLCBQaG9uZVR5cGUuTW9iaWxlLCBQaG9uZVR5cGUuRmF4LCBQaG9uZVR5cGUuT3RoZXJdO1xuXG4gIGdldCBwaG9uZVR5cGVzKCk6IFBob25lVHlwZVtdIHtcbiAgICByZXR1cm4gdGhpcy5fcGhvbmVUeXBlcztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBzZWFyY2hBaXJwb3J0c0ZldGNoZXI6IEJhc2VTZWFyY2hBaXJwb3J0c0ZldGNoZXI8U0FfUT4sXG4gICAgcHJvdGVjdGVkIHNlYXJjaEFpcmxpbmVzRmV0Y2hlcjogQmFzZVNlYXJjaEFpcmxpbmVzRmV0Y2hlcjxTQUxfUT4sXG4gICAgcHJvdGVjdGVkIHN0b3JhZ2VTZXJ2aWNlOiBCYXNlU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZUludGVyZmFjZSxcbiAgICBwcm90ZWN0ZWQgbW9kYWxTZXJ2aWNlOiBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcbiAgICBwcm90ZWN0ZWQgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxuICAgIHByb3RlY3RlZCBob3RlbEF2YWxpYmlsaXR5U2VydmljZTogQmFzZUhvdGVsQXZhbGliaWxpdHlTZXJ2aWNlPEhBX1E+LFxuICAgIHByaXZhdGUgY2l0aWVzRmV0Y2hlcjogQmFzZVNlYXJjaENpdHlGZXRjaGVyPFNDX1E+LFxuICAgIHByaXZhdGUgcG9zdGNvZGVGZXRjaGVyOiBCYXNlU2VhcmNoUG9zdGNvZGVGZXRjaGVyPFNQX1E+LFxuICAgIHByaXZhdGUgcmFpbFN0YXRpb25GZXRjaGVyOiBCYXNlU2VhcmNoUmFpbFN0YXRpb25zRmV0Y2hlcjxTUl9RPixcbiAgICBwcml2YXRlIHNhdmVVc2VyQWRkcmVzc1VwZGF0ZXI6IEJhc2VTYXZlVXNlckFkZHJlc3NVcGRhdGVyPFNVQV9RPixcbiAgICBwcml2YXRlIGVkaXRVc2VyQWRkcmVzc1VwZGF0ZXI6IEJhc2VFZGl0VXNlckFkZHJlc3NVcGRhdGVyPEVVQV9RPixcbiAgICBwcml2YXRlIHVzZXJBZGRyZXNzZXNGZXRjaGVyOiBCYXNlVXNlckFkZHJlc3Nlc0ZldGNoZXI8U1VfUT4sXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcbiAgICBwcml2YXRlIGdldFVzZXJDb21wYW55T2ZmaWNlc0ZldGNoZXI6IEJhc2VHZXRVc2VyQ29tcGFueU9mZmljZXNGZXRjaGVyPEdVQ09fUT4sXG4gICAgcHJpdmF0ZSBzZWFyY2hIb3RlbENoYWluc0ZldGNoZXI6IEJhc2VTZWFyY2hIb3RlbENoYWluc0ZldGNoZXI8U0hDX1E+LFxuICAgIHByaXZhdGUgZ2V0Q29uZmVybWFSb29tSW1hZ2VzRmV0Y2hlcjogQmFzZUdldENvbmZlcm1hUm9vbUltYWdlc0ZldGNoZXI8R0NSSV9RPixcbiAgICBwcml2YXRlIGJhc2VWYWxpZGF0ZUlzUG9zdGNvZGVWYWxpZFRlc3RlcjogQmFzZVZhbGlkYXRlSXNQb3N0Y29kZVZhbGlkVGVzdGVyPElQVl9RPixcbiAgICBwcml2YXRlIGRlcG90RmV0Y2hlcjogQmFzZVNlYXJjaERlcG90RmV0Y2hlcjxTRF9RPixcbiAgICBwcml2YXRlIGJhc2VEZWxldGVVc2VyQWRkcmVzc1VwZGF0ZXI6IEJhc2VEZWxldGVVc2VyQWRkcmVzc1VwZGF0ZXI8RFVBX1E+LFxuICAgIHByaXZhdGUgYmFzZURlbGV0ZVJlY2VudFNlYXJjaFVwZGF0ZXI6IEJhc2VEZWxldGVSZWNlbnRTZWFyY2hVcGRhdGVyPERSU19RPixcbiAgICBwcml2YXRlIGJhc2VTYXZlUmVjZW50U2VhcmNoVXBkYXRlcjogQmFzZVNhdmVSZWNlbnRTZWFyY2hVcGRhdGVyPFNSU19RPixcbiAgICBwcml2YXRlIGdldFVzZXJDYXJib25BbGxvd2FuY2VGZXRjaGVyOiBCYXNlR2V0VXNlckNhcmJvbkFsbG93YW5jZUZldGNoZXI8VUNBX1E+LFxuICAgIHByaXZhdGUgYmFzZVNhdmVGYXZvdXJpdGVTZWFyY2hVcGRhdGVyOiBCYXNlU2F2ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXI8U0ZTX1E+LFxuICAgIGVudmlyb25tZW50OiBCYXNlRW52aXJvbm1lbnQsXG4gICAgbG91bmdlRmV0Y2hlcjogQmFzZUxvdW5nZVF1b3RlRmV0Y2hlcjxTTF9RPixcbiAgICBwYXJraW5nRmV0Y2hlcjogQmFzZVBhcmtpbmdRdW90ZUZldGNoZXI8U1BBX1E+LFxuICAgIGh0dHBDYWxsU2VydmljZTogQWJzdHJhY3RIdHRwQ2FsbFNlcnZpY2UsXG4gICAgZmxpZ2h0RmV0Y2hlcjogQmFzZUZsaWdodFF1b3RlRmV0Y2hlcjxTRkxfUT4sXG4gICAgaG90ZWxGZXRjaGVyOiBCYXNlSG90ZWxRdW90ZUZldGNoZXI8U0hPX1E+LFxuICAgIGNhcmhpcmVGZXRjaGVyOiBCYXNlQ2FyaGlyZVF1b3RlRmV0Y2hlcjxTQ0hfUT4sXG4gICAgY2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXI6IEJhc2VDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcjxDSEFEX1E+LFxuICAgIGNhYmhpcmVGZXRjaGVyOiBCYXNlQ2FiaGlyZVF1b3RlRmV0Y2hlcjxTVEhfUT4sXG4gICAgcmFpbEZldGNoZXI6IEJhc2VSYWlsUXVvdGVGZXRjaGVyPFNSQV9RPixcbiAgICBpcmxGZXRjaGVyOiBCYXNlSXJsUXVvdGVGZXRjaGVyPFNJX1E+LFxuICAgIHByaXZhdGUgZ2V0UmFpbFN0YXRpb25JbmZvRmV0Y2hlcjogQmFzZUdldFJhaWxTdGF0aW9uSW5mb0ZldGNoZXI8R1JTSV9RPixcbiAgICBwcm90ZWN0ZWQgZ2V0UmFpbFN0YXRpb25GZXRjaGVyOiBCYXNlR2V0UmFpbFN0YXRpb25GZXRjaGVyPEdSU19RPixcbiAgICBwcm90ZWN0ZWQgZ2V0SXJsU3VwcGxpZXJTdGF0aW9uRmV0Y2hlcjogQmFzZUdldElybFN1cHBsaWVyU3RhdGlvbkZldGNoZXI8R0lTU0ZfUT4sXG4gICAgcHJpdmF0ZSB3ZWJUb2tlblNlcnZpY2U6IEJhc2VXZWJUb2tlblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByaXNrQWxlcnRzRmV0Y2hlcjogQmFzZUdldFJpc2tBbGVydHNGZXRjaGVyPEdSQV9RPixcbiAgICBxdWlja2xpc3RGZXRjaGVyOiBCYXNlU2VhcmNoQ29uZmVybWFRdWlja2xpc3RGZXRjaGVyPFFMX1E+LFxuICAgIHByaXZhdGUgZ2V0VXNlclJlY2VudFNlYXJjaGVzRmV0Y2hlcjogQmFzZUdldFVzZXJSZWNlbnRTZWFyY2hlc0ZldGNoZXI8R1VSU0ZfUT4sXG4gICAgcHJvdGVjdGVkIGdldFJhaWxDYXJkc0ZldGNoZXI6IEJhc2VHZXRSYWlsY2FyZHNGZXRjaGVyPEdSQ0ZfUT4sXG4gICAgcHJvdGVjdGVkIGdldENvdmlkTWljcm9zaXRlVG9rZW5GZXRjaGVyOiBCYXNlR2V0Q292aWRNaWNyb3NpdGVUb2tlbkZldGNoZXI8R0NNVEZfUT4sXG4gICAgZXVyb3N0YXJGZXRjaGVyOiBCYXNlRXVyb3N0YXJRdW90ZUZldGNoZXI8U0VfUT4sXG4gICAgcHVibGljIHNlYXJjaFVzZXJzQ2FuQm9va0ZvckZldGNoZXI6IEJhc2VTZWFyY2hVc2Vyc0NhbkJvb2tGb3JGZXRjaGVyPFNVQ0JGPixcbiAgICBwcm90ZWN0ZWQgc2VhcmNoSXJsU3RhdGlvbnNGZXRjaGVyOiBCYXNlU2VhcmNoSXJsU3RhdGlvbnNGZXRjaGVyPFNJU19RPixcbiAgICBwcm90ZWN0ZWQgaXJsRGlzY291bnRDYXJkc0ZldGNoZXI6IEJhc2VJcmxEaXNjb3VudENhcmRGZXRjaGVyPEdJREZfUT4sXG4gICAgcHJpdmF0ZSBnZXRGbGlnaHRGYXJlUnVsZXNGZXRjaGVyOiBCYXNlR2V0RmxpZ2h0RmFyZVJ1bGVzRmV0Y2hlcjxHRkZSX1E+LFxuICAgIHByaXZhdGUgZ2V0RmxpZ2h0U2VhdE1hcEZldGNoZXI6IEJhc2VHZXRGbGlnaHRTZWF0TWFwRmV0Y2hlcjxHRlNNX1E+LFxuICAgIHByaXZhdGUgZ2V0UmFpbExpdmVEZXBhcnR1cmVzRmV0Y2hlcjogQmFzZUdldFJhaWxMaXZlRGVwYXJ0dXJlc0ZldGNoZXI8R1JMRF9GPixcbiAgICBhcHBseUhvdGVsUnVsZXNGZXRjaGVyOiBCYXNlSG90ZWxSdWxlc0ZldGNoZXI8QUhSX1E+LFxuICAgIGFwcGx5RmxpZ2h0UnVsZXM6IEJhc2VBcHBseUppdEZsaWdodFJ1bGVzRmV0Y2hlcjxBRlJfUT4sXG4gICAgcHJpdmF0ZSBnZXRVc2VyRmF2b3VyaXRlU2VhcmNoZXNGZXRjaGVyOiBCYXNlR2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlcjxHVUZTRl9RPixcbiAgICBwcml2YXRlIGRlbGV0ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXI6IEJhc2VEZWxldGVGYXZvdXJpdGVTZWFyY2hVcGRhdGVyPERGU19RPixcbiAgICBwcml2YXRlIGVtYWlsQmFza2V0RmV0Y2hlcjogQmFzZUVtYWlsQmFza2V0RmV0Y2hlcjxFQl9GPixcbiAgICBmYXN0dHJhY2tGZXRjaGVyOiBCYXNlRmFzdFRyYWNrUXVvdGVGZXRjaGVyPEZUUV9RPixcbiAgICBwcml2YXRlIHNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlcjogQmFzZVNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlcjxTT05fUT4sXG4gICAgcHJpdmF0ZSBnZXRIb3RlbENoYWluc0ZldGNoZXI6IEJhc2VHZXRIb3RlbENoYWluc0ZldGNoZXI8R0hUX1E+LFxuICAgIHByaXZhdGUgZ2V0UmFpbFByb3ZpZGVyc0ZldGNoZXI6IEJhc2VHZXRSYWlsUHJvdmlkZXJzRmV0Y2hlcjxHUlBfUT4sXG4gICAgcHJpdmF0ZSBnZXRBbGxBaXJsaW5lc0ZldGNoZXI6IEJhc2VHZXRBbGxBaXJsaW5lc0ZldGNoZXI8R0FBX1E+LFxuICAgIHByaXZhdGUgZ2V0Q2FySGlyZVByb3ZpZGVyc0ZldGNoZXI6IEJhc2VHZXRDYXJIaXJlUHJvdmlkZXJzRmV0Y2hlcjxHQ0hQX1E+LFxuICAgIHByaXZhdGUgYmFzZUdlbmVyYXRlQmFza2V0UGRmRmV0Y2hlcjogQmFzZUdlbmVyYXRlQmFza2V0UGRmRmV0Y2hlcjxHQlBfRj4sXG4gICAgcHJpdmF0ZSBlbWFpbEZlcnJ5RmV0Y2hlcjogQmFzZUVtYWlsRmVycnlCb29raW5nRmV0Y2hlcjxFRkJfRj4sXG4gICAgcHVibGljIGdldEZsaWdodEV4dHJhc09wdGlvbnM6IEJhc2VHZXRGbGlnaHRFeHRyYXNPcHRpb25zRmV0Y2hlcjxHRkVPX0Y+LFxuICAgIHByaXZhdGUgZ2V0UmVxdWVzdGVkSG90ZWxVcGRhdGVGZXRjaGVyOiBCYXNlR2V0UmVxdWVzdGVkSG90ZWxVcGRhdGVGZXRjaGVyPEdSSFVfRj4sXG4gICAgcHJpdmF0ZSBjb252ZXJ0Q3VycmVuY3lGZXRjaGVyOiBCYXNlQ29udmVydEN1cnJlbmN5RmV0Y2hlcjxDQ19GPixcbiAgICBwcml2YXRlIGdldEN1cnJlbmN5Q29udmVyc2lvblJhdGVzRmV0Y2hlcjogQmFzZUdldEN1cnJlbmN5Q29udmVyc2lvblJhdGVzRmV0Y2hlcjxHQ1JfRj4sXG4gICAgcHJpdmF0ZSBnZXRIb3RlbERldGFpbHNGZXRjaGVyOiBCYXNlR2V0SG90ZWxEZXRhaWxzRmV0Y2hlcjxHSERfRj4sXG4gICAgcHJpdmF0ZSBnZXRTZXJ2aWNlRmV0Y2hlcjogQmFzZUdldFNlcnZpY2VGZXRjaGVyPEdTX1E+LFxuICAgIHB1YmxpYyBnZXRGbGlnaHRCcmFuZGVkRmFyZXNGZXRjaGVyOiBCYXNlR2V0RmxpZ2h0QnJhbmRlZEZhcmVzRmV0Y2hlcjxHRkJGX0Y+LFxuICAgIHByaXZhdGUgZ2V0VHJhaW5saW5lU2VhcmNoQ29uZmlnRmV0Y2hlcjogQmFzZUdldFRyYWlubGluZVNlYXJjaENvbmZpZ0ZldGNoZXI8R1RTQ19GPixcbiAgICBwcml2YXRlIHNlYXJjaFJhaWxJbndhcmRGZXRjaGVyOiBCYXNlU2VhcmNoUmFpbElud2FyZEZldGNoZXI8U1JJX0Y+LFxuICAgIHByb3RlY3RlZCByYWlsU2VhcmNoRXhjaGFuZ2VGZXRjaGVyOiBCYXNlUmFpbFNlYXJjaEV4Y2hhbmdlRmV0Y2hlcjxSU0VfRj4sXG4gICAgcHJpdmF0ZSBjcmVhdGVJdGluZXJhcnlFeGNoYW5nZVVwZGF0ZXI6IEJhc2VDcmVhdGVJdGluZXJhcnlFeGNoYW5nZVVwZGF0ZXI8Q0lFX1E+LFxuICAgIHByaXZhdGUgZ2V0QWlyQXZhaWxhYmlsaXR5RmV0Y2hlcjogQmFzZUdldEFpckF2YWlsYWJpbGl0eUZldGNoZXI8R0FBVl9RPixcbiAgICBwcml2YXRlIGdldEZsaWdodEF0TmV3Q2xhc3NGZXRjaGVyOiBCYXNlR2V0RmxpZ2h0QXROZXdDbGFzc0ZldGNoZXI8R0ZBTkNfUT4sXG4gICAgcHJpdmF0ZSBnZXRGbGlnaHRVcHNlbGxPZmZlcnNGZXRjaGVyOiBCYXNlR2V0RmxpZ2h0VXBzZWxsT2ZmZXJzRmV0Y2hlcjxHRlVPX1E+LFxuICAgIHByaXZhdGUgZ2V0T2ZmaWNlc0ZldGNoZXI6IEJhc2VHZXRPZmZpY2VzRmV0Y2hlcjxHT19GPixcbiAgICBwcml2YXRlIGVtYWlsQXBhcnRtZW50Qm9va2luZ0ZldGNoZXI6IEJhc2VFbWFpbEFwYXJ0bWVudEJvb2tpbmdGZXRjaGVyPEVBQl9GPixcbiAgICBwcml2YXRlIGVtYWlsU2Vhc29uVGlja2V0RmV0Y2hlcjogQmFzZUVtYWlsU2Vhc29uVGlja2V0Qm9va2luZ0ZldGNoZXI8RVNUQl9GPixcbiAgICBwcml2YXRlIHN1Z2dlc3RQbGFjZXM6IEJhc2VTdWdnZXN0UGxhY2VzRmV0Y2hlcjxTUF9GPixcbiAgICBwcml2YXRlIGxhdExvbkZyb21IZXJlSUQ6IEJhc2VHZXRMYXRMb25Gcm9tSGVyZUlkRmV0Y2hlcjxHTExGSElfRj4sXG4gICAgcHJpdmF0ZSBnZXRHTVRJdGluZXJhcnlPcHRpb25zOiBCYXNlR2V0R210SXRpbmVyYXJ5T3B0aW9uc0ZldGNoZXI8R01USU9fRj4sXG4gICAgcHJpdmF0ZSBnZXRHVVRDaXR5U3VnZ2VzdGlvbnM6IEJhc2VHZXRHdXRDaXR5U3VnZ2VzdGlvbnNGZXRjaGVyPEdVVENTX0Y+LFxuICAgIHByaXZhdGUgZ2V0R1VUTG9jYXRpb25TdWdnZXN0aW9uczogQmFzZUdldEd1dExvY2F0aW9uU3VnZ2VzdGlvbnNGZXRjaGVyPEdVVExTX0Y+LFxuICAgIHByaXZhdGUgZ2V0Um91dGVIYXBweUZldGNoZXI6IEJhc2VHZXRSb3V0ZUhhcHB5RmV0Y2hlcjxHUkhfRj4sXG4gICAgcHJpdmF0ZSBnZXRNdWx0aXBsZUhvdGVsUmF0aW5nRmV0Y2hlcjogQmFzZUdldE11bHRpcGxlSG90ZWxSYXRpbmdGZXRjaGVyPEdNSFJfRj4sXG4gICAgcHVibGljIGVtYWlsTWVldGluZ1Jvb21Cb29raW5nRmV0Y2hlcjogQmFzZUVtYWlsTWVldGluZ1Jvb21Cb29raW5nRmV0Y2hlcjxFTVJCX0Y+LFxuICAgIHByb3RlY3RlZCBmbGlnaHRTZWFyY2hFeGNoYW5nZUZldGNoZXI6IEJhc2VGbGlnaHRTZWFyY2hFeGNoYW5nZUZldGNoZXI8RlNFX0Y+LFxuICAgIHByb3RlY3RlZCBmbGlnaEV4Y2hhbmdlRGV0YWlsc0ZldGNoZXI6IEJhc2VGbGlnaHRFeGNoYW5nZURldGFpbHNGZXRjaGVyPEZFRF9GPixcbiAgICBwcml2YXRlIGdldEVudExvY2F0aW9uc0J5UG9zdGNvZGU6IEJhc2VHZXRFbnRMb2NhdGlvbkJ5UG9zdGNvZGU8R0VMUF9GPixcbiAgICBwcml2YXRlIGdldEVudExvY2F0aW9uc0J5Q2l0eTogQmFzZUdldEVudExvY2F0aW9uQnlDaXR5PEdFTENfRj4sXG4gICAgcHJvdGVjdGVkIGdldFVzZXJSZWNlbnRCb2x0U2VhcmNoZXNGZXRjaGVyOiBCYXNlR2V0VXNlclJlY2VudEJvbHRTZWFyY2hlc0ZldGNoZXI8R1JCU19GPixcbiAgICBwcm90ZWN0ZWQgc2F2ZVJlY2VudEJvbHRTZWFyY2hVcGRhdGVyOiBCYXNlU2F2ZVJlY2VudEJvbHRTZWFyY2hVcGRhdGVyPFNSQlNfUT4sXG4gICAgcHJpdmF0ZSBnZXRGZXJyeVBvcnRzRmV0Y2hlcjogQmFzZUdldEZlcnJ5UG9ydHNGZXRjaGVyPEdGUF9GPixcbiAgICBwcml2YXRlIGdldEJhbm5lckZldGNoZXI6IEJhc2VHZXRCYW5uZXJGZXRjaGVyPEdCX0Y+LFxuICAgIHByaXZhdGUgdXBkYXRlRE9COiBCYXNldXBkYXRlRE9CVXBkYXRlcjxVR0RfVT4sXG4gICAgdXBkYXRlRmxpZ2h0U2VhdE1hcFVwZGF0ZXI6IEJhc2VVcGRhdGVGbGlnaHRTZWF0TWFwVXBkYXRlcjxVRlNfVT4sXG4gICAgcHJvdGVjdGVkIGRlbGV0ZUFsbFJlY2VudFNlYXJjaGVzVXBkYXRlcjogQmFzZURlbGV0ZUFsbFJlY2VudFNlYXJjaGVzVXBkYXRlcjxEQVJTX0Y+LFxuICAgIHB1YmxpYyBnZXRPZmZpY2VEaXZpc2lvbnNGZXRjaGVyOiBCYXNlR2V0T2ZmaWNlRGl2aXNpb25zRmV0Y2hlcjxHQ0RfRj5cblxuICApIHtcbiAgICBjb25zb2xlLmxvZygnRW50ZXJwaXNlIHNlYXJjaCBzZXJ2aWNlIGJlaW5nIGluaXRlZCcpO1xuXG4gICAgY29uc29sZS5sb2coJ05ld2x5IGNyZWF0ZWQgc2VhcmNoIG9iamVjdHM6ICcsIHRoaXMuc2VhcmNoZXMpO1xuICAgIHRoaXMuc2VhcmNoX29iamVjdHMgPSB7fTtcbiAgICB0aGlzLnNlYXJjaGVzID0ge1xuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5DYWJdOiBudWxsLFxuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5DYXJdOiBudWxsLFxuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5Db2FjaF06IG51bGwsXG4gICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkV1cm9zdGFyXTogbnVsbCxcbiAgICAgIFtncmFwaHFsVHlwZXMuU2VydmljZVR5cGUuRmFzdFRyYWNrXTogbnVsbCxcbiAgICAgIFtncmFwaHFsVHlwZXMuU2VydmljZVR5cGUuRmVycnldOiBudWxsLFxuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5GbGlnaHRdOiBudWxsLFxuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5Ib3RlbF06IG51bGwsXG4gICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXTogbnVsbCxcbiAgICAgIFtncmFwaHFsVHlwZXMuU2VydmljZVR5cGUuTG91bmdlXTogbnVsbCxcbiAgICAgIFtncmFwaHFsVHlwZXMuU2VydmljZVR5cGUuUGFya2luZ106IG51bGwsXG4gICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLlJhaWxdOiBudWxsLFxuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5Mb25nU3RheXNdOiBudWxsLFxuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5TZWFzb25UaWNrZXRdOiBudWxsLFxuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5NZWV0aW5nUm9vbV06IG51bGxcbiAgICB9O1xuXG4gICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtQXNMaXN0PFRyYXZlbGxlcltdPihcbiAgICAgIEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZS5TRVNTSU9OX1RSQVZFTExFUlxuICAgICk7XG4gICAgdGhpcy50cmF2ZWxsZXJJbmZvcm1hdGlvbi5uZXh0KHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzKTtcbiAgICB1c2VyU2VydmljZS5mdWxsVXNlckRldGFpbHMudXNlclNlcnZpY2VzLnN1YnNjcmliZSgoc2VydmljZXM6IFVzZXJTZXJ2aWNlcykgPT4ge1xuICAgICAgaWYgKHNlcnZpY2VzKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlU2VhcmNoT2JqZWN0cyhcbiAgICAgICAgICBsb3VuZ2VGZXRjaGVyLFxuICAgICAgICAgIGhlbHBlcnMsXG4gICAgICAgICAgYmFza2V0U2VydmljZSxcbiAgICAgICAgICBzdG9yYWdlU2VydmljZSxcbiAgICAgICAgICB1c2VyU2VydmljZSxcbiAgICAgICAgICBwYXJraW5nRmV0Y2hlcixcbiAgICAgICAgICBmbGlnaHRGZXRjaGVyLFxuICAgICAgICAgIGFwcGx5RmxpZ2h0UnVsZXMsXG4gICAgICAgICAgbW9kYWxTZXJ2aWNlLFxuICAgICAgICAgIGhvdGVsRmV0Y2hlcixcbiAgICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgICBob3RlbEF2YWxpYmlsaXR5U2VydmljZSxcbiAgICAgICAgICBodHRwQ2FsbFNlcnZpY2UsXG4gICAgICAgICAgcXVpY2tsaXN0RmV0Y2hlcixcbiAgICAgICAgICBnZXRSYWlsU3RhdGlvbkZldGNoZXIsXG4gICAgICAgICAgYXBwbHlIb3RlbFJ1bGVzRmV0Y2hlcixcbiAgICAgICAgICBjYXJoaXJlRmV0Y2hlcixcbiAgICAgICAgICBjYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcixcbiAgICAgICAgICBjYWJoaXJlRmV0Y2hlcixcbiAgICAgICAgICBpcmxGZXRjaGVyLFxuICAgICAgICAgIGlybERpc2NvdW50Q2FyZHNGZXRjaGVyLFxuICAgICAgICAgIGdldElybFN1cHBsaWVyU3RhdGlvbkZldGNoZXIsXG4gICAgICAgICAgZmFzdHRyYWNrRmV0Y2hlcixcbiAgICAgICAgICBlbWFpbEZlcnJ5RmV0Y2hlcixcbiAgICAgICAgICByYWlsRmV0Y2hlcixcbiAgICAgICAgICBldXJvc3RhckZldGNoZXIsXG4gICAgICAgICAgZ2V0RmxpZ2h0RXh0cmFzT3B0aW9ucyxcbiAgICAgICAgICBnZXRSZXF1ZXN0ZWRIb3RlbFVwZGF0ZUZldGNoZXIsXG4gICAgICAgICAgZW1haWxBcGFydG1lbnRCb29raW5nRmV0Y2hlcixcbiAgICAgICAgICBlbWFpbFNlYXNvblRpY2tldEZldGNoZXIsXG4gICAgICAgICAgZmxpZ2h0U2VhcmNoRXhjaGFuZ2VGZXRjaGVyLFxuICAgICAgICAgIGZsaWdoRXhjaGFuZ2VEZXRhaWxzRmV0Y2hlcixcbiAgICAgICAgICBlbWFpbE1lZXRpbmdSb29tQm9va2luZ0ZldGNoZXIsXG4gICAgICAgICAgdXBkYXRlRmxpZ2h0U2VhdE1hcFVwZGF0ZXJcbiAgICAgICAgKTtcbiAgICAgICAgLy8gdGhpcy5fc2VhcmNoT2JqZWN0c0RlZmF1bHQgIHVwZGF0ZXMgd2l0aCBzZWFyY2hfb2JqZWN0cyAtIHNvcnQgdGhpcyBvdXQgbGF0ZXJcbiAgICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0cyA9IHRoaXMuX3NlYXJjaE9iamVjdHNEZWZhdWx0ID0gT2JqZWN0LmtleXModGhpcy5zZWFyY2hfb2JqZWN0cykucmVkdWNlKFxuICAgICAgICAgIChvYmplY3RzOiBTZWFyY2hPYmplY3RzLCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgKG9iamVjdHMgYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XS5lbmFibGVkID0gISFzZXJ2aWNlcyAmJiAhIXNlcnZpY2VzW2tleV07XG4gICAgICAgICAgICBpZiAoISghIXNlcnZpY2VzICYmICEhc2VydmljZXNba2V5XSkpIHtcbiAgICAgICAgICAgICAgKG9iamVjdHMgYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XS5jaG9zZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgKG9iamVjdHMgYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XS5vcmlnaW5hbENob3NlbiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9iamVjdHM7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnNlYXJjaF9vYmplY3RzXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVzZXRTZWFyY2hQcmlvcml0aWVzKCk7XG4gICAgICAgIGNvbnNvbGUud2FybignKysrIFNFQVJDSCBPQkpFQ1RTIFNFVCBUTyBERUZBVUxUOiAnLCBfLmNsb25lRGVlcCh0aGlzLnNlYXJjaF9vYmplY3RzKSk7XG4gICAgICB9XG4gICAgICB0aGlzLmRldGVybWluZUhpZ2hlc3RTZWFyY2hQcmlvcml0eSgpO1xuICAgIH0pO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5jb3VudHJpZXMpKSB7XG4gICAgICB0aGlzLmNvdW50cmllcyA9IHRoaXMuY291bnRyaWVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKGEuY05hbWUgPCBiLmNOYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhLmNOYW1lID4gYi5jTmFtZSkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgd2ViVG9rZW5TZXJ2aWNlLmF1dG9Mb2dvdXRDb25maWcgPSB0aGlzLmdldEF1dG9Mb2dvdXRDb25maWcoKTtcbiAgfVxuXG4gIGdldCBzZWFyY2hUeXBlcygpOiBTZXJ2aWNlVHlwZVtdIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5zZWFyY2hfb2JqZWN0cykucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKGl0ZW0uY2hvc2VuIHx8IGl0ZW0uYm9va2luZ19jaG9zZW4pIHtcbiAgICAgICAgICBhY2MucHVzaChpdGVtLnR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBbXSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNlYXJjaE9iamVjdHMoXG4gICAgbG91bmdlRmV0Y2hlcjogQmFzZUxvdW5nZVF1b3RlRmV0Y2hlcjxTTF9RPixcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXG4gICAgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcbiAgICB1c2VyU2VydmljZTogVXNlclNlcnZpY2VJbnRlcmZhY2UsXG4gICAgcGFya2luZ0ZldGNoZXI6IEJhc2VQYXJraW5nUXVvdGVGZXRjaGVyPFNQQV9RPixcbiAgICBmbGlnaHRGZXRjaGVyOiBCYXNlRmxpZ2h0UXVvdGVGZXRjaGVyPFNGTF9RPixcbiAgICBhcHBseUZsaWdodFJ1bGVzOiBCYXNlQXBwbHlKaXRGbGlnaHRSdWxlc0ZldGNoZXI8QUZSX1E+LFxuICAgIG1vZGFsU2VydmljZTogQmFzZU1vZGFsT3BlbmVyU2VydmljZSxcbiAgICBob3RlbEZldGNoZXI6IEJhc2VIb3RlbFF1b3RlRmV0Y2hlcjxTSE9fUT4sXG4gICAgZW52aXJvbm1lbnQ6IEJhc2VFbnZpcm9ubWVudCxcbiAgICBob3RlbEF2YWxpYmlsaXR5U2VydmljZTogQmFzZUhvdGVsQXZhbGliaWxpdHlTZXJ2aWNlPEhBX1E+LFxuICAgIGh0dHBDYWxsU2VydmljZTogQWJzdHJhY3RIdHRwQ2FsbFNlcnZpY2UsXG4gICAgcXVpY2tsaXN0RmV0Y2hlcjogQmFzZVNlYXJjaENvbmZlcm1hUXVpY2tsaXN0RmV0Y2hlcjxRTF9RPixcbiAgICBnZXRSYWlsU3RhdGlvbkZldGNoZXI6IEJhc2VHZXRSYWlsU3RhdGlvbkZldGNoZXI8R1JTX1E+LFxuICAgIGFwcGx5SG90ZWxSdWxlc0ZldGNoZXI6IEJhc2VIb3RlbFJ1bGVzRmV0Y2hlcjxBSFJfUT4sXG4gICAgY2FyaGlyZUZldGNoZXI6IEJhc2VDYXJoaXJlUXVvdGVGZXRjaGVyPFNDSF9RPixcbiAgICBjYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcjogQmFzZUNhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyPENIQURfUT4sXG4gICAgY2FiaGlyZUZldGNoZXI6IEJhc2VDYWJoaXJlUXVvdGVGZXRjaGVyPFNUSF9RPixcbiAgICBpcmxGZXRjaGVyOiBCYXNlSXJsUXVvdGVGZXRjaGVyPFNJX1E+LFxuICAgIGlybERpc2NvdW50Q2FyZHNGZXRjaGVyOiBCYXNlSXJsRGlzY291bnRDYXJkRmV0Y2hlcjxHSURGX1E+LFxuICAgIGdldElybFN1cHBsaWVyU3RhdGlvbkZldGNoZXI6IEJhc2VHZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyPEdJU1NGX1E+LFxuICAgIGZhc3R0cmFja0ZldGNoZXI6IEJhc2VGYXN0VHJhY2tRdW90ZUZldGNoZXI8RlRRX1E+LFxuICAgIGVtYWlsRmVycnlGZXRjaGVyOiBCYXNlRW1haWxGZXJyeUJvb2tpbmdGZXRjaGVyPEVGQl9GPixcbiAgICByYWlsRmV0Y2hlcjogQmFzZVJhaWxRdW90ZUZldGNoZXI8U1JBX1E+LFxuICAgIGV1cm9zdGFyRmV0Y2hlcjogQmFzZUV1cm9zdGFyUXVvdGVGZXRjaGVyPFNFX1E+LFxuICAgIGdldEZsaWdodEV4dHJhc09wdGlvbnNGZXRjaGVyOiBCYXNlR2V0RmxpZ2h0RXh0cmFzT3B0aW9uc0ZldGNoZXI8R0ZFT19GPixcbiAgICBnZXRSZXF1ZXN0ZWRIb3RlbFVwZGF0ZUZldGNoZXI6IEJhc2VHZXRSZXF1ZXN0ZWRIb3RlbFVwZGF0ZUZldGNoZXI8R1JIVV9GPixcbiAgICBlbWFpbEFwYXJ0bWVudEJvb2tpbmdGZXRjaGVyOiBCYXNlRW1haWxBcGFydG1lbnRCb29raW5nRmV0Y2hlcjxFQUJfRj4sXG4gICAgZW1haWxTZWFzb25UaWNrZXRGZXRjaGVyOiBCYXNlRW1haWxTZWFzb25UaWNrZXRCb29raW5nRmV0Y2hlcjxFU1RCX0Y+LFxuICAgIGdldEZsaWdodFNlYXJjaEV4Y2hhbmdlRmV0Y2hlcjogQmFzZUZsaWdodFNlYXJjaEV4Y2hhbmdlRmV0Y2hlcjxGU0VfRj4sXG4gICAgZ2V0RmxpZ2h0RXhjaGFuZ2VEZXRhaWxzRmV0Y2hlcjogQmFzZUZsaWdodEV4Y2hhbmdlRGV0YWlsc0ZldGNoZXI8RkVEX0Y+LFxuICAgIGVtYWlsTWVldGluZ1Jvb21Cb29raW5nRmV0Y2hlcjogQmFzZUVtYWlsTWVldGluZ1Jvb21Cb29raW5nRmV0Y2hlcjxFTVJCX0Y+LFxuICAgIHVwZGF0ZUZsaWdodFNlYXRNYXBVcGRhdGVyOiBCYXNlVXBkYXRlRmxpZ2h0U2VhdE1hcFVwZGF0ZXI8VUZTX1U+LFxuICAgIFxuICApIHtcbiAgICBjb25zdCBzZWFyY2hlc0FyZU51bGwgPSB0aGlzLmNoZWNrSWZTZWFyY2hlc0FyZU51bGwoKTtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5zZWFyY2hfb2JqZWN0cyB8fFxuICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLnNlYXJjaF9vYmplY3RzKS5sZW5ndGggPT09IDAgfHxcbiAgICAgIHNlYXJjaGVzQXJlTnVsbFxuICAgICkge1xuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmluaXRfc2VhcmNoX29iamVjdHMoKSk7XG4gICAgICB0aGlzLnNlYXJjaGVzID0ge1xuICAgICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkxvdW5nZV06IG5ldyBMb3VuZ2VzRW50ZXJwcmlzZVNlYXJjaChcbiAgICAgICAgICBsb3VuZ2VGZXRjaGVyLFxuICAgICAgICAgIGhlbHBlcnMsXG4gICAgICAgICAgYmFza2V0U2VydmljZSxcbiAgICAgICAgICBzdG9yYWdlU2VydmljZSxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHVzZXJTZXJ2aWNlXG4gICAgICAgICksXG4gICAgICAgIFtncmFwaHFsVHlwZXMuU2VydmljZVR5cGUuUGFya2luZ106IG5ldyBQYXJraW5nRW50ZXJwcmlzZVNlYXJjaChcbiAgICAgICAgICBwYXJraW5nRmV0Y2hlcixcbiAgICAgICAgICBoZWxwZXJzLFxuICAgICAgICAgIGJhc2tldFNlcnZpY2UsXG4gICAgICAgICAgc3RvcmFnZVNlcnZpY2UsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB1c2VyU2VydmljZVxuICAgICAgICApLFxuICAgICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkZsaWdodF06IG5ldyBGbGlnaHRFbnRlcnByaXNlU2VhcmNoKFxuICAgICAgICAgIGZsaWdodEZldGNoZXIsXG4gICAgICAgICAgaGVscGVycyxcbiAgICAgICAgICB1c2VyU2VydmljZSxcbiAgICAgICAgICBiYXNrZXRTZXJ2aWNlLFxuICAgICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYXBwbHlGbGlnaHRSdWxlcyxcbiAgICAgICAgICBtb2RhbFNlcnZpY2UsXG4gICAgICAgICAgZ2V0RmxpZ2h0RXh0cmFzT3B0aW9uc0ZldGNoZXIsXG4gICAgICAgICAgZ2V0RmxpZ2h0U2VhcmNoRXhjaGFuZ2VGZXRjaGVyLFxuICAgICAgICAgIGdldEZsaWdodEV4Y2hhbmdlRGV0YWlsc0ZldGNoZXIsXG4gICAgICAgICAgdXBkYXRlRmxpZ2h0U2VhdE1hcFVwZGF0ZXJcbiAgICAgICAgKSxcbiAgICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5Ib3RlbF06IG5ldyBIb3RlbEVudGVycHJpc2VTZWFyY2goXG4gICAgICAgICAgaG90ZWxGZXRjaGVyLFxuICAgICAgICAgIGhlbHBlcnMsXG4gICAgICAgICAgdXNlclNlcnZpY2UsXG4gICAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgICAgaG90ZWxBdmFsaWJpbGl0eVNlcnZpY2UsXG4gICAgICAgICAgYmFza2V0U2VydmljZSxcbiAgICAgICAgICBzdG9yYWdlU2VydmljZSxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGh0dHBDYWxsU2VydmljZSxcbiAgICAgICAgICBxdWlja2xpc3RGZXRjaGVyLFxuICAgICAgICAgIGdldFJhaWxTdGF0aW9uRmV0Y2hlcixcbiAgICAgICAgICBhcHBseUhvdGVsUnVsZXNGZXRjaGVyLFxuICAgICAgICAgIGdldFJlcXVlc3RlZEhvdGVsVXBkYXRlRmV0Y2hlclxuICAgICAgICApLFxuICAgICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkNhcl06IG5ldyBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaChcbiAgICAgICAgICBjYXJoaXJlRmV0Y2hlcixcbiAgICAgICAgICBjYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcixcbiAgICAgICAgICBoZWxwZXJzLFxuICAgICAgICAgIGJhc2tldFNlcnZpY2UsXG4gICAgICAgICAgc3RvcmFnZVNlcnZpY2UsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB1c2VyU2VydmljZVxuICAgICAgICApLFxuICAgICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkNhYl06IG5ldyBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaChcbiAgICAgICAgICBjYWJoaXJlRmV0Y2hlcixcbiAgICAgICAgICBoZWxwZXJzLFxuICAgICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYmFza2V0U2VydmljZSxcbiAgICAgICAgICB1c2VyU2VydmljZVxuICAgICAgICApLFxuICAgICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXTogbmV3IElSTEVudGVycHJpc2VTZWFyY2goXG4gICAgICAgICAgaXJsRmV0Y2hlcixcbiAgICAgICAgICBpcmxEaXNjb3VudENhcmRzRmV0Y2hlcixcbiAgICAgICAgICBoZWxwZXJzLFxuICAgICAgICAgIGJhc2tldFNlcnZpY2UsXG4gICAgICAgICAgc3RvcmFnZVNlcnZpY2UsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBnZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyLFxuICAgICAgICAgIHVzZXJTZXJ2aWNlXG4gICAgICAgICksXG4gICAgICAgIFtncmFwaHFsVHlwZXMuU2VydmljZVR5cGUuRmFzdFRyYWNrXTogbmV3IEZhc3RUcmFja0VudGVycHJpc2VTZWFyY2goXG4gICAgICAgICAgZmFzdHRyYWNrRmV0Y2hlcixcbiAgICAgICAgICBoZWxwZXJzLFxuICAgICAgICAgIGJhc2tldFNlcnZpY2UsXG4gICAgICAgICAgc3RvcmFnZVNlcnZpY2UsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB1c2VyU2VydmljZVxuICAgICAgICApLFxuICAgICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkNvYWNoXTogbnVsbCxcbiAgICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5GZXJyeV06IG5ldyBGZXJyeUVudGVycHJpc2VTZWFyY2goXG4gICAgICAgICAgZW1haWxGZXJyeUZldGNoZXIsXG4gICAgICAgICAgaGVscGVycyxcbiAgICAgICAgICBiYXNrZXRTZXJ2aWNlLFxuICAgICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdXNlclNlcnZpY2VcbiAgICAgICAgKSxcblxuICAgICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLlJhaWxdOiBuZXcgUmFpbEVudGVycHJpc2VTZWFyY2goXG4gICAgICAgICAgcmFpbEZldGNoZXIsXG4gICAgICAgICAgZ2V0UmFpbFN0YXRpb25GZXRjaGVyLFxuICAgICAgICAgIGhlbHBlcnMsXG4gICAgICAgICAgYmFza2V0U2VydmljZSxcbiAgICAgICAgICBzdG9yYWdlU2VydmljZSxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHVzZXJTZXJ2aWNlLFxuICAgICAgICAgIG1vZGFsU2VydmljZVxuICAgICAgICApLFxuICAgICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkV1cm9zdGFyXTogbmV3IEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaChcbiAgICAgICAgICBldXJvc3RhckZldGNoZXIsXG4gICAgICAgICAgaGVscGVycyxcbiAgICAgICAgICB1c2VyU2VydmljZSxcbiAgICAgICAgICBiYXNrZXRTZXJ2aWNlLFxuICAgICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbW9kYWxTZXJ2aWNlLFxuICAgICAgICAgIGFwcGx5RmxpZ2h0UnVsZXNcbiAgICAgICAgKSxcbiAgICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5Mb25nU3RheXNdOiBuZXcgQXBhcnRtZW50RW50ZXJwcmlzZVNlYXJjaChcbiAgICAgICAgICBlbWFpbEFwYXJ0bWVudEJvb2tpbmdGZXRjaGVyLFxuICAgICAgICAgIGhlbHBlcnMsXG4gICAgICAgICAgYmFza2V0U2VydmljZSxcbiAgICAgICAgICBzdG9yYWdlU2VydmljZSxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHVzZXJTZXJ2aWNlXG4gICAgICAgICksXG4gICAgICAgIFtncmFwaHFsVHlwZXMuU2VydmljZVR5cGUuU2Vhc29uVGlja2V0XTogbmV3IFNlYXNvblRpY2tldHNFbnRlcnByaXNlU2VhcmNoKFxuICAgICAgICAgIGVtYWlsU2Vhc29uVGlja2V0RmV0Y2hlcixcbiAgICAgICAgICBoZWxwZXJzLFxuICAgICAgICAgIGJhc2tldFNlcnZpY2UsXG4gICAgICAgICAgc3RvcmFnZVNlcnZpY2UsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB1c2VyU2VydmljZVxuICAgICAgICApLFxuICAgICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLk1lZXRpbmdSb29tXTogbmV3IE1lZXRpbmdSb29tRW50ZXJwcmlzZVNlYXJjaChcbiAgICAgICAgICBlbWFpbE1lZXRpbmdSb29tQm9va2luZ0ZldGNoZXIsXG4gICAgICAgICAgaGVscGVycyxcbiAgICAgICAgICBiYXNrZXRTZXJ2aWNlLFxuICAgICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdXNlclNlcnZpY2VcbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgY2hlY2tJZlNlYXJjaGVzQXJlTnVsbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZWFyY2hlcykuZXZlcnkoKHNlcnZpY2U6IFNlcnZpY2VUeXBlKSA9PiAhdGhpcy5zZWFyY2hlc1tzZXJ2aWNlXSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5hbGxTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuYWxsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5ob3RlbEF2YWxpYmlsaXR5U2VydmljZS5yZXNldCgpO1xuICAgIHRoaXMucmVzZXRBbGxTZWFyY2hJdGVtcygpO1xuICAgIHRoaXMuYmFza2V0U2VydmljZS5yZXNldCgpO1xuICB9XG5cbiAgcmVzZXRBbGxTZWFyY2hJdGVtcygpOiB2b2lkIHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyU2VydmljZS5mdWxsVXNlckRldGFpbHMudXNlckRhdGEudmFsdWU7XG5cbiAgICBpZiAoIXVzZXIpIHJldHVybjtcblxuICAgIHRoaXMuYmFza2V0U2VydmljZS5pc0FwcHJvdmVkQmFza2V0ID0gZmFsc2U7XG4gICAgdGhpcy5yZW1vdmVBbGxSZXN1bHRzKCk7XG4gICAgaWYgKHVzZXIuYm9va2VyX3R5cGUgIT09IEJvb2tlclR5cGUuU2VsZkJvb2spIHtcbiAgICAgIC8vU2VsZiBib29rIHVzZXJzIGNhbiBvbmx5IGJvb2sgZm9yIHRoZW1zZWx2ZXNcbiAgICAgIHRoaXMucmVtb3ZlQWxsVHJhdmVsbGVycygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlckluZm9ybWF0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMucmVzZXRUcmF2ZWxsZXJUeXBlKCk7XG4gICAgdGhpcy5yZXNldFNlYXJjaE9iamVjdHMoKTtcbiAgICB0aGlzLmJhc2tldFNlcnZpY2UucmVzZXQoKTtcbiAgfVxuXG4gIHJlbW92ZUFsbFJlc3VsdHMoKTogdm9pZCB7XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnNlYXJjaGVzKS5mb3JFYWNoKChpdGVtOiBCYXNlRW50ZXJwcmlzZVNlYXJjaDxhbnksIGFueSwgYW55W10+KSA9PiB7XG4gICAgICBpdGVtPy5yZXNldCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVzZXRUcmF2ZWxsZXJUeXBlKCkge1xuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UucmVtb3ZlU2Vzc2lvbkl0ZW0oJ3NlYXJjaF9FUk1fdHJhdmVsbGVyX3R5cGUnKTtcbiAgICB0aGlzLmVybVRyYXZlbGxlclR5cGUgPSBFcm1UcmF2ZWxsZXJUeXBlLk5vbmU7XG4gIH1cblxuICBnZXRVc2VyQ2FyYm9uQWxsb3dhbmNlKFxuICAgIHVzZXI6IHN0cmluZyxcbiAgICBvdXRib3VuZERhdGU6IHN0cmluZyxcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cbiAgKTogT2JzZXJ2YWJsZTxncmFwaHFsVHlwZXMuQ2FyYm9uQWxsb3dhbmNlPiB7XG4gICAgLy8gZG9udCBkbyB0aGlzIGlmIHVzZXIgaXMgYSBndWVzdFxuICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgIGlzTG9hZGluZy5uZXh0KHRydWUpO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5ID0geyB1c2VyLCBvdXRib3VuZERhdGUgfTtcbiAgICByZXR1cm4gdGhpcy5nZXRVc2VyQ2FyYm9uQWxsb3dhbmNlRmV0Y2hlci5mZXRjaExpc3QocXVlcnkpLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgbWFwKChyZXN1bHRzOiBncmFwaHFsVHlwZXMuQ2FyYm9uQWxsb3dhbmNlKSA9PiB7XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0Umlza0FsZXJ0cyhcbiAgICBtaW5MZXZlbDogZ3JhcGhxbFR5cGVzLlJpc2tMZXZlbCxcbiAgICBtYXhMZXZlbDogZ3JhcGhxbFR5cGVzLlJpc2tMZXZlbCxcbiAgICBjb3VudHJ5SXNvQ29kZTogc3RyaW5nLFxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxuICApOiBPYnNlcnZhYmxlPGdyYXBocWxUeXBlcy5SaXNrQWxlcnRbXT4ge1xuICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgIGlzTG9hZGluZy5uZXh0KHRydWUpO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5OiBncmFwaHFsVHlwZXMuR2V0Umlza0FsZXJ0c1F1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgbWluTGV2ZWwsXG4gICAgICBtYXhMZXZlbCxcbiAgICAgIGNvdW50cnlJc29Db2RlXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnJpc2tBbGVydHNGZXRjaGVyLmZldGNoTGlzdChxdWVyeSkucGlwZShcbiAgICAgIHRha2UoMSksXG4gICAgICBtYXAoKHJlc3VsdDogZ3JhcGhxbFR5cGVzLlJpc2tBbGVydFtdKSA9PiB7XG4gICAgICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QWlycG9ydHNMaXN0KFxuICAgIHRlcm06IHN0cmluZyxcbiAgICBjb3VudHJ5Q29kZT86IENvdW50cnlDb2RlLFxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPixcbiAgICBoYXNMb3VuZ2U/OiBib29sZWFuLFxuICAgIGhhc1Bhcmtpbmc/OiBib29sZWFuLFxuICAgIGhhc0Zhc3RUcmFjaz86IGJvb2xlYW4sXG4gICAgaXNIb3RlbD86IGJvb2xlYW4sXG4gICAgbG9jYXRpb25UeXBlPzogZ3JhcGhxbFR5cGVzLkxvY2F0aW9uVHlwZVxuICApOiBPYnNlcnZhYmxlPE9CVEFpcnBvcnREZXRhaWxzW10+IHtcbiAgICBpZiAodGVybS5sZW5ndGggPiAyIHx8IGhhc0Zhc3RUcmFjayB8fCBoYXNMb3VuZ2UgfHwgaGFzUGFya2luZykge1xuICAgICAgaWYgKGlzTG9hZGluZykge1xuICAgICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcXVlcnk6IGdyYXBocWxUeXBlcy5TZWFyY2hBaXJwb3J0cy5WYXJpYWJsZXMgPSB7IHF1ZXJ5OiB0ZXJtIH07XG4gICAgICBpZiAoISFjb3VudHJ5Q29kZSkge1xuICAgICAgICBxdWVyeS5jb3VudHJ5Q29kZSA9IGNvdW50cnlDb2RlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBoYXNMb3VuZ2UgPT09ICdib29sZWFuJykge1xuICAgICAgICBxdWVyeS5oYXNMb3VuZ2UgPSBoYXNMb3VuZ2U7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGhhc1BhcmtpbmcgPT09ICdib29sZWFuJykge1xuICAgICAgICBxdWVyeS5oYXNQYXJraW5nID0gaGFzUGFya2luZztcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgaGFzRmFzdFRyYWNrID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcXVlcnkuaGFzRmFzdFRyYWNrID0gaGFzRmFzdFRyYWNrO1xuICAgICAgfVxuICAgICAgaWYgKGxvY2F0aW9uVHlwZSkge1xuICAgICAgICBxdWVyeS5sb2NhdGlvblR5cGUgPSBsb2NhdGlvblR5cGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hBaXJwb3J0c0ZldGNoZXIuZmV0Y2hPbmUocXVlcnkpLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIG1hcCgocmVzdWx0czogQWlycG9ydFNlYXJjaFJlc3VsdHMpID0+IHtcbiAgICAgICAgICBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5nZW5lcmFsTWF0Y2hlcykge1xuICAgICAgICAgICAgbGV0IGdlbmVyYWxNYXRjaGVzID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdHMuZ2VuZXJhbE1hdGNoZXMpO1xuXG4gICAgICAgICAgICBpZiAoaXNIb3RlbCkge1xuICAgICAgICAgICAgICBnZW5lcmFsTWF0Y2hlcyA9IGdlbmVyYWxNYXRjaGVzLmZpbHRlcigobWF0Y2g6IEFpcnBvcnQpID0+IG1hdGNoLmljYW8pOyAvLyBhbGwgYWlycG9ydHMgYXJlIG1pc3NpbmcgaWNhbyBjb2RlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzTG91bmdlKSB7XG4gICAgICAgICAgICAgIGdlbmVyYWxNYXRjaGVzID0gZ2VuZXJhbE1hdGNoZXMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFJlbW92aW5nIHRoaXMgYXMgdGhpcyBjcmVhdGVzIGR1cGxpY2F0ZSBhaXJwb3J0cyBpbiB0aGUgbGlzdFxuICAgICAgICAgICAgLy8gaWYgKHJlc3VsdHMuaWF0YU1hdGNoKSB7XG4gICAgICAgICAgICAvLyAgIGdlbmVyYWxNYXRjaGVzLnB1c2gocmVzdWx0cy5pYXRhTWF0Y2gpO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgZ2VuZXJhbE1hdGNoZXNcbiAgICAgICAgICAgICAgICAvLyAuZmlsdGVyKChhaXJwb3J0OiBBaXJwb3J0UmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gICByZXR1cm4gISFjb3VudHJ5Q29kZVxuICAgICAgICAgICAgICAgIC8vICAgICA/IGNvdW50cnlDb2RlID09PSBhaXJwb3J0LmRldGFpbHMuY291bnRyeUNvZGVcbiAgICAgICAgICAgICAgICAvLyAgICAgOiBhaXJwb3J0O1xuICAgICAgICAgICAgICAgIC8vIH0pXG4gICAgICAgICAgICAgICAgLm1hcCgoYWlycG9ydDogZ3JhcGhxbFR5cGVzLkFpcnBvcnQpOiBPQlRBaXJwb3J0RGV0YWlscyA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbjogYWlycG9ydC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5OiBhaXJwb3J0LmlhdGEsXG4gICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5wcm9jZXNzVGVybWluYWxzKGFpcnBvcnQudGVybWluYWxzKSxcbiAgICAgICAgICAgICAgICAgICAgY291bnRyeTogYWlycG9ydD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxuICAgICAgICAgICAgICAgICAgICBwb3N0Y29kZTogYWlycG9ydD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcbiAgICAgICAgICAgICAgICAgICAgY291bnRyeUNvZGU6IGFpcnBvcnQ/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGUsXG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uVHlwZTogYWlycG9ydD8ubG9jYXRpb25EZXRhaWxzPy5sb2NhdGlvblR5cGVcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICB9XG4gIH1cbiAgZ2V0QWlybGluZXNMaXN0KFxuICAgIHRlcm06IHN0cmluZyxcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cbiAgKTogT2JzZXJ2YWJsZTxPQlRBaXJsaW5lc0RldGFpbHNbXT4ge1xuICAgIGlmICh0ZXJtLmxlbmd0aCA+PSAyKSB7XG4gICAgICBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICAgIGlzTG9hZGluZy5uZXh0KHRydWUpO1xuICAgICAgfVxuICAgICAgY29uc3QgcXVlcnk6IGdyYXBocWxUeXBlcy5TZWFyY2hBaXJsaW5lcy5WYXJpYWJsZXMgPSB7IHF1ZXJ5OiB0ZXJtIH07XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hBaXJsaW5lc0ZldGNoZXIuZmV0Y2hPbmUocXVlcnkpLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIG1hcCgocmVzdWx0czogQWlybGluZXNTZWFyY2hSZXN1bHQpID0+IHtcbiAgICAgICAgICBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5nZW5lcmFsTWF0Y2hlcykge1xuICAgICAgICAgICAgY29uc3QgZ2VuZXJhbE1hdGNoZXMgPSB0aGlzLmhlbHBlcnMuY2xvbmUocmVzdWx0cy5nZW5lcmFsTWF0Y2hlcyk7XG4gICAgICAgICAgICByZXR1cm4gZ2VuZXJhbE1hdGNoZXMubWFwKFxuICAgICAgICAgICAgICAoYWlybGluZXM6IGdyYXBocWxUeXBlcy5BaXJsaW5lUmVzdWx0KTogT0JUQWlybGluZXNEZXRhaWxzID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgY29kZTogYWlybGluZXMuaWF0YSxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGFpcmxpbmVzLm5hbWVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZihbXSk7XG4gICAgfVxuICB9XG4gIGdldEFpcnBvcnRMb2NhdGlvbnMoXG4gICAgdGVybTogc3RyaW5nLFxuICAgIGNvdW50cnlDb2RlOiBDb3VudHJ5Q29kZSxcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sXG4gICAgaGFzTG91bmdlPzogYm9vbGVhbixcbiAgICBoYXNQYXJraW5nPzogYm9vbGVhbixcbiAgICBoYXNGYXN0VHJhY2s/OiBib29sZWFuLFxuICAgIGlzSG90ZWw/OiBib29sZWFuXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcbiAgICBjb25zdCBjb252ZXJ0ID0gKHJlc3VsdHM6IE9CVEFpcnBvcnREZXRhaWxzW10pOiBMb2NhdGlvbkRldGFpbHNbXSA9PiB7XG4gICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdDogT0JUQWlycG9ydERldGFpbHMpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiByZXN1bHQuZGVzdGluYXRpb24sXG4gICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5BaXJwb3J0LFxuICAgICAgICAgIGFpcnBvcnQ6IHJlc3VsdFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5nZXRBaXJwb3J0c0xpc3QoXG4gICAgICB0ZXJtLFxuICAgICAgY291bnRyeUNvZGUsXG4gICAgICBpc0xvYWRpbmcsXG4gICAgICBoYXNMb3VuZ2UsXG4gICAgICBoYXNQYXJraW5nLFxuICAgICAgaGFzRmFzdFRyYWNrLFxuICAgICAgaXNIb3RlbFxuICAgICkucGlwZShtYXAoY29udmVydCkpO1xuICB9XG5cbiAgZ2V0Q2l0eUxvY2F0aW9ucyhcbiAgICB0ZXJtOiBzdHJpbmcsXG4gICAgY291bnRyeUNvZGU/OiBDb3VudHJ5Q29kZSxcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xuICAgIGlmICh0ZXJtPy5sZW5ndGggPD0gMikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9nZXRDaXR5TG9jYXRpb25zKHRlcm0sIGNvdW50cnlDb2RlLCBpc0xvYWRpbmcpO1xuICB9XG5cbiAgX2dldENpdHlMb2NhdGlvbnMoXG4gICAgdGVybTogc3RyaW5nLFxuICAgIGNvdW50cnlDb2RlPzogQ291bnRyeUNvZGUsXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcbiAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XG4gICAgY29uc3QgcXVlcnk6IGFueSA9IHsgcXVlcnk6IHRlcm0gfTtcbiAgICBpZiAoY291bnRyeUNvZGUpIHtcbiAgICAgIHF1ZXJ5LmNvdW50cnlDb2RlID0gY291bnRyeUNvZGU7XG4gICAgfVxuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxTZWFyY2hDaXRpZXNSZXN1bHRBcnJheT4gPSB0aGlzLmNpdGllc0ZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KTtcbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IFNlYXJjaENpdGllc1Jlc3VsdEFycmF5KTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xuICAgICAgY29uc3QgZGF0YTogTG9jYXRpb25EZXRhaWxzW10gPSByZXN1bHRzLm1hcCgocmVzdWx0OiBTZWFyY2hDaXRpZXNSZXN1bHQpOiBMb2NhdGlvbkRldGFpbHMgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxuICAgICAgICAgIGxvbmdpdHVkZTogcmVzdWx0LmNvb3JkaW5hdGVzLmxvbmdpdHVkZSxcbiAgICAgICAgICBsYXRpdHVkZTogcmVzdWx0LmNvb3JkaW5hdGVzLmxhdGl0dWRlLFxuICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuQ2l0eSxcbiAgICAgICAgICBjb3VudHJ5Q29kZTogcmVzdWx0LmNvdW50cnlDb2RlLFxuICAgICAgICAgIGlkOiByZXN1bHQuaWRcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IGNhciBoaXJlIGRlcG90cyBiYXNlZCBvbiBjaXR5IGNvcmRzXG4gICAqL1xuICBnZXRDYXJIaXJlRGVwb3RzKFxuICAgIGxhdGl0dWRlOiBudW1iZXIsXG4gICAgbG9uZ2l0dWRlOiBudW1iZXIsXG4gICAgcmFkaXVzPzogc3RyaW5nLFxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxuICApOiBPYnNlcnZhYmxlPENhckhpcmVEZXBvdFJlc3VsdEFycmF5PiB7XG4gICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xuICAgIGNvbnN0IHF1ZXJ5OiBhbnkgPSB7IGxhdGl0dWRlLCBsb25naXR1ZGUgfTtcbiAgICBpZiAocmFkaXVzKSB7XG4gICAgICBxdWVyeS5yYWRpdXMgPSByYWRpdXM7XG4gICAgfVxuXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPENhckhpcmVEZXBvdFJlc3VsdEFycmF5PiA9IHRoaXMuZGVwb3RGZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XG5cbiAgICByZXR1cm4gb2JzOyAvLyAucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xuXG4gICAgLy8gcmV0dXJuIG9mKFtdKTtcbiAgfVxuXG4gIGdldEVudExvY2F0aW9uc1Bvc3Rjb2RlKFxuICAgIGNvdW50cnlDb2RlOiBzdHJpbmcsXG4gICAgcG9zdGNvZGU6IHN0cmluZyxcbiAgICB2ZW5kb3I6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uQ29kZXNbXT4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0geyBjb3VudHJ5Q29kZSwgcG9zdGNvZGUsIHZlbmRvciB9O1xuICAgIHJldHVybiB0aGlzLmdldEVudExvY2F0aW9uc0J5UG9zdGNvZGUuZmV0Y2hMaXN0KHF1ZXJ5KTtcbiAgfVxuXG4gIGdldEVudExvY2F0aW9uc0NpdHkoXG4gICAgY291bnRyeUNvZGU6IHN0cmluZyxcbiAgICBjaXR5OiBzdHJpbmcsXG4gICAgdmVuZG9yOiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkNvZGVzW10+IHtcbiAgICBjb25zdCBxdWVyeSA9IHsgY291bnRyeUNvZGUsIGNpdHksIHZlbmRvciB9O1xuICAgIHJldHVybiB0aGlzLmdldEVudExvY2F0aW9uc0J5Q2l0eS5mZXRjaExpc3QocXVlcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCBwb3N0Y29kZSBsb2NhdGlvbnMsIHRoZXNlIHdpbGwgdXNlIHBhcnRpYWwgcG9zdGNvZGUsXG4gICAqICBmdWxsIGFuZCB0aGVuIGdyYWJiaW5nIHRoZW0gd2lsbCBsZXQgdXMgZmlsbCBpbiB0aGUgYWRkcmVzcyBmb3JtXG4gICAqIEB0b2RvIC0gZmlsbCB0aGlzIG91dCBmb3IgdGhlIG90aGVyIGxvY2F0aW9uIHR5cGVzLCBtYXkgbmVlZCB0byBtZXJnZU1hcCB0aGVtIG9yIHNvbWUgb3RoZXIgcnhqcyBtYWdpY1xuICAgKiBAcGFyYW0gdGVybSAtIHRoZSB0ZXJtIHRvIHNlYXJjaCBieSBlLmcuICd3YTE0JyBzaG91bGQgYnJpbmcgYmFjaywgb3VyIG9mZmljZSwgJ20zMycgc2hvaXVsZCBicmluZyBiYWNrIG15IGFkZHJzXG4gICAqL1xuICBnZXRQb3N0Y29kZUxpc3QodGVybTogc3RyaW5nLCBjb3VudHJ5Q29kZTogc3RyaW5nID0gJ0dCJyk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcbiAgICBjb25zb2xlLmxvZyh0ZXJtLCBjb3VudHJ5Q29kZSk7XG5cbiAgICBpZiAodGVybS5sZW5ndGggPj0gMiAmJiBjb3VudHJ5Q29kZSkge1xuICAgICAgY29uc3Qgc3VicyA9IHRoaXMucG9zdGNvZGVGZXRjaGVyLmZldGNoTGlzdCh7IHF1ZXJ5OiB0ZXJtLCBjb3VudHJ5Q29kZTogY291bnRyeUNvZGUgfSkucGlwZShcbiAgICAgICAgbWFwKChyZXN1bHRzOiBTZWFyY2hQb3N0Y29kZXNSZXN1bHRBcnJheSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXN1bHRzLm1hcCgocmVzdWx0OiBQb3N0Y29kZURldGFpbHMpOiBMb2NhdGlvbkRldGFpbHMgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY2l0eTogcmVzdWx0LmNpdHksXG4gICAgICAgICAgICAgIGNvdW50cnlDb2RlOiByZXN1bHQuY291bnRyeUNvZGUsXG4gICAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5wb3N0Y29kZSxcbiAgICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5Qb3N0Y29kZSxcbiAgICAgICAgICAgICAgbGF0aXR1ZGU6IHJlc3VsdC5sYXRpdHVkZSxcbiAgICAgICAgICAgICAgbG9uZ2l0dWRlOiByZXN1bHQubG9uZ2l0dWRlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgKTsgLy8gZXhwYW5kIHRoaXMgd2l0aCB0aGUgb3RoZXIgc2VhcmNoZXMgd2hlbiB0aGV5IGFyZSBkb25lXG4gICAgICByZXR1cm4gc3VicztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICB9XG4gIH1cblxuICBhZGRUb1NlbGVjdGVkUGxhY2VzKGFkZHJlc3M6IGdyYXBocWxUeXBlcy5BZGRyZXNzKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFBsYWNlcy5wdXNoKGFkZHJlc3MpO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRQbGFjZUJ5SWQocGxhY2VJZDogc3RyaW5nKTogZ3JhcGhxbFR5cGVzLkFkZHJlc3Mge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUGxhY2VzLmZpbmQoKHBsYWNlOiB7IHBsYWNlX2lkOiBzdHJpbmcgfSkgPT4gcGxhY2UucGxhY2VfaWQgPT09IHBsYWNlSWQpO1xuICB9XG5cbiAgLypcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHRoZSBsaXN0IG9mIE9mZmljZSBsb2NhdGlvbnMgYmFzZWQgb24gc2VhcmNoIHRlcm0gZ2l2ZW5cbiAgICogQHRvZG8gLSBmaWxsIHRoaXMgb3V0IHNvIHRoYXQgaXQgYWN0dWFsbHkgcGVyZm9ybXMgYSBodHRwIGNhbGxcbiAgICogQHBhcmFtIHRlcm0gLSB0aGUgdGVybSB3ZSB3YW50IHRvIHNlYXJjaCBieVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0T2ZmaWNlTG9jYXRpb25zKCk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8QWRkcmVzc1tdPiA9IHRoaXMudXNlckFkZHJlc3Nlc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBBZGRyZXNzW10pOiBMb2NhdGlvbkRldGFpbHNbXSA9PiB7XG4gICAgICBsZXQgbmV3T2ZmaWNlczogTG9jYXRpb25EZXRhaWxzW10gPSBbXTtcbiAgICAgIGNvbnN0IG9mZmljZXNVbmlxdWU6IHtcbiAgICAgICAgW2tleTogc3RyaW5nXToge1xuICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXM7XG4gICAgICAgICAgbG9uZ2l0dWRlOiBudW1iZXI7XG4gICAgICAgICAgbGF0aXR1ZGU6IG51bWJlcjtcbiAgICAgICAgICBjb3VudHJ5Q29kZTogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgfSA9IHt9O1xuICAgICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQ6IEFkZHJlc3MpID0+IHtcbiAgICAgICAgY29uc3QgdW5pcVN0cmluZyA9XG4gICAgICAgICAgYCR7cmVzdWx0Lm51bWJlck9yTmFtZX0gJHtyZXN1bHQuc3RyZWV0fSAke3Jlc3VsdC50b3dufSAke3Jlc3VsdC5wb3N0Y29kZX1gLnJlcGxhY2UoXG4gICAgICAgICAgICAvIC9nLFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApO1xuICAgICAgICBvZmZpY2VzVW5pcXVlW3VuaXFTdHJpbmddID0ge1xuICAgICAgICAgIGlkOiByZXN1bHQuaWQsXG4gICAgICAgICAgbmFtZTogYCR7cmVzdWx0LmRlc2NyaXB0aW9ufSB8ICR7cmVzdWx0Lm51bWJlck9yTmFtZX0gJHtyZXN1bHQuc3RyZWV0fSAke3Jlc3VsdC50b3dufSAke3Jlc3VsdC5wb3N0Y29kZX1gLFxuICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuT2ZmaWNlLFxuICAgICAgICAgIGxvbmdpdHVkZTogcmVzdWx0LmxvbmdpdHVkZSxcbiAgICAgICAgICBsYXRpdHVkZTogcmVzdWx0LmxhdGl0dWRlLFxuICAgICAgICAgIGNvdW50cnlDb2RlOiByZXN1bHQuY291bnRyeUNvZGVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgbmV3T2ZmaWNlcyA9IE9iamVjdC52YWx1ZXMob2ZmaWNlc1VuaXF1ZSk7XG4gICAgICAvLyBjb25zb2xlLndhcm4ob2ZmaWNlc1VuaXF1ZSk7XG4gICAgICBuZXdPZmZpY2VzID0gbmV3T2ZmaWNlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIC8vIHNvcnQgYWxwaGFiZXRpY2FsbHlcbiAgICAgICAgaWYgKGEubmFtZSA8IGIubmFtZSkge1xuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYS5uYW1lID4gYi5uYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXdPZmZpY2VzO1xuICAgIH07XG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XG4gIH1cblxuICBnZXRPZmZpY2VMb2NhdGlvbnNOb1VzZXJBZGRyZXNzZXModG93bjogc3RyaW5nID0gJycpOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPEFkZHJlc3NbXT4gPSB0aGlzLnVzZXJBZGRyZXNzZXNGZXRjaGVyLmZldGNoTGlzdCh7dG93bn0pO1xuICAgIGNvbnN0IGZ1bmMgPSAocmVzdWx0czogQWRkcmVzc1tdKTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xuICAgICAgbGV0IG5ld09mZmljZXM6IExvY2F0aW9uRGV0YWlsc1tdID0gW107XG4gICAgICBjb25zdCBvZmZpY2VzVW5pcXVlOiB7XG4gICAgICAgIFtrZXk6IHN0cmluZ106IHtcbiAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzO1xuICAgICAgICAgIGxvbmdpdHVkZTogbnVtYmVyO1xuICAgICAgICAgIGxhdGl0dWRlOiBudW1iZXI7XG4gICAgICAgICAgY291bnRyeUNvZGU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0gPSB7fTtcbiAgICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0OiBBZGRyZXNzKSA9PiB7XG4gICAgICAgIGlmICghcmVzdWx0LnVzZXIgJiYgKHJlc3VsdC5vZmZpY2UgfHwgcmVzdWx0LmNvbXBhbnkpKSB7XG4gICAgICAgICAgY29uc3QgdW5pcVN0cmluZyA9XG4gICAgICAgICAgICBgJHtyZXN1bHQubnVtYmVyT3JOYW1lfSAke3Jlc3VsdC5zdHJlZXR9ICR7cmVzdWx0LnRvd259ICR7cmVzdWx0LnBvc3Rjb2RlID8gJyAnICsgcmVzdWx0LnBvc3Rjb2RlIDogJyd9YC5yZXBsYWNlKFxuICAgICAgICAgICAgICAvIC9nLFxuICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICBvZmZpY2VzVW5pcXVlW3VuaXFTdHJpbmddID0ge1xuICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZCxcbiAgICAgICAgICAgIG5hbWU6IGAke3Jlc3VsdC5kZXNjcmlwdGlvbn0gfCAke3Jlc3VsdC5udW1iZXJPck5hbWV9ICR7cmVzdWx0LnN0cmVldH0gJHtyZXN1bHQudG93bn0gJHtyZXN1bHQucG9zdGNvZGUgPyAnICcgKyByZXN1bHQucG9zdGNvZGUgOiAnJ31gLFxuICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5PZmZpY2UsXG4gICAgICAgICAgICBsb25naXR1ZGU6IHJlc3VsdC5sb25naXR1ZGUsXG4gICAgICAgICAgICBsYXRpdHVkZTogcmVzdWx0LmxhdGl0dWRlLFxuICAgICAgICAgICAgY291bnRyeUNvZGU6IHJlc3VsdC5jb3VudHJ5Q29kZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbmV3T2ZmaWNlcyA9IE9iamVjdC52YWx1ZXMob2ZmaWNlc1VuaXF1ZSk7XG4gICAgICAvLyBjb25zb2xlLndhcm4ob2ZmaWNlc1VuaXF1ZSk7XG4gICAgICBuZXdPZmZpY2VzID0gbmV3T2ZmaWNlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIC8vIHNvcnQgYWxwaGFiZXRpY2FsbHlcbiAgICAgICAgaWYgKGEubmFtZSA8IGIubmFtZSkge1xuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYS5uYW1lID4gYi5uYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXdPZmZpY2VzO1xuICAgIH07XG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XG4gIH1cblxuICBnZXRTdGF0aW9uTG9jYXRpb25zKFxuICAgIHRlcm06IHN0cmluZyxcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sXG4gICAgaGFzVG9kPzogYm9vbGVhbixcbiAgICBnYk9ubHk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBldU9ubHk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBleGNsdWRlSHViU3RhdGlvbnM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBnZXRBbGxTdGF0aW9uczogYm9vbGVhbiA9IGZhbHNlXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcbiAgICAvLyBjb25zb2xlLmxvZygnRVVPTkxZOiAnLCBldU9ubHkpO1xuXG4gICAgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xuICAgICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xuICAgICAgcmV0dXJuIHRoaXMucmFpbFN0YXRpb25GZXRjaGVyXG4gICAgICAgIC5mZXRjaExpc3Qoe1xuICAgICAgICAgIHF1ZXJ5OiB0ZXJtLFxuICAgICAgICAgIGhhc1RvZCxcbiAgICAgICAgICBjb3VudHJ5Q29kZTogZ2JPbmx5ID8gJ0dCJyA6IG51bGwsXG4gICAgICAgICAgZXhjbHVkZUh1YlN0YXRpb25zOiBleGNsdWRlSHViU3RhdGlvbnMsXG4gICAgICAgICAgZ2V0QWxsU3RhdGlvbnM6IGdldEFsbFN0YXRpb25zICYmICFnYk9ubHlcbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICBtYXAoKHJlc3VsdHM6IFNlYXJjaFJhaWxTdGF0aW9uc1Jlc3VsdEFycmF5KTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xuICAgICAgICAgICAgaWYgKGlzTG9hZGluZykge1xuICAgICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0c1xuICAgICAgICAgICAgICA/IHJlc3VsdHNcbiAgICAgICAgICAgICAgICAgIC5tYXAoKHJlc3VsdDogU2VhcmNoUmFpbFN0YXRpb25zUmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAhZXVPbmx5IHx8XG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmxvY2F0aW9uRGV0YWlscy5jb3VudHJ5Q29kZSAhPT0gJ0dCJyB8fFxuICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGF0aW9uQ29kZSA9PT0gJ1NUUCdcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuVHJhaW5TdGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWlsc3RhdGlvbjogcmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoc3RhdGlvbiA9PiBzdGF0aW9uKSAvLyByZW1vdmUgdW5kZWZpbmVkXG4gICAgICAgICAgICAgIDogW107XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICB9XG4gIH1cblxuICBnZXRSYWlsU3RhdGlvbkJ5SWQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Z3JhcGhxbFR5cGVzLlJhaWxTdGF0aW9uPiB7XG4gICAgaWYgKGlkKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSYWlsU3RhdGlvbkZldGNoZXIuZmV0Y2hMaXN0KHsgaWQgfSkucGlwZSh0YWtlKDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCBpcmwgc3RhdGlvbiBsb2NhdGlvbnNcbiAgICogQHBhcmFtIHRlcm0gLSB0aGUgdGVybSB0byBzZWFyY2hcbiAgICogQHBhcmFtIGlzTG9hZGluZyAtIEJlaGF2aW9yU3ViamVjdCBzbyB3ZSBrbm93IHNvbWV0aGluZyBpcyBoYXBwZW5pbmdcbiAgICovXG4gIHNlYXJjaElybFN0YXRpb25zTG9jYXRpb25zKFxuICAgIHRlcm06IHN0cmluZyxcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xuICAgIGlmICh0ZXJtLmxlbmd0aCA+IDIpIHtcbiAgICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaElybFN0YXRpb25zRmV0Y2hlclxuICAgICAgICAuZmV0Y2hMaXN0KHtcbiAgICAgICAgICBxdWVyeTogdGVybVxuICAgICAgICB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgIG1hcCgocmVzdWx0czogZ3JhcGhxbFR5cGVzLklybFN1cHBsaWVyU3RhdGlvbltdKTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xuICAgICAgICAgICAgaWYgKGlzTG9hZGluZykge1xuICAgICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdDogZ3JhcGhxbFR5cGVzLklybFN1cHBsaWVyU3RhdGlvbikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuVHJhaW5TdGF0aW9uLFxuICAgICAgICAgICAgICAgIG5hbWU6IGAke3Jlc3VsdC5uYW1lfSAoJHtyZXN1bHQuc3VwcGxpZXJ9KWAsXG4gICAgICAgICAgICAgICAgcmFpbHN0YXRpb246IHJlc3VsdFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICB9XG4gIH1cblxuICBnZXRIb3RlbExvY2F0aW9uc0FuZFBvc3Rjb2Rlc0xpc3QoKSB7fVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IGhvdGVsIGxvY2F0aW9ucywgdGhlc2Ugc2hvdWxkIGJlIGNpdHksIG9mZmljZSwgYWlycG9ydCwgcmFpbHN0YXRpb25cbiAgICogQHRvZG8gLSBmaWxsIHRoaXMgb3V0IGZvciB0aGUgb3RoZXIgbG9jYXRpb24gdHlwZXMsIG1heSBuZWVkIHRvIG1lcmdlTWFwIHRoZW0gb3Igc29tZSBvdGhlciByeGpzIG1hZ2ljXG4gICAqIEBwYXJhbSB0ZXJtIC0gdGhlIHRlcm0gdG8gc2VhcmNoIGJ5IGUuZy4gJ01hbicgc2hvdWxkIGJyaW5nIGJhY2ssIG1hbmNoZXN0ZXIsIG1hbmNoZXN0ZXIgYWlycG9ydCwgbWFuY2hlc3RlciBwaWNhZGlsbHksIGV0Y1xuICAgKi9cbiAgZ2V0SG90ZWxMb2NhdGlvbnNMaXN0KFxuICAgIHRlcm06IHN0cmluZyxcbiAgICBjb3VudHJ5Q29kZTogQ291bnRyeUNvZGUsXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcbiAgICBpZiAoXG4gICAgICB0ZXJtLmxlbmd0aCA+PSAyICYmXG4gICAgICAoUmVnRXhwcy5VS19QT1NUQ09ERS50ZXN0KHRlcm0pIHx8IFJlZ0V4cHMuUEFSVElBTF9VS19QT1NUQ09ERS50ZXN0KHRlcm0pKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9zdGNvZGVMaXN0KHRlcm0sIGNvdW50cnlDb2RlKTtcbiAgICB9IGVsc2UgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xuICAgICAgaWYgKCFpc0xvYWRpbmc/LnZhbHVlKSB7XG4gICAgICAgIGlzTG9hZGluZy5uZXh0KHRydWUpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3VicyA9IGZvcmtKb2luKFtcbiAgICAgICAgdGhpcy5nZXRBaXJwb3J0TG9jYXRpb25zKHRlcm0sIGNvdW50cnlDb2RlLCBpc0xvYWRpbmcpLFxuICAgICAgICB0aGlzLmdldENpdHlMb2NhdGlvbnMoXG4gICAgICAgICAgdGVybSxcbiAgICAgICAgICBjb3VudHJ5Q29kZSxcbiAgICAgICAgICBpc0xvYWRpbmdcbiAgICAgICAgKSxcbiAgICAgICAgdGhpcy5nZXRTdGF0aW9uTG9jYXRpb25zKHRlcm0sIGlzTG9hZGluZyksXG4gICAgICAgIHRoaXMuZ2V0T2ZmaWNlTG9jYXRpb25zKClcbiAgICAgIF0pLnBpcGUoXG4gICAgICAgIG1hcCgocmVzdWx0czogYW55W10pID0+IHtcbiAgICAgICAgICBpZiAoaXNMb2FkaW5nPy52YWx1ZSkge1xuICAgICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cy5yZWR1Y2UoKGFjY3VtOiBMb2NhdGlvbkRldGFpbHNbXSwgcmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGFjY3VtLnB1c2goLi4ucmVzdWx0KTtcbiAgICAgICAgICAgIHJldHVybiBhY2N1bTtcbiAgICAgICAgICB9LCBbXSk7XG4gICAgICAgIH0pXG4gICAgICApOyAvLyBleHBhbmQgdGhpcyB3aXRoIHRoZSBvdGhlciBzZWFyY2hlcyB3aGVuIHRoZXkgYXJlIGRvbmVcbiAgICAgIHJldHVybiBzdWJzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2YoW10pO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0YXRpb25zQW5kQWlycG9ydHNMaXN0KFxuICAgIHRlcm06IHN0cmluZyxcbiAgICBjb3VudHJ5Q29kZTogQ291bnRyeUNvZGUsXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcbiAgICBpZiAodGVybS5sZW5ndGggPiAyKSB7XG4gICAgICBpZiAoIWlzTG9hZGluZz8udmFsdWUpIHtcbiAgICAgICAgaXNMb2FkaW5nLm5leHQodHJ1ZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWJzID0gZm9ya0pvaW4oW1xuICAgICAgICB0aGlzLmdldEFpcnBvcnRMb2NhdGlvbnModGVybSwgY291bnRyeUNvZGUsIGlzTG9hZGluZyksXG4gICAgICAgIHRoaXMuZ2V0U3RhdGlvbkxvY2F0aW9ucyh0ZXJtLCBpc0xvYWRpbmcpXG4gICAgICBdKS5waXBlKFxuICAgICAgICBtYXAoKHJlc3VsdHM6IGFueVtdKSA9PiB7XG4gICAgICAgICAgaWYgKGlzTG9hZGluZz8udmFsdWUpIHtcbiAgICAgICAgICAgIGlzTG9hZGluZy5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHMucmVkdWNlKChhY2N1bTogYW55W10sIHJlc3VsdDogYW55W10pID0+IHtcbiAgICAgICAgICAgIGFjY3VtLnB1c2goLi4ucmVzdWx0KTtcbiAgICAgICAgICAgIHJldHVybiBhY2N1bTtcbiAgICAgICAgICB9LCBbXSk7XG4gICAgICAgIH0pXG4gICAgICApOyAvLyBleHBhbmQgdGhpcyB3aXRoIHRoZSBvdGhlciBzZWFyY2hlcyB3aGVuIHRoZXkgYXJlIGRvbmVcbiAgICAgIHJldHVybiBzdWJzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2YoW10pO1xuICAgIH1cbiAgfVxuXG4gIC8qXG4gIEBkZXNjIC0gcmVtb3ZlIGEgc3BlY2lmaWVkIHRyYXZlbGxlciBmcm9tIHRoZSBzZWxlY3RlZCBhcnJheVxuICAqKi9cbiAgcmVtb3ZlVHJhdmVsbGVyKHRyYXZlbGxlcjogVHJhdmVsbGVyKTogdm9pZCB7XG4gICAgdGhpcy5fcmVtb3ZlVHJhdmVsbGVyKHRyYXZlbGxlcik7XG5cbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxuICAgICAgQmFzZUVudGVycHJpc2VTZWFyY2hTZXJ2aWNlLlNFU1NJT05fVFJBVkVMTEVSLFxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNcbiAgICApO1xuICAgIGlmICh0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdKSB7XG4gICAgICB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdLnJlbW92ZVRyYWlubGluZVRyYXZlbGxlcih0cmF2ZWxsZXIuaWQpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlckluZm9ybWF0aW9uKCk7XG4gIH1cblxuICBfcmVtb3ZlVHJhdmVsbGVyKHRyYXZlbGxlcjogVHJhdmVsbGVyKSB7XG4gICAgLy8gISAtIFNob3VsZCBvbmx5IGJlIGFibGUgdG8gcmVtb3ZlIGludm9rZWQgdXNlciBpZiB1c2VyIGlzIGFuIGFnZW50IC0gb3RoZXJ3aXNlIHRoZXkgYXJlIHJlcXVpcmVkLlxuICAgIGlmIChcbiAgICAgIHRoaXMudXNlclNlcnZpY2UuYm9ibyAmJlxuICAgICAgdGhpcy51c2VyU2VydmljZS5ib2JvLmlkID09PSB0cmF2ZWxsZXIuaWQgJiZcbiAgICAgICF0aGlzLnVzZXJTZXJ2aWNlLnVzZXJJc0FnZW50KClcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycyA9IHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmZpbHRlcigodHJhdmVsbGVyVG9UZXN0OiBUcmF2ZWxsZXIpID0+IHtcbiAgICAgIHJldHVybiAhVHJhdmVsbGVyT2JqZWN0LmVxdWFscyh0cmF2ZWxsZXJUb1Rlc3QsIHRyYXZlbGxlcik7XG4gICAgfSk7XG4gIH1cblxuICByZW1vdmVBbGxUcmF2ZWxsZXJzKCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdyZW1vdmUgYWxsIHRyYXZlbGxlcnMgY2FsbGVkIScpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzKTtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycyA9IFtdO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5mb3JFYWNoKCh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT4ge1xuICAgICAgdGhpcy5fcmVtb3ZlVHJhdmVsbGVyKHRyYXZlbGxlcik7XG4gICAgfSk7XG5cbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxuICAgICAgQmFzZUVudGVycHJpc2VTZWFyY2hTZXJ2aWNlLlNFU1NJT05fVFJBVkVMTEVSLFxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNcbiAgICApO1xuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVySW5mb3JtYXRpb24oKTtcbiAgICBpZiAodGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXSkge1xuICAgICAgdGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXS50cmFpbmxpbmVUcmF2ZWxsZXJzID0gW107XG4gICAgfVxuICB9XG5cbiAgYWRkVHJhdmVsbGVyKHRyYXZlbGxlcjogVHJhdmVsbGVyLCBpc0dVVDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKFxuICAgICAgKCF0aGlzLnRyYXZlbGxlckFscmVhZHlBZGRlZCh0cmF2ZWxsZXIpICYmXG4gICAgICAgICF0aGlzLmN1cnJlbnROb09mVHJhdmVsbGVyc0dyZWF0ZXJPckVxdWFsVG9NYXgoKSkgfHxcbiAgICAgIGlzR1VUXG4gICAgKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5wdXNoKHRyYXZlbGxlcik7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxuICAgICAgICBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2UuU0VTU0lPTl9UUkFWRUxMRVIsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzXG4gICAgICApO1xuICAgICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJJbmZvcm1hdGlvbigpO1xuICAgICAgaWYgKHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0pIHtcbiAgICAgICAgdGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXS5zZXR1cFRyYWlubGluZUVVVHJhdmVsbGVycygpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLnRyYXZlbGxlckFscmVhZHlBZGRlZCh0cmF2ZWxsZXIpICYmXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLmJvYm8/LmlkID09PSB0cmF2ZWxsZXIuaWQgJiZcbiAgICAgICF0aGlzLnVzZXJTZXJ2aWNlLnVzZXJJc0FnZW50KClcbiAgICApIHtcbiAgICAgIHRoaXMudXBkYXRlVHJhdmVsbGVySW5mb3JtYXRpb24oKTtcbiAgICAgIGlmICh0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0uc2V0dXBUcmFpbmxpbmVFVVRyYXZlbGxlcnMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY3VycmVudE5vT2ZUcmF2ZWxsZXJzR3JlYXRlck9yRXF1YWxUb01heCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoID49IHRoaXMubWF4VHJhdmVsbGVycygpO1xuICB9XG5cbiAgbWF4VHJhdmVsbGVycygpOiBudW1iZXIge1xuICAgIGNvbnN0IHNhbWVUcmF2ZWxsZXNyUGVyQmFza2V0OiBhbnkgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdChcbiAgICAgIFVzZXJGYXZvcnVyaXRlLkFsbG93U2FtZVRyYXZlbGxlc3JQZXJCYXNrZXRcbiAgICApO1xuICAgIGlmIChzYW1lVHJhdmVsbGVzclBlckJhc2tldCAmJiBzYW1lVHJhdmVsbGVzclBlckJhc2tldFsnc2FtZVRyYXZlbGxlcnMnXSkge1xuICAgICAgTUFYX1RSQVZFTExFUlMgPSArc2FtZVRyYXZlbGxlc3JQZXJCYXNrZXRbJ3NhbWVUcmF2ZWxsZXJzJ107XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVOVC05MTI3IGRlZmF1bHRzIHRvIDhcbiAgICAgIE1BWF9UUkFWRUxMRVJTID0gODtcbiAgICB9XG5cbiAgICByZXR1cm4gLyp0aGlzLnVzZXJTZXJ2aWNlLnVzZVRyYXZlbGxlclByb2ZpbGUgJiYqLyB0aGlzLmNhblVzZVRyYXZlbGxlclByb2ZpbGUoKVxuICAgICAgPyAxXG4gICAgICA6IE1BWF9UUkFWRUxMRVJTO1xuICB9XG4gIC8qXG4gICAgQGRlc2MgLSBoZWxwZXIgZnVuY3Rpb24gLSBkZXRlcm1pbmVzIGlmIGEgc2VsZWN0ZWQgdHJhdmVsbGVyIGlzIGFscmVhZHkgYWRkZWQgLVxuICAgIHVzZWQgdG8gcHJldmVudCBzYW1lIHRyYXZlbGxlciBiZWluZyBhZGRlZCBtb3JlIHRoYW4gb25jZVxuICAqKi9cbiAgdHJhdmVsbGVyQWxyZWFkeUFkZGVkKHRyYXZlbGxlcjogVHJhdmVsbGVyKTogYm9vbGVhbiB7XG4gICAgLy8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBzZWxlY3RlZCB0cmF2ZWxsZXJzIGFuZCByZXR1cm4gdHJ1ZSBpZiBmb3VuZCwgZmFsc2Ugb3RoZXIgd2lzZVxuICAgIHJldHVybiAhIXRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmZpbmQoKHRyYXZlbGxlcnM6IFRyYXZlbGxlcikgPT5cbiAgICAgIFRyYXZlbGxlck9iamVjdC5lcXVhbHModHJhdmVsbGVycywgdHJhdmVsbGVyKVxuICAgICk7XG4gIH1cblxuICBjYW5Vc2VUcmF2ZWxsZXJQcm9maWxlKCk6IGJvb2xlYW4ge1xuICAgIC8qXG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UuaXNVc2VyRmF2b3JpdGVTZXQoVXNlckZhdm9ydXJpdGUuRG9udFVzZVRyYXZlbGxlclBvbGljeSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdXNlciA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckRldGFpbHMoKTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoID09PSAxICYmXG4gICAgICAhdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNbMF1cbiAgICAgICAgLmd1ZXN0IC8qJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzWzBdLnBheF9pZCAmJlxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNbMF0ucGF4X2lkICE9PSB1c2VyLlBheElkXG4gICAgKTsqL1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldEN1cnJlbnROb09mVHJhdmVsbGVycygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5sZW5ndGg7XG4gIH1cblxuICBpc1NpbmdsZVRyYXZlbGxlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDdXJyZW50Tm9PZlRyYXZlbGxlcnMoKSA9PT0gMTtcbiAgfVxuXG4gIGlzTXVsdGlwbGVUcmF2ZWxsZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnROb09mVHJhdmVsbGVycygpID4gMTtcbiAgfVxuXG4gIHVwZGF0ZVRyYXZlbGxlckluZm9ybWF0aW9uKCkge1xuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXG4gICAgICBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2UuU0VTU0lPTl9UUkFWRUxMRVIsXG4gICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1xuICAgICk7XG4gICAgdGhpcy50cmF2ZWxsZXJJbmZvcm1hdGlvbi5uZXh0KFsuLi50aGlzLnNlbGVjdGVkVHJhdmVsbGVyc10pO1xuXG4gICAgaWYgKHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0pIHtcbiAgICAgIHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0ucmFpbENhcmRzID0gbmV3IEFycmF5KHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aCkuZmlsbChcbiAgICAgICAgeyBuYW1lOiAnJywgY29kZTogJycgfSxcbiAgICAgICAgMCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qXG4gICAqICBAZGVzYyAtIGRldGVybWluZSBhbmQgcmV0dXJuIHRoZSBoaWdoZXN0IHByaW9yaXR5IHZhbHVlLFxuICAgKiAgIHRoZSBoaWdoZXN0IGlzIGJhc2VkIG9uIHRoZSBwcmlvcml0eSB2YWx1ZSBvZiB0aGUgc2VhcmNoIHR5cGUsXG4gICAqICAgIGlmIGl0IGlzIGNob3NlbiBhbmQgaWYgdGhlIGJvb2tpbmcgaGFzIG5vdCBiZWVuIGNob3NlblxuICAgKiovXG4gIGRldGVybWluZUhpZ2hlc3RTZWFyY2hQcmlvcml0eSgpOiBudW1iZXIge1xuICAgIHJldHVybiAodGhpcy5oaWdoZXN0X3NlYXJjaF9wcmlvcml0eSA9IHRoaXMuX2dldEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdCgpLmhpZ2hlc3QpO1xuICB9XG5cbiAgcmVzZXRTZWFyY2hQcmlvcml0aWVzKCk6IHZvaWQge1xuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnNlYXJjaF9vYmplY3RzKS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2VhcmNoX29iamVjdHMuRkxJR0hULnByaW9yaXR5ID0gMTtcbiAgICAgIHRoaXMuc2VhcmNoX29iamVjdHMuUkFJTC5wcmlvcml0eSA9IDI7XG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzLkVVUk9TVEFSLnByaW9yaXR5ID0gMztcbiAgICAgIHRoaXMuc2VhcmNoX29iamVjdHMuSE9URUwucHJpb3JpdHkgPSA0O1xuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0cy5DQVIucHJpb3JpdHkgPSA1O1xuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0cy5GQVNUX1RSQUNLLnByaW9yaXR5ID0gNjtcbiAgICAgIHRoaXMuc2VhcmNoX29iamVjdHMuTE9VTkdFLnByaW9yaXR5ID0gNztcbiAgICAgIHRoaXMuc2VhcmNoX29iamVjdHMuUEFSS0lORy5wcmlvcml0eSA9IDg7XG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzLklOVEVSTkFUSU9OQUxfUkFJTC5wcmlvcml0eSA9IDk7XG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzLkNBQi5wcmlvcml0eSA9IDEwO1xuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0cy5DT0FDSC5wcmlvcml0eSA9IDExO1xuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0cy5GRVJSWS5wcmlvcml0eSA9IDEyO1xuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0cy5MT05HX1NUQVlTLnByaW9yaXR5ID0gMTM7XG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzLlNFQVNPTl9USUNLRVQucHJpb3JpdHkgPSAxNDtcbiAgICAgIHRoaXMuc2VhcmNoX29iamVjdHMuTUVFVElOR19ST09NLnByaW9yaXR5ID0gMTU7XG4gICAgfVxuICB9XG5cbiAgZ2V0SGlnaGVzdFNlYXJjaFByaW9yaXR5T2JqZWN0KFxuICAgIGJhc2tldEl0ZW1zOiBSZWNvcmQ8Z3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLCBncmFwaHFsVHlwZXMuQmFza2V0SXRlbT5cbiAgKTogU2VhcmNoT2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0SGlnaGVzdFNlYXJjaFByaW9yaXR5T2JqZWN0KGJhc2tldEl0ZW1zKS5jdXJyZW50SXRlbTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdChcbiAgICBiYXNrZXRJdGVtczogUmVjb3JkPGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZSwgZ3JhcGhxbFR5cGVzLkJhc2tldEl0ZW0+ID0ge30gYXMgUmVjb3JkPFxuICAgICAgZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLFxuICAgICAgZ3JhcGhxbFR5cGVzLkJhc2tldEl0ZW1cbiAgICA+XG4gICk6IEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdEludGVyZmFjZSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5zZWFyY2hfb2JqZWN0cykucmVkdWNlKFxuICAgICAgKHsgaGlnaGVzdCwgY3VycmVudEl0ZW0gfSwgaXRlbTogU2VhcmNoT2JqZWN0KSA9PiB7XG4gICAgICAgIGlmIChpdGVtLmNob3NlbiAmJiBpdGVtLnByaW9yaXR5IDwgaGlnaGVzdCkge1xuICAgICAgICAgIGlmICghYmFza2V0SXRlbXNbaXRlbS50eXBlIGFzIGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZV0pIHtcbiAgICAgICAgICAgIHJldHVybiB7IGhpZ2hlc3Q6IGl0ZW0ucHJpb3JpdHksIGN1cnJlbnRJdGVtOiBpdGVtIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZW0uY2hvc2VuID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGhpZ2hlc3QsIGN1cnJlbnRJdGVtIH07XG4gICAgICB9LFxuICAgICAgeyBoaWdoZXN0OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVudEl0ZW06IG51bGwgfVxuICAgICk7XG4gIH1cblxuICBnZXRTZWxlY3RlZE9wdGlvbnMoKTogZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnNlYXJjaF9vYmplY3RzKS5yZWR1Y2UoKGN2LCBpdGVtSW5kZXgpID0+IHtcbiAgICAgIGlmICgodGhpcy5zZWFyY2hfb2JqZWN0cyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtpdGVtSW5kZXhdPy5jaG9zZW4pIHtcbiAgICAgICAgY3YucHVzaChpdGVtSW5kZXggYXMgZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjdjtcbiAgICB9LCBbXSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHNlbGVjdGVkIHRyYXZlbGxlcnMgY29udGFpbnMgYW55IGd1ZXN0cyB3aXRob3V0IGFsbCBvZiBkZXRhaWxzXG4gICAqL1xuICBoYXNTaW1wbGVHdWVzdHMoKTogYm9vbGVhbiB7XG4gICAgLypyZXR1cm4gISF0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5maW5kKCh7IGd1ZXN0LCBwaG9uZSwgbmF0aW9uYWxpdHksIGVtYWlsIH0pID0+IHtcbiAgICAgIHJldHVybiBndWVzdCAmJiAhKCEhZW1haWwgJiYgISFwaG9uZSAmJiAhIW5hdGlvbmFsaXR5KTtcbiAgICB9KTsqL1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBzZXQgdGhlIHNlYXJjaCBvYmplY3RzIHRvIHRoZSBnZXQgbWUgdGhlcmUgb2JqZWN0cyAtIGNhbGxlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIGdldCBtZSB0aGVyZSBzZWFyY2hlc1xuICAgKi9cbiAgc2V0R2V0TWVUaGVyZVNlYXJjaE9iamVjdHMoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJysrKyBTZXR0aW5nIEdldE1lVGhlcmUgU2VhcmNoIE9iamVjdHMgKysrJyk7XG4gICAgdGhpcy5zZWFyY2hfb2JqZWN0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmdldE1lVGhlcmVTZWFyY2hPYmplY3RzKCkpO1xuICB9XG5cbiAgcmVzZXRTZWFyY2hQYXJhbXMoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1Jlc2V0aW5nIFNlYXJjaCBQYXJhbXMhJyk7XG4gICAgdGhpcy5zZWFyY2hfb2JqZWN0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmluaXRfc2VhcmNoX29iamVjdHMoKSk7XG4gICAgLy8gdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcbiAgICAvLyAgIEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZS5TRVNTSU9OX1RSQVZFTExFUixcbiAgICAvLyAgIHRoaXMuc2VhcmNoX29iamVjdHNcbiAgICAvLyApO1xuICAgIE9iamVjdC52YWx1ZXModGhpcy5zZWFyY2hlcykuZm9yRWFjaChcbiAgICAgIChwcm9kdWN0U2VhcmNoU2VydmljZTogQmFzZUVudGVycHJpc2VTZWFyY2g8YW55LCBhbnksIGFueVtdPikgPT4ge1xuICAgICAgICBwcm9kdWN0U2VhcmNoU2VydmljZT8ucmVzZXQoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgY2FuU2VhcmNoKHR5cGU6IGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZSB8IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIGNoZWNrIHRoYXQgdGhlIHNlbGVjdGVkIHR5cGUgaXMgY2hvc2VuLCBoYXMgaGlnaGVzdCBwcmlvcml0eSBhbmQgaGFzIG5vdCBhbHJlYWR5IGhhZCBhIGJvb2tpbmcgY2hvc2VuXG5cbiAgICB0aGlzLmRldGVybWluZUhpZ2hlc3RTZWFyY2hQcmlvcml0eSgpO1xuICAgIC8vIGZpcnN0bHkgY2hlY2sgdGhhdCB0aGUgdHlwZSBvZiBzZWFyY2ggZXhpc3RzXG4gICAgaWYgKCh0aGlzLnNlYXJjaF9vYmplY3RzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3R5cGVdKSB7XG4gICAgICBjb25zb2xlLmxvZygnY2FuIHNlYXJjaCBoZXJlJyk7XG4gICAgICAvLyBub3cgY2hlY2sgdGhhdCB0aGUgdHlwZSBpcyBjaG9zZW4gaGFzIGhpZ2hlc3QgcHJpb3JpdHlcbiAgICAgIGlmIChcbiAgICAgICAgKHRoaXMuc2VhcmNoX29iamVjdHMgYXMgUmVjb3JkPHN0cmluZywgYW55PilbdHlwZV0/LmNob3NlbiAmJlxuICAgICAgICB0aGlzLmhhc0hpZ2hlc3RTZWFyY2hQcmlvcml0eSgodGhpcy5zZWFyY2hfb2JqZWN0cyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVt0eXBlXT8ucHJpb3JpdHkpXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS5sb2codHlwZSArICcgY2FuIGJlIHNlYXJjaGVkJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBoYXNIaWdoZXN0U2VhcmNoUHJpb3JpdHkocHJpb3JpdHlWYWw6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHRoaXMuZGV0ZXJtaW5lSGlnaGVzdFNlYXJjaFByaW9yaXR5KCk7XG4gICAgcmV0dXJuIHByaW9yaXR5VmFsIDw9IHRoaXMuaGlnaGVzdF9zZWFyY2hfcHJpb3JpdHk7XG4gIH1cblxuICAvKlxuICAgKiAgQGRlc2MgLSBjb25jYXRpbmF0cyBhbGwgdGhlIHZhbGlkYXRpb24gbWVzc2FnZXMgYWNyb3NzIGFsbCBzZWxlY3RlZCB0eXBlcyArXG4gICAqICAgdHJhdmVsbGVycyAob3Igd2lsbCBkbyB3aGVuIGl0J3MgY29tcGxldGUpIFRPRE8gLSBhZGQgRmxpZ2h0LCBSYWlsIENhclxuICAgKiovXG4gIGdldEFsbEVycm9yTWVzc2FnZXMoaXNGYXZvdXJpdGU6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjb25jYXR0ZWRFcnJvcnM6IHN0cmluZ1tdID0gT2JqZWN0LmVudHJpZXModGhpcy5zZWFyY2hfb2JqZWN0cykucmVkdWNlKFxuICAgICAgKGFjY3VtOiBzdHJpbmdbXSwgW3R5cGUsIHNlYXJjaE9iamVjdF06IFtzdHJpbmcsIFNlYXJjaE9iamVjdF0pID0+IHtcbiAgICAgICAgY29uc3Qgc2VhcmNoID0gdGhpcy5zZWFyY2hlc1t0eXBlIGFzIGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZV07XG4gICAgICAgIGxldCBtZXNzYWdlcyA9IHNlYXJjaCA/IFxuICAgICAgICAoIWlzRmF2b3VyaXRlID8gc2VhcmNoLnZhbGlkYXRpb25NZXNzYWdlcyA6IHNlYXJjaC52YWxpZGF0aW9uRmF2b3VyaXRlTWVzc2FnZXMpIDogXG4gICAgICAgIFtdO1xuICAgICAgICBpZiAoc2VhcmNoT2JqZWN0Py5jaG9zZW4gJiYgdGhpcy5jYW5TZWFyY2godHlwZSkpIHtcbiAgICAgICAgICBhY2N1bS5wdXNoKC4uLm1lc3NhZ2VzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICB9LFxuICAgICAgdGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXNcbiAgICApO1xuXG4gICAgY29uc3QgdW5pcXVlRXJyb3JzID0gWy4uLm5ldyBTZXQoY29uY2F0dGVkRXJyb3JzKV07XG4gICAgdGhpcy5lcnJvcnMubmV4dCh1bmlxdWVFcnJvcnMpO1xuICAgIHJldHVybiB1bmlxdWVFcnJvcnM7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhdmVsbGVyc0NvbnRhaW5Vc2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmZpbmQoKHRyYXZlbGxlcjogVHJhdmVsbGVyKSA9PiB7XG4gICAgICByZXR1cm4gdHJhdmVsbGVyLmlkID09PSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJJZCgpLnRvU3RyaW5nKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGVUcmF2ZWxsZXJzKCk6IGJvb2xlYW4ge1xuICAgIHRoaXMudHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XG5cbiAgICBzd2l0Y2ggKHRoaXMudXNlclNlcnZpY2UuZnVsbFVzZXJEZXRhaWxzLnVzZXJEYXRhLnZhbHVlLmJvb2tlcl90eXBlKSB7XG4gICAgICBjYXNlIGdyYXBocWxUeXBlcy5Cb29rZXJUeXBlLlNlbGZCb29rOlxuICAgICAgICBpZiAoISh0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5sZW5ndGggPT09IDEgJiYgdGhpcy50cmF2ZWxsZXJzQ29udGFpblVzZXIoKSkpIHtcbiAgICAgICAgICAvLyB0aGlzIHNob3VsZCBuZXZlciB0cmlnZ2VyIHVuZGVyIG5vcm1hbCBjb25kaXRpb25zIGFzIHRoZSB1c2VyIHNob3VsZCBiZSBsb2FkZWQgaW4gYXMgYSB0cmF2ZWxsZXIgb24gbG9naW5cbiAgICAgICAgICB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdDdXJyZW50IHVzZXIgbXVzdCBiZSBhIHRyYXZlbGxlcicpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIGdyYXBocWxUeXBlcy5Cb29rZXJUeXBlLkJvb2tlcldpdGhTZWxmOlxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoIDwgMSB8fCAhdGhpcy50cmF2ZWxsZXJzQ29udGFpblVzZXIoKSkge1xuICAgICAgICAgIHRoaXMudHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBhZGQgeW91ciBzZWxmLicpO1xuICAgICAgICAgIHRoaXMudHJhdmVsbGVyX2Vycm9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZ3JhcGhxbFR5cGVzLkJvb2tlclR5cGUuRGl2aXNpb246XG4gICAgICBjYXNlIGdyYXBocWxUeXBlcy5Cb29rZXJUeXBlLkJvb2tlcjpcbiAgICAgIGNhc2UgZ3JhcGhxbFR5cGVzLkJvb2tlclR5cGUuQ29tcGFueTpcbiAgICAgIGNhc2UgZ3JhcGhxbFR5cGVzLkJvb2tlclR5cGUuQ29tcGFueUdyb3VwOlxuICAgICAgY2FzZSBncmFwaHFsVHlwZXMuQm9va2VyVHlwZS5PZmZpY2U6XG4gICAgICBjYXNlIGdyYXBocWxUeXBlcy5Cb29rZXJUeXBlLlRtYzpcbiAgICAgIGNhc2UgZ3JhcGhxbFR5cGVzLkJvb2tlclR5cGUuUm9vdDpcbiAgICAgICAgaWYgKCEodGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoID49IDEpKSB7XG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgdHJhdmVsbGVyJyk7XG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJfZXJyb3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnVW5yZWNvZ25pc2VkIHVzZXIgdHlwZSEgLSBQbGVhc2UgY29udGFjdCBzdXBwb3J0LicpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMudHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzKTtcbiAgICByZXR1cm4gdGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgZmluZFBheEluVHJhdmVsbGVycyh1c2VybmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmZpbmQoKHRyYXZlbGxlcjogVHJhdmVsbGVyKSA9PiB7XG4gICAgICByZXR1cm4gdXNlcm5hbWUgPT09IHRyYXZlbGxlci5lbWFpbDtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlRm9ybXMoaXNGYXZvdXJpdGU6IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlYXJjaE9iamVjdDogU2VhcmNoT2JqZWN0ID0gdGhpcy5fZmluZFNlYXJjaE9idGVjdCgpO1xuICAgIGNvbnN0IHRyYXZlbGxlcnNWYWxpZCA9ICFpc0Zhdm91cml0ZSA/IHRoaXMudmFsaWRhdGVUcmF2ZWxsZXJzKCkgOiBpc0Zhdm91cml0ZTtcbiAgICB0aGlzLmdldEFsbEVycm9yTWVzc2FnZXMoaXNGYXZvdXJpdGUpO1xuICAgIGlmIChzZWFyY2hPYmplY3QpIHtcbiAgICAgIGlmICh0aGlzLmVycm9ycyAmJiB0aGlzLmVycm9ycy52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgbGV0IG5ld0Vycm9ycyA9ICFpc0Zhdm91cml0ZSA/IHRoaXMuZXJyb3JzLnZhbHVlLmNvbmNhdChcbiAgICAgICAgICB0aGlzLnNlYXJjaGVzW3NlYXJjaE9iamVjdC50eXBlIGFzIGtleW9mIFNlYXJjaFBhcmFtc10ubWVzc2FnZXMudmFsdWVcbiAgICAgICAgKSA6IHRoaXMuc2VhcmNoZXNbc2VhcmNoT2JqZWN0LnR5cGUgYXMga2V5b2YgU2VhcmNoUGFyYW1zXS52YWxpZGF0aW9uRmF2b3VyaXRlTWVzc2FnZXM7XG4gICAgICAgIC8vIGFmdGVyIGNvbmNhdCBzaG93IG9ubHkgdW5pcXVlIGVycm9yc1xuICAgICAgICBuZXdFcnJvcnMgPSBbLi4ubmV3IFNldChuZXdFcnJvcnMpXTtcbiAgICAgICAgdGhpcy5lcnJvcnMubmV4dChuZXdFcnJvcnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvcnMubmV4dCh0aGlzLnNlYXJjaGVzW3NlYXJjaE9iamVjdC50eXBlIGFzIGtleW9mIFNlYXJjaFBhcmFtc10ubWVzc2FnZXMudmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgdHJhdmVsbGVyc1ZhbGlkICYmIHRoaXMuc2VhcmNoZXNbc2VhcmNoT2JqZWN0LnR5cGUgYXMga2V5b2YgU2VhcmNoUGFyYW1zXS5pc1ZhbGlkLnZhbHVlXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZmluZFNlYXJjaE9idGVjdCgpOiBTZWFyY2hPYmplY3QgfCBudWxsIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnNlYXJjaF9vYmplY3RzKS5maW5kKChvYmo6IFNlYXJjaE9iamVjdCkgPT4ge1xuICAgICAgcmV0dXJuICEhb2JqICYmIG9iai5wcmlvcml0eSA9PT0gdGhpcy5oaWdoZXN0X3NlYXJjaF9wcmlvcml0eSAmJiBvYmouY2hvc2VuO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhcnRTZWFyY2hlcyh1cmw/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm5ld1NlYXJjaFN0YXJ0ZWQubmV4dCh0cnVlKTtcbiAgICB0aGlzLnNlYXJjaF9sb2FkaW5nID0gdHJ1ZTtcbiAgICBsZXQgc2VhcmNoT2JqZWN0OiBTZWFyY2hPYmplY3Q7XG4gICAgc2VhcmNoT2JqZWN0ID0gdGhpcy5fZmluZFNlYXJjaE9idGVjdCgpO1xuICAgIGlmIChzZWFyY2hPYmplY3QpIHtcbiAgICAgIHNlYXJjaE9iamVjdC5jaG9zZW4gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbSgnc2VhcmNoX0VSTV90cmF2ZWxsZXJfdHlwZScpKSB7XG4gICAgICB0aGlzLmVybVRyYXZlbGxlclR5cGUgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxuICAgICAgICAnc2VhcmNoX0VSTV90cmF2ZWxsZXJfdHlwZSdcbiAgICAgICkgYXMgRXJtVHJhdmVsbGVyVHlwZTtcbiAgICB9XG5cbiAgICBpZiAoc2VhcmNoT2JqZWN0ICYmICF0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoc2VhcmNoT2JqZWN0LnJlc3VsdFVybCkpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtzZWFyY2hPYmplY3QucmVzdWx0VXJsXSk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIFByb21pc2UuYWxsKFxuICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoZXMpLm1hcCgoc2VhcmNoOiBCYXNlRW50ZXJwcmlzZVNlYXJjaDxhbnksIGFueSwgYW55W10+KSA9PiB7XG4gICAgICAgICAgcmV0dXJuICEhc2VhcmNoICYmXG4gICAgICAgICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW3NlYXJjaC50eXBlXSAmJlxuICAgICAgICAgICAgKHRoaXMuc2VhcmNoX29iamVjdHNbc2VhcmNoLnR5cGVdPy5jaG9zZW4gfHwgLy8gISAtIGNoZWNrIGhlcmUgZm9yIHNpbXVsdGFuZW91cyBzZWFyY2hlcyByYXRoZXIgdGhhbiBzZXR0aW5nIHRvIGNob3NlbiAtIHByZXZlbnRzIGdvaW5nIHRvIHRoZSBzZWFyY2ggZm9ybSBpZiBub3QgcGlja2VkXG4gICAgICAgICAgICAgIChzZWFyY2gudHlwZSA9PT0gU2VydmljZVR5cGUuUmFpbCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XT8ucmFpbEZyb21GbGlnaHRTZWFyY2hQZXJmb3JtZWQpIHx8XG4gICAgICAgICAgICAgIChzZWFyY2gudHlwZSA9PT0gU2VydmljZVR5cGUuRXVyb3N0YXIgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0/LmV1cm9zdGFyRnJvbUZsaWdodFNlYXJjaFBlcmZvcm1lZCkpXG4gICAgICAgICAgICA/IHNlYXJjaC5zdGFydFNlYXJjaCgpXG4gICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH0pXG4gICAgICApLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaF9sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VhcmNoTG9hZGluZ0RvbmUubmV4dCh0cnVlKTtcbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hlcy5JTlRFUk5BVElPTkFMX1JBSUwpIHtcbiAgICAgICAgICAgIHRoaXMuc3VibWl0SXJsRm9ybSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB0aGlzLmhpZ2hlc3Rfc2VhcmNoX3ByaW9yaXR5ID09PSB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkZlcnJ5XT8ucHJpb3JpdHlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3NlYXJjaE9iamVjdC5zZWFyY2hVcmxdKTtcbiAgICAgICAgICB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZlcnJ5XS5yZXNldCgpO1xuXG4gICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbFR5cGVzLk9mZmxpbmVSZXF1ZXN0RGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIHNpemU6ICdtZCcsXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYydcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB0aGlzLmhpZ2hlc3Rfc2VhcmNoX3ByaW9yaXR5ID09PSB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkxvbmdTdGF5c10/LnByaW9yaXR5XG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtzZWFyY2hPYmplY3Quc2VhcmNoVXJsXSk7XG4gICAgICAgICAgdGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Mb25nU3RheXNdLnJlc2V0KCk7XG5cbiAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE1vZGFsVHlwZXMuQXBhcnRtZW50UmVxdWVzdERpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgY2VudGVyZWQ6IHRydWUsXG4gICAgICAgICAgICBzaXplOiAnbWQnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdGhpcy5oaWdoZXN0X3NlYXJjaF9wcmlvcml0eSA9PT0gdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5TZWFzb25UaWNrZXRdPy5wcmlvcml0eVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbc2VhcmNoT2JqZWN0LnNlYXJjaFVybF0pO1xuICAgICAgICAgIHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuU2Vhc29uVGlja2V0XS5yZXNldCgpO1xuXG4gICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgICAgICAgIE1vZGFsVHlwZXMuT2ZmbGluZVJlcXVlc3REaWFsb2dDb21wb25lbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNlbnRlcmVkOiB0cnVlLFxuICAgICAgICAgICAgICBzaXplOiAnbWQnLFxuICAgICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRleHQ6ICdUaGFuayB5b3UgZm9yIHN1Ym1pdHRpbmcgeW91ciBTZWFzb24gVGlja2V0IHJlcXVlc3QgYm9va2luZyBlbnF1aXJ5LiBPbmUgb2Ygb3VyIHRyYXZlbCBjb25zdWx0YW50cyB3aWxsIGNoZWNrIHRoZSByZWxldmFudCBvcHRpb25zIHRoYXQgYXJlIGF2YWlsYWJsZSBhbmQgcmVzcG9uZCB0byB5b3Ugc2hvcnRseS4gSWYgeW91IGFyZSB0cmF2ZWxsaW5nIHdpdGhpbiB0aGUgbmV4dCA0OCBob3VycywgcGxlYXNlIGNvbnRhY3QgdGhlIHJlbGV2YW50IHRyYXZlbCB0ZWFtIGJ5IHRlbGVwaG9uZS4nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB0aGlzLmhpZ2hlc3Rfc2VhcmNoX3ByaW9yaXR5ID09PSB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLk1lZXRpbmdSb29tXT8ucHJpb3JpdHlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3NlYXJjaE9iamVjdC5zZWFyY2hVcmxdKTtcbiAgICAgICAgICB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLk1lZXRpbmdSb29tXS5yZXNldCgpO1xuXG4gICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2VcbiAgICAgICAgICAgIC5vcGVuKFxuICAgICAgICAgICAgICBNb2RhbFR5cGVzLk9mZmxpbmVSZXF1ZXN0RGlhbG9nQ29tcG9uZW50LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2VudGVyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgc2l6ZTogJ21kJyxcbiAgICAgICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYydcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6ICdUaGFuayB5b3UgZm9yIHN1Ym1pdHRpbmcgeW91ciBNZWV0aW5nIFJvb20gcmVxdWVzdCBib29raW5nIGVucXVpcnkuIE9uZSBvZiBvdXIgdHJhdmVsIGNvbnN1bHRhbnRzIHdpbGwgY2hlY2sgdGhlIHJlbGV2YW50IG9wdGlvbnMgdGhhdCBhcmUgYXZhaWxhYmxlIGFuZCByZXNwb25kIHRvIHlvdSBzaG9ydGx5LiBJZiB5b3UgYXJlIHRyYXZlbGxpbmcgd2l0aGluIHRoZSBuZXh0IDQ4IGhvdXJzLCBwbGVhc2UgY29udGFjdCB0aGUgcmVsZXZhbnQgdHJhdmVsIHRlYW0gYnkgdGVsZXBob25lLidcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLk1lZXRpbmdSb29tXS5jaG9zZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5pc0d1dE1lZXRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgIHRoaXMuZ3V0VHJhdmVsbGVycyA9IFtdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIHRoaXMuc2VhcmNoX2xvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VhcmNoTG9hZGluZ0RvbmUubmV4dCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBnZXRUYXhpU3RhdGlvbkxvY2F0aW9ucyhcbiAgICB0ZXJtOiBzdHJpbmcsXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XG4gICk6IE9ic2VydmFibGU8UmFpbEFpcnBvcnRbXT4ge1xuICAgIHJldHVybiB0ZXJtLmxlbmd0aCA8IDNcbiAgICAgID8gb2YoW10pXG4gICAgICA6IG9mKFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogJ01hbmNoZXN0ZXIgQWlycG90JyxcbiAgICAgICAgICAgIGlzYWlycG9ydDogdHJ1ZSxcbiAgICAgICAgICAgIHN1cHBsaWVyX2NvZGU6ICdNQU4nLFxuICAgICAgICAgICAgYWRkcmVzczogJ01hbmNoZXN0ZXIgQWlycG9ydCcsXG4gICAgICAgICAgICBwb3N0Y29kZTogJ005MCAxUVgnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogJ01hbmNoZXN0ZXIgUGljY2FkaWxseScsXG4gICAgICAgICAgICBpc2FpcnBvcnQ6IGZhbHNlLFxuICAgICAgICAgICAgc3VwcGxpZXJfY29kZTogJ01NQU4nLFxuICAgICAgICAgICAgYWRkcmVzczogJ01hbmNoZXN0ZXIgUGljY2FkaWxseScsXG4gICAgICAgICAgICBwb3N0Y29kZTogJ00xIDJQWidcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uOiAnTG9uZG9uIEhlYXRocm93JyxcbiAgICAgICAgICAgIGlzYWlycG9ydDogdHJ1ZSxcbiAgICAgICAgICAgIHN1cHBsaWVyX2NvZGU6ICdMSFInLFxuICAgICAgICAgICAgYWRkcmVzczogJ0xvbmRvbiBIZWF0aHJvdyBBaXJwb3J0JyxcbiAgICAgICAgICAgIHBvc3Rjb2RlOiAnVFc2IDFFVydcbiAgICAgICAgICB9XG4gICAgICAgIF0pO1xuICB9XG5cbiAgZ2V0QWRkcmVzc2VzKGlzTG9hZGluZzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KTogT2JzZXJ2YWJsZTxBZGRyZXNzRm9ybVtdPiB7XG4gICAgcmV0dXJuIG9mKFtcbiAgICAgIHtcbiAgICAgICAgSG91c2U6ICdDZWNpbCBDb3VydCcsXG4gICAgICAgIFN0cmVldDogJzI4LTM2IENlY2lsIFJvYWQnLFxuICAgICAgICBUb3duOiAnSGFsZScsXG4gICAgICAgIFBvc3RDb2RlOiAnV0ExNSA5UEInLFxuICAgICAgICBDb3VudHJ5OiAnVUsnXG4gICAgICB9XG4gICAgXSk7XG4gIH1cblxuICBnZXRVc2VyQWRkcmVzc2VzKGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiwgdG93bjogc3RyaW5nID0gJycpOiBPYnNlcnZhYmxlPEFkZHJlc3NGb3JtW10+IHtcbiAgICByZXR1cm4gdGhpcy51c2VyQWRkcmVzc2VzRmV0Y2hlci5mZXRjaExpc3Qoe3Rvd259KS5waXBlKFxuICAgICAgdGFrZSgxKSxcbiAgICAgIG1hcCgocmVzdWx0czogYW55KTogYW55ID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMubWFwKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBJRDogcmVzdWx0LmlkLFxuICAgICAgICAgICAgSG91c2U6IHJlc3VsdC5udW1iZXJPck5hbWUsXG4gICAgICAgICAgICBTdHJlZXQ6IHJlc3VsdC5zdHJlZXQsXG4gICAgICAgICAgICBUb3duOiByZXN1bHQudG93bixcbiAgICAgICAgICAgIFBvc3RDb2RlOiByZXN1bHQucG9zdGNvZGUsXG4gICAgICAgICAgICBDb3VudHJ5OiByZXN1bHQuY291bnRyeUNvZGUsXG4gICAgICAgICAgICBDb21wYW55OiByZXN1bHQuY29tcGFueSxcbiAgICAgICAgICAgIE9mZmljZTogcmVzdWx0Lm9mZmljZSxcbiAgICAgICAgICAgIFVzZXI6IHJlc3VsdC51c2VyXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBkZWxldGVVc2VyQWRkcmVzc0J5SUQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZURlbGV0ZVVzZXJBZGRyZXNzVXBkYXRlci51cGRhdGVPbmUoeyBpZDogaWQgfSk7XG4gIH1cblxuICBnZXRIb3RlbENoYWluKHRlcm06IHN0cmluZywgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xuICAgIGlmICh0ZXJtLmxlbmd0aCA+IDIpIHtcbiAgICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcbiAgICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxTZWFyY2hIb3RlbENoYWluc1Jlc3VsdEFycmF5PiA9IHRoaXMuc2VhcmNoSG90ZWxDaGFpbnNGZXRjaGVyLmZldGNoTGlzdChcbiAgICAgICAgeyBxdWVyeTogdGVybSB9XG4gICAgICApO1xuICAgICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBTZWFyY2hIb3RlbENoYWluc1Jlc3VsdEFycmF5KTogYW55W10gPT4ge1xuICAgICAgICBjb25zdCBkYXRhOiBhbnlbXSA9IHJlc3VsdHMubWFwKChyZXN1bHQ6IFNlYXJjaEhvdGVsQ2hhaW5zUmVzdWx0KTogYW55ID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogcmVzdWx0XG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlzTG9hZGluZz8ubmV4dChmYWxzZSk7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xuICAgIH1cblxuICAgIHJldHVybiBvZihbXSk7XG4gIH1cblxuICBnZXRBbGxIb3RlbENoYWlucygpOiBPYnNlcnZhYmxlPGFueVtdPiB7XG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPEdldEhvdGVsQ2hhaW5zUmVzdWx0QXJyYXk+ID0gdGhpcy5nZXRIb3RlbENoYWluc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBHZXRIb3RlbENoYWluc1Jlc3VsdEFycmF5KTogYW55W10gPT4ge1xuICAgICAgY29uc3QgZGF0YTogYW55W10gPSByZXN1bHRzLm1hcCgocmVzdWx0OiBHZXRIb3RlbENoYWluc1Jlc3VsdCk6IGFueSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogcmVzdWx0XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XG4gIH1cblxuICBnZXRBbGxSYWlsUHJvdmlkZXJzKCk6IE9ic2VydmFibGU8YW55W10+IHtcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8Z2V0UmFpbFByb3ZpZGVyc1Jlc3VsdEFycmF5PiA9IHRoaXMuZ2V0UmFpbFByb3ZpZGVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBnZXRSYWlsUHJvdmlkZXJzUmVzdWx0QXJyYXkpOiBhbnlbXSA9PiB7XG4gICAgICBjb25zdCBkYXRhOiBhbnlbXSA9IHJlc3VsdHMubWFwKChyZXN1bHQ6IGdldFJhaWxQcm92aWRlcnNSZXN1bHQpOiBhbnkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IHJlc3VsdFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xuICB9XG5cbiAgZ2V0Q2FySGlyZVByb2l2ZGVycygpOiBPYnNlcnZhYmxlPGFueVtdPiB7XG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPEdldENhckhpcmVQcm92aWRlcnNSZXN1bHRBcnJheT4gPVxuICAgICAgdGhpcy5nZXRDYXJIaXJlUHJvdmlkZXJzRmV0Y2hlci5mZXRjaExpc3QoKTtcbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IEdldENhckhpcmVQcm92aWRlcnNSZXN1bHRBcnJheSk6IGFueVtdID0+IHtcbiAgICAgIGNvbnN0IGRhdGE6IGFueVtdID0gcmVzdWx0cy5tYXAoKHJlc3VsdDogR2V0Q2FySGlyZVByb3ZpZGVyc1Jlc3VsdCk6IGFueSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogcmVzdWx0XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XG4gIH1cblxuICBnZXRBbGxBaXJsaW5lcygpOiBPYnNlcnZhYmxlPGFueVtdPiB7XG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPEdldEFsbEFpcmxpbmVzUmVzdWx0QXJyYXk+ID0gdGhpcy5nZXRBbGxBaXJsaW5lc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBHZXRBbGxBaXJsaW5lc1Jlc3VsdEFycmF5KTogYW55W10gPT4ge1xuICAgICAgY29uc3QgZGF0YTogYW55W10gPSByZXN1bHRzLm1hcCgocmVzdWx0OiBHZXRBbGxBaXJsaW5lc1Jlc3VsdCk6IGFueSA9PiB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XG4gIH1cblxuICBnZXRSYWlsQ2FyZHMoY291bnRyeUNvZGUgPSAnR0InKTogT2JzZXJ2YWJsZTxncmFwaHFsVHlwZXMuUmVmZXJlbmNlUmFpbENhcmRRdWFsaWZpZXJbXT4ge1xuICAgIHJldHVybiB0aGlzLmdldFJhaWxDYXJkc0ZldGNoZXIuZmV0Y2hMaXN0KHsgY291bnRyeUNvZGUgfSkucGlwZShcbiAgICAgIHRha2UoMSksXG4gICAgICBtYXAoKHJlc3VsdHMpOiBhbnkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0cykge1xuICAgICAgICAgIGNvbnN0IHJhaWxDYXJkcyA9IHJlc3VsdHMubWFwKChyZXN1bHQ6IGdyYXBocWxUeXBlcy5SZWZlcmVuY2VSYWlsQ2FyZFF1YWxpZmllcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm5hbWUsXG4gICAgICAgICAgICAgIGNvZGU6IHJlc3VsdC5jb2RlLFxuICAgICAgICAgICAgICBpc0xveWFsdHlDYXJkOiByZXN1bHQuaXNMb3lhbHR5Q2FyZCxcbiAgICAgICAgICAgICAgaXNOdW1iZXJSZXF1aXJlZDogcmVzdWx0LmlzTnVtYmVyUmVxdWlyZWQsXG4gICAgICAgICAgICAgIG51bWJlclByZWZpeDogcmVzdWx0Lm51bWJlclByZWZpeCxcbiAgICAgICAgICAgICAgY2FyZE51bWJlclZhbGlkYXRpb25SZWdleDogcmVzdWx0LmNhcmROdW1iZXJWYWxpZGF0aW9uUmVnZXgsXG4gICAgICAgICAgICAgIHZlbmRvcjogcmVzdWx0LnZlbmRvclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcmFpbENhcmRzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QWlycG9ydEJ5Q29kZShcbiAgICBjb2RlOiBzdHJpbmcsXG4gICAgbG9jYXRpb25UeXBlOiBncmFwaHFsVHlwZXMuTG9jYXRpb25UeXBlID0gZ3JhcGhxbFR5cGVzLkxvY2F0aW9uVHlwZS5BXG4gICk6IE9ic2VydmFibGU8QWlycG9ydFNlYXJjaFJlc3VsdHM+IHtcbiAgICBpZiAoY29kZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQWlycG9ydHNGZXRjaGVyLmZldGNoT25lKHsgcXVlcnk6IGNvZGUsIGxvY2F0aW9uVHlwZSB9KS5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBtYXAoKHJlc3VsdDogQWlycG9ydFNlYXJjaFJlc3VsdHMpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVE8gQkUgT1ZFUiBSSURERU4gQlkgT0JUIFNVQkNMQVNTRVNcbiAgcHVibGljIGluaXRfc2VhcmNoX29iamVjdHMoKTogU2VhcmNoT2JqZWN0cyB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqIFNFQVJDSCBPQkpFQ1RTIEZPUiBHRVQgTUUgVEhFUkUgRE9PUiAyIERPT1IgICAgICAgICAgKlxuICAgKiBEaWZmZXJlbmNlKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQWxsIG9iamVjdHMgaGF2ZSBhIHByaW9yaXR5IG9mIDEgc28gdGhhdCB0aGV5IGFyZSAgICAqXG4gICAqIHNlYXJjaGVkIGF0IHRoZSBzYW1lIHRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBVcmxzIGNoYW5nZWQgdG8gZ2V0bWV0aGVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gIHByb3RlY3RlZCBnZXRNZVRoZXJlU2VhcmNoT2JqZWN0cygpOiBTZWFyY2hPYmplY3RzIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgLypcbiAgICogIEBkZXNjIC0gZ2V0cyBhbGwgc2VsZWN0ZWQgdHJhdmVsbGVyc1xuICAgKiAgIEltcGxlbWVudGVkIGZvciByYWlsIGNhcmQgcmVhc29ucyBpbiBMVVxuICAgKiovXG4gIGdldFNlbGVjdGVkdHJhdmVsbGVycygpOiBUcmF2ZWxsZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzO1xuICB9XG5cbiAgdXBkYXRlU2VsZWNlZHRyYXZhbGxlckRvYihkb2I6c3RyaW5nLHVzZXJJZDpzdHJpbmcsaXNHdWVzdDpib29sZWFuKTpPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVET0IudXBkYXRlT25lKHtpZDp1c2VySWQsZG9iLCBpc0d1ZXN0fSk7XG4gIH1cblxuICByZXNldFNlYXJjaE9iamVjdHMoKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hfb2JqZWN0cyA9IHRoaXMuX3NlYXJjaE9iamVjdHNEZWZhdWx0O1xuICB9XG5cbiAgcmVzZXRTZWFyY2hDaG9zZW5PYmplY3RzKCk6IHZvaWQge1xuICAgIE9iamVjdC52YWx1ZXModGhpcy5zZWFyY2hfb2JqZWN0cykuZm9yRWFjaCgoaXRlbTogU2VhcmNoT2JqZWN0KSA9PiB7XG4gICAgICBpdGVtLmNob3NlbiA9IGZhbHNlO1xuICAgICAgaXRlbS5vcmlnaW5hbENob3NlbiA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgcmVzZXRCb29raW5nQ2hvc2VuKHNlYXJjaHM6IFNlYXJjaE9iamVjdHMpOiB2b2lkIHtcbiAgICBPYmplY3QudmFsdWVzKHNlYXJjaHMpLmZvckVhY2goKGl0ZW06IFNlYXJjaE9iamVjdCkgPT4gKGl0ZW0uYm9va2luZ19jaG9zZW4gPSBmYWxzZSkpO1xuICB9XG5cbiAgLypcbiAgIFRoZXNlIGFyZSB0aGUgcG9zc2libGUgYXJyYXkgb2YgdmFsdWVzIGZyb20gQVBJIGFyZSBleHB0ZWN0ZWQgYW5kIGZ1bmN0aW9uIG1hbmlwdWxhdGUgdG8gY3JlYXRlIHRoZSBsaXN0XG4gICAgW1wiTWFpblwiXVxuICAgIFtcIjFcIl1cbiAgICBbXCIxXCIsIFwiMlwiXVxuICAgIFtcIjFcIiwgXCIyXCIsIFwiM1wiXVxuICAgIFtcIjFcIiwgXCIyXCIsIFwiM1wiLCBcIjRcIl1cbiAgICBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiXVxuICAgIFtcIlNvdXRoXCIsIFwiTm9ydGhcIl1cbiAgKi9cbiAgcHVibGljIHByb2Nlc3NUZXJtaW5hbHModGVybWluYWxzOiBzdHJpbmdbXSk6IFRlcm1pbmFsc1R5cGVbXSB7XG4gICAgY29uc3QgdGVtcFRlcm1pbmFsOiBUZXJtaW5hbHNUeXBlW10gPSBbXTtcbiAgICBpZiAoXG4gICAgICB0ZXJtaW5hbHMuaW5jbHVkZXMoJzEnKSB8fFxuICAgICAgdGVybWluYWxzLmluY2x1ZGVzKCcyJykgfHxcbiAgICAgIHRlcm1pbmFscy5pbmNsdWRlcygnMycpIHx8XG4gICAgICB0ZXJtaW5hbHMuaW5jbHVkZXMoJzQnKSB8fFxuICAgICAgdGVybWluYWxzLmluY2x1ZGVzKCc1JylcbiAgICApIHtcbiAgICAgIHRlbXBUZXJtaW5hbC5wdXNoKHsga2V5OiAnQW55IFRlcm1pbmFsJywgdmFsdWU6ICdBbnknIH0pO1xuICAgICAgdGVybWluYWxzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIHRlbXBUZXJtaW5hbC5wdXNoKHsga2V5OiBgVGVybWluYWwgJHtpdGVtfWAsIHZhbHVlOiBgJHtpdGVtfWAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRlcm1pbmFscy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdGVtcFRlcm1pbmFsLnB1c2goeyBrZXk6IGAke3Rlcm1pbmFsc1swXX0gVGVybWluYWxgLCB2YWx1ZTogJ0FueScgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZW1wVGVybWluYWwucHVzaCh7IGtleTogJ0FueSBUZXJtaW5hbCcsIHZhbHVlOiAnQW55JyB9KTtcbiAgICAgICAgdGVybWluYWxzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgdGVtcFRlcm1pbmFsLnB1c2goeyBrZXk6IGAke2l0ZW19IFRlcm1pbmFsYCwgdmFsdWU6IGAke2l0ZW19YCB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZW1wVGVybWluYWw7XG4gIH1cblxuICBhc3luYyBzYXZlVXNlckFkZHJlc3MoZm9ybUFkZHJlc3M6IEFkZHJlc3NGb3JtKTogUHJvbWlzZTxBZGRyZXNzPiB7XG4gICAgY29uc3QgeyBIb3VzZSwgU3RyZWV0LCBUb3duLCBQb3N0Q29kZSwgQ291bnRyeSB9ID0gZm9ybUFkZHJlc3M7XG5cbiAgICBjb25zdCBkZXNjQXJyID0gW107XG4gICAgaWYgKEhvdXNlKSBkZXNjQXJyLnB1c2goSG91c2UpO1xuICAgIGlmIChTdHJlZXQpIGRlc2NBcnIucHVzaChTdHJlZXQpO1xuICAgIGlmIChUb3duKSBkZXNjQXJyLnB1c2goVG93bik7XG4gICAgaWYgKFBvc3RDb2RlKSBkZXNjQXJyLnB1c2goUG9zdENvZGUpO1xuICAgIGlmIChDb3VudHJ5KSBkZXNjQXJyLnB1c2goQ291bnRyeSk7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBkZXNjQXJyLmpvaW4oKTtcblxuICAgIGNvbnN0IGFkZHJlc3MgPSB7XG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIG51bWJlck9yTmFtZTogSG91c2UgPz8gJycsXG4gICAgICBzdHJlZXQ6IFN0cmVldCA/PyAnJyxcbiAgICAgIHRvd246IFRvd24gPz8gJycsXG4gICAgICBwb3N0Y29kZTogUG9zdENvZGUgPz8gJycsXG4gICAgICBjb3VudHJ5Q29kZTogQ291bnRyeSA/PyAnR0InXG4gICAgfTtcblxuICAgIGlmIChhZGRyZXNzKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMuc2F2ZVVzZXJBZGRyZXNzVXBkYXRlci51cGRhdGVPbmUoYWRkcmVzcykudG9Qcm9taXNlKCk7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZWRpdFVzZXJBZGRyZXNzKGZvcm1BZGRyZXNzOiBhbnkpOiBPYnNlcnZhYmxlPEFkZHJlc3M+IHtcbiAgICByZXR1cm4gdGhpcy5lZGl0VXNlckFkZHJlc3NVcGRhdGVyLnVwZGF0ZU9uZShmb3JtQWRkcmVzcyk7XG4gIH1cblxuICBzYXZlVXNlckFkZHJlc3NCb2x0KGZvcm1BZGRyZXNzOiBBZGRyZXNzSW5wdXQpOiBPYnNlcnZhYmxlPEFkZHJlc3M+IHtcbiAgICByZXR1cm4gdGhpcy5zYXZlVXNlckFkZHJlc3NVcGRhdGVyLnVwZGF0ZU9uZShmb3JtQWRkcmVzcyk7XG4gIH1cblxuICBwdWJsaWMgY2FuQm9vayhzZXJ2aWNlOiBncmFwaHFsVHlwZXMuU2VydmljZVR5cGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5jYW5Cb29rKHNlcnZpY2UpID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgaXNQb3N0Y29kZVZhaWxkKHBvc3Rjb2RlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5iYXNlVmFsaWRhdGVJc1Bvc3Rjb2RlVmFsaWRUZXN0ZXIudGVzdCh7IHBvc3Rjb2RlIH0pO1xuICB9XG5cbiAgLyogQ3JlYXRlIFF1ZXJ5IERlZmF1bHRzIFN0YXJ0ICovXG4gIC8qXG4gICAqIENyZWF0ZSB0aGUgQ2FiIEhpcmUgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW0sIGF1dG8gZmlsbCB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgIC4uLmFyZ3MgZXhhbXBsZSAtIHNlYXJjaFNlcnZpY2Uuc2V0Q2FiSGlyZVF1ZXJ5KGRhdGEucXVlcnksIHsgZGVwYXJ0czogbW9tZW50RGF0ZVRpbWUgfSlcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hDYWJIaXJlQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3MgdHlwZVxuICAgKi9cbiAgcHVibGljIG1ha2VDYWJIaXJlUXVlcnkoLi4uYXJnczogYW55KTogQ2FiSGlyZVRlbXBQYXJhbXMge1xuICAgIGNvbnN0IGRlZmF1bHRWYWw6IENhYkhpcmVUZW1wUGFyYW1zID0ge1xuICAgICAgYWR1bHRzOiAwLFxuICAgICAgYWlycG9ydDogbnVsbCxcbiAgICAgIGNoaWxkcmVuOiAwLFxuICAgICAgY291bnRyeUNvZGU6IG51bGwsXG4gICAgICBkZXBhcnRzOiB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoKSxcbiAgICAgIGZyb21BZGRyZXNzOiBudWxsLFxuICAgICAgZnJvbVN0YXRpb246IG51bGwsXG4gICAgICBmcm9tTG9jYXRpb25UeXBlOiBUYXhpRm9ybU1vZGUuQUREUkVTUyxcbiAgICAgIGluZmFudHM6IDAsXG4gICAgICB0b0FkZHJlc3M6IG51bGwsXG4gICAgICB0b1N0YXRpb246IG51bGwsXG4gICAgICB0b0xvY2F0aW9uVHlwZTogVGF4aUZvcm1Nb2RlLkFERFJFU1MsXG4gICAgICB2ZWhpY2xlVHlwZTogZ3JhcGhxbFR5cGVzLkNhYkhpcmVWZWhpY2xlVHlwZS5BbnksXG4gICAgICBsaW1vVHlwZTogbnVsbCxcbiAgICAgIHZpYXNGcm9tOiBudWxsLFxuICAgICAgdmlhc1RvOiBudWxsLFxuICAgICAgbGltb0FzRGlyZWN0ZWREdXJhdGlvbjogMixcbiAgICAgIHRyYW5zcG9ydFR5cGU6IFRyYW5zcG9ydFR5cGUuT25lV2F5LFxuICAgICAgc3BlY2lhbFJlcXVpcmVtZW50czogJydcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8Q2FiSGlyZVRlbXBQYXJhbXM+KGRlZmF1bHRWYWwsIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLCBbXG4gICAgICAnZGVwYXJ0cydcbiAgICBdKTtcbiAgfVxuXG4gIC8qXG4gICAqIENyZWF0ZSB0aGUgQ2FyIEhpcmUgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW0sIGF1dG8gZmlsbCB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgIC4uLmFyZ3MgZXhhbXBsZSAtIHNlYXJjaFNlcnZpY2Uuc2V0Q2FySGlyZVF1ZXJ5KGRhdGEucXVlcnksIHsgZGVwYXJ0czogbW9tZW50RGF0ZVRpbWUgfSlcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hDYXJIaXJlQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3MgdHlwZVxuICAgKi9cbiAgcHVibGljIG1ha2VDYXJIaXJlUXVlcnkoLi4uYXJnczogYW55KTogQ2FySGlyZVRlbXBQYXJhbXMge1xuICAgIGNvbnN0IGRlZmF1bHRWYWw6IENhckhpcmVUZW1wUGFyYW1zID0ge1xuICAgICAgYWR1bHRzOiAwLFxuICAgICAgYWlyQ29uOiBudWxsLFxuICAgICAgY2FyQ2xhc3M6IG51bGwsXG4gICAgICBjYXJUeXBlOiBudWxsLFxuICAgICAgY2hpbGRyZW46IDAsXG4gICAgICBjaG9zZW5WZW5kb3I6IG51bGwsXG4gICAgICBjaG9zZW5EaXN0YW5jZTogJzUnLFxuICAgICAgY2l0eURyb3BvZmY6IG51bGwsXG4gICAgICBjaXR5RHJvcG9mZkRlcG90OiBudWxsLFxuICAgICAgY2l0eVBpY2t1cDogbnVsbCxcbiAgICAgIGNpdHlQaWNrdXBEZXBvdDogbnVsbCxcbiAgICAgIGRyb3BvZmZfY291bnRyeTogJ0dCJyxcbiAgICAgIGRyb3BvZmZfZGF0ZXRpbWU6IG51bGwsXG4gICAgICBkcm9wb2ZmX2xvY2F0aW9uOiBudWxsLFxuICAgICAgZXN0aW1hdGVkTWlsZWFnZTogbnVsbCxcbiAgICAgIGxvY2F0aW9uVHlwZTogbnVsbCxcbiAgICAgIHBpY2t1cF9jb3VudHJ5OiBudWxsLFxuICAgICAgcGlja3VwX2RhdGV0aW1lOiBudWxsLFxuICAgICAgcGlja3VwX2xvY2F0aW9uOiBudWxsLFxuICAgICAgcG9zdGNvZGVEcm9wb2ZmOiBudWxsLFxuICAgICAgcG9zdGNvZGVEcm9wb2ZmUmF3OiBudWxsLFxuICAgICAgcG9zdGNvZGVQaWNrdXA6IG51bGwsXG4gICAgICBwb3N0Y29kZVBpY2t1cFJhdzogbnVsbCxcbiAgICAgIHJldHVybl90b19waWNrdXA6IHRydWUsXG4gICAgICB0cmFuc21pc3Npb246IG51bGwsXG4gICAgICBkZWxpdmVyeTogZmFsc2UsXG4gICAgICBjb2xsZWN0aW9uOiBmYWxzZSxcbiAgICAgIGRyaXZlckFnZTogbnVsbFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxDYXJIaXJlVGVtcFBhcmFtcz4oZGVmYXVsdFZhbCwgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksIFtcbiAgICAgICdwaWNrdXBfZGF0ZXRpbWUnLFxuICAgICAgJ2Ryb3BvZmZfZGF0ZXRpbWUnXG4gICAgXSk7XG4gIH1cblxuICAvKlxuICAgKiBDcmVhdGVzIGEgRmxpZ2h0IHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtcywgYXV0byBmaWxscyB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZUZsaWdodFF1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaEZsaWdodHNBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hGbGlnaHRzQXJncyB0eXBlXG4gICAqL1xuICBwdWJsaWMgbWFrZUZsaWdodFF1ZXJ5KC4uLmFyZ3M6IGFueSk6IEZsaWdodFRlbXBQYXJhbXMge1xuICAgIGNvbnN0IG5vdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgpO1xuICAgIGNvbnN0IHRvbW9ycm93ID0gdGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKDEpO1xuICAgIGNvbnN0IG1vbWVudE91dERhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyhub3csIDMwKTtcbiAgICBjb25zdCBtb21lbnRJbkRhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyh0b21vcnJvdywgMzApO1xuXG4gICAgY29uc3QgZGVmYXVsdFZhbDogRmxpZ2h0VGVtcFBhcmFtcyA9IHtcbiAgICAgIGFkdWx0czogMCxcbiAgICAgIGFycml2ZUxvY2F0aW9uOiBudWxsLFxuICAgICAgY2FiaW5DbGFzczogZ3JhcGhxbFR5cGVzLkZsaWdodENhYmluQ2xhc3MuRWNvbm9teSxcbiAgICAgIGNoaWxkcmVuOiAwLFxuICAgICAgY2hvc2VuU2VhcmNoVHlwZTogbnVsbCxcbiAgICAgIGRlcGFydExvY2F0aW9uOiBudWxsLFxuICAgICAgZmFyZVR5cGU6IGdyYXBocWxUeXBlcy5GYXJlVHlwZS5GbGV4aWJsZSxcbiAgICAgIGluYm91bmREYXRlOiBtb21lbnRPdXREYXRlVGltZSxcbiAgICAgIGluVGltZUNyaXRlcmlhOiBUaW1lV2luZG93LkRlcGFydCxcbiAgICAgIG1heENvbm5lY3Rpb25zOiBudWxsLFxuICAgICAgb3V0VGltZUZsZXhpYmlsaXR5OiAyLFxuICAgICAgaW5UaW1lRmxleGliaWxpdHk6IDIsXG4gICAgICBpbmNsdWRlTmVhcmJ5QWlycG9ydHM6IGZhbHNlLFxuICAgICAgYnlTY2hlZHVsZTogZmFsc2UsXG4gICAgICBtdWx0aURlc3RpbmF0aW9uOiBbXSxcbiAgICAgIG91dEJvdW5kRGF0ZTogbW9tZW50SW5EYXRlVGltZSxcbiAgICAgIG91dFRpbWVDcml0ZXJpYTogVGltZVdpbmRvdy5EZXBhcnQsXG4gICAgICBwcmVmZXJyZWRDYXJyaWVyczogW251bGwsIG51bGwsIG51bGwsIG51bGxdLFxuICAgICAgcmV0dXJuQ2FiaW5DbGFzczogZ3JhcGhxbFR5cGVzLkZsaWdodENhYmluQ2xhc3MuRWNvbm9teSxcbiAgICAgIHZpYTogbnVsbCxcbiAgICAgIHNob3dWaWE6IGZhbHNlXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPEZsaWdodFRlbXBQYXJhbXM+KGRlZmF1bHRWYWwsIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLCBbXG4gICAgICAnb3V0Qm91bmREYXRlJyxcbiAgICAgICdpbmJvdW5kRGF0ZSdcbiAgICBdKTtcbiAgfVxuXG4gIC8qXG4gICAqIENyZWF0ZXMgYSBIb3RlbCBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VIb3RlbFF1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaEhvdGVsc0FyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaEhvdGVsc0FyZ3MgdHlwZVxuICAgKi9cbiAgcHVibGljIG1ha2VIb3RlbFF1ZXJ5KC4uLmFyZ3M6IGFueSk6IEhvdGVsVGVtcFBhcmFtcyB7XG4gICAgY29uc3QgZGVmYXVsdFZhbCA9IHtcbiAgICAgIGNoZWNraW5fZGF0ZTogbW9tZW50KCkuc2V0KCdob3VyJywgMjMpLnNldCgnbWludXRlJywgNTkpLFxuICAgICAgY2hlY2tvdXRfZGF0ZTogbW9tZW50KCkuYWRkKDEsICdkYXknKS5zZXQoJ2hvdXInLCAyMykuc2V0KCdtaW51dGUnLCA1OSksXG4gICAgICBjb3VudHJ5OiB7IGNDb2RlOiAnR0InLCBjTmFtZTogJ1VuaXRlZCBLaW5nZG9tJyB9LFxuICAgICAgY3VycmVuY3k6ICdHQlAnLFxuICAgICAgZGlzdGFuY2U6IDUsIC8vIGRlZmF1bHQgNSBtaWxlcyByYWRpdXNcbiAgICAgIGhvdGVsX2F2YWlsYWJpbGl0eTogbnVsbCxcbiAgICAgIGhvdGVsX2NoYWluOiBudWxsLFxuICAgICAgaG90ZWxfbmFtZTogbnVsbCxcbiAgICAgIGxvY2F0aW9uX3R5cGVfc2VsZWN0OiBMb2NhdGlvblR5cGVzLkFpcnBvcnQsXG4gICAgICBsb2NhdGlvbjogbnVsbCwgLy8gbWlnaHQgd2FudCB0byBzcGxpdCB0aGlzIG91dCB0byBjaXR5LCBhaXJwb3J0LCBvZmZpY2UsIHJhaWxzdGF0aW9uIC0gdGhpcyB3aWxsIGRvIGZvciBub3dcbiAgICAgIG5vX29mX29jY3VwYW50czogMSwgLy8gc2ltaWxhcmx5IHRoaW5rIHRoaXMgaXMgYSBtYXggb2YgM1xuICAgICAgbm9fb2Zfcm9vbXM6IDEsIC8vIG1heCBvZiA0IGluIG9sZCBzYWJzLCBub3Qgc3VyZSBoZXJlXG4gICAgICBvZmZpY2U6IG51bGwsXG4gICAgICBwb3N0Y29kZTogbnVsbCxcbiAgICAgIHByZWZlcmVkX2hvdGVsc19vbmx5OiBmYWxzZSxcbiAgICAgIHRyYWluc1N0YXRpb246IG51bGwsXG4gICAgICBwcm9wZXJ0eU51bWJlcjpudWxsXG4gICAgfSBhcyBIb3RlbFRlbXBQYXJhbXM7XG5cbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxIb3RlbFRlbXBQYXJhbXM+KGRlZmF1bHRWYWwsIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLCBbXG4gICAgICAnY2hlY2tpbl9kYXRlJyxcbiAgICAgICdjaGVja291dF9kYXRlJ1xuICAgIF0pO1xuICB9XG5cbiAgLypcbiAgICogQ3JlYXRlcyBhIExvdW5nZXMgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgICAgICAgICAgLi4uYXJncyBFeGFtcGxlIC0gc2VhcmNoU2VydmljZS5tYWtlTG91bmdlc1F1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaExvdW5nZXNBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hMb3VuZ2VzQXJncyB0eXBlXG4gICAqL1xuICBwdWJsaWMgbWFrZUxvdW5nZXNRdWVyeSguLi5hcmdzOiBhbnkpOiBMb3VuZ2VzVGVtcFBhcmFtcyB7XG4gICAgY29uc3QgZGVmYXVsdFZhbCA9IHtcbiAgICAgIGFkdWx0czogMCxcbiAgICAgIGFycml2YWxEYXRldGltZTogbW9tZW50KCksXG4gICAgICBjaGlsZHJlbjogMCxcbiAgICAgIGluZmFudHM6IDAsXG4gICAgICBsb2NhdGlvbkNvZGU6IG51bGwsXG4gICAgICB0ZXJtaW5hbDogbnVsbCxcbiAgICAgIGNvdW50cnlDb2RlOiAnR0InXG4gICAgfSBhcyBMb3VuZ2VzVGVtcFBhcmFtcztcblxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPExvdW5nZXNUZW1wUGFyYW1zPihkZWZhdWx0VmFsLCBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSwgW1xuICAgICAgJ2Fycml2YWxEYXRldGltZSdcbiAgICBdKTtcbiAgfVxuXG4gIC8qXG4gICAqIENyZWF0ZXMgYSBQYXJraW5nIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtcywgYXV0byBmaWxscyB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZVBhcmtpbmdRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hQYXJraW5nQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoUGFya2luZ0FyZ3MgdHlwZVxuICAgKi9cbiAgcHVibGljIG1ha2VQYXJraW5nUXVlcnkoLi4uYXJnczogYW55KTogUGFya2luZ1RlbXBQYXJhbXMge1xuICAgIGNvbnN0IG5vdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgpO1xuICAgIGNvbnN0IHRvbW9ycm93ID0gdGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKDEpO1xuICAgIGNvbnN0IG1vbWVudE91dERhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyhub3csIDMwKTtcbiAgICBjb25zdCBtb21lbnRJbkRhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyh0b21vcnJvdywgMzApO1xuXG4gICAgY29uc3QgZGVmYXVsdFZhbCA9IHtcbiAgICAgIGFycml2YWxEYXRldGltZTogbW9tZW50T3V0RGF0ZVRpbWUsXG4gICAgICBjYXJQYXJrZWRGb3JZb3U6IG51bGwsXG4gICAgICBkZXBhcnREYXRldGltZTogbW9tZW50SW5EYXRlVGltZSxcbiAgICAgIGxvY2F0aW9uQ29kZTogbnVsbCxcbiAgICAgIG1lZXRBbmRHcmVldDogbnVsbCxcbiAgICAgIG9uQWlycG9ydDogbnVsbCxcbiAgICAgIG91dEZsaWdodE51bWJlcjogbnVsbCxcbiAgICAgIHBhcmtBbmRSaWRlOiBudWxsLFxuICAgICAgcGFya0FuZFN0cm9sbDogbnVsbCxcbiAgICAgIHJlY29tbWVuZGVkOiBudWxsLFxuICAgICAgdGVybWluYWw6IG51bGxcbiAgICB9IGFzIFBhcmtpbmdUZW1wUGFyYW1zO1xuXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8UGFya2luZ1RlbXBQYXJhbXM+KGRlZmF1bHRWYWwsIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLCBbXG4gICAgICAnYXJyaXZhbERhdGV0aW1lJyxcbiAgICAgICdkZXBhcnREYXRldGltZSdcbiAgICBdKTtcbiAgfVxuXG4gIC8qXG4gICAqIENyZWF0ZXMgYSBSYWlsIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtcywgYXV0byBmaWxscyB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZVJhaWxRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hSYWlsQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoUmFpbEFyZ3MgdHlwZVxuICAgKi9cbiAgcHVibGljIG1ha2VSYWlsUXVlcnkoLi4uYXJnczogYW55KTogUmFpbFRlbXBQYXJhbXMge1xuICAgIGNvbnN0IG91dFRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKG1vbWVudCgpLmFkZCgxLCAnaG91cicpLCAxNSk7XG4gICAgY29uc3QgaW5UaW1lID0gbW9tZW50KCkuc2V0KCdob3VyJywgMTYpLnNldCgnbWludXRlJywgMCkuc2V0KCdzZWNvbmQnLCAwKTtcbiAgICBjb25zdCBkZWZhdWx0VmFsOiBSYWlsVGVtcFBhcmFtcyA9IHtcbiAgICAgIGFpcnBvcnRFeHByZXNzU3RhdGlvbjogbnVsbCxcbiAgICAgIGFwcGx5UmFpbGNhcmRzOiBmYWxzZSxcbiAgICAgIGNhcm5ldFRpY2tldDogZmFsc2UsXG4gICAgICBjaG9zZW5TZWFyY2hDbGFzczogZ3JhcGhxbFR5cGVzLlJhaWxDbGFzcy5BbGwsXG4gICAgICBjaG9zZW5TZWFyY2hUeXBlOiBncmFwaHFsVHlwZXMuUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXksXG4gICAgICBkaXNhYmxlQXV0b0Rpc2NvdW50czogZmFsc2UsXG4gICAgICBleHRyYVRpbWU6IGZhbHNlLFxuICAgICAgaW5Cb3VuZERhdGVUaW1lOiBpblRpbWUsXG4gICAgICBpc0FpcnBvcnRFeHByZXNzOiBmYWxzZSxcbiAgICAgIG5vT2ZBZHVsdHM6IDAsXG4gICAgICBub09mQ2hpbGRyZW46IDAsXG4gICAgICBvdXRib3VuZENyaXRlcmlhOiBSYWlsU2VhcmNoQ3JpdGVyaWEuRGVwYXJ0LFxuICAgICAgb3V0Qm91bmREYXRlVGltZTogb3V0VGltZSxcbiAgICAgIHByaW9yaXRpc2VCeVByaWNlOiBmYWxzZSxcbiAgICAgIHJldHVybkNyaXRlcmlhOiBSYWlsU2VhcmNoQ3JpdGVyaWEuRGVwYXJ0LFxuICAgICAgdHJhdmVsbGluZ0Zyb206IG51bGwsXG4gICAgICB0cmF2ZWxsaW5nVG86IG51bGwsXG4gICAgICB2aWE6IGZhbHNlLFxuICAgICAgdmlhTG9jYXRpb246IG51bGwsXG4gICAgICByYWlsQ2FyZHM6IFtdLFxuICAgICAgdHJhbnNhY3Rpb25JZGVudGlmaWVyOiBudWxsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPFJhaWxUZW1wUGFyYW1zPihkZWZhdWx0VmFsLCBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSwgW1xuICAgICAgJ2luQm91bmREYXRlVGltZScsXG4gICAgICAnb3V0Qm91bmREYXRlVGltZSdcbiAgICBdKTtcbiAgfVxuXG4gIC8qXG4gICAqIENyZWF0ZXMgYSBSYWlsIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtcywgYXV0byBmaWxscyB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZUlybFF1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaFJhaWxBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hSYWlsQXJncyB0eXBlXG4gICAqL1xuICBwdWJsaWMgbWFrZUlybFF1ZXJ5KC4uLmFyZ3M6IGFueSk6IElybFRlbXBQYXJhbXMge1xuICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKG1vbWVudCgpLCAzMCk7XG4gICAgY29uc3QgZGVmYXVsdFZhbDogSXJsVGVtcFBhcmFtcyA9IHtcbiAgICAgIHN1cHBsaWVyOiBudWxsLCAvLyBJUkxTdXBwbGllciFcbiAgICAgIGNvdW50cnlDb2RlOiAnJyxcbiAgICAgIGpvdXJuZXlUeXBlOiBncmFwaHFsVHlwZXMuSXJsSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSwgLy8gSVJMSm91cm5leVR5cGUhXG4gICAgICBjbGFzczogbnVsbCwgLy8gSVJMQ2xhc3NcbiAgICAgIG91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU6IHRpbWUsXG4gICAgICB0cmF2ZWxsaW5nRnJvbTogbnVsbCxcbiAgICAgIHRyYXZlbGxpbmdUbzogbnVsbCxcbiAgICAgIGFkdWx0czogMCxcbiAgICAgIGNoaWxkcmVuOiAwLFxuICAgICAgc2VuaW9yczogMCxcbiAgICAgIHlvdXRoOiAwLFxuICAgICAgcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWU6IHRpbWUsXG4gICAgICBpcmxEaXNjb3VudENhcmRzOiBudWxsLFxuICAgICAgb2ZmbGluZVJlcXVlc3Q6IGZhbHNlXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPElybFRlbXBQYXJhbXM+KGRlZmF1bHRWYWwsIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLCBbXG4gICAgICAncmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUnLFxuICAgICAgJ291dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUnXG4gICAgXSk7XG4gIH1cblxuICAvKlxuICAgKiBDcmVhdGVzIGEgRXVyb3N0YXIgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgICAgICAgICAgLi4uYXJncyBFeGFtcGxlIC0gc2VhcmNoU2VydmljZS5tYWtlRXVyb3N0YXJRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcbiAgICogQHJldHVybiB7RXVyb3N0YXJUZW1wUGFyYW1zfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hFdXJvc3RhckFyZ3MgdHlwZVxuICAgKi9cbiAgcHVibGljIG1ha2VFdXJvc3RhclF1ZXJ5KC4uLmFyZ3M6IGFueSk6IEV1cm9zdGFyVGVtcFBhcmFtcyB7XG4gICAgY29uc3Qgbm93ID0gdGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKCk7XG4gICAgY29uc3QgdG9tb3Jyb3cgPSB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoMSk7XG4gICAgY29uc3QgbW9tZW50T3V0RGF0ZVRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKG5vdywgMzApO1xuICAgIGNvbnN0IG1vbWVudEluRGF0ZVRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKHRvbW9ycm93LCAzMCk7XG5cbiAgICBjb25zdCBkZWZhdWx0VmFsOiBFdXJvc3RhclRlbXBQYXJhbXMgPSB7XG4gICAgICBhZHVsdHM6IDAsXG4gICAgICBhcnJpdmVMb2NhdGlvbjogbnVsbCxcbiAgICAgIGNhYmluQ2xhc3M6IGdyYXBocWxUeXBlcy5GbGlnaHRDYWJpbkNsYXNzLkFueSxcbiAgICAgIGNoaWxkcmVuOiAwLFxuICAgICAgY2hvc2VuU2VhcmNoVHlwZTogRXVyb3N0YXJTZWFyY2hUeXBlLnJldHVybixcbiAgICAgIGRlcGFydExvY2F0aW9uOiBudWxsLFxuICAgICAgZmFyZVR5cGU6IGdyYXBocWxUeXBlcy5GYXJlVHlwZS5GbGV4aWJsZSxcbiAgICAgIGluYm91bmREYXRlOiBtb21lbnRPdXREYXRlVGltZSxcbiAgICAgIGluVGltZUNyaXRlcmlhOiBUaW1lV2luZG93LkRlcGFydCxcbiAgICAgIG1heENvbm5lY3Rpb25zOiBudWxsLFxuICAgICAgaW5jbHVkZU5lYXJieUFpcnBvcnRzOiBmYWxzZSxcbiAgICAgIG11bHRpRGVzdGluYXRpb246IFtdLFxuICAgICAgb3V0Qm91bmREYXRlOiBtb21lbnRJbkRhdGVUaW1lLFxuICAgICAgb3V0VGltZUNyaXRlcmlhOiBUaW1lV2luZG93LkRlcGFydCxcbiAgICAgIHByZWZlcnJlZENhcnJpZXJzOiBbbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF0sXG4gICAgICByZXR1cm5DYWJpbkNsYXNzOiBncmFwaHFsVHlwZXMuRmxpZ2h0Q2FiaW5DbGFzcy5BbnlcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8RXVyb3N0YXJUZW1wUGFyYW1zPihcbiAgICAgIGRlZmF1bHRWYWwsXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcbiAgICAgIFsnb3V0Qm91bmREYXRlJywgJ2luYm91bmREYXRlJ11cbiAgICApO1xuICB9XG5cbiAgLypcbiAgICogQ3JlYXRlcyBhIEZhc3RUcmFjayBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VGYXN0VHJhY2tRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hMb3VuZ2VzQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoTG91bmdlc0FyZ3MgdHlwZVxuICAgKi9cbiAgcHVibGljIG1ha2VGYXN0VHJhY2tRdWVyeSguLi5hcmdzOiBhbnkpOiBGYXN0VHJhY2tUZW1wUGFyYW1zIHtcbiAgICBjb25zdCBkZWZhdWx0VmFsID0ge1xuICAgICAgYWR1bHRzOiAwLFxuICAgICAgYXJyaXZhbERhdGV0aW1lOiBtb21lbnQoKSxcbiAgICAgIGNoaWxkcmVuOiAwLFxuICAgICAgbG9jYXRpb25Db2RlOiBudWxsLFxuICAgICAgZmxpZ2h0TnVtYmVyOiBudWxsLFxuICAgICAgdGVybWluYWw6IG51bGxcbiAgICB9IGFzIEZhc3RUcmFja1RlbXBQYXJhbXM7XG5cbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxGYXN0VHJhY2tUZW1wUGFyYW1zPihcbiAgICAgIGRlZmF1bHRWYWwsXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcbiAgICAgIFsnYXJyaXZhbERhdGV0aW1lJ11cbiAgICApO1xuICB9XG5cbiAgLypcbiAgICogQ3JlYXRlcyBhIEZlcnJ5IHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtcywgYXV0byBmaWxscyB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZUZlcnJ5UXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoRmVycnlBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hGZXJyeUFyZ3MgdHlwZVxuICAgKi9cbiAgcHVibGljIG1ha2VGZXJyeVF1ZXJ5KC4uLmFyZ3M6IGFueSk6IEZlcnJ5VGVtcFBhcmFtcyB7XG4gICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXMobW9tZW50KCksIDMwKTtcbiAgICBjb25zdCBkZWZhdWx0VmFsOiBGZXJyeVRlbXBQYXJhbXMgPSB7XG4gICAgICBmZXJyeU9yRXVyb3R1bm5lbDogZ3JhcGhxbFR5cGVzLkZlcnJ5T3JFdXJvdHVubmVsLkZlcnJ5LFxuICAgICAgZnJvbUxvY2F0aW9uOiBudWxsLCAvLyBJUkxTdXBwbGllciFcbiAgICAgIHRvTG9jYXRpb246ICcnLFxuICAgICAgZGVwYXJ0RGF0ZVRpbWU6IHRpbWUsXG4gICAgICBvbkJlaGFsZk9mRW1haWw6IG51bGwsXG4gICAgICBkZXBhcnRUaW1lVHlwZTogZ3JhcGhxbFR5cGVzLlRpbWVUeXBlLkRlcGFydEFmdGVyLFxuICAgICAgcmV0dXJuVGltZVR5cGU6IGdyYXBocWxUeXBlcy5UaW1lVHlwZS5EZXBhcnRBZnRlcixcbiAgICAgIHBhc3NlbmdlcnM6IFtdLFxuICAgICAgbWFrZTogJycsXG4gICAgICBtb2RlbDogJycsXG4gICAgICByZWc6ICcnLFxuICAgICAgaGVpZ2h0OiAnJyxcbiAgICAgIGxlbmd0aDogJycsXG4gICAgICB2ZWhpY2xlVHlwZTogbnVsbCxcbiAgICAgIHByZWZlcnJlZFRpY2tldFR5cGU6IGdyYXBocWxUeXBlcy5UaWNrZXRUeXBlLk5vbmUsXG4gICAgICByZXR1cm5EYXRlVGltZTogdGltZSxcbiAgICAgIGFkZGl0aW9uYWxJbmZvOiBudWxsLFxuICAgICAgZG9iOiBudWxsLFxuICAgICAgcGhvbmVOdW1iZXI6ICcnXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPEZlcnJ5VGVtcFBhcmFtcz4oZGVmYXVsdFZhbCwgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksIFtcbiAgICAgICdkZXBhcnREYXRlVGltZScsXG4gICAgICAncmV0dXJuRGF0ZVRpbWUnXG4gICAgXSk7XG4gIH1cblxuICAvLyBtYWtlQXBhcnRtZW50UXVlcnlcbiAgLypcbiAgICogQ3JlYXRlcyBhIEFwYXJ0bWVudCBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VBcGFydG1lbnRRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hBcGFydG1lbnRBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hBcGFydG1lbnRBcmdzIHR5cGVcbiAgICovXG4gIHB1YmxpYyBtYWtlQXBhcnRtZW50UXVlcnkoLi4uYXJnczogYW55KTogQXBhcnRtZW50VGVtcFBhcmFtcyB7XG4gICAgY29uc29sZS5sb2coJysrKyBNQUtJTkcgQVBBUlRNRU5UIFFVRVJZICsrKycpO1xuICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKG1vbWVudCgpLnNldCgnaG91cnMnLCAyMykuc2V0KCdtaW51dGVzJywgNTkpLCAzMCk7XG4gICAgY29uc3QgZGVmYXVsdFZhbDogQXBhcnRtZW50VGVtcFBhcmFtcyA9IHtcbiAgICAgIGRlcGFydERhdGVUaW1lOiB0aW1lLFxuICAgICAgcmV0dXJuRGF0ZVRpbWU6IHRpbWUuYWRkKDEsICdkYXknKSxcbiAgICAgIG9uQmVoYWxmT2ZFbWFpbDogbnVsbCxcbiAgICAgIHBhc3NlbmdlcnM6IFtdLFxuICAgICAgY291bnRyeTogeyBjQ29kZTogJ0dCJywgY05hbWU6ICdVbml0ZWQgS2luZ2RvbScgfSxcbiAgICAgIHRvd246IG51bGwsXG4gICAgICBwb3N0Y29kZTogJycsXG4gICAgICBudW1iZXJPZlJvb21zOiAxLFxuICAgICAgbnVtYmVyT2ZCZWRzUGVyQXBhcnRtZW50OiAxLFxuICAgICAgZGlzdGFuY2U6IDUsXG4gICAgICBhY2Nlc2liaWxpdHk6IGZhbHNlLFxuICAgICAgcGV0czogZmFsc2UsXG4gICAgICBhZGRpdGlvbmFsSW5mb3JtYXRpb246ICcnLFxuICAgICAgcGFya2luZzogZmFsc2VcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8QXBhcnRtZW50VGVtcFBhcmFtcz4oXG4gICAgICBkZWZhdWx0VmFsLFxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXG4gICAgICBbJ2RlcGFydERhdGVUaW1lJywgJ3JldHVybkRhdGVUaW1lJ11cbiAgICApO1xuICB9XG5cbiAgLy8gbWFrZVNlYXNvblRpY2tldHNRdWVyeVxuICAvKlxuICAgKiBDcmVhdGVzIGEgU2Vhc29uVGlja2V0cyBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VTZWFzb25UaWNrZXRzUXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoU2Vhc29uVGlja2V0c0FyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaFNlYXNvblRpY2tldHNBcmdzIHR5cGVcbiAgICovXG4gIHB1YmxpYyBtYWtlU2Vhc29uVGlja2V0c1F1ZXJ5KC4uLmFyZ3M6IGFueSk6IFNlYXNvblRpY2tldHNUZW1wUGFyYW1zIHtcbiAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyhtb21lbnQoKS5zZXQoJ2hvdXJzJywgMjMpLnNldCgnbWludXRlcycsIDU5KSwgMzApO1xuICAgIGNvbnN0IGRlZmF1bHRWYWw6IFNlYXNvblRpY2tldHNUZW1wUGFyYW1zID0ge1xuICAgICAgdGlja2V0VHlwZTogZ3JhcGhxbFR5cGVzLlNlYXNvblRpY2tldFR5cGUuV2Vla2x5LFxuICAgICAgY2xhc3NPZlNlcnZpY2U6IGdyYXBocWxUeXBlcy5TZWFzb25UaWNrZXRDbGFzc1R5cGUuU3RhbmRhcmQsXG4gICAgICBmcm9tTG9jYXRpb246IG51bGwsXG4gICAgICB0b0xvY2F0aW9uOiBudWxsLFxuICAgICAgcmFpbE9wZXJhdG9yOiAnJyxcbiAgICAgIHJvdXRlOiBudWxsLFxuICAgICAgaXNMb25kb25VbmRlcmdyb3VuZFJlcXVpcmVkOiBudWxsLFxuICAgICAgZGVsaXZlcnlUeXBlOiBTZWFzb25UaWNrZXREZWxpdmVyeVR5cGUuU3BlY2lhbERlbGl2ZXJ5LFxuICAgICAgZGVsaXZlcnlBZGRyZXNzQW5kUG9zdGNvZGU6IG51bGwsXG4gICAgICBwaG90b0NhcmROdW1iZXI6IG51bGwsXG4gICAgICBhZGRpdGlvbmFsSW5mb3JtYXRpb246IG51bGwsXG4gICAgICBzdGFydERhdGU6IG1vbWVudCgpLnNldCgnaG91cicsIDIzKS5zZXQoJ21pbnV0ZScsIDU5KSxcbiAgICAgIG9uQmVoYWxmT2ZFbWFpbDogbnVsbCxcbiAgICAgIHRpY2tldENhcmRUeXBlOiBudWxsLCBcbiAgICAgIG95c3RlckNhcmROdW1iZXI6IG51bGwsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPFNlYXNvblRpY2tldHNUZW1wUGFyYW1zPihcbiAgICAgIGRlZmF1bHRWYWwsXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcbiAgICAgIFsnc3RhcnREYXRlJ11cbiAgICApO1xuICB9XG5cbiAgLypcbiAgICogQ3JlYXRlcyBhIE1lZXRpbmcgUm9vbSBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VNZWV0aW5nUm9vbVF1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaE1lZXRpbmdSb29tQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoTWVldGluZ1Jvb21BcmdzIHR5cGVcbiAgICovXG4gIHB1YmxpYyBtYWtlTWVldGluZ1Jvb21RdWVyeSguLi5hcmdzOiBhbnkpOiBNZWV0aW5nUm9vbVRlbXBQYXJhbXMge1xuICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKG1vbWVudCgpLCAzMCk7XG4gICAgY29uc3QgZGVmYXVsdFZhbDogTWVldGluZ1Jvb21UZW1wUGFyYW1zID0ge1xuICAgICAgb25CZWhhbGZPZkVtYWlsOiBudWxsLFxuICAgICAgdHJhdmVsbGVyczogW10sXG4gICAgICBjb3VudHJ5OiB7IGNDb2RlOiAnR0InLCBjTmFtZTogJ1VuaXRlZCBLaW5nZG9tJyB9LFxuICAgICAgbG9jYXRpb246IG51bGwsXG4gICAgICBwb3N0Y29kZTogbnVsbCxcbiAgICAgIG1lZXRpbmdEYXRlVGltZTogbW9tZW50KCkuc2V0KCdob3VyJywgMjMpLnNldCgnbWludXRlJywgNTkpLFxuICAgICAgbWVldGluZ0R1cmF0aW9uOiBudWxsLFxuICAgICAgZGVsZWdhdGVzOiAwLFxuICAgICAgbGF5b3V0OiBudWxsLFxuICAgICAgZXF1aXBtZW50OiBbXSxcbiAgICAgIGNhdGVyaW5nOiBudWxsLFxuICAgICAgYWRkaXRpb25hbEluZm9ybWF0aW9uOiAnJ1xuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxNZWV0aW5nUm9vbVRlbXBQYXJhbXM+KFxuICAgICAgZGVmYXVsdFZhbCxcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxuICAgICAgWydtZWV0aW5nRGF0ZVRpbWUnXVxuICAgICk7XG4gIH1cblxuICAvKiBDcmVhdGUgUXVlcnkgRGVmYXVsdHMgRW5kICovXG5cbiAgc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldEF1dG9Mb2dvdXRDb25maWcoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIC8qKlxuICAgKiBPdmVyd3JpdGUgaWYgdGhlIE9CVCBkaXNwbGF5cyBhIGxpc3Qgb2Ygb2ZmaWNlcyBpbnN0ZWFkIG9mIHNlYXJjaGluZyBvbiB0aGVtXG4gICAqL1xuICBwdWJsaWMgc2hvdWxkRmV0Y2hBbGxPZmZpY2VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpc0ZsaWdodHNHcm91cGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlzRXVyb1N0YXJHcm91cGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldENvdW50cnlGdWxsTmFtZUZyb21Db3VudHJ5Q29kZShjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBmdWxsTmFtZSA9ICdVbmtub3duJztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb3VudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvdW50cnkgPSB0aGlzLmNvdW50cmllc1tpXTtcblxuICAgICAgaWYgKGNvdW50cnkuY0NvZGUgPT09IGNvZGUpIHtcbiAgICAgICAgcmV0dXJuIGNvdW50cnkuY05hbWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bGxOYW1lO1xuICB9XG5cbiAgZ2V0VXNlclJlY2VudFNlYXJjaGVzKFxuICAgIHNlcnZpY2VUeXBlPzogZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLFxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxuICApOiBPYnNlcnZhYmxlPFJlY2VudFNlYXJjaFtdPiB7XG4gICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xuICAgIGNvbnN0IHF1ZXJ5ID0geyBzZXJ2aWNlVHlwZSB9O1xuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxHZXRVc2VyUmVjZW50U2VhcmNoZXNSZXN1bHRBcnJheT4gPVxuICAgICAgdGhpcy5nZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XG5cbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IEdldFVzZXJSZWNlbnRTZWFyY2hlc1Jlc3VsdEFycmF5KTogUmVjZW50U2VhcmNoW10gPT4ge1xuICAgICAgY29uc3QgZGF0YTogUmVjZW50U2VhcmNoW10gPSByZXN1bHRzLm1hcChcbiAgICAgICAgKHJlc3VsdDogR2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0KTogUmVjZW50U2VhcmNoID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZCxcbiAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxuICAgICAgICAgICAgc2VydmljZVR5cGU6IHJlc3VsdC5zZXJ2aWNlVHlwZSxcbiAgICAgICAgICAgIHNlYXJjaEFyZ3M6IHJlc3VsdC5zZWFyY2hBcmdzLFxuICAgICAgICAgICAgY3JlYXRlZEF0OiByZXN1bHQuY3JlYXRlZEF0LFxuICAgICAgICAgICAgdXBkYXRlZEF0OiByZXN1bHQudXBkYXRlZEF0LFxuICAgICAgICAgICAgdHJhdmVsRGF0ZTogcmVzdWx0LnRyYXZlbERhdGUsXG4gICAgICAgICAgICB0cmF2ZWxsZXJzOiByZXN1bHQudHJhdmVsbGVyc1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfTtcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcbiAgfVxuXG4gIGdldFVzZXJSZWNlbnRCb2x0U2VhcmNoZXMoXG4gICAgaXNCb2x0OiBib29sZWFuLFxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxuICApOiBPYnNlcnZhYmxlPEJvbHRTZWFyY2hbXT4ge1xuICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcblxuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxHZXRVc2VyUmVjZW50Qm9sdFNlYXJjaGVzUmVzdWx0QXJyYXk+ID1cbiAgICAgIHRoaXMuZ2V0VXNlclJlY2VudEJvbHRTZWFyY2hlc0ZldGNoZXIuZmV0Y2hMaXN0KHsgaXNCb2x0IH0pO1xuXG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBHZXRVc2VyUmVjZW50Qm9sdFNlYXJjaGVzUmVzdWx0QXJyYXkpOiBCb2x0U2VhcmNoW10gPT4ge1xuICAgICAgY29uc3QgZGF0YTogQm9sdFNlYXJjaFtdID0gcmVzdWx0cy5tYXAoXG4gICAgICAgIChyZXN1bHQ6IEdldFVzZXJSZWNlbnRCb2x0U2VhcmNoZXNSZXN1bHQpOiBCb2x0U2VhcmNoID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZCxcbiAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxuICAgICAgICAgICAgaXNCb2x0OiByZXN1bHQuaXNCb2x0LFxuICAgICAgICAgICAgc2VhcmNoQXJnczogcmVzdWx0LnNlYXJjaEFyZ3MsXG4gICAgICAgICAgICBjcmVhdGVkQXQ6IHJlc3VsdC5jcmVhdGVkQXQsXG4gICAgICAgICAgICB1cGRhdGVkQXQ6IHJlc3VsdC51cGRhdGVkQXQsXG4gICAgICAgICAgICB0cmF2ZWxEYXRlOiByZXN1bHQudHJhdmVsRGF0ZSxcbiAgICAgICAgICAgIHRyYXZlbGxlcnM6IHJlc3VsdC50cmF2ZWxsZXJzXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIGlzTG9hZGluZz8ubmV4dChmYWxzZSk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xuICB9XG5cbiAgZ2V0VXNlckZhdm91cml0ZVNlYXJjaGVzKFxuICAgIHNlcnZpY2VUeXBlPzogZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLFxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxuICApOiBPYnNlcnZhYmxlPEdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc1Jlc3VsdEFycmF5PiB7XG4gICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xuICAgIGNvbnN0IHF1ZXJ5ID0geyBzZXJ2aWNlVHlwZSB9O1xuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxHZXRVc2VyRmF2b3VyaXRlU2VhcmNoZXNSZXN1bHRBcnJheT4gPVxuICAgICAgdGhpcy5nZXRVc2VyRmF2b3VyaXRlU2VhcmNoZXNGZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XG5cbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IEdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc1Jlc3VsdEFycmF5KSA9PiB7XG4gICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xuICAgIH07XG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIHRhcChmdW5jKSk7XG4gIH1cblxuICBkZWxldGVSZWNlbnRTZWFyY2hCeUlEKGlkOiBzdHJpbmcsIGlzQm9sdCA9IGZhbHNlKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5iYXNlRGVsZXRlUmVjZW50U2VhcmNoVXBkYXRlci51cGRhdGVPbmUoeyBpZDogaWQsIGlzQm9sdCB9KTtcbiAgfVxuXG4gIGRlbGV0ZUZhdm91cml0ZVNlYXJjaEJ5SUQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmRlbGV0ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXIudXBkYXRlT25lKHsgaWQ6IGlkIH0pO1xuICB9XG5cbiAgZGVsZXRlQWxsUmVjZW50U2VhcmNoZXMoaXNCb2x0ID0gZmFsc2UpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcblxuICAgIGNvbnN0IHVzZXJJZCA9IHRoaXMudXNlclNlcnZpY2UuYm9ibyA/IHRoaXMudXNlclNlcnZpY2UuYm9iby5pZCA6ICB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJJZCgpO1xuXG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlQWxsUmVjZW50U2VhcmNoZXNVcGRhdGVyLnVwZGF0ZU9uZSh7dXNlcklkOiB1c2VySWQudG9TdHJpbmcoKSwgaXNCb2x0fSlcbiAgfVxuXG4gIHNhdmVSZWNlbnRTZWFyY2gocXVlcnk6IGdyYXBocWxUeXBlcy5TYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMpOiB2b2lkIHtcbiAgICBpZiAocXVlcnkpIHtcbiAgICAgIHRoaXMuYmFzZVNhdmVSZWNlbnRTZWFyY2hVcGRhdGVyLnVwZGF0ZU9uZShxdWVyeSkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBzYXZlUmVjZW50Qm9sdFNlYXJjaChxdWVyeTogZ3JhcGhxbFR5cGVzLlNhdmVSZWNlbnRCb2x0U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMpOiB2b2lkIHtcbiAgICBpZiAocXVlcnkpIHtcbiAgICAgIHRoaXMuc2F2ZVJlY2VudEJvbHRTZWFyY2hVcGRhdGVyLnVwZGF0ZU9uZShxdWVyeSkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb3ZpZE1pY3Jvc2l0ZVRva2VuKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q292aWRNaWNyb3NpdGVUb2tlbkZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHRoZSBsaXN0IG9mIGV1cm9zdGFyIHN0YXRpb24gbG9jYXRpb25zIGJhc2VkIG9uIHNlYXJjaCB0ZXJtIGdpdmVuXG4gICAqIEB0b2RvIC0gZmlsbCB0aGlzIG91dCBzbyB0aGF0IGl0IGFjdHVhbGx5IHBlcmZvcm1zIGEgaHR0cCBjYWxsXG4gICAqIEBwYXJhbSB0ZXJtIC0gdGhlIHRlcm0gd2Ugd2FudCB0byBzZWFyY2ggYnlcbiAgICogQHJldHVybnNcbiAgICovXG4gIGxvb2t1cEV1cm9zdGFyU3RhdGlvbnModGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xuICAgIGNvbnNvbGUubG9nKCd0ZXJtfCAnLCB0ZXJtKTtcbiAgICBpZiAodGVybSA9PT0gJycpIHtcbiAgICAgIHJldHVybiBvZih0aGlzLmV1cm9zdGF0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZihcbiAgICAgICAgdGhpcy5ldXJvc3RhdGlvbnMuZmlsdGVyKHYgPT4gdi5kZXN0aW5hdGlvbi50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGVybS50b0xvd2VyQ2FzZSgpKSA+IC0xKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBzZWFyY2hUcmF2ZWxsZXJzKFxuICAgIGlucHV0OiBzdHJpbmcsXG4gICAgc2VhcmNoVHJhdmVsbGVyc0J5OiBUcmF2ZWxsZXJTZWFyY2hUeXBlcyxcbiAgICBjb21wYW55SWQ/OiBzdHJpbmcsXG4gICAgaXNTaGFyaW5nPzogYm9vbGVhblxuICApOiBPYnNlcnZhYmxlPFRyYXZlbGxlcltdPiB7XG4gICAgY29uc3QgdHlwZTogQm9va2VyVHlwZSA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckJvb2tpbmdUeXBlKCk7XG4gICAgdGhpcy50cmF2ZWxsZXJfZXJyb3IgPSBmYWxzZTtcbiAgICAvKiBUT0RPXG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UudXNlQWdlbnRDYW5Cb29rRm9yKCkpIHtcbiAgICAgIHR5cGUgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZVZhbHVlKCdBZ2VudENhbkJvb2tGb3InKTtcbiAgICB9Ki9cbiAgICBpZiAoXG4gICAgICB0eXBlICYmXG4gICAgICB0eXBlICE9PSBCb29rZXJUeXBlLlNlbGZCb29rICYmXG4gICAgICB0eXBlICE9PSBCb29rZXJUeXBlLlRyYXZlbGxlciAmJlxuICAgICAgaW5wdXQubGVuZ3RoID49IDFcbiAgICApIHtcbiAgICAgIGNvbnN0IGlucHV0V29yZHMgPSBpbnB1dC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oW1xcd10pKy9nKTtcbiAgICAgIGNvbnN0IGFyZ3M6IFNlYXJjaFVzZXJDYW5Cb29rRm9yUXVlcnlWYXJpYWJsZXMgPSB7fTtcbiAgICAgIHN3aXRjaCAoc2VhcmNoVHJhdmVsbGVyc0J5KSB7XG4gICAgICAgIGNhc2UgVHJhdmVsbGVyU2VhcmNoVHlwZXMubmFtZTpcbiAgICAgICAgICBhcmdzLnVzZXJOYW1lID0gaW5wdXRXb3Jkcy5sZW5ndGggPiAxID8gaW5wdXRXb3Jkc1swXSA6IGlucHV0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRyYXZlbGxlclNlYXJjaFR5cGVzLmVtYWlsOlxuICAgICAgICAgIGFyZ3MuZW1haWwgPSBpbnB1dDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUcmF2ZWxsZXJTZWFyY2hUeXBlcy5lbXBsb3llZU51bWJlcjpcbiAgICAgICAgICBhcmdzLmVtcGxveWVlSWQgPSBpbnB1dDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbXBhbnlJZCkge1xuICAgICAgICBhcmdzLmNvbXBhbnlJZCA9IGNvbXBhbnlJZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoVXNlcnNDYW5Cb29rRm9yRmV0Y2hlci5mZXRjaExpc3QoYXJncykucGlwZShcbiAgICAgICAgbWFwKChkYXRhOiBUcmF2ZWxsZXJbXSkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oZWxwZXJzLmNsb25lKGRhdGEpLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGEuc3VybmFtZSA8IGIuc3VybmFtZSA/IC0xIDogYS5zdXJuYW1lID4gYi5zdXJuYW1lID8gMSA6IDA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICB9XG4gIH1cblxuICBjb252ZXJ0VG9JbnB1dEZsaWdodEpvdXJuZXkoZmxpZ2h0Sm91cm5leTogRmxpZ2h0Sm91cm5leSk6IElucHV0RmxpZ2h0Sm91cm5leSB7XG4gICAgY29uc3QgcHJvcGVydGllc1RvRGVsZXRlID0gW1xuICAgICAgJ2NvMlBlckl0ZW0nLFxuICAgICAgJ2NvMlBlclBhc3NlbmdlcicsXG4gICAgICAnam91cm5leUhhc2gnLFxuICAgICAgJ3NhZlJhdGluZycsXG4gICAgICAnam91cm5leUxlZ3MnLFxuICAgICAgJ3NlZ21lbnRHcm91cCdcbiAgICBdO1xuXG4gICAgY29uc3QgZmxpZ2h0Sm91cm5leUNsb25lID0geyAuLi5mbGlnaHRKb3VybmV5IH0gYXMgYW55O1xuICAgIHByb3BlcnRpZXNUb0RlbGV0ZS5mb3JFYWNoKHByb3BlcnR5ID0+IGRlbGV0ZSBmbGlnaHRKb3VybmV5Q2xvbmVbcHJvcGVydHldKTtcbiAgICByZXR1cm4gZmxpZ2h0Sm91cm5leUNsb25lIGFzIElucHV0RmxpZ2h0Sm91cm5leTtcbiAgfVxuXG4gIGdldEZsaWdodEZhcmVSdWxlcyhcbiAgICBmbGlnaHQ6IEZsaWdodEpvdXJuZXksXG4gICAgc291cmNlSWQ6IG51bWJlclxuICApOiBPYnNlcnZhYmxlPEdldEZsaWdodEZhcmVSdWxlc1Jlc3VsdEFycmF5PiB7XG4gICAgY29uc3QgaW5wdXRmbGlnaHRKb3VybmV5OiBJbnB1dEZsaWdodEpvdXJuZXkgPSB0aGlzLmNvbnZlcnRUb0lucHV0RmxpZ2h0Sm91cm5leShmbGlnaHQpO1xuICAgIHJldHVybiB0aGlzLmdldEZsaWdodEZhcmVSdWxlc0ZldGNoZXIuZmV0Y2hMaXN0KHsgZmxpZ2h0OiBpbnB1dGZsaWdodEpvdXJuZXksIHNvdXJjZUlkIH0pO1xuICB9XG5cbiAgZ2V0RmxpZ2h0QnJhbmRlZEZhcmVzKFxuICAgIG91dGJvdW5kRmxpZ2h0czogZ3JhcGhxbFR5cGVzLklucHV0RmxpZ2h0Sm91cm5leVtdLFxuICAgIGluYm91bmRGbGlnaHRzOiBncmFwaHFsVHlwZXMuSW5wdXRGbGlnaHRKb3VybmV5W10sXG4gICAgc3BlY2lmaWNGYXJlSW5mbzogZ3JhcGhxbFR5cGVzLklucHV0U3BlY2lmaWNGYXJlSW5mb1tdLFxuICAgIHNlcnZpY2VJZDogbnVtYmVyXG4gICk6IE9ic2VydmFibGU8R2V0RmxpZ2h0QnJhbmRlZEZhcmVzUmVzdWx0QXJyYXk+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGbGlnaHRCcmFuZGVkRmFyZXNGZXRjaGVyLmZldGNoTGlzdCh7XG4gICAgICBvdXRib3VuZEZsaWdodHMsXG4gICAgICBpbmJvdW5kRmxpZ2h0cyxcbiAgICAgIHNwZWNpZmljRmFyZUluZm8sXG4gICAgICBzZXJ2aWNlSWRcbiAgICB9KTtcbiAgfVxuXG4gIGdldFJhaWxMaXZlRGVwYXJ0dXJlcyhcbiAgICBzdGF0aW9uOiBzdHJpbmcsXG4gICAgZGF0ZVRpbWU/OiBzdHJpbmcsXG4gICAgZGVzdGluYXRpb25Db2RlPzpzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxTZWFyY2hSYWlsTGl2ZURlcGFydHVyZXNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRSYWlsTGl2ZURlcGFydHVyZXNGZXRjaGVyLmZldGNoTGlzdCh7XG4gICAgICBzdGF0aW9uQ29kZTogc3RhdGlvbixcbiAgICAgIGRlcGFydERhdGVUaW1lOiBkYXRlVGltZSxcbiAgICAgIGRlc3RpbmF0aW9uQ29kZVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0RmxpZ2h0U2VhdE1hcChcbiAgICBmbGlnaHRzOiBncmFwaHFsVHlwZXMuSW5wdXRGbGlnaHRKb3VybmV5W10sXG4gICAgc3VwcGxpZXI6IHN0cmluZyxcbiAgICBsb3lhbHR5Q29kZT86IHN0cmluZyxcbiAgICB1c2VySWQ/OiBzdHJpbmcsXG4gICAgaXNHdWVzdDpib29sZWFuID0gZmFsc2UsXG4gICAgZG9iPzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8RmxpZ2h0U2VhdE1hcFJlc3VsdD4ge1xuICAgIC8vIEdldCBzZWFyY2ggcXVlcnlcbiAgICBsZXQgc2VhcmNoUXVlcnkgPSB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0uZ2V0U2VhcmNoUXVlcnkoKTtcblxuICAgIHNlYXJjaFF1ZXJ5LnBhc3NlbmdlcnMgPSB0aGlzLmdldFNlbGVjdGVkdHJhdmVsbGVycygpLm1hcChcbiAgICAgICh4KTogRmxpZ2h0UGFzc2VuZ2VyT2JqZWN0ID0+ICh7XG4gICAgICAgIHR5cGU6IEZsaWdodFBhc3NlbmdlclR5cGUuQWR1bHQsXG4gICAgICAgIGRvYjogeC5kb2IgPyBuZXcgRGF0ZShOdW1iZXIoeC5kb2IpKS50b0xvY2FsZURhdGVTdHJpbmcoKSA6IG51bGwsXG4gICAgICAgIGZpcnN0TmFtZTogeC5mb3JlbmFtZSxcbiAgICAgICAgc3VybmFtZTogeC5zdXJuYW1lLFxuICAgICAgICBpZDogeC5pZCxcbiAgICAgICAgZ3Vlc3Q6IHguZ3Vlc3RcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLmdldEZsaWdodFNlYXRNYXBGZXRjaGVyXG4gICAgICAuZmV0Y2hMaXN0KHsgZmxpZ2h0cywgc2VhcmNoUXVlcnksIHN1cHBsaWVyLCBsb3lhbHR5Q29kZSwgdXNlcklkLCBpc0d1ZXN0LCBkb2IgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGRhdGE6IGdyYXBocWxUeXBlcy5GbGlnaHRTZWF0TWFwUmVzdWx0KSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHNhdmVGYXZvdXJpdGVTZWFyY2goXG4gICAgc2VhcmNoOiBncmFwaHFsVHlwZXMuU2F2ZUZhdm91cml0ZVNlYXJjaE11dGF0aW9uVmFyaWFibGVzXG4gICk6IE9ic2VydmFibGU8U2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmJhc2VTYXZlRmF2b3VyaXRlU2VhcmNoVXBkYXRlci51cGRhdGVPbmUoc2VhcmNoKTtcbiAgfVxuXG4gIGdldENvbmZlcm1hUm9vbUltYWdlcyhob3RlbElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiB7XG4gICAgaWYgKGhvdGVsSWQpIHtcbiAgICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxTZWFyY2hIb3RlbENoYWluc1Jlc3VsdEFycmF5PiA9XG4gICAgICAgIHRoaXMuZ2V0Q29uZmVybWFSb29tSW1hZ2VzRmV0Y2hlci5mZXRjaExpc3QoeyBob3RlbElkIH0pO1xuICAgICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSkpO1xuICAgIH1cbiAgfVxuXG4gIGVtYWlsQmFza2V0KGlkOiBzdHJpbmcsIGVtYWlsczogc3RyaW5nW10gPSBbXSk6IE9ic2VydmFibGU8Z3JhcGhxbFR5cGVzLkJhc2tldD4ge1xuICAgIHJldHVybiB0aGlzLmVtYWlsQmFza2V0RmV0Y2hlci5mZXRjaExpc3QoeyBpZCwgZW1haWxzIH0pO1xuICB9XG5cbiAgZ2VuZXJhdGVCYXNrZXRQZGYoaWQ6IHN0cmluZywgZW1haWxzOiBzdHJpbmdbXSA9IFtdKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5iYXNlR2VuZXJhdGVCYXNrZXRQZGZGZXRjaGVyLmZldGNoTGlzdCh7IGlkLCBlbWFpbHMgfSk7XG4gIH1cblxuICBzdWJtaXRJcmxGb3JtKCkge1xuICAgIGNvbnN0IGN1cnJlbnRVc2VyRW1haWwgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJFbWFpbCgpO1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHRoaXMuc2VhcmNoZXNbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXTtcbiAgICBsZXQgb25CZWhhbGZPZjogc3RyaW5nO1xuICAgIGxldCBwYXNzZW5nZXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9W10gPSBbXTtcblxuICAgIC8vIGdldCBwYXNzZW5nZXJzXG4gICAgdGhpcy5hbGxTdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XG4gICAgICAgIHBhc3NlbmdlcnMgPSB0cmF2ZWxsZXJzLm1hcCgodHJhdmVsbGVyOiBUcmF2ZWxsZXIsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICBsZXQgYWdlOiBudW1iZXI7XG4gICAgICAgICAgaWYgKHRyYXZlbGxlci5kb2IpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVEaWZmID0gTWF0aC5hYnMobmV3IERhdGUoKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZSh0cmF2ZWxsZXIuZG9iKS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgYWdlID0gTWF0aC5mbG9vcih0aW1lRGlmZiAvICgxMDAwICogMzYwMCAqIDI0KSAvIDM2NSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiB0cmF2ZWxsZXIubmFtZSxcbiAgICAgICAgICAgIGFnZTogYWdlPy50b1N0cmluZygpIHx8IHRyYXZlbGxlci5hZ2VUeXBlIHx8ICdOb3Qgc3BlY2lmaWVkJyxcbiAgICAgICAgICAgIGRpc2NvdW50Q2FyZDogc2VhcmNoUGFyYW1zLmRpc2NvdW50Q2FyZFtpbmRleF1cbiAgICAgICAgICAgICAgPyBzZWFyY2hQYXJhbXMuZGlzY291bnRDYXJkW2luZGV4XS5uYW1lXG4gICAgICAgICAgICAgIDogJ05vbmUnLFxuICAgICAgICAgICAgLy8gISBsb3lhbHR5IGNhcmQgZG9lc250IGV4aXN0IHlldCwgc28gd2h5IGRvIHdlIHNlbmQgaXQgdG8gdGhlIGVtYWlsXG4gICAgICAgICAgICBsb3lhbHR5Q2FyZDogJ05vbmUnXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9uQmVoYWxmT2YgPSB0cmF2ZWxsZXJzWzBdLmVtYWlsID8gdHJhdmVsbGVyc1swXS5lbWFpbCA6IGN1cnJlbnRVc2VyRW1haWw7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBnZXQganJmcmVmZXJlbmNlXG4gICAgdGhpcy5hbGxTdWJzY3JpcHRpb24uYWRkKFxuICAgICAgc2VhcmNoUGFyYW1zLnJlc3VsdHMuc3Vic2NyaWJlKChpcmxKb3VybmV5OiBncmFwaHFsVHlwZXMuSXJsSm91cm5leU9wdGlvbnNbXSkgPT4ge1xuICAgICAgICBpZiAoaXJsSm91cm5leVswXT8uanJmcmVmZXJlbmNlKSB7XG4gICAgICAgICAgdGhpcy5qcmZSZWZlcmVuY2UgPSBpcmxKb3VybmV5WzBdPy5qcmZyZWZlcmVuY2U7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmpyZlJlZmVyZW5jZSAmJiBwYXNzZW5nZXJzKSB7XG4gICAgICBwYXNzZW5nZXJzID0gcGFzc2VuZ2Vycy5tYXAoKHBhc3NlbmdlciwgaSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnBhc3NlbmdlcixcbiAgICAgICAgICBkaXNjb3VudENhcmQ6IHNlYXJjaFBhcmFtcy5kaXNjb3VudENhcmRbaV0gPyBzZWFyY2hQYXJhbXMuZGlzY291bnRDYXJkW2ldLm5hbWUgOiAnTm9uZScsXG4gICAgICAgICAgLy8gbm8gbG95YWx0eSBjYXJkcyBkb25lIHlldCwgYW1lbmQgdGhpcyB3aGVuIGl0IGV4aXN0c1xuICAgICAgICAgIGxveWFsdHlDYXJkOiAnTm9uZSdcbiAgICAgICAgfTtcbiAgICAgIH0pOyAvLyBhcyB1bmtub3duIGFzIHtba2V5OnN0cmluZ106c3RyaW5nO31bXVxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgdHJhaW5OdW1iZXI6IHNlYXJjaFBhcmFtcy50cmFpbk51bWJlciB8fCAnQW55JyxcbiAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbjogc2VhcmNoUGFyYW1zLnRyYXZlbGxpbmdGcm9tLm5hbWUsXG4gICAgICAgIGRlc3RpbmF0aW9uU3RhdGlvbjogc2VhcmNoUGFyYW1zLnRyYXZlbGxpbmdUby5uYW1lLFxuICAgICAgICBvdXRib3VuZERhdGU6IHNlYXJjaFBhcmFtcy5vdXRCb3VuZERhdGVUaW1lLFxuICAgICAgICBpbmJvdW5kRGF0ZTogc2VhcmNoUGFyYW1zLmluQm91bmREYXRlVGltZSxcbiAgICAgICAgYWRkaXRpb25hbEluZm86IHNlYXJjaFBhcmFtcy5hZGRpdGlvbmFsSW5zdHJ1Y3Rpb25zIHx8ICdObyBhZGRpdGlvbmFsIGluc3RydWN0aW9ucycsXG4gICAgICAgIHNlcnZpY2VDbGFzczogc2VhcmNoUGFyYW1zLmlybENsYXNzIHx8ICdBbnknLFxuICAgICAgICBvZmZsaW5lUmVmZXJlbmNlOiB0aGlzLmpyZlJlZmVyZW5jZSxcbiAgICAgICAgb25CZWhhbGZPZixcbiAgICAgICAgcGFzc2VuZ2Vyc1xuICAgICAgfTtcbiAgICAgIGNvbnNvbGUubG9nKHBheWxvYWQpO1xuXG4gICAgICB0aGlzLnNlbmRPZmZsaW5lTm90aWZpY2F0aW9uKHBheWxvYWQpLnN1YnNjcmliZShcbiAgICAgICAgKHJlc3VsdDogZ3JhcGhxbFR5cGVzLklybE9mZmxpbmVOb3RpZnlSZXN1bHQpID0+IHtcbiAgICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICAgICAgICAgIE1vZGFsVHlwZXMuT2ZmbGluZVJlcXVlc3REaWFsb2dDb21wb25lbnQsXG4gICAgICAgICAgICAgIHsgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCcsIGJhY2tkcm9wOiAnc3RhdGljJyB9LFxuICAgICAgICAgICAgICB7IGpyZlJlZmVyZW5jZTogdGhpcy5qcmZSZWZlcmVuY2UgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgICAgICAgICAgTW9kYWxUeXBlcy5Nb2RhbEVycm9yQ29tcG9uZW50LFxuICAgICAgICAgICAgICB7IGNlbnRlcmVkOiB0cnVlLCBiYWNrZHJvcDogJ3N0YXRpYycgfSxcbiAgICAgICAgICAgICAgeyBlcnJvcjogJ1VuYWJsZSB0byBzZW5kIG9mZmxpbmUgbm90aWZpY2F0aW9uJyB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWxdLnJlc2V0KCk7XG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXS5jaG9zZW4gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzZW5kT2ZmbGluZU5vdGlmaWNhdGlvbihqcmZSZWZlcmVuY2U6IGFueSk6IE9ic2VydmFibGU8Z3JhcGhxbFR5cGVzLklybE9mZmxpbmVOb3RpZnlSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kT2ZmbGluZU5vdGlmaWNhdGlvbkZldGNoZXIuZmV0Y2hPbmUoanJmUmVmZXJlbmNlKTtcbiAgfVxuXG4gIGNvbnZlcnRDdXJyZW5jeShxdWVyeToge1xuICAgIGJhc2VDdXJyZW5jeUNvZGU6IEN1cnJlbmN5Q29kZTtcbiAgICBjb252ZXJ0ZWRDdXJyZW5jeUNvZGU6IEN1cnJlbmN5Q29kZTtcbiAgICBiYXNlQ3VycmVuY3lBbW91bnQ6IG51bWJlcjtcbiAgfSk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuY29udmVydEN1cnJlbmN5RmV0Y2hlci5mZXRjaE9uZShxdWVyeSk7XG4gIH1cblxuICBnZXRDdXJyZW5jeUNvbnZlcnNpb25SYXRlcyhxdWVyeTogeyBiYXNlQ3VycmVuY3lDb2RlOiBDdXJyZW5jeUNvZGUgfSk6IE9ic2VydmFibGU8Q3VycmVuY3lSYXRlcz4ge1xuICAgIHJldHVybiB0aGlzLmdldEN1cnJlbmN5Q29udmVyc2lvblJhdGVzRmV0Y2hlci5mZXRjaE9uZShxdWVyeSkucGlwZSh0YWtlKDEpKTtcbiAgfVxuXG4gIGdldENvdW50cmllcygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuY291bnRyaWVzO1xuICB9XG5cbiAgZ2V0SG90ZWxEZXRhaWxzKHJhdGVLZXk6IHN0cmluZyk6IE9ic2VydmFibGU8SG90ZWxEZXRhaWxzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SG90ZWxEZXRhaWxzRmV0Y2hlci5mZXRjaE9uZSh7IHJhdGVLZXkgfSkucGlwZSh0YWtlKDEpKTtcbiAgfVxuXG4gIGdldFNlcnZpY2Uoc2VydmljZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNlcnZpY2U+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRTZXJ2aWNlRmV0Y2hlci5mZXRjaE9uZSh7IHNlcnZpY2VJZCB9KTtcbiAgfVxuXG4gIGdldFRyYWlubGluZVNlYXJjaENvbmZpZygpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmdldFRyYWlubGluZVNlYXJjaENvbmZpZ0ZldGNoZXIuZmV0Y2hPbmUoKTtcbiAgfVxuXG4gIGFzeW5jIHNpbXVsdGFuZW91c1NlYXJjaGVzQ2hlY2soaWdub3JlQ2hvc2VuOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzZWFyY2hfb2JqZWN0c19jb3B5ID0gdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMuaW5pdF9zZWFyY2hfb2JqZWN0cygpKTtcblxuICAgIGlmICh0aGlzLnVzZXJTZXJ2aWNlLmNhbkJvb2soU2VydmljZVR5cGUuRmxpZ2h0KSAmJiB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0pIHtcbiAgICAgIHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5ldXJvc3RhckZyb21GbGlnaHRTZWFyY2hQZXJmb3JtZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5yYWlsRnJvbUZsaWdodFNlYXJjaFBlcmZvcm1lZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkV1cm9zdGFyXSkge1xuICAgICAgLy8gcmVzZXQgdGhlIHNlYXJjaF9vYmplY3QgaW5jYXNlIG9mIGFkZGl0aW9uYWwgc2VhcmNoZXNcbiAgICAgIHRoaXMuc2VhcmNoX29iamVjdHNbU2VydmljZVR5cGUuRXVyb3N0YXJdLnByaW9yaXR5ID1cbiAgICAgICAgc2VhcmNoX29iamVjdHNfY29weVtTZXJ2aWNlVHlwZS5FdXJvc3Rhcl0ucHJpb3JpdHk7XG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkV1cm9zdGFyXS5yZXN1bHRVcmwgPVxuICAgICAgICBzZWFyY2hfb2JqZWN0c19jb3B5W1NlcnZpY2VUeXBlLkV1cm9zdGFyXS5yZXN1bHRVcmw7XG4gICAgfVxuICAgIGlmICh0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLlJhaWxdKSB7XG4gICAgICAvLyByZXNldCB0aGUgc2VhcmNoX29iamVjdCBpbmNhc2Ugb2YgYWRkaXRpb25hbCBzZWFyY2hlc1xuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5SYWlsXS5wcmlvcml0eSA9XG4gICAgICAgIHNlYXJjaF9vYmplY3RzX2NvcHlbU2VydmljZVR5cGUuUmFpbF0ucHJpb3JpdHk7XG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLlJhaWxdLnJlc3VsdFVybCA9XG4gICAgICAgIHNlYXJjaF9vYmplY3RzX2NvcHlbU2VydmljZVR5cGUuUmFpbF0ucmVzdWx0VXJsO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMuc2VhcmNoX29iamVjdHNbU2VydmljZVR5cGUuRmxpZ2h0XT8uY2hvc2VuICYmXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLmNhbkJvb2soU2VydmljZVR5cGUuUmFpbCkgJiZcbiAgICAgICghdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5SYWlsXS5jaG9zZW4gfHwgaWdub3JlQ2hvc2VuKVxuICAgICkge1xuICAgICAgbGV0IHRyYWlubGluZUNvbmZpZyA9ICcnO1xuICAgICAgY29uc3QgaGFzVExFbmFibGVkID0gdGhpcy51c2VyU2VydmljZS51c2VySGFzU2VydmljZVByb3ZpZGVyKFxuICAgICAgICBTZXJ2aWNlVHlwZS5SYWlsLFxuICAgICAgICBTZXJ2aWNlUHJvdmlkZXIuVHJhaW5saW5lXG4gICAgICApO1xuXG4gICAgICBpZiAoaGFzVExFbmFibGVkKSB7XG4gICAgICAgIHRyYWlubGluZUNvbmZpZyA9IGF3YWl0IHRoaXMuZ2V0VHJhaW5saW5lU2VhcmNoQ29uZmlnKCkudG9Qcm9taXNlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgYXdhaXQgdGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdLmNhbkJlUmFpbFNlYXJjaGVkKFxuICAgICAgICAgIHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5jaG9zZW5TZWFyY2hUeXBlLFxuICAgICAgICAgIHRyYWlubGluZUNvbmZpZ1xuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJysrKyBDYW4gYmUgcmFpbCBzZWFyY2hlZCArKysnKTtcblxuICAgICAgICBpZiAodHJhaW5saW5lQ29uZmlnICYmIGhhc1RMRW5hYmxlZCkge1xuICAgICAgICAgIC8vIGRvIGEgc3BlY2lmaWMgdHJhaW5saW5lIG9uZVxuICAgICAgICAgIGF3YWl0IHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0uZ2VuZXJhdGVRdWVyeUZyb21GbGlnaHRRdWVyeVRyYWlubGluZShcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5nZXRTZWFyY2hRdWVyeSgpLFxuICAgICAgICAgICAgdGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdLm91dGJvdW5kU2FtZVNlYXJjaFRyYWlubGluZVN0YXRpb25zLFxuICAgICAgICAgICAgdGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdLmluYm91bmRTYW1lU2VhcmNoVHJhaW5saW5lU3RhdGlvbnMsXG4gICAgICAgICAgICB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0uZGVwYXJ0TG9jYXRpb24sXG4gICAgICAgICAgICB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0uYXJyaXZlTG9jYXRpb25cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0uZ2VuZXJhdGVRdWVyeUZyb21GbGlnaHRRdWVyeShcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5nZXRTZWFyY2hRdWVyeSgpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0pO1xuICAgICAgICB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0ucmFpbEZyb21GbGlnaHRTZWFyY2hQZXJmb3JtZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLlJhaWxdLnByaW9yaXR5ID0gdGhpcy5zZWFyY2hfb2JqZWN0cy5GTElHSFQucHJpb3JpdHk7XG4gICAgICAgIHRoaXMuc2VhcmNoX29iamVjdHNbU2VydmljZVR5cGUuUmFpbF0ucmVzdWx0VXJsID0gdGhpcy5zZWFyY2hfb2JqZWN0cy5GTElHSFQucmVzdWx0VXJsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMuc2VhcmNoX29iamVjdHNbU2VydmljZVR5cGUuRmxpZ2h0XT8uY2hvc2VuICYmXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLmNhbkJvb2soU2VydmljZVR5cGUuRXVyb3N0YXIpICYmXG4gICAgICAoIXRoaXMuc2VhcmNoX29iamVjdHNbU2VydmljZVR5cGUuRXVyb3N0YXJdLmNob3NlbiB8fCBpZ25vcmVDaG9zZW4pXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdLmNhbkJlRXVyb1NlYXJjaGVkKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5FdXJvc3Rhcl0uZ2VuZXJhdGVRdWVyeUZyb21GbGlnaHRRdWVyeShcbiAgICAgICAgICB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0uZ2V0U2VhcmNoUXVlcnkoKSxcbiAgICAgICAgICAodGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdLmRlcGFydExvY2F0aW9uIGFzIE9CVEFpcnBvcnREZXRhaWxzKS5nYXRld2F5LFxuICAgICAgICAgICh0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0uYXJyaXZlTG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHMpLmdhdGV3YXlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdLmV1cm9zdGFyRnJvbUZsaWdodFNlYXJjaFBlcmZvcm1lZCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2VhcmNoX29iamVjdHNbU2VydmljZVR5cGUuRXVyb3N0YXJdLnByaW9yaXR5ID0gdGhpcy5zZWFyY2hfb2JqZWN0cy5GTElHSFQucHJpb3JpdHk7XG4gICAgICAgIHRoaXMuc2VhcmNoX29iamVjdHNbU2VydmljZVR5cGUuRXVyb3N0YXJdLnJlc3VsdFVybCA9IHRoaXMuc2VhcmNoX29iamVjdHMuRkxJR0hULnJlc3VsdFVybDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5GbGlnaHRdPy5jaG9zZW4pIHtcbiAgICAgIHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5ob3RlbEZyb21GbGlnaHRTZWFyY2hQZXJmb3JtZWQgPVxuICAgICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkhvdGVsXT8uY2hvc2VuO1xuICAgIH1cbiAgfVxuXG4gIHR1cm5PZmZBbGxDaG9zZW5Qcm9kdWN0KCk6IHZvaWQge1xuICAgIE9iamVjdC5rZXlzKHRoaXMuc2VhcmNoX29iamVjdHMpLm1hcCgoa2V5OiBTZXJ2aWNlVHlwZSkgPT4ge1xuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1trZXldLmNob3NlbiA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgbWFrZVBvcnRhbEZsaWdodENhbGwoc3NvUXVlcnk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICBjb25zb2xlLndhcm4oJysrKyBNYWtpbmcgcG9ydGFsbCBmbGlnaHQgY2FsbCArKysnKTtcbiAgICAvLyBhZGQgc2VsZiBhcyB0cmF2ZWxsZXJcbiAgICBsZXQgc2VhcmNoID0gMDtcblxuICAgIGlmICh0aGlzLnNlYXJjaGVzLkZMSUdIVC5zc29TZWFyY2hlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vdGlmaWVyJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBjb25zdCB1c2VyU3ViID0gdGhpcy51c2VyU2VydmljZS5mdWxsVXNlckRldGFpbHMudXNlckRhdGFcbiAgICAgIC5waXBlKHRha2VVbnRpbChub3RpZmllciQpKVxuICAgICAgLnN1YnNjcmliZSgodXNlcjogVXNlckRhdGEpID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKCcrKysgVXNlciBkYXRhIGxvYWRlZCArKysnKTtcbiAgICAgICAgaWYgKHVzZXIgJiYgc3NvUXVlcnkgJiYgc2VhcmNoIDwgMSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignKysrIEdlbmVyYXRlIFNlYXJjaCArKysnKTtcbiAgICAgICAgICBzZWFyY2grKztcbiAgICAgICAgICBjb25zdCBzZWxmVHJhdmVsbGVyID0gVHJhdmVsbGVyT2JqZWN0Lm1ha2VUcmF2ZWxsZXJPYmplY3RGcm9tVXNlckRhdGEodXNlcik7XG4gICAgICAgICAgLy8gICB0aGlzLmFkZFRvVHJhdmVsbGVyU2VsZWN0aW9uKHNlbGZUcmF2ZWxsZXIpO1xuICAgICAgICAgIHRoaXMuYWRkVHJhdmVsbGVyKHNlbGZUcmF2ZWxsZXIpO1xuICAgICAgICAgIC8vIG1hdGNoIHBhcmFtcyB3aXRoIGZsaWdodCBwYXJhbXNcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygncXVlcnk6ICcsIHNzb1F1ZXJ5KTtcbiAgICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMubWFrZUZsaWdodFF1ZXJ5KHNzb1F1ZXJ5KTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhxdWVyeSk7XG4gICAgICAgICAgdGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdLnNzb09iamVjdCA9IHNzb1F1ZXJ5O1xuICAgICAgICAgIHRoaXMuaGlnaGVzdF9zZWFyY2hfcHJpb3JpdHkgPSB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkZsaWdodF0ucHJpb3JpdHk7XG4gICAgICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5GbGlnaHRdLmNob3NlbiA9IHRydWU7XG4gICAgICAgICAgLy8gZG8gc2VhcmNoIGFzIG5vcm1hbFxuICAgICAgICAgIG5vdGlmaWVyJC5jb21wbGV0ZSgpO1xuICAgICAgICAgIHRoaXMuc2VhcmNoZXMuRkxJR0hULnNzb1NlYXJjaGVkID0gdHJ1ZTtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJysrKyBTdGFydCB0aGUgc2VhcmNoZXMgKysrJyk7XG4gICAgICAgICAgdGhpcy5zdGFydFNlYXJjaGVzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIGlmIChzZWFyY2ggPiAwKSB7XG4gICAgICB1c2VyU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIC8vIHJlbW92ZSBzZXNzaW9uIGl0ZW1cbiAgICAvLyBkb2N1bWVudC5jb29raWUgPSBcInNzb0ZsaWdodFBhcmFtcz07ZXhwaXJlcz1cIiArIG5ldyBEYXRlKDApLnRvVVRDU3RyaW5nKCk7XG4gICAgLy8gIHRoaXMuc3RvcmFnZVNlcnZpY2UucmVtb3ZlU2Vzc2lvbkl0ZW0oJ3Nzb19xdWVyeScpO1xuICB9XG5cbiAgZ2V0U2VydmljZVR5cGVEYXRlKHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZSk6IG1vbWVudC5Nb21lbnQge1xuICAgIHN3aXRjaCAoc2VydmljZVR5cGUpIHtcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuSG90ZWw6XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaGVzW3NlcnZpY2VUeXBlXS5jaGVja2luX2RhdGU7XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhcjpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoZXNbc2VydmljZVR5cGVdLnBpY2t1cF9kYXRldGltZTtcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FiOlxuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hlc1tzZXJ2aWNlVHlwZV0uZGVwYXJ0cztcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5FdXJvc3RhcjpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoZXNbc2VydmljZVR5cGVdLm91dEJvdW5kRGF0ZTtcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuUmFpbDpcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWw6XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaGVzW3NlcnZpY2VUeXBlXS5vdXRCb3VuZERhdGVUaW1lO1xuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Mb3VuZ2U6XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLlBhcmtpbmc6XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkZhc3RUcmFjazpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoZXNbc2VydmljZVR5cGVdLmFycml2YWxEYXRldGltZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUud2FybigndW5rbm93biB0cmF2ZWwgdHlwZScpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBnZXRJbndhcmRSYWlsUmVzdWx0cyhcbiAgICBvdXRib3VuZFJlc3VsdHM6IFJhaWxKb3VybmV5T3B0aW9ucyxcbiAgICBvdXR3YXJkSm91cm5leUlkOiBzdHJpbmcsXG4gICAgb3V0d2FyZEFsdGVybmF0aXZlSWRzOiBzdHJpbmdbXSxcbiAgICBpc0V4Y2hhbmdlU2VhcmNoOiBib29sZWFuID0gZmFsc2UsXG4gICAgb3JkZXJJZD86IHN0cmluZyxcbiAgICBiYXNrZXRJdGVtPzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8T0JUUmFpbFF1b3RlUmVzdWx0W10+IHtcbiAgICByZXR1cm4gdGhpcy5zZWFyY2hSYWlsSW53YXJkRmV0Y2hlclxuICAgICAgLmZldGNoTGlzdCh7XG4gICAgICAgIG91dGJvdW5kUmVzdWx0cyxcbiAgICAgICAgb3V0d2FyZEpvdXJuZXlJZCxcbiAgICAgICAgb3V0d2FyZEFsdGVybmF0aXZlSWRzLFxuICAgICAgICBpc0V4Y2hhbmdlU2VhcmNoLFxuICAgICAgICBvcmRlcklkLFxuICAgICAgICBiYXNrZXRJdGVtLFxuICAgICAgICBjbGFzczogdGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXS5jaG9zZW5TZWFyY2hDbGFzcyxcbiAgICAgICAgdHJhdmVsbGVyczogPGFueVtdPnRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0ucHJvY2Vzc1RyYWlubGluZVRyYXZlbGxlcnMoKS5uZXdUcmF2ZWxsZXJzXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIG1hcCgocmVzdWx0czogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgYXBwbGllZFJ1bGVzRGF0YSA9IHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0uYXBwbHlGaWx0ZXIocmVzdWx0cyk7XG5cbiAgICAgICAgICByZXR1cm4gYXBwbGllZFJ1bGVzRGF0YTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBnZXRSYWlsU3RhdGlvbkluZm9CeUlkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XG4gICk6IE9ic2VydmFibGU8SVJhaWxTdGF0aW9uSW5mb3JtYXRpb24+IHtcbiAgICBpZiAoaWQpIHtcbiAgICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcbiAgICAgIHJldHVybiB0aGlzLmdldFJhaWxTdGF0aW9uSW5mb0ZldGNoZXIuZmV0Y2hMaXN0KHsgaWQgfSkucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKChpbmZvOiBSYWlsU3RhdGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXRpb25JbmZvID0gdGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXS5ncm91cFN0YXRpb25JbmZvKGluZm8pO1xuICAgICAgICAgIGlzTG9hZGluZz8ubmV4dChmYWxzZSk7XG4gICAgICAgICAgcmV0dXJuIG9mKHN0YXRpb25JbmZvKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZigpO1xuICAgIH1cbiAgfVxuXG4gIGdldEFpckF2YWlsYmlsaXR5KFxuICAgIGZsaWdodHM6IElucHV0RmxpZ2h0Sm91cm5leVtdLFxuICAgIHNvdXJjZTogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8QWlyQXZhaWxhYmlsdHlSZXN1bHRbXT4ge1xuICAgIHJldHVybiB0aGlzLmdldEFpckF2YWlsYWJpbGl0eUZldGNoZXIuZmV0Y2hMaXN0KHsgZmxpZ2h0cywgc291cmNlIH0pO1xuICB9XG5cbiAgZ2V0RmxpZ2h0QXROZXdDbGFzcyhcbiAgICBzZWFyY2hRdWVyeTogYW55LFxuICAgIGRldGFpbDogYW55LFxuICAgIGFkdWx0czogbnVtYmVyLFxuICAgIGNoaWxkcmVuOiBudW1iZXIsXG4gICAgb3V0Ym91bmROZXdDbGFzczogc3RyaW5nID0gbnVsbCxcbiAgICBpbmJvdW5kTmV3Q2xhc3M6IHN0cmluZyA9IG51bGwsXG4gICAgaW5mYW50czogbnVtYmVyID0gMFxuICApOiBPYnNlcnZhYmxlPHtcbiAgICBmbGlnaHRzOiBGbGlnaHRJdGluZXJhcnlbXSxcbiAgICBydWxlQWN0aW9uU3VtbWFyeTogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2VcbiAgfT4ge1xuICAgIHJldHVybiB0aGlzLmdldEZsaWdodEF0TmV3Q2xhc3NGZXRjaGVyLmZldGNoTGlzdCh7XG4gICAgICBzZWFyY2hRdWVyeSxcbiAgICAgIGRldGFpbCxcbiAgICAgIGFkdWx0cyxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgaW5mYW50cyxcbiAgICAgIG91dGJvdW5kTmV3Q2xhc3MsXG4gICAgICBpbmJvdW5kTmV3Q2xhc3NcbiAgICB9KTtcbiAgfVxuXG4gIGdldEZsaWdodFVwc2VsbE9mZmVycyhcbiAgICBzZWFyY2hRdWVyeTogYW55LFxuICAgIG9yaWdpbmFsRmxpZ2h0SXRpbmVyYXJ5OiBhbnlcbiAgKTogT2JzZXJ2YWJsZTxGbGlnaHRVcHNlbGxPZmZlcnNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGbGlnaHRVcHNlbGxPZmZlcnNGZXRjaGVyLmZldGNoTGlzdCh7XG4gICAgICBzZWFyY2hRdWVyeSxcbiAgICAgIG9yaWdpbmFsRmxpZ2h0SXRpbmVyYXJ5XG4gICAgfSk7XG4gIH1cblxuICBnZXRSYWlsU2VhcmNoRXhjaGFuZ2VSZXN1bHRzKFxuICAgIGJhc2tldEl0ZW06IHN0cmluZyxcbiAgICBzZWN0aW9uSWQ6IHN0cmluZyxcbiAgICBzZWxlY3RlZENoYW5nZWFibGVJZHM6IHN0cmluZ1tdLFxuICAgIG91dGJvdW5kRGF0ZT86IHN0cmluZyxcbiAgICBpbmJvdW5kRGF0ZT86IHN0cmluZ1xuICApIHtcbiAgICByZXR1cm4gdGhpcy5yYWlsU2VhcmNoRXhjaGFuZ2VGZXRjaGVyLmZldGNoTGlzdCh7XG4gICAgICBiYXNrZXRJdGVtLFxuICAgICAgb3V0Ym91bmREYXRlLFxuICAgICAgc2VjdGlvbklkLFxuICAgICAgc2VsZWN0ZWRDaGFuZ2VhYmxlSWRzLFxuICAgICAgaW5ib3VuZERhdGVcbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZUl0aW5lcmFyeUV4Y2hhbmdlKFxuICAgIG9yaWdpbmFsU2VjdGlvbklkOiBzdHJpbmcsXG4gICAgb3V0d2FyZEpvdXJuZXk6IFJhaWxKb3VybmV5RXhjaGFuZ2UsXG4gICAgYmFza2V0SXRlbTogc3RyaW5nLFxuICAgIGlud2FyZEpvdXJuZXk/OiBSYWlsSm91cm5leUV4Y2hhbmdlXG4gICkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZUl0aW5lcmFyeUV4Y2hhbmdlVXBkYXRlci51cGRhdGVPbmUoe1xuICAgICAgb3JpZ2luYWxTZWN0aW9uSWQsXG4gICAgICBvdXR3YXJkSm91cm5leSxcbiAgICAgIGlud2FyZEpvdXJuZXksXG4gICAgICBiYXNrZXRJdGVtXG4gICAgfSk7XG4gIH1cbiAgZ2V0T2ZmaWNlcygpOiBPYnNlcnZhYmxlPEdldFVzZXJDb21wYW55T2ZmaWNlc1Jlc3VsdEFycmF5PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T2ZmaWNlc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gIH1cblxuICBnZXRTdWdnZXN0UGxhY2VzKHF1ZXJ5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPEdldFBsYWNlQXV0b2NvbXBsZXRlUmVzdWx0W10+IHtcbiAgICByZXR1cm4gdGhpcy5zdWdnZXN0UGxhY2VzLmZldGNoTGlzdCh7IHF1ZXJ5IH0pO1xuICB9XG5cbiAgZ2V0TGF0TG9uRnJvbUhlcmVJRChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxHbXRMb2NhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLmxhdExvbkZyb21IZXJlSUQuZmV0Y2hMaXN0KHsgaWQgfSk7XG4gIH1cblxuICBnZXRHbXRJdGluZXJhcnlPcHRpb25zKFxuICAgIHN0YXJ0TG9jYXRpb246IEdtdExvY2F0aW9uLFxuICAgIGVuZExvY2F0aW9uOiBHbXRMb2NhdGlvbixcbiAgICBzdGFydERhdGU6IHN0cmluZyxcbiAgICBlbmREYXRlOiBzdHJpbmcsXG4gICAgcm91bmRUcmlwOiBib29sZWFuXG4gICk6IE9ic2VydmFibGU8R2V0R210SXRpbmVyYXJ5T3B0aW9uc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJQcmVmZXJyZWRUcmFuc3BvcnRIdWJzKCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgodmFsdWVzOiBQcmVmZXJyZWRUcmFuc3BvcnRIdWJbXSkgPT4ge1xuICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgY29uc3QgcmFpbHMgPSB2YWx1ZXNcbiAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgPT09IFNlcnZpY2VUeXBlLlJhaWwpXG4gICAgICAgICAgICAubWFwKGl0ZW0gPT4gaXRlbS5jb2RlKTtcbiAgICAgICAgICBjb25zdCBmbGlnaHRzID0gdmFsdWVzXG4gICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlID09PSBTZXJ2aWNlVHlwZS5GbGlnaHQpXG4gICAgICAgICAgICAubWFwKGl0ZW0gPT4gaXRlbS5jb2RlKTtcblxuICAgICAgICAgIHJldHVybiB0aGlzLmdldEdNVEl0aW5lcmFyeU9wdGlvbnNcbiAgICAgICAgICAgIC5mZXRjaExpc3Qoe1xuICAgICAgICAgICAgICBzdGFydExvY2F0aW9uLFxuICAgICAgICAgICAgICBlbmRMb2NhdGlvbixcbiAgICAgICAgICAgICAgc3RhcnREYXRlLFxuICAgICAgICAgICAgICBlbmREYXRlLFxuICAgICAgICAgICAgICByb3VuZFRyaXBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgbWFwKChyZXN1bHQ6IEdldEdtdEl0aW5lcmFyeU9wdGlvbnNSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBzaG93IHByZWZlcnJlZCBzdGF0aW9ucy9haXJwb3J0cyBpZiB0aGV5IGV4aXN0LCBvdGhlcndpc2Ugc2hvdyBhbGwgc3RhdGlvbnMvYWlycG9ydHNcbiAgICAgICAgICAgICAgICBpZiAocmFpbHMubGVuZ3RoICYmIHJlc3VsdC5yYWlsSXRpbmVyYXJ5T3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJTdGF0aW9ucyA9IChzdGF0aW9uczogR210SXRpbmVyYXJ5UmFpbFN0YXRpb25PcHRpb25bXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgc3RhdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LnJhaWxTdGF0aW9uPy5zdGF0aW9uQ29kZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgcmFpbHMuaW5jbHVkZXMoaXRlbS5yYWlsU3RhdGlvbi5zdGF0aW9uQ29kZSlcbiAgICAgICAgICAgICAgICAgICAgKSA/PyBbXTtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRSYWlsU3RhdGlvbnNUb1N0YXJ0OiBHbXRJdGluZXJhcnlSYWlsU3RhdGlvbk9wdGlvbltdID1cbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyU3RhdGlvbnMocmVzdWx0LnJhaWxJdGluZXJhcnlPcHRpb24uY2xvc2VzdFJhaWxTdGF0aW9uc1RvU3RhcnQpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRSYWlsU3RhdGlvbnNUb0VuZDogR210SXRpbmVyYXJ5UmFpbFN0YXRpb25PcHRpb25bXSA9IGZpbHRlclN0YXRpb25zKFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucmFpbEl0aW5lcmFyeU9wdGlvbi5jbG9zZXN0UmFpbFN0YXRpb25zVG9FbmRcbiAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgIHJlc3VsdC5yYWlsSXRpbmVyYXJ5T3B0aW9uLmNsb3Nlc3RSYWlsU3RhdGlvbnNUb1N0YXJ0ID1cbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRSYWlsU3RhdGlvbnNUb1N0YXJ0Lmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRSYWlsU3RhdGlvbnNUb1N0YXJ0XG4gICAgICAgICAgICAgICAgICAgICAgOiByZXN1bHQucmFpbEl0aW5lcmFyeU9wdGlvbi5jbG9zZXN0UmFpbFN0YXRpb25zVG9TdGFydDtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdC5yYWlsSXRpbmVyYXJ5T3B0aW9uLmNsb3Nlc3RSYWlsU3RhdGlvbnNUb0VuZCA9XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkUmFpbFN0YXRpb25zVG9FbmQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZFJhaWxTdGF0aW9uc1RvRW5kXG4gICAgICAgICAgICAgICAgICAgICAgOiByZXN1bHQucmFpbEl0aW5lcmFyeU9wdGlvbi5jbG9zZXN0UmFpbFN0YXRpb25zVG9FbmQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGZsaWdodHMubGVuZ3RoICYmIHJlc3VsdC5mbGlnaHRJdGluZXJhcnlPcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlckFpcnBvcnRzID0gKGFpcnBvcnRzOiBHbXRJdGluZXJhcnlBaXJwb3J0T3B0aW9uW10pID0+XG4gICAgICAgICAgICAgICAgICAgIGFpcnBvcnRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtID0+IGl0ZW0/LmFpcnBvcnQ/LmlhdGEgJiYgZmxpZ2h0cy5pbmNsdWRlcyhpdGVtLmFpcnBvcnQuaWF0YSlcbiAgICAgICAgICAgICAgICAgICAgKSA/PyBbXTtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWREZXBhcnR1cmVBaXJwb3J0czogR210SXRpbmVyYXJ5QWlycG9ydE9wdGlvbltdID0gZmlsdGVyQWlycG9ydHMoXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5mbGlnaHRJdGluZXJhcnlPcHRpb24uZGVwYXJ0dXJlQWlycG9ydE9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEFycml2YWxBaXJwb3J0czogR210SXRpbmVyYXJ5QWlycG9ydE9wdGlvbltdID0gZmlsdGVyQWlycG9ydHMoXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5mbGlnaHRJdGluZXJhcnlPcHRpb24uYXJyaXZhbEFpcnBvcnRPcHRpb25zXG4gICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICByZXN1bHQuZmxpZ2h0SXRpbmVyYXJ5T3B0aW9uLmRlcGFydHVyZUFpcnBvcnRPcHRpb25zID1cbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWREZXBhcnR1cmVBaXJwb3J0cy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkRGVwYXJ0dXJlQWlycG9ydHNcbiAgICAgICAgICAgICAgICAgICAgICA6IHJlc3VsdC5mbGlnaHRJdGluZXJhcnlPcHRpb24uZGVwYXJ0dXJlQWlycG9ydE9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICByZXN1bHQuZmxpZ2h0SXRpbmVyYXJ5T3B0aW9uLmFycml2YWxBaXJwb3J0T3B0aW9ucyA9XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkQXJyaXZhbEFpcnBvcnRzLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRBcnJpdmFsQWlycG9ydHNcbiAgICAgICAgICAgICAgICAgICAgICA6IHJlc3VsdC5mbGlnaHRJdGluZXJhcnlPcHRpb24uYXJyaXZhbEFpcnBvcnRPcHRpb25zO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFJldHVybiB0aGUgbW9kaWZpZWQgcmVzdWx0XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHZhbHVlcyBpcyBmYWxzeSAoZS5nLiwgZW1wdHkgYXJyYXkpXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0R01USXRpbmVyYXJ5T3B0aW9ucy5mZXRjaExpc3Qoe1xuICAgICAgICAgICAgc3RhcnRMb2NhdGlvbixcbiAgICAgICAgICAgIGVuZExvY2F0aW9uLFxuICAgICAgICAgICAgc3RhcnREYXRlLFxuICAgICAgICAgICAgZW5kRGF0ZSxcbiAgICAgICAgICAgIHJvdW5kVHJpcFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRHdXRDaXR5U3VnZ2VzdGlvbnMoXG4gICAgdXNlcnNBbmRMb2NhdGlvbnM6IEd1dFVzZXJbXSxcbiAgICB1c2VNb3N0Q29tbW9uQ291bnRyeTogYm9vbGVhblxuICApOiBPYnNlcnZhYmxlPEd1dFN1Z2dlc3RlZENpdHlbXT4ge1xuICAgIHJldHVybiB0aGlzLmdldEdVVENpdHlTdWdnZXN0aW9ucy5mZXRjaExpc3Qoe1xuICAgICAgdXNlcnNBbmRMb2NhdGlvbnMsXG4gICAgICB1c2VNb3N0Q29tbW9uQ291bnRyeVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0R3V0TG9jYXRpb25TdWdnZXN0aW9ucyhcbiAgICBpZDogc3RyaW5nLFxuICAgIGNhdGVnb3JpZXM6IFBsYWNlQ2F0ZWdvcnlbXVxuICApOiBPYnNlcnZhYmxlPEd1dFN1Z2dlc3RlZExvY2F0aW9ucz4ge1xuICAgIHJldHVybiB0aGlzLmdldEdVVExvY2F0aW9uU3VnZ2VzdGlvbnMuZmV0Y2hMaXN0KHtcbiAgICAgIGlkLFxuICAgICAgY2F0ZWdvcmllc1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Um91dGVIYXBweShkYXRhOiBEYXRhQXJncywgY3VycmVuY3k6IEN1cnJlbmN5Q29kZSk6IE9ic2VydmFibGU8Um91dGVIYXBweVJlc3VsdHM+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRSb3V0ZUhhcHB5RmV0Y2hlci5mZXRjaExpc3Qoe1xuICAgICAgZGF0YSxcbiAgICAgIGN1cnJlbmN5XG4gICAgfSk7XG4gIH1cblxuICBnZXRNdWx0aXBsZUhvdGVsUmF0aW5ncyhcbiAgICBob3RlbFJhdGluZ0lkZW50aWZpZXJzOiBIb3RlbFJhdGluZ0lkZW50aWZpZXJzW11cbiAgKTogT2JzZXJ2YWJsZTxHZXRNdWx0aXBsZUhvdGVsUmF0aW5nUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRNdWx0aXBsZUhvdGVsUmF0aW5nRmV0Y2hlci5mZXRjaExpc3Qoe1xuICAgICAgaG90ZWxzQW5kR3JvdXBzOiBob3RlbFJhdGluZ0lkZW50aWZpZXJzXG4gICAgfSk7XG4gIH1cblxuICBnZXRGZXJyeVBvcnRzKHF1ZXJ5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPEZlcnJ5UG9ydFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmVycnlQb3J0c0ZldGNoZXIuZmV0Y2hMaXN0KHtcbiAgICAgIHF1ZXJ5OiBxdWVyeVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0QmFubmVyKGRpc3BsYXlUYXJnZXQ6IEJhbm5lckRpc3BsYXlUYXJnZXQsIGFnZW50T25seTogYm9vbGVhbiA9IGZhbHNlKTogT2JzZXJ2YWJsZTxCYW5uZXI+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRCYW5uZXJGZXRjaGVyLmZldGNoT25lKHsgZGlzcGxheVRhcmdldCwgYWdlbnRPbmx5IH0pO1xuICB9XG5cbiAgZ2V0T2ZmaWNlRGl2aXNpb25zKFxuICApOiBPYnNlcnZhYmxlPERpdmlzaW9uW10+IHtcbiAgICAvLyByZXR1cm4gdGhpcy5nZXRPZmZpY2VEaXZpc2lvbnNGZXRjaGVyLmZldGNoTGlzdCgpO1xuICAgIHJldHVybiB0aGlzLmdldE9mZmljZURpdmlzaW9uc0ZldGNoZXIuZmV0Y2hMaXN0KClcbiAgfVxufVxuIl19
|
|
2408
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYnRzZXJ2aWNlcy9iYXNlL3NyYy9saWIvdmVuZG9yL3NlcnZpY2VzL3NlYXJjaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLFNBQVMsTUFBTSx3QkFBd0IsQ0FBQztBQUMvQyxPQUFPLDJCQUEyQixNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzVFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRS9FLE9BQU8sS0FBSyxZQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzdGLE9BQU8sRUFBYSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQVN4RSxPQUFPLEVBTUwsYUFBYSxFQWlDYixlQUFlLEVBS2hC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QUE1bkdNLDZDQUFpQixHQUFXLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAsIHRha2UsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IENvdW50cmllcyBmcm9tICcuLi9kYXRhL2NvdW50cmllcy5qc29uJztcbmltcG9ydCBDb3VudHJpZXNXaXRob3V0UG9zdGFsQ29kZXMgZnJvbSAnLi4vZGF0YS9jb3VudHJpZXMtd2l0aG91dC1wb3N0YWwtY29kZXMuanNvbic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCYXNlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4uL2NsYXNzZXMvYmFzZS1lbnRlcnByaXNlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFBhcmtpbmdFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9wYXJraW5nLWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7IFNlYXJjaE9iamVjdCwgU2VhcmNoT2JqZWN0cyB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VhcmNoLW9iamVjdHMuaW50ZXJmYWNlJztcbmltcG9ydCAqIGFzIGdyYXBocWxUeXBlcyBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcbmltcG9ydCB7IExvdW5nZXNFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9sb3VuZ2VzLWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7IEhvdGVsRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4uL2NsYXNzZXMvaG90ZWwtZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2NhcmhpcmUtZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaCwgVGltZVdpbmRvdyB9IGZyb20gJy4uL2NsYXNzZXMvZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7IENhYkhpcmVFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9jYWJoaXJlLWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7IFJhaWxFbnRlcnByaXNlU2VhcmNoLCBSYWlsU2VhcmNoQ3JpdGVyaWEgfSBmcm9tICcuLi9jbGFzc2VzL3JhaWwtZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgVHJhdmVsbGVyLCBUcmF2ZWxsZXJPYmplY3QgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuLi9jbGFzc2VzL2hlbHBlcnMnO1xuaW1wb3J0IHsgQmFzZUhvdGVsQXZhbGliaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi9ob3RlbC1hdmFsbGliaWxpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlRW52aXJvbm1lbnQgfSBmcm9tICcuLi9jbGFzc2VzL2Vudmlyb21lbnQnO1xuaW1wb3J0IHtcbiAgQmFzZVNlYXJjaFBvc3Rjb2RlRmV0Y2hlcixcbiAgU2VhcmNoUG9zdGNvZGVzUXVvdGVGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtcG9zdGNvZGVzLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQWRkcmVzc0Zvcm0sXG4gIEFpcnBvcnRTZWFyY2hSZXN1bHRzLFxuICBDYXJIaXJlRGVwb3RSZXN1bHRBcnJheSxcbiAgQ291bnRyeUNvZGUsXG4gIExvY2F0aW9uRGV0YWlscyxcbiAgTG9jYXRpb25UeXBlcyxcbiAgT0JUQWlycG9ydERldGFpbHMsXG4gIFJhaWxBaXJwb3J0LFxuICBSb3V0ZXIsXG4gIFNlYXJjaENpdGllc1Jlc3VsdCxcbiAgU2VhcmNoQ2l0aWVzUmVzdWx0QXJyYXksXG4gIFNlYXJjaFBvc3Rjb2Rlc1Jlc3VsdEFycmF5LFxuICBTZWFyY2hSYWlsU3RhdGlvbnNSZXN1bHQsXG4gIFNlYXJjaFJhaWxTdGF0aW9uc1Jlc3VsdEFycmF5LFxuICBUZXJtaW5hbHNUeXBlLFxuICBHZXRVc2VyQ29tcGFueU9mZmljZXNSZXN1bHRBcnJheSxcbiAgU2VhcmNoSG90ZWxDaGFpbnNSZXN1bHRBcnJheSxcbiAgU2VhcmNoSG90ZWxDaGFpbnNSZXN1bHQsXG4gIEFpcmxpbmVzU2VhcmNoUmVzdWx0LFxuICBPQlRBaXJsaW5lc0RldGFpbHMsXG4gIEdldFVzZXJSZWNlbnRTZWFyY2hlc1Jlc3VsdEFycmF5LFxuICBHZXRVc2VyUmVjZW50U2VhcmNoZXNSZXN1bHQsXG4gIFJlY2VudFNlYXJjaCxcbiAgR2V0VXNlclJlY2VudEJvbHRTZWFyY2hlc1Jlc3VsdEFycmF5LFxuICBHZXRVc2VyUmVjZW50Qm9sdFNlYXJjaGVzUmVzdWx0LFxuICBCb2x0U2VhcmNoLFxuICBHZXRGbGlnaHRGYXJlUnVsZXNSZXN1bHRBcnJheSxcbiAgU2VhcmNoUmFpbExpdmVEZXBhcnR1cmVzUmVzdWx0LFxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0LFxuICBHZXRVc2VyRmF2b3VyaXRlU2VhcmNoZXNSZXN1bHRBcnJheSxcbiAgR2V0SG90ZWxDaGFpbnNSZXN1bHRBcnJheSxcbiAgR2V0SG90ZWxDaGFpbnNSZXN1bHQsXG4gIGdldFJhaWxQcm92aWRlcnNSZXN1bHQsXG4gIGdldFJhaWxQcm92aWRlcnNSZXN1bHRBcnJheSxcbiAgR2V0QWxsQWlybGluZXNSZXN1bHQsXG4gIEdldEFsbEFpcmxpbmVzUmVzdWx0QXJyYXksXG4gIEdldENhckhpcmVQcm92aWRlcnNSZXN1bHQsXG4gIEdldENhckhpcmVQcm92aWRlcnNSZXN1bHRBcnJheSxcbiAgU2VydmljZVByb3ZpZGVyLFxuICBHZXRGbGlnaHRCcmFuZGVkRmFyZXNSZXN1bHRBcnJheSxcbiAgT0JUUmFpbFF1b3RlUmVzdWx0LFxuICBHdXRGb3JtUHJldmlvdXNWYWx1ZSxcbiAgUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2Vcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHtcbiAgQmFzZVNlYXJjaFJhaWxTdGF0aW9uc0ZldGNoZXIsXG4gIFNlYXJjaFJhaWxTdGF0aW9uc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1yYWlsLXN0YXRpb25zLmZldGNoZXInO1xuaW1wb3J0IHsgQmFzZUxvdW5nZVF1b3RlRmV0Y2hlciwgTG91bmdlUXVvdGVGZXRjaGVyVHlwZSB9IGZyb20gJy4uL2ZldGNoZXJzL2xvdW5nZS1xdW90ZS5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VQYXJraW5nUXVvdGVGZXRjaGVyLFxuICBQYXJraW5nUXVvdGVGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9wYXJraW5nLXF1b3RlLWZldGNoZXInO1xuaW1wb3J0IHsgQmFzZUZsaWdodFF1b3RlRmV0Y2hlciwgRmxpZ2h0UXVvdGVGZXRjaGVyVHlwZSB9IGZyb20gJy4uL2ZldGNoZXJzL2ZsaWdodC1xdW90ZS5mZXRjaGVyJztcbmltcG9ydCB7IEJhc2VIb3RlbFF1b3RlRmV0Y2hlciwgSG90ZWxRdW90ZUZldGNoZXJUeXBlIH0gZnJvbSAnLi4vZmV0Y2hlcnMvaG90ZWwtcXVvdGUtZmV0Y2hlcic7XG5pbXBvcnQgeyBCYXNlQ2FyaGlyZVF1b3RlRmV0Y2hlciwgQ2FySGlyZUZldGNoZXJUeXBlIH0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FyaGlyZS1xdW90ZS1mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcixcbiAgQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2NhcmhpcmUtYXZhaWxhYmlsaXR5LWRldGFpbC5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VDYWJoaXJlUXVvdGVGZXRjaGVyLFxuICBDYWJoaXJlUXVvdGVGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9jYWJoaXJlLXF1b3RlLWZldGNoZXInO1xuaW1wb3J0IHsgQmFzZVJhaWxRdW90ZUZldGNoZXIsIFJhaWxRdW90ZUZldGNoZXJUeXBlIH0gZnJvbSAnLi4vZmV0Y2hlcnMvcmFpbC1xdW90ZS1mZXRjaGVyJztcbmltcG9ydCB7IEJhc2VJcmxRdW90ZUZldGNoZXIsIElybFF1b3RlRmV0Y2hlclR5cGUgfSBmcm9tICcuLi9mZXRjaGVycy9pcmwtcXVvdGUtZmV0Y2hlcic7XG5pbXBvcnQgeyBSZWdFeHBzIH0gZnJvbSAnLi4vbW9kZWxzL3JlZ2V4cC5tb2RlbCc7XG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSwgU2VhcmNoUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQmFzZVNlYXJjaEFpcnBvcnRzRmV0Y2hlcixcbiAgU2VhcmNoQWlycG9ydHNRdW90ZUZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1haXJwb3J0cy1mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VTZWFyY2hBaXJsaW5lc0ZldGNoZXIsXG4gIFNlYXJjaEFpcmxpbmVzUXVvdGVGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtYWlybGluZXMuZmV0Y2hlcic7XG5pbXBvcnQgeyBVc2VyU2VydmljZUludGVyZmFjZSwgVXNlclNlcnZpY2VzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEJhc2VTZWFyY2hDaXR5RmV0Y2hlcixcbiAgU2VhcmNoQ2l0aWVzUXVvdGVGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtY2l0aWVzLmZldGNoZXInO1xuaW1wb3J0IHsgQWJzdHJhY3RIdHRwQ2FsbFNlcnZpY2UgfSBmcm9tICcuL2h0dHAtY2FsbC5zZXJ2aWNlJztcbmltcG9ydCB7IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XG5pbXBvcnQgeyBIb3RlbEF2YWxpbmlsaXR5RmV0Y2hlclR5cGUgfSBmcm9tICcuLi9mZXRjaGVycy9ob3RlbC1hdmFsaWFiaWxpdHktZmV0Y2hlcic7XG5pbXBvcnQge1xuICBCYXNlU2F2ZVVzZXJBZGRyZXNzVXBkYXRlcixcbiAgU2F2ZVVzZXJBZGRyZXNzVXBkYXRlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2F2ZS11c2VyLWFkZHJlc3MudXBkYXRlcic7XG5pbXBvcnQge1xuICBCYXNlRWRpdFVzZXJBZGRyZXNzVXBkYXRlcixcbiAgRWRpdFVzZXJBZGRyZXNzVXBkYXRlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvZWRpdC11c2VyLWFkZHJlc3MudXBkYXRlcic7XG5pbXBvcnQge1xuICBCYXNlVXNlckFkZHJlc3Nlc0ZldGNoZXIsXG4gIFVzZXJBZGRyZXNzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvdXNlci1hZGRyZXNzZXMuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRVc2VyQ29tcGFueU9mZmljZXNGZXRjaGVyLFxuICBHZXRVc2VyQ29tcGFueU9mZmljZXNRdW90ZUZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC11c2VyLWNvbXBhbnktb2ZmaWNlcy5mZXRjaGVyJztcblxuaW1wb3J0IHsgQmFzZUdldE9mZmljZXNGZXRjaGVyLCBHZXRPZmZpY2VzUXVvdGVGZXRjaGVyVHlwZSB9IGZyb20gJy4uL2ZldGNoZXJzL2dldC1vZmZpY2VzLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlU2VhcmNoSG90ZWxDaGFpbnNGZXRjaGVyLFxuICBTZWFyY2hIb3RlbENoYWluc1F1b3RlRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWhvdGVsLWNoYWlucy5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VHZXRDb25mZXJtYVJvb21JbWFnZXNGZXRjaGVyLFxuICBHZXRDb25mZXJtYVJvb21JbWFnZXNRdW90ZUZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1jb25mZXJtYS1yb29tLWltYWdlcy5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VWYWxpZGF0ZUlzUG9zdGNvZGVWYWxpZFRlc3RlcixcbiAgVmFsaWRhdGVJc1Bvc3Rjb2RlVmFsaWRUeXBlXG59IGZyb20gJy4uL3Rlc3RlcnMvcG9zdGNvZGUtdmFsaWRhdGUudGVzdGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZVNlYXJjaERlcG90RmV0Y2hlcixcbiAgU2VhcmNoRGVwb3RRdW90ZUZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1kZXBvdHMuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRSYWlsU3RhdGlvbkZldGNoZXIsXG4gIEdldFJhaWxTdGF0aW9uRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXJhaWwtc3RhdGlvbi5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZVNlYXJjaElybFN0YXRpb25zRmV0Y2hlcixcbiAgU2VhcmNoSXJsU3RhdGlvbnNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtaXJsLXN0YXRpb25zLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlU2VhcmNoQ29uZmVybWFRdWlja2xpc3RGZXRjaGVyLFxuICBDb25mZXJtYVF1aWNrbGlzdEZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2NvbmZlcm1hLXF1aWNrbGlzdC5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUdldEZsaWdodEV4dHJhc09wdGlvbnNGZXRjaGVyLFxuICBHZXRGbGlnaHRFeHRyYXNPcHRpb25zVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtZmxpZ2h0LWV4dHJhcy1vcHRpb25zLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlRGVsZXRlVXNlckFkZHJlc3NVcGRhdGVyLFxuICBEZWxldGVVc2VyQWRkcmVzc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3JlbW92ZS11c2VyLWFkZHJlc3MtdXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VEZWxldGVSZWNlbnRTZWFyY2hVcGRhdGVyLFxuICBEZWxldGVSZWNlbnRTZWFyY2hGZXRjaGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9yZW1vdmUtcmVjZW50LXNlYXJjaC11cGRhdGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZVNhdmVSZWNlbnRTZWFyY2hVcGRhdGVyLFxuICBTYXZlUmVjZW50U2VhcmNoRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2F2ZS1yZWNlbnQtc2VhcmNoLXVwZGF0ZXInO1xuXG5pbXBvcnQge1xuICBCYXNlU2F2ZVJlY2VudEJvbHRTZWFyY2hVcGRhdGVyLFxuICBTYXZlUmVjZW50Qm9sdFNlYXJjaFVwZGF0ZXJUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3NhdmUtcmVjZW50LWJvbHQtc2VhcmNoLXVwZGF0ZXInO1xuXG5pbXBvcnQge1xuICBCYXNlU2F2ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXIsXG4gIFNhdmVGYXZvdXJpdGVTZWFyY2hGZXRjaGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9zYXZlLWZhdm91cml0ZS1zZWFyY2gtdXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRSYWlsTGl2ZURlcGFydHVyZXNGZXRjaGVyLFxuICBHZXRSYWlsTGl2ZURlcGFydHVyZXNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmFpbC1saXZlLWRlcGFydHVyZXMuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VDb252ZXJ0Q3VycmVuY3lGZXRjaGVyLFxuICBDb252ZXJ0Q3VycmVuY3lGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9jb252ZXJ0LWN1cnJlbmN5LmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0Q3VycmVuY3lDb252ZXJzaW9uUmF0ZXNGZXRjaGVyLFxuICBHZXRDdXJyZW5jeUNvbnZlcnNpb25SYXRlc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1jdXJyZW5jeS1jb252ZXJzaW9uLXJhdGVzLmZldGNoZXInO1xuXG5pbXBvcnQgeyBIb3RlbFRlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lob3RlbC1lbnRlcnByaXNlLXNlYXJjaCc7XG5pbXBvcnQgeyBSYWlsVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXJhaWwtZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgRmxpZ2h0VGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWZsaWdodC1lbnRlcnByaXNlLXNlYXJjaCc7XG5pbXBvcnQgeyBMb3VuZ2VzVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWxvdW5nZXMtZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgUGFya2luZ1RlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lwYXJraW5nLWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7IENhYkhpcmVUZW1wUGFyYW1zLCBUYXhpRm9ybU1vZGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0ljYWJoaXJlLWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7IENhckhpcmVUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JY2FyaGlyZS1lbnRlcnByaXNlLXNlYXJjaCc7XG5pbXBvcnQge1xuICBCYXNlR2V0VXNlckNhcmJvbkFsbG93YW5jZUZldGNoZXIsXG4gIEdldFVzZXJDYXJib25BbGxvd2FuY2VUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC11c2VyLWN1cnJlbnQtY2FyYm9uLWFsbG93YW5jZS5mZXRjaGVyJztcbmltcG9ydCB7IEJhc2VXZWJUb2tlblNlcnZpY2UgfSBmcm9tICcuL3dlYnRva2VuLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQmFzZUdldFJpc2tBbGVydHNGZXRjaGVyLFxuICBHZXRSaXNrQWxlcnRzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXJpc2stYWxlcnRzLmZldGNoZXInO1xuaW1wb3J0IHsgSXJsVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWlybC1lbnRlcnByaXNlLXNlYXJjaCc7XG5pbXBvcnQgeyBJUkxFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9pcmwtZW50ZXJwcmlzZS1zZWFyY2gnO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0VXNlclJlY2VudFNlYXJjaGVzRmV0Y2hlcixcbiAgR2V0VXNlclJlY2VudFNlYXJjaGVzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXVzZXItcmVjZW50LXNlYXJjaGVzLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0VXNlclJlY2VudEJvbHRTZWFyY2hlc0ZldGNoZXIsXG4gIEdldFVzZXJSZWNlbnRCb2x0U2VhcmNoZXNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtdXNlci1yZWNlbnQtYm9sdC1zZWFyY2hlcy5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUdldFJhaWxjYXJkc0ZldGNoZXIsXG4gIEdldFJhaWxDYXJkc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1yYWlsLWNhcmRzLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0Q292aWRNaWNyb3NpdGVUb2tlbkZldGNoZXIsXG4gIEdldENvdmlkTWljcm9zaXRlVG9rZW5GZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtY292aWQtbWljcm9zaXRlLXRva2VuLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlRXVyb3N0YXJRdW90ZUZldGNoZXIsXG4gIEV1cm9zdGFyUXVvdGVGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9ldXJvc3Rhci1xdW90ZS5mZXRjaGVyJztcbmltcG9ydCB7IEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4uL2NsYXNzZXMvZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgRXVyb3N0YXJUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IEV1cm9TdGF0aW9ucyBmcm9tICcuLi9kYXRhL2V1cm8tc3RhdGlvbnMuanNvbic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgQmFzZVNlYXJjaFVzZXJzQ2FuQm9va0ZvckZldGNoZXIsXG4gIFNlYXJjaFVzZXJDYW5Cb29rRm9yRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLXVzZXJzLWNhbi1ib29rLWZvci1mZXRjaGVyJztcbmltcG9ydCB7IEV1cm9zdGFyU2VhcmNoVHlwZSB9IGZyb20gJy4uL2NsYXNzZXMvZXVyb3N0YXItc2VhcmNoLXR5cGUuZW51bSc7XG5pbXBvcnQge1xuICBCYXNlSXJsRGlzY291bnRDYXJkRmV0Y2hlcixcbiAgSXJsRGlzY291bnRDYXJkRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaXJsLWRpc2NvdW50LWNhcmQtZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRGbGlnaHRGYXJlUnVsZXNGZXRjaGVyLFxuICBHZXRGbGlnaHRGYXJlUnVsZXNUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2ZsaWdodC1mYXJlLXJ1bGVzLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldEZsaWdodFNlYXRNYXBGZXRjaGVyLFxuICBHZXRGbGlnaHRTZWF0TWFwVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtZmxpZ2h0LXNlYXQtbWFwLWZldGNoZXInO1xuaW1wb3J0IHtcbiAgQXBwbHlIb3RlbFJ1bGVzRmV0Y2hlclR5cGUsXG4gIEJhc2VIb3RlbFJ1bGVzRmV0Y2hlclxufSBmcm9tICcuLi9mZXRjaGVycy9hcHBseS1KSVQtaG90ZWwtcnVsZXMuZmV0Y2hlcic7XG5pbXBvcnQge1xuICBBcHBseUppdEZsaWdodFJ1bGVzVHlwZSxcbiAgQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyXG59IGZyb20gJy4uL2ZldGNoZXJzL2FwcGx5LWppdC1mbGlnaHQtcnVsZXMnO1xuaW1wb3J0IHsgQmFzZU1vZGFsT3BlbmVyU2VydmljZSB9IGZyb20gJy4vbW9kYWwtb3BlbmVyLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQmFzZUdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc0ZldGNoZXIsXG4gIEdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC11c2VyLWZhdm91cml0ZS1zZWFyY2hlcy5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VEZWxldGVGYXZvdXJpdGVTZWFyY2hVcGRhdGVyLFxuICBEZWxldGVGYXZvdXJpdGVTZWFyY2hGZXRjaGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9yZW1vdmUtZmF2b3VyaXRlLXNlYXJjaC11cGRhdGVyJztcbmltcG9ydCB7IEJhc2VFbWFpbEJhc2tldEZldGNoZXIsIEVtYWlsQmFza2V0RmV0Y2hlclR5cGUgfSBmcm9tICcuLi9mZXRjaGVycy9lbWFpbC1iYXNrZXQuZmV0Y2hlcic7XG5pbXBvcnQgeyBGYXN0VHJhY2tUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZmFzdC10cmFjay1lbnRlcnByaXNlLXNlYXJjaCc7XG5pbXBvcnQgeyBGYXN0VHJhY2tFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9mYXN0LXRyYWNrLWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7XG4gIEJhc2VGYXN0VHJhY2tRdW90ZUZldGNoZXIsXG4gIEZhc3RUcmFja1F1b3RlRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZmFzdC10cmFjay1xdW90ZS5mZXRjaGVyJztcbmltcG9ydCB7IE1vZGFsVHlwZXMgfSBmcm9tICcuLi9jbGFzc2VzL21vZGFsLXR5cGVzLmVudW0nO1xuaW1wb3J0IHtcbiAgQmFzZVNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlcixcbiAgU2VuZE9mZmxpbmVOb3RpZmljYXRpb25GZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9zZW5kLW9mZmxpbmUtbm90aWZpY2F0aW9uLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldEhvdGVsQ2hhaW5zRmV0Y2hlcixcbiAgR2V0SG90ZWxDaGFpbnNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtaG90ZWwtY2hhaW5zLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldFJhaWxQcm92aWRlcnNGZXRjaGVyLFxuICBHZXRSYWlsUHJvdmlkZXJzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXJhaWwtcHJvdmlkZXJzLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldEFsbEFpcmxpbmVzRmV0Y2hlcixcbiAgR2V0QWxsQWlybGluZXNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtYWxsLWFpcmxpbmVzLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldENhckhpcmVQcm92aWRlcnNGZXRjaGVyLFxuICBHZXRDYXJIaXJlUHJvdmlkZXJzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWNhci1oaXJlLXByb3ZpZGVycy5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VHZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyLFxuICBHZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtaXJsLXN1cHBsaWVyLXN0YXRpb24uZmV0Y2hlcic7XG5pbXBvcnQgeyBGZXJyeVRlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lmZXJyeS1lbnRlcnByaXNlLXNlYXJjaCc7XG5pbXBvcnQgeyBGZXJyeUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2ZlcnJ5LWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7XG4gIEJhc2VFbWFpbEZlcnJ5Qm9va2luZ0ZldGNoZXIsXG4gIEVtYWlsRmVycnlCb29raW5nRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZW1haWwtZmVycnktYm9raW5nLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUVtYWlsQXBhcnRtZW50Qm9va2luZ0ZldGNoZXIsXG4gIEVtYWlsQXBhcnRtZW50Qm9va2luZ0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2VtYWlsLWFwYXJ0bWVudC1ib29raW5nLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUVtYWlsTWVldGluZ1Jvb21Cb29raW5nRmV0Y2hlcixcbiAgRW1haWxNZWV0aW5nUm9vbUJvb2tpbmdGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9lbWFpbC1tZWV0aW5nLXJvb20tYm9va2luZy5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEFkZHJlc3MsXG4gIEFpckF2YWlsYWJpbHR5UmVzdWx0LFxuICBBaXJwb3J0LFxuICBDdXJyZW5jeUNvZGUsXG4gIEN1cnJlbmN5UmF0ZXMsXG4gIEZsaWdodEl0aW5lcmFyeSxcbiAgRmxpZ2h0UGFzc2VuZ2VyT2JqZWN0LFxuICBHZXRHbXRJdGluZXJhcnlPcHRpb25zUmVzdWx0LFxuICBHdXRTdWdnZXN0ZWRDaXR5LFxuICBHdXRTdWdnZXN0ZWRMb2NhdGlvbnMsXG4gIEdldFBsYWNlQXV0b2NvbXBsZXRlUmVzdWx0LFxuICBHbXRJdGluZXJhcnlBaXJwb3J0T3B0aW9uLFxuICBHbXRJdGluZXJhcnlSYWlsU3RhdGlvbk9wdGlvbixcbiAgR210TG9jYXRpb24sXG4gIEd1dFVzZXIsXG4gIEZsaWdodFNlYXRNYXBSZXN1bHQsXG4gIEhvdGVsRGV0YWlsc1Jlc3VsdCxcbiAgSW5wdXRGbGlnaHRKb3VybmV5LFxuICBQbGFjZUxvY2F0aW9uLFxuICBQb3N0Y29kZURldGFpbHMsXG4gIFByZWZlcnJlZFRyYW5zcG9ydEh1YixcbiAgUmFpbEpvdXJuZXlFeGNoYW5nZSxcbiAgUmFpbEpvdXJuZXlPcHRpb25zLFxuICBSYWlsU3RhdGlvbixcbiAgU2VydmljZSxcbiAgU2VydmljZVR5cGUsXG4gIFRyYW5zcG9ydFR5cGUsXG4gIERhdGFBcmdzLFxuICBSb3V0ZUhhcHB5UmVzdWx0cyxcbiAgSG90ZWxSYXRpbmdJZGVudGlmaWVycyxcbiAgR2V0TXVsdGlwbGVIb3RlbFJhdGluZ1Jlc3BvbnNlLFxuICBQaG9uZVR5cGUsXG4gIEFkZHJlc3NJbnB1dCxcbiAgTG9jYXRpb25Db2RlcyxcbiAgUGxhY2VDYXRlZ29yeSxcbiAgRmVycnlQb3J0LFxuICBCYW5uZXJEaXNwbGF5VGFyZ2V0LFxuICBCYW5uZXIsXG4gIEZsaWdodEpvdXJuZXksXG4gIEZsaWdodFVwc2VsbE9mZmVyc1Jlc3VsdCxcbiAgU2VhcmNoVXNlckNhbkJvb2tGb3JRdWVyeVZhcmlhYmxlcyxcbiAgRGl2aXNpb24sXG4gIFNlYXNvblRpY2tldERlbGl2ZXJ5VHlwZVxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcbmltcG9ydCB7IFVzZXJGYXZvcnVyaXRlIH0gZnJvbSAnLi4vY2xhc3Nlcy91c2VyLWZhdm91cml0ZS5lbnVtJztcbmltcG9ydCB7IEVybVRyYXZlbGxlclR5cGUgfSBmcm9tICcuLi9jbGFzc2VzL2VybS10cmF2ZWxsZXItdHlwZS5lbnVtJztcblxuaW1wb3J0IHtcbiAgQmFzZUdlbmVyYXRlQmFza2V0UGRmRmV0Y2hlcixcbiAgR2VuZXJhdGVCYXNrZXRQZGZGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZW5lcmF0ZS1iYXNrZXQtcGRmLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldFJlcXVlc3RlZEhvdGVsVXBkYXRlRmV0Y2hlcixcbiAgR2V0UmVxdWVzdGVkSG90ZWxVcGRhdGVGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmVxdWVzdGVkLWhvdGVsLXVwZGF0ZS5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUdldEhvdGVsRGV0YWlsc0ZldGNoZXIsXG4gIEdldEhvdGVsRGV0YWlsc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1ob3RlbC1kZXRhaWxzLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldEZsaWdodEJyYW5kZWRGYXJlc0ZldGNoZXIsXG4gIEdldEZsaWdodEJyYW5kZWRGYXJlc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1mbGlnaHQtYnJhbmRlZC1mYXJlcy5mZXRjaGVyJztcbmltcG9ydCB7IFVzZXJEYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy91c2VyLmRhdGEnO1xuaW1wb3J0IHsgRmxpZ2h0UGFzc2VuZ2VyVHlwZSwgQm9va2VyVHlwZSB9IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xuXG5pbXBvcnQgeyBCYXNlR2V0U2VydmljZUZldGNoZXIsIEdldFNlcnZpY2VGZXRjaGVyVHlwZSB9IGZyb20gJy4uL2ZldGNoZXJzL2dldC1zZXJ2aWNlLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldFJhaWxTdGF0aW9uSW5mb0ZldGNoZXIsXG4gIEdldFJhaWxTdGF0aW9uSW5mb0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1yYWlsLXN0YXRpb24taW5mby5mZXRjaGVyJztcbmltcG9ydCB7IElSYWlsU3RhdGlvbkluZm9ybWF0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JcmFpbC1zdGF0aW9uLWluZm9ybWF0aW9uLmludGVyZmFjZSc7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRUcmFpbmxpbmVTZWFyY2hDb25maWdGZXRjaGVyLFxuICBHZXRUcmFpbmxpbmVTZWFyY2hDb25maWdGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtdHJhaW5saW5lLXNlYXJjaC1jb25maWcuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VTZWFyY2hSYWlsSW53YXJkRmV0Y2hlcixcbiAgU2VhcmNoUmFpbElud2FyZEZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1yYWlsLWlud2FyZC5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZVJhaWxTZWFyY2hFeGNoYW5nZUZldGNoZXIsXG4gIFJhaWxTZWFyY2hFeGNoYW5nZUZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1yYWlsLXNlYXJjaC1leGNoYW5nZS5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUNyZWF0ZUl0aW5lcmFyeUV4Y2hhbmdlVXBkYXRlcixcbiAgQ3JlYXRlSXRpbmVyYXJ5RXhjaGFuZ2VVcGRhdGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9jcmVhdGUtcmFpbC1pdGluZXJhcnktZXhjaGFuZ2UtdXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2V1cGRhdGVET0JVcGRhdGVyLFxuICB1cGRhdGVET0JVcGRhdGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy91cGRhdGUtZG9iLnVwZGF0ZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0QWlyQXZhaWxhYmlsaXR5RmV0Y2hlcixcbiAgR2V0QWlyQXZhaWxiaWxpdHlGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtYWlyLWF2YWlsYWJpbHR5LmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0RmxpZ2h0QXROZXdDbGFzc0ZldGNoZXIsXG4gIEdldEZsaWdodEF0TmV3Q2xhc3NGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtZmxpZ2h0LWF0LW5ldy1jbGFzcy5mZXRjaGVyJztcbmltcG9ydCB7IFxuICBCYXNlR2V0RmxpZ2h0VXBzZWxsT2ZmZXJzRmV0Y2hlciwgXG4gIEdldEZsaWdodFVwc2VsbE9mZmVyc0ZldGNoZXJUeXBlIH0gXG5mcm9tICcuLi9mZXRjaGVycy9nZXQtZmxpZ2h0LXVwc2VsbC1vZmZlcnMuZmV0Y2hlcic7XG5pbXBvcnQge1xuICBCYXNlRmxpZ2h0U2VhcmNoRXhjaGFuZ2VGZXRjaGVyLFxuICBGbGlnaHRTZWFyY2hFeGNoYW5nZUZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1mbGlnaHQtc2VhcmNoLWV4Y2hhbmdlLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUZsaWdodEV4Y2hhbmdlRGV0YWlsc0ZldGNoZXIsXG4gIEZsaWdodEV4Y2hhbmdlRGV0YWlsc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1mbGlnaHQtZXhjaGFuZ2UtZGV0YWlscy5mZXRjaGVyJztcbmltcG9ydCB7IEFwYXJ0bWVudFRlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lhcGFydG1lbnQtZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgQXBhcnRtZW50RW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4uL2NsYXNzZXMvYXBhcnRtZW50LWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7XG4gIEJhc2VTdWdnZXN0UGxhY2VzRmV0Y2hlcixcbiAgU3VnZ2VzdFBsYWNlc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL3N1Z2dlc3QtcGxhY2VzLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldExhdExvbkZyb21IZXJlSWRGZXRjaGVyLFxuICBHZXRMYXRMb25Gcm9tSGVyZUlkRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWxhdC1sb24tZnJvbS1oZXJlLWlkLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldEdtdEl0aW5lcmFyeU9wdGlvbnNGZXRjaGVyLFxuICBHZXRHbXRJdGluZXJhcnlPcHRpb25zRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LUdNVC1pdGluZXJhcnktb3B0aW9ucy5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VHZXRHdXRDaXR5U3VnZ2VzdGlvbnNGZXRjaGVyLFxuICBHZXRHdXRDaXR5U3VnZ2VzdGlvbnNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtR1VULWNpdHktc3VnZ2VzdGlvbnMuZmV0Y2hlcic7XG5pbXBvcnQge1xuICBCYXNlR2V0R3V0TG9jYXRpb25TdWdnZXN0aW9uc0ZldGNoZXIsXG4gIEdldEd1dExvY2F0aW9uU3VnZ2VzdGlvbnNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtR1VULWxvY2F0aW9uLXN1Z2dlc3Rpb25zLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldFJvdXRlSGFwcHlGZXRjaGVyLFxuICBHZXRSb3V0ZUhhcHB5RmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXJvdXRlLWhhcHB5LmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldEVudExvY2F0aW9uQnlQb3N0Y29kZSxcbiAgR2V0RW50TG9jYXRpb25CeVBvc3Rjb2RlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1lbnQtbG9jYXRpb24tYnktcG9zdGNvZGUuZmV0Y2hlcic7XG5pbXBvcnQge1xuICBCYXNlR2V0RW50TG9jYXRpb25CeUNpdHksXG4gIEdldEVudExvY2F0aW9uQnlDaXR5XG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1lbnQtbG9jYXRpb24tYnktY2l0eS5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VHZXRNdWx0aXBsZUhvdGVsUmF0aW5nRmV0Y2hlcixcbiAgR2V0TXVsdGlwbGVIb3RlbFJhdGluZ0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1tdWx0aXBsZS1ob3RlbC1yYXRpbmcuZmV0Y2hlcic7XG5pbXBvcnQge1xuICBCYXNlR2V0RmVycnlQb3J0c0ZldGNoZXIsXG4gIEdldEZlcnJ5UG9ydHNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtZmVycnktcG9ydHMuZmV0Y2hlcic7XG5pbXBvcnQgeyBCYXNlR2V0QmFubmVyRmV0Y2hlciwgR2V0QmFubmVyRmV0Y2hlclR5cGUgfSBmcm9tICcuLi9mZXRjaGVycy9nZXQtYmFubmVyLmZldGNoZXInO1xuaW1wb3J0IHsgU2Vhc29uVGlja2V0c1RlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzZWFzb24tdGlja2V0cy1lbnRlcnByaXNlLXNlYXJjaCc7XG5pbXBvcnQgeyBTZWFzb25UaWNrZXRzRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4uL2NsYXNzZXMvc2Vhc29uLXRpY2tldC1lbnRlcnByaXNlLXNlYXJjaCc7XG5pbXBvcnQge1xuICBCYXNlRW1haWxTZWFzb25UaWNrZXRCb29raW5nRmV0Y2hlcixcbiAgRW1haWxTZWFzb25UaWNrZXRCb29raW5nRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZW1haWwtc2Vhc29uLXRpY2tldHMtYm9raW5nLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldE9mZmljZURpdmlzaW9uc0ZldGNoZXIsXG4gIEdldE9mZmljZURpdmlzaW9uc1F1b3RlRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LW9mZmljZS1kaXZpc2lvbnMuZmV0Y2hlcic7XG5pbXBvcnQgeyBNZWV0aW5nUm9vbVRlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0ltZWV0aW5nLXJvb20tZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgTWVldGluZ1Jvb21FbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9tZWV0aW5nLXJvb20tZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgQmFza2V0RGV0YWlscyB9IGZyb20gJy4vZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlVXBkYXRlRmxpZ2h0U2VhdE1hcFVwZGF0ZXIsIFVwZGF0ZUZsaWdodFNlYXRNYXBUeXBlIH0gZnJvbSAnLi4vdXBkYXRlcnMvdXBkYXRlLWZsaWdodC1zZWF0LW1hcC51cGRhdGVyJztcbmltcG9ydCB7IEJhc2VEZWxldGVBbGxSZWNlbnRTZWFyY2hlc1VwZGF0ZXIsIERlbGV0ZUFsbFJlY2VudFNlYXJjaGVzVXBkYXRlclR5cGUgfSBmcm9tICcuLi91cGRhdGVycy9kZWxldGUtYWxsLXJlY2VudC1zZWFyY2hlcy11cGRhdGVyJztcblxuZXhwb3J0IGxldCBNQVhfVFJBVkVMTEVSUyA9IDg7XG5cbmV4cG9ydCBlbnVtIFRyYXZlbGxlclNlYXJjaFR5cGVzIHtcbiAgZW1haWwgPSAnZW1haWwnLFxuICBuYW1lID0gJ25hbWUnLFxuICBlbXBsb3llZU51bWJlciA9ICdlbXBsb3llZU51bWJlcidcbn1cblxuaW50ZXJmYWNlIEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdEludGVyZmFjZSB7XG4gIGhpZ2hlc3Q6IG51bWJlcjtcbiAgY3VycmVudEl0ZW06IFNlYXJjaE9iamVjdDtcbn1cbmV4cG9ydCBjbGFzcyBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2U8XG4gIFNQX1EgZXh0ZW5kcyBTZWFyY2hQb3N0Y29kZXNRdW90ZUZldGNoZXJUeXBlLFxuICBTUl9RIGV4dGVuZHMgU2VhcmNoUmFpbFN0YXRpb25zRmV0Y2hlclR5cGUsXG4gIFNMX1EgZXh0ZW5kcyBMb3VuZ2VRdW90ZUZldGNoZXJUeXBlLFxuICBTUEFfUSBleHRlbmRzIFBhcmtpbmdRdW90ZUZldGNoZXJUeXBlLFxuICBTRkxfUSBleHRlbmRzIEZsaWdodFF1b3RlRmV0Y2hlclR5cGUsXG4gIFNIT19RIGV4dGVuZHMgSG90ZWxRdW90ZUZldGNoZXJUeXBlLFxuICBTQ0hfUSBleHRlbmRzIENhckhpcmVGZXRjaGVyVHlwZSxcbiAgQ0hBRF9RIGV4dGVuZHMgQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXJUeXBlLFxuICBTVEhfUSBleHRlbmRzIENhYmhpcmVRdW90ZUZldGNoZXJUeXBlLFxuICBTQV9RIGV4dGVuZHMgU2VhcmNoQWlycG9ydHNRdW90ZUZldGNoZXJUeXBlLFxuICBTQUxfUSBleHRlbmRzIFNlYXJjaEFpcmxpbmVzUXVvdGVGZXRjaGVyVHlwZSxcbiAgSEFfUSBleHRlbmRzIEhvdGVsQXZhbGluaWxpdHlGZXRjaGVyVHlwZSxcbiAgU0NfUSBleHRlbmRzIFNlYXJjaENpdGllc1F1b3RlRmV0Y2hlclR5cGUsXG4gIFNSQV9RIGV4dGVuZHMgUmFpbFF1b3RlRmV0Y2hlclR5cGUsXG4gIFNJX1EgZXh0ZW5kcyBJcmxRdW90ZUZldGNoZXJUeXBlLFxuICBTVUFfUSBleHRlbmRzIFNhdmVVc2VyQWRkcmVzc1VwZGF0ZXJUeXBlLFxuICBFVUFfUSBleHRlbmRzIEVkaXRVc2VyQWRkcmVzc1VwZGF0ZXJUeXBlLFxuICBTVV9RIGV4dGVuZHMgVXNlckFkZHJlc3NGZXRjaGVyVHlwZSxcbiAgR1VDT19RIGV4dGVuZHMgR2V0VXNlckNvbXBhbnlPZmZpY2VzUXVvdGVGZXRjaGVyVHlwZSxcbiAgU0hDX1EgZXh0ZW5kcyBTZWFyY2hIb3RlbENoYWluc1F1b3RlRmV0Y2hlclR5cGUsXG4gIEdDUklfUSBleHRlbmRzIEdldENvbmZlcm1hUm9vbUltYWdlc1F1b3RlRmV0Y2hlclR5cGUsXG4gIElQVl9RIGV4dGVuZHMgVmFsaWRhdGVJc1Bvc3Rjb2RlVmFsaWRUeXBlLFxuICBTRF9RIGV4dGVuZHMgU2VhcmNoRGVwb3RRdW90ZUZldGNoZXJUeXBlLFxuICBHUlNJX1EgZXh0ZW5kcyBHZXRSYWlsU3RhdGlvbkluZm9GZXRjaGVyVHlwZSxcbiAgR1JTX1EgZXh0ZW5kcyBHZXRSYWlsU3RhdGlvbkZldGNoZXJUeXBlLFxuICBHSVNTRl9RIGV4dGVuZHMgR2V0SXJsU3VwcGxpZXJTdGF0aW9uRmV0Y2hlclR5cGUsXG4gIERVQV9RIGV4dGVuZHMgRGVsZXRlVXNlckFkZHJlc3NGZXRjaGVyVHlwZSxcbiAgRFJTX1EgZXh0ZW5kcyBEZWxldGVSZWNlbnRTZWFyY2hGZXRjaGVyVHlwZSxcbiAgU1JTX1EgZXh0ZW5kcyBTYXZlUmVjZW50U2VhcmNoRmV0Y2hlclR5cGUsXG4gIFVDQV9RIGV4dGVuZHMgR2V0VXNlckNhcmJvbkFsbG93YW5jZVR5cGUsXG4gIFNGU19RIGV4dGVuZHMgU2F2ZUZhdm91cml0ZVNlYXJjaEZldGNoZXJUeXBlLFxuICBHUkFfUSBleHRlbmRzIEdldFJpc2tBbGVydHNGZXRjaGVyVHlwZSxcbiAgUUxfUSBleHRlbmRzIENvbmZlcm1hUXVpY2tsaXN0RmV0Y2hlclR5cGUsXG4gIEdVUlNGX1EgZXh0ZW5kcyBHZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyVHlwZSxcbiAgR1JDRl9RIGV4dGVuZHMgR2V0UmFpbENhcmRzRmV0Y2hlclR5cGUsXG4gIEdDTVRGX1EgZXh0ZW5kcyBHZXRDb3ZpZE1pY3Jvc2l0ZVRva2VuRmV0Y2hlclR5cGUsXG4gIFNFX1EgZXh0ZW5kcyBFdXJvc3RhclF1b3RlRmV0Y2hlclR5cGUsXG4gIFNVQ0JGIGV4dGVuZHMgU2VhcmNoVXNlckNhbkJvb2tGb3JGZXRjaGVyVHlwZSxcbiAgU0lTX1EgZXh0ZW5kcyBTZWFyY2hJcmxTdGF0aW9uc0ZldGNoZXJUeXBlLFxuICBHSURGX1EgZXh0ZW5kcyBJcmxEaXNjb3VudENhcmRGZXRjaGVyVHlwZSxcbiAgR0ZGUl9RIGV4dGVuZHMgR2V0RmxpZ2h0RmFyZVJ1bGVzVHlwZSxcbiAgR0ZTTV9RIGV4dGVuZHMgR2V0RmxpZ2h0U2VhdE1hcFR5cGUsXG4gIEdSTERfRiBleHRlbmRzIEdldFJhaWxMaXZlRGVwYXJ0dXJlc0ZldGNoZXJUeXBlLFxuICBBSFJfUSBleHRlbmRzIEFwcGx5SG90ZWxSdWxlc0ZldGNoZXJUeXBlLFxuICBBRlJfUSBleHRlbmRzIEFwcGx5Sml0RmxpZ2h0UnVsZXNUeXBlLFxuICBHVUZTRl9RIGV4dGVuZHMgR2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlclR5cGUsXG4gIERGU19RIGV4dGVuZHMgRGVsZXRlRmF2b3VyaXRlU2VhcmNoRmV0Y2hlclR5cGUsXG4gIEVCX0YgZXh0ZW5kcyBFbWFpbEJhc2tldEZldGNoZXJUeXBlLFxuICBGVFFfUSBleHRlbmRzIEZhc3RUcmFja1F1b3RlRmV0Y2hlclR5cGUsXG4gIFNPTl9RIGV4dGVuZHMgU2VuZE9mZmxpbmVOb3RpZmljYXRpb25GZXRjaGVyVHlwZSxcbiAgR0hUX1EgZXh0ZW5kcyBHZXRIb3RlbENoYWluc0ZldGNoZXJUeXBlLFxuICBHUlBfUSBleHRlbmRzIEdldFJhaWxQcm92aWRlcnNGZXRjaGVyVHlwZSxcbiAgR0FBX1EgZXh0ZW5kcyBHZXRBbGxBaXJsaW5lc0ZldGNoZXJUeXBlLFxuICBHQ0hQX1EgZXh0ZW5kcyBHZXRDYXJIaXJlUHJvdmlkZXJzRmV0Y2hlclR5cGUsXG4gIEdCUF9GIGV4dGVuZHMgR2VuZXJhdGVCYXNrZXRQZGZGZXRjaGVyVHlwZSxcbiAgRUZCX0YgZXh0ZW5kcyBFbWFpbEZlcnJ5Qm9va2luZ0ZldGNoZXJUeXBlLFxuICBHRkVPX0YgZXh0ZW5kcyBHZXRGbGlnaHRFeHRyYXNPcHRpb25zVHlwZSxcbiAgR1JIVV9GIGV4dGVuZHMgR2V0UmVxdWVzdGVkSG90ZWxVcGRhdGVGZXRjaGVyVHlwZSxcbiAgQ0NfRiBleHRlbmRzIENvbnZlcnRDdXJyZW5jeUZldGNoZXJUeXBlLFxuICBHQ1JfRiBleHRlbmRzIEdldEN1cnJlbmN5Q29udmVyc2lvblJhdGVzRmV0Y2hlclR5cGUsXG4gIEdIRF9GIGV4dGVuZHMgR2V0SG90ZWxEZXRhaWxzRmV0Y2hlclR5cGUsXG4gIEdTX1EgZXh0ZW5kcyBHZXRTZXJ2aWNlRmV0Y2hlclR5cGUsXG4gIEdGQkZfRiBleHRlbmRzIEdldEZsaWdodEJyYW5kZWRGYXJlc0ZldGNoZXJUeXBlLFxuICBHVFNDX0YgZXh0ZW5kcyBHZXRUcmFpbmxpbmVTZWFyY2hDb25maWdGZXRjaGVyVHlwZSxcbiAgU1JJX0YgZXh0ZW5kcyBTZWFyY2hSYWlsSW53YXJkRmV0Y2hlclR5cGUsXG4gIFJTRV9GIGV4dGVuZHMgUmFpbFNlYXJjaEV4Y2hhbmdlRmV0Y2hlclR5cGUsXG4gIENJRV9RIGV4dGVuZHMgQ3JlYXRlSXRpbmVyYXJ5RXhjaGFuZ2VVcGRhdGVyVHlwZSxcbiAgR0FBVl9RIGV4dGVuZHMgR2V0QWlyQXZhaWxiaWxpdHlGZXRjaGVyVHlwZSxcbiAgR0ZBTkNfUSBleHRlbmRzIEdldEZsaWdodEF0TmV3Q2xhc3NGZXRjaGVyVHlwZSxcbiAgR0ZVT19RIGV4dGVuZHMgR2V0RmxpZ2h0VXBzZWxsT2ZmZXJzRmV0Y2hlclR5cGUsXG4gIEdPX0YgZXh0ZW5kcyBHZXRPZmZpY2VzUXVvdGVGZXRjaGVyVHlwZSxcbiAgRlNFX0YgZXh0ZW5kcyBGbGlnaHRTZWFyY2hFeGNoYW5nZUZldGNoZXJUeXBlLFxuICBGRURfRiBleHRlbmRzIEZsaWdodEV4Y2hhbmdlRGV0YWlsc0ZldGNoZXJUeXBlLFxuICBFQUJfRiBleHRlbmRzIEVtYWlsQXBhcnRtZW50Qm9va2luZ0ZldGNoZXJUeXBlLFxuICBFU1RCX0YgZXh0ZW5kcyBFbWFpbFNlYXNvblRpY2tldEJvb2tpbmdGZXRjaGVyVHlwZSxcbiAgU1BfRiBleHRlbmRzIFN1Z2dlc3RQbGFjZXNGZXRjaGVyVHlwZSxcbiAgR0xMRkhJX0YgZXh0ZW5kcyBHZXRMYXRMb25Gcm9tSGVyZUlkRmV0Y2hlclR5cGUsXG4gIEdNVElPX0YgZXh0ZW5kcyBHZXRHbXRJdGluZXJhcnlPcHRpb25zRmV0Y2hlclR5cGUsXG4gIEdVVENTX0YgZXh0ZW5kcyBHZXRHdXRDaXR5U3VnZ2VzdGlvbnNGZXRjaGVyVHlwZSxcbiAgR1VUTFNfRiBleHRlbmRzIEdldEd1dExvY2F0aW9uU3VnZ2VzdGlvbnNGZXRjaGVyVHlwZSxcbiAgR1JIX0YgZXh0ZW5kcyBHZXRSb3V0ZUhhcHB5RmV0Y2hlclR5cGUsXG4gIEdNSFJfRiBleHRlbmRzIEdldE11bHRpcGxlSG90ZWxSYXRpbmdGZXRjaGVyVHlwZSxcbiAgRU1SQl9GIGV4dGVuZHMgRW1haWxNZWV0aW5nUm9vbUJvb2tpbmdGZXRjaGVyVHlwZSxcbiAgR0VMUF9GIGV4dGVuZHMgR2V0RW50TG9jYXRpb25CeVBvc3Rjb2RlLFxuICBHRUxDX0YgZXh0ZW5kcyBHZXRFbnRMb2NhdGlvbkJ5Q2l0eSxcbiAgR1JCU19GIGV4dGVuZHMgR2V0VXNlclJlY2VudEJvbHRTZWFyY2hlc0ZldGNoZXJUeXBlLFxuICBTUkJTX1EgZXh0ZW5kcyBTYXZlUmVjZW50Qm9sdFNlYXJjaFVwZGF0ZXJUeXBlLFxuICBHRlBfRiBleHRlbmRzIEdldEZlcnJ5UG9ydHNGZXRjaGVyVHlwZSxcbiAgR0JfRiBleHRlbmRzIEdldEJhbm5lckZldGNoZXJUeXBlLFxuICBVR0RfVSBleHRlbmRzIHVwZGF0ZURPQlVwZGF0ZXJUeXBlLFxuICBVRlNfVSBleHRlbmRzIFVwZGF0ZUZsaWdodFNlYXRNYXBUeXBlLFxuICBEQVJTX0YgZXh0ZW5kcyBEZWxldGVBbGxSZWNlbnRTZWFyY2hlc1VwZGF0ZXJUeXBlLFxuICBHQ0RfRiBleHRlbmRzIEdldE9mZmljZURpdmlzaW9uc1F1b3RlRmV0Y2hlclR5cGVcbj4gaW1wbGVtZW50cyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZVxue1xuICBzdGF0aWMgU0VTU0lPTl9UUkFWRUxMRVI6IHN0cmluZyA9ICdzZWFyY2hfdHJhdmVsbGVycyc7XG5cbiAgc2VhcmNoZXM6IFNlYXJjaFBhcmFtcztcbiAgdHJhdmVsbGVyX2Vycm9yID0gZmFsc2U7XG4gIHRyYXZlbGxlckluZm9ybWF0aW9uOiBCZWhhdmlvclN1YmplY3Q8VHJhdmVsbGVyW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUcmF2ZWxsZXJbXT4oW10pO1xuICBlcnJvcnM6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSk7XG4gIHNlYXJjaExvYWRpbmdEb25lOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgYm9sdFNlYXJjaFJlc3VsdHNTZXJ2aWNlVHlwZXM6IEJlaGF2aW9yU3ViamVjdDxTZXJ2aWNlVHlwZVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VydmljZVR5cGVbXT4oW10pO1xuICBib2x0U2VhcmNoU2VydmljZVR5cGVzOiBCZWhhdmlvclN1YmplY3Q8U2VydmljZVR5cGU+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZXJ2aWNlVHlwZT4obnVsbCk7XG4gIHNlYXJjaFRpbWVkT3V0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgbmV3U2VhcmNoU3RhcnRlZDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGdldHRpbmdGbGlnaHRDbGFzc2VzOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVwcmljaW5nRmxpZ2h0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcGVyZm9ybUJvbHRTZWFyY2hGcm9tUmVjZW50Qm9sdFNlYXJjaDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG5cbiAgaXNHdXRNZWV0aW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgbG9hZGluZ0RhdGU6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBndXRUcmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSA9IFtdO1xuICBndXRGb3JtUHJldmlvdXNWYWx1ZTogR3V0Rm9ybVByZXZpb3VzVmFsdWVbXSA9IFtdO1xuICBpc0Nsb25pbmc6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGZpcnN0TG9hZCA9IHRydWU7XG4gIF9zZWFyY2hPYmplY3RzRGVmYXVsdDogU2VhcmNoT2JqZWN0cztcbiAgc2VhcmNoX29iamVjdHM6IFNlYXJjaE9iamVjdHM7XG4gIGhpZ2hlc3Rfc2VhcmNoX3ByaW9yaXR5ID0gODtcbiAgc2hvd19lcnJvcnMgPSBmYWxzZTtcbiAgdHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuICBzZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xuICBzZWFyY2hfYWlycG9ydF9sb2FkaW5nID0gZmFsc2U7XG4gIGFsbFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgc2VhcmNoZXNTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIGpyZlJlZmVyZW5jZTogc3RyaW5nO1xuICBwcml2YXRlIHNlbGVjdGVkVHJhdmVsbGVyczogVHJhdmVsbGVyW10gPSBbXTtcbiAgc2VsZWN0ZWRQbGFjZXM6IGFueSA9IFtdO1xuICBjb3VudHJpZXMgPSBDb3VudHJpZXM7XG4gIGNvdW50cmllc1dpdGhvdXRQb3N0YWxDb2RlcyA9IENvdW50cmllc1dpdGhvdXRQb3N0YWxDb2RlcztcbiAgZXVyb3N0YXRpb25zOiB7IGdhdGV3YXk6IHN0cmluZzsgZGVzdGluYXRpb246IHN0cmluZywgY291bnRyeUNvZGU6IHN0cmluZyB9W10gPSBfLnRvQXJyYXkoRXVyb1N0YXRpb25zKTtcbiAgc3NvQ2FsbCA9IHRydWU7XG4gIHNpbXVsdGFuZW91c0hvdGVsU2VhcmNoUmVxdWVzdGVkID0gZmFsc2U7XG4gIGlzRmF2b3JpdGVzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgaXNGYXZvdXJpdGVTZWFyY2ggPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZXJtVHJhdmVsbGVyVHlwZTogRXJtVHJhdmVsbGVyVHlwZSA9IEVybVRyYXZlbGxlclR5cGUuTm9uZTtcblxuICBnZXQgZXJtVHJhdmVsbGVyVHlwZSgpOiBFcm1UcmF2ZWxsZXJUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fZXJtVHJhdmVsbGVyVHlwZTtcbiAgfVxuXG4gIHNldCBlcm1UcmF2ZWxsZXJUeXBlKHR5cGU6IEVybVRyYXZlbGxlclR5cGUpIHtcbiAgICB0aGlzLl9lcm1UcmF2ZWxsZXJUeXBlID0gdHlwZTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmVybVRyYXZlbGxlclR5cGUgPT09IEVybVRyYXZlbGxlclR5cGUuSm9pbmVyIHx8XG4gICAgICB0aGlzLmVybVRyYXZlbGxlclR5cGUgPT09IEVybVRyYXZlbGxlclR5cGUuTGVhdmVyXG4gICAgKSB7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKCdzZWFyY2hfRVJNX3RyYXZlbGxlcl90eXBlJywgdGhpcy5lcm1UcmF2ZWxsZXJUeXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5yZW1vdmVTZXNzaW9uSXRlbSgnc2VhcmNoX0VSTV90cmF2ZWxsZXJfdHlwZScpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3Bob25lVHlwZXMgPSBbUGhvbmVUeXBlLkxhbmRsaW5lLCBQaG9uZVR5cGUuTW9iaWxlLCBQaG9uZVR5cGUuRmF4LCBQaG9uZVR5cGUuT3RoZXJdO1xuXG4gIGdldCBwaG9uZVR5cGVzKCk6IFBob25lVHlwZVtdIHtcbiAgICByZXR1cm4gdGhpcy5fcGhvbmVUeXBlcztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBzZWFyY2hBaXJwb3J0c0ZldGNoZXI6IEJhc2VTZWFyY2hBaXJwb3J0c0ZldGNoZXI8U0FfUT4sXG4gICAgcHJvdGVjdGVkIHNlYXJjaEFpcmxpbmVzRmV0Y2hlcjogQmFzZVNlYXJjaEFpcmxpbmVzRmV0Y2hlcjxTQUxfUT4sXG4gICAgcHJvdGVjdGVkIHN0b3JhZ2VTZXJ2aWNlOiBCYXNlU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZUludGVyZmFjZSxcbiAgICBwcm90ZWN0ZWQgbW9kYWxTZXJ2aWNlOiBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcbiAgICBwcm90ZWN0ZWQgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxuICAgIHByb3RlY3RlZCBob3RlbEF2YWxpYmlsaXR5U2VydmljZTogQmFzZUhvdGVsQXZhbGliaWxpdHlTZXJ2aWNlPEhBX1E+LFxuICAgIHByaXZhdGUgY2l0aWVzRmV0Y2hlcjogQmFzZVNlYXJjaENpdHlGZXRjaGVyPFNDX1E+LFxuICAgIHByaXZhdGUgcG9zdGNvZGVGZXRjaGVyOiBCYXNlU2VhcmNoUG9zdGNvZGVGZXRjaGVyPFNQX1E+LFxuICAgIHByaXZhdGUgcmFpbFN0YXRpb25GZXRjaGVyOiBCYXNlU2VhcmNoUmFpbFN0YXRpb25zRmV0Y2hlcjxTUl9RPixcbiAgICBwcml2YXRlIHNhdmVVc2VyQWRkcmVzc1VwZGF0ZXI6IEJhc2VTYXZlVXNlckFkZHJlc3NVcGRhdGVyPFNVQV9RPixcbiAgICBwcml2YXRlIGVkaXRVc2VyQWRkcmVzc1VwZGF0ZXI6IEJhc2VFZGl0VXNlckFkZHJlc3NVcGRhdGVyPEVVQV9RPixcbiAgICBwcml2YXRlIHVzZXJBZGRyZXNzZXNGZXRjaGVyOiBCYXNlVXNlckFkZHJlc3Nlc0ZldGNoZXI8U1VfUT4sXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcbiAgICBwcml2YXRlIGdldFVzZXJDb21wYW55T2ZmaWNlc0ZldGNoZXI6IEJhc2VHZXRVc2VyQ29tcGFueU9mZmljZXNGZXRjaGVyPEdVQ09fUT4sXG4gICAgcHJpdmF0ZSBzZWFyY2hIb3RlbENoYWluc0ZldGNoZXI6IEJhc2VTZWFyY2hIb3RlbENoYWluc0ZldGNoZXI8U0hDX1E+LFxuICAgIHByaXZhdGUgZ2V0Q29uZmVybWFSb29tSW1hZ2VzRmV0Y2hlcjogQmFzZUdldENvbmZlcm1hUm9vbUltYWdlc0ZldGNoZXI8R0NSSV9RPixcbiAgICBwcml2YXRlIGJhc2VWYWxpZGF0ZUlzUG9zdGNvZGVWYWxpZFRlc3RlcjogQmFzZVZhbGlkYXRlSXNQb3N0Y29kZVZhbGlkVGVzdGVyPElQVl9RPixcbiAgICBwcml2YXRlIGRlcG90RmV0Y2hlcjogQmFzZVNlYXJjaERlcG90RmV0Y2hlcjxTRF9RPixcbiAgICBwcml2YXRlIGJhc2VEZWxldGVVc2VyQWRkcmVzc1VwZGF0ZXI6IEJhc2VEZWxldGVVc2VyQWRkcmVzc1VwZGF0ZXI8RFVBX1E+LFxuICAgIHByaXZhdGUgYmFzZURlbGV0ZVJlY2VudFNlYXJjaFVwZGF0ZXI6IEJhc2VEZWxldGVSZWNlbnRTZWFyY2hVcGRhdGVyPERSU19RPixcbiAgICBwcml2YXRlIGJhc2VTYXZlUmVjZW50U2VhcmNoVXBkYXRlcjogQmFzZVNhdmVSZWNlbnRTZWFyY2hVcGRhdGVyPFNSU19RPixcbiAgICBwcml2YXRlIGdldFVzZXJDYXJib25BbGxvd2FuY2VGZXRjaGVyOiBCYXNlR2V0VXNlckNhcmJvbkFsbG93YW5jZUZldGNoZXI8VUNBX1E+LFxuICAgIHByaXZhdGUgYmFzZVNhdmVGYXZvdXJpdGVTZWFyY2hVcGRhdGVyOiBCYXNlU2F2ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXI8U0ZTX1E+LFxuICAgIGVudmlyb25tZW50OiBCYXNlRW52aXJvbm1lbnQsXG4gICAgbG91bmdlRmV0Y2hlcjogQmFzZUxvdW5nZVF1b3RlRmV0Y2hlcjxTTF9RPixcbiAgICBwYXJraW5nRmV0Y2hlcjogQmFzZVBhcmtpbmdRdW90ZUZldGNoZXI8U1BBX1E+LFxuICAgIGh0dHBDYWxsU2VydmljZTogQWJzdHJhY3RIdHRwQ2FsbFNlcnZpY2UsXG4gICAgZmxpZ2h0RmV0Y2hlcjogQmFzZUZsaWdodFF1b3RlRmV0Y2hlcjxTRkxfUT4sXG4gICAgaG90ZWxGZXRjaGVyOiBCYXNlSG90ZWxRdW90ZUZldGNoZXI8U0hPX1E+LFxuICAgIGNhcmhpcmVGZXRjaGVyOiBCYXNlQ2FyaGlyZVF1b3RlRmV0Y2hlcjxTQ0hfUT4sXG4gICAgY2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXI6IEJhc2VDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcjxDSEFEX1E+LFxuICAgIGNhYmhpcmVGZXRjaGVyOiBCYXNlQ2FiaGlyZVF1b3RlRmV0Y2hlcjxTVEhfUT4sXG4gICAgcmFpbEZldGNoZXI6IEJhc2VSYWlsUXVvdGVGZXRjaGVyPFNSQV9RPixcbiAgICBpcmxGZXRjaGVyOiBCYXNlSXJsUXVvdGVGZXRjaGVyPFNJX1E+LFxuICAgIHByaXZhdGUgZ2V0UmFpbFN0YXRpb25JbmZvRmV0Y2hlcjogQmFzZUdldFJhaWxTdGF0aW9uSW5mb0ZldGNoZXI8R1JTSV9RPixcbiAgICBwcm90ZWN0ZWQgZ2V0UmFpbFN0YXRpb25GZXRjaGVyOiBCYXNlR2V0UmFpbFN0YXRpb25GZXRjaGVyPEdSU19RPixcbiAgICBwcm90ZWN0ZWQgZ2V0SXJsU3VwcGxpZXJTdGF0aW9uRmV0Y2hlcjogQmFzZUdldElybFN1cHBsaWVyU3RhdGlvbkZldGNoZXI8R0lTU0ZfUT4sXG4gICAgcHJpdmF0ZSB3ZWJUb2tlblNlcnZpY2U6IEJhc2VXZWJUb2tlblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByaXNrQWxlcnRzRmV0Y2hlcjogQmFzZUdldFJpc2tBbGVydHNGZXRjaGVyPEdSQV9RPixcbiAgICBxdWlja2xpc3RGZXRjaGVyOiBCYXNlU2VhcmNoQ29uZmVybWFRdWlja2xpc3RGZXRjaGVyPFFMX1E+LFxuICAgIHByaXZhdGUgZ2V0VXNlclJlY2VudFNlYXJjaGVzRmV0Y2hlcjogQmFzZUdldFVzZXJSZWNlbnRTZWFyY2hlc0ZldGNoZXI8R1VSU0ZfUT4sXG4gICAgcHJvdGVjdGVkIGdldFJhaWxDYXJkc0ZldGNoZXI6IEJhc2VHZXRSYWlsY2FyZHNGZXRjaGVyPEdSQ0ZfUT4sXG4gICAgcHJvdGVjdGVkIGdldENvdmlkTWljcm9zaXRlVG9rZW5GZXRjaGVyOiBCYXNlR2V0Q292aWRNaWNyb3NpdGVUb2tlbkZldGNoZXI8R0NNVEZfUT4sXG4gICAgZXVyb3N0YXJGZXRjaGVyOiBCYXNlRXVyb3N0YXJRdW90ZUZldGNoZXI8U0VfUT4sXG4gICAgcHVibGljIHNlYXJjaFVzZXJzQ2FuQm9va0ZvckZldGNoZXI6IEJhc2VTZWFyY2hVc2Vyc0NhbkJvb2tGb3JGZXRjaGVyPFNVQ0JGPixcbiAgICBwcm90ZWN0ZWQgc2VhcmNoSXJsU3RhdGlvbnNGZXRjaGVyOiBCYXNlU2VhcmNoSXJsU3RhdGlvbnNGZXRjaGVyPFNJU19RPixcbiAgICBwcm90ZWN0ZWQgaXJsRGlzY291bnRDYXJkc0ZldGNoZXI6IEJhc2VJcmxEaXNjb3VudENhcmRGZXRjaGVyPEdJREZfUT4sXG4gICAgcHJpdmF0ZSBnZXRGbGlnaHRGYXJlUnVsZXNGZXRjaGVyOiBCYXNlR2V0RmxpZ2h0RmFyZVJ1bGVzRmV0Y2hlcjxHRkZSX1E+LFxuICAgIHByaXZhdGUgZ2V0RmxpZ2h0U2VhdE1hcEZldGNoZXI6IEJhc2VHZXRGbGlnaHRTZWF0TWFwRmV0Y2hlcjxHRlNNX1E+LFxuICAgIHByaXZhdGUgZ2V0UmFpbExpdmVEZXBhcnR1cmVzRmV0Y2hlcjogQmFzZUdldFJhaWxMaXZlRGVwYXJ0dXJlc0ZldGNoZXI8R1JMRF9GPixcbiAgICBhcHBseUhvdGVsUnVsZXNGZXRjaGVyOiBCYXNlSG90ZWxSdWxlc0ZldGNoZXI8QUhSX1E+LFxuICAgIGFwcGx5RmxpZ2h0UnVsZXM6IEJhc2VBcHBseUppdEZsaWdodFJ1bGVzRmV0Y2hlcjxBRlJfUT4sXG4gICAgcHJpdmF0ZSBnZXRVc2VyRmF2b3VyaXRlU2VhcmNoZXNGZXRjaGVyOiBCYXNlR2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlcjxHVUZTRl9RPixcbiAgICBwcml2YXRlIGRlbGV0ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXI6IEJhc2VEZWxldGVGYXZvdXJpdGVTZWFyY2hVcGRhdGVyPERGU19RPixcbiAgICBwcml2YXRlIGVtYWlsQmFza2V0RmV0Y2hlcjogQmFzZUVtYWlsQmFza2V0RmV0Y2hlcjxFQl9GPixcbiAgICBmYXN0dHJhY2tGZXRjaGVyOiBCYXNlRmFzdFRyYWNrUXVvdGVGZXRjaGVyPEZUUV9RPixcbiAgICBwcml2YXRlIHNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlcjogQmFzZVNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlcjxTT05fUT4sXG4gICAgcHJpdmF0ZSBnZXRIb3RlbENoYWluc0ZldGNoZXI6IEJhc2VHZXRIb3RlbENoYWluc0ZldGNoZXI8R0hUX1E+LFxuICAgIHByaXZhdGUgZ2V0UmFpbFByb3ZpZGVyc0ZldGNoZXI6IEJhc2VHZXRSYWlsUHJvdmlkZXJzRmV0Y2hlcjxHUlBfUT4sXG4gICAgcHJpdmF0ZSBnZXRBbGxBaXJsaW5lc0ZldGNoZXI6IEJhc2VHZXRBbGxBaXJsaW5lc0ZldGNoZXI8R0FBX1E+LFxuICAgIHByaXZhdGUgZ2V0Q2FySGlyZVByb3ZpZGVyc0ZldGNoZXI6IEJhc2VHZXRDYXJIaXJlUHJvdmlkZXJzRmV0Y2hlcjxHQ0hQX1E+LFxuICAgIHByaXZhdGUgYmFzZUdlbmVyYXRlQmFza2V0UGRmRmV0Y2hlcjogQmFzZUdlbmVyYXRlQmFza2V0UGRmRmV0Y2hlcjxHQlBfRj4sXG4gICAgcHJpdmF0ZSBlbWFpbEZlcnJ5RmV0Y2hlcjogQmFzZUVtYWlsRmVycnlCb29raW5nRmV0Y2hlcjxFRkJfRj4sXG4gICAgcHVibGljIGdldEZsaWdodEV4dHJhc09wdGlvbnM6IEJhc2VHZXRGbGlnaHRFeHRyYXNPcHRpb25zRmV0Y2hlcjxHRkVPX0Y+LFxuICAgIHByaXZhdGUgZ2V0UmVxdWVzdGVkSG90ZWxVcGRhdGVGZXRjaGVyOiBCYXNlR2V0UmVxdWVzdGVkSG90ZWxVcGRhdGVGZXRjaGVyPEdSSFVfRj4sXG4gICAgcHJpdmF0ZSBjb252ZXJ0Q3VycmVuY3lGZXRjaGVyOiBCYXNlQ29udmVydEN1cnJlbmN5RmV0Y2hlcjxDQ19GPixcbiAgICBwcml2YXRlIGdldEN1cnJlbmN5Q29udmVyc2lvblJhdGVzRmV0Y2hlcjogQmFzZUdldEN1cnJlbmN5Q29udmVyc2lvblJhdGVzRmV0Y2hlcjxHQ1JfRj4sXG4gICAgcHJpdmF0ZSBnZXRIb3RlbERldGFpbHNGZXRjaGVyOiBCYXNlR2V0SG90ZWxEZXRhaWxzRmV0Y2hlcjxHSERfRj4sXG4gICAgcHJpdmF0ZSBnZXRTZXJ2aWNlRmV0Y2hlcjogQmFzZUdldFNlcnZpY2VGZXRjaGVyPEdTX1E+LFxuICAgIHB1YmxpYyBnZXRGbGlnaHRCcmFuZGVkRmFyZXNGZXRjaGVyOiBCYXNlR2V0RmxpZ2h0QnJhbmRlZEZhcmVzRmV0Y2hlcjxHRkJGX0Y+LFxuICAgIHByaXZhdGUgZ2V0VHJhaW5saW5lU2VhcmNoQ29uZmlnRmV0Y2hlcjogQmFzZUdldFRyYWlubGluZVNlYXJjaENvbmZpZ0ZldGNoZXI8R1RTQ19GPixcbiAgICBwcml2YXRlIHNlYXJjaFJhaWxJbndhcmRGZXRjaGVyOiBCYXNlU2VhcmNoUmFpbElud2FyZEZldGNoZXI8U1JJX0Y+LFxuICAgIHByb3RlY3RlZCByYWlsU2VhcmNoRXhjaGFuZ2VGZXRjaGVyOiBCYXNlUmFpbFNlYXJjaEV4Y2hhbmdlRmV0Y2hlcjxSU0VfRj4sXG4gICAgcHJpdmF0ZSBjcmVhdGVJdGluZXJhcnlFeGNoYW5nZVVwZGF0ZXI6IEJhc2VDcmVhdGVJdGluZXJhcnlFeGNoYW5nZVVwZGF0ZXI8Q0lFX1E+LFxuICAgIHByaXZhdGUgZ2V0QWlyQXZhaWxhYmlsaXR5RmV0Y2hlcjogQmFzZUdldEFpckF2YWlsYWJpbGl0eUZldGNoZXI8R0FBVl9RPixcbiAgICBwcml2YXRlIGdldEZsaWdodEF0TmV3Q2xhc3NGZXRjaGVyOiBCYXNlR2V0RmxpZ2h0QXROZXdDbGFzc0ZldGNoZXI8R0ZBTkNfUT4sXG4gICAgcHJpdmF0ZSBnZXRGbGlnaHRVcHNlbGxPZmZlcnNGZXRjaGVyOiBCYXNlR2V0RmxpZ2h0VXBzZWxsT2ZmZXJzRmV0Y2hlcjxHRlVPX1E+LFxuICAgIHByaXZhdGUgZ2V0T2ZmaWNlc0ZldGNoZXI6IEJhc2VHZXRPZmZpY2VzRmV0Y2hlcjxHT19GPixcbiAgICBwcml2YXRlIGVtYWlsQXBhcnRtZW50Qm9va2luZ0ZldGNoZXI6IEJhc2VFbWFpbEFwYXJ0bWVudEJvb2tpbmdGZXRjaGVyPEVBQl9GPixcbiAgICBwcml2YXRlIGVtYWlsU2Vhc29uVGlja2V0RmV0Y2hlcjogQmFzZUVtYWlsU2Vhc29uVGlja2V0Qm9va2luZ0ZldGNoZXI8RVNUQl9GPixcbiAgICBwcml2YXRlIHN1Z2dlc3RQbGFjZXM6IEJhc2VTdWdnZXN0UGxhY2VzRmV0Y2hlcjxTUF9GPixcbiAgICBwcml2YXRlIGxhdExvbkZyb21IZXJlSUQ6IEJhc2VHZXRMYXRMb25Gcm9tSGVyZUlkRmV0Y2hlcjxHTExGSElfRj4sXG4gICAgcHJpdmF0ZSBnZXRHTVRJdGluZXJhcnlPcHRpb25zOiBCYXNlR2V0R210SXRpbmVyYXJ5T3B0aW9uc0ZldGNoZXI8R01USU9fRj4sXG4gICAgcHJpdmF0ZSBnZXRHVVRDaXR5U3VnZ2VzdGlvbnM6IEJhc2VHZXRHdXRDaXR5U3VnZ2VzdGlvbnNGZXRjaGVyPEdVVENTX0Y+LFxuICAgIHByaXZhdGUgZ2V0R1VUTG9jYXRpb25TdWdnZXN0aW9uczogQmFzZUdldEd1dExvY2F0aW9uU3VnZ2VzdGlvbnNGZXRjaGVyPEdVVExTX0Y+LFxuICAgIHByaXZhdGUgZ2V0Um91dGVIYXBweUZldGNoZXI6IEJhc2VHZXRSb3V0ZUhhcHB5RmV0Y2hlcjxHUkhfRj4sXG4gICAgcHJpdmF0ZSBnZXRNdWx0aXBsZUhvdGVsUmF0aW5nRmV0Y2hlcjogQmFzZUdldE11bHRpcGxlSG90ZWxSYXRpbmdGZXRjaGVyPEdNSFJfRj4sXG4gICAgcHVibGljIGVtYWlsTWVldGluZ1Jvb21Cb29raW5nRmV0Y2hlcjogQmFzZUVtYWlsTWVldGluZ1Jvb21Cb29raW5nRmV0Y2hlcjxFTVJCX0Y+LFxuICAgIHByb3RlY3RlZCBmbGlnaHRTZWFyY2hFeGNoYW5nZUZldGNoZXI6IEJhc2VGbGlnaHRTZWFyY2hFeGNoYW5nZUZldGNoZXI8RlNFX0Y+LFxuICAgIHByb3RlY3RlZCBmbGlnaEV4Y2hhbmdlRGV0YWlsc0ZldGNoZXI6IEJhc2VGbGlnaHRFeGNoYW5nZURldGFpbHNGZXRjaGVyPEZFRF9GPixcbiAgICBwcml2YXRlIGdldEVudExvY2F0aW9uc0J5UG9zdGNvZGU6IEJhc2VHZXRFbnRMb2NhdGlvbkJ5UG9zdGNvZGU8R0VMUF9GPixcbiAgICBwcml2YXRlIGdldEVudExvY2F0aW9uc0J5Q2l0eTogQmFzZUdldEVudExvY2F0aW9uQnlDaXR5PEdFTENfRj4sXG4gICAgcHJvdGVjdGVkIGdldFVzZXJSZWNlbnRCb2x0U2VhcmNoZXNGZXRjaGVyOiBCYXNlR2V0VXNlclJlY2VudEJvbHRTZWFyY2hlc0ZldGNoZXI8R1JCU19GPixcbiAgICBwcm90ZWN0ZWQgc2F2ZVJlY2VudEJvbHRTZWFyY2hVcGRhdGVyOiBCYXNlU2F2ZVJlY2VudEJvbHRTZWFyY2hVcGRhdGVyPFNSQlNfUT4sXG4gICAgcHJpdmF0ZSBnZXRGZXJyeVBvcnRzRmV0Y2hlcjogQmFzZUdldEZlcnJ5UG9ydHNGZXRjaGVyPEdGUF9GPixcbiAgICBwcml2YXRlIGdldEJhbm5lckZldGNoZXI6IEJhc2VHZXRCYW5uZXJGZXRjaGVyPEdCX0Y+LFxuICAgIHByaXZhdGUgdXBkYXRlRE9COiBCYXNldXBkYXRlRE9CVXBkYXRlcjxVR0RfVT4sXG4gICAgdXBkYXRlRmxpZ2h0U2VhdE1hcFVwZGF0ZXI6IEJhc2VVcGRhdGVGbGlnaHRTZWF0TWFwVXBkYXRlcjxVRlNfVT4sXG4gICAgcHJvdGVjdGVkIGRlbGV0ZUFsbFJlY2VudFNlYXJjaGVzVXBkYXRlcjogQmFzZURlbGV0ZUFsbFJlY2VudFNlYXJjaGVzVXBkYXRlcjxEQVJTX0Y+LFxuICAgIHB1YmxpYyBnZXRPZmZpY2VEaXZpc2lvbnNGZXRjaGVyOiBCYXNlR2V0T2ZmaWNlRGl2aXNpb25zRmV0Y2hlcjxHQ0RfRj5cblxuICApIHtcbiAgICBjb25zb2xlLmxvZygnRW50ZXJwaXNlIHNlYXJjaCBzZXJ2aWNlIGJlaW5nIGluaXRlZCcpO1xuXG4gICAgY29uc29sZS5sb2coJ05ld2x5IGNyZWF0ZWQgc2VhcmNoIG9iamVjdHM6ICcsIHRoaXMuc2VhcmNoZXMpO1xuICAgIHRoaXMuc2VhcmNoX29iamVjdHMgPSB7fTtcbiAgICB0aGlzLnNlYXJjaGVzID0ge1xuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5DYWJdOiBudWxsLFxuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5DYXJdOiBudWxsLFxuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5Db2FjaF06IG51bGwsXG4gICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkV1cm9zdGFyXTogbnVsbCxcbiAgICAgIFtncmFwaHFsVHlwZXMuU2VydmljZVR5cGUuRmFzdFRyYWNrXTogbnVsbCxcbiAgICAgIFtncmFwaHFsVHlwZXMuU2VydmljZVR5cGUuRmVycnldOiBudWxsLFxuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5GbGlnaHRdOiBudWxsLFxuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5Ib3RlbF06IG51bGwsXG4gICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXTogbnVsbCxcbiAgICAgIFtncmFwaHFsVHlwZXMuU2VydmljZVR5cGUuTG91bmdlXTogbnVsbCxcbiAgICAgIFtncmFwaHFsVHlwZXMuU2VydmljZVR5cGUuUGFya2luZ106IG51bGwsXG4gICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLlJhaWxdOiBudWxsLFxuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5Mb25nU3RheXNdOiBudWxsLFxuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5TZWFzb25UaWNrZXRdOiBudWxsLFxuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5NZWV0aW5nUm9vbV06IG51bGxcbiAgICB9O1xuXG4gICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtQXNMaXN0PFRyYXZlbGxlcltdPihcbiAgICAgIEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZS5TRVNTSU9OX1RSQVZFTExFUlxuICAgICk7XG4gICAgdGhpcy50cmF2ZWxsZXJJbmZvcm1hdGlvbi5uZXh0KHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzKTtcbiAgICB1c2VyU2VydmljZS5mdWxsVXNlckRldGFpbHMudXNlclNlcnZpY2VzLnN1YnNjcmliZSgoc2VydmljZXM6IFVzZXJTZXJ2aWNlcykgPT4ge1xuICAgICAgaWYgKHNlcnZpY2VzKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlU2VhcmNoT2JqZWN0cyhcbiAgICAgICAgICBsb3VuZ2VGZXRjaGVyLFxuICAgICAgICAgIGhlbHBlcnMsXG4gICAgICAgICAgYmFza2V0U2VydmljZSxcbiAgICAgICAgICBzdG9yYWdlU2VydmljZSxcbiAgICAgICAgICB1c2VyU2VydmljZSxcbiAgICAgICAgICBwYXJraW5nRmV0Y2hlcixcbiAgICAgICAgICBmbGlnaHRGZXRjaGVyLFxuICAgICAgICAgIGFwcGx5RmxpZ2h0UnVsZXMsXG4gICAgICAgICAgbW9kYWxTZXJ2aWNlLFxuICAgICAgICAgIGhvdGVsRmV0Y2hlcixcbiAgICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgICBob3RlbEF2YWxpYmlsaXR5U2VydmljZSxcbiAgICAgICAgICBodHRwQ2FsbFNlcnZpY2UsXG4gICAgICAgICAgcXVpY2tsaXN0RmV0Y2hlcixcbiAgICAgICAgICBnZXRSYWlsU3RhdGlvbkZldGNoZXIsXG4gICAgICAgICAgYXBwbHlIb3RlbFJ1bGVzRmV0Y2hlcixcbiAgICAgICAgICBjYXJoaXJlRmV0Y2hlcixcbiAgICAgICAgICBjYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcixcbiAgICAgICAgICBjYWJoaXJlRmV0Y2hlcixcbiAgICAgICAgICBpcmxGZXRjaGVyLFxuICAgICAgICAgIGlybERpc2NvdW50Q2FyZHNGZXRjaGVyLFxuICAgICAgICAgIGdldElybFN1cHBsaWVyU3RhdGlvbkZldGNoZXIsXG4gICAgICAgICAgZmFzdHRyYWNrRmV0Y2hlcixcbiAgICAgICAgICBlbWFpbEZlcnJ5RmV0Y2hlcixcbiAgICAgICAgICByYWlsRmV0Y2hlcixcbiAgICAgICAgICBldXJvc3RhckZldGNoZXIsXG4gICAgICAgICAgZ2V0RmxpZ2h0RXh0cmFzT3B0aW9ucyxcbiAgICAgICAgICBnZXRSZXF1ZXN0ZWRIb3RlbFVwZGF0ZUZldGNoZXIsXG4gICAgICAgICAgZW1haWxBcGFydG1lbnRCb29raW5nRmV0Y2hlcixcbiAgICAgICAgICBlbWFpbFNlYXNvblRpY2tldEZldGNoZXIsXG4gICAgICAgICAgZmxpZ2h0U2VhcmNoRXhjaGFuZ2VGZXRjaGVyLFxuICAgICAgICAgIGZsaWdoRXhjaGFuZ2VEZXRhaWxzRmV0Y2hlcixcbiAgICAgICAgICBlbWFpbE1lZXRpbmdSb29tQm9va2luZ0ZldGNoZXIsXG4gICAgICAgICAgdXBkYXRlRmxpZ2h0U2VhdE1hcFVwZGF0ZXJcbiAgICAgICAgKTtcbiAgICAgICAgLy8gdGhpcy5fc2VhcmNoT2JqZWN0c0RlZmF1bHQgIHVwZGF0ZXMgd2l0aCBzZWFyY2hfb2JqZWN0cyAtIHNvcnQgdGhpcyBvdXQgbGF0ZXJcbiAgICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0cyA9IHRoaXMuX3NlYXJjaE9iamVjdHNEZWZhdWx0ID0gT2JqZWN0LmtleXModGhpcy5zZWFyY2hfb2JqZWN0cykucmVkdWNlKFxuICAgICAgICAgIChvYmplY3RzOiBTZWFyY2hPYmplY3RzLCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgKG9iamVjdHMgYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XS5lbmFibGVkID0gISFzZXJ2aWNlcyAmJiAhIXNlcnZpY2VzW2tleV07XG4gICAgICAgICAgICBpZiAoISghIXNlcnZpY2VzICYmICEhc2VydmljZXNba2V5XSkpIHtcbiAgICAgICAgICAgICAgKG9iamVjdHMgYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XS5jaG9zZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgKG9iamVjdHMgYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XS5vcmlnaW5hbENob3NlbiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9iamVjdHM7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnNlYXJjaF9vYmplY3RzXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVzZXRTZWFyY2hQcmlvcml0aWVzKCk7XG4gICAgICAgIGNvbnNvbGUud2FybignKysrIFNFQVJDSCBPQkpFQ1RTIFNFVCBUTyBERUZBVUxUOiAnLCBfLmNsb25lRGVlcCh0aGlzLnNlYXJjaF9vYmplY3RzKSk7XG4gICAgICB9XG4gICAgICB0aGlzLmRldGVybWluZUhpZ2hlc3RTZWFyY2hQcmlvcml0eSgpO1xuICAgIH0pO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5jb3VudHJpZXMpKSB7XG4gICAgICB0aGlzLmNvdW50cmllcyA9IHRoaXMuY291bnRyaWVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKGEuY05hbWUgPCBiLmNOYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhLmNOYW1lID4gYi5jTmFtZSkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgd2ViVG9rZW5TZXJ2aWNlLmF1dG9Mb2dvdXRDb25maWcgPSB0aGlzLmdldEF1dG9Mb2dvdXRDb25maWcoKTtcbiAgfVxuXG4gIGdldCBzZWFyY2hUeXBlcygpOiBTZXJ2aWNlVHlwZVtdIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5zZWFyY2hfb2JqZWN0cykucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKGl0ZW0uY2hvc2VuIHx8IGl0ZW0uYm9va2luZ19jaG9zZW4pIHtcbiAgICAgICAgICBhY2MucHVzaChpdGVtLnR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBbXSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNlYXJjaE9iamVjdHMoXG4gICAgbG91bmdlRmV0Y2hlcjogQmFzZUxvdW5nZVF1b3RlRmV0Y2hlcjxTTF9RPixcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXG4gICAgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcbiAgICB1c2VyU2VydmljZTogVXNlclNlcnZpY2VJbnRlcmZhY2UsXG4gICAgcGFya2luZ0ZldGNoZXI6IEJhc2VQYXJraW5nUXVvdGVGZXRjaGVyPFNQQV9RPixcbiAgICBmbGlnaHRGZXRjaGVyOiBCYXNlRmxpZ2h0UXVvdGVGZXRjaGVyPFNGTF9RPixcbiAgICBhcHBseUZsaWdodFJ1bGVzOiBCYXNlQXBwbHlKaXRGbGlnaHRSdWxlc0ZldGNoZXI8QUZSX1E+LFxuICAgIG1vZGFsU2VydmljZTogQmFzZU1vZGFsT3BlbmVyU2VydmljZSxcbiAgICBob3RlbEZldGNoZXI6IEJhc2VIb3RlbFF1b3RlRmV0Y2hlcjxTSE9fUT4sXG4gICAgZW52aXJvbm1lbnQ6IEJhc2VFbnZpcm9ubWVudCxcbiAgICBob3RlbEF2YWxpYmlsaXR5U2VydmljZTogQmFzZUhvdGVsQXZhbGliaWxpdHlTZXJ2aWNlPEhBX1E+LFxuICAgIGh0dHBDYWxsU2VydmljZTogQWJzdHJhY3RIdHRwQ2FsbFNlcnZpY2UsXG4gICAgcXVpY2tsaXN0RmV0Y2hlcjogQmFzZVNlYXJjaENvbmZlcm1hUXVpY2tsaXN0RmV0Y2hlcjxRTF9RPixcbiAgICBnZXRSYWlsU3RhdGlvbkZldGNoZXI6IEJhc2VHZXRSYWlsU3RhdGlvbkZldGNoZXI8R1JTX1E+LFxuICAgIGFwcGx5SG90ZWxSdWxlc0ZldGNoZXI6IEJhc2VIb3RlbFJ1bGVzRmV0Y2hlcjxBSFJfUT4sXG4gICAgY2FyaGlyZUZldGNoZXI6IEJhc2VDYXJoaXJlUXVvdGVGZXRjaGVyPFNDSF9RPixcbiAgICBjYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcjogQmFzZUNhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyPENIQURfUT4sXG4gICAgY2FiaGlyZUZldGNoZXI6IEJhc2VDYWJoaXJlUXVvdGVGZXRjaGVyPFNUSF9RPixcbiAgICBpcmxGZXRjaGVyOiBCYXNlSXJsUXVvdGVGZXRjaGVyPFNJX1E+LFxuICAgIGlybERpc2NvdW50Q2FyZHNGZXRjaGVyOiBCYXNlSXJsRGlzY291bnRDYXJkRmV0Y2hlcjxHSURGX1E+LFxuICAgIGdldElybFN1cHBsaWVyU3RhdGlvbkZldGNoZXI6IEJhc2VHZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyPEdJU1NGX1E+LFxuICAgIGZhc3R0cmFja0ZldGNoZXI6IEJhc2VGYXN0VHJhY2tRdW90ZUZldGNoZXI8RlRRX1E+LFxuICAgIGVtYWlsRmVycnlGZXRjaGVyOiBCYXNlRW1haWxGZXJyeUJvb2tpbmdGZXRjaGVyPEVGQl9GPixcbiAgICByYWlsRmV0Y2hlcjogQmFzZVJhaWxRdW90ZUZldGNoZXI8U1JBX1E+LFxuICAgIGV1cm9zdGFyRmV0Y2hlcjogQmFzZUV1cm9zdGFyUXVvdGVGZXRjaGVyPFNFX1E+LFxuICAgIGdldEZsaWdodEV4dHJhc09wdGlvbnNGZXRjaGVyOiBCYXNlR2V0RmxpZ2h0RXh0cmFzT3B0aW9uc0ZldGNoZXI8R0ZFT19GPixcbiAgICBnZXRSZXF1ZXN0ZWRIb3RlbFVwZGF0ZUZldGNoZXI6IEJhc2VHZXRSZXF1ZXN0ZWRIb3RlbFVwZGF0ZUZldGNoZXI8R1JIVV9GPixcbiAgICBlbWFpbEFwYXJ0bWVudEJvb2tpbmdGZXRjaGVyOiBCYXNlRW1haWxBcGFydG1lbnRCb29raW5nRmV0Y2hlcjxFQUJfRj4sXG4gICAgZW1haWxTZWFzb25UaWNrZXRGZXRjaGVyOiBCYXNlRW1haWxTZWFzb25UaWNrZXRCb29raW5nRmV0Y2hlcjxFU1RCX0Y+LFxuICAgIGdldEZsaWdodFNlYXJjaEV4Y2hhbmdlRmV0Y2hlcjogQmFzZUZsaWdodFNlYXJjaEV4Y2hhbmdlRmV0Y2hlcjxGU0VfRj4sXG4gICAgZ2V0RmxpZ2h0RXhjaGFuZ2VEZXRhaWxzRmV0Y2hlcjogQmFzZUZsaWdodEV4Y2hhbmdlRGV0YWlsc0ZldGNoZXI8RkVEX0Y+LFxuICAgIGVtYWlsTWVldGluZ1Jvb21Cb29raW5nRmV0Y2hlcjogQmFzZUVtYWlsTWVldGluZ1Jvb21Cb29raW5nRmV0Y2hlcjxFTVJCX0Y+LFxuICAgIHVwZGF0ZUZsaWdodFNlYXRNYXBVcGRhdGVyOiBCYXNlVXBkYXRlRmxpZ2h0U2VhdE1hcFVwZGF0ZXI8VUZTX1U+LFxuICAgIFxuICApIHtcbiAgICBjb25zdCBzZWFyY2hlc0FyZU51bGwgPSB0aGlzLmNoZWNrSWZTZWFyY2hlc0FyZU51bGwoKTtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5zZWFyY2hfb2JqZWN0cyB8fFxuICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLnNlYXJjaF9vYmplY3RzKS5sZW5ndGggPT09IDAgfHxcbiAgICAgIHNlYXJjaGVzQXJlTnVsbFxuICAgICkge1xuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmluaXRfc2VhcmNoX29iamVjdHMoKSk7XG4gICAgICB0aGlzLnNlYXJjaGVzID0ge1xuICAgICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkxvdW5nZV06IG5ldyBMb3VuZ2VzRW50ZXJwcmlzZVNlYXJjaChcbiAgICAgICAgICBsb3VuZ2VGZXRjaGVyLFxuICAgICAgICAgIGhlbHBlcnMsXG4gICAgICAgICAgYmFza2V0U2VydmljZSxcbiAgICAgICAgICBzdG9yYWdlU2VydmljZSxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHVzZXJTZXJ2aWNlXG4gICAgICAgICksXG4gICAgICAgIFtncmFwaHFsVHlwZXMuU2VydmljZVR5cGUuUGFya2luZ106IG5ldyBQYXJraW5nRW50ZXJwcmlzZVNlYXJjaChcbiAgICAgICAgICBwYXJraW5nRmV0Y2hlcixcbiAgICAgICAgICBoZWxwZXJzLFxuICAgICAgICAgIGJhc2tldFNlcnZpY2UsXG4gICAgICAgICAgc3RvcmFnZVNlcnZpY2UsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB1c2VyU2VydmljZVxuICAgICAgICApLFxuICAgICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkZsaWdodF06IG5ldyBGbGlnaHRFbnRlcnByaXNlU2VhcmNoKFxuICAgICAgICAgIGZsaWdodEZldGNoZXIsXG4gICAgICAgICAgaGVscGVycyxcbiAgICAgICAgICB1c2VyU2VydmljZSxcbiAgICAgICAgICBiYXNrZXRTZXJ2aWNlLFxuICAgICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYXBwbHlGbGlnaHRSdWxlcyxcbiAgICAgICAgICBtb2RhbFNlcnZpY2UsXG4gICAgICAgICAgZ2V0RmxpZ2h0RXh0cmFzT3B0aW9uc0ZldGNoZXIsXG4gICAgICAgICAgZ2V0RmxpZ2h0U2VhcmNoRXhjaGFuZ2VGZXRjaGVyLFxuICAgICAgICAgIGdldEZsaWdodEV4Y2hhbmdlRGV0YWlsc0ZldGNoZXIsXG4gICAgICAgICAgdXBkYXRlRmxpZ2h0U2VhdE1hcFVwZGF0ZXJcbiAgICAgICAgKSxcbiAgICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5Ib3RlbF06IG5ldyBIb3RlbEVudGVycHJpc2VTZWFyY2goXG4gICAgICAgICAgaG90ZWxGZXRjaGVyLFxuICAgICAgICAgIGhlbHBlcnMsXG4gICAgICAgICAgdXNlclNlcnZpY2UsXG4gICAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgICAgaG90ZWxBdmFsaWJpbGl0eVNlcnZpY2UsXG4gICAgICAgICAgYmFza2V0U2VydmljZSxcbiAgICAgICAgICBzdG9yYWdlU2VydmljZSxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGh0dHBDYWxsU2VydmljZSxcbiAgICAgICAgICBxdWlja2xpc3RGZXRjaGVyLFxuICAgICAgICAgIGdldFJhaWxTdGF0aW9uRmV0Y2hlcixcbiAgICAgICAgICBhcHBseUhvdGVsUnVsZXNGZXRjaGVyLFxuICAgICAgICAgIGdldFJlcXVlc3RlZEhvdGVsVXBkYXRlRmV0Y2hlclxuICAgICAgICApLFxuICAgICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkNhcl06IG5ldyBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaChcbiAgICAgICAgICBjYXJoaXJlRmV0Y2hlcixcbiAgICAgICAgICBjYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcixcbiAgICAgICAgICBoZWxwZXJzLFxuICAgICAgICAgIGJhc2tldFNlcnZpY2UsXG4gICAgICAgICAgc3RvcmFnZVNlcnZpY2UsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB1c2VyU2VydmljZVxuICAgICAgICApLFxuICAgICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkNhYl06IG5ldyBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaChcbiAgICAgICAgICBjYWJoaXJlRmV0Y2hlcixcbiAgICAgICAgICBoZWxwZXJzLFxuICAgICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYmFza2V0U2VydmljZSxcbiAgICAgICAgICB1c2VyU2VydmljZVxuICAgICAgICApLFxuICAgICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXTogbmV3IElSTEVudGVycHJpc2VTZWFyY2goXG4gICAgICAgICAgaXJsRmV0Y2hlcixcbiAgICAgICAgICBpcmxEaXNjb3VudENhcmRzRmV0Y2hlcixcbiAgICAgICAgICBoZWxwZXJzLFxuICAgICAgICAgIGJhc2tldFNlcnZpY2UsXG4gICAgICAgICAgc3RvcmFnZVNlcnZpY2UsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBnZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyLFxuICAgICAgICAgIHVzZXJTZXJ2aWNlXG4gICAgICAgICksXG4gICAgICAgIFtncmFwaHFsVHlwZXMuU2VydmljZVR5cGUuRmFzdFRyYWNrXTogbmV3IEZhc3RUcmFja0VudGVycHJpc2VTZWFyY2goXG4gICAgICAgICAgZmFzdHRyYWNrRmV0Y2hlcixcbiAgICAgICAgICBoZWxwZXJzLFxuICAgICAgICAgIGJhc2tldFNlcnZpY2UsXG4gICAgICAgICAgc3RvcmFnZVNlcnZpY2UsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB1c2VyU2VydmljZVxuICAgICAgICApLFxuICAgICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkNvYWNoXTogbnVsbCxcbiAgICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5GZXJyeV06IG5ldyBGZXJyeUVudGVycHJpc2VTZWFyY2goXG4gICAgICAgICAgZW1haWxGZXJyeUZldGNoZXIsXG4gICAgICAgICAgaGVscGVycyxcbiAgICAgICAgICBiYXNrZXRTZXJ2aWNlLFxuICAgICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdXNlclNlcnZpY2VcbiAgICAgICAgKSxcblxuICAgICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLlJhaWxdOiBuZXcgUmFpbEVudGVycHJpc2VTZWFyY2goXG4gICAgICAgICAgcmFpbEZldGNoZXIsXG4gICAgICAgICAgZ2V0UmFpbFN0YXRpb25GZXRjaGVyLFxuICAgICAgICAgIGhlbHBlcnMsXG4gICAgICAgICAgYmFza2V0U2VydmljZSxcbiAgICAgICAgICBzdG9yYWdlU2VydmljZSxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHVzZXJTZXJ2aWNlLFxuICAgICAgICAgIG1vZGFsU2VydmljZVxuICAgICAgICApLFxuICAgICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkV1cm9zdGFyXTogbmV3IEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaChcbiAgICAgICAgICBldXJvc3RhckZldGNoZXIsXG4gICAgICAgICAgaGVscGVycyxcbiAgICAgICAgICB1c2VyU2VydmljZSxcbiAgICAgICAgICBiYXNrZXRTZXJ2aWNlLFxuICAgICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbW9kYWxTZXJ2aWNlLFxuICAgICAgICAgIGFwcGx5RmxpZ2h0UnVsZXNcbiAgICAgICAgKSxcbiAgICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5Mb25nU3RheXNdOiBuZXcgQXBhcnRtZW50RW50ZXJwcmlzZVNlYXJjaChcbiAgICAgICAgICBlbWFpbEFwYXJ0bWVudEJvb2tpbmdGZXRjaGVyLFxuICAgICAgICAgIGhlbHBlcnMsXG4gICAgICAgICAgYmFza2V0U2VydmljZSxcbiAgICAgICAgICBzdG9yYWdlU2VydmljZSxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHVzZXJTZXJ2aWNlXG4gICAgICAgICksXG4gICAgICAgIFtncmFwaHFsVHlwZXMuU2VydmljZVR5cGUuU2Vhc29uVGlja2V0XTogbmV3IFNlYXNvblRpY2tldHNFbnRlcnByaXNlU2VhcmNoKFxuICAgICAgICAgIGVtYWlsU2Vhc29uVGlja2V0RmV0Y2hlcixcbiAgICAgICAgICBoZWxwZXJzLFxuICAgICAgICAgIGJhc2tldFNlcnZpY2UsXG4gICAgICAgICAgc3RvcmFnZVNlcnZpY2UsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB1c2VyU2VydmljZVxuICAgICAgICApLFxuICAgICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLk1lZXRpbmdSb29tXTogbmV3IE1lZXRpbmdSb29tRW50ZXJwcmlzZVNlYXJjaChcbiAgICAgICAgICBlbWFpbE1lZXRpbmdSb29tQm9va2luZ0ZldGNoZXIsXG4gICAgICAgICAgaGVscGVycyxcbiAgICAgICAgICBiYXNrZXRTZXJ2aWNlLFxuICAgICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdXNlclNlcnZpY2VcbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgY2hlY2tJZlNlYXJjaGVzQXJlTnVsbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZWFyY2hlcykuZXZlcnkoKHNlcnZpY2U6IFNlcnZpY2VUeXBlKSA9PiAhdGhpcy5zZWFyY2hlc1tzZXJ2aWNlXSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5hbGxTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuYWxsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5ob3RlbEF2YWxpYmlsaXR5U2VydmljZS5yZXNldCgpO1xuICAgIHRoaXMucmVzZXRBbGxTZWFyY2hJdGVtcygpO1xuICAgIHRoaXMuYmFza2V0U2VydmljZS5yZXNldCgpO1xuICB9XG5cbiAgcmVzZXRBbGxTZWFyY2hJdGVtcygpOiB2b2lkIHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyU2VydmljZS5mdWxsVXNlckRldGFpbHMudXNlckRhdGEudmFsdWU7XG5cbiAgICBpZiAoIXVzZXIpIHJldHVybjtcblxuICAgIHRoaXMuYmFza2V0U2VydmljZS5pc0FwcHJvdmVkQmFza2V0ID0gZmFsc2U7XG4gICAgdGhpcy5yZW1vdmVBbGxSZXN1bHRzKCk7XG4gICAgaWYgKHVzZXIuYm9va2VyX3R5cGUgIT09IEJvb2tlclR5cGUuU2VsZkJvb2spIHtcbiAgICAgIC8vU2VsZiBib29rIHVzZXJzIGNhbiBvbmx5IGJvb2sgZm9yIHRoZW1zZWx2ZXNcbiAgICAgIHRoaXMucmVtb3ZlQWxsVHJhdmVsbGVycygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlckluZm9ybWF0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMucmVzZXRUcmF2ZWxsZXJUeXBlKCk7XG4gICAgdGhpcy5yZXNldFNlYXJjaE9iamVjdHMoKTtcbiAgICB0aGlzLmJhc2tldFNlcnZpY2UucmVzZXQoKTtcbiAgfVxuXG4gIHJlbW92ZUFsbFJlc3VsdHMoKTogdm9pZCB7XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnNlYXJjaGVzKS5mb3JFYWNoKChpdGVtOiBCYXNlRW50ZXJwcmlzZVNlYXJjaDxhbnksIGFueSwgYW55W10+KSA9PiB7XG4gICAgICBpdGVtPy5yZXNldCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVzZXRUcmF2ZWxsZXJUeXBlKCkge1xuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UucmVtb3ZlU2Vzc2lvbkl0ZW0oJ3NlYXJjaF9FUk1fdHJhdmVsbGVyX3R5cGUnKTtcbiAgICB0aGlzLmVybVRyYXZlbGxlclR5cGUgPSBFcm1UcmF2ZWxsZXJUeXBlLk5vbmU7XG4gIH1cblxuICBnZXRVc2VyQ2FyYm9uQWxsb3dhbmNlKFxuICAgIHVzZXI6IHN0cmluZyxcbiAgICBvdXRib3VuZERhdGU6IHN0cmluZyxcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cbiAgKTogT2JzZXJ2YWJsZTxncmFwaHFsVHlwZXMuQ2FyYm9uQWxsb3dhbmNlPiB7XG4gICAgLy8gZG9udCBkbyB0aGlzIGlmIHVzZXIgaXMgYSBndWVzdFxuICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgIGlzTG9hZGluZy5uZXh0KHRydWUpO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5ID0geyB1c2VyLCBvdXRib3VuZERhdGUgfTtcbiAgICByZXR1cm4gdGhpcy5nZXRVc2VyQ2FyYm9uQWxsb3dhbmNlRmV0Y2hlci5mZXRjaExpc3QocXVlcnkpLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgbWFwKChyZXN1bHRzOiBncmFwaHFsVHlwZXMuQ2FyYm9uQWxsb3dhbmNlKSA9PiB7XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0Umlza0FsZXJ0cyhcbiAgICBtaW5MZXZlbDogZ3JhcGhxbFR5cGVzLlJpc2tMZXZlbCxcbiAgICBtYXhMZXZlbDogZ3JhcGhxbFR5cGVzLlJpc2tMZXZlbCxcbiAgICBjb3VudHJ5SXNvQ29kZTogc3RyaW5nLFxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxuICApOiBPYnNlcnZhYmxlPGdyYXBocWxUeXBlcy5SaXNrQWxlcnRbXT4ge1xuICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgIGlzTG9hZGluZy5uZXh0KHRydWUpO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5OiBncmFwaHFsVHlwZXMuR2V0Umlza0FsZXJ0c1F1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgbWluTGV2ZWwsXG4gICAgICBtYXhMZXZlbCxcbiAgICAgIGNvdW50cnlJc29Db2RlXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnJpc2tBbGVydHNGZXRjaGVyLmZldGNoTGlzdChxdWVyeSkucGlwZShcbiAgICAgIHRha2UoMSksXG4gICAgICBtYXAoKHJlc3VsdDogZ3JhcGhxbFR5cGVzLlJpc2tBbGVydFtdKSA9PiB7XG4gICAgICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QWlycG9ydHNMaXN0KFxuICAgIHRlcm06IHN0cmluZyxcbiAgICBjb3VudHJ5Q29kZT86IENvdW50cnlDb2RlLFxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPixcbiAgICBoYXNMb3VuZ2U/OiBib29sZWFuLFxuICAgIGhhc1Bhcmtpbmc/OiBib29sZWFuLFxuICAgIGhhc0Zhc3RUcmFjaz86IGJvb2xlYW4sXG4gICAgaXNIb3RlbD86IGJvb2xlYW4sXG4gICAgbG9jYXRpb25UeXBlPzogZ3JhcGhxbFR5cGVzLkxvY2F0aW9uVHlwZVxuICApOiBPYnNlcnZhYmxlPE9CVEFpcnBvcnREZXRhaWxzW10+IHtcbiAgICBpZiAodGVybS5sZW5ndGggPiAyIHx8IGhhc0Zhc3RUcmFjayB8fCBoYXNMb3VuZ2UgfHwgaGFzUGFya2luZykge1xuICAgICAgaWYgKGlzTG9hZGluZykge1xuICAgICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcXVlcnk6IGdyYXBocWxUeXBlcy5TZWFyY2hBaXJwb3J0cy5WYXJpYWJsZXMgPSB7IHF1ZXJ5OiB0ZXJtIH07XG4gICAgICBpZiAoISFjb3VudHJ5Q29kZSkge1xuICAgICAgICBxdWVyeS5jb3VudHJ5Q29kZSA9IGNvdW50cnlDb2RlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBoYXNMb3VuZ2UgPT09ICdib29sZWFuJykge1xuICAgICAgICBxdWVyeS5oYXNMb3VuZ2UgPSBoYXNMb3VuZ2U7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGhhc1BhcmtpbmcgPT09ICdib29sZWFuJykge1xuICAgICAgICBxdWVyeS5oYXNQYXJraW5nID0gaGFzUGFya2luZztcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgaGFzRmFzdFRyYWNrID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcXVlcnkuaGFzRmFzdFRyYWNrID0gaGFzRmFzdFRyYWNrO1xuICAgICAgfVxuICAgICAgaWYgKGxvY2F0aW9uVHlwZSkge1xuICAgICAgICBxdWVyeS5sb2NhdGlvblR5cGUgPSBsb2NhdGlvblR5cGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hBaXJwb3J0c0ZldGNoZXIuZmV0Y2hPbmUocXVlcnkpLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIG1hcCgocmVzdWx0czogQWlycG9ydFNlYXJjaFJlc3VsdHMpID0+IHtcbiAgICAgICAgICBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5nZW5lcmFsTWF0Y2hlcykge1xuICAgICAgICAgICAgbGV0IGdlbmVyYWxNYXRjaGVzID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdHMuZ2VuZXJhbE1hdGNoZXMpO1xuXG4gICAgICAgICAgICBpZiAoaXNIb3RlbCkge1xuICAgICAgICAgICAgICBnZW5lcmFsTWF0Y2hlcyA9IGdlbmVyYWxNYXRjaGVzLmZpbHRlcigobWF0Y2g6IEFpcnBvcnQpID0+IG1hdGNoLmljYW8pOyAvLyBhbGwgYWlycG9ydHMgYXJlIG1pc3NpbmcgaWNhbyBjb2RlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzTG91bmdlKSB7XG4gICAgICAgICAgICAgIGdlbmVyYWxNYXRjaGVzID0gZ2VuZXJhbE1hdGNoZXMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFJlbW92aW5nIHRoaXMgYXMgdGhpcyBjcmVhdGVzIGR1cGxpY2F0ZSBhaXJwb3J0cyBpbiB0aGUgbGlzdFxuICAgICAgICAgICAgLy8gaWYgKHJlc3VsdHMuaWF0YU1hdGNoKSB7XG4gICAgICAgICAgICAvLyAgIGdlbmVyYWxNYXRjaGVzLnB1c2gocmVzdWx0cy5pYXRhTWF0Y2gpO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgZ2VuZXJhbE1hdGNoZXNcbiAgICAgICAgICAgICAgICAvLyAuZmlsdGVyKChhaXJwb3J0OiBBaXJwb3J0UmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gICByZXR1cm4gISFjb3VudHJ5Q29kZVxuICAgICAgICAgICAgICAgIC8vICAgICA/IGNvdW50cnlDb2RlID09PSBhaXJwb3J0LmRldGFpbHMuY291bnRyeUNvZGVcbiAgICAgICAgICAgICAgICAvLyAgICAgOiBhaXJwb3J0O1xuICAgICAgICAgICAgICAgIC8vIH0pXG4gICAgICAgICAgICAgICAgLm1hcCgoYWlycG9ydDogZ3JhcGhxbFR5cGVzLkFpcnBvcnQpOiBPQlRBaXJwb3J0RGV0YWlscyA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbjogYWlycG9ydC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5OiBhaXJwb3J0LmlhdGEsXG4gICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5wcm9jZXNzVGVybWluYWxzKGFpcnBvcnQudGVybWluYWxzKSxcbiAgICAgICAgICAgICAgICAgICAgY291bnRyeTogYWlycG9ydD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxuICAgICAgICAgICAgICAgICAgICBwb3N0Y29kZTogYWlycG9ydD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcbiAgICAgICAgICAgICAgICAgICAgY291bnRyeUNvZGU6IGFpcnBvcnQ/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGUsXG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uVHlwZTogYWlycG9ydD8ubG9jYXRpb25EZXRhaWxzPy5sb2NhdGlvblR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGxhdGl0dWRlOiBhaXJwb3J0Py5sb2NhdGlvbkRldGFpbHM/LmNvb3JkaW5hdGVzPy5sYXRpdHVkZSxcbiAgICAgICAgICAgICAgICAgICAgbG9uZ2l0dWRlOiBhaXJwb3J0Py5sb2NhdGlvbkRldGFpbHM/LmNvb3JkaW5hdGVzPy5sb25naXR1ZGVcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICB9XG4gIH1cbiAgZ2V0QWlybGluZXNMaXN0KFxuICAgIHRlcm06IHN0cmluZyxcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cbiAgKTogT2JzZXJ2YWJsZTxPQlRBaXJsaW5lc0RldGFpbHNbXT4ge1xuICAgIGlmICh0ZXJtLmxlbmd0aCA+PSAyKSB7XG4gICAgICBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICAgIGlzTG9hZGluZy5uZXh0KHRydWUpO1xuICAgICAgfVxuICAgICAgY29uc3QgcXVlcnk6IGdyYXBocWxUeXBlcy5TZWFyY2hBaXJsaW5lcy5WYXJpYWJsZXMgPSB7IHF1ZXJ5OiB0ZXJtIH07XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hBaXJsaW5lc0ZldGNoZXIuZmV0Y2hPbmUocXVlcnkpLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIG1hcCgocmVzdWx0czogQWlybGluZXNTZWFyY2hSZXN1bHQpID0+IHtcbiAgICAgICAgICBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5nZW5lcmFsTWF0Y2hlcykge1xuICAgICAgICAgICAgY29uc3QgZ2VuZXJhbE1hdGNoZXMgPSB0aGlzLmhlbHBlcnMuY2xvbmUocmVzdWx0cy5nZW5lcmFsTWF0Y2hlcyk7XG4gICAgICAgICAgICByZXR1cm4gZ2VuZXJhbE1hdGNoZXMubWFwKFxuICAgICAgICAgICAgICAoYWlybGluZXM6IGdyYXBocWxUeXBlcy5BaXJsaW5lUmVzdWx0KTogT0JUQWlybGluZXNEZXRhaWxzID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgY29kZTogYWlybGluZXMuaWF0YSxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGFpcmxpbmVzLm5hbWVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZihbXSk7XG4gICAgfVxuICB9XG4gIGdldEFpcnBvcnRMb2NhdGlvbnMoXG4gICAgdGVybTogc3RyaW5nLFxuICAgIGNvdW50cnlDb2RlOiBDb3VudHJ5Q29kZSxcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sXG4gICAgaGFzTG91bmdlPzogYm9vbGVhbixcbiAgICBoYXNQYXJraW5nPzogYm9vbGVhbixcbiAgICBoYXNGYXN0VHJhY2s/OiBib29sZWFuLFxuICAgIGlzSG90ZWw/OiBib29sZWFuXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcbiAgICBjb25zdCBjb252ZXJ0ID0gKHJlc3VsdHM6IE9CVEFpcnBvcnREZXRhaWxzW10pOiBMb2NhdGlvbkRldGFpbHNbXSA9PiB7XG4gICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdDogT0JUQWlycG9ydERldGFpbHMpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiByZXN1bHQuZGVzdGluYXRpb24sXG4gICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5BaXJwb3J0LFxuICAgICAgICAgIGFpcnBvcnQ6IHJlc3VsdCxcbiAgICAgICAgICBsYXRpdHVkZTogcmVzdWx0LmxhdGl0dWRlLFxuICAgICAgICAgIGxvbmdpdHVkZTogcmVzdWx0LmxvbmdpdHVkZVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5nZXRBaXJwb3J0c0xpc3QoXG4gICAgICB0ZXJtLFxuICAgICAgY291bnRyeUNvZGUsXG4gICAgICBpc0xvYWRpbmcsXG4gICAgICBoYXNMb3VuZ2UsXG4gICAgICBoYXNQYXJraW5nLFxuICAgICAgaGFzRmFzdFRyYWNrLFxuICAgICAgaXNIb3RlbFxuICAgICkucGlwZShtYXAoY29udmVydCkpO1xuICB9XG5cbiAgZ2V0Q2l0eUxvY2F0aW9ucyhcbiAgICB0ZXJtOiBzdHJpbmcsXG4gICAgY291bnRyeUNvZGU/OiBDb3VudHJ5Q29kZSxcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xuICAgIGlmICh0ZXJtPy5sZW5ndGggPD0gMikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9nZXRDaXR5TG9jYXRpb25zKHRlcm0sIGNvdW50cnlDb2RlLCBpc0xvYWRpbmcpO1xuICB9XG5cbiAgX2dldENpdHlMb2NhdGlvbnMoXG4gICAgdGVybTogc3RyaW5nLFxuICAgIGNvdW50cnlDb2RlPzogQ291bnRyeUNvZGUsXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcbiAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XG4gICAgY29uc3QgcXVlcnk6IGFueSA9IHsgcXVlcnk6IHRlcm0gfTtcbiAgICBpZiAoY291bnRyeUNvZGUpIHtcbiAgICAgIHF1ZXJ5LmNvdW50cnlDb2RlID0gY291bnRyeUNvZGU7XG4gICAgfVxuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxTZWFyY2hDaXRpZXNSZXN1bHRBcnJheT4gPSB0aGlzLmNpdGllc0ZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KTtcbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IFNlYXJjaENpdGllc1Jlc3VsdEFycmF5KTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xuICAgICAgY29uc3QgZGF0YTogTG9jYXRpb25EZXRhaWxzW10gPSByZXN1bHRzLm1hcCgocmVzdWx0OiBTZWFyY2hDaXRpZXNSZXN1bHQpOiBMb2NhdGlvbkRldGFpbHMgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxuICAgICAgICAgIGxvbmdpdHVkZTogcmVzdWx0LmNvb3JkaW5hdGVzLmxvbmdpdHVkZSxcbiAgICAgICAgICBsYXRpdHVkZTogcmVzdWx0LmNvb3JkaW5hdGVzLmxhdGl0dWRlLFxuICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuQ2l0eSxcbiAgICAgICAgICBjb3VudHJ5Q29kZTogcmVzdWx0LmNvdW50cnlDb2RlLFxuICAgICAgICAgIGlkOiByZXN1bHQuaWRcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IGNhciBoaXJlIGRlcG90cyBiYXNlZCBvbiBjaXR5IGNvcmRzXG4gICAqL1xuICBnZXRDYXJIaXJlRGVwb3RzKFxuICAgIGxhdGl0dWRlOiBudW1iZXIsXG4gICAgbG9uZ2l0dWRlOiBudW1iZXIsXG4gICAgcmFkaXVzPzogc3RyaW5nLFxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxuICApOiBPYnNlcnZhYmxlPENhckhpcmVEZXBvdFJlc3VsdEFycmF5PiB7XG4gICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xuICAgIGNvbnN0IHF1ZXJ5OiBhbnkgPSB7IGxhdGl0dWRlLCBsb25naXR1ZGUgfTtcbiAgICBpZiAocmFkaXVzKSB7XG4gICAgICBxdWVyeS5yYWRpdXMgPSByYWRpdXM7XG4gICAgfVxuXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPENhckhpcmVEZXBvdFJlc3VsdEFycmF5PiA9IHRoaXMuZGVwb3RGZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XG5cbiAgICByZXR1cm4gb2JzOyAvLyAucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xuXG4gICAgLy8gcmV0dXJuIG9mKFtdKTtcbiAgfVxuXG4gIGdldEVudExvY2F0aW9uc1Bvc3Rjb2RlKFxuICAgIGNvdW50cnlDb2RlOiBzdHJpbmcsXG4gICAgcG9zdGNvZGU6IHN0cmluZyxcbiAgICB2ZW5kb3I6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uQ29kZXNbXT4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0geyBjb3VudHJ5Q29kZSwgcG9zdGNvZGUsIHZlbmRvciB9O1xuICAgIHJldHVybiB0aGlzLmdldEVudExvY2F0aW9uc0J5UG9zdGNvZGUuZmV0Y2hMaXN0KHF1ZXJ5KTtcbiAgfVxuXG4gIGdldEVudExvY2F0aW9uc0NpdHkoXG4gICAgY291bnRyeUNvZGU6IHN0cmluZyxcbiAgICBjaXR5OiBzdHJpbmcsXG4gICAgdmVuZG9yOiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkNvZGVzW10+IHtcbiAgICBjb25zdCBxdWVyeSA9IHsgY291bnRyeUNvZGUsIGNpdHksIHZlbmRvciB9O1xuICAgIHJldHVybiB0aGlzLmdldEVudExvY2F0aW9uc0J5Q2l0eS5mZXRjaExpc3QocXVlcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCBwb3N0Y29kZSBsb2NhdGlvbnMsIHRoZXNlIHdpbGwgdXNlIHBhcnRpYWwgcG9zdGNvZGUsXG4gICAqICBmdWxsIGFuZCB0aGVuIGdyYWJiaW5nIHRoZW0gd2lsbCBsZXQgdXMgZmlsbCBpbiB0aGUgYWRkcmVzcyBmb3JtXG4gICAqIEB0b2RvIC0gZmlsbCB0aGlzIG91dCBmb3IgdGhlIG90aGVyIGxvY2F0aW9uIHR5cGVzLCBtYXkgbmVlZCB0byBtZXJnZU1hcCB0aGVtIG9yIHNvbWUgb3RoZXIgcnhqcyBtYWdpY1xuICAgKiBAcGFyYW0gdGVybSAtIHRoZSB0ZXJtIHRvIHNlYXJjaCBieSBlLmcuICd3YTE0JyBzaG91bGQgYnJpbmcgYmFjaywgb3VyIG9mZmljZSwgJ20zMycgc2hvaXVsZCBicmluZyBiYWNrIG15IGFkZHJzXG4gICAqL1xuICBnZXRQb3N0Y29kZUxpc3QodGVybTogc3RyaW5nLCBjb3VudHJ5Q29kZTogc3RyaW5nID0gJ0dCJyk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcbiAgICBjb25zb2xlLmxvZyh0ZXJtLCBjb3VudHJ5Q29kZSk7XG5cbiAgICBpZiAodGVybS5sZW5ndGggPj0gMiAmJiBjb3VudHJ5Q29kZSkge1xuICAgICAgY29uc3Qgc3VicyA9IHRoaXMucG9zdGNvZGVGZXRjaGVyLmZldGNoTGlzdCh7IHF1ZXJ5OiB0ZXJtLCBjb3VudHJ5Q29kZTogY291bnRyeUNvZGUgfSkucGlwZShcbiAgICAgICAgbWFwKChyZXN1bHRzOiBTZWFyY2hQb3N0Y29kZXNSZXN1bHRBcnJheSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXN1bHRzLm1hcCgocmVzdWx0OiBQb3N0Y29kZURldGFpbHMpOiBMb2NhdGlvbkRldGFpbHMgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY2l0eTogcmVzdWx0LmNpdHksXG4gICAgICAgICAgICAgIGNvdW50cnlDb2RlOiByZXN1bHQuY291bnRyeUNvZGUsXG4gICAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5wb3N0Y29kZSxcbiAgICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5Qb3N0Y29kZSxcbiAgICAgICAgICAgICAgbGF0aXR1ZGU6IHJlc3VsdC5sYXRpdHVkZSxcbiAgICAgICAgICAgICAgbG9uZ2l0dWRlOiByZXN1bHQubG9uZ2l0dWRlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgKTsgLy8gZXhwYW5kIHRoaXMgd2l0aCB0aGUgb3RoZXIgc2VhcmNoZXMgd2hlbiB0aGV5IGFyZSBkb25lXG4gICAgICByZXR1cm4gc3VicztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICB9XG4gIH1cblxuICBhZGRUb1NlbGVjdGVkUGxhY2VzKGFkZHJlc3M6IGdyYXBocWxUeXBlcy5BZGRyZXNzKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFBsYWNlcy5wdXNoKGFkZHJlc3MpO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRQbGFjZUJ5SWQocGxhY2VJZDogc3RyaW5nKTogZ3JhcGhxbFR5cGVzLkFkZHJlc3Mge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUGxhY2VzLmZpbmQoKHBsYWNlOiB7IHBsYWNlX2lkOiBzdHJpbmcgfSkgPT4gcGxhY2UucGxhY2VfaWQgPT09IHBsYWNlSWQpO1xuICB9XG5cbiAgLypcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHRoZSBsaXN0IG9mIE9mZmljZSBsb2NhdGlvbnMgYmFzZWQgb24gc2VhcmNoIHRlcm0gZ2l2ZW5cbiAgICogQHRvZG8gLSBmaWxsIHRoaXMgb3V0IHNvIHRoYXQgaXQgYWN0dWFsbHkgcGVyZm9ybXMgYSBodHRwIGNhbGxcbiAgICogQHBhcmFtIHRlcm0gLSB0aGUgdGVybSB3ZSB3YW50IHRvIHNlYXJjaCBieVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0T2ZmaWNlTG9jYXRpb25zKCk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8QWRkcmVzc1tdPiA9IHRoaXMudXNlckFkZHJlc3Nlc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBBZGRyZXNzW10pOiBMb2NhdGlvbkRldGFpbHNbXSA9PiB7XG4gICAgICBsZXQgbmV3T2ZmaWNlczogTG9jYXRpb25EZXRhaWxzW10gPSBbXTtcbiAgICAgIGNvbnN0IG9mZmljZXNVbmlxdWU6IHtcbiAgICAgICAgW2tleTogc3RyaW5nXToge1xuICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXM7XG4gICAgICAgICAgbG9uZ2l0dWRlOiBudW1iZXI7XG4gICAgICAgICAgbGF0aXR1ZGU6IG51bWJlcjtcbiAgICAgICAgICBjb3VudHJ5Q29kZTogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgfSA9IHt9O1xuICAgICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQ6IEFkZHJlc3MpID0+IHtcbiAgICAgICAgY29uc3QgdW5pcVN0cmluZyA9XG4gICAgICAgICAgYCR7cmVzdWx0Lm51bWJlck9yTmFtZX0gJHtyZXN1bHQuc3RyZWV0fSAke3Jlc3VsdC50b3dufSAke3Jlc3VsdC5wb3N0Y29kZX1gLnJlcGxhY2UoXG4gICAgICAgICAgICAvIC9nLFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApO1xuICAgICAgICBvZmZpY2VzVW5pcXVlW3VuaXFTdHJpbmddID0ge1xuICAgICAgICAgIGlkOiByZXN1bHQuaWQsXG4gICAgICAgICAgbmFtZTogYCR7cmVzdWx0LmRlc2NyaXB0aW9ufSB8ICR7cmVzdWx0Lm51bWJlck9yTmFtZX0gJHtyZXN1bHQuc3RyZWV0fSAke3Jlc3VsdC50b3dufSAke3Jlc3VsdC5wb3N0Y29kZX1gLFxuICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuT2ZmaWNlLFxuICAgICAgICAgIGxvbmdpdHVkZTogcmVzdWx0LmxvbmdpdHVkZSxcbiAgICAgICAgICBsYXRpdHVkZTogcmVzdWx0LmxhdGl0dWRlLFxuICAgICAgICAgIGNvdW50cnlDb2RlOiByZXN1bHQuY291bnRyeUNvZGVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgbmV3T2ZmaWNlcyA9IE9iamVjdC52YWx1ZXMob2ZmaWNlc1VuaXF1ZSk7XG4gICAgICAvLyBjb25zb2xlLndhcm4ob2ZmaWNlc1VuaXF1ZSk7XG4gICAgICBuZXdPZmZpY2VzID0gbmV3T2ZmaWNlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIC8vIHNvcnQgYWxwaGFiZXRpY2FsbHlcbiAgICAgICAgaWYgKGEubmFtZSA8IGIubmFtZSkge1xuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYS5uYW1lID4gYi5uYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXdPZmZpY2VzO1xuICAgIH07XG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XG4gIH1cblxuICBnZXRPZmZpY2VMb2NhdGlvbnNOb1VzZXJBZGRyZXNzZXModG93bjogc3RyaW5nID0gJycpOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPEFkZHJlc3NbXT4gPSB0aGlzLnVzZXJBZGRyZXNzZXNGZXRjaGVyLmZldGNoTGlzdCh7dG93bn0pO1xuICAgIGNvbnN0IGZ1bmMgPSAocmVzdWx0czogQWRkcmVzc1tdKTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xuICAgICAgbGV0IG5ld09mZmljZXM6IExvY2F0aW9uRGV0YWlsc1tdID0gW107XG4gICAgICBjb25zdCBvZmZpY2VzVW5pcXVlOiB7XG4gICAgICAgIFtrZXk6IHN0cmluZ106IHtcbiAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzO1xuICAgICAgICAgIGxvbmdpdHVkZTogbnVtYmVyO1xuICAgICAgICAgIGxhdGl0dWRlOiBudW1iZXI7XG4gICAgICAgICAgY291bnRyeUNvZGU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0gPSB7fTtcbiAgICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0OiBBZGRyZXNzKSA9PiB7XG4gICAgICAgIGlmICghcmVzdWx0LnVzZXIgJiYgKHJlc3VsdC5vZmZpY2UgfHwgcmVzdWx0LmNvbXBhbnkpKSB7XG4gICAgICAgICAgY29uc3QgdW5pcVN0cmluZyA9XG4gICAgICAgICAgICBgJHtyZXN1bHQubnVtYmVyT3JOYW1lfSAke3Jlc3VsdC5zdHJlZXR9ICR7cmVzdWx0LnRvd259ICR7cmVzdWx0LnBvc3Rjb2RlID8gJyAnICsgcmVzdWx0LnBvc3Rjb2RlIDogJyd9YC5yZXBsYWNlKFxuICAgICAgICAgICAgICAvIC9nLFxuICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICBvZmZpY2VzVW5pcXVlW3VuaXFTdHJpbmddID0ge1xuICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZCxcbiAgICAgICAgICAgIG5hbWU6IGAke3Jlc3VsdC5kZXNjcmlwdGlvbn0gfCAke3Jlc3VsdC5udW1iZXJPck5hbWV9ICR7cmVzdWx0LnN0cmVldH0gJHtyZXN1bHQudG93bn0gJHtyZXN1bHQucG9zdGNvZGUgPyAnICcgKyByZXN1bHQucG9zdGNvZGUgOiAnJ31gLFxuICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5PZmZpY2UsXG4gICAgICAgICAgICBsb25naXR1ZGU6IHJlc3VsdC5sb25naXR1ZGUsXG4gICAgICAgICAgICBsYXRpdHVkZTogcmVzdWx0LmxhdGl0dWRlLFxuICAgICAgICAgICAgY291bnRyeUNvZGU6IHJlc3VsdC5jb3VudHJ5Q29kZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbmV3T2ZmaWNlcyA9IE9iamVjdC52YWx1ZXMob2ZmaWNlc1VuaXF1ZSk7XG4gICAgICAvLyBjb25zb2xlLndhcm4ob2ZmaWNlc1VuaXF1ZSk7XG4gICAgICBuZXdPZmZpY2VzID0gbmV3T2ZmaWNlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIC8vIHNvcnQgYWxwaGFiZXRpY2FsbHlcbiAgICAgICAgaWYgKGEubmFtZSA8IGIubmFtZSkge1xuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYS5uYW1lID4gYi5uYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXdPZmZpY2VzO1xuICAgIH07XG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XG4gIH1cblxuICBnZXRTdGF0aW9uTG9jYXRpb25zKFxuICAgIHRlcm06IHN0cmluZyxcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sXG4gICAgaGFzVG9kPzogYm9vbGVhbixcbiAgICBnYk9ubHk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBldU9ubHk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBleGNsdWRlSHViU3RhdGlvbnM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBnZXRBbGxTdGF0aW9uczogYm9vbGVhbiA9IGZhbHNlXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcbiAgICAvLyBjb25zb2xlLmxvZygnRVVPTkxZOiAnLCBldU9ubHkpO1xuXG4gICAgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xuICAgICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xuICAgICAgcmV0dXJuIHRoaXMucmFpbFN0YXRpb25GZXRjaGVyXG4gICAgICAgIC5mZXRjaExpc3Qoe1xuICAgICAgICAgIHF1ZXJ5OiB0ZXJtLFxuICAgICAgICAgIGhhc1RvZCxcbiAgICAgICAgICBjb3VudHJ5Q29kZTogZ2JPbmx5ID8gJ0dCJyA6IG51bGwsXG4gICAgICAgICAgZXhjbHVkZUh1YlN0YXRpb25zOiBleGNsdWRlSHViU3RhdGlvbnMsXG4gICAgICAgICAgZ2V0QWxsU3RhdGlvbnM6IGdldEFsbFN0YXRpb25zICYmICFnYk9ubHlcbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICBtYXAoKHJlc3VsdHM6IFNlYXJjaFJhaWxTdGF0aW9uc1Jlc3VsdEFycmF5KTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xuICAgICAgICAgICAgaWYgKGlzTG9hZGluZykge1xuICAgICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0c1xuICAgICAgICAgICAgICA/IHJlc3VsdHNcbiAgICAgICAgICAgICAgICAgIC5tYXAoKHJlc3VsdDogU2VhcmNoUmFpbFN0YXRpb25zUmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAhZXVPbmx5IHx8XG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmxvY2F0aW9uRGV0YWlscy5jb3VudHJ5Q29kZSAhPT0gJ0dCJyB8fFxuICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGF0aW9uQ29kZSA9PT0gJ1NUUCdcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuVHJhaW5TdGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWlsc3RhdGlvbjogcmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgbGF0aXR1ZGU6IHJlc3VsdC5sb2NhdGlvbkRldGFpbHM/LmNvb3JkaW5hdGVzPy5sYXRpdHVkZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdpdHVkZTogcmVzdWx0LmxvY2F0aW9uRGV0YWlscz8uY29vcmRpbmF0ZXM/LmxvbmdpdHVkZVxuICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKHN0YXRpb24gPT4gc3RhdGlvbikgLy8gcmVtb3ZlIHVuZGVmaW5lZFxuICAgICAgICAgICAgICA6IFtdO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZihbXSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmFpbFN0YXRpb25CeUlkKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGdyYXBocWxUeXBlcy5SYWlsU3RhdGlvbj4ge1xuICAgIGlmIChpZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmFpbFN0YXRpb25GZXRjaGVyLmZldGNoTGlzdCh7IGlkIH0pLnBpcGUodGFrZSgxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgaXJsIHN0YXRpb24gbG9jYXRpb25zXG4gICAqIEBwYXJhbSB0ZXJtIC0gdGhlIHRlcm0gdG8gc2VhcmNoXG4gICAqIEBwYXJhbSBpc0xvYWRpbmcgLSBCZWhhdmlvclN1YmplY3Qgc28gd2Uga25vdyBzb21ldGhpbmcgaXMgaGFwcGVuaW5nXG4gICAqL1xuICBzZWFyY2hJcmxTdGF0aW9uc0xvY2F0aW9ucyhcbiAgICB0ZXJtOiBzdHJpbmcsXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcbiAgICBpZiAodGVybS5sZW5ndGggPiAyKSB7XG4gICAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hJcmxTdGF0aW9uc0ZldGNoZXJcbiAgICAgICAgLmZldGNoTGlzdCh7XG4gICAgICAgICAgcXVlcnk6IHRlcm1cbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICBtYXAoKHJlc3VsdHM6IGdyYXBocWxUeXBlcy5JcmxTdXBwbGllclN0YXRpb25bXSk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcbiAgICAgICAgICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHMubWFwKChyZXN1bHQ6IGdyYXBocWxUeXBlcy5JcmxTdXBwbGllclN0YXRpb24pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLlRyYWluU3RhdGlvbixcbiAgICAgICAgICAgICAgICBuYW1lOiBgJHtyZXN1bHQubmFtZX0gKCR7cmVzdWx0LnN1cHBsaWVyfSlgLFxuICAgICAgICAgICAgICAgIHJhaWxzdGF0aW9uOiByZXN1bHRcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZihbXSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0SG90ZWxMb2NhdGlvbnNBbmRQb3N0Y29kZXNMaXN0KCkge31cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCBob3RlbCBsb2NhdGlvbnMsIHRoZXNlIHNob3VsZCBiZSBjaXR5LCBvZmZpY2UsIGFpcnBvcnQsIHJhaWxzdGF0aW9uXG4gICAqIEB0b2RvIC0gZmlsbCB0aGlzIG91dCBmb3IgdGhlIG90aGVyIGxvY2F0aW9uIHR5cGVzLCBtYXkgbmVlZCB0byBtZXJnZU1hcCB0aGVtIG9yIHNvbWUgb3RoZXIgcnhqcyBtYWdpY1xuICAgKiBAcGFyYW0gdGVybSAtIHRoZSB0ZXJtIHRvIHNlYXJjaCBieSBlLmcuICdNYW4nIHNob3VsZCBicmluZyBiYWNrLCBtYW5jaGVzdGVyLCBtYW5jaGVzdGVyIGFpcnBvcnQsIG1hbmNoZXN0ZXIgcGljYWRpbGx5LCBldGNcbiAgICovXG4gIGdldEhvdGVsTG9jYXRpb25zTGlzdChcbiAgICB0ZXJtOiBzdHJpbmcsXG4gICAgY291bnRyeUNvZGU6IENvdW50cnlDb2RlLFxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XG4gICAgaWYgKFxuICAgICAgdGVybS5sZW5ndGggPj0gMiAmJlxuICAgICAgKFJlZ0V4cHMuVUtfUE9TVENPREUudGVzdCh0ZXJtKSB8fCBSZWdFeHBzLlBBUlRJQUxfVUtfUE9TVENPREUudGVzdCh0ZXJtKSlcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBvc3Rjb2RlTGlzdCh0ZXJtLCBjb3VudHJ5Q29kZSk7XG4gICAgfSBlbHNlIGlmICh0ZXJtLmxlbmd0aCA+IDIpIHtcbiAgICAgIGlmICghaXNMb2FkaW5nPy52YWx1ZSkge1xuICAgICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1YnMgPSBmb3JrSm9pbihbXG4gICAgICAgIHRoaXMuZ2V0QWlycG9ydExvY2F0aW9ucyh0ZXJtLCBjb3VudHJ5Q29kZSwgaXNMb2FkaW5nKSxcbiAgICAgICAgdGhpcy5nZXRDaXR5TG9jYXRpb25zKFxuICAgICAgICAgIHRlcm0sXG4gICAgICAgICAgY291bnRyeUNvZGUsXG4gICAgICAgICAgaXNMb2FkaW5nXG4gICAgICAgICksXG4gICAgICAgIHRoaXMuZ2V0U3RhdGlvbkxvY2F0aW9ucyh0ZXJtLCBpc0xvYWRpbmcpLFxuICAgICAgICB0aGlzLmdldE9mZmljZUxvY2F0aW9ucygpXG4gICAgICBdKS5waXBlKFxuICAgICAgICBtYXAoKHJlc3VsdHM6IGFueVtdKSA9PiB7XG4gICAgICAgICAgaWYgKGlzTG9hZGluZz8udmFsdWUpIHtcbiAgICAgICAgICAgIGlzTG9hZGluZy5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHMucmVkdWNlKChhY2N1bTogTG9jYXRpb25EZXRhaWxzW10sIHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICBhY2N1bS5wdXNoKC4uLnJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICAgICAgfSwgW10pO1xuICAgICAgICB9KVxuICAgICAgKTsgLy8gZXhwYW5kIHRoaXMgd2l0aCB0aGUgb3RoZXIgc2VhcmNoZXMgd2hlbiB0aGV5IGFyZSBkb25lXG4gICAgICByZXR1cm4gc3VicztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0aW9uc0FuZEFpcnBvcnRzTGlzdChcbiAgICB0ZXJtOiBzdHJpbmcsXG4gICAgY291bnRyeUNvZGU6IENvdW50cnlDb2RlLFxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XG4gICAgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xuICAgICAgaWYgKCFpc0xvYWRpbmc/LnZhbHVlKSB7XG4gICAgICAgIGlzTG9hZGluZy5uZXh0KHRydWUpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3VicyA9IGZvcmtKb2luKFtcbiAgICAgICAgdGhpcy5nZXRBaXJwb3J0TG9jYXRpb25zKHRlcm0sIGNvdW50cnlDb2RlLCBpc0xvYWRpbmcpLFxuICAgICAgICB0aGlzLmdldFN0YXRpb25Mb2NhdGlvbnModGVybSwgaXNMb2FkaW5nKVxuICAgICAgXSkucGlwZShcbiAgICAgICAgbWFwKChyZXN1bHRzOiBhbnlbXSkgPT4ge1xuICAgICAgICAgIGlmIChpc0xvYWRpbmc/LnZhbHVlKSB7XG4gICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzLnJlZHVjZSgoYWNjdW06IGFueVtdLCByZXN1bHQ6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICBhY2N1bS5wdXNoKC4uLnJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICAgICAgfSwgW10pO1xuICAgICAgICB9KVxuICAgICAgKTsgLy8gZXhwYW5kIHRoaXMgd2l0aCB0aGUgb3RoZXIgc2VhcmNoZXMgd2hlbiB0aGV5IGFyZSBkb25lXG4gICAgICByZXR1cm4gc3VicztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICB9XG4gIH1cblxuICAvKlxuICBAZGVzYyAtIHJlbW92ZSBhIHNwZWNpZmllZCB0cmF2ZWxsZXIgZnJvbSB0aGUgc2VsZWN0ZWQgYXJyYXlcbiAgKiovXG4gIHJlbW92ZVRyYXZlbGxlcih0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IHZvaWQge1xuICAgIHRoaXMuX3JlbW92ZVRyYXZlbGxlcih0cmF2ZWxsZXIpO1xuXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcbiAgICAgIEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZS5TRVNTSU9OX1RSQVZFTExFUixcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzXG4gICAgKTtcbiAgICBpZiAodGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXSkge1xuICAgICAgdGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXS5yZW1vdmVUcmFpbmxpbmVUcmF2ZWxsZXIodHJhdmVsbGVyLmlkKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJJbmZvcm1hdGlvbigpO1xuICB9XG5cbiAgX3JlbW92ZVRyYXZlbGxlcih0cmF2ZWxsZXI6IFRyYXZlbGxlcikge1xuICAgIC8vICEgLSBTaG91bGQgb25seSBiZSBhYmxlIHRvIHJlbW92ZSBpbnZva2VkIHVzZXIgaWYgdXNlciBpcyBhbiBhZ2VudCAtIG90aGVyd2lzZSB0aGV5IGFyZSByZXF1aXJlZC5cbiAgICBpZiAoXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLmJvYm8gJiZcbiAgICAgIHRoaXMudXNlclNlcnZpY2UuYm9iby5pZCA9PT0gdHJhdmVsbGVyLmlkICYmXG4gICAgICAhdGhpcy51c2VyU2VydmljZS51c2VySXNBZ2VudCgpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMgPSB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5maWx0ZXIoKHRyYXZlbGxlclRvVGVzdDogVHJhdmVsbGVyKSA9PiB7XG4gICAgICByZXR1cm4gIVRyYXZlbGxlck9iamVjdC5lcXVhbHModHJhdmVsbGVyVG9UZXN0LCB0cmF2ZWxsZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVtb3ZlQWxsVHJhdmVsbGVycygpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygncmVtb3ZlIGFsbCB0cmF2ZWxsZXJzIGNhbGxlZCEnKTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkVHJhdmVsbGVycyk7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkVHJhdmVsbGVycykge1xuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMuZm9yRWFjaCgodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHtcbiAgICAgIHRoaXMuX3JlbW92ZVRyYXZlbGxlcih0cmF2ZWxsZXIpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcbiAgICAgIEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZS5TRVNTSU9OX1RSQVZFTExFUixcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzXG4gICAgKTtcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlckluZm9ybWF0aW9uKCk7XG4gICAgaWYgKHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0pIHtcbiAgICAgIHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0udHJhaW5saW5lVHJhdmVsbGVycyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIGFkZFRyYXZlbGxlcih0cmF2ZWxsZXI6IFRyYXZlbGxlciwgaXNHVVQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGlmIChcbiAgICAgICghdGhpcy50cmF2ZWxsZXJBbHJlYWR5QWRkZWQodHJhdmVsbGVyKSAmJlxuICAgICAgICAhdGhpcy5jdXJyZW50Tm9PZlRyYXZlbGxlcnNHcmVhdGVyT3JFcXVhbFRvTWF4KCkpIHx8XG4gICAgICBpc0dVVFxuICAgICkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMucHVzaCh0cmF2ZWxsZXIpO1xuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcbiAgICAgICAgQmFzZUVudGVycHJpc2VTZWFyY2hTZXJ2aWNlLlNFU1NJT05fVFJBVkVMTEVSLFxuICAgICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1xuICAgICAgKTtcbiAgICAgIHRoaXMudXBkYXRlVHJhdmVsbGVySW5mb3JtYXRpb24oKTtcbiAgICAgIGlmICh0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0uc2V0dXBUcmFpbmxpbmVFVVRyYXZlbGxlcnMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy50cmF2ZWxsZXJBbHJlYWR5QWRkZWQodHJhdmVsbGVyKSAmJlxuICAgICAgdGhpcy51c2VyU2VydmljZS5ib2JvPy5pZCA9PT0gdHJhdmVsbGVyLmlkICYmXG4gICAgICAhdGhpcy51c2VyU2VydmljZS51c2VySXNBZ2VudCgpXG4gICAgKSB7XG4gICAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlckluZm9ybWF0aW9uKCk7XG4gICAgICBpZiAodGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXSkge1xuICAgICAgICB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdLnNldHVwVHJhaW5saW5lRVVUcmF2ZWxsZXJzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGN1cnJlbnROb09mVHJhdmVsbGVyc0dyZWF0ZXJPckVxdWFsVG9NYXgoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aCA+PSB0aGlzLm1heFRyYXZlbGxlcnMoKTtcbiAgfVxuXG4gIG1heFRyYXZlbGxlcnMoKTogbnVtYmVyIHtcbiAgICBjb25zdCBzYW1lVHJhdmVsbGVzclBlckJhc2tldDogYW55ID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3QoXG4gICAgICBVc2VyRmF2b3J1cml0ZS5BbGxvd1NhbWVUcmF2ZWxsZXNyUGVyQmFza2V0XG4gICAgKTtcbiAgICBpZiAoc2FtZVRyYXZlbGxlc3JQZXJCYXNrZXQgJiYgc2FtZVRyYXZlbGxlc3JQZXJCYXNrZXRbJ3NhbWVUcmF2ZWxsZXJzJ10pIHtcbiAgICAgIE1BWF9UUkFWRUxMRVJTID0gK3NhbWVUcmF2ZWxsZXNyUGVyQmFza2V0WydzYW1lVHJhdmVsbGVycyddO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFTlQtOTEyNyBkZWZhdWx0cyB0byA4XG4gICAgICBNQVhfVFJBVkVMTEVSUyA9IDg7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qdGhpcy51c2VyU2VydmljZS51c2VUcmF2ZWxsZXJQcm9maWxlICYmKi8gdGhpcy5jYW5Vc2VUcmF2ZWxsZXJQcm9maWxlKClcbiAgICAgID8gMVxuICAgICAgOiBNQVhfVFJBVkVMTEVSUztcbiAgfVxuICAvKlxuICAgIEBkZXNjIC0gaGVscGVyIGZ1bmN0aW9uIC0gZGV0ZXJtaW5lcyBpZiBhIHNlbGVjdGVkIHRyYXZlbGxlciBpcyBhbHJlYWR5IGFkZGVkIC1cbiAgICB1c2VkIHRvIHByZXZlbnQgc2FtZSB0cmF2ZWxsZXIgYmVpbmcgYWRkZWQgbW9yZSB0aGFuIG9uY2VcbiAgKiovXG4gIHRyYXZlbGxlckFscmVhZHlBZGRlZCh0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IGJvb2xlYW4ge1xuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCB0aGUgc2VsZWN0ZWQgdHJhdmVsbGVycyBhbmQgcmV0dXJuIHRydWUgaWYgZm91bmQsIGZhbHNlIG90aGVyIHdpc2VcbiAgICByZXR1cm4gISF0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5maW5kKCh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXIpID0+XG4gICAgICBUcmF2ZWxsZXJPYmplY3QuZXF1YWxzKHRyYXZlbGxlcnMsIHRyYXZlbGxlcilcbiAgICApO1xuICB9XG5cbiAgY2FuVXNlVHJhdmVsbGVyUHJvZmlsZSgpOiBib29sZWFuIHtcbiAgICAvKlxuICAgIGlmICh0aGlzLnVzZXJTZXJ2aWNlLmlzVXNlckZhdm9yaXRlU2V0KFVzZXJGYXZvcnVyaXRlLkRvbnRVc2VUcmF2ZWxsZXJQb2xpY3kpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHVzZXIgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJEZXRhaWxzKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgIXRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzWzBdXG4gICAgICAgIC5ndWVzdCAvKiYmXG4gICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1swXS5wYXhfaWQgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzWzBdLnBheF9pZCAhPT0gdXNlci5QYXhJZFxuICAgICk7Ki9cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXRDdXJyZW50Tm9PZlRyYXZlbGxlcnMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoO1xuICB9XG5cbiAgaXNTaW5nbGVUcmF2ZWxsZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudE5vT2ZUcmF2ZWxsZXJzKCkgPT09IDE7XG4gIH1cblxuICBpc011bHRpcGxlVHJhdmVsbGVycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDdXJyZW50Tm9PZlRyYXZlbGxlcnMoKSA+IDE7XG4gIH1cblxuICB1cGRhdGVUcmF2ZWxsZXJJbmZvcm1hdGlvbigpIHtcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxuICAgICAgQmFzZUVudGVycHJpc2VTZWFyY2hTZXJ2aWNlLlNFU1NJT05fVFJBVkVMTEVSLFxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNcbiAgICApO1xuICAgIHRoaXMudHJhdmVsbGVySW5mb3JtYXRpb24ubmV4dChbLi4udGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNdKTtcblxuICAgIGlmICh0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdKSB7XG4gICAgICB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdLnJhaWxDYXJkcyA9IG5ldyBBcnJheSh0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5sZW5ndGgpLmZpbGwoXG4gICAgICAgIHsgbmFtZTogJycsIGNvZGU6ICcnIH0sXG4gICAgICAgIDAsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKlxuICAgKiAgQGRlc2MgLSBkZXRlcm1pbmUgYW5kIHJldHVybiB0aGUgaGlnaGVzdCBwcmlvcml0eSB2YWx1ZSxcbiAgICogICB0aGUgaGlnaGVzdCBpcyBiYXNlZCBvbiB0aGUgcHJpb3JpdHkgdmFsdWUgb2YgdGhlIHNlYXJjaCB0eXBlLFxuICAgKiAgICBpZiBpdCBpcyBjaG9zZW4gYW5kIGlmIHRoZSBib29raW5nIGhhcyBub3QgYmVlbiBjaG9zZW5cbiAgICoqL1xuICBkZXRlcm1pbmVIaWdoZXN0U2VhcmNoUHJpb3JpdHkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKHRoaXMuaGlnaGVzdF9zZWFyY2hfcHJpb3JpdHkgPSB0aGlzLl9nZXRIaWdoZXN0U2VhcmNoUHJpb3JpdHlPYmplY3QoKS5oaWdoZXN0KTtcbiAgfVxuXG4gIHJlc2V0U2VhcmNoUHJpb3JpdGllcygpOiB2b2lkIHtcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5zZWFyY2hfb2JqZWN0cykubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzLkZMSUdIVC5wcmlvcml0eSA9IDE7XG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzLlJBSUwucHJpb3JpdHkgPSAyO1xuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0cy5FVVJPU1RBUi5wcmlvcml0eSA9IDM7XG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzLkhPVEVMLnByaW9yaXR5ID0gNDtcbiAgICAgIHRoaXMuc2VhcmNoX29iamVjdHMuQ0FSLnByaW9yaXR5ID0gNTtcbiAgICAgIHRoaXMuc2VhcmNoX29iamVjdHMuRkFTVF9UUkFDSy5wcmlvcml0eSA9IDY7XG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzLkxPVU5HRS5wcmlvcml0eSA9IDc7XG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzLlBBUktJTkcucHJpb3JpdHkgPSA4O1xuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0cy5JTlRFUk5BVElPTkFMX1JBSUwucHJpb3JpdHkgPSA5O1xuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0cy5DQUIucHJpb3JpdHkgPSAxMDtcbiAgICAgIHRoaXMuc2VhcmNoX29iamVjdHMuQ09BQ0gucHJpb3JpdHkgPSAxMTtcbiAgICAgIHRoaXMuc2VhcmNoX29iamVjdHMuRkVSUlkucHJpb3JpdHkgPSAxMjtcbiAgICAgIHRoaXMuc2VhcmNoX29iamVjdHMuTE9OR19TVEFZUy5wcmlvcml0eSA9IDEzO1xuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0cy5TRUFTT05fVElDS0VULnByaW9yaXR5ID0gMTQ7XG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzLk1FRVRJTkdfUk9PTS5wcmlvcml0eSA9IDE1O1xuICAgIH1cbiAgfVxuXG4gIGdldEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdChcbiAgICBiYXNrZXRJdGVtczogUmVjb3JkPGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZSwgZ3JhcGhxbFR5cGVzLkJhc2tldEl0ZW0+XG4gICk6IFNlYXJjaE9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX2dldEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdChiYXNrZXRJdGVtcykuY3VycmVudEl0ZW07XG4gIH1cblxuICBwcml2YXRlIF9nZXRIaWdoZXN0U2VhcmNoUHJpb3JpdHlPYmplY3QoXG4gICAgYmFza2V0SXRlbXM6IFJlY29yZDxncmFwaHFsVHlwZXMuU2VydmljZVR5cGUsIGdyYXBocWxUeXBlcy5CYXNrZXRJdGVtPiA9IHt9IGFzIFJlY29yZDxcbiAgICAgIGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZSxcbiAgICAgIGdyYXBocWxUeXBlcy5CYXNrZXRJdGVtXG4gICAgPlxuICApOiBIaWdoZXN0U2VhcmNoUHJpb3JpdHlPYmplY3RJbnRlcmZhY2Uge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoX29iamVjdHMpLnJlZHVjZShcbiAgICAgICh7IGhpZ2hlc3QsIGN1cnJlbnRJdGVtIH0sIGl0ZW06IFNlYXJjaE9iamVjdCkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5jaG9zZW4gJiYgaXRlbS5wcmlvcml0eSA8IGhpZ2hlc3QpIHtcbiAgICAgICAgICBpZiAoIWJhc2tldEl0ZW1zW2l0ZW0udHlwZSBhcyBncmFwaHFsVHlwZXMuU2VydmljZVR5cGVdKSB7XG4gICAgICAgICAgICByZXR1cm4geyBoaWdoZXN0OiBpdGVtLnByaW9yaXR5LCBjdXJyZW50SXRlbTogaXRlbSB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpdGVtLmNob3NlbiA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBoaWdoZXN0LCBjdXJyZW50SXRlbSB9O1xuICAgICAgfSxcbiAgICAgIHsgaGlnaGVzdDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGN1cnJlbnRJdGVtOiBudWxsIH1cbiAgICApO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRPcHRpb25zKCk6IGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZVtdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZWFyY2hfb2JqZWN0cykucmVkdWNlKChjdiwgaXRlbUluZGV4KSA9PiB7XG4gICAgICBpZiAoKHRoaXMuc2VhcmNoX29iamVjdHMgYXMgUmVjb3JkPHN0cmluZywgYW55PilbaXRlbUluZGV4XT8uY2hvc2VuKSB7XG4gICAgICAgIGN2LnB1c2goaXRlbUluZGV4IGFzIGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY3Y7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBzZWxlY3RlZCB0cmF2ZWxsZXJzIGNvbnRhaW5zIGFueSBndWVzdHMgd2l0aG91dCBhbGwgb2YgZGV0YWlsc1xuICAgKi9cbiAgaGFzU2ltcGxlR3Vlc3RzKCk6IGJvb2xlYW4ge1xuICAgIC8qcmV0dXJuICEhdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMuZmluZCgoeyBndWVzdCwgcGhvbmUsIG5hdGlvbmFsaXR5LCBlbWFpbCB9KSA9PiB7XG4gICAgICByZXR1cm4gZ3Vlc3QgJiYgISghIWVtYWlsICYmICEhcGhvbmUgJiYgISFuYXRpb25hbGl0eSk7XG4gICAgfSk7Ki9cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gc2V0IHRoZSBzZWFyY2ggb2JqZWN0cyB0byB0aGUgZ2V0IG1lIHRoZXJlIG9iamVjdHMgLSBjYWxsZWQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBnZXQgbWUgdGhlcmUgc2VhcmNoZXNcbiAgICovXG4gIHNldEdldE1lVGhlcmVTZWFyY2hPYmplY3RzKCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCcrKysgU2V0dGluZyBHZXRNZVRoZXJlIFNlYXJjaCBPYmplY3RzICsrKycpO1xuICAgIHRoaXMuc2VhcmNoX29iamVjdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5nZXRNZVRoZXJlU2VhcmNoT2JqZWN0cygpKTtcbiAgfVxuXG4gIHJlc2V0U2VhcmNoUGFyYW1zKCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdSZXNldGluZyBTZWFyY2ggUGFyYW1zIScpO1xuICAgIHRoaXMuc2VhcmNoX29iamVjdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5pbml0X3NlYXJjaF9vYmplY3RzKCkpO1xuICAgIC8vIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXG4gICAgLy8gICBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2UuU0VTU0lPTl9UUkFWRUxMRVIsXG4gICAgLy8gICB0aGlzLnNlYXJjaF9vYmplY3RzXG4gICAgLy8gKTtcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoZXMpLmZvckVhY2goXG4gICAgICAocHJvZHVjdFNlYXJjaFNlcnZpY2U6IEJhc2VFbnRlcnByaXNlU2VhcmNoPGFueSwgYW55LCBhbnlbXT4pID0+IHtcbiAgICAgICAgcHJvZHVjdFNlYXJjaFNlcnZpY2U/LnJlc2V0KCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGNhblNlYXJjaCh0eXBlOiBncmFwaHFsVHlwZXMuU2VydmljZVR5cGUgfCBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBjaGVjayB0aGF0IHRoZSBzZWxlY3RlZCB0eXBlIGlzIGNob3NlbiwgaGFzIGhpZ2hlc3QgcHJpb3JpdHkgYW5kIGhhcyBub3QgYWxyZWFkeSBoYWQgYSBib29raW5nIGNob3NlblxuXG4gICAgdGhpcy5kZXRlcm1pbmVIaWdoZXN0U2VhcmNoUHJpb3JpdHkoKTtcbiAgICAvLyBmaXJzdGx5IGNoZWNrIHRoYXQgdGhlIHR5cGUgb2Ygc2VhcmNoIGV4aXN0c1xuICAgIGlmICgodGhpcy5zZWFyY2hfb2JqZWN0cyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVt0eXBlXSkge1xuICAgICAgY29uc29sZS5sb2coJ2NhbiBzZWFyY2ggaGVyZScpO1xuICAgICAgLy8gbm93IGNoZWNrIHRoYXQgdGhlIHR5cGUgaXMgY2hvc2VuIGhhcyBoaWdoZXN0IHByaW9yaXR5XG4gICAgICBpZiAoXG4gICAgICAgICh0aGlzLnNlYXJjaF9vYmplY3RzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3R5cGVdPy5jaG9zZW4gJiZcbiAgICAgICAgdGhpcy5oYXNIaWdoZXN0U2VhcmNoUHJpb3JpdHkoKHRoaXMuc2VhcmNoX29iamVjdHMgYXMgUmVjb3JkPHN0cmluZywgYW55PilbdHlwZV0/LnByaW9yaXR5KVxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKHR5cGUgKyAnIGNhbiBiZSBzZWFyY2hlZCcpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaGFzSGlnaGVzdFNlYXJjaFByaW9yaXR5KHByaW9yaXR5VmFsOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICB0aGlzLmRldGVybWluZUhpZ2hlc3RTZWFyY2hQcmlvcml0eSgpO1xuICAgIHJldHVybiBwcmlvcml0eVZhbCA8PSB0aGlzLmhpZ2hlc3Rfc2VhcmNoX3ByaW9yaXR5O1xuICB9XG5cbiAgLypcbiAgICogIEBkZXNjIC0gY29uY2F0aW5hdHMgYWxsIHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzIGFjcm9zcyBhbGwgc2VsZWN0ZWQgdHlwZXMgK1xuICAgKiAgIHRyYXZlbGxlcnMgKG9yIHdpbGwgZG8gd2hlbiBpdCdzIGNvbXBsZXRlKSBUT0RPIC0gYWRkIEZsaWdodCwgUmFpbCBDYXJcbiAgICoqL1xuICBnZXRBbGxFcnJvck1lc3NhZ2VzKGlzRmF2b3VyaXRlOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgY29uY2F0dGVkRXJyb3JzOiBzdHJpbmdbXSA9IE9iamVjdC5lbnRyaWVzKHRoaXMuc2VhcmNoX29iamVjdHMpLnJlZHVjZShcbiAgICAgIChhY2N1bTogc3RyaW5nW10sIFt0eXBlLCBzZWFyY2hPYmplY3RdOiBbc3RyaW5nLCBTZWFyY2hPYmplY3RdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaCA9IHRoaXMuc2VhcmNoZXNbdHlwZSBhcyBncmFwaHFsVHlwZXMuU2VydmljZVR5cGVdO1xuICAgICAgICBsZXQgbWVzc2FnZXMgPSBzZWFyY2ggPyBcbiAgICAgICAgKCFpc0Zhdm91cml0ZSA/IHNlYXJjaC52YWxpZGF0aW9uTWVzc2FnZXMgOiBzZWFyY2gudmFsaWRhdGlvbkZhdm91cml0ZU1lc3NhZ2VzKSA6IFxuICAgICAgICBbXTtcbiAgICAgICAgaWYgKHNlYXJjaE9iamVjdD8uY2hvc2VuICYmIHRoaXMuY2FuU2VhcmNoKHR5cGUpKSB7XG4gICAgICAgICAgYWNjdW0ucHVzaCguLi5tZXNzYWdlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgfSxcbiAgICAgIHRoaXMudHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzXG4gICAgKTtcblxuICAgIGNvbnN0IHVuaXF1ZUVycm9ycyA9IFsuLi5uZXcgU2V0KGNvbmNhdHRlZEVycm9ycyldO1xuICAgIHRoaXMuZXJyb3JzLm5leHQodW5pcXVlRXJyb3JzKTtcbiAgICByZXR1cm4gdW5pcXVlRXJyb3JzO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRyYXZlbGxlcnNDb250YWluVXNlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5maW5kKCh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT4ge1xuICAgICAgcmV0dXJuIHRyYXZlbGxlci5pZCA9PT0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VySWQoKS50b1N0cmluZygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlVHJhdmVsbGVycygpOiBib29sZWFuIHtcbiAgICB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcyA9IFtdO1xuXG4gICAgc3dpdGNoICh0aGlzLnVzZXJTZXJ2aWNlLmZ1bGxVc2VyRGV0YWlscy51c2VyRGF0YS52YWx1ZS5ib29rZXJfdHlwZSkge1xuICAgICAgY2FzZSBncmFwaHFsVHlwZXMuQm9va2VyVHlwZS5TZWxmQm9vazpcbiAgICAgICAgaWYgKCEodGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoID09PSAxICYmIHRoaXMudHJhdmVsbGVyc0NvbnRhaW5Vc2VyKCkpKSB7XG4gICAgICAgICAgLy8gdGhpcyBzaG91bGQgbmV2ZXIgdHJpZ2dlciB1bmRlciBub3JtYWwgY29uZGl0aW9ucyBhcyB0aGUgdXNlciBzaG91bGQgYmUgbG9hZGVkIGluIGFzIGEgdHJhdmVsbGVyIG9uIGxvZ2luXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnQ3VycmVudCB1c2VyIG11c3QgYmUgYSB0cmF2ZWxsZXInKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBncmFwaHFsVHlwZXMuQm9va2VyVHlwZS5Cb29rZXJXaXRoU2VsZjpcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aCA8IDEgfHwgIXRoaXMudHJhdmVsbGVyc0NvbnRhaW5Vc2VyKCkpIHtcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgYWRkIHlvdXIgc2VsZi4nKTtcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcl9lcnJvciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGdyYXBocWxUeXBlcy5Cb29rZXJUeXBlLkRpdmlzaW9uOlxuICAgICAgY2FzZSBncmFwaHFsVHlwZXMuQm9va2VyVHlwZS5Cb29rZXI6XG4gICAgICBjYXNlIGdyYXBocWxUeXBlcy5Cb29rZXJUeXBlLkNvbXBhbnk6XG4gICAgICBjYXNlIGdyYXBocWxUeXBlcy5Cb29rZXJUeXBlLkNvbXBhbnlHcm91cDpcbiAgICAgIGNhc2UgZ3JhcGhxbFR5cGVzLkJvb2tlclR5cGUuT2ZmaWNlOlxuICAgICAgY2FzZSBncmFwaHFsVHlwZXMuQm9va2VyVHlwZS5UbWM6XG4gICAgICBjYXNlIGdyYXBocWxUeXBlcy5Cb29rZXJUeXBlLlJvb3Q6XG4gICAgICAgIGlmICghKHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aCA+PSAxKSkge1xuICAgICAgICAgIHRoaXMudHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIHRyYXZlbGxlcicpO1xuICAgICAgICAgIHRoaXMudHJhdmVsbGVyX2Vycm9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMudHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1VucmVjb2duaXNlZCB1c2VyIHR5cGUhIC0gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydC4nKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcyk7XG4gICAgcmV0dXJuIHRoaXMudHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIGZpbmRQYXhJblRyYXZlbGxlcnModXNlcm5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5maW5kKCh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT4ge1xuICAgICAgcmV0dXJuIHVzZXJuYW1lID09PSB0cmF2ZWxsZXIuZW1haWw7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZUZvcm1zKGlzRmF2b3VyaXRlOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWFyY2hPYmplY3Q6IFNlYXJjaE9iamVjdCA9IHRoaXMuX2ZpbmRTZWFyY2hPYnRlY3QoKTtcbiAgICBjb25zdCB0cmF2ZWxsZXJzVmFsaWQgPSAhaXNGYXZvdXJpdGUgPyB0aGlzLnZhbGlkYXRlVHJhdmVsbGVycygpIDogaXNGYXZvdXJpdGU7XG4gICAgdGhpcy5nZXRBbGxFcnJvck1lc3NhZ2VzKGlzRmF2b3VyaXRlKTtcbiAgICBpZiAoc2VhcmNoT2JqZWN0KSB7XG4gICAgICBpZiAodGhpcy5lcnJvcnMgJiYgdGhpcy5lcnJvcnMudmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIGxldCBuZXdFcnJvcnMgPSAhaXNGYXZvdXJpdGUgPyB0aGlzLmVycm9ycy52YWx1ZS5jb25jYXQoXG4gICAgICAgICAgdGhpcy5zZWFyY2hlc1tzZWFyY2hPYmplY3QudHlwZSBhcyBrZXlvZiBTZWFyY2hQYXJhbXNdLm1lc3NhZ2VzLnZhbHVlXG4gICAgICAgICkgOiB0aGlzLnNlYXJjaGVzW3NlYXJjaE9iamVjdC50eXBlIGFzIGtleW9mIFNlYXJjaFBhcmFtc10udmFsaWRhdGlvbkZhdm91cml0ZU1lc3NhZ2VzO1xuICAgICAgICAvLyBhZnRlciBjb25jYXQgc2hvdyBvbmx5IHVuaXF1ZSBlcnJvcnNcbiAgICAgICAgbmV3RXJyb3JzID0gWy4uLm5ldyBTZXQobmV3RXJyb3JzKV07XG4gICAgICAgIHRoaXMuZXJyb3JzLm5leHQobmV3RXJyb3JzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZXJyb3JzLm5leHQodGhpcy5zZWFyY2hlc1tzZWFyY2hPYmplY3QudHlwZSBhcyBrZXlvZiBTZWFyY2hQYXJhbXNdLm1lc3NhZ2VzLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRyYXZlbGxlcnNWYWxpZCAmJiB0aGlzLnNlYXJjaGVzW3NlYXJjaE9iamVjdC50eXBlIGFzIGtleW9mIFNlYXJjaFBhcmFtc10uaXNWYWxpZC52YWx1ZVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmRTZWFyY2hPYnRlY3QoKTogU2VhcmNoT2JqZWN0IHwgbnVsbCB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5zZWFyY2hfb2JqZWN0cykuZmluZCgob2JqOiBTZWFyY2hPYmplY3QpID0+IHtcbiAgICAgIHJldHVybiAhIW9iaiAmJiBvYmoucHJpb3JpdHkgPT09IHRoaXMuaGlnaGVzdF9zZWFyY2hfcHJpb3JpdHkgJiYgb2JqLmNob3NlbjtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXJ0U2VhcmNoZXModXJsPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5uZXdTZWFyY2hTdGFydGVkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5zZWFyY2hfbG9hZGluZyA9IHRydWU7XG4gICAgbGV0IHNlYXJjaE9iamVjdDogU2VhcmNoT2JqZWN0O1xuICAgIHNlYXJjaE9iamVjdCA9IHRoaXMuX2ZpbmRTZWFyY2hPYnRlY3QoKTtcbiAgICBpZiAoc2VhcmNoT2JqZWN0KSB7XG4gICAgICBzZWFyY2hPYmplY3QuY2hvc2VuID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oJ3NlYXJjaF9FUk1fdHJhdmVsbGVyX3R5cGUnKSkge1xuICAgICAgdGhpcy5lcm1UcmF2ZWxsZXJUeXBlID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbShcbiAgICAgICAgJ3NlYXJjaF9FUk1fdHJhdmVsbGVyX3R5cGUnXG4gICAgICApIGFzIEVybVRyYXZlbGxlclR5cGU7XG4gICAgfVxuXG4gICAgaWYgKHNlYXJjaE9iamVjdCAmJiAhdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKHNlYXJjaE9iamVjdC5yZXN1bHRVcmwpKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbc2VhcmNoT2JqZWN0LnJlc3VsdFVybF0pO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBQcm9taXNlLmFsbChcbiAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLnNlYXJjaGVzKS5tYXAoKHNlYXJjaDogQmFzZUVudGVycHJpc2VTZWFyY2g8YW55LCBhbnksIGFueVtdPikgPT4ge1xuICAgICAgICAgIHJldHVybiAhIXNlYXJjaCAmJlxuICAgICAgICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tzZWFyY2gudHlwZV0gJiZcbiAgICAgICAgICAgICh0aGlzLnNlYXJjaF9vYmplY3RzW3NlYXJjaC50eXBlXT8uY2hvc2VuIHx8IC8vICEgLSBjaGVjayBoZXJlIGZvciBzaW11bHRhbmVvdXMgc2VhcmNoZXMgcmF0aGVyIHRoYW4gc2V0dGluZyB0byBjaG9zZW4gLSBwcmV2ZW50cyBnb2luZyB0byB0aGUgc2VhcmNoIGZvcm0gaWYgbm90IHBpY2tlZFxuICAgICAgICAgICAgICAoc2VhcmNoLnR5cGUgPT09IFNlcnZpY2VUeXBlLlJhaWwgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0/LnJhaWxGcm9tRmxpZ2h0U2VhcmNoUGVyZm9ybWVkKSB8fFxuICAgICAgICAgICAgICAoc2VhcmNoLnR5cGUgPT09IFNlcnZpY2VUeXBlLkV1cm9zdGFyICYmXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdPy5ldXJvc3RhckZyb21GbGlnaHRTZWFyY2hQZXJmb3JtZWQpKVxuICAgICAgICAgICAgPyBzZWFyY2guc3RhcnRTZWFyY2goKVxuICAgICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9KVxuICAgICAgKS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5zZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlYXJjaExvYWRpbmdEb25lLm5leHQodHJ1ZSk7XG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsXSk7XG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoZXMuSU5URVJOQVRJT05BTF9SQUlMKSB7XG4gICAgICAgICAgICB0aGlzLnN1Ym1pdElybEZvcm0oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdGhpcy5oaWdoZXN0X3NlYXJjaF9wcmlvcml0eSA9PT0gdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5GZXJyeV0/LnByaW9yaXR5XG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtzZWFyY2hPYmplY3Quc2VhcmNoVXJsXSk7XG4gICAgICAgICAgdGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GZXJyeV0ucmVzZXQoKTtcblxuICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxUeXBlcy5PZmZsaW5lUmVxdWVzdERpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgY2VudGVyZWQ6IHRydWUsXG4gICAgICAgICAgICBzaXplOiAnbWQnLFxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdGhpcy5oaWdoZXN0X3NlYXJjaF9wcmlvcml0eSA9PT0gdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5Mb25nU3RheXNdPy5wcmlvcml0eVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbc2VhcmNoT2JqZWN0LnNlYXJjaFVybF0pO1xuICAgICAgICAgIHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuTG9uZ1N0YXlzXS5yZXNldCgpO1xuXG4gICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbFR5cGVzLkFwYXJ0bWVudFJlcXVlc3REaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgIGNlbnRlcmVkOiB0cnVlLFxuICAgICAgICAgICAgc2l6ZTogJ21kJ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHRoaXMuaGlnaGVzdF9zZWFyY2hfcHJpb3JpdHkgPT09IHRoaXMuc2VhcmNoX29iamVjdHNbU2VydmljZVR5cGUuU2Vhc29uVGlja2V0XT8ucHJpb3JpdHlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3NlYXJjaE9iamVjdC5zZWFyY2hVcmxdKTtcbiAgICAgICAgICB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlNlYXNvblRpY2tldF0ucmVzZXQoKTtcblxuICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICAgICAgICBNb2RhbFR5cGVzLk9mZmxpbmVSZXF1ZXN0RGlhbG9nQ29tcG9uZW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgc2l6ZTogJ21kJyxcbiAgICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZXh0OiAnVGhhbmsgeW91IGZvciBzdWJtaXR0aW5nIHlvdXIgU2Vhc29uIFRpY2tldCByZXF1ZXN0IGJvb2tpbmcgZW5xdWlyeS4gT25lIG9mIG91ciB0cmF2ZWwgY29uc3VsdGFudHMgd2lsbCBjaGVjayB0aGUgcmVsZXZhbnQgb3B0aW9ucyB0aGF0IGFyZSBhdmFpbGFibGUgYW5kIHJlc3BvbmQgdG8geW91IHNob3J0bHkuIElmIHlvdSBhcmUgdHJhdmVsbGluZyB3aXRoaW4gdGhlIG5leHQgNDggaG91cnMsIHBsZWFzZSBjb250YWN0IHRoZSByZWxldmFudCB0cmF2ZWwgdGVhbSBieSB0ZWxlcGhvbmUuJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdGhpcy5oaWdoZXN0X3NlYXJjaF9wcmlvcml0eSA9PT0gdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5NZWV0aW5nUm9vbV0/LnByaW9yaXR5XG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtzZWFyY2hPYmplY3Quc2VhcmNoVXJsXSk7XG4gICAgICAgICAgdGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5NZWV0aW5nUm9vbV0ucmVzZXQoKTtcblxuICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlXG4gICAgICAgICAgICAub3BlbihcbiAgICAgICAgICAgICAgTW9kYWxUeXBlcy5PZmZsaW5lUmVxdWVzdERpYWxvZ0NvbXBvbmVudCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNlbnRlcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNpemU6ICdtZCcsXG4gICAgICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiAnVGhhbmsgeW91IGZvciBzdWJtaXR0aW5nIHlvdXIgTWVldGluZyBSb29tIHJlcXVlc3QgYm9va2luZyBlbnF1aXJ5LiBPbmUgb2Ygb3VyIHRyYXZlbCBjb25zdWx0YW50cyB3aWxsIGNoZWNrIHRoZSByZWxldmFudCBvcHRpb25zIHRoYXQgYXJlIGF2YWlsYWJsZSBhbmQgcmVzcG9uZCB0byB5b3Ugc2hvcnRseS4gSWYgeW91IGFyZSB0cmF2ZWxsaW5nIHdpdGhpbiB0aGUgbmV4dCA0OCBob3VycywgcGxlYXNlIGNvbnRhY3QgdGhlIHJlbGV2YW50IHRyYXZlbCB0ZWFtIGJ5IHRlbGVwaG9uZS4nXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5NZWV0aW5nUm9vbV0uY2hvc2VuID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuaXNHdXRNZWV0aW5nLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICB0aGlzLmd1dFRyYXZlbGxlcnMgPSBbXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB0aGlzLnNlYXJjaF9sb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLnNlYXJjaExvYWRpbmdEb25lLm5leHQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VGF4aVN0YXRpb25Mb2NhdGlvbnMoXG4gICAgdGVybTogc3RyaW5nLFxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxuICApOiBPYnNlcnZhYmxlPFJhaWxBaXJwb3J0W10+IHtcbiAgICByZXR1cm4gdGVybS5sZW5ndGggPCAzXG4gICAgICA/IG9mKFtdKVxuICAgICAgOiBvZihbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGVzdGluYXRpb246ICdNYW5jaGVzdGVyIEFpcnBvdCcsXG4gICAgICAgICAgICBpc2FpcnBvcnQ6IHRydWUsXG4gICAgICAgICAgICBzdXBwbGllcl9jb2RlOiAnTUFOJyxcbiAgICAgICAgICAgIGFkZHJlc3M6ICdNYW5jaGVzdGVyIEFpcnBvcnQnLFxuICAgICAgICAgICAgcG9zdGNvZGU6ICdNOTAgMVFYJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGVzdGluYXRpb246ICdNYW5jaGVzdGVyIFBpY2NhZGlsbHknLFxuICAgICAgICAgICAgaXNhaXJwb3J0OiBmYWxzZSxcbiAgICAgICAgICAgIHN1cHBsaWVyX2NvZGU6ICdNTUFOJyxcbiAgICAgICAgICAgIGFkZHJlc3M6ICdNYW5jaGVzdGVyIFBpY2NhZGlsbHknLFxuICAgICAgICAgICAgcG9zdGNvZGU6ICdNMSAyUFonXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogJ0xvbmRvbiBIZWF0aHJvdycsXG4gICAgICAgICAgICBpc2FpcnBvcnQ6IHRydWUsXG4gICAgICAgICAgICBzdXBwbGllcl9jb2RlOiAnTEhSJyxcbiAgICAgICAgICAgIGFkZHJlc3M6ICdMb25kb24gSGVhdGhyb3cgQWlycG9ydCcsXG4gICAgICAgICAgICBwb3N0Y29kZTogJ1RXNiAxRVcnXG4gICAgICAgICAgfVxuICAgICAgICBdKTtcbiAgfVxuXG4gIGdldEFkZHJlc3Nlcyhpc0xvYWRpbmc6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPik6IE9ic2VydmFibGU8QWRkcmVzc0Zvcm1bXT4ge1xuICAgIHJldHVybiBvZihbXG4gICAgICB7XG4gICAgICAgIEhvdXNlOiAnQ2VjaWwgQ291cnQnLFxuICAgICAgICBTdHJlZXQ6ICcyOC0zNiBDZWNpbCBSb2FkJyxcbiAgICAgICAgVG93bjogJ0hhbGUnLFxuICAgICAgICBQb3N0Q29kZTogJ1dBMTUgOVBCJyxcbiAgICAgICAgQ291bnRyeTogJ1VLJ1xuICAgICAgfVxuICAgIF0pO1xuICB9XG5cbiAgZ2V0VXNlckFkZHJlc3Nlcyhpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sIHRvd246IHN0cmluZyA9ICcnKTogT2JzZXJ2YWJsZTxBZGRyZXNzRm9ybVtdPiB7XG4gICAgcmV0dXJuIHRoaXMudXNlckFkZHJlc3Nlc0ZldGNoZXIuZmV0Y2hMaXN0KHt0b3dufSkucGlwZShcbiAgICAgIHRha2UoMSksXG4gICAgICBtYXAoKHJlc3VsdHM6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIHJldHVybiByZXN1bHRzLm1hcCgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgSUQ6IHJlc3VsdC5pZCxcbiAgICAgICAgICAgIEhvdXNlOiByZXN1bHQubnVtYmVyT3JOYW1lLFxuICAgICAgICAgICAgU3RyZWV0OiByZXN1bHQuc3RyZWV0LFxuICAgICAgICAgICAgVG93bjogcmVzdWx0LnRvd24sXG4gICAgICAgICAgICBQb3N0Q29kZTogcmVzdWx0LnBvc3Rjb2RlLFxuICAgICAgICAgICAgQ291bnRyeTogcmVzdWx0LmNvdW50cnlDb2RlLFxuICAgICAgICAgICAgQ29tcGFueTogcmVzdWx0LmNvbXBhbnksXG4gICAgICAgICAgICBPZmZpY2U6IHJlc3VsdC5vZmZpY2UsXG4gICAgICAgICAgICBVc2VyOiByZXN1bHQudXNlclxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlVXNlckFkZHJlc3NCeUlEKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmJhc2VEZWxldGVVc2VyQWRkcmVzc1VwZGF0ZXIudXBkYXRlT25lKHsgaWQ6IGlkIH0pO1xuICB9XG5cbiAgZ2V0SG90ZWxDaGFpbih0ZXJtOiBzdHJpbmcsIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPik6IE9ic2VydmFibGU8YW55W10+IHtcbiAgICBpZiAodGVybS5sZW5ndGggPiAyKSB7XG4gICAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XG4gICAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8U2VhcmNoSG90ZWxDaGFpbnNSZXN1bHRBcnJheT4gPSB0aGlzLnNlYXJjaEhvdGVsQ2hhaW5zRmV0Y2hlci5mZXRjaExpc3QoXG4gICAgICAgIHsgcXVlcnk6IHRlcm0gfVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGZ1bmMgPSAocmVzdWx0czogU2VhcmNoSG90ZWxDaGFpbnNSZXN1bHRBcnJheSk6IGFueVtdID0+IHtcbiAgICAgICAgY29uc3QgZGF0YTogYW55W10gPSByZXN1bHRzLm1hcCgocmVzdWx0OiBTZWFyY2hIb3RlbENoYWluc1Jlc3VsdCk6IGFueSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IHJlc3VsdFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2YoW10pO1xuICB9XG5cbiAgZ2V0QWxsSG90ZWxDaGFpbnMoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxHZXRIb3RlbENoYWluc1Jlc3VsdEFycmF5PiA9IHRoaXMuZ2V0SG90ZWxDaGFpbnNGZXRjaGVyLmZldGNoTGlzdCgpO1xuICAgIGNvbnN0IGZ1bmMgPSAocmVzdWx0czogR2V0SG90ZWxDaGFpbnNSZXN1bHRBcnJheSk6IGFueVtdID0+IHtcbiAgICAgIGNvbnN0IGRhdGE6IGFueVtdID0gcmVzdWx0cy5tYXAoKHJlc3VsdDogR2V0SG90ZWxDaGFpbnNSZXN1bHQpOiBhbnkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IHJlc3VsdFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xuICB9XG5cbiAgZ2V0QWxsUmFpbFByb3ZpZGVycygpOiBPYnNlcnZhYmxlPGFueVtdPiB7XG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPGdldFJhaWxQcm92aWRlcnNSZXN1bHRBcnJheT4gPSB0aGlzLmdldFJhaWxQcm92aWRlcnNGZXRjaGVyLmZldGNoTGlzdCgpO1xuICAgIGNvbnN0IGZ1bmMgPSAocmVzdWx0czogZ2V0UmFpbFByb3ZpZGVyc1Jlc3VsdEFycmF5KTogYW55W10gPT4ge1xuICAgICAgY29uc3QgZGF0YTogYW55W10gPSByZXN1bHRzLm1hcCgocmVzdWx0OiBnZXRSYWlsUHJvdmlkZXJzUmVzdWx0KTogYW55ID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiByZXN1bHRcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfTtcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcbiAgfVxuXG4gIGdldENhckhpcmVQcm9pdmRlcnMoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxHZXRDYXJIaXJlUHJvdmlkZXJzUmVzdWx0QXJyYXk+ID1cbiAgICAgIHRoaXMuZ2V0Q2FySGlyZVByb3ZpZGVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBHZXRDYXJIaXJlUHJvdmlkZXJzUmVzdWx0QXJyYXkpOiBhbnlbXSA9PiB7XG4gICAgICBjb25zdCBkYXRhOiBhbnlbXSA9IHJlc3VsdHMubWFwKChyZXN1bHQ6IEdldENhckhpcmVQcm92aWRlcnNSZXN1bHQpOiBhbnkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IHJlc3VsdFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xuICB9XG5cbiAgZ2V0QWxsQWlybGluZXMoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxHZXRBbGxBaXJsaW5lc1Jlc3VsdEFycmF5PiA9IHRoaXMuZ2V0QWxsQWlybGluZXNGZXRjaGVyLmZldGNoTGlzdCgpO1xuICAgIGNvbnN0IGZ1bmMgPSAocmVzdWx0czogR2V0QWxsQWlybGluZXNSZXN1bHRBcnJheSk6IGFueVtdID0+IHtcbiAgICAgIGNvbnN0IGRhdGE6IGFueVtdID0gcmVzdWx0cy5tYXAoKHJlc3VsdDogR2V0QWxsQWlybGluZXNSZXN1bHQpOiBhbnkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xuICB9XG5cbiAgZ2V0UmFpbENhcmRzKGNvdW50cnlDb2RlID0gJ0dCJyk6IE9ic2VydmFibGU8Z3JhcGhxbFR5cGVzLlJlZmVyZW5jZVJhaWxDYXJkUXVhbGlmaWVyW10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRSYWlsQ2FyZHNGZXRjaGVyLmZldGNoTGlzdCh7IGNvdW50cnlDb2RlIH0pLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgbWFwKChyZXN1bHRzKTogYW55ID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdHMpIHtcbiAgICAgICAgICBjb25zdCByYWlsQ2FyZHMgPSByZXN1bHRzLm1hcCgocmVzdWx0OiBncmFwaHFsVHlwZXMuUmVmZXJlbmNlUmFpbENhcmRRdWFsaWZpZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxuICAgICAgICAgICAgICBjb2RlOiByZXN1bHQuY29kZSxcbiAgICAgICAgICAgICAgaXNMb3lhbHR5Q2FyZDogcmVzdWx0LmlzTG95YWx0eUNhcmQsXG4gICAgICAgICAgICAgIGlzTnVtYmVyUmVxdWlyZWQ6IHJlc3VsdC5pc051bWJlclJlcXVpcmVkLFxuICAgICAgICAgICAgICBudW1iZXJQcmVmaXg6IHJlc3VsdC5udW1iZXJQcmVmaXgsXG4gICAgICAgICAgICAgIGNhcmROdW1iZXJWYWxpZGF0aW9uUmVnZXg6IHJlc3VsdC5jYXJkTnVtYmVyVmFsaWRhdGlvblJlZ2V4LFxuICAgICAgICAgICAgICB2ZW5kb3I6IHJlc3VsdC52ZW5kb3JcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHJhaWxDYXJkcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEFpcnBvcnRCeUNvZGUoXG4gICAgY29kZTogc3RyaW5nLFxuICAgIGxvY2F0aW9uVHlwZTogZ3JhcGhxbFR5cGVzLkxvY2F0aW9uVHlwZSA9IGdyYXBocWxUeXBlcy5Mb2NhdGlvblR5cGUuQVxuICApOiBPYnNlcnZhYmxlPEFpcnBvcnRTZWFyY2hSZXN1bHRzPiB7XG4gICAgaWYgKGNvZGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaEFpcnBvcnRzRmV0Y2hlci5mZXRjaE9uZSh7IHF1ZXJ5OiBjb2RlLCBsb2NhdGlvblR5cGUgfSkucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgbWFwKChyZXN1bHQ6IEFpcnBvcnRTZWFyY2hSZXN1bHRzKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZigpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRPIEJFIE9WRVIgUklEREVOIEJZIE9CVCBTVUJDTEFTU0VTXG4gIHB1YmxpYyBpbml0X3NlYXJjaF9vYmplY3RzKCk6IFNlYXJjaE9iamVjdHMge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiBTRUFSQ0ggT0JKRUNUUyBGT1IgR0VUIE1FIFRIRVJFIERPT1IgMiBET09SICAgICAgICAgICpcbiAgICogRGlmZmVyZW5jZShzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEFsbCBvYmplY3RzIGhhdmUgYSBwcmlvcml0eSBvZiAxIHNvIHRoYXQgdGhleSBhcmUgICAgKlxuICAgKiBzZWFyY2hlZCBhdCB0aGUgc2FtZSB0aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogVXJscyBjaGFuZ2VkIHRvIGdldG1ldGhlcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuICBwcm90ZWN0ZWQgZ2V0TWVUaGVyZVNlYXJjaE9iamVjdHMoKTogU2VhcmNoT2JqZWN0cyB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIC8qXG4gICAqICBAZGVzYyAtIGdldHMgYWxsIHNlbGVjdGVkIHRyYXZlbGxlcnNcbiAgICogICBJbXBsZW1lbnRlZCBmb3IgcmFpbCBjYXJkIHJlYXNvbnMgaW4gTFVcbiAgICoqL1xuICBnZXRTZWxlY3RlZHRyYXZlbGxlcnMoKTogVHJhdmVsbGVyW10ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycztcbiAgfVxuXG4gIHVwZGF0ZVNlbGVjZWR0cmF2YWxsZXJEb2IoZG9iOnN0cmluZyx1c2VySWQ6c3RyaW5nLGlzR3Vlc3Q6Ym9vbGVhbik6T2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlRE9CLnVwZGF0ZU9uZSh7aWQ6dXNlcklkLGRvYiwgaXNHdWVzdH0pO1xuICB9XG5cbiAgcmVzZXRTZWFyY2hPYmplY3RzKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoX29iamVjdHMgPSB0aGlzLl9zZWFyY2hPYmplY3RzRGVmYXVsdDtcbiAgfVxuXG4gIHJlc2V0U2VhcmNoQ2hvc2VuT2JqZWN0cygpOiB2b2lkIHtcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoX29iamVjdHMpLmZvckVhY2goKGl0ZW06IFNlYXJjaE9iamVjdCkgPT4ge1xuICAgICAgaXRlbS5jaG9zZW4gPSBmYWxzZTtcbiAgICAgIGl0ZW0ub3JpZ2luYWxDaG9zZW4gPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlc2V0Qm9va2luZ0Nob3NlbihzZWFyY2hzOiBTZWFyY2hPYmplY3RzKTogdm9pZCB7XG4gICAgT2JqZWN0LnZhbHVlcyhzZWFyY2hzKS5mb3JFYWNoKChpdGVtOiBTZWFyY2hPYmplY3QpID0+IChpdGVtLmJvb2tpbmdfY2hvc2VuID0gZmFsc2UpKTtcbiAgfVxuXG4gIC8qXG4gICBUaGVzZSBhcmUgdGhlIHBvc3NpYmxlIGFycmF5IG9mIHZhbHVlcyBmcm9tIEFQSSBhcmUgZXhwdGVjdGVkIGFuZCBmdW5jdGlvbiBtYW5pcHVsYXRlIHRvIGNyZWF0ZSB0aGUgbGlzdFxuICAgIFtcIk1haW5cIl1cbiAgICBbXCIxXCJdXG4gICAgW1wiMVwiLCBcIjJcIl1cbiAgICBbXCIxXCIsIFwiMlwiLCBcIjNcIl1cbiAgICBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCJdXG4gICAgW1wiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiLCBcIjVcIl1cbiAgICBbXCJTb3V0aFwiLCBcIk5vcnRoXCJdXG4gICovXG4gIHB1YmxpYyBwcm9jZXNzVGVybWluYWxzKHRlcm1pbmFsczogc3RyaW5nW10pOiBUZXJtaW5hbHNUeXBlW10ge1xuICAgIGNvbnN0IHRlbXBUZXJtaW5hbDogVGVybWluYWxzVHlwZVtdID0gW107XG4gICAgaWYgKFxuICAgICAgdGVybWluYWxzLmluY2x1ZGVzKCcxJykgfHxcbiAgICAgIHRlcm1pbmFscy5pbmNsdWRlcygnMicpIHx8XG4gICAgICB0ZXJtaW5hbHMuaW5jbHVkZXMoJzMnKSB8fFxuICAgICAgdGVybWluYWxzLmluY2x1ZGVzKCc0JykgfHxcbiAgICAgIHRlcm1pbmFscy5pbmNsdWRlcygnNScpXG4gICAgKSB7XG4gICAgICB0ZW1wVGVybWluYWwucHVzaCh7IGtleTogJ0FueSBUZXJtaW5hbCcsIHZhbHVlOiAnQW55JyB9KTtcbiAgICAgIHRlcm1pbmFscy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICB0ZW1wVGVybWluYWwucHVzaCh7IGtleTogYFRlcm1pbmFsICR7aXRlbX1gLCB2YWx1ZTogYCR7aXRlbX1gIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0ZXJtaW5hbHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRlbXBUZXJtaW5hbC5wdXNoKHsga2V5OiBgJHt0ZXJtaW5hbHNbMF19IFRlcm1pbmFsYCwgdmFsdWU6ICdBbnknIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGVtcFRlcm1pbmFsLnB1c2goeyBrZXk6ICdBbnkgVGVybWluYWwnLCB2YWx1ZTogJ0FueScgfSk7XG4gICAgICAgIHRlcm1pbmFscy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgIHRlbXBUZXJtaW5hbC5wdXNoKHsga2V5OiBgJHtpdGVtfSBUZXJtaW5hbGAsIHZhbHVlOiBgJHtpdGVtfWAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGVtcFRlcm1pbmFsO1xuICB9XG5cbiAgYXN5bmMgc2F2ZVVzZXJBZGRyZXNzKGZvcm1BZGRyZXNzOiBBZGRyZXNzRm9ybSk6IFByb21pc2U8QWRkcmVzcz4ge1xuICAgIGNvbnN0IHsgSG91c2UsIFN0cmVldCwgVG93biwgUG9zdENvZGUsIENvdW50cnkgfSA9IGZvcm1BZGRyZXNzO1xuXG4gICAgY29uc3QgZGVzY0FyciA9IFtdO1xuICAgIGlmIChIb3VzZSkgZGVzY0Fyci5wdXNoKEhvdXNlKTtcbiAgICBpZiAoU3RyZWV0KSBkZXNjQXJyLnB1c2goU3RyZWV0KTtcbiAgICBpZiAoVG93bikgZGVzY0Fyci5wdXNoKFRvd24pO1xuICAgIGlmIChQb3N0Q29kZSkgZGVzY0Fyci5wdXNoKFBvc3RDb2RlKTtcbiAgICBpZiAoQ291bnRyeSkgZGVzY0Fyci5wdXNoKENvdW50cnkpO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gZGVzY0Fyci5qb2luKCk7XG5cbiAgICBjb25zdCBhZGRyZXNzID0ge1xuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXJPck5hbWU6IEhvdXNlID8/ICcnLFxuICAgICAgc3RyZWV0OiBTdHJlZXQgPz8gJycsXG4gICAgICB0b3duOiBUb3duID8/ICcnLFxuICAgICAgcG9zdGNvZGU6IFBvc3RDb2RlID8/ICcnLFxuICAgICAgY291bnRyeUNvZGU6IENvdW50cnkgPz8gJ0dCJ1xuICAgIH07XG5cbiAgICBpZiAoYWRkcmVzcykge1xuICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLnNhdmVVc2VyQWRkcmVzc1VwZGF0ZXIudXBkYXRlT25lKGFkZHJlc3MpLnRvUHJvbWlzZSgpO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGVkaXRVc2VyQWRkcmVzcyhmb3JtQWRkcmVzczogYW55KTogT2JzZXJ2YWJsZTxBZGRyZXNzPiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdFVzZXJBZGRyZXNzVXBkYXRlci51cGRhdGVPbmUoZm9ybUFkZHJlc3MpO1xuICB9XG5cbiAgc2F2ZVVzZXJBZGRyZXNzQm9sdChmb3JtQWRkcmVzczogQWRkcmVzc0lucHV0KTogT2JzZXJ2YWJsZTxBZGRyZXNzPiB7XG4gICAgcmV0dXJuIHRoaXMuc2F2ZVVzZXJBZGRyZXNzVXBkYXRlci51cGRhdGVPbmUoZm9ybUFkZHJlc3MpO1xuICB9XG5cbiAgcHVibGljIGNhbkJvb2soc2VydmljZTogZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UuY2FuQm9vayhzZXJ2aWNlKSA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIGlzUG9zdGNvZGVWYWlsZChwb3N0Y29kZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZVZhbGlkYXRlSXNQb3N0Y29kZVZhbGlkVGVzdGVyLnRlc3QoeyBwb3N0Y29kZSB9KTtcbiAgfVxuXG4gIC8qIENyZWF0ZSBRdWVyeSBEZWZhdWx0cyBTdGFydCAqL1xuICAvKlxuICAgKiBDcmVhdGUgdGhlIENhYiBIaXJlIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtLCBhdXRvIGZpbGwgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAuLi5hcmdzIGV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLnNldENhYkhpcmVRdWVyeShkYXRhLnF1ZXJ5LCB7IGRlcGFydHM6IG1vbWVudERhdGVUaW1lIH0pXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaENhYkhpcmVBcmdzIHR5cGVcbiAgICovXG4gIHB1YmxpYyBtYWtlQ2FiSGlyZVF1ZXJ5KC4uLmFyZ3M6IGFueSk6IENhYkhpcmVUZW1wUGFyYW1zIHtcbiAgICBjb25zdCBkZWZhdWx0VmFsOiBDYWJIaXJlVGVtcFBhcmFtcyA9IHtcbiAgICAgIGFkdWx0czogMCxcbiAgICAgIGFpcnBvcnQ6IG51bGwsXG4gICAgICBjaGlsZHJlbjogMCxcbiAgICAgIGNvdW50cnlDb2RlOiBudWxsLFxuICAgICAgZGVwYXJ0czogdGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKCksXG4gICAgICBmcm9tQWRkcmVzczogbnVsbCxcbiAgICAgIGZyb21TdGF0aW9uOiBudWxsLFxuICAgICAgZnJvbUxvY2F0aW9uVHlwZTogVGF4aUZvcm1Nb2RlLkFERFJFU1MsXG4gICAgICBpbmZhbnRzOiAwLFxuICAgICAgdG9BZGRyZXNzOiBudWxsLFxuICAgICAgdG9TdGF0aW9uOiBudWxsLFxuICAgICAgdG9Mb2NhdGlvblR5cGU6IFRheGlGb3JtTW9kZS5BRERSRVNTLFxuICAgICAgdmVoaWNsZVR5cGU6IGdyYXBocWxUeXBlcy5DYWJIaXJlVmVoaWNsZVR5cGUuQW55LFxuICAgICAgbGltb1R5cGU6IG51bGwsXG4gICAgICB2aWFzRnJvbTogbnVsbCxcbiAgICAgIHZpYXNUbzogbnVsbCxcbiAgICAgIGxpbW9Bc0RpcmVjdGVkRHVyYXRpb246IDIsXG4gICAgICB0cmFuc3BvcnRUeXBlOiBUcmFuc3BvcnRUeXBlLk9uZVdheSxcbiAgICAgIHNwZWNpYWxSZXF1aXJlbWVudHM6ICcnXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPENhYkhpcmVUZW1wUGFyYW1zPihkZWZhdWx0VmFsLCBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSwgW1xuICAgICAgJ2RlcGFydHMnXG4gICAgXSk7XG4gIH1cblxuICAvKlxuICAgKiBDcmVhdGUgdGhlIENhciBIaXJlIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtLCBhdXRvIGZpbGwgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAuLi5hcmdzIGV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLnNldENhckhpcmVRdWVyeShkYXRhLnF1ZXJ5LCB7IGRlcGFydHM6IG1vbWVudERhdGVUaW1lIH0pXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaENhckhpcmVBcmdzIHR5cGVcbiAgICovXG4gIHB1YmxpYyBtYWtlQ2FySGlyZVF1ZXJ5KC4uLmFyZ3M6IGFueSk6IENhckhpcmVUZW1wUGFyYW1zIHtcbiAgICBjb25zdCBkZWZhdWx0VmFsOiBDYXJIaXJlVGVtcFBhcmFtcyA9IHtcbiAgICAgIGFkdWx0czogMCxcbiAgICAgIGFpckNvbjogbnVsbCxcbiAgICAgIGNhckNsYXNzOiBudWxsLFxuICAgICAgY2FyVHlwZTogbnVsbCxcbiAgICAgIGNoaWxkcmVuOiAwLFxuICAgICAgY2hvc2VuVmVuZG9yOiBudWxsLFxuICAgICAgY2hvc2VuRGlzdGFuY2U6ICc1JyxcbiAgICAgIGNpdHlEcm9wb2ZmOiBudWxsLFxuICAgICAgY2l0eURyb3BvZmZEZXBvdDogbnVsbCxcbiAgICAgIGNpdHlQaWNrdXA6IG51bGwsXG4gICAgICBjaXR5UGlja3VwRGVwb3Q6IG51bGwsXG4gICAgICBkcm9wb2ZmX2NvdW50cnk6ICdHQicsXG4gICAgICBkcm9wb2ZmX2RhdGV0aW1lOiBudWxsLFxuICAgICAgZHJvcG9mZl9sb2NhdGlvbjogbnVsbCxcbiAgICAgIGVzdGltYXRlZE1pbGVhZ2U6IG51bGwsXG4gICAgICBsb2NhdGlvblR5cGU6IG51bGwsXG4gICAgICBwaWNrdXBfY291bnRyeTogbnVsbCxcbiAgICAgIHBpY2t1cF9kYXRldGltZTogbnVsbCxcbiAgICAgIHBpY2t1cF9sb2NhdGlvbjogbnVsbCxcbiAgICAgIHBvc3Rjb2RlRHJvcG9mZjogbnVsbCxcbiAgICAgIHBvc3Rjb2RlRHJvcG9mZlJhdzogbnVsbCxcbiAgICAgIHBvc3Rjb2RlUGlja3VwOiBudWxsLFxuICAgICAgcG9zdGNvZGVQaWNrdXBSYXc6IG51bGwsXG4gICAgICByZXR1cm5fdG9fcGlja3VwOiB0cnVlLFxuICAgICAgdHJhbnNtaXNzaW9uOiBudWxsLFxuICAgICAgZGVsaXZlcnk6IGZhbHNlLFxuICAgICAgY29sbGVjdGlvbjogZmFsc2UsXG4gICAgICBkcml2ZXJBZ2U6IG51bGxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8Q2FySGlyZVRlbXBQYXJhbXM+KGRlZmF1bHRWYWwsIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLCBbXG4gICAgICAncGlja3VwX2RhdGV0aW1lJyxcbiAgICAgICdkcm9wb2ZmX2RhdGV0aW1lJ1xuICAgIF0pO1xuICB9XG5cbiAgLypcbiAgICogQ3JlYXRlcyBhIEZsaWdodCBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VGbGlnaHRRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hGbGlnaHRzQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoRmxpZ2h0c0FyZ3MgdHlwZVxuICAgKi9cbiAgcHVibGljIG1ha2VGbGlnaHRRdWVyeSguLi5hcmdzOiBhbnkpOiBGbGlnaHRUZW1wUGFyYW1zIHtcbiAgICBjb25zdCBub3cgPSB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoKTtcbiAgICBjb25zdCB0b21vcnJvdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgxKTtcbiAgICBjb25zdCBtb21lbnRPdXREYXRlVGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXMobm93LCAzMCk7XG4gICAgY29uc3QgbW9tZW50SW5EYXRlVGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXModG9tb3Jyb3csIDMwKTtcblxuICAgIGNvbnN0IGRlZmF1bHRWYWw6IEZsaWdodFRlbXBQYXJhbXMgPSB7XG4gICAgICBhZHVsdHM6IDAsXG4gICAgICBhcnJpdmVMb2NhdGlvbjogbnVsbCxcbiAgICAgIGNhYmluQ2xhc3M6IGdyYXBocWxUeXBlcy5GbGlnaHRDYWJpbkNsYXNzLkVjb25vbXksXG4gICAgICBjaGlsZHJlbjogMCxcbiAgICAgIGNob3NlblNlYXJjaFR5cGU6IG51bGwsXG4gICAgICBkZXBhcnRMb2NhdGlvbjogbnVsbCxcbiAgICAgIGZhcmVUeXBlOiBncmFwaHFsVHlwZXMuRmFyZVR5cGUuRmxleGlibGUsXG4gICAgICBpbmJvdW5kRGF0ZTogbW9tZW50T3V0RGF0ZVRpbWUsXG4gICAgICBpblRpbWVDcml0ZXJpYTogVGltZVdpbmRvdy5EZXBhcnQsXG4gICAgICBtYXhDb25uZWN0aW9uczogbnVsbCxcbiAgICAgIG91dFRpbWVGbGV4aWJpbGl0eTogMixcbiAgICAgIGluVGltZUZsZXhpYmlsaXR5OiAyLFxuICAgICAgaW5jbHVkZU5lYXJieUFpcnBvcnRzOiBmYWxzZSxcbiAgICAgIGJ5U2NoZWR1bGU6IGZhbHNlLFxuICAgICAgbXVsdGlEZXN0aW5hdGlvbjogW10sXG4gICAgICBvdXRCb3VuZERhdGU6IG1vbWVudEluRGF0ZVRpbWUsXG4gICAgICBvdXRUaW1lQ3JpdGVyaWE6IFRpbWVXaW5kb3cuRGVwYXJ0LFxuICAgICAgcHJlZmVycmVkQ2FycmllcnM6IFtudWxsLCBudWxsLCBudWxsLCBudWxsXSxcbiAgICAgIHJldHVybkNhYmluQ2xhc3M6IGdyYXBocWxUeXBlcy5GbGlnaHRDYWJpbkNsYXNzLkVjb25vbXksXG4gICAgICB2aWE6IG51bGwsXG4gICAgICBzaG93VmlhOiBmYWxzZVxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxGbGlnaHRUZW1wUGFyYW1zPihkZWZhdWx0VmFsLCBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSwgW1xuICAgICAgJ291dEJvdW5kRGF0ZScsXG4gICAgICAnaW5ib3VuZERhdGUnXG4gICAgXSk7XG4gIH1cblxuICAvKlxuICAgKiBDcmVhdGVzIGEgSG90ZWwgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgICAgICAgICAgLi4uYXJncyBFeGFtcGxlIC0gc2VhcmNoU2VydmljZS5tYWtlSG90ZWxRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hIb3RlbHNBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hIb3RlbHNBcmdzIHR5cGVcbiAgICovXG4gIHB1YmxpYyBtYWtlSG90ZWxRdWVyeSguLi5hcmdzOiBhbnkpOiBIb3RlbFRlbXBQYXJhbXMge1xuICAgIGNvbnN0IGRlZmF1bHRWYWwgPSB7XG4gICAgICBjaGVja2luX2RhdGU6IG1vbWVudCgpLnNldCgnaG91cicsIDIzKS5zZXQoJ21pbnV0ZScsIDU5KSxcbiAgICAgIGNoZWNrb3V0X2RhdGU6IG1vbWVudCgpLmFkZCgxLCAnZGF5Jykuc2V0KCdob3VyJywgMjMpLnNldCgnbWludXRlJywgNTkpLFxuICAgICAgY291bnRyeTogeyBjQ29kZTogJ0dCJywgY05hbWU6ICdVbml0ZWQgS2luZ2RvbScgfSxcbiAgICAgIGN1cnJlbmN5OiAnR0JQJyxcbiAgICAgIGRpc3RhbmNlOiA1LCAvLyBkZWZhdWx0IDUgbWlsZXMgcmFkaXVzXG4gICAgICBob3RlbF9hdmFpbGFiaWxpdHk6IG51bGwsXG4gICAgICBob3RlbF9jaGFpbjogbnVsbCxcbiAgICAgIGhvdGVsX25hbWU6IG51bGwsXG4gICAgICBsb2NhdGlvbl90eXBlX3NlbGVjdDogTG9jYXRpb25UeXBlcy5BaXJwb3J0LFxuICAgICAgbG9jYXRpb246IG51bGwsIC8vIG1pZ2h0IHdhbnQgdG8gc3BsaXQgdGhpcyBvdXQgdG8gY2l0eSwgYWlycG9ydCwgb2ZmaWNlLCByYWlsc3RhdGlvbiAtIHRoaXMgd2lsbCBkbyBmb3Igbm93XG4gICAgICBub19vZl9vY2N1cGFudHM6IDEsIC8vIHNpbWlsYXJseSB0aGluayB0aGlzIGlzIGEgbWF4IG9mIDNcbiAgICAgIG5vX29mX3Jvb21zOiAxLCAvLyBtYXggb2YgNCBpbiBvbGQgc2Ficywgbm90IHN1cmUgaGVyZVxuICAgICAgb2ZmaWNlOiBudWxsLFxuICAgICAgcG9zdGNvZGU6IG51bGwsXG4gICAgICBwcmVmZXJlZF9ob3RlbHNfb25seTogZmFsc2UsXG4gICAgICB0cmFpbnNTdGF0aW9uOiBudWxsLFxuICAgICAgcHJvcGVydHlOdW1iZXI6bnVsbFxuICAgIH0gYXMgSG90ZWxUZW1wUGFyYW1zO1xuXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8SG90ZWxUZW1wUGFyYW1zPihkZWZhdWx0VmFsLCBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSwgW1xuICAgICAgJ2NoZWNraW5fZGF0ZScsXG4gICAgICAnY2hlY2tvdXRfZGF0ZSdcbiAgICBdKTtcbiAgfVxuXG4gIC8qXG4gICAqIENyZWF0ZXMgYSBMb3VuZ2VzIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtcywgYXV0byBmaWxscyB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZUxvdW5nZXNRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hMb3VuZ2VzQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoTG91bmdlc0FyZ3MgdHlwZVxuICAgKi9cbiAgcHVibGljIG1ha2VMb3VuZ2VzUXVlcnkoLi4uYXJnczogYW55KTogTG91bmdlc1RlbXBQYXJhbXMge1xuICAgIGNvbnN0IGRlZmF1bHRWYWwgPSB7XG4gICAgICBhZHVsdHM6IDAsXG4gICAgICBhcnJpdmFsRGF0ZXRpbWU6IG1vbWVudCgpLFxuICAgICAgY2hpbGRyZW46IDAsXG4gICAgICBpbmZhbnRzOiAwLFxuICAgICAgbG9jYXRpb25Db2RlOiBudWxsLFxuICAgICAgdGVybWluYWw6IG51bGwsXG4gICAgICBjb3VudHJ5Q29kZTogJ0dCJ1xuICAgIH0gYXMgTG91bmdlc1RlbXBQYXJhbXM7XG5cbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxMb3VuZ2VzVGVtcFBhcmFtcz4oZGVmYXVsdFZhbCwgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksIFtcbiAgICAgICdhcnJpdmFsRGF0ZXRpbWUnXG4gICAgXSk7XG4gIH1cblxuICAvKlxuICAgKiBDcmVhdGVzIGEgUGFya2luZyBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VQYXJraW5nUXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoUGFya2luZ0FyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaFBhcmtpbmdBcmdzIHR5cGVcbiAgICovXG4gIHB1YmxpYyBtYWtlUGFya2luZ1F1ZXJ5KC4uLmFyZ3M6IGFueSk6IFBhcmtpbmdUZW1wUGFyYW1zIHtcbiAgICBjb25zdCBub3cgPSB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoKTtcbiAgICBjb25zdCB0b21vcnJvdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgxKTtcbiAgICBjb25zdCBtb21lbnRPdXREYXRlVGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXMobm93LCAzMCk7XG4gICAgY29uc3QgbW9tZW50SW5EYXRlVGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXModG9tb3Jyb3csIDMwKTtcblxuICAgIGNvbnN0IGRlZmF1bHRWYWwgPSB7XG4gICAgICBhcnJpdmFsRGF0ZXRpbWU6IG1vbWVudE91dERhdGVUaW1lLFxuICAgICAgY2FyUGFya2VkRm9yWW91OiBudWxsLFxuICAgICAgZGVwYXJ0RGF0ZXRpbWU6IG1vbWVudEluRGF0ZVRpbWUsXG4gICAgICBsb2NhdGlvbkNvZGU6IG51bGwsXG4gICAgICBtZWV0QW5kR3JlZXQ6IG51bGwsXG4gICAgICBvbkFpcnBvcnQ6IG51bGwsXG4gICAgICBvdXRGbGlnaHROdW1iZXI6IG51bGwsXG4gICAgICBwYXJrQW5kUmlkZTogbnVsbCxcbiAgICAgIHBhcmtBbmRTdHJvbGw6IG51bGwsXG4gICAgICByZWNvbW1lbmRlZDogbnVsbCxcbiAgICAgIHRlcm1pbmFsOiBudWxsXG4gICAgfSBhcyBQYXJraW5nVGVtcFBhcmFtcztcblxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPFBhcmtpbmdUZW1wUGFyYW1zPihkZWZhdWx0VmFsLCBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSwgW1xuICAgICAgJ2Fycml2YWxEYXRldGltZScsXG4gICAgICAnZGVwYXJ0RGF0ZXRpbWUnXG4gICAgXSk7XG4gIH1cblxuICAvKlxuICAgKiBDcmVhdGVzIGEgUmFpbCBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VSYWlsUXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoUmFpbEFyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaFJhaWxBcmdzIHR5cGVcbiAgICovXG4gIHB1YmxpYyBtYWtlUmFpbFF1ZXJ5KC4uLmFyZ3M6IGFueSk6IFJhaWxUZW1wUGFyYW1zIHtcbiAgICBjb25zdCBvdXRUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyhtb21lbnQoKS5hZGQoMSwgJ2hvdXInKSwgMTUpO1xuICAgIGNvbnN0IGluVGltZSA9IG1vbWVudCgpLnNldCgnaG91cicsIDE2KS5zZXQoJ21pbnV0ZScsIDApLnNldCgnc2Vjb25kJywgMCk7XG4gICAgY29uc3QgZGVmYXVsdFZhbDogUmFpbFRlbXBQYXJhbXMgPSB7XG4gICAgICBhaXJwb3J0RXhwcmVzc1N0YXRpb246IG51bGwsXG4gICAgICBhcHBseVJhaWxjYXJkczogZmFsc2UsXG4gICAgICBjYXJuZXRUaWNrZXQ6IGZhbHNlLFxuICAgICAgY2hvc2VuU2VhcmNoQ2xhc3M6IGdyYXBocWxUeXBlcy5SYWlsQ2xhc3MuQWxsLFxuICAgICAgY2hvc2VuU2VhcmNoVHlwZTogZ3JhcGhxbFR5cGVzLlJhaWxTZWFyY2hKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5LFxuICAgICAgZGlzYWJsZUF1dG9EaXNjb3VudHM6IGZhbHNlLFxuICAgICAgZXh0cmFUaW1lOiBmYWxzZSxcbiAgICAgIGluQm91bmREYXRlVGltZTogaW5UaW1lLFxuICAgICAgaXNBaXJwb3J0RXhwcmVzczogZmFsc2UsXG4gICAgICBub09mQWR1bHRzOiAwLFxuICAgICAgbm9PZkNoaWxkcmVuOiAwLFxuICAgICAgb3V0Ym91bmRDcml0ZXJpYTogUmFpbFNlYXJjaENyaXRlcmlhLkRlcGFydCxcbiAgICAgIG91dEJvdW5kRGF0ZVRpbWU6IG91dFRpbWUsXG4gICAgICBwcmlvcml0aXNlQnlQcmljZTogZmFsc2UsXG4gICAgICByZXR1cm5Dcml0ZXJpYTogUmFpbFNlYXJjaENyaXRlcmlhLkRlcGFydCxcbiAgICAgIHRyYXZlbGxpbmdGcm9tOiBudWxsLFxuICAgICAgdHJhdmVsbGluZ1RvOiBudWxsLFxuICAgICAgdmlhOiBmYWxzZSxcbiAgICAgIHZpYUxvY2F0aW9uOiBudWxsLFxuICAgICAgcmFpbENhcmRzOiBbXSxcbiAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcjogbnVsbFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxSYWlsVGVtcFBhcmFtcz4oZGVmYXVsdFZhbCwgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksIFtcbiAgICAgICdpbkJvdW5kRGF0ZVRpbWUnLFxuICAgICAgJ291dEJvdW5kRGF0ZVRpbWUnXG4gICAgXSk7XG4gIH1cblxuICAvKlxuICAgKiBDcmVhdGVzIGEgUmFpbCBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VJcmxRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hSYWlsQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoUmFpbEFyZ3MgdHlwZVxuICAgKi9cbiAgcHVibGljIG1ha2VJcmxRdWVyeSguLi5hcmdzOiBhbnkpOiBJcmxUZW1wUGFyYW1zIHtcbiAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyhtb21lbnQoKSwgMzApO1xuICAgIGNvbnN0IGRlZmF1bHRWYWw6IElybFRlbXBQYXJhbXMgPSB7XG4gICAgICBzdXBwbGllcjogbnVsbCwgLy8gSVJMU3VwcGxpZXIhXG4gICAgICBjb3VudHJ5Q29kZTogJycsXG4gICAgICBqb3VybmV5VHlwZTogZ3JhcGhxbFR5cGVzLklybEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXksIC8vIElSTEpvdXJuZXlUeXBlIVxuICAgICAgY2xhc3M6IG51bGwsIC8vIElSTENsYXNzXG4gICAgICBvdXRib3VuZERlcGFydHVyZURhdGVUaW1lOiB0aW1lLFxuICAgICAgdHJhdmVsbGluZ0Zyb206IG51bGwsXG4gICAgICB0cmF2ZWxsaW5nVG86IG51bGwsXG4gICAgICBhZHVsdHM6IDAsXG4gICAgICBjaGlsZHJlbjogMCxcbiAgICAgIHNlbmlvcnM6IDAsXG4gICAgICB5b3V0aDogMCxcbiAgICAgIHJldHVybkRlcGFydHVyZURhdGVUaW1lOiB0aW1lLFxuICAgICAgaXJsRGlzY291bnRDYXJkczogbnVsbCxcbiAgICAgIG9mZmxpbmVSZXF1ZXN0OiBmYWxzZVxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxJcmxUZW1wUGFyYW1zPihkZWZhdWx0VmFsLCBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSwgW1xuICAgICAgJ3JldHVybkRlcGFydHVyZURhdGVUaW1lJyxcbiAgICAgICdvdXRib3VuZERlcGFydHVyZURhdGVUaW1lJ1xuICAgIF0pO1xuICB9XG5cbiAgLypcbiAgICogQ3JlYXRlcyBhIEV1cm9zdGFyIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtcywgYXV0byBmaWxscyB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZUV1cm9zdGFyUXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXG4gICAqIEByZXR1cm4ge0V1cm9zdGFyVGVtcFBhcmFtc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoRXVyb3N0YXJBcmdzIHR5cGVcbiAgICovXG4gIHB1YmxpYyBtYWtlRXVyb3N0YXJRdWVyeSguLi5hcmdzOiBhbnkpOiBFdXJvc3RhclRlbXBQYXJhbXMge1xuICAgIGNvbnN0IG5vdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgpO1xuICAgIGNvbnN0IHRvbW9ycm93ID0gdGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKDEpO1xuICAgIGNvbnN0IG1vbWVudE91dERhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyhub3csIDMwKTtcbiAgICBjb25zdCBtb21lbnRJbkRhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyh0b21vcnJvdywgMzApO1xuXG4gICAgY29uc3QgZGVmYXVsdFZhbDogRXVyb3N0YXJUZW1wUGFyYW1zID0ge1xuICAgICAgYWR1bHRzOiAwLFxuICAgICAgYXJyaXZlTG9jYXRpb246IG51bGwsXG4gICAgICBjYWJpbkNsYXNzOiBncmFwaHFsVHlwZXMuRmxpZ2h0Q2FiaW5DbGFzcy5BbnksXG4gICAgICBjaGlsZHJlbjogMCxcbiAgICAgIGNob3NlblNlYXJjaFR5cGU6IEV1cm9zdGFyU2VhcmNoVHlwZS5yZXR1cm4sXG4gICAgICBkZXBhcnRMb2NhdGlvbjogbnVsbCxcbiAgICAgIGZhcmVUeXBlOiBncmFwaHFsVHlwZXMuRmFyZVR5cGUuRmxleGlibGUsXG4gICAgICBpbmJvdW5kRGF0ZTogbW9tZW50T3V0RGF0ZVRpbWUsXG4gICAgICBpblRpbWVDcml0ZXJpYTogVGltZVdpbmRvdy5EZXBhcnQsXG4gICAgICBtYXhDb25uZWN0aW9uczogbnVsbCxcbiAgICAgIGluY2x1ZGVOZWFyYnlBaXJwb3J0czogZmFsc2UsXG4gICAgICBtdWx0aURlc3RpbmF0aW9uOiBbXSxcbiAgICAgIG91dEJvdW5kRGF0ZTogbW9tZW50SW5EYXRlVGltZSxcbiAgICAgIG91dFRpbWVDcml0ZXJpYTogVGltZVdpbmRvdy5EZXBhcnQsXG4gICAgICBwcmVmZXJyZWRDYXJyaWVyczogW251bGwsIG51bGwsIG51bGwsIG51bGxdLFxuICAgICAgcmV0dXJuQ2FiaW5DbGFzczogZ3JhcGhxbFR5cGVzLkZsaWdodENhYmluQ2xhc3MuQW55XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPEV1cm9zdGFyVGVtcFBhcmFtcz4oXG4gICAgICBkZWZhdWx0VmFsLFxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXG4gICAgICBbJ291dEJvdW5kRGF0ZScsICdpbmJvdW5kRGF0ZSddXG4gICAgKTtcbiAgfVxuXG4gIC8qXG4gICAqIENyZWF0ZXMgYSBGYXN0VHJhY2sgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgICAgICAgICAgLi4uYXJncyBFeGFtcGxlIC0gc2VhcmNoU2VydmljZS5tYWtlRmFzdFRyYWNrUXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoTG91bmdlc0FyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaExvdW5nZXNBcmdzIHR5cGVcbiAgICovXG4gIHB1YmxpYyBtYWtlRmFzdFRyYWNrUXVlcnkoLi4uYXJnczogYW55KTogRmFzdFRyYWNrVGVtcFBhcmFtcyB7XG4gICAgY29uc3QgZGVmYXVsdFZhbCA9IHtcbiAgICAgIGFkdWx0czogMCxcbiAgICAgIGFycml2YWxEYXRldGltZTogbW9tZW50KCksXG4gICAgICBjaGlsZHJlbjogMCxcbiAgICAgIGxvY2F0aW9uQ29kZTogbnVsbCxcbiAgICAgIGZsaWdodE51bWJlcjogbnVsbCxcbiAgICAgIHRlcm1pbmFsOiBudWxsXG4gICAgfSBhcyBGYXN0VHJhY2tUZW1wUGFyYW1zO1xuXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8RmFzdFRyYWNrVGVtcFBhcmFtcz4oXG4gICAgICBkZWZhdWx0VmFsLFxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXG4gICAgICBbJ2Fycml2YWxEYXRldGltZSddXG4gICAgKTtcbiAgfVxuXG4gIC8qXG4gICAqIENyZWF0ZXMgYSBGZXJyeSBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VGZXJyeVF1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaEZlcnJ5QXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoRmVycnlBcmdzIHR5cGVcbiAgICovXG4gIHB1YmxpYyBtYWtlRmVycnlRdWVyeSguLi5hcmdzOiBhbnkpOiBGZXJyeVRlbXBQYXJhbXMge1xuICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKG1vbWVudCgpLCAzMCk7XG4gICAgY29uc3QgZGVmYXVsdFZhbDogRmVycnlUZW1wUGFyYW1zID0ge1xuICAgICAgZmVycnlPckV1cm90dW5uZWw6IGdyYXBocWxUeXBlcy5GZXJyeU9yRXVyb3R1bm5lbC5GZXJyeSxcbiAgICAgIGZyb21Mb2NhdGlvbjogbnVsbCwgLy8gSVJMU3VwcGxpZXIhXG4gICAgICB0b0xvY2F0aW9uOiAnJyxcbiAgICAgIGRlcGFydERhdGVUaW1lOiB0aW1lLFxuICAgICAgb25CZWhhbGZPZkVtYWlsOiBudWxsLFxuICAgICAgZGVwYXJ0VGltZVR5cGU6IGdyYXBocWxUeXBlcy5UaW1lVHlwZS5EZXBhcnRBZnRlcixcbiAgICAgIHJldHVyblRpbWVUeXBlOiBncmFwaHFsVHlwZXMuVGltZVR5cGUuRGVwYXJ0QWZ0ZXIsXG4gICAgICBwYXNzZW5nZXJzOiBbXSxcbiAgICAgIG1ha2U6ICcnLFxuICAgICAgbW9kZWw6ICcnLFxuICAgICAgcmVnOiAnJyxcbiAgICAgIGhlaWdodDogJycsXG4gICAgICBsZW5ndGg6ICcnLFxuICAgICAgdmVoaWNsZVR5cGU6IG51bGwsXG4gICAgICBwcmVmZXJyZWRUaWNrZXRUeXBlOiBncmFwaHFsVHlwZXMuVGlja2V0VHlwZS5Ob25lLFxuICAgICAgcmV0dXJuRGF0ZVRpbWU6IHRpbWUsXG4gICAgICBhZGRpdGlvbmFsSW5mbzogbnVsbCxcbiAgICAgIGRvYjogbnVsbCxcbiAgICAgIHBob25lTnVtYmVyOiAnJ1xuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxGZXJyeVRlbXBQYXJhbXM+KGRlZmF1bHRWYWwsIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLCBbXG4gICAgICAnZGVwYXJ0RGF0ZVRpbWUnLFxuICAgICAgJ3JldHVybkRhdGVUaW1lJ1xuICAgIF0pO1xuICB9XG5cbiAgLy8gbWFrZUFwYXJ0bWVudFF1ZXJ5XG4gIC8qXG4gICAqIENyZWF0ZXMgYSBBcGFydG1lbnQgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgICAgICAgICAgLi4uYXJncyBFeGFtcGxlIC0gc2VhcmNoU2VydmljZS5tYWtlQXBhcnRtZW50UXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoQXBhcnRtZW50QXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoQXBhcnRtZW50QXJncyB0eXBlXG4gICAqL1xuICBwdWJsaWMgbWFrZUFwYXJ0bWVudFF1ZXJ5KC4uLmFyZ3M6IGFueSk6IEFwYXJ0bWVudFRlbXBQYXJhbXMge1xuICAgIGNvbnNvbGUubG9nKCcrKysgTUFLSU5HIEFQQVJUTUVOVCBRVUVSWSArKysnKTtcbiAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyhtb21lbnQoKS5zZXQoJ2hvdXJzJywgMjMpLnNldCgnbWludXRlcycsIDU5KSwgMzApO1xuICAgIGNvbnN0IGRlZmF1bHRWYWw6IEFwYXJ0bWVudFRlbXBQYXJhbXMgPSB7XG4gICAgICBkZXBhcnREYXRlVGltZTogdGltZSxcbiAgICAgIHJldHVybkRhdGVUaW1lOiB0aW1lLmFkZCgxLCAnZGF5JyksXG4gICAgICBvbkJlaGFsZk9mRW1haWw6IG51bGwsXG4gICAgICBwYXNzZW5nZXJzOiBbXSxcbiAgICAgIGNvdW50cnk6IHsgY0NvZGU6ICdHQicsIGNOYW1lOiAnVW5pdGVkIEtpbmdkb20nIH0sXG4gICAgICB0b3duOiBudWxsLFxuICAgICAgcG9zdGNvZGU6ICcnLFxuICAgICAgbnVtYmVyT2ZSb29tczogMSxcbiAgICAgIG51bWJlck9mQmVkc1BlckFwYXJ0bWVudDogMSxcbiAgICAgIGRpc3RhbmNlOiA1LFxuICAgICAgYWNjZXNpYmlsaXR5OiBmYWxzZSxcbiAgICAgIHBldHM6IGZhbHNlLFxuICAgICAgYWRkaXRpb25hbEluZm9ybWF0aW9uOiAnJyxcbiAgICAgIHBhcmtpbmc6IGZhbHNlXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPEFwYXJ0bWVudFRlbXBQYXJhbXM+KFxuICAgICAgZGVmYXVsdFZhbCxcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxuICAgICAgWydkZXBhcnREYXRlVGltZScsICdyZXR1cm5EYXRlVGltZSddXG4gICAgKTtcbiAgfVxuXG4gIC8vIG1ha2VTZWFzb25UaWNrZXRzUXVlcnlcbiAgLypcbiAgICogQ3JlYXRlcyBhIFNlYXNvblRpY2tldHMgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgICAgICAgICAgLi4uYXJncyBFeGFtcGxlIC0gc2VhcmNoU2VydmljZS5tYWtlU2Vhc29uVGlja2V0c1F1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaFNlYXNvblRpY2tldHNBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hTZWFzb25UaWNrZXRzQXJncyB0eXBlXG4gICAqL1xuICBwdWJsaWMgbWFrZVNlYXNvblRpY2tldHNRdWVyeSguLi5hcmdzOiBhbnkpOiBTZWFzb25UaWNrZXRzVGVtcFBhcmFtcyB7XG4gICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXMobW9tZW50KCkuc2V0KCdob3VycycsIDIzKS5zZXQoJ21pbnV0ZXMnLCA1OSksIDMwKTtcbiAgICBjb25zdCBkZWZhdWx0VmFsOiBTZWFzb25UaWNrZXRzVGVtcFBhcmFtcyA9IHtcbiAgICAgIHRpY2tldFR5cGU6IGdyYXBocWxUeXBlcy5TZWFzb25UaWNrZXRUeXBlLldlZWtseSxcbiAgICAgIGNsYXNzT2ZTZXJ2aWNlOiBncmFwaHFsVHlwZXMuU2Vhc29uVGlja2V0Q2xhc3NUeXBlLlN0YW5kYXJkLFxuICAgICAgZnJvbUxvY2F0aW9uOiBudWxsLFxuICAgICAgdG9Mb2NhdGlvbjogbnVsbCxcbiAgICAgIHJhaWxPcGVyYXRvcjogJycsXG4gICAgICByb3V0ZTogbnVsbCxcbiAgICAgIGlzTG9uZG9uVW5kZXJncm91bmRSZXF1aXJlZDogbnVsbCxcbiAgICAgIGRlbGl2ZXJ5VHlwZTogU2Vhc29uVGlja2V0RGVsaXZlcnlUeXBlLlNwZWNpYWxEZWxpdmVyeSxcbiAgICAgIGRlbGl2ZXJ5QWRkcmVzc0FuZFBvc3Rjb2RlOiBudWxsLFxuICAgICAgcGhvdG9DYXJkTnVtYmVyOiBudWxsLFxuICAgICAgYWRkaXRpb25hbEluZm9ybWF0aW9uOiBudWxsLFxuICAgICAgc3RhcnREYXRlOiBtb21lbnQoKS5zZXQoJ2hvdXInLCAyMykuc2V0KCdtaW51dGUnLCA1OSksXG4gICAgICBvbkJlaGFsZk9mRW1haWw6IG51bGwsXG4gICAgICB0aWNrZXRDYXJkVHlwZTogbnVsbCwgXG4gICAgICBveXN0ZXJDYXJkTnVtYmVyOiBudWxsLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxTZWFzb25UaWNrZXRzVGVtcFBhcmFtcz4oXG4gICAgICBkZWZhdWx0VmFsLFxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXG4gICAgICBbJ3N0YXJ0RGF0ZSddXG4gICAgKTtcbiAgfVxuXG4gIC8qXG4gICAqIENyZWF0ZXMgYSBNZWV0aW5nIFJvb20gc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgICAgICAgICAgLi4uYXJncyBFeGFtcGxlIC0gc2VhcmNoU2VydmljZS5tYWtlTWVldGluZ1Jvb21RdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hNZWV0aW5nUm9vbUFyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaE1lZXRpbmdSb29tQXJncyB0eXBlXG4gICAqL1xuICBwdWJsaWMgbWFrZU1lZXRpbmdSb29tUXVlcnkoLi4uYXJnczogYW55KTogTWVldGluZ1Jvb21UZW1wUGFyYW1zIHtcbiAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyhtb21lbnQoKSwgMzApO1xuICAgIGNvbnN0IGRlZmF1bHRWYWw6IE1lZXRpbmdSb29tVGVtcFBhcmFtcyA9IHtcbiAgICAgIG9uQmVoYWxmT2ZFbWFpbDogbnVsbCxcbiAgICAgIHRyYXZlbGxlcnM6IFtdLFxuICAgICAgY291bnRyeTogeyBjQ29kZTogJ0dCJywgY05hbWU6ICdVbml0ZWQgS2luZ2RvbScgfSxcbiAgICAgIGxvY2F0aW9uOiBudWxsLFxuICAgICAgcG9zdGNvZGU6IG51bGwsXG4gICAgICBtZWV0aW5nRGF0ZVRpbWU6IG1vbWVudCgpLnNldCgnaG91cicsIDIzKS5zZXQoJ21pbnV0ZScsIDU5KSxcbiAgICAgIG1lZXRpbmdEdXJhdGlvbjogbnVsbCxcbiAgICAgIGRlbGVnYXRlczogMCxcbiAgICAgIGxheW91dDogbnVsbCxcbiAgICAgIGVxdWlwbWVudDogW10sXG4gICAgICBjYXRlcmluZzogbnVsbCxcbiAgICAgIGFkZGl0aW9uYWxJbmZvcm1hdGlvbjogJydcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8TWVldGluZ1Jvb21UZW1wUGFyYW1zPihcbiAgICAgIGRlZmF1bHRWYWwsXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcbiAgICAgIFsnbWVldGluZ0RhdGVUaW1lJ11cbiAgICApO1xuICB9XG5cbiAgLyogQ3JlYXRlIFF1ZXJ5IERlZmF1bHRzIEVuZCAqL1xuXG4gIHNob3VsZEFkZFRyYXZlbGxlclN1YnNjcmlwdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXRBdXRvTG9nb3V0Q29uZmlnKCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICAvKipcbiAgICogT3ZlcndyaXRlIGlmIHRoZSBPQlQgZGlzcGxheXMgYSBsaXN0IG9mIG9mZmljZXMgaW5zdGVhZCBvZiBzZWFyY2hpbmcgb24gdGhlbVxuICAgKi9cbiAgcHVibGljIHNob3VsZEZldGNoQWxsT2ZmaWNlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaXNGbGlnaHRzR3JvdXBlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpc0V1cm9TdGFyR3JvdXBlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXRDb3VudHJ5RnVsbE5hbWVGcm9tQ291bnRyeUNvZGUoY29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgZnVsbE5hbWUgPSAnVW5rbm93bic7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY291bnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjb3VudHJ5ID0gdGhpcy5jb3VudHJpZXNbaV07XG5cbiAgICAgIGlmIChjb3VudHJ5LmNDb2RlID09PSBjb2RlKSB7XG4gICAgICAgIHJldHVybiBjb3VudHJ5LmNOYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmdWxsTmFtZTtcbiAgfVxuXG4gIGdldFVzZXJSZWNlbnRTZWFyY2hlcyhcbiAgICBzZXJ2aWNlVHlwZT86IGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZSxcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cbiAgKTogT2JzZXJ2YWJsZTxSZWNlbnRTZWFyY2hbXT4ge1xuICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcbiAgICBjb25zdCBxdWVyeSA9IHsgc2VydmljZVR5cGUgfTtcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8R2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0QXJyYXk+ID1cbiAgICAgIHRoaXMuZ2V0VXNlclJlY2VudFNlYXJjaGVzRmV0Y2hlci5mZXRjaExpc3QocXVlcnkpO1xuXG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBHZXRVc2VyUmVjZW50U2VhcmNoZXNSZXN1bHRBcnJheSk6IFJlY2VudFNlYXJjaFtdID0+IHtcbiAgICAgIGNvbnN0IGRhdGE6IFJlY2VudFNlYXJjaFtdID0gcmVzdWx0cy5tYXAoXG4gICAgICAgIChyZXN1bHQ6IEdldFVzZXJSZWNlbnRTZWFyY2hlc1Jlc3VsdCk6IFJlY2VudFNlYXJjaCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiByZXN1bHQuaWQsXG4gICAgICAgICAgICBuYW1lOiByZXN1bHQubmFtZSxcbiAgICAgICAgICAgIHNlcnZpY2VUeXBlOiByZXN1bHQuc2VydmljZVR5cGUsXG4gICAgICAgICAgICBzZWFyY2hBcmdzOiByZXN1bHQuc2VhcmNoQXJncyxcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogcmVzdWx0LmNyZWF0ZWRBdCxcbiAgICAgICAgICAgIHVwZGF0ZWRBdDogcmVzdWx0LnVwZGF0ZWRBdCxcbiAgICAgICAgICAgIHRyYXZlbERhdGU6IHJlc3VsdC50cmF2ZWxEYXRlLFxuICAgICAgICAgICAgdHJhdmVsbGVyczogcmVzdWx0LnRyYXZlbGxlcnNcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICApO1xuICAgICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XG4gIH1cblxuICBnZXRVc2VyUmVjZW50Qm9sdFNlYXJjaGVzKFxuICAgIGlzQm9sdDogYm9vbGVhbixcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cbiAgKTogT2JzZXJ2YWJsZTxCb2x0U2VhcmNoW10+IHtcbiAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XG5cbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8R2V0VXNlclJlY2VudEJvbHRTZWFyY2hlc1Jlc3VsdEFycmF5PiA9XG4gICAgICB0aGlzLmdldFVzZXJSZWNlbnRCb2x0U2VhcmNoZXNGZXRjaGVyLmZldGNoTGlzdCh7IGlzQm9sdCB9KTtcblxuICAgIGNvbnN0IGZ1bmMgPSAocmVzdWx0czogR2V0VXNlclJlY2VudEJvbHRTZWFyY2hlc1Jlc3VsdEFycmF5KTogQm9sdFNlYXJjaFtdID0+IHtcbiAgICAgIGNvbnN0IGRhdGE6IEJvbHRTZWFyY2hbXSA9IHJlc3VsdHMubWFwKFxuICAgICAgICAocmVzdWx0OiBHZXRVc2VyUmVjZW50Qm9sdFNlYXJjaGVzUmVzdWx0KTogQm9sdFNlYXJjaCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiByZXN1bHQuaWQsXG4gICAgICAgICAgICBuYW1lOiByZXN1bHQubmFtZSxcbiAgICAgICAgICAgIGlzQm9sdDogcmVzdWx0LmlzQm9sdCxcbiAgICAgICAgICAgIHNlYXJjaEFyZ3M6IHJlc3VsdC5zZWFyY2hBcmdzLFxuICAgICAgICAgICAgY3JlYXRlZEF0OiByZXN1bHQuY3JlYXRlZEF0LFxuICAgICAgICAgICAgdXBkYXRlZEF0OiByZXN1bHQudXBkYXRlZEF0LFxuICAgICAgICAgICAgdHJhdmVsRGF0ZTogcmVzdWx0LnRyYXZlbERhdGUsXG4gICAgICAgICAgICB0cmF2ZWxsZXJzOiByZXN1bHQudHJhdmVsbGVyc1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfTtcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcbiAgfVxuXG4gIGdldFVzZXJGYXZvdXJpdGVTZWFyY2hlcyhcbiAgICBzZXJ2aWNlVHlwZT86IGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZSxcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cbiAgKTogT2JzZXJ2YWJsZTxHZXRVc2VyRmF2b3VyaXRlU2VhcmNoZXNSZXN1bHRBcnJheT4ge1xuICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcbiAgICBjb25zdCBxdWVyeSA9IHsgc2VydmljZVR5cGUgfTtcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8R2V0VXNlckZhdm91cml0ZVNlYXJjaGVzUmVzdWx0QXJyYXk+ID1cbiAgICAgIHRoaXMuZ2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlci5mZXRjaExpc3QocXVlcnkpO1xuXG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBHZXRVc2VyRmF2b3VyaXRlU2VhcmNoZXNSZXN1bHRBcnJheSkgPT4ge1xuICAgICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcbiAgICB9O1xuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCB0YXAoZnVuYykpO1xuICB9XG5cbiAgZGVsZXRlUmVjZW50U2VhcmNoQnlJRChpZDogc3RyaW5nLCBpc0JvbHQgPSBmYWxzZSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZURlbGV0ZVJlY2VudFNlYXJjaFVwZGF0ZXIudXBkYXRlT25lKHsgaWQ6IGlkLCBpc0JvbHQgfSk7XG4gIH1cblxuICBkZWxldGVGYXZvdXJpdGVTZWFyY2hCeUlEKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxldGVGYXZvdXJpdGVTZWFyY2hVcGRhdGVyLnVwZGF0ZU9uZSh7IGlkOiBpZCB9KTtcbiAgfVxuXG4gIGRlbGV0ZUFsbFJlY2VudFNlYXJjaGVzKGlzQm9sdCA9IGZhbHNlKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG5cbiAgICBjb25zdCB1c2VySWQgPSB0aGlzLnVzZXJTZXJ2aWNlLmJvYm8gPyB0aGlzLnVzZXJTZXJ2aWNlLmJvYm8uaWQgOiAgdGhpcy51c2VyU2VydmljZS5nZXRVc2VySWQoKTtcblxuICAgIHJldHVybiB0aGlzLmRlbGV0ZUFsbFJlY2VudFNlYXJjaGVzVXBkYXRlci51cGRhdGVPbmUoe3VzZXJJZDogdXNlcklkLnRvU3RyaW5nKCksIGlzQm9sdH0pXG4gIH1cblxuICBzYXZlUmVjZW50U2VhcmNoKHF1ZXJ5OiBncmFwaHFsVHlwZXMuU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzKTogdm9pZCB7XG4gICAgaWYgKHF1ZXJ5KSB7XG4gICAgICB0aGlzLmJhc2VTYXZlUmVjZW50U2VhcmNoVXBkYXRlci51cGRhdGVPbmUocXVlcnkpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgc2F2ZVJlY2VudEJvbHRTZWFyY2gocXVlcnk6IGdyYXBocWxUeXBlcy5TYXZlUmVjZW50Qm9sdFNlYXJjaE11dGF0aW9uVmFyaWFibGVzKTogdm9pZCB7XG4gICAgaWYgKHF1ZXJ5KSB7XG4gICAgICB0aGlzLnNhdmVSZWNlbnRCb2x0U2VhcmNoVXBkYXRlci51cGRhdGVPbmUocXVlcnkpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q292aWRNaWNyb3NpdGVUb2tlbigpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmdldENvdmlkTWljcm9zaXRlVG9rZW5GZXRjaGVyLmZldGNoTGlzdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCB0aGUgbGlzdCBvZiBldXJvc3RhciBzdGF0aW9uIGxvY2F0aW9ucyBiYXNlZCBvbiBzZWFyY2ggdGVybSBnaXZlblxuICAgKiBAdG9kbyAtIGZpbGwgdGhpcyBvdXQgc28gdGhhdCBpdCBhY3R1YWxseSBwZXJmb3JtcyBhIGh0dHAgY2FsbFxuICAgKiBAcGFyYW0gdGVybSAtIHRoZSB0ZXJtIHdlIHdhbnQgdG8gc2VhcmNoIGJ5XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBsb29rdXBFdXJvc3RhclN0YXRpb25zKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8YW55W10+IHtcbiAgICBjb25zb2xlLmxvZygndGVybXwgJywgdGVybSk7XG4gICAgaWYgKHRlcm0gPT09ICcnKSB7XG4gICAgICByZXR1cm4gb2YodGhpcy5ldXJvc3RhdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2YoXG4gICAgICAgIHRoaXMuZXVyb3N0YXRpb25zLmZpbHRlcih2ID0+IHYuZGVzdGluYXRpb24udG9Mb3dlckNhc2UoKS5pbmRleE9mKHRlcm0udG9Mb3dlckNhc2UoKSkgPiAtMSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc2VhcmNoVHJhdmVsbGVycyhcbiAgICBpbnB1dDogc3RyaW5nLFxuICAgIHNlYXJjaFRyYXZlbGxlcnNCeTogVHJhdmVsbGVyU2VhcmNoVHlwZXMsXG4gICAgY29tcGFueUlkPzogc3RyaW5nLFxuICAgIGlzU2hhcmluZz86IGJvb2xlYW5cbiAgKTogT2JzZXJ2YWJsZTxUcmF2ZWxsZXJbXT4ge1xuICAgIGNvbnN0IHR5cGU6IEJvb2tlclR5cGUgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJCb29raW5nVHlwZSgpO1xuICAgIHRoaXMudHJhdmVsbGVyX2Vycm9yID0gZmFsc2U7XG4gICAgLyogVE9ET1xuICAgIGlmICh0aGlzLnVzZXJTZXJ2aWNlLnVzZUFnZW50Q2FuQm9va0ZvcigpKSB7XG4gICAgICB0eXBlID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVWYWx1ZSgnQWdlbnRDYW5Cb29rRm9yJyk7XG4gICAgfSovXG4gICAgaWYgKFxuICAgICAgdHlwZSAmJlxuICAgICAgdHlwZSAhPT0gQm9va2VyVHlwZS5TZWxmQm9vayAmJlxuICAgICAgdHlwZSAhPT0gQm9va2VyVHlwZS5UcmF2ZWxsZXIgJiZcbiAgICAgIGlucHV0Lmxlbmd0aCA+PSAxXG4gICAgKSB7XG4gICAgICBjb25zdCBpbnB1dFdvcmRzID0gaW5wdXQudG9Mb3dlckNhc2UoKS5tYXRjaCgvKFtcXHddKSsvZyk7XG4gICAgICBjb25zdCBhcmdzOiBTZWFyY2hVc2VyQ2FuQm9va0ZvclF1ZXJ5VmFyaWFibGVzID0ge307XG4gICAgICBzd2l0Y2ggKHNlYXJjaFRyYXZlbGxlcnNCeSkge1xuICAgICAgICBjYXNlIFRyYXZlbGxlclNlYXJjaFR5cGVzLm5hbWU6XG4gICAgICAgICAgYXJncy51c2VyTmFtZSA9IGlucHV0V29yZHMubGVuZ3RoID4gMSA/IGlucHV0V29yZHNbMF0gOiBpbnB1dDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUcmF2ZWxsZXJTZWFyY2hUeXBlcy5lbWFpbDpcbiAgICAgICAgICBhcmdzLmVtYWlsID0gaW5wdXQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVHJhdmVsbGVyU2VhcmNoVHlwZXMuZW1wbG95ZWVOdW1iZXI6XG4gICAgICAgICAgYXJncy5lbXBsb3llZUlkID0gaW5wdXQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wYW55SWQpIHtcbiAgICAgICAgYXJncy5jb21wYW55SWQgPSBjb21wYW55SWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFVzZXJzQ2FuQm9va0ZvckZldGNoZXIuZmV0Y2hMaXN0KGFyZ3MpLnBpcGUoXG4gICAgICAgIG1hcCgoZGF0YTogVHJhdmVsbGVyW10pID0+IHtcbiAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVscGVycy5jbG9uZShkYXRhKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBhLnN1cm5hbWUgPCBiLnN1cm5hbWUgPyAtMSA6IGEuc3VybmFtZSA+IGIuc3VybmFtZSA/IDEgOiAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZihbXSk7XG4gICAgfVxuICB9XG5cbiAgY29udmVydFRvSW5wdXRGbGlnaHRKb3VybmV5KGZsaWdodEpvdXJuZXk6IEZsaWdodEpvdXJuZXkpOiBJbnB1dEZsaWdodEpvdXJuZXkge1xuICAgIGNvbnN0IHByb3BlcnRpZXNUb0RlbGV0ZSA9IFtcbiAgICAgICdjbzJQZXJJdGVtJyxcbiAgICAgICdjbzJQZXJQYXNzZW5nZXInLFxuICAgICAgJ2pvdXJuZXlIYXNoJyxcbiAgICAgICdzYWZSYXRpbmcnLFxuICAgICAgJ2pvdXJuZXlMZWdzJyxcbiAgICAgICdzZWdtZW50R3JvdXAnXG4gICAgXTtcblxuICAgIGNvbnN0IGZsaWdodEpvdXJuZXlDbG9uZSA9IHsgLi4uZmxpZ2h0Sm91cm5leSB9IGFzIGFueTtcbiAgICBwcm9wZXJ0aWVzVG9EZWxldGUuZm9yRWFjaChwcm9wZXJ0eSA9PiBkZWxldGUgZmxpZ2h0Sm91cm5leUNsb25lW3Byb3BlcnR5XSk7XG4gICAgcmV0dXJuIGZsaWdodEpvdXJuZXlDbG9uZSBhcyBJbnB1dEZsaWdodEpvdXJuZXk7XG4gIH1cblxuICBnZXRGbGlnaHRGYXJlUnVsZXMoXG4gICAgZmxpZ2h0OiBGbGlnaHRKb3VybmV5LFxuICAgIHNvdXJjZUlkOiBudW1iZXJcbiAgKTogT2JzZXJ2YWJsZTxHZXRGbGlnaHRGYXJlUnVsZXNSZXN1bHRBcnJheT4ge1xuICAgIGNvbnN0IGlucHV0ZmxpZ2h0Sm91cm5leTogSW5wdXRGbGlnaHRKb3VybmV5ID0gdGhpcy5jb252ZXJ0VG9JbnB1dEZsaWdodEpvdXJuZXkoZmxpZ2h0KTtcbiAgICByZXR1cm4gdGhpcy5nZXRGbGlnaHRGYXJlUnVsZXNGZXRjaGVyLmZldGNoTGlzdCh7IGZsaWdodDogaW5wdXRmbGlnaHRKb3VybmV5LCBzb3VyY2VJZCB9KTtcbiAgfVxuXG4gIGdldEZsaWdodEJyYW5kZWRGYXJlcyhcbiAgICBvdXRib3VuZEZsaWdodHM6IGdyYXBocWxUeXBlcy5JbnB1dEZsaWdodEpvdXJuZXlbXSxcbiAgICBpbmJvdW5kRmxpZ2h0czogZ3JhcGhxbFR5cGVzLklucHV0RmxpZ2h0Sm91cm5leVtdLFxuICAgIHNwZWNpZmljRmFyZUluZm86IGdyYXBocWxUeXBlcy5JbnB1dFNwZWNpZmljRmFyZUluZm9bXSxcbiAgICBzZXJ2aWNlSWQ6IG51bWJlclxuICApOiBPYnNlcnZhYmxlPEdldEZsaWdodEJyYW5kZWRGYXJlc1Jlc3VsdEFycmF5PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmxpZ2h0QnJhbmRlZEZhcmVzRmV0Y2hlci5mZXRjaExpc3Qoe1xuICAgICAgb3V0Ym91bmRGbGlnaHRzLFxuICAgICAgaW5ib3VuZEZsaWdodHMsXG4gICAgICBzcGVjaWZpY0ZhcmVJbmZvLFxuICAgICAgc2VydmljZUlkXG4gICAgfSk7XG4gIH1cblxuICBnZXRSYWlsTGl2ZURlcGFydHVyZXMoXG4gICAgc3RhdGlvbjogc3RyaW5nLFxuICAgIGRhdGVUaW1lPzogc3RyaW5nLFxuICAgIGRlc3RpbmF0aW9uQ29kZT86c3RyaW5nXG4gICk6IE9ic2VydmFibGU8U2VhcmNoUmFpbExpdmVEZXBhcnR1cmVzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmFpbExpdmVEZXBhcnR1cmVzRmV0Y2hlci5mZXRjaExpc3Qoe1xuICAgICAgc3RhdGlvbkNvZGU6IHN0YXRpb24sXG4gICAgICBkZXBhcnREYXRlVGltZTogZGF0ZVRpbWUsXG4gICAgICBkZXN0aW5hdGlvbkNvZGVcbiAgICB9KTtcbiAgfVxuXG4gIGdldEZsaWdodFNlYXRNYXAoXG4gICAgZmxpZ2h0czogZ3JhcGhxbFR5cGVzLklucHV0RmxpZ2h0Sm91cm5leVtdLFxuICAgIHN1cHBsaWVyOiBzdHJpbmcsXG4gICAgbG95YWx0eUNvZGU/OiBzdHJpbmcsXG4gICAgdXNlcklkPzogc3RyaW5nLFxuICAgIGlzR3Vlc3Q6Ym9vbGVhbiA9IGZhbHNlLFxuICAgIGRvYj86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPEZsaWdodFNlYXRNYXBSZXN1bHQ+IHtcbiAgICAvLyBHZXQgc2VhcmNoIHF1ZXJ5XG4gICAgbGV0IHNlYXJjaFF1ZXJ5ID0gdGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdLmdldFNlYXJjaFF1ZXJ5KCk7XG5cbiAgICBzZWFyY2hRdWVyeS5wYXNzZW5nZXJzID0gdGhpcy5nZXRTZWxlY3RlZHRyYXZlbGxlcnMoKS5tYXAoXG4gICAgICAoeCk6IEZsaWdodFBhc3Nlbmdlck9iamVjdCA9PiAoe1xuICAgICAgICB0eXBlOiBGbGlnaHRQYXNzZW5nZXJUeXBlLkFkdWx0LFxuICAgICAgICBkb2I6IHguZG9iID8gbmV3IERhdGUoTnVtYmVyKHguZG9iKSkudG9Mb2NhbGVEYXRlU3RyaW5nKCkgOiBudWxsLFxuICAgICAgICBmaXJzdE5hbWU6IHguZm9yZW5hbWUsXG4gICAgICAgIHN1cm5hbWU6IHguc3VybmFtZSxcbiAgICAgICAgaWQ6IHguaWQsXG4gICAgICAgIGd1ZXN0OiB4Lmd1ZXN0XG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRGbGlnaHRTZWF0TWFwRmV0Y2hlclxuICAgICAgLmZldGNoTGlzdCh7IGZsaWdodHMsIHNlYXJjaFF1ZXJ5LCBzdXBwbGllciwgbG95YWx0eUNvZGUsIHVzZXJJZCwgaXNHdWVzdCwgZG9iIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChkYXRhOiBncmFwaHFsVHlwZXMuRmxpZ2h0U2VhdE1hcFJlc3VsdCkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5kYXRhXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBzYXZlRmF2b3VyaXRlU2VhcmNoKFxuICAgIHNlYXJjaDogZ3JhcGhxbFR5cGVzLlNhdmVGYXZvdXJpdGVTZWFyY2hNdXRhdGlvblZhcmlhYmxlc1xuICApOiBPYnNlcnZhYmxlPFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5iYXNlU2F2ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXIudXBkYXRlT25lKHNlYXJjaCk7XG4gIH1cblxuICBnZXRDb25mZXJtYVJvb21JbWFnZXMoaG90ZWxJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmdbXT4ge1xuICAgIGlmIChob3RlbElkKSB7XG4gICAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8U2VhcmNoSG90ZWxDaGFpbnNSZXN1bHRBcnJheT4gPVxuICAgICAgICB0aGlzLmdldENvbmZlcm1hUm9vbUltYWdlc0ZldGNoZXIuZmV0Y2hMaXN0KHsgaG90ZWxJZCB9KTtcbiAgICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpKTtcbiAgICB9XG4gIH1cblxuICBlbWFpbEJhc2tldChpZDogc3RyaW5nLCBlbWFpbHM6IHN0cmluZ1tdID0gW10pOiBPYnNlcnZhYmxlPGdyYXBocWxUeXBlcy5CYXNrZXQ+IHtcbiAgICByZXR1cm4gdGhpcy5lbWFpbEJhc2tldEZldGNoZXIuZmV0Y2hMaXN0KHsgaWQsIGVtYWlscyB9KTtcbiAgfVxuXG4gIGdlbmVyYXRlQmFza2V0UGRmKGlkOiBzdHJpbmcsIGVtYWlsczogc3RyaW5nW10gPSBbXSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZUdlbmVyYXRlQmFza2V0UGRmRmV0Y2hlci5mZXRjaExpc3QoeyBpZCwgZW1haWxzIH0pO1xuICB9XG5cbiAgc3VibWl0SXJsRm9ybSgpIHtcbiAgICBjb25zdCBjdXJyZW50VXNlckVtYWlsID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRW1haWwoKTtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSB0aGlzLnNlYXJjaGVzW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbF07XG4gICAgbGV0IG9uQmVoYWxmT2Y6IHN0cmluZztcbiAgICBsZXQgcGFzc2VuZ2VyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVtdID0gW107XG5cbiAgICAvLyBnZXQgcGFzc2VuZ2Vyc1xuICAgIHRoaXMuYWxsU3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMudHJhdmVsbGVySW5mb3JtYXRpb24uc3Vic2NyaWJlKCh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSkgPT4ge1xuICAgICAgICBwYXNzZW5nZXJzID0gdHJhdmVsbGVycy5tYXAoKHRyYXZlbGxlcjogVHJhdmVsbGVyLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgbGV0IGFnZTogbnVtYmVyO1xuICAgICAgICAgIGlmICh0cmF2ZWxsZXIuZG9iKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lRGlmZiA9IE1hdGguYWJzKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gbmV3IERhdGUodHJhdmVsbGVyLmRvYikuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgIGFnZSA9IE1hdGguZmxvb3IodGltZURpZmYgLyAoMTAwMCAqIDM2MDAgKiAyNCkgLyAzNjUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogdHJhdmVsbGVyLm5hbWUsXG4gICAgICAgICAgICBhZ2U6IGFnZT8udG9TdHJpbmcoKSB8fCB0cmF2ZWxsZXIuYWdlVHlwZSB8fCAnTm90IHNwZWNpZmllZCcsXG4gICAgICAgICAgICBkaXNjb3VudENhcmQ6IHNlYXJjaFBhcmFtcy5kaXNjb3VudENhcmRbaW5kZXhdXG4gICAgICAgICAgICAgID8gc2VhcmNoUGFyYW1zLmRpc2NvdW50Q2FyZFtpbmRleF0ubmFtZVxuICAgICAgICAgICAgICA6ICdOb25lJyxcbiAgICAgICAgICAgIC8vICEgbG95YWx0eSBjYXJkIGRvZXNudCBleGlzdCB5ZXQsIHNvIHdoeSBkbyB3ZSBzZW5kIGl0IHRvIHRoZSBlbWFpbFxuICAgICAgICAgICAgbG95YWx0eUNhcmQ6ICdOb25lJ1xuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBvbkJlaGFsZk9mID0gdHJhdmVsbGVyc1swXS5lbWFpbCA/IHRyYXZlbGxlcnNbMF0uZW1haWwgOiBjdXJyZW50VXNlckVtYWlsO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gZ2V0IGpyZnJlZmVyZW5jZVxuICAgIHRoaXMuYWxsU3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHNlYXJjaFBhcmFtcy5yZXN1bHRzLnN1YnNjcmliZSgoaXJsSm91cm5leTogZ3JhcGhxbFR5cGVzLklybEpvdXJuZXlPcHRpb25zW10pID0+IHtcbiAgICAgICAgaWYgKGlybEpvdXJuZXlbMF0/LmpyZnJlZmVyZW5jZSkge1xuICAgICAgICAgIHRoaXMuanJmUmVmZXJlbmNlID0gaXJsSm91cm5leVswXT8uanJmcmVmZXJlbmNlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpZiAodGhpcy5qcmZSZWZlcmVuY2UgJiYgcGFzc2VuZ2Vycykge1xuICAgICAgcGFzc2VuZ2VycyA9IHBhc3NlbmdlcnMubWFwKChwYXNzZW5nZXIsIGkpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wYXNzZW5nZXIsXG4gICAgICAgICAgZGlzY291bnRDYXJkOiBzZWFyY2hQYXJhbXMuZGlzY291bnRDYXJkW2ldID8gc2VhcmNoUGFyYW1zLmRpc2NvdW50Q2FyZFtpXS5uYW1lIDogJ05vbmUnLFxuICAgICAgICAgIC8vIG5vIGxveWFsdHkgY2FyZHMgZG9uZSB5ZXQsIGFtZW5kIHRoaXMgd2hlbiBpdCBleGlzdHNcbiAgICAgICAgICBsb3lhbHR5Q2FyZDogJ05vbmUnXG4gICAgICAgIH07XG4gICAgICB9KTsgLy8gYXMgdW5rbm93biBhcyB7W2tleTpzdHJpbmddOnN0cmluZzt9W11cbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIHRyYWluTnVtYmVyOiBzZWFyY2hQYXJhbXMudHJhaW5OdW1iZXIgfHwgJ0FueScsXG4gICAgICAgIGRlcGFydHVyZVN0YXRpb246IHNlYXJjaFBhcmFtcy50cmF2ZWxsaW5nRnJvbS5uYW1lLFxuICAgICAgICBkZXN0aW5hdGlvblN0YXRpb246IHNlYXJjaFBhcmFtcy50cmF2ZWxsaW5nVG8ubmFtZSxcbiAgICAgICAgb3V0Ym91bmREYXRlOiBzZWFyY2hQYXJhbXMub3V0Qm91bmREYXRlVGltZSxcbiAgICAgICAgaW5ib3VuZERhdGU6IHNlYXJjaFBhcmFtcy5pbkJvdW5kRGF0ZVRpbWUsXG4gICAgICAgIGFkZGl0aW9uYWxJbmZvOiBzZWFyY2hQYXJhbXMuYWRkaXRpb25hbEluc3RydWN0aW9ucyB8fCAnTm8gYWRkaXRpb25hbCBpbnN0cnVjdGlvbnMnLFxuICAgICAgICBzZXJ2aWNlQ2xhc3M6IHNlYXJjaFBhcmFtcy5pcmxDbGFzcyB8fCAnQW55JyxcbiAgICAgICAgb2ZmbGluZVJlZmVyZW5jZTogdGhpcy5qcmZSZWZlcmVuY2UsXG4gICAgICAgIG9uQmVoYWxmT2YsXG4gICAgICAgIHBhc3NlbmdlcnNcbiAgICAgIH07XG4gICAgICBjb25zb2xlLmxvZyhwYXlsb2FkKTtcblxuICAgICAgdGhpcy5zZW5kT2ZmbGluZU5vdGlmaWNhdGlvbihwYXlsb2FkKS5zdWJzY3JpYmUoXG4gICAgICAgIChyZXN1bHQ6IGdyYXBocWxUeXBlcy5JcmxPZmZsaW5lTm90aWZ5UmVzdWx0KSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxuICAgICAgICAgICAgICBNb2RhbFR5cGVzLk9mZmxpbmVSZXF1ZXN0RGlhbG9nQ29tcG9uZW50LFxuICAgICAgICAgICAgICB7IGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnLCBiYWNrZHJvcDogJ3N0YXRpYycgfSxcbiAgICAgICAgICAgICAgeyBqcmZSZWZlcmVuY2U6IHRoaXMuanJmUmVmZXJlbmNlIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICAgICAgICAgIE1vZGFsVHlwZXMuTW9kYWxFcnJvckNvbXBvbmVudCxcbiAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSwgYmFja2Ryb3A6ICdzdGF0aWMnIH0sXG4gICAgICAgICAgICAgIHsgZXJyb3I6ICdVbmFibGUgdG8gc2VuZCBvZmZsaW5lIG5vdGlmaWNhdGlvbicgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXS5yZXNldCgpO1xuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbF0uY2hvc2VuID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc2VuZE9mZmxpbmVOb3RpZmljYXRpb24oanJmUmVmZXJlbmNlOiBhbnkpOiBPYnNlcnZhYmxlPGdyYXBocWxUeXBlcy5JcmxPZmZsaW5lTm90aWZ5UmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZE9mZmxpbmVOb3RpZmljYXRpb25GZXRjaGVyLmZldGNoT25lKGpyZlJlZmVyZW5jZSk7XG4gIH1cblxuICBjb252ZXJ0Q3VycmVuY3kocXVlcnk6IHtcbiAgICBiYXNlQ3VycmVuY3lDb2RlOiBDdXJyZW5jeUNvZGU7XG4gICAgY29udmVydGVkQ3VycmVuY3lDb2RlOiBDdXJyZW5jeUNvZGU7XG4gICAgYmFzZUN1cnJlbmN5QW1vdW50OiBudW1iZXI7XG4gIH0pOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmNvbnZlcnRDdXJyZW5jeUZldGNoZXIuZmV0Y2hPbmUocXVlcnkpO1xuICB9XG5cbiAgZ2V0Q3VycmVuY3lDb252ZXJzaW9uUmF0ZXMocXVlcnk6IHsgYmFzZUN1cnJlbmN5Q29kZTogQ3VycmVuY3lDb2RlIH0pOiBPYnNlcnZhYmxlPEN1cnJlbmN5UmF0ZXM+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDdXJyZW5jeUNvbnZlcnNpb25SYXRlc0ZldGNoZXIuZmV0Y2hPbmUocXVlcnkpLnBpcGUodGFrZSgxKSk7XG4gIH1cblxuICBnZXRDb3VudHJpZXMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLmNvdW50cmllcztcbiAgfVxuXG4gIGdldEhvdGVsRGV0YWlscyhyYXRlS2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPEhvdGVsRGV0YWlsc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmdldEhvdGVsRGV0YWlsc0ZldGNoZXIuZmV0Y2hPbmUoeyByYXRlS2V5IH0pLnBpcGUodGFrZSgxKSk7XG4gIH1cblxuICBnZXRTZXJ2aWNlKHNlcnZpY2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxTZXJ2aWNlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2VydmljZUZldGNoZXIuZmV0Y2hPbmUoeyBzZXJ2aWNlSWQgfSk7XG4gIH1cblxuICBnZXRUcmFpbmxpbmVTZWFyY2hDb25maWcoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRUcmFpbmxpbmVTZWFyY2hDb25maWdGZXRjaGVyLmZldGNoT25lKCk7XG4gIH1cblxuICBhc3luYyBzaW11bHRhbmVvdXNTZWFyY2hlc0NoZWNrKGlnbm9yZUNob3NlbjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc2VhcmNoX29iamVjdHNfY29weSA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmluaXRfc2VhcmNoX29iamVjdHMoKSk7XG5cbiAgICBpZiAodGhpcy51c2VyU2VydmljZS5jYW5Cb29rKFNlcnZpY2VUeXBlLkZsaWdodCkgJiYgdGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdKSB7XG4gICAgICB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0uZXVyb3N0YXJGcm9tRmxpZ2h0U2VhcmNoUGVyZm9ybWVkID0gZmFsc2U7XG4gICAgICB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0ucmFpbEZyb21GbGlnaHRTZWFyY2hQZXJmb3JtZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5FdXJvc3Rhcl0pIHtcbiAgICAgIC8vIHJlc2V0IHRoZSBzZWFyY2hfb2JqZWN0IGluY2FzZSBvZiBhZGRpdGlvbmFsIHNlYXJjaGVzXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkV1cm9zdGFyXS5wcmlvcml0eSA9XG4gICAgICAgIHNlYXJjaF9vYmplY3RzX2NvcHlbU2VydmljZVR5cGUuRXVyb3N0YXJdLnByaW9yaXR5O1xuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5FdXJvc3Rhcl0ucmVzdWx0VXJsID1cbiAgICAgICAgc2VhcmNoX29iamVjdHNfY29weVtTZXJ2aWNlVHlwZS5FdXJvc3Rhcl0ucmVzdWx0VXJsO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5SYWlsXSkge1xuICAgICAgLy8gcmVzZXQgdGhlIHNlYXJjaF9vYmplY3QgaW5jYXNlIG9mIGFkZGl0aW9uYWwgc2VhcmNoZXNcbiAgICAgIHRoaXMuc2VhcmNoX29iamVjdHNbU2VydmljZVR5cGUuUmFpbF0ucHJpb3JpdHkgPVxuICAgICAgICBzZWFyY2hfb2JqZWN0c19jb3B5W1NlcnZpY2VUeXBlLlJhaWxdLnByaW9yaXR5O1xuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5SYWlsXS5yZXN1bHRVcmwgPVxuICAgICAgICBzZWFyY2hfb2JqZWN0c19jb3B5W1NlcnZpY2VUeXBlLlJhaWxdLnJlc3VsdFVybDtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkZsaWdodF0/LmNob3NlbiAmJlxuICAgICAgdGhpcy51c2VyU2VydmljZS5jYW5Cb29rKFNlcnZpY2VUeXBlLlJhaWwpICYmXG4gICAgICAoIXRoaXMuc2VhcmNoX29iamVjdHNbU2VydmljZVR5cGUuUmFpbF0uY2hvc2VuIHx8IGlnbm9yZUNob3NlbilcbiAgICApIHtcbiAgICAgIGxldCB0cmFpbmxpbmVDb25maWcgPSAnJztcbiAgICAgIGNvbnN0IGhhc1RMRW5hYmxlZCA9IHRoaXMudXNlclNlcnZpY2UudXNlckhhc1NlcnZpY2VQcm92aWRlcihcbiAgICAgICAgU2VydmljZVR5cGUuUmFpbCxcbiAgICAgICAgU2VydmljZVByb3ZpZGVyLlRyYWlubGluZVxuICAgICAgKTtcbiAgICAgICAgY29uc3QgZmxpZ2h0U2VhcmNoUXVlcnkgPSB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF07XG4gICAgICAgIGNvbnN0IG91dENjID0gKGZsaWdodFNlYXJjaFF1ZXJ5LmRlcGFydExvY2F0aW9uIGFzIE9CVEFpcnBvcnREZXRhaWxzKT8uY291bnRyeUNvZGU7XG4gICAgICAgIGNvbnN0IGluQ2MgPSAoZmxpZ2h0U2VhcmNoUXVlcnkuYXJyaXZlTG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHMpPy5jb3VudHJ5Q29kZTtcbiAgICAgICAgY29uc3Qgbm90VUtSYWlsID0gb3V0Q2MgIT09ICdHQicgJiYgaW5DYyAhPT0gJ0dCJztcblxuICAgICAgaWYgKGhhc1RMRW5hYmxlZCAmJiBub3RVS1JhaWwpIHtcbiAgICAgICAgdHJhaW5saW5lQ29uZmlnID0gYXdhaXQgdGhpcy5nZXRUcmFpbmxpbmVTZWFyY2hDb25maWcoKS50b1Byb21pc2UoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBhd2FpdCB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0uY2FuQmVSYWlsU2VhcmNoZWQoXG4gICAgICAgICAgdGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdLmNob3NlblNlYXJjaFR5cGUsXG4gICAgICAgICAgdHJhaW5saW5lQ29uZmlnXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnKysrIENhbiBiZSByYWlsIHNlYXJjaGVkICsrKycpO1xuIFxuICAgICAgICBpZiAodHJhaW5saW5lQ29uZmlnICYmIHRyYWlubGluZUNvbmZpZyAhPT0gJ1VLX29ubHknICYmIGhhc1RMRW5hYmxlZCkgeyAvLyBhbmQgbm90IGEgVUsgc2VhcmNoXG4gICAgICAgICAgLy8gZG8gYSBzcGVjaWZpYyB0cmFpbmxpbmUgb25lXG4gICAgICAgICAgYXdhaXQgdGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXS5nZW5lcmF0ZVF1ZXJ5RnJvbUZsaWdodFF1ZXJ5VHJhaW5saW5lKFxuICAgICAgICAgICAgZmxpZ2h0U2VhcmNoUXVlcnkuZ2V0U2VhcmNoUXVlcnkoKSxcbiAgICAgICAgICAgIGZsaWdodFNlYXJjaFF1ZXJ5Lm91dGJvdW5kU2FtZVNlYXJjaFRyYWlubGluZVN0YXRpb25zLFxuICAgICAgICAgICAgZmxpZ2h0U2VhcmNoUXVlcnkuaW5ib3VuZFNhbWVTZWFyY2hUcmFpbmxpbmVTdGF0aW9ucyxcbiAgICAgICAgICAgIGZsaWdodFNlYXJjaFF1ZXJ5LmRlcGFydExvY2F0aW9uLFxuICAgICAgICAgICAgZmxpZ2h0U2VhcmNoUXVlcnkuYXJyaXZlTG9jYXRpb25cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0uZ2VuZXJhdGVRdWVyeUZyb21GbGlnaHRRdWVyeShcbiAgICAgICAgICAgIGZsaWdodFNlYXJjaFF1ZXJ5LmdldFNlYXJjaFF1ZXJ5KClcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2codGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXSk7XG4gICAgICAgIGZsaWdodFNlYXJjaFF1ZXJ5LnJhaWxGcm9tRmxpZ2h0U2VhcmNoUGVyZm9ybWVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5SYWlsXS5wcmlvcml0eSA9IHRoaXMuc2VhcmNoX29iamVjdHMuRkxJR0hULnByaW9yaXR5O1xuICAgICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLlJhaWxdLnJlc3VsdFVybCA9IHRoaXMuc2VhcmNoX29iamVjdHMuRkxJR0hULnJlc3VsdFVybDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkZsaWdodF0/LmNob3NlbiAmJlxuICAgICAgdGhpcy51c2VyU2VydmljZS5jYW5Cb29rKFNlcnZpY2VUeXBlLkV1cm9zdGFyKSAmJlxuICAgICAgKCF0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkV1cm9zdGFyXS5jaG9zZW4gfHwgaWdub3JlQ2hvc2VuKVxuICAgICkge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5jYW5CZUV1cm9TZWFyY2hlZCgpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuRXVyb3N0YXJdLmdlbmVyYXRlUXVlcnlGcm9tRmxpZ2h0UXVlcnkoXG4gICAgICAgICAgdGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdLmdldFNlYXJjaFF1ZXJ5KCksXG4gICAgICAgICAgKHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5kZXBhcnRMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlscykuZ2F0ZXdheSxcbiAgICAgICAgICAodGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdLmFycml2ZUxvY2F0aW9uIGFzIE9CVEFpcnBvcnREZXRhaWxzKS5nYXRld2F5XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5ldXJvc3RhckZyb21GbGlnaHRTZWFyY2hQZXJmb3JtZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkV1cm9zdGFyXS5wcmlvcml0eSA9IHRoaXMuc2VhcmNoX29iamVjdHMuRkxJR0hULnByaW9yaXR5O1xuICAgICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkV1cm9zdGFyXS5yZXN1bHRVcmwgPSB0aGlzLnNlYXJjaF9vYmplY3RzLkZMSUdIVC5yZXN1bHRVcmw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VhcmNoX29iamVjdHNbU2VydmljZVR5cGUuRmxpZ2h0XT8uY2hvc2VuKSB7XG4gICAgICB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0uaG90ZWxGcm9tRmxpZ2h0U2VhcmNoUGVyZm9ybWVkID1cbiAgICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5Ib3RlbF0/LmNob3NlbjtcbiAgICB9XG4gIH1cblxuICB0dXJuT2ZmQWxsQ2hvc2VuUHJvZHVjdCgpOiB2b2lkIHtcbiAgICBPYmplY3Qua2V5cyh0aGlzLnNlYXJjaF9vYmplY3RzKS5tYXAoKGtleTogU2VydmljZVR5cGUpID0+IHtcbiAgICAgIHRoaXMuc2VhcmNoX29iamVjdHNba2V5XS5jaG9zZW4gPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIG1ha2VQb3J0YWxGbGlnaHRDYWxsKHNzb1F1ZXJ5OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogdm9pZCB7XG4gICAgY29uc29sZS53YXJuKCcrKysgTWFraW5nIHBvcnRhbGwgZmxpZ2h0IGNhbGwgKysrJyk7XG4gICAgLy8gYWRkIHNlbGYgYXMgdHJhdmVsbGVyXG4gICAgbGV0IHNlYXJjaCA9IDA7XG5cbiAgICBpZiAodGhpcy5zZWFyY2hlcy5GTElHSFQuc3NvU2VhcmNoZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBub3RpZmllciQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3QgdXNlclN1YiA9IHRoaXMudXNlclNlcnZpY2UuZnVsbFVzZXJEZXRhaWxzLnVzZXJEYXRhXG4gICAgICAucGlwZSh0YWtlVW50aWwobm90aWZpZXIkKSlcbiAgICAgIC5zdWJzY3JpYmUoKHVzZXI6IFVzZXJEYXRhKSA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybignKysrIFVzZXIgZGF0YSBsb2FkZWQgKysrJyk7XG4gICAgICAgIGlmICh1c2VyICYmIHNzb1F1ZXJ5ICYmIHNlYXJjaCA8IDEpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJysrKyBHZW5lcmF0ZSBTZWFyY2ggKysrJyk7XG4gICAgICAgICAgc2VhcmNoKys7XG4gICAgICAgICAgY29uc3Qgc2VsZlRyYXZlbGxlciA9IFRyYXZlbGxlck9iamVjdC5tYWtlVHJhdmVsbGVyT2JqZWN0RnJvbVVzZXJEYXRhKHVzZXIpO1xuICAgICAgICAgIC8vICAgdGhpcy5hZGRUb1RyYXZlbGxlclNlbGVjdGlvbihzZWxmVHJhdmVsbGVyKTtcbiAgICAgICAgICB0aGlzLmFkZFRyYXZlbGxlcihzZWxmVHJhdmVsbGVyKTtcbiAgICAgICAgICAvLyBtYXRjaCBwYXJhbXMgd2l0aCBmbGlnaHQgcGFyYW1zXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ3F1ZXJ5OiAnLCBzc29RdWVyeSk7XG4gICAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLm1ha2VGbGlnaHRRdWVyeShzc29RdWVyeSk7XG4gICAgICAgICAgY29uc29sZS5sb2cocXVlcnkpO1xuICAgICAgICAgIHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5zc29PYmplY3QgPSBzc29RdWVyeTtcbiAgICAgICAgICB0aGlzLmhpZ2hlc3Rfc2VhcmNoX3ByaW9yaXR5ID0gdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5GbGlnaHRdLnByaW9yaXR5O1xuICAgICAgICAgIHRoaXMuc2VhcmNoX29iamVjdHNbU2VydmljZVR5cGUuRmxpZ2h0XS5jaG9zZW4gPSB0cnVlO1xuICAgICAgICAgIC8vIGRvIHNlYXJjaCBhcyBub3JtYWxcbiAgICAgICAgICBub3RpZmllciQuY29tcGxldGUoKTtcbiAgICAgICAgICB0aGlzLnNlYXJjaGVzLkZMSUdIVC5zc29TZWFyY2hlZCA9IHRydWU7XG4gICAgICAgICAgY29uc29sZS53YXJuKCcrKysgU3RhcnQgdGhlIHNlYXJjaGVzICsrKycpO1xuICAgICAgICAgIHRoaXMuc3RhcnRTZWFyY2hlcygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICBpZiAoc2VhcmNoID4gMCkge1xuICAgICAgdXNlclN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICAvLyByZW1vdmUgc2Vzc2lvbiBpdGVtXG4gICAgLy8gZG9jdW1lbnQuY29va2llID0gXCJzc29GbGlnaHRQYXJhbXM9O2V4cGlyZXM9XCIgKyBuZXcgRGF0ZSgwKS50b1VUQ1N0cmluZygpO1xuICAgIC8vICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnJlbW92ZVNlc3Npb25JdGVtKCdzc29fcXVlcnknKTtcbiAgfVxuXG4gIGdldFNlcnZpY2VUeXBlRGF0ZShzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUpOiBtb21lbnQuTW9tZW50IHtcbiAgICBzd2l0Y2ggKHNlcnZpY2VUeXBlKSB7XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hlc1tzZXJ2aWNlVHlwZV0uY2hlY2tpbl9kYXRlO1xuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYXI6XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaGVzW3NlcnZpY2VUeXBlXS5waWNrdXBfZGF0ZXRpbWU7XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoZXNbc2VydmljZVR5cGVdLmRlcGFydHM7XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkZsaWdodDpcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRXVyb3N0YXI6XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaGVzW3NlcnZpY2VUeXBlXS5vdXRCb3VuZERhdGU7XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLlJhaWw6XG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsOlxuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hlc1tzZXJ2aWNlVHlwZV0ub3V0Qm91bmREYXRlVGltZTtcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuTG91bmdlOlxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5QYXJraW5nOlxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5GYXN0VHJhY2s6XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaGVzW3NlcnZpY2VUeXBlXS5hcnJpdmFsRGF0ZXRpbWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLndhcm4oJ3Vua25vd24gdHJhdmVsIHR5cGUnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgZ2V0SW53YXJkUmFpbFJlc3VsdHMoXG4gICAgb3V0Ym91bmRSZXN1bHRzOiBSYWlsSm91cm5leU9wdGlvbnMsXG4gICAgb3V0d2FyZEpvdXJuZXlJZDogc3RyaW5nLFxuICAgIG91dHdhcmRBbHRlcm5hdGl2ZUlkczogc3RyaW5nW10sXG4gICAgaXNFeGNoYW5nZVNlYXJjaDogYm9vbGVhbiA9IGZhbHNlLFxuICAgIG9yZGVySWQ/OiBzdHJpbmcsXG4gICAgYmFza2V0SXRlbT86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPE9CVFJhaWxRdW90ZVJlc3VsdFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoUmFpbElud2FyZEZldGNoZXJcbiAgICAgIC5mZXRjaExpc3Qoe1xuICAgICAgICBvdXRib3VuZFJlc3VsdHMsXG4gICAgICAgIG91dHdhcmRKb3VybmV5SWQsXG4gICAgICAgIG91dHdhcmRBbHRlcm5hdGl2ZUlkcyxcbiAgICAgICAgaXNFeGNoYW5nZVNlYXJjaCxcbiAgICAgICAgb3JkZXJJZCxcbiAgICAgICAgYmFza2V0SXRlbSxcbiAgICAgICAgY2xhc3M6IHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0uY2hvc2VuU2VhcmNoQ2xhc3MsXG4gICAgICAgIHRyYXZlbGxlcnM6IDxhbnlbXT50aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdLnByb2Nlc3NUcmFpbmxpbmVUcmF2ZWxsZXJzKCkubmV3VHJhdmVsbGVyc1xuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBtYXAoKHJlc3VsdHM6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFwcGxpZWRSdWxlc0RhdGEgPSB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdLmFwcGx5RmlsdGVyKHJlc3VsdHMpO1xuXG4gICAgICAgICAgcmV0dXJuIGFwcGxpZWRSdWxlc0RhdGE7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgZ2V0UmFpbFN0YXRpb25JbmZvQnlJZChcbiAgICBpZDogc3RyaW5nLFxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxuICApOiBPYnNlcnZhYmxlPElSYWlsU3RhdGlvbkluZm9ybWF0aW9uPiB7XG4gICAgaWYgKGlkKSB7XG4gICAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSYWlsU3RhdGlvbkluZm9GZXRjaGVyLmZldGNoTGlzdCh7IGlkIH0pLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHN3aXRjaE1hcCgoaW5mbzogUmFpbFN0YXRpb24pID0+IHtcbiAgICAgICAgICBjb25zdCBzdGF0aW9uSW5mbyA9IHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0uZ3JvdXBTdGF0aW9uSW5mbyhpbmZvKTtcbiAgICAgICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIHJldHVybiBvZihzdGF0aW9uSW5mbyk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG4gIH1cblxuICBnZXRBaXJBdmFpbGJpbGl0eShcbiAgICBmbGlnaHRzOiBJbnB1dEZsaWdodEpvdXJuZXlbXSxcbiAgICBzb3VyY2U6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPEFpckF2YWlsYWJpbHR5UmVzdWx0W10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRBaXJBdmFpbGFiaWxpdHlGZXRjaGVyLmZldGNoTGlzdCh7IGZsaWdodHMsIHNvdXJjZSB9KTtcbiAgfVxuXG4gIGdldEZsaWdodEF0TmV3Q2xhc3MoXG4gICAgc2VhcmNoUXVlcnk6IGFueSxcbiAgICBkZXRhaWw6IGFueSxcbiAgICBhZHVsdHM6IG51bWJlcixcbiAgICBjaGlsZHJlbjogbnVtYmVyLFxuICAgIG91dGJvdW5kTmV3Q2xhc3M6IHN0cmluZyA9IG51bGwsXG4gICAgaW5ib3VuZE5ld0NsYXNzOiBzdHJpbmcgPSBudWxsLFxuICAgIGluZmFudHM6IG51bWJlciA9IDBcbiAgKTogT2JzZXJ2YWJsZTx7XG4gICAgZmxpZ2h0czogRmxpZ2h0SXRpbmVyYXJ5W10sXG4gICAgcnVsZUFjdGlvblN1bW1hcnk6IFJ1bGVBY3Rpb25TdW1tYXJ5SW50ZXJmYWNlXG4gIH0+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGbGlnaHRBdE5ld0NsYXNzRmV0Y2hlci5mZXRjaExpc3Qoe1xuICAgICAgc2VhcmNoUXVlcnksXG4gICAgICBkZXRhaWwsXG4gICAgICBhZHVsdHMsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGluZmFudHMsXG4gICAgICBvdXRib3VuZE5ld0NsYXNzLFxuICAgICAgaW5ib3VuZE5ld0NsYXNzXG4gICAgfSk7XG4gIH1cblxuICBnZXRGbGlnaHRVcHNlbGxPZmZlcnMoXG4gICAgc2VhcmNoUXVlcnk6IGFueSxcbiAgICBvcmlnaW5hbEZsaWdodEl0aW5lcmFyeTogYW55XG4gICk6IE9ic2VydmFibGU8RmxpZ2h0VXBzZWxsT2ZmZXJzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmxpZ2h0VXBzZWxsT2ZmZXJzRmV0Y2hlci5mZXRjaExpc3Qoe1xuICAgICAgc2VhcmNoUXVlcnksXG4gICAgICBvcmlnaW5hbEZsaWdodEl0aW5lcmFyeVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0UmFpbFNlYXJjaEV4Y2hhbmdlUmVzdWx0cyhcbiAgICBiYXNrZXRJdGVtOiBzdHJpbmcsXG4gICAgc2VjdGlvbklkOiBzdHJpbmcsXG4gICAgc2VsZWN0ZWRDaGFuZ2VhYmxlSWRzOiBzdHJpbmdbXSxcbiAgICBvdXRib3VuZERhdGU/OiBzdHJpbmcsXG4gICAgaW5ib3VuZERhdGU/OiBzdHJpbmdcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMucmFpbFNlYXJjaEV4Y2hhbmdlRmV0Y2hlci5mZXRjaExpc3Qoe1xuICAgICAgYmFza2V0SXRlbSxcbiAgICAgIG91dGJvdW5kRGF0ZSxcbiAgICAgIHNlY3Rpb25JZCxcbiAgICAgIHNlbGVjdGVkQ2hhbmdlYWJsZUlkcyxcbiAgICAgIGluYm91bmREYXRlXG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVJdGluZXJhcnlFeGNoYW5nZShcbiAgICBvcmlnaW5hbFNlY3Rpb25JZDogc3RyaW5nLFxuICAgIG91dHdhcmRKb3VybmV5OiBSYWlsSm91cm5leUV4Y2hhbmdlLFxuICAgIGJhc2tldEl0ZW06IHN0cmluZyxcbiAgICBpbndhcmRKb3VybmV5PzogUmFpbEpvdXJuZXlFeGNoYW5nZVxuICApIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVJdGluZXJhcnlFeGNoYW5nZVVwZGF0ZXIudXBkYXRlT25lKHtcbiAgICAgIG9yaWdpbmFsU2VjdGlvbklkLFxuICAgICAgb3V0d2FyZEpvdXJuZXksXG4gICAgICBpbndhcmRKb3VybmV5LFxuICAgICAgYmFza2V0SXRlbVxuICAgIH0pO1xuICB9XG4gIGdldE9mZmljZXMoKTogT2JzZXJ2YWJsZTxHZXRVc2VyQ29tcGFueU9mZmljZXNSZXN1bHRBcnJheT4ge1xuICAgIHJldHVybiB0aGlzLmdldE9mZmljZXNGZXRjaGVyLmZldGNoTGlzdCgpO1xuICB9XG5cbiAgZ2V0U3VnZ2VzdFBsYWNlcyhxdWVyeTogc3RyaW5nKTogT2JzZXJ2YWJsZTxHZXRQbGFjZUF1dG9jb21wbGV0ZVJlc3VsdFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuc3VnZ2VzdFBsYWNlcy5mZXRjaExpc3QoeyBxdWVyeSB9KTtcbiAgfVxuXG4gIGdldExhdExvbkZyb21IZXJlSUQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8R210TG9jYXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5sYXRMb25Gcm9tSGVyZUlELmZldGNoTGlzdCh7IGlkIH0pO1xuICB9XG5cbiAgZ2V0R210SXRpbmVyYXJ5T3B0aW9ucyhcbiAgICBzdGFydExvY2F0aW9uOiBHbXRMb2NhdGlvbixcbiAgICBlbmRMb2NhdGlvbjogR210TG9jYXRpb24sXG4gICAgc3RhcnREYXRlOiBzdHJpbmcsXG4gICAgZW5kRGF0ZTogc3RyaW5nLFxuICAgIHJvdW5kVHJpcDogYm9vbGVhblxuICApOiBPYnNlcnZhYmxlPEdldEdtdEl0aW5lcmFyeU9wdGlvbnNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyUHJlZmVycmVkVHJhbnNwb3J0SHVicygpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHZhbHVlczogUHJlZmVycmVkVHJhbnNwb3J0SHViW10pID0+IHtcbiAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgIGNvbnN0IHJhaWxzID0gdmFsdWVzXG4gICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlID09PSBTZXJ2aWNlVHlwZS5SYWlsKVxuICAgICAgICAgICAgLm1hcChpdGVtID0+IGl0ZW0uY29kZSk7XG4gICAgICAgICAgY29uc3QgZmxpZ2h0cyA9IHZhbHVlc1xuICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gU2VydmljZVR5cGUuRmxpZ2h0KVxuICAgICAgICAgICAgLm1hcChpdGVtID0+IGl0ZW0uY29kZSk7XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRHTVRJdGluZXJhcnlPcHRpb25zXG4gICAgICAgICAgICAuZmV0Y2hMaXN0KHtcbiAgICAgICAgICAgICAgc3RhcnRMb2NhdGlvbixcbiAgICAgICAgICAgICAgZW5kTG9jYXRpb24sXG4gICAgICAgICAgICAgIHN0YXJ0RGF0ZSxcbiAgICAgICAgICAgICAgZW5kRGF0ZSxcbiAgICAgICAgICAgICAgcm91bmRUcmlwXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIG1hcCgocmVzdWx0OiBHZXRHbXRJdGluZXJhcnlPcHRpb25zUmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gc2hvdyBwcmVmZXJyZWQgc3RhdGlvbnMvYWlycG9ydHMgaWYgdGhleSBleGlzdCwgb3RoZXJ3aXNlIHNob3cgYWxsIHN0YXRpb25zL2FpcnBvcnRzXG4gICAgICAgICAgICAgICAgaWYgKHJhaWxzLmxlbmd0aCAmJiByZXN1bHQucmFpbEl0aW5lcmFyeU9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyU3RhdGlvbnMgPSAoc3RhdGlvbnM6IEdtdEl0aW5lcmFyeVJhaWxTdGF0aW9uT3B0aW9uW10pID0+XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5yYWlsU3RhdGlvbj8uc3RhdGlvbkNvZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhaWxzLmluY2x1ZGVzKGl0ZW0ucmFpbFN0YXRpb24uc3RhdGlvbkNvZGUpXG4gICAgICAgICAgICAgICAgICAgICkgPz8gW107XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUmFpbFN0YXRpb25zVG9TdGFydDogR210SXRpbmVyYXJ5UmFpbFN0YXRpb25PcHRpb25bXSA9XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclN0YXRpb25zKHJlc3VsdC5yYWlsSXRpbmVyYXJ5T3B0aW9uLmNsb3Nlc3RSYWlsU3RhdGlvbnNUb1N0YXJ0KTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUmFpbFN0YXRpb25zVG9FbmQ6IEdtdEl0aW5lcmFyeVJhaWxTdGF0aW9uT3B0aW9uW10gPSBmaWx0ZXJTdGF0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnJhaWxJdGluZXJhcnlPcHRpb24uY2xvc2VzdFJhaWxTdGF0aW9uc1RvRW5kXG4gICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICByZXN1bHQucmFpbEl0aW5lcmFyeU9wdGlvbi5jbG9zZXN0UmFpbFN0YXRpb25zVG9TdGFydCA9XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkUmFpbFN0YXRpb25zVG9TdGFydC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkUmFpbFN0YXRpb25zVG9TdGFydFxuICAgICAgICAgICAgICAgICAgICAgIDogcmVzdWx0LnJhaWxJdGluZXJhcnlPcHRpb24uY2xvc2VzdFJhaWxTdGF0aW9uc1RvU3RhcnQ7XG4gICAgICAgICAgICAgICAgICByZXN1bHQucmFpbEl0aW5lcmFyeU9wdGlvbi5jbG9zZXN0UmFpbFN0YXRpb25zVG9FbmQgPVxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZFJhaWxTdGF0aW9uc1RvRW5kLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRSYWlsU3RhdGlvbnNUb0VuZFxuICAgICAgICAgICAgICAgICAgICAgIDogcmVzdWx0LnJhaWxJdGluZXJhcnlPcHRpb24uY2xvc2VzdFJhaWxTdGF0aW9uc1RvRW5kO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChmbGlnaHRzLmxlbmd0aCAmJiByZXN1bHQuZmxpZ2h0SXRpbmVyYXJ5T3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJBaXJwb3J0cyA9IChhaXJwb3J0czogR210SXRpbmVyYXJ5QWlycG9ydE9wdGlvbltdKSA9PlxuICAgICAgICAgICAgICAgICAgICBhaXJwb3J0cy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbSA9PiBpdGVtPy5haXJwb3J0Py5pYXRhICYmIGZsaWdodHMuaW5jbHVkZXMoaXRlbS5haXJwb3J0LmlhdGEpXG4gICAgICAgICAgICAgICAgICAgICkgPz8gW107XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkRGVwYXJ0dXJlQWlycG9ydHM6IEdtdEl0aW5lcmFyeUFpcnBvcnRPcHRpb25bXSA9IGZpbHRlckFpcnBvcnRzKFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQuZmxpZ2h0SXRpbmVyYXJ5T3B0aW9uLmRlcGFydHVyZUFpcnBvcnRPcHRpb25zXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRBcnJpdmFsQWlycG9ydHM6IEdtdEl0aW5lcmFyeUFpcnBvcnRPcHRpb25bXSA9IGZpbHRlckFpcnBvcnRzKFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQuZmxpZ2h0SXRpbmVyYXJ5T3B0aW9uLmFycml2YWxBaXJwb3J0T3B0aW9uc1xuICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgcmVzdWx0LmZsaWdodEl0aW5lcmFyeU9wdGlvbi5kZXBhcnR1cmVBaXJwb3J0T3B0aW9ucyA9XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkRGVwYXJ0dXJlQWlycG9ydHMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZERlcGFydHVyZUFpcnBvcnRzXG4gICAgICAgICAgICAgICAgICAgICAgOiByZXN1bHQuZmxpZ2h0SXRpbmVyYXJ5T3B0aW9uLmRlcGFydHVyZUFpcnBvcnRPcHRpb25zO1xuICAgICAgICAgICAgICAgICAgcmVzdWx0LmZsaWdodEl0aW5lcmFyeU9wdGlvbi5hcnJpdmFsQWlycG9ydE9wdGlvbnMgPVxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEFycml2YWxBaXJwb3J0cy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkQXJyaXZhbEFpcnBvcnRzXG4gICAgICAgICAgICAgICAgICAgICAgOiByZXN1bHQuZmxpZ2h0SXRpbmVyYXJ5T3B0aW9uLmFycml2YWxBaXJwb3J0T3B0aW9ucztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIHJlc3VsdFxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB2YWx1ZXMgaXMgZmFsc3kgKGUuZy4sIGVtcHR5IGFycmF5KVxuICAgICAgICAgIHJldHVybiB0aGlzLmdldEdNVEl0aW5lcmFyeU9wdGlvbnMuZmV0Y2hMaXN0KHtcbiAgICAgICAgICAgIHN0YXJ0TG9jYXRpb24sXG4gICAgICAgICAgICBlbmRMb2NhdGlvbixcbiAgICAgICAgICAgIHN0YXJ0RGF0ZSxcbiAgICAgICAgICAgIGVuZERhdGUsXG4gICAgICAgICAgICByb3VuZFRyaXBcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0R3V0Q2l0eVN1Z2dlc3Rpb25zKFxuICAgIHVzZXJzQW5kTG9jYXRpb25zOiBHdXRVc2VyW10sXG4gICAgdXNlTW9zdENvbW1vbkNvdW50cnk6IGJvb2xlYW5cbiAgKTogT2JzZXJ2YWJsZTxHdXRTdWdnZXN0ZWRDaXR5W10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRHVVRDaXR5U3VnZ2VzdGlvbnMuZmV0Y2hMaXN0KHtcbiAgICAgIHVzZXJzQW5kTG9jYXRpb25zLFxuICAgICAgdXNlTW9zdENvbW1vbkNvdW50cnlcbiAgICB9KTtcbiAgfVxuXG4gIGdldEd1dExvY2F0aW9uU3VnZ2VzdGlvbnMoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBjYXRlZ29yaWVzOiBQbGFjZUNhdGVnb3J5W11cbiAgKTogT2JzZXJ2YWJsZTxHdXRTdWdnZXN0ZWRMb2NhdGlvbnM+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRHVVRMb2NhdGlvblN1Z2dlc3Rpb25zLmZldGNoTGlzdCh7XG4gICAgICBpZCxcbiAgICAgIGNhdGVnb3JpZXNcbiAgICB9KTtcbiAgfVxuXG4gIGdldFJvdXRlSGFwcHkoZGF0YTogRGF0YUFyZ3MsIGN1cnJlbmN5OiBDdXJyZW5jeUNvZGUpOiBPYnNlcnZhYmxlPFJvdXRlSGFwcHlSZXN1bHRzPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Um91dGVIYXBweUZldGNoZXIuZmV0Y2hMaXN0KHtcbiAgICAgIGRhdGEsXG4gICAgICBjdXJyZW5jeVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0TXVsdGlwbGVIb3RlbFJhdGluZ3MoXG4gICAgaG90ZWxSYXRpbmdJZGVudGlmaWVyczogSG90ZWxSYXRpbmdJZGVudGlmaWVyc1tdXG4gICk6IE9ic2VydmFibGU8R2V0TXVsdGlwbGVIb3RlbFJhdGluZ1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TXVsdGlwbGVIb3RlbFJhdGluZ0ZldGNoZXIuZmV0Y2hMaXN0KHtcbiAgICAgIGhvdGVsc0FuZEdyb3VwczogaG90ZWxSYXRpbmdJZGVudGlmaWVyc1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0RmVycnlQb3J0cyhxdWVyeTogc3RyaW5nKTogT2JzZXJ2YWJsZTxGZXJyeVBvcnRbXT4ge1xuICAgIHJldHVybiB0aGlzLmdldEZlcnJ5UG9ydHNGZXRjaGVyLmZldGNoTGlzdCh7XG4gICAgICBxdWVyeTogcXVlcnlcbiAgICB9KTtcbiAgfVxuXG4gIGdldEJhbm5lcihkaXNwbGF5VGFyZ2V0OiBCYW5uZXJEaXNwbGF5VGFyZ2V0LCBhZ2VudE9ubHk6IGJvb2xlYW4gPSBmYWxzZSk6IE9ic2VydmFibGU8QmFubmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QmFubmVyRmV0Y2hlci5mZXRjaE9uZSh7IGRpc3BsYXlUYXJnZXQsIGFnZW50T25seSB9KTtcbiAgfVxuXG4gIGdldE9mZmljZURpdmlzaW9ucyhcbiAgKTogT2JzZXJ2YWJsZTxEaXZpc2lvbltdPiB7XG4gICAgLy8gcmV0dXJuIHRoaXMuZ2V0T2ZmaWNlRGl2aXNpb25zRmV0Y2hlci5mZXRjaExpc3QoKTtcbiAgICByZXR1cm4gdGhpcy5nZXRPZmZpY2VEaXZpc2lvbnNGZXRjaGVyLmZldGNoTGlzdCgpXG4gIH1cbn1cbiJdfQ==
|