@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
|
@@ -147,6 +147,7 @@ export class HotelEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
147
147
|
// console.log('lightning sort results');
|
|
148
148
|
// console.log(this.results.value);
|
|
149
149
|
const filteredResults = this.resultsFilterMethod(this.fullResults);
|
|
150
|
+
console.log(filteredResults);
|
|
150
151
|
this.results.next(filteredResults);
|
|
151
152
|
this.reapplySorting.next(true);
|
|
152
153
|
};
|
|
@@ -201,24 +202,14 @@ export class HotelEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
201
202
|
this._isValid();
|
|
202
203
|
this.userService.changeUser.subscribe(() => {
|
|
203
204
|
const propertyNumber = this.userService.userIsAgent() ? [LocationTypes.PropertyNumber] : [];
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
]);
|
|
213
|
-
}
|
|
214
|
-
else {
|
|
215
|
-
this.location_types.next([
|
|
216
|
-
LocationTypes.Airport,
|
|
217
|
-
LocationTypes.City,
|
|
218
|
-
LocationTypes.TrainStation,
|
|
219
|
-
...propertyNumber
|
|
220
|
-
]);
|
|
221
|
-
}
|
|
205
|
+
this.location_types.next([
|
|
206
|
+
LocationTypes.Airport,
|
|
207
|
+
LocationTypes.City,
|
|
208
|
+
LocationTypes.Office,
|
|
209
|
+
LocationTypes.Shortlist,
|
|
210
|
+
LocationTypes.TrainStation,
|
|
211
|
+
...propertyNumber
|
|
212
|
+
]);
|
|
222
213
|
if (searchService.shouldFetchAllOffices()) {
|
|
223
214
|
this.offices.next([]); // TODO fetch offices
|
|
224
215
|
}
|
|
@@ -1834,7 +1825,7 @@ export class HotelEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1834
1825
|
const termsAndConditions = this.getTermsAndCond(hotelRoom, hotelQuery, hotel.source === ServiceProvider.SabreCSL);
|
|
1835
1826
|
// bookedTravellersChunks.forEach((chunk: Traveller[], index: number) => {
|
|
1836
1827
|
return yield roomArray.reduce((current, chunk, index) => __awaiter(this, void 0, void 0, function* () {
|
|
1837
|
-
var _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;
|
|
1828
|
+
var _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
|
|
1838
1829
|
switch (yield current) {
|
|
1839
1830
|
case DifferentInvokdedUserReasons.cancel:
|
|
1840
1831
|
return DifferentInvokdedUserReasons.cancel;
|
|
@@ -1860,11 +1851,11 @@ export class HotelEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1860
1851
|
: 'Conferma',
|
|
1861
1852
|
county: hotelAaddress.addressLine3,
|
|
1862
1853
|
postcode: hotelAaddress.postOrZipCode,
|
|
1863
|
-
countryCode: this.location_type_select === LocationTypes.TrainStation &&
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
((
|
|
1867
|
-
|
|
1854
|
+
countryCode: this.location_type_select === LocationTypes.TrainStation && !hotelAaddress.countryCode
|
|
1855
|
+
? ((_k = this.trainsStation) === null || _k === void 0 ? void 0 : _k.countryCode) || ((_l = this.trainsStation) === null || _l === void 0 ? void 0 : _l.railstation.locationDetails.countryCode)
|
|
1856
|
+
: this.location_type_select === LocationTypes.Airport && !hotelAaddress.countryCode
|
|
1857
|
+
? ((_o = (_m = this.location) === null || _m === void 0 ? void 0 : _m.airport) === null || _o === void 0 ? void 0 : _o.countryCode) || ((_p = this.location) === null || _p === void 0 ? void 0 : _p.locationDetails.countryCode)
|
|
1858
|
+
: hotelAaddress.countryCode,
|
|
1868
1859
|
},
|
|
1869
1860
|
hotelDescription: hotel.group,
|
|
1870
1861
|
hotelFaxNumber: hotelAaddress.facsimile,
|
|
@@ -1879,9 +1870,9 @@ export class HotelEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1879
1870
|
hotelPreferred: hotel.preferred,
|
|
1880
1871
|
hotelDistance: {
|
|
1881
1872
|
search: hotel.location.distance.toFixed(2),
|
|
1882
|
-
airport: (
|
|
1883
|
-
train: (
|
|
1884
|
-
metro: (
|
|
1873
|
+
airport: (_r = (_q = hotel.transports) === null || _q === void 0 ? void 0 : _q.find(a => a.type == HotelDetailTypes.AIRPORT)) === null || _r === void 0 ? void 0 : _r.distance.toFixed(2),
|
|
1874
|
+
train: (_t = (_s = hotel.transports) === null || _s === void 0 ? void 0 : _s.find(a => a.type == HotelDetailTypes.TRAIN)) === null || _t === void 0 ? void 0 : _t.distance.toFixed(2),
|
|
1875
|
+
metro: (_v = (_u = hotel.transports) === null || _u === void 0 ? void 0 : _u.find(a => a.type == HotelDetailTypes.METRO)) === null || _v === void 0 ? void 0 : _v.distance.toFixed(2)
|
|
1885
1876
|
},
|
|
1886
1877
|
location: {
|
|
1887
1878
|
longitude: hotel.location.longitude,
|
|
@@ -1894,8 +1885,8 @@ export class HotelEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1894
1885
|
searchQuery,
|
|
1895
1886
|
outboundDate: hotelQuery.startDate,
|
|
1896
1887
|
inboundDate: hotelQuery.endDate,
|
|
1897
|
-
lowestPrice: (
|
|
1898
|
-
lowestPriceCurrency: (
|
|
1888
|
+
lowestPrice: (_w = this.cheapestPrice) === null || _w === void 0 ? void 0 : _w.amount,
|
|
1889
|
+
lowestPriceCurrency: (_x = this.cheapestPrice) === null || _x === void 0 ? void 0 : _x.currencyCode,
|
|
1899
1890
|
lowestPriceDetail: this.createLowestPriceDetail(hotelQuery),
|
|
1900
1891
|
co2PerItem: hotel.co2PerItem,
|
|
1901
1892
|
co2PerPassenger: hotel.co2PerPassenger,
|
|
@@ -2119,7 +2110,7 @@ export class HotelEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
2119
2110
|
: null;
|
|
2120
2111
|
fetchLocation$.subscribe((locations) => {
|
|
2121
2112
|
const locationMatch = query.postOrZipCode
|
|
2122
|
-
? locations.find((loc) => loc.postcode === query.postOrZipCode)
|
|
2113
|
+
? locations.find((loc) => loc.postcode === query.postOrZipCode || loc.name === query.postOrZipCode)
|
|
2123
2114
|
: locations.find((loc) => loc.name === query.cityName);
|
|
2124
2115
|
if (query.postOrZipCode) {
|
|
2125
2116
|
this.postcode = locationMatch || null;
|
|
@@ -2295,4 +2286,4 @@ export class HotelEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
2295
2286
|
}
|
|
2296
2287
|
HotelEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_hotel';
|
|
2297
2288
|
HotelEnterpriseSearch.STORAGE_SESSION_RESULTS = 'results_hotel';
|
|
2298
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90ZWwtZW50ZXJwcmlzZS1zZWFyY2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYnRzZXJ2aWNlcy9iYXNlL3NyYy9saWIvdmVuZG9yL2NsYXNzZXMvaG90ZWwtZW50ZXJwcmlzZS1zZWFyY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUd6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBYyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3RELE9BQU8sRUFJTCxhQUFhLEVBSWIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixhQUFhLEVBQ2Isa0JBQWtCLEVBTWxCLCtCQUErQixFQUMvQiw0QkFBNEIsRUFDNUIsZUFBZSxFQUNmLFFBQVEsRUFHUixnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLFVBQVUsRUFDVixjQUFjLEVBQ2Qsc0JBQXNCLEVBQ3ZCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUdMLGFBQWEsRUFVYixXQUFXLEdBVVosTUFBTSx3QkFBd0IsQ0FBQztBQVdoQyxPQUFPLEVBR0wsWUFBWSxFQUVaLFNBQVMsRUFFVCxnQkFBZ0IsRUFDakIsTUFBTSx3Q0FBd0MsQ0FBQztBQWdCaEQsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUt2RCxPQUFPLFNBQVMsTUFBTSx3QkFBd0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJekQsTUFBTSxzQkFBc0IsR0FBRyxDQUFD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IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEJhc2VFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi9iYXNlLWVudGVycHJpc2UnO1xuaW1wb3J0IHsgQmFzZVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG9mLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJhc2VFbnZpcm9ubWVudCB9IGZyb20gJy4vZW52aXJvbWVudCc7XG5pbXBvcnQgeyBCYXNlSG90ZWxBdmFsaWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9ob3RlbC1hdmFsbGliaWxpdHkuc2VydmljZSc7XG5pbXBvcnQge1xuICBDb3VudHJ5LFxuICBIb3RlbFF1b3RlUmVzdWx0LFxuICBIb3RlbFF1b3RlUmVzdWx0QXJyYXksXG4gIExvY2F0aW9uVHlwZXMsXG4gIE5nYkRhdGVTdHJ1Y3QsXG4gIExvY2F0aW9uRGV0YWlscyxcbiAgSG90ZWxBdmFsaWJpbGl0eVF1b3RlUmVzdWx0LFxuICBpbmNsdWRlZEV4cHJlc3Npb24sXG4gIGV4Y2x1ZGVkRXhwcmVzc2lvbixcbiAgU2VhcmNoSGFuZGxlcixcbiAgRXh0cmFTZWFyY2hIYW5kbGVyLFxuICBSZWNlbnRTZWFyY2gsXG4gIEFpcnBvcnRTZWFyY2hSZXN1bHRzLFxuICBIb3RlbERldGFpbHMsXG4gIEhvdGVsRGV0YWlsc0FycmF5LFxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0LFxuICBpbmNsdWRlZEFjY2Vzc2liaWxpdHlFeHByZXNzaW9uLFxuICBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLFxuICBTZXJ2aWNlUHJvdmlkZXIsXG4gIFJvb21UeXBlLFxuICBIb3RlbEF2YWxpYmlsaXR5UXVlcnksXG4gIEhvdGVsUm9vbVdpdGhMb2NhbFByaWNlLFxuICBEaXNhYmxlZEtleVdvcmRzLFxuICBUcmF2ZWxQb2xpY2llcyxcbiAgU3RhclJhdGluZyxcbiAgQ3VzdG9tZXJSYXRpbmcsXG4gIEFtZW5pdGllc1NlYXJjaEhhbmRsZXJcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHtcbiAgQmFza2V0SXRlbSxcbiAgQ3VycmVuY3lDb2RlLFxuICBEaXN0YW5jZVR5cGVzLFxuICBIb3RlbFJvb20sXG4gIEhvdGVsVGFnLFxuICBSYWlsU3RhdGlvbixcbiAgU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzLFxuICBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyxcbiAgU2VhcmNoRXVyb3N0YXJRdWVyeVZhcmlhYmxlcyxcbiAgU2VhcmNoSG90ZWxzUXVlcnlWYXJpYWJsZXMsXG4gIFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzLFxuICBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMsXG4gIFNlcnZpY2VUeXBlLFxuICBSb29tLFxuICBHZXRIb3RlbEJvb2tpbmdSZXN1bHQsXG4gIFNlYXJjaENhckhpcmVRdWVyeVZhcmlhYmxlcyxcbiAgTG9jYXRpb25EZXRhaWwsXG4gIEdldE11bHRpcGxlSG90ZWxSYXRpbmdSZXNwb25zZSxcbiAgSG90ZWxSYXRpbmdJZGVudGlmaWVycyxcbiAgSG90ZWxOaWdodCxcbiAgSG90ZWxQb2xpY3ksXG4gIEFpcnBvcnQsXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xuaW1wb3J0IHsgQmFzZUhvdGVsUXVvdGVGZXRjaGVyLCBIb3RlbFF1b3RlRmV0Y2hlclR5cGUgfSBmcm9tICcuLi9mZXRjaGVycy9ob3RlbC1xdW90ZS1mZXRjaGVyJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzdHJhY3RIdHRwQ2FsbFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9odHRwLWNhbGwuc2VydmljZSc7XG5cbmltcG9ydCB7IEhvdGVsQXZhbGluaWxpdHlGZXRjaGVyVHlwZSB9IGZyb20gJy4uL2ZldGNoZXJzL2hvdGVsLWF2YWxpYWJpbGl0eS1mZXRjaGVyJztcbmltcG9ydCB7XG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIERpc3BsYXlGaWx0ZXJTZXR0aW5ncyxcbiAgSG90ZWxFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlLFxuICBIb3RlbEZpbHRlcnMsXG4gIEhvdGVsVGVtcFBhcmFtcyxcbiAgSG90ZWxWaWV3LFxuICBSZXN1bHREZXRhaWxzLFxuICBIb3RlbERldGFpbFR5cGVzXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWhvdGVsLWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7IElDaGVhcGVzdFByaWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVhcGVzdC1wcmljZSc7XG5pbXBvcnQgeyBUcmF2ZWxsZXIgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XG5pbXBvcnQge1xuICBCYXNlU2VhcmNoQ29uZmVybWFRdWlja2xpc3RGZXRjaGVyLFxuICBDb25mZXJtYVF1aWNrbGlzdEZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2NvbmZlcm1hLXF1aWNrbGlzdC5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VHZXRSYWlsU3RhdGlvbkZldGNoZXIsXG4gIEdldFJhaWxTdGF0aW9uRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXJhaWwtc3RhdGlvbi5mZXRjaGVyJztcbmltcG9ydCB7IEhvdGVsUmVjZW50U2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvaG90ZWwtcmVjZW50LXNlYXJjaC1hcmdzLmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBBcHBseUhvdGVsUnVsZXNGZXRjaGVyVHlwZSxcbiAgQmFzZUhvdGVsUnVsZXNGZXRjaGVyXG59IGZyb20gJy4uL2ZldGNoZXJzL2FwcGx5LUpJVC1ob3RlbC1ydWxlcy5mZXRjaGVyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBVc2VyRmF2b3J1cml0ZSB9IGZyb20gJy4vdXNlci1mYXZvdXJpdGUuZW51bSc7XG5pbXBvcnQge1xuICBCYXNlR2V0UmVxdWVzdGVkSG90ZWxVcGRhdGVGZXRjaGVyLFxuICBHZXRSZXF1ZXN0ZWRIb3RlbFVwZGF0ZUZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1yZXF1ZXN0ZWQtaG90ZWwtdXBkYXRlLmZldGNoZXInO1xuaW1wb3J0IENvdW50cmllcyBmcm9tICcuLi9kYXRhL2NvdW50cmllcy5qc29uJztcbmltcG9ydCB7IEhvdGVsU29ydE9yZGVyIH0gZnJvbSAnLi9ob3RlbC1zb3J0LW9yZGVyLmVudW0nO1xuaW1wb3J0IHsgSG90ZWxVSVN0YXJzVXNlckZhdm9yaXRlUmVzcG9uc2UgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcblxuXG5jb25zdCBDTElFTlRfUFJFRkVSUkVEX1ZBTFVFID0gMjtcbmNvbnN0IEFHRU5UX1BSRUZFUlJFRF9WQUxVRSA9IDE7XG5cbmV4cG9ydCBjbGFzcyBIb3RlbEVudGVycHJpc2VTZWFyY2g8XG4gIEhRX1EgZXh0ZW5kcyBIb3RlbFF1b3RlRmV0Y2hlclR5cGUsXG4gIEhBX1EgZXh0ZW5kcyBIb3RlbEF2YWxpbmlsaXR5RmV0Y2hlclR5cGUsXG4gIFFMX1EgZXh0ZW5kcyBDb25mZXJtYVF1aWNrbGlzdEZldGNoZXJUeXBlLFxuICBHUlNfUSBleHRlbmRzIEdldFJhaWxTdGF0aW9uRmV0Y2hlclR5cGUsXG4gIEhSX1EgZXh0ZW5kcyBBcHBseUhvdGVsUnVsZXNGZXRjaGVyVHlwZSxcbiAgSFVfUSBleHRlbmRzIEdldFJlcXVlc3RlZEhvdGVsVXBkYXRlRmV0Y2hlclR5cGVcbj5cbiAgZXh0ZW5kcyBCYXNlRW50ZXJwcmlzZVNlYXJjaDxIb3RlbFRlbXBQYXJhbXMsIEhvdGVsUXVvdGVSZXN1bHRBcnJheSwgSG90ZWxEZXRhaWxzQXJyYXk+XG4gIGltcGxlbWVudHMgSG90ZWxFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlIHtcblxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyA9ICdzZWFyY2hfaG90ZWwnO1xuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAncmVzdWx0c19ob3RlbCc7XG5cbiAgcHVibGljIHR5cGU6IFNlcnZpY2VUeXBlID0gU2VydmljZVR5cGUuSG90ZWw7XG4gIHByaXZhdGUgdHJhdmVsbGVyczogVHJhdmVsbGVyW107XG4gIHB1YmxpYyBsb2NhdGlvbl90eXBlczogQmVoYXZpb3JTdWJqZWN0PExvY2F0aW9uVHlwZXNbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PExvY2F0aW9uVHlwZXNbXT4oXG4gICAgW11cbiAgKTtcbiAgcHVibGljIG9mZmljZXM6IEJlaGF2aW9yU3ViamVjdDxMb2NhdGlvblR5cGVzW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxMb2NhdGlvblR5cGVzW10+KFtdKTtcbiAgcHVibGljIGxhc3RBY3RpdmVQYWdlOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG4gIHB1YmxpYyBqaXRSdWxlc1JlY2VpdmVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFwcGx5U29ydGluZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgYmFja1RvVHlwZTogU2VydmljZVR5cGUgPSBudWxsO1xuXG4gIHJlYWRvbmx5IGdhbGxlcmllczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXTsgfSA9IHt9O1xuICBwcml2YXRlIG9jY3VwaWVkOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIHJlc3VsdHNfZGV0YWlsczogUmVzdWx0RGV0YWlscyA9IHtcbiAgICBjaGFpbnM6IG5ldyBTZXQ8c3RyaW5nPigpLFxuICAgIGFtZW5pdGllczogW10sXG4gICAgbWF4RGlzdGFuY2U6IDBcbiAgfTtcbiAgcHJpdmF0ZSBfY2hlY2tpbl9kYXRlX25nYjogTmdiRGF0ZVN0cnVjdDtcbiAgcHJpdmF0ZSBfY2hlY2tvdXRfZGF0ZV9uZ2I6IE5nYkRhdGVTdHJ1Y3Q7XG4gIHByaXZhdGUgX2Jvb2tlZFRyYXZlbGxlcnM6IFRyYXZlbGxlcltdID0gW107XG4gIHB1YmxpYyBob3RlbFJvb21SZWNlaXZlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgYWx0ZXJuYXRpdmVMb2NhdGlvbjogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgcHJpbWFyeUxvY2F0aW9uOiBzdHJpbmcgPSAnJztcbiAgZ2V0IGNoYWlucygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLnJlc3VsdHNfZGV0YWlscy5jaGFpbnNdO1xuICB9XG5cbiAgZ2V0IGFtZW5pdGllcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLnJlc3VsdHNfZGV0YWlscy5hbWVuaXRpZXNdO1xuICB9XG5cbiAgZ2V0IG1heERpc3RhbmNlKCk6IG51bWJlciB7XG4gICAgdGhpcy5maWx0ZXJzLmRpc3RhbmNlUmFuZ2UubWF4ID0gTWF0aC5jZWlsKFxuICAgICAgTWF0aC5tYXgoLi4udGhpcy5yZXN1bHRzLnZhbHVlLm1hcChvID0+IG8ubG9jYXRpb24uZGlzdGFuY2UpKVxuICAgICk7XG4gICAgdGhpcy5yZXN1bHRzX2RldGFpbHMubWF4RGlzdGFuY2UgPSB0aGlzLmZpbHRlcnMuZGlzdGFuY2VSYW5nZS5tYXg7XG4gICAgcmV0dXJuIHRoaXMucmVzdWx0c19kZXRhaWxzLm1heERpc3RhbmNlO1xuICB9XG5cbiAgZ2V0IG1heFByaWNlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLmZpbHRlcnMucHJpY2VSYW5nZS5tYXgpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jdXJyZW5jeTtcbiAgfVxuXG4gIHNldCBjdXJyZW5jeSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmN1cnJlbmN5ID0gdmFsdWU7XG4gIH1cbiAgLy8gRXZlbnQgRW1pdHRlcnNcbiAgcHVibGljIGZpbHRlckNoYW5nZTogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHVibGljIHNlbGVjdEl0ZW1NYXBWaWV3OiBTdWJqZWN0PEhvdGVsUXVvdGVSZXN1bHRbXT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHB1YmxpYyBkaXNwbGF5OiBEaXNwbGF5RmlsdGVyU2V0dGluZ3MgPSB7XG4gICAgbWlucHJpY2U6IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxcbiAgICBtYXhwcmljZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgIGZpbHRlcnM6IHtcbiAgICAgIGJyZWFrZmFzdFR5cGU6IFtdXG4gICAgfVxuICB9O1xuXG4gIC8vIHB1YmxpYyB2YXJpYWJsZXNcbiAgcHVibGljIG1pbl9kYXRlID0ge1xuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsIC8vIG5nYkRhdGUgbW9udGhzIGFyZSBub3QgMCBpbmRleGVkXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKClcbiAgfTtcblxuICBwdWJsaWMgbWluX3JldHVybl9kYXRlID0ge1xuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsIC8vIG5nYkRhdGUgbW9udGhzIGFyZSBub3QgMCBpbmRleGVkXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKCkgKyAxIC8vIG1pbiAxIG5pZ2h0IHN0YXlcbiAgfTtcblxuICBwdWJsaWMgaGlkZGVuRXh0cmFGaWx0ZXJzOiB7IFtrZXkgaW4gRXh0cmFTZWFyY2hIYW5kbGVyXTogYm9vbGVhbiB9ID0ge1xuICAgIFtFeHRyYVNlYXJjaEhhbmRsZXIuRkVNQUxFX0ZSSUVORExZXTogdHJ1ZSxcbiAgICBbRXh0cmFTZWFyY2hIYW5kbGVyLkdSRUVOX0hPVEVMXTogdHJ1ZSxcbiAgICBbRXh0cmFTZWFyY2hIYW5kbGVyLkNUTV9QQVJUTkVSU106IHRydWUsXG4gICAgW0V4dHJhU2VhcmNoSGFuZGxlci5GQ0RPX0hPVEVMXTogdHJ1ZSxcbiAgICBbRXh0cmFTZWFyY2hIYW5kbGVyLlJFRlVOREFCTEVdOiB0cnVlLFxuICAgIFtFeHRyYVNlYXJjaEhhbmRsZXIuTk9OX1JFRlVOREFCTEVdOiB0cnVlLFxuICAgIFtFeHRyYVNlYXJjaEhhbmRsZXIuQUNDRVNTSUJMRV9ST09NXTogdHJ1ZSxcbiAgICBbRXh0cmFTZWFyY2hIYW5kbGVyLkFWQUlMQUJJTElUWV06IHRydWVcbiAgfVxuXG4gIHB1YmxpYyBoaWRkZW5BbWVuaXRpZXNGaWx0ZXJzOiB7IFtrZXkgaW4gQW1lbml0aWVzU2VhcmNoSGFuZGxlcl06IGJvb2xlYW4gfSA9IHtcbiAgICBbQW1lbml0aWVzU2VhcmNoSGFuZGxlci5BSVJfQ09ORElUSU9OSU5HXTogdHJ1ZSxcbiAgICBbQW1lbml0aWVzU2VhcmNoSGFuZGxlci5CVVNJTkVTU19DRU5UUkVdOiB0cnVlLFxuICAgIFtBbWVuaXRpZXNTZWFyY2hIYW5kbGVyLkVMRUNUUklDX0NBUl9DSEFSR0lOR19QT0lOVF06IHRydWUsXG4gICAgW0FtZW5pdGllc1NlYXJjaEhhbmRsZXIuRVhQUkVTU19DSEVDS09VVF06IHRydWUsXG4gICAgW0FtZW5pdGllc1NlYXJjaEhhbmRsZXIuR09MRl9GQUNJTElUSUVTXTogdHJ1ZSxcbiAgICBbQW1lbml0aWVzU2VhcmNoSGFuZGxlci5PTl9TSVRFX1NBRkVdOiB0cnVlLFxuICAgIFtBbWVuaXRpZXNTZWFyY2hIYW5kbGVyLlBBUktJTkddOiB0cnVlLFxuICAgIFtBbWVuaXRpZXNTZWFyY2hIYW5kbGVyLlJFU1RBVVJBTlRdOiB0cnVlLFxuICAgIFtBbWVuaXRpZXNTZWFyY2hIYW5kbGVyLlJPT01fU0VSVklDRV8yNF9IT1VSXTogdHJ1ZSxcbiAgICBbQW1lbml0aWVzU2VhcmNoSGFuZGxlci5TV0lNTUlOR19QT09MXTogdHJ1ZSxcbiAgICBbQW1lbml0aWVzU2VhcmNoSGFuZGxlci5XSEVFTENIQUlSX0FDQ0VTU106IHRydWUsXG4gICAgW0FtZW5pdGllc1NlYXJjaEhhbmRsZXIuV0lGSV06IHRydWUsXG4gICAgW0FtZW5pdGllc1NlYXJjaEhhbmRsZXIuRUNPX0ZSSUVORExZXTogdHJ1ZSxcbiAgfVxuXG4gIHB1YmxpYyBoaWRkZW5TdGFyUmF0aW5nRmlsdGVyczogeyBba2V5IGluIFN0YXJSYXRpbmddOiBib29sZWFuIH0gPSB7XG4gICAgW1N0YXJSYXRpbmcuVHdvU3Rhcl06IHRydWUsXG4gICAgW1N0YXJSYXRpbmcuVGhyZWVTdGFyXTogdHJ1ZSxcbiAgICBbU3RhclJhdGluZy5Gb3VyU3Rhcl06IHRydWUsXG4gICAgW1N0YXJSYXRpbmcuRml2ZVN0YXJdOiB0cnVlLFxuICAgIFtTdGFyUmF0aW5nLlVucmF0ZWRdOiB0cnVlXG4gIH1cblxuICAvLyBwcml2YXRlIHZhcmlhYmxlc1xuICAvLyBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRpbWVzIGhlcmUgLSBtYXliZSBub3JtYWxpc2UgdGhlc2UgaW4gdGhlIHJlcXVlc3QgYm9keT9cblxuICBwcml2YXRlIGxvY2FsRmlsdGVyczpIb3RlbEZpbHRlcnMgPSBuZXcgSG90ZWxGaWx0ZXJzKCk7XG5cbiAgcHVibGljIGN1cnJlbnRWaWV3OiBIb3RlbFZpZXcgPSBIb3RlbFZpZXcuTElTVDtcbiAgcHJpdmF0ZSB1c2VyQ3VycmVuY3k6IHN0cmluZztcbiAgLy8gRm9yIE5nRm9yaW5nIG92ZXIgaW4gdGhlIHRlbXBsYXRlc1xuICBwcml2YXRlIF9tYXhfbm9fb2Zfcm9vbXMgPSA0O1xuICBwcml2YXRlIF9tYXhfcm9vbXNfYXJyYXkgPSBuZXcgQXJyYXkodGhpcy5fbWF4X25vX29mX3Jvb21zKS5maWxsKDApO1xuICBwcml2YXRlIF9tYXhfbm9fb2Zfb2NjdXBhbnRzID0gODtcbiAgcHJpdmF0ZSBfbWF4X29jY3VwYW50X2FycmF5ID0gbmV3IEFycmF5KHRoaXMuX21heF9ub19vZl9vY2N1cGFudHMpLmZpbGwoMCk7XG4gIHByaXZhdGUgX2Rpc3RhbmNlX2xpc3QgPSBbMSwgMiwgMywgNCwgNSwgMTAsIDE1LCAyMCwgMjVdOyAvLyBob3RlbFNlYXJjaEZvcm1Db25maWd1cmF0aW9uLmRpc3RhbmNlIGNvbmZpZ1xuICBwcml2YXRlIF9kZWZhdWx0X2N1cnJlbmN5OiBzdHJpbmcgPSBudWxsO1xuICBwcml2YXRlIF9jcm93blJhdGVzT25seTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGhvdGVsc1JhdGluZ3M6IEdldE11bHRpcGxlSG90ZWxSYXRpbmdSZXNwb25zZTtcbiAgLy8gZ2V0dGVycyBhbmQgc2V0dGVyc1xuXG4gIGdldCBjcm93blJhdGVzT25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY3Jvd25SYXRlc09ubHk7XG4gIH1cblxuICBzZXQgY3Jvd25SYXRlc09ubHkobmV3VmFsOiBib29sZWFuKSB7XG4gICAgLy8gcmVzZXQgcHJldmlvdXMgdmFsdWVcbiAgICB0aGlzLmZpbHRlcnMuY3Jvd25QcmVmZXJyZWQgPSBbXTtcbiAgICB0aGlzLl9jcm93blJhdGVzT25seSA9IG5ld1ZhbDtcbiAgICBpZiAobmV3VmFsKSB7XG4gICAgICB0aGlzLmZpbHRlcnMuY3Jvd25QcmVmZXJyZWRbMF0gPSBTZWFyY2hIYW5kbGVyLkNST1dOX09OTFk7ICAvLyBwcmVzZXQgdGhlIGZpbHRlclxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcnMuY3Jvd25QcmVmZXJyZWQgPSBbXTsgIC8vIHByZXNldCB0aGUgZmlsdGVyXG4gICAgfVxuICB9XG5cbiAgZ2V0IGNoZWNraW5fZGF0ZV9uZ2IoKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX2NoZWNraW5fZGF0ZV9uZ2I7XG4gIH1cblxuICBzZXQgY2hlY2tpbl9kYXRlX25nYih2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xuICAgIHRoaXMuX2NoZWNraW5fZGF0ZV9uZ2IgPSB2YWx1ZTtcblxuICAgIHRoaXMudGVtcFBhcmFtcy5jaGVja2luX2RhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodmFsdWUpO1xuICAgIHRoaXMuY2hlY2tpbl9kYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBjaGVja291dF9kYXRlX25nYigpOiBOZ2JEYXRlU3RydWN0IHtcbiAgICByZXR1cm4gdGhpcy5fY2hlY2tvdXRfZGF0ZV9uZ2I7XG4gIH1cblxuICBzZXQgY2hlY2tvdXRfZGF0ZV9uZ2IodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcbiAgICB0aGlzLl9jaGVja291dF9kYXRlX25nYiA9IHZhbHVlO1xuICAgIHRoaXMudGVtcFBhcmFtcy5jaGVja291dF9kYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHZhbHVlKTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgY2hlY2tpbl9kYXRlKCk6IG1vbWVudC5Nb21lbnQge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hlY2tpbl9kYXRlO1xuICB9XG5cbiAgc2V0IGNoZWNraW5fZGF0ZShuZXdEYXRlOiBtb21lbnQuTW9tZW50KSB7XG4gICAgaWYgKG5ld0RhdGUgJiYgbmV3RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaGVja2luX2RhdGUgPSBtb21lbnQobmV3RGF0ZSk7XG4gICAgICB0aGlzLl9jaGVja2luX2RhdGVfbmdiID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG5ld0RhdGUpO1xuICAgICAgaWYgKG5ld0RhdGUuaXNTYW1lT3JBZnRlcih0aGlzLnRlbXBQYXJhbXMuY2hlY2tvdXRfZGF0ZSkpIHtcbiAgICAgICAgdGhpcy5jaGVja291dF9kYXRlID0gbW9tZW50KG5ld0RhdGUpLmFkZCgxLCAnZGF5Jyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNoZWNrb3V0X2RhdGUoKTogbW9tZW50Lk1vbWVudCB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaGVja291dF9kYXRlO1xuICB9XG5cbiAgc2V0IGNoZWNrb3V0X2RhdGUobmV3RGF0ZTogbW9tZW50Lk1vbWVudCkge1xuICAgIGlmIChuZXdEYXRlICYmIG5ld0RhdGUuaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLnRlbXBQYXJhbXMuY2hlY2tvdXRfZGF0ZSA9IG5ld0RhdGU7XG4gICAgICB0aGlzLmNoZWNrb3V0X2RhdGVfbmdiID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG5ld0RhdGUpO1xuICAgICAgdGhpcy5faXNWYWxpZCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBub19vZl9yb29tcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubm9fb2Zfcm9vbXM7XG4gIH1cblxuICBzZXQgbm9fb2Zfcm9vbXMobmV3Um9vbXM6IG51bWJlcikge1xuICAgIGlmIChuZXdSb29tcyA+IDQgfHwgbmV3Um9vbXMgPCAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50ZW1wUGFyYW1zLm5vX29mX3Jvb21zID0gbmV3Um9vbXM7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IG5vX29mX29jY3VwYW50cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubm9fb2Zfb2NjdXBhbnRzO1xuICB9XG5cbiAgc2V0IG5vX29mX29jY3VwYW50cyhuZXdPY2M6IG51bWJlcikge1xuICAgIGlmIChuZXdPY2MgPCAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50ZW1wUGFyYW1zLm5vX29mX29jY3VwYW50cyA9IG5ld09jYztcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgZGVmYXVsdF9jdXJyZW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY3VycmVuY3k7XG4gIH1cblxuICBzZXQgZGVmYXVsdF9jdXJyZW5jeShjdXJyZW5jeTogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmN1cnJlbmN5ID0gY3VycmVuY3k7XG4gIH1cblxuICAvLyBtYXkgaGF2ZSB0byBtb2RpZnkgdGhlc2VcbiAgZ2V0IGxvY2F0aW9uKCk6IExvY2F0aW9uRGV0YWlscyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvbjtcbiAgfVxuXG4gIHNldCBsb2NhdGlvbihuZXdMb2M6IExvY2F0aW9uRGV0YWlscyApIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMubG9jYXRpb24gPSBuZXdMb2M7XG5cbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgZGlzdGFuY2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmRpc3RhbmNlO1xuICB9XG5cbiAgc2V0IGRpc3RhbmNlKG5ld0Rpc3Q6IG51bWJlcikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5kaXN0YW5jZSA9IG5ld0Rpc3Q7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IHByZWZlcmVkX2hvdGVsc19vbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVyZWRfaG90ZWxzX29ubHk7XG4gIH1cblxuICBzZXQgcHJlZmVyZWRfaG90ZWxzX29ubHkobmV3UHJlZjogYm9vbGVhbikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJlZF9ob3RlbHNfb25seSA9IG5ld1ByZWY7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGNvdW50cnkoKTogQ291bnRyeSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jb3VudHJ5O1xuICB9XG5cbiAgc2V0IGNvdW50cnkobmV3Q29udDogQ291bnRyeSkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5jb3VudHJ5ID0gbmV3Q29udDtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgcHJvcGVydHlOdW1iZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByb3BlcnR5TnVtYmVyO1xuICB9XG5cbiAgc2V0IHByb3BlcnR5TnVtYmVyKHByb3BlcnROdW1iZXI6IHN0cmluZykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5wcm9wZXJ0eU51bWJlciA9IHByb3BlcnROdW1iZXI7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IHBvc3Rjb2RlKCk6IExvY2F0aW9uRGV0YWlscyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZTtcbiAgfVxuXG4gIHNldCBwb3N0Y29kZShwb3N0Y29kZTogTG9jYXRpb25EZXRhaWxzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnBvc3Rjb2RlID0gcG9zdGNvZGU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IHRyYWluc1N0YXRpb24oKTogTG9jYXRpb25EZXRhaWxzIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnRyYWluc1N0YXRpb247XG4gIH1cblxuICBzZXQgdHJhaW5zU3RhdGlvbihzdGF0aW9uOiBMb2NhdGlvbkRldGFpbHMpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMudHJhaW5zU3RhdGlvbiA9IHN0YXRpb247XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IG9mZmljZSgpOiBMb2NhdGlvbkRldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub2ZmaWNlO1xuICB9XG5cbiAgc2V0IG9mZmljZShvZmZpY2U6IExvY2F0aW9uRGV0YWlscykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5vZmZpY2UgPSBvZmZpY2U7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgLy8gQWRkaXRpb25hbCBWYXJpYWJsZXNcbiAgZ2V0IGhvdGVsX25hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmhvdGVsX25hbWU7XG4gIH1cblxuICBzZXQgaG90ZWxfbmFtZShuZXdOYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuaG90ZWxfbmFtZSA9IG5ld05hbWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGhvdGVsX2NoYWluKCk6IHN0cmluZyB8IHsgbmFtZTogc3RyaW5nOyB9e1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaG90ZWxfY2hhaW47XG4gIH1cblxuICBzZXQgaG90ZWxfY2hhaW4obmV3Q2hhaW46IHN0cmluZyB8IHsgbmFtZTogc3RyaW5nOyB9KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmhvdGVsX2NoYWluID0gbmV3Q2hhaW47XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgLy8gR2V0dGVycyBPbmx5XG5cbiAgZ2V0IG1heF9yb29tc19hcnJheSgpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX21heF9yb29tc19hcnJheTtcbiAgfVxuXG4gIGdldCBtYXhfb2NjdXBhbnRfYXJyYXkoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLl9tYXhfb2NjdXBhbnRfYXJyYXk7XG4gIH1cblxuICBnZXQgbWF4X25vX29mX3Jvb21zKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heF9ub19vZl9yb29tcztcbiAgfVxuXG4gIGdldCBkaXN0YW5jZV9saXN0KCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzdGFuY2VfbGlzdDtcbiAgfVxuXG4gIGdldCBsb2NhdGlvbl90eXBlX3NlbGVjdCgpOiBMb2NhdGlvblR5cGVzIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uX3R5cGVfc2VsZWN0O1xuICB9XG5cbiAgc2V0IGxvY2F0aW9uX3R5cGVfc2VsZWN0KHZhbHVlOiBMb2NhdGlvblR5cGVzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uX3R5cGVfc2VsZWN0ID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGZpbHRlcnMoKTogSG90ZWxGaWx0ZXJzIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbEZpbHRlcnM7XG4gIH1cblxuICBnZXQgZGlzYmFpbGl0eUtleXdvcmRzKCk6IERpc2FibGVkS2V5V29yZHNbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIERpc2FibGVkS2V5V29yZHMuZGlzYWJpbGl0eSxcbiAgICAgIERpc2FibGVkS2V5V29yZHMuYWNjZXNzLFxuICAgICAgRGlzYWJsZWRLZXlXb3Jkcy5kaXNhYmxlZCxcbiAgICAgIERpc2FibGVkS2V5V29yZHMuYWNjZXNzaWJpbGl0eSxcbiAgICAgIERpc2FibGVkS2V5V29yZHMubW9iaWxpdHlfYWNjZXNzLFxuICAgICAgRGlzYWJsZWRLZXlXb3Jkcy5hY2Nlc3NpYmxlX2Rpc2FibGVkLFxuICAgICAgRGlzYWJsZWRLZXlXb3Jkcy5hY2Nlc3NpYmxlXG4gICAgXTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaG90ZWxGZXRjaGVyOiBCYXNlSG90ZWxRdW90ZUZldGNoZXI8SFFfUT4sXG4gICAgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxuICAgIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZUludGVyZmFjZSxcbiAgICBwcml2YXRlIGVudmlyb25tZW50OiBCYXNlRW52aXJvbm1lbnQsXG4gICAgcHJpdmF0ZSBhdmFsaWFiaWxpdHlTZXJ2aWNlOiBCYXNlSG90ZWxBdmFsaWJpbGl0eVNlcnZpY2U8SEFfUT4sXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxuICAgIHNlYXJjaFNlcnZpY2U6IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHByaXZhdGUgaHR0cENhbGxTZXJ2aWNlOiBBYnN0cmFjdEh0dHBDYWxsU2VydmljZSxcbiAgICBwcml2YXRlIHF1aWNrTGlzdEZldGNoZXI6IEJhc2VTZWFyY2hDb25mZXJtYVF1aWNrbGlzdEZldGNoZXI8UUxfUT4sXG4gICAgcHJpdmF0ZSBnZXRSYWlsU3RhdGlvbkZldGNoZXI6IEJhc2VHZXRSYWlsU3RhdGlvbkZldGNoZXI8R1JTX1E+LFxuICAgIHByaXZhdGUgYXBwbHlIb3RlbFJ1bGVzRmV0Y2hlcjogQmFzZUhvdGVsUnVsZXNGZXRjaGVyPEhSX1E+LFxuICAgIHByaXZhdGUgZ2V0UmVxdWVzdGVkSG90ZWxVcGRhdGVGZXRjaGVyOiBCYXNlR2V0UmVxdWVzdGVkSG90ZWxVcGRhdGVGZXRjaGVyPEhVX1E+XG4gICkge1xuICAgIHN1cGVyKHN0b3JhZ2VTZXJ2aWNlLCBoZWxwZXJzLCBzZWFyY2hTZXJ2aWNlLCB1c2VyU2VydmljZSk7XG4gICAgdGhpcy5yZXN1bHRzX2RldGFpbHMuY2hhaW5zID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgZGF0YToge1xuICAgICAgdGVtcFBhcmFtczogSG90ZWxUZW1wUGFyYW1zO1xuICAgIH0gPSBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbShIb3RlbEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUykgfHwge1xuICAgICAgdGVtcFBhcmFtczoge30gYXMgSG90ZWxUZW1wUGFyYW1zXG4gICAgfTtcblxuICAgIHRoaXMuZGVmYXVsdF9jdXJyZW5jeSA9IHRoaXMudGVtcFBhcmFtcy5jdXJyZW5jeVxuICAgICAgPyB0aGlzLnRlbXBQYXJhbXMuY3VycmVuY3lcbiAgICAgIDogdGhpcy5fZGVmYXVsdF9jdXJyZW5jeTtcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXMoc2VhcmNoU2VydmljZS5tYWtlSG90ZWxRdWVyeShkYXRhLnRlbXBQYXJhbXMpKTtcbiAgICB1c2VyU2VydmljZS5mdWxsVXNlckRldGFpbHMudXNlckNvbmZpZ3Muc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgLy8gdGhpcy51c2VyQ29uZmlnLm5leHQoZGF0YSk7XG4gICAgICAvLyBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGNvbnN0IGhvdGVsU2VhcmNoRm9ybUNvbmZpZ3VyYXRpb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdDx7XG4gICAgICAgICAgaG90ZWxEZWZhdWx0czoge1xuICAgICAgICAgICAgY291bnRyeTogQ291bnRyeTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGRlZmF1bHRTZWFyY2hPcHRpb246IHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IExvY2F0aW9uVHlwZXM7XG4gICAgICAgICAgfTtcbiAgICAgICAgfT4oVXNlckZhdm9ydXJpdGUuSG90ZWxTZWFyY2hGb3JtQ29uZmlndXJhdGlvbik7XG4gICAgICAgIHRoaXMubG9jYXRpb25fdHlwZV9zZWxlY3QgPSBob3RlbFNlYXJjaEZvcm1Db25maWd1cmF0aW9uPy5kZWZhdWx0U2VhcmNoT3B0aW9uPy5wcm9kdWN0IHx8IHRoaXMubG9jYXRpb25fdHlwZV9zZWxlY3Q7XG4gICAgICAgIHRoaXMuY291bnRyeSA9IGhvdGVsU2VhcmNoRm9ybUNvbmZpZ3VyYXRpb24/LmhvdGVsRGVmYXVsdHM/LmNvdW50cnkgfHwgdGhpcy5jb3VudHJ5O1xuXG4gICAgICAgIHRoaXMuYWx0ZXJuYXRpdmVMb2NhdGlvbiA9IG51bGw7XG4gICAgICAgIHRoaXMucHJpbWFyeUxvY2F0aW9uID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhPy5ob3RlbERlZmF1bHRzKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyhzZWFyY2hTZXJ2aWNlLm1ha2VIb3RlbFF1ZXJ5KGRhdGE/LmhvdGVsRGVmYXVsdHM/LmNvbmZpZykpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChzZWFyY2hTZXJ2aWNlLnNob3VsZEFkZFRyYXZlbGxlclN1YnNjcmlwdGlvbigpKSB7XG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZSgodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcbiAgICAgICAgY29uc3Qgc3BsaXRUcmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLnNlbGVjdGVkVHJhdmVsbGVycyh0cmF2ZWxsZXJzLCBTZXJ2aWNlVHlwZS5Ib3RlbCk7XG4gICAgICAgIHRoaXMudGVtcFBhcmFtcy5ub19vZl9vY2N1cGFudHMgPSBzcGxpdFRyYXZlbGxlcnMuYWR1bHRzLmxlbmd0aDtcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcbiAgICAgICAgdGhpcy5faXNWYWxpZCgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0cyA9XG4gICAgICBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbUFzTGlzdDxIb3RlbERldGFpbHNBcnJheT4odGhpcy5yZXN1bHRzU2Vzc2lvbk5hbWUpIHx8IFtdO1xuICAgICAgcmVzdWx0cy5mb3JFYWNoKChob3RlbDogSG90ZWxEZXRhaWxzKSA9PiB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hTZXJ2aWNlLmNhbkJvb2soU2VydmljZVR5cGUuSG90ZWwpKSB7XG4gICAgICAgIC8vIG5lZWQgdGhpcyBjaGVjayBiZWNhdXNlIG9uIHJlZnJlc2ggd2UgYXJlIGdldHRpbmcgZXJyb3JzIC0gdGhlb3J5IHRoYXQgdXNlciBoYXNuJ3QgZnVsbHkgbG9hZGVkIGluIHlldFxuICAgICAgICB0aGlzLmF2YWxpYWJpbGl0eVNlcnZpY2UuZ2V0QXZhaWxhYmlsaXR5Rm9ySWQodGhpcy5tYWtlSG90ZWxBdmFsaWxpdHlPYmplY3QoaG90ZWwpLCBob3RlbCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXN1bHRzLmZvckVhY2goKGhvdGVsUmVzdWx0OiBIb3RlbERldGFpbHMpID0+IHtcbiAgICAgIHRoaXMucmVzdWx0c19kZXRhaWxzLmNoYWlucy5hZGQoaG90ZWxSZXN1bHQuZ3JvdXApO1xuICAgIH0pO1xuICAgIHRoaXMuZnVsbFJlc3VsdHMgPSByZXN1bHRzO1xuICAgIHRoaXMuZ2V0SG90ZWxSYXRpbmdzKHJlc3VsdHMpO1xuICAgIHRoaXMuX2NoZWFwZXN0UmVzdWx0UHJpY2UgPSB0aGlzLnVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHMpO1xuICAgIHRoaXMuYXZlcmFnZUNvMlBlckl0ZW0gPSB0aGlzLmhlbHBlcnMuY2FsY3VsYXRlQXZlcmFnZUNvMlBlckl0ZW0ocmVzdWx0cyk7XG4gICAgdGhpcy5qaXRSdWxlc1JlY2VpdmVkLm5leHQoZmFsc2UpO1xuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcblxuICAgIHRoaXMudXNlclNlcnZpY2UuY2hhbmdlVXNlci5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydHlOdW1iZXIgPSB0aGlzLnVzZXJTZXJ2aWNlLnVzZXJJc0FnZW50KCkgPyBbTG9jYXRpb25UeXBlcy5Qcm9wZXJ0eU51bWJlcl06W11cbiAgICAgIGlmICh0aGlzLnVzZXJTZXJ2aWNlLnVzZXJIYXNTZXJ2aWNlUHJvdmlkZXIoU2VydmljZVR5cGUuSG90ZWwsIFNlcnZpY2VQcm92aWRlci5Db25maXJtYSkpIHtcbiAgICAgICAgdGhpcy5sb2NhdGlvbl90eXBlcy5uZXh0KFtcbiAgICAgICAgICBMb2NhdGlvblR5cGVzLkFpcnBvcnQsXG4gICAgICAgICAgTG9jYXRpb25UeXBlcy5DaXR5LFxuICAgICAgICAgIExvY2F0aW9uVHlwZXMuT2ZmaWNlLFxuICAgICAgICAgIExvY2F0aW9uVHlwZXMuU2hvcnRsaXN0LFxuICAgICAgICAgIExvY2F0aW9uVHlwZXMuVHJhaW5TdGF0aW9uLFxuICAgICAgICAgIC4uLnByb3BlcnR5TnVtYmVyXG4gICAgICAgIF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2NhdGlvbl90eXBlcy5uZXh0KFtcbiAgICAgICAgICBMb2NhdGlvblR5cGVzLkFpcnBvcnQsXG4gICAgICAgICAgTG9jYXRpb25UeXBlcy5DaXR5LFxuICAgICAgICAgIExvY2F0aW9uVHlwZXMuVHJhaW5TdGF0aW9uLFxuICAgICAgICAgIC4uLnByb3BlcnR5TnVtYmVyXG4gICAgICAgIF0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRGZXRjaEFsbE9mZmljZXMoKSkge1xuICAgICAgICB0aGlzLm9mZmljZXMubmV4dChbXSk7IC8vIFRPRE8gZmV0Y2ggb2ZmaWNlc1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5sb2NhbEZpbHRlcnMgPSBuZXcgSG90ZWxGaWx0ZXJzKCk7XG4gICAgdGhpcy5hdmFsaWFiaWxpdHlTZXJ2aWNlLmZldGNoaW5nLnN1YnNjcmliZSgoaXNGZXRjaGluZzogYm9vbGVhbikgPT4ge1xuICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UubmV4dCh0cnVlKTtcbiAgICAgIC8vIGlmICghaXNGZXRjaGluZykgeyAvLyAhIC0gTm90IHdhaXRpbmcsIG90aGVyd2lzZSBnbzIgd2FzIHdhaXRpbmcgdW50aWwgYWxsIGhvdGVscyBoYWQgbG9hZGVkLCB0aGlzIHRvb2sgbWludXRlcyAtIGlmIHdlIG5lZWQgdGhpcyBiYWNrIGZpZ3VyZSBvdXQgYSBiZXR0ZXIgc29sdXRpb24gLSBFZFxuICAgICAgLy8gV2UndmUganVzdCBmaW5pc2hlZCBmZXRjaGluZyBhdmFsaWJpbGl0eSBzbyB1cGRhdGUgZmlsdGVycy5cbiAgICAgIC8vIGNvbnNvbGUud2FybignKysrIEZldGNoZWQgKysrJyk7XG4gICAgICBjb25zdCBtYXhOdW1iZXIgPSB0aGlzLmF2YWxpYWJpbGl0eVNlcnZpY2UubWF4UHJpY2VGb3JDdXJyZW5jeSgnR0JQJyk7XG4gICAgICBpZiAobWF4TnVtYmVyID4gMCAmJiAhdGhpcy5maWx0ZXJzLnByaWNlUmFuZ2UubWF4ICYmICF0aGlzLmxvY2FsRmlsdGVycy5wcmljZVJhbmdlLm1heCkge1xuICAgICAgICB0aGlzLmZpbHRlcnMucHJpY2VSYW5nZS5tYXggPSBtYXhOdW1iZXI7XG4gICAgICAgIHRoaXMubG9jYWxGaWx0ZXJzLnByaWNlUmFuZ2UubWF4ID0gbWF4TnVtYmVyO1xuICAgICAgfVxuICAgICAgdGhpcy5fY2hlYXBlc3RSZXN1bHRQcmljZSA9IHRoaXMudXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0cyk7XG4gICAgICBpZiAodGhpcy5zZWFyY2hTZXJ2aWNlLmNhbkJvb2soU2VydmljZVR5cGUuSG90ZWwpKSB7XG4gICAgICAgIC8vIG5lZWQgdGhpcyBjaGVjayBiZWNhdXNlIG9uIHJlZnJlc2ggd2UgYXJlIGdldHRpbmcgZXJyb3JzIC0gdGhlb3J5IHRoYXQgdXNlciBoYXNuJ3QgZnVsbHkgbG9hZGVkIGluIHlldFxuICAgICAgICAvLyBjb25zb2xlLndhcm4oJysrKyBBcHBseWluZyBUcmF2ZWwgUnVsZXMgKysrJyk7XG4gICAgICAgIHRoaXMuX2FwcGx5VHJhdmVsUnVsZXMoKTtcbiAgICAgICAgLy8gdGhpcy5yZWFwcGx5U29ydGluZy5uZXh0KHRydWUpO1xuICAgICAgfVxuICAgICAgLy8gfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0SG90ZWxSYXRpbmdzKHJlc3VsdHM6IEhvdGVsRGV0YWlsc1tdKTogdm9pZCB7XG4gICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHJhdGluZ3NBcmdzOiBIb3RlbFJhdGluZ0lkZW50aWZpZXJzW10gPSByZXN1bHRzLm1hcCgoaG90ZWw6IEhvdGVsRGV0YWlscykgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhvdGVsR3JvdXBOYW1lOiBob3RlbC5ncm91cCxcbiAgICAgICAgICBob3RlbE5hbWU6IGhvdGVsLm5hbWVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldE11bHRpcGxlSG90ZWxSYXRpbmdzKHJhdGluZ3NBcmdzKS5zdWJzY3JpYmUoKGhvdGVsc1JhdGluZ3M6IEdldE11bHRpcGxlSG90ZWxSYXRpbmdSZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmhvdGVsc1JhdGluZ3MgPSBob3RlbHNSYXRpbmdzO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NSZXN1bHRzKHJlc3VsdHNUb01hcDogSG90ZWxRdW90ZVJlc3VsdEFycmF5KSB7XG4gICAgdGhpcy5yZXN1bHRzX2RldGFpbHMubWF4RGlzdGFuY2UgPSAwO1xuICAgIHRoaXMucmVzdWx0c19kZXRhaWxzLmNoYWlucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHJldHVybiByZXN1bHRzVG9NYXAubWFwKChob3RlbFJlc3VsdDogSG90ZWxRdW90ZVJlc3VsdCwgaW5kZXg6IG51bWJlcik6IEhvdGVsRGV0YWlscyA9PiB7XG4gICAgICB0aGlzLnJlc3VsdHNfZGV0YWlscy5tYXhEaXN0YW5jZSA9IE1hdGgubWF4KFxuICAgICAgICB0aGlzLnJlc3VsdHNfZGV0YWlscy5tYXhEaXN0YW5jZSxcbiAgICAgICAgaG90ZWxSZXN1bHQubG9jYXRpb24uZGlzdGFuY2VcbiAgICAgICk7XG4gICAgICB0aGlzLmZpbHRlcnMuZGlzdGFuY2VSYW5nZS5tYXggPSB0aGlzLnJlc3VsdHNfZGV0YWlscy5tYXhEaXN0YW5jZTtcbiAgICAgIHRoaXMucmVzdWx0c19kZXRhaWxzLmNoYWlucy5hZGQoaG90ZWxSZXN1bHQuZ3JvdXApO1xuICAgICAgaWYgKGluZGV4IDwgdGhpcy5lbnZpcm9ubWVudC5udW1iZXJIb3RlbFRvUHJlbG9hZCkge1xuICAgICAgICB0aGlzLmF2YWxpYWJpbGl0eVNlcnZpY2UuZ2V0QXZhaWxhYmlsaXR5Rm9ySWQoXG4gICAgICAgICAgdGhpcy5tYWtlSG90ZWxBdmFsaWxpdHlPYmplY3QoaG90ZWxSZXN1bHQpLFxuICAgICAgICAgIGhvdGVsUmVzdWx0XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHJvY2Vzc0ZpbHRlcnNUb0Rpc3BsYXkoaG90ZWxSZXN1bHQpO1xuXG4gICAgICAvLyB0aGlzLmdldEhvdGVsQXZhaWxhYmlsaXR5KGhvdGVsUmVzdWx0KTtcbiAgICAgIGNvbnN0IGFpcnBvcnREZXRhaWxzID0gaG90ZWxSZXN1bHQudHJhbnNwb3J0cz8uZmluZChhID0+IGEudHlwZSA9PSBIb3RlbERldGFpbFR5cGVzLkFJUlBPUlQpO1xuICAgICAgY29uc3QgbWV0cm9EZXRhaWxzID0gaG90ZWxSZXN1bHQudHJhbnNwb3J0cz8uZmluZChhID0+IGEudHlwZSA9PSBIb3RlbERldGFpbFR5cGVzLk1FVFJPKTtcbiAgICAgIGNvbnN0IHJhaWxEZXRhaWxzID0gaG90ZWxSZXN1bHQudHJhbnNwb3J0cz8uZmluZChhID0+IGEudHlwZSA9PSBIb3RlbERldGFpbFR5cGVzLlRSQUlOKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc29ydGVkVGFnczogdGhpcy5zb3J0VGFncyhob3RlbFJlc3VsdC50YWdzKSxcbiAgICAgICAgRGV0YWlsczoge1xuICAgICAgICAgIGRpc3RhbmNlX2FpcnBvcnQ6IGFpcnBvcnREZXRhaWxzID8gYWlycG9ydERldGFpbHMuZGlzdGFuY2UgOiAwLFxuICAgICAgICAgIGRpc3RhbmNlX21ldHJvOiBtZXRyb0RldGFpbHMgPyBtZXRyb0RldGFpbHMuZGlzdGFuY2UgOiAwLFxuICAgICAgICAgIGRpc3RhbmNlX3JhaWw6IHJhaWxEZXRhaWxzID8gcmFpbERldGFpbHMuZGlzdGFuY2UgOiAwLFxuICAgICAgICAgIGFpcnBvcnRfZGV0YWlsczogYWlycG9ydERldGFpbHMsXG4gICAgICAgICAgbWV0cm9fZGV0YWlsczogbWV0cm9EZXRhaWxzLFxuICAgICAgICAgIHJhaWxfZGV0YWlsczogcmFpbERldGFpbHNcbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXZpbGFiaWxpdHk6IHRoaXMuaG90ZWxfYXZhaWxhYmlsaXR5LFxuICAgICAgICAuLi5ob3RlbFJlc3VsdFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVzdWx0c1Nlc3Npb25OYW1lID0gSG90ZWxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPSBIb3RlbEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XG5cbiAgcHJpdmF0ZSBxdWVyeTogU2VhcmNoSG90ZWxzUXVlcnlWYXJpYWJsZXMgPSB7fSBhcyBTZWFyY2hIb3RlbHNRdWVyeVZhcmlhYmxlcztcblxuICBwcml2YXRlIF9hcHBseVRyYXZlbFJ1bGVzKCkge1xuICAgIC8vIGNvbnNvbGUud2FybignZnVsbDogJywgdGhpcy5mdWxsUmVzdWx0cyk7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuaGVscGVyc1xuICAgICAgLmNsb25lKHRoaXMuZnVsbFJlc3VsdHMgfHwgW10pXG4gICAgICAubWFwKChob3RlbDogSG90ZWxEZXRhaWxzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS51cGRhdGVIb3RlbChob3RlbCk7XG4gICAgICAgIGNvbnN0IGNvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpOyAvLyBhc3N1bWluZyB5b3UgdXNlIE9iamVjdC5hc3NpZ24oKSBwb2x5ZmlsbCFcbiAgICAgICAgZGVsZXRlIGNvcHkuYXZhaWxhYmxlUmF0ZXMuZnVsbFJvb21zOyAvLyBzaGFsbG93bHkgbXV0YXRpbmcgYSBzaGFsbG93IGNvcHkgaXMgZmluZVxuICAgICAgICByZXR1cm4gY29weTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChob3RlbDogSG90ZWxEZXRhaWxzKSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUud2FybignaG90ZWwgcmVjaXZlZCBqaXQ6ICcsaG90ZWwucmVjZWl2ZWRKaXRSdWxlcyk7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhob3RlbC5hdmFpbGFibGVSYXRlcyB8fCB7fSkubGVuZ3RoID4gMCAmJiAhaG90ZWwucmVjZWl2ZWRKaXRSdWxlcztcbiAgICAgIH0pO1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gY29uc29sZS53YXJuKCcrKysgTm8gZGF0YSBmb3VuZCBpbiB0cmF2ZWwgcnVsZXMgKysrJyk7XG4gICAgICAvLyBjb25zb2xlLndhcm4oZGF0YSk7XG4gICAgICB0aGlzLmppdFJ1bGVzUmVjZWl2ZWQubmV4dCh0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjb25zb2xlLmxvZyhgKysrIG9nIHNlYXJjaCBxdWVyeTogJHtKU09OLnN0cmluZ2lmeSh0aGlzLmJ1aWxkUXVlcnkodHJ1ZSkpfSArKytgKTtcbiAgICB0aGlzLmJ1aWxkUXVlcnkoKTtcbiAgICB0aGlzLmFwcGx5SG90ZWxSdWxlc0ZldGNoZXJcbiAgICAgIC5mZXRjaEtleWVkT2JqZWN0KCdpZCcsIHtcbiAgICAgICAgZGF0YSxcbiAgICAgICAgb3JpZ2luYWxTZWFyY2hRdWVyeTogdGhpcy5xdWVyeVxuICAgICAgfSlcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKChkYXRhMTogUmVjb3JkPHN0cmluZywgSG90ZWxEZXRhaWxzPikgPT4ge1xuICAgICAgICAvLyB3ZSBzZW5kIHRoZSBpbmZvLCBmaXJzdCAyMCBob3RzbCBpbiB0YWIgMSB0aGVuIHdlIGFzc2lnbiB0aGlzIHRvIGFsbCBpZHMsIGV2ZW4gaWYgdGhleSBhcHBlYXIgaW4gdGFiIDJcbiAgICAgICAgdGhpcy5mdWxsUmVzdWx0cyA9IHRoaXMuZnVsbFJlc3VsdHMubWFwKChob3RlbDogSG90ZWxEZXRhaWxzKSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGExW2hvdGVsLmlkXSAmJiBkYXRhMVtob3RlbC5pZF0uc2Vjb25kVGFiID09PSBob3RlbC5zZWNvbmRUYWIpIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUud2FybihgKysrIFNldHRpbmcgYXZhaWxhYmlsaXR5IGZvcjogJHtob3RlbC5pZH0gKysrYCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hdmFsaWFiaWxpdHlTZXJ2aWNlLnNldEhvdGVsQXZhbGFiaWxpdHkoZGF0YTFbaG90ZWwuaWRdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGhvdGVsO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mdWxsUmVzdWx0cy5mb3JFYWNoKChob3RlbDogSG90ZWxEZXRhaWxzKSA9PiB7XG4gICAgICAgICAgaWYgKGhvdGVsLmF2YWlsYWJsZVJhdGVzKSB7XG4gICAgICAgICAgICBob3RlbC5qaXRSZW1vdmVSZXN1bHRSdWxlID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGhvdGVsLmppdFJlbW92ZVJlc3VsdFJ1bGUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGZpbHRlclJlc3VsdHMgPVxuICAgICAgICAgIHRoaXMucmVzdWx0c0ZpbHRlck1ldGhvZFxuICAgICAgICAgICAgPyB0aGlzLnJlc3VsdHNGaWx0ZXJNZXRob2QodGhpcy5mdWxsUmVzdWx0cylcbiAgICAgICAgICAgIDpcbiAgICAgICAgICAgIHRoaXMuZnVsbFJlc3VsdHM7XG5cbiAgICAgICAgLy8gdGhpcy5mdWxsUmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0cmF2bGVSZXN1bHRzKTtcbiAgICAgICAgdGhpcy5fY2hlYXBlc3RSZXN1bHRQcmljZSA9IHRoaXMudXBkYXRlTG93ZXN0UHJpY2UoZmlsdGVyUmVzdWx0cyk7XG5cbiAgICAgICAgLy8gdG8gcHJlc2VydmUgdGhlIHNvcnRpbmcgLSBob3BlZnVsbHlcbiAgICAgICAgY29uc3QgY3VycmVudFJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5yZXN1bHRzLnZhbHVlKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnRSZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBmaWx0ZXJSZXN1bHRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFJlc3VsdHNbaV0uaWQgPT09IGZpbHRlclJlc3VsdHNbal0uaWQgJiYgY3VycmVudFJlc3VsdHNbaV0uc2Vjb25kVGFiID09PSBmaWx0ZXJSZXN1bHRzW2pdLnNlY29uZFRhYikge1xuICAgICAgICAgICAgICBjdXJyZW50UmVzdWx0c1tpXSA9IHRoaXMuaGVscGVycy5jbG9uZShmaWx0ZXJSZXN1bHRzW2pdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmppdFJ1bGVzUmVjZWl2ZWQubmV4dCh0cnVlKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZmlsdGVyUmVzdWx0cyk7XG4gICAgICAgIHRoaXMucmVzdWx0cy5uZXh0KGN1cnJlbnRSZXN1bHRzKTtcbiAgICAgICAgdGhpcy5yZWFwcGx5U29ydGluZy5uZXh0KHRydWUpO1xuICAgICAgfSk7XG4gIH1cblxuICBzb3J0VGFncyh0YWdzOiBIb3RlbFRhZ1tdKTogSG90ZWxUYWdbXSB7XG4gICAgaWYgKHRhZ3MpIHtcbiAgICAgIGNvbnN0IHVuaXF1ZUl0ZW1zID0gdGFncy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgICBpZiAoIWFjYy5zb21lKGV4aXN0aW5nSXRlbSA9PiBleGlzdGluZ0l0ZW0ubmFtZSA9PT0gaXRlbS5uYW1lKSkge1xuICAgICAgICAgIGFjYy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBbXSk7XG5cbiAgICAgIHJldHVybiB1bmlxdWVJdGVtc1xuICAgICAgICAuc29ydCgoYTogSG90ZWxUYWcsIGI6IEhvdGVsVGFnKSA9PiB7XG4gICAgICAgICAgLy8gUGxhY2UgXCJHcmVlbiBIb3RlbFwiIGF0IHRoZSBiZWdpbm5pbmdcbiAgICAgICAgICBpZiAodGhpcy5jb252ZXJ0VG9PbmVTdHJpbmcoYS5uYW1lKSA9PT0gU2VhcmNoSGFuZGxlci5HUkVFTl9IT1RFTCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb252ZXJ0VG9PbmVTdHJpbmcoYi5uYW1lKSA9PT0gU2VhcmNoSGFuZGxlci5HUkVFTl9IT1RFTCkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhLm5hbWUgPCBiLm5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGEubmFtZSA+IGIubmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLm1hcCgodGFnOiBIb3RlbFRhZykgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi50YWcsXG4gICAgICAgICAgICBpY29uOiB0aGlzLmVudmlyb25tZW50LnRhZ01hcFt0YWcubmFtZV0gfHwgdGFnLmljb25cbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlSG90ZWxRdWVyeSgpKTtcbiAgICB0aGlzLmxvY2FsRmlsdGVycyA9IG5ldyBIb3RlbEZpbHRlcnMoKTtcbiAgICB0aGlzLnJlc3VsdHNfZGV0YWlscyA9IHtcbiAgICAgIGNoYWluczogbmV3IFNldDxzdHJpbmc+KCksXG4gICAgICBhbWVuaXRpZXM6IFtdLFxuICAgICAgbWF4RGlzdGFuY2U6IDBcbiAgICB9O1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzVmFsaWQoKSB7XG4gICAgaWYgKCF0aGlzLmRvQ2hlY2tzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShIb3RlbEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUywge1xuICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zXG4gICAgfSk7XG5cbiAgICB0aGlzLm1pbl9yZXR1cm5fZGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh0aGlzLnRlbXBQYXJhbXMuY2hlY2tpbl9kYXRlKTtcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmNoZWNraW5fZGF0ZS5pc1NhbWVPckFmdGVyKHRoaXMudGVtcFBhcmFtcy5jaGVja291dF9kYXRlKSkge1xuICAgICAgdGhpcy5jaGVja291dF9kYXRlID0gbW9tZW50KHRoaXMudGVtcFBhcmFtcy5jaGVja2luX2RhdGUpLmFkZCgxLCAnZGF5Jyk7IC8vIGVuc3VyZSB0aGF0IGNoZWNrb3V0IGRhdGUgaXMgbWluIDEgZGF5IGFmdGVyIGNoZWNraW4gZGF0ZVxuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyA9IFtdO1xuICAgIHRoaXMudmFsaWRhdGlvbkZhdm91cml0ZU1lc3NhZ2VzID0gW107XG5cbiAgICBzd2l0Y2ggKHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvbl90eXBlX3NlbGVjdCkge1xuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkNpdHk6XG4gICAgICAgIGlmICghdGhpcy5jb3VudHJ5KSB7XG4gICAgICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnUGxlYXNlIHNlbGVjdCBjb3VudHJ5JywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmxvY2F0aW9uICYmICF0aGlzLnBvc3Rjb2RlKSB7XG4gICAgICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnUGxlYXNlIHNlbGVjdCBhIGhvdGVsIGxvY2F0aW9uIG9yIGVudGVyIGEgcG9zdGNvZGUnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLk9mZmljZTpcbiAgICAgICAgaWYgKHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvbj8udHlwZSAhPT0gJ09mZmljZScgJiYgIXRoaXMub2ZmaWNlKSB7XG4gICAgICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnUGxlYXNlIHNlbGVjdCBhbiBvZmZpY2UuJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5BaXJwb3J0OlxuICAgICAgICBpZiAodGhpcy50ZW1wUGFyYW1zPy5sb2NhdGlvbikge1xuICAgICAgICAgIGlmICghdGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uPy5haXJwb3J0Py5nYXRld2F5KSB7XG4gICAgICAgICAgICB0aGlzLmFkZFZhbGlkYXRpb25NZXNzYWdlKCdQbGVhc2Ugc2VsZWN0IGFuIGFpcnBvcnQnLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnUGxlYXNlIHNlbGVjdCBhbiBhaXJwb3J0JywgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLlRyYWluU3RhdGlvbjpcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLnRlbXBQYXJhbXMubG9jYXRpb24/LnJhaWxzdGF0aW9uICYmXG4gICAgICAgICAgIXRoaXMudHJhaW5zU3RhdGlvblxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmFkZFZhbGlkYXRpb25NZXNzYWdlKCdQbGVhc2Ugc2VsZWN0IGEgdHJhaW4gc3RhdGlvbicsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuU2hvcnRsaXN0OlxuICAgICAgICBpZiAoIXRoaXMuY291bnRyeSkge1xuICAgICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ1BsZWFzZSBzZWxlY3QgY291bnRyeScsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLlByb3BlcnR5TnVtYmVyOlxuICAgICAgICBpZiAoIXRoaXMucHJvcGVydHlOdW1iZXIpIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgYWRkIGEgcHJvcGVydHkgbnVtYmVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICB9XG5cblxuICAgIGlmICh0aGlzLmNoZWNrb3V0X2RhdGUgJiYgdGhpcy5jaGVja291dF9kYXRlLmlzU2FtZU9yQmVmb3JlKHRoaXMuY2hlY2tpbl9kYXRlKSkge1xuICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnQ2hlY2tvdXQgZGF0ZSBtdXN0IGJlIGFmdGVyIGNoZWNraW4gZGF0ZScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNoZWNrb3V0X2RhdGUgJiYgdGhpcy5jaGVja291dF9kYXRlLmlzQmVmb3JlKG1vbWVudCgpKSkge1xuICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnQ2hlY2tvdXQgZGF0ZSBtdXN0IG5vdCBiZSBpbiB0aGUgcGFzdCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNoZWNraW5fZGF0ZSAmJiB0aGlzLmNoZWNraW5fZGF0ZS5pc0JlZm9yZShtb21lbnQoKS5kYXkoKSkpIHtcbiAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ0NoZWNraW4gZGF0ZSBtdXN0IG5vdCBiZSBpbiB0aGUgcGFzdCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNoZWNrb3V0X2RhdGUgJiYgdGhpcy5jaGVja2luX2RhdGUgJiYgdGhpcy5jaGVja2luX2RhdGUuaXNBZnRlcih0aGlzLmNoZWNrb3V0X2RhdGUpKSB7XG4gICAgICB0aGlzLmFkZFZhbGlkYXRpb25NZXNzYWdlKCdDaGVja291dCBkYXRhIG11c3QgYmUgYWZ0ZXIgdGhlIGNoZWNraW4gZGF0ZScpO1xuICAgIH1cblxuICAgIC8vIENhbGN1bGF0aW5nIE9jY3VwYW5jeVxuICAgIGNvbnN0IG9jY3VwYW5jeSA9IHRoaXMubm9fb2Zfb2NjdXBhbnRzIC8gdGhpcy5ub19vZl9yb29tcztcbiAgICBpZiAoIShvY2N1cGFuY3kgPT09IDEgfHwgb2NjdXBhbmN5ID09PSAyKSkge1xuICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZShcbiAgICAgICAgJ09jY3VwYW50cyBwZXIgcm9vbSBtdXN0IGJlIDEgb3IgMjsgaWYgeW91IGhhdmUgYW4gb2RkIG51bWJlciBvZiB0cmF2ZWxsZXJzIChncmVhdGVyIHRoYW4gb25lKTsgdGhlIG5vIG9mIHJvb21zIG11c3QgYmUgZXF1YWwnXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcbiAgICB0aGlzLmlzVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDApO1xuICAgIHRoaXMuaXNGYXZvdXJpdGVWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbkZhdm91cml0ZU1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcbiAgfVxuXG4gIHN0YXJ0U2VhcmNoKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMucmVzZXRTZWFyY2goKTtcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XG4gICAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBPYmplY3QuZnJlZXplKHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLnRlbXBQYXJhbXMpKTtcbiAgICAgIC8vIGJ1aWxkIHRoZSBxdWVyeVxuICAgICAgdGhpcy5idWlsZFF1ZXJ5KCk7XG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlUmVjZW50U2VhcmNoKHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkodGhpcy5nZXRTZWFyY2hRdWVyeSgpKSk7XG4gICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2goXG4gICAgICAgIHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvbl90eXBlX3NlbGVjdCA9PT0gTG9jYXRpb25UeXBlcy5TaG9ydGxpc3RcbiAgICAgICAgICA/IHRoaXMucXVpY2tMaXN0RmV0Y2hlci5mZXRjaExpc3Qoe1xuICAgICAgICAgICAgY291bnRyeUNvZGU6IHRoaXMuY291bnRyeS5jQ29kZSxcbiAgICAgICAgICAgIHN0YXJ0RGF0ZTogcXVlcnkuc3RhcnREYXRlLFxuICAgICAgICAgICAgZW5kRGF0ZTogcXVlcnkuZW5kRGF0ZSB9KVxuICAgICAgICAgIDogdGhpcy5ob3RlbEZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRTZWFyY2goKSB7XG4gICAgdGhpcy5fY2hlYXBlc3RSZXN1bHRQcmljZSA9IG51bGw7XG4gICAgdGhpcy5yZXN1bHRzLm5leHQoW10pO1xuICAgIHRoaXMuaml0UnVsZXNSZWNlaXZlZC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLmF2YWxpYWJpbGl0eVNlcnZpY2UucmVzZXQoKTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLmhpZGRlbkFtZW5pdGllc0ZpbHRlcnMpLmZvckVhY2goKGtleTogQW1lbml0aWVzU2VhcmNoSGFuZGxlcikgPT4ge1xuICAgICAgdGhpcy5oaWRkZW5BbWVuaXRpZXNGaWx0ZXJzW2tleV0gPSB0cnVlO1xuICAgIH0pXG4gICAgT2JqZWN0LmtleXModGhpcy5oaWRkZW5FeHRyYUZpbHRlcnMpLmZvckVhY2goKGtleTogRXh0cmFTZWFyY2hIYW5kbGVyKSAgPT4ge1xuICAgICAgdGhpcy5oaWRkZW5FeHRyYUZpbHRlcnNba2V5XSA9IHRydWU7XG4gICAgfSlcbiAgICBPYmplY3Qua2V5cyh0aGlzLmhpZGRlblN0YXJSYXRpbmdGaWx0ZXJzKS5mb3JFYWNoKChrZXk6IFN0YXJSYXRpbmcpICA9PiB7XG4gICAgICB0aGlzLmhpZGRlblN0YXJSYXRpbmdGaWx0ZXJzW2tleV0gPSB0cnVlO1xuICAgIH0pXG4gIH1cblxuICBnbXRTZWFyY2gocXVlcnk6IFNlYXJjaEhvdGVsc1F1ZXJ5VmFyaWFibGVzLCBsb2NhdGlvbkRldGFpbHM6IExvY2F0aW9uRGV0YWlsKTogT2JzZXJ2YWJsZTxIb3RlbERldGFpbHNbXT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsU2VhcmNoSG90ZWwgPSB7XG4gICAgICBjaGVja2luX2RhdGU6IG1vbWVudChxdWVyeS5zdGFydERhdGUpLFxuICAgICAgY2hlY2tvdXRfZGF0ZTogbW9tZW50KHF1ZXJ5LmVuZERhdGUpLFxuICAgICAgbG9jYXRpb246IHtcbiAgICAgICAgbmFtZTogbG9jYXRpb25EZXRhaWxzLmNpdHksXG4gICAgICAgIGNvdW50cnlDb2RlOiBsb2NhdGlvbkRldGFpbHMuY291bnRyeUNvZGVcbiAgICAgIH0sXG4gICAgfVxuICAgIHRoaXMuYm9sdFNlYXJjaFF1ZXJ5ID0gb3JpZ2luYWxTZWFyY2hIb3RlbDtcbiAgICB0aGlzLnJlc2V0U2VhcmNoKCk7XG4gICAgdGhpcy5jaGVja2luX2RhdGUgPSBudWxsO1xuICAgIHRoaXMuY2hlY2tvdXRfZGF0ZSA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXMuaG90ZWxGZXRjaGVyLmZldGNoTGlzdChxdWVyeSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzOkhvdGVsUXVvdGVSZXN1bHRBcnJheSkgPT4ge1xuICAgICAgICB0aGlzLmNoZWNraW5fZGF0ZSA9IG1vbWVudChxdWVyeS5zdGFydERhdGUpO1xuICAgICAgICB0aGlzLmNoZWNrb3V0X2RhdGUgPSBtb21lbnQocXVlcnkuZW5kRGF0ZSk7XG4gICAgICAgIHRoaXMubm9fb2Zfcm9vbXMgPSBxdWVyeS5yb29tcztcbiAgICAgICAgdGhpcy5ub19vZl9vY2N1cGFudHMgPSBxdWVyeS5hZHVsdHM7XG4gICAgICAgIHRoaXMuZnVsbFJlc3VsdHMgPSByZXMgYXMgSG90ZWxEZXRhaWxzW107XG4gICAgICAgIHRoaXMuX2NoZWFwZXN0UmVzdWx0UHJpY2UgPSB0aGlzLnVwZGF0ZUxvd2VzdFByaWNlKHJlcyBhcyBIb3RlbERldGFpbHNbXSk7XG4gICAgICAgIGNvbnN0IGF2YWlsYWJpbGl0eU9ic2VydmFibGVzID0gcmVzLm1hcCgoaG90ZWwpID0+IHtcbiAgICAgICAgICBjb25zdCBjb21iaW5lZE9ic2VydmFibGUgPSB0aGlzLmF2YWxpYWJpbGl0eVNlcnZpY2UuZ2V0QXZhaWxhYmlsaXR5Rm9ySWQodGhpcy5tYWtlSG90ZWxBdmFsaWxpdHlPYmplY3QoaG90ZWwsIHF1ZXJ5LmFkdWx0cyksIGhvdGVsKS5waXBlKFxuICAgICAgICAgICAgbWFwKChyZXN1bHQpID0+ICh7XG4gICAgICAgICAgICAgIGhvdGVsQXZhbGlhYmlsaXR5OiByZXN1bHQsXG4gICAgICAgICAgICAgIGhvdGVsRGV0YWlsczogaG90ZWxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKSk7XG4gICAgICAgICAgcmV0dXJuIGNvbWJpbmVkT2JzZXJ2YWJsZTtcbiAgICAgICAgfSk7XG5cbiAgICAgIC8vIENvbWJpbmUgdGhlIG9ic2VydmFibGVzXG4gICAgICBpZiAoYXZhaWxhYmlsaXR5T2JzZXJ2YWJsZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KGF2YWlsYWJpbGl0eU9ic2VydmFibGVzKS5waXBlKFxuICAgICAgICAgIG1hcCgoY29tYmluZWRSZXN1bHRzOiB7IGhvdGVsQXZhbGlhYmlsaXR5OiBIb3RlbEF2YWxpYmlsaXR5UXVvdGVSZXN1bHQsIGhvdGVsRGV0YWlsczogSG90ZWxEZXRhaWxzIH1bXSkgPT4ge1xuICAgICAgICAgICAgY29tYmluZWRSZXN1bHRzLmZvckVhY2goKHsgaG90ZWxBdmFsaWFiaWxpdHksIGhvdGVsRGV0YWlscyB9KSA9PiB7XG4gICAgICAgICAgICAgIGhvdGVsRGV0YWlscy5hdmFpbGFibGVSYXRlcyA9IGhvdGVsQXZhbGlhYmlsaXR5O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gY29tYmluZWRSZXN1bHRzLm1hcCgoeyBob3RlbERldGFpbHMgfSkgPT4gaG90ZWxEZXRhaWxzKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGFwcGx5R01UVHJhdmVsUnVsZXMoYXZhaWxhYmlsaXR5T2JzZXJ2YWJsZXM6IEhvdGVsRGV0YWlsc1tdKTogT2JzZXJ2YWJsZTxIb3RlbERldGFpbHNbXT4ge1xuICAgIGNvbnN0IGRhdGEgPSBhdmFpbGFiaWxpdHlPYnNlcnZhYmxlcy5tYXAoKGhvdGVsOiBIb3RlbERldGFpbHMpID0+IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGhvdGVsKSk7XG4gICAgfSlcbiAgICB0aGlzLmJ1aWxkUXVlcnkoKTtcbiAgICByZXR1cm4gdGhpcy5hcHBseUhvdGVsUnVsZXNGZXRjaGVyXG4gICAgLmZldGNoS2V5ZWRPYmplY3QoJ2lkJywgeyBkYXRhLCBvcmlnaW5hbFNlYXJjaFF1ZXJ5OiB0aGlzLnF1ZXJ5fSlcbiAgICAucGlwZShcbiAgICAgIHRha2UoMSksXG4gICAgICBtYXAoKGRhdGExOiBSZWNvcmQ8c3RyaW5nLCBIb3RlbERldGFpbHM+KSA9PiB7XG4gICAgICAgIGF2YWlsYWJpbGl0eU9ic2VydmFibGVzLmZvckVhY2goKGl0ZW06SG90ZWxEZXRhaWxzKSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGExW2l0ZW0uaWRdKSB7XG4gICAgICAgICAgICBpdGVtLmF2YWlsYWJsZVJhdGVzID0gZGF0YTFbaXRlbS5pZF0uYXZhaWxhYmxlUmF0ZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGF2YWlsYWJpbGl0eU9ic2VydmFibGVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnk6IFNlYXJjaEhvdGVsc1F1ZXJ5VmFyaWFibGVzKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcbiAgICBjb25zdCByZWNlbnRTZWFyY2hRdWVyeSA9IHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkhvdGVsLFxuICAgICAgc2VhcmNoQXJnczogcmVjZW50U2VhcmNoUXVlcnksXG4gICAgICB0cmF2ZWxEYXRlOiB0aGlzLmNoZWNraW5fZGF0ZS5mb3JtYXQoKSxcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzLCB0aGlzLnVzZXJTZXJ2aWNlLmJvYm8/LmlkKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlcmNoUXVlcnkocXVlcnk6IFNlYXJjaEhvdGVsc1F1ZXJ5VmFyaWFibGVzKTogSG90ZWxSZWNlbnRTZWFyY2hBcmdzIHtcbiAgICBjb25zdCBzZWFyY2hRdWVyeTogSG90ZWxSZWNlbnRTZWFyY2hBcmdzID0gcXVlcnk7XG4gICAgc2VhcmNoUXVlcnkubG9jYXRpb25fdHlwZV9zZWxlY3QgPSB0aGlzLmxvY2F0aW9uX3R5cGVfc2VsZWN0O1xuICAgIGlmICh0aGlzLmxvY2F0aW9uPy5uYW1lKSB7XG4gICAgICBzZWFyY2hRdWVyeS5jaXR5TmFtZSA9IHRoaXMubG9jYXRpb24ubmFtZTtcbiAgICB9XG4gICAgc3dpdGNoIChzZWFyY2hRdWVyeS5sb2NhdGlvbl90eXBlX3NlbGVjdCkge1xuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLk9mZmljZTpcbiAgICAgICAgc2VhcmNoUXVlcnkub2ZmaWNlID0gdGhpcy5vZmZpY2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLlRyYWluU3RhdGlvbjpcbiAgICAgICAgc2VhcmNoUXVlcnkudHJhaW5zU3RhdGlvbkRldGFpbCA9IHRoaXMudHJhaW5zU3RhdGlvbjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuQWlycG9ydDpcbiAgICAgICAgc2VhcmNoUXVlcnkuYWlycG9ydERldGFpbCA9IHRoaXMubG9jYXRpb24/LmFpcnBvcnQ7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBzZWFyY2hRdWVyeTtcbiAgfVxuXG4gIHB1YmxpYyBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tpbl9kYXRlID0gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnN0YXJ0RGF0ZSk7XG4gICAgdGhpcy5jaGVja291dF9kYXRlID0gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmVuZERhdGUpO1xuICAgIHRoaXMuYXBwbHlTZWFyY2hRdWVyeShyZWNlbnRTZWFyY2guc2VhcmNoQXJncywgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGdldFJhaWxTdGF0aW9uQnlDb2RlKGNvZGU6IHN0cmluZyk6IE9ic2VydmFibGU8UmFpbFN0YXRpb24+IHtcbiAgICBpZiAoY29kZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmFpbFN0YXRpb25GZXRjaGVyLmZldGNoTGlzdCh7IGlkOiBudWxsLCBjb2RlIH0pLnBpcGUodGFrZSgxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZigpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNlYXJjaFF1ZXJ5KG9nU2VhcmNoID0gZmFsc2UpOiBTZWFyY2hIb3RlbHNRdWVyeVZhcmlhYmxlcyB7XG4gICAgdGhpcy5idWlsZFF1ZXJ5KG9nU2VhcmNoKTtcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFNlYXJjaEhvdGVsc1F1ZXJ5VmFyaWFibGVzPih0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIGJ1aWxkUXVlcnkob2dTZWFyY2ggPSBmYWxzZSk6IHZvaWQge1xuICAgIGNvbnN0IHRlbXBQYXJhbXMgPSBvZ1NlYXJjaCAmJiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaCA/IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoIDogdGhpcy50ZW1wUGFyYW1zO1xuICAgIGNvbnN0IGN1cnJlbmN5T2JqZWN0ID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3Q8e1xuICAgICAgY3VycmVuY3k6IHN0cmluZztcbiAgICAgIGhvdGVsOiB7XG4gICAgICAgIGVuYWJsZTogYm9vbGVhbjtcbiAgICAgIH07XG4gICAgfT4oVXNlckZhdm9ydXJpdGUuUHJlZmVycmVkQ3VycmVuY3kpO1xuICAgIGlmICgoIXRoaXMudXNlckN1cnJlbmN5IHx8IHRoaXMudXNlckN1cnJlbmN5ICE9PSBjdXJyZW5jeU9iamVjdD8uY3VycmVuY3kpICYmIGN1cnJlbmN5T2JqZWN0Py5ob3RlbD8uZW5hYmxlKSB7XG4gICAgICB0aGlzLnVzZXJDdXJyZW5jeSA9IGN1cnJlbmN5T2JqZWN0LmN1cnJlbmN5O1xuICAgIH0gZWxzZSBpZiAodGhpcy51c2VyQ3VycmVuY3kgJiYgIWN1cnJlbmN5T2JqZWN0Py5ob3RlbD8uZW5hYmxlKXtcbiAgICAgIHRoaXMudXNlckN1cnJlbmN5ID0gbnVsbDtcbiAgICB9XG4gICAgbGV0IGFsdGVybmF0aXZlTG9jYXRpb25Qb3N0Y29kZTogc3RyaW5nID0gbnVsbDtcblxuICAgIGlmICh0aGlzLnByaW1hcnlMb2NhdGlvbj8udG9Mb3dlckNhc2UoKT8udHJpbSgpID09PSB0aGlzLmxvY2F0aW9uPy5uYW1lPy50b0xvd2VyQ2FzZSgpPy50cmltKCkpIHtcbiAgICAgIGFsdGVybmF0aXZlTG9jYXRpb25Qb3N0Y29kZSA9IHRoaXMuYWx0ZXJuYXRpdmVMb2NhdGlvbjtcbiAgICB9XG5cbiAgICBsZXQgZGlzdGFuY2UgPSB0ZW1wUGFyYW1zLmRpc3RhbmNlO1xuICAgIGxldCBkaXN0YW5jZVR5cGUgPSBEaXN0YW5jZVR5cGVzLk07XG4gICAgY29uc3QgZGlzdGFuY2VDb25maWc6IGFueSA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0KFxuICAgICAgVXNlckZhdm9ydXJpdGUuZGlzdGFuY2VVbml0XG4gICAgKTtcblxuICAgIGlmIChkaXN0YW5jZUNvbmZpZz8udW5pdCkge1xuICAgICAgLy8gY29uc29sZS5sb2coYCsrKyBESVNUQU5DRSBDT05GSUcgREVURUNURUQgKysrYCk7XG4gICAgICBpZiAoZGlzdGFuY2VDb25maWcudW5pdCAhPT0gJ01pbGVzJykgeyAgLy8gISAtIGRpc3RhbmNlIGlzIGFsd2F5cyBpbiBNaWxlcyBpbiB0ZW1wIHBhcmFtcyAtIENvbnZlcnQgdG8gS00gZXZlbiBpZiBpbiBNZXRlcnMgYXMgQ29uZmVybWEgZG9lcyBub3QgYWNjZXB0IHRoaXMgLSBqdXN0IGNoYW5nZSB0aGUgZGlzcGxheSBpbiBGRVxuICAgICAgICBkaXN0YW5jZSA9IE1hdGguZmxvb3IoZGlzdGFuY2UgKiAxLjYwOTM0KTtcbiAgICAgICAgZGlzdGFuY2VUeXBlID0gRGlzdGFuY2VUeXBlcy5LO1xuICAgICAgfSBcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeTogU2VhcmNoSG90ZWxzUXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBzdGFydERhdGU6IHRlbXBQYXJhbXMuY2hlY2tpbl9kYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpLFxuICAgICAgZW5kRGF0ZTogdGVtcFBhcmFtcy5jaGVja291dF9kYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpLFxuICAgICAgcm9vbXM6IHRlbXBQYXJhbXMubm9fb2Zfcm9vbXMsXG4gICAgICBhZHVsdHM6IHRlbXBQYXJhbXMubm9fb2Zfb2NjdXBhbnRzLFxuICAgICAgY3VycmVuY3k6IHRoaXMudXNlckN1cnJlbmN5IHx8IHRlbXBQYXJhbXMuY3VycmVuY3kgfHwgbnVsbCxcbiAgICAgIGRpc3RhbmNlLFxuICAgICAgZGlzdGFuY2VUeXBlLFxuICAgICAgbWF4UmVzdWx0czogMTAwLFxuICAgICAgYWx0ZXJuYXRpdmVMb2NhdGlvbjogYWx0ZXJuYXRpdmVMb2NhdGlvblBvc3Rjb2RlIHx8IG51bGwsXG4gICAgICB0cmF2ZWxsZXJzOiB0aGlzLnRyYXZlbGxlcnMubWFwKHRyYXZlbGxlciA9PiB7cmV0dXJuIHtpZDogdHJhdmVsbGVyLmlkfX0pXG4gICAgfTtcblxuICAgIHRoaXMuZ2V0Um9vbU51bWJlcigpO1xuICAgIHN3aXRjaCAodGVtcFBhcmFtcy5sb2NhdGlvbl90eXBlX3NlbGVjdCkge1xuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkFpcnBvcnQ6XG4gICAgICAgIHF1ZXJ5LmlhdGEgPSB0ZW1wUGFyYW1zLmxvY2F0aW9uPy5haXJwb3J0LmdhdGV3YXk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuQ2l0eTpcbiAgICAgICAgcXVlcnkuY291bnRyeUNvZGUgPSB0ZW1wUGFyYW1zLmNvdW50cnkuY0NvZGU7XG4gICAgICAgIC8vIHNob3VsZCBiZSBvbmUgc2VhcmNoIG1ldG9kIGZvciB0aGUgY2l0eSBzZWFyY2g6IGxvY2F0aW9uIG9yIHBvc3Rjb2RlXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdsb2NhdGlvbjogJywgdGhpcy5sb2NhdGlvbik7XG4gICAgICAgIGlmICh0aGlzLmxvY2F0aW9uKSB7XG4gICAgICAgICAgcXVlcnkuY2l0eU5hbWUgPSB0ZW1wUGFyYW1zLmxvY2F0aW9uLm5hbWU7XG4gICAgICAgICAgcXVlcnkubGF0aXR1ZGUgPSB0ZW1wUGFyYW1zLmxvY2F0aW9uLmxhdGl0dWRlO1xuICAgICAgICAgIHF1ZXJ5LmxvbmdpdHVkZSA9IHRlbXBQYXJhbXMubG9jYXRpb24ubG9uZ2l0dWRlO1xuICAgICAgICB9IGVsc2UgaWYgKHRlbXBQYXJhbXMucG9zdGNvZGUpIHtcbiAgICAgICAgICBxdWVyeS5wb3N0T3JaaXBDb2RlID0gdGVtcFBhcmFtcy5wb3N0Y29kZS5uYW1lO1xuICAgICAgICAgIHF1ZXJ5LmxhdGl0dWRlID0gdGVtcFBhcmFtcy5wb3N0Y29kZS5sYXRpdHVkZTtcbiAgICAgICAgICBxdWVyeS5sb25naXR1ZGUgPSB0ZW1wUGFyYW1zLnBvc3Rjb2RlLmxvbmdpdHVkZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLlRyYWluU3RhdGlvbjpcbiAgICAgICAgaWYgKHRlbXBQYXJhbXMubG9jYXRpb24/LnJhaWxzdGF0aW9uPy5zdGF0aW9uQ29kZSkge1xuICAgICAgICAgIHF1ZXJ5LnRyYWluU3RhdGlvbkNvZGUgPSB0ZW1wUGFyYW1zLmxvY2F0aW9uLnJhaWxzdGF0aW9uLnN0YXRpb25Db2RlO1xuICAgICAgICB9IGVsc2UgaWYgKHRlbXBQYXJhbXMudHJhaW5zU3RhdGlvbi5sYXRpdHVkZSAmJiB0ZW1wUGFyYW1zLnRyYWluc1N0YXRpb24ubG9uZ2l0dWRlKSB7XG4gICAgICAgICAgLy9Gb3IgRVUgc3RhdGlvbnNcbiAgICAgICAgICBxdWVyeS5sYXRpdHVkZSA9IHRlbXBQYXJhbXMudHJhaW5zU3RhdGlvbi5sYXRpdHVkZTtcbiAgICAgICAgICBxdWVyeS5sb25naXR1ZGUgPSB0ZW1wUGFyYW1zLnRyYWluc1N0YXRpb24ubG9uZ2l0dWRlO1xuXG4gICAgICAgICAgaWYodGVtcFBhcmFtcy50cmFpbnNTdGF0aW9uLnN0YXRpb25Db2RlKSB7XG4gICAgICAgICAgICBxdWVyeS50cmFpblN0YXRpb25Db2RlID0gdGVtcFBhcmFtcy50cmFpbnNTdGF0aW9uLnN0YXRpb25Db2RlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuT2ZmaWNlOlxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0ZW1wUGFyYW1zKTtcbiAgICAgICAgcXVlcnkubGF0aXR1ZGUgPSB0ZW1wUGFyYW1zLm9mZmljZSA/IHRlbXBQYXJhbXMub2ZmaWNlLmxhdGl0dWRlIDogdGVtcFBhcmFtcy5sb2NhdGlvbi5sYXRpdHVkZTtcbiAgICAgICAgcXVlcnkubG9uZ2l0dWRlID0gdGVtcFBhcmFtcy5vZmZpY2UgPyB0ZW1wUGFyYW1zLm9mZmljZS5sb25naXR1ZGUgOiB0ZW1wUGFyYW1zLmxvY2F0aW9uLmxvbmdpdHVkZTtcbiAgICAgICAgcXVlcnkuY291bnRyeUNvZGUgPSB0ZW1wUGFyYW1zLm9mZmljZSA/IHRlbXBQYXJhbXMub2ZmaWNlLmNvdW50cnlDb2RlIDogdGVtcFBhcmFtcy5sb2NhdGlvbi5jb3VudHJ5Q29kZTtcbiAgICAgICAgcXVlcnkub2ZmaWNlSWQgPSBOdW1iZXIodGVtcFBhcmFtcy5vZmZpY2UgPyB0ZW1wUGFyYW1zLm9mZmljZS5pZCA6IHRlbXBQYXJhbXMubG9jYXRpb24uaWQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLlNob3J0bGlzdDpcbiAgICAgICAgcXVlcnkuY291bnRyeUNvZGUgPSB0ZW1wUGFyYW1zLmNvdW50cnkuY0NvZGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuUG9zdGNvZGU6XG4gICAgICAgIHF1ZXJ5LmNvdW50cnlDb2RlID0gdGVtcFBhcmFtcy5jb3VudHJ5LmNDb2RlO1xuICAgICAgICBxdWVyeS5wb3N0T3JaaXBDb2RlID0gdGVtcFBhcmFtcy5sb2NhdGlvbi5uYW1lO1xuICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLlByb3BlcnR5TnVtYmVyOlxuICAgICAgICAgIHF1ZXJ5LnByb3BlcnR5TnVtYmVyID0gdGVtcFBhcmFtcy5wcm9wZXJ0eU51bWJlcjtcbiAgICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBBZGQgaG90ZWwgbmFtZSBpbiB0aGUgcXVlcnlcbiAgICBpZiAodGVtcFBhcmFtcy5ob3RlbF9uYW1lKSB7XG4gICAgICBxdWVyeS5ob3RlbE5hbWUgPSB0ZW1wUGFyYW1zLmhvdGVsX25hbWU7XG4gICAgfVxuXG4gICAgLy8gYWRkIGNoYWluIG9yIGdyb3VwIG5hbWUgaW50IGhlIHF1ZXJ5XG4gICAgaWYgKHRlbXBQYXJhbXMuaG90ZWxfY2hhaW4pIHtcbiAgICAgIHF1ZXJ5Lmdyb3VwTmFtZSA9ICh0ZW1wUGFyYW1zLmhvdGVsX2NoYWluIGFzIHtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgIH0pPy5uYW1lO1xuICAgIH1cblxuICAgIHRoaXMucXVlcnkgPSBxdWVyeTtcbiAgfVxuXG4gIG1ha2VIb3RlbEF2YWxpbGl0eU9iamVjdChob3RlbDogSG90ZWxRdW90ZVJlc3VsdCwgYWR1bHRzPzogbnVtYmVyKTogSG90ZWxBdmFsaWJpbGl0eVF1ZXJ5IHtcbiAgICBjb25zdCBjdXJyZW5jeU9iamVjdCA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0PHtcbiAgICAgIGN1cnJlbmN5OiBzdHJpbmc7XG4gICAgICBob3RlbDoge1xuICAgICAgICBlbmFibGU6IGJvb2xlYW47XG4gICAgICB9O1xuICAgIH0+KFVzZXJGYXZvcnVyaXRlLlByZWZlcnJlZEN1cnJlbmN5KTtcbiAgICBpZiAoKCF0aGlzLnVzZXJDdXJyZW5jeSB8fCB0aGlzLnVzZXJDdXJyZW5jeSAhPT0gY3VycmVuY3lPYmplY3Q/LmN1cnJlbmN5KSAmJiBjdXJyZW5jeU9iamVjdD8uaG90ZWw/LmVuYWJsZSkge1xuICAgICAgdGhpcy51c2VyQ3VycmVuY3kgPSBjdXJyZW5jeU9iamVjdC5jdXJyZW5jeTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudXNlckN1cnJlbmN5ICYmICFjdXJyZW5jeU9iamVjdD8uaG90ZWw/LmVuYWJsZSl7XG4gICAgICB0aGlzLnVzZXJDdXJyZW5jeSA9IG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBob3RlbHM6IFt7IGhvdGVsSWQ6IGhvdGVsLmlkLCBzdXBwbGllcklkOiBob3RlbC5zb3VyY2VJZC50b1N0cmluZygpIH1dLFxuICAgICAgc3RhcnREYXRlOiB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZSh0aGlzLmNoZWNraW5fZGF0ZSksXG4gICAgICBlbmREYXRlOiB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZSh0aGlzLmNoZWNrb3V0X2RhdGUpLFxuICAgICAgcm9vbXM6IGFkdWx0cyA/IGFkdWx0cyA6IHRoaXMubm9fb2Zfcm9vbXMsXG4gICAgICBvY2N1cGFudHM6IHRoaXMubm9fb2Zfb2NjdXBhbnRzLFxuICAgICAgY3VycmVuY3k6IHRoaXMudXNlckN1cnJlbmN5IHx8ICdHQlAnXG4gICAgfTtcbiAgfVxuICByZXN1bHRzRmlsdGVyTWV0aG9kOiAocmVzdWx0czogSG90ZWxEZXRhaWxzQXJyYXkpID0+IEhvdGVsRGV0YWlsc0FycmF5O1xuXG4gIHB1YmxpYyBmaWx0ZXJSZXN1bHRzID0gKHNob3dPbmx5QXZhaWxhYmxlSG90ZWw6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLnJlc3VsdHNGaWx0ZXJNZXRob2QgPSAocmVzdWx0czogSG90ZWxEZXRhaWxzQXJyYXkpID0+IHtcbiAgICAgIHJlc3VsdHMuZm9yRWFjaCgoaG90ZWw6IEhvdGVsRGV0YWlscyk9PntcbiAgICAgICAgdGhpcy5yb29tc0ZpbHRlcihob3RlbCk7XG4gICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0cy5maWx0ZXIoKGhvdGVsOiBIb3RlbERldGFpbHMpID0+IHtcbiAgICAgICAgaWYgKHNob3dPbmx5QXZhaWxhYmxlSG90ZWwpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5pblBlck5pZ2h0UHJpY2VSYW5nZShob3RlbCkgJiZcbiAgICAgICAgICAgIHRoaXMuaW5EaXN0YW5jZVJhbmdlKGhvdGVsKSAmJlxuICAgICAgICAgICAgdGhpcy5yZWZ1bmRhYmxlUm9vbVR5cGVGaWx0ZXIoaG90ZWwpICYmXG4gICAgICAgICAgICB0aGlzLnNoYXJlZEZpbHRlcihob3RlbClcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5pblBlck5pZ2h0UHJpY2VSYW5nZShob3RlbCkgJiYgdGhpcy5pbkRpc3RhbmNlUmFuZ2UoaG90ZWwpICYmIHRoaXMuc2hhcmVkRmlsdGVyKGhvdGVsKVxuICAgICAgICAgICk7XG4gICAgICB9KVxuICAgIH07XG4gICAgLy8gY29uc29sZS5sb2coJ25vcnRtYWwgc29ydCByZXN1bHRzJyk7XG4gICAgY29uc3QgZmlsdGVyZWRSZXN1bHRzID0gdGhpcy5yZXN1bHRzRmlsdGVyTWV0aG9kKHRoaXMuZnVsbFJlc3VsdHMpO1xuICAgIHRoaXMucmVzdWx0cy5uZXh0KGZpbHRlcmVkUmVzdWx0cyk7XG4gICAgdGhpcy5yZWFwcGx5U29ydGluZy5uZXh0KHRydWUpO1xuICB9O1xuXG4gIHByaXZhdGUgc2hhcmVkRmlsdGVyKGhvdGVsOiBIb3RlbERldGFpbHMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5yb29tc0NoZWNrKGhvdGVsKSAmJlxuICAgICAgdGhpcy5nZXRFeHRyYUZpbHRlcihob3RlbCkgJiZcbiAgICAgIHRoaXMuaGFzUHJlZmVycmVkKGhvdGVsKSAmJlxuICAgICAgdGhpcy5hY2Nlc3NpYmxlUm9vbVR5cGVGaWx0ZXIoaG90ZWwpJiZcbiAgICAgIHRoaXMuY29udGFpbnNIb3RlbG5hbWUoaG90ZWwpICYmXG4gICAgICB0aGlzLmhhc0NoYWluKGhvdGVsKSAmJlxuICAgICAgdGhpcy5icmVha2Zhc3RUeXBlRmlsdGVyKGhvdGVsKSAmJlxuICAgICAgdGhpcy50cmF2ZWxQb2xpY3lGaWx0ZXIoaG90ZWwpICYmXG4gICAgICB0aGlzLnJvb21UeXBlRmlsdGVyKGhvdGVsKSAmJlxuICAgICAgdGhpcy5nZXRBbWVuaXRpZXNGaWx0ZXIoaG90ZWwpICYmXG4gICAgICB0aGlzLnN0YXJSYXRpbmdGaWx0ZXIoaG90ZWwpICYmXG4gICAgICB0aGlzLmN1c3RvbWVyUmF0aW5nRmlsdGVyKGhvdGVsKSAmJlxuICAgICAgdGhpcy53aXRoaW5TdGFyUmF0aW5nVWlDb25maWcoaG90ZWwpXG4gICAgKTtcbiAgfVxuXG4gIC8vIExpZ2h0ZW5pbmcgRmlsdGVyc1xuICBwdWJsaWMgZmlsdGVyTGlnaHRlbmluZ1Jlc3VsdHMgPSAoKSA9PiB7XG4gICAgdGhpcy5yZXN1bHRzRmlsdGVyTWV0aG9kID0gKHJlc3VsdHM6IEhvdGVsRGV0YWlsc0FycmF5KSA9PiB7XG4gICAgICByZXN1bHRzLmZvckVhY2goKGhvdGVsOiBIb3RlbERldGFpbHMpPT57XG4gICAgICAgIHRoaXMucm9vbXNGaWx0ZXIoaG90ZWwpO1xuICAgICAgICB0aGlzLnByb2Nlc3NSb29tRmlsdGVyc1RvRGlzcGxheShob3RlbCk7XG4gICAgICAgfSk7XG4gICAgIHJldHVybiByZXN1bHRzLmZpbHRlcigoaG90ZWw6IEhvdGVsRGV0YWlscykgPT4ge1xuICAgICAgY29uc3QgcGVyTmlnaHRGaWx0ZXIgPSAgdGhpcy5ub1Jvb21GaWx0ZXJTZWxlY3RlZCgpID8gIHRydWUgOiB0aGlzLmluUGVyTmlnaHRQcmljZVJhbmdlKGhvdGVsKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBwZXJOaWdodEZpbHRlciAmJlxuICAgICAgICAgIHRoaXMuc2hhcmVkRmlsdGVyKGhvdGVsKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICB9XG4gICAgLy8gY29uc29sZS5sb2coJ2xpZ2h0bmluZyBzb3J0IHJlc3VsdHMnKTtcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnJlc3VsdHMudmFsdWUpO1xuICAgIGNvbnN0IGZpbHRlcmVkUmVzdWx0cyA9IHRoaXMucmVzdWx0c0ZpbHRlck1ldGhvZCh0aGlzLmZ1bGxSZXN1bHRzKTtcbiAgICB0aGlzLnJlc3VsdHMubmV4dChmaWx0ZXJlZFJlc3VsdHMpO1xuICAgIHRoaXMucmVhcHBseVNvcnRpbmcubmV4dCh0cnVlKTtcbiAgfTtcblxuICBwdWJsaWMgcmVzdWx0c0hhdmVUYWcoc2VhcmNoVGFnOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBmaWx0ZXJlZFJlc3VsdHMgPSB0aGlzLmZ1bGxSZXN1bHRzLmZpbHRlcigoaG90ZWw6IEhvdGVsRGV0YWlscykgPT4ge1xuICAgICAgY29uc3QgZmlsdGVyZWRUYWdzOiBIb3RlbFRhZ1tdID0gaG90ZWwudGFncy5maWx0ZXIoKHRhZzogSG90ZWxUYWcpID0+IHtcbiAgICAgICAgaWYgKHRhZy5uYW1lKSB7XG4gICAgICAgICAgY29uc3QgbmFtZTogc3RyaW5nID0gdGhpcy5jb252ZXJ0VG9PbmVTdHJpbmcodGFnLm5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKG5hbWUuaW5jbHVkZXModGhpcy5jb252ZXJ0VG9PbmVTdHJpbmcoc2VhcmNoVGFnKS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBjb250YWluc1NlYXJjaFRhZyA9ICEhKGZpbHRlcmVkVGFncyAmJiBmaWx0ZXJlZFRhZ3MubGVuZ3RoID4gMCk7XG4gICAgICAvLyBjb25zb2xlLmxvZyhgSG90ZWwgJHtob3RlbC5uYW1lfSB3aXRoIGZpbHRlciBhcHBsaWVkYCwgaG90ZWw/LnRhZ3MsIGlzVHJ1ZSk7XG4gICAgICByZXR1cm4gY29udGFpbnNTZWFyY2hUYWc7XG4gICAgfSk7XG4gICAgcmV0dXJuICEhKGZpbHRlcmVkUmVzdWx0cyAmJiBmaWx0ZXJlZFJlc3VsdHMubGVuZ3RoID4gMCk7XG4gIH1cblxuICBwcml2YXRlIGluUGVyTmlnaHRQcmljZVJhbmdlKGhvdGVsOiBIb3RlbERldGFpbHMpOiBib29sZWFuIHtcbiAgICBjb25zdCBhdmFpbGFiaWxpdHkgPSB0aGlzLmF2YWxpYWJpbGl0eVNlcnZpY2UuZ2V0QXZhaWxhYmlsaXR5VmFsdWUoaG90ZWwpO1xuICAgIGlmIChhdmFpbGFiaWxpdHkpIHtcbiAgICAgIGlmKHRoaXMuZmlsdGVycy5wZXJOaWdodFByaWNlUmFuZ2UubWF4ID09PSB0aGlzLmZpbHRlcnMucGVyTmlnaHRQcmljZVJhbmdlLm1pbiAmJiB0aGlzLmZpbHRlcnMucGVyTmlnaHRQcmljZVJhbmdlLm1pbiA+IHRoaXMuZmlsdGVycy5wZXJOaWdodFByaWNlUmFuZ2UubWF4UmF3KXtcbiAgICAgICAgcmV0dXJuIGF2YWlsYWJpbGl0eS5wcnBuID49IHRoaXMuZmlsdGVycy5wZXJOaWdodFByaWNlUmFuZ2UubWF4UmF3O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVscGVycy5pblJhbmdlKGF2YWlsYWJpbGl0eS5wcnBuLCB0aGlzLmZpbHRlcnMucGVyTmlnaHRQcmljZVJhbmdlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cblxuICBwcml2YXRlIGluRGlzdGFuY2VSYW5nZShob3RlbDogSG90ZWxEZXRhaWxzKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZmlsdGVycy5kaXN0YW5jZVJhbmdlLm1heCA9PT0gMCB8fFxuICAgICAgdGhpcy5oZWxwZXJzLmluUmFuZ2UoaG90ZWwubG9jYXRpb24uZGlzdGFuY2UsIHRoaXMuZmlsdGVycy5kaXN0YW5jZVJhbmdlKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNvbnRhaW5zSG90ZWxuYW1lKGhvdGVsOiBIb3RlbERldGFpbHMpOiBib29sZWFuIHtcbiAgICBjb25zdCB0b2NoZWNrID0gdGhpcy5maWx0ZXJzLmhvdGVsTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgcmV0dXJuIHRvY2hlY2sgJiYgdG9jaGVjay5sZW5ndGggPiAwID8gaG90ZWwubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRvY2hlY2spIDogdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBdmFsaWFiaWxpdHkoaG90ZWw6IEhvdGVsRGV0YWlscyk6IEhvdGVsQXZhbGliaWxpdHlRdW90ZVJlc3VsdCB7XG4gICAgcmV0dXJuIHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5nZXRBdmFpbGFiaWxpdHlWYWx1ZShob3RlbCk7XG4gIH1cblxuICBwdWJsaWMgcm9vbXNDaGVjayhob3RlbDogSG90ZWxEZXRhaWxzKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYXZhaWxhYmlsaXR5ID0gdGhpcy5hdmFsaWFiaWxpdHlTZXJ2aWNlLmdldEF2YWlsYWJpbGl0eVZhbHVlKGhvdGVsKTtcbiAgICAvLyBpZiB0aGVyZSBpcyBubyByb29tIGZpbHRlciwgc2hvdyBldmVyeXRoaW5nIGV2ZW4gbm8gcm9vbXNcbiAgICBpZiAodGhpcy5ub1Jvb21GaWx0ZXJTZWxlY3RlZCgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gaWYgdGhlcmUgaXMgYSBzaW5nbGUgcm9vbSBmaWx0ZXIgZG8gdGhlIGZpbHRlclxuICAgIGlmIChhdmFpbGFiaWxpdHkgJiYgIGF2YWlsYWJpbGl0eT8ucm9vbXMpIHtcbiAgICAgICByZXR1cm4gISFhdmFpbGFiaWxpdHkucm9vbXMubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJvb21zRmlsdGVyKGhvdGVsOiBIb3RlbERldGFpbHMpIHtcbiAgICBjb25zdCBhdmFpbGFiaWxpdHkgPSB0aGlzLmF2YWxpYWJpbGl0eVNlcnZpY2UuZ2V0QXZhaWxhYmlsaXR5VmFsdWUoaG90ZWwpO1xuICAgIGlmIChhdmFpbGFiaWxpdHkgJiYgT2JqZWN0LmtleXMoYXZhaWxhYmlsaXR5KS5sZW5ndGggIT09IDApIHtcbiAgICAgIGNvbnN0IGlzUmVmdW5kYWJsZUluY2x1ZGVkID0gdGhpcy5maWx0ZXJzLnJlZnVuZGFibGVSb29tVHlwZS5pbmNsdWRlcyhTZWFyY2hIYW5kbGVyLlJFRlVOREFCTEUpO1xuICAgICAgY29uc3QgaXNSZWZ1bmRhYmxlRXhjbHVkZWQgPSB0aGlzLmZpbHRlcnMucmVmdW5kYWJsZVJvb21UeXBlLmluY2x1ZGVzKFxuICAgICAgICBTZWFyY2hIYW5kbGVyLk5PTl9SRUZVTkRBQkxFXG4gICAgICApO1xuXG4gICAgLy8gY29uc29sZS5sb2coJysrKyBBcHBseWluZyBmaWx0ZXJzOiAnLCB0aGlzLmZpbHRlcnMsICcgKysrJyk7XG4gICAgY29uc3QgbWF0Y2hlczpIb3RlbFJvb21XaXRoTG9jYWxQcmljZVtdID0gYXZhaWxhYmlsaXR5LmZ1bGxSb29tcz8uZmlsdGVyKChyb29tOiBIb3RlbFJvb21XaXRoTG9jYWxQcmljZSkgPT4ge1xuICAgICAgLy9UcmF2ZWxwb3J0SG90ZWxzIGRvbnQgaGF2ZSBMb2NhbFByaWNlIGNoYW5nZWQgdG8gdG90YWwgaW5zdGVhZFxuICAgICAgY29uc3QgaW5SYW5nZSA9IHRoaXMuaGVscGVycy5pblJhbmdlKChob3RlbC5zb3VyY2UgPT09IFNlcnZpY2VQcm92aWRlci5UcmF2ZWxwb3J0SG90ZWxzID8gcm9vbS50b3RhbCA6IHJvb20uTG9jYWxQcmljZSksIC8vICogY29udmVyc2lvbixcbiAgICAgICAgdGhpcy5maWx0ZXJzLnByaWNlUmFuZ2VcbiAgICAgICk7XG4gICAgICBsZXQgcmVmdW5kYWJsZUNoZWNrID0gdHJ1ZTtcbiAgICAgIGlmIChpc1JlZnVuZGFibGVJbmNsdWRlZCAmJiBpc1JlZnVuZGFibGVFeGNsdWRlZCkge1xuICAgICAgICByZWZ1bmRhYmxlQ2hlY2sgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChpc1JlZnVuZGFibGVJbmNsdWRlZCkge1xuICAgICAgICByZWZ1bmRhYmxlQ2hlY2sgPSByb29tPy5wb2xpY2llcy5yZWZ1bmRBdmFpbGFibGU7XG4gICAgICB9IGVsc2UgaWYgKGlzUmVmdW5kYWJsZUV4Y2x1ZGVkKSB7XG4gICAgICAgIHJlZnVuZGFibGVDaGVjayA9ICFyb29tPy5wb2xpY2llcy5yZWZ1bmRBdmFpbGFibGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWZ1bmRhYmxlQ2hlY2sgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgYWNjZXNpYmxlQ2hlY2sgPSB0cnVlO1xuXG4gICAgICBpZiAodGhpcy5maWx0ZXJzLmFjY2Vzc2libGVSb29tVHlwZS5sZW5ndGgpIHtcbiAgICAgICAgLy8gY2hlY2sgZm9yIGFjY2Vzc2liaWxpdHlcbiAgICAgICAgY29uc3Qgbm9ybWFsaXNlZERlc2MgPSByb29tLnJvb21EZXNjcmlwdGlvbi50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBub3JtYWxpc2VkVHlwZSA9IHJvb20ucm9vbVR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgYWNjZXNpYmxlQ2hlY2sgPSAhIXRoaXMuZGlzYmFpbGl0eUtleXdvcmRzLmZpbmQoKGtleXdvcmQ6RGlzYWJsZWRLZXlXb3Jkcyk9PlxuICAgICAgICAgIG5vcm1hbGlzZWRUeXBlLmluY2x1ZGVzKGtleXdvcmQpIHx8IG5vcm1hbGlzZWREZXNjLmluY2x1ZGVzKGtleXdvcmQpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGxldCBjcm93bkNoZWNrID0gdHJ1ZTtcblxuICAgICAgaWYgKHRoaXMuZmlsdGVycy5jcm93blByZWZlcnJlZC5sZW5ndGggJiYgdGhpcy5maWx0ZXJzLmNyb3duUHJlZmVycmVkLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJysrKyBGaWx0ZXJpbmcgQ3Jvd24gUmF0ZXMgKysrJyk7XG5cbiAgICAgICAgY29uc3QgY2hvc2VuRmlsdGVyID0gdGhpcy5maWx0ZXJzLmNyb3duUHJlZmVycmVkWzBdO1xuXG4gICAgICAgIGlmIChjaG9zZW5GaWx0ZXIgPT09IFNlYXJjaEhhbmRsZXIuQ1JPV05fT05MWSkge1xuICAgICAgICAgIGNyb3duQ2hlY2sgPSByb29tLnJhdGVEZXNjcmlwdGlvbi5pbmNsdWRlcygnQ0NTIFBVQkxJQyBTRUNUT1InKTtcbiAgICAgICAgfSBlbHNlIGlmIChjaG9zZW5GaWx0ZXIgPT09IFNlYXJjaEhhbmRsZXIuTk9OX0NST1dOX09OTFkpIHtcbiAgICAgICAgICAvLyBub3QgaW5jbHVkZVxuICAgICAgICAgIGNyb3duQ2hlY2sgPSAhcm9vbS5yYXRlRGVzY3JpcHRpb24uaW5jbHVkZXMoJ0NDUyBQVUJMSUMgU0VDVE9SJyk7XG4gICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5SYW5nZSAmJiByZWZ1bmRhYmxlQ2hlY2sgJiYgYWNjZXNpYmxlQ2hlY2sgJiYgY3Jvd25DaGVjaztcbiAgICB9KTtcblxuICAgIC8vIGNvbnNvbGUubG9nKG1hdGNoZXMubGVuZ3RoKTtcbiAgICAvLyBhZGQgc29tZXRoaW5nIGhlcmUgdG8gZmlsdGVyIHJvb21zIGlmIG1hdGNoZXMgaXMgPiAwXG4gICAgICB0aGlzLmF2YWxpYWJpbGl0eVNlcnZpY2UudXBkYXRlUm9vbXMoYXZhaWxhYmlsaXR5LCBtYXRjaGVzKTtcbiAgfVxufVxuXG4gIHB1YmxpYyBoYXNDaGFpbihob3RlbDogSG90ZWxEZXRhaWxzKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdG9jaGVjayA9ICh0aGlzLmZpbHRlcnMuY2hhaW4gfHwgW10pLm1hcCgoY2hhaW46IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gY2hhaW4udG9Mb3dlckNhc2UoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdG9jaGVjayAmJiB0b2NoZWNrLmxlbmd0aFxuICAgICAgPyAhIXRvY2hlY2suZmluZCgoY2hhaW46IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gaG90ZWwuZ3JvdXAudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhjaGFpbik7XG4gICAgICB9KVxuICAgICAgOiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBicmVha2Zhc3RUeXBlRmlsdGVyKGhvdGVsOiBIb3RlbERldGFpbHMpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZmlsdGVycy5icmVha2Zhc3RUeXBlLmxlbmd0aCkgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBob3RlbE9iamVjdFZhbHVlID0gdGhpcy5nZXRIb3RlbE9iamVjdFZhbHVlKGhvdGVsKTtcbiAgICBpZiAoIWhvdGVsT2JqZWN0VmFsdWUgfHwgIWhvdGVsT2JqZWN0VmFsdWU/LnJvb21zKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBpc0JyZWFrZmFzdEluY2x1ZGVkID0gdGhpcy5maWx0ZXJzLmJyZWFrZmFzdFR5cGUuaW5jbHVkZXMoXG4gICAgICBTZWFyY2hIYW5kbGVyLkJSRUFLRkFTVF9JTkNMVURFRFxuICAgICk7XG4gICAgY29uc3QgaXNCcmVha2Zhc3RFeGNsdWRlZCA9IHRoaXMuZmlsdGVycy5icmVha2Zhc3RUeXBlLmluY2x1ZGVzKFxuICAgICAgU2VhcmNoSGFuZGxlci5CUkVBS0ZBU1RfTk9UX0lOQ0xVREVEXG4gICAgKTtcblxuICAgIGNvbnN0IGJyZWFrZmFzdE1hdGNoZXMgPSBob3RlbE9iamVjdFZhbHVlLnJvb21zLmZpbHRlcigocm9vbXM6IEhvdGVsUm9vbSkgPT4ge1xuICAgICAgY29uc3QgcmF0ZURlc2NyaXB0aW9uID0gcm9vbXMucmF0ZURlc2NyaXB0aW9uO1xuICAgICAgY29uc3Qgcm9vbURlc2NyaXB0aW9uID0gcm9vbXMucm9vbURlc2NyaXB0aW9uO1xuICAgICAgY29uc3Qgcm9vbUdlbmVyYWxQb2xpY3kgPSByb29tcy5wb2xpY2llcz8uZ2VuZXJhbDtcblxuICAgICAgaWYgKGlzQnJlYWtmYXN0SW5jbHVkZWQgJiYgaXNCcmVha2Zhc3RFeGNsdWRlZCkge1xuICAgICAgICByZXR1cm4gcm9vbXM7XG4gICAgICB9IGVsc2UgaWYgKGlzQnJlYWtmYXN0SW5jbHVkZWQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAocmF0ZURlc2NyaXB0aW9uLm1hdGNoKGluY2x1ZGVkRXhwcmVzc2lvbikgfHwgcm9vbURlc2NyaXB0aW9uLm1hdGNoKGluY2x1ZGVkRXhwcmVzc2lvbikgfHwgcm9vbUdlbmVyYWxQb2xpY3k/Lm1hdGNoKGluY2x1ZGVkRXhwcmVzc2lvbikpICYmXG4gICAgICAgICAgKCFyYXRlRGVzY3JpcHRpb24ubWF0Y2goZXhjbHVkZWRFeHByZXNzaW9uKSAmJiAhcm9vbURlc2NyaXB0aW9uLm1hdGNoKGV4Y2x1ZGVkRXhwcmVzc2lvbikgICYmICFyb29tR2VuZXJhbFBvbGljeT8ubWF0Y2goZXhjbHVkZWRFeHByZXNzaW9uKSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNCcmVha2Zhc3RFeGNsdWRlZCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICghcmF0ZURlc2NyaXB0aW9uLm1hdGNoKGluY2x1ZGVkRXhwcmVzc2lvbikgfHwgcmF0ZURlc2NyaXB0aW9uLm1hdGNoKGV4Y2x1ZGVkRXhwcmVzc2lvbikpICYmXG4gICAgICAgICAgKCFyb29tRGVzY3JpcHRpb24ubWF0Y2goaW5jbHVkZWRFeHByZXNzaW9uKSB8fCByb29tRGVzY3JpcHRpb24ubWF0Y2goZXhjbHVkZWRFeHByZXNzaW9uKSkgJiZcbiAgICAgICAgICAoIXJvb21HZW5lcmFsUG9saWN5Lm1hdGNoKGluY2x1ZGVkRXhwcmVzc2lvbikgfHwgcm9vbUdlbmVyYWxQb2xpY3kubWF0Y2goZXhjbHVkZWRFeHByZXNzaW9uKSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoYnJlYWtmYXN0TWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS51cGRhdGVSb29tcyhob3RlbE9iamVjdFZhbHVlLCBicmVha2Zhc3RNYXRjaGVzKTtcbiAgICB9XG4gICAgcmV0dXJuICEhYnJlYWtmYXN0TWF0Y2hlcy5sZW5ndGg7XG4gIH1cblxuICBwcml2YXRlIHRyYXZlbFBvbGljeUZpbHRlcihob3RlbDogSG90ZWxEZXRhaWxzKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmZpbHRlcnMudHJhdmVsUG9saWN5Lmxlbmd0aCkgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBob3RlbE9iamVjdFZhbHVlID0gdGhpcy5nZXRIb3RlbE9iamVjdFZhbHVlKGhvdGVsKTtcbiAgICBpZiAoIWhvdGVsT2JqZWN0VmFsdWUgfHwgIWhvdGVsT2JqZWN0VmFsdWU/LnJvb21zKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCB0cmF2ZWxQb2xpY3lNYXRjaGVzID0gaG90ZWxPYmplY3RWYWx1ZS5yb29tcy5maWx0ZXIoKHJvb206IEhvdGVsUm9vbSkgPT4ge1xuICAgICAgY29uc3QgcmVxdWlyZXNSZWFzb24gPSByb29tLnVuYXZhaWxhYmxlID8gVHJhdmVsUG9saWNpZXMuVU5BVkFJTEFCTEUgOiByb29tLnJlcXVpcmVzUmVhc29uS2V5cz8ubGVuZ3RoID8gVHJhdmVsUG9saWNpZXMuQUxMT1dfV0lUSF9SRUFTT04gOiBUcmF2ZWxQb2xpY2llcy5JTl9QT0xJQ1k7XG5cbiAgICAgIHJldHVybiB0aGlzLmZpbHRlcnMudHJhdmVsUG9saWN5LmZpbmQoXG4gICAgICAgIHBvbGljeSA9PiBwb2xpY3kudG9Mb3dlckNhc2UoKSA9PT0gcmVxdWlyZXNSZWFzb24udG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICB9KTtcbiAgICBpZiAodHJhdmVsUG9saWN5TWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS51cGRhdGVSb29tcyhob3RlbE9iamVjdFZhbHVlLCB0cmF2ZWxQb2xpY3lNYXRjaGVzKTtcbiAgICB9XG4gICAgcmV0dXJuICEhdHJhdmVsUG9saWN5TWF0Y2hlcy5sZW5ndGg7XG4gIH1cblxuICBwcml2YXRlIGFjY2Vzc2libGVSb29tVHlwZUZpbHRlcihob3RlbDogSG90ZWxEZXRhaWxzKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmZpbHRlcnMuYWNjZXNzaWJsZVJvb21UeXBlLmxlbmd0aCkgcmV0dXJuIHRydWU7XG4gICAgY29uc3QgaG90ZWxPYmplY3RWYWx1ZSA9IHRoaXMuZ2V0SG90ZWxPYmplY3RWYWx1ZShob3RlbCk7XG4gICAgaWYgKCFob3RlbE9iamVjdFZhbHVlIHx8ICFob3RlbE9iamVjdFZhbHVlPy5yb29tcykgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgbWF0Y2hlcyA9IHRoaXMuZmlsdGVyUm9vbXNCeUFjY2Vzc2liaWxpdHkoaG90ZWxPYmplY3RWYWx1ZSk7XG4gICAgaWYgKG1hdGNoZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmF2YWxpYWJpbGl0eVNlcnZpY2UudXBkYXRlUm9vbXMoaG90ZWxPYmplY3RWYWx1ZSwgbWF0Y2hlcyk7XG4gICAgfVxuICAgIHJldHVybiAhIW1hdGNoZXMubGVuZ3RoO1xuICB9XG5cbiAgZmlsdGVyUm9vbXNCeUFjY2Vzc2liaWxpdHkoaG90ZWxPYmplY3RWYWx1ZTogSG90ZWxBdmFsaWJpbGl0eVF1b3RlUmVzdWx0KTogSG90ZWxSb29tW10ge1xuICAgIHJldHVybiAoaG90ZWxPYmplY3RWYWx1ZT8ucm9vbXMgfHwgW10pLmZpbHRlcihcbiAgICAgIChyb29tOiBIb3RlbFJvb20pID0+XG4gICAgICAgIHJvb20ucmF0ZURlc2NyaXB0aW9uLm1hdGNoKGluY2x1ZGVkQWNjZXNzaWJpbGl0eUV4cHJlc3Npb24pIHx8XG4gICAgICAgIHJvb20ucm9vbURlc2NyaXB0aW9uLm1hdGNoKGluY2x1ZGVkQWNjZXNzaWJpbGl0eUV4cHJlc3Npb24pIHx8XG4gICAgICAgIHJvb20ucm9vbVR5cGUubWF0Y2goaW5jbHVkZWRBY2Nlc3NpYmlsaXR5RXhwcmVzc2lvbilcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZ1bmRhYmxlUm9vbVR5cGVGaWx0ZXIoaG90ZWw6IEhvdGVsRGV0YWlscyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhvdGVsT2JqZWN0VmFsdWUgPSB0aGlzLmdldEhvdGVsT2JqZWN0VmFsdWUoaG90ZWwpO1xuXG4gICAgaWYgKCFob3RlbE9iamVjdFZhbHVlIHx8ICFob3RlbE9iamVjdFZhbHVlPy5yb29tcykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBpc1JlZnVuZGFibGVJbmNsdWRlZCA9IHRoaXMuZmlsdGVycy5yZWZ1bmRhYmxlUm9vbVR5cGUuaW5jbHVkZXMoU2VhcmNoSGFuZGxlci5SRUZVTkRBQkxFKTtcbiAgICBjb25zdCBpc1JlZnVuZGFibGVFeGNsdWRlZCA9IHRoaXMuZmlsdGVycy5yZWZ1bmRhYmxlUm9vbVR5cGUuaW5jbHVkZXMoXG4gICAgICBTZWFyY2hIYW5kbGVyLk5PTl9SRUZVTkRBQkxFXG4gICAgKTtcblxuICAgICAgY29uc3QgbWF0Y2hlcyA9IGhvdGVsT2JqZWN0VmFsdWUuZnVsbFJvb21zPyBob3RlbE9iamVjdFZhbHVlLmZ1bGxSb29tcy5maWx0ZXIoKHJvb21zOiBIb3RlbFJvb21XaXRoTG9jYWxQcmljZSkgPT4ge1xuICAgICAgICBpZiAoaXNSZWZ1bmRhYmxlSW5jbHVkZWQgJiYgaXNSZWZ1bmRhYmxlRXhjbHVkZWQpIHtcbiAgICAgICAgICByZXR1cm4gcm9vbXM7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNSZWZ1bmRhYmxlSW5jbHVkZWQpIHtcbiAgICAgICAgICByZXR1cm4gcm9vbXM/LnBvbGljaWVzLnJlZnVuZEF2YWlsYWJsZTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1JlZnVuZGFibGVFeGNsdWRlZCkge1xuICAgICAgICAgIHJldHVybiAhcm9vbXM/LnBvbGljaWVzLnJlZnVuZEF2YWlsYWJsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcm9vbXM7XG4gICAgICAgIH1cbiAgICAgIH0pIDogW107XG5cbiAgICAgIC8vIGFkZCBzb21ldGhpbmcgaGVyZSB0byBmaWx0ZXIgcm9vbXMgaWYgbWF0Y2hlcyBpcyA+IDBcbiAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmF2YWxpYWJpbGl0eVNlcnZpY2UudXBkYXRlUm9vbXMoaG90ZWxPYmplY3RWYWx1ZSwgbWF0Y2hlcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhIW1hdGNoZXMubGVuZ3RoO1xuICB9XG5cbiAgcHJpdmF0ZSByb29tVHlwZUZpbHRlcihob3RlbDogSG90ZWxEZXRhaWxzKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmZpbHRlcnMucm9vbVR5cGUubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBob3RlbE9iamVjdFZhbHVlID0gdGhpcy5nZXRIb3RlbE9iamVjdFZhbHVlKGhvdGVsKTtcbiAgICBpZiAoIWhvdGVsT2JqZWN0VmFsdWUgfHwgIWhvdGVsT2JqZWN0VmFsdWU/LnJvb21zKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGlzU2luZ2xlSW5jbHVkZWQgPSB0aGlzLmZpbHRlcnMucm9vbVR5cGUuaW5jbHVkZXMoUm9vbVR5cGUuU2luZ2xlUm9vbSk7XG4gICAgY29uc3QgaXNEb3VibGVJbmNsdWRlZCA9IHRoaXMuZmlsdGVycy5yb29tVHlwZS5pbmNsdWRlcyhSb29tVHlwZS5Eb3VibGVSb29tKTtcbiAgICBjb25zdCBpc1R3aW5JbmNsdWRlZCA9IHRoaXMuZmlsdGVycy5yb29tVHlwZS5pbmNsdWRlcyhSb29tVHlwZS5Ud2luUm9vbSk7XG4gICAgY29uc3QgaXNLaW5nSW5jbHVkZWQgPSB0aGlzLmZpbHRlcnMucm9vbVR5cGUuaW5jbHVkZXMoUm9vbVR5cGUuS2luZ1Jvb20pO1xuICAgIGNvbnN0IGlzU3VpdGVJbmNsdWRlZCA9IHRoaXMuZmlsdGVycy5yb29tVHlwZS5pbmNsdWRlcyhSb29tVHlwZS5TdWl0ZSk7XG4gICAgY29uc3QgaXNRdWVlbkluY2x1ZGVkID0gdGhpcy5maWx0ZXJzLnJvb21UeXBlLmluY2x1ZGVzKFJvb21UeXBlLlF1ZWVuUm9vbSk7XG5cbiAgICBjb25zdCBtYXRjaGVzID0gaG90ZWxPYmplY3RWYWx1ZS5yb29tcy5maWx0ZXIoKHJvb206IEhvdGVsUm9vbSkgPT4ge1xuICAgICAgLy8gd2UgbWVlZCB0byBjaGVjayB0aGUgcm9vbSB0eXBlIGFuZCBwdXQgaXQgaW50byBvbmUgb2YgdGhlIGNhdGVnb3J5cyBhYm92ZVxuICAgICAgY29uc3Qgcm9vbVR5cGU6IFJvb21UeXBlID0gdGhpcy5nZXRSb29tVHlwZShyb29tKTtcbiAgICAgIHJldHVybiByb29tVHlwZSA9PT0gUm9vbVR5cGUuU2luZ2xlUm9vbSAmJiBpc1NpbmdsZUluY2x1ZGVkIHx8XG4gICAgICAgIHJvb21UeXBlID09PSBSb29tVHlwZS5Eb3VibGVSb29tICYmIGlzRG91YmxlSW5jbHVkZWQgfHxcbiAgICAgICAgcm9vbVR5cGUgPT09IFJvb21UeXBlLlR3aW5Sb29tICYmIGlzVHdpbkluY2x1ZGVkIHx8XG4gICAgICAgIHJvb21UeXBlID09PSBSb29tVHlwZS5LaW5nUm9vbSAmJiBpc0tpbmdJbmNsdWRlZCB8fFxuICAgICAgICByb29tVHlwZSA9PT0gUm9vbVR5cGUuUXVlZW5Sb29tICYmIGlzUXVlZW5JbmNsdWRlZCB8fFxuICAgICAgICByb29tVHlwZSA9PT0gUm9vbVR5cGUuU3VpdGUgJiYgaXNTdWl0ZUluY2x1ZGVkO1xuICAgIH0pO1xuICAgIGlmIChtYXRjaGVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5hdmFsaWFiaWxpdHlTZXJ2aWNlLnVwZGF0ZVJvb21zKGhvdGVsT2JqZWN0VmFsdWUsIG1hdGNoZXMpO1xuICAgIH1cbiAgICByZXR1cm4gISFtYXRjaGVzLmxlbmd0aDtcbiAgfVxuICBnZXRSb29tVHlwZShyb29tOiBIb3RlbFJvb20pOiBSb29tVHlwZSB7XG4gICAgLy8gaGVyZSB1c2UgYSByZWdleCB0byBnZXQgdGhlIHJvb20gdHlwZVxuICAgIGlmIChyb29tLnJvb21UeXBlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3NpbmdsZScpKSB7XG4gICAgICByZXR1cm4gUm9vbVR5cGUuU2luZ2xlUm9vbTtcbiAgICB9XG4gICAgaWYgKHJvb20ucm9vbVR5cGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZG91YmxlJykpIHtcbiAgICAgIHJldHVybiBSb29tVHlwZS5Eb3VibGVSb29tO1xuICAgIH1cbiAgICBpZiAocm9vbS5yb29tVHlwZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCd0d2luJykgfHwgcm9vbS5yb29tVHlwZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdzdGFuZGFyZCcpKSB7XG4gICAgICByZXR1cm4gUm9vbVR5cGUuVHdpblJvb207XG4gICAgfVxuICAgIGlmIChyb29tLnJvb21UeXBlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2tpbmcnKSkge1xuICAgICAgcmV0dXJuIFJvb21UeXBlLktpbmdSb29tO1xuICAgIH1cbiAgICBpZiAocm9vbS5yb29tVHlwZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdxdWVlbicpKSB7XG4gICAgICByZXR1cm4gUm9vbVR5cGUuUXVlZW5Sb29tO1xuICAgIH1cbiAgICBpZiAocm9vbS5yb29tVHlwZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdzdWl0ZScpIHx8IHJvb20ucm9vbVR5cGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZmFtaWx5JykpIHtcbiAgICAgIHJldHVybiBSb29tVHlwZS5TdWl0ZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBnZXRIb3RlbE9iamVjdFZhbHVlKGhvdGVsOiBIb3RlbERldGFpbHMpOiBIb3RlbEF2YWxpYmlsaXR5UXVvdGVSZXN1bHQge1xuICAgIGNvbnN0IGhvdGVsT2JqZWN0ID0gdGhpcy5hdmFsaWFiaWxpdHlTZXJ2aWNlLmdldEF2YWlsYWJpbGl0eUZvcklkKFxuICAgICAgdGhpcy5tYWtlSG90ZWxBdmFsaWxpdHlPYmplY3QoaG90ZWwpLFxuICAgICAgaG90ZWxcbiAgICApO1xuICAgIHJldHVybiAhaG90ZWxPYmplY3QgJiYgIWhvdGVsT2JqZWN0LnZhbHVlID8gbnVsbCA6IGhvdGVsT2JqZWN0LnZhbHVlO1xuICB9XG5cbiAgYnlNb3N0RXhwZW5zaXZlKCkge1xuICAgIHRoaXMuc29ydEJ5UHJpY2UoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbWluXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZGVidWcgc2V0IHRoaXMgdG8gdHJ1ZSB0byBvdXRwdXQgY29uc29sZSBsb2dzXG4gICAqIEBkZXNjcmlwdGlvbiBzb3J0cyByZXN1bHRzIGJ5IHByaWNlIGFjY29yZGluZyB0byB0aGUgJ21pbicgcGFyYW1hdGVyLiBtaW4gPSB0cnVlIChsb3dlc3QgcHJpY2UgZmlyc3QpLCBtaW4gPSBmYWxzZSAoaGlnaGVzdCBwcmljZSBmaXJzdClcbiAgICogSW4gc3VtbWFyeSwgdGhpcyBtZXRob2QgY3JlYXRlcyBhIHNvcnRlZCBhcnJheSBvZiBob3RlbHMgd2l0aCBwcmljZXMgYW5kIGFuIGFycmF5IG9mIGhvdGVscyBXSVRIT1VUIHByaWNlcyxcbiAgICogdGhlbiBmaW5hbGx5IGpvaW5zIHRoZXNlIDIgdGVtcG9yYXJ5IGFycmF5cyB0b2dldGhlciBiZWZvcmUgdHJpZ2dlcmluZyB0aGUgbmV4dCBvYnNlcnZhYmxlLlxuICAgKi9cblxuICBzb3J0QnlQcmljZShtaW4gPSB0cnVlLCBkZWJ1ZyA9IHRydWUpOiB2b2lkIHtcbiAgICAvLyBzdG9yZSBhbGwgcmVzdWx0c1xuICAgIGNvbnN0IGhvdGVsczogSG90ZWxEZXRhaWxzQXJyYXkgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5yZXN1bHRzLnZhbHVlKTtcblxuICAgIC8vIGdldCBob3RlbHMgd2l0aCBhbmQgd2l0aG91dCBwcmljZXNcbiAgICBjb25zdCBob3RlbHNXaXRoUHJpY2VzOiBIb3RlbERldGFpbHNBcnJheSA9IFtdO1xuICAgIGNvbnN0IGhvdGVsc1dpdGhvdXRQcmljZXM6IEhvdGVsRGV0YWlsc0FycmF5ID0gW107XG4gICAgaG90ZWxzLmZvckVhY2goaG90ZWxSZXN1bHQgPT5cbiAgICAgIHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5nZXRBdmFpbGFiaWxpdHlWYWx1ZShob3RlbFJlc3VsdCk/LnBycG5cbiAgICAgICAgPyBob3RlbHNXaXRoUHJpY2VzLnB1c2goaG90ZWxSZXN1bHQpXG4gICAgICAgIDogaG90ZWxzV2l0aG91dFByaWNlcy5wdXNoKGhvdGVsUmVzdWx0KVxuICAgICk7XG5cbiAgICAvLyBzb3J0IGhvdGVscyB3aXRoIHByaWNlcyBhY2NvcmRpbmcgdG8gdGhlICdtaW4nIHBhcmFtZXRlciBmb3IgdGhlIG9yZGVyXG4gICAgaG90ZWxzV2l0aFByaWNlcy5zb3J0KChmaXJzdDogSG90ZWxEZXRhaWxzLCBzZWNvbmQ6IEhvdGVsRGV0YWlscykgPT4ge1xuICAgICAgY29uc3QgZmlyc3RQcmljZSA9IHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5nZXRBdmFpbGFiaWxpdHlWYWx1ZShmaXJzdCk/LnBycG47XG4gICAgICBjb25zdCBzZWNvbmRQcmljZSA9IHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5nZXRBdmFpbGFiaWxpdHlWYWx1ZShzZWNvbmQpPy5wcnBuO1xuICAgICAgcmV0dXJuIG1pblxuICAgICAgICA/IGZpcnN0UHJpY2UgPiBzZWNvbmRQcmljZVxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogc2Vjb25kUHJpY2UgPiBmaXJzdFByaWNlXG4gICAgICAgICAgICA/IC0xXG4gICAgICAgICAgICA6IDBcbiAgICAgICAgOiBmaXJzdFByaWNlIDwgc2Vjb25kUHJpY2VcbiAgICAgICAgICA/IDFcbiAgICAgICAgICA6IHNlY29uZFByaWNlIDwgZmlyc3RQcmljZVxuICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgOiAwO1xuICAgIH0pO1xuXG4gICAgLy8gam9pbiBob3RlbHMgd2l0aCBwcmljZXMgdG8gaG90ZWxzIFdJVEhPVVQgcHJpY2VzXG4gICAgY29uc3Qgc29ydGVkSG90ZWxzID0gWy4uLmhvdGVsc1dpdGhQcmljZXMsIC4uLmhvdGVsc1dpdGhvdXRQcmljZXNdO1xuICAgIC8vIHRyaWdnZXIgbmV4dCBvYnNlcnZhYmxlXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoc29ydGVkSG90ZWxzKTtcbiAgICAvLyBkaXNwbGF5IGNvbnNvbGUgbG9ncyBpZiBkZWJ1ZyBpcyB0cnVlIChjb3VsZCBwcm92ZSB1c2VmdWwgaW4gZnV0dXJlKVxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgY29uc29sZS5sb2coJysrIHNvcnRCeVByaWNlKCkgY2FsbGVkICsrJyk7XG4gICAgICBjb25zb2xlLmxvZygnKysgaG90ZWwgKysnLCBob3RlbHMpO1xuICAgICAgY29uc29sZS5sb2coJysrIGhvdGVsc1dpdGhQcmljZXMgKysnLCBob3RlbHNXaXRoUHJpY2VzKTtcbiAgICAgIGNvbnNvbGUubG9nKCcrKyBob3RlbHNXaXRob3V0UHJpY2VzICsrJywgaG90ZWxzV2l0aG91dFByaWNlcyk7XG4gICAgICBjb25zb2xlLmxvZygnKysgc29ydGVkSG90ZWxzICsrJywgc29ydGVkSG90ZWxzKTtcbiAgICB9XG4gIH1cblxuICBzb3J0QnlOYW1lKCk6IHZvaWQge1xuXG4gICAgbGV0IHJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5yZXN1bHRzLnZhbHVlKTtcbiAgICBjb25zdCByZXN1bHRzV2l0aG91dFJhdGVzID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdHMpLmZpbHRlcihyZXN1bHQgPT4gIXJlc3VsdC5hdmFpbGFibGVSYXRlcz8ubWlucHJpY2UpO1xuICAgIGNvbnN0IHJlc3VsdHNSYXRlcyA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzKS5maWx0ZXIocmVzdWx0ID0+IHJlc3VsdC5hdmFpbGFibGVSYXRlcz8ubWlucHJpY2UpO1xuICAgIHJlc3VsdHMgPSByZXN1bHRzUmF0ZXM7XG5cbiAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KChmc3Q6IEhvdGVsRGV0YWlscywgc25kOiBIb3RlbERldGFpbHMpOiBudW1iZXIgPT4ge1xuICAgICAgcmV0dXJuIGZzdC5uYW1lLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShzbmQubmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9KVxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMuY29uY2F0KHJlc3VsdHNXaXRob3V0UmF0ZXMpKTtcbiAgfVxuXG4gIHNvcnRCeURpc3RhbmNlKCk6IHZvaWQge1xuICAgIC8vIGNvbnNvbGUubG9nKCcrKysgU29ydGluZyBieSBkaXN0YW5jZSArKysnKTtcbiAgICBsZXQgcmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLnJlc3VsdHMudmFsdWUpO1xuICAgIGNvbnN0IHJlc3VsdHNXaXRob3V0UmF0ZXMgPSB0aGlzLmhlbHBlcnMuY2xvbmUocmVzdWx0cykuZmlsdGVyKHJlc3VsdCA9PiAhcmVzdWx0LmF2YWlsYWJsZVJhdGVzPy5taW5wcmljZSk7XG4gICAgY29uc3QgcmVzdWx0c1JhdGVzID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdHMpLmZpbHRlcihyZXN1bHQgPT4gcmVzdWx0LmF2YWlsYWJsZVJhdGVzPy5taW5wcmljZSk7XG4gICAgcmVzdWx0cyA9IHJlc3VsdHNSYXRlcztcbiAgICB0cnkge1xuICAgICAgLy8gU3BsaXQgcmVzdWx0cyBpbnRvIHByZWZlcnJlZCBhbmQgbm9uLXByZWZlcnJlZCBob3RlbHNcbiAgICAgIGNvbnN0IGNsaWVudFByZWZlcnJlZEhvdGVscyA9IHJlc3VsdHMuZmlsdGVyKChob3RlbDogSG90ZWxEZXRhaWxzKSA9PlxuICAgICAgICB0aGlzLnByZWZlcnJlZFRvSW50KGhvdGVsLCBIb3RlbFNvcnRPcmRlci5DbGllbnRQcmVmZXJyZWQpID4gMFxuICAgICAgKTtcblxuICAgICAgY29uc3QgYWdlbmN5UHJlZmVycmVkSG90ZWxzID0gcmVzdWx0cy5maWx0ZXIoKGhvdGVsOiBIb3RlbERldGFpbHMpID0+XG4gICAgICAgIHRoaXMucHJlZmVycmVkVG9JbnQoaG90ZWwsIEhvdGVsU29ydE9yZGVyLkNsaWVudFByZWZlcnJlZCkgPT09IDAgJiZcbiAgICAgICAgdGhpcy5wcmVmZXJyZWRUb0ludChob3RlbCwgSG90ZWxTb3J0T3JkZXIuQWdlbmN5UHJlZmVycmVkKSA+IDBcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IG5vblByZWZlcnJlZEhvdGVscyA9IHJlc3VsdHMuZmlsdGVyKChob3RlbDogSG90ZWxEZXRhaWxzKSA9PlxuICAgICAgICB0aGlzLnByZWZlcnJlZFRvSW50KGhvdGVsLCBIb3RlbFNvcnRPcmRlci5BZ2VuY3lQcmVmZXJyZWQpID09PSAwICYmXG4gICAgICAgIHRoaXMucHJlZmVycmVkVG9JbnQoaG90ZWwsIEhvdGVsU29ydE9yZGVyLkNsaWVudFByZWZlcnJlZCkgPT09IDBcbiAgICAgICk7XG5cbiAgICAgICAvLyBTb3J0IGFsbCB0aHJlZSBncm91cHMgYnkgZGlzdGFuY2VcbiAgICAgIGNsaWVudFByZWZlcnJlZEhvdGVscy5zb3J0KChhOiBIb3RlbERldGFpbHMsIGI6IEhvdGVsRGV0YWlscykgPT5cbiAgICAgICAgTnVtYmVyKGEubG9jYXRpb24uZGlzdGFuY2UpIC0gTnVtYmVyKGIubG9jYXRpb24uZGlzdGFuY2UpXG4gICAgICApO1xuXG4gICAgICBhZ2VuY3lQcmVmZXJyZWRIb3RlbHMuc29ydCgoYTogSG90ZWxEZXRhaWxzLCBiOiBIb3RlbERldGFpbHMpID0+XG4gICAgICAgIE51bWJlcihhLmxvY2F0aW9uLmRpc3RhbmNlKSAtIE51bWJlcihiLmxvY2F0aW9uLmRpc3RhbmNlKVxuICAgICAgKTtcblxuICAgICAgbm9uUHJlZmVycmVkSG90ZWxzLnNvcnQoKGE6IEhvdGVsRGV0YWlscywgYjogSG90ZWxEZXRhaWxzKSA9PlxuICAgICAgICBOdW1iZXIoYS5sb2NhdGlvbi5kaXN0YW5jZSkgLSBOdW1iZXIoYi5sb2NhdGlvbi5kaXN0YW5jZSlcbiAgICAgICk7XG5cbiAgICAgIC8vIENvbWJpbmUgc29ydGVkIHByZWZlcnJlZCwgbm9uLXByZWZlcnJlZCBob3RlbHMsIGFuZCB0aG9zZSB3aXRob3V0IHJhdGVzXG4gICAgICByZXN1bHRzID0gWy4uLmNsaWVudFByZWZlcnJlZEhvdGVscywgLi4uYWdlbmN5UHJlZmVycmVkSG90ZWxzLCAuLi5ub25QcmVmZXJyZWRIb3RlbHMsIC4uLnJlc3VsdHNXaXRob3V0UmF0ZXNdO1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJysrKyBFcnJvciBzb3J0aW5nIGJ5IHByZWZlcnJlZDogJywgZXJyb3IsICcgKysrJyk7XG4gICAgfVxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xuICB9XG5cbiAgc29ydEJ5RGlzdGFuY2VTY2lvbigpOiB2b2lkIHtcbiAgICBsZXQgcmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLnJlc3VsdHMudmFsdWUpO1xuICAgIGNvbnN0IHJlc3VsdHNSYXRlcyA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzKS5maWx0ZXIocmVzdWx0ID0+IHJlc3VsdC5hdmFpbGFibGVSYXRlcz8ubWlucHJpY2UpO1xuICAgIHJlc3VsdHMgPSByZXN1bHRzUmF0ZXM7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdHMuc29ydCgoYTogSG90ZWxEZXRhaWxzLCBiOiBIb3RlbERldGFpbHMpID0+XG4gICAgICAgIE51bWJlcihhLmxvY2F0aW9uLmRpc3RhbmNlKSAtIE51bWJlcihiLmxvY2F0aW9uLmRpc3RhbmNlKVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignKysrIEVycm9yIHNvcnRpbmcgYnkgZGlzdGFuY2Ugc2Npb246ICcsIGVycm9yLCAnICsrKycpO1xuICAgIH1cbiAgICB0aGlzLnJlc3VsdHMubmV4dChyZXN1bHRzKTtcbiAgfVxuXG4gIHNvcnRCeURpc3RhbmNlUmV2ZXJzZSgpOiB2b2lkIHtcbiAgICBsZXQgcmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLnJlc3VsdHMudmFsdWUpO1xuICAgIGNvbnN0IHJlc3VsdHNSYXRlcyA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzKS5maWx0ZXIocmVzdWx0ID0+IHJlc3VsdC5hdmFpbGFibGVSYXRlcz8ubWlucHJpY2UpO1xuICAgIHJlc3VsdHMgPSByZXN1bHRzUmF0ZXM7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdHMuc29ydCgoYTogSG90ZWxEZXRhaWxzLCBiOiBIb3RlbERldGFpbHMpID0+XG4gICAgICAgIE51bWJlcihiLmxvY2F0aW9uLmRpc3RhbmNlKSAtIE51bWJlcihhLmxvY2F0aW9uLmRpc3RhbmNlKVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignKysrIEVycm9yIHNvcnRpbmcgYnkgZGlzdGFuY2UgcmV2ZXJzZTogJywgZXJyb3IsICcgKysrJyk7XG4gICAgfVxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xuICB9XG5cbiAgYnlQcmVmZXJyZWQoKTogdm9pZCB7XG4gICAgbGV0IHJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5yZXN1bHRzLnZhbHVlKTtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydCgoYTogSG90ZWxEZXRhaWxzLCBiOiBIb3RlbERldGFpbHMpID0+IHtcbiAgICAgICAgLy9JZiBwcmVmZXJyZWQgdmFsdWVzIGRvIG5vdCBoYXZlIHRoYXQgc2FtZSB3ZWlnaHQgdGhlbiBzb3J0IGJ5IHByZWZlcnJlZFxuICAgICAgICBpZiAodGhpcy5wcmVmZXJyZWRUb0ludChiKSAtIHRoaXMucHJlZmVycmVkVG9JbnQoYSkgIT09IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wcmVmZXJyZWRUb0ludChiKSAtIHRoaXMucHJlZmVycmVkVG9JbnQoYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy9JZiB0aGV5IGRvLCB0aGVuIHNvcnQgYnkgY2hlYXBlc3QgLSBtb3N0IGV4cGVuc2l2ZVxuICAgICAgICAgIGNvbnN0IGZpcnN0UHJpY2UgPSB0aGlzLmF2YWxpYWJpbGl0eVNlcnZpY2UuZ2V0QXZhaWxhYmlsaXR5VmFsdWUoYSk/LnBycG5cbiAgICAgICAgICAgID8gdGhpcy5hdmFsaWFiaWxpdHlTZXJ2aWNlLmdldEF2YWlsYWJpbGl0eVZhbHVlKGEpPy5wcnBuXG4gICAgICAgICAgICA6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICAgICAgICAgIGNvbnN0IHNlY29uZFByaWNlID0gdGhpcy5hdmFsaWFiaWxpdHlTZXJ2aWNlLmdldEF2YWlsYWJpbGl0eVZhbHVlKGIpPy5wcnBuXG4gICAgICAgICAgICA/IHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5nZXRBdmFpbGFiaWxpdHlWYWx1ZShiKT8ucHJwblxuICAgICAgICAgICAgOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICAgICAgICByZXR1cm4gZmlyc3RQcmljZSA+IHNlY29uZFByaWNlID8gMSA6IHNlY29uZFByaWNlID4gZmlyc3RQcmljZSA/IC0xIDogMDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJysrKyBFcnJvciBzb3J0aW5nIGJ5IHByZWZlcnJlZDogJywgZXJyb3IsICcgKysrJyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cyk7XG4gIH1cblxuICBieVVJUHJlZmVycmVkKHByZWZlcnJlZFR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5yZXN1bHRzLnZhbHVlKTtcbiAgICByZXN1bHRzLnNvcnQoKGE6IEhvdGVsRGV0YWlscywgYjogSG90ZWxEZXRhaWxzKSA9PiB7XG4gICAgICAvL0lmIHRoZXkgZG8sIHRoZW4gc29ydCBieSBjaGVhcGVzdCAtIG1vc3QgZXhwZW5zaXZlXG4gICAgICBjb25zdCBmaXJzdFByaWNlID0gdGhpcy5hdmFsaWFiaWxpdHlTZXJ2aWNlLmdldEF2YWlsYWJpbGl0eVZhbHVlKGEpPy5wcnBuXG4gICAgICAgID8gdGhpcy5hdmFsaWFiaWxpdHlTZXJ2aWNlLmdldEF2YWlsYWJpbGl0eVZhbHVlKGEpPy5wcnBuXG4gICAgICAgIDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgICBjb25zdCBzZWNvbmRQcmljZSA9IHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5nZXRBdmFpbGFiaWxpdHlWYWx1ZShiKT8ucHJwblxuICAgICAgICA/IHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5nZXRBdmFpbGFiaWxpdHlWYWx1ZShiKT8ucHJwblxuICAgICAgICA6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICAgICAgcmV0dXJuIGZpcnN0UHJpY2UgPiBzZWNvbmRQcmljZSA/IDEgOiBzZWNvbmRQcmljZSA+IGZpcnN0UHJpY2UgPyAtMSA6IDA7XG4gICAgfSk7XG4gICAgaWYgKHByZWZlcnJlZFR5cGUgPT09IEhvdGVsU29ydE9yZGVyLkFnZW5jeVByZWZlcnJlZCkge1xuICAgICAgcmVzdWx0c1xuICAgICAgICAuc29ydChcbiAgICAgICAgICAoYTogSG90ZWxEZXRhaWxzLCBiOiBIb3RlbERldGFpbHMpID0+XG4gICAgICAgICAgICB0aGlzLnByZWZlcnJlZFRvSW50KGIsIEhvdGVsU29ydE9yZGVyLkNsaWVudFByZWZlcnJlZCkgLVxuICAgICAgICAgICAgdGhpcy5wcmVmZXJyZWRUb0ludChhLCBIb3RlbFNvcnRPcmRlci5DbGllbnRQcmVmZXJyZWQpXG4gICAgICAgIClcbiAgICAgICAgLnNvcnQoXG4gICAgICAgICAgKGE6IEhvdGVsRGV0YWlscywgYjogSG90ZWxEZXRhaWxzKSA9PlxuICAgICAgICAgICAgdGhpcy5wcmVmZXJyZWRUb0ludChiLCBIb3RlbFNvcnRPcmRlci5BZ2VuY3lQcmVmZXJyZWQpIC1cbiAgICAgICAgICAgIHRoaXMucHJlZmVycmVkVG9JbnQoYSwgSG90ZWxTb3J0T3JkZXIuQWdlbmN5UHJlZmVycmVkKVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRzXG4gICAgICAgIC5zb3J0KFxuICAgICAgICAgIChhOiBIb3RlbERldGFpbHMsIGI6IEhvdGVsRGV0YWlscykgPT5cbiAgICAgICAgICAgIHRoaXMucHJlZmVycmVkVG9JbnQoYiwgSG90ZWxTb3J0T3JkZXIuQWdlbmN5UHJlZmVycmVkKSAtXG4gICAgICAgICAgICB0aGlzLnByZWZlcnJlZFRvSW50KGEsIEhvdGVsU29ydE9yZGVyLkFnZW5jeVByZWZlcnJlZClcbiAgICAgICAgKVxuICAgICAgICAuc29ydChcbiAgICAgICAgICAoYTogSG90ZWxEZXRhaWxzLCBiOiBIb3RlbERldGFpbHMpID0+XG4gICAgICAgICAgICB0aGlzLnByZWZlcnJlZFRvSW50KGIsIEhvdGVsU29ydE9yZGVyLkNsaWVudFByZWZlcnJlZCkgLVxuICAgICAgICAgICAgdGhpcy5wcmVmZXJyZWRUb0ludChhLCBIb3RlbFNvcnRPcmRlci5DbGllbnRQcmVmZXJyZWQpXG4gICAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVmZXJyZWRUb0ludChob3RlbDogSG90ZWxEZXRhaWxzLCBwcmVmZXJyZWRUeXBlOiBzdHJpbmcgPSBudWxsKTogbnVtYmVyIHtcbiAgICBjb25zdCBhZ2VuY3lTb3J0ID0gaG90ZWwucHJlZmVycmVkLmNvbnN1bWVyID8gIGhvdGVsLnByZWZlcnJlZC5jb25zdW1lclByaW9yaXR5ID8gdGhpcy5oZWxwZXJzLmZsaXBOdW1iZXJzRm9yUHJlZmVycmVkKGhvdGVsLnByZWZlcnJlZC5jb25zdW1lclByaW9yaXR5KSA6IEFHRU5UX1BSRUZFUlJFRF9WQUxVRSA6IDA7XG4gICAgY29uc3QgY2xpZW50U29ydCA9IGhvdGVsLnByZWZlcnJlZC5jbGllbnQgPyBob3RlbC5wcmVmZXJyZWQuY2xpZW50UHJpb3JpdHkgPyB0aGlzLmhlbHBlcnMuZmxpcE51bWJlcnNGb3JQcmVmZXJyZWQoaG90ZWwucHJlZmVycmVkLmNsaWVudFByaW9yaXR5KSA6IENMSUVOVF9QUkVGRVJSRURfVkFMVUUgOiAwO1xuICAgIHN3aXRjaChwcmVmZXJyZWRUeXBlKXtcbiAgICAgIGNhc2UgSG90ZWxTb3J0T3JkZXIuQWdlbmN5UHJlZmVycmVkOlxuICAgICAgICByZXR1cm4gYWdlbmN5U29ydDtcbiAgICAgIGNhc2UgSG90ZWxTb3J0T3JkZXIuQ2xpZW50UHJlZmVycmVkOlxuICAgICAgICByZXR1cm4gY2xpZW50U29ydDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY2xpZW50U29ydHx8IGFnZW5jeVNvcnRcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXJSYXRpbmdGaWx0ZXIoaG90ZWw6IEhvdGVsRGV0YWlscyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRvY2hlY2sgPSAodGhpcy5maWx0ZXJzLnN0YXJSYXRpbmcgfHwgW10pLm1hcCgoc3RhclJhdGluZzogc3RyaW5nKTogbnVtYmVyID0+IHtcbiAgICAgIHN3aXRjaChzdGFyUmF0aW5nKSB7XG4gICAgICAgIGNhc2UgU3RhclJhdGluZy5VbnJhdGVkOlxuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgY2FzZSBTdGFyUmF0aW5nLlR3b1N0YXI6XG4gICAgICAgICAgcmV0dXJuIDI7XG4gICAgICAgIGNhc2UgU3RhclJhdGluZy5UaHJlZVN0YXI6XG4gICAgICAgICAgcmV0dXJuIDM7XG4gICAgICAgIGNhc2UgU3RhclJhdGluZy5Gb3VyU3RhcjpcbiAgICAgICAgICByZXR1cm4gNDtcbiAgICAgICAgY2FzZSBTdGFyUmF0aW5nLkZpdmVTdGFyOlxuICAgICAgICAgIHJldHVybiA1O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0b2NoZWNrICYmIHRvY2hlY2subGVuZ3RoXG4gICAgICA/ICEhdG9jaGVjay5maW5kKChzdGFyUmF0aW5nOiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHN0YXJSYXRpbmcgPT09IGhvdGVsLnN0YXJzIHx8IChzdGFyUmF0aW5nID09PSAtMSAmJiAhaG90ZWwuc3RhcnMpO1xuICAgICAgfSlcbiAgICAgIDogdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgY3VzdG9tZXJSYXRpbmdGaWx0ZXIoaG90ZWw6IEhvdGVsRGV0YWlscyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJhdGluZzogbnVtYmVyID0gdGhpcy5ob3RlbHNSYXRpbmdzPy5ob3RlbHMuZmluZCgoaG90ZWxSYXRpbmdzKSA9PiBob3RlbFJhdGluZ3M/LmhvdGVsTmFtZS50b0xvd2VyQ2FzZSgpID09PSBob3RlbD8ubmFtZS50b0xvd2VyQ2FzZSgpKT8ucmF0aW5nO1xuICAgIGNvbnN0IHRvY2hlY2sgPSAodGhpcy5maWx0ZXJzLmN1c3RvbWVyUmF0aW5nIHx8IFtdKS5tYXAoKGN1c3RvbWVyUmF0aW5nOiBzdHJpbmcpOiBudW1iZXIgPT4ge1xuICAgICAgc3dpdGNoKGN1c3RvbWVyUmF0aW5nKSB7XG4gICAgICAgIGNhc2UgQ3VzdG9tZXJSYXRpbmcuVW5yYXRlZDpcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIGNhc2UgQ3VzdG9tZXJSYXRpbmcuT25lU3RhcjpcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgY2FzZSBDdXN0b21lclJhdGluZy5Ud29TdGFyOlxuICAgICAgICAgIHJldHVybiAyO1xuICAgICAgICBjYXNlIEN1c3RvbWVyUmF0aW5nLlRocmVlU3RhcjpcbiAgICAgICAgICByZXR1cm4gMztcbiAgICAgICAgY2FzZSBDdXN0b21lclJhdGluZy5Gb3VyU3RhcjpcbiAgICAgICAgICByZXR1cm4gNDtcbiAgICAgICAgY2FzZSBDdXN0b21lclJhdGluZy5GaXZlU3RhcjpcbiAgICAgICAgICByZXR1cm4gNTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0b2NoZWNrICYmIHRvY2hlY2subGVuZ3RoXG4gICAgICA/ICEhdG9jaGVjay5maW5kKChjdXN0b21lclJhdGluZzogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGN1c3RvbWVyUmF0aW5nID09PSByYXRpbmcgfHwgKGN1c3RvbWVyUmF0aW5nID09PSAtMSAmJiAhcmF0aW5nKTtcbiAgICAgICAgfSlcbiAgICAgIDogdHJ1ZTtcbiAgfVxuXG4gIHdpdGhpblN0YXJSYXRpbmdVaUNvbmZpZyhob3RlbDogSG90ZWxEZXRhaWxzKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVzdWx0c0NvbmZpZyA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0PEhvdGVsVUlTdGFyc1VzZXJGYXZvcml0ZVJlc3BvbnNlPihVc2VyRmF2b3J1cml0ZS5ob3RlbFByZWZlcnJlZEltYWdlKTtcbiAgICBpZiAocmVzdWx0c0NvbmZpZz8uaG90ZWxTdGFyc1RvSGlkZSAmJiBob3RlbC5zb3VyY2UgPT09IFNlcnZpY2VQcm92aWRlci5TYWJyZUNTTCAmJiBob3RlbC5zdGFycykge1xuICAgICAgaWYgKHJlc3VsdHNDb25maWcuaG90ZWxTdGFyc1RvSGlkZS5oaWRlT25lU3RhckhvdGVscyAmJiBob3RlbC5zdGFycyA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdHNDb25maWcuaG90ZWxTdGFyc1RvSGlkZS5oaWRlVHdvU3RhckhvdGVscyAmJiBob3RlbC5zdGFycyA9PT0gMikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdHNDb25maWcuaG90ZWxTdGFyc1RvSGlkZS5oaWRlVGhyZWVTdGFySG90ZWxzICYmIGhvdGVsLnN0YXJzID09PSAzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0c0NvbmZpZy5ob3RlbFN0YXJzVG9IaWRlLmhpZGVGb3VyU3RhckhvdGVscyAmJiBob3RlbC5zdGFycyA9PT0gNCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdHNDb25maWcuaG90ZWxTdGFyc1RvSGlkZS5oaWRlRml2ZVN0YXJIb3RlbHMgJiYgaG90ZWwuc3RhcnMgPT09IDUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy9ubyBzdGFyIHJhdGluZyBzbyB1bmFmZmVjdGVkXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBhZGRGaWx0ZXIoZmlsdGVyOiBzdHJpbmcsIHR5cGU6IGtleW9mIEhvdGVsRmlsdGVycyk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHQ6IEhvdGVsRmlsdGVycyA9IHRoaXMubG9jYWxGaWx0ZXJzO1xuICAgICg8c3RyaW5nW10+ZmlsdFt0eXBlXSkucHVzaChmaWx0ZXIpO1xuICB9XG5cbiAgcmVtb3ZlRmlsdGVyKGZpbHRlcjogc3RyaW5nLCB0eXBlOiBrZXlvZiBIb3RlbEZpbHRlcnMpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ID0gdGhpcy5sb2NhbEZpbHRlcnM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdFt0eXBlXSkpIHtcbiAgICAgIChmaWx0W3R5cGVdIGFzIHN0cmluZ1tdKSA9IChmaWx0W3R5cGVdIGFzIHN0cmluZ1tdKS5maWx0ZXIoKGNoYWluOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpbHRlciAhPT0gY2hhaW47XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXNldEZpbHRlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbEZpbHRlcnMuY2hhaW4gPSBbXTtcbiAgICB0aGlzLmxvY2FsRmlsdGVycy5hbWVuaXR5dHlwZSA9IFtdO1xuICAgIHRoaXMubG9jYWxGaWx0ZXJzLnByZWZlcnJlZCA9IFtdO1xuICAgIHRoaXMubG9jYWxGaWx0ZXJzLmV4dHJhID0gW107XG4gICAgdGhpcy5sb2NhbEZpbHRlcnMuaG90ZWxOYW1lID0gJyc7XG4gICAgdGhpcy5sb2NhbEZpbHRlcnMuYnJlYWtmYXN0VHlwZSA9IFtdO1xuICAgIHRoaXMubG9jYWxGaWx0ZXJzLnJlZnVuZGFibGVSb29tVHlwZSA9IFtdO1xuICAgIHRoaXMubG9jYWxGaWx0ZXJzLnRyYXZlbFBvbGljeSA9IFtdO1xuICAgIHRoaXMubG9jYWxGaWx0ZXJzLmFjY2Vzc2libGVSb29tVHlwZSA9IFtdO1xuICAgIHRoaXMubG9jYWxGaWx0ZXJzLnJvb21UeXBlID0gW107XG4gICAgdGhpcy5sb2NhbEZpbHRlcnMuc3RhclJhdGluZyA9IFtdO1xuICAgIHRoaXMubG9jYWxGaWx0ZXJzLmN1c3RvbWVyUmF0aW5nID0gW107XG4gIH1cblxuICB1cGRhdGVTZWFyY2hGcm9tRXhwaXJlZEJhc2tldEl0ZW0oYmFza2V0SXRlbTogQmFza2V0SXRlbSwgc2V0RGF0ZVRpbWU6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgY29uc3Qgc2VhcmNoSG90ZWxRdWVyeTogU2VhcmNoSG90ZWxzUXVlcnlWYXJpYWJsZXMgPSBiYXNrZXRJdGVtLnNlYXJjaFF1ZXJ5O1xuICAgIGlmIChzZWFyY2hIb3RlbFF1ZXJ5KSB7XG4gICAgICBpZiAoc2V0RGF0ZVRpbWUpIHtcbiAgICAgICAgdGhpcy5jaGVja2luX2RhdGUgPSBtb21lbnQoc2VhcmNoSG90ZWxRdWVyeS5zdGFydERhdGUpO1xuICAgICAgICB0aGlzLmNoZWNrb3V0X2RhdGUgPSBtb21lbnQoc2VhcmNoSG90ZWxRdWVyeS5lbmREYXRlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0UXVlcnlGcm9tQmFza2V0SXRlbShiYXNrZXRJdGVtKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZFRyYXZlbGxlcnNGcm9tQmFza2V0SXRlbShiYXNrZXRJdGVtKTtcbiAgfVxuXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKHByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT4pOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnUFJFUE9QVUxBVElORyBIT1RFTCBGT1JNJyk7XG4gICAgY29uc29sZS5sb2coJ3ByZXZpb3VzSXRlbXMnLHByZXZpb3VzSXRlbXMpO1xuICAgIGNvbnN0IGZsaWdodEl0ZW06IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID1cbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuRmxpZ2h0XT8uc2VhcmNoUXVlcnk7XG4gICAgY29uc3QgcmFpbEl0ZW06IFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlcyA9IHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuUmFpbF0/LnNlYXJjaFF1ZXJ5O1xuICAgIGNvbnN0IGlybEl0ZW06IFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzID1cbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWxdPy5zZWFyY2hRdWVyeTtcbiAgICBjb25zdCBldXJvc3Rhckl0ZW06IFNlYXJjaEV1cm9zdGFyUXVlcnlWYXJpYWJsZXMgPVxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5FdXJvc3Rhcl0/LnNlYXJjaFF1ZXJ5O1xuICAgIGNvbnN0IGNhckhpcmVJdGVtOiBTZWFyY2hDYXJIaXJlUXVlcnlWYXJpYWJsZXMgPVxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5DYXJdPy5zZWFyY2hRdWVyeTtcbiAgICBpZiAoZmxpZ2h0SXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5sb2NhdGlvbl90eXBlX3NlbGVjdCA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Ib3RlbF0ubG9jYXRpb25fdHlwZV9zZWxlY3Q7XG4gICAgICAgIC8vIHRoaXMuY2hlY2tpbl9kYXRlID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0ub3V0Qm91bmREYXRlO1xuICAgICAgICBjb25zdCBvdXRib3VuZEZsaWdodHMgPSBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLkZsaWdodF0/LmRldGFpbC5vdXRib3VuZEZsaWdodHM7XG4gICAgICAgIHRoaXMuY2hlY2tpbl9kYXRlID0gbW9tZW50KG91dGJvdW5kRmxpZ2h0c1tvdXRib3VuZEZsaWdodHMubGVuZ3RoLTFdLmRhdGVUaW1lQXJyaXZpbmcuc3BsaXQoJ1QnKVswXSk7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRfZGF0ZSA9IG1vbWVudChwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLkZsaWdodF0/LnNlYXJjaFF1ZXJ5Py5yZXR1cm5EYXRlKTtcbiAgICAgICAgY29uc3QgYXJyaXZlTG9jYXRpb24gPSBvdXRib3VuZEZsaWdodHNbb3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdPy5kZXN0aW5hdGlvbkFpcnBvcnREZXRhaWw7XG4gICAgICAgIGlmIChhcnJpdmVMb2NhdGlvbikge1xuICAgICAgICAgIHRoaXMuY291bnRyeSA9IHsgY0NvZGU6IGFycml2ZUxvY2F0aW9uLmNvdW50cnlDb2RlLCBjTmFtZTogYXJyaXZlTG9jYXRpb24uY291bnRyeU5hbWUgfTtcbiAgICAgICAgICB0aGlzLmxvY2F0aW9uID0ge1xuICAgICAgICAgICAgY291bnRyeUNvZGU6IGFycml2ZUxvY2F0aW9uLmNvdW50cnlDb2RlLFxuICAgICAgICAgICAgbGF0aXR1ZGU6IGFycml2ZUxvY2F0aW9uLmxhdGl0dWRlLFxuICAgICAgICAgICAgbG9uZ2l0dWRlOiBhcnJpdmVMb2NhdGlvbi5sb25naXR1ZGUsXG4gICAgICAgICAgICBuYW1lOiBhcnJpdmVMb2NhdGlvbi5jaXR5LFxuICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5DaXR5XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9jYXRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGhvdGVsIGZyb20gZmxpZ2h0IGl0ZW0nKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJhaWxJdGVtKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmxvY2F0aW9uX3R5cGVfc2VsZWN0ID0gTG9jYXRpb25UeXBlcy5UcmFpblN0YXRpb247XG4gICAgICAgIHRoaXMuY2hlY2tpbl9kYXRlID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdLm91dEJvdW5kRGF0ZVRpbWU7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRfZGF0ZSA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXS5pbkJvdW5kRGF0ZVRpbWU7XG4gICAgICAgIHRoaXMudHJhaW5zU3RhdGlvbiA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXVxuICAgICAgICAgIC50cmF2ZWxsaW5nVG8gYXMgTG9jYXRpb25EZXRhaWxzO1xuICAgICAgICB0aGlzLmxvY2F0aW9uID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdXG4gICAgICAgICAgLnRyYXZlbGxpbmdUbyBhcyBMb2NhdGlvbkRldGFpbHM7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGhvdGVsIGZyb20gcmFpbCBpdGVtJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpcmxJdGVtKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmxvY2F0aW9uX3R5cGVfc2VsZWN0ID0gTG9jYXRpb25UeXBlcy5UcmFpblN0YXRpb247XG4gICAgICAgIHRoaXMuY2hlY2tpbl9kYXRlID1cbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWxdLm91dEJvdW5kRGF0ZVRpbWU7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRfZGF0ZSA9XG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXS5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZTtcbiAgICAgICAgdGhpcy50cmFpbnNTdGF0aW9uID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXVxuICAgICAgICAgIC50cmF2ZWxsaW5nVG8gYXMgTG9jYXRpb25EZXRhaWxzO1xuICAgICAgICB0aGlzLmxvY2F0aW9uID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXVxuICAgICAgICAgIC50cmF2ZWxsaW5nVG8gYXMgTG9jYXRpb25EZXRhaWxzO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBob3RlbCBmcm9tIGludGVybmF0aW9uYWwgcmFpbCBpdGVtJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldXJvc3Rhckl0ZW0pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMubG9jYXRpb25fdHlwZV9zZWxlY3QgPSBMb2NhdGlvblR5cGVzLkNpdHk7XG4gICAgICAgIHRoaXMuY2hlY2tpbl9kYXRlID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkV1cm9zdGFyXS5vdXRCb3VuZERhdGU7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRfZGF0ZSA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5FdXJvc3Rhcl0uaW5ib3VuZERhdGU7XG4gICAgICAgIGNvbnN0IG91dGJvdW5kRmxpZ2h0cyA9IHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuRXVyb3N0YXJdPy5kZXRhaWw/Lm91dGJvdW5kRmxpZ2h0cztcbiAgICAgICAgY29uc3QgYXJyaXZlTG9jYXRpb24gPSBvdXRib3VuZEZsaWdodHNbb3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdPy5kZXN0aW5hdGlvbkFpcnBvcnREZXRhaWw7XG4gICAgICAgIGlmIChhcnJpdmVMb2NhdGlvbikge1xuICAgICAgICAgIHRoaXMuY291bnRyeSA9IHsgY0NvZGU6IGFycml2ZUxvY2F0aW9uLmNvdW50cnlDb2RlLCBjTmFtZTogYXJyaXZlTG9jYXRpb24uY291bnRyeU5hbWUgfTtcbiAgICAgICAgICB0aGlzLmxvY2F0aW9uID0ge1xuICAgICAgICAgICAgY291bnRyeUNvZGU6IGFycml2ZUxvY2F0aW9uLmNvdW50cnlDb2RlLFxuICAgICAgICAgICAgbGF0aXR1ZGU6IGFycml2ZUxvY2F0aW9uLmxhdGl0dWRlLFxuICAgICAgICAgICAgbG9uZ2l0dWRlOiBhcnJpdmVMb2NhdGlvbi5sb25naXR1ZGUsXG4gICAgICAgICAgICBuYW1lOiBhcnJpdmVMb2NhdGlvbi5jaXR5LFxuICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5DaXR5XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9jYXRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGhvdGVsIGZyb20gZXVyb3N0YXIgaXRlbScpO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChjYXJIaXJlSXRlbSkge1xuICAgICAgY29uc3QgY2FySGlyZVNlYXJjaCA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5DYXJdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5sb2NhdGlvbl90eXBlX3NlbGVjdCA9ICBjYXJIaXJlU2VhcmNoLmxvY2F0aW9uVHlwZSA9PT0gTG9jYXRpb25UeXBlcy5Qb3N0Y29kZSA/ICBMb2NhdGlvblR5cGVzLkNpdHkgOiBjYXJIaXJlU2VhcmNoLmxvY2F0aW9uVHlwZTtcbiAgICAgICAgdGhpcy5jaGVja2luX2RhdGUgPSBtb21lbnQoY2FySGlyZUl0ZW0ucGlja3VwRGF0ZVRpbWUpO1xuICAgICAgICB0aGlzLmNoZWNrb3V0X2RhdGUgPSBtb21lbnQoY2FySGlyZUl0ZW0uZHJvcG9mZkRhdGVUaW1lKTtcbiAgICAgICAgY29uc3Qge3BpY2t1cF9sb2NhdGlvbiwgY2l0eVBpY2t1cCwgcG9zdGNvZGVQaWNrdXAsIHBvc3Rjb2RlUGlja3VwUmF3IH0gPSBjYXJIaXJlU2VhcmNoO1xuICAgICAgICBzd2l0Y2ggKGNhckhpcmVTZWFyY2gubG9jYXRpb25UeXBlKSB7XG4gICAgICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkFpcnBvcnQ6XG4gICAgICAgICAgICB0aGlzLmNvdW50cnkgPSB7IGNDb2RlOiBwaWNrdXBfbG9jYXRpb24uY291bnRyeUNvZGUsIGNOYW1lOiBwaWNrdXBfbG9jYXRpb24uY291bnRyeSB9O1xuICAgICAgICAgICAgdGhpcy5sb2NhdGlvbiA9IHtcbiAgICAgICAgICAgICAgbmFtZTogcGlja3VwX2xvY2F0aW9uLmRlc3RpbmF0aW9uLFxuICAgICAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLkFpcnBvcnQsXG4gICAgICAgICAgICAgIGFpcnBvcnQ6IHBpY2t1cF9sb2NhdGlvblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5DaXR5OiB7XG4gICAgICAgICAgICBjb25zdCBjaXR5Q291bnRyeUluZm8gPSBDb3VudHJpZXMuZmluZChjID0+IGMuY0NvZGUgPT09IGNpdHlQaWNrdXAuY291bnRyeUNvZGUpO1xuICAgICAgICAgICAgdGhpcy5jb3VudHJ5ID0geyBjQ29kZTogY2l0eUNvdW50cnlJbmZvLmNDb2RlLCBjTmFtZTogY2l0eUNvdW50cnlJbmZvLmNOYW1lIH07XG4gICAgICAgICAgICB0aGlzLmxvY2F0aW9uID0ge1xuICAgICAgICAgICAgICBjb3VudHJ5Q29kZTogY2l0eVBpY2t1cC5jb3VudHJ5Q29kZSxcbiAgICAgICAgICAgICAgbGF0aXR1ZGU6IGNpdHlQaWNrdXAubGF0aXR1ZGUsXG4gICAgICAgICAgICAgIGxvbmdpdHVkZTogY2l0eVBpY2t1cC5sb25naXR1ZGUsXG4gICAgICAgICAgICAgIG5hbWU6IGNpdHlQaWNrdXAuY2l0eSA/IGNpdHlQaWNrdXAuY2l0eSA6IGNpdHlQaWNrdXAubmFtZSxcbiAgICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5DaXR5XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5Qb3N0Y29kZToge1xuICAgICAgICAgICAgY29uc3QgcG9zdENvZGVDb3VudHJ5SW5mbyA9IENvdW50cmllcy5maW5kKGMgPT4gYy5jQ29kZSA9PT0gcG9zdGNvZGVQaWNrdXAuY291bnRyeUNvZGUpO1xuICAgICAgICAgICAgdGhpcy5jb3VudHJ5ID0geyBjQ29kZTogcG9zdENvZGVDb3VudHJ5SW5mby5jQ29kZSwgY05hbWU6IHBvc3RDb2RlQ291bnRyeUluZm8uY05hbWUgfTtcbiAgICAgICAgICAgIHRoaXMubG9jYXRpb24gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5wb3N0Y29kZSA9IHBvc3Rjb2RlUGlja3VwUmF3O1xuICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGhvdGVsIGZyb20gZXVyb3N0YXIgaXRlbScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFzUHJlZmVycmVkKGhvdGVsOiBIb3RlbERldGFpbHMpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcmVmZXJyZWRGaWx0ZXJzID0gdGhpcy5maWx0ZXJzLnByZWZlcnJlZDtcblxuICAgIC8vIEVtcHR5IHByZWZlcnJlZCBmaWx0ZXJzIE9SIFwiQW55XCJcbiAgICBpZiAoIXByZWZlcnJlZEZpbHRlcnMubGVuZ3RoIHx8IHByZWZlcnJlZEZpbHRlcnMuaW5jbHVkZXMoU2VhcmNoSGFuZGxlci5BTlkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBBZ2VuY3kgKGNvbnN1bWVyKSAmJiBDbGllbnRcbiAgICBpZiAoXG4gICAgICBwcmVmZXJyZWRGaWx0ZXJzLmluY2x1ZGVzKFNlYXJjaEhhbmRsZXIuQUdFTkNZKSAmJlxuICAgICAgcHJlZmVycmVkRmlsdGVycy5pbmNsdWRlcyhTZWFyY2hIYW5kbGVyLkNMSUVOVClcbiAgICApIHtcbiAgICAgIHJldHVybiBob3RlbC5wcmVmZXJyZWQuY29uc3VtZXIgPT09IHRydWUgJiYgaG90ZWwucHJlZmVycmVkLmNsaWVudCA9PT0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBBZ2VuY3lcbiAgICBpZiAocHJlZmVycmVkRmlsdGVycy5pbmNsdWRlcyhTZWFyY2hIYW5kbGVyLkFHRU5DWSkpIHtcbiAgICAgIHJldHVybiBob3RlbC5wcmVmZXJyZWQuY29uc3VtZXIgPT09IHRydWU7XG4gICAgfVxuXG4gICAgLy8gQ2xpZW50XG4gICAgaWYgKHByZWZlcnJlZEZpbHRlcnMuaW5jbHVkZXMoU2VhcmNoSGFuZGxlci5DTElFTlQpKSB7XG4gICAgICByZXR1cm4gaG90ZWwucHJlZmVycmVkLmNsaWVudCA9PT0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBhdExlYXN0T25lUHJlZmVycmVkQWdlbnRIb3RlbCgpOiBib29sZWFuIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVzdWx0cy52YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMucmVzdWx0cy52YWx1ZVtpXS5wcmVmZXJyZWQuY29uc3VtZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYXRMZWFzdE9uZVByZWZlcnJlZENsaWVudEhvdGVsKCk6IGJvb2xlYW4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yZXN1bHRzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5yZXN1bHRzLnZhbHVlW2ldLnByZWZlcnJlZC5jbGllbnQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldG1heFByaWNlRm9yQ3VycmVuY3koY3VycmVuY3k6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5tYXhQcmljZUZvckN1cnJlbmN5KGN1cnJlbmN5KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNYXhQZXJOaWdodFByaWNlRm9yQ3VycmVuY3koY3VycmVuY3k6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgcHJpY2VSYW5nZSA9IHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5wZXJOaWdodFByaWNlUmFuZ2VGb3JDdXJyZW5jeShjdXJyZW5jeSk7XG4gICAgdGhpcy5maWx0ZXJzLnBlck5pZ2h0UHJpY2VSYW5nZS5tYXggPSBwcmljZVJhbmdlLm1heHByaWNlO1xuICAgIHRoaXMuZmlsdGVycy5wZXJOaWdodFByaWNlUmFuZ2UubWF4UmF3ID0gcHJpY2VSYW5nZS5tYXhSYXdQcmljZTtcbiAgICByZXR1cm4gcHJpY2VSYW5nZS5tYXhwcmljZTtcbiAgfVxuXG4gIC8vIExpZ2h0ZW5pbmcgRXh0cmEgRmlsdGVyc1xuICBwcml2YXRlIGdldEV4dHJhRmlsdGVyKGhvdGVsOiBIb3RlbERldGFpbHMpOiBib29sZWFuIHtcbiAgICBjb25zdCBjaGVja0F2YWlsYWJpbGl0eSA9IHRoaXMuZmlsdGVycy5leHRyYS5pbmNsdWRlcyhTZWFyY2hIYW5kbGVyLkFWQUlMQUJJTElUWSk7XG4gICAgaWYgKGNoZWNrQXZhaWxhYmlsaXR5KSB7XG4gICAgICByZXR1cm4gaG90ZWwuYXZhaWxhYmxlUmF0ZXM/LnJvb21zPy5sZW5ndGggPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgY2hlY2tGZW1hbGVGcmllbmRseSA9IHRoaXMuZmlsdGVycy5leHRyYS5pbmNsdWRlcyhTZWFyY2hIYW5kbGVyLkZFTUFMRV9GUklFTkRMWSk7XG4gICAgaWYgKGNoZWNrRmVtYWxlRnJpZW5kbHkpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzRmVtYWxlRnJpZW5kbHkoaG90ZWwpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNGZW1hbGVGcmllbmRseShob3RlbDogSG90ZWxRdW90ZVJlc3VsdCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZlbWFsZUxpc3QgPSBbdGhpcy5jb252ZXJ0VG9PbmVTdHJpbmcoU2VhcmNoSGFuZGxlci5GRU1BTEVfRlJJRU5ETFkpLnRvTG93ZXJDYXNlKCksXG4gICAgICB0aGlzLmNvbnZlcnRUb09uZVN0cmluZyhTZWFyY2hIYW5kbGVyLkZFTUFMRV9GUklFTkRMWV9IT1RFTCkudG9Mb3dlckNhc2UoKV07XG5cbiAgICByZXR1cm4gKFxuICAgICAgaG90ZWwudGFncy5maWx0ZXIodGFnID0+IHtcbiAgICAgICAgaWYgKHRhZy5uYW1lKSB7XG4gICAgICAgICAgY29uc3QgbmFtZTogc3RyaW5nID0gdGhpcy5jb252ZXJ0VG9PbmVTdHJpbmcodGFnLm5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgcmV0dXJuICEhZmVtYWxlTGlzdC5maW5kKGxpc3QgPT4gbGlzdCA9PT0gbmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pLmxlbmd0aCA+IDBcbiAgICApO1xuICB9XG5cbiAgLy8gTGlnaHRlbmluZyBBbWVybml0aWVzIEZpbHRlcnNcbiAgcHJpdmF0ZSBnZXRBbWVuaXRpZXNGaWx0ZXIoaG90ZWw6IEhvdGVsRGV0YWlscyk6IGJvb2xlYW4ge1xuICAgIGxldCBpc1RydWU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIHRoaXMuZmlsdGVycy5hbWVuaXR5dHlwZS5mb3JFYWNoKHNlYXJjaCA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJlZFRhZ3MgPSB0aGlzLmZpbHRlclRhZ3MoaG90ZWwudGFncywgc2VhcmNoKTtcbiAgICAgIGlzVHJ1ZSA9ICEhKGZpbHRlcmVkVGFncy5sZW5ndGggPiAwKTtcbiAgICAgIHJldHVybiBpc1RydWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIGlzVHJ1ZTtcbiAgfVxuXG4gIGZpbHRlclRhZ3MoaG90ZWxUYWdzOiBIb3RlbFRhZ1tdLCBzZWFyY2hUZXJtOiBzdHJpbmcpOiBIb3RlbFRhZ1tdIHtcbiAgICBjb25zdCBsb3dlclNlYXJjaCA9IHRoaXMuY29udmVydFRvT25lU3RyaW5nKHNlYXJjaFRlcm0pPy50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBob3RlbFRhZ3MuZmlsdGVyKHRhZyA9PiB7XG4gICAgICBpZiAodGFnLm5hbWUpIHtcbiAgICAgICAgY29uc3QgdGFnTmFtZSA9IHRoaXMuY29udmVydFRvT25lU3RyaW5nKHRhZy5uYW1lKT8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdGFnRGlzcGxheSA9IHRoaXMuY29udmVydFRvT25lU3RyaW5nKHRhZy5kaXNwbGF5KT8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIHRhZ05hbWU/LmluY2x1ZGVzKGxvd2VyU2VhcmNoKSB8fCB0YWdEaXNwbGF5Py5pbmNsdWRlcyhsb3dlclNlYXJjaCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRUb09uZVN0cmluZyhpdGVtOiBzdHJpbmcpIHtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0ucmVwbGFjZSgvW15hLXpBLVpdL2csICcnKTtcbiAgICB9XG4gIH1cblxuICBhZGRQYWdpbmF0aW9uUGFnZTxUPihjdXJyZW50UGFnZTogbnVtYmVyKTogVCB7XG4gICAgY29uc3Qga2V5ID0gJ1BhZ2luYXRpb25QYWdlQ291bnQnO1xuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oa2V5LCBjdXJyZW50UGFnZSk7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oa2V5KTtcbiAgfVxuXG4gIHRvZ2dsZVZpZXcoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50VmlldyA9IHRoaXMuY3VycmVudFZpZXcgPT09IEhvdGVsVmlldy5MSVNUID8gSG90ZWxWaWV3Lk1BUDpIb3RlbFZpZXcuTElTVDtcbiAgfVxuXG4gIGNhbGNEYXlEaWZmKCk6IG51bWJlciB7XG4gICAgY29uc3QgY2hlY2tvdXQgPSBtb21lbnQodGhpcy5jaGVja291dF9kYXRlKTtcbiAgICBjb25zdCBjaGVja2luID0gbW9tZW50KHRoaXMuY2hlY2tpbl9kYXRlKTtcbiAgICByZXR1cm4gY2hlY2tvdXQuc3RhcnRPZignZGF5JykuZGlmZihjaGVja2luLnN0YXJ0T2YoJ2RheScpLCAnZGF5cycpO1xuICB9XG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IEhvdGVsRGV0YWlsc1tdKTogSUNoZWFwZXN0UHJpY2Uge1xuICAgIGNvbnN0IGN1cnJlbmNpZXNLZXkgPSBPYmplY3Qua2V5cyh0aGlzLmF2YWxpYWJpbGl0eVNlcnZpY2UuY3VycmVuY2llcyk7XG4gICAgaWYgKCghcmVzdWx0cy5sZW5ndGggJiYgIWN1cnJlbmNpZXNLZXkubGVuZ3RoKSB8fCAhY3VycmVuY2llc0tleS5sZW5ndGgpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgY3VycmVuY2llID0gY3VycmVuY2llc0tleVswXTtcblxuICAgIHJldHVybiB7XG4gICAgICBhbW91bnQ6IHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5jdXJyZW5jaWVzW2N1cnJlbmNpZV0ubWlucHJpY2UsXG4gICAgICBjdXJyZW5jeUNvZGU6IGN1cnJlbmNpZVxuICAgIH07XG4gIH1cblxuICBnZXRSb29tTnVtYmVyKCkge1xuICAgIGNvbnN0IHJvb21zT2NjdXBhbmN5OiB7XG4gICAgICBBZHVsdHM6IG51bWJlcjtcbiAgICAgIENoaWxkcmVuOiBudW1iZXI7XG4gICAgICBJbmZhbnRzOiBudW1iZXI7XG4gIH1bXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTnVtYmVyKHRoaXMudGVtcFBhcmFtcy5ub19vZl9yb29tcyk7IGkrKykge1xuICAgICAgY29uc3QgbmV3Um9vbU9jY3VwYW5jeSA9IHtcbiAgICAgICAgQWR1bHRzOiB0aGlzLmNhbGNSb29tT2NjdXBhbmN5KFxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5ub19vZl9yb29tcyxcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMubm9fb2Zfb2NjdXBhbnRzXG4gICAgICAgICksXG4gICAgICAgIENoaWxkcmVuOiAwLFxuICAgICAgICBJbmZhbnRzOiAwXG4gICAgICB9O1xuICAgICAgcm9vbXNPY2N1cGFuY3kucHVzaChuZXdSb29tT2NjdXBhbmN5KTtcbiAgICB9XG5cbiAgICBjb25zdCByb29tczogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcm9vbXNPY2N1cGFuY3kubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJvb21zT2NjdXBhbmN5W2luZGV4XS5BZHVsdHM7IGorKykge1xuICAgICAgICByb29tcy5wdXNoKGluZGV4ICsgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXHRAZGVzYyAtIHJldHVybiB0aGUgb2NjdXBhbmN5IGZvciBhIHJvb20gLSBuZWVkIHRvIGNhbGN1bGF0ZSBiYXNlZCBvbiBubyBvZiByb29tcywgbm8gb2YgdHJhdmVsbGVycyBhbmQgY3VycmVudGx5IG9jY3VwaWVkIHJvb21zO1xuICAgKiovXG5cbiAgY2FsY1Jvb21PY2N1cGFuY3kobm9fb2Zfcm9vbXM6IG51bWJlciwgdHJhdmVsbGVyczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICdObyBvZiBUcmF2ZWxsZXJzOiAnICtcbiAgICAgIHRyYXZlbGxlcnMgK1xuICAgICAgJ3wgTm8gb2Ygcm9vbXM6ICcgK1xuICAgICAgbm9fb2Zfcm9vbXMgK1xuICAgICAgJyB8IEFzc2lnbmVkOiAnICtcbiAgICAgIHRoaXMub2NjdXBpZWRcbiAgICApO1xuICAgIGxldCByb29tT2NjdXBhbmN5OiBudW1iZXIgPSBNYXRoLmNlaWwodHJhdmVsbGVycyAvIG5vX29mX3Jvb21zKTtcblxuICAgIGlmICh0cmF2ZWxsZXJzIC0gdGhpcy5vY2N1cGllZCA8IHJvb21PY2N1cGFuY3kpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdXZSBoYXZlIHJ1biBvdXQgb2Ygb2NjdXBpZXJzIScpO1xuICAgICAgcm9vbU9jY3VwYW5jeSA9IHRyYXZlbGxlcnMgLSB0aGlzLm9jY3VwaWVkO1xuICAgIH1cblxuICAgIGlmIChyb29tT2NjdXBhbmN5IDw9IDApIHtcbiAgICAgIHJvb21PY2N1cGFuY3kgPSAxO1xuICAgIH1cblxuICAgIHRoaXMub2NjdXBpZWQgKz0gcm9vbU9jY3VwYW5jeTtcbiAgICByZXR1cm4gcm9vbU9jY3VwYW5jeTtcbiAgfVxuXG4gIGFzeW5jIGFkZEhvdGVsUm9vbVRvQmFza2V0KFxuICAgIGhvdGVsOiBIb3RlbERldGFpbHMsXG4gICAgaG90ZWxSb29tOiBIb3RlbFJvb20sXG4gICAgaG90ZWxRdWVyeTogU2VhcmNoSG90ZWxzUXVlcnlWYXJpYWJsZXMsXG4gICAgdHJhdmVsbGVycz86IFRyYXZlbGxlcltdLFxuICAgIGlnbm9yZUludm9rZWQ/OiBib29sZWFuLFxuICAgIGdtdD86IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zPiB7XG4gICAgY29uc29sZS5sb2coaG90ZWwpO1xuICAgIGNvbnNvbGUubG9nKGhvdGVsUm9vbSk7XG4gICAgY29uc29sZS5sb2coaG90ZWxRdWVyeSk7XG5cbiAgICBjb25zdCBmdWxsSG90ZWwgPSB0aGlzLmZ1bGxSZXN1bHRzLmZpbmQoZmhvdGVsID0+IGZob3RlbC5pZCA9PT0gaG90ZWwuaWQpO1xuXG4gICAgaWYgKGhvdGVsLnVuYXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWw7XG4gICAgfVxuXG4gICAgLy8gbW9kaWZ5IHRoZSAnc3RhcnREYXRlJyBhbmQgJ2VuZERhdGUnIHByb3BlcnRpZXMgdG8gaGF2ZSBJU08gZm9ybWF0XG4gICAgaG90ZWxRdWVyeS5zdGFydERhdGUgPSBuZXcgRGF0ZShob3RlbFF1ZXJ5LnN0YXJ0RGF0ZSkudG9JU09TdHJpbmcoKTtcbiAgICBob3RlbFF1ZXJ5LmVuZERhdGUgPSBuZXcgRGF0ZShob3RlbFF1ZXJ5LmVuZERhdGUpLnRvSVNPU3RyaW5nKCk7XG5cbiAgICAvLyBjcmVhdGUgY29weSBvZiBob3RlbFF1ZXJ5IGFuZCBkZWxldGUgJ2FkdWx0cycgcHJvcGVydHkgYXMgc2VhcmNoUXVlcnlTY2hlbWEgZm9yIGhvdGVsIChjb25mZXJtYSkgZG9lcyBub3Qgc2VlbSB0byBzdXBwb3J0IGl0IGJlaW5nIGFkZGVkXG4gICAgY29uc3Qgc2VhcmNoUXVlcnkgPSB7IC4uLmhvdGVsUXVlcnkgfTtcblxuICAgIGxldCByb29tQ3NsOiBSb29tO1xuICAgIGlmIChob3RlbC5zb3VyY2UgPT09IFNlcnZpY2VQcm92aWRlci5TYWJyZUNTTCkge1xuICAgICAgcm9vbUNzbCA9IGhvdGVsUm9vbSBhcyB1bmtub3duIGFzIFJvb207XG4gICAgfVxuXG4gICAgaWYgKGhvdGVsLnNvdXJjZSAhPT0gU2VydmljZVByb3ZpZGVyLlNhYnJlQ1NMKSB7XG4gICAgICBkZWxldGUgc2VhcmNoUXVlcnkuYWR1bHRzO1xuICAgIH1cblxuICAgIGNvbnN0IGRldGFpbFJvb21zOiB7XG4gICAgICByYXRlRGVzY3JpcHRpb246IHN0cmluZztcbiAgICAgIHJvb21EZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgICAgcm9vbUlkOiBzdHJpbmc7XG4gICAgICByb29tVHlwZTogc3RyaW5nO1xuICAgICAgcmF0ZUNvZGU6IHN0cmluZztcbiAgICAgIGNoZWNrSW46IGFueTtcbiAgICAgIGNoZWNrT3V0OiBhbnk7XG4gICAgICBuaWdodHM6IEhvdGVsTmlnaHRbXTtcbiAgICAgIGN2dlJlcXVpcmVkOiBib29sZWFuO1xuICAgIH1bXSA9IFtdO1xuICAgIGRldGFpbFJvb21zLnB1c2goe1xuICAgICAgcmF0ZURlc2NyaXB0aW9uOlxuICAgICAgICBob3RlbFJvb20ucmF0ZURlc2NyaXB0aW9uIHx8XG4gICAgICAgIHJvb21Dc2w/LlJhdGVQbGFucy5SYXRlUGxhblswXS5SYXRlUGxhbk5hbWUgfHxcbiAgICAgICAgcm9vbUNzbD8uUm9vbURlc2NyaXB0aW9uLk5hbWUgfHxcbiAgICAgICAgJ04vQScsXG4gICAgICByb29tRGVzY3JpcHRpb246XG4gICAgICAgIGhvdGVsUm9vbS5yb29tRGVzY3JpcHRpb24gfHwgKHJvb21Dc2wgPyBgJHtyb29tQ3NsLlJvb21EZXNjcmlwdGlvbi5OYW1lfS0ke3Jvb21Dc2wuUm9vbURlc2NyaXB0aW9uLlRleHRbMF19YCA6ICcnKVxuICAgICAgICAsXG4gICAgICByb29tSWQ6IGhvdGVsUm9vbS5yb29tSWQgfHwgcm9vbUNzbD8uUmF0ZVBsYW5zPy5SYXRlUGxhblswXT8uUmF0ZUtleSB8fCAnJyxcbiAgICAgIHJvb21UeXBlOlxuICAgICAgICBob3RlbFJvb20ucm9vbVR5cGUgPz9cbiAgICAgICAgcm9vbUNzbC5Sb29tVHlwZSA/P1xuICAgICAgICByb29tQ3NsLlJvb21EZXNjcmlwdGlvbi5OYW1lID8/XG4gICAgICAgIHJvb21Dc2wuUm9vbURlc2NyaXB0aW9uLlRleHRbMF0gPz8gJycsXG4gICAgICByYXRlQ29kZTogaG90ZWxSb29tLnJhdGVDb2RlLFxuICAgICAgY2hlY2tJbjogaG90ZWxRdWVyeS5zdGFydERhdGUsXG4gICAgICBjaGVja091dDogaG90ZWxRdWVyeS5lbmREYXRlLFxuICAgICAgbmlnaHRzOiBob3RlbFJvb20ubmlnaHRzIHx8IGhvdGVsLmF2YWlsYWJsZVJhdGVzPy5yb29tc1swXT8ubmlnaHRzLFxuICAgICAgY3Z2UmVxdWlyZWQ6IGhvdGVsUm9vbS5wb2xpY2llcy5jdnZSZXF1aXJlZFxuICAgIH0pO1xuXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xuICAgIGlmIChiYXNrZXQpIHtcbiAgICAgIC8vIEVOVC0yNDQ3IGFkZCBpbiBjaHVua3Mgd2l0aCBwZW9wbGUgcGVyIHJvb21cbiAgICAgIGNvbnN0IHBheFBlclJvb206IG51bWJlciA9IHRoaXMudGVtcFBhcmFtcy5ub19vZl9vY2N1cGFudHM7XG5cbiAgICAgIC8vIEVOVC0zMDQ4IFRvIGJlIGNoYW5nZWQgd2hlbiB0cmF2bGxlcnMgZmxvdyBhZGRlZFxuICAgICAgY29uc3Qgcm9vbUFycmF5ID0gbmV3IEFycmF5KGdtdCA/IGhvdGVsUXVlcnkuYWR1bHRzIDogdGhpcy50ZW1wUGFyYW1zLm5vX29mX3Jvb21zKS5maWxsKCdURVNUJyk7XG4gICAgICBjb25zdCBudW1iZXJUb1NwbGl0ID0gZ210ID8gMSA6IHRoaXMudGVtcFBhcmFtcy5ub19vZl9yb29tcyA9PT0gcGF4UGVyUm9vbSA/IDEgOiAyO1xuICAgICAgY29uc3QgYm9va2VkVHJhdmVsbGVyc0NodW5rcyA9IF8uY2h1bmsodGhpcy50cmF2ZWxsZXJzLCBudW1iZXJUb1NwbGl0KTtcbiAgICAgIGNvbnN0IHsgYWRkcmVzczogaG90ZWxBYWRkcmVzcyB9ID0gaG90ZWw7XG4gICAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChob3RlbFJvb20sIGhvdGVsUXVlcnksIGhvdGVsLnNvdXJjZSA9PT0gU2VydmljZVByb3ZpZGVyLlNhYnJlQ1NMKTtcbiAgICAgIC8vIGJvb2tlZFRyYXZlbGxlcnNDaHVua3MuZm9yRWFjaCgoY2h1bms6IFRyYXZlbGxlcltdLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICByZXR1cm4gYXdhaXQgcm9vbUFycmF5LnJlZHVjZShcbiAgICAgICAgYXN5bmMgKFxuICAgICAgICAgIGN1cnJlbnQ6IERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMsXG4gICAgICAgICAgY2h1bms6IFRyYXZlbGxlcltdLFxuICAgICAgICAgIGluZGV4OiBudW1iZXJcbiAgICAgICAgKTogUHJvbWlzZTxEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zPiA9PiB7XG4gICAgICAgICAgc3dpdGNoIChhd2FpdCBjdXJyZW50KSB7XG4gICAgICAgICAgICBjYXNlIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsOlxuICAgICAgICAgICAgICByZXR1cm4gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWw7XG4gICAgICAgICAgICBjYXNlIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2g6XG4gICAgICAgICAgICAgIHJldHVybiBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLnJlc2VhcmNoO1xuICAgICAgICAgICAgY2FzZSBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNvbnRpbnVlOlxuICAgICAgICAgICAgY2FzZSBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLm5ld0Jhc2tldDpcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gY29uc3QgcmF0ZUtleSA9IGhvdGVsLnNvdXJjZSA9PT0gU2VydmljZVByb3ZpZGVyLlNhYnJlQ1NMID8gJycgKyBob3RlbFJvb20ucmF0ZUNvZGU6IG51bGw7IC8vICAhIC0gb25seSBmb3IgY3NsXG4gICAgICAgICAgY29uc3Qgd2ggPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkdWx0czogbnVtYmVyVG9TcGxpdCxcbiAgICAgICAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXG4gICAgICAgICAgICAgIHNlcnZpY2U6IGhvdGVsLnNvdXJjZUlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIGFkZGl0aW9uYWw6IGZ1bGxIb3RlbD8uYXZhaWxhYmxlUmF0ZXM/LmFkZGl0aW9uYWwsXG4gICAgICAgICAgICAgICAgaG90ZWxBZGRyZXNzOiB7XG4gICAgICAgICAgICAgICAgICBzdHJlZXROYW1lOiBob3RlbEFhZGRyZXNzLmFkZHJlc3NMaW5lMSxcbiAgICAgICAgICAgICAgICAgIHRvd246IGhvdGVsQWFkZHJlc3MuYWRkcmVzc0xpbmUyXG4gICAgICAgICAgICAgICAgICAgID8gaG90ZWxBYWRkcmVzcy5hZGRyZXNzTGluZTJcbiAgICAgICAgICAgICAgICAgICAgOiBob3RlbEFhZGRyZXNzLmNpdHlcbiAgICAgICAgICAgICAgICAgICAgICA/IGhvdGVsQWFkZHJlc3MuY2l0eVxuICAgICAgICAgICAgICAgICAgICAgIDogJ0NvbmZlcm1hJyxcbiAgICAgICAgICAgICAgICAgIGNvdW50eTogaG90ZWxBYWRkcmVzcy5hZGRyZXNzTGluZTMsXG4gICAgICAgICAgICAgICAgICBwb3N0Y29kZTogaG90ZWxBYWRkcmVzcy5wb3N0T3JaaXBDb2RlLFxuICAgICAgICAgICAgICAgICAgY291bnRyeUNvZGU6ICB0aGlzLmxvY2F0aW9uX3R5cGVfc2VsZWN0ID09PSBMb2NhdGlvblR5cGVzLlRyYWluU3RhdGlvbiAmJlxuICAgICAgICAgICAgICAgICAgIWhvdGVsQWFkZHJlc3MuY291bnRyeUNvZGVcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnRyYWluc1N0YXRpb24/LmNvdW50cnlDb2RlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgKHRoaXMudHJhaW5zU3RhdGlvbiBhcyBMb2NhdGlvbkRldGFpbHMpPy5yYWlsc3RhdGlvbi5sb2NhdGlvbkRldGFpbHMuY291bnRyeUNvZGVcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmxvY2F0aW9uX3R5cGVfc2VsZWN0ID09PSBMb2NhdGlvblR5cGVzLkFpcnBvcnQgJiYgIWhvdGVsQWFkZHJlc3MuY291bnRyeUNvZGUgPyAodGhpcy5sb2NhdGlvbiBhcyBBaXJwb3J0XG4gICAgICAgICAgICAgICAgICAgICk/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGUgOiBob3RlbEFhZGRyZXNzLmNvdW50cnlDb2RlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBob3RlbERlc2NyaXB0aW9uOiBob3RlbC5ncm91cCxcbiAgICAgICAgICAgICAgICBob3RlbEZheE51bWJlcjogaG90ZWxBYWRkcmVzcy5mYWNzaW1pbGUsXG4gICAgICAgICAgICAgICAgaG90ZWxQaG9uZU51bWJlcjogaG90ZWxBYWRkcmVzcy50ZWxlcGhvbmUsXG4gICAgICAgICAgICAgICAgaG90ZWxJZDogaG90ZWwuaWQsXG4gICAgICAgICAgICAgICAgaG90ZWxOYW1lOiBob3RlbC5uYW1lLFxuICAgICAgICAgICAgICAgIGhvdGVsR3JvdXA6IGhvdGVsLmdyb3VwLFxuICAgICAgICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIGFsd2F5cyBiZSAxIGFzIHdlIGJvb2sgMSByb29tIGFzIGEgdGltZVxuICAgICAgICAgICAgICAgIG51bWJlck9mUm9vbXM6IDEsXG4gICAgICAgICAgICAgICAgcm9vbXM6IGRldGFpbFJvb21zLFxuICAgICAgICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIGhvdGVsUHJlZmVycmVkOiBob3RlbC5wcmVmZXJyZWQsXG4gICAgICAgICAgICAgICAgaG90ZWxEaXN0YW5jZToge1xuICAgICAgICAgICAgICAgICAgc2VhcmNoOiBob3RlbC5sb2NhdGlvbi5kaXN0YW5jZS50b0ZpeGVkKDIpLFxuICAgICAgICAgICAgICAgICAgYWlycG9ydDogaG90ZWwudHJhbnNwb3J0cz8uZmluZChhID0+IGEudHlwZSA9PSBIb3RlbERldGFpbFR5cGVzLkFJUlBPUlQpPy5kaXN0YW5jZS50b0ZpeGVkKDIpLFxuICAgICAgICAgICAgICAgICAgdHJhaW46IGhvdGVsLnRyYW5zcG9ydHM/LmZpbmQoYSA9PiBhLnR5cGUgPT0gSG90ZWxEZXRhaWxUeXBlcy5UUkFJTik/LmRpc3RhbmNlLnRvRml4ZWQoMiksXG4gICAgICAgICAgICAgICAgICBtZXRybzogaG90ZWwudHJhbnNwb3J0cz8uZmluZChhID0+IGEudHlwZSA9PSBIb3RlbERldGFpbFR5cGVzLk1FVFJPKT8uZGlzdGFuY2UudG9GaXhlZCgyKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbG9jYXRpb246IHtcbiAgICAgICAgICAgICAgICAgIGxvbmdpdHVkZTogaG90ZWwubG9jYXRpb24ubG9uZ2l0dWRlLFxuICAgICAgICAgICAgICAgICAgbGF0aXR1ZGU6IGhvdGVsLmxvY2F0aW9uLmxhdGl0dWRlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgLy8gbm8gbG9uZ2VyICogbm8gb2Ygcm9vbXMgYXMgZWFjaCByb29tIGlzIGFkZGVkIDEgYnkgMVxuICAgICAgICAgICAgICBwcmljZTpcbiAgICAgICAgICAgICAgICBob3RlbFJvb20udG90YWwsXG4gICAgICAgICAgICAgIGN1cnJlbmN5OlxuICAgICAgICAgICAgICAgIChob3RlbFJvb20uY3VycmVuY3lDb2RlIGFzIEN1cnJlbmN5Q29kZSksXG4gICAgICAgICAgICAgIHNlYXJjaFF1ZXJ5LFxuICAgICAgICAgICAgICBvdXRib3VuZERhdGU6IGhvdGVsUXVlcnkuc3RhcnREYXRlLFxuICAgICAgICAgICAgICBpbmJvdW5kRGF0ZTogaG90ZWxRdWVyeS5lbmREYXRlLFxuICAgICAgICAgICAgICBsb3dlc3RQcmljZTpcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWFwZXN0UHJpY2U/LmFtb3VudCxcbiAgICAgICAgICAgICAgbG93ZXN0UHJpY2VDdXJyZW5jeTpcbiAgICAgICAgICAgICAgICA8Q3VycmVuY3lDb2RlPnRoaXMuY2hlYXBlc3RQcmljZT8uY3VycmVuY3lDb2RlLFxuICAgICAgICAgICAgICBsb3dlc3RQcmljZURldGFpbDogdGhpcy5jcmVhdGVMb3dlc3RQcmljZURldGFpbChob3RlbFF1ZXJ5KSxcbiAgICAgICAgICAgICAgY28yUGVySXRlbTogaG90ZWwuY28yUGVySXRlbSxcbiAgICAgICAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiBob3RlbC5jbzJQZXJQYXNzZW5nZXIsXG4gICAgICAgICAgICAgIHJlYXNvbktleXM6aG90ZWxSb29tLnJlcXVpcmVzUmVhc29uS2V5cyxcbiAgICAgICAgICAgICAgYWdlbnRPdmVycm9kZVVuYXZhaWxhYmxlOmhvdGVsUm9vbS51bmF2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGludEJhc2tldCxcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gYXJyYXkgb2YgMSBvciAyIHRyYXZlbGxlcnMgd2hpY2ggZ28gaW4gMSByb29tXG4gICAgICAgICAgICAvLyBjaHVua1xuICAgICAgICAgICAgYm9va2VkVHJhdmVsbGVyc0NodW5rc1tpbmRleF0gfHwgW10sXG4gICAgICAgICAgICBob3RlbFJvb20ucmVxdWlyZXNSZWFzb25LZXlzLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICBpZ25vcmVJbnZva2VkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAod2ggPT09IERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2gpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZWFyY2hXaXRoTmV3VXNlcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gd2g7XG4gICAgICAgIH0sXG4gICAgICAgIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY29udGludWVcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbDtcbiAgfVxuXG4gIGdldFRlcm1zQW5kQ29uZChob3RlbFJvb206IEhvdGVsUm9vbSwgaG90ZWxRdWVyeTogU2VhcmNoSG90ZWxzUXVlcnlWYXJpYWJsZXMsIGlzQ3NsOiBib29sZWFuID0gZmFsc2UpIHtcblxuICAgIC8vIGlnbm9yZSBoZXJlIHNpbmNlIHZzY29kZSBpcyBlcnJvciBoaWdobGlnaHRpbmcgb2JqZWN0IGZvciBzb21lIHJlYXNvblxuICAgIGNvbnN0IHBvbGljaWVzOkhvdGVsUG9saWN5ID0gaG90ZWxSb29tLnBvbGljaWVzXG5cbiAgICBjb25zdCBob3RlbFBvbGljaWVzOiBBcnJheTxrZXlvZiBIb3RlbFBvbGljeT4gPSBPYmplY3Qua2V5cyhwb2xpY2llcykgYXMgQXJyYXk8a2V5b2YgSG90ZWxQb2xpY3k+O1xuICAgIGNvbnN0IGZvcm1hdHRlZFBvbGljaWVzOiB7XG4gICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICB2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbjtcbiAgfVtdID0gW107XG5cbiAgICBob3RlbFBvbGljaWVzLmZvckVhY2goKHBvbGljeToga2V5b2YgSG90ZWxQb2xpY3kpID0+IHtcbiAgICAgIGlmIChwb2xpY3kgIT09ICdfX3R5cGVuYW1lJykge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhwb2xpY3kpXG4gICAgICAgIGNvbnN0IG1hdGNoID0gcG9saWN5Lm1hdGNoKC9bQS1aXVthLXpdK3xbMC05XSsvZyk7XG5cbiAgICAgICAgY29uc3QgbmV3UG9saWN5ID0ge1xuICAgICAgICAgIG5hbWU6IG1hdGNoID8gbWF0Y2guam9pbignICcpIDogcG9saWN5LFxuICAgICAgICAgIHZhbHVlOiBwb2xpY2llc1twb2xpY3ldXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHBvbGljaWVzW3BvbGljeV0gPT09IHRydWUpIHtcbiAgICAgICAgICBuZXdQb2xpY3kudmFsdWUgPSAnWWVzJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb2xpY2llc1twb2xpY3ldID09PSBmYWxzZSkge1xuICAgICAgICAgIG5ld1BvbGljeS52YWx1ZSA9ICdObyc7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXR0ZWRQb2xpY2llcy5wdXNoKG5ld1BvbGljeSk7XG4gICAgICB9XG5cbiAgICB9KTtcblxuICAgIGNvbnN0IG5vcm1hbFBvbGljaWVzID0gW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnUmF0ZSBJbmZvcm1hdGlvbicsXG4gICAgICAgIHZhbHVlOiBob3RlbFJvb20ucmF0ZURlc2NyaXB0aW9uXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnUmF0ZSBDb2RlJyxcbiAgICAgICAgdmFsdWU6IGlzQ3NsID8gaG90ZWxSb29tLmFkZGl0aW9uYWw/LnByb2R1Y3RDb2RlIDogaG90ZWxSb29tLnJhdGVDb2RlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnUm9vbSBJbmZvcm1hdGlvbicsXG4gICAgICAgIHZhbHVlOiBob3RlbFJvb20ucm9vbURlc2NyaXB0aW9uXG4gICAgICB9XG4gICAgXTtcblxuICAgIHJldHVybiBub3JtYWxQb2xpY2llcy5jb25jYXQoZm9ybWF0dGVkUG9saWNpZXMpO1xuICB9XG5cbiAgc2F2ZVNlYXJjaChob3RlbE5hbWU6IHN0cmluZyA9IG51bGwpOiBPYnNlcnZhYmxlPFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQ+IHtcbiAgICBpZiAodGhpcy5pc0Zhdm91cml0ZVZhbGlkLnZhbHVlKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVNlYXJjaFF1ZXJ5ID0gdGhpcy51cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5KTtcbiAgICAgIGlmIChob3RlbE5hbWUpIGZhdm91cml0ZVNlYXJjaFF1ZXJ5LmhvdGVsTmFtZSA9IGhvdGVsTmFtZTtcbiAgICAgIGNvbnN0IHNlYXJjaEluZm8gPSB7XG4gICAgICAgIG5hbWU6IGAke21vbWVudCgpfWAsXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5Ib3RlbCxcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVGYXZvdXJpdGVTZWFyY2goc2VhcmNoSW5mbyk7XG4gICAgfVxuICB9XG5cbmFzeW5jIGFwcGx5RmF2b3VyaXRlKGZhdjogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gIHRoaXMuY2hlY2tpbl9kYXRlID0gbW9tZW50KCkuc2V0KCdob3VyJywgMjMpLnNldCgnbWludXRlJywgNTkpO1xuICB0aGlzLmNoZWNrb3V0X2RhdGUgPSBtb21lbnQoKS5hZGQoMSwgJ2RheScpLnNldCgnaG91cicsIDIzKS5zZXQoJ21pbnV0ZScsIDU5KTtcbiAgdGhpcy5hcHBseVNlYXJjaFF1ZXJ5KGZhdik7XG59XG5cbiAgbWVzc2FnZUNvbmZpZ0NoZWNrKGNvbmZpZzogYW55LCBpc0NoZWNrUGFzczogYm9vbGVhbik6IGJvb2xlYW4ge1xuXG4gICAgaWYgKGNvbmZpZy5jaXR5ICYmIGlzQ2hlY2tQYXNzKVxuICAgICAgaXNDaGVja1Bhc3MgPVxuICAgICAgICB0aGlzLmxvY2F0aW9uX3R5cGVfc2VsZWN0ID09PSBMb2NhdGlvblR5cGVzLkNpdHkgJiZcbiAgICAgICAgdGhpcy5sb2NhdGlvbj8ubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gY29uZmlnLmNpdHkudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChjb25maWcubmlnaHRzICYmIGlzQ2hlY2tQYXNzKSB7XG4gICAgICBjb25zdCBuaWdodHMgPSB0aGlzLmhlbHBlcnMuZGF5c0JldHdlZW4odGhpcy5jaGVja2luX2RhdGUsIHRoaXMuY2hlY2tvdXRfZGF0ZSk7XG4gICAgICBpc0NoZWNrUGFzcyA9IG5pZ2h0cyA+PSBjb25maWcubmlnaHRzO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmFpcnBvcnQgJiYgaXNDaGVja1Bhc3MpIHtcbiAgICAgIGlzQ2hlY2tQYXNzID1cbiAgICAgICAgdGhpcy5sb2NhdGlvbl90eXBlX3NlbGVjdCA9PT0gTG9jYXRpb25UeXBlcy5BaXJwb3J0ICYmXG4gICAgICAgICh0aGlzLmxvY2F0aW9uPy5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBjb25maWcuYWlycG9ydC50b0xvd2VyQ2FzZSgpIHx8IHRoaXMubG9jYXRpb24/LmlhdGE/LnRvTG93ZXJDYXNlKCkgPT09IGNvbmZpZy5haXJwb3J0LnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuc3RhdGlvbiAmJiBpc0NoZWNrUGFzcykge1xuICAgICAgaXNDaGVja1Bhc3MgPVxuICAgICAgICB0aGlzLmxvY2F0aW9uX3R5cGVfc2VsZWN0ID09PSBMb2NhdGlvblR5cGVzLlRyYWluU3RhdGlvbiAmJlxuICAgICAgICAodGhpcz8udHJhaW5zU3RhdGlvbj8ubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gY29uZmlnLnN0YXRpb24udG9Mb3dlckNhc2UoKSB8fCB0aGlzPy50cmFpbnNTdGF0aW9uPy5zdGF0aW9uQ29kZT8udG9Mb3dlckNhc2UoKSA9PT0gY29uZmlnLnN0YXRpb24udG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuICAgIGlmIChjb25maWcuaG90ZWxuYW1lICYmIGlzQ2hlY2tQYXNzKSBpc0NoZWNrUGFzcyA9IHRoaXMuaG90ZWxfbmFtZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhjb25maWcuaG90ZWxuYW1lPy50b0xvd2VyQ2FzZSgpKTtcbiAgICByZXR1cm4gaXNDaGVja1Bhc3M7XG4gIH1cblxuICBnZXRSZXF1c3RlZEhvdGVsVXBkYXRlKGJhc2tldGlkczogc3RyaW5nW10pOiBPYnNlcnZhYmxlPEdldEhvdGVsQm9va2luZ1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmdldFJlcXVlc3RlZEhvdGVsVXBkYXRlRmV0Y2hlci5mZXRjaE9uZSh7IGJhc2tldEl0ZW1zOiBiYXNrZXRpZHMgfSk7XG4gIH1cblxuICBjcmVhdGVMb3dlc3RQcmljZURldGFpbChob3RlbFF1ZXJ5OiBTZWFyY2hIb3RlbHNRdWVyeVZhcmlhYmxlcyk6IGFueSB7XG4gICAgY29uc3QgZnVsbEhvdGVsID0gdGhpcy5mdWxsUmVzdWx0cy5maW5kKGZob3RlbCA9PiBmaG90ZWwuaWQgPT09IHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5sb3dlc3RQcmljZUhvdGVsLmlkKTtcblxuICAgIGNvbnN0IGNoZWFwZXN0Um9vbSA9IGZ1bGxIb3RlbC5hdmFpbGFibGVSYXRlcy5yb29tcy5yZWR1Y2UoKHByZXY6IEhvdGVsUm9vbVdpdGhMb2NhbFByaWNlLCBjdXJyOiBIb3RlbFJvb21XaXRoTG9jYWxQcmljZSkgPT4ge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHByZXYpLmxlbmd0aCA9PT0gMCB8fCBjdXJyLnRvdGFsIDwgcHJldi50b3RhbCA/IGN1cnIgOiBwcmV2O1xuICAgIH0se30pO1xuXG4gICAgaWYgKCFPYmplY3Qua2V5cyhjaGVhcGVzdFJvb20pLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGNoZWFwZXN0Um9vbTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChjaGVhcGVzdFJvb20sIGhvdGVsUXVlcnksIGZ1bGxIb3RlbC5zb3VyY2UgPT09IFNlcnZpY2VQcm92aWRlci5TYWJyZUNTTCk7XG5cbiAgICBjb25zdCB7IGFkZHJlc3M6IGhvdGVsQWFkZHJlc3MgfSA9IGZ1bGxIb3RlbDtcblxuICAgIGNvbnN0IGRldGFpbFJvb21zOiB7XG4gICAgICByYXRlRGVzY3JpcHRpb246IHN0cmluZztcbiAgICAgIHJvb21EZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgICAgcm9vbUlkOiBzdHJpbmc7XG4gICAgICByb29tVHlwZTogc3RyaW5nO1xuICAgICAgcmF0ZUNvZGU6IHN0cmluZztcbiAgICAgIGNoZWNrSW46IGFueTtcbiAgICAgIGNoZWNrT3V0OiBhbnk7XG4gICAgICBuaWdodHM6IEhvdGVsTmlnaHRbXTtcbiAgICB9W10gPSBbXTtcblxuICAgIGlmIChjaGVhcGVzdFJvb20pIHtcbiAgICAgIGRldGFpbFJvb21zLnB1c2goe1xuICAgICAgICByYXRlRGVzY3JpcHRpb246XG4gICAgICAgIGNoZWFwZXN0Um9vbS5yYXRlRGVzY3JpcHRpb24sXG4gICAgICAgIHJvb21EZXNjcmlwdGlvbjogY2hlYXBlc3RSb29tLnJvb21EZXNjcmlwdGlvbixcbiAgICAgICAgcm9vbUlkOiBjaGVhcGVzdFJvb20ucm9vbUlkLFxuICAgICAgICByb29tVHlwZTogY2hlYXBlc3RSb29tLnJvb21UeXBlLFxuICAgICAgICByYXRlQ29kZTogY2hlYXBlc3RSb29tLnJhdGVDb2RlLFxuICAgICAgICBjaGVja0luOiBob3RlbFF1ZXJ5LnN0YXJ0RGF0ZSxcbiAgICAgICAgY2hlY2tPdXQ6IGhvdGVsUXVlcnkuZW5kRGF0ZSxcbiAgICAgICAgbmlnaHRzOiBjaGVhcGVzdFJvb20ubmlnaHRzIHx8IGZ1bGxIb3RlbC5hdmFpbGFibGVSYXRlcz8ucm9vbXNbMF0/Lm5pZ2h0c1xuICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICBjb25zdCBkZXRhaWwgPSAge1xuICAgICAgYWRkaXRpb25hbDogZnVsbEhvdGVsLmF2YWlsYWJsZVJhdGVzPy5hZGRpdGlvbmFsLFxuICAgICAgaG90ZWxBZGRyZXNzOiB7XG4gICAgICAgIHN0cmVldE5hbWU6IGhvdGVsQWFkZHJlc3MuYWRkcmVzc0xpbmUxLFxuICAgICAgICB0b3duOiBob3RlbEFhZGRyZXNzLmFkZHJlc3NMaW5lMlxuICAgICAgICAgID8gaG90ZWxBYWRkcmVzcy5hZGRyZXNzTGluZTJcbiAgICAgICAgICA6IGhvdGVsQWFkZHJlc3MuY2l0eVxuICAgICAgICAgID8gaG90ZWxBYWRkcmVzcy5jaXR5XG4gICAgICAgICAgOiAnQ29uZmVybWEnLFxuICAgICAgICBjb3VudHk6IGhvdGVsQWFkZHJlc3MuYWRkcmVzc0xpbmUzLFxuICAgICAgICBwb3N0Y29kZTogaG90ZWxBYWRkcmVzcy5wb3N0T3JaaXBDb2RlLFxuICAgICAgICBjb3VudHJ5Q29kZTogaG90ZWxBYWRkcmVzcy5jb3VudHJ5Q29kZVxuICAgICAgfSxcbiAgICAgIGhvdGVsRGVzY3JpcHRpb246IGZ1bGxIb3RlbC5ncm91cCxcbiAgICAgIGhvdGVsRmF4TnVtYmVyOiBob3RlbEFhZGRyZXNzLmZhY3NpbWlsZSxcbiAgICAgIGhvdGVsUGhvbmVOdW1iZXI6IGhvdGVsQWFkZHJlc3MudGVsZXBob25lLFxuICAgICAgaG90ZWxJZDogZnVsbEhvdGVsLmlkLFxuICAgICAgaG90ZWxOYW1lOiBmdWxsSG90ZWwubmFtZSxcbiAgICAgIC8vIHRoaXMgc2hvdWxkIGFsd2F5cyBiZSAxIGFzIHdlIGJvb2sgMSByb29tIGFzIGEgdGltZVxuICAgICAgbnVtYmVyT2ZSb29tczogMSxcbiAgICAgIHJvb21zOiBkZXRhaWxSb29tcyxcbiAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zLFxuICAgICAgaG90ZWxQcmVmZXJyZWQ6IGZ1bGxIb3RlbC5wcmVmZXJyZWQsXG4gICAgICBob3RlbERpc3RhbmNlOiB7XG4gICAgICAgIHNlYXJjaDogZnVsbEhvdGVsLmxvY2F0aW9uLmRpc3RhbmNlLnRvRml4ZWQoMiksXG4gICAgICAgIGFpcnBvcnQ6IGZ1bGxIb3RlbC50cmFuc3BvcnRzPy5maW5kKGEgPT4gYS50eXBlID09IEhvdGVsRGV0YWlsVHlwZXMuQUlSUE9SVCk/LmRpc3RhbmNlLnRvRml4ZWQoMiksXG4gICAgICAgIHRyYWluOiBmdWxsSG90ZWwudHJhbnNwb3J0cz8uZmluZChhID0+IGEudHlwZSA9PSBIb3RlbERldGFpbFR5cGVzLlRSQUlOKT8uZGlzdGFuY2UudG9GaXhlZCgyKSxcbiAgICAgICAgbWV0cm86IGZ1bGxIb3RlbC50cmFuc3BvcnRzPy5maW5kKGEgPT4gYS50eXBlID09IEhvdGVsRGV0YWlsVHlwZXMuTUVUUk8pPy5kaXN0YW5jZS50b0ZpeGVkKDIpXG4gICAgICB9LFxuICAgICAgbG9jYXRpb246IHtcbiAgICAgICAgbG9uZ2l0dWRlOiBmdWxsSG90ZWwubG9jYXRpb24ubG9uZ2l0dWRlLFxuICAgICAgICBsYXRpdHVkZTogZnVsbEhvdGVsLmxvY2F0aW9uLmxhdGl0dWRlXG4gICAgICB9LFxuICAgIH1cblxuICAgIHJldHVybiBkZXRhaWw7XG4gIH1cblxuICBub1Jvb21GaWx0ZXJTZWxlY3RlZCgpOmJvb2xlYW4ge1xuICAgIGNvbnN0IHsgcmVmdW5kYWJsZVJvb21UeXBlLCBwcmljZVJhbmdlLCByb29tVHlwZSwgYWNjZXNzaWJsZVJvb21UeXBlLCBicmVha2Zhc3RUeXBlLCBjcm93blByZWZlcnJlZCB9ID0gdGhpcy5maWx0ZXJzO1xuICAgIHJldHVybiAhYWNjZXNzaWJsZVJvb21UeXBlLmxlbmd0aCAmJiAhcmVmdW5kYWJsZVJvb21UeXBlLmxlbmd0aCAmJiAhcm9vbVR5cGUubGVuZ3RoICYmIHByaWNlUmFuZ2UubWluID09PSAwICYmIHByaWNlUmFuZ2UubWF4ID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiAmJiAoIWJyZWFrZmFzdFR5cGUubGVuZ3RoIHx8IGJyZWFrZmFzdFR5cGUubGVuZ3RoID09PSAyKSAmJiAhY3Jvd25QcmVmZXJyZWQubGVuZ3RoO1xuICB9XG5cbiAgLy8gV2UgdXNlIHRoaXMgbWV0aG9kIGZvciBmZWF0dXJlczogUmVjZW50U2VhcmNoLCBGYXZvdXJpdGVTZWFyY2gsIEV4cGlyZWRCYXNrZXQsIENvcHlCYXNrZXQsIENsb25lQmFza2V0XG4gIC8vIE5vdGU6IERvIG5vdCBpbmNsdWRlIGRhdGVzIGFuZCB0YXZlbGxlcnMgaW4gdGhpcyBtZXRob2RcbiAgYXN5bmMgYXBwbHlTZWFyY2hRdWVyeShxdWVyeTogU2VhcmNoSG90ZWxzUXVlcnlWYXJpYWJsZXMsIHN0YXJ0U2VhcmNoOiBib29sZWFuID0gZmFsc2UsIGNsb25lQmFza2V0SXRlbTogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5jdXJyZW5jeSA9IHF1ZXJ5LmN1cnJlbmN5O1xuICAgIHRoaXMuZGlzdGFuY2UgPSBxdWVyeS5kaXN0YW5jZTtcbiAgICB0aGlzLm5vX29mX3Jvb21zID0gcXVlcnkucm9vbXM7XG4gICAgdGhpcy5ob3RlbF9uYW1lID0gcXVlcnkuaG90ZWxOYW1lID8gcXVlcnkuaG90ZWxOYW1lIDogKGNsb25lQmFza2V0SXRlbSA/IHRoaXMuY2xvbmVkQmFza2V0SXRlbURldGFpbHMuaG90ZWxOYW1lIDogbnVsbCk7XG4gICAgdGhpcy5ob3RlbF9jaGFpbiA9IHF1ZXJ5Lmdyb3VwTmFtZSA/IHsgbmFtZTogcXVlcnkuZ3JvdXBOYW1lIH0gOiBudWxsO1xuICAgIHRoaXMuY291bnRyeSA9IHF1ZXJ5LmNvdW50cnlDb2RlID9cbiAgICAgIHRoaXMuY291bnRyeSA9IHtcbiAgICAgICAgY0NvZGU6IHF1ZXJ5LmNvdW50cnlDb2RlLFxuICAgICAgICBjTmFtZTogJydcbiAgICAgIH0gOiBudWxsO1xuXG4gICAgaWYgKHF1ZXJ5Lm9mZmljZUlkKSB7XG4gICAgICB0aGlzLmxvY2F0aW9uX3R5cGVfc2VsZWN0ID0gTG9jYXRpb25UeXBlcy5PZmZpY2U7XG4gICAgfSBlbHNlIGlmIChxdWVyeS5pYXRhKSB7XG4gICAgICB0aGlzLmxvY2F0aW9uX3R5cGVfc2VsZWN0ID0gTG9jYXRpb25UeXBlcy5BaXJwb3J0O1xuICAgIH0gZWxzZSBpZiAocXVlcnkudHJhaW5TdGF0aW9uQ29kZSkge1xuICAgICAgdGhpcy5sb2NhdGlvbl90eXBlX3NlbGVjdCA9IExvY2F0aW9uVHlwZXMuVHJhaW5TdGF0aW9uO1xuICAgIH0gZWxzZSBpZiAoIXF1ZXJ5Lm9mZmljZUlkICYmICFxdWVyeS5sYXRpdHVkZSAmJiAhcXVlcnkubG9uZ2l0dWRlICYmICFxdWVyeS5pYXRhICYmICFxdWVyeS50cmFpblN0YXRpb25Db2RlKSB7XG4gICAgICB0aGlzLmxvY2F0aW9uX3R5cGVfc2VsZWN0ID0gTG9jYXRpb25UeXBlcy5TaG9ydGxpc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9jYXRpb25fdHlwZV9zZWxlY3QgPSBMb2NhdGlvblR5cGVzLkNpdHk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLmxvY2F0aW9uX3R5cGVfc2VsZWN0KSB7XG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuQWlycG9ydDpcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlXG4gICAgICAgICAgLmdldEFpcnBvcnRCeUNvZGUocXVlcnkuaWF0YSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChpYXRhOiBBaXJwb3J0U2VhcmNoUmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWlycG9ydCA9IHtcbiAgICAgICAgICAgICAgYWlycG9ydDoge1xuICAgICAgICAgICAgICAgIGdhdGV3YXk6IGlhdGEuaWF0YU1hdGNoLmlhdGFcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMubG9jYXRpb24gPSB7IC4uLmFpcnBvcnQsIC4uLmlhdGEuaWF0YU1hdGNoIH07XG4gICAgICAgICAgICBpZiAoc3RhcnRTZWFyY2gpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuQ2l0eToge1xuICAgICAgICBjb25zdCBmZXRjaExvY2F0aW9uJCA9IHF1ZXJ5LnBvc3RPclppcENvZGUgJiYgcXVlcnkuY291bnRyeUNvZGVcbiAgICAgICAgPyB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0UG9zdGNvZGVMaXN0KHF1ZXJ5LnBvc3RPclppcENvZGUsIHF1ZXJ5LmNvdW50cnlDb2RlKVxuICAgICAgICA6IHF1ZXJ5LmNpdHlOYW1lXG4gICAgICAgID8gdGhpcy5zZWFyY2hTZXJ2aWNlLmdldENpdHlMb2NhdGlvbnMocXVlcnkuY2l0eU5hbWUsIHF1ZXJ5LmNvdW50cnlDb2RlKVxuICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgZmV0Y2hMb2NhdGlvbiQuc3Vic2NyaWJlKChsb2NhdGlvbnM6IExvY2F0aW9uRGV0YWlsc1tdKSA9PiB7XG4gICAgICAgICAgY29uc3QgbG9jYXRpb25NYXRjaCA9IHF1ZXJ5LnBvc3RPclppcENvZGVcbiAgICAgICAgICAgID8gbG9jYXRpb25zLmZpbmQoKGxvYykgPT4gbG9jLnBvc3Rjb2RlID09PSBxdWVyeS5wb3N0T3JaaXBDb2RlKVxuICAgICAgICAgICAgOiBsb2NhdGlvbnMuZmluZCgobG9jKSA9PiBsb2MubmFtZSA9PT0gcXVlcnkuY2l0eU5hbWUpO1xuXG4gICAgICAgICAgaWYgKHF1ZXJ5LnBvc3RPclppcENvZGUpIHtcbiAgICAgICAgICAgIHRoaXMucG9zdGNvZGUgPSBsb2NhdGlvbk1hdGNoIHx8IG51bGw7XG4gICAgICAgICAgICB0aGlzLmxvY2F0aW9uID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uTWF0Y2ggfHwgbnVsbDtcbiAgICAgICAgICAgIHRoaXMucG9zdGNvZGUgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdGFydFNlYXJjaCkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLk9mZmljZToge1xuICAgICAgICBjb25zdCBvZmZpY2VzOiBMb2NhdGlvbkRldGFpbHNbXSA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZS5nZXRPZmZpY2VMb2NhdGlvbnNOb1VzZXJBZGRyZXNzZXMoKS50b1Byb21pc2UoKTtcbiAgICAgICAgdGhpcy5vZmZpY2UgPSBvZmZpY2VzLmZpbmQoKG9mZmljZTogYW55KSA9PiBOdW1iZXIob2ZmaWNlLmlkKSA9PT0gTnVtYmVyKHF1ZXJ5Lm9mZmljZUlkKSk7XG4gICAgICAgIGlmIChzdGFydFNlYXJjaCkge1xuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuVHJhaW5TdGF0aW9uOlxuICAgICAgICB0aGlzLmdldFJhaWxTdGF0aW9uQnlDb2RlKHF1ZXJ5LnRyYWluU3RhdGlvbkNvZGUpLnN1YnNjcmliZShcbiAgICAgICAgICAodHJhaW5zU3RhdGlvbjogUmFpbFN0YXRpb24pID0+IHtcbiAgICAgICAgICAgIHRoaXMudHJhaW5zU3RhdGlvbiA9IHtcbiAgICAgICAgICAgICAgY291bnRyeUNvZGU6IHF1ZXJ5LmNvdW50cnlDb2RlLFxuICAgICAgICAgICAgICBsYXRpdHVkZTogdHJhaW5zU3RhdGlvbi5sb2NhdGlvbkRldGFpbHMuY29vcmRpbmF0ZXMubGF0aXR1ZGUsXG4gICAgICAgICAgICAgIGxvbmdpdHVkZTogdHJhaW5zU3RhdGlvbi5sb2NhdGlvbkRldGFpbHMuY29vcmRpbmF0ZXMubG9uZ2l0dWRlLFxuICAgICAgICAgICAgICBuYW1lOiB0cmFpbnNTdGF0aW9uLm5hbWUsXG4gICAgICAgICAgICAgIHN0YXRpb25Db2RlOiB0cmFpbnNTdGF0aW9uLnN0YXRpb25Db2RlXG4gICAgICAgICAgICB9IGFzIExvY2F0aW9uRGV0YWlscztcblxuICAgICAgICAgICAgaWYgKHN0YXJ0U2VhcmNoKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5TaG9ydGxpc3Q6XG4gICAgICAgIGlmIChzdGFydFNlYXJjaCkge1xuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBydWxlU29ydGluZygpOiB2b2lke1xuICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5yZXN1bHRzLnZhbHVlKTtcbiAgICByZXN1bHRzLnNvcnQoKGZzdDogSG90ZWxEZXRhaWxzLCBzbmQ6IEhvdGVsRGV0YWlscyk6IG51bWJlciA9PiArc25kLnRvcEhvdGVsIC0gK2ZzdC50b3BIb3RlbCk7XG4gICAgcmVzdWx0cy5zb3J0KChmc3Q6IEhvdGVsRGV0YWlscywgc25kOiBIb3RlbERldGFpbHMpOiBudW1iZXIgPT4gK2ZzdC5ib3R0b21Ib3RlbCAtICtzbmQuYm90dG9tSG90ZWwpO1xuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xuICB9XG5cbiAgcHJvY2Vzc0ZpbHRlcnNUb0Rpc3BsYXkoaG90ZWxSZXN1bHQ6IEhvdGVsUXVvdGVSZXN1bHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oaWRkZW5FeHRyYUZpbHRlcnNbU2VhcmNoSGFuZGxlci5GRU1BTEVfRlJJRU5ETFldKSB7XG4gICAgICBjb25zdCBoYXNTb2xvRmVtYWxlRnJpZW5kbHkgPSB0aGlzLmlzRmVtYWxlRnJpZW5kbHkoaG90ZWxSZXN1bHQpO1xuICAgICAgaWYgKGhhc1NvbG9GZW1hbGVGcmllbmRseSkge1xuICAgICAgICB0aGlzLmhpZGRlbkV4dHJhRmlsdGVyc1tTZWFyY2hIYW5kbGVyLkZFTUFMRV9GUklFTkRMWV0gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBbRXh0cmFTZWFyY2hIYW5kbGVyLkNUTV9QQVJUTkVSUywgRXh0cmFTZWFyY2hIYW5kbGVyLkZDRE9fSE9URUwsIEV4dHJhU2VhcmNoSGFuZGxlci5HUkVFTl9IT1RFTF0uZm9yRWFjaCgoa2V5OiBFeHRyYVNlYXJjaEhhbmRsZXIpID0+IHtcbiAgICAgIGNvbnN0IHR5cGVkS2V5ID0ga2V5IGFzIEV4dHJhU2VhcmNoSGFuZGxlcjtcbiAgICAgIGlmICh0aGlzLmhpZGRlbkV4dHJhRmlsdGVyc1t0eXBlZEtleV0pIHtcbiAgICAgICAgdGhpcy5jaGVja0FuZFVwZGF0ZUZpbHRlcih0eXBlZEtleSwgdGhpcy5oaWRkZW5FeHRyYUZpbHRlcnMsIGhvdGVsUmVzdWx0KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5rZXlzKHRoaXMuaGlkZGVuQW1lbml0aWVzRmlsdGVycykuZm9yRWFjaCgoa2V5OiBBbWVuaXRpZXNTZWFyY2hIYW5kbGVyKSA9PiB7XG4gICAgICBjb25zdCB0eXBlZEtleSA9IGtleSBhcyBBbWVuaXRpZXNTZWFyY2hIYW5kbGVyO1xuICAgICAgaWYgKHRoaXMuaGlkZGVuQW1lbml0aWVzRmlsdGVyc1t0eXBlZEtleV0pIHtcbiAgICAgICAgdGhpcy5jaGVja0FuZFVwZGF0ZUZpbHRlcih0eXBlZEtleSwgdGhpcy5oaWRkZW5BbWVuaXRpZXNGaWx0ZXJzLCBob3RlbFJlc3VsdCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLmhpZGRlblN0YXJSYXRpbmdGaWx0ZXJzKS5mb3JFYWNoKChrZXk6IFN0YXJSYXRpbmcpID0+IHtcbiAgICAgIGNvbnN0IHR5cGVkS2V5ID0ga2V5IGFzIFN0YXJSYXRpbmc7XG4gICAgICBpZiAodGhpcy5oaWRkZW5TdGFyUmF0aW5nRmlsdGVyc1t0eXBlZEtleV0gKSB7XG4gICAgICAgICAgbGV0IHN0YXJSYXRpbmc7XG4gICAgICAgICAgaWYgKGtleSA9PT0gU3RhclJhdGluZy5Ud29TdGFyKSB7XG4gICAgICAgICAgICBzdGFyUmF0aW5nID0gMjtcbiAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gU3RhclJhdGluZy5UaHJlZVN0YXIpIHtcbiAgICAgICAgICAgIHN0YXJSYXRpbmcgPSAzO1xuICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBTdGFyUmF0aW5nLkZvdXJTdGFyKSB7XG4gICAgICAgICAgICBzdGFyUmF0aW5nID0gNDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gU3RhclJhdGluZy5GaXZlU3Rhcikge1xuICAgICAgICAgICAgc3RhclJhdGluZyA9IDU7XG4gICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFN0YXJSYXRpbmcuVW5yYXRlZCkge1xuICAgICAgICAgICAgc3RhclJhdGluZyA9IC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmhpZGRlblN0YXJSYXRpbmdGaWx0ZXJzW3R5cGVkS2V5XSA9ICEoc3RhclJhdGluZyA9PT0gaG90ZWxSZXN1bHQuc3RhcnMgfHwgKHN0YXJSYXRpbmcgPT09IC0xICYmICFob3RlbFJlc3VsdC5zdGFycykpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0FuZFVwZGF0ZUZpbHRlcjxUIGV4dGVuZHMgc3RyaW5nPihmaWx0ZXJLZXk6IFQsIGZpbHRlclNldDogUmVjb3JkPFQsIGJvb2xlYW4+LCBob3RlbFJlc3VsdDogSG90ZWxRdW90ZVJlc3VsdCk6IHZvaWQge1xuICAgIGlmIChmaWx0ZXJTZXRbZmlsdGVyS2V5XSkge1xuICAgICAgY29uc3QgZmlsdGVyZWRUYWdzID0gdGhpcy5maWx0ZXJUYWdzKGhvdGVsUmVzdWx0LnRhZ3MsIGZpbHRlcktleSk7XG4gICAgICBpZiAoZmlsdGVyZWRUYWdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZmlsdGVyU2V0W2ZpbHRlcktleV0gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm9jZXNzUm9vbUZpbHRlcnNUb0Rpc3BsYXkoaG90ZWw6IEhvdGVsRGV0YWlscykge1xuICAgIGNvbnN0IGhvdGVsT2JqZWN0VmFsdWUgPSB0aGlzLmdldEhvdGVsT2JqZWN0VmFsdWUoaG90ZWwpO1xuXG4gICAgaWYgKGhvdGVsT2JqZWN0VmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLmhpZGRlbkV4dHJhRmlsdGVyc1tTZWFyY2hIYW5kbGVyLkFWQUlMQUJJTElUWV0pIHtcbiAgICAgICAgaWYgKGhvdGVsLmF2YWlsYWJsZVJhdGVzPy5yb29tcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5oaWRkZW5FeHRyYUZpbHRlcnNbU2VhcmNoSGFuZGxlci5BVkFJTEFCSUxJVFldID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaGlkZGVuRXh0cmFGaWx0ZXJzW1NlYXJjaEhhbmRsZXIuQUNDRVNTSUJMRV9ST09NXSkge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gdGhpcy5maWx0ZXJSb29tc0J5QWNjZXNzaWJpbGl0eShob3RlbE9iamVjdFZhbHVlKTtcbiAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuaGlkZGVuRXh0cmFGaWx0ZXJzW1NlYXJjaEhhbmRsZXIuQUNDRVNTSUJMRV9ST09NXSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmhpZGRlbkV4dHJhRmlsdGVyc1tTZWFyY2hIYW5kbGVyLlJFRlVOREFCTEVdKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBob3RlbE9iamVjdFZhbHVlLnJvb21zPyBob3RlbE9iamVjdFZhbHVlLnJvb21zLmZpbHRlcigocm9vbXM6IEhvdGVsUm9vbSkgPT4ge1xuICAgICAgICAgIHJldHVybiByb29tcz8ucG9saWNpZXMucmVmdW5kQXZhaWxhYmxlO1xuICAgICAgICB9KSA6IFtdO1xuXG4gICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmhpZGRlbkV4dHJhRmlsdGVyc1tTZWFyY2hIYW5kbGVyLlJFRlVOREFCTEVdID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaGlkZGVuRXh0cmFGaWx0ZXJzW1NlYXJjaEhhbmRsZXIuTk9OX1JFRlVOREFCTEVdKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBob3RlbE9iamVjdFZhbHVlPy5yb29tcyA/IGhvdGVsT2JqZWN0VmFsdWUucm9vbXMuZmlsdGVyKChyb29tczogSG90ZWxSb29tKSA9PiB7XG4gICAgICAgICAgcmV0dXJuICFyb29tcz8ucG9saWNpZXMucmVmdW5kQXZhaWxhYmxlO1xuICAgICAgICB9KSA6IFtdO1xuXG4gICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmhpZGRlbkV4dHJhRmlsdGVyc1tTZWFyY2hIYW5kbGVyLk5PTl9SRUZVTkRBQkxFXSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZldGNoaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmF2YWxpYWJpbGl0eVNlcnZpY2UuZmV0Y2hpbmcudmFsdWU7XG4gIH1cblxuICBjaGVja0ZvckhvdGVsUmVtaW5kZXIoaG90ZWxzZWFyY2hSZXF1ZXN0ZWQ6IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkhvdGVsXS5jaG9zZW4pIHsgLy9UaGV5J3ZlIGFscmVhZHkgcmVxdWVzdGVkIGEgaG90ZWwgc28gZG9uJ3Qgc2hvdyB0aGUgc3VnZ2VzdGlvbiBtb2RhbFxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2ltdWx0YW5lb3VzSG90ZWxTZWFyY2hSZXF1ZXN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoX29iamVjdHNbU2VydmljZVR5cGUuRmxpZ2h0XS5jaG9zZW4gLy9QZXJmb3JtIGhvdGVsIHNlYXJjaCBmb3Igb3Zlcm5pZ2h0IGZsaWdodHMgYWx3YXlzXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tEaWZmQmV0d2VlbkRhdGVzKFxuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdLm91dEJvdW5kRGF0ZSxcbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5pbmJvdW5kRGF0ZSxcbiAgICAgICAgICBTZXJ2aWNlVHlwZS5GbGlnaHQsXG4gICAgICAgICAgJ3JldHVybidcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5FdXJvc3Rhcl0uY2hvc2VuICYmXG4gICAgICAgIGhvdGVsc2VhcmNoUmVxdWVzdGVkXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tEaWZmQmV0d2VlbkRhdGVzKFxuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5FdXJvc3Rhcl0ub3V0Qm91bmREYXRlLFxuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5FdXJvc3Rhcl0uaW5ib3VuZERhdGUsXG4gICAgICAgICAgU2VydmljZVR5cGUuRXVyb3N0YXIsXG4gICAgICAgICAgJ3JldHVybidcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5SYWlsXS5jaG9zZW4gJiZcbiAgICAgICAgaG90ZWxzZWFyY2hSZXF1ZXN0ZWRcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0RpZmZCZXR3ZWVuRGF0ZXMoXG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdLm91dEJvdW5kRGF0ZVRpbWUsXG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdLmluQm91bmREYXRlVGltZSxcbiAgICAgICAgICBTZXJ2aWNlVHlwZS5SYWlsLFxuICAgICAgICAgICdSZXR1cm5Kb3VybmV5J1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkNhcl0uY2hvc2VuICYmXG4gICAgICAgIGhvdGVsc2VhcmNoUmVxdWVzdGVkXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY2FyU2VhcmNoID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkNhcl07XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrRGlmZkJldHdlZW5EYXRlcyhcbiAgICAgICAgICBjYXJTZWFyY2gucGlja3VwX2RhdGV0aW1lLFxuICAgICAgICAgIGNhclNlYXJjaC5kcm9wb2ZmX2RhdGV0aW1lLFxuICAgICAgICAgIFNlcnZpY2VUeXBlLkNhclxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrRGlmZkJldHdlZW5EYXRlcyhcbiAgICBvdXRCb3VuZERhdGU6IG1vbWVudC5Nb21lbnQsXG4gICAgaW5ib3VuZERhdGU6IG1vbWVudC5Nb21lbnQsXG4gICAgdHlwZTogU2VydmljZVR5cGUsXG4gICAgY2hvc2VuU2VhcmNoVHlwZTogc3RyaW5nID0gbnVsbCxcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChjaG9zZW5TZWFyY2hUeXBlICYmICh0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbdHlwZV0gYXMgYW55KS5jaG9zZW5TZWFyY2hUeXBlID09PSBjaG9zZW5TZWFyY2hUeXBlIHx8ICFjaG9zZW5TZWFyY2hUeXBlKSAmJlxuICAgICAgKCFvdXRCb3VuZERhdGUuaXNTYW1lKGluYm91bmREYXRlLCAnZGF0ZScpICYmIGluYm91bmREYXRlID4gb3V0Qm91bmREYXRlKTsgLy9JZiB0aGV5J3JlIG5vdCBvbiB0aGUgc2FtZSBkYXRlLCBhbmQgaW5ib3VuZCBpcyBsYXRlciB0aGFuIG91dGJvdW5kLCB0aGVuIHRoZSBzdGF5IG11c3QgYmUgYXRsZWFzdCBvdmVyIDEgbmlnaHRcbiAgfVxuXG59XG4iXX0=
|
|
2289
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90ZWwtZW50ZXJwcmlzZS1zZWFyY2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYnRzZXJ2aWNlcy9iYXNlL3NyYy9saWIvdmVuZG9yL2NsYXNzZXMvaG90ZWwtZW50ZXJwcmlzZS1zZWFyY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUd6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBYyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3RELE9BQU8sRUFJTCxhQUFhLEVBSWIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixhQUFhLEVBQ2Isa0JBQWtCLEVBTWxCLCtCQUErQixFQUMvQiw0QkFBNEIsRUFDNUIsZUFBZSxFQUNmLFFBQVEsRUFHUixnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLFVBQVUsRUFDVixjQUFjLEVBQ2Qsc0JBQXNCLEVBQ3ZCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUdMLGFBQWEsRUFVYixXQUFXLEdBVVosTUFBTSx3QkFBd0IsQ0FBQztBQVdoQyxPQUFPLEVBR0wsWUFBWSxFQUVaLFNBQVMsRUFFVCxnQkFBZ0IsRUFDakIsTUFBTSx3Q0FBd0MsQ0FBQztBQWdCaEQsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUt2RCxPQUFPLFNBQVMsTUFBTSx3QkFBd0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJekQsTUFBTSxzQkFBc0IsR0FBRyxDQUFD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LENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLGVBQWUsRUFDN0QsV0FBVyxDQUFDLElBQUksRUFDaEIsZUFBZSxDQUNoQixDQUFDO2FBQ0g7aUJBQU0sSUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTTtnQkFDekQsb0JBQW9CLEVBQ3BCO2dCQUNBLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDL0QsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQy9CLFNBQVMsQ0FBQyxlQUFlLEVBQ3pCLFNBQVMsQ0FBQyxnQkFBZ0IsRUFDMUIsV0FBVyxDQUFDLEdBQUcsQ0FDaEIsQ0FBQzthQUNIO1lBQ0QsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUFDLFdBQU07WUFDTixPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUNuQixZQUEyQixFQUMzQixXQUEwQixFQUMxQixJQUFpQixFQUNqQixtQkFBMkIsSUFBSTtRQUUvQixPQUFPLENBQUMsZ0JBQWdCLElBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFTLENBQUMsZ0JBQWdCLEtBQUssZ0JBQWdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUNoSSxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLElBQUksV0FBVyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsaUhBQWlIO0lBQ2hNLENBQUM7O0FBOW9GZSw0Q0FBc0IsR0FBRyxjQUFjLENBQUM7QUFDeEMsNkNBQXVCLEdBQUcsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgb2YsIE9ic2VydmFibGUsIFN1YmplY3QsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQmFzZUVudmlyb25tZW50IH0gZnJvbSAnLi9lbnZpcm9tZW50JztcbmltcG9ydCB7IEJhc2VIb3RlbEF2YWxpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2hvdGVsLWF2YWxsaWJpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENvdW50cnksXG4gIEhvdGVsUXVvdGVSZXN1bHQsXG4gIEhvdGVsUXVvdGVSZXN1bHRBcnJheSxcbiAgTG9jYXRpb25UeXBlcyxcbiAgTmdiRGF0ZVN0cnVjdCxcbiAgTG9jYXRpb25EZXRhaWxzLFxuICBIb3RlbEF2YWxpYmlsaXR5UXVvdGVSZXN1bHQsXG4gIGluY2x1ZGVkRXhwcmVzc2lvbixcbiAgZXhjbHVkZWRFeHByZXNzaW9uLFxuICBTZWFyY2hIYW5kbGVyLFxuICBFeHRyYVNlYXJjaEhhbmRsZXIsXG4gIFJlY2VudFNlYXJjaCxcbiAgQWlycG9ydFNlYXJjaFJlc3VsdHMsXG4gIEhvdGVsRGV0YWlscyxcbiAgSG90ZWxEZXRhaWxzQXJyYXksXG4gIFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQsXG4gIGluY2x1ZGVkQWNjZXNzaWJpbGl0eUV4cHJlc3Npb24sXG4gIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMsXG4gIFNlcnZpY2VQcm92aWRlcixcbiAgUm9vbVR5cGUsXG4gIEhvdGVsQXZhbGliaWxpdHlRdWVyeSxcbiAgSG90ZWxSb29tV2l0aExvY2FsUHJpY2UsXG4gIERpc2FibGVkS2V5V29yZHMsXG4gIFRyYXZlbFBvbGljaWVzLFxuICBTdGFyUmF0aW5nLFxuICBDdXN0b21lclJhdGluZyxcbiAgQW1lbml0aWVzU2VhcmNoSGFuZGxlclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge1xuICBCYXNrZXRJdGVtLFxuICBDdXJyZW5jeUNvZGUsXG4gIERpc3RhbmNlVHlwZXMsXG4gIEhvdGVsUm9vbSxcbiAgSG90ZWxUYWcsXG4gIFJhaWxTdGF0aW9uLFxuICBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMsXG4gIFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLFxuICBTZWFyY2hFdXJvc3RhclF1ZXJ5VmFyaWFibGVzLFxuICBTZWFyY2hIb3RlbHNRdWVyeVZhcmlhYmxlcyxcbiAgU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMsXG4gIFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlcyxcbiAgU2VydmljZVR5cGUsXG4gIFJvb20sXG4gIEdldEhvdGVsQm9va2luZ1Jlc3VsdCxcbiAgU2VhcmNoQ2FySGlyZVF1ZXJ5VmFyaWFibGVzLFxuICBMb2NhdGlvbkRldGFpbCxcbiAgR2V0TXVsdGlwbGVIb3RlbFJhdGluZ1Jlc3BvbnNlLFxuICBIb3RlbFJhdGluZ0lkZW50aWZpZXJzLFxuICBIb3RlbE5pZ2h0LFxuICBIb3RlbFBvbGljeSxcbiAgQWlycG9ydCxcbn0gZnJvbSAnLi4vdHlwZXMvZ3JhcGhxbC50eXBlcyc7XG5pbXBvcnQgeyBCYXNlSG90ZWxRdW90ZUZldGNoZXIsIEhvdGVsUXVvdGVGZXRjaGVyVHlwZSB9IGZyb20gJy4uL2ZldGNoZXJzL2hvdGVsLXF1b3RlLWZldGNoZXInO1xuaW1wb3J0IHsgVXNlclNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0l1c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzZWFyY2guc2VydmljZSc7XG5pbXBvcnQgeyBBYnN0cmFjdEh0dHBDYWxsU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2h0dHAtY2FsbC5zZXJ2aWNlJztcblxuaW1wb3J0IHsgSG90ZWxBdmFsaW5pbGl0eUZldGNoZXJUeXBlIH0gZnJvbSAnLi4vZmV0Y2hlcnMvaG90ZWwtYXZhbGlhYmlsaXR5LWZldGNoZXInO1xuaW1wb3J0IHtcbiAgRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWVudGVycHJpc2UtYmFza2V0LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgRGlzcGxheUZpbHRlclNldHRpbmdzLFxuICBIb3RlbEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXG4gIEhvdGVsRmlsdGVycyxcbiAgSG90ZWxUZW1wUGFyYW1zLFxuICBIb3RlbFZpZXcsXG4gIFJlc3VsdERldGFpbHMsXG4gIEhvdGVsRGV0YWlsVHlwZXNcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JaG90ZWwtZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlJztcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcbmltcG9ydCB7XG4gIEJhc2VTZWFyY2hDb25mZXJtYVF1aWNrbGlzdEZldGNoZXIsXG4gIENvbmZlcm1hUXVpY2tsaXN0RmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY29uZmVybWEtcXVpY2tsaXN0LmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldFJhaWxTdGF0aW9uRmV0Y2hlcixcbiAgR2V0UmFpbFN0YXRpb25GZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmFpbC1zdGF0aW9uLmZldGNoZXInO1xuaW1wb3J0IHsgSG90ZWxSZWNlbnRTZWFyY2hBcmdzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ob3RlbC1yZWNlbnQtc2VhcmNoLWFyZ3MuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEFwcGx5SG90ZWxSdWxlc0ZldGNoZXJUeXBlLFxuICBCYXNlSG90ZWxSdWxlc0ZldGNoZXJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYXBwbHktSklULWhvdGVsLXJ1bGVzLmZldGNoZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFVzZXJGYXZvcnVyaXRlIH0gZnJvbSAnLi91c2VyLWZhdm91cml0ZS5lbnVtJztcbmltcG9ydCB7XG4gIEJhc2VHZXRSZXF1ZXN0ZWRIb3RlbFVwZGF0ZUZldGNoZXIsXG4gIEdldFJlcXVlc3RlZEhvdGVsVXBkYXRlRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXJlcXVlc3RlZC1ob3RlbC11cGRhdGUuZmV0Y2hlcic7XG5pbXBvcnQgQ291bnRyaWVzIGZyb20gJy4uL2RhdGEvY291bnRyaWVzLmpzb24nO1xuaW1wb3J0IHsgSG90ZWxTb3J0T3JkZXIgfSBmcm9tICcuL2hvdGVsLXNvcnQtb3JkZXIuZW51bSc7XG5pbXBvcnQgeyBIb3RlbFVJU3RhcnNVc2VyRmF2b3JpdGVSZXNwb25zZSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMnO1xuXG5cbmNvbnN0IENMSUVOVF9QUkVGRVJSRURfVkFMVUUgPSAyO1xuY29uc3QgQUdFTlRfUFJFRkVSUkVEX1ZBTFVFID0gMTtcblxuZXhwb3J0IGNsYXNzIEhvdGVsRW50ZXJwcmlzZVNlYXJjaDxcbiAgSFFfUSBleHRlbmRzIEhvdGVsUXVvdGVGZXRjaGVyVHlwZSxcbiAgSEFfUSBleHRlbmRzIEhvdGVsQXZhbGluaWxpdHlGZXRjaGVyVHlwZSxcbiAgUUxfUSBleHRlbmRzIENvbmZlcm1hUXVpY2tsaXN0RmV0Y2hlclR5cGUsXG4gIEdSU19RIGV4dGVuZHMgR2V0UmFpbFN0YXRpb25GZXRjaGVyVHlwZSxcbiAgSFJfUSBleHRlbmRzIEFwcGx5SG90ZWxSdWxlc0ZldGNoZXJUeXBlLFxuICBIVV9RIGV4dGVuZHMgR2V0UmVxdWVzdGVkSG90ZWxVcGRhdGVGZXRjaGVyVHlwZVxuPlxuICBleHRlbmRzIEJhc2VFbnRlcnByaXNlU2VhcmNoPEhvdGVsVGVtcFBhcmFtcywgSG90ZWxRdW90ZVJlc3VsdEFycmF5LCBIb3RlbERldGFpbHNBcnJheT5cbiAgaW1wbGVtZW50cyBIb3RlbEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2Uge1xuXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUEFSQU1TID0gJ3NlYXJjaF9ob3RlbCc7XG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdyZXN1bHRzX2hvdGVsJztcblxuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5Ib3RlbDtcbiAgcHJpdmF0ZSB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXTtcbiAgcHVibGljIGxvY2F0aW9uX3R5cGVzOiBCZWhhdmlvclN1YmplY3Q8TG9jYXRpb25UeXBlc1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TG9jYXRpb25UeXBlc1tdPihcbiAgICBbXVxuICApO1xuICBwdWJsaWMgb2ZmaWNlczogQmVoYXZpb3JTdWJqZWN0PExvY2F0aW9uVHlwZXNbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PExvY2F0aW9uVHlwZXNbXT4oW10pO1xuICBwdWJsaWMgbGFzdEFjdGl2ZVBhZ2U6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcbiAgcHVibGljIGppdFJ1bGVzUmVjZWl2ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYXBwbHlTb3J0aW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBiYWNrVG9UeXBlOiBTZXJ2aWNlVHlwZSA9IG51bGw7XG5cbiAgcmVhZG9ubHkgZ2FsbGVyaWVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdOyB9ID0ge307XG4gIHByaXZhdGUgb2NjdXBpZWQ6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgcmVzdWx0c19kZXRhaWxzOiBSZXN1bHREZXRhaWxzID0ge1xuICAgIGNoYWluczogbmV3IFNldDxzdHJpbmc+KCksXG4gICAgYW1lbml0aWVzOiBbXSxcbiAgICBtYXhEaXN0YW5jZTogMFxuICB9O1xuICBwcml2YXRlIF9jaGVja2luX2RhdGVfbmdiOiBOZ2JEYXRlU3RydWN0O1xuICBwcml2YXRlIF9jaGVja291dF9kYXRlX25nYjogTmdiRGF0ZVN0cnVjdDtcbiAgcHJpdmF0ZSBfYm9va2VkVHJhdmVsbGVyczogVHJhdmVsbGVyW10gPSBbXTtcbiAgcHVibGljIGhvdGVsUm9vbVJlY2VpdmVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSBhbHRlcm5hdGl2ZUxvY2F0aW9uOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBwcmltYXJ5TG9jYXRpb246IHN0cmluZyA9ICcnO1xuICBnZXQgY2hhaW5zKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMucmVzdWx0c19kZXRhaWxzLmNoYWluc107XG4gIH1cblxuICBnZXQgYW1lbml0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMucmVzdWx0c19kZXRhaWxzLmFtZW5pdGllc107XG4gIH1cblxuICBnZXQgbWF4RGlzdGFuY2UoKTogbnVtYmVyIHtcbiAgICB0aGlzLmZpbHRlcnMuZGlzdGFuY2VSYW5nZS5tYXggPSBNYXRoLmNlaWwoXG4gICAgICBNYXRoLm1heCguLi50aGlzLnJlc3VsdHMudmFsdWUubWFwKG8gPT4gby5sb2NhdGlvbi5kaXN0YW5jZSkpXG4gICAgKTtcbiAgICB0aGlzLnJlc3VsdHNfZGV0YWlscy5tYXhEaXN0YW5jZSA9IHRoaXMuZmlsdGVycy5kaXN0YW5jZVJhbmdlLm1heDtcbiAgICByZXR1cm4gdGhpcy5yZXN1bHRzX2RldGFpbHMubWF4RGlzdGFuY2U7XG4gIH1cblxuICBnZXQgbWF4UHJpY2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMuZmlsdGVycy5wcmljZVJhbmdlLm1heCk7XG4gIH1cblxuICBnZXQgY3VycmVuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmN1cnJlbmN5O1xuICB9XG5cbiAgc2V0IGN1cnJlbmN5KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuY3VycmVuY3kgPSB2YWx1ZTtcbiAgfVxuICAvLyBFdmVudCBFbWl0dGVyc1xuICBwdWJsaWMgZmlsdGVyQ2hhbmdlOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuICBwdWJsaWMgc2VsZWN0SXRlbU1hcFZpZXc6IFN1YmplY3Q8SG90ZWxRdW90ZVJlc3VsdFtdPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHVibGljIGRpc3BsYXk6IERpc3BsYXlGaWx0ZXJTZXR0aW5ncyA9IHtcbiAgICBtaW5wcmljZTogTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLFxuICAgIG1heHByaWNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXG4gICAgZmlsdGVyczoge1xuICAgICAgYnJlYWtmYXN0VHlwZTogW11cbiAgICB9XG4gIH07XG5cbiAgLy8gcHVibGljIHZhcmlhYmxlc1xuICBwdWJsaWMgbWluX2RhdGUgPSB7XG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSwgLy8gbmdiRGF0ZSBtb250aHMgYXJlIG5vdCAwIGluZGV4ZWRcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxuICB9O1xuXG4gIHB1YmxpYyBtaW5fcmV0dXJuX2RhdGUgPSB7XG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSwgLy8gbmdiRGF0ZSBtb250aHMgYXJlIG5vdCAwIGluZGV4ZWRcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKSArIDEgLy8gbWluIDEgbmlnaHQgc3RheVxuICB9O1xuXG4gIHB1YmxpYyBoaWRkZW5FeHRyYUZpbHRlcnM6IHsgW2tleSBpbiBFeHRyYVNlYXJjaEhhbmRsZXJdOiBib29sZWFuIH0gPSB7XG4gICAgW0V4dHJhU2VhcmNoSGFuZGxlci5GRU1BTEVfRlJJRU5ETFldOiB0cnVlLFxuICAgIFtFeHRyYVNlYXJjaEhhbmRsZXIuR1JFRU5fSE9URUxdOiB0cnVlLFxuICAgIFtFeHRyYVNlYXJjaEhhbmRsZXIuQ1RNX1BBUlRORVJTXTogdHJ1ZSxcbiAgICBbRXh0cmFTZWFyY2hIYW5kbGVyLkZDRE9fSE9URUxdOiB0cnVlLFxuICAgIFtFeHRyYVNlYXJjaEhhbmRsZXIuUkVGVU5EQUJMRV06IHRydWUsXG4gICAgW0V4dHJhU2VhcmNoSGFuZGxlci5OT05fUkVGVU5EQUJMRV06IHRydWUsXG4gICAgW0V4dHJhU2VhcmNoSGFuZGxlci5BQ0NFU1NJQkxFX1JPT01dOiB0cnVlLFxuICAgIFtFeHRyYVNlYXJjaEhhbmRsZXIuQVZBSUxBQklMSVRZXTogdHJ1ZVxuICB9XG5cbiAgcHVibGljIGhpZGRlbkFtZW5pdGllc0ZpbHRlcnM6IHsgW2tleSBpbiBBbWVuaXRpZXNTZWFyY2hIYW5kbGVyXTogYm9vbGVhbiB9ID0ge1xuICAgIFtBbWVuaXRpZXNTZWFyY2hIYW5kbGVyLkFJUl9DT05ESVRJT05JTkddOiB0cnVlLFxuICAgIFtBbWVuaXRpZXNTZWFyY2hIYW5kbGVyLkJVU0lORVNTX0NFTlRSRV06IHRydWUsXG4gICAgW0FtZW5pdGllc1NlYXJjaEhhbmRsZXIuRUxFQ1RSSUNfQ0FSX0NIQVJHSU5HX1BPSU5UXTogdHJ1ZSxcbiAgICBbQW1lbml0aWVzU2VhcmNoSGFuZGxlci5FWFBSRVNTX0NIRUNLT1VUXTogdHJ1ZSxcbiAgICBbQW1lbml0aWVzU2VhcmNoSGFuZGxlci5HT0xGX0ZBQ0lMSVRJRVNdOiB0cnVlLFxuICAgIFtBbWVuaXRpZXNTZWFyY2hIYW5kbGVyLk9OX1NJVEVfU0FGRV06IHRydWUsXG4gICAgW0FtZW5pdGllc1NlYXJjaEhhbmRsZXIuUEFSS0lOR106IHRydWUsXG4gICAgW0FtZW5pdGllc1NlYXJjaEhhbmRsZXIuUkVTVEFVUkFOVF06IHRydWUsXG4gICAgW0FtZW5pdGllc1NlYXJjaEhhbmRsZXIuUk9PTV9TRVJWSUNFXzI0X0hPVVJdOiB0cnVlLFxuICAgIFtBbWVuaXRpZXNTZWFyY2hIYW5kbGVyLlNXSU1NSU5HX1BPT0xdOiB0cnVlLFxuICAgIFtBbWVuaXRpZXNTZWFyY2hIYW5kbGVyLldIRUVMQ0hBSVJfQUNDRVNTXTogdHJ1ZSxcbiAgICBbQW1lbml0aWVzU2VhcmNoSGFuZGxlci5XSUZJXTogdHJ1ZSxcbiAgICBbQW1lbml0aWVzU2VhcmNoSGFuZGxlci5FQ09fRlJJRU5ETFldOiB0cnVlLFxuICB9XG5cbiAgcHVibGljIGhpZGRlblN0YXJSYXRpbmdGaWx0ZXJzOiB7IFtrZXkgaW4gU3RhclJhdGluZ106IGJvb2xlYW4gfSA9IHtcbiAgICBbU3RhclJhdGluZy5Ud29TdGFyXTogdHJ1ZSxcbiAgICBbU3RhclJhdGluZy5UaHJlZVN0YXJdOiB0cnVlLFxuICAgIFtTdGFyUmF0aW5nLkZvdXJTdGFyXTogdHJ1ZSxcbiAgICBbU3RhclJhdGluZy5GaXZlU3Rhcl06IHRydWUsXG4gICAgW1N0YXJSYXRpbmcuVW5yYXRlZF06IHRydWVcbiAgfVxuXG4gIC8vIHByaXZhdGUgdmFyaWFibGVzXG4gIC8vIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGltZXMgaGVyZSAtIG1heWJlIG5vcm1hbGlzZSB0aGVzZSBpbiB0aGUgcmVxdWVzdCBib2R5P1xuXG4gIHByaXZhdGUgbG9jYWxGaWx0ZXJzOkhvdGVsRmlsdGVycyA9IG5ldyBIb3RlbEZpbHRlcnMoKTtcblxuICBwdWJsaWMgY3VycmVudFZpZXc6IEhvdGVsVmlldyA9IEhvdGVsVmlldy5MSVNUO1xuICBwcml2YXRlIHVzZXJDdXJyZW5jeTogc3RyaW5nO1xuICAvLyBGb3IgTmdGb3Jpbmcgb3ZlciBpbiB0aGUgdGVtcGxhdGVzXG4gIHByaXZhdGUgX21heF9ub19vZl9yb29tcyA9IDQ7XG4gIHByaXZhdGUgX21heF9yb29tc19hcnJheSA9IG5ldyBBcnJheSh0aGlzLl9tYXhfbm9fb2Zfcm9vbXMpLmZpbGwoMCk7XG4gIHByaXZhdGUgX21heF9ub19vZl9vY2N1cGFudHMgPSA4O1xuICBwcml2YXRlIF9tYXhfb2NjdXBhbnRfYXJyYXkgPSBuZXcgQXJyYXkodGhpcy5fbWF4X25vX29mX29jY3VwYW50cykuZmlsbCgwKTtcbiAgcHJpdmF0ZSBfZGlzdGFuY2VfbGlzdCA9IFsxLCAyLCAzLCA0LCA1LCAxMCwgMTUsIDIwLCAyNV07IC8vIGhvdGVsU2VhcmNoRm9ybUNvbmZpZ3VyYXRpb24uZGlzdGFuY2UgY29uZmlnXG4gIHByaXZhdGUgX2RlZmF1bHRfY3VycmVuY3k6IHN0cmluZyA9IG51bGw7XG4gIHByaXZhdGUgX2Nyb3duUmF0ZXNPbmx5OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaG90ZWxzUmF0aW5nczogR2V0TXVsdGlwbGVIb3RlbFJhdGluZ1Jlc3BvbnNlO1xuICAvLyBnZXR0ZXJzIGFuZCBzZXR0ZXJzXG5cbiAgZ2V0IGNyb3duUmF0ZXNPbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jcm93blJhdGVzT25seTtcbiAgfVxuXG4gIHNldCBjcm93blJhdGVzT25seShuZXdWYWw6IGJvb2xlYW4pIHtcbiAgICAvLyByZXNldCBwcmV2aW91cyB2YWx1ZVxuICAgIHRoaXMuZmlsdGVycy5jcm93blByZWZlcnJlZCA9IFtdO1xuICAgIHRoaXMuX2Nyb3duUmF0ZXNPbmx5ID0gbmV3VmFsO1xuICAgIGlmIChuZXdWYWwpIHtcbiAgICAgIHRoaXMuZmlsdGVycy5jcm93blByZWZlcnJlZFswXSA9IFNlYXJjaEhhbmRsZXIuQ1JPV05fT05MWTsgIC8vIHByZXNldCB0aGUgZmlsdGVyXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVycy5jcm93blByZWZlcnJlZCA9IFtdOyAgLy8gcHJlc2V0IHRoZSBmaWx0ZXJcbiAgICB9XG4gIH1cblxuICBnZXQgY2hlY2tpbl9kYXRlX25nYigpOiBOZ2JEYXRlU3RydWN0IHtcbiAgICByZXR1cm4gdGhpcy5fY2hlY2tpbl9kYXRlX25nYjtcbiAgfVxuXG4gIHNldCBjaGVja2luX2RhdGVfbmdiKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XG4gICAgdGhpcy5fY2hlY2tpbl9kYXRlX25nYiA9IHZhbHVlO1xuXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNoZWNraW5fZGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh2YWx1ZSk7XG4gICAgdGhpcy5jaGVja2luX2RhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGNoZWNrb3V0X2RhdGVfbmdiKCk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIHJldHVybiB0aGlzLl9jaGVja291dF9kYXRlX25nYjtcbiAgfVxuXG4gIHNldCBjaGVja291dF9kYXRlX25nYih2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xuICAgIHRoaXMuX2NoZWNrb3V0X2RhdGVfbmdiID0gdmFsdWU7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmNoZWNrb3V0X2RhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodmFsdWUpO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjaGVja2luX2RhdGUoKTogbW9tZW50Lk1vbWVudCB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaGVja2luX2RhdGU7XG4gIH1cblxuICBzZXQgY2hlY2tpbl9kYXRlKG5ld0RhdGU6IG1vbWVudC5Nb21lbnQpIHtcbiAgICBpZiAobmV3RGF0ZSAmJiBuZXdEYXRlLmlzVmFsaWQoKSkge1xuICAgICAgdGhpcy50ZW1wUGFyYW1zLmNoZWNraW5fZGF0ZSA9IG1vbWVudChuZXdEYXRlKTtcbiAgICAgIHRoaXMuX2NoZWNraW5fZGF0ZV9uZ2IgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobmV3RGF0ZSk7XG4gICAgICBpZiAobmV3RGF0ZS5pc1NhbWVPckFmdGVyKHRoaXMudGVtcFBhcmFtcy5jaGVja291dF9kYXRlKSkge1xuICAgICAgICB0aGlzLmNoZWNrb3V0X2RhdGUgPSBtb21lbnQobmV3RGF0ZSkuYWRkKDEsICdkYXknKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY2hlY2tvdXRfZGF0ZSgpOiBtb21lbnQuTW9tZW50IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNoZWNrb3V0X2RhdGU7XG4gIH1cblxuICBzZXQgY2hlY2tvdXRfZGF0ZShuZXdEYXRlOiBtb21lbnQuTW9tZW50KSB7XG4gICAgaWYgKG5ld0RhdGUgJiYgbmV3RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaGVja291dF9kYXRlID0gbmV3RGF0ZTtcbiAgICAgIHRoaXMuY2hlY2tvdXRfZGF0ZV9uZ2IgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobmV3RGF0ZSk7XG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG5vX29mX3Jvb21zKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5ub19vZl9yb29tcztcbiAgfVxuXG4gIHNldCBub19vZl9yb29tcyhuZXdSb29tczogbnVtYmVyKSB7XG4gICAgaWYgKG5ld1Jvb21zID4gNCB8fCBuZXdSb29tcyA8IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRlbXBQYXJhbXMubm9fb2Zfcm9vbXMgPSBuZXdSb29tcztcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgbm9fb2Zfb2NjdXBhbnRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5ub19vZl9vY2N1cGFudHM7XG4gIH1cblxuICBzZXQgbm9fb2Zfb2NjdXBhbnRzKG5ld09jYzogbnVtYmVyKSB7XG4gICAgaWYgKG5ld09jYyA8IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRlbXBQYXJhbXMubm9fb2Zfb2NjdXBhbnRzID0gbmV3T2NjO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBkZWZhdWx0X2N1cnJlbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jdXJyZW5jeTtcbiAgfVxuXG4gIHNldCBkZWZhdWx0X2N1cnJlbmN5KGN1cnJlbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuY3VycmVuY3kgPSBjdXJyZW5jeTtcbiAgfVxuXG4gIC8vIG1heSBoYXZlIHRvIG1vZGlmeSB0aGVzZVxuICBnZXQgbG9jYXRpb24oKTogTG9jYXRpb25EZXRhaWxzIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uO1xuICB9XG5cbiAgc2V0IGxvY2F0aW9uKG5ld0xvYzogTG9jYXRpb25EZXRhaWxzICkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvbiA9IG5ld0xvYztcblxuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBkaXN0YW5jZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZGlzdGFuY2U7XG4gIH1cblxuICBzZXQgZGlzdGFuY2UobmV3RGlzdDogbnVtYmVyKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmRpc3RhbmNlID0gbmV3RGlzdDtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgcHJlZmVyZWRfaG90ZWxzX29ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJlZF9ob3RlbHNfb25seTtcbiAgfVxuXG4gIHNldCBwcmVmZXJlZF9ob3RlbHNfb25seShuZXdQcmVmOiBib29sZWFuKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcmVkX2hvdGVsc19vbmx5ID0gbmV3UHJlZjtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgY291bnRyeSgpOiBDb3VudHJ5IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNvdW50cnk7XG4gIH1cblxuICBzZXQgY291bnRyeShuZXdDb250OiBDb3VudHJ5KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmNvdW50cnkgPSBuZXdDb250O1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBwcm9wZXJ0eU51bWJlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJvcGVydHlOdW1iZXI7XG4gIH1cblxuICBzZXQgcHJvcGVydHlOdW1iZXIocHJvcGVydE51bWJlcjogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnByb3BlcnR5TnVtYmVyID0gcHJvcGVydE51bWJlcjtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgcG9zdGNvZGUoKTogTG9jYXRpb25EZXRhaWxzIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnBvc3Rjb2RlO1xuICB9XG5cbiAgc2V0IHBvc3Rjb2RlKHBvc3Rjb2RlOiBMb2NhdGlvbkRldGFpbHMpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMucG9zdGNvZGUgPSBwb3N0Y29kZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgdHJhaW5zU3RhdGlvbigpOiBMb2NhdGlvbkRldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudHJhaW5zU3RhdGlvbjtcbiAgfVxuXG4gIHNldCB0cmFpbnNTdGF0aW9uKHN0YXRpb246IExvY2F0aW9uRGV0YWlscykge1xuICAgIHRoaXMudGVtcFBhcmFtcy50cmFpbnNTdGF0aW9uID0gc3RhdGlvbjtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgb2ZmaWNlKCk6IExvY2F0aW9uRGV0YWlscyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vZmZpY2U7XG4gIH1cblxuICBzZXQgb2ZmaWNlKG9mZmljZTogTG9jYXRpb25EZXRhaWxzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLm9mZmljZSA9IG9mZmljZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICAvLyBBZGRpdGlvbmFsIFZhcmlhYmxlc1xuICBnZXQgaG90ZWxfbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaG90ZWxfbmFtZTtcbiAgfVxuXG4gIHNldCBob3RlbF9uYW1lKG5ld05hbWU6IHN0cmluZykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5ob3RlbF9uYW1lID0gbmV3TmFtZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgaG90ZWxfY2hhaW4oKTogc3RyaW5nIHwgeyBuYW1lOiBzdHJpbmc7IH17XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5ob3RlbF9jaGFpbjtcbiAgfVxuXG4gIHNldCBob3RlbF9jaGFpbihuZXdDaGFpbjogc3RyaW5nIHwgeyBuYW1lOiBzdHJpbmc7IH0pIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuaG90ZWxfY2hhaW4gPSBuZXdDaGFpbjtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICAvLyBHZXR0ZXJzIE9ubHlcblxuICBnZXQgbWF4X3Jvb21zX2FycmF5KCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4X3Jvb21zX2FycmF5O1xuICB9XG5cbiAgZ2V0IG1heF9vY2N1cGFudF9hcnJheSgpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX21heF9vY2N1cGFudF9hcnJheTtcbiAgfVxuXG4gIGdldCBtYXhfbm9fb2Zfcm9vbXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4X25vX29mX3Jvb21zO1xuICB9XG5cbiAgZ2V0IGRpc3RhbmNlX2xpc3QoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZV9saXN0O1xuICB9XG5cbiAgZ2V0IGxvY2F0aW9uX3R5cGVfc2VsZWN0KCk6IExvY2F0aW9uVHlwZXMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25fdHlwZV9zZWxlY3Q7XG4gIH1cblxuICBzZXQgbG9jYXRpb25fdHlwZV9zZWxlY3QodmFsdWU6IExvY2F0aW9uVHlwZXMpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25fdHlwZV9zZWxlY3QgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgZmlsdGVycygpOiBIb3RlbEZpbHRlcnMge1xuICAgIHJldHVybiB0aGlzLmxvY2FsRmlsdGVycztcbiAgfVxuXG4gIGdldCBkaXNiYWlsaXR5S2V5d29yZHMoKTogRGlzYWJsZWRLZXlXb3Jkc1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgRGlzYWJsZWRLZXlXb3Jkcy5kaXNhYmlsaXR5LFxuICAgICAgRGlzYWJsZWRLZXlXb3Jkcy5hY2Nlc3MsXG4gICAgICBEaXNhYmxlZEtleVdvcmRzLmRpc2FibGVkLFxuICAgICAgRGlzYWJsZWRLZXlXb3Jkcy5hY2Nlc3NpYmlsaXR5LFxuICAgICAgRGlzYWJsZWRLZXlXb3Jkcy5tb2JpbGl0eV9hY2Nlc3MsXG4gICAgICBEaXNhYmxlZEtleVdvcmRzLmFjY2Vzc2libGVfZGlzYWJsZWQsXG4gICAgICBEaXNhYmxlZEtleVdvcmRzLmFjY2Vzc2libGVcbiAgICBdO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBob3RlbEZldGNoZXI6IEJhc2VIb3RlbFF1b3RlRmV0Y2hlcjxIUV9RPixcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXG4gICAgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHByaXZhdGUgZW52aXJvbm1lbnQ6IEJhc2VFbnZpcm9ubWVudCxcbiAgICBwcml2YXRlIGF2YWxpYWJpbGl0eVNlcnZpY2U6IEJhc2VIb3RlbEF2YWxpYmlsaXR5U2VydmljZTxIQV9RPixcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHN0b3JhZ2VTZXJ2aWNlOiBCYXNlU3RvcmFnZVNlcnZpY2UsXG4gICAgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXG4gICAgcHJpdmF0ZSBodHRwQ2FsbFNlcnZpY2U6IEFic3RyYWN0SHR0cENhbGxTZXJ2aWNlLFxuICAgIHByaXZhdGUgcXVpY2tMaXN0RmV0Y2hlcjogQmFzZVNlYXJjaENvbmZlcm1hUXVpY2tsaXN0RmV0Y2hlcjxRTF9RPixcbiAgICBwcml2YXRlIGdldFJhaWxTdGF0aW9uRmV0Y2hlcjogQmFzZUdldFJhaWxTdGF0aW9uRmV0Y2hlcjxHUlNfUT4sXG4gICAgcHJpdmF0ZSBhcHBseUhvdGVsUnVsZXNGZXRjaGVyOiBCYXNlSG90ZWxSdWxlc0ZldGNoZXI8SFJfUT4sXG4gICAgcHJpdmF0ZSBnZXRSZXF1ZXN0ZWRIb3RlbFVwZGF0ZUZldGNoZXI6IEJhc2VHZXRSZXF1ZXN0ZWRIb3RlbFVwZGF0ZUZldGNoZXI8SFVfUT5cbiAgKSB7XG4gICAgc3VwZXIoc3RvcmFnZVNlcnZpY2UsIGhlbHBlcnMsIHNlYXJjaFNlcnZpY2UsIHVzZXJTZXJ2aWNlKTtcbiAgICB0aGlzLnJlc3VsdHNfZGV0YWlscy5jaGFpbnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBkYXRhOiB7XG4gICAgICB0ZW1wUGFyYW1zOiBIb3RlbFRlbXBQYXJhbXM7XG4gICAgfSA9IHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKEhvdGVsRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TKSB8fCB7XG4gICAgICB0ZW1wUGFyYW1zOiB7fSBhcyBIb3RlbFRlbXBQYXJhbXNcbiAgICB9O1xuXG4gICAgdGhpcy5kZWZhdWx0X2N1cnJlbmN5ID0gdGhpcy50ZW1wUGFyYW1zLmN1cnJlbmN5XG4gICAgICA/IHRoaXMudGVtcFBhcmFtcy5jdXJyZW5jeVxuICAgICAgOiB0aGlzLl9kZWZhdWx0X2N1cnJlbmN5O1xuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyhzZWFyY2hTZXJ2aWNlLm1ha2VIb3RlbFF1ZXJ5KGRhdGEudGVtcFBhcmFtcykpO1xuICAgIHVzZXJTZXJ2aWNlLmZ1bGxVc2VyRGV0YWlscy51c2VyQ29uZmlncy5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAvLyB0aGlzLnVzZXJDb25maWcubmV4dChkYXRhKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgY29uc3QgaG90ZWxTZWFyY2hGb3JtQ29uZmlndXJhdGlvbiA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0PHtcbiAgICAgICAgICBob3RlbERlZmF1bHRzOiB7XG4gICAgICAgICAgICBjb3VudHJ5OiBDb3VudHJ5O1xuICAgICAgICAgIH07XG4gICAgICAgICAgZGVmYXVsdFNlYXJjaE9wdGlvbjoge1xuICAgICAgICAgICAgcHJvZHVjdDogTG9jYXRpb25UeXBlcztcbiAgICAgICAgICB9O1xuICAgICAgICB9PihVc2VyRmF2b3J1cml0ZS5Ib3RlbFNlYXJjaEZvcm1Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5sb2NhdGlvbl90eXBlX3NlbGVjdCA9IGhvdGVsU2VhcmNoRm9ybUNvbmZpZ3VyYXRpb24/LmRlZmF1bHRTZWFyY2hPcHRpb24/LnByb2R1Y3QgfHwgdGhpcy5sb2NhdGlvbl90eXBlX3NlbGVjdDtcbiAgICAgICAgdGhpcy5jb3VudHJ5ID0gaG90ZWxTZWFyY2hGb3JtQ29uZmlndXJhdGlvbj8uaG90ZWxEZWZhdWx0cz8uY291bnRyeSB8fCB0aGlzLmNvdW50cnk7XG5cbiAgICAgICAgdGhpcy5hbHRlcm5hdGl2ZUxvY2F0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5wcmltYXJ5TG9jYXRpb24gPSBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGE/LmhvdGVsRGVmYXVsdHMpIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHNlYXJjaFNlcnZpY2UubWFrZUhvdGVsUXVlcnkoZGF0YT8uaG90ZWxEZWZhdWx0cz8uY29uZmlnKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcbiAgICAgIHNlYXJjaFNlcnZpY2UudHJhdmVsbGVySW5mb3JtYXRpb24uc3Vic2NyaWJlKCh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSkgPT4ge1xuICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xuICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKHRyYXZlbGxlcnMsIFNlcnZpY2VUeXBlLkhvdGVsKTtcbiAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm5vX29mX29jY3VwYW50cyA9IHNwbGl0VHJhdmVsbGVycy5hZHVsdHMubGVuZ3RoO1xuICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xuICAgICAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHRzID1cbiAgICAgIHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtQXNMaXN0PEhvdGVsRGV0YWlsc0FycmF5Pih0aGlzLnJlc3VsdHNTZXNzaW9uTmFtZSkgfHwgW107XG4gICAgICByZXN1bHRzLmZvckVhY2goKGhvdGVsOiBIb3RlbERldGFpbHMpID0+IHtcbiAgICAgIGlmICh0aGlzLnNlYXJjaFNlcnZpY2UuY2FuQm9vayhTZXJ2aWNlVHlwZS5Ib3RlbCkpIHtcbiAgICAgICAgLy8gbmVlZCB0aGlzIGNoZWNrIGJlY2F1c2Ugb24gcmVmcmVzaCB3ZSBhcmUgZ2V0dGluZyBlcnJvcnMgLSB0aGVvcnkgdGhhdCB1c2VyIGhhc24ndCBmdWxseSBsb2FkZWQgaW4geWV0XG4gICAgICAgIHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5nZXRBdmFpbGFiaWxpdHlGb3JJZCh0aGlzLm1ha2VIb3RlbEF2YWxpbGl0eU9iamVjdChob3RlbCksIGhvdGVsKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJlc3VsdHMuZm9yRWFjaCgoaG90ZWxSZXN1bHQ6IEhvdGVsRGV0YWlscykgPT4ge1xuICAgICAgdGhpcy5yZXN1bHRzX2RldGFpbHMuY2hhaW5zLmFkZChob3RlbFJlc3VsdC5ncm91cCk7XG4gICAgfSk7XG4gICAgdGhpcy5mdWxsUmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgdGhpcy5nZXRIb3RlbFJhdGluZ3MocmVzdWx0cyk7XG4gICAgdGhpcy5fY2hlYXBlc3RSZXN1bHRQcmljZSA9IHRoaXMudXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0cyk7XG4gICAgdGhpcy5hdmVyYWdlQ28yUGVySXRlbSA9IHRoaXMuaGVscGVycy5jYWxjdWxhdGVBdmVyYWdlQ28yUGVySXRlbShyZXN1bHRzKTtcbiAgICB0aGlzLmppdFJ1bGVzUmVjZWl2ZWQubmV4dChmYWxzZSk7XG4gICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cyk7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuXG4gICAgdGhpcy51c2VyU2VydmljZS5jaGFuZ2VVc2VyLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCBwcm9wZXJ0eU51bWJlciA9IHRoaXMudXNlclNlcnZpY2UudXNlcklzQWdlbnQoKSA/IFtMb2NhdGlvblR5cGVzLlByb3BlcnR5TnVtYmVyXTpbXVxuICAgICAgdGhpcy5sb2NhdGlvbl90eXBlcy5uZXh0KFtcbiAgICAgICAgTG9jYXRpb25UeXBlcy5BaXJwb3J0LFxuICAgICAgICBMb2NhdGlvblR5cGVzLkNpdHksXG4gICAgICAgIExvY2F0aW9uVHlwZXMuT2ZmaWNlLFxuICAgICAgICBMb2NhdGlvblR5cGVzLlNob3J0bGlzdCxcbiAgICAgICAgTG9jYXRpb25UeXBlcy5UcmFpblN0YXRpb24sXG4gICAgICAgIC4uLnByb3BlcnR5TnVtYmVyXG4gICAgICBdKTtcblxuICAgICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkRmV0Y2hBbGxPZmZpY2VzKCkpIHtcbiAgICAgICAgdGhpcy5vZmZpY2VzLm5leHQoW10pOyAvLyBUT0RPIGZldGNoIG9mZmljZXNcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMubG9jYWxGaWx0ZXJzID0gbmV3IEhvdGVsRmlsdGVycygpO1xuICAgIHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5mZXRjaGluZy5zdWJzY3JpYmUoKGlzRmV0Y2hpbmc6IGJvb2xlYW4pID0+IHtcbiAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLm5leHQodHJ1ZSk7XG4gICAgICAvLyBpZiAoIWlzRmV0Y2hpbmcpIHsgLy8gISAtIE5vdCB3YWl0aW5nLCBvdGhlcndpc2UgZ28yIHdhcyB3YWl0aW5nIHVudGlsIGFsbCBob3RlbHMgaGFkIGxvYWRlZCwgdGhpcyB0b29rIG1pbnV0ZXMgLSBpZiB3ZSBuZWVkIHRoaXMgYmFjayBmaWd1cmUgb3V0IGEgYmV0dGVyIHNvbHV0aW9uIC0gRWRcbiAgICAgIC8vIFdlJ3ZlIGp1c3QgZmluaXNoZWQgZmV0Y2hpbmcgYXZhbGliaWxpdHkgc28gdXBkYXRlIGZpbHRlcnMuXG4gICAgICAvLyBjb25zb2xlLndhcm4oJysrKyBGZXRjaGVkICsrKycpO1xuICAgICAgY29uc3QgbWF4TnVtYmVyID0gdGhpcy5hdmFsaWFiaWxpdHlTZXJ2aWNlLm1heFByaWNlRm9yQ3VycmVuY3koJ0dCUCcpO1xuICAgICAgaWYgKG1heE51bWJlciA+IDAgJiYgIXRoaXMuZmlsdGVycy5wcmljZVJhbmdlLm1heCAmJiAhdGhpcy5sb2NhbEZpbHRlcnMucHJpY2VSYW5nZS5tYXgpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJzLnByaWNlUmFuZ2UubWF4ID0gbWF4TnVtYmVyO1xuICAgICAgICB0aGlzLmxvY2FsRmlsdGVycy5wcmljZVJhbmdlLm1heCA9IG1heE51bWJlcjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NoZWFwZXN0UmVzdWx0UHJpY2UgPSB0aGlzLnVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHMpO1xuICAgICAgaWYgKHRoaXMuc2VhcmNoU2VydmljZS5jYW5Cb29rKFNlcnZpY2VUeXBlLkhvdGVsKSkge1xuICAgICAgICAvLyBuZWVkIHRoaXMgY2hlY2sgYmVjYXVzZSBvbiByZWZyZXNoIHdlIGFyZSBnZXR0aW5nIGVycm9ycyAtIHRoZW9yeSB0aGF0IHVzZXIgaGFzbid0IGZ1bGx5IGxvYWRlZCBpbiB5ZXRcbiAgICAgICAgLy8gY29uc29sZS53YXJuKCcrKysgQXBwbHlpbmcgVHJhdmVsIFJ1bGVzICsrKycpO1xuICAgICAgICB0aGlzLl9hcHBseVRyYXZlbFJ1bGVzKCk7XG4gICAgICAgIC8vIHRoaXMucmVhcHBseVNvcnRpbmcubmV4dCh0cnVlKTtcbiAgICAgIH1cbiAgICAgIC8vIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldEhvdGVsUmF0aW5ncyhyZXN1bHRzOiBIb3RlbERldGFpbHNbXSk6IHZvaWQge1xuICAgIGlmIChyZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCByYXRpbmdzQXJnczogSG90ZWxSYXRpbmdJZGVudGlmaWVyc1tdID0gcmVzdWx0cy5tYXAoKGhvdGVsOiBIb3RlbERldGFpbHMpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBob3RlbEdyb3VwTmFtZTogaG90ZWwuZ3JvdXAsXG4gICAgICAgICAgaG90ZWxOYW1lOiBob3RlbC5uYW1lXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRNdWx0aXBsZUhvdGVsUmF0aW5ncyhyYXRpbmdzQXJncykuc3Vic2NyaWJlKChob3RlbHNSYXRpbmdzOiBHZXRNdWx0aXBsZUhvdGVsUmF0aW5nUmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5ob3RlbHNSYXRpbmdzID0gaG90ZWxzUmF0aW5ncztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzUmVzdWx0cyhyZXN1bHRzVG9NYXA6IEhvdGVsUXVvdGVSZXN1bHRBcnJheSkge1xuICAgIHRoaXMucmVzdWx0c19kZXRhaWxzLm1heERpc3RhbmNlID0gMDtcbiAgICB0aGlzLnJlc3VsdHNfZGV0YWlscy5jaGFpbnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICByZXR1cm4gcmVzdWx0c1RvTWFwLm1hcCgoaG90ZWxSZXN1bHQ6IEhvdGVsUXVvdGVSZXN1bHQsIGluZGV4OiBudW1iZXIpOiBIb3RlbERldGFpbHMgPT4ge1xuICAgICAgdGhpcy5yZXN1bHRzX2RldGFpbHMubWF4RGlzdGFuY2UgPSBNYXRoLm1heChcbiAgICAgICAgdGhpcy5yZXN1bHRzX2RldGFpbHMubWF4RGlzdGFuY2UsXG4gICAgICAgIGhvdGVsUmVzdWx0LmxvY2F0aW9uLmRpc3RhbmNlXG4gICAgICApO1xuICAgICAgdGhpcy5maWx0ZXJzLmRpc3RhbmNlUmFuZ2UubWF4ID0gdGhpcy5yZXN1bHRzX2RldGFpbHMubWF4RGlzdGFuY2U7XG4gICAgICB0aGlzLnJlc3VsdHNfZGV0YWlscy5jaGFpbnMuYWRkKGhvdGVsUmVzdWx0Lmdyb3VwKTtcbiAgICAgIGlmIChpbmRleCA8IHRoaXMuZW52aXJvbm1lbnQubnVtYmVySG90ZWxUb1ByZWxvYWQpIHtcbiAgICAgICAgdGhpcy5hdmFsaWFiaWxpdHlTZXJ2aWNlLmdldEF2YWlsYWJpbGl0eUZvcklkKFxuICAgICAgICAgIHRoaXMubWFrZUhvdGVsQXZhbGlsaXR5T2JqZWN0KGhvdGVsUmVzdWx0KSxcbiAgICAgICAgICBob3RlbFJlc3VsdFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnByb2Nlc3NGaWx0ZXJzVG9EaXNwbGF5KGhvdGVsUmVzdWx0KTtcblxuICAgICAgLy8gdGhpcy5nZXRIb3RlbEF2YWlsYWJpbGl0eShob3RlbFJlc3VsdCk7XG4gICAgICBjb25zdCBhaXJwb3J0RGV0YWlscyA9IGhvdGVsUmVzdWx0LnRyYW5zcG9ydHM/LmZpbmQoYSA9PiBhLnR5cGUgPT0gSG90ZWxEZXRhaWxUeXBlcy5BSVJQT1JUKTtcbiAgICAgIGNvbnN0IG1ldHJvRGV0YWlscyA9IGhvdGVsUmVzdWx0LnRyYW5zcG9ydHM/LmZpbmQoYSA9PiBhLnR5cGUgPT0gSG90ZWxEZXRhaWxUeXBlcy5NRVRSTyk7XG4gICAgICBjb25zdCByYWlsRGV0YWlscyA9IGhvdGVsUmVzdWx0LnRyYW5zcG9ydHM/LmZpbmQoYSA9PiBhLnR5cGUgPT0gSG90ZWxEZXRhaWxUeXBlcy5UUkFJTik7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvcnRlZFRhZ3M6IHRoaXMuc29ydFRhZ3MoaG90ZWxSZXN1bHQudGFncyksXG4gICAgICAgIERldGFpbHM6IHtcbiAgICAgICAgICBkaXN0YW5jZV9haXJwb3J0OiBhaXJwb3J0RGV0YWlscyA/IGFpcnBvcnREZXRhaWxzLmRpc3RhbmNlIDogMCxcbiAgICAgICAgICBkaXN0YW5jZV9tZXRybzogbWV0cm9EZXRhaWxzID8gbWV0cm9EZXRhaWxzLmRpc3RhbmNlIDogMCxcbiAgICAgICAgICBkaXN0YW5jZV9yYWlsOiByYWlsRGV0YWlscyA/IHJhaWxEZXRhaWxzLmRpc3RhbmNlIDogMCxcbiAgICAgICAgICBhaXJwb3J0X2RldGFpbHM6IGFpcnBvcnREZXRhaWxzLFxuICAgICAgICAgIG1ldHJvX2RldGFpbHM6IG1ldHJvRGV0YWlscyxcbiAgICAgICAgICByYWlsX2RldGFpbHM6IHJhaWxEZXRhaWxzXG4gICAgICAgIH0sXG4gICAgICAgIC8vIGF2aWxhYmlsaXR5OiB0aGlzLmhvdGVsX2F2YWlsYWJpbGl0eSxcbiAgICAgICAgLi4uaG90ZWxSZXN1bHRcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlc3VsdHNTZXNzaW9uTmFtZSA9IEhvdGVsRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcbiAgcHJvdGVjdGVkIG11bHRpUmVzdWx0c1Nlc3Npb25OYW1lID0gSG90ZWxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xuXG4gIHByaXZhdGUgcXVlcnk6IFNlYXJjaEhvdGVsc1F1ZXJ5VmFyaWFibGVzID0ge30gYXMgU2VhcmNoSG90ZWxzUXVlcnlWYXJpYWJsZXM7XG5cbiAgcHJpdmF0ZSBfYXBwbHlUcmF2ZWxSdWxlcygpIHtcbiAgICAvLyBjb25zb2xlLndhcm4oJ2Z1bGw6ICcsIHRoaXMuZnVsbFJlc3VsdHMpO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhlbHBlcnNcbiAgICAgIC5jbG9uZSh0aGlzLmZ1bGxSZXN1bHRzIHx8IFtdKVxuICAgICAgLm1hcCgoaG90ZWw6IEhvdGVsRGV0YWlscykgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmF2YWxpYWJpbGl0eVNlcnZpY2UudXBkYXRlSG90ZWwoaG90ZWwpO1xuICAgICAgICBjb25zdCBjb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZXN1bHQpKTsgLy8gYXNzdW1pbmcgeW91IHVzZSBPYmplY3QuYXNzaWduKCkgcG9seWZpbGwhXG4gICAgICAgIGRlbGV0ZSBjb3B5LmF2YWlsYWJsZVJhdGVzLmZ1bGxSb29tczsgLy8gc2hhbGxvd2x5IG11dGF0aW5nIGEgc2hhbGxvdyBjb3B5IGlzIGZpbmVcbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoaG90ZWw6IEhvdGVsRGV0YWlscykgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLndhcm4oJ2hvdGVsIHJlY2l2ZWQgaml0OiAnLGhvdGVsLnJlY2VpdmVkSml0UnVsZXMpO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoaG90ZWwuYXZhaWxhYmxlUmF0ZXMgfHwge30pLmxlbmd0aCA+IDAgJiYgIWhvdGVsLnJlY2VpdmVkSml0UnVsZXM7XG4gICAgICB9KTtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIGNvbnNvbGUud2FybignKysrIE5vIGRhdGEgZm91bmQgaW4gdHJhdmVsIHJ1bGVzICsrKycpO1xuICAgICAgLy8gY29uc29sZS53YXJuKGRhdGEpO1xuICAgICAgdGhpcy5qaXRSdWxlc1JlY2VpdmVkLm5leHQodHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5sb2coYCsrKyBvZyBzZWFyY2ggcXVlcnk6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5idWlsZFF1ZXJ5KHRydWUpKX0gKysrYCk7XG4gICAgdGhpcy5idWlsZFF1ZXJ5KCk7XG4gICAgdGhpcy5hcHBseUhvdGVsUnVsZXNGZXRjaGVyXG4gICAgICAuZmV0Y2hLZXllZE9iamVjdCgnaWQnLCB7XG4gICAgICAgIGRhdGEsXG4gICAgICAgIG9yaWdpbmFsU2VhcmNoUXVlcnk6IHRoaXMucXVlcnlcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoZGF0YTE6IFJlY29yZDxzdHJpbmcsIEhvdGVsRGV0YWlscz4pID0+IHtcbiAgICAgICAgLy8gd2Ugc2VuZCB0aGUgaW5mbywgZmlyc3QgMjAgaG90c2wgaW4gdGFiIDEgdGhlbiB3ZSBhc3NpZ24gdGhpcyB0byBhbGwgaWRzLCBldmVuIGlmIHRoZXkgYXBwZWFyIGluIHRhYiAyXG4gICAgICAgIHRoaXMuZnVsbFJlc3VsdHMgPSB0aGlzLmZ1bGxSZXN1bHRzLm1hcCgoaG90ZWw6IEhvdGVsRGV0YWlscykgPT4ge1xuICAgICAgICAgIGlmIChkYXRhMVtob3RlbC5pZF0gJiYgZGF0YTFbaG90ZWwuaWRdLnNlY29uZFRhYiA9PT0gaG90ZWwuc2Vjb25kVGFiKSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLndhcm4oYCsrKyBTZXR0aW5nIGF2YWlsYWJpbGl0eSBmb3I6ICR7aG90ZWwuaWR9ICsrK2ApO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5zZXRIb3RlbEF2YWxhYmlsaXR5KGRhdGExW2hvdGVsLmlkXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBob3RlbDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZnVsbFJlc3VsdHMuZm9yRWFjaCgoaG90ZWw6IEhvdGVsRGV0YWlscykgPT4ge1xuICAgICAgICAgIGlmIChob3RlbC5hdmFpbGFibGVSYXRlcykge1xuICAgICAgICAgICAgaG90ZWwuaml0UmVtb3ZlUmVzdWx0UnVsZSA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBob3RlbC5qaXRSZW1vdmVSZXN1bHRSdWxlID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBmaWx0ZXJSZXN1bHRzID1cbiAgICAgICAgICB0aGlzLnJlc3VsdHNGaWx0ZXJNZXRob2RcbiAgICAgICAgICAgID8gdGhpcy5yZXN1bHRzRmlsdGVyTWV0aG9kKHRoaXMuZnVsbFJlc3VsdHMpXG4gICAgICAgICAgICA6XG4gICAgICAgICAgICB0aGlzLmZ1bGxSZXN1bHRzO1xuXG4gICAgICAgIC8vIHRoaXMuZnVsbFJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodHJhdmxlUmVzdWx0cyk7XG4gICAgICAgIHRoaXMuX2NoZWFwZXN0UmVzdWx0UHJpY2UgPSB0aGlzLnVwZGF0ZUxvd2VzdFByaWNlKGZpbHRlclJlc3VsdHMpO1xuXG4gICAgICAgIC8vIHRvIHByZXNlcnZlIHRoZSBzb3J0aW5nIC0gaG9wZWZ1bGx5XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMucmVzdWx0cy52YWx1ZSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50UmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZmlsdGVyUmVzdWx0cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRSZXN1bHRzW2ldLmlkID09PSBmaWx0ZXJSZXN1bHRzW2pdLmlkICYmIGN1cnJlbnRSZXN1bHRzW2ldLnNlY29uZFRhYiA9PT0gZmlsdGVyUmVzdWx0c1tqXS5zZWNvbmRUYWIpIHtcbiAgICAgICAgICAgICAgY3VycmVudFJlc3VsdHNbaV0gPSB0aGlzLmhlbHBlcnMuY2xvbmUoZmlsdGVyUmVzdWx0c1tqXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5qaXRSdWxlc1JlY2VpdmVkLm5leHQodHJ1ZSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZpbHRlclJlc3VsdHMpO1xuICAgICAgICB0aGlzLnJlc3VsdHMubmV4dChjdXJyZW50UmVzdWx0cyk7XG4gICAgICAgIHRoaXMucmVhcHBseVNvcnRpbmcubmV4dCh0cnVlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc29ydFRhZ3ModGFnczogSG90ZWxUYWdbXSk6IEhvdGVsVGFnW10ge1xuICAgIGlmICh0YWdzKSB7XG4gICAgICBjb25zdCB1bmlxdWVJdGVtcyA9IHRhZ3MucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKCFhY2Muc29tZShleGlzdGluZ0l0ZW0gPT4gZXhpc3RpbmdJdGVtLm5hbWUgPT09IGl0ZW0ubmFtZSkpIHtcbiAgICAgICAgICBhY2MucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwgW10pO1xuXG4gICAgICByZXR1cm4gdW5pcXVlSXRlbXNcbiAgICAgICAgLnNvcnQoKGE6IEhvdGVsVGFnLCBiOiBIb3RlbFRhZykgPT4ge1xuICAgICAgICAgIC8vIFBsYWNlIFwiR3JlZW4gSG90ZWxcIiBhdCB0aGUgYmVnaW5uaW5nXG4gICAgICAgICAgaWYgKHRoaXMuY29udmVydFRvT25lU3RyaW5nKGEubmFtZSkgPT09IFNlYXJjaEhhbmRsZXIuR1JFRU5fSE9URUwpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29udmVydFRvT25lU3RyaW5nKGIubmFtZSkgPT09IFNlYXJjaEhhbmRsZXIuR1JFRU5fSE9URUwpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYS5uYW1lIDwgYi5uYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgfSBlbHNlIGlmIChhLm5hbWUgPiBiLm5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5tYXAoKHRhZzogSG90ZWxUYWcpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4udGFnLFxuICAgICAgICAgICAgaWNvbjogdGhpcy5lbnZpcm9ubWVudC50YWdNYXBbdGFnLm5hbWVdIHx8IHRhZy5pY29uXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldFF1ZXJ5KCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyh0aGlzLnNlYXJjaFNlcnZpY2UubWFrZUhvdGVsUXVlcnkoKSk7XG4gICAgdGhpcy5sb2NhbEZpbHRlcnMgPSBuZXcgSG90ZWxGaWx0ZXJzKCk7XG4gICAgdGhpcy5yZXN1bHRzX2RldGFpbHMgPSB7XG4gICAgICBjaGFpbnM6IG5ldyBTZXQ8c3RyaW5nPigpLFxuICAgICAgYW1lbml0aWVzOiBbXSxcbiAgICAgIG1heERpc3RhbmNlOiAwXG4gICAgfTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBwcml2YXRlIF9pc1ZhbGlkKCkge1xuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oSG90ZWxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsIHtcbiAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtc1xuICAgIH0pO1xuXG4gICAgdGhpcy5taW5fcmV0dXJuX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodGhpcy50ZW1wUGFyYW1zLmNoZWNraW5fZGF0ZSk7XG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcy5jaGVja2luX2RhdGUuaXNTYW1lT3JBZnRlcih0aGlzLnRlbXBQYXJhbXMuY2hlY2tvdXRfZGF0ZSkpIHtcbiAgICAgIHRoaXMuY2hlY2tvdXRfZGF0ZSA9IG1vbWVudCh0aGlzLnRlbXBQYXJhbXMuY2hlY2tpbl9kYXRlKS5hZGQoMSwgJ2RheScpOyAvLyBlbnN1cmUgdGhhdCBjaGVja291dCBkYXRlIGlzIG1pbiAxIGRheSBhZnRlciBjaGVja2luIGRhdGVcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcbiAgICB0aGlzLnZhbGlkYXRpb25GYXZvdXJpdGVNZXNzYWdlcyA9IFtdO1xuXG4gICAgc3dpdGNoICh0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25fdHlwZV9zZWxlY3QpIHtcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5DaXR5OlxuICAgICAgICBpZiAoIXRoaXMuY291bnRyeSkge1xuICAgICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ1BsZWFzZSBzZWxlY3QgY291bnRyeScsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5sb2NhdGlvbiAmJiAhdGhpcy5wb3N0Y29kZSkge1xuICAgICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ1BsZWFzZSBzZWxlY3QgYSBob3RlbCBsb2NhdGlvbiBvciBlbnRlciBhIHBvc3Rjb2RlJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5PZmZpY2U6XG4gICAgICAgIGlmICh0aGlzLnRlbXBQYXJhbXMubG9jYXRpb24/LnR5cGUgIT09ICdPZmZpY2UnICYmICF0aGlzLm9mZmljZSkge1xuICAgICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ1BsZWFzZSBzZWxlY3QgYW4gb2ZmaWNlLicsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuQWlycG9ydDpcbiAgICAgICAgaWYgKHRoaXMudGVtcFBhcmFtcz8ubG9jYXRpb24pIHtcbiAgICAgICAgICBpZiAoIXRoaXMudGVtcFBhcmFtcy5sb2NhdGlvbj8uYWlycG9ydD8uZ2F0ZXdheSkge1xuICAgICAgICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnUGxlYXNlIHNlbGVjdCBhbiBhaXJwb3J0JywgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ1BsZWFzZSBzZWxlY3QgYW4gYWlycG9ydCcsIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5UcmFpblN0YXRpb246XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uPy5yYWlsc3RhdGlvbiAmJlxuICAgICAgICAgICF0aGlzLnRyYWluc1N0YXRpb25cbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnUGxlYXNlIHNlbGVjdCBhIHRyYWluIHN0YXRpb24nLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLlNob3J0bGlzdDpcbiAgICAgICAgaWYgKCF0aGlzLmNvdW50cnkpIHtcbiAgICAgICAgICB0aGlzLmFkZFZhbGlkYXRpb25NZXNzYWdlKCdQbGVhc2Ugc2VsZWN0IGNvdW50cnknLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5Qcm9wZXJ0eU51bWJlcjpcbiAgICAgICAgaWYgKCF0aGlzLnByb3BlcnR5TnVtYmVyKSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBhIHByb3BlcnR5IG51bWJlcicpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgfVxuXG5cbiAgICBpZiAodGhpcy5jaGVja291dF9kYXRlICYmIHRoaXMuY2hlY2tvdXRfZGF0ZS5pc1NhbWVPckJlZm9yZSh0aGlzLmNoZWNraW5fZGF0ZSkpIHtcbiAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ0NoZWNrb3V0IGRhdGUgbXVzdCBiZSBhZnRlciBjaGVja2luIGRhdGUnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jaGVja291dF9kYXRlICYmIHRoaXMuY2hlY2tvdXRfZGF0ZS5pc0JlZm9yZShtb21lbnQoKSkpIHtcbiAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ0NoZWNrb3V0IGRhdGUgbXVzdCBub3QgYmUgaW4gdGhlIHBhc3QnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jaGVja2luX2RhdGUgJiYgdGhpcy5jaGVja2luX2RhdGUuaXNCZWZvcmUobW9tZW50KCkuZGF5KCkpKSB7XG4gICAgICB0aGlzLmFkZFZhbGlkYXRpb25NZXNzYWdlKCdDaGVja2luIGRhdGUgbXVzdCBub3QgYmUgaW4gdGhlIHBhc3QnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jaGVja291dF9kYXRlICYmIHRoaXMuY2hlY2tpbl9kYXRlICYmIHRoaXMuY2hlY2tpbl9kYXRlLmlzQWZ0ZXIodGhpcy5jaGVja291dF9kYXRlKSkge1xuICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnQ2hlY2tvdXQgZGF0YSBtdXN0IGJlIGFmdGVyIHRoZSBjaGVja2luIGRhdGUnKTtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGluZyBPY2N1cGFuY3lcbiAgICBjb25zdCBvY2N1cGFuY3kgPSB0aGlzLm5vX29mX29jY3VwYW50cyAvIHRoaXMubm9fb2Zfcm9vbXM7XG4gICAgaWYgKCEob2NjdXBhbmN5ID09PSAxIHx8IG9jY3VwYW5jeSA9PT0gMikpIHtcbiAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoXG4gICAgICAgICdPY2N1cGFudHMgcGVyIHJvb20gbXVzdCBiZSAxIG9yIDI7IGlmIHlvdSBoYXZlIGFuIG9kZCBudW1iZXIgb2YgdHJhdmVsbGVycyAoZ3JlYXRlciB0aGFuIG9uZSk7IHRoZSBubyBvZiByb29tcyBtdXN0IGJlIGVxdWFsJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XG4gICAgdGhpcy5pc1ZhbGlkLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAwKTtcbiAgICB0aGlzLmlzRmF2b3VyaXRlVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25GYXZvdXJpdGVNZXNzYWdlcy5sZW5ndGggPT09IDApO1xuICAgIHRoaXMubWVzc2FnZXMubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XG4gIH1cblxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLnJlc2V0U2VhcmNoKCk7XG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xuICAgICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gT2JqZWN0LmZyZWV6ZSh0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy50ZW1wUGFyYW1zKSk7XG4gICAgICAvLyBidWlsZCB0aGUgcXVlcnlcbiAgICAgIHRoaXMuYnVpbGRRdWVyeSgpO1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaCh0aGlzLmdldFJlY2VudFNlYXJjaFF1ZXJ5KHRoaXMuZ2V0U2VhcmNoUXVlcnkoKSkpO1xuICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0U2VhcmNoKFxuICAgICAgICB0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25fdHlwZV9zZWxlY3QgPT09IExvY2F0aW9uVHlwZXMuU2hvcnRsaXN0XG4gICAgICAgICAgPyB0aGlzLnF1aWNrTGlzdEZldGNoZXIuZmV0Y2hMaXN0KHtcbiAgICAgICAgICAgIGNvdW50cnlDb2RlOiB0aGlzLmNvdW50cnkuY0NvZGUsXG4gICAgICAgICAgICBzdGFydERhdGU6IHF1ZXJ5LnN0YXJ0RGF0ZSxcbiAgICAgICAgICAgIGVuZERhdGU6IHF1ZXJ5LmVuZERhdGUgfSlcbiAgICAgICAgICA6IHRoaXMuaG90ZWxGZXRjaGVyLmZldGNoTGlzdChxdWVyeSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0U2VhcmNoKCkge1xuICAgIHRoaXMuX2NoZWFwZXN0UmVzdWx0UHJpY2UgPSBudWxsO1xuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcbiAgICB0aGlzLmppdFJ1bGVzUmVjZWl2ZWQubmV4dChmYWxzZSk7XG4gICAgdGhpcy5hdmFsaWFiaWxpdHlTZXJ2aWNlLnJlc2V0KCk7XG4gICAgT2JqZWN0LmtleXModGhpcy5oaWRkZW5BbWVuaXRpZXNGaWx0ZXJzKS5mb3JFYWNoKChrZXk6IEFtZW5pdGllc1NlYXJjaEhhbmRsZXIpID0+IHtcbiAgICAgIHRoaXMuaGlkZGVuQW1lbml0aWVzRmlsdGVyc1trZXldID0gdHJ1ZTtcbiAgICB9KVxuICAgIE9iamVjdC5rZXlzKHRoaXMuaGlkZGVuRXh0cmFGaWx0ZXJzKS5mb3JFYWNoKChrZXk6IEV4dHJhU2VhcmNoSGFuZGxlcikgID0+IHtcbiAgICAgIHRoaXMuaGlkZGVuRXh0cmFGaWx0ZXJzW2tleV0gPSB0cnVlO1xuICAgIH0pXG4gICAgT2JqZWN0LmtleXModGhpcy5oaWRkZW5TdGFyUmF0aW5nRmlsdGVycykuZm9yRWFjaCgoa2V5OiBTdGFyUmF0aW5nKSAgPT4ge1xuICAgICAgdGhpcy5oaWRkZW5TdGFyUmF0aW5nRmlsdGVyc1trZXldID0gdHJ1ZTtcbiAgICB9KVxuICB9XG5cbiAgZ210U2VhcmNoKHF1ZXJ5OiBTZWFyY2hIb3RlbHNRdWVyeVZhcmlhYmxlcywgbG9jYXRpb25EZXRhaWxzOiBMb2NhdGlvbkRldGFpbCk6IE9ic2VydmFibGU8SG90ZWxEZXRhaWxzW10+IHtcbiAgICBjb25zdCBvcmlnaW5hbFNlYXJjaEhvdGVsID0ge1xuICAgICAgY2hlY2tpbl9kYXRlOiBtb21lbnQocXVlcnkuc3RhcnREYXRlKSxcbiAgICAgIGNoZWNrb3V0X2RhdGU6IG1vbWVudChxdWVyeS5lbmREYXRlKSxcbiAgICAgIGxvY2F0aW9uOiB7XG4gICAgICAgIG5hbWU6IGxvY2F0aW9uRGV0YWlscy5jaXR5LFxuICAgICAgICBjb3VudHJ5Q29kZTogbG9jYXRpb25EZXRhaWxzLmNvdW50cnlDb2RlXG4gICAgICB9LFxuICAgIH1cbiAgICB0aGlzLmJvbHRTZWFyY2hRdWVyeSA9IG9yaWdpbmFsU2VhcmNoSG90ZWw7XG4gICAgdGhpcy5yZXNldFNlYXJjaCgpO1xuICAgIHRoaXMuY2hlY2tpbl9kYXRlID0gbnVsbDtcbiAgICB0aGlzLmNoZWNrb3V0X2RhdGUgPSBudWxsO1xuICAgIHJldHVybiB0aGlzLmhvdGVsRmV0Y2hlci5mZXRjaExpc3QocXVlcnkpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHJlczpIb3RlbFF1b3RlUmVzdWx0QXJyYXkpID0+IHtcbiAgICAgICAgdGhpcy5jaGVja2luX2RhdGUgPSBtb21lbnQocXVlcnkuc3RhcnREYXRlKTtcbiAgICAgICAgdGhpcy5jaGVja291dF9kYXRlID0gbW9tZW50KHF1ZXJ5LmVuZERhdGUpO1xuICAgICAgICB0aGlzLm5vX29mX3Jvb21zID0gcXVlcnkucm9vbXM7XG4gICAgICAgIHRoaXMubm9fb2Zfb2NjdXBhbnRzID0gcXVlcnkuYWR1bHRzO1xuICAgICAgICB0aGlzLmZ1bGxSZXN1bHRzID0gcmVzIGFzIEhvdGVsRGV0YWlsc1tdO1xuICAgICAgICB0aGlzLl9jaGVhcGVzdFJlc3VsdFByaWNlID0gdGhpcy51cGRhdGVMb3dlc3RQcmljZShyZXMgYXMgSG90ZWxEZXRhaWxzW10pO1xuICAgICAgICBjb25zdCBhdmFpbGFiaWxpdHlPYnNlcnZhYmxlcyA9IHJlcy5tYXAoKGhvdGVsKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29tYmluZWRPYnNlcnZhYmxlID0gdGhpcy5hdmFsaWFiaWxpdHlTZXJ2aWNlLmdldEF2YWlsYWJpbGl0eUZvcklkKHRoaXMubWFrZUhvdGVsQXZhbGlsaXR5T2JqZWN0KGhvdGVsLCBxdWVyeS5hZHVsdHMpLCBob3RlbCkucGlwZShcbiAgICAgICAgICAgIG1hcCgocmVzdWx0KSA9PiAoe1xuICAgICAgICAgICAgICBob3RlbEF2YWxpYWJpbGl0eTogcmVzdWx0LFxuICAgICAgICAgICAgICBob3RlbERldGFpbHM6IGhvdGVsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICkpO1xuICAgICAgICAgIHJldHVybiBjb21iaW5lZE9ic2VydmFibGU7XG4gICAgICAgIH0pO1xuXG4gICAgICAvLyBDb21iaW5lIHRoZSBvYnNlcnZhYmxlc1xuICAgICAgaWYgKGF2YWlsYWJpbGl0eU9ic2VydmFibGVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChhdmFpbGFiaWxpdHlPYnNlcnZhYmxlcykucGlwZShcbiAgICAgICAgICBtYXAoKGNvbWJpbmVkUmVzdWx0czogeyBob3RlbEF2YWxpYWJpbGl0eTogSG90ZWxBdmFsaWJpbGl0eVF1b3RlUmVzdWx0LCBob3RlbERldGFpbHM6IEhvdGVsRGV0YWlscyB9W10pID0+IHtcbiAgICAgICAgICAgIGNvbWJpbmVkUmVzdWx0cy5mb3JFYWNoKCh7IGhvdGVsQXZhbGlhYmlsaXR5LCBob3RlbERldGFpbHMgfSkgPT4ge1xuICAgICAgICAgICAgICBob3RlbERldGFpbHMuYXZhaWxhYmxlUmF0ZXMgPSBob3RlbEF2YWxpYWJpbGl0eTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVkUmVzdWx0cy5tYXAoKHsgaG90ZWxEZXRhaWxzIH0pID0+IGhvdGVsRGV0YWlscyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBhcHBseUdNVFRyYXZlbFJ1bGVzKGF2YWlsYWJpbGl0eU9ic2VydmFibGVzOiBIb3RlbERldGFpbHNbXSk6IE9ic2VydmFibGU8SG90ZWxEZXRhaWxzW10+IHtcbiAgICBjb25zdCBkYXRhID0gYXZhaWxhYmlsaXR5T2JzZXJ2YWJsZXMubWFwKChob3RlbDogSG90ZWxEZXRhaWxzKSA9PiB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShob3RlbCkpO1xuICAgIH0pXG4gICAgdGhpcy5idWlsZFF1ZXJ5KCk7XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlIb3RlbFJ1bGVzRmV0Y2hlclxuICAgIC5mZXRjaEtleWVkT2JqZWN0KCdpZCcsIHsgZGF0YSwgb3JpZ2luYWxTZWFyY2hRdWVyeTogdGhpcy5xdWVyeX0pXG4gICAgLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgbWFwKChkYXRhMTogUmVjb3JkPHN0cmluZywgSG90ZWxEZXRhaWxzPikgPT4ge1xuICAgICAgICBhdmFpbGFiaWxpdHlPYnNlcnZhYmxlcy5mb3JFYWNoKChpdGVtOkhvdGVsRGV0YWlscykgPT4ge1xuICAgICAgICAgIGlmIChkYXRhMVtpdGVtLmlkXSkge1xuICAgICAgICAgICAgaXRlbS5hdmFpbGFibGVSYXRlcyA9IGRhdGExW2l0ZW0uaWRdLmF2YWlsYWJsZVJhdGVzO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhdmFpbGFiaWxpdHlPYnNlcnZhYmxlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5OiBTZWFyY2hIb3RlbHNRdWVyeVZhcmlhYmxlcyk6IFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyB7XG4gICAgY29uc3QgcmVjZW50U2VhcmNoUXVlcnkgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5Ib3RlbCxcbiAgICAgIHNlYXJjaEFyZ3M6IHJlY2VudFNlYXJjaFF1ZXJ5LFxuICAgICAgdHJhdmVsRGF0ZTogdGhpcy5jaGVja2luX2RhdGUuZm9ybWF0KCksXG4gICAgICB0cmF2ZWxsZXJzOiB0aGlzLmhlbHBlcnMuZ2V0VHJhdmVsbGVyc0lkKHRoaXMudHJhdmVsbGVycywgdGhpcy51c2VyU2VydmljZS5ib2JvPy5pZClcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5OiBTZWFyY2hIb3RlbHNRdWVyeVZhcmlhYmxlcyk6IEhvdGVsUmVjZW50U2VhcmNoQXJncyB7XG4gICAgY29uc3Qgc2VhcmNoUXVlcnk6IEhvdGVsUmVjZW50U2VhcmNoQXJncyA9IHF1ZXJ5O1xuICAgIHNlYXJjaFF1ZXJ5LmxvY2F0aW9uX3R5cGVfc2VsZWN0ID0gdGhpcy5sb2NhdGlvbl90eXBlX3NlbGVjdDtcbiAgICBpZiAodGhpcy5sb2NhdGlvbj8ubmFtZSkge1xuICAgICAgc2VhcmNoUXVlcnkuY2l0eU5hbWUgPSB0aGlzLmxvY2F0aW9uLm5hbWU7XG4gICAgfVxuICAgIHN3aXRjaCAoc2VhcmNoUXVlcnkubG9jYXRpb25fdHlwZV9zZWxlY3QpIHtcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5PZmZpY2U6XG4gICAgICAgIHNlYXJjaFF1ZXJ5Lm9mZmljZSA9IHRoaXMub2ZmaWNlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5UcmFpblN0YXRpb246XG4gICAgICAgIHNlYXJjaFF1ZXJ5LnRyYWluc1N0YXRpb25EZXRhaWwgPSB0aGlzLnRyYWluc1N0YXRpb247XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkFpcnBvcnQ6XG4gICAgICAgIHNlYXJjaFF1ZXJ5LmFpcnBvcnREZXRhaWwgPSB0aGlzLmxvY2F0aW9uPy5haXJwb3J0O1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gc2VhcmNoUXVlcnk7XG4gIH1cblxuICBwdWJsaWMgc3RhcnRSZWNlbnRTZWFyY2gocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNraW5fZGF0ZSA9IG1vbWVudChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5zdGFydERhdGUpO1xuICAgIHRoaXMuY2hlY2tvdXRfZGF0ZSA9IG1vbWVudChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5lbmREYXRlKTtcbiAgICB0aGlzLmFwcGx5U2VhcmNoUXVlcnkocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSYWlsU3RhdGlvbkJ5Q29kZShjb2RlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFJhaWxTdGF0aW9uPiB7XG4gICAgaWYgKGNvZGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJhaWxTdGF0aW9uRmV0Y2hlci5mZXRjaExpc3QoeyBpZDogbnVsbCwgY29kZSB9KS5waXBlKHRha2UoMSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG4gIH1cblxuICBnZXRTZWFyY2hRdWVyeShvZ1NlYXJjaCA9IGZhbHNlKTogU2VhcmNoSG90ZWxzUXVlcnlWYXJpYWJsZXMge1xuICAgIHRoaXMuYnVpbGRRdWVyeShvZ1NlYXJjaCk7XG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hIb3RlbHNRdWVyeVZhcmlhYmxlcz4odGhpcy5xdWVyeSk7XG4gIH1cblxuICBidWlsZFF1ZXJ5KG9nU2VhcmNoID0gZmFsc2UpOiB2b2lkIHtcbiAgICBjb25zdCB0ZW1wUGFyYW1zID0gb2dTZWFyY2ggJiYgdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2ggPyB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaCA6IHRoaXMudGVtcFBhcmFtcztcbiAgICBjb25zdCBjdXJyZW5jeU9iamVjdCA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0PHtcbiAgICAgIGN1cnJlbmN5OiBzdHJpbmc7XG4gICAgICBob3RlbDoge1xuICAgICAgICBlbmFibGU6IGJvb2xlYW47XG4gICAgICB9O1xuICAgIH0+KFVzZXJGYXZvcnVyaXRlLlByZWZlcnJlZEN1cnJlbmN5KTtcbiAgICBpZiAoKCF0aGlzLnVzZXJDdXJyZW5jeSB8fCB0aGlzLnVzZXJDdXJyZW5jeSAhPT0gY3VycmVuY3lPYmplY3Q/LmN1cnJlbmN5KSAmJiBjdXJyZW5jeU9iamVjdD8uaG90ZWw/LmVuYWJsZSkge1xuICAgICAgdGhpcy51c2VyQ3VycmVuY3kgPSBjdXJyZW5jeU9iamVjdC5jdXJyZW5jeTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudXNlckN1cnJlbmN5ICYmICFjdXJyZW5jeU9iamVjdD8uaG90ZWw/LmVuYWJsZSl7XG4gICAgICB0aGlzLnVzZXJDdXJyZW5jeSA9IG51bGw7XG4gICAgfVxuICAgIGxldCBhbHRlcm5hdGl2ZUxvY2F0aW9uUG9zdGNvZGU6IHN0cmluZyA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5wcmltYXJ5TG9jYXRpb24/LnRvTG93ZXJDYXNlKCk/LnRyaW0oKSA9PT0gdGhpcy5sb2NhdGlvbj8ubmFtZT8udG9Mb3dlckNhc2UoKT8udHJpbSgpKSB7XG4gICAgICBhbHRlcm5hdGl2ZUxvY2F0aW9uUG9zdGNvZGUgPSB0aGlzLmFsdGVybmF0aXZlTG9jYXRpb247XG4gICAgfVxuXG4gICAgbGV0IGRpc3RhbmNlID0gdGVtcFBhcmFtcy5kaXN0YW5jZTtcbiAgICBsZXQgZGlzdGFuY2VUeXBlID0gRGlzdGFuY2VUeXBlcy5NO1xuICAgIGNvbnN0IGRpc3RhbmNlQ29uZmlnOiBhbnkgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdChcbiAgICAgIFVzZXJGYXZvcnVyaXRlLmRpc3RhbmNlVW5pdFxuICAgICk7XG5cbiAgICBpZiAoZGlzdGFuY2VDb25maWc/LnVuaXQpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGArKysgRElTVEFOQ0UgQ09ORklHIERFVEVDVEVEICsrK2ApO1xuICAgICAgaWYgKGRpc3RhbmNlQ29uZmlnLnVuaXQgIT09ICdNaWxlcycpIHsgIC8vICEgLSBkaXN0YW5jZSBpcyBhbHdheXMgaW4gTWlsZXMgaW4gdGVtcCBwYXJhbXMgLSBDb252ZXJ0IHRvIEtNIGV2ZW4gaWYgaW4gTWV0ZXJzIGFzIENvbmZlcm1hIGRvZXMgbm90IGFjY2VwdCB0aGlzIC0ganVzdCBjaGFuZ2UgdGhlIGRpc3BsYXkgaW4gRkVcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmZsb29yKGRpc3RhbmNlICogMS42MDkzNCk7XG4gICAgICAgIGRpc3RhbmNlVHlwZSA9IERpc3RhbmNlVHlwZXMuSztcbiAgICAgIH0gXG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnk6IFNlYXJjaEhvdGVsc1F1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgc3RhcnREYXRlOiB0ZW1wUGFyYW1zLmNoZWNraW5fZGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKSxcbiAgICAgIGVuZERhdGU6IHRlbXBQYXJhbXMuY2hlY2tvdXRfZGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKSxcbiAgICAgIHJvb21zOiB0ZW1wUGFyYW1zLm5vX29mX3Jvb21zLFxuICAgICAgYWR1bHRzOiB0ZW1wUGFyYW1zLm5vX29mX29jY3VwYW50cyxcbiAgICAgIGN1cnJlbmN5OiB0aGlzLnVzZXJDdXJyZW5jeSB8fCB0ZW1wUGFyYW1zLmN1cnJlbmN5IHx8IG51bGwsXG4gICAgICBkaXN0YW5jZSxcbiAgICAgIGRpc3RhbmNlVHlwZSxcbiAgICAgIG1heFJlc3VsdHM6IDEwMCxcbiAgICAgIGFsdGVybmF0aXZlTG9jYXRpb246IGFsdGVybmF0aXZlTG9jYXRpb25Qb3N0Y29kZSB8fCBudWxsLFxuICAgICAgdHJhdmVsbGVyczogdGhpcy50cmF2ZWxsZXJzLm1hcCh0cmF2ZWxsZXIgPT4ge3JldHVybiB7aWQ6IHRyYXZlbGxlci5pZH19KVxuICAgIH07XG5cbiAgICB0aGlzLmdldFJvb21OdW1iZXIoKTtcbiAgICBzd2l0Y2ggKHRlbXBQYXJhbXMubG9jYXRpb25fdHlwZV9zZWxlY3QpIHtcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5BaXJwb3J0OlxuICAgICAgICBxdWVyeS5pYXRhID0gdGVtcFBhcmFtcy5sb2NhdGlvbj8uYWlycG9ydC5nYXRld2F5O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkNpdHk6XG4gICAgICAgIHF1ZXJ5LmNvdW50cnlDb2RlID0gdGVtcFBhcmFtcy5jb3VudHJ5LmNDb2RlO1xuICAgICAgICAvLyBzaG91bGQgYmUgb25lIHNlYXJjaCBtZXRvZCBmb3IgdGhlIGNpdHkgc2VhcmNoOiBsb2NhdGlvbiBvciBwb3N0Y29kZVxuICAgICAgICAvLyBjb25zb2xlLmxvZygnbG9jYXRpb246ICcsIHRoaXMubG9jYXRpb24pO1xuICAgICAgICBpZiAodGhpcy5sb2NhdGlvbikge1xuICAgICAgICAgIHF1ZXJ5LmNpdHlOYW1lID0gdGVtcFBhcmFtcy5sb2NhdGlvbi5uYW1lO1xuICAgICAgICAgIHF1ZXJ5LmxhdGl0dWRlID0gdGVtcFBhcmFtcy5sb2NhdGlvbi5sYXRpdHVkZTtcbiAgICAgICAgICBxdWVyeS5sb25naXR1ZGUgPSB0ZW1wUGFyYW1zLmxvY2F0aW9uLmxvbmdpdHVkZTtcbiAgICAgICAgfSBlbHNlIGlmICh0ZW1wUGFyYW1zLnBvc3Rjb2RlKSB7XG4gICAgICAgICAgcXVlcnkucG9zdE9yWmlwQ29kZSA9IHRlbXBQYXJhbXMucG9zdGNvZGUubmFtZTtcbiAgICAgICAgICBxdWVyeS5sYXRpdHVkZSA9IHRlbXBQYXJhbXMucG9zdGNvZGUubGF0aXR1ZGU7XG4gICAgICAgICAgcXVlcnkubG9uZ2l0dWRlID0gdGVtcFBhcmFtcy5wb3N0Y29kZS5sb25naXR1ZGU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5UcmFpblN0YXRpb246XG4gICAgICAgIGlmICh0ZW1wUGFyYW1zLmxvY2F0aW9uPy5yYWlsc3RhdGlvbj8uc3RhdGlvbkNvZGUpIHtcbiAgICAgICAgICBxdWVyeS50cmFpblN0YXRpb25Db2RlID0gdGVtcFBhcmFtcy5sb2NhdGlvbi5yYWlsc3RhdGlvbi5zdGF0aW9uQ29kZTtcbiAgICAgICAgfSBlbHNlIGlmICh0ZW1wUGFyYW1zLnRyYWluc1N0YXRpb24ubGF0aXR1ZGUgJiYgdGVtcFBhcmFtcy50cmFpbnNTdGF0aW9uLmxvbmdpdHVkZSkge1xuICAgICAgICAgIC8vRm9yIEVVIHN0YXRpb25zXG4gICAgICAgICAgcXVlcnkubGF0aXR1ZGUgPSB0ZW1wUGFyYW1zLnRyYWluc1N0YXRpb24ubGF0aXR1ZGU7XG4gICAgICAgICAgcXVlcnkubG9uZ2l0dWRlID0gdGVtcFBhcmFtcy50cmFpbnNTdGF0aW9uLmxvbmdpdHVkZTtcblxuICAgICAgICAgIGlmKHRlbXBQYXJhbXMudHJhaW5zU3RhdGlvbi5zdGF0aW9uQ29kZSkge1xuICAgICAgICAgICAgcXVlcnkudHJhaW5TdGF0aW9uQ29kZSA9IHRlbXBQYXJhbXMudHJhaW5zU3RhdGlvbi5zdGF0aW9uQ29kZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLk9mZmljZTpcbiAgICAgICAgLy8gY29uc29sZS5sb2codGVtcFBhcmFtcyk7XG4gICAgICAgIHF1ZXJ5LmxhdGl0dWRlID0gdGVtcFBhcmFtcy5vZmZpY2UgPyB0ZW1wUGFyYW1zLm9mZmljZS5sYXRpdHVkZSA6IHRlbXBQYXJhbXMubG9jYXRpb24ubGF0aXR1ZGU7XG4gICAgICAgIHF1ZXJ5LmxvbmdpdHVkZSA9IHRlbXBQYXJhbXMub2ZmaWNlID8gdGVtcFBhcmFtcy5vZmZpY2UubG9uZ2l0dWRlIDogdGVtcFBhcmFtcy5sb2NhdGlvbi5sb25naXR1ZGU7XG4gICAgICAgIHF1ZXJ5LmNvdW50cnlDb2RlID0gdGVtcFBhcmFtcy5vZmZpY2UgPyB0ZW1wUGFyYW1zLm9mZmljZS5jb3VudHJ5Q29kZSA6IHRlbXBQYXJhbXMubG9jYXRpb24uY291bnRyeUNvZGU7XG4gICAgICAgIHF1ZXJ5Lm9mZmljZUlkID0gTnVtYmVyKHRlbXBQYXJhbXMub2ZmaWNlID8gdGVtcFBhcmFtcy5vZmZpY2UuaWQgOiB0ZW1wUGFyYW1zLmxvY2F0aW9uLmlkKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5TaG9ydGxpc3Q6XG4gICAgICAgIHF1ZXJ5LmNvdW50cnlDb2RlID0gdGVtcFBhcmFtcy5jb3VudHJ5LmNDb2RlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlOlxuICAgICAgICBxdWVyeS5jb3VudHJ5Q29kZSA9IHRlbXBQYXJhbXMuY291bnRyeS5jQ29kZTtcbiAgICAgICAgcXVlcnkucG9zdE9yWmlwQ29kZSA9IHRlbXBQYXJhbXMubG9jYXRpb24ubmFtZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5Qcm9wZXJ0eU51bWJlcjpcbiAgICAgICAgICBxdWVyeS5wcm9wZXJ0eU51bWJlciA9IHRlbXBQYXJhbXMucHJvcGVydHlOdW1iZXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gQWRkIGhvdGVsIG5hbWUgaW4gdGhlIHF1ZXJ5XG4gICAgaWYgKHRlbXBQYXJhbXMuaG90ZWxfbmFtZSkge1xuICAgICAgcXVlcnkuaG90ZWxOYW1lID0gdGVtcFBhcmFtcy5ob3RlbF9uYW1lO1xuICAgIH1cblxuICAgIC8vIGFkZCBjaGFpbiBvciBncm91cCBuYW1lIGludCBoZSBxdWVyeVxuICAgIGlmICh0ZW1wUGFyYW1zLmhvdGVsX2NoYWluKSB7XG4gICAgICBxdWVyeS5ncm91cE5hbWUgPSAodGVtcFBhcmFtcy5ob3RlbF9jaGFpbiBhcyB7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICB9KT8ubmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLnF1ZXJ5ID0gcXVlcnk7XG4gIH1cblxuICBtYWtlSG90ZWxBdmFsaWxpdHlPYmplY3QoaG90ZWw6IEhvdGVsUXVvdGVSZXN1bHQsIGFkdWx0cz86IG51bWJlcik6IEhvdGVsQXZhbGliaWxpdHlRdWVyeSB7XG4gICAgY29uc3QgY3VycmVuY3lPYmplY3QgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdDx7XG4gICAgICBjdXJyZW5jeTogc3RyaW5nO1xuICAgICAgaG90ZWw6IHtcbiAgICAgICAgZW5hYmxlOiBib29sZWFuO1xuICAgICAgfTtcbiAgICB9PihVc2VyRmF2b3J1cml0ZS5QcmVmZXJyZWRDdXJyZW5jeSk7XG4gICAgaWYgKCghdGhpcy51c2VyQ3VycmVuY3kgfHwgdGhpcy51c2VyQ3VycmVuY3kgIT09IGN1cnJlbmN5T2JqZWN0Py5jdXJyZW5jeSkgJiYgY3VycmVuY3lPYmplY3Q/LmhvdGVsPy5lbmFibGUpIHtcbiAgICAgIHRoaXMudXNlckN1cnJlbmN5ID0gY3VycmVuY3lPYmplY3QuY3VycmVuY3k7XG4gICAgfSBlbHNlIGlmICh0aGlzLnVzZXJDdXJyZW5jeSAmJiAhY3VycmVuY3lPYmplY3Q/LmhvdGVsPy5lbmFibGUpe1xuICAgICAgdGhpcy51c2VyQ3VycmVuY3kgPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaG90ZWxzOiBbeyBob3RlbElkOiBob3RlbC5pZCwgc3VwcGxpZXJJZDogaG90ZWwuc291cmNlSWQudG9TdHJpbmcoKSB9XSxcbiAgICAgIHN0YXJ0RGF0ZTogdGhpcy5oZWxwZXJzLmZvcm1hdElzb0RhdGUodGhpcy5jaGVja2luX2RhdGUpLFxuICAgICAgZW5kRGF0ZTogdGhpcy5oZWxwZXJzLmZvcm1hdElzb0RhdGUodGhpcy5jaGVja291dF9kYXRlKSxcbiAgICAgIHJvb21zOiBhZHVsdHMgPyBhZHVsdHMgOiB0aGlzLm5vX29mX3Jvb21zLFxuICAgICAgb2NjdXBhbnRzOiB0aGlzLm5vX29mX29jY3VwYW50cyxcbiAgICAgIGN1cnJlbmN5OiB0aGlzLnVzZXJDdXJyZW5jeSB8fCAnR0JQJ1xuICAgIH07XG4gIH1cbiAgcmVzdWx0c0ZpbHRlck1ldGhvZDogKHJlc3VsdHM6IEhvdGVsRGV0YWlsc0FycmF5KSA9PiBIb3RlbERldGFpbHNBcnJheTtcblxuICBwdWJsaWMgZmlsdGVyUmVzdWx0cyA9IChzaG93T25seUF2YWlsYWJsZUhvdGVsOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5yZXN1bHRzRmlsdGVyTWV0aG9kID0gKHJlc3VsdHM6IEhvdGVsRGV0YWlsc0FycmF5KSA9PiB7XG4gICAgICByZXN1bHRzLmZvckVhY2goKGhvdGVsOiBIb3RlbERldGFpbHMpPT57XG4gICAgICAgIHRoaXMucm9vbXNGaWx0ZXIoaG90ZWwpO1xuICAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdHMuZmlsdGVyKChob3RlbDogSG90ZWxEZXRhaWxzKSA9PiB7XG4gICAgICAgIGlmIChzaG93T25seUF2YWlsYWJsZUhvdGVsKSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuaW5QZXJOaWdodFByaWNlUmFuZ2UoaG90ZWwpICYmXG4gICAgICAgICAgICB0aGlzLmluRGlzdGFuY2VSYW5nZShob3RlbCkgJiZcbiAgICAgICAgICAgIHRoaXMucmVmdW5kYWJsZVJvb21UeXBlRmlsdGVyKGhvdGVsKSAmJlxuICAgICAgICAgICAgdGhpcy5zaGFyZWRGaWx0ZXIoaG90ZWwpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuaW5QZXJOaWdodFByaWNlUmFuZ2UoaG90ZWwpICYmIHRoaXMuaW5EaXN0YW5jZVJhbmdlKGhvdGVsKSAmJiB0aGlzLnNoYXJlZEZpbHRlcihob3RlbClcbiAgICAgICAgICApO1xuICAgICAgfSlcbiAgICB9O1xuICAgIC8vIGNvbnNvbGUubG9nKCdub3J0bWFsIHNvcnQgcmVzdWx0cycpO1xuICAgIGNvbnN0IGZpbHRlcmVkUmVzdWx0cyA9IHRoaXMucmVzdWx0c0ZpbHRlck1ldGhvZCh0aGlzLmZ1bGxSZXN1bHRzKTtcbiAgICB0aGlzLnJlc3VsdHMubmV4dChmaWx0ZXJlZFJlc3VsdHMpO1xuICAgIHRoaXMucmVhcHBseVNvcnRpbmcubmV4dCh0cnVlKTtcbiAgfTtcblxuICBwcml2YXRlIHNoYXJlZEZpbHRlcihob3RlbDogSG90ZWxEZXRhaWxzKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucm9vbXNDaGVjayhob3RlbCkgJiZcbiAgICAgIHRoaXMuZ2V0RXh0cmFGaWx0ZXIoaG90ZWwpICYmXG4gICAgICB0aGlzLmhhc1ByZWZlcnJlZChob3RlbCkgJiZcbiAgICAgIHRoaXMuYWNjZXNzaWJsZVJvb21UeXBlRmlsdGVyKGhvdGVsKSYmXG4gICAgICB0aGlzLmNvbnRhaW5zSG90ZWxuYW1lKGhvdGVsKSAmJlxuICAgICAgdGhpcy5oYXNDaGFpbihob3RlbCkgJiZcbiAgICAgIHRoaXMuYnJlYWtmYXN0VHlwZUZpbHRlcihob3RlbCkgJiZcbiAgICAgIHRoaXMudHJhdmVsUG9saWN5RmlsdGVyKGhvdGVsKSAmJlxuICAgICAgdGhpcy5yb29tVHlwZUZpbHRlcihob3RlbCkgJiZcbiAgICAgIHRoaXMuZ2V0QW1lbml0aWVzRmlsdGVyKGhvdGVsKSAmJlxuICAgICAgdGhpcy5zdGFyUmF0aW5nRmlsdGVyKGhvdGVsKSAmJlxuICAgICAgdGhpcy5jdXN0b21lclJhdGluZ0ZpbHRlcihob3RlbCkgJiZcbiAgICAgIHRoaXMud2l0aGluU3RhclJhdGluZ1VpQ29uZmlnKGhvdGVsKVxuICAgICk7XG4gIH1cblxuICAvLyBMaWdodGVuaW5nIEZpbHRlcnNcbiAgcHVibGljIGZpbHRlckxpZ2h0ZW5pbmdSZXN1bHRzID0gKCkgPT4ge1xuICAgIHRoaXMucmVzdWx0c0ZpbHRlck1ldGhvZCA9IChyZXN1bHRzOiBIb3RlbERldGFpbHNBcnJheSkgPT4ge1xuICAgICAgcmVzdWx0cy5mb3JFYWNoKChob3RlbDogSG90ZWxEZXRhaWxzKT0+e1xuICAgICAgICB0aGlzLnJvb21zRmlsdGVyKGhvdGVsKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzUm9vbUZpbHRlcnNUb0Rpc3BsYXkoaG90ZWwpO1xuICAgICAgIH0pO1xuICAgICByZXR1cm4gcmVzdWx0cy5maWx0ZXIoKGhvdGVsOiBIb3RlbERldGFpbHMpID0+IHtcbiAgICAgIGNvbnN0IHBlck5pZ2h0RmlsdGVyID0gIHRoaXMubm9Sb29tRmlsdGVyU2VsZWN0ZWQoKSA/ICB0cnVlIDogdGhpcy5pblBlck5pZ2h0UHJpY2VSYW5nZShob3RlbCk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgcGVyTmlnaHRGaWx0ZXIgJiZcbiAgICAgICAgICB0aGlzLnNoYXJlZEZpbHRlcihob3RlbClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKCdsaWdodG5pbmcgc29ydCByZXN1bHRzJyk7XG4gICAgLy8gY29uc29sZS5sb2codGhpcy5yZXN1bHRzLnZhbHVlKTtcbiAgICBjb25zdCBmaWx0ZXJlZFJlc3VsdHMgPSB0aGlzLnJlc3VsdHNGaWx0ZXJNZXRob2QodGhpcy5mdWxsUmVzdWx0cyk7XG4gICAgY29uc29sZS5sb2coZmlsdGVyZWRSZXN1bHRzKTtcbiAgICB0aGlzLnJlc3VsdHMubmV4dChmaWx0ZXJlZFJlc3VsdHMpO1xuICAgIHRoaXMucmVhcHBseVNvcnRpbmcubmV4dCh0cnVlKTtcbiAgfTtcblxuICBwdWJsaWMgcmVzdWx0c0hhdmVUYWcoc2VhcmNoVGFnOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBmaWx0ZXJlZFJlc3VsdHMgPSB0aGlzLmZ1bGxSZXN1bHRzLmZpbHRlcigoaG90ZWw6IEhvdGVsRGV0YWlscykgPT4ge1xuICAgICAgY29uc3QgZmlsdGVyZWRUYWdzOiBIb3RlbFRhZ1tdID0gaG90ZWwudGFncy5maWx0ZXIoKHRhZzogSG90ZWxUYWcpID0+IHtcbiAgICAgICAgaWYgKHRhZy5uYW1lKSB7XG4gICAgICAgICAgY29uc3QgbmFtZTogc3RyaW5nID0gdGhpcy5jb252ZXJ0VG9PbmVTdHJpbmcodGFnLm5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKG5hbWUuaW5jbHVkZXModGhpcy5jb252ZXJ0VG9PbmVTdHJpbmcoc2VhcmNoVGFnKS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBjb250YWluc1NlYXJjaFRhZyA9ICEhKGZpbHRlcmVkVGFncyAmJiBmaWx0ZXJlZFRhZ3MubGVuZ3RoID4gMCk7XG4gICAgICAvLyBjb25zb2xlLmxvZyhgSG90ZWwgJHtob3RlbC5uYW1lfSB3aXRoIGZpbHRlciBhcHBsaWVkYCwgaG90ZWw/LnRhZ3MsIGlzVHJ1ZSk7XG4gICAgICByZXR1cm4gY29udGFpbnNTZWFyY2hUYWc7XG4gICAgfSk7XG4gICAgcmV0dXJuICEhKGZpbHRlcmVkUmVzdWx0cyAmJiBmaWx0ZXJlZFJlc3VsdHMubGVuZ3RoID4gMCk7XG4gIH1cblxuICBwcml2YXRlIGluUGVyTmlnaHRQcmljZVJhbmdlKGhvdGVsOiBIb3RlbERldGFpbHMpOiBib29sZWFuIHtcbiAgICBjb25zdCBhdmFpbGFiaWxpdHkgPSB0aGlzLmF2YWxpYWJpbGl0eVNlcnZpY2UuZ2V0QXZhaWxhYmlsaXR5VmFsdWUoaG90ZWwpO1xuICAgIGlmIChhdmFpbGFiaWxpdHkpIHtcbiAgICAgIGlmKHRoaXMuZmlsdGVycy5wZXJOaWdodFByaWNlUmFuZ2UubWF4ID09PSB0aGlzLmZpbHRlcnMucGVyTmlnaHRQcmljZVJhbmdlLm1pbiAmJiB0aGlzLmZpbHRlcnMucGVyTmlnaHRQcmljZVJhbmdlLm1pbiA+IHRoaXMuZmlsdGVycy5wZXJOaWdodFByaWNlUmFuZ2UubWF4UmF3KXtcbiAgICAgICAgcmV0dXJuIGF2YWlsYWJpbGl0eS5wcnBuID49IHRoaXMuZmlsdGVycy5wZXJOaWdodFByaWNlUmFuZ2UubWF4UmF3O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVscGVycy5pblJhbmdlKGF2YWlsYWJpbGl0eS5wcnBuLCB0aGlzLmZpbHRlcnMucGVyTmlnaHRQcmljZVJhbmdlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cblxuICBwcml2YXRlIGluRGlzdGFuY2VSYW5nZShob3RlbDogSG90ZWxEZXRhaWxzKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZmlsdGVycy5kaXN0YW5jZVJhbmdlLm1heCA9PT0gMCB8fFxuICAgICAgdGhpcy5oZWxwZXJzLmluUmFuZ2UoaG90ZWwubG9jYXRpb24uZGlzdGFuY2UsIHRoaXMuZmlsdGVycy5kaXN0YW5jZVJhbmdlKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNvbnRhaW5zSG90ZWxuYW1lKGhvdGVsOiBIb3RlbERldGFpbHMpOiBib29sZWFuIHtcbiAgICBjb25zdCB0b2NoZWNrID0gdGhpcy5maWx0ZXJzLmhvdGVsTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgcmV0dXJuIHRvY2hlY2sgJiYgdG9jaGVjay5sZW5ndGggPiAwID8gaG90ZWwubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRvY2hlY2spIDogdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBdmFsaWFiaWxpdHkoaG90ZWw6IEhvdGVsRGV0YWlscyk6IEhvdGVsQXZhbGliaWxpdHlRdW90ZVJlc3VsdCB7XG4gICAgcmV0dXJuIHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5nZXRBdmFpbGFiaWxpdHlWYWx1ZShob3RlbCk7XG4gIH1cblxuICBwdWJsaWMgcm9vbXNDaGVjayhob3RlbDogSG90ZWxEZXRhaWxzKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYXZhaWxhYmlsaXR5ID0gdGhpcy5hdmFsaWFiaWxpdHlTZXJ2aWNlLmdldEF2YWlsYWJpbGl0eVZhbHVlKGhvdGVsKTtcbiAgICAvLyBpZiB0aGVyZSBpcyBubyByb29tIGZpbHRlciwgc2hvdyBldmVyeXRoaW5nIGV2ZW4gbm8gcm9vbXNcbiAgICBpZiAodGhpcy5ub1Jvb21GaWx0ZXJTZWxlY3RlZCgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gaWYgdGhlcmUgaXMgYSBzaW5nbGUgcm9vbSBmaWx0ZXIgZG8gdGhlIGZpbHRlclxuICAgIGlmIChhdmFpbGFiaWxpdHkgJiYgIGF2YWlsYWJpbGl0eT8ucm9vbXMpIHtcbiAgICAgICByZXR1cm4gISFhdmFpbGFiaWxpdHkucm9vbXMubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJvb21zRmlsdGVyKGhvdGVsOiBIb3RlbERldGFpbHMpIHtcbiAgICBjb25zdCBhdmFpbGFiaWxpdHkgPSB0aGlzLmF2YWxpYWJpbGl0eVNlcnZpY2UuZ2V0QXZhaWxhYmlsaXR5VmFsdWUoaG90ZWwpO1xuICAgIGlmIChhdmFpbGFiaWxpdHkgJiYgT2JqZWN0LmtleXMoYXZhaWxhYmlsaXR5KS5sZW5ndGggIT09IDApIHtcbiAgICAgIGNvbnN0IGlzUmVmdW5kYWJsZUluY2x1ZGVkID0gdGhpcy5maWx0ZXJzLnJlZnVuZGFibGVSb29tVHlwZS5pbmNsdWRlcyhTZWFyY2hIYW5kbGVyLlJFRlVOREFCTEUpO1xuICAgICAgY29uc3QgaXNSZWZ1bmRhYmxlRXhjbHVkZWQgPSB0aGlzLmZpbHRlcnMucmVmdW5kYWJsZVJvb21UeXBlLmluY2x1ZGVzKFxuICAgICAgICBTZWFyY2hIYW5kbGVyLk5PTl9SRUZVTkRBQkxFXG4gICAgICApO1xuXG4gICAgLy8gY29uc29sZS5sb2coJysrKyBBcHBseWluZyBmaWx0ZXJzOiAnLCB0aGlzLmZpbHRlcnMsICcgKysrJyk7XG4gICAgY29uc3QgbWF0Y2hlczpIb3RlbFJvb21XaXRoTG9jYWxQcmljZVtdID0gYXZhaWxhYmlsaXR5LmZ1bGxSb29tcz8uZmlsdGVyKChyb29tOiBIb3RlbFJvb21XaXRoTG9jYWxQcmljZSkgPT4ge1xuICAgICAgLy9UcmF2ZWxwb3J0SG90ZWxzIGRvbnQgaGF2ZSBMb2NhbFByaWNlIGNoYW5nZWQgdG8gdG90YWwgaW5zdGVhZFxuICAgICAgY29uc3QgaW5SYW5nZSA9IHRoaXMuaGVscGVycy5pblJhbmdlKChob3RlbC5zb3VyY2UgPT09IFNlcnZpY2VQcm92aWRlci5UcmF2ZWxwb3J0SG90ZWxzID8gcm9vbS50b3RhbCA6IHJvb20uTG9jYWxQcmljZSksIC8vICogY29udmVyc2lvbixcbiAgICAgICAgdGhpcy5maWx0ZXJzLnByaWNlUmFuZ2VcbiAgICAgICk7XG4gICAgICBsZXQgcmVmdW5kYWJsZUNoZWNrID0gdHJ1ZTtcbiAgICAgIGlmIChpc1JlZnVuZGFibGVJbmNsdWRlZCAmJiBpc1JlZnVuZGFibGVFeGNsdWRlZCkge1xuICAgICAgICByZWZ1bmRhYmxlQ2hlY2sgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChpc1JlZnVuZGFibGVJbmNsdWRlZCkge1xuICAgICAgICByZWZ1bmRhYmxlQ2hlY2sgPSByb29tPy5wb2xpY2llcy5yZWZ1bmRBdmFpbGFibGU7XG4gICAgICB9IGVsc2UgaWYgKGlzUmVmdW5kYWJsZUV4Y2x1ZGVkKSB7XG4gICAgICAgIHJlZnVuZGFibGVDaGVjayA9ICFyb29tPy5wb2xpY2llcy5yZWZ1bmRBdmFpbGFibGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWZ1bmRhYmxlQ2hlY2sgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgYWNjZXNpYmxlQ2hlY2sgPSB0cnVlO1xuXG4gICAgICBpZiAodGhpcy5maWx0ZXJzLmFjY2Vzc2libGVSb29tVHlwZS5sZW5ndGgpIHtcbiAgICAgICAgLy8gY2hlY2sgZm9yIGFjY2Vzc2liaWxpdHlcbiAgICAgICAgY29uc3Qgbm9ybWFsaXNlZERlc2MgPSByb29tLnJvb21EZXNjcmlwdGlvbi50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBub3JtYWxpc2VkVHlwZSA9IHJvb20ucm9vbVR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgYWNjZXNpYmxlQ2hlY2sgPSAhIXRoaXMuZGlzYmFpbGl0eUtleXdvcmRzLmZpbmQoKGtleXdvcmQ6RGlzYWJsZWRLZXlXb3Jkcyk9PlxuICAgICAgICAgIG5vcm1hbGlzZWRUeXBlLmluY2x1ZGVzKGtleXdvcmQpIHx8IG5vcm1hbGlzZWREZXNjLmluY2x1ZGVzKGtleXdvcmQpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGxldCBjcm93bkNoZWNrID0gdHJ1ZTtcblxuICAgICAgaWYgKHRoaXMuZmlsdGVycy5jcm93blByZWZlcnJlZC5sZW5ndGggJiYgdGhpcy5maWx0ZXJzLmNyb3duUHJlZmVycmVkLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJysrKyBGaWx0ZXJpbmcgQ3Jvd24gUmF0ZXMgKysrJyk7XG5cbiAgICAgICAgY29uc3QgY2hvc2VuRmlsdGVyID0gdGhpcy5maWx0ZXJzLmNyb3duUHJlZmVycmVkWzBdO1xuXG4gICAgICAgIGlmIChjaG9zZW5GaWx0ZXIgPT09IFNlYXJjaEhhbmRsZXIuQ1JPV05fT05MWSkge1xuICAgICAgICAgIGNyb3duQ2hlY2sgPSByb29tLnJhdGVEZXNjcmlwdGlvbi5pbmNsdWRlcygnQ0NTIFBVQkxJQyBTRUNUT1InKTtcbiAgICAgICAgfSBlbHNlIGlmIChjaG9zZW5GaWx0ZXIgPT09IFNlYXJjaEhhbmRsZXIuTk9OX0NST1dOX09OTFkpIHtcbiAgICAgICAgICAvLyBub3QgaW5jbHVkZVxuICAgICAgICAgIGNyb3duQ2hlY2sgPSAhcm9vbS5yYXRlRGVzY3JpcHRpb24uaW5jbHVkZXMoJ0NDUyBQVUJMSUMgU0VDVE9SJyk7XG4gICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5SYW5nZSAmJiByZWZ1bmRhYmxlQ2hlY2sgJiYgYWNjZXNpYmxlQ2hlY2sgJiYgY3Jvd25DaGVjaztcbiAgICB9KTtcblxuICAgIC8vIGNvbnNvbGUubG9nKG1hdGNoZXMubGVuZ3RoKTtcbiAgICAvLyBhZGQgc29tZXRoaW5nIGhlcmUgdG8gZmlsdGVyIHJvb21zIGlmIG1hdGNoZXMgaXMgPiAwXG4gICAgICB0aGlzLmF2YWxpYWJpbGl0eVNlcnZpY2UudXBkYXRlUm9vbXMoYXZhaWxhYmlsaXR5LCBtYXRjaGVzKTtcbiAgfVxufVxuXG4gIHB1YmxpYyBoYXNDaGFpbihob3RlbDogSG90ZWxEZXRhaWxzKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdG9jaGVjayA9ICh0aGlzLmZpbHRlcnMuY2hhaW4gfHwgW10pLm1hcCgoY2hhaW46IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gY2hhaW4udG9Mb3dlckNhc2UoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdG9jaGVjayAmJiB0b2NoZWNrLmxlbmd0aFxuICAgICAgPyAhIXRvY2hlY2suZmluZCgoY2hhaW46IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gaG90ZWwuZ3JvdXAudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhjaGFpbik7XG4gICAgICB9KVxuICAgICAgOiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBicmVha2Zhc3RUeXBlRmlsdGVyKGhvdGVsOiBIb3RlbERldGFpbHMpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZmlsdGVycy5icmVha2Zhc3RUeXBlLmxlbmd0aCkgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBob3RlbE9iamVjdFZhbHVlID0gdGhpcy5nZXRIb3RlbE9iamVjdFZhbHVlKGhvdGVsKTtcbiAgICBpZiAoIWhvdGVsT2JqZWN0VmFsdWUgfHwgIWhvdGVsT2JqZWN0VmFsdWU/LnJvb21zKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBpc0JyZWFrZmFzdEluY2x1ZGVkID0gdGhpcy5maWx0ZXJzLmJyZWFrZmFzdFR5cGUuaW5jbHVkZXMoXG4gICAgICBTZWFyY2hIYW5kbGVyLkJSRUFLRkFTVF9JTkNMVURFRFxuICAgICk7XG4gICAgY29uc3QgaXNCcmVha2Zhc3RFeGNsdWRlZCA9IHRoaXMuZmlsdGVycy5icmVha2Zhc3RUeXBlLmluY2x1ZGVzKFxuICAgICAgU2VhcmNoSGFuZGxlci5CUkVBS0ZBU1RfTk9UX0lOQ0xVREVEXG4gICAgKTtcblxuICAgIGNvbnN0IGJyZWFrZmFzdE1hdGNoZXMgPSBob3RlbE9iamVjdFZhbHVlLnJvb21zLmZpbHRlcigocm9vbXM6IEhvdGVsUm9vbSkgPT4ge1xuICAgICAgY29uc3QgcmF0ZURlc2NyaXB0aW9uID0gcm9vbXMucmF0ZURlc2NyaXB0aW9uO1xuICAgICAgY29uc3Qgcm9vbURlc2NyaXB0aW9uID0gcm9vbXMucm9vbURlc2NyaXB0aW9uO1xuICAgICAgY29uc3Qgcm9vbUdlbmVyYWxQb2xpY3kgPSByb29tcy5wb2xpY2llcz8uZ2VuZXJhbDtcblxuICAgICAgaWYgKGlzQnJlYWtmYXN0SW5jbHVkZWQgJiYgaXNCcmVha2Zhc3RFeGNsdWRlZCkge1xuICAgICAgICByZXR1cm4gcm9vbXM7XG4gICAgICB9IGVsc2UgaWYgKGlzQnJlYWtmYXN0SW5jbHVkZWQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAocmF0ZURlc2NyaXB0aW9uLm1hdGNoKGluY2x1ZGVkRXhwcmVzc2lvbikgfHwgcm9vbURlc2NyaXB0aW9uLm1hdGNoKGluY2x1ZGVkRXhwcmVzc2lvbikgfHwgcm9vbUdlbmVyYWxQb2xpY3k/Lm1hdGNoKGluY2x1ZGVkRXhwcmVzc2lvbikpICYmXG4gICAgICAgICAgKCFyYXRlRGVzY3JpcHRpb24ubWF0Y2goZXhjbHVkZWRFeHByZXNzaW9uKSAmJiAhcm9vbURlc2NyaXB0aW9uLm1hdGNoKGV4Y2x1ZGVkRXhwcmVzc2lvbikgICYmICFyb29tR2VuZXJhbFBvbGljeT8ubWF0Y2goZXhjbHVkZWRFeHByZXNzaW9uKSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNCcmVha2Zhc3RFeGNsdWRlZCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICghcmF0ZURlc2NyaXB0aW9uLm1hdGNoKGluY2x1ZGVkRXhwcmVzc2lvbikgfHwgcmF0ZURlc2NyaXB0aW9uLm1hdGNoKGV4Y2x1ZGVkRXhwcmVzc2lvbikpICYmXG4gICAgICAgICAgKCFyb29tRGVzY3JpcHRpb24ubWF0Y2goaW5jbHVkZWRFeHByZXNzaW9uKSB8fCByb29tRGVzY3JpcHRpb24ubWF0Y2goZXhjbHVkZWRFeHByZXNzaW9uKSkgJiZcbiAgICAgICAgICAoIXJvb21HZW5lcmFsUG9saWN5Lm1hdGNoKGluY2x1ZGVkRXhwcmVzc2lvbikgfHwgcm9vbUdlbmVyYWxQb2xpY3kubWF0Y2goZXhjbHVkZWRFeHByZXNzaW9uKSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoYnJlYWtmYXN0TWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS51cGRhdGVSb29tcyhob3RlbE9iamVjdFZhbHVlLCBicmVha2Zhc3RNYXRjaGVzKTtcbiAgICB9XG4gICAgcmV0dXJuICEhYnJlYWtmYXN0TWF0Y2hlcy5sZW5ndGg7XG4gIH1cblxuICBwcml2YXRlIHRyYXZlbFBvbGljeUZpbHRlcihob3RlbDogSG90ZWxEZXRhaWxzKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmZpbHRlcnMudHJhdmVsUG9saWN5Lmxlbmd0aCkgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBob3RlbE9iamVjdFZhbHVlID0gdGhpcy5nZXRIb3RlbE9iamVjdFZhbHVlKGhvdGVsKTtcbiAgICBpZiAoIWhvdGVsT2JqZWN0VmFsdWUgfHwgIWhvdGVsT2JqZWN0VmFsdWU/LnJvb21zKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCB0cmF2ZWxQb2xpY3lNYXRjaGVzID0gaG90ZWxPYmplY3RWYWx1ZS5yb29tcy5maWx0ZXIoKHJvb206IEhvdGVsUm9vbSkgPT4ge1xuICAgICAgY29uc3QgcmVxdWlyZXNSZWFzb24gPSByb29tLnVuYXZhaWxhYmxlID8gVHJhdmVsUG9saWNpZXMuVU5BVkFJTEFCTEUgOiByb29tLnJlcXVpcmVzUmVhc29uS2V5cz8ubGVuZ3RoID8gVHJhdmVsUG9saWNpZXMuQUxMT1dfV0lUSF9SRUFTT04gOiBUcmF2ZWxQb2xpY2llcy5JTl9QT0xJQ1k7XG5cbiAgICAgIHJldHVybiB0aGlzLmZpbHRlcnMudHJhdmVsUG9saWN5LmZpbmQoXG4gICAgICAgIHBvbGljeSA9PiBwb2xpY3kudG9Mb3dlckNhc2UoKSA9PT0gcmVxdWlyZXNSZWFzb24udG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICB9KTtcbiAgICBpZiAodHJhdmVsUG9saWN5TWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS51cGRhdGVSb29tcyhob3RlbE9iamVjdFZhbHVlLCB0cmF2ZWxQb2xpY3lNYXRjaGVzKTtcbiAgICB9XG4gICAgcmV0dXJuICEhdHJhdmVsUG9saWN5TWF0Y2hlcy5sZW5ndGg7XG4gIH1cblxuICBwcml2YXRlIGFjY2Vzc2libGVSb29tVHlwZUZpbHRlcihob3RlbDogSG90ZWxEZXRhaWxzKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmZpbHRlcnMuYWNjZXNzaWJsZVJvb21UeXBlLmxlbmd0aCkgcmV0dXJuIHRydWU7XG4gICAgY29uc3QgaG90ZWxPYmplY3RWYWx1ZSA9IHRoaXMuZ2V0SG90ZWxPYmplY3RWYWx1ZShob3RlbCk7XG4gICAgaWYgKCFob3RlbE9iamVjdFZhbHVlIHx8ICFob3RlbE9iamVjdFZhbHVlPy5yb29tcykgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgbWF0Y2hlcyA9IHRoaXMuZmlsdGVyUm9vbXNCeUFjY2Vzc2liaWxpdHkoaG90ZWxPYmplY3RWYWx1ZSk7XG4gICAgaWYgKG1hdGNoZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmF2YWxpYWJpbGl0eVNlcnZpY2UudXBkYXRlUm9vbXMoaG90ZWxPYmplY3RWYWx1ZSwgbWF0Y2hlcyk7XG4gICAgfVxuICAgIHJldHVybiAhIW1hdGNoZXMubGVuZ3RoO1xuICB9XG5cbiAgZmlsdGVyUm9vbXNCeUFjY2Vzc2liaWxpdHkoaG90ZWxPYmplY3RWYWx1ZTogSG90ZWxBdmFsaWJpbGl0eVF1b3RlUmVzdWx0KTogSG90ZWxSb29tW10ge1xuICAgIHJldHVybiAoaG90ZWxPYmplY3RWYWx1ZT8ucm9vbXMgfHwgW10pLmZpbHRlcihcbiAgICAgIChyb29tOiBIb3RlbFJvb20pID0+XG4gICAgICAgIHJvb20ucmF0ZURlc2NyaXB0aW9uLm1hdGNoKGluY2x1ZGVkQWNjZXNzaWJpbGl0eUV4cHJlc3Npb24pIHx8XG4gICAgICAgIHJvb20ucm9vbURlc2NyaXB0aW9uLm1hdGNoKGluY2x1ZGVkQWNjZXNzaWJpbGl0eUV4cHJlc3Npb24pIHx8XG4gICAgICAgIHJvb20ucm9vbVR5cGUubWF0Y2goaW5jbHVkZWRBY2Nlc3NpYmlsaXR5RXhwcmVzc2lvbilcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZ1bmRhYmxlUm9vbVR5cGVGaWx0ZXIoaG90ZWw6IEhvdGVsRGV0YWlscyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhvdGVsT2JqZWN0VmFsdWUgPSB0aGlzLmdldEhvdGVsT2JqZWN0VmFsdWUoaG90ZWwpO1xuXG4gICAgaWYgKCFob3RlbE9iamVjdFZhbHVlIHx8ICFob3RlbE9iamVjdFZhbHVlPy5yb29tcykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBpc1JlZnVuZGFibGVJbmNsdWRlZCA9IHRoaXMuZmlsdGVycy5yZWZ1bmRhYmxlUm9vbVR5cGUuaW5jbHVkZXMoU2VhcmNoSGFuZGxlci5SRUZVTkRBQkxFKTtcbiAgICBjb25zdCBpc1JlZnVuZGFibGVFeGNsdWRlZCA9IHRoaXMuZmlsdGVycy5yZWZ1bmRhYmxlUm9vbVR5cGUuaW5jbHVkZXMoXG4gICAgICBTZWFyY2hIYW5kbGVyLk5PTl9SRUZVTkRBQkxFXG4gICAgKTtcblxuICAgICAgY29uc3QgbWF0Y2hlcyA9IGhvdGVsT2JqZWN0VmFsdWUuZnVsbFJvb21zPyBob3RlbE9iamVjdFZhbHVlLmZ1bGxSb29tcy5maWx0ZXIoKHJvb21zOiBIb3RlbFJvb21XaXRoTG9jYWxQcmljZSkgPT4ge1xuICAgICAgICBpZiAoaXNSZWZ1bmRhYmxlSW5jbHVkZWQgJiYgaXNSZWZ1bmRhYmxlRXhjbHVkZWQpIHtcbiAgICAgICAgICByZXR1cm4gcm9vbXM7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNSZWZ1bmRhYmxlSW5jbHVkZWQpIHtcbiAgICAgICAgICByZXR1cm4gcm9vbXM/LnBvbGljaWVzLnJlZnVuZEF2YWlsYWJsZTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1JlZnVuZGFibGVFeGNsdWRlZCkge1xuICAgICAgICAgIHJldHVybiAhcm9vbXM/LnBvbGljaWVzLnJlZnVuZEF2YWlsYWJsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcm9vbXM7XG4gICAgICAgIH1cbiAgICAgIH0pIDogW107XG5cbiAgICAgIC8vIGFkZCBzb21ldGhpbmcgaGVyZSB0byBmaWx0ZXIgcm9vbXMgaWYgbWF0Y2hlcyBpcyA+IDBcbiAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmF2YWxpYWJpbGl0eVNlcnZpY2UudXBkYXRlUm9vbXMoaG90ZWxPYmplY3RWYWx1ZSwgbWF0Y2hlcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhIW1hdGNoZXMubGVuZ3RoO1xuICB9XG5cbiAgcHJpdmF0ZSByb29tVHlwZUZpbHRlcihob3RlbDogSG90ZWxEZXRhaWxzKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmZpbHRlcnMucm9vbVR5cGUubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBob3RlbE9iamVjdFZhbHVlID0gdGhpcy5nZXRIb3RlbE9iamVjdFZhbHVlKGhvdGVsKTtcbiAgICBpZiAoIWhvdGVsT2JqZWN0VmFsdWUgfHwgIWhvdGVsT2JqZWN0VmFsdWU/LnJvb21zKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGlzU2luZ2xlSW5jbHVkZWQgPSB0aGlzLmZpbHRlcnMucm9vbVR5cGUuaW5jbHVkZXMoUm9vbVR5cGUuU2luZ2xlUm9vbSk7XG4gICAgY29uc3QgaXNEb3VibGVJbmNsdWRlZCA9IHRoaXMuZmlsdGVycy5yb29tVHlwZS5pbmNsdWRlcyhSb29tVHlwZS5Eb3VibGVSb29tKTtcbiAgICBjb25zdCBpc1R3aW5JbmNsdWRlZCA9IHRoaXMuZmlsdGVycy5yb29tVHlwZS5pbmNsdWRlcyhSb29tVHlwZS5Ud2luUm9vbSk7XG4gICAgY29uc3QgaXNLaW5nSW5jbHVkZWQgPSB0aGlzLmZpbHRlcnMucm9vbVR5cGUuaW5jbHVkZXMoUm9vbVR5cGUuS2luZ1Jvb20pO1xuICAgIGNvbnN0IGlzU3VpdGVJbmNsdWRlZCA9IHRoaXMuZmlsdGVycy5yb29tVHlwZS5pbmNsdWRlcyhSb29tVHlwZS5TdWl0ZSk7XG4gICAgY29uc3QgaXNRdWVlbkluY2x1ZGVkID0gdGhpcy5maWx0ZXJzLnJvb21UeXBlLmluY2x1ZGVzKFJvb21UeXBlLlF1ZWVuUm9vbSk7XG5cbiAgICBjb25zdCBtYXRjaGVzID0gaG90ZWxPYmplY3RWYWx1ZS5yb29tcy5maWx0ZXIoKHJvb206IEhvdGVsUm9vbSkgPT4ge1xuICAgICAgLy8gd2UgbWVlZCB0byBjaGVjayB0aGUgcm9vbSB0eXBlIGFuZCBwdXQgaXQgaW50byBvbmUgb2YgdGhlIGNhdGVnb3J5cyBhYm92ZVxuICAgICAgY29uc3Qgcm9vbVR5cGU6IFJvb21UeXBlID0gdGhpcy5nZXRSb29tVHlwZShyb29tKTtcbiAgICAgIHJldHVybiByb29tVHlwZSA9PT0gUm9vbVR5cGUuU2luZ2xlUm9vbSAmJiBpc1NpbmdsZUluY2x1ZGVkIHx8XG4gICAgICAgIHJvb21UeXBlID09PSBSb29tVHlwZS5Eb3VibGVSb29tICYmIGlzRG91YmxlSW5jbHVkZWQgfHxcbiAgICAgICAgcm9vbVR5cGUgPT09IFJvb21UeXBlLlR3aW5Sb29tICYmIGlzVHdpbkluY2x1ZGVkIHx8XG4gICAgICAgIHJvb21UeXBlID09PSBSb29tVHlwZS5LaW5nUm9vbSAmJiBpc0tpbmdJbmNsdWRlZCB8fFxuICAgICAgICByb29tVHlwZSA9PT0gUm9vbVR5cGUuUXVlZW5Sb29tICYmIGlzUXVlZW5JbmNsdWRlZCB8fFxuICAgICAgICByb29tVHlwZSA9PT0gUm9vbVR5cGUuU3VpdGUgJiYgaXNTdWl0ZUluY2x1ZGVkO1xuICAgIH0pO1xuICAgIGlmIChtYXRjaGVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5hdmFsaWFiaWxpdHlTZXJ2aWNlLnVwZGF0ZVJvb21zKGhvdGVsT2JqZWN0VmFsdWUsIG1hdGNoZXMpO1xuICAgIH1cbiAgICByZXR1cm4gISFtYXRjaGVzLmxlbmd0aDtcbiAgfVxuICBnZXRSb29tVHlwZShyb29tOiBIb3RlbFJvb20pOiBSb29tVHlwZSB7XG4gICAgLy8gaGVyZSB1c2UgYSByZWdleCB0byBnZXQgdGhlIHJvb20gdHlwZVxuICAgIGlmIChyb29tLnJvb21UeXBlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3NpbmdsZScpKSB7XG4gICAgICByZXR1cm4gUm9vbVR5cGUuU2luZ2xlUm9vbTtcbiAgICB9XG4gICAgaWYgKHJvb20ucm9vbVR5cGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZG91YmxlJykpIHtcbiAgICAgIHJldHVybiBSb29tVHlwZS5Eb3VibGVSb29tO1xuICAgIH1cbiAgICBpZiAocm9vbS5yb29tVHlwZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCd0d2luJykgfHwgcm9vbS5yb29tVHlwZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdzdGFuZGFyZCcpKSB7XG4gICAgICByZXR1cm4gUm9vbVR5cGUuVHdpblJvb207XG4gICAgfVxuICAgIGlmIChyb29tLnJvb21UeXBlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2tpbmcnKSkge1xuICAgICAgcmV0dXJuIFJvb21UeXBlLktpbmdSb29tO1xuICAgIH1cbiAgICBpZiAocm9vbS5yb29tVHlwZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdxdWVlbicpKSB7XG4gICAgICByZXR1cm4gUm9vbVR5cGUuUXVlZW5Sb29tO1xuICAgIH1cbiAgICBpZiAocm9vbS5yb29tVHlwZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdzdWl0ZScpIHx8IHJvb20ucm9vbVR5cGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZmFtaWx5JykpIHtcbiAgICAgIHJldHVybiBSb29tVHlwZS5TdWl0ZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBnZXRIb3RlbE9iamVjdFZhbHVlKGhvdGVsOiBIb3RlbERldGFpbHMpOiBIb3RlbEF2YWxpYmlsaXR5UXVvdGVSZXN1bHQge1xuICAgIGNvbnN0IGhvdGVsT2JqZWN0ID0gdGhpcy5hdmFsaWFiaWxpdHlTZXJ2aWNlLmdldEF2YWlsYWJpbGl0eUZvcklkKFxuICAgICAgdGhpcy5tYWtlSG90ZWxBdmFsaWxpdHlPYmplY3QoaG90ZWwpLFxuICAgICAgaG90ZWxcbiAgICApO1xuICAgIHJldHVybiAhaG90ZWxPYmplY3QgJiYgIWhvdGVsT2JqZWN0LnZhbHVlID8gbnVsbCA6IGhvdGVsT2JqZWN0LnZhbHVlO1xuICB9XG5cbiAgYnlNb3N0RXhwZW5zaXZlKCkge1xuICAgIHRoaXMuc29ydEJ5UHJpY2UoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbWluXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZGVidWcgc2V0IHRoaXMgdG8gdHJ1ZSB0byBvdXRwdXQgY29uc29sZSBsb2dzXG4gICAqIEBkZXNjcmlwdGlvbiBzb3J0cyByZXN1bHRzIGJ5IHByaWNlIGFjY29yZGluZyB0byB0aGUgJ21pbicgcGFyYW1hdGVyLiBtaW4gPSB0cnVlIChsb3dlc3QgcHJpY2UgZmlyc3QpLCBtaW4gPSBmYWxzZSAoaGlnaGVzdCBwcmljZSBmaXJzdClcbiAgICogSW4gc3VtbWFyeSwgdGhpcyBtZXRob2QgY3JlYXRlcyBhIHNvcnRlZCBhcnJheSBvZiBob3RlbHMgd2l0aCBwcmljZXMgYW5kIGFuIGFycmF5IG9mIGhvdGVscyBXSVRIT1VUIHByaWNlcyxcbiAgICogdGhlbiBmaW5hbGx5IGpvaW5zIHRoZXNlIDIgdGVtcG9yYXJ5IGFycmF5cyB0b2dldGhlciBiZWZvcmUgdHJpZ2dlcmluZyB0aGUgbmV4dCBvYnNlcnZhYmxlLlxuICAgKi9cblxuICBzb3J0QnlQcmljZShtaW4gPSB0cnVlLCBkZWJ1ZyA9IHRydWUpOiB2b2lkIHtcbiAgICAvLyBzdG9yZSBhbGwgcmVzdWx0c1xuICAgIGNvbnN0IGhvdGVsczogSG90ZWxEZXRhaWxzQXJyYXkgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5yZXN1bHRzLnZhbHVlKTtcblxuICAgIC8vIGdldCBob3RlbHMgd2l0aCBhbmQgd2l0aG91dCBwcmljZXNcbiAgICBjb25zdCBob3RlbHNXaXRoUHJpY2VzOiBIb3RlbERldGFpbHNBcnJheSA9IFtdO1xuICAgIGNvbnN0IGhvdGVsc1dpdGhvdXRQcmljZXM6IEhvdGVsRGV0YWlsc0FycmF5ID0gW107XG4gICAgaG90ZWxzLmZvckVhY2goaG90ZWxSZXN1bHQgPT5cbiAgICAgIHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5nZXRBdmFpbGFiaWxpdHlWYWx1ZShob3RlbFJlc3VsdCk/LnBycG5cbiAgICAgICAgPyBob3RlbHNXaXRoUHJpY2VzLnB1c2goaG90ZWxSZXN1bHQpXG4gICAgICAgIDogaG90ZWxzV2l0aG91dFByaWNlcy5wdXNoKGhvdGVsUmVzdWx0KVxuICAgICk7XG5cbiAgICAvLyBzb3J0IGhvdGVscyB3aXRoIHByaWNlcyBhY2NvcmRpbmcgdG8gdGhlICdtaW4nIHBhcmFtZXRlciBmb3IgdGhlIG9yZGVyXG4gICAgaG90ZWxzV2l0aFByaWNlcy5zb3J0KChmaXJzdDogSG90ZWxEZXRhaWxzLCBzZWNvbmQ6IEhvdGVsRGV0YWlscykgPT4ge1xuICAgICAgY29uc3QgZmlyc3RQcmljZSA9IHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5nZXRBdmFpbGFiaWxpdHlWYWx1ZShmaXJzdCk/LnBycG47XG4gICAgICBjb25zdCBzZWNvbmRQcmljZSA9IHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5nZXRBdmFpbGFiaWxpdHlWYWx1ZShzZWNvbmQpPy5wcnBuO1xuICAgICAgcmV0dXJuIG1pblxuICAgICAgICA/IGZpcnN0UHJpY2UgPiBzZWNvbmRQcmljZVxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogc2Vjb25kUHJpY2UgPiBmaXJzdFByaWNlXG4gICAgICAgICAgICA/IC0xXG4gICAgICAgICAgICA6IDBcbiAgICAgICAgOiBmaXJzdFByaWNlIDwgc2Vjb25kUHJpY2VcbiAgICAgICAgICA/IDFcbiAgICAgICAgICA6IHNlY29uZFByaWNlIDwgZmlyc3RQcmljZVxuICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgOiAwO1xuICAgIH0pO1xuXG4gICAgLy8gam9pbiBob3RlbHMgd2l0aCBwcmljZXMgdG8gaG90ZWxzIFdJVEhPVVQgcHJpY2VzXG4gICAgY29uc3Qgc29ydGVkSG90ZWxzID0gWy4uLmhvdGVsc1dpdGhQcmljZXMsIC4uLmhvdGVsc1dpdGhvdXRQcmljZXNdO1xuICAgIC8vIHRyaWdnZXIgbmV4dCBvYnNlcnZhYmxlXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoc29ydGVkSG90ZWxzKTtcbiAgICAvLyBkaXNwbGF5IGNvbnNvbGUgbG9ncyBpZiBkZWJ1ZyBpcyB0cnVlIChjb3VsZCBwcm92ZSB1c2VmdWwgaW4gZnV0dXJlKVxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgY29uc29sZS5sb2coJysrIHNvcnRCeVByaWNlKCkgY2FsbGVkICsrJyk7XG4gICAgICBjb25zb2xlLmxvZygnKysgaG90ZWwgKysnLCBob3RlbHMpO1xuICAgICAgY29uc29sZS5sb2coJysrIGhvdGVsc1dpdGhQcmljZXMgKysnLCBob3RlbHNXaXRoUHJpY2VzKTtcbiAgICAgIGNvbnNvbGUubG9nKCcrKyBob3RlbHNXaXRob3V0UHJpY2VzICsrJywgaG90ZWxzV2l0aG91dFByaWNlcyk7XG4gICAgICBjb25zb2xlLmxvZygnKysgc29ydGVkSG90ZWxzICsrJywgc29ydGVkSG90ZWxzKTtcbiAgICB9XG4gIH1cblxuICBzb3J0QnlOYW1lKCk6IHZvaWQge1xuXG4gICAgbGV0IHJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5yZXN1bHRzLnZhbHVlKTtcbiAgICBjb25zdCByZXN1bHRzV2l0aG91dFJhdGVzID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdHMpLmZpbHRlcihyZXN1bHQgPT4gIXJlc3VsdC5hdmFpbGFibGVSYXRlcz8ubWlucHJpY2UpO1xuICAgIGNvbnN0IHJlc3VsdHNSYXRlcyA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzKS5maWx0ZXIocmVzdWx0ID0+IHJlc3VsdC5hdmFpbGFibGVSYXRlcz8ubWlucHJpY2UpO1xuICAgIHJlc3VsdHMgPSByZXN1bHRzUmF0ZXM7XG5cbiAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KChmc3Q6IEhvdGVsRGV0YWlscywgc25kOiBIb3RlbERldGFpbHMpOiBudW1iZXIgPT4ge1xuICAgICAgcmV0dXJuIGZzdC5uYW1lLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShzbmQubmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9KVxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMuY29uY2F0KHJlc3VsdHNXaXRob3V0UmF0ZXMpKTtcbiAgfVxuXG4gIHNvcnRCeURpc3RhbmNlKCk6IHZvaWQge1xuICAgIC8vIGNvbnNvbGUubG9nKCcrKysgU29ydGluZyBieSBkaXN0YW5jZSArKysnKTtcbiAgICBsZXQgcmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLnJlc3VsdHMudmFsdWUpO1xuICAgIGNvbnN0IHJlc3VsdHNXaXRob3V0UmF0ZXMgPSB0aGlzLmhlbHBlcnMuY2xvbmUocmVzdWx0cykuZmlsdGVyKHJlc3VsdCA9PiAhcmVzdWx0LmF2YWlsYWJsZVJhdGVzPy5taW5wcmljZSk7XG4gICAgY29uc3QgcmVzdWx0c1JhdGVzID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdHMpLmZpbHRlcihyZXN1bHQgPT4gcmVzdWx0LmF2YWlsYWJsZVJhdGVzPy5taW5wcmljZSk7XG4gICAgcmVzdWx0cyA9IHJlc3VsdHNSYXRlcztcbiAgICB0cnkge1xuICAgICAgLy8gU3BsaXQgcmVzdWx0cyBpbnRvIHByZWZlcnJlZCBhbmQgbm9uLXByZWZlcnJlZCBob3RlbHNcbiAgICAgIGNvbnN0IGNsaWVudFByZWZlcnJlZEhvdGVscyA9IHJlc3VsdHMuZmlsdGVyKChob3RlbDogSG90ZWxEZXRhaWxzKSA9PlxuICAgICAgICB0aGlzLnByZWZlcnJlZFRvSW50KGhvdGVsLCBIb3RlbFNvcnRPcmRlci5DbGllbnRQcmVmZXJyZWQpID4gMFxuICAgICAgKTtcblxuICAgICAgY29uc3QgYWdlbmN5UHJlZmVycmVkSG90ZWxzID0gcmVzdWx0cy5maWx0ZXIoKGhvdGVsOiBIb3RlbERldGFpbHMpID0+XG4gICAgICAgIHRoaXMucHJlZmVycmVkVG9JbnQoaG90ZWwsIEhvdGVsU29ydE9yZGVyLkNsaWVudFByZWZlcnJlZCkgPT09IDAgJiZcbiAgICAgICAgdGhpcy5wcmVmZXJyZWRUb0ludChob3RlbCwgSG90ZWxTb3J0T3JkZXIuQWdlbmN5UHJlZmVycmVkKSA+IDBcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IG5vblByZWZlcnJlZEhvdGVscyA9IHJlc3VsdHMuZmlsdGVyKChob3RlbDogSG90ZWxEZXRhaWxzKSA9PlxuICAgICAgICB0aGlzLnByZWZlcnJlZFRvSW50KGhvdGVsLCBIb3RlbFNvcnRPcmRlci5BZ2VuY3lQcmVmZXJyZWQpID09PSAwICYmXG4gICAgICAgIHRoaXMucHJlZmVycmVkVG9JbnQoaG90ZWwsIEhvdGVsU29ydE9yZGVyLkNsaWVudFByZWZlcnJlZCkgPT09IDBcbiAgICAgICk7XG5cbiAgICAgICAvLyBTb3J0IGFsbCB0aHJlZSBncm91cHMgYnkgZGlzdGFuY2VcbiAgICAgIGNsaWVudFByZWZlcnJlZEhvdGVscy5zb3J0KChhOiBIb3RlbERldGFpbHMsIGI6IEhvdGVsRGV0YWlscykgPT5cbiAgICAgICAgTnVtYmVyKGEubG9jYXRpb24uZGlzdGFuY2UpIC0gTnVtYmVyKGIubG9jYXRpb24uZGlzdGFuY2UpXG4gICAgICApO1xuXG4gICAgICBhZ2VuY3lQcmVmZXJyZWRIb3RlbHMuc29ydCgoYTogSG90ZWxEZXRhaWxzLCBiOiBIb3RlbERldGFpbHMpID0+XG4gICAgICAgIE51bWJlcihhLmxvY2F0aW9uLmRpc3RhbmNlKSAtIE51bWJlcihiLmxvY2F0aW9uLmRpc3RhbmNlKVxuICAgICAgKTtcblxuICAgICAgbm9uUHJlZmVycmVkSG90ZWxzLnNvcnQoKGE6IEhvdGVsRGV0YWlscywgYjogSG90ZWxEZXRhaWxzKSA9PlxuICAgICAgICBOdW1iZXIoYS5sb2NhdGlvbi5kaXN0YW5jZSkgLSBOdW1iZXIoYi5sb2NhdGlvbi5kaXN0YW5jZSlcbiAgICAgICk7XG5cbiAgICAgIC8vIENvbWJpbmUgc29ydGVkIHByZWZlcnJlZCwgbm9uLXByZWZlcnJlZCBob3RlbHMsIGFuZCB0aG9zZSB3aXRob3V0IHJhdGVzXG4gICAgICByZXN1bHRzID0gWy4uLmNsaWVudFByZWZlcnJlZEhvdGVscywgLi4uYWdlbmN5UHJlZmVycmVkSG90ZWxzLCAuLi5ub25QcmVmZXJyZWRIb3RlbHMsIC4uLnJlc3VsdHNXaXRob3V0UmF0ZXNdO1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJysrKyBFcnJvciBzb3J0aW5nIGJ5IHByZWZlcnJlZDogJywgZXJyb3IsICcgKysrJyk7XG4gICAgfVxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xuICB9XG5cbiAgc29ydEJ5RGlzdGFuY2VTY2lvbigpOiB2b2lkIHtcbiAgICBsZXQgcmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLnJlc3VsdHMudmFsdWUpO1xuICAgIGNvbnN0IHJlc3VsdHNSYXRlcyA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzKS5maWx0ZXIocmVzdWx0ID0+IHJlc3VsdC5hdmFpbGFibGVSYXRlcz8ubWlucHJpY2UpO1xuICAgIHJlc3VsdHMgPSByZXN1bHRzUmF0ZXM7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdHMuc29ydCgoYTogSG90ZWxEZXRhaWxzLCBiOiBIb3RlbERldGFpbHMpID0+XG4gICAgICAgIE51bWJlcihhLmxvY2F0aW9uLmRpc3RhbmNlKSAtIE51bWJlcihiLmxvY2F0aW9uLmRpc3RhbmNlKVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignKysrIEVycm9yIHNvcnRpbmcgYnkgZGlzdGFuY2Ugc2Npb246ICcsIGVycm9yLCAnICsrKycpO1xuICAgIH1cbiAgICB0aGlzLnJlc3VsdHMubmV4dChyZXN1bHRzKTtcbiAgfVxuXG4gIHNvcnRCeURpc3RhbmNlUmV2ZXJzZSgpOiB2b2lkIHtcbiAgICBsZXQgcmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLnJlc3VsdHMudmFsdWUpO1xuICAgIGNvbnN0IHJlc3VsdHNSYXRlcyA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzKS5maWx0ZXIocmVzdWx0ID0+IHJlc3VsdC5hdmFpbGFibGVSYXRlcz8ubWlucHJpY2UpO1xuICAgIHJlc3VsdHMgPSByZXN1bHRzUmF0ZXM7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdHMuc29ydCgoYTogSG90ZWxEZXRhaWxzLCBiOiBIb3RlbERldGFpbHMpID0+XG4gICAgICAgIE51bWJlcihiLmxvY2F0aW9uLmRpc3RhbmNlKSAtIE51bWJlcihhLmxvY2F0aW9uLmRpc3RhbmNlKVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignKysrIEVycm9yIHNvcnRpbmcgYnkgZGlzdGFuY2UgcmV2ZXJzZTogJywgZXJyb3IsICcgKysrJyk7XG4gICAgfVxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xuICB9XG5cbiAgYnlQcmVmZXJyZWQoKTogdm9pZCB7XG4gICAgbGV0IHJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5yZXN1bHRzLnZhbHVlKTtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydCgoYTogSG90ZWxEZXRhaWxzLCBiOiBIb3RlbERldGFpbHMpID0+IHtcbiAgICAgICAgLy9JZiBwcmVmZXJyZWQgdmFsdWVzIGRvIG5vdCBoYXZlIHRoYXQgc2FtZSB3ZWlnaHQgdGhlbiBzb3J0IGJ5IHByZWZlcnJlZFxuICAgICAgICBpZiAodGhpcy5wcmVmZXJyZWRUb0ludChiKSAtIHRoaXMucHJlZmVycmVkVG9JbnQoYSkgIT09IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wcmVmZXJyZWRUb0ludChiKSAtIHRoaXMucHJlZmVycmVkVG9JbnQoYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy9JZiB0aGV5IGRvLCB0aGVuIHNvcnQgYnkgY2hlYXBlc3QgLSBtb3N0IGV4cGVuc2l2ZVxuICAgICAgICAgIGNvbnN0IGZpcnN0UHJpY2UgPSB0aGlzLmF2YWxpYWJpbGl0eVNlcnZpY2UuZ2V0QXZhaWxhYmlsaXR5VmFsdWUoYSk/LnBycG5cbiAgICAgICAgICAgID8gdGhpcy5hdmFsaWFiaWxpdHlTZXJ2aWNlLmdldEF2YWlsYWJpbGl0eVZhbHVlKGEpPy5wcnBuXG4gICAgICAgICAgICA6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICAgICAgICAgIGNvbnN0IHNlY29uZFByaWNlID0gdGhpcy5hdmFsaWFiaWxpdHlTZXJ2aWNlLmdldEF2YWlsYWJpbGl0eVZhbHVlKGIpPy5wcnBuXG4gICAgICAgICAgICA/IHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5nZXRBdmFpbGFiaWxpdHlWYWx1ZShiKT8ucHJwblxuICAgICAgICAgICAgOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICAgICAgICByZXR1cm4gZmlyc3RQcmljZSA+IHNlY29uZFByaWNlID8gMSA6IHNlY29uZFByaWNlID4gZmlyc3RQcmljZSA/IC0xIDogMDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJysrKyBFcnJvciBzb3J0aW5nIGJ5IHByZWZlcnJlZDogJywgZXJyb3IsICcgKysrJyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cyk7XG4gIH1cblxuICBieVVJUHJlZmVycmVkKHByZWZlcnJlZFR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5yZXN1bHRzLnZhbHVlKTtcbiAgICByZXN1bHRzLnNvcnQoKGE6IEhvdGVsRGV0YWlscywgYjogSG90ZWxEZXRhaWxzKSA9PiB7XG4gICAgICAvL0lmIHRoZXkgZG8sIHRoZW4gc29ydCBieSBjaGVhcGVzdCAtIG1vc3QgZXhwZW5zaXZlXG4gICAgICBjb25zdCBmaXJzdFByaWNlID0gdGhpcy5hdmFsaWFiaWxpdHlTZXJ2aWNlLmdldEF2YWlsYWJpbGl0eVZhbHVlKGEpPy5wcnBuXG4gICAgICAgID8gdGhpcy5hdmFsaWFiaWxpdHlTZXJ2aWNlLmdldEF2YWlsYWJpbGl0eVZhbHVlKGEpPy5wcnBuXG4gICAgICAgIDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgICBjb25zdCBzZWNvbmRQcmljZSA9IHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5nZXRBdmFpbGFiaWxpdHlWYWx1ZShiKT8ucHJwblxuICAgICAgICA/IHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5nZXRBdmFpbGFiaWxpdHlWYWx1ZShiKT8ucHJwblxuICAgICAgICA6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICAgICAgcmV0dXJuIGZpcnN0UHJpY2UgPiBzZWNvbmRQcmljZSA/IDEgOiBzZWNvbmRQcmljZSA+IGZpcnN0UHJpY2UgPyAtMSA6IDA7XG4gICAgfSk7XG4gICAgaWYgKHByZWZlcnJlZFR5cGUgPT09IEhvdGVsU29ydE9yZGVyLkFnZW5jeVByZWZlcnJlZCkge1xuICAgICAgcmVzdWx0c1xuICAgICAgICAuc29ydChcbiAgICAgICAgICAoYTogSG90ZWxEZXRhaWxzLCBiOiBIb3RlbERldGFpbHMpID0+XG4gICAgICAgICAgICB0aGlzLnByZWZlcnJlZFRvSW50KGIsIEhvdGVsU29ydE9yZGVyLkNsaWVudFByZWZlcnJlZCkgLVxuICAgICAgICAgICAgdGhpcy5wcmVmZXJyZWRUb0ludChhLCBIb3RlbFNvcnRPcmRlci5DbGllbnRQcmVmZXJyZWQpXG4gICAgICAgIClcbiAgICAgICAgLnNvcnQoXG4gICAgICAgICAgKGE6IEhvdGVsRGV0YWlscywgYjogSG90ZWxEZXRhaWxzKSA9PlxuICAgICAgICAgICAgdGhpcy5wcmVmZXJyZWRUb0ludChiLCBIb3RlbFNvcnRPcmRlci5BZ2VuY3lQcmVmZXJyZWQpIC1cbiAgICAgICAgICAgIHRoaXMucHJlZmVycmVkVG9JbnQoYSwgSG90ZWxTb3J0T3JkZXIuQWdlbmN5UHJlZmVycmVkKVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRzXG4gICAgICAgIC5zb3J0KFxuICAgICAgICAgIChhOiBIb3RlbERldGFpbHMsIGI6IEhvdGVsRGV0YWlscykgPT5cbiAgICAgICAgICAgIHRoaXMucHJlZmVycmVkVG9JbnQoYiwgSG90ZWxTb3J0T3JkZXIuQWdlbmN5UHJlZmVycmVkKSAtXG4gICAgICAgICAgICB0aGlzLnByZWZlcnJlZFRvSW50KGEsIEhvdGVsU29ydE9yZGVyLkFnZW5jeVByZWZlcnJlZClcbiAgICAgICAgKVxuICAgICAgICAuc29ydChcbiAgICAgICAgICAoYTogSG90ZWxEZXRhaWxzLCBiOiBIb3RlbERldGFpbHMpID0+XG4gICAgICAgICAgICB0aGlzLnByZWZlcnJlZFRvSW50KGIsIEhvdGVsU29ydE9yZGVyLkNsaWVudFByZWZlcnJlZCkgLVxuICAgICAgICAgICAgdGhpcy5wcmVmZXJyZWRUb0ludChhLCBIb3RlbFNvcnRPcmRlci5DbGllbnRQcmVmZXJyZWQpXG4gICAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVmZXJyZWRUb0ludChob3RlbDogSG90ZWxEZXRhaWxzLCBwcmVmZXJyZWRUeXBlOiBzdHJpbmcgPSBudWxsKTogbnVtYmVyIHtcbiAgICBjb25zdCBhZ2VuY3lTb3J0ID0gaG90ZWwucHJlZmVycmVkLmNvbnN1bWVyID8gIGhvdGVsLnByZWZlcnJlZC5jb25zdW1lclByaW9yaXR5ID8gdGhpcy5oZWxwZXJzLmZsaXBOdW1iZXJzRm9yUHJlZmVycmVkKGhvdGVsLnByZWZlcnJlZC5jb25zdW1lclByaW9yaXR5KSA6IEFHRU5UX1BSRUZFUlJFRF9WQUxVRSA6IDA7XG4gICAgY29uc3QgY2xpZW50U29ydCA9IGhvdGVsLnByZWZlcnJlZC5jbGllbnQgPyBob3RlbC5wcmVmZXJyZWQuY2xpZW50UHJpb3JpdHkgPyB0aGlzLmhlbHBlcnMuZmxpcE51bWJlcnNGb3JQcmVmZXJyZWQoaG90ZWwucHJlZmVycmVkLmNsaWVudFByaW9yaXR5KSA6IENMSUVOVF9QUkVGRVJSRURfVkFMVUUgOiAwO1xuICAgIHN3aXRjaChwcmVmZXJyZWRUeXBlKXtcbiAgICAgIGNhc2UgSG90ZWxTb3J0T3JkZXIuQWdlbmN5UHJlZmVycmVkOlxuICAgICAgICByZXR1cm4gYWdlbmN5U29ydDtcbiAgICAgIGNhc2UgSG90ZWxTb3J0T3JkZXIuQ2xpZW50UHJlZmVycmVkOlxuICAgICAgICByZXR1cm4gY2xpZW50U29ydDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY2xpZW50U29ydHx8IGFnZW5jeVNvcnRcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXJSYXRpbmdGaWx0ZXIoaG90ZWw6IEhvdGVsRGV0YWlscyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRvY2hlY2sgPSAodGhpcy5maWx0ZXJzLnN0YXJSYXRpbmcgfHwgW10pLm1hcCgoc3RhclJhdGluZzogc3RyaW5nKTogbnVtYmVyID0+IHtcbiAgICAgIHN3aXRjaChzdGFyUmF0aW5nKSB7XG4gICAgICAgIGNhc2UgU3RhclJhdGluZy5VbnJhdGVkOlxuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgY2FzZSBTdGFyUmF0aW5nLlR3b1N0YXI6XG4gICAgICAgICAgcmV0dXJuIDI7XG4gICAgICAgIGNhc2UgU3RhclJhdGluZy5UaHJlZVN0YXI6XG4gICAgICAgICAgcmV0dXJuIDM7XG4gICAgICAgIGNhc2UgU3RhclJhdGluZy5Gb3VyU3RhcjpcbiAgICAgICAgICByZXR1cm4gNDtcbiAgICAgICAgY2FzZSBTdGFyUmF0aW5nLkZpdmVTdGFyOlxuICAgICAgICAgIHJldHVybiA1O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0b2NoZWNrICYmIHRvY2hlY2subGVuZ3RoXG4gICAgICA/ICEhdG9jaGVjay5maW5kKChzdGFyUmF0aW5nOiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHN0YXJSYXRpbmcgPT09IGhvdGVsLnN0YXJzIHx8IChzdGFyUmF0aW5nID09PSAtMSAmJiAhaG90ZWwuc3RhcnMpO1xuICAgICAgfSlcbiAgICAgIDogdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgY3VzdG9tZXJSYXRpbmdGaWx0ZXIoaG90ZWw6IEhvdGVsRGV0YWlscyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJhdGluZzogbnVtYmVyID0gdGhpcy5ob3RlbHNSYXRpbmdzPy5ob3RlbHMuZmluZCgoaG90ZWxSYXRpbmdzKSA9PiBob3RlbFJhdGluZ3M/LmhvdGVsTmFtZS50b0xvd2VyQ2FzZSgpID09PSBob3RlbD8ubmFtZS50b0xvd2VyQ2FzZSgpKT8ucmF0aW5nO1xuICAgIGNvbnN0IHRvY2hlY2sgPSAodGhpcy5maWx0ZXJzLmN1c3RvbWVyUmF0aW5nIHx8IFtdKS5tYXAoKGN1c3RvbWVyUmF0aW5nOiBzdHJpbmcpOiBudW1iZXIgPT4ge1xuICAgICAgc3dpdGNoKGN1c3RvbWVyUmF0aW5nKSB7XG4gICAgICAgIGNhc2UgQ3VzdG9tZXJSYXRpbmcuVW5yYXRlZDpcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIGNhc2UgQ3VzdG9tZXJSYXRpbmcuT25lU3RhcjpcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgY2FzZSBDdXN0b21lclJhdGluZy5Ud29TdGFyOlxuICAgICAgICAgIHJldHVybiAyO1xuICAgICAgICBjYXNlIEN1c3RvbWVyUmF0aW5nLlRocmVlU3RhcjpcbiAgICAgICAgICByZXR1cm4gMztcbiAgICAgICAgY2FzZSBDdXN0b21lclJhdGluZy5Gb3VyU3RhcjpcbiAgICAgICAgICByZXR1cm4gNDtcbiAgICAgICAgY2FzZSBDdXN0b21lclJhdGluZy5GaXZlU3RhcjpcbiAgICAgICAgICByZXR1cm4gNTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0b2NoZWNrICYmIHRvY2hlY2subGVuZ3RoXG4gICAgICA/ICEhdG9jaGVjay5maW5kKChjdXN0b21lclJhdGluZzogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGN1c3RvbWVyUmF0aW5nID09PSByYXRpbmcgfHwgKGN1c3RvbWVyUmF0aW5nID09PSAtMSAmJiAhcmF0aW5nKTtcbiAgICAgICAgfSlcbiAgICAgIDogdHJ1ZTtcbiAgfVxuXG4gIHdpdGhpblN0YXJSYXRpbmdVaUNvbmZpZyhob3RlbDogSG90ZWxEZXRhaWxzKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVzdWx0c0NvbmZpZyA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0PEhvdGVsVUlTdGFyc1VzZXJGYXZvcml0ZVJlc3BvbnNlPihVc2VyRmF2b3J1cml0ZS5ob3RlbFByZWZlcnJlZEltYWdlKTtcbiAgICBpZiAocmVzdWx0c0NvbmZpZz8uaG90ZWxTdGFyc1RvSGlkZSAmJiBob3RlbC5zb3VyY2UgPT09IFNlcnZpY2VQcm92aWRlci5TYWJyZUNTTCAmJiBob3RlbC5zdGFycykge1xuICAgICAgaWYgKHJlc3VsdHNDb25maWcuaG90ZWxTdGFyc1RvSGlkZS5oaWRlT25lU3RhckhvdGVscyAmJiBob3RlbC5zdGFycyA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdHNDb25maWcuaG90ZWxTdGFyc1RvSGlkZS5oaWRlVHdvU3RhckhvdGVscyAmJiBob3RlbC5zdGFycyA9PT0gMikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdHNDb25maWcuaG90ZWxTdGFyc1RvSGlkZS5oaWRlVGhyZWVTdGFySG90ZWxzICYmIGhvdGVsLnN0YXJzID09PSAzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0c0NvbmZpZy5ob3RlbFN0YXJzVG9IaWRlLmhpZGVGb3VyU3RhckhvdGVscyAmJiBob3RlbC5zdGFycyA9PT0gNCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdHNDb25maWcuaG90ZWxTdGFyc1RvSGlkZS5oaWRlRml2ZVN0YXJIb3RlbHMgJiYgaG90ZWwuc3RhcnMgPT09IDUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy9ubyBzdGFyIHJhdGluZyBzbyB1bmFmZmVjdGVkXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBhZGRGaWx0ZXIoZmlsdGVyOiBzdHJpbmcsIHR5cGU6IGtleW9mIEhvdGVsRmlsdGVycyk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHQ6IEhvdGVsRmlsdGVycyA9IHRoaXMubG9jYWxGaWx0ZXJzO1xuICAgICg8c3RyaW5nW10+ZmlsdFt0eXBlXSkucHVzaChmaWx0ZXIpO1xuICB9XG5cbiAgcmVtb3ZlRmlsdGVyKGZpbHRlcjogc3RyaW5nLCB0eXBlOiBrZXlvZiBIb3RlbEZpbHRlcnMpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ID0gdGhpcy5sb2NhbEZpbHRlcnM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdFt0eXBlXSkpIHtcbiAgICAgIChmaWx0W3R5cGVdIGFzIHN0cmluZ1tdKSA9IChmaWx0W3R5cGVdIGFzIHN0cmluZ1tdKS5maWx0ZXIoKGNoYWluOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpbHRlciAhPT0gY2hhaW47XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXNldEZpbHRlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbEZpbHRlcnMuY2hhaW4gPSBbXTtcbiAgICB0aGlzLmxvY2FsRmlsdGVycy5hbWVuaXR5dHlwZSA9IFtdO1xuICAgIHRoaXMubG9jYWxGaWx0ZXJzLnByZWZlcnJlZCA9IFtdO1xuICAgIHRoaXMubG9jYWxGaWx0ZXJzLmV4dHJhID0gW107XG4gICAgdGhpcy5sb2NhbEZpbHRlcnMuaG90ZWxOYW1lID0gJyc7XG4gICAgdGhpcy5sb2NhbEZpbHRlcnMuYnJlYWtmYXN0VHlwZSA9IFtdO1xuICAgIHRoaXMubG9jYWxGaWx0ZXJzLnJlZnVuZGFibGVSb29tVHlwZSA9IFtdO1xuICAgIHRoaXMubG9jYWxGaWx0ZXJzLnRyYXZlbFBvbGljeSA9IFtdO1xuICAgIHRoaXMubG9jYWxGaWx0ZXJzLmFjY2Vzc2libGVSb29tVHlwZSA9IFtdO1xuICAgIHRoaXMubG9jYWxGaWx0ZXJzLnJvb21UeXBlID0gW107XG4gICAgdGhpcy5sb2NhbEZpbHRlcnMuc3RhclJhdGluZyA9IFtdO1xuICAgIHRoaXMubG9jYWxGaWx0ZXJzLmN1c3RvbWVyUmF0aW5nID0gW107XG4gIH1cblxuICB1cGRhdGVTZWFyY2hGcm9tRXhwaXJlZEJhc2tldEl0ZW0oYmFza2V0SXRlbTogQmFza2V0SXRlbSwgc2V0RGF0ZVRpbWU6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgY29uc3Qgc2VhcmNoSG90ZWxRdWVyeTogU2VhcmNoSG90ZWxzUXVlcnlWYXJpYWJsZXMgPSBiYXNrZXRJdGVtLnNlYXJjaFF1ZXJ5O1xuICAgIGlmIChzZWFyY2hIb3RlbFF1ZXJ5KSB7XG4gICAgICBpZiAoc2V0RGF0ZVRpbWUpIHtcbiAgICAgICAgdGhpcy5jaGVja2luX2RhdGUgPSBtb21lbnQoc2VhcmNoSG90ZWxRdWVyeS5zdGFydERhdGUpO1xuICAgICAgICB0aGlzLmNoZWNrb3V0X2RhdGUgPSBtb21lbnQoc2VhcmNoSG90ZWxRdWVyeS5lbmREYXRlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0UXVlcnlGcm9tQmFza2V0SXRlbShiYXNrZXRJdGVtKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZFRyYXZlbGxlcnNGcm9tQmFza2V0SXRlbShiYXNrZXRJdGVtKTtcbiAgfVxuXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKHByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT4pOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnUFJFUE9QVUxBVElORyBIT1RFTCBGT1JNJyk7XG4gICAgY29uc29sZS5sb2coJ3ByZXZpb3VzSXRlbXMnLHByZXZpb3VzSXRlbXMpO1xuICAgIGNvbnN0IGZsaWdodEl0ZW06IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID1cbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuRmxpZ2h0XT8uc2VhcmNoUXVlcnk7XG4gICAgY29uc3QgcmFpbEl0ZW06IFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlcyA9IHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuUmFpbF0/LnNlYXJjaFF1ZXJ5O1xuICAgIGNvbnN0IGlybEl0ZW06IFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzID1cbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWxdPy5zZWFyY2hRdWVyeTtcbiAgICBjb25zdCBldXJvc3Rhckl0ZW06IFNlYXJjaEV1cm9zdGFyUXVlcnlWYXJpYWJsZXMgPVxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5FdXJvc3Rhcl0/LnNlYXJjaFF1ZXJ5O1xuICAgIGNvbnN0IGNhckhpcmVJdGVtOiBTZWFyY2hDYXJIaXJlUXVlcnlWYXJpYWJsZXMgPVxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5DYXJdPy5zZWFyY2hRdWVyeTtcbiAgICBpZiAoZmxpZ2h0SXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5sb2NhdGlvbl90eXBlX3NlbGVjdCA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Ib3RlbF0ubG9jYXRpb25fdHlwZV9zZWxlY3Q7XG4gICAgICAgIC8vIHRoaXMuY2hlY2tpbl9kYXRlID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0ub3V0Qm91bmREYXRlO1xuICAgICAgICBjb25zdCBvdXRib3VuZEZsaWdodHMgPSBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLkZsaWdodF0/LmRldGFpbC5vdXRib3VuZEZsaWdodHM7XG4gICAgICAgIHRoaXMuY2hlY2tpbl9kYXRlID0gbW9tZW50KG91dGJvdW5kRmxpZ2h0c1tvdXRib3VuZEZsaWdodHMubGVuZ3RoLTFdLmRhdGVUaW1lQXJyaXZpbmcuc3BsaXQoJ1QnKVswXSk7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRfZGF0ZSA9IG1vbWVudChwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLkZsaWdodF0/LnNlYXJjaFF1ZXJ5Py5yZXR1cm5EYXRlKTtcbiAgICAgICAgY29uc3QgYXJyaXZlTG9jYXRpb24gPSBvdXRib3VuZEZsaWdodHNbb3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdPy5kZXN0aW5hdGlvbkFpcnBvcnREZXRhaWw7XG4gICAgICAgIGlmIChhcnJpdmVMb2NhdGlvbikge1xuICAgICAgICAgIHRoaXMuY291bnRyeSA9IHsgY0NvZGU6IGFycml2ZUxvY2F0aW9uLmNvdW50cnlDb2RlLCBjTmFtZTogYXJyaXZlTG9jYXRpb24uY291bnRyeU5hbWUgfTtcbiAgICAgICAgICB0aGlzLmxvY2F0aW9uID0ge1xuICAgICAgICAgICAgY291bnRyeUNvZGU6IGFycml2ZUxvY2F0aW9uLmNvdW50cnlDb2RlLFxuICAgICAgICAgICAgbGF0aXR1ZGU6IGFycml2ZUxvY2F0aW9uLmxhdGl0dWRlLFxuICAgICAgICAgICAgbG9uZ2l0dWRlOiBhcnJpdmVMb2NhdGlvbi5sb25naXR1ZGUsXG4gICAgICAgICAgICBuYW1lOiBhcnJpdmVMb2NhdGlvbi5jaXR5LFxuICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5DaXR5XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9jYXRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGhvdGVsIGZyb20gZmxpZ2h0IGl0ZW0nKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJhaWxJdGVtKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmxvY2F0aW9uX3R5cGVfc2VsZWN0ID0gTG9jYXRpb25UeXBlcy5UcmFpblN0YXRpb247XG4gICAgICAgIHRoaXMuY2hlY2tpbl9kYXRlID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdLm91dEJvdW5kRGF0ZVRpbWU7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRfZGF0ZSA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXS5pbkJvdW5kRGF0ZVRpbWU7XG4gICAgICAgIHRoaXMudHJhaW5zU3RhdGlvbiA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXVxuICAgICAgICAgIC50cmF2ZWxsaW5nVG8gYXMgTG9jYXRpb25EZXRhaWxzO1xuICAgICAgICB0aGlzLmxvY2F0aW9uID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdXG4gICAgICAgICAgLnRyYXZlbGxpbmdUbyBhcyBMb2NhdGlvbkRldGFpbHM7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGhvdGVsIGZyb20gcmFpbCBpdGVtJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpcmxJdGVtKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmxvY2F0aW9uX3R5cGVfc2VsZWN0ID0gTG9jYXRpb25UeXBlcy5UcmFpblN0YXRpb247XG4gICAgICAgIHRoaXMuY2hlY2tpbl9kYXRlID1cbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWxdLm91dEJvdW5kRGF0ZVRpbWU7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRfZGF0ZSA9XG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXS5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZTtcbiAgICAgICAgdGhpcy50cmFpbnNTdGF0aW9uID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXVxuICAgICAgICAgIC50cmF2ZWxsaW5nVG8gYXMgTG9jYXRpb25EZXRhaWxzO1xuICAgICAgICB0aGlzLmxvY2F0aW9uID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXVxuICAgICAgICAgIC50cmF2ZWxsaW5nVG8gYXMgTG9jYXRpb25EZXRhaWxzO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBob3RlbCBmcm9tIGludGVybmF0aW9uYWwgcmFpbCBpdGVtJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldXJvc3Rhckl0ZW0pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMubG9jYXRpb25fdHlwZV9zZWxlY3QgPSBMb2NhdGlvblR5cGVzLkNpdHk7XG4gICAgICAgIHRoaXMuY2hlY2tpbl9kYXRlID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkV1cm9zdGFyXS5vdXRCb3VuZERhdGU7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRfZGF0ZSA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5FdXJvc3Rhcl0uaW5ib3VuZERhdGU7XG4gICAgICAgIGNvbnN0IG91dGJvdW5kRmxpZ2h0cyA9IHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuRXVyb3N0YXJdPy5kZXRhaWw/Lm91dGJvdW5kRmxpZ2h0cztcbiAgICAgICAgY29uc3QgYXJyaXZlTG9jYXRpb24gPSBvdXRib3VuZEZsaWdodHNbb3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdPy5kZXN0aW5hdGlvbkFpcnBvcnREZXRhaWw7XG4gICAgICAgIGlmIChhcnJpdmVMb2NhdGlvbikge1xuICAgICAgICAgIHRoaXMuY291bnRyeSA9IHsgY0NvZGU6IGFycml2ZUxvY2F0aW9uLmNvdW50cnlDb2RlLCBjTmFtZTogYXJyaXZlTG9jYXRpb24uY291bnRyeU5hbWUgfTtcbiAgICAgICAgICB0aGlzLmxvY2F0aW9uID0ge1xuICAgICAgICAgICAgY291bnRyeUNvZGU6IGFycml2ZUxvY2F0aW9uLmNvdW50cnlDb2RlLFxuICAgICAgICAgICAgbGF0aXR1ZGU6IGFycml2ZUxvY2F0aW9uLmxhdGl0dWRlLFxuICAgICAgICAgICAgbG9uZ2l0dWRlOiBhcnJpdmVMb2NhdGlvbi5sb25naXR1ZGUsXG4gICAgICAgICAgICBuYW1lOiBhcnJpdmVMb2NhdGlvbi5jaXR5LFxuICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5DaXR5XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9jYXRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGhvdGVsIGZyb20gZXVyb3N0YXIgaXRlbScpO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChjYXJIaXJlSXRlbSkge1xuICAgICAgY29uc3QgY2FySGlyZVNlYXJjaCA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5DYXJdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5sb2NhdGlvbl90eXBlX3NlbGVjdCA9ICBjYXJIaXJlU2VhcmNoLmxvY2F0aW9uVHlwZSA9PT0gTG9jYXRpb25UeXBlcy5Qb3N0Y29kZSA/ICBMb2NhdGlvblR5cGVzLkNpdHkgOiBjYXJIaXJlU2VhcmNoLmxvY2F0aW9uVHlwZTtcbiAgICAgICAgdGhpcy5jaGVja2luX2RhdGUgPSBtb21lbnQoY2FySGlyZUl0ZW0ucGlja3VwRGF0ZVRpbWUpO1xuICAgICAgICB0aGlzLmNoZWNrb3V0X2RhdGUgPSBtb21lbnQoY2FySGlyZUl0ZW0uZHJvcG9mZkRhdGVUaW1lKTtcbiAgICAgICAgY29uc3Qge3BpY2t1cF9sb2NhdGlvbiwgY2l0eVBpY2t1cCwgcG9zdGNvZGVQaWNrdXAsIHBvc3Rjb2RlUGlja3VwUmF3IH0gPSBjYXJIaXJlU2VhcmNoO1xuICAgICAgICBzd2l0Y2ggKGNhckhpcmVTZWFyY2gubG9jYXRpb25UeXBlKSB7XG4gICAgICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkFpcnBvcnQ6XG4gICAgICAgICAgICB0aGlzLmNvdW50cnkgPSB7IGNDb2RlOiBwaWNrdXBfbG9jYXRpb24uY291bnRyeUNvZGUsIGNOYW1lOiBwaWNrdXBfbG9jYXRpb24uY291bnRyeSB9O1xuICAgICAgICAgICAgdGhpcy5sb2NhdGlvbiA9IHtcbiAgICAgICAgICAgICAgbmFtZTogcGlja3VwX2xvY2F0aW9uLmRlc3RpbmF0aW9uLFxuICAgICAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLkFpcnBvcnQsXG4gICAgICAgICAgICAgIGFpcnBvcnQ6IHBpY2t1cF9sb2NhdGlvblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5DaXR5OiB7XG4gICAgICAgICAgICBjb25zdCBjaXR5Q291bnRyeUluZm8gPSBDb3VudHJpZXMuZmluZChjID0+IGMuY0NvZGUgPT09IGNpdHlQaWNrdXAuY291bnRyeUNvZGUpO1xuICAgICAgICAgICAgdGhpcy5jb3VudHJ5ID0geyBjQ29kZTogY2l0eUNvdW50cnlJbmZvLmNDb2RlLCBjTmFtZTogY2l0eUNvdW50cnlJbmZvLmNOYW1lIH07XG4gICAgICAgICAgICB0aGlzLmxvY2F0aW9uID0ge1xuICAgICAgICAgICAgICBjb3VudHJ5Q29kZTogY2l0eVBpY2t1cC5jb3VudHJ5Q29kZSxcbiAgICAgICAgICAgICAgbGF0aXR1ZGU6IGNpdHlQaWNrdXAubGF0aXR1ZGUsXG4gICAgICAgICAgICAgIGxvbmdpdHVkZTogY2l0eVBpY2t1cC5sb25naXR1ZGUsXG4gICAgICAgICAgICAgIG5hbWU6IGNpdHlQaWNrdXAuY2l0eSA/IGNpdHlQaWNrdXAuY2l0eSA6IGNpdHlQaWNrdXAubmFtZSxcbiAgICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5DaXR5XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5Qb3N0Y29kZToge1xuICAgICAgICAgICAgY29uc3QgcG9zdENvZGVDb3VudHJ5SW5mbyA9IENvdW50cmllcy5maW5kKGMgPT4gYy5jQ29kZSA9PT0gcG9zdGNvZGVQaWNrdXAuY291bnRyeUNvZGUpO1xuICAgICAgICAgICAgdGhpcy5jb3VudHJ5ID0geyBjQ29kZTogcG9zdENvZGVDb3VudHJ5SW5mby5jQ29kZSwgY05hbWU6IHBvc3RDb2RlQ291bnRyeUluZm8uY05hbWUgfTtcbiAgICAgICAgICAgIHRoaXMubG9jYXRpb24gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5wb3N0Y29kZSA9IHBvc3Rjb2RlUGlja3VwUmF3O1xuICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGhvdGVsIGZyb20gZXVyb3N0YXIgaXRlbScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFzUHJlZmVycmVkKGhvdGVsOiBIb3RlbERldGFpbHMpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcmVmZXJyZWRGaWx0ZXJzID0gdGhpcy5maWx0ZXJzLnByZWZlcnJlZDtcblxuICAgIC8vIEVtcHR5IHByZWZlcnJlZCBmaWx0ZXJzIE9SIFwiQW55XCJcbiAgICBpZiAoIXByZWZlcnJlZEZpbHRlcnMubGVuZ3RoIHx8IHByZWZlcnJlZEZpbHRlcnMuaW5jbHVkZXMoU2VhcmNoSGFuZGxlci5BTlkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBBZ2VuY3kgKGNvbnN1bWVyKSAmJiBDbGllbnRcbiAgICBpZiAoXG4gICAgICBwcmVmZXJyZWRGaWx0ZXJzLmluY2x1ZGVzKFNlYXJjaEhhbmRsZXIuQUdFTkNZKSAmJlxuICAgICAgcHJlZmVycmVkRmlsdGVycy5pbmNsdWRlcyhTZWFyY2hIYW5kbGVyLkNMSUVOVClcbiAgICApIHtcbiAgICAgIHJldHVybiBob3RlbC5wcmVmZXJyZWQuY29uc3VtZXIgPT09IHRydWUgJiYgaG90ZWwucHJlZmVycmVkLmNsaWVudCA9PT0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBBZ2VuY3lcbiAgICBpZiAocHJlZmVycmVkRmlsdGVycy5pbmNsdWRlcyhTZWFyY2hIYW5kbGVyLkFHRU5DWSkpIHtcbiAgICAgIHJldHVybiBob3RlbC5wcmVmZXJyZWQuY29uc3VtZXIgPT09IHRydWU7XG4gICAgfVxuXG4gICAgLy8gQ2xpZW50XG4gICAgaWYgKHByZWZlcnJlZEZpbHRlcnMuaW5jbHVkZXMoU2VhcmNoSGFuZGxlci5DTElFTlQpKSB7XG4gICAgICByZXR1cm4gaG90ZWwucHJlZmVycmVkLmNsaWVudCA9PT0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBhdExlYXN0T25lUHJlZmVycmVkQWdlbnRIb3RlbCgpOiBib29sZWFuIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVzdWx0cy52YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMucmVzdWx0cy52YWx1ZVtpXS5wcmVmZXJyZWQuY29uc3VtZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYXRMZWFzdE9uZVByZWZlcnJlZENsaWVudEhvdGVsKCk6IGJvb2xlYW4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yZXN1bHRzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5yZXN1bHRzLnZhbHVlW2ldLnByZWZlcnJlZC5jbGllbnQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldG1heFByaWNlRm9yQ3VycmVuY3koY3VycmVuY3k6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5tYXhQcmljZUZvckN1cnJlbmN5KGN1cnJlbmN5KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNYXhQZXJOaWdodFByaWNlRm9yQ3VycmVuY3koY3VycmVuY3k6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgcHJpY2VSYW5nZSA9IHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5wZXJOaWdodFByaWNlUmFuZ2VGb3JDdXJyZW5jeShjdXJyZW5jeSk7XG4gICAgdGhpcy5maWx0ZXJzLnBlck5pZ2h0UHJpY2VSYW5nZS5tYXggPSBwcmljZVJhbmdlLm1heHByaWNlO1xuICAgIHRoaXMuZmlsdGVycy5wZXJOaWdodFByaWNlUmFuZ2UubWF4UmF3ID0gcHJpY2VSYW5nZS5tYXhSYXdQcmljZTtcbiAgICByZXR1cm4gcHJpY2VSYW5nZS5tYXhwcmljZTtcbiAgfVxuXG4gIC8vIExpZ2h0ZW5pbmcgRXh0cmEgRmlsdGVyc1xuICBwcml2YXRlIGdldEV4dHJhRmlsdGVyKGhvdGVsOiBIb3RlbERldGFpbHMpOiBib29sZWFuIHtcbiAgICBjb25zdCBjaGVja0F2YWlsYWJpbGl0eSA9IHRoaXMuZmlsdGVycy5leHRyYS5pbmNsdWRlcyhTZWFyY2hIYW5kbGVyLkFWQUlMQUJJTElUWSk7XG4gICAgaWYgKGNoZWNrQXZhaWxhYmlsaXR5KSB7XG4gICAgICByZXR1cm4gaG90ZWwuYXZhaWxhYmxlUmF0ZXM/LnJvb21zPy5sZW5ndGggPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgY2hlY2tGZW1hbGVGcmllbmRseSA9IHRoaXMuZmlsdGVycy5leHRyYS5pbmNsdWRlcyhTZWFyY2hIYW5kbGVyLkZFTUFMRV9GUklFTkRMWSk7XG4gICAgaWYgKGNoZWNrRmVtYWxlRnJpZW5kbHkpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzRmVtYWxlRnJpZW5kbHkoaG90ZWwpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNGZW1hbGVGcmllbmRseShob3RlbDogSG90ZWxRdW90ZVJlc3VsdCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZlbWFsZUxpc3QgPSBbdGhpcy5jb252ZXJ0VG9PbmVTdHJpbmcoU2VhcmNoSGFuZGxlci5GRU1BTEVfRlJJRU5ETFkpLnRvTG93ZXJDYXNlKCksXG4gICAgICB0aGlzLmNvbnZlcnRUb09uZVN0cmluZyhTZWFyY2hIYW5kbGVyLkZFTUFMRV9GUklFTkRMWV9IT1RFTCkudG9Mb3dlckNhc2UoKV07XG5cbiAgICByZXR1cm4gKFxuICAgICAgaG90ZWwudGFncy5maWx0ZXIodGFnID0+IHtcbiAgICAgICAgaWYgKHRhZy5uYW1lKSB7XG4gICAgICAgICAgY29uc3QgbmFtZTogc3RyaW5nID0gdGhpcy5jb252ZXJ0VG9PbmVTdHJpbmcodGFnLm5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgcmV0dXJuICEhZmVtYWxlTGlzdC5maW5kKGxpc3QgPT4gbGlzdCA9PT0gbmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pLmxlbmd0aCA+IDBcbiAgICApO1xuICB9XG5cbiAgLy8gTGlnaHRlbmluZyBBbWVybml0aWVzIEZpbHRlcnNcbiAgcHJpdmF0ZSBnZXRBbWVuaXRpZXNGaWx0ZXIoaG90ZWw6IEhvdGVsRGV0YWlscyk6IGJvb2xlYW4ge1xuICAgIGxldCBpc1RydWU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIHRoaXMuZmlsdGVycy5hbWVuaXR5dHlwZS5mb3JFYWNoKHNlYXJjaCA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJlZFRhZ3MgPSB0aGlzLmZpbHRlclRhZ3MoaG90ZWwudGFncywgc2VhcmNoKTtcbiAgICAgIGlzVHJ1ZSA9ICEhKGZpbHRlcmVkVGFncy5sZW5ndGggPiAwKTtcbiAgICAgIHJldHVybiBpc1RydWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIGlzVHJ1ZTtcbiAgfVxuXG4gIGZpbHRlclRhZ3MoaG90ZWxUYWdzOiBIb3RlbFRhZ1tdLCBzZWFyY2hUZXJtOiBzdHJpbmcpOiBIb3RlbFRhZ1tdIHtcbiAgICBjb25zdCBsb3dlclNlYXJjaCA9IHRoaXMuY29udmVydFRvT25lU3RyaW5nKHNlYXJjaFRlcm0pPy50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBob3RlbFRhZ3MuZmlsdGVyKHRhZyA9PiB7XG4gICAgICBpZiAodGFnLm5hbWUpIHtcbiAgICAgICAgY29uc3QgdGFnTmFtZSA9IHRoaXMuY29udmVydFRvT25lU3RyaW5nKHRhZy5uYW1lKT8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdGFnRGlzcGxheSA9IHRoaXMuY29udmVydFRvT25lU3RyaW5nKHRhZy5kaXNwbGF5KT8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIHRhZ05hbWU/LmluY2x1ZGVzKGxvd2VyU2VhcmNoKSB8fCB0YWdEaXNwbGF5Py5pbmNsdWRlcyhsb3dlclNlYXJjaCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRUb09uZVN0cmluZyhpdGVtOiBzdHJpbmcpIHtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0ucmVwbGFjZSgvW15hLXpBLVpdL2csICcnKTtcbiAgICB9XG4gIH1cblxuICBhZGRQYWdpbmF0aW9uUGFnZTxUPihjdXJyZW50UGFnZTogbnVtYmVyKTogVCB7XG4gICAgY29uc3Qga2V5ID0gJ1BhZ2luYXRpb25QYWdlQ291bnQnO1xuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oa2V5LCBjdXJyZW50UGFnZSk7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oa2V5KTtcbiAgfVxuXG4gIHRvZ2dsZVZpZXcoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50VmlldyA9IHRoaXMuY3VycmVudFZpZXcgPT09IEhvdGVsVmlldy5MSVNUID8gSG90ZWxWaWV3Lk1BUDpIb3RlbFZpZXcuTElTVDtcbiAgfVxuXG4gIGNhbGNEYXlEaWZmKCk6IG51bWJlciB7XG4gICAgY29uc3QgY2hlY2tvdXQgPSBtb21lbnQodGhpcy5jaGVja291dF9kYXRlKTtcbiAgICBjb25zdCBjaGVja2luID0gbW9tZW50KHRoaXMuY2hlY2tpbl9kYXRlKTtcbiAgICByZXR1cm4gY2hlY2tvdXQuc3RhcnRPZignZGF5JykuZGlmZihjaGVja2luLnN0YXJ0T2YoJ2RheScpLCAnZGF5cycpO1xuICB9XG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IEhvdGVsRGV0YWlsc1tdKTogSUNoZWFwZXN0UHJpY2Uge1xuICAgIGNvbnN0IGN1cnJlbmNpZXNLZXkgPSBPYmplY3Qua2V5cyh0aGlzLmF2YWxpYWJpbGl0eVNlcnZpY2UuY3VycmVuY2llcyk7XG4gICAgaWYgKCghcmVzdWx0cy5sZW5ndGggJiYgIWN1cnJlbmNpZXNLZXkubGVuZ3RoKSB8fCAhY3VycmVuY2llc0tleS5sZW5ndGgpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgY3VycmVuY2llID0gY3VycmVuY2llc0tleVswXTtcblxuICAgIHJldHVybiB7XG4gICAgICBhbW91bnQ6IHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5jdXJyZW5jaWVzW2N1cnJlbmNpZV0ubWlucHJpY2UsXG4gICAgICBjdXJyZW5jeUNvZGU6IGN1cnJlbmNpZVxuICAgIH07XG4gIH1cblxuICBnZXRSb29tTnVtYmVyKCkge1xuICAgIGNvbnN0IHJvb21zT2NjdXBhbmN5OiB7XG4gICAgICBBZHVsdHM6IG51bWJlcjtcbiAgICAgIENoaWxkcmVuOiBudW1iZXI7XG4gICAgICBJbmZhbnRzOiBudW1iZXI7XG4gIH1bXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTnVtYmVyKHRoaXMudGVtcFBhcmFtcy5ub19vZl9yb29tcyk7IGkrKykge1xuICAgICAgY29uc3QgbmV3Um9vbU9jY3VwYW5jeSA9IHtcbiAgICAgICAgQWR1bHRzOiB0aGlzLmNhbGNSb29tT2NjdXBhbmN5KFxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5ub19vZl9yb29tcyxcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMubm9fb2Zfb2NjdXBhbnRzXG4gICAgICAgICksXG4gICAgICAgIENoaWxkcmVuOiAwLFxuICAgICAgICBJbmZhbnRzOiAwXG4gICAgICB9O1xuICAgICAgcm9vbXNPY2N1cGFuY3kucHVzaChuZXdSb29tT2NjdXBhbmN5KTtcbiAgICB9XG5cbiAgICBjb25zdCByb29tczogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcm9vbXNPY2N1cGFuY3kubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJvb21zT2NjdXBhbmN5W2luZGV4XS5BZHVsdHM7IGorKykge1xuICAgICAgICByb29tcy5wdXNoKGluZGV4ICsgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXHRAZGVzYyAtIHJldHVybiB0aGUgb2NjdXBhbmN5IGZvciBhIHJvb20gLSBuZWVkIHRvIGNhbGN1bGF0ZSBiYXNlZCBvbiBubyBvZiByb29tcywgbm8gb2YgdHJhdmVsbGVycyBhbmQgY3VycmVudGx5IG9jY3VwaWVkIHJvb21zO1xuICAgKiovXG5cbiAgY2FsY1Jvb21PY2N1cGFuY3kobm9fb2Zfcm9vbXM6IG51bWJlciwgdHJhdmVsbGVyczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICdObyBvZiBUcmF2ZWxsZXJzOiAnICtcbiAgICAgIHRyYXZlbGxlcnMgK1xuICAgICAgJ3wgTm8gb2Ygcm9vbXM6ICcgK1xuICAgICAgbm9fb2Zfcm9vbXMgK1xuICAgICAgJyB8IEFzc2lnbmVkOiAnICtcbiAgICAgIHRoaXMub2NjdXBpZWRcbiAgICApO1xuICAgIGxldCByb29tT2NjdXBhbmN5OiBudW1iZXIgPSBNYXRoLmNlaWwodHJhdmVsbGVycyAvIG5vX29mX3Jvb21zKTtcblxuICAgIGlmICh0cmF2ZWxsZXJzIC0gdGhpcy5vY2N1cGllZCA8IHJvb21PY2N1cGFuY3kpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdXZSBoYXZlIHJ1biBvdXQgb2Ygb2NjdXBpZXJzIScpO1xuICAgICAgcm9vbU9jY3VwYW5jeSA9IHRyYXZlbGxlcnMgLSB0aGlzLm9jY3VwaWVkO1xuICAgIH1cblxuICAgIGlmIChyb29tT2NjdXBhbmN5IDw9IDApIHtcbiAgICAgIHJvb21PY2N1cGFuY3kgPSAxO1xuICAgIH1cblxuICAgIHRoaXMub2NjdXBpZWQgKz0gcm9vbU9jY3VwYW5jeTtcbiAgICByZXR1cm4gcm9vbU9jY3VwYW5jeTtcbiAgfVxuXG4gIGFzeW5jIGFkZEhvdGVsUm9vbVRvQmFza2V0KFxuICAgIGhvdGVsOiBIb3RlbERldGFpbHMsXG4gICAgaG90ZWxSb29tOiBIb3RlbFJvb20sXG4gICAgaG90ZWxRdWVyeTogU2VhcmNoSG90ZWxzUXVlcnlWYXJpYWJsZXMsXG4gICAgdHJhdmVsbGVycz86IFRyYXZlbGxlcltdLFxuICAgIGlnbm9yZUludm9rZWQ/OiBib29sZWFuLFxuICAgIGdtdD86IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zPiB7XG4gICAgY29uc29sZS5sb2coaG90ZWwpO1xuICAgIGNvbnNvbGUubG9nKGhvdGVsUm9vbSk7XG4gICAgY29uc29sZS5sb2coaG90ZWxRdWVyeSk7XG5cbiAgICBjb25zdCBmdWxsSG90ZWwgPSB0aGlzLmZ1bGxSZXN1bHRzLmZpbmQoZmhvdGVsID0+IGZob3RlbC5pZCA9PT0gaG90ZWwuaWQpO1xuXG4gICAgaWYgKGhvdGVsLnVuYXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWw7XG4gICAgfVxuXG4gICAgLy8gbW9kaWZ5IHRoZSAnc3RhcnREYXRlJyBhbmQgJ2VuZERhdGUnIHByb3BlcnRpZXMgdG8gaGF2ZSBJU08gZm9ybWF0XG4gICAgaG90ZWxRdWVyeS5zdGFydERhdGUgPSBuZXcgRGF0ZShob3RlbFF1ZXJ5LnN0YXJ0RGF0ZSkudG9JU09TdHJpbmcoKTtcbiAgICBob3RlbFF1ZXJ5LmVuZERhdGUgPSBuZXcgRGF0ZShob3RlbFF1ZXJ5LmVuZERhdGUpLnRvSVNPU3RyaW5nKCk7XG5cbiAgICAvLyBjcmVhdGUgY29weSBvZiBob3RlbFF1ZXJ5IGFuZCBkZWxldGUgJ2FkdWx0cycgcHJvcGVydHkgYXMgc2VhcmNoUXVlcnlTY2hlbWEgZm9yIGhvdGVsIChjb25mZXJtYSkgZG9lcyBub3Qgc2VlbSB0byBzdXBwb3J0IGl0IGJlaW5nIGFkZGVkXG4gICAgY29uc3Qgc2VhcmNoUXVlcnkgPSB7IC4uLmhvdGVsUXVlcnkgfTtcblxuICAgIGxldCByb29tQ3NsOiBSb29tO1xuICAgIGlmIChob3RlbC5zb3VyY2UgPT09IFNlcnZpY2VQcm92aWRlci5TYWJyZUNTTCkge1xuICAgICAgcm9vbUNzbCA9IGhvdGVsUm9vbSBhcyB1bmtub3duIGFzIFJvb207XG4gICAgfVxuXG4gICAgaWYgKGhvdGVsLnNvdXJjZSAhPT0gU2VydmljZVByb3ZpZGVyLlNhYnJlQ1NMKSB7XG4gICAgICBkZWxldGUgc2VhcmNoUXVlcnkuYWR1bHRzO1xuICAgIH1cblxuICAgIGNvbnN0IGRldGFpbFJvb21zOiB7XG4gICAgICByYXRlRGVzY3JpcHRpb246IHN0cmluZztcbiAgICAgIHJvb21EZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgICAgcm9vbUlkOiBzdHJpbmc7XG4gICAgICByb29tVHlwZTogc3RyaW5nO1xuICAgICAgcmF0ZUNvZGU6IHN0cmluZztcbiAgICAgIGNoZWNrSW46IGFueTtcbiAgICAgIGNoZWNrT3V0OiBhbnk7XG4gICAgICBuaWdodHM6IEhvdGVsTmlnaHRbXTtcbiAgICAgIGN2dlJlcXVpcmVkOiBib29sZWFuO1xuICAgIH1bXSA9IFtdO1xuICAgIGRldGFpbFJvb21zLnB1c2goe1xuICAgICAgcmF0ZURlc2NyaXB0aW9uOlxuICAgICAgICBob3RlbFJvb20ucmF0ZURlc2NyaXB0aW9uIHx8XG4gICAgICAgIHJvb21Dc2w/LlJhdGVQbGFucy5SYXRlUGxhblswXS5SYXRlUGxhbk5hbWUgfHxcbiAgICAgICAgcm9vbUNzbD8uUm9vbURlc2NyaXB0aW9uLk5hbWUgfHxcbiAgICAgICAgJ04vQScsXG4gICAgICByb29tRGVzY3JpcHRpb246XG4gICAgICAgIGhvdGVsUm9vbS5yb29tRGVzY3JpcHRpb24gfHwgKHJvb21Dc2wgPyBgJHtyb29tQ3NsLlJvb21EZXNjcmlwdGlvbi5OYW1lfS0ke3Jvb21Dc2wuUm9vbURlc2NyaXB0aW9uLlRleHRbMF19YCA6ICcnKVxuICAgICAgICAsXG4gICAgICByb29tSWQ6IGhvdGVsUm9vbS5yb29tSWQgfHwgcm9vbUNzbD8uUmF0ZVBsYW5zPy5SYXRlUGxhblswXT8uUmF0ZUtleSB8fCAnJyxcbiAgICAgIHJvb21UeXBlOlxuICAgICAgICBob3RlbFJvb20ucm9vbVR5cGUgPz9cbiAgICAgICAgcm9vbUNzbC5Sb29tVHlwZSA/P1xuICAgICAgICByb29tQ3NsLlJvb21EZXNjcmlwdGlvbi5OYW1lID8/XG4gICAgICAgIHJvb21Dc2wuUm9vbURlc2NyaXB0aW9uLlRleHRbMF0gPz8gJycsXG4gICAgICByYXRlQ29kZTogaG90ZWxSb29tLnJhdGVDb2RlLFxuICAgICAgY2hlY2tJbjogaG90ZWxRdWVyeS5zdGFydERhdGUsXG4gICAgICBjaGVja091dDogaG90ZWxRdWVyeS5lbmREYXRlLFxuICAgICAgbmlnaHRzOiBob3RlbFJvb20ubmlnaHRzIHx8IGhvdGVsLmF2YWlsYWJsZVJhdGVzPy5yb29tc1swXT8ubmlnaHRzLFxuICAgICAgY3Z2UmVxdWlyZWQ6IGhvdGVsUm9vbS5wb2xpY2llcy5jdnZSZXF1aXJlZFxuICAgIH0pO1xuXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xuICAgIGlmIChiYXNrZXQpIHtcbiAgICAgIC8vIEVOVC0yNDQ3IGFkZCBpbiBjaHVua3Mgd2l0aCBwZW9wbGUgcGVyIHJvb21cbiAgICAgIGNvbnN0IHBheFBlclJvb206IG51bWJlciA9IHRoaXMudGVtcFBhcmFtcy5ub19vZl9vY2N1cGFudHM7XG5cbiAgICAgIC8vIEVOVC0zMDQ4IFRvIGJlIGNoYW5nZWQgd2hlbiB0cmF2bGxlcnMgZmxvdyBhZGRlZFxuICAgICAgY29uc3Qgcm9vbUFycmF5ID0gbmV3IEFycmF5KGdtdCA/IGhvdGVsUXVlcnkuYWR1bHRzIDogdGhpcy50ZW1wUGFyYW1zLm5vX29mX3Jvb21zKS5maWxsKCdURVNUJyk7XG4gICAgICBjb25zdCBudW1iZXJUb1NwbGl0ID0gZ210ID8gMSA6IHRoaXMudGVtcFBhcmFtcy5ub19vZl9yb29tcyA9PT0gcGF4UGVyUm9vbSA/IDEgOiAyO1xuICAgICAgY29uc3QgYm9va2VkVHJhdmVsbGVyc0NodW5rcyA9IF8uY2h1bmsodGhpcy50cmF2ZWxsZXJzLCBudW1iZXJUb1NwbGl0KTtcbiAgICAgIGNvbnN0IHsgYWRkcmVzczogaG90ZWxBYWRkcmVzcyB9ID0gaG90ZWw7XG4gICAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChob3RlbFJvb20sIGhvdGVsUXVlcnksIGhvdGVsLnNvdXJjZSA9PT0gU2VydmljZVByb3ZpZGVyLlNhYnJlQ1NMKTtcbiAgICAgIC8vIGJvb2tlZFRyYXZlbGxlcnNDaHVua3MuZm9yRWFjaCgoY2h1bms6IFRyYXZlbGxlcltdLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICByZXR1cm4gYXdhaXQgcm9vbUFycmF5LnJlZHVjZShcbiAgICAgICAgYXN5bmMgKFxuICAgICAgICAgIGN1cnJlbnQ6IERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMsXG4gICAgICAgICAgY2h1bms6IFRyYXZlbGxlcltdLFxuICAgICAgICAgIGluZGV4OiBudW1iZXJcbiAgICAgICAgKTogUHJvbWlzZTxEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zPiA9PiB7XG4gICAgICAgICAgc3dpdGNoIChhd2FpdCBjdXJyZW50KSB7XG4gICAgICAgICAgICBjYXNlIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsOlxuICAgICAgICAgICAgICByZXR1cm4gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWw7XG4gICAgICAgICAgICBjYXNlIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2g6XG4gICAgICAgICAgICAgIHJldHVybiBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLnJlc2VhcmNoO1xuICAgICAgICAgICAgY2FzZSBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNvbnRpbnVlOlxuICAgICAgICAgICAgY2FzZSBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLm5ld0Jhc2tldDpcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gY29uc3QgcmF0ZUtleSA9IGhvdGVsLnNvdXJjZSA9PT0gU2VydmljZVByb3ZpZGVyLlNhYnJlQ1NMID8gJycgKyBob3RlbFJvb20ucmF0ZUNvZGU6IG51bGw7IC8vICAhIC0gb25seSBmb3IgY3NsXG4gICAgICAgICAgY29uc3Qgd2ggPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkdWx0czogbnVtYmVyVG9TcGxpdCxcbiAgICAgICAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXG4gICAgICAgICAgICAgIHNlcnZpY2U6IGhvdGVsLnNvdXJjZUlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIGFkZGl0aW9uYWw6IGZ1bGxIb3RlbD8uYXZhaWxhYmxlUmF0ZXM/LmFkZGl0aW9uYWwsXG4gICAgICAgICAgICAgICAgaG90ZWxBZGRyZXNzOiB7XG4gICAgICAgICAgICAgICAgICBzdHJlZXROYW1lOiBob3RlbEFhZGRyZXNzLmFkZHJlc3NMaW5lMSxcbiAgICAgICAgICAgICAgICAgIHRvd246IGhvdGVsQWFkZHJlc3MuYWRkcmVzc0xpbmUyXG4gICAgICAgICAgICAgICAgICAgID8gaG90ZWxBYWRkcmVzcy5hZGRyZXNzTGluZTJcbiAgICAgICAgICAgICAgICAgICAgOiBob3RlbEFhZGRyZXNzLmNpdHlcbiAgICAgICAgICAgICAgICAgICAgICA/IGhvdGVsQWFkZHJlc3MuY2l0eVxuICAgICAgICAgICAgICAgICAgICAgIDogJ0NvbmZlcm1hJyxcbiAgICAgICAgICAgICAgICAgIGNvdW50eTogaG90ZWxBYWRkcmVzcy5hZGRyZXNzTGluZTMsXG4gICAgICAgICAgICAgICAgICBwb3N0Y29kZTogaG90ZWxBYWRkcmVzcy5wb3N0T3JaaXBDb2RlLFxuICAgICAgICAgICAgICAgICAgY291bnRyeUNvZGU6ICB0aGlzLmxvY2F0aW9uX3R5cGVfc2VsZWN0ID09PSBMb2NhdGlvblR5cGVzLlRyYWluU3RhdGlvbiAmJiAhaG90ZWxBYWRkcmVzcy5jb3VudHJ5Q29kZVxuICAgICAgICAgICAgICAgICAgPyB0aGlzLnRyYWluc1N0YXRpb24/LmNvdW50cnlDb2RlIHx8IHRoaXMudHJhaW5zU3RhdGlvbj8ucmFpbHN0YXRpb24ubG9jYXRpb25EZXRhaWxzLmNvdW50cnlDb2RlXG4gICAgICAgICAgICAgICAgICA6IHRoaXMubG9jYXRpb25fdHlwZV9zZWxlY3QgPT09IExvY2F0aW9uVHlwZXMuQWlycG9ydCAmJiAhaG90ZWxBYWRkcmVzcy5jb3VudHJ5Q29kZVxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMubG9jYXRpb24/LmFpcnBvcnQ/LmNvdW50cnlDb2RlIHx8ICh0aGlzLmxvY2F0aW9uIGFzIEFpcnBvcnQpPy5sb2NhdGlvbkRldGFpbHMuY291bnRyeUNvZGVcbiAgICAgICAgICAgICAgICAgICAgOiBob3RlbEFhZGRyZXNzLmNvdW50cnlDb2RlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaG90ZWxEZXNjcmlwdGlvbjogaG90ZWwuZ3JvdXAsXG4gICAgICAgICAgICAgICAgaG90ZWxGYXhOdW1iZXI6IGhvdGVsQWFkZHJlc3MuZmFjc2ltaWxlLFxuICAgICAgICAgICAgICAgIGhvdGVsUGhvbmVOdW1iZXI6IGhvdGVsQWFkZHJlc3MudGVsZXBob25lLFxuICAgICAgICAgICAgICAgIGhvdGVsSWQ6IGhvdGVsLmlkLFxuICAgICAgICAgICAgICAgIGhvdGVsTmFtZTogaG90ZWwubmFtZSxcbiAgICAgICAgICAgICAgICBob3RlbEdyb3VwOiBob3RlbC5ncm91cCxcbiAgICAgICAgICAgICAgICAvLyB0aGlzIHNob3VsZCBhbHdheXMgYmUgMSBhcyB3ZSBib29rIDEgcm9vbSBhcyBhIHRpbWVcbiAgICAgICAgICAgICAgICBudW1iZXJPZlJvb21zOiAxLFxuICAgICAgICAgICAgICAgIHJvb21zOiBkZXRhaWxSb29tcyxcbiAgICAgICAgICAgICAgICB0ZXJtc0FuZENvbmQ6IHRlcm1zQW5kQ29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBob3RlbFByZWZlcnJlZDogaG90ZWwucHJlZmVycmVkLFxuICAgICAgICAgICAgICAgIGhvdGVsRGlzdGFuY2U6IHtcbiAgICAgICAgICAgICAgICAgIHNlYXJjaDogaG90ZWwubG9jYXRpb24uZGlzdGFuY2UudG9GaXhlZCgyKSxcbiAgICAgICAgICAgICAgICAgIGFpcnBvcnQ6IGhvdGVsLnRyYW5zcG9ydHM/LmZpbmQoYSA9PiBhLnR5cGUgPT0gSG90ZWxEZXRhaWxUeXBlcy5BSVJQT1JUKT8uZGlzdGFuY2UudG9GaXhlZCgyKSxcbiAgICAgICAgICAgICAgICAgIHRyYWluOiBob3RlbC50cmFuc3BvcnRzPy5maW5kKGEgPT4gYS50eXBlID09IEhvdGVsRGV0YWlsVHlwZXMuVFJBSU4pPy5kaXN0YW5jZS50b0ZpeGVkKDIpLFxuICAgICAgICAgICAgICAgICAgbWV0cm86IGhvdGVsLnRyYW5zcG9ydHM/LmZpbmQoYSA9PiBhLnR5cGUgPT0gSG90ZWxEZXRhaWxUeXBlcy5NRVRSTyk/LmRpc3RhbmNlLnRvRml4ZWQoMilcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiB7XG4gICAgICAgICAgICAgICAgICBsb25naXR1ZGU6IGhvdGVsLmxvY2F0aW9uLmxvbmdpdHVkZSxcbiAgICAgICAgICAgICAgICAgIGxhdGl0dWRlOiBob3RlbC5sb2NhdGlvbi5sYXRpdHVkZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIC8vIG5vIGxvbmdlciAqIG5vIG9mIHJvb21zIGFzIGVhY2ggcm9vbSBpcyBhZGRlZCAxIGJ5IDFcbiAgICAgICAgICAgICAgcHJpY2U6XG4gICAgICAgICAgICAgICAgaG90ZWxSb29tLnRvdGFsLFxuICAgICAgICAgICAgICBjdXJyZW5jeTpcbiAgICAgICAgICAgICAgICAoaG90ZWxSb29tLmN1cnJlbmN5Q29kZSBhcyBDdXJyZW5jeUNvZGUpLFxuICAgICAgICAgICAgICBzZWFyY2hRdWVyeSxcbiAgICAgICAgICAgICAgb3V0Ym91bmREYXRlOiBob3RlbFF1ZXJ5LnN0YXJ0RGF0ZSxcbiAgICAgICAgICAgICAgaW5ib3VuZERhdGU6IGhvdGVsUXVlcnkuZW5kRGF0ZSxcbiAgICAgICAgICAgICAgbG93ZXN0UHJpY2U6XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVhcGVzdFByaWNlPy5hbW91bnQsXG4gICAgICAgICAgICAgIGxvd2VzdFByaWNlQ3VycmVuY3k6XG4gICAgICAgICAgICAgICAgPEN1cnJlbmN5Q29kZT50aGlzLmNoZWFwZXN0UHJpY2U/LmN1cnJlbmN5Q29kZSxcbiAgICAgICAgICAgICAgbG93ZXN0UHJpY2VEZXRhaWw6IHRoaXMuY3JlYXRlTG93ZXN0UHJpY2VEZXRhaWwoaG90ZWxRdWVyeSksXG4gICAgICAgICAgICAgIGNvMlBlckl0ZW06IGhvdGVsLmNvMlBlckl0ZW0sXG4gICAgICAgICAgICAgIGNvMlBlclBhc3NlbmdlcjogaG90ZWwuY28yUGVyUGFzc2VuZ2VyLFxuICAgICAgICAgICAgICByZWFzb25LZXlzOmhvdGVsUm9vbS5yZXF1aXJlc1JlYXNvbktleXMsXG4gICAgICAgICAgICAgIGFnZW50T3ZlcnJvZGVVbmF2YWlsYWJsZTpob3RlbFJvb20udW5hdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbnRCYXNrZXQsXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXG4gICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGFycmF5IG9mIDEgb3IgMiB0cmF2ZWxsZXJzIHdoaWNoIGdvIGluIDEgcm9vbVxuICAgICAgICAgICAgLy8gY2h1bmtcbiAgICAgICAgICAgIGJvb2tlZFRyYXZlbGxlcnNDaHVua3NbaW5kZXhdIHx8IFtdLFxuICAgICAgICAgICAgaG90ZWxSb29tLnJlcXVpcmVzUmVhc29uS2V5cyxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgaWdub3JlSW52b2tlZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHdoID09PSBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLnJlc2VhcmNoKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2VhcmNoV2l0aE5ld1VzZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHdoO1xuICAgICAgICB9LFxuICAgICAgICBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNvbnRpbnVlXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWw7XG4gIH1cblxuICBnZXRUZXJtc0FuZENvbmQoaG90ZWxSb29tOiBIb3RlbFJvb20sIGhvdGVsUXVlcnk6IFNlYXJjaEhvdGVsc1F1ZXJ5VmFyaWFibGVzLCBpc0NzbDogYm9vbGVhbiA9IGZhbHNlKSB7XG5cbiAgICAvLyBpZ25vcmUgaGVyZSBzaW5jZSB2c2NvZGUgaXMgZXJyb3IgaGlnaGxpZ2h0aW5nIG9iamVjdCBmb3Igc29tZSByZWFzb25cbiAgICBjb25zdCBwb2xpY2llczpIb3RlbFBvbGljeSA9IGhvdGVsUm9vbS5wb2xpY2llc1xuXG4gICAgY29uc3QgaG90ZWxQb2xpY2llczogQXJyYXk8a2V5b2YgSG90ZWxQb2xpY3k+ID0gT2JqZWN0LmtleXMocG9saWNpZXMpIGFzIEFycmF5PGtleW9mIEhvdGVsUG9saWN5PjtcbiAgICBjb25zdCBmb3JtYXR0ZWRQb2xpY2llczoge1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgdmFsdWU6IHN0cmluZyB8IGJvb2xlYW47XG4gIH1bXSA9IFtdO1xuXG4gICAgaG90ZWxQb2xpY2llcy5mb3JFYWNoKChwb2xpY3k6IGtleW9mIEhvdGVsUG9saWN5KSA9PiB7XG4gICAgICBpZiAocG9saWN5ICE9PSAnX190eXBlbmFtZScpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2cocG9saWN5KVxuICAgICAgICBjb25zdCBtYXRjaCA9IHBvbGljeS5tYXRjaCgvW0EtWl1bYS16XSt8WzAtOV0rL2cpO1xuXG4gICAgICAgIGNvbnN0IG5ld1BvbGljeSA9IHtcbiAgICAgICAgICBuYW1lOiBtYXRjaCA/IG1hdGNoLmpvaW4oJyAnKSA6IHBvbGljeSxcbiAgICAgICAgICB2YWx1ZTogcG9saWNpZXNbcG9saWN5XVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChwb2xpY2llc1twb2xpY3ldID09PSB0cnVlKSB7XG4gICAgICAgICAgbmV3UG9saWN5LnZhbHVlID0gJ1llcyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9saWNpZXNbcG9saWN5XSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBuZXdQb2xpY3kudmFsdWUgPSAnTm8nO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0dGVkUG9saWNpZXMucHVzaChuZXdQb2xpY3kpO1xuICAgICAgfVxuXG4gICAgfSk7XG5cbiAgICBjb25zdCBub3JtYWxQb2xpY2llcyA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1JhdGUgSW5mb3JtYXRpb24nLFxuICAgICAgICB2YWx1ZTogaG90ZWxSb29tLnJhdGVEZXNjcmlwdGlvblxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1JhdGUgQ29kZScsXG4gICAgICAgIHZhbHVlOiBpc0NzbCA/IGhvdGVsUm9vbS5hZGRpdGlvbmFsPy5wcm9kdWN0Q29kZSA6IGhvdGVsUm9vbS5yYXRlQ29kZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1Jvb20gSW5mb3JtYXRpb24nLFxuICAgICAgICB2YWx1ZTogaG90ZWxSb29tLnJvb21EZXNjcmlwdGlvblxuICAgICAgfVxuICAgIF07XG5cbiAgICByZXR1cm4gbm9ybWFsUG9saWNpZXMuY29uY2F0KGZvcm1hdHRlZFBvbGljaWVzKTtcbiAgfVxuXG4gIHNhdmVTZWFyY2goaG90ZWxOYW1lOiBzdHJpbmcgPSBudWxsKTogT2JzZXJ2YWJsZTxTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0PiB7XG4gICAgaWYgKHRoaXMuaXNGYXZvdXJpdGVWYWxpZC52YWx1ZSkge1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XG4gICAgICBjb25zdCBmYXZvdXJpdGVTZWFyY2hRdWVyeSA9IHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XG4gICAgICBpZiAoaG90ZWxOYW1lKSBmYXZvdXJpdGVTZWFyY2hRdWVyeS5ob3RlbE5hbWUgPSBob3RlbE5hbWU7XG4gICAgICBjb25zdCBzZWFyY2hJbmZvID0ge1xuICAgICAgICBuYW1lOiBgJHttb21lbnQoKX1gLFxuICAgICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuSG90ZWwsXG4gICAgICAgIHNlYXJjaEFyZ3M6IGZhdm91cml0ZVNlYXJjaFF1ZXJ5XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlRmF2b3VyaXRlU2VhcmNoKHNlYXJjaEluZm8pO1xuICAgIH1cbiAgfVxuXG5hc3luYyBhcHBseUZhdm91cml0ZShmYXY6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICB0aGlzLmNoZWNraW5fZGF0ZSA9IG1vbWVudCgpLnNldCgnaG91cicsIDIzKS5zZXQoJ21pbnV0ZScsIDU5KTtcbiAgdGhpcy5jaGVja291dF9kYXRlID0gbW9tZW50KCkuYWRkKDEsICdkYXknKS5zZXQoJ2hvdXInLCAyMykuc2V0KCdtaW51dGUnLCA1OSk7XG4gIHRoaXMuYXBwbHlTZWFyY2hRdWVyeShmYXYpO1xufVxuXG4gIG1lc3NhZ2VDb25maWdDaGVjayhjb25maWc6IGFueSwgaXNDaGVja1Bhc3M6IGJvb2xlYW4pOiBib29sZWFuIHtcblxuICAgIGlmIChjb25maWcuY2l0eSAmJiBpc0NoZWNrUGFzcylcbiAgICAgIGlzQ2hlY2tQYXNzID1cbiAgICAgICAgdGhpcy5sb2NhdGlvbl90eXBlX3NlbGVjdCA9PT0gTG9jYXRpb25UeXBlcy5DaXR5ICYmXG4gICAgICAgIHRoaXMubG9jYXRpb24/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IGNvbmZpZy5jaXR5LnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoY29uZmlnLm5pZ2h0cyAmJiBpc0NoZWNrUGFzcykge1xuICAgICAgY29uc3QgbmlnaHRzID0gdGhpcy5oZWxwZXJzLmRheXNCZXR3ZWVuKHRoaXMuY2hlY2tpbl9kYXRlLCB0aGlzLmNoZWNrb3V0X2RhdGUpO1xuICAgICAgaXNDaGVja1Bhc3MgPSBuaWdodHMgPj0gY29uZmlnLm5pZ2h0cztcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5haXJwb3J0ICYmIGlzQ2hlY2tQYXNzKSB7XG4gICAgICBpc0NoZWNrUGFzcyA9XG4gICAgICAgIHRoaXMubG9jYXRpb25fdHlwZV9zZWxlY3QgPT09IExvY2F0aW9uVHlwZXMuQWlycG9ydCAmJlxuICAgICAgICAodGhpcy5sb2NhdGlvbj8ubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gY29uZmlnLmFpcnBvcnQudG9Mb3dlckNhc2UoKSB8fCB0aGlzLmxvY2F0aW9uPy5pYXRhPy50b0xvd2VyQ2FzZSgpID09PSBjb25maWcuYWlycG9ydC50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLnN0YXRpb24gJiYgaXNDaGVja1Bhc3MpIHtcbiAgICAgIGlzQ2hlY2tQYXNzID1cbiAgICAgICAgdGhpcy5sb2NhdGlvbl90eXBlX3NlbGVjdCA9PT0gTG9jYXRpb25UeXBlcy5UcmFpblN0YXRpb24gJiZcbiAgICAgICAgKHRoaXM/LnRyYWluc1N0YXRpb24/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IGNvbmZpZy5zdGF0aW9uLnRvTG93ZXJDYXNlKCkgfHwgdGhpcz8udHJhaW5zU3RhdGlvbj8uc3RhdGlvbkNvZGU/LnRvTG93ZXJDYXNlKCkgPT09IGNvbmZpZy5zdGF0aW9uLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmhvdGVsbmFtZSAmJiBpc0NoZWNrUGFzcykgaXNDaGVja1Bhc3MgPSB0aGlzLmhvdGVsX25hbWU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoY29uZmlnLmhvdGVsbmFtZT8udG9Mb3dlckNhc2UoKSk7XG4gICAgcmV0dXJuIGlzQ2hlY2tQYXNzO1xuICB9XG5cbiAgZ2V0UmVxdXN0ZWRIb3RlbFVwZGF0ZShiYXNrZXRpZHM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxHZXRIb3RlbEJvb2tpbmdSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZXF1ZXN0ZWRIb3RlbFVwZGF0ZUZldGNoZXIuZmV0Y2hPbmUoeyBiYXNrZXRJdGVtczogYmFza2V0aWRzIH0pO1xuICB9XG5cbiAgY3JlYXRlTG93ZXN0UHJpY2VEZXRhaWwoaG90ZWxRdWVyeTogU2VhcmNoSG90ZWxzUXVlcnlWYXJpYWJsZXMpOiBhbnkge1xuICAgIGNvbnN0IGZ1bGxIb3RlbCA9IHRoaXMuZnVsbFJlc3VsdHMuZmluZChmaG90ZWwgPT4gZmhvdGVsLmlkID09PSB0aGlzLmF2YWxpYWJpbGl0eVNlcnZpY2UubG93ZXN0UHJpY2VIb3RlbC5pZCk7XG5cbiAgICBjb25zdCBjaGVhcGVzdFJvb20gPSBmdWxsSG90ZWwuYXZhaWxhYmxlUmF0ZXMucm9vbXMucmVkdWNlKChwcmV2OiBIb3RlbFJvb21XaXRoTG9jYWxQcmljZSwgY3VycjogSG90ZWxSb29tV2l0aExvY2FsUHJpY2UpID0+IHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhwcmV2KS5sZW5ndGggPT09IDAgfHwgY3Vyci50b3RhbCA8IHByZXYudG90YWwgPyBjdXJyIDogcHJldjtcbiAgICB9LHt9KTtcblxuICAgIGlmICghT2JqZWN0LmtleXMoY2hlYXBlc3RSb29tKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBjaGVhcGVzdFJvb207XG4gICAgfVxuXG4gICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQoY2hlYXBlc3RSb29tLCBob3RlbFF1ZXJ5LCBmdWxsSG90ZWwuc291cmNlID09PSBTZXJ2aWNlUHJvdmlkZXIuU2FicmVDU0wpO1xuXG4gICAgY29uc3QgeyBhZGRyZXNzOiBob3RlbEFhZGRyZXNzIH0gPSBmdWxsSG90ZWw7XG5cbiAgICBjb25zdCBkZXRhaWxSb29tczoge1xuICAgICAgcmF0ZURlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgICByb29tRGVzY3JpcHRpb246IHN0cmluZztcbiAgICAgIHJvb21JZDogc3RyaW5nO1xuICAgICAgcm9vbVR5cGU6IHN0cmluZztcbiAgICAgIHJhdGVDb2RlOiBzdHJpbmc7XG4gICAgICBjaGVja0luOiBhbnk7XG4gICAgICBjaGVja091dDogYW55O1xuICAgICAgbmlnaHRzOiBIb3RlbE5pZ2h0W107XG4gICAgfVtdID0gW107XG5cbiAgICBpZiAoY2hlYXBlc3RSb29tKSB7XG4gICAgICBkZXRhaWxSb29tcy5wdXNoKHtcbiAgICAgICAgcmF0ZURlc2NyaXB0aW9uOlxuICAgICAgICBjaGVhcGVzdFJvb20ucmF0ZURlc2NyaXB0aW9uLFxuICAgICAgICByb29tRGVzY3JpcHRpb246IGNoZWFwZXN0Um9vbS5yb29tRGVzY3JpcHRpb24sXG4gICAgICAgIHJvb21JZDogY2hlYXBlc3RSb29tLnJvb21JZCxcbiAgICAgICAgcm9vbVR5cGU6IGNoZWFwZXN0Um9vbS5yb29tVHlwZSxcbiAgICAgICAgcmF0ZUNvZGU6IGNoZWFwZXN0Um9vbS5yYXRlQ29kZSxcbiAgICAgICAgY2hlY2tJbjogaG90ZWxRdWVyeS5zdGFydERhdGUsXG4gICAgICAgIGNoZWNrT3V0OiBob3RlbFF1ZXJ5LmVuZERhdGUsXG4gICAgICAgIG5pZ2h0czogY2hlYXBlc3RSb29tLm5pZ2h0cyB8fCBmdWxsSG90ZWwuYXZhaWxhYmxlUmF0ZXM/LnJvb21zWzBdPy5uaWdodHNcbiAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgY29uc3QgZGV0YWlsID0gIHtcbiAgICAgIGFkZGl0aW9uYWw6IGZ1bGxIb3RlbC5hdmFpbGFibGVSYXRlcz8uYWRkaXRpb25hbCxcbiAgICAgIGhvdGVsQWRkcmVzczoge1xuICAgICAgICBzdHJlZXROYW1lOiBob3RlbEFhZGRyZXNzLmFkZHJlc3NMaW5lMSxcbiAgICAgICAgdG93bjogaG90ZWxBYWRkcmVzcy5hZGRyZXNzTGluZTJcbiAgICAgICAgICA/IGhvdGVsQWFkZHJlc3MuYWRkcmVzc0xpbmUyXG4gICAgICAgICAgOiBob3RlbEFhZGRyZXNzLmNpdHlcbiAgICAgICAgICA/IGhvdGVsQWFkZHJlc3MuY2l0eVxuICAgICAgICAgIDogJ0NvbmZlcm1hJyxcbiAgICAgICAgY291bnR5OiBob3RlbEFhZGRyZXNzLmFkZHJlc3NMaW5lMyxcbiAgICAgICAgcG9zdGNvZGU6IGhvdGVsQWFkZHJlc3MucG9zdE9yWmlwQ29kZSxcbiAgICAgICAgY291bnRyeUNvZGU6IGhvdGVsQWFkZHJlc3MuY291bnRyeUNvZGVcbiAgICAgIH0sXG4gICAgICBob3RlbERlc2NyaXB0aW9uOiBmdWxsSG90ZWwuZ3JvdXAsXG4gICAgICBob3RlbEZheE51bWJlcjogaG90ZWxBYWRkcmVzcy5mYWNzaW1pbGUsXG4gICAgICBob3RlbFBob25lTnVtYmVyOiBob3RlbEFhZGRyZXNzLnRlbGVwaG9uZSxcbiAgICAgIGhvdGVsSWQ6IGZ1bGxIb3RlbC5pZCxcbiAgICAgIGhvdGVsTmFtZTogZnVsbEhvdGVsLm5hbWUsXG4gICAgICAvLyB0aGlzIHNob3VsZCBhbHdheXMgYmUgMSBhcyB3ZSBib29rIDEgcm9vbSBhcyBhIHRpbWVcbiAgICAgIG51bWJlck9mUm9vbXM6IDEsXG4gICAgICByb29tczogZGV0YWlsUm9vbXMsXG4gICAgICB0ZXJtc0FuZENvbmQ6IHRlcm1zQW5kQ29uZGl0aW9ucyxcbiAgICAgIGhvdGVsUHJlZmVycmVkOiBmdWxsSG90ZWwucHJlZmVycmVkLFxuICAgICAgaG90ZWxEaXN0YW5jZToge1xuICAgICAgICBzZWFyY2g6IGZ1bGxIb3RlbC5sb2NhdGlvbi5kaXN0YW5jZS50b0ZpeGVkKDIpLFxuICAgICAgICBhaXJwb3J0OiBmdWxsSG90ZWwudHJhbnNwb3J0cz8uZmluZChhID0+IGEudHlwZSA9PSBIb3RlbERldGFpbFR5cGVzLkFJUlBPUlQpPy5kaXN0YW5jZS50b0ZpeGVkKDIpLFxuICAgICAgICB0cmFpbjogZnVsbEhvdGVsLnRyYW5zcG9ydHM/LmZpbmQoYSA9PiBhLnR5cGUgPT0gSG90ZWxEZXRhaWxUeXBlcy5UUkFJTik/LmRpc3RhbmNlLnRvRml4ZWQoMiksXG4gICAgICAgIG1ldHJvOiBmdWxsSG90ZWwudHJhbnNwb3J0cz8uZmluZChhID0+IGEudHlwZSA9PSBIb3RlbERldGFpbFR5cGVzLk1FVFJPKT8uZGlzdGFuY2UudG9GaXhlZCgyKVxuICAgICAgfSxcbiAgICAgIGxvY2F0aW9uOiB7XG4gICAgICAgIGxvbmdpdHVkZTogZnVsbEhvdGVsLmxvY2F0aW9uLmxvbmdpdHVkZSxcbiAgICAgICAgbGF0aXR1ZGU6IGZ1bGxIb3RlbC5sb2NhdGlvbi5sYXRpdHVkZVxuICAgICAgfSxcbiAgICB9XG5cbiAgICByZXR1cm4gZGV0YWlsO1xuICB9XG5cbiAgbm9Sb29tRmlsdGVyU2VsZWN0ZWQoKTpib29sZWFuIHtcbiAgICBjb25zdCB7IHJlZnVuZGFibGVSb29tVHlwZSwgcHJpY2VSYW5nZSwgcm9vbVR5cGUsIGFjY2Vzc2libGVSb29tVHlwZSwgYnJlYWtmYXN0VHlwZSwgY3Jvd25QcmVmZXJyZWQgfSA9IHRoaXMuZmlsdGVycztcbiAgICByZXR1cm4gIWFjY2Vzc2libGVSb29tVHlwZS5sZW5ndGggJiYgIXJlZnVuZGFibGVSb29tVHlwZS5sZW5ndGggJiYgIXJvb21UeXBlLmxlbmd0aCAmJiBwcmljZVJhbmdlLm1pbiA9PT0gMCAmJiBwcmljZVJhbmdlLm1heCA9PT0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgJiYgKCFicmVha2Zhc3RUeXBlLmxlbmd0aCB8fCBicmVha2Zhc3RUeXBlLmxlbmd0aCA9PT0gMikgJiYgIWNyb3duUHJlZmVycmVkLmxlbmd0aDtcbiAgfVxuXG4gIC8vIFdlIHVzZSB0aGlzIG1ldGhvZCBmb3IgZmVhdHVyZXM6IFJlY2VudFNlYXJjaCwgRmF2b3VyaXRlU2VhcmNoLCBFeHBpcmVkQmFza2V0LCBDb3B5QmFza2V0LCBDbG9uZUJhc2tldFxuICAvLyBOb3RlOiBEbyBub3QgaW5jbHVkZSBkYXRlcyBhbmQgdGF2ZWxsZXJzIGluIHRoaXMgbWV0aG9kXG4gIGFzeW5jIGFwcGx5U2VhcmNoUXVlcnkocXVlcnk6IFNlYXJjaEhvdGVsc1F1ZXJ5VmFyaWFibGVzLCBzdGFydFNlYXJjaDogYm9vbGVhbiA9IGZhbHNlLCBjbG9uZUJhc2tldEl0ZW06IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY3VycmVuY3kgPSBxdWVyeS5jdXJyZW5jeTtcbiAgICB0aGlzLmRpc3RhbmNlID0gcXVlcnkuZGlzdGFuY2U7XG4gICAgdGhpcy5ub19vZl9yb29tcyA9IHF1ZXJ5LnJvb21zO1xuICAgIHRoaXMuaG90ZWxfbmFtZSA9IHF1ZXJ5LmhvdGVsTmFtZSA/IHF1ZXJ5LmhvdGVsTmFtZSA6IChjbG9uZUJhc2tldEl0ZW0gPyB0aGlzLmNsb25lZEJhc2tldEl0ZW1EZXRhaWxzLmhvdGVsTmFtZSA6IG51bGwpO1xuICAgIHRoaXMuaG90ZWxfY2hhaW4gPSBxdWVyeS5ncm91cE5hbWUgPyB7IG5hbWU6IHF1ZXJ5Lmdyb3VwTmFtZSB9IDogbnVsbDtcbiAgICB0aGlzLmNvdW50cnkgPSBxdWVyeS5jb3VudHJ5Q29kZSA/XG4gICAgICB0aGlzLmNvdW50cnkgPSB7XG4gICAgICAgIGNDb2RlOiBxdWVyeS5jb3VudHJ5Q29kZSxcbiAgICAgICAgY05hbWU6ICcnXG4gICAgICB9IDogbnVsbDtcblxuICAgIGlmIChxdWVyeS5vZmZpY2VJZCkge1xuICAgICAgdGhpcy5sb2NhdGlvbl90eXBlX3NlbGVjdCA9IExvY2F0aW9uVHlwZXMuT2ZmaWNlO1xuICAgIH0gZWxzZSBpZiAocXVlcnkuaWF0YSkge1xuICAgICAgdGhpcy5sb2NhdGlvbl90eXBlX3NlbGVjdCA9IExvY2F0aW9uVHlwZXMuQWlycG9ydDtcbiAgICB9IGVsc2UgaWYgKHF1ZXJ5LnRyYWluU3RhdGlvbkNvZGUpIHtcbiAgICAgIHRoaXMubG9jYXRpb25fdHlwZV9zZWxlY3QgPSBMb2NhdGlvblR5cGVzLlRyYWluU3RhdGlvbjtcbiAgICB9IGVsc2UgaWYgKCFxdWVyeS5vZmZpY2VJZCAmJiAhcXVlcnkubGF0aXR1ZGUgJiYgIXF1ZXJ5LmxvbmdpdHVkZSAmJiAhcXVlcnkuaWF0YSAmJiAhcXVlcnkudHJhaW5TdGF0aW9uQ29kZSkge1xuICAgICAgdGhpcy5sb2NhdGlvbl90eXBlX3NlbGVjdCA9IExvY2F0aW9uVHlwZXMuU2hvcnRsaXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvY2F0aW9uX3R5cGVfc2VsZWN0ID0gTG9jYXRpb25UeXBlcy5DaXR5O1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5sb2NhdGlvbl90eXBlX3NlbGVjdCkge1xuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkFpcnBvcnQ6XG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgICAgIC5nZXRBaXJwb3J0QnlDb2RlKHF1ZXJ5LmlhdGEpXG4gICAgICAgICAgLnN1YnNjcmliZSgoaWF0YTogQWlycG9ydFNlYXJjaFJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFpcnBvcnQgPSB7XG4gICAgICAgICAgICAgIGFpcnBvcnQ6IHtcbiAgICAgICAgICAgICAgICBnYXRld2F5OiBpYXRhLmlhdGFNYXRjaC5pYXRhXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmxvY2F0aW9uID0geyAuLi5haXJwb3J0LCAuLi5pYXRhLmlhdGFNYXRjaCB9O1xuICAgICAgICAgICAgaWYgKHN0YXJ0U2VhcmNoKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkNpdHk6IHtcbiAgICAgICAgY29uc3QgZmV0Y2hMb2NhdGlvbiQgPSBxdWVyeS5wb3N0T3JaaXBDb2RlICYmIHF1ZXJ5LmNvdW50cnlDb2RlXG4gICAgICAgID8gdGhpcy5zZWFyY2hTZXJ2aWNlLmdldFBvc3Rjb2RlTGlzdChxdWVyeS5wb3N0T3JaaXBDb2RlLCBxdWVyeS5jb3VudHJ5Q29kZSlcbiAgICAgICAgOiBxdWVyeS5jaXR5TmFtZVxuICAgICAgICA/IHRoaXMuc2VhcmNoU2VydmljZS5nZXRDaXR5TG9jYXRpb25zKHF1ZXJ5LmNpdHlOYW1lLCBxdWVyeS5jb3VudHJ5Q29kZSlcbiAgICAgICAgOiBudWxsO1xuXG4gICAgICAgIGZldGNoTG9jYXRpb24kLnN1YnNjcmliZSgobG9jYXRpb25zOiBMb2NhdGlvbkRldGFpbHNbXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxvY2F0aW9uTWF0Y2ggPSBxdWVyeS5wb3N0T3JaaXBDb2RlXG4gICAgICAgICAgICA/IGxvY2F0aW9ucy5maW5kKChsb2MpID0+IGxvYy5wb3N0Y29kZSA9PT0gcXVlcnkucG9zdE9yWmlwQ29kZSB8fCBsb2MubmFtZSA9PT0gcXVlcnkucG9zdE9yWmlwQ29kZSlcbiAgICAgICAgICAgIDogbG9jYXRpb25zLmZpbmQoKGxvYykgPT4gbG9jLm5hbWUgPT09IHF1ZXJ5LmNpdHlOYW1lKTtcblxuICAgICAgICAgIGlmIChxdWVyeS5wb3N0T3JaaXBDb2RlKSB7XG4gICAgICAgICAgICB0aGlzLnBvc3Rjb2RlID0gbG9jYXRpb25NYXRjaCB8fCBudWxsO1xuICAgICAgICAgICAgdGhpcy5sb2NhdGlvbiA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvbk1hdGNoIHx8IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBvc3Rjb2RlID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc3RhcnRTZWFyY2gpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5PZmZpY2U6IHtcbiAgICAgICAgY29uc3Qgb2ZmaWNlczogTG9jYXRpb25EZXRhaWxzW10gPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0T2ZmaWNlTG9jYXRpb25zTm9Vc2VyQWRkcmVzc2VzKCkudG9Qcm9taXNlKCk7XG4gICAgICAgIHRoaXMub2ZmaWNlID0gb2ZmaWNlcy5maW5kKChvZmZpY2U6IGFueSkgPT4gTnVtYmVyKG9mZmljZS5pZCkgPT09IE51bWJlcihxdWVyeS5vZmZpY2VJZCkpO1xuICAgICAgICBpZiAoc3RhcnRTZWFyY2gpIHtcbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLlRyYWluU3RhdGlvbjpcbiAgICAgICAgdGhpcy5nZXRSYWlsU3RhdGlvbkJ5Q29kZShxdWVyeS50cmFpblN0YXRpb25Db2RlKS5zdWJzY3JpYmUoXG4gICAgICAgICAgKHRyYWluc1N0YXRpb246IFJhaWxTdGF0aW9uKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRyYWluc1N0YXRpb24gPSB7XG4gICAgICAgICAgICAgIGNvdW50cnlDb2RlOiBxdWVyeS5jb3VudHJ5Q29kZSxcbiAgICAgICAgICAgICAgbGF0aXR1ZGU6IHRyYWluc1N0YXRpb24ubG9jYXRpb25EZXRhaWxzLmNvb3JkaW5hdGVzLmxhdGl0dWRlLFxuICAgICAgICAgICAgICBsb25naXR1ZGU6IHRyYWluc1N0YXRpb24ubG9jYXRpb25EZXRhaWxzLmNvb3JkaW5hdGVzLmxvbmdpdHVkZSxcbiAgICAgICAgICAgICAgbmFtZTogdHJhaW5zU3RhdGlvbi5uYW1lLFxuICAgICAgICAgICAgICBzdGF0aW9uQ29kZTogdHJhaW5zU3RhdGlvbi5zdGF0aW9uQ29kZVxuICAgICAgICAgICAgfSBhcyBMb2NhdGlvbkRldGFpbHM7XG5cbiAgICAgICAgICAgIGlmIChzdGFydFNlYXJjaCkge1xuICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuU2hvcnRsaXN0OlxuICAgICAgICBpZiAoc3RhcnRTZWFyY2gpIHtcbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcnVsZVNvcnRpbmcoKTogdm9pZHtcbiAgICBjb25zdCByZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMucmVzdWx0cy52YWx1ZSk7XG4gICAgcmVzdWx0cy5zb3J0KChmc3Q6IEhvdGVsRGV0YWlscywgc25kOiBIb3RlbERldGFpbHMpOiBudW1iZXIgPT4gK3NuZC50b3BIb3RlbCAtICtmc3QudG9wSG90ZWwpO1xuICAgIHJlc3VsdHMuc29ydCgoZnN0OiBIb3RlbERldGFpbHMsIHNuZDogSG90ZWxEZXRhaWxzKTogbnVtYmVyID0+ICtmc3QuYm90dG9tSG90ZWwgLSArc25kLmJvdHRvbUhvdGVsKTtcbiAgICB0aGlzLnJlc3VsdHMubmV4dChyZXN1bHRzKTtcbiAgfVxuXG4gIHByb2Nlc3NGaWx0ZXJzVG9EaXNwbGF5KGhvdGVsUmVzdWx0OiBIb3RlbFF1b3RlUmVzdWx0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGlkZGVuRXh0cmFGaWx0ZXJzW1NlYXJjaEhhbmRsZXIuRkVNQUxFX0ZSSUVORExZXSkge1xuICAgICAgY29uc3QgaGFzU29sb0ZlbWFsZUZyaWVuZGx5ID0gdGhpcy5pc0ZlbWFsZUZyaWVuZGx5KGhvdGVsUmVzdWx0KTtcbiAgICAgIGlmIChoYXNTb2xvRmVtYWxlRnJpZW5kbHkpIHtcbiAgICAgICAgdGhpcy5oaWRkZW5FeHRyYUZpbHRlcnNbU2VhcmNoSGFuZGxlci5GRU1BTEVfRlJJRU5ETFldID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgW0V4dHJhU2VhcmNoSGFuZGxlci5DVE1fUEFSVE5FUlMsIEV4dHJhU2VhcmNoSGFuZGxlci5GQ0RPX0hPVEVMLCBFeHRyYVNlYXJjaEhhbmRsZXIuR1JFRU5fSE9URUxdLmZvckVhY2goKGtleTogRXh0cmFTZWFyY2hIYW5kbGVyKSA9PiB7XG4gICAgICBjb25zdCB0eXBlZEtleSA9IGtleSBhcyBFeHRyYVNlYXJjaEhhbmRsZXI7XG4gICAgICBpZiAodGhpcy5oaWRkZW5FeHRyYUZpbHRlcnNbdHlwZWRLZXldKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbmRVcGRhdGVGaWx0ZXIodHlwZWRLZXksIHRoaXMuaGlkZGVuRXh0cmFGaWx0ZXJzLCBob3RlbFJlc3VsdCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLmhpZGRlbkFtZW5pdGllc0ZpbHRlcnMpLmZvckVhY2goKGtleTogQW1lbml0aWVzU2VhcmNoSGFuZGxlcikgPT4ge1xuICAgICAgY29uc3QgdHlwZWRLZXkgPSBrZXkgYXMgQW1lbml0aWVzU2VhcmNoSGFuZGxlcjtcbiAgICAgIGlmICh0aGlzLmhpZGRlbkFtZW5pdGllc0ZpbHRlcnNbdHlwZWRLZXldKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbmRVcGRhdGVGaWx0ZXIodHlwZWRLZXksIHRoaXMuaGlkZGVuQW1lbml0aWVzRmlsdGVycywgaG90ZWxSZXN1bHQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmtleXModGhpcy5oaWRkZW5TdGFyUmF0aW5nRmlsdGVycykuZm9yRWFjaCgoa2V5OiBTdGFyUmF0aW5nKSA9PiB7XG4gICAgICBjb25zdCB0eXBlZEtleSA9IGtleSBhcyBTdGFyUmF0aW5nO1xuICAgICAgaWYgKHRoaXMuaGlkZGVuU3RhclJhdGluZ0ZpbHRlcnNbdHlwZWRLZXldICkge1xuICAgICAgICAgIGxldCBzdGFyUmF0aW5nO1xuICAgICAgICAgIGlmIChrZXkgPT09IFN0YXJSYXRpbmcuVHdvU3Rhcikge1xuICAgICAgICAgICAgc3RhclJhdGluZyA9IDI7XG4gICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFN0YXJSYXRpbmcuVGhyZWVTdGFyKSB7XG4gICAgICAgICAgICBzdGFyUmF0aW5nID0gMztcbiAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gU3RhclJhdGluZy5Gb3VyU3Rhcikge1xuICAgICAgICAgICAgc3RhclJhdGluZyA9IDQ7XG4gICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFN0YXJSYXRpbmcuRml2ZVN0YXIpIHtcbiAgICAgICAgICAgIHN0YXJSYXRpbmcgPSA1O1xuICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBTdGFyUmF0aW5nLlVucmF0ZWQpIHtcbiAgICAgICAgICAgIHN0YXJSYXRpbmcgPSAtMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5oaWRkZW5TdGFyUmF0aW5nRmlsdGVyc1t0eXBlZEtleV0gPSAhKHN0YXJSYXRpbmcgPT09IGhvdGVsUmVzdWx0LnN0YXJzIHx8IChzdGFyUmF0aW5nID09PSAtMSAmJiAhaG90ZWxSZXN1bHQuc3RhcnMpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tBbmRVcGRhdGVGaWx0ZXI8VCBleHRlbmRzIHN0cmluZz4oZmlsdGVyS2V5OiBULCBmaWx0ZXJTZXQ6IFJlY29yZDxULCBib29sZWFuPiwgaG90ZWxSZXN1bHQ6IEhvdGVsUXVvdGVSZXN1bHQpOiB2b2lkIHtcbiAgICBpZiAoZmlsdGVyU2V0W2ZpbHRlcktleV0pIHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkVGFncyA9IHRoaXMuZmlsdGVyVGFncyhob3RlbFJlc3VsdC50YWdzLCBmaWx0ZXJLZXkpO1xuICAgICAgaWYgKGZpbHRlcmVkVGFncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZpbHRlclNldFtmaWx0ZXJLZXldID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1Jvb21GaWx0ZXJzVG9EaXNwbGF5KGhvdGVsOiBIb3RlbERldGFpbHMpIHtcbiAgICBjb25zdCBob3RlbE9iamVjdFZhbHVlID0gdGhpcy5nZXRIb3RlbE9iamVjdFZhbHVlKGhvdGVsKTtcbiAgICBpZiAoaG90ZWxPYmplY3RWYWx1ZSkge1xuICAgICAgaWYgKHRoaXMuaGlkZGVuRXh0cmFGaWx0ZXJzW1NlYXJjaEhhbmRsZXIuQVZBSUxBQklMSVRZXSkge1xuICAgICAgICBpZiAoaG90ZWwuYXZhaWxhYmxlUmF0ZXM/LnJvb21zPy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmhpZGRlbkV4dHJhRmlsdGVyc1tTZWFyY2hIYW5kbGVyLkFWQUlMQUJJTElUWV0gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaGlkZGVuRXh0cmFGaWx0ZXJzW1NlYXJjaEhhbmRsZXIuQUNDRVNTSUJMRV9ST09NXSkge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gdGhpcy5maWx0ZXJSb29tc0J5QWNjZXNzaWJpbGl0eShob3RlbE9iamVjdFZhbHVlKTtcbiAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuaGlkZGVuRXh0cmFGaWx0ZXJzW1NlYXJjaEhhbmRsZXIuQUNDRVNTSUJMRV9ST09NXSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5oaWRkZW5FeHRyYUZpbHRlcnNbU2VhcmNoSGFuZGxlci5SRUZVTkRBQkxFXSkge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gaG90ZWxPYmplY3RWYWx1ZS5yb29tcz8gaG90ZWxPYmplY3RWYWx1ZS5yb29tcy5maWx0ZXIoKHJvb21zOiBIb3RlbFJvb20pID0+IHtcbiAgICAgICAgICByZXR1cm4gcm9vbXM/LnBvbGljaWVzLnJlZnVuZEF2YWlsYWJsZTtcbiAgICAgICAgfSkgOiBbXTtcbiAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuaGlkZGVuRXh0cmFGaWx0ZXJzW1NlYXJjaEhhbmRsZXIuUkVGVU5EQUJMRV0gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5oaWRkZW5FeHRyYUZpbHRlcnNbU2VhcmNoSGFuZGxlci5OT05fUkVGVU5EQUJMRV0pIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGhvdGVsT2JqZWN0VmFsdWU/LnJvb21zID8gaG90ZWxPYmplY3RWYWx1ZS5yb29tcy5maWx0ZXIoKHJvb21zOiBIb3RlbFJvb20pID0+IHtcbiAgICAgICAgICByZXR1cm4gIXJvb21zPy5wb2xpY2llcy5yZWZ1bmRBdmFpbGFibGU7XG4gICAgICAgIH0pIDogW107XG5cbiAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuaGlkZGVuRXh0cmFGaWx0ZXJzW1NlYXJjaEhhbmRsZXIuTk9OX1JFRlVOREFCTEVdID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gIH1cblxuICBnZXQgZmV0Y2hpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYXZhbGlhYmlsaXR5U2VydmljZS5mZXRjaGluZy52YWx1ZTtcbiAgfVxuXG4gIGNoZWNrRm9ySG90ZWxSZW1pbmRlcihob3RlbHNlYXJjaFJlcXVlc3RlZDogYm9vbGVhbiA9IGZhbHNlKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoX29iamVjdHNbU2VydmljZVR5cGUuSG90ZWxdLmNob3NlbikgeyAvL1RoZXkndmUgYWxyZWFkeSByZXF1ZXN0ZWQgYSBob3RlbCBzbyBkb24ndCBzaG93IHRoZSBzdWdnZXN0aW9uIG1vZGFsXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zaW11bHRhbmVvdXNIb3RlbFNlYXJjaFJlcXVlc3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5GbGlnaHRdLmNob3NlbiAvL1BlcmZvcm0gaG90ZWwgc2VhcmNoIGZvciBvdmVybmlnaHQgZmxpZ2h0cyBhbHdheXNcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0RpZmZCZXR3ZWVuRGF0ZXMoXG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0ub3V0Qm91bmREYXRlLFxuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdLmluYm91bmREYXRlLFxuICAgICAgICAgIFNlcnZpY2VUeXBlLkZsaWdodCxcbiAgICAgICAgICAncmV0dXJuJ1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkV1cm9zdGFyXS5jaG9zZW4gJiZcbiAgICAgICAgaG90ZWxzZWFyY2hSZXF1ZXN0ZWRcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0RpZmZCZXR3ZWVuRGF0ZXMoXG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkV1cm9zdGFyXS5vdXRCb3VuZERhdGUsXG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkV1cm9zdGFyXS5pbmJvdW5kRGF0ZSxcbiAgICAgICAgICBTZXJ2aWNlVHlwZS5FdXJvc3RhcixcbiAgICAgICAgICAncmV0dXJuJ1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLlJhaWxdLmNob3NlbiAmJlxuICAgICAgICBob3RlbHNlYXJjaFJlcXVlc3RlZFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrRGlmZkJldHdlZW5EYXRlcyhcbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0ub3V0Qm91bmREYXRlVGltZSxcbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0uaW5Cb3VuZERhdGVUaW1lLFxuICAgICAgICAgIFNlcnZpY2VUeXBlLlJhaWwsXG4gICAgICAgICAgJ1JldHVybkpvdXJuZXknXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoX29iamVjdHNbU2VydmljZVR5cGUuQ2FyXS5jaG9zZW4gJiZcbiAgICAgICAgaG90ZWxzZWFyY2hSZXF1ZXN0ZWRcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjYXJTZWFyY2ggPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuQ2FyXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tEaWZmQmV0d2VlbkRhdGVzKFxuICAgICAgICAgIGNhclNlYXJjaC5waWNrdXBfZGF0ZXRpbWUsXG4gICAgICAgICAgY2FyU2VhcmNoLmRyb3BvZmZfZGF0ZXRpbWUsXG4gICAgICAgICAgU2VydmljZVR5cGUuQ2FyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tEaWZmQmV0d2VlbkRhdGVzKFxuICAgIG91dEJvdW5kRGF0ZTogbW9tZW50Lk1vbWVudCxcbiAgICBpbmJvdW5kRGF0ZTogbW9tZW50Lk1vbWVudCxcbiAgICB0eXBlOiBTZXJ2aWNlVHlwZSxcbiAgICBjaG9zZW5TZWFyY2hUeXBlOiBzdHJpbmcgPSBudWxsLFxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gKGNob3NlblNlYXJjaFR5cGUgJiYgKHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1t0eXBlXSBhcyBhbnkpLmNob3NlblNlYXJjaFR5cGUgPT09IGNob3NlblNlYXJjaFR5cGUgfHwgIWNob3NlblNlYXJjaFR5cGUpICYmXG4gICAgICAoIW91dEJvdW5kRGF0ZS5pc1NhbWUoaW5ib3VuZERhdGUsICdkYXRlJykgJiYgaW5ib3VuZERhdGUgPiBvdXRCb3VuZERhdGUpOyAvL0lmIHRoZXkncmUgbm90IG9uIHRoZSBzYW1lIGRhdGUsIGFuZCBpbmJvdW5kIGlzIGxhdGVyIHRoYW4gb3V0Ym91bmQsIHRoZW4gdGhlIHN0YXkgbXVzdCBiZSBhdGxlYXN0IG92ZXIgMSBuaWdodFxuICB9XG5cbn1cbiJdfQ==
|